import {Mask, NavBar, Picker, SpinLoading, Toast} from 'antd-mobile'; import { useNavigate } from 'react-router'; import icon_arr_r from '../assets/icon_arr_s_r.svg'; import {ChangeEvent, useCallback, useEffect, useState} from 'react'; import { useAppDispatch, useAppSelector } from '../utils/hooks'; import { DATA_SOURCE, LINE_CLASSIFY, UNIT_TYPES, XB_CODES } from '../utils/constant'; import { ExtraDesc, MeasurementDTO } from '../services/apiTypes'; import Bridge from '../utils/bridge'; import {clearData, resetState} from '../store/features/measureSlice'; import { selectOrgTextArr } from '../store'; export default function MeasureSave() { const navigate = useNavigate(); const dispatch = useAppDispatch(); const back = () => navigate(-1); const contextState = useAppSelector((state) => state.context); const baseState = useAppSelector((state) => state.baseData); const measureState = useAppSelector((state) => state.measure); const orgTextArr = useAppSelector(selectOrgTextArr); const loadData = useCallback(() => { Bridge.getRecordList({ pageNum: 1, size: 1 }).then((res) => { if (res.success && res.data.list.length) { const data = res.data.list[0]?.records?.[0] console.log(data) setName(data?.name) setBatch(data?.batch) setMile(data?.mileage?.split('+')?.[0]) setMeter(data?.mileage?.split('+')?.[1]) setLineClassCode([data?.lineClassify]) setDataSourceCode([data?.dataSource]) setDirectionCode([data?.xbCode]) setUnitType([data?.unitType]) setTurnoutNum(Number(data?.turnoutNum || 1)) setSleeperNum(Number(data?.sleeperNum || 1)) setStationCode([data?.stationCode]) document.getElementById('name-id')?.focus() } }); }, []); useEffect(() => { loadData(); }, [loadData]); const [name, setName] = useState(''); const [batch, setBatch] = useState(''); const [mile, setMile] = useState('10'); const [meter, setMeter] = useState('10'); const [turnoutNum, setTurnoutNum] = useState(1); const [sleeperNum, setSleeperNum] = useState(1); const [railPickerVisible, setRailPickerVisible] = useState(false); const [dataSourcePickerVisible, setDataSourcePickerVisible] = useState(false); const [lineClassPickerVisible, setLineClassPickerVisible] = useState(false); 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.length > 0 ? [contextState.stationList[0].value] : [] ); const [unitType, setUnitType] = useState([UNIT_TYPES[0].value]); const onInputChange = (evt: ChangeEvent) => { if (evt.target.name === 'name') { if (evt.target.value.length <= 50) { setName(evt.target.value); }else { Toast.show('名称长度不能超过50个字符'); } } else if (evt.target.name === 'batch') { if (evt.target.value.length <= 10) { setBatch(evt.target.value); } else { Toast.show('批次长度不能超过10个字符'); } } else if (evt.target.name === 'mile') { const val = evt.target.value.replace(/^0+/, '') if (/^\d*$/.test(val)) { setMile(val || ''); } } else if (evt.target.name === 'meter') { const val = evt.target.value.replace(/^0+/, '') if (/^\d*$/.test(val)) { setMeter(val || ''); } } else if (evt.target.name === 'turnoutNum') { if (/^\d*$/.test(evt.target.value)) { setTurnoutNum(+evt.target.value); } } else if (evt.target.name === 'sleeperNum') { if (/^\d*$/.test(evt.target.value)) { setSleeperNum(+evt.target.value); } } }; const [measureData, setMeasureData] = useState(measureState.measureData) useEffect(()=>{ setMeasureData(measureState.measureData) },[measureState.measureData]) const [loading, setLoading] = useState(false); const onSaveBtnClick = () => { if (!name) { return Toast.show('请输入测量名称'); } if (!batch) { return Toast.show('请输入批次号'); } setLoading(true) const railType = baseState.railTypes.find((r) => r.id === contextState.currRailTypeId); 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: stationCode.length > 0 ? 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: +mile, meter: +meter, }; const dto: MeasurementDTO = { operator: 'klj_test', dataType: 'MINIPROF', name, batch, railSize: railType!.code, tljCode: contextState.currOrgCode, gwdCode: contextState.currGWDCode, xmCode: contextState.currXMCode, xbCode: directionCode[0], stationCode: stationCode.length > 0 ? stationCode[0] : '', lineClassify: lineClassCode[0], dataSource: dataSourceCode[0], turnoutNum: turnoutNum?.toFixed(), sleeperNum: sleeperNum?.toFixed(), unitType: unitType[0], mileage: `${mile}+${meter.padStart(3, '0')}`, radius: '', extraDesc: JSON.stringify(desc), alignPoints:[] }; if(measureData && measureData.length){ dto.alignPoints = measureData } Bridge.saveMeasure(dto).then((res) => { if (res.success) { Toast.show('保存成功'); setTimeout(() => { navigate('/home/measure'); dispatch(resetState()); dispatch(clearData()); }, 300); } else { Toast.show(res.message); } }).catch(e=>{ Toast.show({ content: '操作失败', }); }).finally(() => { setLoading(false) }); }; return ( <>
{loading && (
请稍候...
)} 测量参数
测量名称
批次
setDataSourcePickerVisible(true)} > 数据来源 {DATA_SOURCE.find((r) => r.value === dataSourceCode[0])?.label || ''} arr
{dataSourceCode[0] === 'DCDC' ? ( <>
道岔号
枕木号
{ if (contextState.stationList.length > 0) { setStationPickerVisible(true); } }} > 车站 {contextState.stationList.find((r) => r.value === stationCode[0])?.label || ''} arr
) : (
里程 公里+
)}
setLineClassPickerVisible(true)} > 线路分类 {LINE_CLASSIFY.find((r) => r.value === lineClassCode[0])?.label || ''} arr
setRailPickerVisible(true)} > 行别 {XB_CODES.find((r) => r.value === directionCode[0])?.label || ''} arr
setUnitTypePickerVisible(true)}> 股别 {UNIT_TYPES.find((r) => r.value === unitType[0])?.label || ''} arr
确定
{ setRailPickerVisible(false); }} value={directionCode} onConfirm={(v) => { setDirectionCode(v as string[]); }} /> { setDataSourcePickerVisible(false); }} value={dataSourceCode} onConfirm={(v) => { setDataSourceCode(v as string[]); }} /> { setLineClassPickerVisible(false); }} value={dataSourceCode} onConfirm={(v) => { setLineClassCode(v as string[]); }} /> { setUnitTypePickerVisible(false); }} value={unitType} onConfirm={(v) => { setUnitType(v as string[]); }} /> { setStationPickerVisible(false); }} value={stationCode} onConfirm={(v) => { setStationCode(v as string[]); }} /> ); }