xielei 2024-09-29 17:19:33 +08:00
commit d58fd30476
29 changed files with 3065 additions and 1563 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -49,7 +49,7 @@ export const HDRealPromiseWX = new CachePromise(
// })
// .catch(() => null),
// 5000
() => httppost2(apiurl.station.gaugingStation.list, {"sources": ["SW","SH"],"args": ""})
() => httppost2(apiurl.station.gaugingStation.list)
.then(({ data }) => data || [])
.then((data) => {
// if (config.notShowPOI?.hd) {

View File

@ -9,7 +9,7 @@ function initState() {
AdcdLayer: false,//行政区划
AdcdBorderInLayer: true,//乡镇边界
AdcdAllLayer: false,//县行政区划图层
HeLiuZhuJiLayer:true,//12条河流注记
HeLiuZhuJiLayer:false,//12条河流注记
RealDrpLayer: false,//雨量监测
RealDrpAllLayer: false,//监测站网-雨情站点
HdswLayer: false,//河道水位监测
@ -30,7 +30,7 @@ function initState() {
BouaOutLayer: false,//咸丰县边界_省外
BouaOutsideLayer:true,//咸丰县以外边界
highroadLayer:false,//省级公路
highroadLayer:true,//省级公路
jcsjLayer:true,//监测数据

View File

@ -122,8 +122,8 @@ export const runtime = createModel<RootModel>()({
...state,
cameraTarget: {
bound: [
[114.966, 31.459, 0],
[114.976, 31.479, 0],
[114.746, 31.479, 0],
[114.776, 31.509, 0],
],
zoom: localStorage.getItem('mapZoom'),
pitch: config.homePitch,

View File

@ -103,6 +103,11 @@ const apiurl = {
gsPage: service_fxdd + "/stWaterR/list",//供水分页
yj_qxyj: service_fxdd + "/stQxWarnR/home/warn",//首页气象预警
xcxj_dcl: service_fxdd + "/inspect/detail/handle/list",//巡查巡检-待处理问题
xcxj_by: service_fxdd + "/inspect/task/month",//巡查巡检-本月巡查记录
xcxj_bn: service_fxdd + "/inspect/task/year",//巡查巡检-本年巡查记录
},
//防汛调度-小玉潭
fxdd_xyt: {

View File

@ -34,7 +34,7 @@ export default class Map2D extends BaseMap {
init() {
console.log("++++++++++初始化地图、图层++++++++++");
// const extent = [114.65, 30.85 , 115.48, 31.60]; //视图中心位置
const extent = [114.966, 31.459 , 114.976, 31.479]; //视图中心位置
const extent = [114.746, 31.479 , 114.776, 31.509]; //视图中心位置
console.log("@@@@ map init 38++++", extent);
// const fitE = [extent[0] + ew, extent[1] + eh, extent[2] - ew, extent[3] - eh];
@ -172,7 +172,7 @@ export default class Map2D extends BaseMap {
var view = map.getView();
var resolution = view.getResolution();
if (resolution <20){
if (resolution <120){
map && map.getLayers().getArray().forEach((layer)=> {
// if( (layer.values_.name) && ((layer.values_.name).indexOf("HL2Layer")>-1) ){
if( (layer.values_.name) && ((layer.values_.name).indexOf("highroadLayer")>-1) ){

View File

@ -117,7 +117,7 @@ export default class LayerMgr2D extends LayerMgr {
this.addLayer(new SatelliteImage2D({ visible: visible[SatelliteImage2D.LayerName], setting, dispatch }));
//乡镇边界
this.addLayer(new AdcdBorderInLayer2D({ visible: visible[AdcdBorderInLayer2D.LayerName], setting, dispatch }));
//咸丰县外的边界
//县外的边界
// this.addLayer(new BouaOutsideLayer2D({ visible: visible[BouaOutsideLayer2D.LayerName], setting, dispatch }));

View File

@ -45,7 +45,7 @@ export default class BouaLayer2D extends POILayer2D {
async dataPromise() {
const address = localStorage.getItem('address');
const a1 = await fetch(`${process.env.PUBLIC_URL}/data/geojson/macheng/麻城市.geojson`)
const a1 = await fetch(`${process.env.PUBLIC_URL}/data/geojson/macheng/县界.geojson`)
.then(resp => resp.json())
.then(data => data.features)
.then(features => features.map(o => ({

View File

@ -112,7 +112,7 @@ export default class HLLayer2D extends POILayer2D {
return null;
}
const RVNM = e.props.RVNM
const LEVEL = e.props.LEVEL
const LEVEL = e.props.LEVEL || e.props.LEVLE
return this.getStyle(RVNM,LEVEL);
}
}

View File

@ -14,7 +14,7 @@ export default class highroadLayer2D extends POILayer2D {
this._style1 = new Style({
zIndex: 6,//zindex2d.boua2,
stroke: new StrokeStyle({
color: '#d5d5d9',//'rgba(138,189,165)',
color: 'rgba(138,189,165,0.1)',
width: 4,
}),
});

View File

@ -30,11 +30,11 @@ function renderMarker({ status, warning }, { width, highlight }) {
// }
return `
<div style="cursor:pointer">
<svg t="1619076397355" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4205" width="${width}" height="${width}">
<path d="M512 25.6l277.94432 972.8H234.05568z" fill="${color1}" p-id="4206" data-spm-anchor-id="a313x.7781069.0.i9" class="selected"></path>
<path d="M512 164.57216l208.45568 764.34432H303.54432z" fill="${color1}" p-id="4207" data-spm-anchor-id="a313x.7781069.0.i6" class=""></path>
</svg>
<div style="position:relative">
<svg t="1616148185046" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4230" width="${width}">
</svg>
<img width="${width}" style="position:absolute;top:0;left:0" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAA1CAYAAAAgYencAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAJLSURBVFhHxZk/T8JAGIcBo8HBhMTFmDgbJ930Uxg/pnECYqJlUiZ10k033dRFoiCl/LO/9lqupXd977w7nqW9K4GH6/v+eoRqtV6tbxxvnlRWwNyf+5HAzuf+F45s3hnDi+/zGixGnf41m3NK+LleDSd++6cVzTjGb/ebsYA3cL4Cwf3wbtab9iKB2cfkHRPRFUeMOgMPx0gAJBOuCG97E8dUIJlwwfRt/Dp+8h9xngpgAhfY0Cq+t+i6VADwF2wSVn/adVkB7oItkDtBd3DDhlkBXMAL2NAKCD3+MzICLlIxH3oZAWA7FfOhtyxgMRWj9AtDjw0jlgRspmJR2C0JAFupWBR2hQI2UhErm6QfT6GAjVQU1VahADCdiqLuEgsYTEVZvggFTKai7L2EAiZTUbaaQgFgKhVl9SQXMJCKZR0lFTCRimXFLBUA/03FsjoiCOgXImUFSwWKnmBUKDVUKgB0i5HSRTQBjXZEjgTd33TvJ4IkgDpQTcXxQ/zTiw2FkATib7PYyVIYtmirRhIAqg8n6p6CLqDweJ68BM/U/QRZgP89Vwb12wOyAKDehrBoyempJEBJRVT+6La8/RKUBCipGK6S0oZWSQCUpaLK8gN1AUkqxrsotdhWFpClIjX9eJQFZKlITT8eZQEgakdKl+TREyhIRQQVEpANyWgJFKWiSvrxaAmA/G3Q2TMAbQH+fqPydXfP2gJ8KqL3VTcsCdoCIElF1fQzRv1062w3OJjXGmsNNuUW/Muyfbl3xYarYf2wfsRONahU/gBd1OeNjK84SwAAAABJRU5ErkJggg=="
alt="" className="panel-icon" />
</div>
`;
}
@ -55,7 +55,7 @@ function HdswMarker({ data, dispatch, setting, zoom, distSq }) {
}
useEffect(() => {
const width = 12;
const width = 8;
const placeholder = document.getElementById(`marker_hdsw_${data.id}`);
if (!placeholder) {

View File

@ -137,12 +137,12 @@ function HdswPop({ id, dispatch, data }) {
{/* <Tabs.TabPane tab="" key="3">
<Txjc record={data}/>
</Tabs.TabPane> */}
<Tabs.TabPane tab="视频监测" key="4">
{/* <Tabs.TabPane tab="" key="4">
<Spjc record={data}/>
</Tabs.TabPane>
<Tabs.TabPane tab="周边雨情" key="5">
</Tabs.TabPane> */}
{/* <Tabs.TabPane tab="" key="5">
<DrpStAround data={data}/>
</Tabs.TabPane>
</Tabs.TabPane> */}
</Tabs>
</Modal>

View File

@ -0,0 +1,62 @@
import React, { useEffect, useState } from 'react';
import moment from "moment"
import {
CloseOutlined,
} from '@ant-design/icons';
import { Modal, Tabs } from 'antd';
import Sqjcsj from '../components/Sqjcsj'
import Swllgx from '../components/Swllgx'
import './TangYanBa.less'
function HdswPop2({ id, data, dispatch }) {
const closePop = () => {
dispatch.runtime.closeFeaturePop(id);
};
const width = 1050;
return (
<>
<div className="dp-popup" style={{ position: 'absolute', top: 0, width,left: 0,height:646, lineHeight: 1,backgroundColor:'#fff',borderRadius:'10px'}}>
<div className="dp-popup-content" style={{height:'100%',borderRadius:'10px'}}>
<div className="content-body tyb skpop" id='tyb' style={{ height: '100%' }}>
<div className="normalModalStyle" style={{borderRadius:10}}>
<div className="normalModalStyle_title" style={{marginBottom:0}}>
<div className="normalModalStyle_title_icon"></div>
<span>{data?.name}&emsp;</span>
{data?.sttp &&
<span style={
{
display:"inline-block",
padding: "5px 10px",
color: "#74a7ff",
border: "1px solid #74a7ff",
borderRadius: "5px"
}
}> {{MM: '气象站',PP: '雨量站',RR: '水库水文站',ZZ: '河道水位站',ZQ:"河道水文站"}?.[data?.sttp]}{{'SH':'山洪','SW':'水文','QX':'气象','SK':'水库'}?.[data.source]}</span>}
<div className="normalModalStyle_title_cancel">
<CloseOutlined onClick={closePop} style={{color:"#333"}}/>
</div>
</div>
<div style={{paddingLeft:15}}>
<Tabs defaultActiveKey="1">
<Tabs.TabPane tab="监测数据" key="1">
<Sqjcsj record={data}/>
</Tabs.TabPane>
<Tabs.TabPane tab="水位流量关系" key="2">
<Swllgx record={data}/>
</Tabs.TabPane>
</Tabs>
</div>
</div>
</div >
<div className="boxfoot"></div>
</div>
</div>
</>
)
}
export default React.memo(HdswPop2);

View File

@ -36,7 +36,7 @@ function Wxq({ id, data, dispatch }) {
<div className="title">
<div className="name flex flexac">
<div className='nameBorder'></div>
{data.name || detail?.name}
{data.NAME || detail?.name}
</div>
<div className="extra">
<CloseOutlined onClick={closePop} style={{color:"#333"}}/>

View File

@ -4,6 +4,7 @@ import { useDispatch, useSelector } from 'react-redux'
import PciStPop from './PciStPop';
import HdswPop from './HdswPop';
import HdswPop2 from './HdswPop2'
import ShuikuPop from './ShuikuPop';
import ShuikuPop2 from './ShuikuPop2'
import ShuiDianZhanPop from './ShuiDianZhanPop';
@ -88,7 +89,12 @@ function FeaturePops({ mapobj }) {
</Modal>
)
}else if (type === 'hdsw') {
Comp = HdswPop;
// Comp = HdswPop;
return (
<Modal width={1050} wrapClassName='home_modal' bodyStyle={{padding:0}} title={null} closable={false} footer={null} open={true} onCancel={()=>dispatch.runtime.closeFeaturePop(id)} destroyOnClose={true}>
<HdswPop2 id={id} data={data} dispatch={dispatch} record={data}/>
</Modal>
)
}else if (type === 'shuiku' || type === InfoPopNames.RealSkPop) {
// 水库
// Comp = ShuikuPop;

View File

@ -24,7 +24,7 @@ export default function TuLi() {
<div className='homePage_tuli2_row_item_icon2'>
<img width={13} height={13} src={`${process.env.PUBLIC_URL}/assets/xyt/homeImg/shi.png`} alt="" />
</div>
<div className='homePage_tuli2_row_item_text2'>麻城市</div>
<div className='homePage_tuli2_row_item_text2'>红安县</div>
</div>
</div>

View File

@ -24,7 +24,7 @@ export default function TuLi() {
<div className='homePage_tuli2_row_item_icon2'>
<img width={13} height={13} src={`${process.env.PUBLIC_URL}/assets/xyt/homeImg/shi.png`} alt="" />
</div>
<div className='homePage_tuli2_row_item_text2'>麻城市</div>
<div className='homePage_tuli2_row_item_text2'>红安县</div>
</div>
</div>

View File

@ -24,7 +24,7 @@ export default function TuLi() {
<div className='homePage_tuli2_row_item_icon2'>
<img width={13} height={13} src={`${process.env.PUBLIC_URL}/assets/xyt/homeImg/shi.png`} alt="" />
</div>
<div className='homePage_tuli2_row_item_text2'>麻城市</div>
<div className='homePage_tuli2_row_item_text2'>红安县</div>
</div>
</div>

View File

@ -24,7 +24,7 @@ export default function TuLi() {
<div className='homePage_tuli2_row_item_icon2'>
<img width={13} height={13} src={`${process.env.PUBLIC_URL}/assets/xyt/homeImg/shi.png`} alt="" />
</div>
<div className='homePage_tuli2_row_item_text2'>麻城市</div>
<div className='homePage_tuli2_row_item_text2'>红安县</div>
</div>
</div>

View File

@ -131,7 +131,7 @@ const HomePage = ({showPanels}) => {
setCheckedObj({ key:'21', label:'巡查巡检', labelRight:'工程巡检', icon:'shuiku' })
}else if(a==='3'){
dispatch.runtime.setCameraTarget({
center: [114.96, 31.453],
center: [114.75, 31.493],
zoom: 13.5,
pitch: 60
})

View File

@ -12,9 +12,11 @@ const Page = () => {
console.log('aaa',data);
useEffect(()=>{
dispatch.map.setLayerVisible({ ShuiKuLayer: true })
dispatch.map.setLayerVisible({ HdswLayer: true })
getData()
return ()=>{
dispatch.map.setLayerVisible({ ShuiKuLayer: false })
dispatch.map.setLayerVisible({ HdswLayer: false })
}
},[])

View File

@ -21,41 +21,52 @@ const Page = ({mySetTms}) => {
const dispatch = useDispatch();
let mapObj = useSelector(s => s.map.map)
const [ dataObj, setDataObj ] = useState({})
const [ open, setOpen ] = useState(false)
const [ key , setkey ] = useState('')
const [ tms , setTms ] = useState([
moment().add(-1,'days').format('YYYY-MM-DD HH:mm:ss'),
moment().format('YYYY-MM-DD HH:mm:ss'),
])
const [ data, setData ] = useState([])
const [ data2, setData2 ] = useState([])
const [ data3, setData3 ] = useState(0)
const columns1 = [
{ title: '巡查完成日期', key: 'stnm', dataIndex: 'stnm',align: "center", ellipsis: true },
{ title: '巡查人', key: 'drp', dataIndex: 'drp',align: "center" },
{ title: '异常项次', key: 'drp', dataIndex: 'drp',align: "center" },
{ title: '巡查完成日期', key: 'finishTime', dataIndex: 'finishTime',align: "center", ellipsis: true },
{ title: '巡查人', key: 'inspectUserName', dataIndex: 'inspectUserName',align: "center" },
{ title: '异常项次', key: 'problemNum', dataIndex: 'problemNum',align: "center" },
];
const columns2 = [
{ title: '上报时间', key: 'stnm', dataIndex: 'stnm',align: "center", ellipsis: true },
{ title: '巡检问题描述', key: 'drp', dataIndex: 'drp',align: "center" },
{ title: '上报时间', key: 'handleTime', dataIndex: 'handleTime',align: "center", ellipsis: true },
{ title: '巡检问题描述', key: 'problemDesc', dataIndex: 'problemDesc',align: "center" },
];
useEffect(()=>{
(async()=>{
const params = {
start:tms[0],
end:tms[1]
(
async()=>{
const { code, data } = await httppost2(apiurl.home.xcxj_dcl)
if(code!==200){
message.error('请求失败')
return
}
setData(data)
},
async()=>{
const { code, data } = await httppost2(apiurl.home.xcxj_by)
if(code!==200){
message.error('请求失败')
return
}
setData2(data)
},
async()=>{
const { code, data } = await httppost2(apiurl.home.xcxj_bn)
if(code!==200){
message.error('请求失败')
return
}
setData3(data)
}
const { code, data } = await httppost2(apiurl.home.yj_qxyj,params)
if(code!==200){
message.error('请求失败')
return
}
mySetTms([
moment(tms[0]),
moment(tms[1])
])
setDataObj(data)
})()
)()
},[])
@ -104,16 +115,16 @@ const Page = ({mySetTms}) => {
<div className="xunchaxunjian">
<div className="bodyBox">
<div className="bodyBoxItem">
<div className="num" style={{color:'#04D919'}}>{dataObj.qxWarn?.length||0}</div>
<div className="num" style={{color:'#04D919'}}>{data3||0}</div>
<div className="content">本月巡查</div>
</div>
<div className="bodyBoxItem">
<div className="num" style={{color:'#04D919'}}>{dataObj.shiftWarn?.length||0}</div>
<div className="num" style={{color:'#04D919'}}>{data2?.length||0}</div>
<div className="content">本年巡查</div>
<div></div>
</div>
<div className="bodyBoxItem">
<div className="num">{dataObj.pressWarn?.length||0}</div>
<div className="num">{data?.length||0}</div>
<div className="content">未处理异常</div>
<div></div>
</div>
@ -133,10 +144,7 @@ const Page = ({mySetTms}) => {
sticky
columns={columns1}
pagination={false}
dataSource={[
{stnm:'05-19 日常巡检',drp:10,data:{"type":"MultiLineString","coordinates":[[[108.946468916,29.839743716],[108.94648914,29.839752481],[108.946539808,29.839746046],[108.946613728,29.839728456],[108.946710354,29.839695317]]]}},
{stnm:'2',drp:11,data:{"type":"MultiLineString","coordinates":[[[108.81539631,29.812984419],[108.815424872,29.813001491],[108.815487593,29.813061075],[108.815576108,29.813157977],[108.815677919,29.813283716]]]}},
]}
dataSource={data2}
scroll={{ y: "300px"}}
onRow={
(data)=>({
@ -170,10 +178,7 @@ const Page = ({mySetTms}) => {
sticky
columns={columns2}
pagination={false}
dataSource={[
{stnm:'1',drp:10},
{stnm:'2',drp:11},
]}
dataSource={data}
scroll={{ y: "300px"}}
onRow={
(data)=>({

View File

@ -1,4 +1,5 @@
import React, { useEffect, useMemo, useState } from 'react'
import { Modal, Tabs, Descriptions, Image } from 'antd';
import { Stage } from 'react-konva';
import Sider from './Sider';
import Topper1 from './Topper1';
@ -10,6 +11,7 @@ import HFivePlayer from '../../../components/video1Plary'
import './index.less';
import { httpget, httpget2, httppost2 } from '../../../utils/request';
import apiurl from '../../../service/apiurl';
const url = "http://223.75.53.141:9102/test.by-lyf.tmp"
const CanvasW = 1080
const CanvasH = 640
const waterRatio = 0
@ -180,6 +182,7 @@ const Page = () => {
const [damList, setDamList ] = useState([])
const [videoList, setVideoList ] = useState([])
const [videoArr, setvideoArr] = useState({})
const [open, setOpen] = useState(false)
const hole = 3;//zmobj.gaorNum;
@ -235,7 +238,7 @@ const Page = () => {
}
const getVideoSrc = async (current) => {
const res = await httpget2(`${apiurl.gsxl.zfzl.videosrc}${'32023a7f27d8448fa10511f24e96acff'}`)
const res = await httpget2(`${apiurl.gsxl.zfzl.videosrc}${current}`)//32023a7f27d8448fa10511f24e96acff
if (res.code == 200 && res.data?.length !== 0) {
setvideoArr({src:res.data})
}else{
@ -338,11 +341,44 @@ const Page = () => {
}
</div>
</div>
<div className='sg_zmjk_right_more'>查看更多信息</div>
<div className='sg_zmjk_right_more' onClick={()=>setOpen(true)}>查看更多信息</div>
</dvi>
</div>
</div>
</div>
<Modal
open={open}
width={1000}
title=""
footer={null}
onCancel={() => {
setOpen(false)
}}
>
<div style={{height:'600px'}}>
<Tabs>
<Tabs.TabPane tab="基本信息" key="item-1">
<Descriptions bordered size="small" column={3} >
<Descriptions.Item label="启闭设备类型" style={{ width: '16.5%' }}>{{1:'卷扬式',2:'螺杆式',3:'凹轮式',4:'涡轮式',5:'丝杆式'}?.[data?.hdgrTp]||'-'}</Descriptions.Item>
<Descriptions.Item label="动力类型" style={{ width: '16.5%' }}>{{1:'手动',2:'电动',3:'手电两用'}?.[data?.pwrTp]||'-'}</Descriptions.Item>
<Descriptions.Item label="水闸类型" style={{ width: '16.5%' }}>{{1:'分(泄)洪闸',2:'节制闸',3:'排(退)水闸',4:'引(进)水闸',5:'挡潮闸',6:'船闸',9:'其他'}?.[data?.wagaType]||'-'}</Descriptions.Item>
<Descriptions.Item label="进口高程">{data?.inEle||'-'} m</Descriptions.Item>
<Descriptions.Item label="出口高程">{data?.outEle||'-'} m</Descriptions.Item>
<Descriptions.Item label="闸门孔数">{data?.gaorNum||'-'} </Descriptions.Item>
<Descriptions.Item label="设计流量">{data?.dsfl||'-'} /s</Descriptions.Item>
<Descriptions.Item label="实达流量">{data?.stfl||'-'} /s</Descriptions.Item>
<Descriptions.Item label="闸门尺寸">{data?.gateSize||'-'} m*m</Descriptions.Item>
<Descriptions.Item label="工程等级">{{1:'',2:'Ⅱ',3:'Ⅲ',4:'Ⅳ',5:''}?.[data?.engGrad]||'-'}</Descriptions.Item>
<Descriptions.Item label="运行状况">{{1:'在用良好',2:'在用故障',3:'停用'}?.[data?.runStat]||'-'}</Descriptions.Item>
<Descriptions.Item label="建成时间">{data?.compDate||'-'}</Descriptions.Item>
</Descriptions>
</Tabs.TabPane>
<Tabs.TabPane tab="工程图片" key="item-2">
<Image width={800} src={url + data?.files?.filePath} alt='' />
</Tabs.TabPane>
</Tabs>
</div>
</Modal>
</>
);
}