diff --git a/packages/screen/src/views/3DSituationalAwarenessRefactor/components/LeftPanel/LocationPanel.vue b/packages/screen/src/views/3DSituationalAwarenessRefactor/components/LeftPanel/LocationPanel.vue
index 7d5ef5c..1599775 100644
--- a/packages/screen/src/views/3DSituationalAwarenessRefactor/components/LeftPanel/LocationPanel.vue
+++ b/packages/screen/src/views/3DSituationalAwarenessRefactor/components/LeftPanel/LocationPanel.vue
@@ -66,13 +66,13 @@ const locationInfo = [
.location-panel {
width: 100%;
- padding: clamp(12px, vh(16), 20px) clamp(16px, vw(20), 28px);
+ padding: clamp(16px, vh(16), 18px) clamp(6px, vw(6), 6px);
background: url('../../assets/images/LocationPanel/地理位置内容背景.png') no-repeat center center;
background-size: 100% 100%;
border-radius: vw(8);
box-shadow: 0 0 vw(12) rgba(0, 0, 0, 0.35);
overflow: hidden;
- min-width: 240px;
+ min-width: 248px;
max-width: 100%;
// min-height: 160px;
}
@@ -82,7 +82,7 @@ const locationInfo = [
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
grid-template-rows: repeat(2, minmax(0, 1fr));
- gap: clamp(4px, vh(6), 8px) clamp(4px, vw(6), 8px);
+ gap: clamp(2px, vh(4), 6px) 0px;
width: 100%;
height: 100%;
}
diff --git a/packages/screen/src/views/3DSituationalAwarenessRefactor/components/LeftPanel/index.vue b/packages/screen/src/views/3DSituationalAwarenessRefactor/components/LeftPanel/index.vue
index 03765eb..c9b1330 100644
--- a/packages/screen/src/views/3DSituationalAwarenessRefactor/components/LeftPanel/index.vue
+++ b/packages/screen/src/views/3DSituationalAwarenessRefactor/components/LeftPanel/index.vue
@@ -7,6 +7,7 @@
src="../../assets/images/摄像头.png"
alt="摄像头"
class="camera-icon"
+ @click.stop="handleCameraClick"
/>
+
+
-
@@ -348,6 +351,7 @@ body.body--no-scroll {
background: rgba(0, 0, 0, 0.6);
padding: clamp(10px, 1.5vh, 20px);
overflow: hidden;
+ position: relative;
}
&__video {
@@ -359,49 +363,50 @@ body.body--no-scroll {
border-radius: vw(8);
}
- // 操作台
+ // 操作台容器
&__console {
- flex-shrink: 0;
position: absolute;
- bottom: 80px;
+ bottom: 100px;
left: 50%;
transform: translateX(-50%);
- height: clamp(80px, 10vh, 120px);
+ z-index: 10;
display: flex;
align-items: center;
- justify-content: center;
+ gap: clamp(10px, 1.5vw, 20px);
}
+ // 轮盘图标
&__console-bg {
- // position: absolute;
- top: 0;
- left: 0;
- // width: 100%;
- height: 85%;
- object-fit: cover;
- z-index: 0;
+ width: clamp(120px, 7vw, 140px);
+ height: clamp(120px, 7vw, 140px);
+ object-fit: contain;
+ flex-shrink: 0;
}
+ // 控制按钮容器
&__control-bar {
- position: relative;
- z-index: 1;
display: flex;
align-items: center;
- justify-content: center;
- gap: clamp(15px, 2vw, 30px);
- padding: 0 clamp(20px, 2vw, 40px);
+ gap: clamp(20px, 2.5vw, 40px);
+ padding: clamp(8px, 1vh, 12px) clamp(20px, 2.5vw, 40px);
+ background: rgba(0, 0, 0, 0.75);
+ border-radius: 50px;
+ backdrop-filter: blur(10px);
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5);
}
&__control-item {
display: flex;
- flex-direction: column;
+ flex-direction: row;
align-items: center;
- gap: clamp(4px, 0.5vh, 8px);
+ gap: clamp(6px, 0.8vw, 10px);
cursor: pointer;
- transition: transform 0.2s ease;
+ transition: transform 0.2s ease, opacity 0.2s ease;
+ padding: clamp(4px, 0.5vh, 8px);
&:hover {
- transform: scale(1.1);
+ transform: scale(1.15);
+ opacity: 0.9;
}
&:active {
@@ -411,22 +416,24 @@ body.body--no-scroll {
&:focus-visible {
outline: 2px solid rgba(135, 206, 250, 0.8);
outline-offset: 4px;
- border-radius: vw(4);
+ border-radius: clamp(4px, 0.5vw, 8px);
}
}
&__control-icon {
- width: clamp(24px, 2.5vw, 36px);
- height: clamp(24px, 2.5vw, 36px);
+ width: clamp(28px, 3vw, 42px);
+ height: clamp(28px, 3vw, 42px);
object-fit: contain;
+ filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.3));
}
&__control-label {
- font-size: clamp(11px, 1vw, 13px);
+ font-size: clamp(12px, 1.1vw, 14px);
font-family: SourceHanSansCN-Regular, sans-serif;
color: #ffffff;
white-space: nowrap;
line-height: 1.2;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5);
}
}
diff --git a/packages/screen/src/views/3DSituationalAwarenessRefactor/components/RightPanel/VideoMonitorItem.vue b/packages/screen/src/views/3DSituationalAwarenessRefactor/components/RightPanel/VideoMonitorItem.vue
index 5867cdf..c97df57 100644
--- a/packages/screen/src/views/3DSituationalAwarenessRefactor/components/RightPanel/VideoMonitorItem.vue
+++ b/packages/screen/src/views/3DSituationalAwarenessRefactor/components/RightPanel/VideoMonitorItem.vue
@@ -225,8 +225,8 @@ onUnmounted(() => {
top: -1px;
left: -3px;
z-index: 2;
- width: clamp(140px, 10.1vw, 194px);
- height: clamp(28px, vh(32), 36px);
+ width: clamp(140px, 10.1vw, 154px);
+ height: clamp(18px, vh(18), 18px);
background: url("../../assets/images/video-time-bg.png") no-repeat
center center;
background-size: 100% 100%;
@@ -275,9 +275,10 @@ onUnmounted(() => {
transform-origin: center;
&__icon {
- width: clamp(12px, vw(14), 18px);
- height: clamp(12px, vh(14), 18px);
- margin-right: clamp(4px, vw(6), 8px);
+ width: clamp(20px, vw(20), 24px);
+ // height: clamp(14px, vw(14), 18px);
+ height: auto;
+ // margin-right: clamp(4px, vw(6), 8px);
flex-shrink: 0;
object-fit: contain;
}
diff --git a/packages/screen/src/views/3DSituationalAwarenessRefactor/components/RightPanel/index.vue b/packages/screen/src/views/3DSituationalAwarenessRefactor/components/RightPanel/index.vue
index 01c4c55..480ab12 100644
--- a/packages/screen/src/views/3DSituationalAwarenessRefactor/components/RightPanel/index.vue
+++ b/packages/screen/src/views/3DSituationalAwarenessRefactor/components/RightPanel/index.vue
@@ -41,6 +41,8 @@ import CollaborationInfo from './CollaborationInfo.vue'
overflow-y: auto;
overscroll-behavior: contain;
padding-right: vw(40); // 为右侧折叠按钮预留空间
+ padding-top: var(--sa-header-height);
+ box-sizing: border-box;
&::-webkit-scrollbar {
width: vw(6);
diff --git a/packages/screen/src/views/3DSituationalAwarenessRefactor/components/shared/DataField.vue b/packages/screen/src/views/3DSituationalAwarenessRefactor/components/shared/DataField.vue
index 8b8b28b..fbbf00f 100644
--- a/packages/screen/src/views/3DSituationalAwarenessRefactor/components/shared/DataField.vue
+++ b/packages/screen/src/views/3DSituationalAwarenessRefactor/components/shared/DataField.vue
@@ -60,16 +60,16 @@ const valueClass = computed(() => {
&__label {
color: var(--text-white);
font-size: fs(14);
- font-family: SourceHanSansCN-Medium, sans-serif;
+ // font-family: SourceHanSansCN-Medium, sans-serif;
font-weight: 500;
white-space: nowrap;
}
&__value {
color: var(--text-white);
- font-size: fs(14);
+ font-size: fs(15);
font-family: PingFangSC-Semibold, sans-serif;
- font-weight: 600;
+ font-weight: 700;
flex: 1;
text-align: right;
}
diff --git a/packages/screen/src/views/3DSituationalAwarenessRefactor/composables/useMapMarkers.js b/packages/screen/src/views/3DSituationalAwarenessRefactor/composables/useMapMarkers.js
index ef51416..eefbab7 100644
--- a/packages/screen/src/views/3DSituationalAwarenessRefactor/composables/useMapMarkers.js
+++ b/packages/screen/src/views/3DSituationalAwarenessRefactor/composables/useMapMarkers.js
@@ -6,7 +6,8 @@ import { cesiumDataConfig } from '../config/cesiumData'
import soldierIcon from '../assets/images/SketchPngfbec927027ff9e49207749ebaafd229429315341fda199251b6dfb1723ff17fb.png'
import deviceIcon from '../assets/images/SketchPng860d54f2a31f5f441fc6a88081224f1e98534bf6d5ca1246e420983bdf690380.png'
import emergencyBaseIcon from '../assets/images/应急基地.png'
-import emergencyCenterIcon from '../assets/images/应急中心.png'
+import emergencyCenterIcon from '../assets/images/应急中心icon定位.png'
+import reserveCenterIcon from '../assets/images/储备中心.png'
// 默认高度偏移(米)- 与 WuRenJi 保持一致
const DEFAULT_HEIGHT_OFFSET = 100
@@ -19,6 +20,7 @@ export function useMapMarkers() {
const collapseAreaEntities = ref([])
const markerEntities = ref([])
const emergencyResourceEntities = ref([]) // 应急资源标记(由API数据动态生成)
+ const reserveCenterEntities = ref([]) // 储备中心和预置点标记
/**
* 获取塌陷区域的所有位置点
@@ -574,6 +576,108 @@ export function useMapMarkers() {
emergencyResourceEntities.value = []
}
+ /**
+ * 清除储备中心和预置点标记
+ * @param {Cesium.Viewer} viewer
+ */
+ const clearReserveCenterMarkers = (viewer) => {
+ if (!viewer) return
+
+ console.log(`[useMapMarkers] 清除 ${reserveCenterEntities.value.length} 个储备中心/预置点标记`)
+
+ reserveCenterEntities.value.forEach(entity => {
+ if (entity) viewer.entities.remove(entity)
+ })
+ reserveCenterEntities.value = []
+ }
+
+ /**
+ * 根据API数据添加储备中心和预置点标记
+ * @param {Cesium.Viewer} viewer
+ * @param {Array} reserveData - API返回的储备中心和预置点数据列表
+ * @param {string} reserveData[].gl1Id - ID
+ * @param {string} reserveData[].gl1Yjllmc - 名称
+ * @param {number} reserveData[].gl1Lng - 经度
+ * @param {number} reserveData[].gl1Lat - 纬度
+ * @param {string} reserveData[].gl1Qxmc - 区县名称
+ * @param {string} reserveData[].gl1Rysl - 人员数量
+ * @param {string} reserveData[].gl1Zdmj - 占地面积
+ * @param {string} reserveData[].gl1Lx - 类型 (2=储备中心, 3=预置点)
+ * @param {Object} options - 配置选项
+ * @param {number} [options.heightOffset=10] - 相对地面的高度偏移(米)
+ * @returns {Promise