diff --git a/src/main/java/com/bonus/digitalSignage/backstage/controller/DigitalSignageController.java b/src/main/java/com/bonus/digitalSignage/backstage/controller/DigitalSignageController.java index 1572992..ddff1a0 100644 --- a/src/main/java/com/bonus/digitalSignage/backstage/controller/DigitalSignageController.java +++ b/src/main/java/com/bonus/digitalSignage/backstage/controller/DigitalSignageController.java @@ -55,4 +55,11 @@ public class DigitalSignageController { public ServerResponse getTowersInfo(EncryptedReq dto) { return service.getTowersInfo(dto.getData()); } + + @ApiOperation("查询工程杆塔坐标及工程坐标") + @PostMapping(value = "getTowersPosition") + @DecryptAndVerify(decryptedClass = QueryParamDto.class)//加解密统一管理 + public ServerResponse getTowersPosition(EncryptedReq dto) { + return service.getTowersPosition(dto.getData()); + } } diff --git a/src/main/java/com/bonus/digitalSignage/backstage/dao/DigitalSignageDao.java b/src/main/java/com/bonus/digitalSignage/backstage/dao/DigitalSignageDao.java index bd04f5c..88b270e 100644 --- a/src/main/java/com/bonus/digitalSignage/backstage/dao/DigitalSignageDao.java +++ b/src/main/java/com/bonus/digitalSignage/backstage/dao/DigitalSignageDao.java @@ -4,6 +4,7 @@ import com.bonus.digitalSignage.backstage.entity.dto.QueryParamDto; import com.bonus.digitalSignage.backstage.entity.vo.DigitalSignageVo; import com.bonus.digitalSignage.backstage.entity.vo.ProTreeVo; import org.springframework.stereotype.Repository; +import com.bonus.digitalSignage.backstage.entity.vo.TowersInfo; import java.util.List; @@ -78,4 +79,13 @@ public interface DigitalSignageDao { * @date 2025/4/25 10:35 */ List getSpanInfoVos(QueryParamDto dto); + + /** + * 查询工程杆塔坐标及工程坐标 + * @param dto + * @return List + * @author cwchen + * @date 2025/5/20 10:08 + */ + List getTowersPosition(QueryParamDto dto); } diff --git a/src/main/java/com/bonus/digitalSignage/backstage/entity/vo/TowersInfo.java b/src/main/java/com/bonus/digitalSignage/backstage/entity/vo/TowersInfo.java new file mode 100644 index 0000000..5804e9a --- /dev/null +++ b/src/main/java/com/bonus/digitalSignage/backstage/entity/vo/TowersInfo.java @@ -0,0 +1,24 @@ +package com.bonus.digitalSignage.backstage.entity.vo; + +import lombok.Data; + +/** + * @className:TowersInfo + * @author:cwchen + * @date:2025-05-20-10:04 + * @version:1.0 + * @description:杆塔-vo + */ +@Data +public class TowersInfo { + + private String towerName; + + private String lon; + + private String lat; + + private String proLon; + + private String proLat; +} diff --git a/src/main/java/com/bonus/digitalSignage/backstage/service/DigitalSignageService.java b/src/main/java/com/bonus/digitalSignage/backstage/service/DigitalSignageService.java index 33ca9f8..25a0f94 100644 --- a/src/main/java/com/bonus/digitalSignage/backstage/service/DigitalSignageService.java +++ b/src/main/java/com/bonus/digitalSignage/backstage/service/DigitalSignageService.java @@ -45,4 +45,13 @@ public interface DigitalSignageService { * @date 2025/4/24 16:52 */ ServerResponse getTowersInfo(QueryParamDto data); + + /** + * 查询工程杆塔坐标及工程坐标 + * @param data + * @return ServerResponse + * @author cwchen + * @date 2025/5/20 10:03 + */ + ServerResponse getTowersPosition(QueryParamDto data); } diff --git a/src/main/java/com/bonus/digitalSignage/backstage/service/impl/DigitalSignageServiceImpl.java b/src/main/java/com/bonus/digitalSignage/backstage/service/impl/DigitalSignageServiceImpl.java index 95682ac..8a6aaad 100644 --- a/src/main/java/com/bonus/digitalSignage/backstage/service/impl/DigitalSignageServiceImpl.java +++ b/src/main/java/com/bonus/digitalSignage/backstage/service/impl/DigitalSignageServiceImpl.java @@ -3,8 +3,8 @@ package com.bonus.digitalSignage.backstage.service.impl; import com.bonus.digitalSignage.backstage.dao.DigitalSignageDao; import com.bonus.digitalSignage.backstage.entity.dto.QueryParamDto; import com.bonus.digitalSignage.backstage.entity.vo.DigitalSignageVo; -import com.bonus.digitalSignage.backstage.entity.vo.ProProgressVo; import com.bonus.digitalSignage.backstage.entity.vo.ProTreeVo; +import com.bonus.digitalSignage.backstage.entity.vo.TowersInfo; import com.bonus.digitalSignage.backstage.service.DigitalSignageService; import com.bonus.digitalSignage.utils.ServerResponse; import lombok.extern.slf4j.Slf4j; @@ -113,4 +113,15 @@ public class DigitalSignageServiceImpl implements DigitalSignageService { } return ServerResponse.createSuccess(map); } + + @Override + public ServerResponse getTowersPosition(QueryParamDto dto) { + try { + List towersInfos = Optional.ofNullable(dao.getTowersPosition(dto)).orElseGet(ArrayList::new); + return ServerResponse.createSuccess(towersInfos); + } catch (Exception e) { + log.error(e.toString(),e); + return ServerResponse.createErroe("查询失败"); + } + } } diff --git a/src/main/java/com/bonus/digitalSignage/basic/dao/TbCablewaTransMapper.java b/src/main/java/com/bonus/digitalSignage/basic/dao/TbCablewaTransMapper.java index e64d501..3ea3c7a 100644 --- a/src/main/java/com/bonus/digitalSignage/basic/dao/TbCablewaTransMapper.java +++ b/src/main/java/com/bonus/digitalSignage/basic/dao/TbCablewaTransMapper.java @@ -16,4 +16,31 @@ public interface TbCablewaTransMapper { void delTbCablewaTrans(TbCablewaTransVo data); List getTbCablewaTransByTowerId(Long towerId); + + /** + * 添加索道口、中转口、索道终点经纬度 + * @param data + * @return void + * @author cwchen + * @date 2025/5/20 15:14 + */ + void addCablewaTransPoint(TbCablewaTransVo data); + + /** + * 删除索道口、中转口、索道终点经纬度 + * @param data + * @return void + * @author cwchen + * @date 2025/5/20 15:15 + */ + void delCablewaTransPoint(TbCablewaTransVo data); + + /** + * 查询索道口、中转口、索道终点经纬度 + * @param data + * @return List + * @author cwchen + * @date 2025/5/20 15:23 + */ + List getCablewaTransPointVos(TbCablewaTransVo data); } diff --git a/src/main/java/com/bonus/digitalSignage/basic/service/impl/TbCablewaTransServiceImpl.java b/src/main/java/com/bonus/digitalSignage/basic/service/impl/TbCablewaTransServiceImpl.java index 17bb249..6bfbef3 100644 --- a/src/main/java/com/bonus/digitalSignage/basic/service/impl/TbCablewaTransServiceImpl.java +++ b/src/main/java/com/bonus/digitalSignage/basic/service/impl/TbCablewaTransServiceImpl.java @@ -1,5 +1,6 @@ package com.bonus.digitalSignage.basic.service.impl; +import com.bonus.digitalSignage.backstage.entity.vo.TowersInfo; import com.bonus.digitalSignage.basic.dao.TbCablewaTransMapper; import com.bonus.digitalSignage.basic.service.TbCablewaTransService; import com.bonus.digitalSignage.basic.vo.TbCablewaTransVo; @@ -7,11 +8,14 @@ import com.bonus.digitalSignage.utils.ServerResponse; import com.bonus.digitalSignage.utils.UserUtil; import com.github.pagehelper.PageInfo; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Optional; /** * @author 马三炮 @@ -51,6 +55,8 @@ public class TbCablewaTransServiceImpl implements TbCablewaTransService { public ServerResponse getTbCablewaTransById(TbCablewaTransVo data) { try { TbCablewaTransVo tbCablewaTransVo = tbCablewaTransMapper.getTbCablewaTransById(data); + List cablewaTransPointVos = Optional.ofNullable(tbCablewaTransMapper.getCablewaTransPointVos(data)).orElseGet(ArrayList::new); + tbCablewaTransVo.setCablewaTransPointVoList(cablewaTransPointVos); return ServerResponse.createSuccess(tbCablewaTransVo); } catch (Exception e) { log.error(e.toString(), e); @@ -66,10 +72,14 @@ public class TbCablewaTransServiceImpl implements TbCablewaTransService { @Override public ServerResponse addTbCablewaTrans(TbCablewaTransVo data) { try { + if(CollectionUtils.isEmpty(data.getCablewaTransPointVoList())){ + return ServerResponse.createErroe("未配置索道口、中转口、索道终点经纬度"); + } Long userId = UserUtil.getLoginUser().getId(); data.setCreateUserId(userId); data.setCreateTime(new Date()); tbCablewaTransMapper.addTbCablewaTrans(data); + tbCablewaTransMapper.addCablewaTransPoint(data); return ServerResponse.createBySuccessMsg("索道运输-新增成功"); } catch (Exception e) { log.error(e.toString(), e); @@ -85,9 +95,14 @@ public class TbCablewaTransServiceImpl implements TbCablewaTransService { @Override public ServerResponse updateTbCablewaTrans(TbCablewaTransVo data) { try { + if(CollectionUtils.isEmpty(data.getCablewaTransPointVoList())){ + return ServerResponse.createErroe("未配置索道口、中转口、索道终点经纬度"); + } Long userId = UserUtil.getLoginUser().getId(); data.setUpdateUserId(userId); tbCablewaTransMapper.updateTbCablewaTrans(data); + tbCablewaTransMapper.delCablewaTransPoint(data); + tbCablewaTransMapper.addCablewaTransPoint(data); return ServerResponse.createBySuccessMsg("索道运输-修改成功"); } catch (Exception e) { log.error(e.toString(), e); @@ -104,6 +119,7 @@ public class TbCablewaTransServiceImpl implements TbCablewaTransService { public ServerResponse delTbCablewaTrans(TbCablewaTransVo data) { try { tbCablewaTransMapper.delTbCablewaTrans(data); + tbCablewaTransMapper.delCablewaTransPoint(data); return ServerResponse.createBySuccessMsg("索道运输-删除成功"); } catch (Exception e) { log.error(e.toString(), e); diff --git a/src/main/java/com/bonus/digitalSignage/basic/vo/TbCablewaTransVo.java b/src/main/java/com/bonus/digitalSignage/basic/vo/TbCablewaTransVo.java index b59fb8e..f981249 100644 --- a/src/main/java/com/bonus/digitalSignage/basic/vo/TbCablewaTransVo.java +++ b/src/main/java/com/bonus/digitalSignage/basic/vo/TbCablewaTransVo.java @@ -4,6 +4,7 @@ import com.bonus.digitalSignage.utils.Excel; import lombok.Data; import java.util.Date; +import java.util.List; /** * @author 马三炮 @@ -57,6 +58,10 @@ public class TbCablewaTransVo { @Excel(name = "最大坡度", sort = 5) private String maxSlope; + + @Excel(name = "索道宽度(m)", sort = 6) + private String cablewayWidth; + /** * 是否可用 1,可用 0.不可用 */ @@ -89,4 +94,24 @@ public class TbCablewaTransVo { private int page = 1; private int limit = 10; + + private List cablewaTransPointVoList; + + @Data + public static class CablewaTransPointVo { + + /** + * 经度 + */ + private String lng; + /** + * 纬度 + */ + private String lat; + /** + * 排序 + */ + private int sort; + + } } diff --git a/src/main/resources/mappers/backstage/DigitalSignageMapper.xml b/src/main/resources/mappers/backstage/DigitalSignageMapper.xml index 11036c6..0a9671c 100644 --- a/src/main/resources/mappers/backstage/DigitalSignageMapper.xml +++ b/src/main/resources/mappers/backstage/DigitalSignageMapper.xml @@ -164,4 +164,16 @@ ) A ON tts.id = A.three_span_id WHERE tts.pro_id = #{id} AND tts.span_type = '1' and tts.is_active='1' + + diff --git a/src/main/resources/mappers/basic/TbCablewaTransMapper.xml b/src/main/resources/mappers/basic/TbCablewaTransMapper.xml index 6a84d85..f13ed5d 100644 --- a/src/main/resources/mappers/basic/TbCablewaTransMapper.xml +++ b/src/main/resources/mappers/basic/TbCablewaTransMapper.xml @@ -2,7 +2,7 @@ - + insert into tb_cablewa_trans pro_id, @@ -13,6 +13,7 @@ max_slope, create_time, create_user_id, + cableway_width, is_active @@ -24,9 +25,19 @@ #{maxSlope}, #{createTime}, #{createUserId}, + #{cablewayWidth}, 1 + + + INSERT INTO tb_cablewa_trans_point(pro_id,cablewa_trans_id,lng,lat,sort) VALUES + + ( + ${proId},#{id},#{item.lng},#{item.lat},#{item.sort} + ) + + update tb_cablewa_trans @@ -35,6 +46,7 @@ max_height = #{maxHeight}, safety_distance = #{safetyDistance}, max_slope = #{maxSlope}, + cableway_width = #{cablewayWidth}, update_user_id = #{updateUserId}, update_time = now() @@ -43,11 +55,15 @@ update tb_cablewa_trans set is_active = '0' where id =#{id} + + + DELETE FROM tb_cablewa_trans_point WHERE cablewa_trans_id = #{id} + select tct.id as id,tct.pro_id as proId,tct.tower_id as towerId,tct.cableway_length as cablewayLength, tct.max_height as maxHeight,tct.safety_distance as safetyDistance,tct.max_slope as maxSlope, - tct.create_user_id as createUserId,tt.tower_name as towerName + tct.create_user_id as createUserId,tt.tower_name as towerName,tct.cableway_length AS cablewayWidth from tb_cablewa_trans tct left join tb_tower tt on tct.tower_id = tt.id where tct.id = #{id} @@ -66,7 +82,15 @@ + + diff --git a/src/main/resources/static/css/synthesisQuery/setLonAndLat.css b/src/main/resources/static/css/synthesisQuery/setLonAndLat.css new file mode 100644 index 0000000..26717b1 --- /dev/null +++ b/src/main/resources/static/css/synthesisQuery/setLonAndLat.css @@ -0,0 +1,52 @@ +html { + width: 100%; + height: 100%; + margin: 0; +} + +body { + margin: 0; + font-family: 'Alibaba PuHuiTi R'; + height: 98%; +} + +.layout { + display: flex; + justify-content: center; + align-items: center; +} + +#main-box { + width: 100%; + height: 100%; + padding: 1% 1% 0 1%; + box-sizing: border-box; + background-color: #fff; + border-radius: 5px; + flex-direction: column; +} + +#map-box { + width: 100%; + height: calc(100% - 80px); +} + +.btn-box { + width: 100%; + height: 60px; + margin-top: 10px; + box-sizing: border-box; + display: flex; + justify-content: center; + align-items: center; +} + +.save { + background-color: #00377A; +} + +/** 去除百度地图的水印和logo */ +.BMap_cpyCtrl, +.anchorBL { + display: none; +} \ No newline at end of file diff --git a/src/main/resources/static/img/synthesisQuery/tower.png b/src/main/resources/static/img/synthesisQuery/tower.png new file mode 100644 index 0000000..0c86bd6 Binary files /dev/null and b/src/main/resources/static/img/synthesisQuery/tower.png differ diff --git a/src/main/resources/static/js/basic/lineManagement/child/ropewayFormTemp.js b/src/main/resources/static/js/basic/lineManagement/child/ropewayFormTemp.js index 35755e8..61bb64c 100644 --- a/src/main/resources/static/js/basic/lineManagement/child/ropewayFormTemp.js +++ b/src/main/resources/static/js/basic/lineManagement/child/ropewayFormTemp.js @@ -1,9 +1,10 @@ -let form, layer, util,laydate, idParam, phoneParam,proId; +let form, layer, util, laydate, idParam, phoneParam, proId; let arr = ['background', 'web', 'mobile', 'wx']; let background, web, mobile, wx; let data = [], appResList = []; - +let pointsStr = null; let startDate, endDate; + function setParams(params) { console.log(params) idParam = JSON.parse(params).id; @@ -24,28 +25,34 @@ function setParams(params) { } // 监听杆塔选择 - form.on('select(towerSelect)', function(data) { + form.on('select(towerSelect)', function (data) { // 这里可以根据选择的杆塔自动填写相关信息 - if(data.value) { + if (data.value) { getTowerInfo(data.value); } }); // 表单验证 form.verify({ - required: function(value, item) { - if(!value) { + required: function (value, item) { + if (!value) { return '必填项不能为空'; } }, - number: [ + number: function (value, item) { + const strictPositiveNumberRegex = /^([1-9]\d*(\.\d+)?|0\.\d*[1-9]\d*)$/; + if (!strictPositiveNumberRegex.test(value)) { + return '请输入有效的数字'; + } + }, + /*number: [ /^-?\d+\.?\d*$/, '请输入有效的数字' - ] + ],*/ }); // 表单提交 - form.on('submit(formData)', function(data) { + form.on('submit(formData)', function (data) { let formData = data.field; formData.proId = proId; saveData(formData); @@ -56,12 +63,12 @@ function setParams(params) { // 加载杆塔选项 function loadTowerOptions() { let url = dataUrl + "/tbTower/getTbTowerAll"; - let params = {"proId":proId}; + let params = {"proId": proId}; params = { encryptedData: encryptCBC(JSON.stringify(params)) } - ajaxRequest(url, "POST", params, true, null, function(result) { - if(result.code === 200) { + ajaxRequest(url, "POST", params, true, null, function (result) { + if (result.code === 200) { let options = ''; result.data.forEach(item => { options += ``; @@ -79,9 +86,9 @@ function getTowerInfo(towerId) { id: towerId, encryptedData: encryptCBC(JSON.stringify({id: towerId})) }; - - ajaxRequest(url, "POST", params, true, null, function(result) { - if(result.code === 200) { + + ajaxRequest(url, "POST", params, true, null, function (result) { + if (result.code === 200) { // 可以根据杆塔信息自动填写一些表单项 console.log("获取到杆塔信息:", result.data); } @@ -95,15 +102,15 @@ function getRopewayById() { let params = { encryptedData: encryptCBC(JSON.stringify({id: idParam})) }; - - ajaxRequest(url, "POST", params, true, null, function(result) { + + ajaxRequest(url, "POST", params, true, null, function (result) { layer.close(loadingMsg); if (result.code === 200) { setFormData(result.data); } else { layer.alert(result.msg, {icon: 2}); } - }, function(xhr) { + }, function (xhr) { layer.close(loadingMsg); error(xhr); }); @@ -111,8 +118,9 @@ function getRopewayById() { // 设置表单数据 function setFormData(data) { - if(data) { + if (data) { form.val("ropewayForm", data); + pointsStr = JSON.stringify(data.cablewaTransPointVoList); // 设置跨越类型并触发切换事件 form.render('select'); } @@ -124,18 +132,22 @@ function saveData2() { // 保存数据 function saveData(data) { + if (!pointsStr) { + return layer.msg("请配置索道口、中转口、索道终点经纬度", {icon: 7}); + } let loadingMsg = layer.msg('数据上传中,请稍候...', {icon: 16, scrollbar: false, time: 0}); let url = dataUrl + "/tbCablewaTrans/addTbCablewaTrans"; let params = data; + params.cablewaTransPointVoList = JSON.parse(pointsStr); if (params.id) { url = dataUrl + "/tbCablewaTrans/updateTbCablewaTrans"; } - + console.log("索道运输的新增修改", params); params = { encryptedData: encryptCBC(JSON.stringify(params)) } - + // 禁用所有输入框和按钮 function disableForm() { $('input, select').attr('disabled', true); @@ -149,7 +161,7 @@ function saveData(data) { $('.span-type-option').css('pointer-events', 'auto'); $('.save, .cancel').removeClass("layui-btn-disabled").attr("disabled", false); } - + ajaxRequest(url, "POST", params, true, function () { disableForm(); }, function (result) { @@ -158,12 +170,12 @@ function saveData(data) { layer.msg(result.msg, {icon: 1}); setTimeout(function () { closePage(1); - },3000) + }, 3000) } else { layer.alert(result.msg, {icon: 2}) setTimeout(function () { enableForm(); - },3000) + }, 3000) } }, function (xhr) { layer.close(loadingMsg); @@ -172,6 +184,22 @@ function saveData(data) { }); } +// 配置索道口、中转口 +function setLonAndLatData() { + let obj = {}; + obj.id = proId; + obj.points = pointsStr; + openIframeByParamObj2("setLonAndLatData", "配置索道口、中转口、索道终点经纬度", "../../lineManagement/child/setLonAndLat.html", "92%", "95%", obj); +} + +function savePointData(str) { + pointsStr = str; +} + +function clearPointData() { + pointsStr = null; +} + // 关闭页面 function closePage(type) { let index = parent.layer.getFrameIndex(window.name); diff --git a/src/main/resources/static/js/basic/lineManagement/child/ropewayList.js b/src/main/resources/static/js/basic/lineManagement/child/ropewayList.js index f2930cb..49baa49 100644 --- a/src/main/resources/static/js/basic/lineManagement/child/ropewayList.js +++ b/src/main/resources/static/js/basic/lineManagement/child/ropewayList.js @@ -76,6 +76,7 @@ function initTable(dataList, limit, page) { {field: "maxHeight", title: "最大载重(kg)", unresize: true, align: "center"}, {field: "safetyDistance", title: "安全距离(m)", unresize: true, align: "center"}, {field: "maxSlope", title: "最大坡度", unresize: true, align: "center"}, + {field: "cablewayWidth", title: "索道宽度(m)", unresize: true, align: "center"}, { title: "操作", unresize: true, width: 200, align: "center", templet: function (d) { diff --git a/src/main/resources/static/js/basic/lineManagement/child/setLonAndLat.js b/src/main/resources/static/js/basic/lineManagement/child/setLonAndLat.js new file mode 100644 index 0000000..510a37a --- /dev/null +++ b/src/main/resources/static/js/basic/lineManagement/child/setLonAndLat.js @@ -0,0 +1,348 @@ +let form, layer; +let objParams = {}; +let map = null; // 地图实例 +let intLng = 116.254; // 初始经度 +let intLat = 39.965; // 初始纬度 +let isMap = true; // 是否是地图模式 +let markerCount = 0; // 标记点计数器 +let markers = []; // 标记点数组 +let polylineView = null; + +function setParams(obj) { + objParams = JSON.parse(obj); + layui.use(['form', 'layer'], function () { + form = layui.form; + layer = layui.layer; + table = layui.table; + initData(); + }); +} + +// 地图配置项 +const config = { + polyline: { + strokeWeight: 1, // 线条宽度 + strokeOpacity: 0.9, // 透明度 + strokeStyle: "dashed", // solid(实线)或dashed(虚线) + enableEditing: false, // 是否可编辑 + enableClicking: true, // 是否可点击 + }, +}; + +// 加载工程杆塔数据 +function initData() { + let url = dataUrl + "/backstage/digitalSignage/getTowersPosition" + let obj = { + id: objParams.id + } + let params = { + encryptedData: encryptCBC(JSON.stringify(obj)) + } + ajaxRequest(url, "POST", params, true, function () { + }, function (result) { + if (result.status === 200) { + setData(result.data); + } else { + layer.msg(result.msg, {icon: 2}) + } + }, function (xhr) { + error(xhr) + }); + + function setData(list) { + if (list && list.length > 0) { + if (objParams.points) { + let points = JSON.parse(objParams.points) + intLng = points[0].lng; + intLat = points[0].lat; + }else{ + intLng = list[0].proLon ? list[0].proLon : list[0].lon; + intLat = list[0].proLat ? list[0].proLat : list[0].lat; + } + } + initMap(list); + } +} + + +// 百度地图初始化 +function initMap(list) { + if (map) { + map = null; + } + map = new BMapGL.Map("map-box"); + // 以第一个点为中心初始化地图 + map.centerAndZoom(new BMapGL.Point(intLng, intLat), 16); + + map.setTilt(60); //设置地图的倾斜角度 + map.enableScrollWheelZoom(true); // 启用滚轮缩放 + // map.setTilt(60); // 设置地图倾斜角度 + + // map.setDisplayOptions({ + // building: true, // 显示3D建筑物 + // }); + var navigationControl = new BMapGL.NavigationControl3D(); + map.addControl(navigationControl); + + // 每次初始化的时候清除所有标点以及线 + map.clearOverlays(); + var styleJson = [ + // 隐藏道路 + { + featureType: "highway", + elementType: "all", + stylers: {visibility: "off"}, + }, + { + featureType: "arterial", + elementType: "all", + stylers: {visibility: "off"}, + }, + { + featureType: "local", + elementType: "all", + stylers: {visibility: "off"}, + }, + { + featureType: "railway", + elementType: "all", + stylers: {visibility: "off"}, + }, + + // 保留背景、水域、绿地等(避免地图变空白) + { + featureType: "background", + elementType: "all", + stylers: {visibility: "on"}, + }, + { + featureType: "water", + elementType: "all", + stylers: {visibility: "on"}, + }, + { + featureType: "green", + elementType: "all", + stylers: {visibility: "on"}, + }, + + // 保留标点和文字(避免自定义点被隐藏) + { + featureType: "point", + elementType: "all", + stylers: {visibility: "on"}, + }, + { + featureType: "label", + elementType: "all", + stylers: {visibility: "on"}, + }, + ]; + + if (isMap) { + // map.setMapType(BMAP_EARTH_MAP); // 地球模式 + map.setMapType(BMAP_SATELLITE_MAP); // 地球模式 + /*map.setDisplayOptions({ + poiText: false, // 隐藏POI文字 + poiIcon: false, // 隐藏POI图标 + building: false, // 隐藏建筑物 + });*/ + } else { + map.setMapType(BMAP_NORMAL_MAP); // 普通模式 + + // 增加不是纯白的背景色 + map.setMapStyleV2({ + styleJson: [ + { + featureType: "background", + elementType: "all", + stylers: {color: "#f5f5f5"}, + }, + ], + }); + } + + if (isMap) { + map.setMapStyleV2({ + styleJson, + }); + } + initTowerLine(list); + // 点击地图添加标记 + map.addEventListener("click", function (e) { + addMarker(e.latlng.lng, e.latlng.lat); + }); + + if (objParams.points) { + let points = JSON.parse(objParams.points) + $.each(points, function (i, item) { + addMarker(item.lng, item.lat) + viewPointLine(); + }) + } + + function addMarker(lng, lat) { + var point = new BMapGL.Point(lng, lat); + // 创建点标记 + var marker = new BMapGL.Marker(point); + // 添加到地图 + map.addOverlay(marker); + // 创建标签 + var label = new BMapGL.Label("点" + (markerCount + 1), { + position: point, + offset: new BMapGL.Size(10, -30) + }); + label.setStyle({ + color: "#333", + fontSize: "12px", + fontWeight: "bold", + backgroundColor: "rgba(255,255,255,0.9)", + border: "1px solid #ddd", + borderRadius: "4px", + padding: "2px 6px" + }); + map.addOverlay(label); + // 存储标记和标签 + markers.push({ + marker: marker, + label: label, + point: point + }); + // 更新计数器 + markerCount++; + } +} + +// 杆塔连线 +function initTowerLine(points) { + // 存储所有点的坐标用于连线 + var linePoints = []; + // 添加点覆盖物和标签 + points.forEach(function (item, index) { + var point = new BMapGL.Point(item.lon, item.lat); + linePoints.push(point); // 添加到连线数组 + // 创建点标记 + var icon = new BMapGL.Icon("../../../../img/synthesisQuery/tower.png", new BMapGL.Size(32, 32), { + // 图标定位点 + anchor: new BMapGL.Size(16, 30), + }); + var marker = new BMapGL.Marker(point, {icon: icon}); + map.addOverlay(marker); + // 创建标签 + var label = new BMapGL.Label(item.towerName, { + position: point, + offset: new BMapGL.Size(20, -40) + }); + label.setStyle({ + color: "#333", + fontSize: "12px", + fontWeight: "bold", + backgroundColor: "rgba(255,255,255,0.9)", + border: "1px solid #ddd", + borderRadius: "4px", + padding: "2px 6px" + }); + map.addOverlay(label); + }); + // 创建连线 + var polyline = new BMapGL.Polyline(linePoints, { + strokeColor: '#FF0305', + strokeWeight: 6, + strokeOpacity: 0.8 + }); + map.addOverlay(polyline); + // 可选:自动调整视图以包含所有点 + map.setViewport(linePoints); + // 2. 获取视口边界和中心点 + var bounds = map.getBounds(); + var center = bounds.getCenter(); + // 3. 计算视口距离 + var viewportDistance = Math.max( + BMapGL.Map.prototype.getDistance(center, new BMapGL.Point(bounds.getSouthWest().lng, center.lat)), + BMapGL.Map.prototype.getDistance(center, new BMapGL.Point(center.lng, bounds.getSouthWest().lat)) + ); + // 4. 设置3D参数 + var zoom = map.getZoom(); + var newTilt = 60; + var newHeading = 30; + + // 5. 应用3D视角 + map.setTilt(newTilt); + map.setHeading(newHeading); + + // 6. 稍微缩小以确保所有点在3D视角下可见 + setTimeout(function () { + map.setZoom(zoom - 1); + }, 100); +} + +// 清除所有标点 +document.getElementById("clearMarkers").addEventListener("click", function () { + markers.forEach(function (item) { + map.removeOverlay(item.marker); + map.removeOverlay(item.label); + }); + markers = []; + markerCount = 0; + if (polylineView) { + map.removeOverlay(polylineView); // 移除旧的折线 + } + let frameId = parent.document.getElementById('addDataRopeway').getElementsByTagName("iframe")[0]; + frameId.contentWindow.clearPointData(); +}); + +// 预览标点连线 +document.getElementById("viewPoint").addEventListener("click", function () { + viewPointLine(); +}); + +function viewPointLine() { + if (markers && markers.length === 0) { + return layer.msg('请先创建点位', {icon: 7}); + } + if (polylineView) { + map.removeOverlay(polylineView); // 移除旧的折线 + } + let points = []; + $.each(markers, function (index, item) { + points.push(item.point); + }) + // 2. 创建折线连接这些点位 + var polyline = new BMapGL.Polyline(points, { + strokeColor: "#0C14CA", // 线颜色 + strokeWeight: 4, // 线宽 + strokeOpacity: 0.8 // 线透明度 + }); + polylineView = polyline; + map.addOverlay(polyline); +} + +// 保存点位数据 +function saveData() { + if (markers && markers.length === 0) { + return layer.msg('请先创建点位', {icon: 7}); + } + + if (markers && markers.length < 2) { + return layer.msg('至少创建两个点位', {icon: 7}); + } + let points = []; + $.each(markers, function (index, item) { + points.push({ + lng: item.point.lng, + lat: item.point.lat, + sort:index + 1 + }); + }) + let frameId = parent.document.getElementById('addDataRopeway').getElementsByTagName("iframe")[0]; + frameId.contentWindow.savePointData(JSON.stringify(points)); + parent.layer.msg('保存成功', {icon: 1}); + let index = parent.layer.getFrameIndex(window.name); //先得到当前 iframe层的索引 + parent.layer.close(index); //再执行关闭 +} + +// 关闭页面 +function closePage() { + let index = parent.layer.getFrameIndex(window.name); //先得到当前 iframe层的索引 + parent.layer.close(index); //再执行关闭 +} \ No newline at end of file diff --git a/src/main/resources/static/js/basic/lineManagement/lineList.js b/src/main/resources/static/js/basic/lineManagement/lineList.js index 0a49ba7..b6fb085 100644 --- a/src/main/resources/static/js/basic/lineManagement/lineList.js +++ b/src/main/resources/static/js/basic/lineManagement/lineList.js @@ -270,21 +270,21 @@ function addTower(id){ let param = { 'id': id } - openIframe2("tower", '杆塔管理', "child/towerList.html", '1200px', '685px', param); + openIframe2("tower", '杆塔管理', "child/towerList.html", '1600px', '855px', param); } function addThreeSpan(id){ let param = { 'id': id } - openIframe2("threeSpan", '“三跨”管理', "child/threeSpanList.html", '1200px', '685px', param); + openIframe2("threeSpan", '“三跨”管理', "child/threeSpanList.html", '1600px', '855px', param); } function addRopeway(id){ let param = { 'id': id } - openIframe2("ropeway", '索道运输', "child/ropewayList.html", '1200px', '685px', param); + openIframe2("ropeway", '索道运输', "child/ropewayList.html", '1600px', '855px', param); } function exportPro(){ diff --git a/src/main/resources/static/js/openIframe.js b/src/main/resources/static/js/openIframe.js index e8bdb97..252e401 100644 --- a/src/main/resources/static/js/openIframe.js +++ b/src/main/resources/static/js/openIframe.js @@ -64,4 +64,27 @@ function openIframeByParamObj(id, title, content, width, height, paramsObj,isRef } } }); +} + +function openIframeByParamObj2(id, title, content, width, height, paramsObj) { + let layerIndex = parent.layer.open({ + id: id, + type: 2, + title: ['
' + title + '
', 'font-size:16px;background-color:#f0f0f0;display: flex;align-items: center;'], + content: content, + shade: 0.3, + anim: 2, + shadeClose: false, + area: [width, height], + move: false, + success: function () { + if (paramsObj) { + let iframeWin = parent.window["layui-layer-iframe" + layerIndex]; + iframeWin.setParams(JSON.stringify(paramsObj)); + } + }, + end: function () { + + } + }); } \ No newline at end of file diff --git a/src/main/resources/static/js/synthesisQuery/proProgressUpdateDetailAjax.js b/src/main/resources/static/js/synthesisQuery/proProgressUpdateDetailAjax.js index 1199838..a7795c9 100644 --- a/src/main/resources/static/js/synthesisQuery/proProgressUpdateDetailAjax.js +++ b/src/main/resources/static/js/synthesisQuery/proProgressUpdateDetailAjax.js @@ -23,14 +23,14 @@ function initSetProData() { $('.layui-progress').remove(); $('#proName').html(obj.proName); $('#companyName').html(obj.companyName); - $('#proStatus').html('' + obj.proStatus); - $('#voltageLevel').html(obj.voltageLevel); + $('#proStatus').html('' + (obj.proStatus || '/')); + $('#voltageLevel').html((obj.voltageLevel || '/')); $('#lineLength').html((obj.lineLength || '/') + 'km'); $('#towerNum').html(obj.towerNum); $('#towerNum2').html(obj.towerNum); - $('#planStartTime').html(obj.planStartTime); - $('#planEndTime').html(obj.planEndTime); - $('#updateTime').html(obj.updateTime); + $('#planStartTime').html(obj.planStartTime || '/'); + $('#planEndTime').html(obj.planEndTime || '/'); + $('#updateTime').html(obj.updateTime || '/'); $("#progress").after(`
diff --git a/src/main/resources/static/pages/basic/lineManagement/child/ropewayFormTemp.html b/src/main/resources/static/pages/basic/lineManagement/child/ropewayFormTemp.html index 7541f28..f14546d 100644 --- a/src/main/resources/static/pages/basic/lineManagement/child/ropewayFormTemp.html +++ b/src/main/resources/static/pages/basic/lineManagement/child/ropewayFormTemp.html @@ -65,6 +65,13 @@ placeholder="请输入" class="layui-input" maxlength="10">
+
+ +
+ +
+
@@ -72,6 +79,7 @@
+
@@ -83,5 +91,6 @@ + \ No newline at end of file diff --git a/src/main/resources/static/pages/basic/lineManagement/child/setLonAndLat.html b/src/main/resources/static/pages/basic/lineManagement/child/setLonAndLat.html new file mode 100644 index 0000000..b72f21d --- /dev/null +++ b/src/main/resources/static/pages/basic/lineManagement/child/setLonAndLat.html @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + 配置索道口、中转口经纬度 + + + +
+
+ +
+
+ + + + +
+
+ + + + \ No newline at end of file