diff --git a/.env b/.env index 6e6057d..febab32 100644 --- a/.env +++ b/.env @@ -1 +1 @@ -REACT_APP_WS_URL=192.168.1.200 +REACT_APP_WS_URL=192.168.1.200:80/ws diff --git a/src/App.tsx b/src/App.tsx index 1bfa511..c989531 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -20,14 +20,13 @@ function App() { //连接websocket const wsClient = createWebSocket(sharedWsUrl); const subscription = wsClient.dataOb.subscribe(data => { - console.log("data---", data); if (data.messageType === "DeviceContext") { - if (data.data.loginFlag) { - dispatch(updateUser(data.data)); - navigate("/measure/config"); - } else { - navigate("/login"); - } + // if (data.data.loginFlag) { + // dispatch(updateUser(data.data)); + // navigate("/measure/config"); + // } else { + // navigate("/login"); + // } }else if(data.messageType === 'STATE'){ dispatch(updateDeviceState(data.data)); } diff --git a/src/assets/blue_round.svg b/src/assets/blue_round.svg new file mode 100644 index 0000000..ce14ecc --- /dev/null +++ b/src/assets/blue_round.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/green_round.svg b/src/assets/green_round.svg new file mode 100644 index 0000000..5494a0e --- /dev/null +++ b/src/assets/green_round.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/Header.tsx b/src/components/Header.tsx index 72ac097..6b4e1c4 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -4,23 +4,21 @@ import bluetooth_c from "../assets/bluetooth_c.svg"; import icon_avatar from "../assets/icon_avatar.svg"; import icon_logout from "../assets/icon_logout.svg"; import check_mark from "../assets/check_mark.svg"; -import icon_pwd from "../assets/icon_pwd.svg"; import { useState, useEffect } from "react"; -import {updateDeviceState } from '../store/device/deviceState'; -// import { bluetoothList, bluetoothInfo } from '../mock/recordList' import { Dropdown, MenuProps, message, Button, Popover } from "antd"; import { logout } from "../services/user/user"; -import { getDeviceInfo } from "../services/device/deviceState" +import { useNavigate } from "react-router"; +import { useAppDispatch } from "../utils/hooks"; +import { updateUser } from "../store/features/contextSlice"; import "./bluetooth.scss"; -import { useAppSelector } from "../utils/hooks"; -import { Device } from "../services/measure/type"; +import { loginUser } from '../services/wsTypes'; export default function Header() { - console.log('updateDeviceState---', updateDeviceState) + const navigate = useNavigate(); + const dispatch = useAppDispatch(); let [isConnect, setIsConnect] = useState(false) //@ts-ignoref const deviceState = useSelector(store => store.deviceState); const [bluetoothInfo, setBluetoothInfo] = useState(deviceState) - console.log('deviceState---',deviceState) //获取当前websocet的状态 const showBlueImg = () => { if(!isConnect){ @@ -50,12 +48,21 @@ export default function Header() { // //@ts-ignore // setbluetoothList(res.data.list) // }) + if(context.user.loginUser && context.user.loginUser.nickName){ + setNickname(context.user.loginUser.nickName) + }else{ + const user = localStorage.getItem('user') + if(user){ + let userData = JSON.parse( user || '') + setNickname(userData.nickname) + } + } }) //@ts-ignore const context = useSelector(store => store.context); const [messageApi, contextHolder] = message.useMessage(); - + const [nickname, setNickname] = useState() const items: MenuProps["items"] = [ // { // key: "1", @@ -73,6 +80,13 @@ export default function Header() { logout({}).then(res => { if (res.status !== 0) { messageApi.error(res.data.info) + }else{ + localStorage.setItem('user','') + dispatch(updateUser({ + loginFlag:false, + loginUser:{} + })); + navigate("/login"); } }) } @@ -130,13 +144,13 @@ export default function Header() {
-
+ {/*
{showBlueImg()} -
+
*/}
-

{context.user.loginFlag ? context.user.loginUser.nickname : "未登录"}

+

{ nickname || "未登录"}

diff --git a/src/pages/login/Login.tsx b/src/pages/login/Login.tsx index 933a65c..752344b 100644 --- a/src/pages/login/Login.tsx +++ b/src/pages/login/Login.tsx @@ -5,11 +5,13 @@ import img_bg from "../../assets/img_bg.jpg"; import img_logo from "../../assets/icon_logo.png"; import { useNavigate } from "react-router"; import { login } from "../../services/user/user"; +import { useAppDispatch } from "../../utils/hooks"; +import { updateUser } from "../../store/features/contextSlice"; export default function Login() { const navigate = useNavigate(); const [messageApi, contextHolder] = message.useMessage(); - + const dispatch = useAppDispatch(); const onFinish = (values: any) => { console.log("Received values of form: ", values); login({ account: values["username"], password: values["password"] }).then(res => { @@ -19,6 +21,8 @@ export default function Login() { content: res.data.info, }); } else { + dispatch(updateUser(res.data)); + localStorage.setItem('user',JSON.stringify(res.data)) navigate("/measure/config"); } }); diff --git a/src/pages/measure/components/MeasureAction.tsx b/src/pages/measure/components/MeasureAction.tsx index 1c34ede..08c1e1c 100644 --- a/src/pages/measure/components/MeasureAction.tsx +++ b/src/pages/measure/components/MeasureAction.tsx @@ -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 + }else if(item.color === 'b'){//index > 0 && statusList[index-1].isReady + return + }else if(item.color === 'h'){ + return
+ } + } + + 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 (
@@ -159,7 +290,22 @@ export default function MeasureAction() {

测量步骤

-
测量状态: {taskStatusDescMap[taskStatus]}
+ {/*
测量状态: {taskStatusDescMap[taskStatus]}
*/} + {/*
+ {taskStatus !== 'FINISHED' && +
+ +
{taskStatusName}
+
+ } + { + taskStatus === 'FINISHED' && +
+ +
{taskStatusName}
+
+ } +
*/} @@ -173,6 +319,16 @@ export default function MeasureAction() { 保存后自动开始新测量
+
+ {statusList && statusList.map((item,index) => { + return
+
+ {onHandleIcon(item, index)} +
{item.name}
+
+
+ })} +
); diff --git a/src/pages/measure/components/MeasureConfig.tsx b/src/pages/measure/components/MeasureConfig.tsx index a5488cd..046704b 100644 --- a/src/pages/measure/components/MeasureConfig.tsx +++ b/src/pages/measure/components/MeasureConfig.tsx @@ -1,5 +1,5 @@ import { Button, Form, Input, message } from "antd"; -import { useEffect } from "react"; +import { useEffect, useState } from "react"; import { useNavigate } from "react-router"; import { createMeasure } from "../../../services/measure/analysis"; import { useAppSelector } from "../../../utils/hooks"; @@ -24,13 +24,18 @@ export default function MeasureConfig() { } }); }; - + let user = localStorage.getItem('user') || '' + let userInfo = user && JSON.parse(user) || {}; + let [nickName, setNickName] = useState() + if(context.user.loginUser && context.user.loginUser.nickname){ + // setNickName(context.user.loginUser.nickname) + } const [form] = Form.useForm(); useEffect(() => { form.setFieldsValue({ - username: context.user.loginUser.nickname || "", + username: userInfo.nickname || "", }); - }, [context.user.loginUser.nickname, form]); + }, [userInfo.nickname, form]); return ( <> {contextHolder} diff --git a/src/pages/measure/components/MeasureDetail.tsx b/src/pages/measure/components/MeasureDetail.tsx index f5ef333..d3f8ee4 100644 --- a/src/pages/measure/components/MeasureDetail.tsx +++ b/src/pages/measure/components/MeasureDetail.tsx @@ -1,6 +1,6 @@ import {getDetailList, delDetail} from '../../../services/measure/analysis' import { useState, useEffect } from 'react' -import {message, Button, type TableColumnsType, type TableProps, Modal, Table } from 'antd'; +import {message, Button, type TableColumnsType, type TableProps, Modal, Table, Pagination } from 'antd'; import { useNavigate } from 'react-router-dom'; import type { DetailTable } from "../../../services/measure/type"; @@ -13,14 +13,21 @@ export default function MeasureDetail() { } useEffect(()=>{ - getDetailDataList() + const params = { + pageSize, + pageNum, + } + getDetailDataList(params) }, []) const [selectRows, setSelectedRow] = useState([]) - const rowSelection: TableProps['rowSelection'] = { + const [selectedRowKeys, setSelectedRowKeys] = useState([]); + const rowSelection = { + selectedRowKeys, onChange: (selectedRowKeys: React.Key[], selectedRows: DetailTable[]) => { console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows); setSelectedRow(selectedRows) + setSelectedRowKeys(selectedRowKeys) }, getCheckboxProps: (record: DetailTable) => ({ name: record.name, @@ -59,12 +66,15 @@ export default function MeasureDetail() { ]; const [tableData, setTableData] = useState([]) - const getDetailDataList = () => { - getDetailList().then(res => { - if(res.status === 0){ + const [total, setTotal] = useState(0) + const getDetailDataList = (params:{pageSize:number, pageNum:number}) => { + + getDetailList(params).then(res => { + if(res.success){ console.log('res====', res) //@ts-ignore setTableData(res.data.list) + setTotal(res.data.total) }else{ // setTableData(detailList) } @@ -77,8 +87,6 @@ export default function MeasureDetail() { const [selectionType, setSelectionType] = useState<'checkbox'>('checkbox'); const { confirm } = Modal; const onDel = () => { - console.log('selectedRows====', selectRows) - confirm({ title: '提示', icon: , @@ -104,9 +112,14 @@ export default function MeasureDetail() { ids:ids.join(',') } delDetail(params).then(res => { - if(res.status === 0){ - getDetailList() + if(res.success){ message.success('删除成功') + setSelectedRowKeys([]) + const params = { + pageSize, + pageNum, + } + getDetailDataList(params) } }).catch(e=> { //删除mock的数据 @@ -118,6 +131,18 @@ export default function MeasureDetail() { } + const [pageNum, setPageNum] = useState(1) + const [pageSize, setPageSize] = useState(8) + const onPageChange = (pageNum:number) => { + console.log('pageNum---', pageNum) + setPageNum(pageNum) + const params = { + pageSize, + pageNum, + } + getDetailDataList(params) + } + return (
@@ -135,8 +160,11 @@ export default function MeasureDetail() { }} rowSelection={{ type: selectionType, ...rowSelection }} columns={columns} + rowKey="id" dataSource={tableData && tableData.map(item => ({ ...item, key: item.name }))} + pagination={false} /> +
diff --git a/src/pages/measure/components/graph/GridLayer.tsx b/src/pages/measure/components/graph/GridLayer.tsx index 37b44b7..048c8e5 100644 --- a/src/pages/measure/components/graph/GridLayer.tsx +++ b/src/pages/measure/components/graph/GridLayer.tsx @@ -81,7 +81,7 @@ export default function GridLayer(props: { ctx.fillText((index * 10).toString(), xStepPx * index, yMax + 20); } for (let index = -1; index < 5; index++) { - ctx.fillText((-index * 10).toString(), -xOffset - (index > 0 ? 18 : 14), yStepPx * index + 4); + ctx.fillText((index * 10).toString(), -xOffset - (index > 0 ? 18 : 14), yStepPx * index + 4); } }, [props.colCellNum, props.columns, props.height, props.rowCellNum, props.rows, props.width, xEndPx, xStartPx, xStepPx, xUnitPx, yEndPx, yStartPx, yStepPx, yUnitPx] diff --git a/src/pages/measure/components/graph/MarkLayer.tsx b/src/pages/measure/components/graph/MarkLayer.tsx index b04045a..3818337 100644 --- a/src/pages/measure/components/graph/MarkLayer.tsx +++ b/src/pages/measure/components/graph/MarkLayer.tsx @@ -3,10 +3,10 @@ import { calculatePointOnCircle, findSymmetricPoint } from "../../../../utils"; import { AnalyzeAngle } from "../../../../services/measure/type"; const marks = [ - { x: 9.949007022412, y: 0.1650166186941, degree: -80 }, - { x: 25.35, y: 2.184814802617, degree: -60 }, - { x: -9.949007022412, y: 0.1650166186941, degree: -100 }, - { x: -25.35, y: 2.184814802617, degree: -120 }, + { x: 9.949007022412, y: 0.1650166186941, degree: -80, describe:'6°C' }, + { x: 25.35, y: -2.184814802617, degree: -60, describe:'0.6°C' }, + { x: -9.949007022412, y: 0.1650166186941, degree: -100, describe: '0.2°C'}, + { x: -20.35, y: -2.184814802617, degree: -120, describe:'1.6°C' }, ]; export default function MarkLayer(props: { @@ -32,8 +32,13 @@ export default function MarkLayer(props: { const canvasRef = useRef(null); const calcPoints = useCallback(() => { - return props.angles - .map(p => ({ ...p, y: -p.y, degree: -p.degree })) + //props.angles + return marks + .map(p => { + //@ts-ignore + let degree = parseInt(p.degree) + return { ...p, y: -p.y, degree: -degree } + }) .map(p => { const p1 = calculatePointOnCircle(p.x * unitPx, p.y * unitPx, xStepPx / 2, p.degree); const p2 = findSymmetricPoint(p1.x, p1.y, p.x * unitPx, p.y * unitPx); @@ -62,6 +67,7 @@ export default function MarkLayer(props: { ctx.save(); ctx.translate(line[2].x, line[2].y); + //@ts-ignore 这个地方原来是marks, 现在替换为lines, 0307 ctx.rotate(((marks[idx].degree + 90) * Math.PI) / 180); ctx.fillText(props.angles[idx].describe, 0, 0); ctx.restore(); diff --git a/src/pages/measure/components/graph/ResultLayer.tsx b/src/pages/measure/components/graph/ResultLayer.tsx index 0b523b8..91169c8 100644 --- a/src/pages/measure/components/graph/ResultLayer.tsx +++ b/src/pages/measure/components/graph/ResultLayer.tsx @@ -16,6 +16,7 @@ export default function ResultLayer(props: { rows: number; visibility: 'hidden' | 'visible'; }) { + console.log('props---', props) const xStartPx = props.leftPadding; const xEndPx = props.width - props.rightPadding; const xStepPx = (props.width - props.leftPadding - props.rightPadding) / props.columns; @@ -46,14 +47,19 @@ export default function ResultLayer(props: { useEffect(() => { const subscription = wsClient.dataOb.subscribe(data => { - if (data.path === "/measurement-task/get-task-state") { + let isRight = false; + if(data.path === "/measurement-task/measurement-task"){ + + } + if (data.path === "/measurement-task/event") { const canvas = canvasRef.current; if (!canvas) return; const ctx = canvas.getContext("2d"); if (!ctx) return; - - if ('event' in data.data && data.data.event === "START_RECORD_SIG") { + console.log('data.data---', data.data) + //@ts-ignore + if (data.data === "START_RECORD_LEFT") { // setRtPoints([]); pointArr.length = 0; ctx.resetTransform(); @@ -65,12 +71,18 @@ export default function ResultLayer(props: { ctx.translate(xStartPx + xOffset, yStartPx + yOffset); ctx.beginPath(); }, 0); - } else if ('event' in data.data && data.data.event === "END_RECORD_SIG") { - // + //@ts-ignore + } else if (data.data === "START_RECORD_RIGHT") { + // pointArr.length = 0; + isRight = true; } - } else if (data.path === "/measurement-task/profile-record-ctrl-sig") { + } else if (data.path === "/measurement-task/point-report") { // console.log(data.data); // setRtPoints(rtPoints.concat([data.data])); + if(isRight){ + pointArr.length = 0 + } + //@ts-ignore pointArr.push(data.data); const canvas = canvasRef.current; @@ -88,7 +100,7 @@ export default function ResultLayer(props: { ctx.lineTo(pointsPx[idx].x, pointsPx[idx].y+6); } } - ctx.stroke(); + // ctx.stroke(); } }); wsClient.connect(); diff --git a/src/services/measure/analysis.ts b/src/services/measure/analysis.ts index 9e793c6..0dcddb0 100644 --- a/src/services/measure/analysis.ts +++ b/src/services/measure/analysis.ts @@ -1,5 +1,5 @@ import httpRequest, { type BaseResponse } from "../httpRequest"; -import type { AnalyzeResult, DetailTable, MeasureRecord } from "../../services/measure/type"; +import type { AnalySisReport, AnalyzeResult, DetailTable, MeasureRecord } from "../../services/measure/type"; export function startMeasurement() { return httpRequest({ @@ -27,9 +27,10 @@ export function saveMeasurement() { }); } -export function getDetailList() { - return httpRequest>({ +export function getDetailList(params:{pageSize:number,pageNum:number}) { + return httpRequest>({ url: "/measurement-data/list", + params, method: "POST", }); } @@ -48,3 +49,10 @@ export function createMeasure(params: MeasureRecord) { method: "POST", }); } + +export function analysisReport(params:{code:number}) { + return httpRequest>({ + url: `/measurement-task/save-analysis-report/${params.code}`, + method: "POST", + }); +} diff --git a/src/services/measure/type.ts b/src/services/measure/type.ts index e8bb58e..0833e4f 100644 --- a/src/services/measure/type.ts +++ b/src/services/measure/type.ts @@ -6,6 +6,7 @@ export type DetailTable = { id:number; operatorName:string; name: string; + trackShapeCode:string; createTime: string; } @@ -34,3 +35,15 @@ export type Device ={ name: string; id:number } +export type AnalySisReport = { + pointA:{ + x: string; + y: string; + }; + pointB:{ + x: string; + y: string; + }; + distance:string; + describe:string; +} \ No newline at end of file diff --git a/src/services/wsTypes.ts b/src/services/wsTypes.ts index 74d2c8e..4790e16 100644 --- a/src/services/wsTypes.ts +++ b/src/services/wsTypes.ts @@ -1,10 +1,11 @@ // 开始、停止绘制 export type TaskState = { messageType: "EVENT"; - data: { - event: "START_RECORD_SIG" | "END_RECORD_SIG"; - }; - path: "/measurement-task/get-task-state"; + data: "START_RECORD_SIG" | "END_RECORD_SIG" | "FINISHED" | "START_RECORD_LEFT" | "FINISH_RECORD_RIGHT" | "FINISH_RECORD" | "FINISH_RECORD_LEFT" | "END_RECORD_SIG" | "END_RECORD" | "START_RECORD_RIGHT"; + // data: { + // event: "START_RECORD_SIG" | "END_RECORD_SIG" | "FINISHED" | "START_RECORD_LEFT" | "FINISH_RECORD_RIGHT" | "FINISH_RECORD" | "FINISH_RECORD_LEFT" | "END_RECORD_SIG" | "END_RECORD" | "START_RECORD_RIGHT"; + // }; + path: "/measurement-task/get-task-state" | "/measurement-task/point-report" | "/measurement-task/event"; }; // 连续上报坐标点 @@ -45,17 +46,32 @@ export type ContextMessage = { path: "/deviceContext"; }; +export type loginUser = Partial<{ + id: 3, //数据主键id + account: "test001", //用户账户 + nickname: "测试账户001", //用户昵称 + userRole: "User", //用户角色,可用值:User,Admin,Dev + isBuiltInUser: false, //是否内置用户(内置用户不可删除) +}>; + export const taskStatusDescMap: { [k in MeasureState["data"]["taskStatus"]]: string } = { IDLE: "空闲", MEASURING: "测量中", WAITING_FOR_MEASURING: "等待测量", FINISHED: "测量完成", + START_RECORD_LEFT: '', + FINISH_RECORD_RIGHT: '', + FINISH_RECORD:'', + FINISH_RECORD_LEFT: '', + END_RECORD_SIG: '', + END_RECORD: '', + START_RECORD_RIGHT : '' }; // 测量任务状态 export type MeasureState = { messageType: "STATE"; data: { - taskStatus: "IDLE" | "MEASURING" | "WAITING_FOR_MEASURING" | "FINISHED"; + taskStatus: "IDLE" | "MEASURING" | "WAITING_FOR_MEASURING" | "FINISHED" | "START_RECORD_LEFT" | "FINISH_RECORD_RIGHT" | "FINISH_RECORD" | "FINISH_RECORD_LEFT" | "END_RECORD_SIG" | "END_RECORD" | "START_RECORD_RIGHT"; measureSideCnt: 0 | 1 | 2; //已测量数量,0,1,2 最多两边(左边和右边) isMeasuringLeftEnd: boolean; //测量左侧完成 isMeasuringRightEnd: boolean; //测量右侧完成 @@ -63,7 +79,7 @@ export type MeasureState = { inStartMeasuringPos: boolean; //是否在允许开始测量的位置 // profileRecordDescription: null; //用户填写的新测量信息 }; - path: "/measurement-task/get-task-state"; + path: "/measurement-task/get-task-state" | "/measurement-task/event" | "/measurement-task/measurement-task"; }; export const defaultMeasureState = { diff --git a/src/store/features/contextSlice.ts b/src/store/features/contextSlice.ts index f2bb972..7573d93 100644 --- a/src/store/features/contextSlice.ts +++ b/src/store/features/contextSlice.ts @@ -1,7 +1,7 @@ // counterSlice.ts 文件 import { createSlice, PayloadAction } from "@reduxjs/toolkit"; -import { ContextMessage } from "../../services/wsTypes"; +import type { ContextMessage } from "../../services/wsTypes"; interface ContextSlice { user: ContextMessage["data"]; @@ -19,6 +19,7 @@ export const contextSlice = createSlice({ reducers: { updateUser: (state, action: PayloadAction) => { state.user.loginFlag = action.payload.loginFlag; + //@ts-ignore state.user.loginUser = action.payload.loginUser; }, switchMeasureAfterSave: (state, action: PayloadAction) => {