From 4d8c6dd77427e8e581fda17b6b65ba86bfb7a815 Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Mon, 27 Feb 2023 14:30:01 +0800
Subject: [PATCH] 洪水淹没
---
widgets/FloodAnalysis/Widget.js | 714 +++++++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 525 insertions(+), 189 deletions(-)
diff --git a/widgets/FloodAnalysis/Widget.js b/widgets/FloodAnalysis/Widget.js
index 793c5b8..2fd77e5 100644
--- a/widgets/FloodAnalysis/Widget.js
+++ b/widgets/FloodAnalysis/Widget.js
@@ -2,7 +2,25 @@
// Copyright © 2022 guoshilong. All Rights Reserved.
// 模块描述:洪水淹没分析
///////////////////////////////////////////////////////////////////////////
-define(['dojo/_base/declare', 'dojo/_base/lang', 'dojo/_base/array', 'dojo/_base/html', "dojo/topic", 'jimu/BaseWidget', 'dojo/on', 'dstore/Memory', 'dstore/Trackable', 'dgrid/Grid', 'dgrid/Keyboard', 'dgrid/Selection', 'dstore/RequestMemory', 'dgrid/test/data/createSyncStore', "libs/echarts/v4/echarts.min", 'libs/layer/layer.js', 'libs/turf/turf.min.js'], function (declare, lang, array, html, topic, BaseWidget, on, Memory, Trackable, Grid, Keyboard, Selection, RequestMemory, createSyncStore, echarts, layer, turf) {
+define(['dojo/_base/declare',
+ 'dojo/_base/lang',
+ 'dojo/_base/array',
+ 'dojo/_base/html',
+ "dojo/topic",
+ 'jimu/BaseWidget',
+ 'dojo/on',
+ 'dojo/mouse',
+ 'dstore/Memory',
+ 'dstore/Trackable',
+ 'dgrid/Grid',
+ 'dgrid/Keyboard',
+ 'dgrid/Selection',
+ 'dgrid/Editor',
+ 'dstore/RequestMemory',
+ 'dgrid/test/data/createSyncStore',
+ "libs/echarts/v4/echarts.min",
+ 'libs/layer/layer.js',
+ 'libs/turf/turf.min.js'], function (declare, lang, array, html, topic, BaseWidget, on,mouse, Memory, Trackable, Grid, Keyboard, Selection,Editor, RequestMemory, createSyncStore, echarts, layer, turf) {
return declare([BaseWidget], {
baseClass: 'jimu-widget-FloodAnalysis',
name: 'FloodAnalysis',
@@ -19,8 +37,12 @@
smxSelect: null,
//河段下拉列表
hdDataList: [],
+ //水面线下拉列表
+ smxDataList:[],
//洪水分析表格数据
analysisTableList: [],
+ dgridSelectEvent:null,
+ currentSelectHistoryData:null,
//历史风险图表格数据
historyTableList: [
{name: "5年洪水淹没图"},
@@ -31,60 +53,55 @@
currentHd: null,
//当前选中的水面线
currentSmxcode: "",
+ //水文站最近的点
+ currentNearPoint:null,
+ evaluateLayerIndex:"",
//收起框打开状态
- isOpen: true,
+ popupLayer: null,
//api接口
url: {
riverwaySelectName: "http://localhost:82/blade-ycreal/riverway/selectName",
waterlineSelectName: "http://localhost:82/blade-ycreal/waterline/selectName",
childpage: "http://localhost:82/blade-ycreal/water/childpage",
getCzByGlCodeByGlQdj: "http://localhost:82/blade-ycreal/waterline/getCzByGlCodeByGlQdj",
- getHistoryList: "",
- saveHistoryData: "",
+ getRealTimeWaterByhdId: "http://localhost:82/blade-ycreal/waterline/getRealTimeWaterByhdId",
+ getHistoryList: "http://localhost:82/blade-ycreal/inundationResult/list",
+ saveHistoryData: "http://localhost:82/blade-ycreal/inundationResult/save",
+ getCoordinatesMinQdj: "http://localhost:82/blade-ycreal/water/getCoordinatesMinQdj",
},
- //弹出框索引,用来关闭弹出框
- popupIndex: "",
evaluateData: [
{
- name: "会昌县",
+ name: "<0.5",
house: 35,
population: 175,
area: 12.888,
value: 50.123
},
{
- name: "于都县",
+ name: "1.0-2.0",
house: 70,
population: 350,
area: 24.456,
value: 100.456
},
{
- name: "赣县",
+ name: "2.0-3.0",
house: 20,
population: 100,
area: 8.551,
value: 39.789
+ },
+ {
+ name: ">3.0",
+ house: 70,
+ population: 350,
+ area: 24.6,
+ value: 20.4
}
],
startup: function startup() {
- var self = this
+ const self = this
this.bindHtmlElement()
- //收起展开按钮点击事件
- $(".fold-btn").click(function () {
- if (self.isOpen) {
- $(this).addClass('close')
- $(this).removeClass('open')
- $('.content').hide()
- self.isOpen = false
- } else {
- $(this).addClass('open')
- $(this).removeClass('close')
- $('.content').show()
- self.isOpen = true
- }
- })
-
//实时、预测改变事件
$('input[type=radio][name=middleRadio]').change(function () {
if (this.value == "realtime") {
@@ -99,15 +116,10 @@
//开始分析按钮点击事件
$('#start-analysis-btn').click(function () {
if (self.currentHd && self.currentSmxcode) {
- self.evaluatePopup()
+ self.drawWater('analysis')
} else {
- alert("请先选择河段和水面线")
+ layer.msg("请先选择河段和水面线")
}
- })
-
- //历史风险图表格单选框改变事件
- $('input[type=radio][name=tableRadio]').change(function () {
- console.log(this.value)
})
//洪水淹没分析按钮点击事件
@@ -115,12 +127,14 @@
self.analysisBtn.addClass('choose-button')
self.analysisBtn.removeClass('unchoose-button')
self.historyBtn.addClass('unchoose-button')
+ self.historyBtn.removeClass('choose-button')
self.divFloodHistory.hide()
self.divFloodAnalysis.show()
$('#history-pagination').hide()
if (self.currentHd){
$('#analysis-pagination').show()
}
+ $('#search-name').val("")
})
//历史风险图按钮点击事件
@@ -128,12 +142,14 @@
self.historyBtn.addClass('choose-button')
self.historyBtn.removeClass('unchoose-button')
self.analysisBtn.addClass('unchoose-button')
+ self.analysisBtn.removeClass('choose-button')
self.divFloodAnalysis.hide()
self.divFloodHistory.show()
$('#analysis-pagination').hide()
$('#history-pagination').show()
-
+ //获取历史数据
self.getHistoryList()
+
})
//河段输入框聚焦、失焦、输入事件
@@ -143,15 +159,20 @@
$('#hd-input').blur(function () {
//隐藏域触发改变事件需要手动触发
// $("#hd-select").val().change()
+ //关闭分析窗口
+ if (self.evaluateLayerIndex){
+ layer.close(self.evaluateLayerIndex)
+ self.evaluateLayerIndex = ""
+ $('#restore-icon').hide()
+ }
setTimeout(function(){//有bug 需要延迟执行隐藏
$("#hd-select").hide()
- },100)
-
+ },300)
})
- // 河道输入事件
+ // 河段输入事件
$('#hd-input').on("input", function () {
- var searchString = $('#hd-input').val()
- var filterArray = self.hdDataList.filter(e => {
+ let searchString = $('#hd-input').val()
+ let filterArray = self.hdDataList.filter(e => {
return e.riverway.indexOf(searchString) != -1
})
self.hdSelect.find("option").remove();//添加新值 删除旧值
@@ -161,41 +182,48 @@
})
//水位输入事件
- $('#sw-input').on("input", function () {
- self.getYcSub()
+ $('#sw-input').on("input", function (e,v) {
+ self.getSw($('#sw-input').val())
})
//河段选择框改变事件
this.hdSelect.change(function () {
$("#hd-input").val($(this).find("option:selected").text());
- var selected = JSON.parse($(this).val())
+ let selected = JSON.parse($(this).val())
+ // 设置站点信息
+ $('#glzd').val(selected.stnm)
+ $('#qdj').val(selected.gl_qdj.substring(0,selected.gl_qdj.length - 2))
self.currentHd = selected
+ // 获取水面线数据
self.getSmxData(selected.river_code, selected.default_smx)
+ // 获取最近起点距数据
+ self.getMin(selected.default_smx,selected.gl_qdj)
+ // 获取实时水位
+ if (self.waterEntity)
+ self.map.entities.remove(self.waterEntity)
//地图定位
self.map.camera.flyTo({
destination: Cesium.Cartesian3.fromDegrees(selected.river_origin, selected.qd_lat, 50000),
});
-
-
self.hdSelect.hide()
})
//水面线选择框改变事件
this.smxSelect.change(function () {
- var selected = $(this).val()
+ let selected = $(this).val()
self.getPointData(selected)
})
- //水位输入框按下回车事件
- $('#sw-input').keypress(function (event) {
- if (event.which == 13) {
- self.analysisTableList.forEach(e => {
- e.sw = self.calculateSw(e.water, sw)
- })
- self.loadPagination(self.analysisTableList, "analysis-pagination")
- }
- })
+ // //水位输入框按下回车事件
+ // $('#sw-input').keypress(function (event) {
+ // if (event.which == 13) {
+ // self.analysisTableList.forEach(e => {
+ // e.sw = self.calculateSw(e.water, sw)
+ // })
+ // self.loadPagination(self.analysisTableList, "analysis-pagination")
+ // }
+ // })
//搜索按钮点击事件
$('#search-button').click(function () {
@@ -207,9 +235,11 @@
self.loadPagination(filterArray, "history-pagination")
})
- $('#save-button').click(function () {
- self.confirmPopup()
- // self.floodAnalysisPopup()
+ $('#restore-icon').click(function () {
+ if (self.popupLayer){
+ self.popupLayer.show()
+ $(this).hide()
+ }
})
},
@@ -234,16 +264,27 @@
if (this.drawingPolyline)
this.map.entities.remove(this.drawingPolyline);
+ if (this.waterEntity)
+ this.map.entities.remove(this.waterEntity)
+
this.map.scene.globe.baseColor = Cesium.Color.WHITE;
$('#hd-select option').remove()
$('#smx-select option').remove()
$('#sw-input').val("")
$('#hd-input').val("")
- $('#flood-tbody').html("")
+ //清空表格数据
+ $('.analysis-box-list').empty();
+ $('.history-box-list').empty();
$('#analysis-pagination').hide()
-
this.analysisTableList = []
+
+ //关闭分析窗口
+ if (this.evaluateLayerIndex){
+ layer.close(this.evaluateLayerIndex)
+ this.evaluateLayerIndex = ""
+ $('#restore-icon').hide()
+ }
},
onMinimize: function onMinimize() {
@@ -284,6 +325,11 @@
$('.fold-btn').addClass('open')
$('.fold-btn').removeClass('close')
$('.content').show()
+ $("#sw-input").prop('disabled', true);
+ $('#search-name').val("")
+ $('#glzd').val("")
+ $('#qdj').val('')
+ $('.restore-icon').hide()
this.isOpen = true
this.analysisBtn.addClass('choose-button')
@@ -293,7 +339,9 @@
this.currentHd = null
this.currentSmxcode = ""
+ //获取河段数据
this.getHdData()
+
},
//获取河段下拉数据
@@ -331,16 +379,19 @@
},
success: function (res) {
let data = res.data
+ self.smxDataList = data
self.smxSelect.find("option").remove();//添加新值 删除旧值
if (data.length <= 0) {
$('#flood-tbody').html("")
$('#analysis-pagination').hide()
+ self.deleteEntities(self.pointEntities)
+ if (self.drawingPolyline){
+ self.map.entities.remove(self.drawingPolyline);
+ }
}
data.forEach(e => {
-
self.smxSelect.append("<option value=" + e.smxcode + ">" + e.waterline + "</option>");
-
if (e.smxcode == defaultId) {
$("#smx-select option[value=" + e.smxcode + "] ").attr("selected", true)
self.smxSelect.trigger("change")
@@ -368,44 +419,54 @@
success: function (res) {
if (res.code == 200) {
let data = res.data.records
- self.deleteEntities(self.pointEntities)
- // 水面线连线
- let cartesians = []
- for (let i = 0; i < data.length; i++) {
- cartesians.push(new Cesium.Cartesian3.fromDegrees(data[i].lng, data[i].lat,data[i].sw))
- let temp = self.map.entities.add({
- position: Cesium.Cartesian3.fromDegrees(data[i].lng, data[i].lat,data[i].sw),
- point: {
- color: Cesium.Color.RED,
- pixelSize: 11,
- //防止地形遮挡住点
- disableDepthTestDistance: Number.POSITIVE_INFINITY,
- heightReference: Cesium.HeightReference.CLAMP_TO_GROUND
- },
- });
- // 清空使用
- self.pointEntities.push(temp)
- }
-
- // 先清空 后画线
- if (self.drawingPolyline)
- self.map.entities.remove(self.drawingPolyline);
- let lineOpts = {
- polyline: {
- positions: cartesians,
- clampToGround: true,
- width: 3,
- color: "#279a9a"
- }
- };
- // 画线
- self.drawingPolyline = self.map.entities.add(lineOpts);
-
+ self.createPointAndLine(data,self.pointEntities)
self.analysisTableList = data
- self.getSub(self.currentHd.id, self.currentSmxcode)
+ self.getRealTimeWaterByhdId(self.currentHd.id)
}
}
});
+ },
+
+ //创建点线
+ createPointAndLine(data,pointEntities){
+ this.deleteEntities(pointEntities)
+ // 水面线连线
+ let cartesians = []
+ for (let i = 0; i < data.length; i++) {
+ cartesians.push(new Cesium.Cartesian3.fromDegrees(data[i].lng, data[i].lat,data[i].sw))
+ let temp = this.map.entities.add({
+ position: Cesium.Cartesian3.fromDegrees(data[i].lng, data[i].lat,data[i].sw),
+ billboard:{
+ image: "./images/jiangshui_sq.png",
+ pixelOffset: new Cesium.Cartesian2(0, 0),
+ color: new Cesium.Color(20, 20, 0, 1),
+ width: 14,
+ height: 14,
+ heightReference : Cesium.HeightReference.CLAMP_TO_GROUND,
+ disableDepthTestDistance: Number.POSITIVE_INFINITY
+ }
+ });
+ // 清空使用
+ pointEntities.push(temp)
+ }
+ //防止切换面板后渲染水面出错
+ this.map.scene.globe.depthTestAgainstTerrain = true;
+
+ // 先清空 后画线
+ if (this.drawingPolyline){
+ this.map.entities.remove(this.drawingPolyline);
+ }
+ let lineOpts = {
+ polyline: {
+ positions: cartesians,
+ clampToGround: true,
+ width: 3,
+ color: "#279a9a"
+ }
+ };
+ // 画线
+ this.drawingPolyline = this.map.entities.add(lineOpts);
+
},
//获取历史风险图数据列表
@@ -419,14 +480,16 @@
jsonpCallback: 'data',
data: {
name: "",
+ pageSize:999999999,
},
success: function (res) {
if (res.code == 200) {
let data = res.data.records
- if (self.popupIndex != "") {
- layer.close(self.popupIndex)
- self.popupIndex = ""
- }
+ data.forEach(e=>{
+ e.smxVal = JSON.parse(e.smxVal)
+ })
+ self.historyTableList = data
+ self.loadPagination(data,"history-pagination")
}
}
});
@@ -446,76 +509,40 @@
if (tableData.length <= 0 && pageElementId == "history-pagination") {
$('#history-pagination').hide()
}
- let pageSize = 11
- var count = Math.ceil(tableData.length / pageSize);
- var self = this
+ let pageSize = 22
+ let count = Math.ceil(tableData.length / pageSize);
+ const self = this
$('#' + pageElementId).pagination({
mode: 'fixed',
jump: true,
coping: false,
pageCount: count,
callback: function (index) {
- var listdata = [];
+ let listdata = [];
//显示页数
var index = (index.getCurrent() - 1) * pageSize;
- for (var i = index; i < index + pageSize; i++) {
+ for (let i = index; i < index + pageSize; i++) {
listdata.push(tableData[i]);
if (i == tableData.length - 1) {
break;
}
}
-
- pageElementId == "analysis-pagination" ? self.loadAnalysisTable(listdata) : self.loadHistoryTable(listdata)
-
+ pageElementId == "analysis-pagination" ? self.createList(listdata,"洪水淹没分析") : self.createList(listdata,"历史风险图")
}
});
//首次加载前11条数据
- var startData = [];
+ let startData = [];
if (tableData.length > pageSize) {
- for (var i = 0; i < pageSize; i++) {
+ for (let i = 0; i < pageSize; i++) {
startData.push(tableData[i]);
}
} else {
- for (var i = 0; i < tableData.length; i++) {
+ for (let i = 0; i < tableData.length; i++) {
startData.push(tableData[i]);
}
}
- pageElementId == "analysis-pagination" ? self.loadAnalysisTable(startData) : self.loadHistoryTable(startData)
- },
-
- /**
- * 加载淹没分析表格
- * @param listData 需要加载的数据
- */
- loadAnalysisTable(listData) {
- var table = ""
- listData.forEach(e => {
- table += '<tr>' +
- '<td><div>' + e.location + '</div></td>' +
- '<td><div>' + e.origin + '</div></td>' +
- '<td><div>' + e.lng + '</div></td>' +
- '<td><div>' + e.lat + '</div></td>' +
- '<td><div>' + e.water + '</div></td>' +
- '<td><div>' + e.sw + '</div></td>' +
- '</tr>'
- })
- $('#flood-tbody').html(table)
- },
-
- /**
- * 加载历史风险表格
- * @param listData 需要加载的数据
- */
- loadHistoryTable(listData) {
- var table = ""
- listData.forEach(e => {
- table += '<tr>' +
- '<td><div><input type="radio" name="tableRadio" value=' + e.id + '></div></td>' +
- '<td><div>' + e.name + '</div></td>' +
- '</tr>'
- })
- $('#flood-history-tbody').html(table)
+ pageElementId == "analysis-pagination" ? self.createList(startData,"洪水淹没分析") : self.createList(startData,"历史风险图")
},
/**
@@ -527,62 +554,93 @@
let sw = this.floatAdd(Number(waterline), Number(sub))
return sw
},
- //预测水位计算
- getYcSub() {
- const self = this
- self.analysisTableList.forEach(e => {
- e.lng = Number(e.lng).toFixed(4)
- e.lat = Number(e.lat).toFixed(4)
- e.sw = self.calculateSw(e.water, $('#sw-input').val())
- e.water = Number(e.water).toFixed(4)
- e.sw = Number(e.sw).toFixed(4)
- })
-
- self.loadPagination(self.analysisTableList, "analysis-pagination")
+ //减法函数
+ accSub(arg1,arg2){
+ let r1,r2,m,n;
+ r1 = arg1.toString().length
+ try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
+ m=Math.pow(10,Math.max(r1,r2));
+ //last modify by deeka
+ //动态控制精度长度
+ n=(r1>=r2)?r1:r2;
+ return ((arg1*m-arg2*m)/m).toFixed(n);
},
- //实时水位计算
- getSub(hdid, smxcode) {
+
+ //获取实时水位
+ getRealTimeWaterByhdId(hdid) {
const self = this
+ // 实时 需要请求服务器获取实时水位数据
if ($('input[name=middleRadio]:checked').val() == 'realtime') {
$.ajax({
- url: self.url.getCzByGlCodeByGlQdj,
+ url: self.url.getRealTimeWaterByhdId,
type: 'get',
dataType: 'json',
jsonp: 'callback',
jsonpCallback: 'data',
data: {
- hdId: hdid,
- smxcode: smxcode
+ hdId: hdid
},
success: function (res) {
if (res.code == 200) {
let sub = res.data
$('#sw-input').val(sub)
- self.analysisTableList.forEach(e => {
- e.lng = Number(e.lng).toFixed(4)
- e.lat = Number(e.lat).toFixed(4)
- e.sw = self.calculateSw(e.water, sub)
-
- e.water = Number(e.water).toFixed(4)
- e.sw = Number(e.sw).toFixed(4)
- })
-
- self.loadPagination(self.analysisTableList, "analysis-pagination")
+ self.getSw(sub)
}
}
});
} else {
- self.getYcSub()
+ self.getSw($('#sw-input').val())
}
+ },
+
+ //计算水位
+ getSw(val){
+ const self = this
+ let chazhi = 0
+ if (val > 0) {
+ chazhi = self.accSub(val,self.currentNearPoint.water)
+ }
+
+ let list = JSON.parse(JSON.stringify(self.analysisTableList))
+
+ list.forEach(e => {
+ e.lng = Number(e.lng).toFixed(4)
+ e.lat = Number(e.lat).toFixed(4)
+ e.sw = self.calculateSw(e.water, chazhi)
+ e.water = Number(e.water).toFixed(2)
+ e.sw = Number(e.sw).toFixed(2)
+ })
+ self.loadPagination(list, "analysis-pagination")
+ },
+
+ //获取最接近水文站的值
+ getMin(smxcode, glQdj) {
+ const self = this
+ $.ajax({
+ url: self.url.getCoordinatesMinQdj,
+ type: 'get',
+ dataType: 'json',
+ jsonp: 'callback',
+ jsonpCallback: 'data',
+ data: {
+ smxcode:smxcode,
+ glQdj:glQdj
+ },
+ success: function (res) {
+ if (res.code == 200) {
+ self.currentNearPoint = res.data
+ }
+ }
+ });
},
//保存历史风险图
saveHistoryData() {
const self = this
$.ajax({
- url: self.url.getCzByGlCodeByGlQdj,
+ url: self.url.saveHistoryData,
type: 'get',
dataType: 'json',
jsonp: 'callback',
@@ -598,7 +656,7 @@
//防止出现两个小数相加出现很多0的情况
floatAdd(arg1, arg2) {
- var r1, r2, m;
+ let r1, r2, m;
try {
r1 = arg1.toString().split(".")[1].length;
} catch (e) {
@@ -613,6 +671,7 @@
return (arg1 * m + arg2 * m) / m;
},
+ //删除地图上的标注点位
deleteEntities(entities) {
entities.forEach(e => {
this.map.entities.remove(e)
@@ -620,30 +679,307 @@
entities = []
},
-
//评估分析弹窗
- evaluatePopup() {
- var self = this
- let data = this.evaluateData
- let dataStr = JSON.stringify(data)
- let hdStr = JSON.stringify(this.currentHd)
+ evaluatePopup(flag) {
+ const self = this
+ let selectSmx = this.smxDataList.filter(e=>{
+ return e.smxcode == this.currentSmxcode
+ })
- var url = './corelib/common/popup/evaluateAnalysis.html'
- var top = ($(window).height() - 600) / 2;
- var left = ($(window).width() - 1300 - 340) / 2 + 340;
+ let isAnalysis = flag == 'analysis'?true:false
+
+ let parentData = {}
+ if (isAnalysis){
+ parentData.data = this.evaluateData
+ parentData.hd = this.currentHd
+ parentData.smx = selectSmx[0]
+ parentData.sw = $('#sw-input').val()
+ parentData.point = this.analysisTableList
+ }else {
+ parentData.data = this.evaluateData
+ parentData.hd = this.currentSelectHistoryData.smxVal.hd
+ parentData.smx = this.currentSelectHistoryData.smxVal.smx
+ parentData.sw = this.currentSelectHistoryData.smxVal.sw
+ parentData.point = this.currentSelectHistoryData.smxVal.point
+ }
+
+ let url = './corelib/common/popup/evaluateAnalysis.html'
+ let top = ($(window).height() - 764) / 2;
+ let left = ($(window).width() -465);
layer.open({
- title: '评估分析',
+ title: '分析结果',
+ shade: 0,
type: 2,
- maxmin: false, //开启最大化最小化按钮
- area: ['1500px', '700px'],
+ maxmin: true, //开启最大化最小化按钮
+ area: ['465px', '818px'],
skin: 'floodAnalysis',
- offset: 'auto',
- content: url + "?data=" + encodeURIComponent(dataStr) + "&hd=" + encodeURIComponent(hdStr),//使用encodeURIComponent转码,避免中文字符乱码,避免url截取错误
+ offset: [top,left],
+ content: url + "?parentData=" + encodeURIComponent(JSON.stringify(parentData)),//使用encodeURIComponent转码,避免中文字符乱码,避免url截取错误
id: "floodAnalysisLayer",
- closeBtn: 1,
+ closeBtn: 0,
+ shade: 0,
+ move:false,
+ maxmin: false,
+ //设置默认不在左下角
+ minStack:false,
+ zIndex:-100000,
+ success:function (layero,index) {
+ $('.layui-layer-setwin .layui-layer-min cite').css("background-color",'white')
+ //绑定父子之间的关系,用于数据传递,缺少则无法传递
+ let body = layer.getChildFrame("body", index);
+ //得到iframe页的窗口对象
+ let iframeWin = window[layero.find('iframe')[0]['name']];
+ self.evaluateLayerIndex = index
+
+ if (isAnalysis){
+ iframeWin.$('#save-btn').show()
+ }else {
+ iframeWin.$('#save-btn').hide()
+ }
+
+ self.popupLayer = $('.layui-layer')
+ iframeWin.$('#close-btn').click(function () {
+ self.popupLayer.hide()
+ $('#restore-icon').show()
+ })
+
+ if ($('.layui-layer-max').hasClass('layui-layer-maxmin')){
+ $('.layui-layer-max').show()
+ }else {
+ $('.layui-layer-max').hide()
+ }
+
+ //图片放大方法
+ // 思路: 获取所有要用的 => 然后通过点击图片显示弹窗 => 赋值到弹窗里面 => 图片赋值 => 文本赋值
+ // 获取点击图片
+ let img = iframeWin.$('#show-img')
+ // 获取弹窗
+ let modal = $('#myModal')
+ // 弹窗图片
+ let contImg = $('#img01')
+
+ img.click(function () {
+ modal.css({
+ "display":"block",
+ 'position':'fixed',
+ 'background-color':'#2f353cd4'
+ })
+ contImg.prop('src',img.prop('src'))
+ })
+ // 点击x按钮关闭弹窗
+ let closeBox = $('.close')
+ closeBox.click(function () {
+ modal.hide()
+ })
+
+ },
+ cancel:function (layero,index) {
+ self.popupLayer.hide()
+ $('#restore-icon').show()
+ return false
+ }
});
},
+ //http://dgrid.io/tutorials/1.0/hello_dgrid/ 创建表格
+ createList: function (dataList, txt) {
+ const self = this
+ let CustomGrid = declare([Grid, Keyboard, Selection,Editor]);
+ let column, tab, moon, dauy;
+ let formatter = function (value,object) {
+ if (self.currentNearPoint.id == object.id) {
+ return '<span style="color:red">' + value + '</span>'
+ } else {
+ return value
+ }
+ }
+ if (txt == "洪水淹没分析") {
+ $('.analysis-box-list').empty();
+ column = {
+ location: {
+ label:'位置',
+ className:'dgrid-cell_200',
+ formatter:formatter
+ },
+ origin: {
+ label:'起点距',
+ className:'dgrid-cell_40',
+ formatter:function (value,object) {
+ if (self.currentNearPoint.id == object.id) {
+ return '<span style="color:red">' + value.substring(0,value.length - 2) + '</span>'
+ } else {
+ return value.substring(0,value.length - 2)
+ }
+ }
+ },
+ water: {
+ label:'水面线',
+ className:'dgrid-cell_60',
+ formatter:formatter
+ },
+ sw: {
+ label:'水位',
+ className:'dgrid-cell_60',
+ formatter:formatter
+ },
+ // lng:{
+ // label:'经度',
+ // formatter:formatter
+ // },
+ // lat:{
+ // label:'纬度',
+ // formatter:formatter
+ // },
+ }
+ tab = 'analysis-tab1-grid'
+ } else if (txt == "历史风险图") {
+ $('.history-box-list').empty();
+ column = {
+ // radio:{ label: "", field: "radio", editor: 'radio' },
+ name: '名称',
+ }
+ tab = 'history-tab2-grid'
+ }
+ let grid = new CustomGrid({
+ columns: column,
+ selectionMode: 'single', // for Selection; only select a single row at a time
+ cellNavigation: false, // for Keyboard; allow only row-level keyboard navigation
+ }, tab);
+ grid.startup();
+
+ function makeHandler (grid, type, dir) {
+ return function (event) {
+ let tip = $('#tableTip')
+ let obj = grid[type](event)
+
+ if (dir == 'entered' && obj.column.field == 'location' ){
+ tip.show()
+ tip.css({
+ "top":(194+(Number(obj.row.id)*24.5))+'px',
+ // "left":event.offsetX+10+'px'
+ })
+ tip.html(obj.row.data.location)
+ }else if (dir == 'left'){
+ tip.hide()
+ }
+ };
+ }
+
+ grid.on(on.selector('.dgrid-content .dgrid-cell', mouse.enter), makeHandler(grid, 'cell', 'entered'));
+ grid.on(on.selector('.dgrid-content .dgrid-cell', mouse.leave), makeHandler(grid, 'cell', 'left'));
+
+ //防止绑定多次点击事件
+ if (this.dgridSelectEvent){
+ this.dgridSelectEvent.remove()
+ }
+
+ this.dgridSelectEvent = grid.on("dgrid-select", function(evt){
+ //获取行数据
+ let data = evt.rows[0].data
+ //历史风险、洪水分析,表格不同的点击事件
+ if (data.smxVal){
+ self.currentSelectHistoryData = data
+ if (data.smxVal.point.length>0){
+ self.deleteEntities(self.pointEntities)
+ if (self.drawingPolyline)
+ self.map.entities.remove(self.drawingPolyline);
+ if (self.waterEntity)
+ self.map.entities.remove(self.waterEntity)
+ $('#sw-input').val("")
+ $('#hd-input').val("")
+ $('#hd-input').trigger("input")
+ $('#smx-select option').remove()
+ //清空表格数据
+ $('.analysis-box-list').empty();
+ $('#analysis-pagination').hide()
+ //清空关联站和起点距
+ $('#glzd').val("")
+ $('#qdj').val('')
+ self.analysisTableList = []
+ self.createPointAndLine(data.smxVal.point,self.pointEntities)
+ self.map.camera.flyTo({
+ destination: Cesium.Cartesian3.fromDegrees(data.lon, data.lat, 50000),
+ });
+ self.drawWater('history')
+ }
+ }else {
+ self.map.camera.flyTo({
+ destination: Cesium.Cartesian3.fromDegrees(data.lng, data.lat, 3000),
+ });
+ }
+ });
+
+ grid.renderArray(dataList);
+ },
+
+ // 洪水淹没效果
+ drawWater(flag) {
+
+ //关闭分析窗口
+ if (this.evaluateLayerIndex){
+ layer.close(this.evaluateLayerIndex)
+ $('#restore-icon').hide()
+ this.evaluateLayerIndex = ""
+ }
+
+ //地图定位
+ // this.map.camera.flyTo({
+ // destination: Cesium.Cartesian3.fromDegrees(115.93791, 25.989108, 5000),
+ // });
+ //显示进度条
+ $('.dong-progress .container #progress_bar').width(0);
+ $('.dong-progress').stop().hide();
+
+ this.showWater = true
+ this.waterEntity && this.map.entities.remove(this.waterEntity)
+ const waterCoord = [116.0072, 25.9058, 100, 116.0546, 25.9012, 100 , 116.0457, 25.8611, 100, 115.9859, 25.8740 ,100]
+ let startHeight = 169
+ const targetHeight = 200
+ this.waterEntity = this.map.entities.add({
+ polygon: {
+ hierarchy: Cesium.Cartesian3.fromDegreesArrayHeights(waterCoord),
+ material: Cesium.Color.fromBytes(64, 157, 253, 200),
+ perPositionHeight: true,
+ extrudedHeight: new Cesium.CallbackProperty(() => { return startHeight }, false)
+ }
+ })
+ $('.dong-progress').stop().show();
+ // 总长度
+ let totalWidth = $('.dong-progress .container').width();
+ // 过度长度
+ let excessiveWidth = totalWidth / 100;
+ let watchWidth = 0;
+ // 进度条的定时器
+ let proTime = setInterval(function () {
+ watchWidth += excessiveWidth;
+ if (watchWidth > totalWidth) {
+ watchWidth = totalWidth;
+ }
+ $('.dong-progress .container #progress_bar').width(watchWidth);
+ }, 22);
+ const waterInterval = setInterval(() => {
+ if (startHeight < targetHeight) {
+ startHeight += 5
+
+ if (startHeight >= targetHeight) {
+ startHeight = targetHeight
+ clearInterval(waterInterval)
+
+ if (watchWidth < totalWidth) {
+ watchWidth = totalWidth;
+ }
+ clearInterval(proTime);
+ //隐藏进度条
+ $('.dong-progress .container #progress_bar').width(0);
+ $('.dong-progress').stop().hide();
+ this.showWater = false
+ this.evaluatePopup(flag)
+ }
+ // 使用该方式会闪烁,改用 Cesium.CallbackProperty 平滑
+ // this.waterEntity.polygon.extrudedHeight = startHeight
+ }
+ }, 1000*0.5)
+ }
});
});
--
Gitblit v1.9.3