|
|
@ -1,7 +1,7 @@ |
|
|
|
import { Button, Checkbox, CheckboxProps, Switch, message } from "antd"; |
|
|
|
import { useState, useEffect } from "react"; |
|
|
|
import { useNavigate } from "react-router"; |
|
|
|
import { analyzeMeasurement, saveMeasurement, startMeasurement } from "../../../services/measure/analysis"; |
|
|
|
import { analyzeMeasurement, saveMeasurement, startMeasurement, analysisReport } from "../../../services/measure/analysis"; |
|
|
|
import { createWebSocket, sharedWsUrl } from "../../../services/socket"; |
|
|
|
import GridLayer from "./graph/GridLayer"; |
|
|
|
import StandardLayer from "./graph/StandardLayer"; |
|
|
@ -11,7 +11,8 @@ import { switchMeasureAfterSave } from "../../../store/features/contextSlice"; |
|
|
|
import { AnalyzeAngle } from "../../../services/measure/type"; |
|
|
|
import { MeasureState, taskStatusDescMap } 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' |
|
|
|
const wsClient = createWebSocket(sharedWsUrl); |
|
|
|
|
|
|
|
export default function MeasureAction() { |
|
|
@ -34,21 +35,53 @@ export default function MeasureAction() { |
|
|
|
}; |
|
|
|
const onAnalysisBtnClick = () => { |
|
|
|
// navigate("../detail");
|
|
|
|
analyzeMeasurement().then(res => { |
|
|
|
// if(taskStatus !== 'FINISHED'){
|
|
|
|
// message.error('测量还未结束')
|
|
|
|
// return;
|
|
|
|
// }
|
|
|
|
const params = {//静态数据 TODO
|
|
|
|
code: 6001 |
|
|
|
} |
|
|
|
analysisReport(params).then(res => { |
|
|
|
console.log('res===', res) |
|
|
|
if (res.success) { |
|
|
|
setAngles(res.data.angles); |
|
|
|
} else { |
|
|
|
message.error(res.data.info); |
|
|
|
const angleAnalysisList = res.data.angleAnalysisList; |
|
|
|
let angles:any = [] |
|
|
|
angleAnalysisList && angleAnalysisList.map(item => { |
|
|
|
const pointA = item.pointA; |
|
|
|
angles.push({ |
|
|
|
x: pointA.x, |
|
|
|
y: pointA.y, |
|
|
|
degree: item.describe, |
|
|
|
describe: item.describe |
|
|
|
}) |
|
|
|
}) |
|
|
|
setAngles(angles); |
|
|
|
}else{ |
|
|
|
|
|
|
|
} |
|
|
|
}); |
|
|
|
}) |
|
|
|
// analyzeMeasurement().then(res => {
|
|
|
|
// if (res.success) {
|
|
|
|
// setAngles(res.data.angles);
|
|
|
|
// } else {
|
|
|
|
// message.error(res.data.info);
|
|
|
|
// }
|
|
|
|
// });
|
|
|
|
}; |
|
|
|
|
|
|
|
const onStart = () => { |
|
|
|
startMeasurement().then(res => { |
|
|
|
if (res.status !== 0) { |
|
|
|
message.error(res.data.info); |
|
|
|
let name = taskStatusDescMap['IDLE'] |
|
|
|
setTaskStatusName(name) |
|
|
|
} else { |
|
|
|
statusList[0].color = 'b'; |
|
|
|
setStatusList(statusList) |
|
|
|
message.success("已通知设备开始测量"); |
|
|
|
let name = taskStatusDescMap['IDLE'] |
|
|
|
setTaskStatusName(name) |
|
|
|
} |
|
|
|
}); |
|
|
|
}; |
|
|
@ -66,15 +99,113 @@ export default function MeasureAction() { |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
let [taskStatusName, setTaskStatusName] = useState('') |
|
|
|
useEffect(() => { |
|
|
|
const subscription = wsClient.dataOb.subscribe(data => { |
|
|
|
if (data.messageType === "STATE" && data.path === "/measurement-task/get-task-state") { |
|
|
|
setTaskStatus(data.data.taskStatus); |
|
|
|
if(!data.data)return; |
|
|
|
if(data.data.isMeasuringLeftEnd && !data.data.isMeasuringRightEnd){ |
|
|
|
console.log('这是右侧的状态===', data.data.isMeasuringRightEnd) |
|
|
|
} |
|
|
|
if(data.data.taskStatus === 'IDLE'){ |
|
|
|
setTaskStatusName('空闲') |
|
|
|
}else if(!data.data.isMeasuringLeftEnd){//正在测量左边
|
|
|
|
setTaskStatusName('左侧正在测量') |
|
|
|
statusList[0].isReady = true; |
|
|
|
setStatusList(statusList) |
|
|
|
}else if(data.data.isMeasuringLeftEnd && !data.data.isMeasuringRightEnd){//左边为true, 右边是false时表示左边已完成,右边准备
|
|
|
|
setTaskStatusName('右侧正在测量') |
|
|
|
}else{ |
|
|
|
let name = taskStatusDescMap[data.data.taskStatus] |
|
|
|
setTaskStatusName(name) |
|
|
|
} |
|
|
|
setTaskStatus(data.data.taskStatus) |
|
|
|
} |
|
|
|
if (data.messageType === "EVENT" && data.path === "/measurement-task/event") { |
|
|
|
if(data.data === "START_RECORD_LEFT"){ |
|
|
|
statusList[0].color = 'g'; |
|
|
|
statusList[1].color = 'b'; |
|
|
|
}else if(data.data === "FINISH_RECORD_LEFT"){ |
|
|
|
statusList[1].color = 'g'; |
|
|
|
statusList[2].color = 'g'; |
|
|
|
statusList[3].color = 'b'; |
|
|
|
}else if(data.data === "START_RECORD_RIGHT"){ |
|
|
|
statusList[3].color = 'g'; |
|
|
|
statusList[4].color = 'b'; |
|
|
|
}else if(data.data === "FINISH_RECORD_RIGHT"){ |
|
|
|
statusList[4].color = 'g'; |
|
|
|
statusList[5].color = 'g'; |
|
|
|
} |
|
|
|
setStatusList(statusList) |
|
|
|
} |
|
|
|
}); |
|
|
|
wsClient.connect(); |
|
|
|
return () => subscription.unsubscribe(); |
|
|
|
}); |
|
|
|
|
|
|
|
type StatusCodeData = { |
|
|
|
statusCode: string; |
|
|
|
name: string; |
|
|
|
background: string; |
|
|
|
isReady:boolean; |
|
|
|
color: string; |
|
|
|
} |
|
|
|
const onHandleChangeStatus = (item:StatusCodeData) => { |
|
|
|
let backgroundColor = '' |
|
|
|
if(item.statusCode === 'START_RECORD_LEFT'){ |
|
|
|
backgroundColor = item.background |
|
|
|
} |
|
|
|
return backgroundColor; |
|
|
|
} |
|
|
|
|
|
|
|
const onHandleIcon =(item:StatusCodeData, index:number)=>{ |
|
|
|
if(item.color === 'g'){ |
|
|
|
return <img src={Gr_round} alt=''/> |
|
|
|
}else if(item.color === 'b'){//index > 0 && statusList[index-1].isReady
|
|
|
|
return <img src={Bl_round} alt=''/> |
|
|
|
}else if(item.color === 'h'){ |
|
|
|
return <div style={{width:'22px',height:'22px',background:'#c0c0c0',borderRadius:"50%",marginTop:'10px'}}></div> |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
let [statusList,setStatusList] = useState([{ |
|
|
|
statusCode: 'START_RECORD_LEFT', |
|
|
|
name:'请移动到顶部,停顿2秒', |
|
|
|
background:'#ececec', |
|
|
|
isReady:false, |
|
|
|
color:'h' |
|
|
|
},{ |
|
|
|
statusCode: 'START_RECORD_LEFT', |
|
|
|
name:'开始测量左侧', |
|
|
|
background:'#ececec', |
|
|
|
isReady:false, |
|
|
|
color:'h' |
|
|
|
},{ |
|
|
|
statusCode: 'START_RECORD_LEFT', |
|
|
|
name:'左测测量完成', |
|
|
|
background:'#ececec', |
|
|
|
isReady:false, |
|
|
|
color:'h' |
|
|
|
},{ |
|
|
|
statusCode: 'START_RECORD_LEFT', |
|
|
|
name:'请移动到顶部,停顿2秒', |
|
|
|
background:'#ececec', |
|
|
|
isReady:false, |
|
|
|
color:'h' |
|
|
|
},{ |
|
|
|
statusCode: 'START_RECORD_LEFT', |
|
|
|
name:'开始测量右侧', |
|
|
|
background:'#ececec', |
|
|
|
isReady:false, |
|
|
|
color:'h' |
|
|
|
},{ |
|
|
|
statusCode: 'START_RECORD_LEFT', |
|
|
|
name:'右侧测量完成', |
|
|
|
background:'#ececec', |
|
|
|
isReady:false, |
|
|
|
color:'h' |
|
|
|
}]) |
|
|
|
|
|
|
|
return ( |
|
|
|
<div className="flex h-full "> |
|
|
|
<div className="flex-none"> |
|
|
@ -159,7 +290,22 @@ export default function MeasureAction() { |
|
|
|
<div className="w-[300px] flex-none py-6"> |
|
|
|
<h1 className="font-medium text-xl text-center">测量步骤</h1> |
|
|
|
<section className="flex flex-col items-center gap-4 mt-6 border-t border-[#D8D8D8] py-4"> |
|
|
|
<div>测量状态: {taskStatusDescMap[taskStatus]}</div> |
|
|
|
{/* <div>测量状态: {taskStatusDescMap[taskStatus]}</div> */} |
|
|
|
{/* <div className="w-[200px]"> |
|
|
|
{taskStatus !== 'FINISHED' && |
|
|
|
<div className="flex"> |
|
|
|
<img src={Gr_round} alt=''/> |
|
|
|
<div className="ml-[2rem]">{taskStatusName}</div> |
|
|
|
</div> |
|
|
|
} |
|
|
|
{ |
|
|
|
taskStatus === 'FINISHED' && |
|
|
|
<div className="flex mt-[10px]"> |
|
|
|
<img src={Bl_round} alt=''/> |
|
|
|
<div className="ml-[2rem]">{taskStatusName}</div> |
|
|
|
</div> |
|
|
|
} |
|
|
|
</div> */} |
|
|
|
<Button style={{ width: 200 }} size="large" type="primary" onClick={onStart}> |
|
|
|
开始测量 |
|
|
|
</Button> |
|
|
@ -173,6 +319,16 @@ export default function MeasureAction() { |
|
|
|
保存后自动开始新测量 |
|
|
|
</Checkbox> |
|
|
|
</section> |
|
|
|
<div className="ml-[45px] w-[13rem]"> |
|
|
|
{statusList && statusList.map((item,index) => { |
|
|
|
return <div style={{background:onHandleChangeStatus(item),borderRadius:"20px"}} className="mt-[5px] h-[40px]"> |
|
|
|
<div style={{display:'flex',lineHeight:'40px'}} className="pl-[1rem]"> |
|
|
|
{onHandleIcon(item, index)} |
|
|
|
<div className="pl-[5px]">{item.name}</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
})} |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
); |
|
|
|