Browse Source

优化测量保存测量名称

master
LiLongLong 2 months ago
parent
commit
2a5d78abf4
  1. 2
      .env
  2. 1
      src/App.tsx
  3. 2
      src/components/bluetooth.scss
  4. 1
      src/pages/measure/components/MeasureAction.scss
  5. 26
      src/pages/measure/components/MeasureAction.tsx
  6. 93
      src/pages/measure/components/MeasureConfig.tsx
  7. 83
      src/pages/system/Setting.tsx
  8. 4
      src/pages/system/setting.scss
  9. 6
      src/pages/system/types.ts
  10. 10
      src/services/measure/analysis.ts
  11. 2
      src/services/user/system.ts

2
.env

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

1
src/App.tsx

@ -38,7 +38,6 @@ function App() {
} else if (data.messageType === "STATE" && data.path === "/api/subdevice/uartchanel/get-channel-state") {
dispatch(updateDeviceState(data.data));
} else if (data.messageType === "STATE" && data.path === "/api/profiler-state/get-state") {
console.log('updateDevice===',data.data);
dispatch(updateDevice(data.data));
}else if(data.path === "/get-task-progress"){
let syncData = data.data;

2
src/components/bluetooth.scss

@ -75,7 +75,7 @@
width: 2rem;
padding-left: 2px;
padding-right: 2px;
color: #1afa29;
color: #0b8a13;
border: solid 1px #1afa29;
border-radius: 2px;
&::after {

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

@ -9,7 +9,6 @@
grid-template-columns: 1fr 1fr 1fr;
width: 80vw;
height: 50vh;
padding-top: 5vh
}
.modal_upload{

26
src/pages/measure/components/MeasureAction.tsx

@ -3,6 +3,7 @@ import { Button, Checkbox, CheckboxProps, Drawer, Form, Input, InputNumber, mess
import { useNavigate } from "react-router";
import {
getAlignPointsByRailSize,
getRecordPoints,
getReport,
startMeasurement,
stopMeasurement,
@ -338,7 +339,7 @@ export default function MeasureAction() {
}else if(status === 2) {
updated[3].color = STEP_COLOR_GREEN;
updated[4].color = STEP_COLOR_BLUE;
setMeasurementFinished(true);
// setMeasurementFinished(true);
}
updated[1].color = STEP_COLOR_GREEN;
updated[2].color = STEP_COLOR_GREEN;
@ -347,9 +348,9 @@ export default function MeasureAction() {
break;
case "FINISH_RECORD":
updated.forEach(u => (u.color = STEP_COLOR_GREEN));
setCaLoading(true)
setLoadingText('正在处理测量数据...')
setMeasurementFinished(true);
// 调用接口获取转换完成的测量数据
getMeasurementFinishRecord()
break;
case "WRONG_SIDE":
// 把状态全部置灰
@ -365,6 +366,21 @@ export default function MeasureAction() {
});
};
const getMeasurementFinishRecord = () => {
setCaLoading(true)
setLoadingText('正在处理测量数据...')
getRecordPoints().then(res => {
if(res.status === 0){
setCaLoading(false)
canvasRef.current?.setMeasurementCalibrationData(res.data)
setshowCalibration(true)//校准线
setShowStandard(true)
}else{
message.error('测量数据转换失败')
}
})
}
// 处理点数据消息
const handlePointReport = (pointData: TrackRecordSig["data"]) => {
if (!isLeftFinished.current) {
@ -393,8 +409,8 @@ export default function MeasureAction() {
} else if (data.path === "/api/measurement-task/point-report") {
handlePointReport(data.data);
} else if (data.path === "/api/measurement-task/measure-finished") {
setCaLoading(false)
handleMeasureResult(data.data)
// setCaLoading(false)
// handleMeasureResult(data.data)
}
});
wsClient.connect();

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

@ -22,7 +22,9 @@ import type {
} from "../../../services/ktjTypes";
import { RAIN_TYPES, XB_CODES, DATA_SOURCE } from "../../../constant/index";
import "./MeasureAction.scss";
import { GwdItem, orgCascaderType, systemItem } from "../../system/types";
import { GwdItem, orgCascaderType, OrgOptions, systemItem } from "../../system/types";
export default function MeasureConfig() {
const navigate = useNavigate();
const [KTJOrgList, setKTJOrgList] = useState<orgCascaderType[]>([]);
@ -41,6 +43,9 @@ export default function MeasureConfig() {
const [unitTypeList, setUnitTypeList] = useState<unitTypesOptions[]>([])
const [unitType, setUnitType] = useState<number>()
const inputRef = useRef<InputRef>(null);
const systemState = useAppSelector((store) => store.systemState);
const [currentDate, setCurrentDate] = useState<string>()
useEffect(()=>{
queryDictionaryList()
resetRailTypes()
@ -91,6 +96,24 @@ export default function MeasureConfig() {
}
}
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}`
console.log('------------currentTime------------------', currentTime)
setCurrentDate(currentTime)
let now = `${year}${month}${day}`
return {
now,
nowfm: currentTime,
}; // 格式化日期为YYYY-MM-DD格式
}
const setForm = (mfInfo: any) => {
let kilometre = 0
let meters = 0
@ -98,11 +121,30 @@ export default function MeasureConfig() {
kilometre = mfInfo.mileage.split('+')[0]
meters = mfInfo.mileage.split('+')[1]
}
const ymd = getDate();
const createTime = mfInfo.createTime
let todayNumber = mfInfo.todayNumber
if(createTime.indexOf(ymd.nowfm) === -1 ){
todayNumber = 0
}
let orgInfo = systemState.orgInfo;
let labels: string[] = []
if(orgInfo && orgInfo.value){
const orgValue = JSON.parse(orgInfo.value)
orgValue && orgValue.forEach((org: OrgOptions) => {
console.log('label===', org.label)
labels.push(org.label)
})
}
let label = labels.join('-')
let name = `${label}-${ymd.now}${(Number(todayNumber) + 1).toString().padStart(4, '0') }`
form.setFieldsValue({
...mfInfo,
orgValues: [mfInfo.tljCode, mfInfo.gwdCode, mfInfo.xmCode],
kilometre,
meters,
name,
});
const railList = [mfInfo.tljCode, mfInfo.gwdCode, mfInfo.xmCode]
setOrgValues(railList)
@ -336,13 +378,22 @@ export default function MeasureConfig() {
<div>
<Form
form={form}
labelCol={{ span: 8 }}
wrapperCol={{ span: 16 }}
size="large"
labelCol={{span: 6}}
initialValues={{ remember: true }}
onFinish={onFinish}
autoComplete="off"
>
<div style={{marginTop: '1rem', display:'grid', gridTemplateColumns: '1fr 1fr 1fr'}}>
<Form.Item
label={resetLabel('测量名称')}
name="name"
rules={[{ required: true, message: "请输入测量名称" }]}
>
<Input ref={inputRef} style={{width: '30rem'}} className="label-vh" placeholder="请输入测量名称" />
</Form.Item>
</div>
<div className="layout">
<Form.Item
label={resetLabel('操作员')}
@ -351,20 +402,13 @@ export default function MeasureConfig() {
>
<Input className="label-vh"/>
</Form.Item>
<Form.Item
label={resetLabel('测量名称')}
name="name"
rules={[{ required: true, message: "请输入测量名称" }]}
>
<Input ref={inputRef} className="label-vh" placeholder="请输入测量名称" />
</Form.Item>
<Form.Item
{/* <Form.Item
label={resetLabel('铁路局')}
name="orgValues"
rules={[{ required: true, message: "请选择铁路局" }]}
>
<Cascader className='label-vh w-[400px]' key={orgValues.length} defaultValue={orgValues} options={KTJOrgList} onChange={onOrgChange} placeholder="请选择局段线" />
</Form.Item>
<Cascader className='label-vh w-[600px]' key={orgValues.length} defaultValue={orgValues} options={KTJOrgList} onChange={onOrgChange} placeholder="请选择局段线" />
</Form.Item> */}
<Form.Item
label={resetLabel('轨型')}
name="railSize"
@ -497,30 +541,27 @@ export default function MeasureConfig() {
)}
{dataSource === "XLDC" &&
<div className="kilometre-label">
<div>
<>
<Form.Item
label={resetLabel('里程')}
name="kilometre"
labelCol={{ span: 20 }}
style={{width: '10rem'}}
rules={[{ required: true, message: "请输入" }]}
>
<InputNumber className="label-vh" style={{width: '100px'}} placeholder="公里" />
<div style={{display:"flex",alignItems:"center"}}>
<InputNumber className="label-vh w-[18vw]" placeholder="公里" />
</div>
</Form.Item>
</div>
<div>
+
</div>
<div>
<Form.Item
label={resetLabel('百米')}
name="meters"
rules={[{ required: true, message: "请输入" }]}
>
<InputNumber className="label-vh" style={{width: '100px'}} placeholder="百米" />
<div style={{display:"flex",alignItems:"center"}}>
<InputNumber className="label-vh w-[18vw]" placeholder="百米" />
</div>
</Form.Item>
</div>
</div>
</>
}
<Form.Item

83
src/pages/system/Setting.tsx

@ -13,6 +13,7 @@ import { updateSystemAccountState, updateSystemOrgState } from '../../store/syst
import {createWebSocket, sharedWsUrl} from "../../services/socket";
import {start, stop, disconnect, connect} from "../../services/ble/ble";
import { StandbyMinutes } from '../../services/measure/type';
import "./setting.scss";
export default function Setting(){
useEffect(()=>{
@ -33,6 +34,7 @@ export default function Setting(){
const [orgValues, setOrgValues] = useState<string[]>([])
const [bleList, setBleList] = useState<bleItem[]>([])
const [saveLoading, setSaveLoading] = useState(false)
const [todayNumberFlag, setTodayNumberFlag] = useState(true)
const dormancyList = [{
label: '1分钟',
value: 1,
@ -54,7 +56,21 @@ export default function Setting(){
// 创建 websocket 客户端
const wsClient = createWebSocket(sharedWsUrl);
function querySettingData(){
let systemInfo = systemState.systemInfo
let systemInfo: systemItem[] = JSON.parse(JSON.stringify(systemState.systemInfo))
console.log('systemInfo---', systemInfo)
if(systemInfo && systemInfo.length){
systemInfo.forEach(item => {
if(item.value === 'false'){
item.value = false
}
if(item.value === 'true'){
item.value = true
}
if(item.code === 'TODAY_NUMBER_FLAG'){
setTodayNumberFlag(item.value)
}
})
}
setSystemList(systemInfo)
}
@ -109,7 +125,7 @@ export default function Setting(){
useEffect(()=>{
if(orgInfo && orgInfo.value){
let orgIds:string[] = []
const values:child[] = JSON.parse(orgInfo.value)
const values:child[] = JSON.parse(orgInfo.value as string)
values.map(item => {
orgIds.push(item.value)
})
@ -119,11 +135,11 @@ export default function Setting(){
const queryConfig = () => {
getDeviceConfig().then((res: any) => {
console.log('-----', res)
const standbyMinutes = res.data.standbyMinutes
if (standbyMinutes ) {
setStandbyMinutes(standbyMinutes)
}
setTodayNumberFlag(res.data.todayNumberFlag)
})
}
@ -306,7 +322,8 @@ export default function Setting(){
}
};
const saveSet = (item:systemItem, value:string) => {
const saveSet = (item:systemItem, value:string | boolean) => {
console.log('value--', value)
const params = {
id:item.id,
value
@ -321,38 +338,52 @@ export default function Setting(){
name="basic"
labelCol={{ span: 5, offset: 1 }}
wrapperCol={{ span: 16 }}
style={{ maxWidth: 600 }}
style={{ maxWidth: 600}}
autoComplete="off"
>
{
systemList.map((item, index) => {
return item.name ?
<Form.Item
if (item.code === 'ORG') {
return <Form.Item
key={index}
label={item.name}
name={item.code}
>
{item.code === 'ORG' ?
<Cascader className='w-[300px]' key={orgValues.length} defaultValue={orgValues} options={KTJOrgList} onChange={onOrgChange} placeholder="请选择局段线" />
: <Input defaultValue={item.value} onBlur={(e) => saveSet(item, e.target.value)}/>}
<Cascader className='w-[300px]' key={orgValues.length} defaultValue={orgValues} options={KTJOrgList} onChange={onOrgChange} placeholder="请选择局段线" />
</Form.Item>
: null
})
}else if(item.code === 'TODAY_NUMBER_FLAG'){
return <Form.Item
label={item.name || '名称加序号'}
name={item.code}
key={index}
>
<Switch defaultValue={todayNumberFlag} onChange={(value) => saveSet(item, value)} />
</Form.Item>
}else if(item.code === 'DOWNLOAD_FILE_TYPE'){
return <Form.Item
label={item.name || '导出文件格式'}
name={item.code}
key={index}
>
<Select
defaultValue={item.value}
style={{ width: 120 }}
options={[{ value: 'txt', label: 'txt' }, { value: 'ban', label: 'ban' }]}
onChange={(value)=>{saveSet(item, value)}}
/>
</Form.Item>
}else {
return <Form.Item
key={index}
label={item.name}
name={item.code}
>
<Input defaultValue={item.value} onBlur={(e) => saveSet(item, e.target.value)}/>
</Form.Item>
}
})
}
<Form.Item
label='名称加序号'
name='todayNumberFlag'
>
<Switch defaultChecked onChange={onTodayNumberFlagChange} />
</Form.Item>
<Form.Item label="导出文件格式" name="downloadFileType" initialValue="txt">
<Select style={{ width: 120 }} onChange={onDownloadFileTypeChange} >
<Select.Option value="txt">txt</Select.Option>
<Select.Option value="ban">ban</Select.Option>
</Select>
</Form.Item>
</Form>
}

4
src/pages/system/setting.scss

@ -0,0 +1,4 @@
.ant-form-item-row{
display: flex;
align-items: center;
}

6
src/pages/system/types.ts

@ -19,7 +19,7 @@ export type systemItem = {
id?:string | number;
code?: string;
name?: string;
value?: string;
value?: any;
}
export type bleItem = {
@ -29,3 +29,7 @@ export type bleItem = {
loading: boolean;
}
export type OrgOptions = {
value: string;
label: string;
}

10
src/services/measure/analysis.ts

@ -142,4 +142,12 @@ export function getAlignPointsByRailSize(params:{railSize:string}){
url: `/api/align/catch/points/${params.railSize}`,
method: "GET",
});
}
}
// 获取测量完成,转换后的测量数据
export function getRecordPoints(){
return httpRequest<BaseResponse>({
url: `/api/measurement-task/get-record`,
method: "GET",
});
}

2
src/services/user/system.ts

@ -1,5 +1,5 @@
import httpRequest, { BaseResponse } from "../httpRequest";
export function sysSet(params:{code?: string, name?: string, value?: string}, type: "GET" | "POST" | "PATCH" | "PUT" | "DELETE" = "GET"): Promise<BaseResponse> {
export function sysSet(params:{code?: string, name?: string, value?: string | boolean}, type: "GET" | "POST" | "PATCH" | "PUT" | "DELETE" = "GET"): Promise<BaseResponse> {
return httpRequest<BaseResponse>({
url: "/api/sysSet/",
params: {

Loading…
Cancel
Save