From ff8d25358578bd39d3ab2faf73bf4894956ee918 Mon Sep 17 00:00:00 2001 From: zhangjiming Date: Thu, 6 Mar 2025 19:53:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B5=8B=E9=87=8F=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/measure/components/MeasureAction.tsx | 60 +++++++------ src/pages/measure/components/MeasureConfig.tsx | 118 ++++++++++++++++--------- src/services/measure/analysis.ts | 36 +++++++- src/services/wsTypes.ts | 3 +- src/store/features/contextSlice.ts | 7 +- 5 files changed, 148 insertions(+), 76 deletions(-) diff --git a/src/pages/measure/components/MeasureAction.tsx b/src/pages/measure/components/MeasureAction.tsx index d76826a..a9d1328 100644 --- a/src/pages/measure/components/MeasureAction.tsx +++ b/src/pages/measure/components/MeasureAction.tsx @@ -1,47 +1,55 @@ import { Button, Checkbox, CheckboxProps, Switch, RadioChangeEvent, message } from "antd"; import { useState, useEffect } from "react"; import { useNavigate } from "react-router"; -import { startMeasurement } from "../../../services/measure/analysis"; +import { saveMeasurement, startMeasurement } from "../../../services/measure/analysis"; import { createWebSocket, sharedWsUrl } from "../../../services/socket"; import GridLayer from "./graph/GridLayer"; import StandardLayer from "./graph/StandardLayer"; import ResultLayer from "./graph/ResultLayer"; import MarkLayer from "./graph/MarkLayer"; +import { useDispatch, useSelector } from "react-redux"; +import { switchMeasureAfterSave } from "../../../store/features/contextSlice"; export default function MeasureAction() { + const dispatch = useDispatch(); + const [showGrid, setShowGrid] = useState(true); const [showStandard, setShowStandard] = useState(true); const [showResult, setShowResult] = useState(true); const [showMark, setShowMark] = useState(true); + // @ts-ignore + const afterSave = useSelector(store => store.context.newMeasureAfterSave); + const navigate = useNavigate(); - const [sideVal, setSideVal] = useState<1 | 2>(1); - const onSideChange = (e: RadioChangeEvent) => { - setSideVal(e.target.value); - }; const onAfterSaveChange: CheckboxProps["onChange"] = e => { - console.log(`checked = ${e.target.checked}`); + dispatch(switchMeasureAfterSave(e.target.checked)); }; const onAnalysisBtnClick = () => { // navigate("../detail"); }; - useEffect(() => { - connectWebpacket(); - }, []); - - const connectWebpacket = () => { - //连接websocket - const wsClient = createWebSocket(sharedWsUrl); - let subscription = wsClient.dataOb.subscribe(data => {}); - wsClient.connect(); - }; - const onStart = () => { startMeasurement().then(res => { - console.log("startMeasurement===", res); - message.success("已通知设备开始测量"); + if (res.status !== 0) { + message.error(res.data.info); + } else { + message.success("已通知设备开始测量"); + } + }); + }; + + const onSaveBtnClick = () => { + saveMeasurement().then(res => { + if (res.status !== 0) { + message.error(res.data.info); + } else { + message.success("保存成功"); + if (afterSave) { + navigate("../config"); + } + } }); }; @@ -125,24 +133,18 @@ export default function MeasureAction() {

测量步骤

正在测量的状态
- {/* */} - - 保存后自动开始新测量 + + 保存后自动开始新测量 +
diff --git a/src/pages/measure/components/MeasureConfig.tsx b/src/pages/measure/components/MeasureConfig.tsx index d9ca233..97ea7d7 100644 --- a/src/pages/measure/components/MeasureConfig.tsx +++ b/src/pages/measure/components/MeasureConfig.tsx @@ -1,57 +1,91 @@ -import { Button, Form, Input, Select } from "antd"; +import { Button, Form, Input, message } from "antd"; +import { useEffect } from "react"; +import { useSelector } from "react-redux"; import { useNavigate } from "react-router"; +import { createMeasure } from "../../../services/measure/analysis"; export default function MeasureConfig() { - const navigate = useNavigate() - const onFinish = (values: any) => { - console.log('Received values of form: ', values); - navigate('../action') - }; + const navigate = useNavigate(); + const [messageApi, contextHolder] = message.useMessage(); + //@ts-ignore + const context = useSelector(store => store.context); + const onFinish = (values: any) => { + console.log("Received values of form: ", values); + createMeasure({ + operatorName: values["username"], + name: values["measureName"], + lineName: values["lineName"], + location: values["position"], + }).then(res => { + if (res.status !== 0) { + messageApi.error(res.data.info); + } else { + navigate("../action"); + } + }); + }; + + const [form] = Form.useForm(); + useEffect(() => { + form.setFieldsValue({ + username: context.loginUser.nickname || "", + }); + }, [context.loginUser.nickname, form]); return ( -
-
- - - + <> + {contextHolder} + +
+ + + + - + {/* - - + */} + {/* - - - - - - - - - - - + */} + + + + + + + + + + {/* - + */} - - - - -
+ + + + +
+ ); } diff --git a/src/services/measure/analysis.ts b/src/services/measure/analysis.ts index 6d25885..1233ce7 100644 --- a/src/services/measure/analysis.ts +++ b/src/services/measure/analysis.ts @@ -1,16 +1,46 @@ import httpRequest, { type BaseResponse } from "../httpRequest"; import type { DetailTable } from "../../services/measure/type"; + export function startMeasurement() { return httpRequest({ url: "/measurement-task/start-measurement", method: "POST", }); } - +export function stopMeasurement() { + return httpRequest({ + url: "/measurement-task/stop-measurement", + method: "POST", + }); +} +export function saveMeasurement() { + return httpRequest({ + url: "/measurement-task/save-report", + method: "POST", + }); +} export function getDetailList() { - return httpRequest>({ + return httpRequest>({ url: "/measurement-task/cache-measurement", method: "POST", }); -} \ No newline at end of file +} + +export type MeasureRecord = { + operatorName: "张三"; //操作员名称 + // trackShapeCode: "code01"; //轨形code + // verificationMethodCode: "code01"; //核校方式code + name: "某某铁路"; ///测量名称 + lineName: "河北段"; //线路名称 + location: "100米处"; //位置 + // direction: "左"; //方向 +}; + +export function createMeasure(params: MeasureRecord) { + return httpRequest({ + url: "/measurement-task/cache-measurement", + params, + method: "POST", + }); +} diff --git a/src/services/wsTypes.ts b/src/services/wsTypes.ts index 45ebbcf..bcc94bd 100644 --- a/src/services/wsTypes.ts +++ b/src/services/wsTypes.ts @@ -20,7 +20,7 @@ export type TrackRecordSig = { export type ContextMessage = { messageType: "DeviceContext"; data: { - loginFlag: Boolean; + loginFlag: boolean; loginUser: Partial<{ id: number; account: string; @@ -29,6 +29,7 @@ export type ContextMessage = { userRole: "Admin" | "User" | "Dev"; isBuiltInUser: boolean; }>; + newMeasureAfterSave: boolean; }; path: "/deviceContext"; }; diff --git a/src/store/features/contextSlice.ts b/src/store/features/contextSlice.ts index f93588b..62234b6 100644 --- a/src/store/features/contextSlice.ts +++ b/src/store/features/contextSlice.ts @@ -6,6 +6,8 @@ import { ContextMessage } from "../../services/wsTypes"; const initialState: ContextMessage["data"] = { loginFlag: false, loginUser: {}, + + newMeasureAfterSave: false, }; // 创建一个 Slice @@ -19,10 +21,13 @@ export const contextSlice = createSlice({ state.loginFlag = payload.loginFlag; state.loginUser = payload.loginUser; }, + switchMeasureAfterSave: (state, { payload }) => { + state.newMeasureAfterSave = payload; + }, }, }); // 导出加减的方法 -export const { updateUser } = contextSlice.actions; +export const { updateUser, switchMeasureAfterSave } = contextSlice.actions; // 默认导出 export default contextSlice.reducer;