From 56068edbe27e86fd9ac3dea21bbf6755fa74026d Mon Sep 17 00:00:00 2001 From: LiLongLong <13717757313@163.com> Date: Tue, 13 May 2025 20:08:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=B5=8B=E9=87=8F=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 2 +- package.json | 2 +- public/audio/measure_end.mp3 | Bin 0 -> 7149 bytes public/audio/measuring.mp3 | Bin 0 -> 8493 bytes public/audio/ready.mp3 | Bin 0 -> 9453 bytes public/audio/side_end.mp3 | Bin 0 -> 14925 bytes src/pages/measure/components/MeasureAction.tsx | 73 +++++++++++++++++++++---- src/services/wsTypes.ts | 22 +++++++- 8 files changed, 84 insertions(+), 15 deletions(-) create mode 100644 public/audio/measure_end.mp3 create mode 100644 public/audio/measuring.mp3 create mode 100644 public/audio/ready.mp3 create mode 100644 public/audio/side_end.mp3 diff --git a/.env b/.env index 7d3aae3..2ebbfbe 100644 --- a/.env +++ b/.env @@ -1 +1 @@ -REACT_APP_WS_URL=192.168.1.127:8080/ws \ No newline at end of file +REACT_APP_WS_URL=192.168.1.121:8080/ws \ No newline at end of file diff --git a/package.json b/package.json index ce1a638..2f58afd 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "outline", "version": "0.1.0", "private": true, - "proxy": "http://192.168.1.127:8080", + "proxy": "http://192.168.1.121:8080", "dependencies": { "@ant-design/icons": "^6.0.0", "@babel/core": "^7.16.0", diff --git a/public/audio/measure_end.mp3 b/public/audio/measure_end.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..83c86341c63f0bc1dd0768868cf27ea2d9dd6f1e GIT binary patch literal 7149 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 literal 0 HcmV?d00001 diff --git a/public/audio/ready.mp3 b/public/audio/ready.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..0db85af3942f9e75320a9d8def24f8c79d56b1a7 GIT binary patch literal 9453 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 Buc-h4 literal 0 HcmV?d00001 diff --git a/public/audio/side_end.mp3 b/public/audio/side_end.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..0df0a168374afcdfd2997edbc77deaf8063af826 GIT binary patch literal 14925 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 literal 0 HcmV?d00001 diff --git a/src/pages/measure/components/MeasureAction.tsx b/src/pages/measure/components/MeasureAction.tsx index 734f35e..5106958 100644 --- a/src/pages/measure/components/MeasureAction.tsx +++ b/src/pages/measure/components/MeasureAction.tsx @@ -13,7 +13,7 @@ import { createWebSocket, sharedWsUrl } from "../../../services/socket"; import { switchMeasureAfterSave } from "../../../store/features/contextSlice"; import measureState, { updateGxState, updateMeasureData } from "../../../store/measure/measureState"; import { AnalysisReport, trackItem } from "../../../services/measure/type"; -import { MeasureState, TaskState, TrackRecordSig } from "../../../services/wsTypes"; +import { MeasureState, ResultRecordData, TaskState, TrackRecordSig } from "../../../services/wsTypes"; import { useAppDispatch, useAppSelector } from "../../../utils/hooks"; import Gr_round from "../../../assets/green_round.svg"; import Bl_round from "../../../assets/blue_round.svg"; @@ -59,12 +59,12 @@ export default function MeasureAction() { // 初始状态列表 const initialStatusList = useMemo( () => [ - { name: "请移动到顶部,停顿2秒", background: "#ececec", isReady: false, color: STEP_COLOR_GREY }, - { name: "开始测量左侧", background: "#ececec", isReady: false, color: STEP_COLOR_GREY }, - { name: "左侧测量完成", background: "#ececec", isReady: false, color: STEP_COLOR_GREY }, - { name: "请移动到顶部,停顿2秒", background: "#ececec", isReady: false, color: STEP_COLOR_GREY }, - { name: "开始测量右侧", background: "#ececec", isReady: false, color: STEP_COLOR_GREY }, - { name: "右侧测量完成", background: "#ececec", isReady: false, color: STEP_COLOR_GREY }, + { name: "等待测量", background: "#ececec", isReady: false, color: STEP_COLOR_GREY }, + { name: "正在进行测量", background: "#ececec", isReady: false, color: STEP_COLOR_GREY }, + { name: "一侧测量完成", background: "#ececec", isReady: false, color: STEP_COLOR_GREY }, + { name: "等待测量另一侧", background: "#ececec", isReady: false, color: STEP_COLOR_GREY }, + { name: "正在进行测量", background: "#ececec", isReady: false, color: STEP_COLOR_GREY }, + { name: "测量已完成", background: "#ececec", isReady: false, color: STEP_COLOR_GREY }, ], [] ); @@ -133,6 +133,7 @@ export default function MeasureAction() { message.error("请先连接设备"); return; } + setAudioList([]) // if(deviceInfo.power < 20){ // message.error('电量低于20%,请充电后再测量!') // return @@ -162,6 +163,16 @@ export default function MeasureAction() { setStatusList(list); message.success("已通知设备开始测量"); setStartBtnText("重新测量"); + const audioReady = new Audio("/audio/ready.mp3"); + // 播放音频 + audioReady + .play() + .then(() => { + console.log("音频开始播放 已准备好"); + }) + .catch(err => { + console.error("播放音频时出错:", err); + }); } }); }, [initialStatusList, startBtnText, deviceInfo]); @@ -187,10 +198,13 @@ export default function MeasureAction() { //校准 const [showCalibration, setshowCalibration] = useState(false) + const [caloading, setCaLoading] = useState(false) + const [loadingText, setLoadingText] = useState('正在校准...') const [calibrationData, setCalibrationData] = useState([]) const onCalibrationBtnClick = () => { setCaLoading(true) + setLoadingText('正在校准...') //获取校准数据 getAlignPointsByRailSize({railSize:railSize}).then(res => { if(res.success){ @@ -201,6 +215,7 @@ export default function MeasureAction() { message.error('校准失败!') } setCaLoading(false) + setLoadingText('') }).catch(e=>{ setCaLoading(false) message.error('校准失败!') @@ -228,19 +243,36 @@ export default function MeasureAction() { } }; + const [audioList, setAudioList] = useState([]) + const pauseAudio = () => { + audioList.forEach(audio => { + console.log('-----------111-------------') + audio.pause() + }) + } /** ----------------------- WebSocket 消息处理 ----------------------- **/ useEffect(() => { // 处理任务状态消息 const handleStateMessage = (state: MeasureState["data"]) => {}; // 处理事件消息 const handleEventMessage = (type: TaskState["data"]) => { + /** + * IDLE: 空闲 + * START_MEASURE: 开始测量 + * WAITING_FOR_RECORD_THE_1ST_SIDE: 等待测量 + * RECORD_THE_FIRST_SIDE: 测量第一条曲线 + * RECORD_THE_1ST_SIDE_FINISHED: 第一条曲线测量完成 + * WAITING_FOR_RECORD_THE_2ND_SIDE: 等待测量第二条曲线 + * RECORD_THE_2ND_SIDE: 测量第二线曲线 + * FINISHED: 第二条曲线测量完成 + */ setStatusList(prev => { const updated = [...prev]; switch (type) { case "START_RECORD_LEFT": updated[0].color = STEP_COLOR_GREEN; updated[1].color = STEP_COLOR_BLUE; - const audio1 = new Audio("/audio/begin_left.mp3"); + const audio1 = new Audio("/audio/measuring.mp3"); // 播放音频 audio1 .play() @@ -250,13 +282,15 @@ export default function MeasureAction() { .catch(err => { console.error("播放音频时出错:", err); }); + setAudioList([...audioList, audio1]) break; case "FINISH_RECORD_LEFT": updated[1].color = STEP_COLOR_GREEN; updated[2].color = STEP_COLOR_GREEN; updated[3].color = STEP_COLOR_BLUE; isLeftFinished.current = true; - const audio2 = new Audio("/audio/end_left.mp3"); + pauseAudio() + const audio2 = new Audio("/audio/side_end.mp3"); // 播放音频 audio2 .play() @@ -266,11 +300,13 @@ export default function MeasureAction() { .catch(err => { console.error("播放音频时出错:", err); }); + setAudioList([...audioList, audio2]) break; case "START_RECORD_RIGHT": updated[3].color = STEP_COLOR_GREEN; updated[4].color = STEP_COLOR_BLUE; - const audio3 = new Audio("/audio/begin_right.mp3"); + pauseAudio() + const audio3 = new Audio("/audio/measuring.mp3"); // 播放音频 audio3 .play() @@ -280,12 +316,14 @@ export default function MeasureAction() { .catch(err => { console.error("播放音频时出错:", err); }); + setAudioList([...audioList, audio3]) break; case "FINISH_RECORD_RIGHT": updated[4].color = STEP_COLOR_GREEN; updated[5].color = STEP_COLOR_GREEN; setMeasurementFinished(true); - const audio4 = new Audio("/audio/end_right.mp3"); + pauseAudio() + const audio4 = new Audio("/audio/measure_end.mp3"); // 播放音频 audio4 .play() @@ -295,6 +333,8 @@ export default function MeasureAction() { .catch(err => { console.error("播放音频时出错:", err); }); + setCaLoading(true) + setLoadingText('正在处理测量数据...') break; case "WRONG_SIDE": const audio5 = new Audio("/audio/alert_left.mp3"); @@ -330,6 +370,12 @@ export default function MeasureAction() { } }; + // 处理测量后的数据 + const handleMeasureResult = (pointData: ResultRecordData["data"]) => { + canvasRef.current?.setMeasurementDataLeft([...pointData.outline1]); + canvasRef.current?.setMeasurementDataRight([...pointData.outline2]); + } + const subscription = wsClient.dataOb.subscribe(data => { if (data.path === "/api/measurement-task/get-task-state") { handleStateMessage(data.data); @@ -337,6 +383,9 @@ export default function MeasureAction() { handleEventMessage(data.data); } else if (data.path === "/api/measurement-task/point-report") { handlePointReport(data.data); + } else if (data.path === "/api/measurement-task/measure-finished") { + setCaLoading(false) + handleMeasureResult(data.data) } }); wsClient.connect(); @@ -517,7 +566,7 @@ export default function MeasureAction() { )} - +