|
|
@ -10,7 +10,7 @@ import { |
|
|
|
import { createWebSocket, sharedWsUrl } from "../../../services/socket"; |
|
|
|
import { switchMeasureAfterSave } from "../../../store/features/contextSlice"; |
|
|
|
import { AnalysisReport, AnalyzeAngle } from "../../../services/measure/type"; |
|
|
|
import { MeasureState, taskStatusDescMap } from "../../../services/wsTypes"; |
|
|
|
import { MeasureState, TaskState, taskStatusDescMap, 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"; |
|
|
@ -36,15 +36,15 @@ export default function MeasureAction() { |
|
|
|
const [showMark, setShowMark] = useState(true); |
|
|
|
const [angleMarkBackup, setAngleMarkBackup] = useState(true); |
|
|
|
const afterSave = useAppSelector(store => store.context.newMeasureAfterSave); |
|
|
|
const [angles, setAngles] = useState<AnalyzeAngle[]>([]); |
|
|
|
const [taskStatus, setTaskStatus] = useState<MeasureState["data"]["taskStatus"]>("IDLE"); |
|
|
|
// const [angles, setAngles] = useState<AnalyzeAngle[]>([]);
|
|
|
|
// const [taskStatus, setTaskStatus] = useState<MeasureState["data"]["taskStatus"]>("IDLE");
|
|
|
|
const [startBtnText, setStartBtnText] = useState("开始测量"); |
|
|
|
const [measurementFinished, setMeasurementFinished] = useState(false); |
|
|
|
const [analysisClicked, setAnalysisClicked] = useState(false); |
|
|
|
const [saveClicked, setSaveClicked] = useState(false); |
|
|
|
const [analysisReport, setAnalysisReport] = useState<AnalysisReport | null>(null); |
|
|
|
const [showAnalysisTable, setShowAnalysisTable] = useState(false); |
|
|
|
const [taskStatusName, setTaskStatusName] = useState(""); |
|
|
|
// const [taskStatusName, setTaskStatusName] = useState("");
|
|
|
|
|
|
|
|
// 初始状态列表
|
|
|
|
const initialStatusList = [ |
|
|
@ -57,7 +57,7 @@ export default function MeasureAction() { |
|
|
|
]; |
|
|
|
const [statusList, setStatusList] = useState(initialStatusList); |
|
|
|
|
|
|
|
/** ----------------------- 事件处理函数 ----------------------- **/ |
|
|
|
/** ----------------------- 事件处理函数 ----------------------- */ |
|
|
|
// 切换保存后自动开始新测量
|
|
|
|
const onAfterSaveChange: CheckboxProps["onChange"] = e => { |
|
|
|
dispatch(switchMeasureAfterSave(e.target.checked)); |
|
|
@ -115,13 +115,13 @@ export default function MeasureAction() { |
|
|
|
startMeasurement().then(res => { |
|
|
|
if (res.status !== 0) { |
|
|
|
message.error(res.data.info); |
|
|
|
setTaskStatusName(taskStatusDescMap["IDLE"]); |
|
|
|
// setTaskStatusName(taskStatusDescMap["IDLE"]);
|
|
|
|
} else { |
|
|
|
const newStatusList = [...initialStatusList]; |
|
|
|
newStatusList[0].color = "b"; |
|
|
|
setStatusList(newStatusList); |
|
|
|
message.success("已通知设备开始测量"); |
|
|
|
setTaskStatusName(taskStatusDescMap["IDLE"]); |
|
|
|
// setTaskStatusName(taskStatusDescMap["IDLE"]);
|
|
|
|
setStartBtnText("重新测量"); |
|
|
|
} |
|
|
|
}); |
|
|
@ -144,10 +144,6 @@ export default function MeasureAction() { |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
// 辅助函数:渲染状态项的背景颜色
|
|
|
|
const renderStatusBackground = (item: (typeof initialStatusList)[0]) => |
|
|
|
item.statusCode === "START_RECORD_LEFT" ? item.background : ""; |
|
|
|
|
|
|
|
// 辅助函数:渲染状态项的图标
|
|
|
|
const renderStatusIcon = (item: (typeof initialStatusList)[0]) => { |
|
|
|
if (item.color === "g") { |
|
|
@ -172,30 +168,15 @@ export default function MeasureAction() { |
|
|
|
/** ----------------------- WebSocket 消息处理 ----------------------- **/ |
|
|
|
useEffect(() => { |
|
|
|
// 处理任务状态消息
|
|
|
|
const handleStateMessage = (data: any) => { |
|
|
|
if (!data.data) return; |
|
|
|
if (data.data.taskStatus === "IDLE") { |
|
|
|
setTaskStatusName("空闲"); |
|
|
|
} else if (!data.data.isMeasuringLeftEnd) { |
|
|
|
setTaskStatusName("左侧正在测量"); |
|
|
|
setStatusList(prev => { |
|
|
|
const updated = [...prev]; |
|
|
|
updated[0].isReady = true; |
|
|
|
return updated; |
|
|
|
}); |
|
|
|
} else if (data.data.isMeasuringLeftEnd && !data.data.isMeasuringRightEnd) { |
|
|
|
setTaskStatusName("右侧正在测量"); |
|
|
|
} else { |
|
|
|
setTaskStatusName(taskStatusDescMap[data.data.taskStatus as keyof typeof taskStatusDescMap]); |
|
|
|
} |
|
|
|
setTaskStatus(data.data.taskStatus); |
|
|
|
const handleStateMessage = (state: MeasureState["data"]) => { |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
// 处理事件消息
|
|
|
|
const handleEventMessage = (data: any) => { |
|
|
|
const handleEventMessage = (type: TaskState["data"]) => { |
|
|
|
setStatusList(prev => { |
|
|
|
const updated = [...prev]; |
|
|
|
switch (data.data) { |
|
|
|
switch (type) { |
|
|
|
case "START_RECORD_LEFT": |
|
|
|
updated[0].color = "g"; |
|
|
|
updated[1].color = "b"; |
|
|
@ -263,8 +244,7 @@ export default function MeasureAction() { |
|
|
|
}; |
|
|
|
|
|
|
|
// 处理点数据消息
|
|
|
|
const handlePointReport = (data: any) => { |
|
|
|
const pointData = data.data as { x: number; y: number }; |
|
|
|
const handlePointReport = (pointData: TrackRecordSig["data"]) => { |
|
|
|
console.log(`pointData === ${pointData.x},${pointData.y}`); |
|
|
|
if (!isLeftFinished.current) { |
|
|
|
leftPoints.current.push(pointData); |
|
|
@ -275,13 +255,13 @@ export default function MeasureAction() { |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
const subscription = wsClient.dataOb.subscribe((data: any) => { |
|
|
|
if (data.messageType === "STATE" && data.path === "/measurement-task/get-task-state") { |
|
|
|
handleStateMessage(data); |
|
|
|
} else if (data.messageType === "EVENT" && data.path === "/measurement-task/event") { |
|
|
|
handleEventMessage(data); |
|
|
|
} else if (data.messageType === "STATE" && data.path === "/measurement-task/point-report") { |
|
|
|
handlePointReport(data); |
|
|
|
const subscription = wsClient.dataOb.subscribe((data) => { |
|
|
|
if ( data.path === "/measurement-task/get-task-state") { |
|
|
|
handleStateMessage(data.data); |
|
|
|
} else if (data.path === "/measurement-task/event") { |
|
|
|
handleEventMessage(data.data); |
|
|
|
} else if (data.path === "/measurement-task/point-report") { |
|
|
|
handlePointReport(data.data); |
|
|
|
} |
|
|
|
}); |
|
|
|
wsClient.connect(); |
|
|
@ -413,7 +393,7 @@ export default function MeasureAction() { |
|
|
|
{statusList.map((item, index) => ( |
|
|
|
<div |
|
|
|
key={index} |
|
|
|
style={{ background: renderStatusBackground(item), borderRadius: "20px" }} |
|
|
|
style={{ background: item.background, borderRadius: "20px" }} |
|
|
|
className="mt-[10px] h-[40px]"> |
|
|
|
<div style={{ display: "flex", lineHeight: "40px" }} className="pl-[1rem]"> |
|
|
|
{renderStatusIcon(item)} |
|
|
|