merge: 合并冲突
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 404 B |
|
After Width: | Height: | Size: 4.6 KiB |
|
After Width: | Height: | Size: 206 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
|
@ -70,6 +70,14 @@
|
|||
"y": 0,
|
||||
"pixelRatio": 1,
|
||||
"visible": true
|
||||
},
|
||||
"巡查": {
|
||||
"width": 32,
|
||||
"height": 32,
|
||||
"x": 128,
|
||||
"y": 32,
|
||||
"pixelRatio": 1,
|
||||
"visible": true
|
||||
},
|
||||
"水库-离线": {
|
||||
"width": 32,
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 46 KiB |
|
|
@ -467,8 +467,7 @@ const map = {
|
|||
dispatch.runtime.setLayerSetting({ planeArea: null });
|
||||
dispatch.map.setLayerVisible({ ContourLayer: false });
|
||||
}
|
||||
|
||||
if (id === 201 || id === 205) {
|
||||
if (id === 201) {
|
||||
dispatch.map.setLayerSetting({ dom: false });
|
||||
map.setLayoutProperty('热力图', 'visibility', 'visible');
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ export default function calcLayout(view, rightStack, hidePanels) {
|
|||
} else if (view === 206) {
|
||||
left = [
|
||||
{ key: '天气' },
|
||||
{ key: '水库管理', style: { height: '40rem', flexGrow: 1 } },
|
||||
{ key: '巡查任务总览', style: { height: '40rem', flexGrow: 1 } },
|
||||
];
|
||||
leftFullHeight = true;
|
||||
} else if (view === 207) {
|
||||
|
|
@ -289,7 +289,8 @@ export default function calcLayout(view, rightStack, hidePanels) {
|
|||
];
|
||||
} else if (view === 206) {
|
||||
right = [
|
||||
{ key: '警报' },
|
||||
{ key: '巡查问题看板', style: { height: '70%', flexGrow: 1 } },
|
||||
{ key: '水库管护', style: { height: '10rem', flexGrow: 1 } },
|
||||
];
|
||||
} else if (view === 207) {
|
||||
right = [
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import {
|
|||
Box,
|
||||
} from '@material-ui/core';
|
||||
import { makeStyles } from '@material-ui/core/styles';
|
||||
|
||||
import clsx from "clsx"
|
||||
import PlayArrowIcon from '@material-ui/icons/PlayArrow';
|
||||
import PauseIcon from '@material-ui/icons/Pause';
|
||||
|
||||
|
|
@ -35,15 +35,33 @@ const useStyles = makeStyles((theme) => ({
|
|||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
gap: theme.spacing(2),
|
||||
},
|
||||
controls1: {
|
||||
position: 'absolute',
|
||||
top: '50%',
|
||||
left: '50%',
|
||||
transform: 'translate(-50%, -50%)',
|
||||
padding: theme.spacing(2),
|
||||
background: 'rgba(0,0,0,0.7)',
|
||||
borderRadius: theme.spacing(1),
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
gap: theme.spacing(2),
|
||||
width: '800px',
|
||||
maxWidth: '90%',
|
||||
pointerEvents: 'none',
|
||||
|
||||
},
|
||||
playButton: {
|
||||
color: '#fff',
|
||||
pointerEvents: 'auto',
|
||||
'&:hover': {
|
||||
backgroundColor: 'rgba(255,255,255,0.1)',
|
||||
},
|
||||
},
|
||||
slider: {
|
||||
color: '#1976d2',
|
||||
pointerEvents: 'auto',
|
||||
flex: 1,
|
||||
'& .MuiSlider-rail': {
|
||||
backgroundColor: 'rgba(255,255,255,0.3)',
|
||||
|
|
@ -65,6 +83,7 @@ const useStyles = makeStyles((theme) => ({
|
|||
fontSize: '0.875rem',
|
||||
minWidth: 100,
|
||||
textAlign: 'right',
|
||||
pointerEvents: 'auto',
|
||||
},
|
||||
dateDisplay: {
|
||||
position: 'absolute',
|
||||
|
|
@ -75,9 +94,13 @@ const useStyles = makeStyles((theme) => ({
|
|||
fontWeight: 500,
|
||||
textShadow: '1px 1px 2px rgba(0,0,0,0.5)',
|
||||
},
|
||||
odd: {
|
||||
zIndex: 1,
|
||||
position: 'absolute'
|
||||
}
|
||||
}));
|
||||
|
||||
const VideoPlayer = ({ videoUrl, date }) => {
|
||||
const VideoPlayer = ({ videoUrl, date,odd=false }) => {
|
||||
const classes = useStyles();
|
||||
const [playing, setPlaying] = useState(false);
|
||||
const [progress, setProgress] = useState(0);
|
||||
|
|
@ -120,7 +143,7 @@ const VideoPlayer = ({ videoUrl, date }) => {
|
|||
};
|
||||
|
||||
return (
|
||||
<div className={classes.root}>
|
||||
<div className={clsx({[classes.root]:true,[classes.odd]:odd})}>
|
||||
<div className={classes.videoContainer}>
|
||||
<video
|
||||
ref={videoRef}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import { makeStyles } from '@material-ui/core/styles';
|
|||
const useStyles = makeStyles(() => ({
|
||||
card: {
|
||||
marginBottom: '16px',
|
||||
// backgroundColor: '#fff',
|
||||
backgroundColor: 'transparent',
|
||||
'&:hover': {
|
||||
boxShadow: '0 4px 12px rgba(0,0,0,0.1)'
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import { makeStyles } from '@material-ui/core/styles';
|
|||
const useStyles = makeStyles(() => ({
|
||||
card: {
|
||||
marginBottom: '16px',
|
||||
// backgroundColor: '#fff',
|
||||
backgroundColor: 'transparent',
|
||||
'&:hover': {
|
||||
boxShadow: '0 4px 12px rgba(0,0,0,0.1)'
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ const useStyles = makeStyles((theme) => ({
|
|||
},
|
||||
statsContainer: {
|
||||
marginTop: theme.spacing(2),
|
||||
backgroundColor: 'rgba(0, 0, 0, 0.2)',
|
||||
backgroundColor: 'transparent',
|
||||
borderRadius: theme.shape.borderRadius,
|
||||
padding: theme.spacing(2)
|
||||
},
|
||||
|
|
@ -81,55 +81,55 @@ const useStyles = makeStyles((theme) => ({
|
|||
const RainfallMonitor = () => {
|
||||
const rainfallList = [
|
||||
{
|
||||
time: '2020-07-25 00:00:00',
|
||||
time: '2024-12-10 10:00:00',
|
||||
rainfall: 1.5,
|
||||
magnified: 3,
|
||||
simulated: 4.5
|
||||
},
|
||||
{
|
||||
time: '2020-07-25 01:00:00',
|
||||
time: '2024-12-10 11:00:00',
|
||||
rainfall: 1.5,
|
||||
magnified: 3,
|
||||
simulated: 4.5
|
||||
},
|
||||
{
|
||||
time: '2020-07-25 02:00:00',
|
||||
time: '2024-12-10 12:00:00',
|
||||
rainfall: 4.5,
|
||||
magnified: 9,
|
||||
simulated: 13.5
|
||||
},
|
||||
{
|
||||
time: '2020-07-25 03:00:00',
|
||||
time: '2024-12-10 13:00:00',
|
||||
rainfall: 1.5,
|
||||
magnified: 3,
|
||||
simulated: 4.5
|
||||
},
|
||||
{
|
||||
time: '2020-07-25 04:00:00',
|
||||
time: '2024-12-10 14:00:00',
|
||||
rainfall: 1.5,
|
||||
magnified: 3,
|
||||
simulated: 4.5
|
||||
},
|
||||
{
|
||||
time: '2020-07-25 05:00:00',
|
||||
time: '2024-12-10 15:00:00',
|
||||
rainfall: 0,
|
||||
magnified: 0,
|
||||
simulated: 0
|
||||
},
|
||||
{
|
||||
time: '2020-07-25 06:00:00',
|
||||
time: '2024-12-10 16:00:00',
|
||||
rainfall: 1.5,
|
||||
magnified: 3,
|
||||
simulated: 4.5
|
||||
},
|
||||
{
|
||||
time: '2020-07-25 07:00:00',
|
||||
time: '2024-12-10 17:00:00',
|
||||
rainfall: 1.5,
|
||||
magnified: 3,
|
||||
simulated: 4.5
|
||||
},
|
||||
{
|
||||
time: '2020-07-25 08:00:00',
|
||||
time: '2024-12-10 18:00:00',
|
||||
rainfall: 3,
|
||||
magnified: 6,
|
||||
simulated: 9
|
||||
|
|
@ -163,10 +163,10 @@ const RainfallMonitor = () => {
|
|||
<Table>
|
||||
<TableHead>
|
||||
<TableRow>
|
||||
<TableCell>时间</TableCell>
|
||||
<TableCell>面雨量(mm)</TableCell>
|
||||
<TableCell>放大量(mm)</TableCell>
|
||||
<TableCell>预演面雨量(mm)</TableCell>
|
||||
<TableCell style={{width:'37%'}}>时间</TableCell>
|
||||
<TableCell style={{width:'20%'}}>面雨量(mm)</TableCell>
|
||||
<TableCell style={{width:'20%'}}>放大量(mm)</TableCell>
|
||||
<TableCell style={{width:'20%'}}>预演面雨量(mm)</TableCell>
|
||||
</TableRow>
|
||||
</TableHead>
|
||||
<TableBody>
|
||||
|
|
@ -202,7 +202,7 @@ const RainfallMonitor = () => {
|
|||
))}
|
||||
</Box>
|
||||
<Box className={classes.statsRow}>
|
||||
<Typography variant="subtitle2" style={{ color: "#fff", width: '120' }}></Typography>
|
||||
<Typography variant="subtitle2" style={{ color: "#fff", width: '80px' }}></Typography>
|
||||
{['>102.0', '>125.0', '>141.0', '>163.0', '>188.0'].map((threshold, index) => (
|
||||
<Box key={index} display="flex" flexDirection="column" alignItems="center">
|
||||
<Typography variant="body2">{threshold}</Typography>
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import ShuizhiLayer from '../../MapCtrl/mapstyle/shuizhilayer';
|
|||
import TrsqLayer from '../../MapCtrl/mapstyle/trsqlayer';
|
||||
import ShuichangLayer from '../../MapCtrl/mapstyle/shuichangLayer'
|
||||
import ShuiyuandiLayer from '../../MapCtrl/mapstyle/shuiyuandiLayer'
|
||||
import XunchaLayer from '../../MapCtrl/mapstyle/xunchalayer';
|
||||
|
||||
|
||||
|
||||
|
|
@ -149,6 +150,9 @@ function LayersDlg({ onClose }) {
|
|||
<div className={classes.catItem}>
|
||||
<RowItem icon="水源地" label="水源地" name={ShuiyuandiLayer.LayerName} checked={!!layerVisible[ShuiyuandiLayer.LayerName]} onChange={layerVisibleChanged} />
|
||||
</div>
|
||||
<div className={classes.catItem}>
|
||||
<RowItem icon="巡查" label="巡查" name={XunchaLayer.LayerName} checked={!!layerVisible[XunchaLayer.LayerName]} onChange={layerVisibleChanged} />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className={classes.catRoot}>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,41 @@
|
|||
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';
|
||||
|
||||
function HDStDlg({ record, onClose }) {
|
||||
const [value, setValue] = React.useState(0);
|
||||
|
||||
return (
|
||||
<Dialog
|
||||
open={true}
|
||||
onClose={onClose}
|
||||
maxWidth="xl"
|
||||
style={{ borderRadius: 0 }}
|
||||
PaperComponent={DpPaperComponent}
|
||||
BackdropComponent={DpBackgroundDrop}
|
||||
>
|
||||
<div className="boxhead"></div>
|
||||
<DialogContent style={{ padding: 0, width: '70rem', 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/shuikugh.png`} style={{width:'100%'}}></img>
|
||||
</div>
|
||||
|
||||
</DialogContent>
|
||||
<div className="boxfoot"></div>
|
||||
</Dialog>
|
||||
)
|
||||
}
|
||||
|
||||
export default React.memo(HDStDlg);
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
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';
|
||||
|
||||
function HDStDlg({ record, onClose }) {
|
||||
const [value, setValue] = React.useState(0);
|
||||
|
||||
return (
|
||||
<Dialog
|
||||
open={true}
|
||||
onClose={onClose}
|
||||
maxWidth="xl"
|
||||
style={{ borderRadius: 0 }}
|
||||
PaperComponent={DpPaperComponent}
|
||||
BackdropComponent={DpBackgroundDrop}
|
||||
>
|
||||
<div className="boxhead"></div>
|
||||
<DialogContent style={{ padding: 0, width: '60rem', 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>
|
||||
</DialogContent>
|
||||
<div className="boxfoot"></div>
|
||||
</Dialog>
|
||||
)
|
||||
}
|
||||
|
||||
export default React.memo(HDStDlg);
|
||||
|
|
@ -0,0 +1,377 @@
|
|||
import React, { useState,useEffect } from 'react';
|
||||
import { makeStyles } from '@material-ui/core/styles';
|
||||
import {
|
||||
Paper,
|
||||
Table,
|
||||
TableBody,
|
||||
TableCell,
|
||||
TableContainer,
|
||||
TableHead,
|
||||
TableRow,
|
||||
TextField,
|
||||
Button,
|
||||
Box,
|
||||
IconButton,
|
||||
ButtonGroup,
|
||||
Grid
|
||||
} from '@material-ui/core';
|
||||
import SearchIcon from '@material-ui/icons/Search';
|
||||
import RefreshIcon from '@material-ui/icons/Refresh';
|
||||
import { DatePicker } from 'antd';
|
||||
import moment from 'moment';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import ModalView from './view'
|
||||
const { RangePicker } = DatePicker;
|
||||
|
||||
const useStyles = makeStyles((theme) => ({
|
||||
root: {
|
||||
width: '100%',
|
||||
backgroundColor: 'transparent',
|
||||
color: '#fff'
|
||||
},
|
||||
toolbar: {
|
||||
padding: theme.spacing(2),
|
||||
display: 'flex',
|
||||
gap: theme.spacing(2),
|
||||
alignItems: 'center',
|
||||
borderBottom: '1px solid rgba(255, 255, 255, 0.1)'
|
||||
},
|
||||
searchRow: {
|
||||
display: 'flex',
|
||||
gap: theme.spacing(2),
|
||||
alignItems: 'center',
|
||||
flexWrap: 'wrap'
|
||||
},
|
||||
searchField: {
|
||||
'& .MuiInputBase-root': {
|
||||
color: '#fff',
|
||||
backgroundColor: 'rgba(255, 255, 255, 0.05)',
|
||||
borderRadius: 4,
|
||||
width: 200
|
||||
},
|
||||
'& .MuiInputLabel-root': {
|
||||
color: '#fff'
|
||||
},
|
||||
'& .MuiOutlinedInput-notchedOutline': {
|
||||
borderColor: 'rgba(255, 255, 255, 0.1)'
|
||||
}
|
||||
},
|
||||
datePicker: {
|
||||
'& .MuiInputBase-root': {
|
||||
color: '#fff',
|
||||
backgroundColor: 'rgba(255, 255, 255, 0.05)',
|
||||
width: 200
|
||||
},
|
||||
'& .MuiIconButton-root': {
|
||||
color: '#fff'
|
||||
},
|
||||
'& .MuiOutlinedInput-notchedOutline': {
|
||||
borderColor: 'rgba(255, 255, 255, 0.1)'
|
||||
}
|
||||
},
|
||||
buttonGroup: {
|
||||
'& .MuiButton-root': {
|
||||
color: '#fff',
|
||||
borderColor: 'rgba(255, 255, 255, 0.3)',
|
||||
'&.active': {
|
||||
backgroundColor: '#2196f3',
|
||||
borderColor: '#2196f3'
|
||||
}
|
||||
}
|
||||
},
|
||||
table: {
|
||||
'& .MuiTableCell-head': {
|
||||
backgroundColor: 'rgba(255, 255, 255, 0.05)',
|
||||
color: '#fff',
|
||||
fontWeight: 'bold',
|
||||
borderBottom: '1px solid rgba(255, 255, 255, 0.1)'
|
||||
},
|
||||
'& .MuiTableCell-body': {
|
||||
color: '#fff',
|
||||
borderBottom: '1px solid rgba(255, 255, 255, 0.1)'
|
||||
}
|
||||
},
|
||||
status: {
|
||||
padding: '4px 8px',
|
||||
borderRadius: 4,
|
||||
backgroundColor: 'rgba(33, 150, 243, 0.1)',
|
||||
color: '#2196f3'
|
||||
},
|
||||
actionButton: {
|
||||
color: '#2196f3',
|
||||
'&:hover': {
|
||||
backgroundColor: 'rgba(33, 150, 243, 0.1)'
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
const TaskList = () => {
|
||||
const classes = useStyles();
|
||||
const [startDate, setStartDate] = useState(null);
|
||||
const dispatch = useDispatch();
|
||||
const [endDate, setEndDate] = useState(null);
|
||||
const [activeType, setActiveType] = useState('daily');
|
||||
const [visible, setVisible] = useState(false)
|
||||
const handleTypeChange = (type) => {
|
||||
setActiveType(type);
|
||||
};
|
||||
|
||||
const columns = [
|
||||
{ id: 'sequence', label: '序号', width: 70 },
|
||||
{ id: 'city', label: '市' },
|
||||
{ id: 'district', label: '区县' },
|
||||
{ id: 'location', label: '街道乡镇' },
|
||||
{ id: 'taskType', label: '任务标题' },
|
||||
{ id: 'taskContent', label: '任务内容' },
|
||||
{ id: 'status', label: '任务状态' },
|
||||
{ id: 'person', label: '巡查人' },
|
||||
{ id: 'startTime', label: '开始时间' },
|
||||
{ id: 'endTime', label: '结束时间' },
|
||||
{ id: 'problems', label: '问题数量', width: 100 },
|
||||
{ id: 'processed', label: '待处理', width: 100 },
|
||||
{ id: 'actions', label: '操作', width: 150 }
|
||||
];
|
||||
|
||||
const mockData = [
|
||||
{
|
||||
sequence: 1,
|
||||
city: '黄冈市',
|
||||
district: '麻城市',
|
||||
location: '',
|
||||
taskType: '06-02明山水库日常巡查',
|
||||
taskContent: '20250602每日巡检',
|
||||
status: '未完成',
|
||||
person: '姜兴军',
|
||||
startTime: '2025-06-02 00:00:00',
|
||||
endTime: '2025-06-08 23:59:59',
|
||||
problems: 0,
|
||||
processed: 0,
|
||||
createTime: '2025-06-02 02:00:00',
|
||||
creator: ''
|
||||
},
|
||||
{
|
||||
sequence: 2,
|
||||
city: '黄冈市',
|
||||
district: '麻城市',
|
||||
location: '',
|
||||
taskType: '06-02浮桥河水库汛前巡查',
|
||||
taskContent: '20250602每日巡检',
|
||||
status: '未完成',
|
||||
person: '熊杰',
|
||||
startTime: '2025-06-02 00:00:00',
|
||||
endTime: '2025-06-08 23:59:59',
|
||||
problems: 0,
|
||||
processed: 0,
|
||||
createTime: '2025-06-02 02:00:00',
|
||||
creator: ''
|
||||
},
|
||||
{
|
||||
sequence: 3,
|
||||
city: '黄冈市',
|
||||
district: '麻城市',
|
||||
location: '',
|
||||
taskType: '06-02永丰水库特别检查',
|
||||
taskContent: '20250602每日巡检',
|
||||
status: '未完成',
|
||||
person: '白斌',
|
||||
startTime: '2025-06-02 00:00:00',
|
||||
endTime: '2025-06-08 23:59:59',
|
||||
problems: 0,
|
||||
processed: 0,
|
||||
createTime: '2025-06-02 02:00:00',
|
||||
creator: ''
|
||||
},
|
||||
{
|
||||
sequence: 4,
|
||||
city: '黄冈市',
|
||||
district: '麻城市',
|
||||
location: '',
|
||||
taskType: '06-02永红水库日常巡查',
|
||||
taskContent: '20250602每日巡检',
|
||||
status: '未完成',
|
||||
person: '于静',
|
||||
startTime: '2025-06-02 00:00:00',
|
||||
endTime: '2025-06-08 23:59:59',
|
||||
problems: 0,
|
||||
processed: 0,
|
||||
createTime: '2025-06-02 02:00:00',
|
||||
creator: ''
|
||||
},{
|
||||
sequence: 5,
|
||||
city: '黄冈市',
|
||||
district: '麻城市',
|
||||
location: '',
|
||||
taskType: '06-02四新水库日常巡查',
|
||||
taskContent: '20250602每日巡检',
|
||||
status: '未完成',
|
||||
person: '何义红',
|
||||
startTime: '2025-06-02 00:00:00',
|
||||
endTime: '2025-06-08 23:59:59',
|
||||
problems: 0,
|
||||
processed: 0,
|
||||
createTime: '2025-06-02 02:00:00',
|
||||
creator: ''
|
||||
},
|
||||
];
|
||||
const flyTo = () => {
|
||||
// dispatch?.runtime.setInfoDlg({ layerId: 'ChaoshiDetailLayer', properties: {} })
|
||||
setVisible(true)
|
||||
}
|
||||
const [params, setParams] = useState({ tm: [] })
|
||||
|
||||
const searchTm = (e) => {
|
||||
setParams({
|
||||
...params,
|
||||
stm: e[0].format("YYYY-MM-DD HH:mm"),
|
||||
etm: e[1].format("YYYY-MM-DD HH:mm"),
|
||||
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}>
|
||||
<Box className={classes.toolbar}>
|
||||
<Box className={classes.searchRow}>
|
||||
<ButtonGroup className={classes.buttonGroup}>
|
||||
<Button
|
||||
className={activeType === 'daily' ? 'active' : ''}
|
||||
onClick={() => handleTypeChange('daily')}
|
||||
>
|
||||
日常巡查(3)
|
||||
</Button>
|
||||
<Button
|
||||
className={activeType === 'flood' ? 'active' : ''}
|
||||
onClick={() => handleTypeChange('flood')}
|
||||
>
|
||||
汛期巡查(1)
|
||||
</Button>
|
||||
<Button
|
||||
className={activeType === 'special' ? 'active' : ''}
|
||||
onClick={() => handleTypeChange('special')}
|
||||
>
|
||||
特别巡查(1)
|
||||
</Button>
|
||||
<Button
|
||||
className={activeType === 'all' ? 'active' : ''}
|
||||
onClick={() => handleTypeChange('all')}
|
||||
>
|
||||
全部(5024)
|
||||
</Button>
|
||||
</ButtonGroup>
|
||||
</Box>
|
||||
<Box className={classes.searchRow}>
|
||||
<TextField
|
||||
className={classes.searchField}
|
||||
variant="outlined"
|
||||
size="small"
|
||||
placeholder="请输入水库名称"
|
||||
/>
|
||||
<TextField
|
||||
className={classes.searchField}
|
||||
variant="outlined"
|
||||
size="small"
|
||||
placeholder="请输入任务标题"
|
||||
/>
|
||||
<div style={{ display: 'flex', alignItems: 'center',width:'40%' }}>
|
||||
<div style={{ color: "#fff" }}>时段选择:</div>
|
||||
<div className='tm' style={{ position: "relative", zIndex: 999999, color: "#fff", width: "70%", margin: '10px' }}>
|
||||
<RangePicker
|
||||
// width="100%"
|
||||
className='time-picker'
|
||||
style={{
|
||||
flex: 1,
|
||||
background: "transparent",
|
||||
border: "none",
|
||||
color: "#fff",
|
||||
}}
|
||||
onChange={searchTm}
|
||||
allowClear
|
||||
format="YYYY-MM-DD HH:mm"
|
||||
showTime={{
|
||||
format: 'HH:mm',
|
||||
}}
|
||||
value={params.tm}
|
||||
getPopupContainer={trigger => trigger.parentElement}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<Button
|
||||
variant="contained"
|
||||
color="primary"
|
||||
startIcon={<SearchIcon />}
|
||||
>
|
||||
查询
|
||||
</Button>
|
||||
<Button
|
||||
variant="outlined"
|
||||
style={{ color: '#fff', borderColor: 'rgba(255, 255, 255, 0.3)' }}
|
||||
startIcon={<RefreshIcon />}
|
||||
>
|
||||
重置
|
||||
</Button>
|
||||
</Box>
|
||||
</Box>
|
||||
<TableContainer>
|
||||
<Table className={classes.table} size="small">
|
||||
<TableHead>
|
||||
<TableRow>
|
||||
{columns.map((column) => (
|
||||
<TableCell
|
||||
key={column.id}
|
||||
style={{ width: column.width }}
|
||||
>
|
||||
{column.label}
|
||||
</TableCell>
|
||||
))}
|
||||
</TableRow>
|
||||
</TableHead>
|
||||
<TableBody>
|
||||
{mockData.map((row, index) => (
|
||||
<TableRow key={index}>
|
||||
<TableCell>{row.sequence}</TableCell>
|
||||
<TableCell>{row.city}</TableCell>
|
||||
<TableCell>{row.district}</TableCell>
|
||||
<TableCell>{row.location}</TableCell>
|
||||
<TableCell>{row.taskType}</TableCell>
|
||||
<TableCell>{row.taskContent}</TableCell>
|
||||
<TableCell>
|
||||
<span className={classes.status}>{row.status}</span>
|
||||
</TableCell>
|
||||
<TableCell>{row.person}</TableCell>
|
||||
<TableCell>{row.startTime}</TableCell>
|
||||
<TableCell>{row.endTime}</TableCell>
|
||||
<TableCell>{row.problems}</TableCell>
|
||||
<TableCell>{row.processed}</TableCell>
|
||||
<TableCell>
|
||||
<IconButton className={classes.actionButton} size="small" onClick={flyTo}>
|
||||
查看
|
||||
</IconButton>
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
))}
|
||||
</TableBody>
|
||||
</Table>
|
||||
</TableContainer>
|
||||
<ModalView
|
||||
open={visible}
|
||||
onClose={() => setVisible(false)}
|
||||
></ModalView>
|
||||
</Paper>
|
||||
);
|
||||
};
|
||||
|
||||
export default TaskList;
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
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 ContentDetail from './detail'
|
||||
function HDStDlg({ record, onClose }) {
|
||||
const [value, setValue] = React.useState(0);
|
||||
|
||||
return (
|
||||
<Dialog
|
||||
open={true}
|
||||
onClose={onClose}
|
||||
maxWidth="xl"
|
||||
style={{ borderRadius: 0 }}
|
||||
PaperComponent={DpPaperComponent}
|
||||
BackdropComponent={DpBackgroundDrop}
|
||||
>
|
||||
<div className="boxhead"></div>
|
||||
<DialogContent style={{ padding: 0, width: '110rem', overflowX: 'hidden',height:'80rem' }}>
|
||||
<DpAppBar position="sticky">
|
||||
<DpTabs value={value} indicatorColor="primary" onChange={(_, v) => setValue(v)}>
|
||||
<DpTab label="超时详情" />
|
||||
</DpTabs>
|
||||
<DpCloseButton onClick={onClose} />
|
||||
</DpAppBar>
|
||||
|
||||
<ContentDetail />
|
||||
</DialogContent>
|
||||
<div className="boxfoot"></div>
|
||||
</Dialog>
|
||||
)
|
||||
}
|
||||
|
||||
export default React.memo(HDStDlg);
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
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';
|
||||
|
||||
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:'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>
|
||||
</DialogContent>
|
||||
<div className="boxfoot"></div>
|
||||
</Dialog>
|
||||
)
|
||||
}
|
||||
|
||||
export default React.memo(HDStDlg);
|
||||
|
|
@ -8,9 +8,15 @@ import DpAppBar from '../../../../layouts/mui/DpAppBar';
|
|||
import DpBackgroundDrop from '../../../../layouts/mui/DpBackdrop';
|
||||
import DpCloseButton from '../../../../layouts/mui/DpCloseButton';
|
||||
import Zdya from './zdscya'
|
||||
function HDStDlg({ record, onClose }) {
|
||||
const [value, setValue] = React.useState(0);
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
|
||||
function HDStDlg({ record, onClose }) {
|
||||
const dispatch = useDispatch();
|
||||
const [value, setValue] = React.useState(0);
|
||||
const loadFa = () => {
|
||||
onClose()
|
||||
dispatch.runtime.setYyfa({ yy: 111 })
|
||||
}
|
||||
return (
|
||||
<Dialog
|
||||
open={true}
|
||||
|
|
@ -29,7 +35,7 @@ function HDStDlg({ record, onClose }) {
|
|||
<DpCloseButton onClick={onClose} />
|
||||
</DpAppBar>
|
||||
|
||||
<Zdya />
|
||||
<Zdya loadFa={loadFa} />
|
||||
</DialogContent>
|
||||
<div className="boxfoot"></div>
|
||||
</Dialog>
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ const useStyles = makeStyles((theme) => ({
|
|||
},
|
||||
}));
|
||||
|
||||
const SchemeOptimization = () => {
|
||||
const SchemeOptimization = ({loadFa}) => {
|
||||
const classes = useStyles();
|
||||
const [reservoirs, setReservoirs] = useState([
|
||||
{ name: '浮标河水库', safeLevel: 64.80, storage: 16110, maxOutflow: 20.00 },
|
||||
|
|
@ -100,7 +100,7 @@ const SchemeOptimization = () => {
|
|||
const [data, setData] = useState(checkData)
|
||||
const changeSw = (e, id) => {
|
||||
const checked = e.target.checked
|
||||
const data1 = checkData.map(item => {
|
||||
const data1 = data.map(item => {
|
||||
if (item.id == id) {
|
||||
item.checked = checked;
|
||||
}
|
||||
|
|
@ -196,7 +196,7 @@ const SchemeOptimization = () => {
|
|||
<TableCell>{scheme.households}</TableCell>
|
||||
<TableCell>{scheme.population}</TableCell>
|
||||
<TableCell>
|
||||
<button className={classes.addButton} style={{ marginRight: 8 }}>加载方案</button>
|
||||
<button className={classes.addButton} style={{ marginRight: 8 }} onClick={loadFa}>加载方案</button>
|
||||
<button className={classes.addButton}>导出方案库</button>
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
|
|
|
|||
|
|
@ -37,6 +37,9 @@ import YascDlg from './YascDlg';
|
|||
import YbcgDlg from './YbcgDlg'
|
||||
import DdcgDlg from './DdcgDlg'
|
||||
import FadbDlg from './FadbDlg'
|
||||
import ShuikuyhDlg from './ShuikuyhDlg';
|
||||
import XunchaDlg from './XunchaDlg';
|
||||
import XcxqDlg from './XcxqDlg';
|
||||
|
||||
|
||||
function InfoDlg() {
|
||||
|
|
@ -122,8 +125,16 @@ function InfoDlg() {
|
|||
return <DdcgDlg record={properties} onClose={handleClose} />
|
||||
} else if (layerId === 'FadbLayer') {
|
||||
return <FadbDlg record={properties} onClose={handleClose} />
|
||||
}
|
||||
|
||||
} else if (layerId === 'ShuikuyanghuLayer') {
|
||||
return <ShuikuyhDlg record={properties} onClose={handleClose} />
|
||||
}else if (layerId === 'XunchachaoshiLayer') {
|
||||
return <XunchaDlg record={properties} onClose={handleClose} />
|
||||
}else if (layerId === 'ChaoshiDetailLayer') {
|
||||
return <PdfDlg record={properties} onClose={handleClose} />
|
||||
}else if (layerId === 'XcxqLayer') {
|
||||
return <XcxqDlg record={properties} onClose={handleClose} />
|
||||
}
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -83,6 +83,7 @@ export const iconstyles = {
|
|||
土壤墒情: { backgroundPosition: '37.5% -40%',backgroundSize: '1895% 1650%' },
|
||||
水厂监测: { backgroundPosition: '0.5% -34%',backgroundSize: '1895% 1650%' },
|
||||
水源地: { backgroundPosition: '53.3% -106.7%',backgroundSize: '1597% 1550%' },
|
||||
巡查: { backgroundPosition: '26.8% -99.4%',backgroundSize: '1597% 1550%' },
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ import ShuichangLayer from "./shuichangLayer"
|
|||
import ShuiyuandiLayer from "./shuiyuandiLayer"
|
||||
import ShuikuLayer from "./shuikuLayer"
|
||||
import RainDrpLayer from "./rainDrpLayer"
|
||||
import XunchaLayer from "./xunchalayer"
|
||||
|
||||
|
||||
|
||||
|
|
@ -66,6 +67,7 @@ class LayerMgr {
|
|||
this.layers.push(new ShuiyuandiLayer());
|
||||
this.layers.push(new ShuikuLayer());
|
||||
this.layers.push(new RainDrpLayer());
|
||||
this.layers.push(new XunchaLayer());
|
||||
//
|
||||
|
||||
|
||||
|
|
@ -212,6 +214,7 @@ class LayerMgr {
|
|||
this.layerMap.ShuiyuandiLayer.getStyle(),
|
||||
this.layerMap.ShuikuLayer.getStyle(),
|
||||
this.layerMap.RainDrpLayer.getStyle(),
|
||||
this.layerMap.XunchaLayer.getStyle(),
|
||||
//
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import ShuichangLayer from "./shuichangLayer";
|
|||
import ShuiyuandiLayer from "./shuiyuandiLayer";
|
||||
import ShuikuLayer from "./shuikuLayer";
|
||||
import RainDrpLayer from "./rainDrpLayer"
|
||||
import XunchaLayer from "./xunchalayer"
|
||||
|
||||
|
||||
const hash = window.location.origin;
|
||||
|
|
@ -224,6 +225,10 @@ const sources = {
|
|||
[ShuikuLayer.SourceName]: {
|
||||
type: 'geojson',
|
||||
data: { type: 'FeatureCollection', features: [] },
|
||||
},
|
||||
[XunchaLayer.SourceName]: {
|
||||
type: 'geojson',
|
||||
data: { type: 'FeatureCollection', features: [] },
|
||||
},
|
||||
[RainDrpLayer.SourceName]: {
|
||||
type: 'geojson',
|
||||
|
|
|
|||
|
|
@ -0,0 +1,878 @@
|
|||
import clone from "clone";
|
||||
import { PicStPromise, TestPicStPromise } from "../../../../models/_/real";
|
||||
import { parseGeoJSON } from "../../../../utils/tools";
|
||||
import { InfoPopNames } from "../../InfoPops";
|
||||
import BaseLayer from "./baselayer";
|
||||
|
||||
const SourceName = '巡查';
|
||||
|
||||
const ShapeStyle = {
|
||||
id: SourceName,
|
||||
type: 'symbol',
|
||||
source: SourceName,
|
||||
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],
|
||||
|
||||
'visibility': 'none',
|
||||
},
|
||||
paint: {
|
||||
'text-color': '#fff'
|
||||
}
|
||||
};
|
||||
|
||||
const page1 = [
|
||||
{
|
||||
"stcd": "716113701",
|
||||
"type": "sk",
|
||||
"hasRz": true,
|
||||
"stnm": "永红水库",
|
||||
"adcd": "421181105000",
|
||||
"wscd": null,
|
||||
"importancy": 0,
|
||||
"lgtd": 115.120278,
|
||||
"lttd": 31.183611,
|
||||
"elev": 0,
|
||||
"damel": 131.99,
|
||||
"dsflz": 130.56,
|
||||
"fsltdz": 129.9,
|
||||
"ddz": 113.5,
|
||||
"zcxsw": 129.9,
|
||||
"drpTm": "2025-04-11T06:00:00.000Z",
|
||||
"today": 0,
|
||||
"h1": 0,
|
||||
"h3": 0,
|
||||
"h6": 0,
|
||||
"h12": 0,
|
||||
"h24": 0,
|
||||
"h48": 0,
|
||||
"drpState": 2,
|
||||
"rz": 130.15,
|
||||
"w": 0.444,
|
||||
"a_fsltdz": -10.75,
|
||||
"rzTm": "2025-04-11T06:00:00.000Z",
|
||||
"rzWarning": 0,
|
||||
"rzState": 2,
|
||||
"pic": [
|
||||
{
|
||||
"stcd": "716113701",
|
||||
"tm": "2023-11-16T11:19:00.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2023/1116/716113701/20231116191900.jpg"
|
||||
},
|
||||
{
|
||||
"stcd": "716113701",
|
||||
"tm": "2023-11-16T09:05:00.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2023/1116/716113702/20231116170500.jpg"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"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": 0,
|
||||
"h3": 0,
|
||||
"h6": 0,
|
||||
"h12": 0,
|
||||
"h24": 0,
|
||||
"h48": 16.5,
|
||||
"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": 0,
|
||||
"h3": 0,
|
||||
"h6": 0,
|
||||
"h12": 0,
|
||||
"h24": 0,
|
||||
"h48": 12.5,
|
||||
"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": "716112601",
|
||||
"type": "sk",
|
||||
"hasRz": true,
|
||||
"stnm": "永丰水库",
|
||||
"adcd": "421181003000",
|
||||
"wscd": null,
|
||||
"importancy": 0,
|
||||
"lgtd": 115.057222,
|
||||
"lttd": 31.110833,
|
||||
"elev": 0,
|
||||
"damel": 79.57,
|
||||
"dsflz": 77.82,
|
||||
"fsltdz": 76.96,
|
||||
"ddz": 64.96,
|
||||
"zcxsw": 76.96,
|
||||
"drpTm": "2025-04-11T06:00:00.000Z",
|
||||
"today": 0,
|
||||
"h1": 0,
|
||||
"h3": 0,
|
||||
"h6": 0,
|
||||
"h12": 0,
|
||||
"h24": 0,
|
||||
"h48": 0,
|
||||
"drpState": 2,
|
||||
"rz": 71.88,
|
||||
"w": 1.178,
|
||||
"a_fsltdz": -5.079999999999998,
|
||||
"rzTm": "2025-04-11T06:00:00.000Z",
|
||||
"rzWarning": 0,
|
||||
"rzState": 2,
|
||||
"pic": [
|
||||
{
|
||||
"stcd": "716112601",
|
||||
"tm": "2025-04-11T06:02:20.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2025/0411/716112601/20250411140220.jpg"
|
||||
},
|
||||
{
|
||||
"stcd": "716112601",
|
||||
"tm": "2025-04-11T06:04:01.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2025/0411/716112602/20250411140401.jpg"
|
||||
}
|
||||
],
|
||||
"aRz": -5.08
|
||||
},
|
||||
{
|
||||
"stcd": "716115401",
|
||||
"type": "sk",
|
||||
"hasRz": true,
|
||||
"stnm": "长冲水库",
|
||||
"adcd": "421181110000",
|
||||
"wscd": null,
|
||||
"importancy": 0,
|
||||
"lgtd": 115.061389,
|
||||
"lttd": 31.408611,
|
||||
"elev": 0,
|
||||
"damel": 21.6,
|
||||
"dsflz": 20.15,
|
||||
"fsltdz": 130.8,
|
||||
"ddz": 0,
|
||||
"zcxsw": 130.8,
|
||||
"drpTm": "2024-05-17T08:00:00.000Z",
|
||||
"today": 0,
|
||||
"h1": 0,
|
||||
"h3": 0,
|
||||
"h6": 0,
|
||||
"h12": 0,
|
||||
"h24": 0,
|
||||
"h48": 0,
|
||||
"drpState": 2,
|
||||
"rz": 126.41,
|
||||
"w": 0.374,
|
||||
"a_fsltdz": -4.390000000000015,
|
||||
"rzTm": "2024-05-17T06:00:00.000Z",
|
||||
"rzWarning": 0,
|
||||
"rzState": 2,
|
||||
"pic": [
|
||||
{
|
||||
"stcd": "716115401",
|
||||
"tm": "2024-05-17T08:05:00.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2024/0517/716115401/20240517160500.jpg"
|
||||
},
|
||||
{
|
||||
"stcd": "716115401",
|
||||
"tm": "2024-05-17T08:20:00.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2024/0517/716115402/20240517162000.jpg"
|
||||
}
|
||||
],
|
||||
"aRz": -4.39
|
||||
},
|
||||
{
|
||||
"stcd": "716115301",
|
||||
"type": "sk",
|
||||
"hasRz": true,
|
||||
"stnm": "葡萄冲水库",
|
||||
"adcd": "421181110000",
|
||||
"wscd": null,
|
||||
"importancy": 0,
|
||||
"lgtd": 115.051389,
|
||||
"lttd": 31.423333,
|
||||
"elev": 0,
|
||||
"damel": 15.8,
|
||||
"dsflz": 14.73,
|
||||
"fsltdz": 14.3,
|
||||
"ddz": 9.48,
|
||||
"zcxsw": 14.3,
|
||||
"drpTm": "2025-04-11T05:00:00.000Z",
|
||||
"today": 0,
|
||||
"h1": 0,
|
||||
"h3": 0,
|
||||
"h6": 0,
|
||||
"h12": 0,
|
||||
"h24": 0,
|
||||
"h48": 0,
|
||||
"drpState": 2,
|
||||
"rz": 213.75,
|
||||
"w": 0.04,
|
||||
"a_fsltdz": 199.45,
|
||||
"rzTm": "2025-04-11T05:00:00.000Z",
|
||||
"rzWarning": 1,
|
||||
"rzState": 2,
|
||||
"pic": [
|
||||
{
|
||||
"stcd": "716115301",
|
||||
"tm": "2023-03-12T08:02:00.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/716115301/20230312160200.jpg"
|
||||
},
|
||||
{
|
||||
"stcd": "716115301",
|
||||
"tm": "2023-03-12T07:11:00.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/716115302/20230312151100.jpg"
|
||||
}
|
||||
],
|
||||
"aRz": 199.45
|
||||
},
|
||||
{
|
||||
"stcd": "716115701",
|
||||
"type": "sk",
|
||||
"hasRz": true,
|
||||
"stnm": "二五冲水库",
|
||||
"adcd": "421181110000",
|
||||
"wscd": null,
|
||||
"importancy": 0,
|
||||
"lgtd": 115.087222,
|
||||
"lttd": 31.378333,
|
||||
"elev": 0,
|
||||
"damel": 11.2,
|
||||
"dsflz": 10.07,
|
||||
"fsltdz": 108.55,
|
||||
"ddz": 1.5,
|
||||
"zcxsw": 108.55,
|
||||
"drpTm": "2025-03-22T08:00:00.000Z",
|
||||
"today": 0,
|
||||
"h1": 0,
|
||||
"h3": 0,
|
||||
"h6": 0,
|
||||
"h12": 0,
|
||||
"h24": 0,
|
||||
"h48": 0,
|
||||
"drpState": 2,
|
||||
"rz": 99.65,
|
||||
"w": 0.038,
|
||||
"a_fsltdz": -8.899999999999991,
|
||||
"rzTm": "2025-03-22T08:00:00.000Z",
|
||||
"rzWarning": 0,
|
||||
"rzState": 2,
|
||||
"pic": [
|
||||
{
|
||||
"stcd": "716115701",
|
||||
"tm": "2025-03-06T23:01:00.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2025/0307/716115701/20250307070100.jpg"
|
||||
},
|
||||
{
|
||||
"stcd": "716115701",
|
||||
"tm": "2024-10-18T06:28:00.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2024/1018/716115702/20241018142800.jpg"
|
||||
}
|
||||
],
|
||||
"aRz": -8.9
|
||||
},
|
||||
{
|
||||
"stcd": "716115501",
|
||||
"type": "sk",
|
||||
"hasRz": true,
|
||||
"stnm": "石鼓庙水库",
|
||||
"adcd": "421181110000",
|
||||
"wscd": null,
|
||||
"importancy": 0,
|
||||
"lgtd": 114.049444,
|
||||
"lttd": 31.392222,
|
||||
"elev": 0,
|
||||
"damel": 106.15,
|
||||
"dsflz": 104.92,
|
||||
"fsltdz": 102.45,
|
||||
"ddz": 6.7,
|
||||
"zcxsw": 102.45,
|
||||
"drpTm": "2024-11-17T04:00:00.000Z",
|
||||
"today": 0,
|
||||
"h1": 0,
|
||||
"h3": 0,
|
||||
"h6": 0,
|
||||
"h12": 0,
|
||||
"h24": 0,
|
||||
"h48": 0,
|
||||
"drpState": 2,
|
||||
"rz": 95.86,
|
||||
"w": 0.073,
|
||||
"a_fsltdz": -6.590000000000003,
|
||||
"rzTm": "2024-08-21T01:00:00.000Z",
|
||||
"rzWarning": 0,
|
||||
"rzState": 2,
|
||||
"pic": [
|
||||
{
|
||||
"stcd": "716115501",
|
||||
"tm": "2023-03-12T07:04:32.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/716115501/20230312150432.jpg"
|
||||
},
|
||||
{
|
||||
"stcd": "716115501",
|
||||
"tm": "2023-03-12T07:08:39.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/716115502/20230312150839.jpg"
|
||||
}
|
||||
],
|
||||
"aRz": -6.59
|
||||
},
|
||||
{
|
||||
"stcd": "716115601",
|
||||
"type": "sk",
|
||||
"hasRz": true,
|
||||
"stnm": "滚冲水库",
|
||||
"adcd": "421181110000",
|
||||
"wscd": null,
|
||||
"importancy": 0,
|
||||
"lgtd": 115.027778,
|
||||
"lttd": 31.386944,
|
||||
"elev": 0,
|
||||
"damel": 129.72,
|
||||
"dsflz": 129.17,
|
||||
"fsltdz": 128.3,
|
||||
"ddz": 123,
|
||||
"zcxsw": 128.3,
|
||||
"drpTm": "2025-04-11T04:00:00.000Z",
|
||||
"today": 0,
|
||||
"h1": 0,
|
||||
"h3": 0,
|
||||
"h6": 0,
|
||||
"h12": 0,
|
||||
"h24": 0,
|
||||
"h48": 0,
|
||||
"drpState": 2,
|
||||
"rz": 123.03,
|
||||
"w": 0.02,
|
||||
"a_fsltdz": -5.27000000000001,
|
||||
"rzTm": "2025-04-11T04:00:00.000Z",
|
||||
"rzWarning": 0,
|
||||
"rzState": 2,
|
||||
"pic": [
|
||||
{
|
||||
"stcd": "716115601",
|
||||
"tm": "2023-03-12T07:03:00.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/716115601/20230312150300.jpg"
|
||||
},
|
||||
{
|
||||
"stcd": "716115601",
|
||||
"tm": "2023-03-12T07:11:00.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/716115602/20230312151100.jpg"
|
||||
}
|
||||
],
|
||||
"aRz": -5.27
|
||||
},
|
||||
{
|
||||
"stcd": "716108601",
|
||||
"type": "sk",
|
||||
"hasRz": true,
|
||||
"stnm": "吴家垸水库",
|
||||
"adcd": "421181110000",
|
||||
"wscd": null,
|
||||
"importancy": 0,
|
||||
"lgtd": 115.029167,
|
||||
"lttd": 31.427222,
|
||||
"elev": 0,
|
||||
"damel": 15.7,
|
||||
"dsflz": 13.85,
|
||||
"fsltdz": 173.9,
|
||||
"ddz": 4.6,
|
||||
"zcxsw": 173.9,
|
||||
"drpTm": "2025-04-11T05:00:00.000Z",
|
||||
"today": 0,
|
||||
"h1": 0,
|
||||
"h3": 0,
|
||||
"h6": 0,
|
||||
"h12": 0,
|
||||
"h24": 0,
|
||||
"h48": 0,
|
||||
"drpState": 2,
|
||||
"rz": 169.14,
|
||||
"w": 0.11,
|
||||
"a_fsltdz": -4.760000000000019,
|
||||
"rzTm": "2025-04-11T05:00:00.000Z",
|
||||
"rzWarning": 0,
|
||||
"rzState": 2,
|
||||
"pic": [
|
||||
{
|
||||
"stcd": "716108601",
|
||||
"tm": "2023-03-12T08:01:41.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/716108601/20230312160141.jpg"
|
||||
},
|
||||
{
|
||||
"stcd": "716108601",
|
||||
"tm": "2023-03-12T07:04:17.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/716108602/20230312150417.jpg"
|
||||
}
|
||||
],
|
||||
"aRz": -4.76
|
||||
},
|
||||
{
|
||||
"stcd": "716113401",
|
||||
"type": "sk",
|
||||
"hasRz": true,
|
||||
"stnm": "鲇鱼坝水库",
|
||||
"adcd": "421181102000",
|
||||
"wscd": null,
|
||||
"importancy": 0,
|
||||
"lgtd": 114.731667,
|
||||
"lttd": 31.019444,
|
||||
"elev": 0,
|
||||
"damel": 55.73,
|
||||
"dsflz": 52.9,
|
||||
"fsltdz": 50.63,
|
||||
"ddz": 42.83,
|
||||
"zcxsw": 50.63,
|
||||
"drpTm": "2025-04-11T05:00:00.000Z",
|
||||
"today": 0,
|
||||
"h1": 0,
|
||||
"h3": 0,
|
||||
"h6": 0,
|
||||
"h12": 0,
|
||||
"h24": 0,
|
||||
"h48": 0,
|
||||
"drpState": 2,
|
||||
"rz": 48.05,
|
||||
"w": 2.584,
|
||||
"a_fsltdz": -2.5800000000000054,
|
||||
"rzTm": "2025-04-11T05:00:00.000Z",
|
||||
"rzWarning": 0,
|
||||
"rzState": 2,
|
||||
"pic": [
|
||||
{
|
||||
"stcd": "716113401",
|
||||
"tm": "2023-03-12T07:07:01.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/716113401/20230312150701.jpg"
|
||||
},
|
||||
{
|
||||
"stcd": "716113401",
|
||||
"tm": "2023-03-12T07:15:09.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/716113402/20230312151509.jpg"
|
||||
}
|
||||
],
|
||||
"aRz": -2.58
|
||||
},
|
||||
{
|
||||
"stcd": "716126501",
|
||||
"type": "sk",
|
||||
"hasRz": true,
|
||||
"stnm": "破堰水库",
|
||||
"adcd": "421181102000",
|
||||
"wscd": null,
|
||||
"importancy": 0,
|
||||
"lgtd": 114.696111,
|
||||
"lttd": 31.025556,
|
||||
"elev": 0,
|
||||
"damel": 18.48,
|
||||
"dsflz": 15.23,
|
||||
"fsltdz": 74.2,
|
||||
"ddz": 6.3,
|
||||
"zcxsw": 74.2,
|
||||
"drpTm": "2025-04-11T05:00:00.000Z",
|
||||
"today": 0,
|
||||
"h1": 0,
|
||||
"h3": 0,
|
||||
"h6": 0,
|
||||
"h12": 0,
|
||||
"h24": 0,
|
||||
"h48": 0,
|
||||
"drpState": 2,
|
||||
"rz": 64.47,
|
||||
"w": 0.265,
|
||||
"a_fsltdz": -9.730000000000004,
|
||||
"rzTm": "2025-04-11T05:00:00.000Z",
|
||||
"rzWarning": 0,
|
||||
"rzState": 2,
|
||||
"pic": [
|
||||
{
|
||||
"stcd": "716126501",
|
||||
"tm": "2023-03-12T07:04:21.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/716126501/20230312150421.jpg"
|
||||
},
|
||||
{
|
||||
"stcd": "716126501",
|
||||
"tm": "2023-03-12T07:10:00.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/716126502/20230312151000.jpg"
|
||||
}
|
||||
],
|
||||
"aRz": -9.73
|
||||
},
|
||||
{
|
||||
"stcd": "716107371",
|
||||
"type": "sk",
|
||||
"hasRz": true,
|
||||
"stnm": "群英水库",
|
||||
"adcd": "421181102000",
|
||||
"wscd": null,
|
||||
"importancy": 0,
|
||||
"lgtd": 114.726944,
|
||||
"lttd": 31.054444,
|
||||
"elev": 0,
|
||||
"damel": 7.4,
|
||||
"dsflz": 6.02,
|
||||
"fsltdz": 65.6,
|
||||
"ddz": 4.1,
|
||||
"zcxsw": 65.6,
|
||||
"drpTm": "2025-04-11T05:00:00.000Z",
|
||||
"today": 0,
|
||||
"h1": 0,
|
||||
"h3": 0,
|
||||
"h6": 0,
|
||||
"h12": 0,
|
||||
"h24": 0,
|
||||
"h48": 0,
|
||||
"drpState": 2,
|
||||
"rz": 68.66,
|
||||
"w": 0,
|
||||
"a_fsltdz": 3.0600000000000023,
|
||||
"rzTm": "2025-04-11T05:00:00.000Z",
|
||||
"rzWarning": 1,
|
||||
"rzState": 2,
|
||||
"pic": [
|
||||
{
|
||||
"stcd": "716107371",
|
||||
"tm": "2023-03-12T07:23:00.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/716107371/20230312152300.jpg"
|
||||
},
|
||||
{
|
||||
"stcd": "716107371",
|
||||
"tm": "2023-03-12T07:16:00.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/716107372/20230312151600.jpg"
|
||||
}
|
||||
],
|
||||
"aRz": 3.06
|
||||
},
|
||||
{
|
||||
"stcd": "716126301",
|
||||
"type": "sk",
|
||||
"hasRz": true,
|
||||
"stnm": "淮海水库",
|
||||
"adcd": "421181102000",
|
||||
"wscd": null,
|
||||
"importancy": 0,
|
||||
"lgtd": 114.694722,
|
||||
"lttd": 31.053333,
|
||||
"elev": 0,
|
||||
"damel": 11.2,
|
||||
"dsflz": 9.97,
|
||||
"fsltdz": 9.6,
|
||||
"ddz": 6.3,
|
||||
"zcxsw": 9.6,
|
||||
"drpTm": "2025-04-11T05:00:00.000Z",
|
||||
"today": 0,
|
||||
"h1": 0,
|
||||
"h3": 0,
|
||||
"h6": 0,
|
||||
"h12": 0,
|
||||
"h24": 0,
|
||||
"h48": 0,
|
||||
"drpState": 2,
|
||||
"rz": 64.96,
|
||||
"w": 0.129,
|
||||
"a_fsltdz": 55.35999999999999,
|
||||
"rzTm": "2025-04-11T05:00:00.000Z",
|
||||
"rzWarning": 1,
|
||||
"rzState": 2,
|
||||
"pic": [
|
||||
{
|
||||
"stcd": "716126301",
|
||||
"tm": "2023-03-12T07:04:00.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/716126301/20230312150400.jpg"
|
||||
},
|
||||
{
|
||||
"stcd": "716126301",
|
||||
"tm": "2023-03-12T07:10:00.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/716126302/20230312151000.jpg"
|
||||
}
|
||||
],
|
||||
"aRz": 55.36
|
||||
},
|
||||
{
|
||||
"stcd": "716108501",
|
||||
"type": "sk",
|
||||
"hasRz": true,
|
||||
"stnm": "东风水库",
|
||||
"adcd": "421181102000",
|
||||
"wscd": null,
|
||||
"importancy": 0,
|
||||
"lgtd": 115.232222,
|
||||
"lttd": 30.970556,
|
||||
"elev": 0,
|
||||
"damel": 81.7,
|
||||
"dsflz": 80.22,
|
||||
"fsltdz": 79,
|
||||
"ddz": 76.2,
|
||||
"zcxsw": 79,
|
||||
"drpTm": "2025-03-22T08:00:00.000Z",
|
||||
"today": 0,
|
||||
"h1": 0,
|
||||
"h3": 0,
|
||||
"h6": 0,
|
||||
"h12": 0,
|
||||
"h24": 0,
|
||||
"h48": 0,
|
||||
"drpState": 2,
|
||||
"rz": 78.22,
|
||||
"w": 0.203,
|
||||
"a_fsltdz": -0.7800000000000011,
|
||||
"rzTm": "2025-03-22T08:00:00.000Z",
|
||||
"rzWarning": 0,
|
||||
"rzState": 2,
|
||||
"pic": [
|
||||
{
|
||||
"stcd": "716108501",
|
||||
"tm": "2024-09-08T02:44:00.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2024/0908/716108501/20240908104400.jpg"
|
||||
},
|
||||
{
|
||||
"stcd": "716108501",
|
||||
"tm": "2024-08-26T09:20:00.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2024/0826/716108502/20240826172000.jpg"
|
||||
}
|
||||
],
|
||||
"aRz": -0.78
|
||||
},
|
||||
{
|
||||
"stcd": "716126601",
|
||||
"type": "sk",
|
||||
"hasRz": true,
|
||||
"stnm": "毛屋湾水库",
|
||||
"adcd": "421181102000",
|
||||
"wscd": null,
|
||||
"importancy": 0,
|
||||
"lgtd": 114.693889,
|
||||
"lttd": 31.019722,
|
||||
"elev": 0,
|
||||
"damel": 10,
|
||||
"dsflz": 9.8,
|
||||
"fsltdz": 66.57,
|
||||
"ddz": 5,
|
||||
"zcxsw": 66.57,
|
||||
"drpTm": "2024-12-30T06:00:00.000Z",
|
||||
"today": 0,
|
||||
"h1": 0,
|
||||
"h3": 0,
|
||||
"h6": 0,
|
||||
"h12": 0,
|
||||
"h24": 0,
|
||||
"h48": 0,
|
||||
"drpState": 2,
|
||||
"rz": 65.41,
|
||||
"w": 0.039,
|
||||
"a_fsltdz": -1.1599999999999966,
|
||||
"rzTm": "2024-05-15T06:00:00.000Z",
|
||||
"rzWarning": 0,
|
||||
"rzState": 2,
|
||||
"pic": [
|
||||
{
|
||||
"stcd": "716126601",
|
||||
"tm": "2024-03-11T02:02:00.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2024/0311/716126601/20240311100200.jpg"
|
||||
},
|
||||
{
|
||||
"stcd": "716126601",
|
||||
"tm": "2024-05-15T06:07:00.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2024/0515/716126602/20240515140700.jpg"
|
||||
}
|
||||
],
|
||||
"aRz": -1.16
|
||||
},
|
||||
{
|
||||
"stcd": "7CS000081",
|
||||
"type": "sk",
|
||||
"hasRz": true,
|
||||
"stnm": "陡山洪水库",
|
||||
"adcd": "421181102000",
|
||||
"wscd": null,
|
||||
"importancy": 0,
|
||||
"lgtd": 114.724722,
|
||||
"lttd": 31.007222,
|
||||
"elev": 0,
|
||||
"damel": 56.7,
|
||||
"dsflz": 55.6,
|
||||
"fsltdz": 5.8,
|
||||
"ddz": 49.71,
|
||||
"zcxsw": 5.8,
|
||||
"drpTm": "2025-04-11T05:00:00.000Z",
|
||||
"today": 0,
|
||||
"h1": 0,
|
||||
"h3": 0,
|
||||
"h6": 0,
|
||||
"h12": 0,
|
||||
"h24": 0,
|
||||
"h48": 0,
|
||||
"drpState": 2,
|
||||
"rz": 51.26,
|
||||
"w": 0.034,
|
||||
"a_fsltdz": 45.46,
|
||||
"rzTm": "2025-04-11T05:00:00.000Z",
|
||||
"rzWarning": 1,
|
||||
"rzState": 2,
|
||||
"pic": [
|
||||
{
|
||||
"stcd": "7CS000081",
|
||||
"tm": "2023-03-12T08:01:48.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/7CS000081/20230312160148.jpg"
|
||||
},
|
||||
{
|
||||
"stcd": "7CS000081",
|
||||
"tm": "2023-03-12T07:05:33.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/7CS000082/20230312150533.jpg"
|
||||
}
|
||||
],
|
||||
"aRz": 45.46
|
||||
},
|
||||
{
|
||||
"stcd": "716107391",
|
||||
"type": "sk",
|
||||
"hasRz": true,
|
||||
"stnm": "高岗水库",
|
||||
"adcd": "421181102000",
|
||||
"wscd": null,
|
||||
"importancy": 0,
|
||||
"lgtd": 114.731389,
|
||||
"lttd": 31.042222,
|
||||
"elev": 0,
|
||||
"damel": 41.7,
|
||||
"dsflz": 41.6,
|
||||
"fsltdz": 40,
|
||||
"ddz": 35.56,
|
||||
"zcxsw": 40,
|
||||
"drpTm": "2025-04-11T05:00:00.000Z",
|
||||
"today": 0,
|
||||
"h1": 0,
|
||||
"h3": 0,
|
||||
"h6": 0,
|
||||
"h12": 0,
|
||||
"h24": 0,
|
||||
"h48": 0,
|
||||
"drpState": 2,
|
||||
"rz": 51.42,
|
||||
"w": 0.044,
|
||||
"a_fsltdz": 11.420000000000002,
|
||||
"rzTm": "2025-04-11T05:00:00.000Z",
|
||||
"rzWarning": 1,
|
||||
"rzState": 2,
|
||||
"pic": [
|
||||
{
|
||||
"stcd": "716107391",
|
||||
"tm": "2023-03-12T07:03:00.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/716107391/20230312150300.jpg"
|
||||
},
|
||||
{
|
||||
"stcd": "716107391",
|
||||
"tm": "2023-03-12T07:10:00.000Z",
|
||||
"url": "http://223.75.53.106:8891/skjgimages/2023/0312/716107392/20230312151000.jpg"
|
||||
}
|
||||
],
|
||||
"aRz": 11.42
|
||||
},
|
||||
]
|
||||
|
||||
export default class XunchaLayer extends BaseLayer {
|
||||
|
||||
static LayerName = 'XunchaLayer';
|
||||
|
||||
static SourceName = SourceName;
|
||||
|
||||
getStyle() {
|
||||
|
||||
const ret = clone(ShapeStyle);
|
||||
this._setStyleVisibility(ret);
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
||||
getName() {
|
||||
return XunchaLayer.LayerName;
|
||||
}
|
||||
|
||||
getSubLayers() {
|
||||
return [ShapeStyle.id];
|
||||
}
|
||||
|
||||
async doRefreshLayer(mapCtrl) {
|
||||
const ms = mapCtrl.getSource(SourceName);
|
||||
|
||||
let data =
|
||||
// await PicStPromise.get();
|
||||
[...page1].map((item)=>{
|
||||
const obj = {...item}
|
||||
obj.lgtd = item.lgtd + 0.0019
|
||||
obj.lttd = item.lttd
|
||||
return obj
|
||||
})
|
||||
ms.setData(parseGeoJSON(data));
|
||||
return true;
|
||||
}
|
||||
|
||||
getFeatureTip(record) {
|
||||
return '';
|
||||
}
|
||||
|
||||
featureClicked(properties, dispatch) {
|
||||
dispatch?.runtime.setInfoDlg({ layerId: 'XcxqLayer', properties: {} })
|
||||
}
|
||||
}
|
||||
|
|
@ -118,6 +118,9 @@ import Skyb from './panels/Skyb'
|
|||
import ShuikuYa from './panels/Yuanyfa'
|
||||
import Diaodujg from './panels/Diaodujg'
|
||||
import Duibifx from './panels/Duibifx'
|
||||
import Xczl from './panels/Xczl'
|
||||
import Xckb from './panels/Xcwtkb'
|
||||
import Shuikugh from './panels/Shuikugh'
|
||||
export default function PanelIndex({ name, style, ...params }) {
|
||||
if (name === '天气') {
|
||||
return (
|
||||
|
|
@ -346,6 +349,12 @@ export default function PanelIndex({ name, style, ...params }) {
|
|||
return <Ddcg style={style} />
|
||||
} else if (name === '方案对比') {
|
||||
return <Fadb style={style} />
|
||||
}else if (name === '巡查任务总览') {
|
||||
return <Xczl />
|
||||
}else if (name === '巡查问题看板') {
|
||||
return <Xckb />
|
||||
}else if (name === '水库管护') {
|
||||
return <Shuikugh />
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ const VIEWS = [
|
|||
{ id: 203, title: '安全监测', img: '/assets/menu/安全监测.png' },
|
||||
{ id: 204, title: '视频监视', img: '/assets/menu/视频监视.png' },
|
||||
{ id: 205, title: '防汛调度', img: '/assets/menu/防汛调度.png' },
|
||||
{ id: 206, title: '水库管理', img: '/assets/menu/水库管理.png' },
|
||||
{ id: 206, title: '巡查维养', img: '/assets/menu/水库管理.png' },
|
||||
] },
|
||||
{
|
||||
id: 300, title: '水厂', img: '/assets/menu/水利设施.png', children: [
|
||||
|
|
|
|||
|
|
@ -0,0 +1,183 @@
|
|||
import React, { useState, useRef } from 'react';
|
||||
import {
|
||||
IconButton,
|
||||
Slider,
|
||||
Box,
|
||||
} from '@material-ui/core';
|
||||
import { makeStyles } from '@material-ui/core/styles';
|
||||
import clsx from "clsx"
|
||||
import PlayArrowIcon from '@material-ui/icons/PlayArrow';
|
||||
import PauseIcon from '@material-ui/icons/Pause';
|
||||
|
||||
const useStyles = makeStyles((theme) => ({
|
||||
root: {
|
||||
position: 'relative',
|
||||
width: '100%',
|
||||
height: '100%',
|
||||
backgroundColor: '#000',
|
||||
},
|
||||
videoContainer: {
|
||||
width: '100%',
|
||||
height: '100%',
|
||||
'& video': {
|
||||
width: '100%',
|
||||
height: '100%',
|
||||
objectFit: 'cover',
|
||||
},
|
||||
},
|
||||
controls: {
|
||||
position: 'absolute',
|
||||
bottom: 0,
|
||||
left: 0,
|
||||
right: 0,
|
||||
padding: theme.spacing(1, 2),
|
||||
background: 'linear-gradient(to top, rgba(0,0,0,0.7) 0%, rgba(0,0,0,0) 100%)',
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
gap: theme.spacing(2),
|
||||
},
|
||||
controls1: {
|
||||
position: 'absolute',
|
||||
top: '85%',
|
||||
left: '50%',
|
||||
transform: 'translate(-50%, -50%)',
|
||||
padding: theme.spacing(2),
|
||||
background: 'rgba(0,0,0,0.7)',
|
||||
borderRadius: theme.spacing(1),
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
gap: theme.spacing(2),
|
||||
width: '800px',
|
||||
maxWidth: '90%',
|
||||
pointerEvents: 'none',
|
||||
|
||||
},
|
||||
playButton: {
|
||||
color: '#fff',
|
||||
pointerEvents: 'auto',
|
||||
'&:hover': {
|
||||
backgroundColor: 'rgba(255,255,255,0.1)',
|
||||
},
|
||||
},
|
||||
slider: {
|
||||
color: '#1976d2',
|
||||
pointerEvents: 'auto',
|
||||
flex: 1,
|
||||
'& .MuiSlider-rail': {
|
||||
backgroundColor: 'rgba(255,255,255,0.3)',
|
||||
},
|
||||
'& .MuiSlider-track': {
|
||||
backgroundColor: '#1976d2',
|
||||
},
|
||||
'& .MuiSlider-thumb': {
|
||||
width: 12,
|
||||
height: 12,
|
||||
backgroundColor: '#fff',
|
||||
'&:hover, &.Mui-focusVisible': {
|
||||
boxShadow: '0 0 0 8px rgba(25,118,210,0.16)',
|
||||
},
|
||||
},
|
||||
},
|
||||
timeDisplay: {
|
||||
color: '#fff',
|
||||
fontSize: '0.875rem',
|
||||
minWidth: 100,
|
||||
textAlign: 'right',
|
||||
pointerEvents: 'auto',
|
||||
},
|
||||
dateDisplay: {
|
||||
position: 'absolute',
|
||||
top: theme.spacing(2),
|
||||
left: theme.spacing(2),
|
||||
color: '#fff',
|
||||
fontSize: '1.25rem',
|
||||
fontWeight: 500,
|
||||
textShadow: '1px 1px 2px rgba(0,0,0,0.5)',
|
||||
},
|
||||
odd: {
|
||||
zIndex: 1,
|
||||
position: 'absolute'
|
||||
}
|
||||
}));
|
||||
|
||||
const VideoPlayer = ({ videoUrl, date,odd=false }) => {
|
||||
const classes = useStyles();
|
||||
const [playing, setPlaying] = useState(false);
|
||||
const [progress, setProgress] = useState(0);
|
||||
const [currentTime, setCurrentTime] = useState(0);
|
||||
const [duration, setDuration] = useState(0);
|
||||
const videoRef = useRef(null);
|
||||
|
||||
const handlePlayPause = () => {
|
||||
if (playing) {
|
||||
videoRef.current.pause();
|
||||
} else {
|
||||
videoRef.current.play();
|
||||
}
|
||||
setPlaying(!playing);
|
||||
};
|
||||
|
||||
const handleTimeUpdate = () => {
|
||||
const video = videoRef.current;
|
||||
if (video) {
|
||||
const progress = (video.currentTime / video.duration) * 100;
|
||||
setProgress(progress);
|
||||
setCurrentTime(video.currentTime);
|
||||
}
|
||||
};
|
||||
|
||||
const handleLoadedMetadata = () => {
|
||||
setDuration(videoRef.current.duration);
|
||||
};
|
||||
|
||||
const handleSliderChange = (event, newValue) => {
|
||||
const time = (newValue / 100) * duration;
|
||||
videoRef.current.currentTime = time;
|
||||
setProgress(newValue);
|
||||
};
|
||||
|
||||
const formatTime = (time) => {
|
||||
const minutes = Math.floor(time / 60);
|
||||
const seconds = Math.floor(time % 60);
|
||||
return `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
|
||||
};
|
||||
|
||||
return (
|
||||
<div className={clsx({[classes.root]:true,[classes.odd]:odd})}>
|
||||
<div className={classes.videoContainer}>
|
||||
<video
|
||||
ref={videoRef}
|
||||
onTimeUpdate={handleTimeUpdate}
|
||||
onLoadedMetadata={handleLoadedMetadata}
|
||||
>
|
||||
<source src={videoUrl} type="video/mp4" />
|
||||
</video>
|
||||
</div>
|
||||
|
||||
<div className={classes.dateDisplay}>
|
||||
{date}
|
||||
</div>
|
||||
|
||||
<div className={clsx({[classes.controls]:odd,[classes.controls1]:odd})}>
|
||||
<IconButton
|
||||
className={classes.playButton}
|
||||
onClick={handlePlayPause}
|
||||
>
|
||||
{playing ? <PauseIcon /> : <PlayArrowIcon />}
|
||||
</IconButton>
|
||||
|
||||
<Slider
|
||||
className={classes.slider}
|
||||
value={progress}
|
||||
onChange={handleSliderChange}
|
||||
/>
|
||||
|
||||
<Box className={classes.timeDisplay}>
|
||||
{formatTime(currentTime)} / {formatTime(duration)}
|
||||
</Box>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default VideoPlayer;
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
import React,{useEffect} from 'react';
|
||||
import { useSelector,useDispatch } from 'react-redux';
|
||||
import React, { useEffect } from 'react';
|
||||
import { useSelector, useDispatch } from 'react-redux';
|
||||
import { TransitionGroup, CSSTransition } from 'react-transition-group';
|
||||
import './index.less';
|
||||
import ActionDock from './components/ActionDock';
|
||||
|
|
@ -10,6 +10,7 @@ import MapCtrl from './MapCtrl';
|
|||
import InfoDlg from './InfoDlg';
|
||||
import clsx from 'clsx';
|
||||
import Calculating from './components/Calculating';
|
||||
import VideoPlayer from './components/VideoCom/index';
|
||||
//import SocketCtrl from './components/SocketCtrl';
|
||||
|
||||
|
||||
|
|
@ -21,10 +22,10 @@ export default function Demo1() {
|
|||
const yyRes = useSelector(s => s.runtime.yyObj);
|
||||
const isSc = useSelector(s => s.runtime.scya);
|
||||
const wg = useSelector(s => s.runtime.shkshObj)
|
||||
console.log('wg',wg);
|
||||
|
||||
console.log('wg', wg);
|
||||
|
||||
|
||||
|
||||
|
||||
return (
|
||||
<div className="demo1">
|
||||
<div style={{ position: 'absolute', left: 0, bottom: 0, right: 0, top: 0, zIndex: 0 }}>
|
||||
|
|
@ -33,10 +34,15 @@ export default function Demo1() {
|
|||
|
||||
{
|
||||
yyRes.yy &&
|
||||
<>
|
||||
<img src={`${process.env.PUBLIC_URL}/assets/yytc.png`} alt="" style={{ zIndex: 0.1, position: 'absolute' }} />
|
||||
<img src={`${process.env.PUBLIC_URL}/assets/yy.png`} alt="" style={{ zIndex: 0.2, position: 'absolute', bottom: 150, left: '32%', width: 700 }} />
|
||||
</>
|
||||
<VideoPlayer
|
||||
videoUrl={`${process.env.PUBLIC_URL}/assets/gaoguan.mp4`}
|
||||
date=""
|
||||
odd={true}
|
||||
/>
|
||||
// <>
|
||||
// <img src={`${process.env.PUBLIC_URL}/assets/yytc.png`} alt="" style={{ zIndex: 0.1, position: 'absolute' }} />
|
||||
// <img src={`${process.env.PUBLIC_URL}/assets/yy.png`} alt="" style={{ zIndex: 0.2, position: 'absolute', bottom: 150, left: '32%', width: 700 }} />
|
||||
// </>
|
||||
}
|
||||
|
||||
{
|
||||
|
|
@ -75,8 +81,8 @@ export default function Demo1() {
|
|||
<PanelIndex name={key} {...params} />
|
||||
</CSSTransition>
|
||||
)
|
||||
} else if(wg) {
|
||||
return (
|
||||
} else if (wg) {
|
||||
return (
|
||||
<CSSTransition key={key} unmountOnExit exit={false} timeout={500} classNames="dp-panelgroup">
|
||||
<PanelIndex name={key} {...params} />
|
||||
</CSSTransition>
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ function DrpReal({ style }) {
|
|||
return (
|
||||
<PanelBox
|
||||
style={style}
|
||||
title="对比分析"
|
||||
title="方案对比"
|
||||
color="green"
|
||||
>
|
||||
<img src='/assets/duibifenxi.png' style={{width:'429.81px', height:'254px',marginLeft:'1px'}}/>
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ function HDReal({ style }) {
|
|||
const toggleAutoRefresh = () => {
|
||||
dispatch.realview.setHdAutoRefresh(!hdAutoRefresh);
|
||||
}
|
||||
|
||||
const [renderChart, setRenderChart] = useState(false)
|
||||
|
||||
|
||||
return (
|
||||
|
|
@ -136,15 +136,18 @@ function HDReal({ style }) {
|
|||
<div className='skyb-box' >
|
||||
<div className='rain-yb'>
|
||||
<div className='title-yb'>水库洪水演进</div>
|
||||
<TableYj onChange={() => {}}/>
|
||||
<TableYj onChange={() => setRenderChart(true)}/>
|
||||
</div>
|
||||
<div className='rain-yb'>
|
||||
<div className='title-yb'>下游淹没影响</div>
|
||||
<img src={`${process.env.PUBLIC_URL}/assets/cgfx.png`} alt="" style={{ width: 420}} />
|
||||
</div>
|
||||
<div style={{position:'absolute',top:80,right:450}}>
|
||||
{
|
||||
renderChart &&<div style={{position:'absolute',top:80,right:450}}>
|
||||
<img src={`${process.env.PUBLIC_URL}/assets/dcjg.jpg`} alt="" style={{ width: 370}} />
|
||||
</div>
|
||||
}
|
||||
|
||||
</div>
|
||||
</> :
|
||||
<Empty description={<span style={{color:"#fff"}}>暂无数据</span>}/>
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import {
|
|||
} from '@material-ui/core';
|
||||
import AddIcon from '@material-ui/icons/Add';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import DpTableCell from '../../../../layouts/mui/DpTableCell';
|
||||
|
||||
import RemoveIcon from '@material-ui/icons/Remove';
|
||||
import config from '../../../../config';
|
||||
|
|
@ -214,14 +215,14 @@ export default function Overall({ style }) {
|
|||
|
||||
</div>
|
||||
|
||||
<TableContainer>
|
||||
<Table className={classes.table}>
|
||||
<TableHead>
|
||||
<TableContainer >
|
||||
<Table stickyHeader>
|
||||
<TableHead >
|
||||
<TableRow>
|
||||
<TableCell style={{ width: '50%' }}>站名</TableCell>
|
||||
<TableCell style={{ width: '20%' }}>累计雨量(mm)</TableCell>
|
||||
<TableCell style={{ width: '15%' }}>所属政区</TableCell>
|
||||
<TableCell style={{ width: '15%' }}>所属流域</TableCell>
|
||||
<DpTableCell style={{ width: '50%' }}>站名</DpTableCell>
|
||||
<DpTableCell style={{ width: '20%' }}>累计雨量(mm)</DpTableCell>
|
||||
<DpTableCell style={{ width: '15%' }}>所属政区</DpTableCell>
|
||||
<DpTableCell style={{ width: '15%' }}>所属流域</DpTableCell>
|
||||
</TableRow>
|
||||
</TableHead>
|
||||
<TableBody>
|
||||
|
|
@ -231,7 +232,7 @@ export default function Overall({ style }) {
|
|||
// className={classes.stationRow}
|
||||
className={`${classes.warningRow} ${station.color}`}
|
||||
>
|
||||
<TableCell>
|
||||
<DpTableCell>
|
||||
<Box display="flex" alignItems="center">
|
||||
<IconButton
|
||||
size="small"
|
||||
|
|
@ -242,29 +243,29 @@ export default function Overall({ style }) {
|
|||
</IconButton>
|
||||
{station.name}({station.count})
|
||||
</Box>
|
||||
</TableCell>
|
||||
<TableCell></TableCell>
|
||||
<TableCell></TableCell>
|
||||
<TableCell></TableCell>
|
||||
</DpTableCell>
|
||||
<DpTableCell></DpTableCell>
|
||||
<DpTableCell></DpTableCell>
|
||||
<DpTableCell></DpTableCell>
|
||||
</TableRow>
|
||||
<TableRow>
|
||||
<TableCell colSpan={4} style={{ padding: 0 }}>
|
||||
<DpTableCell colSpan={4} style={{ padding: 0 }}>
|
||||
<Collapse in={expanded[station.id]} timeout="auto" unmountOnExit>
|
||||
<Box className={`${classes.expandedRow} ${station.color}`}>
|
||||
{/* 展开的详细内容可以在这里添加 */}{
|
||||
station.id == 'heavy' && drpData.map(item => (
|
||||
<TableRow onClick={() =>flyTo(item)}>
|
||||
<TableCell style={{ width: '25%' }}>{item.stnm}</TableCell>
|
||||
<TableCell style={{ width: '20%' }}>{item.today}</TableCell>
|
||||
<TableCell style={{ width: '25%' }}>阎家河镇</TableCell>
|
||||
<TableCell style={{ width: '30%' }}>桃林河</TableCell>
|
||||
<DpTableCell style={{ width: '25%' }}>{item.stnm}</DpTableCell>
|
||||
<DpTableCell style={{ width: '20%' }}>{item.today}</DpTableCell>
|
||||
<DpTableCell style={{ width: '25%' }}>阎家河镇</DpTableCell>
|
||||
<DpTableCell style={{ width: '30%' }}>桃林河</DpTableCell>
|
||||
</TableRow>
|
||||
))
|
||||
}
|
||||
|
||||
</Box>
|
||||
</Collapse>
|
||||
</TableCell>
|
||||
</DpTableCell>
|
||||
</TableRow>
|
||||
</React.Fragment>
|
||||
))}
|
||||
|
|
|
|||
|
|
@ -134,11 +134,11 @@ function HDReal({ style }) {
|
|||
}
|
||||
>
|
||||
{
|
||||
num.length ? num.map(item => (
|
||||
num.length ?
|
||||
<div style={{ padding: '5px' }}>
|
||||
<img src={`${process.env.PUBLIC_URL}/assets/duibi1.png`} alt="" style={{ width: 420 }} />
|
||||
<img src={`${process.env.PUBLIC_URL}/assets/${num.length == 1 ? 'duibi1':'duibi2'}.png`} alt="" style={{ width: 420 }} />
|
||||
</div>
|
||||
))
|
||||
|
||||
:
|
||||
<Empty description={<span style={{ color: "#fff" }}>暂无数据</span>} />
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ import {
|
|||
Button,
|
||||
Table,
|
||||
TableBody,
|
||||
TableCell,
|
||||
TableContainer,
|
||||
TableHead,
|
||||
TableRow,
|
||||
|
|
@ -22,6 +21,8 @@ import {
|
|||
} from '@material-ui/core';
|
||||
import AddIcon from '@material-ui/icons/Add';
|
||||
import RemoveIcon from '@material-ui/icons/Remove';
|
||||
import DpTableCell from '../../../../layouts/mui/DpTableCell';
|
||||
|
||||
const useStyles = makeStyles((theme) => ({
|
||||
root: {
|
||||
color: '#fff',
|
||||
|
|
@ -141,20 +142,20 @@ export default function Overall({ style }) {
|
|||
|
||||
|
||||
<TableContainer>
|
||||
<Table className={classes.table}>
|
||||
<Table >
|
||||
<TableHead>
|
||||
<TableRow>
|
||||
<TableCell style={{ width: '35%' }}>站名</TableCell>
|
||||
<TableCell style={{ width: '30%' }}>水位(mm)</TableCell>
|
||||
<TableCell style={{ width: '15%' }}>所属政区</TableCell>
|
||||
<TableCell style={{ width: '15%' }}>所属流域</TableCell>
|
||||
<DpTableCell style={{ width: '35%' }}>站名</DpTableCell>
|
||||
<DpTableCell style={{ width: '30%' }}>水位(mm)</DpTableCell>
|
||||
<DpTableCell style={{ width: '15%' }}>所属政区</DpTableCell>
|
||||
<DpTableCell style={{ width: '15%' }}>所属流域</DpTableCell>
|
||||
</TableRow>
|
||||
</TableHead>
|
||||
<TableBody>
|
||||
{stations.map((station) => (
|
||||
<React.Fragment key={station.id}>
|
||||
<TableRow className={`${classes.warningRow} ${station.type}`}>
|
||||
<TableCell>
|
||||
<DpTableCell>
|
||||
<Box display="flex" alignItems="center">
|
||||
<IconButton
|
||||
size="small"
|
||||
|
|
@ -165,25 +166,25 @@ export default function Overall({ style }) {
|
|||
</IconButton>
|
||||
{station.name}({station.count})
|
||||
</Box>
|
||||
</TableCell>
|
||||
<TableCell></TableCell>
|
||||
<TableCell></TableCell>
|
||||
<TableCell></TableCell>
|
||||
</DpTableCell>
|
||||
<DpTableCell></DpTableCell>
|
||||
<DpTableCell></DpTableCell>
|
||||
<DpTableCell></DpTableCell>
|
||||
</TableRow>
|
||||
<TableRow>
|
||||
<TableCell colSpan={4} style={{ padding: 0 }}>
|
||||
<DpTableCell colSpan={4} style={{ padding: 0 }}>
|
||||
<Collapse in={expanded[station.id]} timeout="auto" unmountOnExit>
|
||||
<Box className={`${classes.expandedRow} ${station.color}`}>
|
||||
{/* 展开的详细内容可以在这里添加 */}
|
||||
{/* <TableRow>
|
||||
<TableCell style={{ width: '25%' }}>站名</TableCell>
|
||||
<TableCell style={{ width: '20%' }}>水位(m)</TableCell>
|
||||
<TableCell style={{ width: '25%' }}>所属政区</TableCell>
|
||||
<TableCell style={{ width: '30%' }}>所属流域</TableCell>
|
||||
<DpTableCell style={{ width: '25%' }}>站名</DpTableCell>
|
||||
<DpTableCell style={{ width: '20%' }}>水位(m)</DpTableCell>
|
||||
<DpTableCell style={{ width: '25%' }}>所属政区</DpTableCell>
|
||||
<DpTableCell style={{ width: '30%' }}>所属流域</DpTableCell>
|
||||
</TableRow> */}
|
||||
</Box>
|
||||
</Collapse>
|
||||
</TableCell>
|
||||
</DpTableCell>
|
||||
</TableRow>
|
||||
</React.Fragment>
|
||||
))}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import {
|
|||
Button,
|
||||
Table,
|
||||
TableBody,
|
||||
TableCell,
|
||||
|
||||
TableContainer,
|
||||
TableHead,
|
||||
TableRow,
|
||||
|
|
@ -26,6 +26,7 @@ import RemoveIcon from '@material-ui/icons/Remove';
|
|||
import WarningIcon from '@material-ui/icons/Warning';
|
||||
import AddIcon from '@material-ui/icons/Add';
|
||||
import { useDispatch } from 'react-redux';
|
||||
import DpTableCell from '../../../../layouts/mui/DpTableCell';
|
||||
|
||||
import { DatePicker } from 'antd';
|
||||
import moment from 'moment';
|
||||
|
|
@ -135,11 +136,11 @@ export default function Overall({ style }) {
|
|||
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"),
|
||||
etm: moment().add(1, 'days').add(1, 'hour').set({ minute: 0, second: 0 }).format("YYYY-MM-DD HH:mm"),
|
||||
stm: moment().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 }),
|
||||
moment().add(1, 'hour').set({ minute: 0, second: 0 }).hours(9),
|
||||
moment().add(1, 'days').add(1, 'hour').set({ minute: 0, second: 0 }).hours(9),
|
||||
],
|
||||
}
|
||||
|
||||
|
|
@ -240,19 +241,19 @@ export default function Overall({ style }) {
|
|||
</div>
|
||||
</div>
|
||||
<TableContainer component={Paper} style={{ backgroundColor: 'transparent' }}>
|
||||
<Table className={classes.table}>
|
||||
<Table stickyHeader>
|
||||
<TableHead>
|
||||
<TableRow>
|
||||
<TableCell>乡镇</TableCell>
|
||||
<TableCell>预警时间</TableCell>
|
||||
<TableCell>预警状态</TableCell>
|
||||
<DpTableCell>乡镇</DpTableCell>
|
||||
<DpTableCell>预警时间</DpTableCell>
|
||||
<DpTableCell>预警状态</DpTableCell>
|
||||
</TableRow>
|
||||
</TableHead>
|
||||
<TableBody>
|
||||
{warningData.map((row) => (
|
||||
<React.Fragment key={row.type}>
|
||||
<TableRow className={`${classes.warningRow} ${row.type}`}>
|
||||
<TableCell>
|
||||
<DpTableCell>
|
||||
<Box display="flex" alignItems="center">
|
||||
{expanded[row.type] ? (
|
||||
<RemoveIcon
|
||||
|
|
@ -267,14 +268,14 @@ export default function Overall({ style }) {
|
|||
)}
|
||||
{row.label}
|
||||
</Box>
|
||||
</TableCell>
|
||||
<TableCell></TableCell>
|
||||
<TableCell>
|
||||
</DpTableCell>
|
||||
<DpTableCell></DpTableCell>
|
||||
<DpTableCell>
|
||||
{row.count}个乡镇
|
||||
</TableCell>
|
||||
</DpTableCell>
|
||||
</TableRow>
|
||||
<TableRow>
|
||||
<TableCell colSpan={3} style={{ padding: 0 }}>
|
||||
<DpTableCell colSpan={3} style={{ padding: 0 }}>
|
||||
<Collapse in={expanded[row.type]} timeout="auto" unmountOnExit>
|
||||
<Box className={classes.expandedContent}>
|
||||
{/* 这里可以添加展开后显示的详细内容 */}
|
||||
|
|
@ -282,15 +283,15 @@ export default function Overall({ style }) {
|
|||
{
|
||||
row.type == 'immediate' ? zyData.map(item => (
|
||||
<TableRow onClick={() => flyTo(item)}>
|
||||
<TableCell style={{ width: '30%' }}><div
|
||||
<DpTableCell style={{ width: '30%' }}><div
|
||||
className="table-ellipsis cursor-pointer"
|
||||
>{item.adnm}</div></TableCell>
|
||||
<TableCell style={{ width: '40%' }}><div
|
||||
>{item.adnm}</div></DpTableCell>
|
||||
<DpTableCell style={{ width: '40%' }}><div
|
||||
className="table-ellipsis cursor-pointer"
|
||||
>{item.warnetm}</div></TableCell>
|
||||
<TableCell style={{ width: '30%' }}><div
|
||||
>{item.warnetm}</div></DpTableCell>
|
||||
<DpTableCell style={{ width: '30%' }}><div
|
||||
className="table-ellipsis cursor-pointer"
|
||||
>{item.status}</div></TableCell>
|
||||
>{item.status}</div></DpTableCell>
|
||||
</TableRow>
|
||||
))
|
||||
|
||||
|
|
@ -299,7 +300,7 @@ export default function Overall({ style }) {
|
|||
}
|
||||
</Box>
|
||||
</Collapse>
|
||||
</TableCell>
|
||||
</DpTableCell>
|
||||
</TableRow>
|
||||
</React.Fragment>
|
||||
))}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,51 @@
|
|||
import React from 'react';
|
||||
|
||||
import Dialog from '@material-ui/core/Dialog';
|
||||
import DialogContent from '@material-ui/core/DialogContent';
|
||||
import DpPaperComponent from '../../../../layouts/mui/DpPaperCompanent';
|
||||
import { FormGroup, MenuItem, Select, Switch, Typography } from '@material-ui/core';
|
||||
import DpDialogTitle from '../../../../layouts/mui/DpDialogTitle';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import { getLayerSetting, getLayerVisible } from '../../../../models/map/selectors';
|
||||
import DpBackgroundDrop from '../../../../layouts/mui/DpBackdrop';
|
||||
|
||||
|
||||
function Setting({ onClose }) {
|
||||
const layerVisible = useSelector(getLayerVisible);
|
||||
const layerSetting = useSelector(getLayerSetting);
|
||||
|
||||
const dispath = useDispatch();
|
||||
|
||||
return (
|
||||
<Dialog
|
||||
open={true}
|
||||
onClose={onClose}
|
||||
maxWidth="xl"
|
||||
style={{ borderRadius: 0 }}
|
||||
PaperComponent={DpPaperComponent}
|
||||
BackdropComponent={DpBackgroundDrop}
|
||||
>
|
||||
<div className="boxhead"></div>
|
||||
|
||||
<DpDialogTitle>河道水位显示设置</DpDialogTitle>
|
||||
<DialogContent>
|
||||
<div style={{ width: 320, padding: '1rem 0' }}>
|
||||
<FormGroup>
|
||||
<div style={{ marginBottom: '1rem' }}>
|
||||
<Typography variant="subtitle2">显示河道水位图层</Typography>
|
||||
<Switch
|
||||
checked={!!layerVisible.RealHDLayer}
|
||||
color="primary"
|
||||
edge="start"
|
||||
onChange={(e) => dispath.map.setLayerVisible({ RealHDLayer: e.target.checked })}
|
||||
/>
|
||||
</div>
|
||||
</FormGroup>
|
||||
</div>
|
||||
</DialogContent>
|
||||
<div className="boxfoot"></div>
|
||||
</Dialog>
|
||||
)
|
||||
}
|
||||
|
||||
export default Setting;
|
||||
|
|
@ -0,0 +1,157 @@
|
|||
const data = [
|
||||
{
|
||||
"addvcd": "420800000000000",
|
||||
"moditime": "2022-05-01 21:00:00",
|
||||
"comments": "漳河遥测",
|
||||
"src": "zhzj",
|
||||
"esstym": "",
|
||||
"mvalue": {
|
||||
"slmmmt": null,
|
||||
"slm60": 0,
|
||||
"exkey": "@",
|
||||
"slm80": 0,
|
||||
"hitrsn": null,
|
||||
"crpty": null,
|
||||
"crpgrwprd": null,
|
||||
"srlslm": null,
|
||||
"stcd": "ZH201417",
|
||||
"slm10": 24,
|
||||
"slm20": 5.3,
|
||||
"slm30": 44.3,
|
||||
"slm40": 44.3,
|
||||
"tm": "2024-08-03 05:00",
|
||||
"slm100": 0,
|
||||
"vtavslm": null,
|
||||
"slmAvg": 24.5
|
||||
},
|
||||
"lttd": 30.8456,
|
||||
"sttp": "SS",
|
||||
"irrCode": "D00000010",
|
||||
"sort": 9999,
|
||||
"hasImg": false,
|
||||
"stlc": "荆门市",
|
||||
"dtmel": 0,
|
||||
"stcd": "ZH201417",
|
||||
"stnm": "马山二组(墒情)",
|
||||
"addvcd_dictText": "荆门市",
|
||||
"lgtd": 112.2321,
|
||||
"irrCode_dictText": "漳河实验站",
|
||||
"bsnm": "漳河流域"
|
||||
},
|
||||
{
|
||||
"addvcd": "420800000000000",
|
||||
"moditime": "2022-05-01 21:00:00",
|
||||
"comments": "漳河遥测",
|
||||
"src": "zhzj",
|
||||
"esstym": "",
|
||||
"mvalue": {
|
||||
"slmmmt": null,
|
||||
"slm60": 0,
|
||||
"exkey": "@",
|
||||
"slm80": 0,
|
||||
"hitrsn": null,
|
||||
"crpty": null,
|
||||
"crpgrwprd": null,
|
||||
"srlslm": null,
|
||||
"stcd": "ZH201421",
|
||||
"slm10": 12.1,
|
||||
"slm20": 16.2,
|
||||
"slm30": 12.8,
|
||||
"slm40": 12.8,
|
||||
"tm": "2024-08-15 08:00",
|
||||
"slm100": 0,
|
||||
"vtavslm": null,
|
||||
"slmAvg": 13.7
|
||||
},
|
||||
"lttd": 30.8446,
|
||||
"sttp": "SS",
|
||||
"irrCode": "D00000010",
|
||||
"sort": 9999,
|
||||
"hasImg": false,
|
||||
"stlc": "荆门市",
|
||||
"dtmel": 0,
|
||||
"stcd": "ZH201421",
|
||||
"stnm": "槐桥四组(墒情)",
|
||||
"addvcd_dictText": "荆门市",
|
||||
"lgtd": 112.203,
|
||||
"irrCode_dictText": "漳河实验站",
|
||||
"bsnm": "漳河流域"
|
||||
},
|
||||
{
|
||||
"addvcd": "420800000000000",
|
||||
"moditime": "2022-05-01 21:00:00",
|
||||
"src": "zhzj",
|
||||
"esstym": "",
|
||||
"mvalue": {
|
||||
"slmmmt": null,
|
||||
"slm60": 0,
|
||||
"exkey": "@",
|
||||
"slm80": 0,
|
||||
"hitrsn": null,
|
||||
"crpty": null,
|
||||
"crpgrwprd": null,
|
||||
"srlslm": null,
|
||||
"stcd": "ZH201418",
|
||||
"slm10": 16.5,
|
||||
"slm20": 12.5,
|
||||
"slm30": 0,
|
||||
"slm40": 0,
|
||||
"tm": "2024-09-19 11:00",
|
||||
"slm100": 0,
|
||||
"vtavslm": null,
|
||||
"slmAvg": 14.5
|
||||
},
|
||||
"lttd": 30.8866,
|
||||
"sttp": "SS",
|
||||
"irrCode": "D00000010",
|
||||
"sort": 9999,
|
||||
"hasImg": false,
|
||||
"stlc": "荆门市",
|
||||
"dtmel": 0,
|
||||
"stcd": "ZH201418",
|
||||
"stnm": "双碑一组(墒情)",
|
||||
"addvcd_dictText": "荆门市",
|
||||
"lgtd": 112.2006,
|
||||
"irrCode_dictText": "漳河实验站",
|
||||
"bsnm": "漳河流域"
|
||||
},
|
||||
{
|
||||
"addvcd": "420800000000000",
|
||||
"moditime": "2022-05-01 21:00:00",
|
||||
"comments": "水资源多孔闸门控制系统",
|
||||
"src": "zhzj",
|
||||
"esstym": "",
|
||||
"mvalue": {
|
||||
"slmmmt": null,
|
||||
"slm60": null,
|
||||
"exkey": "@",
|
||||
"slm80": null,
|
||||
"hitrsn": null,
|
||||
"crpty": null,
|
||||
"crpgrwprd": null,
|
||||
"srlslm": null,
|
||||
"stcd": "4211221031",
|
||||
"slm10": 31,
|
||||
"slm20": 42.6,
|
||||
"slm30": null,
|
||||
"slm40": 26.6,
|
||||
"tm": "2025-05-26 09:00",
|
||||
"slm100": null,
|
||||
"vtavslm": null,
|
||||
"slmAvg": 33.4
|
||||
},
|
||||
"lttd": 30.904191,
|
||||
"sttp": "SS",
|
||||
"irrCode": "D00000010",
|
||||
"sort": 9999,
|
||||
"hasImg": false,
|
||||
"stlc": "荆门市",
|
||||
"stcd": "4211221031",
|
||||
"stnm": "试验站墒情",
|
||||
"addvcd_dictText": "荆门市",
|
||||
"lgtd": 112.087806,
|
||||
"irrCode_dictText": "漳河实验站",
|
||||
"bsnm": "漳河流域"
|
||||
}
|
||||
]
|
||||
export default data;
|
||||
|
|
@ -0,0 +1,197 @@
|
|||
import React, { useMemo, useState } from 'react';
|
||||
import useRequest from '../../../../utils/useRequest';
|
||||
import PanelBox from '../../components/PanelBox';
|
||||
|
||||
import Table from '@material-ui/core/Table';
|
||||
import TableContainer from '@material-ui/core/TableContainer';
|
||||
import TableBody from '@material-ui/core/TableBody';
|
||||
import TableHead from '@material-ui/core/TableHead';
|
||||
import TableRow from '@material-ui/core/TableRow';
|
||||
import DpTableCell from '../../../../layouts/mui/DpTableCell';
|
||||
import DpTableRow from '../../../../layouts/mui/DpTableRow';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import useRefresh from '../../../../utils/useRefresh';
|
||||
import { HDRealPromise } from '../../../../models/_/real';
|
||||
import clsx from 'clsx';
|
||||
import { renderHDRz } from '../../../../utils/renutils';
|
||||
import Setting from './Setting';
|
||||
import { InfoPopNames } from '../../InfoPops';
|
||||
import config from '../../../../config';
|
||||
import moment from 'moment';
|
||||
import { Empty } from 'antd'
|
||||
import TableYj from './tableYj';
|
||||
import { Select, MenuItem } from '@material-ui/core/index'
|
||||
|
||||
// import showData from './constant'
|
||||
function rzRender(rz, base) {
|
||||
return (
|
||||
<DpTableCell align="right" style={{ color: rz >= base ? 'red' : '#fff' }}>
|
||||
{typeof base === 'number' ? base.toFixed(2) : ''}
|
||||
</DpTableCell>
|
||||
);
|
||||
}
|
||||
|
||||
function HDReal({ style }) {
|
||||
const dispatch = useDispatch();
|
||||
const tableRzFilter = useSelector(s => s.realview.tableRzFilter);
|
||||
const hdAutoRefresh = useSelector(s => s.realview.hdAutoRefresh);
|
||||
const num = useSelector(s => s.runtime.duibifxNum)
|
||||
|
||||
const yyRes = useSelector(s => s.runtime.yyObj);
|
||||
const [setting, showSetting] = useState(false);
|
||||
const [dimension, setDimension] = useState('ft');
|
||||
|
||||
|
||||
const data = [
|
||||
|
||||
{
|
||||
"guid": "42118120003",
|
||||
"code": "",
|
||||
"name": "浮桥河水库",
|
||||
"resRegCode": "42000020030-A4",
|
||||
"adName": "白果镇",
|
||||
"engScal": "大(2)型",
|
||||
"place": "湖北省-黄冈市-麻城市-白果镇",
|
||||
"lon": "115.068090",
|
||||
"lat": "31.026170",
|
||||
'username': '熊杰',
|
||||
taskType: '除草除杂',
|
||||
tm: '2025-06-02 17:38:00',
|
||||
status: '已处理'
|
||||
},
|
||||
{
|
||||
"guid": "42118120003",
|
||||
"code": "",
|
||||
"name": "浮桥河水库",
|
||||
"resRegCode": "42000020030-A4",
|
||||
"adName": "白果镇",
|
||||
"engScal": "大(2)型",
|
||||
"place": "湖北省-黄冈市-麻城市-白果镇",
|
||||
"lon": "115.068090",
|
||||
"lat": "31.026170",
|
||||
'username': '白斌',
|
||||
taskType: '除草除杂',
|
||||
tm: '2025-06-02 17:09:11',
|
||||
status: '已处理'
|
||||
},
|
||||
{
|
||||
"guid": "42118120003",
|
||||
"code": "",
|
||||
"name": "明山水库",
|
||||
"resRegCode": "42000020030-A4",
|
||||
"adName": "白果镇",
|
||||
"engScal": "大(2)型",
|
||||
"place": "湖北省-黄冈市-麻城市-白果镇",
|
||||
"lon": "115.068090",
|
||||
"lat": "31.026170",
|
||||
'username': '余静',
|
||||
taskType: '危险提示',
|
||||
tm: '2025-06-02 16:10:00',
|
||||
status: '已处理'
|
||||
},
|
||||
{
|
||||
"guid": "42118120003",
|
||||
"code": "",
|
||||
"name": "永红水库",
|
||||
"resRegCode": "42000020030-A4",
|
||||
"adName": "白果镇",
|
||||
"engScal": "大(2)型",
|
||||
"place": "湖北省-黄冈市-麻城市-白果镇",
|
||||
"lon": "115.068090",
|
||||
"lat": "31.026170",
|
||||
'username': '周真',
|
||||
taskType: '设备养护',
|
||||
tm: '2025-06-02 15:00:49',
|
||||
status: '待处理'
|
||||
},
|
||||
{
|
||||
"guid": "42118120003",
|
||||
"code": "",
|
||||
"name": "永丰水库",
|
||||
"resRegCode": "42000020030-A4",
|
||||
"adName": "白果镇",
|
||||
"engScal": "大(2)型",
|
||||
"place": "湖北省-黄冈市-麻城市-白果镇",
|
||||
"lon": "115.068090",
|
||||
"lat": "31.026170",
|
||||
'username': '陈发',
|
||||
taskType: '除草除杂',
|
||||
tm: '2025-06-02 14:43:49',
|
||||
status: '已处理'
|
||||
},
|
||||
]
|
||||
|
||||
|
||||
const [list, setList] = useState(data)
|
||||
const onChange = (event) => {
|
||||
const value = event.target.value;
|
||||
setDimension(value);
|
||||
const newData = data.filter(item => item.taskType == value);
|
||||
if (newData.length) {
|
||||
setList(newData);
|
||||
} else {
|
||||
setList(data)
|
||||
}
|
||||
}
|
||||
const flyTo = () => {
|
||||
dispatch?.runtime.setInfoDlg({ layerId: 'ShuikuyanghuLayer', properties: {} })
|
||||
}
|
||||
return (
|
||||
<PanelBox
|
||||
style={style}
|
||||
title="水库管护"
|
||||
color="green"
|
||||
extra={
|
||||
<>
|
||||
<div style={{ height: '30px', overflow: 'hidden' }}>
|
||||
<Select
|
||||
labelId="analysis-select-label"
|
||||
value={dimension}
|
||||
label="请选择管护类型"
|
||||
onChange={onChange}
|
||||
>
|
||||
<MenuItem value="ft">请选择管护类型</MenuItem>
|
||||
<MenuItem value="除草除杂">除草除杂</MenuItem>
|
||||
<MenuItem value="设备养护">设备养护</MenuItem>
|
||||
<MenuItem value="危险提示">危险提示</MenuItem>
|
||||
</Select>
|
||||
</div>
|
||||
</>
|
||||
}
|
||||
>
|
||||
<TableContainer style={{ height: '200px', overflow: 'auto' }}>
|
||||
<Table size="small" stickyHeader>
|
||||
<TableHead>
|
||||
<TableRow>
|
||||
<DpTableCell style={{ width: '30%' }} align="center">水库名称</DpTableCell>
|
||||
<DpTableCell style={{ width: '20%' }} align="center">管护类型</DpTableCell>
|
||||
<DpTableCell style={{ width: '25%' }} align="center">内容</DpTableCell>
|
||||
<DpTableCell style={{ width: '25%' }} align="center">上报时间</DpTableCell>
|
||||
</TableRow>
|
||||
</TableHead>
|
||||
<TableBody>
|
||||
{list.map((row, index) => (
|
||||
<DpTableRow key={row.stcd} onClick={flyTo}>
|
||||
<DpTableCell align="center">
|
||||
<div
|
||||
className="table-ellipsis cursor-pointer"
|
||||
>{row.name}</div>
|
||||
</DpTableCell>
|
||||
<DpTableCell align="center">{row.taskType}</DpTableCell>
|
||||
<DpTableCell align="center">一切正常</DpTableCell>
|
||||
<DpTableCell align="center"> <div
|
||||
className="table-ellipsis cursor-pointer"
|
||||
>{row.tm}</div></DpTableCell>
|
||||
</DpTableRow>
|
||||
))}
|
||||
</TableBody>
|
||||
</Table>
|
||||
</TableContainer>
|
||||
{
|
||||
setting && <Setting onClose={() => showSetting(false)} />
|
||||
}
|
||||
</PanelBox>
|
||||
)
|
||||
}
|
||||
|
||||
export default HDReal;
|
||||
|
|
@ -0,0 +1,171 @@
|
|||
|
||||
import React from 'react';
|
||||
import { makeStyles } from '@material-ui/core/styles';
|
||||
import {
|
||||
Table,
|
||||
TableBody,
|
||||
TableCell,
|
||||
TableContainer,
|
||||
TableHead,
|
||||
TableRow,
|
||||
Paper,
|
||||
} from '@material-ui/core';
|
||||
const reservoirData = [
|
||||
{
|
||||
name: '明山水库',
|
||||
maxInflow: {
|
||||
value: 12.32,
|
||||
time: '03-23 14:32'
|
||||
},
|
||||
totalStorage: 17.98,
|
||||
maxOutflow: {
|
||||
value: 12.32,
|
||||
time: '03-23 14:32'
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
const useStyles = makeStyles((theme) => ({
|
||||
root: {
|
||||
width: '100%',
|
||||
// padding: '20px',
|
||||
background: '#0d1117',
|
||||
borderRadius: '8px',
|
||||
position: 'relative',
|
||||
},
|
||||
tableContainer: {
|
||||
background: 'transparent',
|
||||
maxHeight: '100%',
|
||||
overflowX: 'auto',
|
||||
'&::-webkit-scrollbar': {
|
||||
height: '8px',
|
||||
},
|
||||
'&::-webkit-scrollbar-track': {
|
||||
// background: 'rgba(255, 255, 255, 0.1)',
|
||||
borderRadius: '4px',
|
||||
},
|
||||
'&::-webkit-scrollbar-thumb': {
|
||||
// background: 'rgba(255, 255, 255, 0.2)',
|
||||
borderRadius: '4px',
|
||||
'&:hover': {
|
||||
background: 'rgba(255, 255, 255, 0.3)',
|
||||
},
|
||||
},
|
||||
},
|
||||
table: {
|
||||
minWidth: 800,
|
||||
// background: 'linear-gradient(180deg, rgba(22, 27, 34, 0.8) 0%, rgba(13, 17, 23, 0.8) 100%)',
|
||||
backdropFilter: 'blur(10px)',
|
||||
},
|
||||
tableHead: {
|
||||
background: 'linear-gradient(180deg, rgba(22, 27, 34, 0.9) 0%, rgba(22, 27, 34, 0.7) 100%)',
|
||||
},
|
||||
headerCell: {
|
||||
color: '#c9d1d9',
|
||||
fontWeight: 600,
|
||||
textAlign: 'center',
|
||||
borderBottom: '1px solid rgba(48, 54, 61, 0.6)',
|
||||
borderRight: '1px solid rgba(48, 54, 61, 0.6)',
|
||||
padding: 0,
|
||||
whiteSpace: 'nowrap',
|
||||
'&:last-child': {
|
||||
borderRight: 'none',
|
||||
},
|
||||
},
|
||||
cell: {
|
||||
color: '#c9d1d9',
|
||||
textAlign: 'center',
|
||||
borderBottom: '1px solid rgba(48, 54, 61, 0.6)',
|
||||
borderRight: '1px solid rgba(48, 54, 61, 0.6)',
|
||||
padding: '12px 20px',
|
||||
whiteSpace: 'nowrap',
|
||||
'&:last-child': {
|
||||
borderRight: 'none',
|
||||
},
|
||||
},
|
||||
timeText: {
|
||||
fontSize: '0.85em',
|
||||
color: '#8b949e',
|
||||
marginLeft: '4px',
|
||||
},
|
||||
scrollIndicator: {
|
||||
position: 'absolute',
|
||||
bottom: 0,
|
||||
left: 0,
|
||||
right: 0,
|
||||
height: '4px',
|
||||
background: 'rgba(255, 255, 255, 0.1)',
|
||||
borderRadius: '2px',
|
||||
},
|
||||
scrollProgress: {
|
||||
height: '100%',
|
||||
background: 'rgba(255, 255, 255, 0.3)',
|
||||
borderRadius: '2px',
|
||||
width: '50%',
|
||||
transform: 'translateX(0%)',
|
||||
transition: 'transform 0.3s ease',
|
||||
},
|
||||
}));
|
||||
|
||||
const ReservoirTable = () => {
|
||||
const classes = useStyles();
|
||||
const [scrollPosition, setScrollPosition] = React.useState(0);
|
||||
|
||||
const handleScroll = (e) => {
|
||||
const target = e.target;
|
||||
const scrollLeft = target.scrollLeft;
|
||||
const maxScroll = target.scrollWidth - target.clientWidth;
|
||||
const position = (scrollLeft / maxScroll) * 100;
|
||||
setScrollPosition(position);
|
||||
};
|
||||
|
||||
const formatFlowCell = (data) => (
|
||||
<>
|
||||
{data.value}
|
||||
<span className={classes.timeText}>({data.time})</span>
|
||||
</>
|
||||
);
|
||||
|
||||
return (
|
||||
<Paper className={classes.root} elevation={0}>
|
||||
<TableContainer className={classes.tableContainer} >
|
||||
<Table >
|
||||
<TableHead >
|
||||
<TableRow>
|
||||
<TableCell className={classes.headerCell}>水库名称</TableCell>
|
||||
<TableCell className={classes.headerCell}>
|
||||
最大入库流量<br/>(m³/s)
|
||||
</TableCell>
|
||||
<TableCell className={classes.headerCell}>
|
||||
总入库水量<br/>(万m³)
|
||||
</TableCell>
|
||||
<TableCell className={classes.headerCell}>
|
||||
最大出库流量<br/>(m³/s)
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
</TableHead>
|
||||
<TableBody>
|
||||
{reservoirData.map((item, index) => (
|
||||
<TableRow key={index}>
|
||||
<TableCell className={classes.cell}>{item.name}</TableCell>
|
||||
<TableCell className={classes.cell}>{formatFlowCell(item.maxInflow)}</TableCell>
|
||||
<TableCell className={classes.cell}>{item.totalStorage}</TableCell>
|
||||
<TableCell className={classes.cell}>{formatFlowCell(item.maxOutflow)}</TableCell>
|
||||
</TableRow>
|
||||
))}
|
||||
</TableBody>
|
||||
</Table>
|
||||
</TableContainer>
|
||||
<div className={classes.scrollIndicator}>
|
||||
<div
|
||||
className={classes.scrollProgress}
|
||||
style={{
|
||||
transform: `translateX(${scrollPosition}%)`
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</Paper>
|
||||
);
|
||||
};
|
||||
|
||||
export default ReservoirTable;
|
||||
|
|
@ -15,7 +15,7 @@ import {
|
|||
Button,
|
||||
Table,
|
||||
TableBody,
|
||||
TableCell,
|
||||
|
||||
TableContainer,
|
||||
TableHead,
|
||||
TableRow,
|
||||
|
|
@ -24,6 +24,7 @@ import {
|
|||
} from '@material-ui/core';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import config from '../../../../config';
|
||||
import DpTableCell from '../../../../layouts/mui/DpTableCell';
|
||||
|
||||
import AddIcon from '@material-ui/icons/Add';
|
||||
import RemoveIcon from '@material-ui/icons/Remove';
|
||||
|
|
@ -206,21 +207,21 @@ export default function Overall({ style }) {
|
|||
|
||||
|
||||
<TableContainer>
|
||||
<Table className={classes.table}>
|
||||
<Table stickyHeader>
|
||||
<TableHead>
|
||||
<TableRow>
|
||||
<TableCell style={{ width: '40%' }}>站名</TableCell>
|
||||
<TableCell style={{ width: '14%' }}>水位(mm)</TableCell>
|
||||
<TableCell style={{ width: '15%' }}>所属政区</TableCell>
|
||||
<TableCell style={{ width: '15%' }}>所属流域</TableCell>
|
||||
<TableCell style={{ width: '16%' }}>预案</TableCell>
|
||||
<DpTableCell style={{ width: '40%' }}>站名</DpTableCell>
|
||||
<DpTableCell style={{ width: '14%' }}>水位(mm)</DpTableCell>
|
||||
<DpTableCell style={{ width: '15%' }}>所属政区</DpTableCell>
|
||||
<DpTableCell style={{ width: '15%' }}>所属流域</DpTableCell>
|
||||
<DpTableCell style={{ width: '16%' }}>预案</DpTableCell>
|
||||
</TableRow>
|
||||
</TableHead>
|
||||
<TableBody>
|
||||
{stations.map((station) => (
|
||||
<React.Fragment key={station.id}>
|
||||
<TableRow className={`${classes.warningRow} ${station.color}`}>
|
||||
<TableCell>
|
||||
<DpTableCell>
|
||||
<Box display="flex" alignItems="center">
|
||||
<IconButton
|
||||
size="small"
|
||||
|
|
@ -231,39 +232,39 @@ export default function Overall({ style }) {
|
|||
</IconButton>
|
||||
{station.name}({station.count})
|
||||
</Box>
|
||||
</TableCell>
|
||||
<TableCell></TableCell>
|
||||
<TableCell></TableCell>
|
||||
<TableCell></TableCell>
|
||||
<TableCell></TableCell>
|
||||
</DpTableCell>
|
||||
<DpTableCell></DpTableCell>
|
||||
<DpTableCell></DpTableCell>
|
||||
<DpTableCell></DpTableCell>
|
||||
<DpTableCell></DpTableCell>
|
||||
</TableRow>
|
||||
<TableRow>
|
||||
<TableCell colSpan={5} style={{ padding: 0 }}>
|
||||
<DpTableCell colSpan={5} style={{ padding: 0 }}>
|
||||
<Collapse in={expanded[station.id]} timeout="auto" unmountOnExit>
|
||||
<Box className={`${classes.expandedRow} ${station.color}`}>
|
||||
{/* 展开的详细内容可以在这里添加 */}
|
||||
{
|
||||
station.id == "cxx" && <TableRow onClick={() => flyTo()}>
|
||||
<TableCell style={{ width: '20%' }}><div
|
||||
<DpTableCell style={{ width: '20%' }}><div
|
||||
className="table-ellipsis cursor-pointer"
|
||||
>永红水库</div></TableCell>
|
||||
<TableCell style={{ width: '20%' }}>130.15(0.25)</TableCell>
|
||||
<TableCell style={{ width: '20%' }}><div
|
||||
>永红水库</div></DpTableCell>
|
||||
<DpTableCell style={{ width: '20%' }}>130.15(0.25)</DpTableCell>
|
||||
<DpTableCell style={{ width: '20%' }}><div
|
||||
className="table-ellipsis cursor-pointer"
|
||||
>阎家河镇</div></TableCell>
|
||||
<TableCell style={{ width: '20%' }}>阎家河</TableCell>
|
||||
<TableCell style={{ width: '20%' }}><a
|
||||
>阎家河镇</div></DpTableCell>
|
||||
<DpTableCell style={{ width: '20%' }}>阎家河</DpTableCell>
|
||||
<DpTableCell style={{ width: '20%' }}><a
|
||||
className="table-ellipsis cursor-pointer"
|
||||
onClick={() => {
|
||||
dispatch?.runtime.setInfoDlg({ layerId: 'PdfLayer', properties: {planName:'麻城市山洪灾害防御预案'} })
|
||||
}}
|
||||
>麻城市山洪灾害防御预案</a></TableCell>
|
||||
>麻城市山洪灾害防御预案</a></DpTableCell>
|
||||
</TableRow>
|
||||
}
|
||||
|
||||
</Box>
|
||||
</Collapse>
|
||||
</TableCell>
|
||||
</DpTableCell>
|
||||
</TableRow>
|
||||
</React.Fragment>
|
||||
))}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import { makeStyles } from '@material-ui/core';
|
|||
|
||||
const useStyles = makeStyles((theme) => ({
|
||||
root: {
|
||||
backgroundColor: '#0d1117',
|
||||
backgroundColor: 'transparent',
|
||||
borderRadius: 4,
|
||||
overflow: 'hidden',
|
||||
},
|
||||
|
|
@ -12,7 +12,7 @@ const useStyles = makeStyles((theme) => ({
|
|||
borderCollapse: 'collapse',
|
||||
color: '#c9d1d9',
|
||||
'& th': {
|
||||
backgroundColor: '#161b22',
|
||||
backgroundColor: 'transparent',
|
||||
padding: theme.spacing(1.5),
|
||||
textAlign: 'center',
|
||||
fontWeight: 'normal',
|
||||
|
|
|
|||
|
|
@ -52,9 +52,9 @@ function WF() {
|
|||
dispatch.runtime.setYyfa({yy:''})
|
||||
dispatch.shyjview.showWeather24h();
|
||||
const map = window.__mapref
|
||||
map.setLayoutProperty('热力图', 'visibility', 'none');
|
||||
// if (map) {
|
||||
// }
|
||||
if (map) {
|
||||
map.setLayoutProperty('热力图', 'visibility', 'none');
|
||||
}
|
||||
}
|
||||
|
||||
const genWeatherContourRadar = () => {
|
||||
|
|
@ -74,14 +74,9 @@ function WF() {
|
|||
dispatch.runtime.setLayerSetting({ contour: newContourSetting })
|
||||
}
|
||||
|
||||
// useEffect(() => {
|
||||
// let timer = setTimeout(() => {
|
||||
// genWeatherContour24H()
|
||||
// },0)
|
||||
// return () => {
|
||||
// clearTimeout(timer)
|
||||
// }
|
||||
// }, [])
|
||||
useEffect(() => {
|
||||
genWeatherContour24H()
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<div className={classes.root}>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,67 @@
|
|||
import React from 'react';
|
||||
|
||||
import Dialog from '@material-ui/core/Dialog';
|
||||
import DialogContent from '@material-ui/core/DialogContent';
|
||||
import DpPaperComponent from '../../../../layouts/mui/DpPaperCompanent';
|
||||
import { FormGroup, MenuItem, Select, Switch, Typography } from '@material-ui/core';
|
||||
import DpDialogTitle from '../../../../layouts/mui/DpDialogTitle';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import { getLayerSetting, getLayerVisible } from '../../../../models/map/selectors';
|
||||
import DpBackgroundDrop from '../../../../layouts/mui/DpBackdrop';
|
||||
|
||||
|
||||
function Setting({ onClose }) {
|
||||
const layerVisible = useSelector(getLayerVisible);
|
||||
const layerSetting = useSelector(getLayerSetting);
|
||||
|
||||
const dispath = useDispatch();
|
||||
|
||||
return (
|
||||
<Dialog
|
||||
open={true}
|
||||
onClose={onClose}
|
||||
maxWidth="xl"
|
||||
style={{ borderRadius: 0 }}
|
||||
PaperComponent={DpPaperComponent}
|
||||
BackdropComponent={DpBackgroundDrop}
|
||||
>
|
||||
<div className="boxhead"></div>
|
||||
|
||||
<DpDialogTitle>实时雨量显示设置</DpDialogTitle>
|
||||
<DialogContent>
|
||||
<div style={{ width: 320, padding: '1rem 0' }}>
|
||||
<FormGroup>
|
||||
<div style={{ marginBottom: '2rem' }}>
|
||||
<Typography variant="subtitle2">地图实时雨量显示雨量时段</Typography>
|
||||
<Select
|
||||
style={{ fontSize: '1.2rem' }}
|
||||
fullWidth
|
||||
value={layerSetting.drplabel}
|
||||
onChange={(event) => dispath.map.setLayerSetting({ drplabel: event.target.value })}
|
||||
>
|
||||
<MenuItem value="h1">小时雨量</MenuItem>
|
||||
<MenuItem value="h3">3小时雨量</MenuItem>
|
||||
<MenuItem value="h6">6小时雨量</MenuItem>
|
||||
<MenuItem value="h12">12小时雨量</MenuItem>
|
||||
<MenuItem value="h24">24小时雨量</MenuItem>
|
||||
<MenuItem value="h48">48小时雨量</MenuItem>
|
||||
</Select>
|
||||
</div>
|
||||
<div style={{ marginBottom: '1rem' }}>
|
||||
<Typography variant="subtitle2">显示实时雨量图层</Typography>
|
||||
<Switch
|
||||
checked={!!layerVisible.RealDrpLayer}
|
||||
color="primary"
|
||||
edge="start"
|
||||
onChange={(e) => dispath.map.setLayerVisible({ RealDrpLayer: e.target.checked })}
|
||||
/>
|
||||
</div>
|
||||
</FormGroup>
|
||||
</div>
|
||||
</DialogContent>
|
||||
<div className="boxfoot"></div>
|
||||
</Dialog>
|
||||
)
|
||||
}
|
||||
|
||||
export default Setting;
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
import React, { useEffect, useRef } from 'react';
|
||||
import * as echarts from 'echarts';
|
||||
|
||||
const ProcessChart = () => {
|
||||
const chartRef = useRef(null);
|
||||
|
||||
useEffect(() => {
|
||||
const chart = echarts.init(chartRef.current);
|
||||
|
||||
const option = {
|
||||
title: [{
|
||||
text: '总计',
|
||||
left: 'center',
|
||||
top: '42%',
|
||||
textStyle: {
|
||||
color: '#fff',
|
||||
fontSize: 20,
|
||||
fontWeight: 'normal'
|
||||
}
|
||||
}, {
|
||||
text: '250',
|
||||
left: 'center',
|
||||
top: '52%',
|
||||
textStyle: {
|
||||
color: '#fff',
|
||||
fontSize: 28,
|
||||
fontWeight: 'bold'
|
||||
}
|
||||
}],
|
||||
|
||||
series: [{
|
||||
name: '处理进度',
|
||||
type: 'pie',
|
||||
radius: ['55%', '90%'],
|
||||
center: ['50%', '50%'],
|
||||
startAngle: 90,
|
||||
label: {
|
||||
show: true,
|
||||
position: 'outside',
|
||||
formatter: '{c}',
|
||||
color: '#fff',
|
||||
fontSize: 14,
|
||||
distance: 5
|
||||
},
|
||||
labelLine: {
|
||||
show: true,
|
||||
length: 10,
|
||||
length2: 10,
|
||||
lineStyle: {
|
||||
color: '#fff'
|
||||
}
|
||||
},
|
||||
data: [
|
||||
{
|
||||
value: 7,
|
||||
name: '待处理',
|
||||
itemStyle: {
|
||||
color: '#5470c6'
|
||||
}
|
||||
},
|
||||
{
|
||||
value: 243,
|
||||
name: '已处理',
|
||||
itemStyle: {
|
||||
color: '#3fb950'
|
||||
}
|
||||
}
|
||||
]
|
||||
}]
|
||||
};
|
||||
|
||||
|
||||
chart.setOption(option);
|
||||
return () => {
|
||||
chart.dispose();
|
||||
};
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div
|
||||
ref={chartRef}
|
||||
style={{
|
||||
width: '200px',
|
||||
height: '220px'
|
||||
}}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
export default ProcessChart;
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
import React from 'react';
|
||||
import { makeStyles } from '@material-ui/core/styles';
|
||||
import Box from '@material-ui/core/Box';
|
||||
import Paper from '@material-ui/core/Paper';
|
||||
import Typography from '@material-ui/core/Typography';
|
||||
|
||||
const useStyles = makeStyles((theme) => ({
|
||||
root: {
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
gap: '20px',
|
||||
},
|
||||
row: {
|
||||
display: 'flex',
|
||||
gap: '20px',
|
||||
justifyContent: 'flex-start',
|
||||
},
|
||||
card: {
|
||||
width: '200px',
|
||||
height: '100px',
|
||||
padding: '16px',
|
||||
// background: 'linear-gradient(135deg, rgba(9, 70, 113,0.5) 0%, rgba(9, 70, 113,0.8) 100%)',
|
||||
background:'rgba(6, 43, 78,.5)',
|
||||
border: '1px solid rgba(9, 70, 113,1)',
|
||||
borderRadius: '8px',
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
justifyContent: 'space-between',
|
||||
alignItems:'center',
|
||||
backdropFilter: 'blur(10px)',
|
||||
},
|
||||
title: {
|
||||
color: '#fff',
|
||||
fontSize: '16px',
|
||||
fontWeight: 'normal',
|
||||
},
|
||||
count: {
|
||||
color: '#04f21c',
|
||||
fontSize: '24px',
|
||||
fontWeight: 'bold',
|
||||
},
|
||||
}));
|
||||
|
||||
const PatrolStatistics = () => {
|
||||
const classes = useStyles();
|
||||
|
||||
const patrolTypes = [
|
||||
{ title: '日常巡查', count: 456 },
|
||||
{ title: '汛期巡查', count: 32 },
|
||||
{ title: '特别巡查', count: 3 },
|
||||
];
|
||||
|
||||
const patrolStatus = [
|
||||
{ title: '已完成', count: 456 },
|
||||
{ title: '未完成', count: 32 },
|
||||
{ title: '进行中', count: 3 },
|
||||
];
|
||||
|
||||
const StatCard = ({ title, count }) => (
|
||||
<Paper className={classes.card}>
|
||||
<Typography className={classes.title}>{title}</Typography>
|
||||
<Typography className={classes.count}>{count} <span style={{fontSize:16,color:"#fff",fontWeight:'normal'}}>次</span></Typography>
|
||||
</Paper>
|
||||
);
|
||||
|
||||
return (
|
||||
<Box className={classes.root}>
|
||||
<Box className={classes.row}>
|
||||
{patrolTypes.map((item, index) => (
|
||||
<StatCard key={`type-${index}`} {...item} />
|
||||
))}
|
||||
</Box>
|
||||
<Box className={classes.row}>
|
||||
{patrolStatus.map((item, index) => (
|
||||
<StatCard key={`status-${index}`} {...item} />
|
||||
))}
|
||||
</Box>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
export default PatrolStatistics;
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
import React from 'react';
|
||||
|
||||
import Dialog from '@material-ui/core/Dialog';
|
||||
import DialogContent from '@material-ui/core/DialogContent';
|
||||
import DpPaperComponent from '../../../../layouts/mui/DpPaperCompanent';
|
||||
import { FormGroup, MenuItem, Select, Switch, Typography } from '@material-ui/core';
|
||||
import DpDialogTitle from '../../../../layouts/mui/DpDialogTitle';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import { getLayerSetting, getLayerVisible } from '../../../../models/map/selectors';
|
||||
import DpBackgroundDrop from '../../../../layouts/mui/DpBackdrop';
|
||||
|
||||
|
||||
function Setting({ onClose }) {
|
||||
const layerVisible = useSelector(getLayerVisible);
|
||||
const layerSetting = useSelector(getLayerSetting);
|
||||
|
||||
const dispath = useDispatch();
|
||||
|
||||
return (
|
||||
<Dialog
|
||||
open={true}
|
||||
onClose={onClose}
|
||||
maxWidth="xl"
|
||||
style={{ borderRadius: 0 }}
|
||||
PaperComponent={DpPaperComponent}
|
||||
BackdropComponent={DpBackgroundDrop}
|
||||
>
|
||||
<div className="boxhead"></div>
|
||||
|
||||
<DpDialogTitle>实时雨量显示设置</DpDialogTitle>
|
||||
<DialogContent>
|
||||
<div style={{ width: 320, padding: '1rem 0' }}>
|
||||
<FormGroup>
|
||||
<div style={{ marginBottom: '2rem' }}>
|
||||
<Typography variant="subtitle2">地图实时雨量显示雨量时段</Typography>
|
||||
<Select
|
||||
style={{ fontSize: '1.2rem' }}
|
||||
fullWidth
|
||||
value={layerSetting.drplabel}
|
||||
onChange={(event) => dispath.map.setLayerSetting({ drplabel: event.target.value })}
|
||||
>
|
||||
<MenuItem value="h1">小时雨量</MenuItem>
|
||||
<MenuItem value="h3">3小时雨量</MenuItem>
|
||||
<MenuItem value="h6">6小时雨量</MenuItem>
|
||||
<MenuItem value="h12">12小时雨量</MenuItem>
|
||||
<MenuItem value="h24">24小时雨量</MenuItem>
|
||||
<MenuItem value="h48">48小时雨量</MenuItem>
|
||||
</Select>
|
||||
</div>
|
||||
<div style={{ marginBottom: '1rem' }}>
|
||||
<Typography variant="subtitle2">显示实时雨量图层</Typography>
|
||||
<Switch
|
||||
checked={!!layerVisible.RealDrpLayer}
|
||||
color="primary"
|
||||
edge="start"
|
||||
onChange={(e) => dispath.map.setLayerVisible({ RealDrpLayer: e.target.checked })}
|
||||
/>
|
||||
</div>
|
||||
</FormGroup>
|
||||
</div>
|
||||
</DialogContent>
|
||||
<div className="boxfoot"></div>
|
||||
</Dialog>
|
||||
)
|
||||
}
|
||||
|
||||
export default Setting;
|
||||
|
|
@ -0,0 +1,186 @@
|
|||
import React, { useMemo, useState } from 'react';
|
||||
import useRequest from '../../../../utils/useRequest';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import PanelBox from '../../components/PanelBox';
|
||||
|
||||
import Table from '@material-ui/core/Table';
|
||||
import TableContainer from '@material-ui/core/TableContainer';
|
||||
import TableBody from '@material-ui/core/TableBody';
|
||||
import TableHead from '@material-ui/core/TableHead';
|
||||
import TableRow from '@material-ui/core/TableRow';
|
||||
import DpTableCell from '../../../../layouts/mui/DpTableCell';
|
||||
import DpTableRow from '../../../../layouts/mui/DpTableRow';
|
||||
import clsx from 'clsx';
|
||||
import { renderDrp } from '../../../../utils/renutils';
|
||||
import XcCard from './xcCard'
|
||||
import config from '../../../../config';
|
||||
|
||||
const data = [
|
||||
|
||||
{
|
||||
"guid": "42118120003",
|
||||
"code": "",
|
||||
"name": "浮桥河水库-汛前检查",
|
||||
"resRegCode": "42000020030-A4",
|
||||
"adName": "白果镇",
|
||||
"engScal": "大(2)型",
|
||||
"place": "湖北省-黄冈市-麻城市-白果镇",
|
||||
"lgtd": "115.068090",
|
||||
"lttd": "31.026170",
|
||||
'username': '熊杰',
|
||||
taskType: '日常巡查',
|
||||
tm: '2025-06-02 00:08:00',
|
||||
status: '进行中'
|
||||
},
|
||||
{
|
||||
"guid": "42118120003",
|
||||
"code": "",
|
||||
"name": "浮桥河水库-特别巡查",
|
||||
"resRegCode": "42000020030-A4",
|
||||
"adName": "白果镇",
|
||||
"engScal": "大(2)型",
|
||||
"place": "湖北省-黄冈市-麻城市-白果镇",
|
||||
"lgtd": "115.068090",
|
||||
"lttd": "31.026170",
|
||||
'username': '白斌',
|
||||
taskType: '汛前巡查',
|
||||
tm: '2025-06-02 00:09:00',
|
||||
status: '已完成'
|
||||
},
|
||||
{
|
||||
"guid": "42118120003",
|
||||
"code": "",
|
||||
"name": "明山水库-日常管理",
|
||||
"resRegCode": "42000020030-A4",
|
||||
"adName": "白果镇",
|
||||
"engScal": "大(2)型",
|
||||
"place": "湖北省-黄冈市-麻城市-白果镇",
|
||||
"lgtd": "115.068090",
|
||||
"lttd": "31.026170",
|
||||
'username': '余静',
|
||||
taskType: '特别巡查',
|
||||
tm: '2025-06-02 00:10:00',
|
||||
status: '未完成'
|
||||
},
|
||||
{
|
||||
"guid": "42118120003",
|
||||
"code": "",
|
||||
"name": "永红水库-日常管理",
|
||||
"resRegCode": "42000020030-A4",
|
||||
"adName": "白果镇",
|
||||
"engScal": "大(2)型",
|
||||
"place": "湖北省-黄冈市-麻城市-白果镇",
|
||||
"lgtd": "115.068090",
|
||||
"lttd": "31.026170",
|
||||
'username': '周真',
|
||||
taskType: '特别巡查',
|
||||
tm: '2025-06-02 00:10:00',
|
||||
status: '未完成'
|
||||
},
|
||||
{
|
||||
"guid": "42118120003",
|
||||
"code": "",
|
||||
"name": "永丰水库-汛前检查",
|
||||
"resRegCode": "42000020030-A4",
|
||||
"adName": "白果镇",
|
||||
"engScal": "大(2)型",
|
||||
"place": "湖北省-黄冈市-麻城市-白果镇",
|
||||
"lgtd": "115.068090",
|
||||
"lttd": "31.026170",
|
||||
'username': '陈发',
|
||||
taskType: '特别巡查',
|
||||
tm: '2025-06-02 00:10:00',
|
||||
status: '未完成'
|
||||
},
|
||||
]
|
||||
|
||||
function DrpReal({ style }) {
|
||||
const [tab, setTab] = useState('1')
|
||||
const dispatch = useDispatch();
|
||||
const flyTo = () => {
|
||||
dispatch?.runtime.setInfoDlg({ layerId: 'XunchachaoshiLayer', properties: {} })
|
||||
}
|
||||
const jumpTo = (record) => {
|
||||
const { lgtd, lttd } = record;
|
||||
if (lgtd && lttd) {
|
||||
dispatch.runtime.setCameraTarget({
|
||||
center: [lgtd, lttd + config.poiPositionOffsetY.hd],
|
||||
zoom: config.poiPositionZoom.hd,
|
||||
pitch: config.poiPitch,
|
||||
});
|
||||
}
|
||||
}
|
||||
return (
|
||||
<PanelBox
|
||||
style={style}
|
||||
title="巡查任务总览"
|
||||
color="green"
|
||||
extra={
|
||||
<span className="button-group">
|
||||
<span className={clsx({ active: tab === '1' })} onClick={() => setTab('1')}>本月</span>
|
||||
<span className={clsx({ active: tab === '2' })} onClick={() => setTab('2')}>本年</span>
|
||||
</span>
|
||||
}
|
||||
>
|
||||
<div className='skyb-box'>
|
||||
<div className='rain-yb'>
|
||||
<div className='title-yb'>巡查任务</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style={{ padding: 10 }}>
|
||||
<XcCard />
|
||||
</div>
|
||||
<TableContainer>
|
||||
<Table size="small" stickyHeader>
|
||||
<TableHead>
|
||||
<TableRow>
|
||||
<DpTableCell style={{ width: '20%' }} align="center">任务标题</DpTableCell>
|
||||
<DpTableCell style={{ width: '20%' }} align="center">任务类型</DpTableCell>
|
||||
<DpTableCell style={{ width: '20%' }} align="center">巡查人</DpTableCell>
|
||||
<DpTableCell style={{ width: '20%' }} align="center">巡查时间</DpTableCell>
|
||||
<DpTableCell style={{ width: '20%' }} align="center">状态</DpTableCell>
|
||||
</TableRow>
|
||||
</TableHead>
|
||||
<TableBody>
|
||||
{data.map((row, index) => (
|
||||
<DpTableRow key={row.stcd}
|
||||
// onClick={() => jumpTo(row)}
|
||||
>
|
||||
<DpTableCell align="center">
|
||||
<div
|
||||
className="table-ellipsis cursor-pointer"
|
||||
>{row.name}</div>
|
||||
</DpTableCell>
|
||||
<DpTableCell align="center">{row.taskType}</DpTableCell>
|
||||
<DpTableCell align="center">{row.username}</DpTableCell>
|
||||
<DpTableCell align="center">
|
||||
<div
|
||||
className="table-ellipsis cursor-pointer"
|
||||
> {row.tm}</div>
|
||||
</DpTableCell>
|
||||
<DpTableCell align="center">{row.status}</DpTableCell>
|
||||
</DpTableRow>
|
||||
))}
|
||||
</TableBody>
|
||||
</Table>
|
||||
</TableContainer>
|
||||
<div className='skyb-box' style={{ marginTop: 50 }}>
|
||||
<div className='rain-yb'>
|
||||
<div className='title-yb'>数据统计</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<img src={`${process.env.PUBLIC_URL}/assets/sjtj1.jpg`} alt="" style={{ width: 420 }} />
|
||||
<div style={{ position: 'relative' }}>
|
||||
<img src={`${process.env.PUBLIC_URL}/assets/sjti2.png`} alt="" style={{ width: 205, height: 72 }} />
|
||||
<img src={`${process.env.PUBLIC_URL}/assets/gantanh.png`} alt=""
|
||||
style={{ width: 20, position: 'absolute', top: 12, left: 145, cursor: 'pointer' }}
|
||||
onClick={flyTo}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</PanelBox>
|
||||
)
|
||||
}
|
||||
|
||||
export default DrpReal;
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
import React from 'react';
|
||||
import { makeStyles } from '@material-ui/core/styles';
|
||||
import Box from '@material-ui/core/Box';
|
||||
import Paper from '@material-ui/core/Paper';
|
||||
import Typography from '@material-ui/core/Typography';
|
||||
|
||||
const useStyles = makeStyles((theme) => ({
|
||||
root: {
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
gap: '20px',
|
||||
},
|
||||
row: {
|
||||
display: 'flex',
|
||||
gap: '20px',
|
||||
justifyContent: 'flex-start',
|
||||
},
|
||||
card: {
|
||||
width: '200px',
|
||||
height: '100px',
|
||||
padding: '16px',
|
||||
// background: 'linear-gradient(135deg, rgba(9, 70, 113,0.5) 0%, rgba(9, 70, 113,0.8) 100%)',
|
||||
background:'rgba(6, 43, 78,.5)',
|
||||
border: '1px solid rgba(9, 70, 113,1)',
|
||||
borderRadius: '8px',
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
justifyContent: 'space-between',
|
||||
alignItems:'center',
|
||||
backdropFilter: 'blur(10px)',
|
||||
},
|
||||
title: {
|
||||
color: '#fff',
|
||||
fontSize: '16px',
|
||||
fontWeight: 'normal',
|
||||
},
|
||||
count: {
|
||||
color: '#04f21c',
|
||||
fontSize: '24px',
|
||||
fontWeight: 'bold',
|
||||
},
|
||||
}));
|
||||
|
||||
const PatrolStatistics = () => {
|
||||
const classes = useStyles();
|
||||
|
||||
const patrolTypes = [
|
||||
{ title: '日常巡查', count: 456 },
|
||||
{ title: '汛期巡查', count: 32 },
|
||||
{ title: '特别巡查', count: 3 },
|
||||
];
|
||||
|
||||
const patrolStatus = [
|
||||
{ title: '已完成', count: 456 },
|
||||
{ title: '未完成', count: 32 },
|
||||
{ title: '进行中', count: 3 },
|
||||
];
|
||||
|
||||
const StatCard = ({ title, count }) => (
|
||||
<Paper className={classes.card}>
|
||||
<Typography className={classes.title}>{title}</Typography>
|
||||
<Typography className={classes.count}>{count} <span style={{fontSize:16,color:"#fff",fontWeight:'normal'}}>次</span></Typography>
|
||||
</Paper>
|
||||
);
|
||||
|
||||
return (
|
||||
<Box className={classes.root}>
|
||||
<Box className={classes.row}>
|
||||
{patrolTypes.map((item, index) => (
|
||||
<StatCard key={`type-${index}`} {...item} />
|
||||
))}
|
||||
</Box>
|
||||
<Box className={classes.row}>
|
||||
{patrolStatus.map((item, index) => (
|
||||
<StatCard key={`status-${index}`} {...item} />
|
||||
))}
|
||||
</Box>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
export default PatrolStatistics;
|
||||
|
|
@ -270,7 +270,7 @@ const householdData = [
|
|||
|
||||
<div className="divider"></div>
|
||||
|
||||
<div className="section-title">预警指标</div>
|
||||
{/* <div className="section-title">预警指标</div>
|
||||
<div className="warning-item">
|
||||
<span className="label">准备转移:</span>
|
||||
<span className="value">1小时-mm; 3小时-mm; 6小时-mm</span>
|
||||
|
|
@ -278,7 +278,7 @@ const householdData = [
|
|||
<div className="warning-item">
|
||||
<span className="label">立即转移:</span>
|
||||
<span className="value">1小时-mm; 3小时-mm; 6小时-mm</span>
|
||||
</div>
|
||||
</div> */}
|
||||
|
||||
<div className="divider"></div>
|
||||
|
||||
|
|
|
|||
|
|
@ -72,9 +72,9 @@ export default function Warn({ style }) {
|
|||
}
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
setValue(res.yy)
|
||||
}, [res])
|
||||
// useEffect(() => {
|
||||
// setValue(res.yy)
|
||||
// }, [res])
|
||||
const switchChange = (e) => {
|
||||
const val = e.target.checked
|
||||
setChecked(val)
|
||||
|
|
@ -102,6 +102,7 @@ export default function Warn({ style }) {
|
|||
} else if (selectedSchemes.length < 2) {
|
||||
setSelectedSchemes([...selectedSchemes, schemeId]);
|
||||
}
|
||||
// dispatch.runtime.setYyfa({})
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
|
|
@ -109,7 +110,14 @@ export default function Warn({ style }) {
|
|||
}, [selectedSchemes])
|
||||
|
||||
const productFa = () => {
|
||||
dispatch?.runtime.setInfoDlg({ layerId: 'YuananLayer', properties: {} })
|
||||
dispatch?.runtime.setInfoDlg({ layerId: 'YuananLayer', properties: {} })
|
||||
dispatch.runtime.setYyfa({})
|
||||
|
||||
}
|
||||
const changeYY = (e) => {
|
||||
setValue(e.target.value)
|
||||
|
||||
dispatch.runtime.setYyfa({})
|
||||
}
|
||||
return (
|
||||
<PanelBox
|
||||
|
|
@ -127,7 +135,7 @@ export default function Warn({ style }) {
|
|||
<FormControl fullWidth>
|
||||
<RadioGroup
|
||||
value={value}
|
||||
onChange={(e) => setValue(e.target.value)}
|
||||
onChange={changeYY}
|
||||
|
||||
>
|
||||
{
|
||||
|
|
|
|||