From e56d4259d3dfbd861a1428378930353ea797ce2a Mon Sep 17 00:00:00 2001 From: qingzhengli <1204552371@qq.com> Date: Mon, 11 Mar 2024 11:22:35 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=20=E5=A2=9E=E5=8A=A0enum=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=20=20&=20map=E4=B8=AD=E6=A1=A9=E5=8F=B7=E6=96=87?= =?UTF-8?q?=E5=AD=97=E6=98=BE=E7=A4=BA=E9=9A=90=E8=97=8F=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/App.vue | 5 + .../images/home-Vector/Vector.svg | 3 + .../images/mapBg/active_title.svg | 20 ++++ .../images/mapBg/fault_title.svg | 20 ++++ .../Home/components/HomeVector/index.vue | 96 +++++++++++++++++++ .../components/RoadAndEvents/utils/map.js | 90 ++++++++++++----- .../views/JiHeExpressway/pages/Home/index.vue | 17 ++-- .../src/views/JiHeExpressway/utils/enum.js | 6 +- 8 files changed, 224 insertions(+), 33 deletions(-) create mode 100644 ruoyi-ui/src/views/JiHeExpressway/images/home-Vector/Vector.svg create mode 100644 ruoyi-ui/src/views/JiHeExpressway/images/mapBg/active_title.svg create mode 100644 ruoyi-ui/src/views/JiHeExpressway/images/mapBg/fault_title.svg create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeVector/index.vue diff --git a/ruoyi-ui/src/App.vue b/ruoyi-ui/src/App.vue index 535fc08c..93f035b3 100644 --- a/ruoyi-ui/src/App.vue +++ b/ruoyi-ui/src/App.vue @@ -64,4 +64,9 @@ export default { font-family: "PangMenZhengDao-3"; src: url("/static/fonts/庞门正道标题体3.ttf"); } + +.amap-marker-label { + border: 0; + background-color: transparent; +} </style> diff --git a/ruoyi-ui/src/views/JiHeExpressway/images/home-Vector/Vector.svg b/ruoyi-ui/src/views/JiHeExpressway/images/home-Vector/Vector.svg new file mode 100644 index 00000000..e3158ed2 --- /dev/null +++ b/ruoyi-ui/src/views/JiHeExpressway/images/home-Vector/Vector.svg @@ -0,0 +1,3 @@ +<svg width="22" height="28" viewBox="0 0 22 28" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path id="Vector" d="M20.2028 0.382867H2.03965C1.20334 0.382867 0.526367 1.0602 0.526367 1.8964V15.5182C0.526367 16.355 1.2034 17.0318 2.03965 17.0318H9.60758V27.627H12.6347V17.0318H20.2027C21.0392 17.0318 21.7163 16.355 21.7163 15.5183V1.8964C21.7163 1.06023 21.0393 0.382812 20.2027 0.382812L20.2028 0.382867ZM5.06641 14.0047H3.55365V9.46395H5.06647V14.0047H5.06641ZM9.60725 14.0047H8.09438V9.46395H9.60725V14.0047ZM14.1482 14.0047H12.6348V9.46395H14.1483V14.0047H14.1482ZM18.6892 14.0047H17.1755V9.46395H18.6892V14.0047ZM20.2028 6.43713H2.03965V1.8964H20.2027V6.43713H20.2028ZM8.09438 3.40927H3.55368V4.92321H8.09441L8.09438 3.40927Z" fill="white"/> +</svg> diff --git a/ruoyi-ui/src/views/JiHeExpressway/images/mapBg/active_title.svg b/ruoyi-ui/src/views/JiHeExpressway/images/mapBg/active_title.svg new file mode 100644 index 00000000..f09c1e6b --- /dev/null +++ b/ruoyi-ui/src/views/JiHeExpressway/images/mapBg/active_title.svg @@ -0,0 +1,20 @@ +<svg width="74" height="22" viewBox="0 0 74 22" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g id="Rectangle 3852"> +<g filter="url(#filter0_i_809_62)"> +<rect width="74" height="22" rx="3" fill="#1E1904"/> +</g> +<rect x="0.5" y="0.5" width="73" height="21" rx="2.5" stroke="#BEA019"/> +</g> +<defs> +<filter id="filter0_i_809_62" x="0" y="0" width="74" height="22" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset/> +<feGaussianBlur stdDeviation="2.4"/> +<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> +<feColorMatrix type="matrix" values="0 0 0 0 0.745098 0 0 0 0 0.627451 0 0 0 0 0.0980392 0 0 0 1 0"/> +<feBlend mode="normal" in2="shape" result="effect1_innerShadow_809_62"/> +</filter> +</defs> +</svg> diff --git a/ruoyi-ui/src/views/JiHeExpressway/images/mapBg/fault_title.svg b/ruoyi-ui/src/views/JiHeExpressway/images/mapBg/fault_title.svg new file mode 100644 index 00000000..9009a869 --- /dev/null +++ b/ruoyi-ui/src/views/JiHeExpressway/images/mapBg/fault_title.svg @@ -0,0 +1,20 @@ +<svg width="74" height="22" viewBox="0 0 74 22" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g id="Rectangle 3851"> +<g filter="url(#filter0_i_809_38)"> +<rect width="74" height="22" rx="3" fill="#330303"/> +</g> +<rect x="0.5" y="0.5" width="73" height="21" rx="2.5" stroke="#D20000"/> +</g> +<defs> +<filter id="filter0_i_809_38" x="0" y="0" width="74" height="22" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset/> +<feGaussianBlur stdDeviation="2.4"/> +<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/> +<feColorMatrix type="matrix" values="0 0 0 0 0.823529 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0"/> +<feBlend mode="normal" in2="shape" result="effect1_innerShadow_809_38"/> +</filter> +</defs> +</svg> diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeVector/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeVector/index.vue new file mode 100644 index 00000000..6940b663 --- /dev/null +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/HomeVector/index.vue @@ -0,0 +1,96 @@ +<template> + <div class="HomeVector"> + <Button :class="['btn', { 'btn-active': activeIcon }]" slot="reference" @click.native="handleClick('Vector')"> + <img src="@screen/images/home-Vector/Vector.svg" /> + </Button> + </div> +</template> + +<script> +import Button from "@screen/components/Buttons/Button.vue"; +import Form from "@screen/components/FormConfig"; +import * as PresetFormItems from "@screen/pages/control/event/event/FormEvent/PresetFormItems.js"; +import { merge, cloneDeep } from "lodash"; +import { markerClusterIns } from "@screen/pages/Home/components/RoadAndEvents/utils/map.js" +export default { + name: "HomeVector", + components: { + Button, + Form, + }, + data() { + return { + activeIcon: null, + }; + }, + methods: { + handleClick(type) { + this.activeIcon = this.activeIcon === type ? null : type; + if (this.activeIcon) window.showStakeText = true; + else window.showStakeText = false; + markerClusterIns.setData(); + }, + filterEnd(data) { + this.activeIcon = null; + // this.filterData = data; + this.$parent.$refs.RoadAndEventsRef?.setFilterData?.(data); + }, + }, +}; +</script> + +<style lang="scss"> +div.el-popper.global-input-search-popover { + background: rgba(6, 66, 88, 0.8); + border: 1px solid rgba(42, 217, 253, 0.6); + position: relative; + padding-top: 36px; + transform: translateY(24px); + // margin-top: 6vh; + + .body { + .title { + background: linear-gradient(90deg, + #237e9b 0%, + rgba(23, 145, 184, 0) 100%); + padding: 3px 9px; + position: absolute; + top: 0; + left: 0; + width: 100%; + } + + .close { + padding: 3px 9px; + cursor: pointer; + position: absolute; + top: 0; + right: 0; + width: fit-content; + } + + } +} +</style> + +<style lang="scss" scoped> +.image { + width: 50vw; + height: 65vh; +} + +.HomeVector { + .btn { + padding: 9px; + background: linear-gradient(180deg, #152e3c 0%, #163a45 100%); + border-radius: 4px; + overflow: hidden; + height: unset; + border: 1px solid rgba(40, 144, 167, 1); + } + + .btn-active { + background: linear-gradient(180deg, #005c79 0%, #009bcc 100%); + } +} +</style> diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/map.js b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/map.js index 8aeb6151..12e76a5b 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/map.js +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/map.js @@ -24,6 +24,8 @@ import { upperFirst } from "lodash"; */ const faultBg = require(`@screen/images/mapBg/fault.svg`); const normalBg = require(`@screen/images/mapBg/active.svg`); +const faultTitleBg = require(`@screen/images/mapBg/fault_title.svg`); +const normalTitleBg = require(`@screen/images/mapBg/active_title.svg`); /** * 聚合点 @@ -206,12 +208,37 @@ export class MarkerCluster { lnglat: { lat, lng }, } = markerData; const lngLatStr = `${lng}/${lat}`; - - if (lngLatMap[lngLatStr]) { - context.marker.setContent(getContent(lngLatMap[lngLatStr])); + const data = lngLatMap[lngLatStr]; + if (data) { + const state = getState(data); + let nowTitleBg, nowTitleColor; + if (state) { + nowTitleBg = normalTitleBg; + nowTitleColor = "#FFDB82"; + } else { + nowTitleBg = faultTitleBg; + nowTitleColor = "#FF7575"; + } + const item = data[0]; + const { stakeMark } = item.extData; + const titleTemplate = window.showStakeText + ? `<p style="background-image: url('${nowTitleBg}');background-size: 100% 100%;background-repeat: no-repeat;padding: 5px; + font-family: PingFang SC, PingFang SC;font-weight: 400;font-size: 14px; line-height: 16px; color: ${nowTitleColor}; + "> ${stakeMark} </p>` + : ""; context.marker.setAnchor("bottom-center"); + context.marker.setLabel({ + direction: "bottom", + // offset: new AMap.Pixel(10, 0), //设置文本标注偏移量 + content: titleTemplate, //设置文本标注内容 + }); + + context.marker.setContent(getContent(data)); + // if (window.showStakeText) context.marker.setAnchor("center"); + // else context.marker.setAnchor("bottom-center"); + const offset = new AMap.Pixel(0, 0); context.marker.setOffset(offset); @@ -278,32 +305,50 @@ export class MarkerCluster { this.markerCluster.setData(this.data); } + + setData() { + this.markerCluster.setData(this.data); + } } export function getContent(data) { // const faultBg = require(`@screen/images/mapBg/fault.svg`); // const normalBg = require(`@screen/images/mapBg/active.svg`); - const nowBg = getState(data) ? normalBg : faultBg; + const state = getState(data); + let nowBg, nowTitleBg, nowTitleColor; + if (state) { + nowBg = normalBg; + nowTitleBg = normalTitleBg; + nowTitleColor = "#FFDB82"; + } else { + nowBg = faultBg; + nowTitleBg = faultTitleBg; + nowTitleColor = "#FF7575"; + } + + const item = data[0]; + const { stakeMark } = item.extData; if (data.length === 1) { return ` - <div style=" - background-image: url(${nowBg}); - background-size: 100% 100%; - background-repeat: no-repeat; - width: 51px; - height: 51px; - display: flex; - justify-content: center; - "> - <img style=" - min-width: 24px; - min-height: 24px; - width: 24px; - height: 24px; - margin-top: 8.1px; - " src='${getIcon(data[0])}' - > - </div> + <div style=" + background-image: url(${nowBg}); + background-size: 100% 100%; + background-repeat: no-repeat; + width: 51px; + height: 51px; + display: flex; + align-self: center; + justify-content: center; + "> + <img style=" + min-width: 24px; + min-height: 24px; + width: 24px; + height: 24px; + margin-top: 8.1px; + " src='${getIcon(item)}' + > + </div> `; } else { const width = `${36 + `${data.length}`.length * 15}px`; @@ -319,6 +364,7 @@ export function getContent(data) { justify-content: center; align-items: center; padding-bottom: 9px; + align-self: center; "> ${data.length} </div> diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/index.vue index 2e0435c8..54a0cfad 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/index.vue +++ b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/index.vue @@ -14,8 +14,9 @@ <!-- 右侧 --> <div class="content-r"> <div class="home-icons"> - <HomeFilter class="filter" /> - <HomeFrame class="Frame" /> + <HomeFilter class="item" /> + <HomeFrame class="item" /> + <HomeVector class="item" /> </div> <ConditionStatistics class="right card-menu" /> </div> @@ -41,6 +42,7 @@ import RoadAndEvents from "./components/RoadAndEvents/index.vue"; import AMapContainer from "./components/AMapContainer/index.vue"; import HomeFilter from "./components/HomeFilter/index.vue"; import HomeFrame from "./components/HomeFrame/index.vue"; +import HomeVector from "./components/HomeVector/index.vue"; import Button from '@screen/components/Buttons/Button.vue'; // import InfoBoard from "./components/InfoBoard" @@ -56,6 +58,7 @@ export default { Button, HomeFilter, HomeFrame, + HomeVector, // InfoBoard }, data() { @@ -148,17 +151,11 @@ export default { gap: 0px; flex-direction: column; - .filter { - display: flex; - gap: 9px; + .item { padding-top: 15px; } - .Frame { - display: flex; - gap: 9px; - padding-top: 15px; - } + } .right { diff --git a/ruoyi-ui/src/views/JiHeExpressway/utils/enum.js b/ruoyi-ui/src/views/JiHeExpressway/utils/enum.js index cad7cfc3..0e405ccb 100644 --- a/ruoyi-ui/src/views/JiHeExpressway/utils/enum.js +++ b/ruoyi-ui/src/views/JiHeExpressway/utils/enum.js @@ -131,7 +131,7 @@ export const InfoWarningSource = { }, 7: { text: "气象监测器", - } + }, }; // 事件主类 warningType @@ -147,6 +147,7 @@ export const WarningType = { 9: "护栏碰撞", 10: "交通事故", 11: "车辆故障", + 99: "其他", }; export const WarningTypeList = Object.keys(WarningType).map((key) => { @@ -208,6 +209,9 @@ export const WarningSubclass = { "9-2": "只倾斜无碰撞", "9-3": "碰撞后倾斜", }, + 99: { + "99-1": "其他", + }, }; export const WarningSubclassList = Object.keys(WarningSubclass).reduce(