From 2312462cfbbae5f594e094ad2b296525e7af9a2b Mon Sep 17 00:00:00 2001 From: zhangjiming Date: Wed, 9 Apr 2025 16:45:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B1=80/=E6=AE=B5/=E7=BA=BF?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=8C=E8=BD=A6=E7=AB=99=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=8C=E5=90=8C=E6=AD=A5=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 2 +- src/App.tsx | 93 ++++++++++++++++-------- src/pages/Measure.tsx | 26 ++++--- src/pages/MeasureSave.tsx | 145 +++++++++++++++++++++++++++++++++---- src/pages/Mine2.tsx | 21 +++++- src/pages/Setting.tsx | 16 +--- src/services/apiTypes.ts | 36 +++++++-- src/store/features/baseData.ts | 21 ++++++ src/store/features/contextSlice.ts | 33 +++++++-- src/store/index.ts | 8 +- src/utils/bridge.ts | 38 +++++++++- src/utils/constant.ts | 82 ++++++++++----------- 12 files changed, 393 insertions(+), 128 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 5b82025..fab1e38 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,3 @@ { - "cSpell.words": ["Cascader"] + "cSpell.words": ["Cascader", "MINIPROF"] } diff --git a/src/App.tsx b/src/App.tsx index 75098a8..60ecb38 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,21 +1,21 @@ import React, { useEffect } from 'react'; import { Outlet, useLocation, useNavigate } from 'react-router'; -import { SafeArea, TabBar } from 'antd-mobile'; +import { Mask, SafeArea, SpinLoading, TabBar, Toast } from 'antd-mobile'; import icon_1_s from './assets/tabIcon/icon_tab1_s.svg'; import icon_1_u from './assets/tabIcon/icon_tab1_u.svg'; -import icon_2_s from './assets/tabIcon/icon_tab2_s.svg'; -import icon_2_u from './assets/tabIcon/icon_tab2_u.svg'; +// import icon_2_s from './assets/tabIcon/icon_tab2_s.svg'; +// import icon_2_u from './assets/tabIcon/icon_tab2_u.svg'; import icon_3_s from './assets/tabIcon/icon_tab3_s.svg'; import icon_3_u from './assets/tabIcon/icon_tab3_u.svg'; import icon_4_s from './assets/tabIcon/icon_tab4_s.svg'; import icon_4_u from './assets/tabIcon/icon_tab4_u.svg'; -import { appWebview, bridgeOb, emitBridgeEvent, registerBridgeFunc } from './utils/bridge'; +import Bridge, { bridgeOb, emitBridgeEvent } from './utils/bridge'; import { useAppDispatch, useAppSelector } from './utils/hooks'; import { addNewPoint, updateTaskState } from './store/features/measureSlice'; import { updateBleList, updateDevice, updateSyncProgress } from './store/features/contextSlice'; import { createWebSocket, sharedWsUrl } from './services/socket'; -import { fetchRailTypes } from './store/features/baseData'; +import { fetchOrgTree, fetchRailTypes, syncBaseData } from './store/features/baseData'; const BottomBar = () => { const navigate = useNavigate(); @@ -70,11 +70,15 @@ const BottomBar = () => { function App() { const dispatch = useAppDispatch(); const baseState = useAppSelector((state) => state.baseData); - if (baseState.railTypes.length === 0) { - dispatch(fetchRailTypes()); - } useEffect(() => { + if (baseState.railTypes.length === 0) { + dispatch(fetchRailTypes()); + } + },[baseState.railTypes.length, dispatch]) + + // 监听推送消息,更新store + useEffect(() => { const subscription = bridgeOb.subscribe((datagram) => { if (datagram.type === 'measure-event') { dispatch(updateTaskState(datagram.data)); @@ -91,32 +95,63 @@ function App() { return () => subscription.unsubscribe(); }, [dispatch]); + // 开启推送 useEffect(() => { - // registerBridgeFunc(); - if (appWebview) { - registerBridgeFunc(); - } else { - //连接websocket - const wsClient = createWebSocket(sharedWsUrl); - const subscription = wsClient.dataOb.subscribe((data) => { - emitBridgeEvent(data); - }); - wsClient.connect(); - return () => subscription.unsubscribe(); - } + // if (appWebview) { + // registerBridgeFunc(); + // } else { + //连接websocket + const wsClient = createWebSocket(sharedWsUrl); + const subscription = wsClient.dataOb.subscribe((data) => { + emitBridgeEvent(data); + }); + wsClient.connect(); + return () => subscription.unsubscribe(); + // } }, []); + // 初始同步数据 + useEffect(() => { + Bridge.needSyncBaseData().then((res) => { + if (!res.success) { + return Toast.show(res.message); + } + if (res.data.needSync) { + dispatch(syncBaseData()) + .unwrap() + .then((res) => { + if (res.success) { + dispatch(fetchOrgTree()); + } else { + Toast.show(res.message); + } + }); + } else { + dispatch(fetchOrgTree()); + } + }); + }, [dispatch]); + return ( -
- -
- -
-
- + <> +
+ +
+ +
+
+ +
+
- -
+ + +
+ +

正在同步,请稍候...

+
+
+ ); } diff --git a/src/pages/Measure.tsx b/src/pages/Measure.tsx index 60899c2..6e5069c 100644 --- a/src/pages/Measure.tsx +++ b/src/pages/Measure.tsx @@ -13,7 +13,7 @@ import { useAppDispatch, useAppSelector } from '../utils/hooks'; import { updateTaskState } from '../store/features/measureSlice'; import Bridge from '../utils/bridge'; import { selectLabeledKtjOrgs, updateRailPoints } from '../store/features/baseData'; -import { updateOrg } from '../store/features/contextSlice'; +import { refreshStationList, updateOrg } from '../store/features/contextSlice'; import { selectOrgTextArr } from '../store'; export default function Measure() { @@ -25,13 +25,11 @@ export default function Measure() { const measureState = useAppSelector((state) => state.measure); const contextState = useAppSelector((state) => state.context); const baseState = useAppSelector((state) => state.baseData); - - const canvasRef = useRef(null); - const [railPickerVisible, setRailPickerVisible] = useState(false); - const [railId, setRailId] = useState<(number | string | null)[]>([]); + const canvasRef = useRef(null); + // 默认选中第一个轨型 useEffect(() => { if (baseState.railTypes.length > 0) { @@ -39,6 +37,19 @@ export default function Measure() { } }, [baseState.railTypes]); + // 预获取车站信息 + useEffect(() => { + if (contextState.currXMCode) { + dispatch( + refreshStationList({ + tljCode: contextState.currOrgCode, + gwdCode: contextState.currGWDCode, + xmCode: contextState.currXMCode, + }) + ); + } + },[contextState.currGWDCode, contextState.currOrgCode, contextState.currXMCode, dispatch]); + function drawRailBaseLine(points: string) { const benchmarkShapes = JSON.parse(points) as BenchmarkShape[]; if (canvasRef.current) { @@ -84,11 +95,6 @@ export default function Measure() { }; const onStartClick = () => { - // if (typeof window.ReactNativeWebView !== "undefined") { - // window.ReactNativeWebView.postMessage(JSON.stringify(["add", 2, 3])); - // } else { - // console.log("当前环境不支持 React Native WebView"); - // } if (!contextState.device.connected) { Dialog.alert({ content: '蓝牙未连接,请先连接蓝牙', diff --git a/src/pages/MeasureSave.tsx b/src/pages/MeasureSave.tsx index ae55a42..f2941b7 100644 --- a/src/pages/MeasureSave.tsx +++ b/src/pages/MeasureSave.tsx @@ -3,8 +3,8 @@ import { useNavigate } from 'react-router'; import icon_arr_r from '../assets/icon_arr_s_r.svg'; import { ChangeEvent, useState } from 'react'; import { useAppDispatch, useAppSelector } from '../utils/hooks'; -import { DATA_SOURCE, LINE_CLASSIFY, XB_CODES } from '../utils/constant'; -import { SaveMeasureDTO } from '../services/apiTypes'; +import { DATA_SOURCE, LINE_CLASSIFY, UNIT_TYPES, XB_CODES } from '../utils/constant'; +import { ExtraDesc, SaveMeasureDTO } from '../services/apiTypes'; import Bridge from '../utils/bridge'; import { resetState } from '../store/features/measureSlice'; import { selectOrgTextArr } from '../store'; @@ -19,31 +19,74 @@ export default function MeasureSave() { const orgTextArr = useAppSelector(selectOrgTextArr); const [name, setName] = useState(''); + const [batch, setBatch] = useState(''); + const [mile, setMile] = useState(10); + const [meter, setMeter] = useState(10); const [railPickerVisible, setRailPickerVisible] = useState(false); const [dataSourcePickerVisible, setDataSourcePickerVisible] = useState(false); const [lineClassPickerVisible, setLineClassPickerVisible] = useState(false); - // const [railId, setRailId] = useState<(number | string | null)[]>([1]); + const [unitTypePickerVisible, setUnitTypePickerVisible] = useState(false); + const [stationPickerVisible, setStationPickerVisible] = useState(false); + const [directionCode, setDirectionCode] = useState([XB_CODES[0].value]); const [dataSourceCode, setDataSourceCode] = useState([DATA_SOURCE[0].value]); const [lineClassCode, setLineClassCode] = useState([LINE_CLASSIFY[0].value]); + const [stationCode, setStationCode] = useState([contextState.stationList[0].value]); + const [unitType, setUnitType] = useState([UNIT_TYPES[0].value]); const onInputChange = (evt: ChangeEvent) => { - setName(evt.target.value); + if (evt.target.name === 'name') { + setName(evt.target.value); + } else if (evt.target.name === 'batch') { + setBatch(evt.target.value); + } else if (evt.target.name === 'mile') { + if (/^\d*$/.test(evt.target.value)) { + setMile(+evt.target.value); + } + } else if (evt.target.name === 'meter') { + if (/^\d*$/.test(evt.target.value)) { + setMeter(+evt.target.value); + } + } }; const onSaveBtnClick = () => { if (!name) { - Toast.show('请输入测量名称'); - return; + return Toast.show('请输入测量名称'); + } + if (!batch) { + return Toast.show('请输入批次号'); } const railType = baseState.railTypes.find((r) => r.id === contextState.currRailTypeId); - const [, gwd, xm] = orgTextArr; + const [tlj, gwd, xm] = orgTextArr; + const desc: ExtraDesc = { + railSize: railType!.name, + tljCode: tlj, + gwdCode: gwd, + xmCode: xm, + xbCode: XB_CODES.find((x) => x.value === directionCode[0])!.label, + stationCode: contextState.stationList.find((s) => s.value === stationCode[0])!.label, + lineClassify: LINE_CLASSIFY.find((l) => l.value === lineClassCode[0])!.label, + dataSource: DATA_SOURCE.find((d) => d.value === dataSourceCode[0])!.label, + unitType: UNIT_TYPES.find((u) => u.value === unitType[0])!.label, + mile, + meter, + }; const dto: SaveMeasureDTO = { - operatorName: '', - trackShapeCode: railType!.code, + operator: 'klj_test', + dataType: 'MINIPROF', name, - lineName: xm, - location: gwd, - direction: directionCode[0], + batch, + railSize: railType!.code, + tljCode: contextState.currOrgCode, + gwdCode: contextState.currGWDCode, + xmCode: contextState.currXMCode, + xbCode: directionCode[0], + stationCode: stationCode[0], + lineClassify: lineClassCode[0], + dataSource: dataSourceCode[0], + unitType: unitType[0], + mileage: `${mile}+${meter.toString().padStart(3, '0')}`, + extraDesc: JSON.stringify(desc), }; Bridge.saveMeasure(dto).then((res) => { if (res.success) { @@ -70,12 +113,43 @@ export default function MeasureSave() { 测量名称 +
+
+ 批次 +
+
+ 里程 + + 公里+ + + +
setDataSourcePickerVisible(true)} @@ -88,6 +162,16 @@ export default function MeasureSave() {
setStationPickerVisible(true)} + > + 车站 + + {contextState.stationList.find((r) => r.value === stationCode[0])?.label || ''} + + arr +
+
setLineClassPickerVisible(true)} > 线路分类 @@ -96,13 +180,24 @@ export default function MeasureSave() { arr
-
setRailPickerVisible(true)}> + +
setRailPickerVisible(true)} + > 行别 {XB_CODES.find((r) => r.value === directionCode[0])?.label || ''} arr
+
setUnitTypePickerVisible(true)}> + 股别 + + {UNIT_TYPES.find((r) => r.value === unitType[0])?.label || ''} + + arr +
+ { + setUnitTypePickerVisible(false); + }} + value={unitType} + onConfirm={(v) => { + setUnitType(v as string[]); + }} + /> + { + setStationPickerVisible(false); + }} + value={stationCode} + onConfirm={(v) => { + setStationCode(v as string[]); + }} + /> ); } diff --git a/src/pages/Mine2.tsx b/src/pages/Mine2.tsx index aabc7a6..4d79ffd 100644 --- a/src/pages/Mine2.tsx +++ b/src/pages/Mine2.tsx @@ -1,10 +1,23 @@ -import { List, NavBar } from 'antd-mobile'; +import { List, NavBar, Toast } from 'antd-mobile'; -import { UnorderedListOutline, SetOutline, UploadOutline } from 'antd-mobile-icons'; +import { UnorderedListOutline, SetOutline, UploadOutline, LoopOutline } from 'antd-mobile-icons'; import { useNavigate } from 'react-router-dom'; +import { useAppDispatch } from '../utils/hooks'; +import { syncBaseData } from '../store/features/baseData'; export default function Mine2() { const navigate = useNavigate(); + const dispatch = useAppDispatch(); + + const onSync = async () => { + const res = await dispatch(syncBaseData()).unwrap(); + if (res.success) { + Toast.show('同步完成'); + } else { + Toast.show(res.message); + } + }; + return (
@@ -18,10 +31,12 @@ export default function Mine2() { } onClick={() => navigate('/measure/upload')}> 上传记录 - } onClick={() => navigate('/profile/setting')}> 设置 + } onClick={onSync}> + 同步数据 +
diff --git a/src/pages/Setting.tsx b/src/pages/Setting.tsx index b6be2ca..ab547dd 100644 --- a/src/pages/Setting.tsx +++ b/src/pages/Setting.tsx @@ -3,7 +3,7 @@ import icon_arr_r from '../assets/icon_arr_s_r.svg'; import { useEffect, useRef, useState } from 'react'; import { useNavigate } from 'react-router'; import { useAppDispatch, useAppSelector } from '../utils/hooks'; -import { fetchConfig, saveConfig } from '../store/features/contextSlice'; +import { fetchConfig, resetSettingReqStatus, saveConfig } from '../store/features/contextSlice'; import { standbyMinutes } from '../utils/constant'; export default function Setting() { @@ -14,17 +14,6 @@ export default function Setting() { const addrInput = useRef(null); const [standbyPickerVisible, setStandbyPickerVisible] = useState(false); const [selectStandby, setSelectStandby] = useState([context.setting.standbyMinutes]); - // const [addr, setAddr] = useState(''); - // const [port, setPort] = useState(80); - - // const onAddrChange = (evt: ChangeEvent) => { - // setAddr(evt.target.value); - // }; - // const onPortChange = (evt: ChangeEvent) => { - // if (/^\d*$/.test(evt.target.value)) { - // setPort(+evt.target.value); - // } - // }; useEffect(() => { if (addrInput.current && context.setting.server) { @@ -35,6 +24,9 @@ export default function Setting() { useEffect(() => { dispatch(fetchConfig()); + return () => { + dispatch(resetSettingReqStatus()); + }; }, [dispatch]); useEffect(() => { diff --git a/src/services/apiTypes.ts b/src/services/apiTypes.ts index 452fe3d..b0e273b 100644 --- a/src/services/apiTypes.ts +++ b/src/services/apiTypes.ts @@ -43,10 +43,36 @@ export type RailType = { }; export type SaveMeasureDTO = { - operatorName: string; - trackShapeCode: string; + operator: string; name: string; - lineName: string; - location: string; - direction: string; + tljCode: string; + gwdCode: string; + xmCode: string; + stationCode: string; + dataType: string; // 采集方式 + dataSource: string; + railSize: string; // 轨型 + lineClassify: string; // 线路分类 + batch: string; + xbCode: string; // 行别 + mileage: string; // 里程 + unitType: string; // 股别 + extraDesc: string; // 额外描述 +}; + +export type ExtraDesc = { + railSize: string; + tljCode: string; + gwdCode: string; + xmCode: string; + xbCode: string; + stationCode: string; + lineClassify: string; + dataSource: string; + unitType: string; + mile: number; + meter: number; }; + +export type StationItem = { key: string; value: string }; +export type StationLabelItem = { label: string; value: string }; diff --git a/src/store/features/baseData.ts b/src/store/features/baseData.ts index ec3de42..3e2a4ea 100644 --- a/src/store/features/baseData.ts +++ b/src/store/features/baseData.ts @@ -9,11 +9,13 @@ import { RootState } from '..'; interface BaseDataState { ktjOrgs: KTJOrg[]; railTypes: RailType[]; + syncingBaseData: boolean; } const initialState: BaseDataState = { ktjOrgs: ktjOrgs as KTJOrg[], railTypes: [], + syncingBaseData: false, }; export const fetchRailTypes = createAsyncThunk('base/fetchRailTypes', async (_, thunkAPI) => { @@ -21,6 +23,14 @@ export const fetchRailTypes = createAsyncThunk('base/fetchRailTypes', async (_, return res.success ? res.data : null; }); +export const syncBaseData = createAsyncThunk('base/syncBaseData', async () => { + return await Bridge.syncBaseData(); +}); + +export const fetchOrgTree = createAsyncThunk('base/fetchOrgTree', async () => { + return await Bridge.getOrgTree(); +}); + export const baseDataSlice = createSlice({ name: 'baseData', initialState, @@ -40,6 +50,17 @@ export const baseDataSlice = createSlice({ builder.addCase(fetchRailTypes.fulfilled, (state, action) => { state.railTypes = action.payload || []; }); + builder.addCase(syncBaseData.pending, (state) => { + state.syncingBaseData = true; + }); + builder.addCase(syncBaseData.fulfilled, (state) => { + state.syncingBaseData = false; + }); + builder.addCase(fetchOrgTree.fulfilled, (state, action) => { + if (action.payload.success) { + state.ktjOrgs = action.payload.data; + } + }); }, }); diff --git a/src/store/features/contextSlice.ts b/src/store/features/contextSlice.ts index 5961cdd..1622536 100644 --- a/src/store/features/contextSlice.ts +++ b/src/store/features/contextSlice.ts @@ -6,8 +6,7 @@ import { SyncProgress, } from '../../services/mobileWsType'; import Bridge from '../../utils/bridge'; -import { RootState } from '..'; -import { ReqStatus, SettingDTO } from '../../services/apiTypes'; +import { ReqStatus, SettingDTO, StationLabelItem } from '../../services/apiTypes'; interface ContextState { device: PeripheralStatus['data']; @@ -15,6 +14,7 @@ interface ContextState { currOrgCode: string; // 铁路局 currGWDCode: string; // 工务段 currXMCode: string; // 线名 + stationList: StationLabelItem[]; bleList: BleList['data']; syncProgress: SyncProgress['data']; @@ -45,6 +45,7 @@ const initialState: ContextState = { currOrgCode: orgGwdXm ? orgGwdXm[0] : '', currGWDCode: orgGwdXm ? orgGwdXm[1] : '', currXMCode: orgGwdXm ? orgGwdXm[2] : '', + stationList: [], bleList: [], syncProgress: { @@ -82,6 +83,13 @@ export const refreshSyncProgress = createAsyncThunk('context/refreshSync', async return res.success ? res.data : null; }); +export const refreshStationList = createAsyncThunk( + 'context/refreshStationList', + async (params: { tljCode: string; gwdCode: string; xmCode: string }) => { + return await Bridge.getStationList(params); + } +); + export const contextSlice = createSlice({ name: 'context', initialState, @@ -117,6 +125,11 @@ export const contextSlice = createSlice({ updateSyncProgress: (state, action: PayloadAction) => { state.syncProgress = action.payload; }, + + resetSettingReqStatus: (state) => { + state.settingReqStatus = 'idle'; + state.error = undefined; + }, }, extraReducers: (builder) => { builder.addCase(fetchConfig.pending, (state) => { @@ -145,6 +158,14 @@ export const contextSlice = createSlice({ state.syncProgress = action.payload; } }); + builder.addCase(refreshStationList.fulfilled, (state, action) => { + if (action.payload.success) { + state.stationList = action.payload.data.map((item) => ({ + label: item.value, + value: item.key, + })); + } + }); }, }); @@ -155,12 +176,8 @@ export const { updateBleList, updateBleLinkStatus, updateSyncProgress, + resetSettingReqStatus, } = contextSlice.actions; export default contextSlice.reducer; -// 铁路局、工务段、线路名 编码数组 -export const selectOrgCodes = (state: RootState) => [ - state.context.currOrgCode, - state.context.currGWDCode, - state.context.currXMCode, -]; + diff --git a/src/store/index.ts b/src/store/index.ts index 0d2632f..6f4f24c 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -1,6 +1,6 @@ import { configureStore, createSelector } from '@reduxjs/toolkit'; import measureSlice from './features/measureSlice'; -import contextSlice, { selectOrgCodes } from './features/contextSlice'; +import contextSlice from './features/contextSlice'; import historySlice from './features/historySlice'; import baseDataSlice, { selectLabeledKtjOrgs } from './features/baseData'; import { textsOfKeys } from '../utils/helper'; @@ -19,9 +19,9 @@ const store = configureStore({ // 铁路局、工务段、线路名 文本数组 export const selectOrgTextArr = createSelector( selectLabeledKtjOrgs, - selectOrgCodes, - (ktjOrgs, codes) => { - return textsOfKeys(codes, ktjOrgs); + (state: RootState) => state.context, + (ktjOrgs, ctx) => { + return textsOfKeys([ctx.currOrgCode, ctx.currGWDCode, ctx.currXMCode], ktjOrgs); } ); diff --git a/src/utils/bridge.ts b/src/utils/bridge.ts index 22199ce..fdc92c2 100644 --- a/src/utils/bridge.ts +++ b/src/utils/bridge.ts @@ -1,6 +1,13 @@ import { Subject } from 'rxjs'; import httpRequest from '../services/httpRequest'; -import { Measurement, RailType, SaveMeasureDTO, SettingDTO } from '../services/apiTypes'; +import { + KTJOrg, + Measurement, + RailType, + SaveMeasureDTO, + SettingDTO, + StationItem, +} from '../services/apiTypes'; import { MobileDatagram, SyncProgress } from '../services/mobileWsType'; declare global { @@ -329,10 +336,39 @@ export default class Bridge { }); } static saveMeasure(params: SaveMeasureDTO) { + console.log('保存测量 入参:', params); return httpRequest({ url: '/api/measure/save', method: 'POST', params, }); } + static getOrgTree() { + return httpRequest>({ + url: '/api/basic/org', + method: 'POST', + params: {}, + }); + } + static getStationList(params: { tljCode: string; gwdCode: string; xmCode: string }) { + return httpRequest>({ + url: '/api/basic/station', + method: 'POST', + params, + }); + } + static needSyncBaseData() { + return httpRequest>({ + url: '/api/basic/ktj/check', + method: 'POST', + params: {}, + }); + } + static syncBaseData() { + return httpRequest({ + url: '/api/basic/ktj/update', + method: 'POST', + params: {}, + }); + } } diff --git a/src/utils/constant.ts b/src/utils/constant.ts index c9ab7df..e337039 100644 --- a/src/utils/constant.ts +++ b/src/utils/constant.ts @@ -1690,7 +1690,7 @@ export const MILE_TYPES_MAP = { }; //股别 type 1:直线 2:曲线 -export const RAIN_TYPES = [ +export const UNIT_TYPES = [ { label: '左股', value: 'SL', @@ -1701,26 +1701,26 @@ export const RAIN_TYPES = [ value: 'SR', type: 1, }, - { - label: '上股 左股', - value: 'HL', - type: 2, - }, - { - label: '上股 右股', - value: 'HR', - type: 2, - }, - { - label: '下股 左股', - value: 'LL', - type: 2, - }, - { - label: '下股 右股', - value: 'LR', - type: 2, - }, + // { + // label: '上股 左股', + // value: 'HL', + // type: 2, + // }, + // { + // label: '上股 右股', + // value: 'HR', + // type: 2, + // }, + // { + // label: '下股 左股', + // value: 'LL', + // type: 2, + // }, + // { + // label: '下股 右股', + // value: 'LR', + // type: 2, + // }, ]; export const standbyMinutes = [ @@ -1751,30 +1751,30 @@ export const standbyMinutes = [ ]; export const DATA_SOURCE = [ - { - value: 'GCZD', - label: '跟车指导', - }, - { - value: 'DQGC', - label: '定期观测', - }, + // { + // value: 'GCZD', + // label: '跟车指导', + // }, + // { + // value: 'DQGC', + // label: '定期观测', + // }, { value: 'XLDC', label: '线路调查', }, - { - value: 'DMYS', - label: '打磨验收', - }, - { - value: 'PSPG', - label: '普速评估', - }, - { - value: 'GSPG', - label: '高速评估', - }, + // { + // value: 'DMYS', + // label: '打磨验收', + // }, + // { + // value: 'PSPG', + // label: '普速评估', + // }, + // { + // value: 'GSPG', + // label: '高速评估', + // }, { value: 'DCDC', label: '道岔调查',