Merge branch 'lsf-dev'

lsf-dev
李神峰 2025-06-11 15:04:07 +08:00
commit 9a42c45df7
19 changed files with 1832 additions and 1043 deletions

BIN
public/assets/skyb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -323,7 +323,7 @@ const map = {
};
dispatch.runtime.setCameraTarget({
center: [114.88069, 31.171967],
zoom: 12,
zoom: 13,
pitch: 60,
bearing: 0
});
@ -582,189 +582,189 @@ const map = {
dispatch.map.setLayerSetting({ dom: false });
// map.setLayoutProperty('卫星图', 'visibility', 'none');
}
if (id == 203) {
const skdata = [
{
"stcd": "61614200",
"type": "sk",
"hasRz": true,
"stnm": "浮桥河水库",
"adcd": "421181100000",
"wscd": null,
"importancy": 0,
"lgtd": 114.875,
"lttd": 31.166667,
"elev": 0,
"damel": 71.33,
"dsflz": 68.04,
"fsltdz": 64.89,
"ddz": 51.78,
"zcxsw": 64.89,
"drpTm": "2025-06-03T02:00:00.000Z",
"today": 0,
"h1": 5,
"h3": 6,
"h6": 7.5,
"h12": 8,
"h24": 9,
"h48": 26,
"drpState": 1,
"rz": 60.71,
"w": 162.8,
"a_fsltdz": -4.18,
"rzTm": "2025-06-03T02:00:00.000Z",
"rzWarning": 0,
"rzState": 1,
"aRz": -4.18
},
{
"stcd": "61613010",
"type": "sk",
"hasRz": true,
"stnm": "明山水库",
"adcd": "421181103000",
"wscd": null,
"importancy": 0,
"lgtd": 115.066667,
"lttd": 31.016667,
"elev": 0,
"damel": 98.7,
"dsflz": 96.07,
"fsltdz": 93,
"ddz": 78.02,
"zcxsw": 93,
"drpTm": "2025-06-03T02:00:00.000Z",
"today": 0,
"h1": 7,
"h3": 8.4,
"h6": 10.5,
"h12": 11.200000000000001,
"h24": 12.6,
"h48": 25.799999999999997,
"drpState": 1,
"rz": 84.43,
"w": 49.5,
"a_fsltdz": -8.569999999999993,
"rzTm": "2025-06-03T02:00:00.000Z",
"rzWarning": 0,
"rzState": 1,
"aRz": -8.57
},
{
"stcd": "61612610",
"type": "sk",
"hasRz": true,
"stnm": "三河口水库",
"adcd": "421181109000",
"wscd": null,
"importancy": 0,
"lgtd": 115.166667,
"lttd": 31.333333,
"elev": 0,
"damel": 156.8,
"dsflz": 154.99,
"fsltdz": 149,
"ddz": 124,
"zcxsw": 149,
"drpTm": "2025-06-03T02:00:00.000Z",
"today": 0,
"h1": 7,
"h3": 8.4,
"h6": 10.5,
"h12": 11.200000000000001,
"h24": 12.6,
"h48": 25.799999999999997,
"drpState": 1,
"rz": 141.45,
"w": 77.8,
"a_fsltdz": -7.550000000000011,
"rzTm": "2025-06-03T01:00:00.000Z",
"rzWarning": 0,
"rzState": 1,
"aRz": -7.55
},
{
"stcd": "61612700",
"type": "sk",
"hasRz": true,
"stnm": "碧绿河水库",
"adcd": "421181109000",
"wscd": null,
"importancy": 0,
"lgtd": 115.214444,
"lttd": 31.299722,
"elev": 0,
"damel": 142.9,
"dsflz": 139.08,
"fsltdz": 137,
"ddz": 105,
"zcxsw": 137,
"drpTm": "2025-06-03T02:00:00.000Z",
"today": 0,
"h1": 4,
"h3": 4.8,
"h6": 6,
"h12": 6.4,
"h24": 7.2,
"h48": 22.6,
"drpState": 1,
"rz": 119.6,
"w": 13.15,
"a_fsltdz": -17.400000000000006,
"rzTm": "2025-06-03T00:00:00.000Z",
"rzWarning": 0,
"rzState": 2,
"aRz": -17.4
}
]
const layer = map.getLayer('关联站点')
if (layer) {
map.removeLayer('关联站点');
map.removeSource('关联站点');
}
map.addLayer({
'id': '关联站点',//+new Date().getTime(),
'type': 'symbol',
'source': {
'type': 'geojson',
'data': {
'type': 'FeatureCollection',
'features': [],
},
},
'layout': {
'icon-allow-overlap': true,
'text-allow-overlap': true,
'icon-image': '水库-离线',
'icon-size': [
'interpolate', ['linear'], ['zoom'],
10, 0.4,
14, 0.8,
],
'text-allow-overlap': true,
'text-size': [
'interpolate', ['linear'], ['zoom'],
10, 10,
14, 14,
],
'text-font': ['Roboto Black'],
'text-field': [
'step',
['zoom'],
'',
12, ['get', 'stnm']
],
'text-anchor': 'top',
'text-offset': [0, 1],
// if (id == 203) {
// const skdata = [
// {
// "stcd": "61614200",
// "type": "sk",
// "hasRz": true,
// "stnm": "浮桥河水库",
// "adcd": "421181100000",
// "wscd": null,
// "importancy": 0,
// "lgtd": 114.875,
// "lttd": 31.166667,
// "elev": 0,
// "damel": 71.33,
// "dsflz": 68.04,
// "fsltdz": 64.89,
// "ddz": 51.78,
// "zcxsw": 64.89,
// "drpTm": "2025-06-03T02:00:00.000Z",
// "today": 0,
// "h1": 5,
// "h3": 6,
// "h6": 7.5,
// "h12": 8,
// "h24": 9,
// "h48": 26,
// "drpState": 1,
// "rz": 60.71,
// "w": 162.8,
// "a_fsltdz": -4.18,
// "rzTm": "2025-06-03T02:00:00.000Z",
// "rzWarning": 0,
// "rzState": 1,
// "aRz": -4.18
// },
// {
// "stcd": "61613010",
// "type": "sk",
// "hasRz": true,
// "stnm": "明山水库",
// "adcd": "421181103000",
// "wscd": null,
// "importancy": 0,
// "lgtd": 115.066667,
// "lttd": 31.016667,
// "elev": 0,
// "damel": 98.7,
// "dsflz": 96.07,
// "fsltdz": 93,
// "ddz": 78.02,
// "zcxsw": 93,
// "drpTm": "2025-06-03T02:00:00.000Z",
// "today": 0,
// "h1": 7,
// "h3": 8.4,
// "h6": 10.5,
// "h12": 11.200000000000001,
// "h24": 12.6,
// "h48": 25.799999999999997,
// "drpState": 1,
// "rz": 84.43,
// "w": 49.5,
// "a_fsltdz": -8.569999999999993,
// "rzTm": "2025-06-03T02:00:00.000Z",
// "rzWarning": 0,
// "rzState": 1,
// "aRz": -8.57
// },
// {
// "stcd": "61612610",
// "type": "sk",
// "hasRz": true,
// "stnm": "三河口水库",
// "adcd": "421181109000",
// "wscd": null,
// "importancy": 0,
// "lgtd": 115.166667,
// "lttd": 31.333333,
// "elev": 0,
// "damel": 156.8,
// "dsflz": 154.99,
// "fsltdz": 149,
// "ddz": 124,
// "zcxsw": 149,
// "drpTm": "2025-06-03T02:00:00.000Z",
// "today": 0,
// "h1": 7,
// "h3": 8.4,
// "h6": 10.5,
// "h12": 11.200000000000001,
// "h24": 12.6,
// "h48": 25.799999999999997,
// "drpState": 1,
// "rz": 141.45,
// "w": 77.8,
// "a_fsltdz": -7.550000000000011,
// "rzTm": "2025-06-03T01:00:00.000Z",
// "rzWarning": 0,
// "rzState": 1,
// "aRz": -7.55
// },
// {
// "stcd": "61612700",
// "type": "sk",
// "hasRz": true,
// "stnm": "碧绿河水库",
// "adcd": "421181109000",
// "wscd": null,
// "importancy": 0,
// "lgtd": 115.214444,
// "lttd": 31.299722,
// "elev": 0,
// "damel": 142.9,
// "dsflz": 139.08,
// "fsltdz": 137,
// "ddz": 105,
// "zcxsw": 137,
// "drpTm": "2025-06-03T02:00:00.000Z",
// "today": 0,
// "h1": 4,
// "h3": 4.8,
// "h6": 6,
// "h12": 6.4,
// "h24": 7.2,
// "h48": 22.6,
// "drpState": 1,
// "rz": 119.6,
// "w": 13.15,
// "a_fsltdz": -17.400000000000006,
// "rzTm": "2025-06-03T00:00:00.000Z",
// "rzWarning": 0,
// "rzState": 2,
// "aRz": -17.4
// }
// ]
// const layer = map.getLayer('关联站点')
// if (layer) {
// map.removeLayer('关联站点');
// map.removeSource('关联站点');
// }
// map.addLayer({
// 'id': '关联站点',//+new Date().getTime(),
// 'type': 'symbol',
// 'source': {
// 'type': 'geojson',
// 'data': {
// 'type': 'FeatureCollection',
// 'features': [],
// },
// },
// 'layout': {
// 'icon-allow-overlap': true,
// 'text-allow-overlap': true,
// 'icon-image': '水库-离线',
// 'icon-size': [
// 'interpolate', ['linear'], ['zoom'],
// 10, 0.4,
// 14, 0.8,
// ],
// 'text-allow-overlap': true,
// 'text-size': [
// 'interpolate', ['linear'], ['zoom'],
// 10, 10,
// 14, 14,
// ],
// 'text-font': ['Roboto Black'],
// 'text-field': [
// 'step',
// ['zoom'],
// '',
// 12, ['get', 'stnm']
// ],
// 'text-anchor': 'top',
// 'text-offset': [0, 1],
},
'paint': {
'text-color': '#fff'
},
'visibility': 'visible',
});
map.getSource('关联站点').setData(parseGeoJSON(skdata))
}
// },
// 'paint': {
// 'text-color': '#fff'
// },
// 'visibility': 'visible',
// });
// map.getSource('关联站点').setData(parseGeoJSON(skdata))
// }
if(id!==200&&id!==203&&id!==205&&id!==206){
const layer = map.getLayer('临时水库tz')

View File

@ -34,7 +34,7 @@ const shyjview = {
}
dispatch.runtime.setHome();
// dispatch.runtime.setHome();
},
async showWeatherRadar(_, state) {
dispatch.map.setCalculating(true);
@ -49,7 +49,7 @@ const shyjview = {
}
dispatch.runtime.setHome();
// dispatch.runtime.setHome();
},
async showYj24hContour(latest) {

View File

@ -0,0 +1,239 @@
import React, { useState } from 'react';
import { Card, Row, Col, Table, Tag, Form, Input, DatePicker, Tabs } from 'antd';
import './index.less';
import moment from 'moment';
import ModalView from './view'
const TaskInspectionDetail = () => {
const [form] = Form.useForm();
const [activeTab, setActiveTab] = useState('dam');
const [visible, setVisible] = useState(false)
// 表单初始值
const initialValues = {
taskTitle: '06-02浮桥河日常巡查',
taskType: '日常巡查',
taskContent: '20250602每日巡检任务',
startTime: moment('2025-06-02 00:00:00'),
endTime: moment('2025-06-08 23:59:59'),
receiveTime: moment('2025-06-02 09:07:31'),
completeTime: moment('2025-06-02 09:08:05'),
inspector: '姜兴军',
taskStatus: '已完成'
};
// 巡查类别数据
const categories = [
{ key: 'dam', label: '大坝', count: 0 },
{ key: 'spillway', label: '溢洪道', count: 0 },
{ key: 'waterPipe', label: '输水管', count: 0 },
{ key: 'facilities', label: '管理设施', count: 0 },
{ key: 'valve', label: '阀门与启闭机', count: 0 },
{ key: 'others', label: '其他情况', count: 0 }
];
const detailModal = (row) => {
setVisible(true)
}
// 表格列定义
const columns = [
{
title: '序号',
dataIndex: 'index',
key: 'index',
width: 80
},
{
title: '巡查项',
dataIndex: 'item',
key: 'item'
},
{
title: '巡查状态',
dataIndex: 'status',
key: 'status',
render: (status) => (
<Tag color={status === '正常' ? 'success' : 'error'}>{status}</Tag>
)
},
{
title: '问题描述',
dataIndex: 'description',
key: 'description'
},
{
title: '巡查图片',
dataIndex: 'images',
key: 'images'
},
{
title: '巡查视频',
dataIndex: 'videos',
key: 'videos'
},
{
title: '是否处理',
dataIndex: 'handled',
key: 'handled'
},
{
title: '处理人',
dataIndex: 'handler',
key: 'handler'
},
{
title: '操作',
key: 'action',
render: (v,r) => (
<span style={{background:'#1890ff',padding:'8px 15px',color:'#fff'}} onClick={()=>detailModal(r)}>详情</span>
)
}
];
// 表格数据
const tableData = [
{
key: '1',
index: 1,
item: '上游坝',
status: '正常',
handler: '姜兴军'
},
{
key: '2',
index: 2,
item: '下游坝',
status: '正常',
handler: '姜兴军'
}
];
const handleTabChange = (key) => {
setActiveTab(key);
// 这里可以根据选中的tab加载对应的数据
};
return (
<div className="task-inspection-detail" >
{/* 任务基本信息 */}
<Card className="info-card" title={<span style={{color:"#fff"}}>基本信息</span>}>
<Form
form={form}
initialValues={initialValues}
layout="horizontal"
labelCol={{ span: 6 }}
wrapperCol={{ span: 18 }}
>
<Row gutter={[24, 16]}>
<Col span={12}>
<Form.Item
label="任务标题"
name="taskTitle"
>
<Input />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="任务类型"
name="taskType"
>
<Input />
</Form.Item>
</Col>
<Col span={24}>
<Form.Item
label="任务内容"
name="taskContent"
labelCol={{ span: 3 }}
wrapperCol={{ span: 21 }}
>
<Input.TextArea />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="开始时间"
name="startTime"
>
<DatePicker showTime style={{ width: '100%' }} />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="结束时间"
name="endTime"
>
<DatePicker showTime style={{ width: '100%' }} />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="接收时间"
name="receiveTime"
>
<DatePicker showTime style={{ width: '100%' }} />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="完成时间"
name="completeTime"
>
<DatePicker showTime style={{ width: '100%' }} />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="巡查人"
name="inspector"
>
<Input />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="任务状态"
name="taskStatus"
>
<Input />
</Form.Item>
</Col>
</Row>
</Form>
</Card>
{/* 巡查信息 */}
<Card className="inspection-card" title={<span style={{color:"#fff"}}>巡查信息</span>}>
<div className="category-tabs">
{categories.map(category => (
<div
key={category.key}
className={`category-tab ${activeTab === category.key ? 'active' : ''}`}
onClick={() => handleTabChange(category.key)}
>
<span className="category-label">{category.label}</span>
<span className="category-count" style={{color:activeTab === category.key?'#1890ff':''}}>({category.count})</span>
</div>
))}
</div>
<div className="table-info">
<span className="total-info">
(异常项0正常项13)
</span>
</div>
<Table
columns={columns}
dataSource={tableData}
pagination={false}
className="inspection-table"
/>
</Card>
<ModalView
open={visible}
onClose={() => setVisible(false)}
></ModalView>
</div>
);
};
export default TaskInspectionDetail;

View File

@ -0,0 +1,140 @@
.task-inspection-detail {
padding: 5px;
background-color: transparent;
min-height: 100vh;
.info-card {
margin-bottom: 24px;
background-color: transparent;
border: none;
.ant-card-body {
color: #fff;
}
.ant-form-item-label > label {
color: rgba(255, 255, 255, 0.85);
}
.ant-input,
.ant-picker {
background-color: rgba(255, 255, 255, 0.04);
border-color: rgba(255, 255, 255, 0.1);
color: rgba(255, 255, 255, 0.85);
&:hover,
&:focus {
border-color: #1890ff;
}
}
.ant-picker {
.ant-picker-input > input {
color: rgba(255, 255, 255, 0.85);
}
.ant-picker-suffix,
.ant-picker-separator {
color: rgba(255, 255, 255, 0.45);
}
.ant-picker-clear {
background: #1a1a27;
color: rgba(255, 255, 255, 0.45);
}
}
.ant-input-textarea {
.ant-input {
min-height: 80px;
}
}
.ant-picker-suffix {
color: rgba(255, 255, 255, 0.45);
}
}
.inspection-card {
background-color: transparent;
border: none;
.category-tabs {
display: flex;
margin-bottom: 16px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
padding-bottom: 16px;
.category-tab {
padding: 8px 16px;
cursor: pointer;
position: relative;
transition: all 0.3s;
&:hover {
color: #1890ff;
}
&.active {
color: #1890ff;
&::after {
content: '';
position: absolute;
bottom: -16px;
left: 0;
width: 100%;
height: 2px;
background-color: #1890ff;
}
}
.category-label {
color: rgba(255, 255, 255, 0.85);
}
.category-count {
margin-left: 4px;
color: rgba(255, 255, 255, 0.45);
}
&:hover .category-label,
&.active .category-label {
color: #1890ff;
}
}
}
.table-info {
margin-bottom: 16px;
.total-info {
color: rgba(255, 255, 255, 0.65);
}
}
.inspection-table {
.ant-table {
background-color: transparent;
color: #fff;
.ant-table-thead > tr > th {
background-color: rgba(255, 255, 255, 0.04);
color: rgba(255, 255, 255, 0.85);
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.ant-table-tbody > tr > td {
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
color: rgba(255, 255, 255, 0.65);
}
.ant-table-tbody > tr:hover > td {
background-color: rgba(255, 255, 255, 0.08);
}
}
}
}
}

View File

@ -0,0 +1,46 @@
import React from 'react';
import DpTab from '../../../../../layouts/mui/DpTab';
import Dialog from '@material-ui/core/Dialog';
import DialogContent from '@material-ui/core/DialogContent';
import DpPaperComponent from '../../../../../layouts/mui/DpPaperCompanent';
import DpTabs from '../../../../../layouts/mui/DpTabs';
import DpAppBar from '../../../../../layouts/mui/DpAppBar';
import DpBackgroundDrop from '../../../../../layouts/mui/DpBackdrop';
import DpCloseButton from '../../../../../layouts/mui/DpCloseButton';
import { Grid } from '@material-ui/core';
import DescriptionItem from '../../../components/DescrptionItem'
function HDStDlg({ record, onClose,open }) {
const [value, setValue] = React.useState(0);
return (
<Dialog
open={open}
onClose={onClose}
maxWidth="xl"
style={{ borderRadius: 0 }}
PaperComponent={DpPaperComponent}
BackdropComponent={DpBackgroundDrop}
>
<div className="boxhead"></div>
<DialogContent style={{ padding: 0, width: '60rem', overflowX: 'hidden',height:'40rem' }}>
<DpAppBar position="sticky">
<DpTabs value={value} indicatorColor="primary" onChange={(_, v) => setValue(v)}>
<DpTab label="处理详情" />
</DpTabs>
<DpCloseButton onClick={onClose} />
</DpAppBar>
<div style={{padding:10}}>
{/* <img src={`${process.env.PUBLIC_URL}/assets/xcxq.png`} style={{width:'100%'}}></img> */}
<Grid container size="small">
<DescriptionItem label="处理图片" span={2}></DescriptionItem>
<DescriptionItem label="处理视频" span={2}></DescriptionItem>
<DescriptionItem label="处理描述" span={2}></DescriptionItem>
</Grid>
</div>
</DialogContent>
<div className="boxfoot"></div>
</Dialog>
)
}
export default React.memo(HDStDlg);

View File

@ -7,7 +7,7 @@ import DpTabs from '../../../../layouts/mui/DpTabs';
import DpAppBar from '../../../../layouts/mui/DpAppBar';
import DpBackgroundDrop from '../../../../layouts/mui/DpBackdrop';
import DpCloseButton from '../../../../layouts/mui/DpCloseButton';
import TaskInspectionDetail from './TaskInspectionDetail'
function HDStDlg({ record, onClose }) {
const [value, setValue] = React.useState(0);
@ -21,15 +21,16 @@ function HDStDlg({ record, onClose }) {
BackdropComponent={DpBackgroundDrop}
>
<div className="boxhead"></div>
<DialogContent style={{ padding: 0, width: '60rem', overflowX: 'hidden',height:'80rem' }}>
<DialogContent style={{ padding: 0, width: '80rem', overflowX: 'hidden',height:'80rem' }}>
<DpAppBar position="sticky">
<DpTabs value={value} indicatorColor="primary" onChange={(_, v) => setValue(v)}>
<DpTab label="任务信息" />
</DpTabs>
<DpCloseButton onClick={onClose} />
</DpAppBar>
<div style={{padding:10}}>
<img src={`${process.env.PUBLIC_URL}/assets/xcxq.png`} style={{width:'100%'}}></img>
<div >
{/* <img src={`${process.env.PUBLIC_URL}/assets/xcxq.png`} style={{width:'100%'}}></img> */}
<TaskInspectionDetail />
</div>
</DialogContent>
<div className="boxfoot"></div>

View File

@ -0,0 +1,239 @@
import React, { useState } from 'react';
import { Card, Row, Col, Table, Tag, Form, Input, DatePicker, Tabs } from 'antd';
import './index.less';
import moment from 'moment';
import ModalView from './view'
const TaskInspectionDetail = () => {
const [form] = Form.useForm();
const [activeTab, setActiveTab] = useState('dam');
const [visible, setVisible] = useState(false)
// 表单初始值
const initialValues = {
taskTitle: '06-02浮桥河日常巡查',
taskType: '日常巡查',
taskContent: '20250602每日巡检任务',
startTime: moment('2025-06-02 00:00:00'),
endTime: moment('2025-06-08 23:59:59'),
receiveTime: moment('2025-06-02 09:07:31'),
completeTime: moment('2025-06-02 09:08:05'),
inspector: '姜兴军',
taskStatus: '已完成'
};
// 巡查类别数据
const categories = [
{ key: 'dam', label: '大坝', count: 0 },
{ key: 'spillway', label: '溢洪道', count: 0 },
{ key: 'waterPipe', label: '输水管', count: 0 },
{ key: 'facilities', label: '管理设施', count: 0 },
{ key: 'valve', label: '阀门与启闭机', count: 0 },
{ key: 'others', label: '其他情况', count: 0 }
];
const detailModal = (row) => {
setVisible(true)
}
// 表格列定义
const columns = [
{
title: '序号',
dataIndex: 'index',
key: 'index',
width: 80
},
{
title: '巡查项',
dataIndex: 'item',
key: 'item'
},
{
title: '巡查状态',
dataIndex: 'status',
key: 'status',
render: (status) => (
<Tag color={status === '正常' ? 'success' : 'error'}>{status}</Tag>
)
},
{
title: '问题描述',
dataIndex: 'description',
key: 'description'
},
{
title: '巡查图片',
dataIndex: 'images',
key: 'images'
},
{
title: '巡查视频',
dataIndex: 'videos',
key: 'videos'
},
{
title: '是否处理',
dataIndex: 'handled',
key: 'handled'
},
{
title: '处理人',
dataIndex: 'handler',
key: 'handler'
},
{
title: '操作',
key: 'action',
render: (v,r) => (
<span style={{background:'#1890ff',padding:'8px 15px',color:'#fff'}} onClick={()=>detailModal(r)}>详情</span>
)
}
];
// 表格数据
const tableData = [
{
key: '1',
index: 1,
item: '上游坝',
status: '正常',
handler: '姜兴军'
},
{
key: '2',
index: 2,
item: '下游坝',
status: '正常',
handler: '姜兴军'
}
];
const handleTabChange = (key) => {
setActiveTab(key);
// 这里可以根据选中的tab加载对应的数据
};
return (
<div className="task-inspection-detail" >
{/* 任务基本信息 */}
<Card className="info-card" title={<span style={{color:"#fff"}}>基本信息</span>}>
<Form
form={form}
initialValues={initialValues}
layout="horizontal"
labelCol={{ span: 6 }}
wrapperCol={{ span: 18 }}
>
<Row gutter={[24, 16]}>
<Col span={12}>
<Form.Item
label="任务标题"
name="taskTitle"
>
<Input />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="任务类型"
name="taskType"
>
<Input />
</Form.Item>
</Col>
<Col span={24}>
<Form.Item
label="任务内容"
name="taskContent"
labelCol={{ span: 3 }}
wrapperCol={{ span: 21 }}
>
<Input.TextArea />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="开始时间"
name="startTime"
>
<DatePicker showTime style={{ width: '100%' }} />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="结束时间"
name="endTime"
>
<DatePicker showTime style={{ width: '100%' }} />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="接收时间"
name="receiveTime"
>
<DatePicker showTime style={{ width: '100%' }} />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="完成时间"
name="completeTime"
>
<DatePicker showTime style={{ width: '100%' }} />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="巡查人"
name="inspector"
>
<Input />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item
label="任务状态"
name="taskStatus"
>
<Input />
</Form.Item>
</Col>
</Row>
</Form>
</Card>
{/* 巡查信息 */}
<Card className="inspection-card" title={<span style={{color:"#fff"}}>巡查信息</span>}>
<div className="category-tabs">
{categories.map(category => (
<div
key={category.key}
className={`category-tab ${activeTab === category.key ? 'active' : ''}`}
onClick={() => handleTabChange(category.key)}
>
<span className="category-label">{category.label}</span>
<span className="category-count" style={{color:activeTab === category.key?'#1890ff':''}}>({category.count})</span>
</div>
))}
</div>
<div className="table-info">
<span className="total-info">
(异常项0正常项13)
</span>
</div>
<Table
columns={columns}
dataSource={tableData}
pagination={false}
className="inspection-table"
/>
</Card>
<ModalView
open={visible}
onClose={() => setVisible(false)}
></ModalView>
</div>
);
};
export default TaskInspectionDetail;

View File

@ -0,0 +1,140 @@
.task-inspection-detail {
padding: 5px;
background-color: transparent;
min-height: 100vh;
.info-card {
margin-bottom: 24px;
background-color: transparent;
border: none;
.ant-card-body {
color: #fff;
}
.ant-form-item-label > label {
color: rgba(255, 255, 255, 0.85);
}
.ant-input,
.ant-picker {
background-color: rgba(255, 255, 255, 0.04);
border-color: rgba(255, 255, 255, 0.1);
color: rgba(255, 255, 255, 0.85);
&:hover,
&:focus {
border-color: #1890ff;
}
}
.ant-picker {
.ant-picker-input > input {
color: rgba(255, 255, 255, 0.85);
}
.ant-picker-suffix,
.ant-picker-separator {
color: rgba(255, 255, 255, 0.45);
}
.ant-picker-clear {
background: #1a1a27;
color: rgba(255, 255, 255, 0.45);
}
}
.ant-input-textarea {
.ant-input {
min-height: 80px;
}
}
.ant-picker-suffix {
color: rgba(255, 255, 255, 0.45);
}
}
.inspection-card {
background-color: transparent;
border: none;
.category-tabs {
display: flex;
margin-bottom: 16px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
padding-bottom: 16px;
.category-tab {
padding: 8px 16px;
cursor: pointer;
position: relative;
transition: all 0.3s;
&:hover {
color: #1890ff;
}
&.active {
color: #1890ff;
&::after {
content: '';
position: absolute;
bottom: -16px;
left: 0;
width: 100%;
height: 2px;
background-color: #1890ff;
}
}
.category-label {
color: rgba(255, 255, 255, 0.85);
}
.category-count {
margin-left: 4px;
color: rgba(255, 255, 255, 0.45);
}
&:hover .category-label,
&.active .category-label {
color: #1890ff;
}
}
}
.table-info {
margin-bottom: 16px;
.total-info {
color: rgba(255, 255, 255, 0.65);
}
}
.inspection-table {
.ant-table {
background-color: transparent;
color: #fff;
.ant-table-thead > tr > th {
background-color: rgba(255, 255, 255, 0.04);
color: rgba(255, 255, 255, 0.85);
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.ant-table-tbody > tr > td {
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
color: rgba(255, 255, 255, 0.65);
}
.ant-table-tbody > tr:hover > td {
background-color: rgba(255, 255, 255, 0.08);
}
}
}
}
}

View File

@ -0,0 +1,46 @@
import React from 'react';
import DpTab from '../../../../../layouts/mui/DpTab';
import Dialog from '@material-ui/core/Dialog';
import DialogContent from '@material-ui/core/DialogContent';
import DpPaperComponent from '../../../../../layouts/mui/DpPaperCompanent';
import DpTabs from '../../../../../layouts/mui/DpTabs';
import DpAppBar from '../../../../../layouts/mui/DpAppBar';
import DpBackgroundDrop from '../../../../../layouts/mui/DpBackdrop';
import DpCloseButton from '../../../../../layouts/mui/DpCloseButton';
import { Grid } from '@material-ui/core';
import DescriptionItem from '../../../components/DescrptionItem'
function HDStDlg({ record, onClose,open }) {
const [value, setValue] = React.useState(0);
return (
<Dialog
open={open}
onClose={onClose}
maxWidth="xl"
style={{ borderRadius: 0 }}
PaperComponent={DpPaperComponent}
BackdropComponent={DpBackgroundDrop}
>
<div className="boxhead"></div>
<DialogContent style={{ padding: 0, width: '60rem', overflowX: 'hidden',height:'40rem' }}>
<DpAppBar position="sticky">
<DpTabs value={value} indicatorColor="primary" onChange={(_, v) => setValue(v)}>
<DpTab label="处理详情" />
</DpTabs>
<DpCloseButton onClick={onClose} />
</DpAppBar>
<div style={{padding:10}}>
{/* <img src={`${process.env.PUBLIC_URL}/assets/xcxq.png`} style={{width:'100%'}}></img> */}
<Grid container size="small">
<DescriptionItem label="处理图片" span={2}></DescriptionItem>
<DescriptionItem label="处理视频" span={2}></DescriptionItem>
<DescriptionItem label="处理描述" span={2}></DescriptionItem>
</Grid>
</div>
</DialogContent>
<div className="boxfoot"></div>
</Dialog>
)
}
export default React.memo(HDStDlg);

View File

@ -138,7 +138,7 @@ const TaskList = () => {
city: '黄冈市',
district: '麻城市',
location: '',
taskType: '06-02明山水库日常巡查',
taskType: '06-02浮桥河水库日常巡查',
taskContent: '20250602每日巡检',
status: '未完成',
person: '姜兴军',
@ -170,7 +170,7 @@ const TaskList = () => {
city: '黄冈市',
district: '麻城市',
location: '',
taskType: '06-02永丰水库特别检查',
taskType: '06-02浮桥河水库特别检查',
taskContent: '20250602每日巡检',
status: '未完成',
person: '白斌',
@ -186,7 +186,7 @@ const TaskList = () => {
city: '黄冈市',
district: '麻城市',
location: '',
taskType: '06-02永红水库日常巡查',
taskType: '06-02浮桥河水库日常巡查',
taskContent: '20250602每日巡检',
status: '未完成',
person: '于静',
@ -201,7 +201,7 @@ const TaskList = () => {
city: '黄冈市',
district: '麻城市',
location: '',
taskType: '06-02四新水库日常巡查',
taskType: '06-02浮桥河水库日常巡查',
taskContent: '20250602每日巡检',
status: '未完成',
person: '何义红',
@ -213,9 +213,12 @@ const TaskList = () => {
creator: ''
},
];
const flyTo = () => {
const flyTo = (row) => {
// dispatch?.runtime.setInfoDlg({ layerId: 'ChaoshiDetailLayer', properties: {} })
setVisible(true)
if (row.sequence == 1) {
setVisible(true)
}
}
const [params, setParams] = useState({ tm: [] })
@ -227,20 +230,7 @@ const TaskList = () => {
tm: e,
})
};
useEffect(() => {
let options = "";
options = {
etm: moment().add(1, 'hour').set({ minute: 0, second: 0 }).format("YYYY-MM-DD HH:mm"),
stm: moment().subtract(7, 'days').add(1, 'hour').set({ minute: 0, second: 0 }).format("YYYY-MM-DD HH:mm"),
tm: [
moment().subtract(7, 'days').add(1, 'hour').set({ minute: 0, second: 0 }),
moment().add(1, 'hour').set({ minute: 0, second: 0 }),
],
}
setParams(options)
}, [])
return (
<Paper className={classes.root}>
@ -304,7 +294,7 @@ const TaskList = () => {
showTime={{
format: 'HH:mm',
}}
value={params.tm}
value={[moment('2025-06-02 00:00'),moment('2025-06-02 23:00')]}
getPopupContainer={trigger => trigger.parentElement}
/>
</div>
@ -357,7 +347,7 @@ const TaskList = () => {
<TableCell>{row.problems}</TableCell>
<TableCell>{row.processed}</TableCell>
<TableCell>
<IconButton className={classes.actionButton} size="small" onClick={flyTo}>
<IconButton className={classes.actionButton} size="small" onClick={()=>flyTo(row)}>
查看
</IconButton>
</TableCell>

View File

@ -7,7 +7,7 @@ import DpTabs from '../../../../layouts/mui/DpTabs';
import DpAppBar from '../../../../layouts/mui/DpAppBar';
import DpBackgroundDrop from '../../../../layouts/mui/DpBackdrop';
import DpCloseButton from '../../../../layouts/mui/DpCloseButton';
import TaskInspectionDetail from './TaskInspectionDetail'
function HDStDlg({ record, onClose,open }) {
const [value, setValue] = React.useState(0);
@ -28,8 +28,9 @@ function HDStDlg({ record, onClose,open }) {
</DpTabs>
<DpCloseButton onClick={onClose} />
</DpAppBar>
<div style={{padding:10}}>
<img src={`${process.env.PUBLIC_URL}/assets/xcxq.png`} style={{width:'100%'}}></img>
<div style={{ padding: 10 }}>
<TaskInspectionDetail />
{/* <img src={`${process.env.PUBLIC_URL}/assets/xcxq.png`} style={{width:'100%'}}></img> */}
</div>
</DialogContent>
<div className="boxfoot"></div>

File diff suppressed because it is too large Load Diff

View File

@ -1366,7 +1366,7 @@ useEffect(() => {
}
</TableContainer>
<div style={{ height: '30px', overflow: 'hidden',position:'absolute',top:40,right:1224 }}>
{/* <div style={{ height: '30px', overflow: 'hidden',position:'absolute',top:40,right:1224 }}>
<Select
labelId="analysis-select-label"
value={dimension}
@ -1375,9 +1375,9 @@ useEffect(() => {
>
<MenuItem value="浮桥河水库">浮桥河水库</MenuItem>
<MenuItem value="明山水库">明山水库</MenuItem>
<MenuItem value="永丰水库">永丰水库</MenuItem>
<MenuItem value="永丰水库">三河口水库</MenuItem>
</Select>
</div>
</div> */}
</PanelBox>
)
}

View File

@ -12,7 +12,7 @@ import {
} from '@material-ui/core';
const reservoirData = [
{
name: '明山水库',
name: '浮桥河水库',
maxInflow: {
value: 12.32,
time: '03-23 14:32'

View File

@ -77,7 +77,7 @@ function HDReal({ style }) {
{
"guid": "42118120003",
"code": "",
"name": "明山水库",
"name": "浮桥河水库",
"resRegCode": "42000020030-A4",
"adName": "白果镇",
"engScal": "大2型",
@ -92,7 +92,7 @@ function HDReal({ style }) {
{
"guid": "42118120003",
"code": "",
"name": "永红水库",
"name": "浮桥河水库",
"resRegCode": "42000020030-A4",
"adName": "白果镇",
"engScal": "大2型",
@ -107,7 +107,7 @@ function HDReal({ style }) {
{
"guid": "42118120003",
"code": "",
"name": "永丰水库",
"name": "浮桥河水库",
"resRegCode": "42000020030-A4",
"adName": "白果镇",
"engScal": "大2型",

View File

@ -14,26 +14,26 @@ function DrpReal({ style }) {
style={style}
title="水库预报"
color="green"
extra={
<>
{/* <img src='/assets/年下拉3.jpg' style={{width:'100px', height:'30px',marginRight:'10px'}}/> */}
<div style={{height:'30px',overflow:'hidden'}}>
<Select
labelId="analysis-select-label"
value={dimension}
label=""
onChange={(event) => {
const value = event.target.value;
setDimension(value);
}}
>
<MenuItem value="ft">浮桥河水库</MenuItem>
</Select>
</div>
</>
}
// extra={
// <>
// {/* <img src='/assets/年下拉3.jpg' style={{width:'100px', height:'30px',marginRight:'10px'}}/> */}
// <div style={{height:'30px',overflow:'hidden'}}>
// <Select
// labelId="analysis-select-label"
// value={dimension}
// label=""
// onChange={(event) => {
// const value = event.target.value;
// setDimension(value);
// }}
// >
// <MenuItem value="ft">浮桥河水库</MenuItem>
// </Select>
// </div>
// </>
// }
>
<div className='skyb-box'>
{/* <div className='skyb-box'>
<div className='rain-yb'>
<div className='title-yb'>水库雨量预报</div>
<TableYb />
@ -45,7 +45,9 @@ function DrpReal({ style }) {
style={{ width: '100%',height:200 }}
/>
</div>
</div>
</div> */}
<img src={`${process.env.PUBLIC_URL}/assets/skyb.png`} />
</PanelBox>
)
}

View File

@ -1701,14 +1701,14 @@ const data4 = [
const data = [
{
"guid": "42118120003",
"code": "",
"name": "明山水库-日常管理",
"code": "1",
"name": "浮桥河水库-日常管理",
"resRegCode": "42000020030-A4",
"adName": "白果镇",
"engScal": "大2型",
"place": "湖北省-黄冈市-麻城市-白果镇",
"lgtd": "115.066667",
"lttd": "31.016667",
"lgtd": "114.88169",
"lttd": "31.171967",
'username': '余静',
taskType: '混凝土护坡开裂',
tm: '2025-06-02 00:10:00',
@ -1717,7 +1717,7 @@ const data = [
{
"guid": "42118120003",
"code": "",
"name": "永红水库-日常管理",
"name": "浮桥河水库-日常管理",
"resRegCode": "42000020030-A4",
"adName": "白果镇",
"engScal": "大2型",
@ -1732,7 +1732,7 @@ const data = [
{
"guid": "42118120003",
"code": "",
"name": "永丰水库-汛前检查",
"name": "浮桥河水库-汛前检查",
"resRegCode": "42000020030-A4",
"adName": "白果镇",
"engScal": "大2型",
@ -1750,22 +1750,24 @@ const data = [
function DrpReal({ style }) {
const [tab, setTab] = useState('1')
const dispatch = useDispatch();
const [dimension, setDimension] = useState('ft');
const [dimension, setDimension] = useState('浮桥河水库');
const onChange = (event) => {
const value = event.target.value;
setDimension(value);
}
const jumpTo = (record) => {
const { lgtd, lttd } = record;
const lgtdNum = Number(lgtd) + 0.0019;
const lttdNum = Number(lttd)
if (lgtdNum && lttdNum) {
dispatch.runtime.setCameraTarget({
center: [lgtdNum, lttdNum + config.poiPositionOffsetY.hd],
zoom: config.poiPositionZoom.hd,
pitch: config.poiPitch,
});
}
const lgtdNum = Number(lgtd);
const lttdNum = Number(lttd)
if (record.code == 1) {
if (lgtdNum && lttdNum) {
dispatch.runtime.setCameraTarget({
center: [lgtdNum, lttdNum],
zoom: 17,
pitch: config.poiPitch,
});
}
}
}
return (
<PanelBox
@ -1821,19 +1823,18 @@ function DrpReal({ style }) {
<img src={`${process.env.PUBLIC_URL}/assets/sjyf.jpg`} alt="" style={{ width: 420 }} />
</div>
<div style={{ height: '30px', overflow: 'hidden',position:'absolute',top:80,right:520 }}>
{/* <div style={{ height: '30px', overflow: 'hidden',position:'absolute',top:40,right:1224 }}>
<Select
labelId="analysis-select-label"
value={dimension}
label="请选择水库"
onChange={onChange}
>
<MenuItem value="ft">请选择水库</MenuItem>
<MenuItem value="浮桥河水库">浮桥河水库</MenuItem>
<MenuItem value="明山水库">明山水库</MenuItem>
<MenuItem value="永丰水库">永丰水库</MenuItem>
<MenuItem value="永丰水库">三河口水库</MenuItem>
</Select>
</div>
</div> */}
</PanelBox>
)
}

View File

@ -16,31 +16,16 @@ import XcCard from './xcCard'
import config from '../../../../config';
const data = [
{
"guid": "42118120003",
"code": "",
"name": "明山水库-日常管理",
"resRegCode": "42000020030-A4",
"adName": "白果镇",
"engScal": "大2型",
"place": "湖北省-黄冈市-麻城市-白果镇",
"lgtd": "115.066667",
"lttd": "31.016667",
'username': '余静',
taskType: '特别巡查',
tm: '2025-06-02 00:10:00',
status: '未完成'
},
{
"guid": "42118120003",
"code": "",
"code": "1",
"name": "浮桥河水库-汛前检查",
"resRegCode": "42000020030-A4",
"adName": "白果镇",
"engScal": "大2型",
"place": "湖北省-黄冈市-麻城市-白果镇",
"lgtd": "114.875",
"lttd": "31.166667",
"lgtd": "114.88169",
"lttd": "31.171967",
'username': '熊杰',
taskType: '日常巡查',
tm: '2025-06-02 00:08:00',
@ -65,7 +50,7 @@ const data = [
{
"guid": "42118120003",
"code": "",
"name": "永红水库-日常管理",
"name": "浮桥河水库-日常管理",
"resRegCode": "42000020030-A4",
"adName": "白果镇",
"engScal": "大2型",
@ -80,7 +65,7 @@ const data = [
{
"guid": "42118120003",
"code": "",
"name": "永丰水库-汛前检查",
"name": "浮桥河水库-汛前检查",
"resRegCode": "42000020030-A4",
"adName": "白果镇",
"engScal": "大2型",
@ -102,14 +87,16 @@ function DrpReal({ style }) {
}
const jumpTo = (record) => {
const { lgtd, lttd } = record;
const lgtdNum = Number(lgtd) + 0.0019;
const lgtdNum = Number(lgtd);
const lttdNum = Number(lttd)
if (lgtdNum && lttdNum) {
dispatch.runtime.setCameraTarget({
center: [lgtdNum, lttdNum + config.poiPositionOffsetY.hd],
zoom: config.poiPositionZoom.hd,
pitch: config.poiPitch,
});
if (record.code == 1) {
if (lgtdNum && lttdNum) {
dispatch.runtime.setCameraTarget({
center: [lgtdNum, lttdNum],
zoom: 17,
pitch: config.poiPitch,
});
}
}
}
return (