From fd3a6c22cc597442a311c5533131a45585daef23 Mon Sep 17 00:00:00 2001 From: Zzc <1373857752@qq.com> Date: Wed, 19 Nov 2025 17:18:10 +0800 Subject: [PATCH 1/9] =?UTF-8?q?perf(3d-tiles):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=B8=B2=E6=9F=93=E5=8F=82=E6=95=B0=E4=BB=A5=E6=8F=90=E5=8D=87?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E7=BB=86=E8=8A=82=E5=B9=B6=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E8=B5=84=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 调整 maximumScreenSpaceError 至 2.0,并启用动态调整,以增强 3D 模型精度,同时平衡性能。另外,为保持一致性,重命名加载 GIF 文件。 --- .../assets/images/加载.gif | Bin 0 -> 15533 bytes .../assets/images/加载gif.gif | Bin 28537 -> 0 bytes .../composables/use3DTiles.js | 16 ++++++++-------- .../3DSituationalAwarenessRefactor/index.vue | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) create mode 100644 packages/screen/src/views/3DSituationalAwarenessRefactor/assets/images/加载.gif delete mode 100644 packages/screen/src/views/3DSituationalAwarenessRefactor/assets/images/加载gif.gif diff --git a/packages/screen/src/views/3DSituationalAwarenessRefactor/assets/images/加载.gif b/packages/screen/src/views/3DSituationalAwarenessRefactor/assets/images/加载.gif new file mode 100644 index 0000000000000000000000000000000000000000..596a2e815791902a85c1b3ae3a90173dd5037b12 GIT binary patch literal 15533 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
加载中 From 3d82805e2ab4c2f105a123d6c1518545e33c4776 Mon Sep 17 00:00:00 2001 From: Zzc <1373857752@qq.com> Date: Wed, 19 Nov 2025 17:42:56 +0800 Subject: [PATCH 2/9] =?UTF-8?q?feat(ui):=20=E4=B8=BA=E5=8D=8F=E4=BD=9C?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E9=9D=A2=E6=9D=BF=E6=B7=BB=E5=8A=A0=E5=8F=AF?= =?UTF-8?q?=E6=8A=98=E5=8F=A0=E5=8A=9F=E8=83=BD=E5=B9=B6=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=96=87=E6=9C=AC=E9=A2=9C=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 为 CollaborationInfo 组件实现折叠/展开功能,并添加平滑动画 - 将硬编码的文本颜色替换为 CSS 变量 --text-white,以保持一致性 - 调整 PageHeader 中的 Logo 高度以获得更好的响应性 - 更新相关的资源图片 --- .../images/LocationPanel/地理位置内容背景.png | Bin 4958 -> 5647 bytes .../images/LocationPanel/地理位置按钮背景.png | Bin 2880 -> 2111 bytes .../components/LeftPanel/ForceDispatch.vue | 18 +++--- .../components/PageHeader.vue | 2 +- .../RightPanel/CollaborationInfo.vue | 59 ++++++++++++++++-- 5 files changed, 64 insertions(+), 15 deletions(-) diff --git a/packages/screen/src/views/3DSituationalAwarenessRefactor/assets/images/LocationPanel/地理位置内容背景.png b/packages/screen/src/views/3DSituationalAwarenessRefactor/assets/images/LocationPanel/地理位置内容背景.png index 43e9c7bf6f4a058b02601b244335d2c7c885474e..0ddb80c0bc6abe2fe8465eef1a75a7a3c2054985 100644 GIT binary patch delta 5569 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 delta 4875 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 delta 2780 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 i{`}sX-+s4(Qt;p82)FKJn@k1(0000 { .force-dispatch__level-label { font-size: fs(18); font-family: SourceHanSansCN-Regular, sans-serif; - color: rgba(255, 255, 255, 0.8); + color: var(--text-white); } .force-dispatch__level-value { font-size: fs(18); font-family: SourceHanSansCN-Bold, sans-serif; font-weight: 600; - color: rgba(255, 255, 255, 0.95); + color: var(--text-white); } /* 智能应急方案按钮 */ @@ -210,7 +210,7 @@ const handleStartDispatch = () => { font-size: fs(18); font-family: SourceHanSansCN-Medium, sans-serif; font-weight: 500; - color: rgba(255, 255, 255, 0.95); + color: var(--text-white); } .force-dispatch__plan-icon { @@ -254,7 +254,7 @@ const handleStartDispatch = () => { .force-dispatch__stat-label { font-size: fs(12); font-family: SourceHanSansCN-Regular, sans-serif; - color: rgba(255, 255, 255, 0.7); + color: var(--text-white); } .force-dispatch__stat-value { @@ -272,7 +272,7 @@ const handleStartDispatch = () => { font-size: fs(12); font-family: SourceHanSansCN-Regular, sans-serif; font-weight: 400; - color: rgba(255, 255, 255, 0.8); + color: var(--text-white); margin-left: vw(2); } @@ -349,14 +349,14 @@ const handleStartDispatch = () => { font-size: fs(14); font-family: SourceHanSansCN-Medium, sans-serif; font-weight: 500; - color: rgba(255, 255, 255, 0.9); + color: var(--text-white); } .force-dispatch__circle-line2 { font-size: fs(13); font-family: SourceHanSansCN-Regular, sans-serif; font-weight: 400; - color: rgba(255, 255, 255, 0.8); + color: var(--text-white); } /* 旋转动画 */ @@ -391,13 +391,13 @@ const handleStartDispatch = () => { .force-dispatch__eta-label { font-size: fs(11); font-family: SourceHanSansCN-Regular, sans-serif; - color: rgba(255, 255, 255, 0.6); + color: var(--text-white); } .force-dispatch__eta-value { font-size: fs(13); font-family: SourceHanSansCN-Bold, sans-serif; font-weight: 600; - color: rgba(255, 255, 255, 0.95); + color: var(--text-white); } diff --git a/packages/screen/src/views/3DSituationalAwarenessRefactor/components/PageHeader.vue b/packages/screen/src/views/3DSituationalAwarenessRefactor/components/PageHeader.vue index 6d360ca..68ee91e 100644 --- a/packages/screen/src/views/3DSituationalAwarenessRefactor/components/PageHeader.vue +++ b/packages/screen/src/views/3DSituationalAwarenessRefactor/components/PageHeader.vue @@ -106,7 +106,7 @@ const handleBack = () => { .logo-section { .logo-image { width: vw(42); - height: vh(30); + height: vw(42); border-radius: 50%; } } diff --git a/packages/screen/src/views/3DSituationalAwarenessRefactor/components/RightPanel/CollaborationInfo.vue b/packages/screen/src/views/3DSituationalAwarenessRefactor/components/RightPanel/CollaborationInfo.vue index 678aed4..baa9bbe 100644 --- a/packages/screen/src/views/3DSituationalAwarenessRefactor/components/RightPanel/CollaborationInfo.vue +++ b/packages/screen/src/views/3DSituationalAwarenessRefactor/components/RightPanel/CollaborationInfo.vue @@ -1,16 +1,17 @@ @@ -59,13 +78,19 @@ const getSourceColor = (source) => { &__header { position: absolute; - top: vh(16); + top: 10px; right: vw(5); z-index: 1; .header-icon { width: vw(20); height: vh(20); + cursor: pointer; + transition: all 0.3s ease; + + &:hover { + opacity: 0.8; + } } } @@ -76,6 +101,8 @@ const getSourceColor = (source) => { padding: vw(8) vw(16); max-height: vh(200); overflow-y: auto; + transition: max-height 0.4s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.3s ease; + opacity: 1; &::-webkit-scrollbar { width: vw(4); @@ -114,5 +141,27 @@ const getSourceColor = (source) => { } } } + + // 折叠状态 + &.is-collapsed { + .header-icon { + transform: rotate(180deg); + } + + .collaboration-info__list { + max-height: vh(30); // 折叠时只显示一行的高度 + overflow: hidden; + + .info-item:not(:first-child) { + opacity: 0; + transform: translateY(-10px); + } + } + } + + // 为列表项添加过渡 + .info-item { + transition: opacity 0.3s ease, transform 0.3s ease; + } } From 9783c32fcbf2ff796c193612c587208076fcc478 Mon Sep 17 00:00:00 2001 From: nightdays Date: Wed, 19 Nov 2025 17:47:20 +0800 Subject: [PATCH 3/9] =?UTF-8?q?feat:=20=E5=86=B0=E9=9B=AA=E9=98=BB?= =?UTF-8?q?=E6=96=AD=E5=A4=A7=E5=B1=8F=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/cockpit/api/commonHttp.js | 44 +++++- .../cockpit/components/CockpitLayout.vue | 65 ++++++++- .../cockpit/components/EmergencyResources.vue | 12 +- .../components/ImageMarkTooltip/index.js | 26 ++-- .../components/ImageMarkTooltip/riskRoad.vue | 18 +++ .../ImageMarkTooltip/serviceFacility.vue | 51 ------- ...Tooltip.vue => serviceFacilityTooltip.vue} | 131 +++++++++++------- .../cockpit/components/WeatherWarning.vue | 31 ++++- .../cockpit/composables/ImageMarkData.js | 12 +- .../views/cockpit/composables/useMapBase.js | 61 ++++++-- .../cockpit/composables/useMapImageMark.js | 78 +++++++++-- 11 files changed, 372 insertions(+), 157 deletions(-) delete mode 100644 packages/screen/src/views/cockpit/components/ImageMarkTooltip/serviceFacility.vue rename packages/screen/src/views/cockpit/components/ImageMarkTooltip/{ImageMarkTooltip.vue => serviceFacilityTooltip.vue} (78%) diff --git a/packages/screen/src/views/cockpit/api/commonHttp.js b/packages/screen/src/views/cockpit/api/commonHttp.js index a31e253..a436756 100644 --- a/packages/screen/src/views/cockpit/api/commonHttp.js +++ b/packages/screen/src/views/cockpit/api/commonHttp.js @@ -2,7 +2,6 @@ import { request } from '@shared/utils/request' // 获取业务底图 export function getBaseMap() { - // return [...ddt] return request({ url: '/snow-ops-platform/dataDirectory/queryCatalog', method: 'GET', @@ -14,7 +13,6 @@ export function getBaseMap() { // 获取业务图 export function getBusinessMap() { - // return [...si] return request({ url: '/snow-ops-platform/dataDirectory/queryCatalog', method: 'GET', @@ -24,6 +22,48 @@ export function getBusinessMap() { }) } +// 获取所有的养护站 +export function getAllYHZList() { + return request({ + url: '/snow-ops-platform/yhz/listByDistrict', + method: 'get', + params: { + qxmc: '' + } + }) +} + + +export function getYHZDetail(params) { + return request({ + url: '/snow-ops-platform/yhz/getById', + method: 'get', + params + }) +} + +// 获得高海拔路段图 high-altitude road +export function getHighAltitudeRoadMap () { + return request({ + url: '/snow-ops-platform/dataDirectory/queryCatalog', + method: 'GET', + params: { + pcatalog: 'GHBMAP' + } + }) +} + +// 获取天气预警统计 +export function getWeatherWarningStatistics (params) { + return request({ + url: '/snow-ops-platform/weatherWarning/statistics', + method: 'GET', + params + }) +} + + + diff --git a/packages/screen/src/views/cockpit/components/CockpitLayout.vue b/packages/screen/src/views/cockpit/components/CockpitLayout.vue index 36beaf8..6b43946 100644 --- a/packages/screen/src/views/cockpit/components/CockpitLayout.vue +++ b/packages/screen/src/views/cockpit/components/CockpitLayout.vue @@ -13,8 +13,8 @@
- - + +
@@ -26,7 +26,7 @@
- + { // 加载地图业务底图 并 聚焦中心点 mapBase.loadBaseData() + + weatherWarningRef.value.loadData() }) // ==================== 常量定义 ==================== @@ -79,6 +81,9 @@ const EMERGENCY_FORCE_LAYER_ID = 'legend:emergencyForce' */ const EMERGENCY_FORCE_CACHE_TTL = 60 * 1000 +// ==================== 组件实例 ==================== +const weatherWarningRef = ref(null) + // ==================== 状态管理 ==================== const mapStore = useMapStore() @@ -101,7 +106,7 @@ const mapBase = useMapBase(mapStore) /** * 标记图hook,搭配lengendToolbar使用, 作用是点击某个图例项时,在地图上显示所有该图例的图 */ -const mapImageMark = useMapImageMark(mapStore) +const mapImageMarkHook = useMapImageMark(mapStore) /** * 应急力量数据加载状态 @@ -131,9 +136,22 @@ const emergencyForceAbortController = ref(null) /** * 工具图标列表通过key关联 * key具体有哪些,请根据LegendToolbar.vue中定义的defaultLegendItems + * 后续的ImageMarkData中也需要与这里的key值对应 */ const legendKeys = ref(['serviceFacility','riskRoad','blockEvent','weatherAlert','emergencyForce']) +/** + * 过滤标记对象,存放当前需要过滤的关键字 + */ +const filterMark = ref({ + serviceFacility: [] +}) + +/** + * 图例项 + */ +const legendToolActiveItem = ref([]) + // ==================== 工具函数 ==================== /** @@ -413,6 +431,34 @@ const renderEmergencyForcePoints = async (entityService, points, markerIcon) => // ==================== 事件处理 ==================== +/** + * 应急资源表格行被点击时触发 + */ +const handleEmergencyResourceClick = (resource) => { + // 根据区县名称,过滤养护站 + const filterList = filterMark.value.serviceFacility + const index = filterList.findIndex((item) => item == resource.qxmc) + // 实现第一次点击表示选中,第二次点击表示取消选中 + if(index > -1) filterList.splice(index, 1) + else filterList.push(resource.qxmc) + + // 当点击了某个区县,需要将养护站的legend也点亮 + const legendIndex = legendToolActiveItem.value.indexOf('serviceFacility') + // 如果过滤列表存在数据,则需要点亮legend + if(filterList.length && legendIndex == -1) { + legendToolActiveItem.value.push('serviceFacility') + } + // 如果过滤列表不存在,则需要关闭legend + if(!filterList.length && legendIndex > -1) { + legendToolActiveItem.value.splice(legendIndex, 1) + } + + mapImageMarkHook.filterYHZMark("serviceFacility", (item)=>{ + return filterList.find((filterItem) => filterItem == item.qxmc) + }) + +} + /** * 处理图例工具栏的标记切换事件 * @@ -422,10 +468,19 @@ const renderEmergencyForcePoints = async (entityService, points, markerIcon) => * @param {string} [payload.markerIcon] - 标记图标 */ const handleLegendMarkerToggle = async ({ key, active, markerIcon }) => { + if(key === 'riskRoad') { + mapBase.toggleHighAltitudeRoadMap(active) + return + } + + // 只处理应急力量图例项 if (key !== 'emergencyForce') { + if(active == false) { + filterMark.value[key] = [] + } - mapImageMark.toggleMark({ key, active, markerIcon }) + mapImageMarkHook.toggleMark({ key, active, markerIcon }) return } diff --git a/packages/screen/src/views/cockpit/components/EmergencyResources.vue b/packages/screen/src/views/cockpit/components/EmergencyResources.vue index f94967f..5a44a18 100644 --- a/packages/screen/src/views/cockpit/components/EmergencyResources.vue +++ b/packages/screen/src/views/cockpit/components/EmergencyResources.vue @@ -21,7 +21,7 @@ :class="{ 'row-alt': index % 2 === 0 }" >
{{ index + 1 }}
- {{ resource.qxmc }} + {{ resource.qxmc }} {{ resource.yhzCount }} {{ resource.wzCount }}
@@ -43,7 +43,9 @@ import { ref, onMounted } from 'vue' import { request } from '@shared/utils/request' -const resources = ref([ +const emit = defineEmits(['clickEmergencyResource']) + +const testData = [ { id: 1, name: '万州区', @@ -98,7 +100,9 @@ const resources = ref([ equipmentClass: 'red', hasAlert: false } -]) +] + +const resources = ref([]) // 请求后端接口 /district/statistics const getDistrictStatistics = async () => { @@ -106,7 +110,6 @@ const getDistrictStatistics = async () => { url: '/snow-ops-platform/district/statistics', method: 'GET' }) - console.log(res) if(res.code === '00000') { resources.value = res.data } else { @@ -240,6 +243,7 @@ onMounted(() => { .district-name { text-align: left; + cursor: pointer; } .count { diff --git a/packages/screen/src/views/cockpit/components/ImageMarkTooltip/index.js b/packages/screen/src/views/cockpit/components/ImageMarkTooltip/index.js index ab102aa..df70602 100644 --- a/packages/screen/src/views/cockpit/components/ImageMarkTooltip/index.js +++ b/packages/screen/src/views/cockpit/components/ImageMarkTooltip/index.js @@ -1,8 +1,13 @@ import { createVNode, render } from 'vue' -import ImageMarkTooltip from './ImageMarkTooltip.vue' +import serviceFacility from './serviceFacilityToolTip.vue' -class ImageMarkTooltipUI { - constructor() { +const UIMap = { + serviceFacility +} + +class ImageMarkTooltip { + constructor({ key }) { + this.key = key this.instance = null this.container = null this.entity = null @@ -22,8 +27,10 @@ class ImageMarkTooltipUI { this.entity = options.entity + const UIInstance = UIMap[this.key] + // 创建 VNode - const vnode = createVNode(ImageMarkTooltip, { + const vnode = createVNode(UIInstance, { visible: true, position: options.position || { x: 0, y: 0 }, data: options.data || {}, @@ -37,6 +44,9 @@ class ImageMarkTooltipUI { // 渲染到容器 render(vnode, this.container) this.instance = vnode.component + if(this.instance.exposed.init) { + this.instance.exposed.init() + } return this.instance } @@ -68,11 +78,7 @@ class ImageMarkTooltipUI { } } -// 创建单例实例 -const instance = new ImageMarkTooltipUI() -export const CommonTooltip = instance - -export const newImageMarkTooltip = () => { - return new ImageMarkTooltipUI() +export const newImageMarkTooltip = ({ key }) => { + return new ImageMarkTooltip({ key }) } \ No newline at end of file diff --git a/packages/screen/src/views/cockpit/components/ImageMarkTooltip/riskRoad.vue b/packages/screen/src/views/cockpit/components/ImageMarkTooltip/riskRoad.vue index 0dde344..45f33c8 100644 --- a/packages/screen/src/views/cockpit/components/ImageMarkTooltip/riskRoad.vue +++ b/packages/screen/src/views/cockpit/components/ImageMarkTooltip/riskRoad.vue @@ -1,5 +1,23 @@ - \ No newline at end of file diff --git a/packages/screen/src/views/cockpit/components/ImageMarkTooltip/ImageMarkTooltip.vue b/packages/screen/src/views/cockpit/components/ImageMarkTooltip/serviceFacilityTooltip.vue similarity index 78% rename from packages/screen/src/views/cockpit/components/ImageMarkTooltip/ImageMarkTooltip.vue rename to packages/screen/src/views/cockpit/components/ImageMarkTooltip/serviceFacilityTooltip.vue index 1b7dfd1..1626400 100644 --- a/packages/screen/src/views/cockpit/components/ImageMarkTooltip/ImageMarkTooltip.vue +++ b/packages/screen/src/views/cockpit/components/ImageMarkTooltip/serviceFacilityTooltip.vue @@ -11,8 +11,32 @@ -
- +
+ +
+ 名称: + {{ detail.mc }} +
+ +
+ 所属区县: + {{ detail.qxmc }} +
+ +
+ 应急设备: + {{ detail.sbsl }} +
+ +
+ 应急物资: + {{ detail.wzsl }} +
+ +
+ 应急人员: + {{ detail.rysl }} +
@@ -36,11 +60,7 @@ diff --git a/packages/screen/src/views/cockpit/components/PageHeader.vue b/packages/screen/src/views/cockpit/components/PageHeader.vue index c8655d6..9c55989 100644 --- a/packages/screen/src/views/cockpit/components/PageHeader.vue +++ b/packages/screen/src/views/cockpit/components/PageHeader.vue @@ -1,8 +1,6 @@ @@ -14,7 +12,7 @@ @use '@/styles/mixins.scss' as *; .page-header { - height: vh(137); + height: vw(111); background: url(../assets/img/header-bg.png) no-repeat; background-size: 100% 100%; display: flex; @@ -23,15 +21,6 @@ position: relative; } -.header-bg { - background-image: url(../assets/img/header-title-bg.png); - width: 100%; - height: vh(107); - display: flex; - align-items: center; - justify-content: center; - position: relative; -} .title { color: rgba(255, 255, 255, 1); @@ -43,24 +32,4 @@ text-align: center; } -.app-button { - position: absolute; - right: vw(40); - top: 50%; - transform: translateY(-50%); - width: vw(165); - height: vh(44); - background: url(../assets/img/header-btn-app-bg.png) no-repeat; - background-size: 100% 100%; - color: rgba(255, 255, 255, 1); - font-size: fs(16); - font-family: SourceHanSansCN-Regular, sans-serif; - border: none; - cursor: pointer; - transition: opacity 0.3s; - - &:hover { - opacity: 0.8; - } -} From 1ae5b8d1cc0bafef17dbf7cbfa170ed342537785 Mon Sep 17 00:00:00 2001 From: nightdays Date: Wed, 19 Nov 2025 18:12:53 +0800 Subject: [PATCH 6/9] =?UTF-8?q?bugfix:=20=E6=9A=82=E6=97=B6=E5=8E=BB?= =?UTF-8?q?=E6=8E=89=E5=BC=B9=E7=AA=97=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/cockpit/components/ImageMarkTooltip/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/screen/src/views/cockpit/components/ImageMarkTooltip/index.js b/packages/screen/src/views/cockpit/components/ImageMarkTooltip/index.js index df70602..065f926 100644 --- a/packages/screen/src/views/cockpit/components/ImageMarkTooltip/index.js +++ b/packages/screen/src/views/cockpit/components/ImageMarkTooltip/index.js @@ -1,8 +1,8 @@ import { createVNode, render } from 'vue' -import serviceFacility from './serviceFacilityToolTip.vue' +// import serviceFacility from './serviceFacilityToolTip.vue' const UIMap = { - serviceFacility + // serviceFacility } class ImageMarkTooltip { From 3d124963f97c3d265a2a719074216dab33599b15 Mon Sep 17 00:00:00 2001 From: nightdays Date: Wed, 19 Nov 2025 18:15:14 +0800 Subject: [PATCH 7/9] =?UTF-8?q?bugfi:=20=E5=86=8D=E6=AC=A1=E6=81=A2?= =?UTF-8?q?=E5=A4=8D=E5=BC=B9=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/cockpit/components/ImageMarkTooltip/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/screen/src/views/cockpit/components/ImageMarkTooltip/index.js b/packages/screen/src/views/cockpit/components/ImageMarkTooltip/index.js index 065f926..9355e13 100644 --- a/packages/screen/src/views/cockpit/components/ImageMarkTooltip/index.js +++ b/packages/screen/src/views/cockpit/components/ImageMarkTooltip/index.js @@ -1,8 +1,8 @@ import { createVNode, render } from 'vue' -// import serviceFacility from './serviceFacilityToolTip.vue' +import serviceFacility from './serviceFacilityToolTip.vue' const UIMap = { - // serviceFacility + serviceFacility } class ImageMarkTooltip { @@ -44,7 +44,7 @@ class ImageMarkTooltip { // 渲染到容器 render(vnode, this.container) this.instance = vnode.component - if(this.instance.exposed.init) { + if(this.instance.exposed?.init) { this.instance.exposed.init() } return this.instance From 0802468c7565c99f08e51d660e8dfbdd4a32d3b6 Mon Sep 17 00:00:00 2001 From: nightdays Date: Wed, 19 Nov 2025 18:19:41 +0800 Subject: [PATCH 8/9] =?UTF-8?q?bugfix:=20=E6=96=B0=E5=A2=9E=E5=85=BB?= =?UTF-8?q?=E6=8A=A4=E7=AB=99=E5=BC=B9=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ImageMarkTooltip/YHZTooltip.vue | 391 ++++++++++++++++++ .../components/ImageMarkTooltip/index.js | 2 +- 2 files changed, 392 insertions(+), 1 deletion(-) create mode 100644 packages/screen/src/views/cockpit/components/ImageMarkTooltip/YHZTooltip.vue diff --git a/packages/screen/src/views/cockpit/components/ImageMarkTooltip/YHZTooltip.vue b/packages/screen/src/views/cockpit/components/ImageMarkTooltip/YHZTooltip.vue new file mode 100644 index 0000000..1626400 --- /dev/null +++ b/packages/screen/src/views/cockpit/components/ImageMarkTooltip/YHZTooltip.vue @@ -0,0 +1,391 @@ + + + + + diff --git a/packages/screen/src/views/cockpit/components/ImageMarkTooltip/index.js b/packages/screen/src/views/cockpit/components/ImageMarkTooltip/index.js index 9355e13..081f799 100644 --- a/packages/screen/src/views/cockpit/components/ImageMarkTooltip/index.js +++ b/packages/screen/src/views/cockpit/components/ImageMarkTooltip/index.js @@ -1,5 +1,5 @@ import { createVNode, render } from 'vue' -import serviceFacility from './serviceFacilityToolTip.vue' +import serviceFacility from './YHZTooltip.vue' const UIMap = { serviceFacility From 09dc7a61193dfb5c817301c20aced7d497473368 Mon Sep 17 00:00:00 2001 From: nightdays Date: Thu, 20 Nov 2025 11:08:08 +0800 Subject: [PATCH 9/9] =?UTF-8?q?feat:=20=E5=86=B0=E9=9B=AA=E9=98=BB?= =?UTF-8?q?=E6=96=AD=E5=A4=A7=E5=B1=8F=E6=96=B0=E5=A2=9E=E8=81=9A=E7=84=A6?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/screen/package.json | 19 +- .../cockpit/components/CockpitLayout.vue | 24 +- .../serviceFacilityTooltip.vue | 391 ------------------ .../cockpit/composables/useMapImageMark.js | 33 +- 4 files changed, 61 insertions(+), 406 deletions(-) delete mode 100644 packages/screen/src/views/cockpit/components/ImageMarkTooltip/serviceFacilityTooltip.vue diff --git a/packages/screen/package.json b/packages/screen/package.json index 00a2548..9091471 100644 --- a/packages/screen/package.json +++ b/packages/screen/package.json @@ -9,17 +9,18 @@ "preview": "vite preview" }, "dependencies": { - "vue": "^3.5.18", - "vue-router": "^4.6.3", - "pinia": "^3.0.3", - "element-plus": "^2.11.5", "@element-plus/icons-vue": "^2.3.2", - "echarts": "^6.0.0", - "vue-echarts": "^8.0.1", - "cesium": "^1.135.0", - "axios": "^1.13.2", + "@h5/shared": "workspace:*", + "@turf/turf": "^7.3.0", "@vueuse/core": "^14.0.0", - "@h5/shared": "workspace:*" + "axios": "^1.13.2", + "cesium": "^1.135.0", + "echarts": "^6.0.0", + "element-plus": "^2.11.5", + "pinia": "^3.0.3", + "vue": "^3.5.18", + "vue-echarts": "^8.0.1", + "vue-router": "^4.6.3" }, "devDependencies": { "@vitejs/plugin-vue": "^6.0.1", diff --git a/packages/screen/src/views/cockpit/components/CockpitLayout.vue b/packages/screen/src/views/cockpit/components/CockpitLayout.vue index 1db6ed6..69834bd 100644 --- a/packages/screen/src/views/cockpit/components/CockpitLayout.vue +++ b/packages/screen/src/views/cockpit/components/CockpitLayout.vue @@ -433,12 +433,19 @@ const renderEmergencyForcePoints = async (entityService, points, markerIcon) => * 应急资源表格行被点击时触发 */ const handleEmergencyResourceClick = (resource) => { + let focusKey = null + // 根据区县名称,过滤养护站 const filterList = filterMark.value.serviceFacility const index = filterList.findIndex((item) => item == resource.qxmc) // 实现第一次点击表示选中,第二次点击表示取消选中 - if (index > -1) filterList.splice(index, 1) - else filterList.push(resource.qxmc) + if (index > -1) { + filterList.splice(index, 1) + } + else { + filterList.push(resource.qxmc) + focusKey = resource.qxmc + } // 当点击了某个区县,需要将养护站的legend也点亮 const legendIndex = legendToolActiveItem.value.indexOf('serviceFacility') @@ -451,9 +458,16 @@ const handleEmergencyResourceClick = (resource) => { legendToolActiveItem.value.splice(legendIndex, 1) } - mapImageMarkHook.filterYHZMark("serviceFacility", (item) => { - return filterList.find((filterItem) => filterItem == item.qxmc) - }) + // 调用图例hook来进行数据的请求与图例的绘制,第一个回调函数是过滤点位,第二个是聚焦点位 + mapImageMarkHook.filterYHZMark( + "serviceFacility", + (item) => { + return filterList.find((filterItem) => filterItem == item.qxmc) + }, + (item) => { + return item.qxmc == focusKey + } + ) } diff --git a/packages/screen/src/views/cockpit/components/ImageMarkTooltip/serviceFacilityTooltip.vue b/packages/screen/src/views/cockpit/components/ImageMarkTooltip/serviceFacilityTooltip.vue deleted file mode 100644 index 1626400..0000000 --- a/packages/screen/src/views/cockpit/components/ImageMarkTooltip/serviceFacilityTooltip.vue +++ /dev/null @@ -1,391 +0,0 @@ - - - - - diff --git a/packages/screen/src/views/cockpit/composables/useMapImageMark.js b/packages/screen/src/views/cockpit/composables/useMapImageMark.js index 55535f0..135b755 100644 --- a/packages/screen/src/views/cockpit/composables/useMapImageMark.js +++ b/packages/screen/src/views/cockpit/composables/useMapImageMark.js @@ -3,6 +3,7 @@ import { getAllYHZList } from '@/views/cockpit/api/commonHttp' import ImageMarkData from './ImageMarkData' import * as Cesium from 'cesium' +import * as turf from '@turf/turf' import serviceFacilityMarkerIcon from '../assets/legendTool/服务设施icon定位.png' @@ -134,6 +135,28 @@ export const useMapImageMark = (mapStore) => { imageMarkData.tooltip.close() } + /** + * 聚焦到图片实例的中心点 + */ + const focusOnMarkers = (dataList) => { + if (!dataList || dataList.length === 0) return + const positions = dataList.map((item) => { + return [item.mapData.position[0], item.mapData.position[1]] + }) + const features = turf.points(positions) + const center = turf.center(features) + const position = center.geometry.coordinates + mapStore.viewer.camera.setView({ + destination: Cesium.Cartesian3.fromDegrees(position[0], position[1], 160000), + orientation: { + heading: Cesium.Math.toRadians(0), // 方向角 + pitch: Cesium.Math.toRadians(-90), // 俯仰角(-90 为垂直向下看) + roll: 0 // 翻滚角 + } + }) + } + + /** * 根据图标名称请求后台服务,动态加载图标列表 */ @@ -165,7 +188,7 @@ export const useMapImageMark = (mapStore) => { /** * 过滤养护站图标 */ - const filterYHZMark = async (key, filterFn) => { + const filterYHZMark = async (key, filterFn, focusFn) => { const imageMarkData = imageMarkMap[key] if (!imageMarkData) return // 取消上一次请求 @@ -175,7 +198,15 @@ export const useMapImageMark = (mapStore) => { return filterFn(item) }) clearLayerEntity(key) + // 绘制过滤出来的点 drawImageEntities(dataList) + // 聚焦聚焦函数过滤出来的点 + const focusDataList = dataList.filter((item)=>{ + return focusFn(item) + }) + if(focusDataList) { + focusOnMarkers(focusDataList) + } } /**