From bc2550f64f071c2b0d12caa9fbf7ed8fe60ddeb7 Mon Sep 17 00:00:00 2001 From: amass <168062547@qq.com> Date: Mon, 26 Jun 2023 16:39:04 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=BD=95=E9=9F=B3=E6=96=87=E4=BB=B6=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E6=97=B6=EF=BC=8C=E6=98=BE=E7=A4=BA=E6=A8=A1=E6=80=81?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E9=98=B2=E6=AD=A2=E7=94=A8=E6=88=B7=E5=BF=AB?= =?UTF-8?q?=E9=80=9F=E7=82=B9=E5=87=BB=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/logo.png | Bin 2356 -> 821 bytes src/App.js | 30 +++++++-- src/AppBar.js | 10 +-- src/LoginPage.js | 92 ++++++++++--------------- src/MainPage.js | 122 +++++++++++++++------------------- src/MainSkeleton.js | 34 ---------- src/PlayerBar.js | 7 +- src/RecordLyrics.js | 3 + src/assets/appbar_logo.png | Bin 0 -> 821 bytes src/assets/empty_hint.png | Bin 0 -> 27222 bytes src/assets/logo.png | Bin 2356 -> 3383 bytes src/assets/logo@2x.png | Bin 5061 -> 12812 bytes src/business/recorderSlice.js | 35 ++++++++-- src/business/request.js | 2 + src/business/utilities.js | 31 ++++++++- src/components/RecordList.js | 7 +- 16 files changed, 192 insertions(+), 181 deletions(-) delete mode 100644 src/MainSkeleton.js create mode 100644 src/assets/appbar_logo.png create mode 100644 src/assets/empty_hint.png diff --git a/public/logo.png b/public/logo.png index 13be521945332de4bff2c98944c665ddc14c6cab..10373bdb3a233048098899d7431f5ff2cfc6ed82 100644 GIT binary patch literal 821 zcmV-51Iqk~P)Px%?@2^KR7gwJmQP4jQ5431_l;9j7!*eS!K7Rm6jTIJyL9hXW|%U;od()MGQ^G2 zA}wgq!Zu=%Iwq!+fg)5Z6+sIOvT#vZix4zM8_RLtjpKD{Z05~4rbP#a_wIXl&Uemt zzI)zLM49&a_M){9r7jQ-pF*i!(eF2WuXPZYdWlx|QL0_Fw+ABsRgoKAQc{T9-G?fCM2BnTG?eSD%S$DRKMyIHSUfaH`wAVWfoZHsyemNge+T#tPNUTN?QCb>gX2O>* zu(&8i7T8fVOS2%FT_Rp-?Knygb;m2R?m* z`T3+7$EQ?8aqO4@o0x#xx7XM3^=o+83#Av$9C@ozL2a#3 zq+}u{$Ku8fxN-&3(_ zw5J3pn{5q83!v;09L$730EUN6i#xa0enl)D9Z*wa+)JQ!b@1-pCIBN2q;JZ3tgnaG zR^v!$6I%$t_&A&|H0zHuP~YJ%x$$Cj78 z)9l*^*RO-iWzO5TZ$=m`EoOb@jJdvl4}*g+JDae-$_Mx>N;!`fLT7fi0gN*J`7=tu zrDn26uF3kUW=Q}?Q0i=4!ngXN)}#Mm#4xky-y5P)y5u!r|~G z<@Y}qtaX#n`cdCLm2|jr5|w5Nm-PazV@CZSZYoT^YZruv00000NkvXXu0mjfjh2Zn literal 2356 zcmV-43Cs40P)Px-?ny*JRA@uZT5YgZRT+MseeWSiFQRFHrKK}LGE-*!kpKrp2AP7g@o>*x`$7bM zMx~bGOwHu2nVKmpwGROU#LL}l9XO37*noouBclE>#AY;bM#~CP(0c(5;+(tRW}W-N z{n%^mb3tx*|6T8X-}hPX+Ru7FHZjOYnwtaceeF>Mc${(k`$4`wWa1o*B>{*~tp@OQ z0A&ynwJr@t$56=*4wzC8L2z4-b0QV6E~07OFjNlLYNuvk5=Qp}a>oG0794^m7UT7` z8XXF`nt(|d{S1)1Jq}esETGoKp>Vnu8=1hQpneSEdo?I~1qb$D&K)}{HOQWE5ic-N z>UIbo$n-++2I_bf8U(cKj{> zw-q${lHIP%e=UH88BQmVCyypMz5AD1pSYiFpWo)%r069A|CWh^+?bj0oz23)$LwAkCN*qNSkx z#^dl_5L2jin-|o=g&#q={4|6+S=8V1%7)=f06j#;MKtlF7T7ZYr>85EgEZ!&o*mo_ z!IvEC0?1SvV-sq3K*R8SAb1LpE@wL(^Vp0aXmxAkR+@MYB~+FoKj8rO9F3XkG!m+V z0M1We=MI|Kd;drk6rTq0*Np#y^H{1v;&Zo)54WBv6GM_RBO6gfG*?HEijvkj7XIbtYcB9 zW)fYMz#C3r#8;^GPwH3?Bn{y~DS6voGk%i193~O{d-{T8hMXL1&aYN_`oE zKe(ASxx}?GQcx|n`|No41SN`=A@QVCa66ZsQpt20^Q<%CXB61!Cc)0En>%6R8Q$El zpzZ>3pEF|KqZmB~i0df6Q%l*>j`p^3&ax$+ABXy!Efq%ha`0t9X405LUh)W|?Y80S zkU2=B-RWEy`pKip`eBq&XrhT)y9>=e6*%_*$+g*_!YKfE*$N{S81V$Pp6g-7w*fj> zQ+C$a8jw9S=5v1PR=);iI&!(0Y-zD+nwt|k`-3()p6Hh1QkwXoR7PxS8jp@-zsJIw zPGC_q8i`oubN3a9`M$BN*x^M!-{7L>ZYQd?I^;QECIEr!DR9QyOW^ zpoZy^&!3H4ZYu=N+OEeKv5;D?bCX8Y1c-AT=qfb(0IPK<5pWjc*fLt?Qw3F@+X7%( zrZDjAPk;m>T8hw*pPaoAbE}Vd%Vn?-S_fbOr8RZkR1_SD3h!tgKd=|N97U1h}#nxDqPm zFcXwg1qkfC>>rP2AWmko7ynoe=yIz>DDNf$E8zQcEDPW28+uus@&mUx*Z%rh|zc z^$vb0;oW7W>_u5Tok$HJD5YkjT;9%7>4g9I6|MjS+n%#?XJ54LrHOykTOjk#oLULu zgO-yh`V11WvoS~Cvd7|Xw6{%39sGUJPMxkk3BykV+yTJZmgur^6vSj|{aSyU!!BZ? z)TKz|8IT{#*dROhwZBEA{x3PKfJqd6932)EF3F5KaR;@2&?Pr)fJx_nAvRr_lnF}k z6BhONy>ybPWC#VM^S-hPZoS(q@1u#AWw|wMBGz-y*~FkDX$6@Ajt|hpcV>aI>%$J1 zbxOjf`H+sd4>)2uwf;sepoT55DmbO=Sk^X>asVEI(Mx=p|FEa~-VRC>-2jn!S($%Y a6#oYs1jjE_%qQvq0000 - - : } /> - } /> - + + + : } /> + } /> + + ); } diff --git a/src/AppBar.js b/src/AppBar.js index fe55427..96160c6 100644 --- a/src/AppBar.js +++ b/src/AppBar.js @@ -9,7 +9,7 @@ import MenuItem from '@mui/material/MenuItem'; import IconButton from '@mui/material/IconButton'; import Toolbar from '@mui/material/Toolbar'; import Typography from '@mui/material/Typography'; -import logo from './assets/logo.png'; +import appbar_logo from './assets/appbar_logo.png'; import { Stack, CssBaseline } from '@mui/material'; import { useCookies } from 'react-cookie'; import { useNavigate } from "react-router-dom"; @@ -40,11 +40,11 @@ export default function () { - - + 纽曼AI语记 diff --git a/src/LoginPage.js b/src/LoginPage.js index 36033c9..0a0adcb 100644 --- a/src/LoginPage.js +++ b/src/LoginPage.js @@ -16,23 +16,6 @@ import TabContext from '@mui/lab/TabContext'; import DynamicCodeForm from './components/DynamicCodeForm.js'; import PasswordForm from './components/PasswordForm.js'; import { useCookies } from 'react-cookie'; -import { createTheme, ThemeProvider } from '@mui/material/styles'; - -const theme = createTheme({ - status: { - danger: '#e53e3e', - }, - palette: { - primary: { - main: '#FF595A', - darker: '#FF595A', - }, - neutral: { - main: '#64748B', - contrastText: '#fff', - }, - }, -}); export default function () { const navigate = useNavigate(); @@ -116,48 +99,45 @@ export default function () {

纽曼AI语记

-
- - - - - - - - - + }} + > + + + + + + + - - - - - - - - - + + + + + + + + {/* */}
blob.text() - ).then(text => { - // console.log("type", record.type, text); - let payload = null; - if (record.type === 1 || record.type === 3) { - payload = JSON.parse(text) - } else { - payload = text; - } - store.dispatch(setCurrentLyric(payload)); - }); - } - - yzs.download(accessToken, record.audioUrl).then(blob => { - store.dispatch(setCurrentBlob(URL.createObjectURL(blob))); - }); -} - const ClickHanlde = styled('div', { shouldForwardProp: (prop) => prop !== 'open' })( ({ theme, open }) => ({ width: 18, @@ -105,15 +65,43 @@ const Main = styled('main', { shouldForwardProp: (prop) => prop !== 'open' })( }), ); -const RecordPlayer = ({ loading, playerBarWidth, currentTime, hasLyric, currentLyric }) => { +const LyricItem = ({ empty, hasLyric, lyricsBrowserStyle, currentLyric, currentTime }) => { + if (empty) { + return
+
+ + 这里空空如也,添加些东西吧 +
+
+ } else { + return hasLyric ? : +
+ } +} + +const RecordPlayer = ({ loading, empty, playerBarWidth, currentTime, hasLyric, currentLyric }) => { if (loading) { - return + return theme.zIndex.drawer + 1, + // marginLeft: "240px", + marginTop: "45px", + }} + open > + + } else { return
- - {hasLyric ? : -
} + +
} }; @@ -135,7 +123,7 @@ export default function () { yzs.get_record_list(accessToken, passportId).then(list => { dispatch(setList(list)); if (list.length > 0) { - fetchRecord(accessToken, list.at(0)); + dispatch(fetchRecord(accessToken, 0, list.at(0))); } }).catch(error => { console.log("get list failed", error); @@ -156,7 +144,7 @@ export default function () { } const handleResize = () => { - // console.log("innerWidth", document.documentElement.clientWidth, document.documentElement.clientWidth - (open ? 240 : 0) - 48) + // let scrollBarWidth = window.innerWidth - document.documentElement.clientWidth; setPlayerBarWidth(document.documentElement.clientWidth - (open ? 240 : 0) - 48); } @@ -172,20 +160,20 @@ export default function () { }; }, []); - useEffect(() => { handleResize(); }, [currentLyric]); + useEffect(() => { + if (!loading) handleResize(); + }, [loading]); return - - - - - -
- -
-
+ + + + +
+ +
} \ No newline at end of file diff --git a/src/MainSkeleton.js b/src/MainSkeleton.js deleted file mode 100644 index 4a34c4d..0000000 --- a/src/MainSkeleton.js +++ /dev/null @@ -1,34 +0,0 @@ -import Stack from '@mui/material/Stack'; -import Box from '@mui/material/Box'; -import Skeleton from '@mui/material/Skeleton'; -import { Container } from '@mui/material'; - -export default function () { - return ( - - - - - - - {/* For variant="text", adjust the height via font-size */} - - {/* For other variants, adjust the size with `width` and `height` */} - - - - - ); -} \ No newline at end of file diff --git a/src/PlayerBar.js b/src/PlayerBar.js index fd96309..11492e6 100644 --- a/src/PlayerBar.js +++ b/src/PlayerBar.js @@ -5,7 +5,7 @@ import pauseIcon from "./assets/play.png"; import playIcon from "./assets/pause.png"; import downloadIcon from "./assets/download.png"; import { setCurrentTime, setPauseState, togglePauseState, setCurrentWaveData } from "./business/recorderSlice.js" -import { audioWaveData, sampleInterval } from "./business/utilities" +import { audioWaveData, sampleInterval, exportRecordLyric } from "./business/utilities" import ProgressBar from "./components/ProgressBar"; const durationFormat = (time) => { @@ -17,7 +17,7 @@ const durationFormat = (time) => { return hour.toString().padStart(2, '0') + ":" + minute.toString().padStart(2, '0') + ":" + second.toString().padStart(2, '0'); } -export default function ({ width, currentTime }) { +export default function ({ width, lyric, currentTime }) { const dispatch = useDispatch(); const [duration, setDuration] = useState(0); // 秒,有小数点 const [playbackRate, setPlaybackRate] = useState(1.0); @@ -54,6 +54,7 @@ export default function ({ width, currentTime }) { link.href = currentBlob; link.download = recordList.at(currentIndex).name; link.click(); + exportRecordLyric(recordList.at(currentIndex).type, lyric, recordList.at(currentIndex).editName + ".txt"); }; const onDurationChange = (event) => { @@ -86,7 +87,7 @@ export default function ({ width, currentTime }) { display: "flex", alignItems: "center", }}> - {recordList.length > 0 ? recordList.at(currentIndex).editName : ""} + {recordList.length > 0 ? recordList.at(currentIndex).editName : "暂无内容"} diff --git a/src/RecordLyrics.js b/src/RecordLyrics.js index e591507..224a2f9 100644 --- a/src/RecordLyrics.js +++ b/src/RecordLyrics.js @@ -13,10 +13,12 @@ function isHighlight(currentTime, { start, end }) { // type: 3 --> 双语对话 const PlainText = ({ lyrics }) => { + if (typeof lyrics !== "string") return ; return
{lyrics}
} const ImportAudio = ({ lyrics, currentTime }) => { // 导入音频 + if (typeof lyrics !== "object") return ; const onClick = (index) => { console.log("onClick", index); } @@ -29,6 +31,7 @@ const ImportAudio = ({ lyrics, currentTime }) => { // 导入音频 }; const BilingualDialogue = ({ lyrics }) => { // 双语对话 + if (typeof lyrics !== "object") return ; return
{lyrics.map((lyric, index) => { return
{lyric.asr} diff --git a/src/assets/appbar_logo.png b/src/assets/appbar_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..10373bdb3a233048098899d7431f5ff2cfc6ed82 GIT binary patch literal 821 zcmV-51Iqk~P)Px%?@2^KR7gwJmQP4jQ5431_l;9j7!*eS!K7Rm6jTIJyL9hXW|%U;od()MGQ^G2 zA}wgq!Zu=%Iwq!+fg)5Z6+sIOvT#vZix4zM8_RLtjpKD{Z05~4rbP#a_wIXl&Uemt zzI)zLM49&a_M){9r7jQ-pF*i!(eF2WuXPZYdWlx|QL0_Fw+ABsRgoKAQc{T9-G?fCM2BnTG?eSD%S$DRKMyIHSUfaH`wAVWfoZHsyemNge+T#tPNUTN?QCb>gX2O>* zu(&8i7T8fVOS2%FT_Rp-?Knygb;m2R?m* z`T3+7$EQ?8aqO4@o0x#xx7XM3^=o+83#Av$9C@ozL2a#3 zq+}u{$Ku8fxN-&3(_ zw5J3pn{5q83!v;09L$730EUN6i#xa0enl)D9Z*wa+)JQ!b@1-pCIBN2q;JZ3tgnaG zR^v!$6I%$t_&A&|H0zHuP~YJ%x$$Cj78 z)9l*^*RO-iWzO5TZ$=m`EoOb@jJdvl4}*g+JDae-$_Mx>N;!`fLT7fi0gN*J`7=tu zrDn26uF3kUW=Q}?Q0i=4!ngXN)}#Mm#4xky-y5P)y5u!r|~G z<@Y}qtaX#n`cdCLm2|jr5|w5Nm-PazV@CZSZYoT^YZruv00000NkvXXu0mjfjh2Zn literal 0 HcmV?d00001 diff --git a/src/assets/empty_hint.png b/src/assets/empty_hint.png new file mode 100644 index 0000000000000000000000000000000000000000..9248aecb4ce126f9ae5e97dcd609dddd7a676bb4 GIT binary patch literal 27222 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 literal 0 HcmV?d00001 diff --git a/src/assets/logo.png b/src/assets/logo.png index 13be521945332de4bff2c98944c665ddc14c6cab..e0e300d229583cab5625a0ad1b1d5a776eeb0a10 100644 GIT binary patch literal 3383 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 N002ovPDHLkV1f|-J3asa literal 2356 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 bx+H%A$O3rudAbL;00000NkvXXu0mjf7<;FE diff --git a/src/business/recorderSlice.js b/src/business/recorderSlice.js index 436e0aa..a8ba5de 100644 --- a/src/business/recorderSlice.js +++ b/src/business/recorderSlice.js @@ -1,4 +1,5 @@ import { createSlice } from '@reduxjs/toolkit' +import yzs from "./request.js"; // type: 0 --> 声文速记 纯文本,已适配 // type: 1 --> 导入音频 @@ -62,15 +63,35 @@ export const { export default recorderSlice.reducer -const fecthRecord = (index) => { - console.log("begin fetch record item", index); +const fetchRecord = (accessToken, index, record) => { return (dispatch) => { dispatch(setLoading()); - // testPromiseLoading(2000, true).then(e => { - // console.log("end fetch record item", index); - // dispatch(setLoadFinished()); - // }); + let promises = []; + if (record.transResultUrl) { + let promise1 = yzs.download(accessToken, record.transResultUrl).then( + blob => blob.text() + ).then(text => { + // console.log("type", record.type, text); + let payload = null; + if (record.type === 1 || record.type === 3) { + payload = JSON.parse(text) + } else { + payload = text; + } + dispatch(setCurrentLyric(payload)); + }); + promises.push(promise1); + } + + let promise2 = yzs.download(accessToken, record.audioUrl).then(blob => { + dispatch(setCurrentBlob(URL.createObjectURL(blob))); + }); + + promises.push(promise2); + Promise.all(promises).then(() => { + dispatch(setLoadFinished()); + }); }; } -export { fecthRecord }; \ No newline at end of file +export { fetchRecord }; \ No newline at end of file diff --git a/src/business/request.js b/src/business/request.js index 27a3fdc..7268dd3 100644 --- a/src/business/request.js +++ b/src/business/request.js @@ -15,6 +15,7 @@ const appSecret = "c5eccccfec16d46fe9ac678d69198415"; function constructParameter(body) { let params = []; for (let key in body) { + if (key === "smsTemplateId") continue; params.push(body[key].toString()); } params.sort(); @@ -222,6 +223,7 @@ const yzs = { body.clientId = udid; body.timestamp = Math.round(new Date().getTime() / 1000); body.userCell = userCell; + body.smsTemplateId = 316; return fetch("/rest/v2/phone/send_phone_code", { method: "POST", body: constructParameter(body), diff --git a/src/business/utilities.js b/src/business/utilities.js index 8ca6a83..f202787 100644 --- a/src/business/utilities.js +++ b/src/business/utilities.js @@ -33,6 +33,35 @@ function audioWaveData(url, interval) { }); } +// type: 0 --> 声文速记 纯文本,已适配 +// type: 1 --> 导入音频 +// type: 2 --> 同传翻译 纯文本,已适配 +// type: 3 --> 双语对话 +function exportRecordLyric(type, lyric, filename) { + let element = document.createElement('a'); + + let text = ""; + if (type === 0 || type === 2) { + text = lyric; + } else if (type === 1) { + text = lyric.reduce((accumulator, currentValue) => accumulator + currentValue.text, text); + } else if (type === 3) { + text = lyric.reduce((accumulator, currentValue) => { + if (currentValue.head) return accumulator; + return accumulator + currentValue.asr + "\n" + currentValue.translate + "\n\n"; + }, text); + } + + element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text)); + element.setAttribute('download', filename); + + element.style.display = 'none'; + document.body.appendChild(element); + + element.click(); + document.body.removeChild(element); +} + function validatePhoneNumber(phoneNumber) { if (phoneNumber.length !== 11) { return false; @@ -47,4 +76,4 @@ function textHintOfValidatePhoneNumber(phoneNumber) { return "请输入正确的手机号码"; } -export { sampleInterval, audioWaveData, validatePhoneNumber, textHintOfValidatePhoneNumber }; \ No newline at end of file +export { sampleInterval, audioWaveData, validatePhoneNumber, textHintOfValidatePhoneNumber, exportRecordLyric }; \ No newline at end of file diff --git a/src/components/RecordList.js b/src/components/RecordList.js index 138d6b7..baea35e 100644 --- a/src/components/RecordList.js +++ b/src/components/RecordList.js @@ -8,19 +8,18 @@ import ListItemButton from '@mui/material/ListItemButton'; import ListItemText from '@mui/material/ListItemText'; import Typography from '@mui/material/Typography'; import Toolbar from '@mui/material/Toolbar'; -import { setCurrentIndex, fecthRecord } from "../business/recorderSlice.js" +import { setCurrentIndex, fetchRecord } from "../business/recorderSlice.js" import AccessTimeFilledIcon from '@mui/icons-material/AccessTimeFilled'; const drawerWidth = 240; -export default function ({ open, recordList, currentIndex, fetchRecord }) { +export default function ({ open, recordList, currentIndex }) { const dispatch = useDispatch(); const accessToken = useSelector(state => state.user.accessToken); const onSelected = (event, index) => { console.log("onSelected", index, recordList.at(index).transResultUrl) dispatch(setCurrentIndex(index)); - fetchRecord(accessToken, recordList.at(index)); - dispatch(fecthRecord(index)); + dispatch(fetchRecord(accessToken, index, recordList.at(index))); } return