feat():人工监测数据录入开发

qzc-dev
李神峰 2025-10-15 15:35:27 +08:00
parent 8bd134d694
commit 68119f3f9e
10 changed files with 165 additions and 92 deletions

View File

@ -295,7 +295,16 @@ const apiurl = {
save: service_fxdd + "/osmoticPressR/artificial/insert",
edit: service_fxdd + "/osmoticPressR/artificial/update",
page: service_fxdd + "/osmoticPressR/artificial/page",
del: service_fxdd + "/osmoticPressR/artificial/del/",
del: service_fxdd + "/osmoticPressR/artificial/delete",
export: service_fxdd + "/osmoticPressR/artificial/export",
},
rgwyjc:{
save: service_fxdd + "/osmoticShiftR/artificial/insert",
edit: service_fxdd + "/osmoticShiftR/artificial/update",
page: service_fxdd + "/osmoticShiftR/artificial/page",
del: service_fxdd + "/osmoticShiftR/artificial/delete",
export: service_fxdd + "/osmoticShiftR/artificial/export",
list:service_fxdd + "/osmoticShiftR/artificial/tree"
},
wyjc:{
save: service_fxdd + "/osmoticShiftR/insert",

View File

@ -82,7 +82,7 @@ export default function Page({isHome}) {
if(code!==200){
return
}
const list = data?.map((item)=>({...item,stationCode:item.cd}))
const list = data?.map((item) => ({ ...item, stationCode: item.cd }))
setWyList(list||[])
}

View File

@ -15,6 +15,8 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
const [dmCode, setDmCode] = useState('')
const onFinish = (values) => {
if (mode === 'edit') {
values.updateMstm = values.mstm;
delete values.mstm;
onEdit(apiurl.gcaqjc.sjtjcx.sjlr.rgjc.edit, { ...record, ...values })
}
if (mode === 'save') {
@ -28,7 +30,6 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
const getDmList = async () => {
try {
const res = await httppost2(apiurl.gcaqjc.sjtjcx.sycx.list)
setDmCd(res.data)
const sortedData = res.data.sort((a, b) => {
// 判断a、b是否为ZB0开头
const isAZB0 = a.profileCode.startsWith('ZB0');
@ -48,6 +49,7 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
const getStationCode = async () => {
try {
const res = await httpget2(apiurl.gcaqjc.sjtjcx.sycx.list1)
setDmCd(res.data)
const list = []
res?.data?.map((item) => {
const { dvcd, dm } = item
@ -69,14 +71,14 @@ const ModalForm = ({ mode, record, onEdit, onSave, onSimilarSave }) => {
const onValuesChange = (v) => {
if ("dvcd" in v) {
// const updToDmMap = {}; // 键UPD编码对应的dm
// dmCd.forEach(item => {
// const currentDm = item.dm; // 当前dm
// item.dvcd.forEach(upd => {
// updToDmMap[upd] = currentDm; // 为每个UPD绑定dm
// });
// });
// form.setFieldValue("dm",updToDmMap[v?.dvcd])
const updToDmMap = {}; // 键UPD编码对应的dm
dmCd.forEach(item => {
const currentDm = item.dm; // 当前dm
item.dvcd.forEach(upd => {
updToDmMap[upd] = currentDm; // 为每个UPD绑定dm
});
});
form.setFieldValue("dm",updToDmMap[v?.dvcd])
}
}

View File

@ -1,6 +1,6 @@
import React, { Fragment, useRef, useMemo,useEffect,useState } from 'react';
import React, { Fragment, useRef, useMemo, useEffect, useState } from 'react';
import BasicCrudModal from '../../../../../components/crud/BasicCrudModal';
import { Table, Card,Modal,Form,Input,Button,Row,Col,message } from 'antd';
import { Table, Card, Modal, Form, Input, Button, Row, Col, message } from 'antd';
import ModalForm from './form';
import ToolBar from './toolbar';
import { useSelector } from 'react-redux';
@ -9,40 +9,51 @@ import usePageTable from '../../../../../components/crud/usePageTable2';
import { createCrudService } from '../../../../../components/crud/_';
import { CrudOpRender_text } from '../../../../../components/crud/CrudOpRender';
import { exportFile } from '../../../../../utils/tools.js';
import { httppost5 } from '../../../../../utils/request';
import { httppost2, httppost5 } from '../../../../../utils/request';
import "./index.less"
const Page = () => {
const role = useSelector(state => state.auth.role);
const editBtn = role?.rule?.find(item => item.menuName == "编辑")||true;
const viewBtn = role?.rule?.find(item => item.menuName == "查看")||true;
const delBtn = role?.rule?.find(item => item.menuName == "删除")||true;
const editBtn = role?.rule?.find(item => item.menuName == "编辑") || true;
const viewBtn = role?.rule?.find(item => item.menuName == "查看") || true;
const delBtn = role?.rule?.find(item => item.menuName == "删除") || true;
const refModal = useRef();
const [searchVal, setSearchVal] = useState(false)
const columns = [
{ title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align:"center" },
{ title: '测点名称', key: 'dvcd', dataIndex: 'dvcd', width: 200, ellipsis: true, align:"center" },
{ title: '断面名称', key: 'dmName', dataIndex: 'dmName', width: 200, align:"center"},
{ title: '测量时间', key: 'mstm', dataIndex: 'mstm', width: 200, align:"center"},
{ title: '序号', key: 'inx', dataIndex: 'inx', width: 60, align: "center" },
{ title: '测点名称', key: 'dvcd', dataIndex: 'dvcd', width: 200, ellipsis: true, align: "center" },
{ title: '断面名称', key: 'dmName', dataIndex: 'dmName', width: 200, align: "center" },
{ title: '测量时间', key: 'mstm', dataIndex: 'mstm', width: 200, align: "center" },
{
title: '渗流压力水位(m)', key: 'spprwl', dataIndex: 'spprwl', width: 200, align:"center",
title: '渗流压力水位(m)', key: 'spprwl', dataIndex: 'spprwl', width: 200, align: "center",
},
{ title: '温度(°C)', key: 'tm', dataIndex: 'tm', width: 250, ellipsis: true,align:"center", },
{ title: '更新时间', key: 'updateTm', dataIndex: 'updateTm', width: 200, ellipsis: true,align:"center", },
{ title: '温度(°C)', key: 'tm', dataIndex: 'tm', width: 250, ellipsis: true, align: "center", },
{ title: '更新时间', key: 'updateTm', dataIndex: 'updateTm', width: 200, ellipsis: true, align: "center", },
{
title: '操作', key: 'operation', width: 240, fixed: 'right',align: 'center',
title: '操作', key: 'operation', width: 240, fixed: 'right', align: 'center',
render: (value, row, index) => (
<CrudOpRender_text
edit={editBtn ? true : false}
del={delBtn ? true : false}
command={(cmd) => () => command(cmd)(row)} />)
edit={editBtn ? true : false}
del={delBtn ? true : false}
command={(cmd) => () => command(cmd)(row)} />)
},
];
const width = useMemo(() => columns.reduce((total, cur) => total + (cur.width), 0), [columns]);
const width = useMemo(() => columns.reduce((total, cur) => total + (cur.width), 0), [columns]);
const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.gcaqjc.sjtjcx.sjlr.rgjc.page).find_noCode);
const del = async (url, parmas) => {
try {
const res = await httppost2(url, parmas);
if (res.code == 200) {
message.success("删除成功");
refresh();
}
} catch (error) {
console.log(error);
}
}
const command = (type) => (params) => {
if (type === 'save') {
refModal.current.showSave();
@ -51,20 +62,26 @@ const Page = () => {
} else if (type === 'view') {
refModal.current.showView(params);
} else if (type === 'del') {
const url = apiurl.gcaqjc.sjtjcx.sjlr.rgjc.del + params.mpcd+'/'+params.mstm
refModal.current.onDeleteGet(url);
const par = { mpcd: params.mpcd, mstm: params.mstm, stcd: params.stcd };
const url = apiurl.gcaqjc.sjtjcx.sjlr.rgjc.del
del(url, par);
}
}
const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.gcaqjc.sjtjcx.sjlr.rgjc.page).find_noCode);
const exportExcel = () => {
let pageSo = {
pageNumber: tableProps.pagination.current,
pageSize:tableProps.pagination.pageSize
}
let params = {
...searchVal,
pageSo
}
httppost5(apiurl.gcaqjc.sjtjcx.ndsytjb.export, params).then(res => {
exportFile(`渗压监测表.xlsx`,res.data)
})
httppost5(apiurl.gcaqjc.sjtjcx.sjlr.rgjc.export, params).then(res => {
exportFile(`人工录入渗压监测表.xlsx`, res.data)
})
}
useEffect(() => {
if (searchVal) {
@ -76,8 +93,8 @@ const Page = () => {
search(params)
}
}, [searchVal])
return (
<>
<div className='lf CrudAdcdTreeTableBox' style={{ width: "100%" }}>
@ -89,8 +106,8 @@ const Page = () => {
exportFile={exportExcel}
/>
</Card>
<div className="ant-card-body" style={{padding:"20px 0 0 0"}}>
<Table columns={columns} rowKey="inx" {...tableProps} scroll={{ x: width , y: "calc( 100vh - 400px )"}}/>
<div className="ant-card-body" style={{ padding: "20px 0 0 0" }}>
<Table columns={columns} rowKey="inx" {...tableProps} scroll={{ x: width, y: "calc( 100vh - 400px )" }} />
</div>
</div>
<BasicCrudModal

View File

@ -38,6 +38,7 @@ const ToolBar = ({ setSearchVal, onSave, storeData, role,exportFile }) => {
const [dmList, setDmList] = useState([])
const [codeList, setCodeList] = useState([])
const [dmCode, setDmCode] = useState('')
const [dmCd, setDmCd] = useState([])
const getDmList = async () => {
try {
@ -61,6 +62,7 @@ const ToolBar = ({ setSearchVal, onSave, storeData, role,exportFile }) => {
const getStationCode = async () => {
try {
const res = await httpget2(apiurl.gcaqjc.sjtjcx.sycx.list1)
setDmCd(res.data)
const list = []
res?.data?.map((item) => {
const { dvcd, dm } = item
@ -100,6 +102,17 @@ const ToolBar = ({ setSearchVal, onSave, storeData, role,exportFile }) => {
break;
}
if ("dvcd" in e) {
const updToDmMap = {}; // 键UPD编码对应的dm
dmCd.forEach(item => {
const currentDm = item.dm; // 当前dm
item.dvcd.forEach(upd => {
updToDmMap[upd] = currentDm; // 为每个UPD绑定dm
});
});
form.setFieldValue("dm",updToDmMap[e?.dvcd])
}
}
const onFinish = (values) => {
let dateSo;
@ -153,7 +166,7 @@ const ToolBar = ({ setSearchVal, onSave, storeData, role,exportFile }) => {
options={optionsType}
/>
</Form.Item>
<Form.Item label="监测断面" name="profileCode">
<Form.Item label="监测断面" name="dm">
<NormalSelect
allowClear
style={{ width: "150px" }}

View File

@ -3,41 +3,36 @@ import { Form, Button, Input, Row, Col, DatePicker, Upload,message,Image,Modal,R
import { formItemLayout, btnItemLayout } from '../../../../../components/crud/FormLayoutProps';
import apiurl from '../../../../../service/apiurl';
import NormalSelect from '../../../../../components/Form/NormalSelect';
import { httppost2 } from '../../../../../utils/request';
import { httppost2,httpget2 } from '../../../../../utils/request';
import moment from 'moment';
const ModalForm = ({ mode, record,onEdit,onSave,onSimilarSave }) => {
console.log("record",record);
const [form] = Form.useForm();
const [dmList, setDmList] = useState([])
const [codeList, setCodeList] = useState([])
const [dmCode,setDmCode] = useState('')
const onFinish = (values) => {
if (mode === 'edit') {
onEdit(apiurl.gcaqjc.sjtjcx.sjlr.wyjc.edit,{...record,...values})
values.newUpdateCd = values.cd;
values.newUpdateTm = values.tm;
delete values.cd;
delete values.tm;
onEdit(apiurl.gcaqjc.sjtjcx.sjlr.rgwyjc.edit,{...record,...values})
}
if (mode === 'save') {
onSave(apiurl.gcaqjc.sjtjcx.sjlr.wyjc.save,values)
onSave(apiurl.gcaqjc.sjtjcx.sjlr.rgwyjc.save,values)
}
}
const getDmList = async () => {
try {
const res = await httppost2(apiurl.gcaqjc.sjtjcx.sycx.list)
setDmList(res.data.map(s=>({label:s.profileName,value:s.profileCode})));
} catch (error) {
console.log(error);
}
}
const getStationCode = async () => {
try {
const res = await httppost2(apiurl.gcaqjc.sjtjcx.wycx.list)
setCodeList(res.data);
const res = await httpget2(apiurl.gcaqjc.sjtjcx.sjlr.rgwyjc.list)
if (res.code == 200) {
setCodeList(res.data.map(s=>({label:s.cd,value:s.cd})));
}
} catch (error) {
console.log(error);
}
@ -45,7 +40,6 @@ const ModalForm = ({ mode, record,onEdit,onSave,onSimilarSave }) => {
useEffect(()=>{
getDmList()
getStationCode()
}, [])
@ -75,7 +69,7 @@ const ModalForm = ({ mode, record,onEdit,onSave,onSimilarSave }) => {
disabled={mode==='view'}
allowClear
style={{ width: "100%" }}
options={codeList.map(s=>({label:s.cd,value:s.cd}))}
options={codeList}
/>
</Form.Item>
<Form.Item

View File

@ -7,7 +7,9 @@ import { useSelector } from 'react-redux';
import apiurl from '../../../../../service/apiurl';
import usePageTable from '../../../../../components/crud/usePageTable2';
import { createCrudService } from '../../../../../components/crud/_';
import {CrudOpRender_text} from '../../../../../components/crud/CrudOpRender';
import { CrudOpRender_text } from '../../../../../components/crud/CrudOpRender';
import { exportFile } from '../../../../../utils/tools.js';
import { httppost2, httppost5 } from '../../../../../utils/request';
import "./index.less"
const Page = () => {
const role = useSelector(state => state.auth.role);
@ -40,7 +42,18 @@ const Page = () => {
const width = useMemo(() => columns.reduce((total, cur) => total + (cur.width), 0), [columns]);
const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.gcaqjc.sjtjcx.sjlr.rgwyjc.page).find_noCode);
const del = async (url, parmas) => {
try {
const res = await httppost2(url, parmas);
if (res.code == 200) {
message.success("删除成功");
refresh();
}
} catch (error) {
console.log(error);
}
}
const command = (type) => (params) => {
if (type === 'save') {
refModal.current.showSave();
@ -49,21 +62,36 @@ const Page = () => {
} else if (type === 'view') {
refModal.current.showView(params);
} else if (type === 'del') {
const url = apiurl.gcaqjc.sjtjcx.sjlr.wyjc.del + params.cd+'/'+params.tm
refModal.current.onDeleteGet(url);
const par = { cd: params.cd, tm: params.tm};
const url = apiurl.gcaqjc.sjtjcx.sjlr.rgwyjc.del
del(url, par);
}
}
const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.gcaqjc.sjtjcx.sjlr.wyjc.page).find_noCode);
const exportExcel = () => {
let pageSo = {
pageNumber: tableProps.pagination.current,
pageSize:tableProps.pagination.pageSize
}
let params = {
...searchVal,
pageSo
}
httppost5(apiurl.gcaqjc.sjtjcx.sjlr.rgwyjc.export, params).then(res => {
exportFile(`人工录入位移监测表.xlsx`, res.data)
})
}
useEffect(()=>{
const params = {
search: {
...searchVal,
}
};
search(params)
if (searchVal) {
const params = {
search: {
...searchVal,
}
};
search(params)
}
}, [searchVal])
@ -75,6 +103,7 @@ const Page = () => {
setSearchVal={setSearchVal}
onSave={command('save')}
role={role}
exportFile={exportExcel}
/>
</Card>
<div className="ant-card-body" style={{padding:"20px 0 0 0"}}>

View File

@ -5,7 +5,7 @@ import AdcdFuzzyTreeSelect from '../../../../../components/Form/AdcdFuzzyTreeSel
import NormalSelect from '../../../../../components/Form/NormalSelect';
import { config } from '../../../../../config';
import moment from 'moment';
import { httppost2 } from '../../../../../utils/request';
import { httppost2,httpget2 } from '../../../../../utils/request';
import apiurl from '../../../../../service/apiurl';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, storeData,role,exportFile }) => {
@ -50,8 +50,10 @@ const ToolBar = ({ setSearchVal, onSave, storeData,role,exportFile }) => {
const getStationCode = async () => {
try {
const res = await httppost2(apiurl.gcaqjc.sjtjcx.wycx.list)
setCodeList(res.data.map(s=>({label:s.cd,value:s.cd})));
const res = await httpget2(apiurl.gcaqjc.sjtjcx.sjlr.rgwyjc.list)
if (res.code == 200) {
setCodeList(res.data.map(s=>({label:s.cd,value:s.cd})));
}
} catch (error) {
console.log(error);
}
@ -130,10 +132,10 @@ const ToolBar = ({ setSearchVal, onSave, storeData,role,exportFile }) => {
options={optionsType}
/>
</Form.Item>
<Form.Item label="测点编号" name="stationCode">
<Form.Item label="测点编号" name="cd">
<NormalSelect
allowClear
style={{ width: "150px" }}
style={{ width: "200px" }}
options={codeList}
/>
</Form.Item>

View File

@ -44,13 +44,16 @@ const Page = () => {
const { tableProps, search, refresh } = usePageTable(createCrudService(apiurl.gcaqjc.sjtjcx.wycx.page).find_noCode);
useEffect(()=>{
const params = {
search: {
...searchVal,
}
};
search(params)
useEffect(() => {
if (searchVal) {
const params = {
search: {
...searchVal,
}
};
search(params)
}
}, [searchVal])
return (
<>

View File

@ -10,7 +10,6 @@ import apiurl from '../../../../service/apiurl';
const { RangePicker } = DatePicker;
const ToolBar = ({ setSearchVal, onSave, storeData,role }) => {
const searchBtn = role?.rule?.find(item => item.menuName == "查询")||true;
const optionsType = [
{
label: "今日",
@ -37,7 +36,7 @@ const ToolBar = ({ setSearchVal, onSave, storeData,role }) => {
const [codeList, setCodeList] = useState([])
const [dmList, setDmList] = useState([])
const [showDm, setShowDm] = useState(true)
const getStationCode = async () => {
try {
const res = await httppost2(apiurl.gcaqjc.sjtjcx.wycx.list)
@ -76,6 +75,11 @@ const ToolBar = ({ setSearchVal, onSave, storeData,role }) => {
default:
break;
}
if ("isArtificial" in e) {
const isShowDmSearch = e.isArtificial == 0;
setShowDm(isShowDmSearch)
}
}
const onFinish = (values) => {
@ -98,8 +102,8 @@ const ToolBar = ({ setSearchVal, onSave, storeData,role }) => {
useEffect(() => {
let time = [moment().subtract(1,"weeks"),moment()]
let dateSo = {
start:moment(time[0]).format('YYYY-MM-DD 00:00:00'),
end:moment(time[1]).format('YYYY-MM-DD 23:59:59'),
start:moment(time[0]).format('YYYY-MM-DD HH:mm:ss'),
end:moment(time[1]).format('YYYY-MM-DD HH:mm:ss'),
}
form.setFieldValue("tm",time)
setSearchVal({dateTimeRangeSo:dateSo})
@ -125,20 +129,20 @@ const ToolBar = ({ setSearchVal, onSave, storeData,role }) => {
options={optionsType}
/>
</Form.Item>
{/* <Form.Item label="" name="cd">
<Form.Item label="测点类型" name="isArtificial">
<NormalSelect
allowClear
style={{ width: "150px" }}
options={codeList}
options={[{label:'自动监测',value:0},{label:'人工监测',value:1}]}
/>
</Form.Item> */}
<Form.Item label="监测断面" name="ch">
</Form.Item>
{showDm && <Form.Item label="监测断面" name="ch">
<NormalSelect
allowClear
style={{ width: "150px" }}
options={dmList}
/>
</Form.Item>
</Form.Item>}
{searchBtn ? <Form.Item>
<Button type="primary" htmlType="submit">查询</Button>
</Form.Item> : null }