|
@ -3,8 +3,8 @@ import { useNavigate } from 'react-router'; |
|
|
import icon_arr_r from '../assets/icon_arr_s_r.svg'; |
|
|
import icon_arr_r from '../assets/icon_arr_s_r.svg'; |
|
|
import { ChangeEvent, useState } from 'react'; |
|
|
import { ChangeEvent, useState } from 'react'; |
|
|
import { useAppDispatch, useAppSelector } from '../utils/hooks'; |
|
|
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 Bridge from '../utils/bridge'; |
|
|
import { resetState } from '../store/features/measureSlice'; |
|
|
import { resetState } from '../store/features/measureSlice'; |
|
|
import { selectOrgTextArr } from '../store'; |
|
|
import { selectOrgTextArr } from '../store'; |
|
@ -19,31 +19,74 @@ export default function MeasureSave() { |
|
|
const orgTextArr = useAppSelector(selectOrgTextArr); |
|
|
const orgTextArr = useAppSelector(selectOrgTextArr); |
|
|
|
|
|
|
|
|
const [name, setName] = useState(''); |
|
|
const [name, setName] = useState(''); |
|
|
|
|
|
const [batch, setBatch] = useState(''); |
|
|
|
|
|
const [mile, setMile] = useState(10); |
|
|
|
|
|
const [meter, setMeter] = useState(10); |
|
|
const [railPickerVisible, setRailPickerVisible] = useState(false); |
|
|
const [railPickerVisible, setRailPickerVisible] = useState(false); |
|
|
const [dataSourcePickerVisible, setDataSourcePickerVisible] = useState(false); |
|
|
const [dataSourcePickerVisible, setDataSourcePickerVisible] = useState(false); |
|
|
const [lineClassPickerVisible, setLineClassPickerVisible] = 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<string[]>([XB_CODES[0].value]); |
|
|
const [directionCode, setDirectionCode] = useState<string[]>([XB_CODES[0].value]); |
|
|
const [dataSourceCode, setDataSourceCode] = useState<string[]>([DATA_SOURCE[0].value]); |
|
|
const [dataSourceCode, setDataSourceCode] = useState<string[]>([DATA_SOURCE[0].value]); |
|
|
const [lineClassCode, setLineClassCode] = useState<string[]>([LINE_CLASSIFY[0].value]); |
|
|
const [lineClassCode, setLineClassCode] = useState<string[]>([LINE_CLASSIFY[0].value]); |
|
|
|
|
|
const [stationCode, setStationCode] = useState<string[]>([contextState.stationList[0].value]); |
|
|
|
|
|
const [unitType, setUnitType] = useState<string[]>([UNIT_TYPES[0].value]); |
|
|
|
|
|
|
|
|
const onInputChange = (evt: ChangeEvent<HTMLInputElement>) => { |
|
|
const onInputChange = (evt: ChangeEvent<HTMLInputElement>) => { |
|
|
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 = () => { |
|
|
const onSaveBtnClick = () => { |
|
|
if (!name) { |
|
|
if (!name) { |
|
|
Toast.show('请输入测量名称'); |
|
|
|
|
|
return; |
|
|
|
|
|
|
|
|
return Toast.show('请输入测量名称'); |
|
|
|
|
|
} |
|
|
|
|
|
if (!batch) { |
|
|
|
|
|
return Toast.show('请输入批次号'); |
|
|
} |
|
|
} |
|
|
const railType = baseState.railTypes.find((r) => r.id === contextState.currRailTypeId); |
|
|
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 = { |
|
|
const dto: SaveMeasureDTO = { |
|
|
operatorName: '', |
|
|
|
|
|
trackShapeCode: railType!.code, |
|
|
|
|
|
|
|
|
operator: 'klj_test', |
|
|
|
|
|
dataType: 'MINIPROF', |
|
|
name, |
|
|
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) => { |
|
|
Bridge.saveMeasure(dto).then((res) => { |
|
|
if (res.success) { |
|
|
if (res.success) { |
|
@ -70,12 +113,43 @@ export default function MeasureSave() { |
|
|
<span>测量名称</span> |
|
|
<span>测量名称</span> |
|
|
<input |
|
|
<input |
|
|
type="text" |
|
|
type="text" |
|
|
|
|
|
name="name" |
|
|
value={name} |
|
|
value={name} |
|
|
placeholder="请填写" |
|
|
|
|
|
|
|
|
placeholder="请填写测量名称" |
|
|
|
|
|
className="border-0 outline-none self-stretch text-right flex-1 ml-4" |
|
|
|
|
|
onChange={onInputChange} |
|
|
|
|
|
/> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div className="h-12 flex items-center border-b border-[#eee]"> |
|
|
|
|
|
<span>批次</span> |
|
|
|
|
|
<input |
|
|
|
|
|
type="text" |
|
|
|
|
|
name="batch" |
|
|
|
|
|
value={batch} |
|
|
|
|
|
placeholder="请填写批次" |
|
|
className="border-0 outline-none self-stretch text-right flex-1 ml-4" |
|
|
className="border-0 outline-none self-stretch text-right flex-1 ml-4" |
|
|
onChange={onInputChange} |
|
|
onChange={onInputChange} |
|
|
/> |
|
|
/> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div className="h-12 flex items-center border-b border-[#eee]"> |
|
|
|
|
|
<span>里程</span> |
|
|
|
|
|
<input |
|
|
|
|
|
type="text" |
|
|
|
|
|
name="mile" |
|
|
|
|
|
value={mile} |
|
|
|
|
|
className="w-14 h-8 mx-1 border border-[#eee] rounded outline-none text-center ml-auto" |
|
|
|
|
|
onChange={onInputChange} |
|
|
|
|
|
/> |
|
|
|
|
|
<span>公里+</span> |
|
|
|
|
|
<input |
|
|
|
|
|
type="text" |
|
|
|
|
|
name="meter" |
|
|
|
|
|
value={meter} |
|
|
|
|
|
className="w-14 h-8 mx-1 border border-[#eee] rounded outline-none text-center" |
|
|
|
|
|
onChange={onInputChange} |
|
|
|
|
|
/> |
|
|
|
|
|
<span>米</span> |
|
|
|
|
|
</div> |
|
|
<div |
|
|
<div |
|
|
className="h-12 flex items-center border-b border-[#eee]" |
|
|
className="h-12 flex items-center border-b border-[#eee]" |
|
|
onClick={() => setDataSourcePickerVisible(true)} |
|
|
onClick={() => setDataSourcePickerVisible(true)} |
|
@ -88,6 +162,16 @@ export default function MeasureSave() { |
|
|
</div> |
|
|
</div> |
|
|
<div |
|
|
<div |
|
|
className="h-12 flex items-center border-b border-[#eee]" |
|
|
className="h-12 flex items-center border-b border-[#eee]" |
|
|
|
|
|
onClick={() => setStationPickerVisible(true)} |
|
|
|
|
|
> |
|
|
|
|
|
<span>车站</span> |
|
|
|
|
|
<span className="ml-auto mr-4"> |
|
|
|
|
|
{contextState.stationList.find((r) => r.value === stationCode[0])?.label || ''} |
|
|
|
|
|
</span> |
|
|
|
|
|
<img src={icon_arr_r} alt="arr" /> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div |
|
|
|
|
|
className="h-12 flex items-center border-b border-[#eee]" |
|
|
onClick={() => setLineClassPickerVisible(true)} |
|
|
onClick={() => setLineClassPickerVisible(true)} |
|
|
> |
|
|
> |
|
|
<span>线路分类</span> |
|
|
<span>线路分类</span> |
|
@ -96,13 +180,24 @@ export default function MeasureSave() { |
|
|
</span> |
|
|
</span> |
|
|
<img src={icon_arr_r} alt="arr" /> |
|
|
<img src={icon_arr_r} alt="arr" /> |
|
|
</div> |
|
|
</div> |
|
|
<div className="h-12 flex items-center " onClick={() => setRailPickerVisible(true)}> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div |
|
|
|
|
|
className="h-12 flex items-center border-b border-[#eee]" |
|
|
|
|
|
onClick={() => setRailPickerVisible(true)} |
|
|
|
|
|
> |
|
|
<span>行别</span> |
|
|
<span>行别</span> |
|
|
<span className="ml-auto mr-4"> |
|
|
<span className="ml-auto mr-4"> |
|
|
{XB_CODES.find((r) => r.value === directionCode[0])?.label || ''} |
|
|
{XB_CODES.find((r) => r.value === directionCode[0])?.label || ''} |
|
|
</span> |
|
|
</span> |
|
|
<img src={icon_arr_r} alt="arr" /> |
|
|
<img src={icon_arr_r} alt="arr" /> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
<div className="h-12 flex items-center " onClick={() => setUnitTypePickerVisible(true)}> |
|
|
|
|
|
<span>股别</span> |
|
|
|
|
|
<span className="ml-auto mr-4"> |
|
|
|
|
|
{UNIT_TYPES.find((r) => r.value === unitType[0])?.label || ''} |
|
|
|
|
|
</span> |
|
|
|
|
|
<img src={icon_arr_r} alt="arr" /> |
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<div |
|
|
<div |
|
|
className="btn-contained rounded-md h-12 mx-9 my-8 text-base font-medium" |
|
|
className="btn-contained rounded-md h-12 mx-9 my-8 text-base font-medium" |
|
@ -145,6 +240,28 @@ export default function MeasureSave() { |
|
|
setLineClassCode(v as string[]); |
|
|
setLineClassCode(v as string[]); |
|
|
}} |
|
|
}} |
|
|
/> |
|
|
/> |
|
|
|
|
|
<Picker |
|
|
|
|
|
columns={[UNIT_TYPES]} |
|
|
|
|
|
visible={unitTypePickerVisible} |
|
|
|
|
|
onClose={() => { |
|
|
|
|
|
setUnitTypePickerVisible(false); |
|
|
|
|
|
}} |
|
|
|
|
|
value={unitType} |
|
|
|
|
|
onConfirm={(v) => { |
|
|
|
|
|
setUnitType(v as string[]); |
|
|
|
|
|
}} |
|
|
|
|
|
/> |
|
|
|
|
|
<Picker |
|
|
|
|
|
columns={[contextState.stationList]} |
|
|
|
|
|
visible={stationPickerVisible} |
|
|
|
|
|
onClose={() => { |
|
|
|
|
|
setStationPickerVisible(false); |
|
|
|
|
|
}} |
|
|
|
|
|
value={stationCode} |
|
|
|
|
|
onConfirm={(v) => { |
|
|
|
|
|
setStationCode(v as string[]); |
|
|
|
|
|
}} |
|
|
|
|
|
/> |
|
|
</> |
|
|
</> |
|
|
); |
|
|
); |
|
|
} |
|
|
} |