You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
159 lines
5.9 KiB
159 lines
5.9 KiB
import { NavBar, Toast } from 'antd-mobile';
|
|
import { useEffect, useRef, useState } from 'react';
|
|
import { useNavigate, useParams } from 'react-router-dom';
|
|
import MeasurementCanvas, {
|
|
BenchmarkShape,
|
|
MeasurementCanvasRef,
|
|
} from '../components/konva/MeasurementCanvas';
|
|
import Bridge from '../utils/bridge';
|
|
import { Measurement } from '../services/apiTypes';
|
|
import { useAppDispatch, useAppSelector } from '../utils/hooks';
|
|
// import { XB_CODES } from '../utils/constant';
|
|
import { updateRailPoints } from '../store/features/baseData';
|
|
|
|
export default function MeasureRecord() {
|
|
const navigate = useNavigate();
|
|
const dispatch = useAppDispatch();
|
|
const baseState = useAppSelector((state) => state.baseData);
|
|
|
|
const params = useParams(); // params.recordId
|
|
const [measure, setMeasure] = useState<Measurement | undefined>(undefined);
|
|
const canvasRef = useRef<MeasurementCanvasRef>(null);
|
|
const back = () => navigate(-1);
|
|
|
|
useEffect(() => {
|
|
Bridge.getMeasurementDetail({ id: +(params.recordId || '') }).then((res) => {
|
|
if (res.success) {
|
|
setMeasure({ ...res.data, extraDescObj: JSON.parse(res.data.extraDesc) });
|
|
} else {
|
|
Toast.show(res.message);
|
|
}
|
|
});
|
|
}, [params.recordId]);
|
|
|
|
function drawRailBaseLine(points: string) {
|
|
const benchmarkShapes = JSON.parse(points) as BenchmarkShape[];
|
|
if (canvasRef.current) {
|
|
canvasRef.current.setBenchmarkData(benchmarkShapes);
|
|
}
|
|
}
|
|
|
|
function drawMeasurePoints(leftPoints: string, rightPoints: string) {
|
|
if (canvasRef.current) {
|
|
canvasRef.current.setMeasurementDataLeft(JSON.parse(leftPoints));
|
|
canvasRef.current.setMeasurementDataRight(JSON.parse(rightPoints));
|
|
}
|
|
}
|
|
|
|
useEffect(() => {
|
|
if (measure) {
|
|
const r = baseState.railTypes.find((rail) => rail.code === measure.railSize);
|
|
if (!r) return;
|
|
if (!!r.points) {
|
|
drawRailBaseLine(r.points);
|
|
drawMeasurePoints(measure.leftPoints, measure.rightPoints);
|
|
return;
|
|
}
|
|
Bridge.getTrackPoint({ code: r.code }).then((res) => {
|
|
if (res.success) {
|
|
dispatch(updateRailPoints(res.data));
|
|
drawRailBaseLine(res.data.points!);
|
|
drawMeasurePoints(measure.leftPoints, measure.rightPoints);
|
|
} else {
|
|
Toast.show(res.message);
|
|
}
|
|
});
|
|
}
|
|
}, [baseState.railTypes, dispatch, measure]);
|
|
|
|
// function railType(code: string) {
|
|
// const rail = baseState.railTypes.find((rail) => rail.code === code);
|
|
// return rail;
|
|
// }
|
|
|
|
// function direction(directCode: string) {
|
|
// return XB_CODES.find((dire) => dire.value === directCode);
|
|
// }
|
|
|
|
return (
|
|
<div>
|
|
<NavBar className="bg-white" onBack={back}>
|
|
测量详情
|
|
</NavBar>
|
|
<div className="main-page-content ">
|
|
<div className="relative h-0 p-0 pb-[70%] border-y border-[#dedede]">
|
|
<div className="absolute left-0 right-0 top-0 bottom-0 bg-title">
|
|
<MeasurementCanvas
|
|
width={window.innerWidth}
|
|
height={window.innerWidth * 0.7}
|
|
logicalExtent={{ minX: -45, maxX: 45, minY: -18, maxY: 52 }}
|
|
gridStep={3}
|
|
origin={{ x: 0, y: 20 }}
|
|
pixelPerMm={window.innerWidth / 90}
|
|
maxZoom={5}
|
|
showGrid={true}
|
|
showBenchmark={true}
|
|
showAnalysis={false}
|
|
showScale={false}
|
|
scaleInterval={1}
|
|
showCoordinates={false}
|
|
ref={canvasRef}
|
|
/>
|
|
</div>
|
|
</div>
|
|
<section>
|
|
<h1 className="h-10 px-4 text-base font-medium leading-10">详细信息</h1>
|
|
{measure && (
|
|
<div
|
|
className="overflow-x-hidden overflow-y-auto"
|
|
style={{
|
|
height: 'calc(100vh - var(--navBarHeight) - (100vw * 0.7) - 50px)',
|
|
}}
|
|
>
|
|
<div className="grid grid-cols-[auto_1fr] bg-white px-5 py-3 gap-x-5 gap-y-4 text-sm ">
|
|
<p className="text-[#818181]">创建时间</p>
|
|
<span className="text-text">{measure.createTime}</span>
|
|
|
|
<p className="text-[#818181]">测量名称</p>
|
|
<span className="text-text">{measure.name}</span>
|
|
|
|
<p className="text-[#818181]">批次</p>
|
|
<span className="text-text">{measure.batch}</span>
|
|
|
|
<p className="text-[#818181]">数据来源</p>
|
|
<span className="text-text">{measure.extraDescObj?.dataSource}</span>
|
|
|
|
<p className="text-[#818181]">线路分类</p>
|
|
<span className="text-text">{measure.extraDescObj?.lineClassify}</span>
|
|
|
|
<p className="text-[#818181]">轨型</p>
|
|
<span className="text-text">{measure.extraDescObj?.railSize}</span>
|
|
|
|
<p className="text-[#818181]">铁路局名称</p>
|
|
<span className="text-text">{measure.extraDescObj?.tljCode}</span>
|
|
|
|
<p className="text-[#818181]">路段名称</p>
|
|
<span className="text-text">{measure.extraDescObj?.gwdCode}</span>
|
|
|
|
<p className="text-[#818181]">线路名称</p>
|
|
<span className="text-text">{measure.extraDescObj?.xmCode}</span>
|
|
|
|
<p className="text-[#818181]">车站</p>
|
|
<span className="text-text">{measure.extraDescObj?.stationCode}</span>
|
|
|
|
<p className="text-[#818181]">方向</p>
|
|
<span className="text-text">{measure.extraDescObj?.xbCode}</span>
|
|
|
|
<p className="text-[#818181]">股别</p>
|
|
<span className="text-text">{measure.extraDescObj?.unitType}</span>
|
|
|
|
<p className="text-[#818181]">里程</p>
|
|
<span className="text-text">{`${measure.extraDescObj?.mile}公里+${measure.extraDescObj?.meter}米`}</span>
|
|
</div>
|
|
</div>
|
|
)}
|
|
</section>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|