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.
638 lines
20 KiB
638 lines
20 KiB
/* eslint-disable array-callback-return */
|
|
import { Button, Form, Input, message, Select, InputNumber, Cascader, Row, Col, Spin } from "antd";
|
|
import { useEffect, useRef, useState } from "react";
|
|
import { useNavigate } from "react-router";
|
|
import { getDetailList, saveMeasurement_new } from "../../../services/measure/analysis";
|
|
import { useAppSelector } from "../../../utils/hooks";
|
|
import {
|
|
getOrgListService,
|
|
dictionaryListService,
|
|
queryStationData
|
|
} from "../../../services/ktj/org";
|
|
import type { InputRef } from 'antd/es/input';
|
|
import type {
|
|
OrgItem,
|
|
GwdDicItem,
|
|
KTJ_BASE_TYPE,
|
|
options,
|
|
dataSourceOptions,
|
|
unitTypesOptions,
|
|
unitType,
|
|
extraDescType
|
|
} from "../../../services/ktjTypes";
|
|
import { RAIN_TYPES, XB_CODES, DATA_SOURCE } from "../../../constant/index";
|
|
import "./MeasureAction.scss";
|
|
import { GwdItem, orgCascaderType, OrgOptions, systemItem } from "../../system/types";
|
|
|
|
|
|
export default function MeasureConfig() {
|
|
const navigate = useNavigate();
|
|
const [KTJOrgList, setKTJOrgList] = useState<orgCascaderType[]>([]);
|
|
const [extraDesc, setExtraDesc] = useState<extraDescType>()
|
|
const measureState = useAppSelector((store) => store.measureState);
|
|
const [messageApi, contextHolder] = message.useMessage();
|
|
const [form] = Form.useForm();
|
|
const [orgValues, setOrgValues] = useState<string[]>([])
|
|
const [WRPS_GGGX_List, setWRPSGGGXList] = useState<KTJ_BASE_TYPE[]>([]);
|
|
const [dataSource, setDataSource] = useState('')
|
|
const [SJLY_List, setSJLYList] = useState<KTJ_BASE_TYPE[]>([]);
|
|
const [stationList, setStationList] = useState<KTJ_BASE_TYPE[]>([])
|
|
const [XLFL_List, setXLFLList] = useState<KTJ_BASE_TYPE[]>([]);
|
|
const [WRPS_CJFS_List, setWRPSCJFSList] = useState<KTJ_BASE_TYPE[]>([]);
|
|
const [xbCodeOptions, setXbCodeOptions] = useState<dataSourceOptions[]>()
|
|
const [unitTypeList, setUnitTypeList] = useState<unitTypesOptions[]>([])
|
|
const [unitType, setUnitType] = useState<number>()
|
|
const inputRef = useRef<InputRef>(null);
|
|
const systemState = useAppSelector((store) => store.systemState);
|
|
const [kilMet, setKilMet] = useState<Record<string, any>>({})
|
|
const [loading, setLoading] = useState(false)
|
|
useEffect(()=>{
|
|
showLastForm()
|
|
queryDictionaryList()
|
|
resetRailTypes()
|
|
resetDataSource()
|
|
// queryRailData()
|
|
console.log('systemState.orgInfo---', systemState.orgInfo)
|
|
setTimeout(() => {
|
|
if(inputRef.current){
|
|
inputRef.current.focus()
|
|
}
|
|
}, 100)
|
|
}, [])
|
|
|
|
|
|
//获取铁路局数据
|
|
// function queryRailData(){
|
|
// getOrgListService().then((res) => {
|
|
// if (res && res.data) {
|
|
// let resData: OrgItem[] = res.data;
|
|
// let data = convertToCascaderData(resData)
|
|
// setKTJOrgList(data)
|
|
// // 使用上次保存时的参数。
|
|
|
|
// }
|
|
// }).catch((e) => {});
|
|
// }
|
|
|
|
function showLastForm () {
|
|
let mfInfo: any = {}
|
|
// 获取记录中的第一条数据
|
|
const params = {
|
|
pageSize: 5,
|
|
pageNum: 1,
|
|
}
|
|
setLoading(true)
|
|
getDetailList(params).then(res => {
|
|
if(res.success){
|
|
const list = res.data.list
|
|
if(list && list.length){
|
|
mfInfo = list[0]
|
|
setForm(mfInfo)
|
|
}else{
|
|
setForm({})
|
|
}
|
|
}
|
|
setLoading(false)
|
|
}).catch( ()=> {
|
|
setLoading(false)
|
|
})
|
|
}
|
|
|
|
const getDate = () => {
|
|
const currentDate = new Date(); // 获取当前时间
|
|
const year = currentDate.getFullYear(); // 获取完整的年份
|
|
let month: string | number = currentDate.getMonth() + 1; // 获取月份(0-11),需要加1
|
|
let day: string | number = currentDate.getDate(); // 获取日
|
|
month = month < 10 ? "0" + month : month
|
|
day = day < 10 ? "0" + day : day
|
|
const currentTime = `${year}-${month}-${day}`
|
|
let now = `${year}${month}${day}`
|
|
return {
|
|
now,
|
|
nowfm: currentTime,
|
|
}; // 格式化日期为YYYY-MM-DD格式
|
|
}
|
|
|
|
const setForm = (mfInfo: any) => {
|
|
console.log('mfInfo---', mfInfo)
|
|
let kilometre = 0
|
|
let meters = 0
|
|
if(mfInfo.mileage){
|
|
kilometre = mfInfo.mileage.split('+')[0]
|
|
meters = mfInfo.mileage.split('+')[1]
|
|
}
|
|
const ymd = getDate();
|
|
const createTime = mfInfo.createTime
|
|
let todayNumber = mfInfo.todayNumber || 0
|
|
if(createTime && createTime.indexOf(ymd.nowfm) === -1 ){
|
|
todayNumber = 0
|
|
}
|
|
let orgInfo = systemState.orgInfo;
|
|
let labels: string[] = []
|
|
let orgCode: string[] = []
|
|
if(orgInfo && orgInfo.value){
|
|
const orgValue = JSON.parse(orgInfo.value)
|
|
orgValue && orgValue.forEach((org: OrgOptions) => {
|
|
labels.push(org.label)
|
|
orgCode.push(org.value)
|
|
})
|
|
}
|
|
let stationCode = null
|
|
if(orgCode && orgCode[2] === mfInfo.xmCode){
|
|
stationCode = mfInfo.stationCode
|
|
}
|
|
let label = labels.join('-')
|
|
// let name = `${label}-${ymd.now}${(Number(todayNumber) + 1).toString().padStart(4, '0') }`
|
|
let name = mfInfo?.name
|
|
setKilMet({
|
|
kilometre,
|
|
meters
|
|
})
|
|
const user = localStorage.getItem("user");
|
|
let userData = JSON.parse(user || "");
|
|
form.setFieldsValue({
|
|
...mfInfo,
|
|
orgValues: orgCode,
|
|
kilometre,
|
|
meters,
|
|
name,
|
|
operator: userData.nickname || userData.account,
|
|
stationCode,
|
|
});
|
|
const railList = orgCode
|
|
setOrgValues(railList)
|
|
getStationData(railList)
|
|
setDataSource(mfInfo.dataSource)
|
|
onUnitTypeChange(mfInfo.unitType)
|
|
}
|
|
|
|
function convertToCascaderData(data:OrgItem[]) {
|
|
return data.map(item => {
|
|
const newItem:orgCascaderType = {
|
|
value: item.key,
|
|
label: item.value,
|
|
};
|
|
if (item.gwdDicList && item.gwdDicList.length > 0) {
|
|
newItem.children = item.gwdDicList.map(gwdItem => {
|
|
const newGwdItem:GwdItem = {
|
|
value: gwdItem.key,
|
|
label: gwdItem.value,
|
|
};
|
|
if (gwdItem.railDicList && gwdItem.railDicList.length > 0) {
|
|
newGwdItem.children = gwdItem.railDicList.map(railItem => ({
|
|
value: railItem.key,
|
|
label: railItem.value || railItem.input
|
|
}));
|
|
}
|
|
return newGwdItem;
|
|
});
|
|
}
|
|
return newItem;
|
|
});
|
|
}
|
|
|
|
function onOrgChange(value:string[], selectedOptions: orgCascaderType[]){
|
|
if(value.length){
|
|
form.setFieldsValue({tljCode: value[0]})
|
|
form.setFieldsValue({gwdCode: value[1]})
|
|
form.setFieldsValue({xmCode: value[2]})
|
|
getStationData(value)
|
|
form.resetFields(["stationCode"]);
|
|
}
|
|
}
|
|
|
|
const onRailTypeChange = (value:string, option:any) => {
|
|
setExtraDesc({...extraDesc,railSizeName:option.label})
|
|
}
|
|
|
|
//数据来源change
|
|
const onDataSourceChange = (value:string, option:any) => {
|
|
setExtraDesc({...extraDesc,dataSourceName:option.label})
|
|
form.resetFields(["xbCode"]);
|
|
setDataSource(value)
|
|
}
|
|
|
|
//车站
|
|
const onSatioinChange = (value:string, option:any) => {
|
|
setExtraDesc({...extraDesc,stationName:option.label})
|
|
}
|
|
|
|
//车站数据
|
|
const getStationData = (railData: string[]) => {
|
|
let orgInfo = systemState.orgInfo;
|
|
let orgCode: string[] = []
|
|
if(orgInfo && orgInfo.value){
|
|
const orgValue = JSON.parse(orgInfo.value)
|
|
orgValue && orgValue.forEach((org: OrgOptions) => {
|
|
orgCode.push(org.value)
|
|
})
|
|
}
|
|
let tljCode = orgCode[0]
|
|
let gwdCode = orgCode[1]
|
|
let xmCode = orgCode[2]
|
|
const params = {
|
|
tljCode,
|
|
gwdCode,
|
|
xmCode
|
|
}
|
|
queryStationData(params).then(res => {
|
|
if(res && res.data?.length){
|
|
setStationList(res.data)
|
|
}else{
|
|
setStationList([])
|
|
}
|
|
})
|
|
}
|
|
|
|
const queryDictionaryList = () => {
|
|
dictionaryListService().then((res) => {
|
|
if (res && res.data) {
|
|
const { WRPS_CJFS, WRPS_GGGX, XLFL } = res.data;
|
|
const SJLY:KTJ_BASE_TYPE[] = res.data.SJLY
|
|
if(SJLY && SJLY.length){
|
|
let sjlylist = SJLY.filter(item => item.key === 'XLDC' || item.key === 'DCDC')
|
|
setSJLYList(sjlylist);
|
|
}
|
|
if(WRPS_CJFS && WRPS_CJFS.length){
|
|
setWRPSCJFSList(WRPS_CJFS);
|
|
}
|
|
if(WRPS_GGGX && WRPS_GGGX.length){
|
|
setWRPSGGGXList(WRPS_GGGX);
|
|
}
|
|
if(XLFL && XLFL.length){
|
|
setXLFLList(XLFL);
|
|
}
|
|
}
|
|
});
|
|
};
|
|
|
|
const resetDataSource = () => {
|
|
let options:dataSourceOptions[] = []
|
|
DATA_SOURCE.map(item => {
|
|
let optionMap:any = {
|
|
label: item.name,
|
|
value: item.code,
|
|
options:[]
|
|
}
|
|
let childOptions:options[] = []
|
|
item.child.map(ele => {
|
|
childOptions.push({
|
|
label: ele.name,
|
|
value: ele.code
|
|
})
|
|
optionMap.options = childOptions
|
|
})
|
|
options.push(optionMap)
|
|
})
|
|
setXbCodeOptions(options)
|
|
}
|
|
|
|
const onUnitTypeChange = (value:string) => {
|
|
RAIN_TYPES.map(item => {
|
|
if(item.code === value){
|
|
setUnitType(item.type)
|
|
}
|
|
})
|
|
}
|
|
|
|
const resetRailTypes = () => {
|
|
let zxOptions:unitTypesOptions = {
|
|
label:'直线',
|
|
options:[]
|
|
}
|
|
let qxOptions:unitTypesOptions = {
|
|
label:'曲线',
|
|
options:[]
|
|
}
|
|
let zxList:unitType[] = []
|
|
let qxList:unitType[] = []
|
|
RAIN_TYPES.map(item => {
|
|
if(item.type === 1){
|
|
zxList.push({
|
|
label: item.name,
|
|
value: item.code,
|
|
})
|
|
}else{
|
|
qxList.push({
|
|
label: item.name,
|
|
value: item.code,
|
|
})
|
|
}
|
|
})
|
|
zxOptions.options = zxList
|
|
qxOptions.options = qxList
|
|
setUnitTypeList([zxOptions, qxOptions])
|
|
}
|
|
|
|
const onFinish = (values: any) => {
|
|
let mtValue = values["meters"]
|
|
//百米小于100时, 补齐3位。 比如 1 :"001", 10: "010"
|
|
if (mtValue < 100) {
|
|
mtValue = String(mtValue).padStart(3, '0');
|
|
}
|
|
console.log('values--11-', values)
|
|
|
|
let orgInfo = systemState.orgInfo;
|
|
let orgCode: string[] = []
|
|
if(orgInfo && orgInfo.value){
|
|
const orgValue = JSON.parse(orgInfo.value)
|
|
orgValue && orgValue.forEach((org: OrgOptions) => {
|
|
orgCode.push(org.value)
|
|
})
|
|
}
|
|
const params = {
|
|
operator: values["operator"],//操作员
|
|
name: values["name"],//测量名称
|
|
location: values["location"],//位置
|
|
direction: values["direction"],//方向
|
|
tljCode: orgCode[0],//values["tljCode"],//铁路局
|
|
gwdCode: orgCode[1],//values["gwdCode"],//铁路段
|
|
xmCode: orgCode[2],//values["xmCode"],//铁路线
|
|
lineClassify: values["lineClassify"],//线路分类
|
|
dataType: values["dataType"],//采集方式
|
|
dataSource: values["dataSource"],//数据来源
|
|
railSize: values["railSize"],//轨型
|
|
xbCode: values["xbCode"],//行别
|
|
unitType: values["unitType"],//股别
|
|
mileage: `${values['kilometre']}+${mtValue}`,//里程
|
|
stationCode: values['stationCode'],//车站
|
|
batch: values['batch'],//批次
|
|
radius: values["radius"],//半径
|
|
turnoutNum: values["turnoutNum"],//道岔号
|
|
sleeperNum: values["sleeperNum"],//枕木号
|
|
extraDesc:JSON.stringify(extraDesc),
|
|
alignPoints:[]
|
|
};
|
|
|
|
|
|
if(values.orgValues && values.orgValues.length){
|
|
const orgItem = {
|
|
tljCode: values.orgValues[0],
|
|
gwdCode: values.orgValues[1],
|
|
xmCode: values.orgValues[2]
|
|
}
|
|
localStorage.setItem('orgInfo', JSON.stringify(orgItem));
|
|
params.tljCode = values.orgValues[0]
|
|
params.gwdCode = values.orgValues[1]
|
|
params.xmCode = values.orgValues[2]
|
|
}
|
|
|
|
params.extraDesc = JSON.stringify(extraDesc)
|
|
let measureData = measureState.measureData;
|
|
if(measureData && measureData.length){
|
|
params.alignPoints = measureData
|
|
}
|
|
localStorage.setItem('measureForm', JSON.stringify(params))
|
|
console.log('params---', params)
|
|
saveMeasurement_new(params)
|
|
.then((res) => {
|
|
if (res.success) {
|
|
messageApi.error(res.data.info);
|
|
} else {
|
|
message.success("保存成功");
|
|
navigate("../action");
|
|
}
|
|
})
|
|
.catch((e) => {
|
|
navigate("../action");
|
|
});
|
|
};
|
|
|
|
const resetLabel = (labelName: string) => {
|
|
return <label style={{ fontSize: '20px' }}>{ labelName }</label>
|
|
}
|
|
|
|
return (
|
|
<Spin spinning={loading}>
|
|
<div >
|
|
<Form
|
|
form={form}
|
|
size="large"
|
|
labelCol={{span: 6}}
|
|
initialValues={{ remember: true }}
|
|
onFinish={onFinish}
|
|
autoComplete="off"
|
|
>
|
|
<div style={{marginTop: '1rem', display:'grid', gridTemplateColumns: '1fr 1fr 1fr'}}>
|
|
<Form.Item
|
|
labelCol={{span: 3}}
|
|
style={{marginLeft:'-1rem'}}
|
|
label={resetLabel('测量名称')}
|
|
name="name"
|
|
rules={[{ required: true, message: "请输入测量名称" }]}
|
|
>
|
|
<Input ref={inputRef} style={{width: '71vw'}} className="label-vh" placeholder="请输入测量名称" />
|
|
</Form.Item>
|
|
</div>
|
|
|
|
<div className="layout">
|
|
<Form.Item
|
|
label={resetLabel('操作员')}
|
|
name="operator"
|
|
rules={[{ required: true, message: "请输入操作员姓名" }]}
|
|
>
|
|
<Input className="label-vh w-[18vw]"/>
|
|
</Form.Item>
|
|
{/* <Form.Item
|
|
label={resetLabel('铁路局')}
|
|
name="orgValues"
|
|
rules={[{ required: true, message: "请选择铁路局" }]}
|
|
>
|
|
<Cascader className='label-vh w-[600px]' key={orgValues.length} defaultValue={orgValues} options={KTJOrgList} onChange={onOrgChange} placeholder="请选择局段线" />
|
|
</Form.Item> */}
|
|
<Form.Item
|
|
label={resetLabel('轨型')}
|
|
name="railSize"
|
|
rules={[{ required: true, message: "请选择轨型" }]}
|
|
>
|
|
<Select
|
|
className="label-vh select-w200"
|
|
placeholder="请选择轨型"
|
|
onChange={onRailTypeChange}
|
|
options={WRPS_GGGX_List.map((item) => ({
|
|
label: item.value,
|
|
value: item.key,
|
|
}))}
|
|
></Select>
|
|
</Form.Item>
|
|
|
|
<Form.Item
|
|
label={resetLabel('数据来源')}
|
|
name="dataSource"
|
|
rules={[{ required: true, message: "请选择数据来源" }]}
|
|
>
|
|
<Select
|
|
className="label-vh"
|
|
placeholder="请选择数据来源"
|
|
onChange={onDataSourceChange}
|
|
options={SJLY_List.map((item) => ({
|
|
label: item.value,
|
|
value: item.key,
|
|
}))}
|
|
></Select>
|
|
</Form.Item>
|
|
{dataSource === "DCDC" &&
|
|
<Form.Item
|
|
label={resetLabel('车站')}
|
|
name="stationCode"
|
|
rules={[{ required: true, message: "请选择车站" }]}
|
|
>
|
|
<Select
|
|
className="label-vh"
|
|
style={{width: '18vw'}}
|
|
placeholder="请选择车站"
|
|
onChange={onSatioinChange}
|
|
options={stationList.map((item) => ({
|
|
label: item.value,
|
|
value: item.key,
|
|
}))}
|
|
>
|
|
</Select>
|
|
</Form.Item>}
|
|
|
|
|
|
<Form.Item
|
|
label={resetLabel('线路分类')}
|
|
name="lineClassify"
|
|
rules={[{ required: true, message: "请选择线路分类" }]}
|
|
>
|
|
<Select
|
|
className="label-vh"
|
|
placeholder="请选择线路分类"
|
|
options={XLFL_List.map((item) => ({
|
|
label: item.value,
|
|
value: item.key,
|
|
}))}
|
|
></Select>
|
|
</Form.Item>
|
|
|
|
<Form.Item
|
|
label={resetLabel('采集方式')}
|
|
name="dataType"
|
|
rules={[{ required: true, message: "请选择采集方式" }]}
|
|
>
|
|
<Select
|
|
className="label-vh"
|
|
placeholder="请选择采集方式"
|
|
options={WRPS_CJFS_List.map((item) => ({
|
|
label: item.value,
|
|
value: item.key,
|
|
}))}
|
|
></Select>
|
|
</Form.Item>
|
|
|
|
<Form.Item
|
|
label={resetLabel('批次')}
|
|
name="batch"
|
|
rules={[{ required: true, message: "请输入批次" }]}
|
|
>
|
|
<InputNumber className="label-vh w-[18vw]" placeholder="请输入批次" />
|
|
</Form.Item>
|
|
{dataSource === 'DCDC' ? (
|
|
<>
|
|
<Form.Item
|
|
label={resetLabel('道岔号')}
|
|
name="turnoutNum"
|
|
rules={[{ required: true, message: "请输入道岔号" }]}
|
|
>
|
|
<InputNumber className="abel-vh w-[18vw]" placeholder="请输入道岔号" />
|
|
</Form.Item>
|
|
|
|
<Form.Item
|
|
label={resetLabel('枕木号')}
|
|
name="sleeperNum"
|
|
rules={[{ required: true, message: "请输入枕木号" }]}
|
|
>
|
|
<InputNumber className="abel-vh w-[18vw]" placeholder="请输入枕木号" />
|
|
</Form.Item>
|
|
|
|
<Form.Item
|
|
label={resetLabel('行别')}
|
|
name="xbCode"
|
|
rules={[{ required: true, message: "请选择行别" }]}
|
|
|
|
>
|
|
<Select className="label-vh" placeholder="请选择行别" options={xbCodeOptions}>
|
|
</Select>
|
|
</Form.Item>
|
|
</>
|
|
) : (
|
|
<Form.Item
|
|
label={resetLabel('行别')}
|
|
name="xbCode"
|
|
rules={[{ required: true, message: "请选择行别" }]}
|
|
>
|
|
<Select placeholder="请选择行别"
|
|
className="label-vh"
|
|
options={XB_CODES.map((item) => ({
|
|
label: item.name,
|
|
value: item.code,
|
|
}))}
|
|
>
|
|
</Select>
|
|
</Form.Item>
|
|
)}
|
|
|
|
{dataSource === "XLDC" &&
|
|
<>
|
|
<Form.Item
|
|
label={resetLabel('里程')}
|
|
name="kilometre"
|
|
rules={[{ required: true, message: "请输入" }]}
|
|
>
|
|
<div style={{display:"flex",alignItems:"center"}}>
|
|
<InputNumber className="label-vh w-[16vw]" defaultValue={kilMet.kilometre === 'undefined' ? '' : kilMet.kilometre} placeholder="公里" />千米
|
|
</div>
|
|
</Form.Item>
|
|
<Form.Item
|
|
label={resetLabel('百米')}
|
|
name="meters"
|
|
rules={[{ required: true, message: "请输入" }]}
|
|
>
|
|
<div style={{display:"flex",alignItems:"center"}}>
|
|
<InputNumber className="label-vh w-[18vw]" defaultValue={kilMet.meters === 'undefined' ? '' : kilMet.meters} placeholder="百米" />米
|
|
</div>
|
|
</Form.Item>
|
|
</>
|
|
}
|
|
|
|
<Form.Item
|
|
label={resetLabel('股别')}
|
|
name="unitType"
|
|
rules={[{ required: true, message: "请选择股别" }]}
|
|
>
|
|
<Select className="label-vh" placeholder="请选择股别" onChange={onUnitTypeChange} options={unitTypeList}>
|
|
</Select>
|
|
</Form.Item>
|
|
{unitType === 2 &&
|
|
<Form.Item
|
|
label={resetLabel('半径')}
|
|
name="radius"
|
|
rules={[{ required: true, message: "请输入半径" }]}
|
|
>
|
|
<InputNumber className="label-vh w-[18vw]" placeholder="请输入半径" />
|
|
</Form.Item>
|
|
}
|
|
</div>
|
|
<div className="flex justify-center w-[60vw] mt-[15vh]">
|
|
<Form.Item label={null} >
|
|
<Button style={{ width: 150 }} onClick={() => navigate("../action", { replace: true })}>
|
|
返回
|
|
</Button>
|
|
</Form.Item>
|
|
<Form.Item label={null}>
|
|
<Button
|
|
type="primary"
|
|
size="large"
|
|
style={{ width: 150, marginLeft:"20px" }}
|
|
htmlType="submit"
|
|
>
|
|
保存测量
|
|
</Button>
|
|
</Form.Item>
|
|
</div>
|
|
</Form>
|
|
</div>
|
|
</Spin>
|
|
);
|
|
}
|