From e464331ce93787f3cf4a57f13f240d1b02fbc5ae Mon Sep 17 00:00:00 2001
From: LiLongLong <13717757313@163.com>
Date: Sat, 8 Mar 2025 00:13:29 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.env | 2 +-
src/App.tsx | 13 +-
src/assets/blue_round.svg | 1 +
src/assets/green_round.svg | 1 +
src/components/Header.tsx | 38 +++--
src/pages/login/Login.tsx | 6 +-
src/pages/measure/components/MeasureAction.tsx | 174 +++++++++++++++++++--
src/pages/measure/components/MeasureConfig.tsx | 13 +-
src/pages/measure/components/MeasureDetail.tsx | 48 ++++--
src/pages/measure/components/graph/GridLayer.tsx | 2 +-
src/pages/measure/components/graph/MarkLayer.tsx | 18 ++-
src/pages/measure/components/graph/ResultLayer.tsx | 26 ++-
src/services/measure/analysis.ts | 14 +-
src/services/measure/type.ts | 13 ++
src/services/wsTypes.ts | 28 +++-
src/store/features/contextSlice.ts | 3 +-
16 files changed, 332 insertions(+), 68 deletions(-)
create mode 100644 src/assets/blue_round.svg
create mode 100644 src/assets/green_round.svg
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) => {