Browse Source

优化测量保存页面

master
LiLongLong 2 months ago
parent
commit
68d625d19a
  1. 4
      .env
  2. 2
      package.json
  3. 9
      src/pages/measure/components/MeasureAction.scss
  4. 632
      src/pages/measure/components/MeasureConfig - 副本.tsx
  5. 27
      src/pages/measure/components/MeasureConfig.tsx

4
.env

@ -1,2 +1,2 @@
# REACT_APP_WS_URL=192.168.1.114:8080/ws
REACT_APP_WS_URL=127.1.1.0:8080/ws
REACT_APP_WS_URL=192.168.1.115:8080/ws
# REACT_APP_WS_URL=127.1.1.0:8080/ws

2
package.json

@ -2,7 +2,7 @@
"name": "outline",
"version": "0.1.0",
"private": true,
"proxy": "http://127.0.0.1:8080",
"proxy": "http://192.168.1.115:8080",
"dependencies": {
"@ant-design/icons": "^6.0.0",
"@babel/core": "^7.16.0",

9
src/pages/measure/components/MeasureAction.scss

@ -17,9 +17,12 @@
justify-content: center;
align-items: center;
}
.ant-row {
display: flex;
align-items: center;
.kilometre-label{
display: grid;
grid-template-columns: 1fr 1fr 1fr;
}
.ant-form-item-label {
padding-top: 0.5rem !important;
.kilometre{
padding-left: 4rem;
margin-left: 1.8rem;

632
src/pages/measure/components/MeasureConfig - 副本.tsx

@ -0,0 +1,632 @@
/* eslint-disable array-callback-return */
import { Button, Form, Input, message, Select, InputNumber } from "antd";
import { useEffect, useState } from "react";
import { useNavigate } from "react-router";
import { saveMeasurement_new } from "../../../services/measure/analysis";
import { useAppSelector } from "../../../utils/hooks";
import {
getOrgListService,
dictionaryListService,
queryStationData
} from "../../../services/ktj/org";
import { useAppDispatch } from "../../../utils/hooks";
import { setOrgData } from "../../../store/ktj/orgState";
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";
export default function MeasureConfig() {
const { Option } = Select;
const navigate = useNavigate();
const systemState = useAppSelector((store) => store.systemState);
const [messageApi, contextHolder] = message.useMessage();
const dispatch = useAppDispatch();
const measureState = useAppSelector((store) => store.measureState);
const [extraDesc, setExtraDesc] = useState<extraDescType>()
const onFinish = (values: any) => {
let mtValue = values["meters"]
//百米小于100时, 补齐3位。 比如 1 :"001", 10: "010"
if (mtValue < 100) {
mtValue = String(mtValue).padStart(3, '0');
}
const params = {
operator: values["operator"],//操作员
name: values["name"],//测量名称
location: values["location"],//位置
direction: values["direction"],//方向
tljCode: values["tljCode"],//铁路局
gwdCode: values["gwdCode"],//铁路段
xmCode: 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:[]
};
const orgItem = {
tljCode: values["tljCode"],//铁路局
gwdCode: values["gwdCode"],//铁路段
xmCode: values["xmCode"],//铁路线
}
localStorage.setItem('orgInfo', JSON.stringify(orgItem));
params.extraDesc = JSON.stringify(extraDesc)
let measureData = measureState.measureData;
if(measureData && measureData.length){
params.alignPoints = measureData
}
localStorage.setItem('measureForm', JSON.stringify(params))
saveMeasurement_new(params)
.then((res) => {
if (res.success) {
messageApi.error(res.data.info);
} else {
message.success("保存成功");
navigate("../action");
}
})
.catch((e) => {
navigate("../action");
});
};
let user = localStorage.getItem("user") || "";
let userInfo = (user && JSON.parse(user)) || {};
const [form] = Form.useForm();
useEffect(() => {
queryKTJOrgList();
queryDictionaryList();
resetDataSource()
resetRailTypes()
}, []);
useEffect(()=>{
}, [measureState.measureData])
//给股别分类
const [unitTypeList, setUnitTypeList] = useState<unitTypesOptions[]>([])
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 [xbCodeOptions, setXbCodeOptions] = useState<dataSourceOptions[]>()
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)
}
//初始化科天健机构数据
let [SJLY_List, setSJLYList] = useState<KTJ_BASE_TYPE[]>([]);
let [WRPS_CJFS_List, setWRPSCJFSList] = useState<KTJ_BASE_TYPE[]>([]);
let [WRPS_GGGX_List, setWRPSGGGXList] = useState<KTJ_BASE_TYPE[]>([]);
let [XLFL_List, setXLFLList] = useState<KTJ_BASE_TYPE[]>([]);
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 [KTJOrgList, setKTJOrgList] = useState<OrgItem[]>([]);
const queryKTJOrgList = () => {
getOrgListService()
.then((res) => {
let list: options[] = [];
if (res && res.data) {
let resData: OrgItem[] = res.data;
setKTJOrgList(resData);
dispatch(setOrgData(resData));
resData.map((item) => {
list.push({
value: item.key,
label: item.value,
});
});
}
})
.catch((e) => {});
};
//选择机构时change
const [gwdDicList, setGwdDicList] = useState<GwdDicItem[]>([]);
const [gwdCodeValue, setGwdCodeValue] = useState<string>();
const [xmCodeValue, setXmCodeValue] = useState<string>();
const [gwdDicOptions, setGwdDicOptions] = useState<options[]>([]);
const [railDicOptions, setRailDicOptions] = useState<options[]>([]);
const [orgGwdDicList, setOrgGwdDicList] = useState<GwdDicItem[]>([])
const onOrgChange = (value: string, option:any) => {
let list = KTJOrgList.filter((item) => item.key === value);
form.resetFields(["gwdCode", "xmCode"]);
if (list && list.length) {
let orgItem: OrgItem = list[0];
setExtraDesc({...extraDesc,orgName:option.label})
if (orgItem && orgItem.gwdDicList) {
let listOptoins: options[] = [];
setGwdDicList(orgItem.gwdDicList);
setOrgGwdDicList(orgItem.gwdDicList)
orgItem.gwdDicList.map((item) => {
listOptoins.push({
value: item.key,
label: item.value,
});
});
setGwdDicOptions(listOptoins);
setGwdCodeValue(listOptoins[0].value);
}
}
};
const onGwdChange = (value: string, option:any) => {
let cloneGwdDicList = [...orgGwdDicList];
form.resetFields(["xmCode"]);
let list = cloneGwdDicList.filter((item) => item.key === value);
if (list && list.length) {
let gwdDicItem: GwdDicItem = list[0];
setExtraDesc({...extraDesc,gwdName:option.label})
if (gwdDicItem && gwdDicItem.railDicList) {
let railOptions: options[] = [];
gwdDicItem.railDicList.map((item) => {
railOptions.push({
value: item.key,
label: item.value,
});
});
if(railOptions && railOptions.length){
setRailDicOptions(railOptions);
setXmCodeValue(railOptions[0].value);
}
}
}
};
//车站数据
const [stationList, setStationList] = useState<KTJ_BASE_TYPE[]>([])
const queryStation = (value:string, option:any) => {
form.resetFields(["stationCode"]);
let tljCode = form.getFieldValue("tljCode")
let gwdCode = form.getFieldValue("gwdCode")
let xmCode = form.getFieldValue("xmCode")
const params = {
tljCode,
gwdCode,
xmCode
}
setExtraDesc({...extraDesc,xmName:option.label})
queryStationData(params).then(res => {
if(res && res.data){
setStationList(res.data)
}else{
setStationList([])
}
const measureForm = localStorage.getItem('measureForm')
if (measureForm) {
form.setFieldsValue({
...JSON.parse(measureForm)
});
}
})
}
useEffect(()=>{
if(systemState.orgInfo){
const cloneOrgItem = systemState.orgInfo
if(cloneOrgItem.value){
const org = JSON.parse(cloneOrgItem.value)
onOrgChange(org[0].value, org[0])
onGwdChange(org[1].value, org[1])
form.setFieldsValue({
tljCode:org[0].value,
gwdCode: org[1].value,
xmCode: org[2].value
});
queryStation(org[2].value, org[2])
}
}
},[KTJOrgList, xmCodeValue, gwdCodeValue, systemState.orgInfo])
useEffect(()=>{
if(systemState.accountInfo){
const cloneAccountItem = systemState.accountInfo
if(cloneAccountItem.value){
form.setFieldsValue({
operator:cloneAccountItem.value
})
}
}
},[systemState.accountInfo])
const onRailTypeChange = (value:string, option:any) => {
setExtraDesc({...extraDesc,railSizeName:option.label})
}
//数据来源change
const [dataSource, setDataSource] = useState('')
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})
}
//股别change
const [unitType, setUnitType] = useState<number>()
const onUnitTypeChange = (value:string) => {
RAIN_TYPES.map(item => {
if(item.code === value){
setUnitType(item.type)
}
})
}
useEffect(() => {
const initData = {
operator: "klj_test",
direction: "左",
}
form.setFieldsValue(initData);
}, [userInfo.nickname, form]);
return (
<>
{contextHolder}
<div>
<Form
form={form}
labelCol={{ span: 8 }}
wrapperCol={{ span: 16 }}
size="large"
initialValues={{ remember: true }}
onFinish={onFinish}
autoComplete="off"
>
<div className="layout">
<Form.Item
label="操作员"
name="operator"
rules={[{ required: true, message: "请输入操作员姓名" }]}
>
<Input />
</Form.Item>
<Form.Item
label="测量名称"
name="name"
rules={[{ required: true, message: "请输入测量名称" }]}
>
<Input placeholder="请输入测量名称" />
</Form.Item>
<Form.Item
label="铁路局"
name="tljCode"
rules={[{ required: true, message: "请选择铁路局" }]}
>
<Select
onChange={onOrgChange}
placeholder="请选择铁路段"
>
{KTJOrgList.map((item) => (
<Option key={item.key} value={item.key}>{item.value}</Option>
))}
</Select>
</Form.Item>
<Form.Item
label="铁路段"
name="gwdCode"
rules={[{ required: true, message: "请选择铁路段" }]}
>
<Select
onChange={onGwdChange}
placeholder="请选择铁路段"
value={gwdCodeValue}
options={gwdDicOptions.map((item) => ({ label: item.label, value: item.value }))}
>
</Select>
</Form.Item>
<Form.Item
label="铁路线"
name="xmCode"
rules={[{ required: true, message: "请选择铁路线" }]}
>
<Select
placeholder="请选择铁路线"
value={xmCodeValue}
onChange={queryStation}
options={railDicOptions.map((item) => ({ label: item.label, value: item.value }))}
>
</Select>
</Form.Item>
<Form.Item
label="轨型"
name="railSize"
rules={[{ required: true, message: "请选择轨型" }]}
>
<Select
placeholder="请选择轨型"
onChange={onRailTypeChange}
options={WRPS_GGGX_List.map((item) => ({
label: item.value,
value: item.key,
}))}
></Select>
</Form.Item>
<Form.Item
label="数据来源"
name="dataSource"
rules={[{ required: true, message: "请选择数据来源" }]}
>
<Select
placeholder="请选择数据来源"
onChange={onDataSourceChange}
options={SJLY_List.map((item) => ({
label: item.value,
value: item.key,
}))}
></Select>
</Form.Item>
<Form.Item
label="车站"
name="stationCode"
rules={[{ required: true, message: "请选择车站" }]}
>
<Select
placeholder="请选择车站"
onChange={onSatioinChange}
>
{stationList.map((item) => (
<Option key={item.key} value={item.key}>{item.value}</Option>
))}
</Select>
</Form.Item>
<Form.Item
label="线路分类"
name="lineClassify"
rules={[{ required: true, message: "请选择线路分类" }]}
>
<Select
placeholder="请选择线路分类"
options={XLFL_List.map((item) => ({
label: item.value,
value: item.key,
}))}
></Select>
</Form.Item>
<Form.Item
label="采集方式"
name="dataType"
rules={[{ required: true, message: "请选择采集方式" }]}
>
<Select
placeholder="请选择采集方式"
options={WRPS_CJFS_List.map((item) => ({
label: item.value,
value: item.key,
}))}
></Select>
</Form.Item>
<Form.Item
label="批次"
name="batch"
rules={[{ required: true, message: "请输入批次" }]}
>
<Input placeholder="请输入批次" />
</Form.Item>
{/* <Form.Item
label="位置"
name="location"
rules={[{ required: false, message: "请输入位置" }]}
>
<Input placeholder="请输入位置" />
</Form.Item>
<Form.Item
label="方向"
name="direction"
rules={[{ required: false, message: "请输入方向" }]}
>
<Select
className="w-[5rem]"
options={[
{ value: "左", label: "左侧" },
{ value: "右", label: "右侧" },
]}
/>
</Form.Item> */}
{dataSource === 'DCDC' ? (
<>
<Form.Item
label="道岔号"
name="turnoutNum"
rules={[{ required: true, message: "请输入道岔号" }]}
>
<InputNumber className="w-[18vw]" placeholder="请输入道岔号" />
</Form.Item>
<Form.Item
label="枕木号"
name="sleeperNum"
rules={[{ required: true, message: "请输入枕木号" }]}
>
<InputNumber className="w-[18vw]" placeholder="请输入枕木号" />
</Form.Item>
<Form.Item
label="行别"
name="xbCode"
rules={[{ required: true, message: "请选择行别" }]}
>
<Select placeholder="请选择行别" options={xbCodeOptions}>
</Select>
</Form.Item>
</>
) : (
<Form.Item
label="行别"
name="xbCode"
rules={[{ required: true, message: "请选择行别" }]}
>
<Select placeholder="请选择行别">
{XB_CODES.map((item) => (
<Option key={item.code} value={item.code}>
{item.name}
</Option>
))}
</Select>
</Form.Item>
)}
{dataSource === "XLDC" &&
<div style={{display:"flex"}}>
<Form.Item
label="里程"
style={{marginLeft:"5vw"}}
name="kilometre"
rules={[{ required: true, message: "请输入" }]}
>
<InputNumber className="w-[7vw]" placeholder="公里" />
</Form.Item>
<Form.Item
>
+
</Form.Item>
<Form.Item
name="meters"
style={{marginLeft:"10px"}}
rules={[{ required: true, message: "请输入" }]}
>
<InputNumber className="w-[6vw]" placeholder="百米" />
</Form.Item>
</div>
}
<Form.Item
label="股别"
name="unitType"
rules={[{ required: true, message: "请选择股别" }]}
>
<Select placeholder="请选择股别" onChange={onUnitTypeChange} options={unitTypeList}>
</Select>
</Form.Item>
{unitType === 2 &&
<Form.Item
label="半径"
name="radius"
rules={[{ required: true, message: "请输入半径" }]}
>
<InputNumber className="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>
</>
);
}

27
src/pages/measure/components/MeasureConfig.tsx

@ -303,7 +303,7 @@ export default function MeasureConfig() {
};
const resetLabel = (labelName: string) => {
return <label style={{ fontSize: '24px' }}>{ labelName }</label>
return <label style={{ fontSize: '20px' }}>{ labelName }</label>
}
return (
@ -346,7 +346,7 @@ export default function MeasureConfig() {
rules={[{ required: true, message: "请选择轨型" }]}
>
<Select
className="label-vh"
className="label-vh select-w200"
placeholder="请选择轨型"
onChange={onRailTypeChange}
options={WRPS_GGGX_List.map((item) => ({
@ -472,27 +472,30 @@ export default function MeasureConfig() {
)}
{dataSource === "XLDC" &&
<Row className="kilometre">
<Col span={10}>
<div className="kilometre-label">
<div>
<Form.Item
label={resetLabel('里程')}
name="kilometre"
labelCol={{ span: 10 }}
labelCol={{ span: 20 }}
style={{width: '10rem'}}
rules={[{ required: true, message: "请输入" }]}
>
<InputNumber className="label-vh" placeholder="公里" />
<InputNumber className="label-vh" style={{width: '100px'}} placeholder="公里" />
</Form.Item>
</Col>
<Col span={1}>+</Col>
<Col span={10}>
</div>
<div>
+
</div>
<div>
<Form.Item
name="meters"
rules={[{ required: true, message: "请输入" }]}
>
<InputNumber className="label-vh" placeholder="百米" />
<InputNumber className="label-vh" style={{width: '100px'}} placeholder="百米" />
</Form.Item>
</Col>
</Row>
</div>
</div>
}
<Form.Item

Loading…
Cancel
Save