From 0b9362bd4173ccef9cdca301bdeb6c2f99d619a1 Mon Sep 17 00:00:00 2001 From: zhoule Date: Fri, 19 Apr 2024 17:36:57 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=E9=A6=96=E9=A1=B5=20=E8=B7=AF=E7=BD=91?= =?UTF-8?q?=E8=AE=BE=E6=96=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dialogs/RoadNetworkFacilities/index.vue | 183 ++++++++++++++++++ .../Home/components/RoadAndEvents/index.vue | 4 +- .../RoadAndEvents/utils/buttonEvent.js | 73 ++++++- .../RoadAndEvents/utils/httpList.js | 38 ++++ .../src/views/JiHeExpressway/utils/enum.js | 9 + 5 files changed, 305 insertions(+), 2 deletions(-) create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/RoadNetworkFacilities/index.vue diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/RoadNetworkFacilities/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/RoadNetworkFacilities/index.vue new file mode 100644 index 00000000..48de2c7d --- /dev/null +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/RoadNetworkFacilities/index.vue @@ -0,0 +1,183 @@ + + + + + + \ No newline at end of file diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/index.vue index b1ff7993..78100f62 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/index.vue +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/index.vue @@ -45,6 +45,7 @@ import Camera from "./../Dialogs/Camera/index.vue"; import Broadcast from "./../Dialogs/Broadcast/index.vue"; import TrafficIncidents from "./../Dialogs/TrafficIncidents/index.vue"; import PerceiveEvent from "./../Dialogs/PerceiveEvent/index.vue"; +import RoadNetworkFacilities from "./../Dialogs/RoadNetworkFacilities/index.vue"; import SmartDevice from "./../Dialogs/SmartDevice/index.vue"; import SolarEnergy from "./../Dialogs/SolarEnergy/index.vue"; import Intermodulation from "./../Dialogs/Intermodulation/index.vue"; @@ -69,7 +70,8 @@ export default { SolarEnergy, Intermodulation, GuardrailCollision, - FatigueWakesUp + FatigueWakesUp, + RoadNetworkFacilities }, data() { return { diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/buttonEvent.js b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/buttonEvent.js index f890faf5..dc74fc65 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/buttonEvent.js +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/buttonEvent.js @@ -2,10 +2,11 @@ import { getDeviceList, getEventTopicList, getPerceiveEventList, + getRoadNetworkFacilitiesList, } from "./httpList"; import { delay } from "@screen/utils/common"; import { Message } from "element-ui"; -import { EventTopics } from "@screen/utils/enum.js"; +import { EventTopics, RoadNFTopics } from "@screen/utils/enum.js"; import { debounce, cloneDeep, find } from "lodash"; import Vue from "vue"; @@ -84,6 +85,7 @@ export const lngLatMap = {}; //优化 缩略图 + 地图 复用lngLatmap export function getHandleDeviceType(item) { if (DeviceForMap[item.title]) return "地图路测设备/map"; if (EventTopics[item.title]) return "地图事件专题/map"; + if (RoadNFTopics[item.title]) return "路网设施/map"; } let debounceNoneLngLatMessage = debounce(() => { @@ -245,6 +247,75 @@ export const eventMap = { cacheRemoveFunc[`地图事件专题/${item.title}`]?.(); }, + // 路网设施 需要在地图显示的 + async "路网设施/map"(item, filterData, isDefault, cb) { + const deviceType = RoadNFTopics[item.title]; + + let loadingMessage; + if (!isDefault) { + loadingMessage = Message.info({ + message: `${item.title}路网设施位置加载中...`, + duration: 0, + customClass: "loading-message", + iconClass: "el-icon-loading", + }); + } + console.log("deviceType", deviceType); + const data = await getRoadNetworkFacilitiesList(deviceType, filterData) + .then(async (data) => { + await delay(600); + data.forEach((item) => { + if (item.otherConfig) { + let otherConfig = JSON.parse(item.otherConfig); + item.latitude = otherConfig.dimension + item.longitude = otherConfig.longitude + } + }); + return data; + }) + .catch(() => {}); + + loadingMessage?.close(); + + if (!data) return this.emitter.emit("selectedCompleted", item); + + if (!data.length && !isDefault) { + this.emitter.emit("selectedCompleted", item); + return Message.warning(`没有${item.title}路网设施数据!`); + } + + eventMap[`路网设施/map_close`](item); + const cbCall = () => cb?.(item, { deviceType: `路网设施_${deviceType}` }); + cbCall(); + + const options = { + stateCallback: () => true, + item, + }; + + let removeData = data.map((item) => + resolveDataOptions.call( + this, + item, + options, + "RoadNetworkFacilities", + isDefault + ) + ); + addDataPreHandle(removeData); + markerClusterIns.addData(removeData, isDefault); + this.emitter.emit("selectedCompleted", item); + + cacheRemoveFunc[`路网设施/${item.title}`] = () => { + cbCall(); + removeDataPreHandle(removeData); + markerClusterIns.removeData(removeData); + }; + }, + "路网设施/map_close"(item) { + cacheRemoveFunc[`路网设施/${item.title}`]?.(); + }, + // 感知事件 async "事件专题/感知事件"(item, filterData, isDefault, cb) { let loadingMessage; diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/httpList.js b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/httpList.js index 82465cfc..a04557a9 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/httpList.js +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/httpList.js @@ -409,3 +409,41 @@ export function getPerceiveEventList(data = {}, options = {}) { }); }); } + +/** + * 路网设施 列表 根据类型获取 + * @param {number} facilityType + */ +export function getRoadNetworkFacilitiesList(facilityType, options = {}) { + return new Promise((resolve, reject) => { + if (!facilityType) { + Message.error(`事件加载失败!`); + return reject(); + } + + const { stakeMark } = options; + let url = `/business/facility/query?facilityType=${facilityType}`; + if (stakeMark) { + let formatStartStakeMark = `K${padZero(stakeMark[0])}%2B${padZero( + stakeMark[1] + )}`; + url += `&stakeMark=${formatStartStakeMark}`; + } + request({ + url: url, + method: "get", + }) + .then(({ code, data }) => { + if (code != 200) { + reject(); + return Message.error(`事件加载失败!`); + } + + resolve(data); + }) + .catch(() => { + Message.error(`事件加载失败!`); + reject(); + }); + }); +} diff --git a/ruoyi-ui/src/views/JiHeExpressway/utils/enum.js b/ruoyi-ui/src/views/JiHeExpressway/utils/enum.js index 55c4c7fc..b8282290 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/utils/enum.js +++ b/ruoyi-ui/src/views/JiHeExpressway/utils/enum.js @@ -109,6 +109,15 @@ export const EventTopics = { 其他事件: 11, }; +//路网设施类型 +export const RoadNFTopics = { + 收费站: 1, + 枢纽立交: 4, + 桥梁: 5, + 服务区: 6, + 停车区: 7, +}; + // 事件类型 eventType export const EventType = { 0: { From d69800720a49deabc8276fee790fab5e6c2c2296 Mon Sep 17 00:00:00 2001 From: qingzhengli <1204552371@qq.com> Date: Fri, 19 Apr 2024 18:08:53 +0800 Subject: [PATCH 2/9] =?UTF-8?q?feat=20=E6=89=B9=E9=87=8F=E6=8E=A7=E5=88=B6?= =?UTF-8?q?=20=E6=83=85=E6=8A=A5=E6=9D=BF=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/JiHeExpressway/mixins/InfoBoard.js | 287 ++--- .../components/HomeFrameControl/index.vue | 12 +- .../Home/components/InfoBoard/InfoBoard.vue | 1019 ++++++++++++++++ .../pages/Home/components/InfoBoard/index.vue | 1040 +---------------- .../pages/service/board/index.vue | 32 +- 5 files changed, 1201 insertions(+), 1189 deletions(-) create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/InfoBoard/InfoBoard.vue diff --git a/ruoyi-ui/src/views/JiHeExpressway/mixins/InfoBoard.js b/ruoyi-ui/src/views/JiHeExpressway/mixins/InfoBoard.js index 54776453..5009b82f 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/mixins/InfoBoard.js +++ b/ruoyi-ui/src/views/JiHeExpressway/mixins/InfoBoard.js @@ -1,152 +1,157 @@ -import { publishToBoard, saveBoardReleaseLog } from '@/api/board/board' -import moment from 'moment/moment'; -import store from '@/store' -export default{ - data(){ - return { +import { publishToBoard, saveBoardReleaseLog } from "@/api/board/board"; +import moment from "moment/moment"; +import store from "@/store"; +import { Message } from "element-ui"; +export default { + data() { + return {}; + }, + methods: { + // 新增待下发 + ____onAddDeviceItem() { + let arr = this.selectedSize.split("*"); - } - }, - methods:{ - // 新增待下发 - ____onAddDeviceItem() { - let arr = this.selectedSize.split("*"); - - this.editDialog = { - visible: true, - mode: "add", - type: "device", - tpl: { - "textContent": "", - "origin": { - displayAreaWidth: +arr[0], - displayAreaHeight: +arr[1] - } - } - } - }, - // 从模板新增待下发 - ____onTplToDevice(item, showDialog) { - - // if(this.checkedDeviceIds.length<=0){ - // this.$message.warning('未选择设备!'); - // return; - // } - - let arr = this.selectedSize.split("*"); - item.origin = { - displayAreaWidth: +arr[0], - displayAreaHeight: +arr[1] - } - - this.editDialog = { - visible: showDialog == false ? false : true, - mode: "toDevice", - type: "template", - tpl: item - } + this.editDialog = { + visible: true, + mode: "add", + type: "device", + tpl: { + textContent: "", + origin: { + displayAreaWidth: +arr[0], + displayAreaHeight: +arr[1], + }, }, - // 发布信息 - ____publishInfo() { - let deviceList = []; - if (this.selectedDevice){ - deviceList = [this.selectedDevice]; - }else{ - deviceList = this.selectedDevices; - } - this.$confirm('是否确定发布情报板?', '提示', { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning' - }).then(() => { - - let loading = this.$loading({ - lock: true, - text: 'Loading', - spinner: 'el-icon-loading', - background: 'rgba(0, 0, 0, 0.7)' - }) + }; + }, + // 从模板新增待下发 + ____onTplToDevice(item, showDialog) { + // if(this.checkedDeviceIds.length<=0){ + // this.$message.warning('未选择设备!'); + // return; + // } - let content = []; + let arr = this.selectedSize.split("*"); + item.origin = { + displayAreaWidth: +arr[0], + displayAreaHeight: +arr[1], + }; - this.selectedBdMsg.forEach(item => { - content.push({ - STAY: item.playbackDuration, - ACTION: item.screenEntryMethod, - SPEED: item.fontSpacing || 0, - COLOR: item.foregroundColor, - FONT: item.font, - FONT_SIZE: item.fontSize, - CONTENT: item.textContent.replaceAll(',', '\\,').replaceAll('=', '\\=').replaceAll('\n', '\\\\n'), - width: item.displayAreaWidth, - height: item.displayAreaHeight, - formatStyle: item.verticalAlignment - }) - }) + this.editDialog = { + visible: showDialog == false ? false : true, + mode: "toDevice", + type: "template", + tpl: item, + }; + }, + // 发布信息 + ____publishInfo() { + let deviceList = []; + if (this.isMultiControl && !this.selectItems.length) { + return Message.error("请至少选择一个设备!"); + } + const selectItems = this.selectItems.map((item) => JSON.parse(item)); + if (this.isMultiControl) deviceList = selectItems; + else { + if (this.selectedDevice) deviceList = [this.selectedDevice]; + else deviceList = this.selectedDevices; + } - let data = { content: content, deviceList } + this.$confirm("是否确定发布情报板?", "提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning", + }) + .then(() => { + let loading = this.$loading({ + lock: true, + text: "Loading", + spinner: "el-icon-loading", + background: "rgba(0, 0, 0, 0.7)", + }); - if (IS_TESTING) { - // this.saveLog(content); - this.____getDeviceInfo(); - loading.close() + let content = []; - } else { - publishToBoard(data).then(res => { - // this.saveLog(content); - this.$message({ - type:"success", - message:"发布成功!" - }); - this.____getDeviceInfo(); - }).catch(err=>{ + this.selectedBdMsg.forEach((item) => { + content.push({ + STAY: item.playbackDuration, + ACTION: item.screenEntryMethod, + SPEED: item.fontSpacing || 0, + COLOR: item.foregroundColor, + FONT: item.font, + FONT_SIZE: item.fontSize, + CONTENT: item.textContent + .replaceAll(",", "\\,") + .replaceAll("=", "\\=") + .replaceAll("\n", "\\\\n"), + width: item.displayAreaWidth, + height: item.displayAreaHeight, + formatStyle: item.verticalAlignment, + }); + }); - }).finally(()=>{ - loading.close() - }); - } + let data = { content: content, deviceList }; - }).catch(() => { + if (IS_TESTING) { + // this.saveLog(content); + this.____getDeviceInfo(); + loading.close(); + } else { + publishToBoard(data) + .then((res) => { + // this.saveLog(content); this.$message({ - type: 'info', - message: '取消发布' - }) - }) - - }, - // - saveLog(content){ - let time = moment().format("YYYY-MM-DD HH:mm:ss"); - let device = this.selectedDevices; - let data = { - "createBy": store.getters.name, - "createTime": time, - "deviceId": device.id, - "deviceName": device.deviceName, - "direction": device.direction, - "params": {}, - "platform": "", - "releaseContent": JSON.stringify(content), - "releaseDeptId": "", - "releaseDeptName": "", - "releaseIp": "", - "releaseStatus": "", - "releaseTime": time, - "releaseUserId": "", - "releaseUserName": "", - "remark": "", - "searchValue": "", - "stakeMark": device.stakeMark, - "updateBy": "", - "updateTime": time - } - saveBoardReleaseLog(data).then(res => { - if(res.code==200){ - console.log("情报板日志已保存:::" , data); - }else{ - console.log("情报板日志保存失败!"); - } - }) + type: "success", + message: "发布成功!", + }); + !isMultiControl && this.____getDeviceInfo(); + }) + .catch((err) => {}) + .finally(() => { + loading.close(); + }); + } + }) + .catch(() => { + this.$message({ + type: "info", + message: "取消发布", + }); + }); + }, + // + saveLog(content) { + let time = moment().format("YYYY-MM-DD HH:mm:ss"); + let device = this.selectedDevices; + let data = { + createBy: store.getters.name, + createTime: time, + deviceId: device.id, + deviceName: device.deviceName, + direction: device.direction, + params: {}, + platform: "", + releaseContent: JSON.stringify(content), + releaseDeptId: "", + releaseDeptName: "", + releaseIp: "", + releaseStatus: "", + releaseTime: time, + releaseUserId: "", + releaseUserName: "", + remark: "", + searchValue: "", + stakeMark: device.stakeMark, + updateBy: "", + updateTime: time, + }; + saveBoardReleaseLog(data).then((res) => { + if (res.code == 200) { + console.log("情报板日志已保存:::", data); + } else { + console.log("情报板日志保存失败!"); } - } -} + }); + }, + }, +}; diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFrameControl/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFrameControl/index.vue index c5fd436f..4ddcde1e 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFrameControl/index.vue +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeFrameControl/index.vue @@ -14,7 +14,7 @@