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 },