diff --git a/src/assets/icon_usb.svg b/src/assets/icon_usb.svg new file mode 100644 index 0000000..1555633 --- /dev/null +++ b/src/assets/icon_usb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/Header.tsx b/src/components/Header.tsx index 6b4e1c4..19d5929 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -1,6 +1,7 @@ import { useSelector } from "react-redux"; import bluetooth_nc from "../assets/bluetooth_nc.svg"; import bluetooth_c from "../assets/bluetooth_c.svg"; +import icon_usb from "../assets/icon_usb.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"; @@ -15,22 +16,29 @@ import { loginUser } from '../services/wsTypes'; export default function Header() { const navigate = useNavigate(); const dispatch = useAppDispatch(); - let [isConnect, setIsConnect] = useState(false) + //@ts-ignoref const deviceState = useSelector(store => store.deviceState); + let [isConnect, setIsConnect] = useState(deviceState.isConnect)// const [bluetoothInfo, setBluetoothInfo] = useState(deviceState) //获取当前websocet的状态 const showBlueImg = () => { - if(!isConnect){ - return -
- -
- }else { + if(isConnect){ return - + } + return null; + // if(!isConnect){ + // return + //
+ // + //
+ // }else { + // return + // + // + // } } let list = [{ @@ -108,7 +116,7 @@ export default function Header() { return Dom } - //蓝牙已连接 + //设备已连接 const getBtContent = ()=> { return
@@ -117,7 +125,8 @@ export default function Header() {
设备已连接
-
型号:{bluetoothInfo.connectPort}
+
sn码:{bluetoothInfo.sn}
+
设备描述:{bluetoothInfo.descriptivePortName}
{/*
电量:{bluetoothInfo.power}
*/}
@@ -144,9 +153,9 @@ export default function Header() {
- {/*
+
{showBlueImg()} -
*/} +
diff --git a/src/pages/measure/components/MeasureConfig.tsx b/src/pages/measure/components/MeasureConfig.tsx index a0ced0d..ba14474 100644 --- a/src/pages/measure/components/MeasureConfig.tsx +++ b/src/pages/measure/components/MeasureConfig.tsx @@ -14,8 +14,8 @@ export default function MeasureConfig() { console.log("Received values of form: ", values); //判断是否连接了设备 if(!deviceState.isConnect){ - message.error('设备尚未连接或连接失败,请重新连接') - return; + // message.error('设备尚未连接或连接失败,请重新连接') + // return; } createMeasure({ operatorName: values["username"], diff --git a/src/pages/measure/components/MeasureDetail.tsx b/src/pages/measure/components/MeasureDetail.tsx index bed89e2..7faf6cd 100644 --- a/src/pages/measure/components/MeasureDetail.tsx +++ b/src/pages/measure/components/MeasureDetail.tsx @@ -1,11 +1,16 @@ import {getDetailList, delDetail, getDetail, getPointByUuid} from '../../../services/measure/analysis' -import { useState, useEffect } from 'react' +import { useState, useEffect, useRef } from 'react' import {message, Button, type TableColumnsType, type TableProps, Modal, Table, Pagination, Input } from 'antd'; import { useNavigate } from 'react-router-dom'; -import type { DetailTable, SearchParams } from "../../../services/measure/type"; +import type { AnalysisReport, AnalysisResults, DetailTable, SearchParams } from "../../../services/measure/type"; import { ExclamationCircleFilled } from '@ant-design/icons'; - +import { AnalysisData, BenchmarkShape, MeasurementCanvasRef } from './konva/MeasurementCanvas'; +import MeasurementCanvas from "./konva/MeasurementCanvas"; +import { + getBaseRecordPointSetByCode, + getReport +} from "../../../services/measure/analysis"; export default function MeasureDetail() { const navigate = useNavigate(); const { Search } = Input; @@ -79,21 +84,19 @@ export default function MeasureDetail() { title: '时间', dataIndex: 'createTime', }, - // { - // title: '操作', - // dataIndex: 'op', - // width:180, - // align:'center', - // render:(_, record)=>{ - // return
- // - //
- // - //
- // - //
- // } - // }, + { + title: '操作', + dataIndex: 'op', + width:180, + align:'center', + render:(_, record)=>{ + return
+ +
+ +
+ } + }, ]; const [tableData, setTableData] = useState([]) @@ -152,25 +155,58 @@ export default function MeasureDetail() { } const onShowDetail = (item:DetailTable)=> { - message.warning('正在开发中') - return; + //获取基线 + getBaseRecordPointSetByCode("6001").then(res => { + if (res.success) { + const benchmarkShapes = JSON.parse(res.data.points) as BenchmarkShape[]; + if (canvasRef.current) { + console.log("解析后的基础图形数据:", benchmarkShapes); + canvasRef.current.setBenchmarkData(benchmarkShapes); + } + } + }); getDetail({id:item.id}).then(res=>{ console.log('res==测量记录详情=', res) if(res){ + setIsModalOpen(true) //@ts-ignore getRecordByUuid(res.data.uuid) + //@ts-ignore + onDetaiResult(res.data.uuid) } }) } - const onDetaiResult = (item:DetailTable) => { - message.warning('正在开发中') - return; + //法线 + const onDetaiResult = (uuid:string) => { + getReport(uuid,'6001').then(res=> { + if (res.success) { + const report: AnalysisReport = res.data; + console.log(report); + // 更新 canvas 的分析数据 + if (report && report.angleAnalysisList) { + // 先过滤掉 distance 为 null 的数据 + const validItems = report.angleAnalysisList.filter(item => item.distance !== null); + const analysisData: AnalysisData[] = validItems.map(item => ({ + pointA: { x: parseFloat(item.pointA.x), y: parseFloat(item.pointA.y) }, + pointB: { x: parseFloat(item.pointB.x), y: parseFloat(item.pointB.y) }, + base: { x: parseFloat(item.pointA.x), y: parseFloat(item.pointA.y) }, + measure: { x: parseFloat(item.pointB.x), y: parseFloat(item.pointB.y) }, + distance: parseFloat(item.distance), + describe: item.describe, + })); + canvasRef.current?.setAnalysisData(analysisData); + } + } else { + message.error("分析报告请求失败: " + res.data.info); + } + }) + } const getRecordByUuid = (uuid:string) => { getPointByUuid({uuid}).then(res=>{ - console.log('=========================', res) + canvasRef.current?.setMeasurementData(res.data.points); }) } @@ -243,6 +279,17 @@ export default function MeasureDetail() { getDetailDataList(searchParams) } let [loading, setLoading] = useState(false) + let [isModalOpen, setIsModalOpen] = useState(false) + const canvasRef = useRef(null); + const [showGrid, setShowGrid] = useState(true); + const [showStandard, setShowStandard] = useState(true); + const [showMark, setShowMark] = useState(true); + const handleOk = () => { + + } + const handleCancel = () => { + setIsModalOpen(false) + } return (
@@ -267,7 +314,7 @@ export default function MeasureDetail() { rowKey="id" dataSource={tableData && tableData.map(item => ({ ...item, key: item.name }))} pagination={false} - scroll={{ y: 550 }} + scroll={{ y: 500 }} />
@@ -275,6 +322,36 @@ export default function MeasureDetail() {
+ + 取消 + ]} + > +
+ +
+
); } diff --git a/src/services/measure/analysis.ts b/src/services/measure/analysis.ts index 69f10f0..e47cd6f 100644 --- a/src/services/measure/analysis.ts +++ b/src/services/measure/analysis.ts @@ -92,7 +92,7 @@ export function getBaseRecordPointSetByCode(code: string) { * @param code 标准轨 code */ export function getReport(uuid: string, code: string) { - return httpRequest>({ + return httpRequest>({ url: `/measurement-analysis/report`, method: "POST", params: { uuid, code },