<template> <div class="pictureOnMap"> <TopTab /> <div class="mainContentBox"> <MapBox :initJson="`/static/libs/mapbox/style/wh_dhgx.json`" :loadCallback="loadCallback" @mapClick1="mapClick1"></MapBox> <router-view></router-view> <recordPage></recordPage> <LayerControl></LayerControl> </div> <el-dialog modal-class="pmpSitNewDialog" v-model="dialogConfig.visible" :append-to-body="true" style="height: 750px; width: 1200px" :destroy-on-close="true" :draggable="true" :z-index="999" > <DialogTabs :dataID="dialogConfig.dataID" :dataCode="dialogConfig.dataCode" :comIDs="dialogConfig.comIDs" :typeName="dialogConfig.typeName" :customComponents="dialogConfig.customData" :RefName="dialogConfig.RefName" :title="dialogConfig.title" :arrstcode="arrstcode" :arrid="arrid" :Getproperties="Getproperties" :Getmenuarr="Getmenuarr" @closeFun="closeFun" ></DialogTabs> </el-dialog> </div> </template> <script setup> import line from '../../../public/static/libs/mapbox/json/line.json'; import point from '../../../public/static/libs/mapbox/json/point.json'; import { ref, reactive, onMounted, nextTick } from 'vue'; import TopTab from './TopTab/index.vue'; import MapBox from '../../components/Map/MapBox'; import bus from '@/bus'; import useUserStore from '@/store/modules/user'; import DialogTabs from '@/views/pictureOnMap/page/components/DialogTabs/dialogTabs.vue'; import { drainageDispatchGetMenu } from '@/api/MonitorAssetsOnMap'; import recordPage from '@/views/voice/recordPage/index'; import usepartitionStore from '@/store/modules/partition'; import LayerControl from '@/views/pictureOnMap/LayerControl.vue'; import { FALSE } from 'ol/functions'; const useStore = usepartitionStore(); const appStore = useUserStore(); const { proxy } = getCurrentInstance(); const Getproperties = ref({}); const Getmenuarr = ref([]); const GetcomIDs = ref([]); const dialogConfig = reactive({ visible: false, dataID: '', dataCode: '', data: {}, comIDs: [], customData: [], RefName: '', title: '详情', typeName: '', }); const closediaMeth = () => { dialogConfig.visible = false; }; // 站点数组 const arrstcode = ref([ // 站点类型名称: 编码 'outlet_water_level', // 排口流量 'outlet_quality', // 排口水质 'channel_quality', // 港渠水质 'channel_water_level', // 港渠水位 'lake_water_level', // 湖泊水位 'waterlogging', // 渍水监测点(注意:这里编码没有后缀,可能是特例或故意为之) 'rain', // 雨量站 'rainwater_pipeline_quality', // 雨水管网水质 'sewage_pipeline_quality', // 污水管网水质 'rainwater_pipeline_quality_area', // 接驳口 'rainwater_pipeline_water_level', // 雨水管网液位 'reservoir_water_level', //水库水位 'rainPumpStation', //雨水泵站 'dirtyPumpStation', //污水泵站 'sewageStation', //污水厂 'gateStation', //闸门 ]); // 基本数据 const arrid = ref([ 'diversion_well_info', // 分流井 'drainage_info', // 排水户 'lake_info', // 湖泊 'outlet_info', // 排口 'port_channel_info', // 港渠 'rain_water_pump_station_info', // 雨水泵站 'region_info', // 分区信息 'reservoir_info', // 水库 'sewage_factory_info', // 污水处理厂 'sewage_factory_station_info', //污水处理站 'sewage_pump_station_info', // 污水泵站 'storage_tank_info', // 调蓄池 'water_gate_info', // 水闸 'waterlogging_point_info', // 渍水点 'water_region_info', // 水系汇水分区 'storehouse', //物资仓库 'dikeGood', //堤防备料 ]); // 基础数据 const switchStcode = (Name, type) => { if (type == 'outlet_info') { pkClick(Getproperties.value); } console.log('GetcomIDs.value', GetcomIDs.value); if (arrid.value.includes(type)) { dialogConfig.visible = true; dialogConfig.dataCode = type; dialogConfig.comIDs = GetcomIDs.value; dialogConfig.title = Getproperties.value.name.split('\n')[0]; dialogConfig.dataID = Getproperties.value.pid ? Getproperties.value.pid : Getproperties.value.id; dialogConfig.RefName = GetcomIDs.value.length ? GetcomIDs[0] : ''; } else { return; } }; // 类型弹框判断 const typecodeswitch = type => { if (diabox[type]) { // console.log('diabox[type]', diabox[type]); window[type + '_map'] = diabox[type] .filter(i => i.geometry) .map((item, index) => { let coordinates = turf.getCoords(turf.center(Terraformer.WKT.parse(item.geometry))); const popup = new mapboxgl1.Popup({ closeButton: false, closeOnClick: false, }); popup .setLngLat(coordinates) .setDOMContent(document.getElementById(type + index)) .addTo(newfiberMap.map); popup.coordinates = coordinates; return popup; }); nextTick(() => { window[type + '_map'].forEach(i => i._setOpacity(0)); }); } }; const switchArr = () => { let typearr = []; for (var k in diabox) { typearr.push(k); appStore.MapData.map(item => { if (item.pointType == k) { diabox[k] = item.data; } }); } nextTick(() => { for (var k in typearr) { typecodeswitch(typearr[k]); } }); }; // 站点 const switchid = (Name, type, properties) => { if (arrstcode.value.includes(type)) { dialogConfig.visible = true; dialogConfig.dataCode = type; dialogConfig.dataID = Getproperties.value.stCode; dialogConfig.comIDs = GetcomIDs.value; dialogConfig.title = Getproperties.value.name.split('\n')[0]; dialogConfig.RefName = GetcomIDs.value.length ? GetcomIDs.value[0].menuName : ''; } else { return; } }; // 智慧水务大脑一张图 特定大屏动态菜单 const specificFun = type => { // 监测预警模块弹框 // value值 统一菜单类型 //name值 特指智慧水务大脑获取的动态菜单类型 let arr = [ { name: 'dp_zsfx', //渍水点 value: 'waterlogging', }, { name: 'dp_hhsq', //河湖水情 value: 'lake_water_level', }, { name: 'dp_bzgq', //泵站工情 value: 'rainPumpStation', //雨水泵站 }, { name: 'dp_gwfx', //管网风险 value: 'rainwater_pipeline_water_level', //雨水管网液位 }, { name: 'dp_gwfx', //管网风险 value: 'rainwater_pipeline_quality', //雨水管网水质 }, { name: 'dp_gwfx', //接驳口 value: 'rainwater_pipeline_quality_area', //接驳口 }, { name: 'dp_wsgwfx', //大屏污水管网风险分析弹框 value: 'sewage_pipeline_quality', //雨水管网水质 }, // { // name: "dp_ysgwfx", //大屏雨水管网风险分析弹框 // value: "rainwater_pipeline_quality", //雨水管网水质 // }, ]; return arr.find(item => item.value == type)?.name || null; }; // 获取动态弹框菜单 const GetBoxmenu = (Name, type) => { console.log('name', Name); console.log('type', type); GetcomIDs.value = []; let dataId = ''; if (arrstcode.value.includes(type)) { dataId = Getproperties.value.stCode; } if (arrid.value.includes(type)) { dataId = Getproperties.value.pid ? Getproperties.value.pid : Getproperties.value.id; } console.log('dataId', dataId); if (!dataId) { // proxy.$modal.msgSuccess(''); return; } // debugger; let params = { dataCode: specificFun(type) || type, scene: 'basis_monitor', dataId: dataId, }; drainageDispatchGetMenu(params).then(res => { console.log('获得的菜单', res.data); Getmenuarr.value = res.data; if (res.data && res.data.length) { res.data.map(item => { GetcomIDs.value.push(item.moduleName); }); } nextTick(() => { switchStcode(Name, type); switchid(Name, type); }); }); }; const pointandlineOpen = (type, properties) => { dialogConfig.visible = true; switch (type) { case 'pipeline_info_text': dialogConfig.title = '管线信息'; break; case 'pipeline_info': dialogConfig.title = '管线信息'; break; case 'pipeline_point': dialogConfig.title = '管点信息'; break; case 'point': dialogConfig.title = '问题管线'; break; } Getmenuarr.value = [ { menuName: '管网信息', show: true, moduleName: 'PointAndLine', }, ]; // dialogConfig.dataID = '0371000003'; dialogConfig.comIDs = ['PointAndLine']; dialogConfig.RefName = 'PointAndLine'; }; const loadCallback = () => {}; // 排口溯源 const pkClick = async properties => { // debugger; if (!properties.wellCode) return; let results = await upStreamAnalyse({ endPointNumber: properties.wellCode }); let pipelines = results.data.pipelineInfoList .map(i => turf.feature(Terraformer.WKT.parse(i.geometrys), { ...i, area: i.pipelineType == 'Rain' ? '雨水' : '污水', }) ) .map(i => (i.properties.flowDirection == 0 ? turf.lineString(turf.getCoords(i).reverse(), i.properties) : i)); newfiberMap .getLayers() .filter(i => i.newfiberId == '水系流向')[0] .getSource() .setData(turf.featureCollection(pipelines)); }; const a = properties => { const keys_ = ['雨水', '污水']; const keys = ['1_泵站', '1_污水处理厂', '分区流向', '分区流向1']; bus.emit('removeMapDatas', keys); newfiberMap .getLayers() .filter(i => i.newfiberId == keys[3])[0] .getSource() .setData(turf.featureCollection([])); const key = properties.c_layer.includes(keys_[0]) ? keys_[0] : keys_[1]; const nameKey = properties.name.substring(0, 2); let features = line.features.filter(i => i.properties.area.includes(key) && i.properties.name.includes(nameKey)); let features1 = point.features.filter(i => i.properties.area.includes(key) && i.properties.system.includes(nameKey)); let points = _.groupBy(features1, a => a.properties.type); features.forEach(i => { i.properties.type = keys[2]; i.properties.color = key == keys_[0] ? 'rgba(21,127,176,1)' : 'rgba(255,0,0,1)'; }); Object.keys(points).map(key => bus.emit('setGeoJSON', { json: turf.featureCollection( points[key].map(i => ({ type: i.type, geometry: i.geometry, properties: { ...i.properties, type: '1_' + key }, })) ), key: '1_' + key, }) ); bus.emit('setGeoJSON', { json: turf.featureCollection(features), key: keys[2] }); newfiberMap .getLayers() .filter(i => i.newfiberId == keys[3])[0] .getSource() .setData(turf.featureCollection(features)); }; const mapClick1 = (lngLat, properties = {}, layerId) => { console.log('经纬度', lngLat); console.log('数据', properties); console.log('layerid', layerId); // 处理标注 Getproperties.value = properties; let type = properties ? properties.type : '' || 1; let Name = properties ? properties.pointTypeName : '' || ''; // Annotation(properties); console.log('1111', type, layerId); if (properties.layer == '排水分区') { // a(properties); // if (Getproperties.value.c_layer.includes('雨水分区_1')) { // type = 'water_region_info'; // GetBoxmenu('雨水分区', type); // } // if (Getproperties.value.c_layer.includes('污水分区')) { // type = 'region_info'; // GetBoxmenu('污水分区', type); // } return; } let layerIdarr = ['湖泊', '湖泊_text', '港渠', '港渠_text', '水库管理范围', '水库管理范围_text']; let newsetarr = [ { name: '湖泊', value: 'lake_info' }, { name: '湖泊_text', value: 'lake_info' }, { name: '港渠', value: 'port_channel_info' }, { name: '港渠_text', value: 'port_channel_info' }, { name: '水库管理范围', value: 'reservoir_info' }, { name: '水库管理范围_text', value: 'reservoir_info' }, ]; if (layerIdarr.includes(layerId)) { type = newsetarr.find(item => { return layerId == item.name; }).value; GetBoxmenu(layerId, type); return; } let arr = ['pipeline_point', 'pipeline_info', 'pipeline_info_text']; if (arr.includes(layerId)) { console.log('进了方法'); pointandlineOpen(layerId); dialogConfig.dataCode = layerId; } else if (properties.type && properties.type == '问题管线') { pointandlineOpen('point'); dialogConfig.dataCode = 'point'; } else { if (type) { GetBoxmenu(Name, type); } } }; // 根据类型处理接口返回的标注内容 const AnnotationArr = ref([]); const StringName = ref(''); const Annotation = properties => { if (properties.siteData && properties.siteData.length) { let arr = JSON.parse(properties.siteData); AnnotationArr.value = arr; console.log('数据', arr); let string = ''; switch (properties.type) { case 'rain': AnnotationArr.value = [{ valueName: '监测时间', value: properties.recordTime }, ...arr]; break; } string = Methtion(string); console.log('数据', string); } }; const Methtion = StringName => { if (AnnotationArr.value.length) { AnnotationArr.value.map(item => { StringName += `${item.valueName}:${item.value}+'/n' `; }); return StringName; } }; const allScreen = () => { let domElement = document.documentElement; if (domElement.requestFullscreen) { domElement.requestFullscreen(); } else if (domElement.mozRequestFullScreen) { domElement.mozRequestFullScreen(); } else if (domElement.webkitRequestFullScreen) { domElement.webkitRequestFullScreen(); } }; const closeFun = is => { dialogConfig.visible = is; }; function anotherMeht(item) { let properties = {}; Getproperties.value.stCode = item.stCode || item.siteCode || item.lakeCode; Getproperties.value.dataCode = item.dataCode; Getproperties.value.wellCode = item.wellCode || item.dataName || item.pipeLine; Getproperties.value.id = item.id; Getproperties.value.gwMonitorId = item.gwMonitorId || item.id; //管网坡面 Getproperties.value.dataId = item.dataId || ''; Getproperties.value.stType = item.stType; Getproperties.value.geometry = item.geometry || item.geometrys || ''; // Terraformer.WKT.convert(turf.point(item.lonLat.split(",").map(Number)).geometry); Getproperties.value.waterRegionCode = item.lakeCode || item.waterRegionCode; //河湖水情 查询水系分区详情 Getproperties.value.GWDADataNow = item.GWDADataNow ? item.GWDADataNow : false; if (item.daterange) { Getproperties.value.daterange = item.daterange; } else { Getproperties.value.daterange = null; } console.log('Getproperties', Getproperties.value); if (arrstcode.value.includes(item.stType)) { properties.stCode = item.stCode; } if (arrid.value.includes(item.stType)) { properties.id = item.pid || item.id; } GetBoxmenu('', item.stType); } onMounted(() => { allScreen(); useStore.getsewageData(); bus.on('DynamicBus', item => { console.log('item', item); dialogConfig.RefName = item.RefName || ''; dialogConfig.title = item.stName || item.name; // debugger; if (!!!item.NoPromise) { anotherMeht(item); } else { // 将不进行接口请求,直接写死弹窗内容 dialogConfig.dataCode = item.type; Getmenuarr.value = item.Getmenuarr; dialogConfig.comIDs = item.comIDs; dialogConfig.dataID = item.pid ? item.pid : item.id; Getproperties.value.stCode = item.stCode; Getproperties.value.dataCode = item.dataCode; Getproperties.value.wellcode = item.wellCode || item.dataName || item.startPointNumber; Getproperties.value.id = item.relationId || item.id; //item.relationId监测告警的普通id Getproperties.value.dataId = item.dataId || ''; Getproperties.value.stType = item.stType; Getproperties.value.geometry = item.geometry || item.geometrys || Terraformer.WKT.convert(turf.point(item.lonLat.split(',').map(Number)).geometry); dialogConfig.visible = true; } }); bus.on('closedia', e => { closediaMeth(); }); bus.on('changeData', e => { // switchArr(); }); // 部分公共弹窗需要使用一个查询时间,目前不确定后期有没有人使用同类型的弹窗,在此初始化,增加公共弹窗的兼容性 // localStorage.setItem("JCFXDialogTimer", moment().format("YYYY-MM-DD")); }); onBeforeUnmount(() => { bus.off('DynamicBus'); bus.off('closedia'); bus.off('changeData'); }); </script> <style lang="scss"> @import '@/assets/styles/pictureOnMap.scss'; .pictureOnMap { width: 100%; height: 100%; background: url('@/assets/images/pictureOnMap/maxBgc.png') no-repeat center; background-size: 100% 100%; color: #fff; overflow: hidden; .mainContentBox { width: 100%; height: 100%; overflow: hidden; position: relative; // &::before{ // content: ''; // position: absolute; // top: 0; // left: 0; // width: 100%; // height: 100%; // // background: radial-gradient(rgba(255, 255, 255, 0) 30%, #071542 100%); // background: url("@/assets/images/pictureOnMap/bg.png") no-repeat; // background-size: 100% 100%; // /*设置径向渐变*/ // pointer-events: none; // z-index:5; // } } } </style>