Browse Source

优化保存测量数据

master
LiLongLong 2 months ago
parent
commit
9a79fce4e4
  1. 2
      .env
  2. 1
      src/assets/icon-lightning.svg
  3. 9
      src/components/Header.tsx
  4. 8
      src/components/bluetooth.scss
  5. 4
      src/pages/measure/components/MeasureAction.scss
  6. 8
      src/pages/measure/components/MeasureAction.tsx
  7. 146
      src/pages/measure/components/MeasureConfig.tsx
  8. 41
      src/pages/system/Setting.tsx

2
.env

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

1
src/assets/icon-lightning.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="12" height="22" viewBox="0 0 12 22"><g><path d="M7.4019,0L0,12.7847L5.93566,12.7847L3.2012,22L12,8.59375L5.26888,8.59375L7.4019,0Z" fill="#FFFFFF" fill-opacity="1" style="mix-blend-mode:passthrough"/></g></svg>

9
src/components/Header.tsx

@ -1,6 +1,6 @@
import icon_usb from "../assets/icon_usb.svg"; import icon_usb from "../assets/icon_usb.svg";
import icon_bluetooth from "../assets/icon_bluetooth.svg"; import icon_bluetooth from "../assets/icon_bluetooth.svg";
import icon_charging from "../assets/icon-charging.svg";
import icon_charging from "../assets/icon-lightning.svg";
import icon_avatar from "../assets/icon_avatar.svg"; import icon_avatar from "../assets/icon_avatar.svg";
import icon_logout from "../assets/icon_logout.svg"; import icon_logout from "../assets/icon_logout.svg";
import { import {
@ -158,12 +158,11 @@ export default function Header() {
<span className="w-[120px]">Y轴倾斜{deviceInfo.inclinatorY}</span> <span className="w-[120px]">Y轴倾斜{deviceInfo.inclinatorY}</span>
</section> </section>
<section className="bg-white rounded-md h-9 w-12 relative mr-3 flex justify-center items-center"> <section className="bg-white rounded-md h-9 w-12 relative mr-3 flex justify-center items-center">
<div className={`${powerColor} flex justify-center items-center`}> <div className={`${powerColor} flex justify-center items-center`}>
<div className="power-process" style={{width: `${power}%`}}>
<div style={{"position": "relative","top": "-1.6rem"}}>{power}%</div>
<div className="power-process text-center" style={{width: `${power}%`}}>
<div style={{"position": "relative","top": "-1.6rem"}}>{power}</div>
</div> </div>
{(deviceInfo.flag === 1 && Number(power) < 100) &&
{(deviceInfo.flag === 0 && Number(power) < 100) &&
<div className="power-charging"> <div className="power-charging">
<img <img
src={icon_charging} src={icon_charging}

8
src/components/bluetooth.scss

@ -7,7 +7,7 @@
.power-process{ .power-process{
position: absolute; position: absolute;
height: 13px; height: 13px;
background: #cecece;
background: #c8c8c8;
left: 0; left: 0;
} }
@ -75,15 +75,15 @@
width: 2rem; width: 2rem;
padding-left: 2px; padding-left: 2px;
padding-right: 2px; padding-right: 2px;
color: #0b8a13;
border: solid 1px #1afa29;
color: #52c41a;
border: solid 1px #52c41a;
border-radius: 2px; border-radius: 2px;
&::after { &::after {
content: " "; content: " ";
position: absolute; position: absolute;
width: 4px; width: 4px;
height: 8px; height: 8px;
background-color: #1afa29;
background-color: #52c41a;
right: -4px; right: -4px;
top: 3px; top: 3px;
border-top-right-radius: 2px; border-top-right-radius: 2px;

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

@ -9,6 +9,8 @@
grid-template-columns: 1fr 1fr 1fr; grid-template-columns: 1fr 1fr 1fr;
width: 80vw; width: 80vw;
height: 50vh; height: 50vh;
padding-left: 20px;
margin-top: 2rem;
} }
.modal_upload{ .modal_upload{
@ -21,7 +23,7 @@
grid-template-columns: 1fr 1fr 1fr; grid-template-columns: 1fr 1fr 1fr;
} }
.ant-form-item-label { .ant-form-item-label {
padding-top: 0.5rem !important;
margin-left: 20px;
.kilometre{ .kilometre{
padding-left: 4rem; padding-left: 4rem;
margin-left: 1.8rem; margin-left: 1.8rem;

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

@ -348,7 +348,6 @@ export default function MeasureAction() {
break; break;
case "FINISH_RECORD": case "FINISH_RECORD":
updated.forEach(u => (u.color = STEP_COLOR_GREEN)); updated.forEach(u => (u.color = STEP_COLOR_GREEN));
setMeasurementFinished(true);
// 调用接口获取转换完成的测量数据 // 调用接口获取转换完成的测量数据
getMeasurementFinishRecord() getMeasurementFinishRecord()
break; break;
@ -369,14 +368,17 @@ export default function MeasureAction() {
const getMeasurementFinishRecord = () => { const getMeasurementFinishRecord = () => {
setCaLoading(true) setCaLoading(true)
setLoadingText('正在处理测量数据...') setLoadingText('正在处理测量数据...')
getRecordPoints().then(res => {
getRecordPoints().then((res: Record<string, any>) => {
setCaLoading(false)
if(res.status === 0){ if(res.status === 0){
setCaLoading(false) setCaLoading(false)
setMeasurementFinished(true);
canvasRef.current?.setMeasurementCalibrationData(res.data) canvasRef.current?.setMeasurementCalibrationData(res.data)
setshowCalibration(true)//校准线 setshowCalibration(true)//校准线
setShowStandard(true) setShowStandard(true)
}else{ }else{
message.error('测量数据转换失败')
setMeasurementFinished(false)
message.error(res.message)
} }
}) })
} }

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

@ -1,5 +1,5 @@
/* eslint-disable array-callback-return */ /* eslint-disable array-callback-return */
import { Button, Form, Input, message, Select, InputNumber, Cascader, Row, Col } from "antd";
import { Button, Form, Input, message, Select, InputNumber, Cascader, Row, Col, Spin } from "antd";
import { useEffect, useRef, useState } from "react"; import { useEffect, useRef, useState } from "react";
import { useNavigate } from "react-router"; import { useNavigate } from "react-router";
import { getDetailList, saveMeasurement_new } from "../../../services/measure/analysis"; import { getDetailList, saveMeasurement_new } from "../../../services/measure/analysis";
@ -44,13 +44,15 @@ export default function MeasureConfig() {
const [unitType, setUnitType] = useState<number>() const [unitType, setUnitType] = useState<number>()
const inputRef = useRef<InputRef>(null); const inputRef = useRef<InputRef>(null);
const systemState = useAppSelector((store) => store.systemState); const systemState = useAppSelector((store) => store.systemState);
const [currentDate, setCurrentDate] = useState<string>()
const [kilMet, setKilMet] = useState<Record<string, any>>({})
const [loading, setLoading] = useState(false)
useEffect(()=>{ useEffect(()=>{
showLastForm()
queryDictionaryList() queryDictionaryList()
resetRailTypes() resetRailTypes()
resetDataSource() resetDataSource()
queryRailData()
// queryRailData()
console.log('systemState.orgInfo---', systemState.orgInfo)
setTimeout(() => { setTimeout(() => {
if(inputRef.current){ if(inputRef.current){
inputRef.current.focus() inputRef.current.focus()
@ -60,53 +62,50 @@ export default function MeasureConfig() {
//获取铁路局数据 //获取铁路局数据
function queryRailData(){
getOrgListService().then((res) => {
if (res && res.data) {
let resData: OrgItem[] = res.data;
let data = convertToCascaderData(resData)
setKTJOrgList(data)
// 使用上次保存时的参数。
showLastForm()
}
}).catch((e) => {});
}
// function queryRailData(){
// getOrgListService().then((res) => {
// if (res && res.data) {
// let resData: OrgItem[] = res.data;
// let data = convertToCascaderData(resData)
// setKTJOrgList(data)
// // 使用上次保存时的参数。
// }
// }).catch((e) => {});
// }
function showLastForm () { function showLastForm () {
const measureForm = localStorage.getItem('measureForm')
let mfInfo: any = {} let mfInfo: any = {}
if(!measureForm) {
// 获取记录中的第一条数据 // 获取记录中的第一条数据
const params = {
pageSize: 1,
pageNum: 5,
}
getDetailList(params).then(res => {
if(res.success){
const list = res.data.list
if(list && list.length){
mfInfo = list[0]
setForm(mfInfo)
}
}
})
}else {
mfInfo = JSON.parse(measureForm)
setForm(mfInfo)
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 getDate = () => {
const currentDate = new Date(); // 获取当前时间 const currentDate = new Date(); // 获取当前时间
const year = currentDate.getFullYear(); // 获取完整的年份 const year = currentDate.getFullYear(); // 获取完整的年份
let month: string | number = currentDate.getMonth() + 1; // 获取月份(0-11),需要加1 let month: string | number = currentDate.getMonth() + 1; // 获取月份(0-11),需要加1
let day: string | number = currentDate.getDate(); // 获取日 let day: string | number = currentDate.getDate(); // 获取日
month = month < 10 ? "0" + month : month month = month < 10 ? "0" + month : month
day = day < 10 ? "0" + day : day day = day < 10 ? "0" + day : day
const currentTime = `${year}-${month}-${day}` const currentTime = `${year}-${month}-${day}`
console.log('------------currentTime------------------', currentTime)
setCurrentDate(currentTime)
let now = `${year}${month}${day}` let now = `${year}${month}${day}`
return { return {
now, now,
@ -123,30 +122,37 @@ export default function MeasureConfig() {
} }
const ymd = getDate(); const ymd = getDate();
const createTime = mfInfo.createTime const createTime = mfInfo.createTime
let todayNumber = mfInfo.todayNumber
if(createTime.indexOf(ymd.nowfm) === -1 ){
let todayNumber = mfInfo.todayNumber || 0
if(createTime && createTime.indexOf(ymd.nowfm) === -1 ){
todayNumber = 0 todayNumber = 0
} }
let orgInfo = systemState.orgInfo; let orgInfo = systemState.orgInfo;
let labels: string[] = [] let labels: string[] = []
let orgCode: string[] = []
if(orgInfo && orgInfo.value){ if(orgInfo && orgInfo.value){
const orgValue = JSON.parse(orgInfo.value) const orgValue = JSON.parse(orgInfo.value)
orgValue && orgValue.forEach((org: OrgOptions) => { orgValue && orgValue.forEach((org: OrgOptions) => {
console.log('label===', org.label)
labels.push(org.label) labels.push(org.label)
orgCode.push(org.value)
}) })
} }
let label = labels.join('-') let label = labels.join('-')
let name = `${label}-${ymd.now}${(Number(todayNumber) + 1).toString().padStart(4, '0') }` let name = `${label}-${ymd.now}${(Number(todayNumber) + 1).toString().padStart(4, '0') }`
setKilMet({
kilometre,
meters
})
const user = localStorage.getItem("user");
let userData = JSON.parse(user || "");
form.setFieldsValue({ form.setFieldsValue({
...mfInfo, ...mfInfo,
orgValues: [mfInfo.tljCode, mfInfo.gwdCode, mfInfo.xmCode],
orgValues: orgCode,
kilometre, kilometre,
meters, meters,
name, name,
operator: userData.nickname || userData.account
}); });
const railList = [mfInfo.tljCode, mfInfo.gwdCode, mfInfo.xmCode]
const railList = orgCode
setOrgValues(railList) setOrgValues(railList)
getStationData(railList) getStationData(railList)
setDataSource(mfInfo.dataSource) setDataSource(mfInfo.dataSource)
@ -206,9 +212,17 @@ export default function MeasureConfig() {
//车站数据 //车站数据
const getStationData = (railData: string[]) => { const getStationData = (railData: string[]) => {
let tljCode = railData[0]
let gwdCode = railData[1]
let xmCode = railData[2]
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 = { const params = {
tljCode, tljCode,
gwdCode, gwdCode,
@ -311,15 +325,22 @@ export default function MeasureConfig() {
} }
console.log('values--11-', values) 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 = { const params = {
operator: values["operator"],//操作员 operator: values["operator"],//操作员
name: values["name"],//测量名称 name: values["name"],//测量名称
location: values["location"],//位置 location: values["location"],//位置
direction: values["direction"],//方向 direction: values["direction"],//方向
tljCode: values["tljCode"],//铁路局
gwdCode: values["gwdCode"],//铁路段
xmCode: values["xmCode"],//铁路线
tljCode: orgCode[0],//values["tljCode"],//铁路局
gwdCode: orgCode[1],//values["gwdCode"],//铁路段
xmCode: orgCode[2],//values["xmCode"],//铁路线
lineClassify: values["lineClassify"],//线路分类 lineClassify: values["lineClassify"],//线路分类
dataType: values["dataType"],//采集方式 dataType: values["dataType"],//采集方式
dataSource: values["dataSource"],//数据来源 dataSource: values["dataSource"],//数据来源
@ -355,6 +376,7 @@ export default function MeasureConfig() {
params.alignPoints = measureData params.alignPoints = measureData
} }
localStorage.setItem('measureForm', JSON.stringify(params)) localStorage.setItem('measureForm', JSON.stringify(params))
console.log('params---', params)
saveMeasurement_new(params) saveMeasurement_new(params)
.then((res) => { .then((res) => {
if (res.success) { if (res.success) {
@ -374,8 +396,8 @@ export default function MeasureConfig() {
} }
return ( return (
<>
<div>
<Spin spinning={loading}>
<div >
<Form <Form
form={form} form={form}
size="large" size="large"
@ -386,11 +408,13 @@ export default function MeasureConfig() {
> >
<div style={{marginTop: '1rem', display:'grid', gridTemplateColumns: '1fr 1fr 1fr'}}> <div style={{marginTop: '1rem', display:'grid', gridTemplateColumns: '1fr 1fr 1fr'}}>
<Form.Item <Form.Item
labelCol={{span: 3}}
style={{marginLeft:'-1rem'}}
label={resetLabel('测量名称')} label={resetLabel('测量名称')}
name="name" name="name"
rules={[{ required: true, message: "请输入测量名称" }]} rules={[{ required: true, message: "请输入测量名称" }]}
> >
<Input ref={inputRef} style={{width: '30rem'}} className="label-vh" placeholder="请输入测量名称" />
<Input ref={inputRef} style={{width: '71vw'}} className="label-vh" placeholder="请输入测量名称" />
</Form.Item> </Form.Item>
</div> </div>
@ -400,7 +424,7 @@ export default function MeasureConfig() {
name="operator" name="operator"
rules={[{ required: true, message: "请输入操作员姓名" }]} rules={[{ required: true, message: "请输入操作员姓名" }]}
> >
<Input className="label-vh"/>
<Input className="label-vh w-[18vw]"/>
</Form.Item> </Form.Item>
{/* <Form.Item {/* <Form.Item
label={resetLabel('铁路局')} label={resetLabel('铁路局')}
@ -440,14 +464,14 @@ export default function MeasureConfig() {
}))} }))}
></Select> ></Select>
</Form.Item> </Form.Item>
<Form.Item
{stationList && <Form.Item
label={resetLabel('车站')} label={resetLabel('车站')}
name="stationCode" name="stationCode"
rules={[{ required: true, message: "请选择车站" }]} rules={[{ required: true, message: "请选择车站" }]}
> >
<Select <Select
className="label-vh" className="label-vh"
style={{width: '18vw'}}
placeholder="请选择车站" placeholder="请选择车站"
onChange={onSatioinChange} onChange={onSatioinChange}
options={stationList.map((item) => ({ options={stationList.map((item) => ({
@ -456,7 +480,8 @@ export default function MeasureConfig() {
}))} }))}
> >
</Select> </Select>
</Form.Item>
</Form.Item>}
<Form.Item <Form.Item
label={resetLabel('线路分类')} label={resetLabel('线路分类')}
@ -493,7 +518,7 @@ export default function MeasureConfig() {
name="batch" name="batch"
rules={[{ required: true, message: "请输入批次" }]} rules={[{ required: true, message: "请输入批次" }]}
> >
<Input className="label-vh" placeholder="请输入批次" />
<InputNumber className="label-vh w-[18vw]" placeholder="请输入批次" />
</Form.Item> </Form.Item>
{dataSource === 'DCDC' ? ( {dataSource === 'DCDC' ? (
<> <>
@ -548,17 +573,16 @@ export default function MeasureConfig() {
rules={[{ required: true, message: "请输入" }]} rules={[{ required: true, message: "请输入" }]}
> >
<div style={{display:"flex",alignItems:"center"}}> <div style={{display:"flex",alignItems:"center"}}>
<InputNumber className="label-vh w-[18vw]" placeholder="公里" />
<InputNumber className="label-vh w-[16vw]" defaultValue={kilMet.kilometre} placeholder="公里" />
</div> </div>
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label={resetLabel('百米')} label={resetLabel('百米')}
name="meters" name="meters"
rules={[{ required: true, message: "请输入" }]} rules={[{ required: true, message: "请输入" }]}
> >
<div style={{display:"flex",alignItems:"center"}}> <div style={{display:"flex",alignItems:"center"}}>
<InputNumber className="label-vh w-[18vw]" placeholder="百米" />
<InputNumber className="label-vh w-[18vw]" defaultValue={kilMet.meters} placeholder="百米" />
</div> </div>
</Form.Item> </Form.Item>
</> </>
@ -601,6 +625,6 @@ export default function MeasureConfig() {
</div> </div>
</Form> </Form>
</div> </div>
</>
</Spin>
); );
} }

41
src/pages/system/Setting.tsx

@ -9,14 +9,16 @@ import {bleItem, child, GwdItem, orgCascaderType, systemItem} from './types';
import { sysSet } from '../../services/user/system'; import { sysSet } from '../../services/user/system';
import { getDeviceConfig, saveDeviceConfig } from '../../services/device/deviceConfig' import { getDeviceConfig, saveDeviceConfig } from '../../services/device/deviceConfig'
import { useAppDispatch, useAppSelector } from "../../utils/hooks"; import { useAppDispatch, useAppSelector } from "../../utils/hooks";
import { updateSystemAccountState, updateSystemOrgState } from '../../store/system/systemSlice';
import { updateSystemAccountState, updateSystemAllState, updateSystemOrgState } from '../../store/system/systemSlice';
import {createWebSocket, sharedWsUrl} from "../../services/socket"; import {createWebSocket, sharedWsUrl} from "../../services/socket";
import {start, stop, disconnect, connect} from "../../services/ble/ble"; import {start, stop, disconnect, connect} from "../../services/ble/ble";
import { StandbyMinutes } from '../../services/measure/type'; import { StandbyMinutes } from '../../services/measure/type';
import "./setting.scss"; import "./setting.scss";
import { system } from '../../types';
export default function Setting(){ export default function Setting(){
useEffect(()=>{ useEffect(()=>{
querySystemInfo()
queryRailData() queryRailData()
// onBleStart() // onBleStart()
querySettingData() querySettingData()
@ -56,22 +58,29 @@ export default function Setting(){
// 创建 websocket 客户端 // 创建 websocket 客户端
const wsClient = createWebSocket(sharedWsUrl); const wsClient = createWebSocket(sharedWsUrl);
function querySettingData(){ function querySettingData(){
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)
}
const querySystemInfo = () => {
sysSet({}, "GET").then(res=>{
if(res.status === 0 && res.data && res.data.length){
let data:system[] = res.data;
let systemInfo: systemItem[] = data
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)
setSystemList(systemInfo)
}
})
} }

Loading…
Cancel
Save