From 2e930770872304e6d3bb6862c54c9d9158cea178 Mon Sep 17 00:00:00 2001
From: ctw <1051735452@qq.com>
Date: Tue, 3 Feb 2026 14:16:45 +0800
Subject: [PATCH 1/4] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E7=A9=BA=E5=9F=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ruoyi-ui/src/views/childRoom/index.vue | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/ruoyi-ui/src/views/childRoom/index.vue b/ruoyi-ui/src/views/childRoom/index.vue
index f4bbca5..91ec3ce 100644
--- a/ruoyi-ui/src/views/childRoom/index.vue
+++ b/ruoyi-ui/src/views/childRoom/index.vue
@@ -363,7 +363,7 @@ export default {
{ id: 'file', name: '方案', icon: 'el-icon-folder-opened' },
{ id: 'start', name: '冲突', icon: 'el-icon-error' },
{ id: 'insert', name: '平台', icon: 'el-icon-s-platform' },
- { id: 'pattern', name: '图案', icon: 'el-icon-picture-outline-round' },
+ { id: 'pattern', name: '空域', icon: 'el-icon-picture-outline-round' },
{ id: 'deduction', name: '推演', icon: 'el-icon-video-play' },
{ id: 'modify', name: '修改', icon: 'el-icon-edit-outline' },
{ id: 'refresh', name: '刷新', icon: 'el-icon-refresh' },
@@ -556,7 +556,7 @@ export default {
console.error("查找失败!账本内IDs:", waypointsList.map(w => w.id));
}
},
-
+
// 处理从地图点击传来的航线编辑请求
async handleOpenRouteEdit(routeId) {
console.log(`>>> [父组件接收] 航线 ID: ${routeId}`);
@@ -583,7 +583,7 @@ export default {
console.error('获取航线数据失败:', error);
}
},
-
+
// 显示在线成员弹窗
showOnlineMembersDialog() {
this.showOnlineMembers = true;
From 76927b44e8f73c9a2db9a2350b1237159af1a752 Mon Sep 17 00:00:00 2001
From: ctw <1051735452@qq.com>
Date: Tue, 3 Feb 2026 16:56:15 +0800
Subject: [PATCH 2/4] =?UTF-8?q?=E5=9B=BE=E6=A0=87=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ruoyi-ui/src/assets/icons/svg/chongtu.svg | 1 +
ruoyi-ui/src/assets/icons/svg/circle.svg | 1 +
ruoyi-ui/src/assets/icons/svg/cj.svg | 1 +
ruoyi-ui/src/assets/icons/svg/cursor.svg | 1 +
ruoyi-ui/src/assets/icons/svg/dt.svg | 1 +
ruoyi-ui/src/assets/icons/svg/jx.svg | 1 +
ruoyi-ui/src/assets/icons/svg/ky.svg | 1 +
ruoyi-ui/src/assets/icons/svg/plan.svg | 1 +
ruoyi-ui/src/assets/icons/svg/sx.svg | 1 +
ruoyi-ui/src/views/cesiumMap/DrawingToolbar.vue | 22 +++++++++++++++++-----
ruoyi-ui/src/views/childRoom/LeftMenu.vue | 24 ++++++++++++++++++------
ruoyi-ui/src/views/childRoom/index.vue | 10 +++++-----
12 files changed, 49 insertions(+), 16 deletions(-)
create mode 100644 ruoyi-ui/src/assets/icons/svg/chongtu.svg
create mode 100644 ruoyi-ui/src/assets/icons/svg/circle.svg
create mode 100644 ruoyi-ui/src/assets/icons/svg/cj.svg
create mode 100644 ruoyi-ui/src/assets/icons/svg/cursor.svg
create mode 100644 ruoyi-ui/src/assets/icons/svg/dt.svg
create mode 100644 ruoyi-ui/src/assets/icons/svg/jx.svg
create mode 100644 ruoyi-ui/src/assets/icons/svg/ky.svg
create mode 100644 ruoyi-ui/src/assets/icons/svg/plan.svg
create mode 100644 ruoyi-ui/src/assets/icons/svg/sx.svg
diff --git a/ruoyi-ui/src/assets/icons/svg/chongtu.svg b/ruoyi-ui/src/assets/icons/svg/chongtu.svg
new file mode 100644
index 0000000..cc5c41a
--- /dev/null
+++ b/ruoyi-ui/src/assets/icons/svg/chongtu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/ruoyi-ui/src/assets/icons/svg/circle.svg b/ruoyi-ui/src/assets/icons/svg/circle.svg
new file mode 100644
index 0000000..833bdf7
--- /dev/null
+++ b/ruoyi-ui/src/assets/icons/svg/circle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/ruoyi-ui/src/assets/icons/svg/cj.svg b/ruoyi-ui/src/assets/icons/svg/cj.svg
new file mode 100644
index 0000000..1a23e44
--- /dev/null
+++ b/ruoyi-ui/src/assets/icons/svg/cj.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/ruoyi-ui/src/assets/icons/svg/cursor.svg b/ruoyi-ui/src/assets/icons/svg/cursor.svg
new file mode 100644
index 0000000..d159790
--- /dev/null
+++ b/ruoyi-ui/src/assets/icons/svg/cursor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/ruoyi-ui/src/assets/icons/svg/dt.svg b/ruoyi-ui/src/assets/icons/svg/dt.svg
new file mode 100644
index 0000000..09fb981
--- /dev/null
+++ b/ruoyi-ui/src/assets/icons/svg/dt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/ruoyi-ui/src/assets/icons/svg/jx.svg b/ruoyi-ui/src/assets/icons/svg/jx.svg
new file mode 100644
index 0000000..f9441ad
--- /dev/null
+++ b/ruoyi-ui/src/assets/icons/svg/jx.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/ruoyi-ui/src/assets/icons/svg/ky.svg b/ruoyi-ui/src/assets/icons/svg/ky.svg
new file mode 100644
index 0000000..0255ab7
--- /dev/null
+++ b/ruoyi-ui/src/assets/icons/svg/ky.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/ruoyi-ui/src/assets/icons/svg/plan.svg b/ruoyi-ui/src/assets/icons/svg/plan.svg
new file mode 100644
index 0000000..608c2aa
--- /dev/null
+++ b/ruoyi-ui/src/assets/icons/svg/plan.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/ruoyi-ui/src/assets/icons/svg/sx.svg b/ruoyi-ui/src/assets/icons/svg/sx.svg
new file mode 100644
index 0000000..95ca792
--- /dev/null
+++ b/ruoyi-ui/src/assets/icons/svg/sx.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/ruoyi-ui/src/views/cesiumMap/DrawingToolbar.vue b/ruoyi-ui/src/views/cesiumMap/DrawingToolbar.vue
index de6a0f0..58d3b46 100644
--- a/ruoyi-ui/src/views/cesiumMap/DrawingToolbar.vue
+++ b/ruoyi-ui/src/views/cesiumMap/DrawingToolbar.vue
@@ -9,7 +9,8 @@
@click="handleItemClick(item)"
:title="item.name"
>
-
+
+
@@ -42,9 +43,9 @@ export default {
allToolbarItems: [
{ id: 'mouse', name: '鼠标', icon: 'el-icon-position' },
{ id: 'polygon', name: '面', icon: 'el-icon-house' },
- { id: 'rectangle', name: '矩形', icon: 'el-icon-crop' },
- { id: 'circle', name: '圆形', icon: 'el-icon-circle-plus-outline' },
- { id: 'sector', name: '扇形', icon: 'el-icon-pie-chart' },
+ { id: 'rectangle', name: '矩形', icon: 'jx' },
+ { id: 'circle', name: '圆形', icon: 'circle' },
+ { id: 'sector', name: '扇形', icon: 'sx' },
{ id: 'arrow', name: '箭头', icon: 'el-icon-right' },
{ id: 'text', name: '文本', icon: 'el-icon-document' },
{ id: 'image', name: '图片', icon: 'el-icon-picture-outline' },
@@ -55,7 +56,7 @@ export default {
],
// 测距模式工具列表
rangingToolbarItems: [
- { id: 'mouse', name: '鼠标', icon: 'el-icon-position' },
+ { id: 'mouse', name: '鼠标', icon: 'cursor' },
{ id: 'point', name: '点', icon: 'el-icon-location' },
{ id: 'line', name: '线', icon: 'el-icon-edit-outline' },
{ id: 'clear', name: '清除', icon: 'el-icon-delete' }
@@ -72,6 +73,11 @@ export default {
}
},
methods: {
+ /** 判断是否为本地 SVG 图标(非 Element 的 el-icon-* 类名) */
+ isSvgIcon(icon) {
+ return icon && typeof icon === 'string' && !icon.startsWith('el-icon-')
+ },
+
handleItemClick(item) {
if (item.id === 'clear') {
this.$emit('clear-all')
@@ -148,6 +154,12 @@ export default {
box-shadow: 0 2px 8px rgba(0, 138, 255, 0.3);
}
+.toolbar-item .toolbar-svg-icon {
+ width: 1em;
+ height: 1em;
+ font-size: 16px;
+}
+
.toolbar-item:disabled {
opacity: 0.5;
cursor: not-allowed;
diff --git a/ruoyi-ui/src/views/childRoom/LeftMenu.vue b/ruoyi-ui/src/views/childRoom/LeftMenu.vue
index 64c3896..64b0af7 100644
--- a/ruoyi-ui/src/views/childRoom/LeftMenu.vue
+++ b/ruoyi-ui/src/views/childRoom/LeftMenu.vue
@@ -30,24 +30,25 @@
@contextmenu.prevent="handleRightClick(item)"
:title="item.name"
>
-
+
+
-
+
-
+
-
+
{{ $t('leftMenu.delete') }}
-
+
\ No newline at end of file
+
diff --git a/ruoyi-ui/src/views/childRoom/index.vue b/ruoyi-ui/src/views/childRoom/index.vue
index f5c69ad..041697d 100644
--- a/ruoyi-ui/src/views/childRoom/index.vue
+++ b/ruoyi-ui/src/views/childRoom/index.vue
@@ -361,14 +361,14 @@ export default {
// 默认菜单项配置
defaultMenuItems: [
- { id: 'file', name: '方案', icon: 'el-icon-folder-opened' },
- { id: 'start', name: '冲突', icon: 'el-icon-error' },
+ { id: 'file', name: '方案', icon: 'plan' },
+ { id: 'start', name: '冲突', icon: 'chongtu' },
{ id: 'insert', name: '平台', icon: 'el-icon-s-platform' },
- { id: 'pattern', name: '空域', icon: 'el-icon-picture-outline-round' },
+ { id: 'pattern', name: '空域', icon: 'ky' },
{ id: 'deduction', name: '推演', icon: 'el-icon-video-play' },
- { id: 'modify', name: '修改', icon: 'el-icon-edit-outline' },
+ { id: 'modify', name: '测距', icon: 'cj' },
{ id: 'refresh', name: '刷新', icon: 'el-icon-refresh' },
- { id: 'basemap', name: '底图', icon: 'el-icon-picture' },
+ { id: 'basemap', name: '底图', icon: 'dt' },
{ id: 'save', name: '保存', icon: 'el-icon-document-checked' },
{ id: 'import', name: '导入', icon: 'el-icon-upload2' },
{ id: 'export', name: '导出', icon: 'el-icon-download' }
From 8ad1c6e9e96cefab5368103752708f44ba8a30fb Mon Sep 17 00:00:00 2001
From: ctw <1051735452@qq.com>
Date: Thu, 5 Feb 2026 10:56:25 +0800
Subject: [PATCH 3/4] =?UTF-8?q?K=E6=97=B6=E5=92=8C=E7=AE=80=E5=8D=95?=
=?UTF-8?q?=E7=9A=84=E8=88=AA=E7=BA=BF=E5=8A=A8=E6=80=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ruoyi-ui/src/views/cesiumMap/index.vue | 16 +
ruoyi-ui/src/views/childRoom/RightPanel.vue | 13 +-
ruoyi-ui/src/views/childRoom/TopHeader.vue | 34 +-
ruoyi-ui/src/views/childRoom/index.vue | 394 ++++++++++++++++++++--
ruoyi-ui/src/views/dialogs/WaypointEditDialog.vue | 59 +++-
5 files changed, 467 insertions(+), 49 deletions(-)
diff --git a/ruoyi-ui/src/views/cesiumMap/index.vue b/ruoyi-ui/src/views/cesiumMap/index.vue
index cf4a945..37896eb 100644
--- a/ruoyi-ui/src/views/cesiumMap/index.vue
+++ b/ruoyi-ui/src/views/cesiumMap/index.vue
@@ -562,6 +562,22 @@ export default {
}
this.allEntities = this.allEntities.filter(item => item.id !== routeId && item.id !== `route-platform-${routeId}`);
},
+ /** 动态推演:更新某条航线的平台图标位置(position: { lng, lat, alt } 或 Cesium.Cartesian3) */
+ updatePlatformPosition(routeId, position) {
+ if (!this.viewer) return;
+ const entity = this.viewer.entities.getById(`route-platform-${routeId}`);
+ if (!entity || !entity.position) return;
+ let cartesian;
+ if (position && position.x !== undefined && position.y !== undefined && position.z !== undefined) {
+ cartesian = position;
+ } else if (position && position.lng != null && position.lat != null) {
+ const alt = position.alt != null ? Number(position.alt) : 0;
+ cartesian = Cesium.Cartesian3.fromDegrees(Number(position.lng), Number(position.lat), alt);
+ } else {
+ return;
+ }
+ entity.position = cartesian;
+ },
checkCesiumLoaded() {
if (typeof Cesium === 'undefined') {
console.error('Cesium未加载,请检查CDN链接');
diff --git a/ruoyi-ui/src/views/childRoom/RightPanel.vue b/ruoyi-ui/src/views/childRoom/RightPanel.vue
index d972568..3187dc1 100644
--- a/ruoyi-ui/src/views/childRoom/RightPanel.vue
+++ b/ruoyi-ui/src/views/childRoom/RightPanel.vue
@@ -85,7 +85,7 @@
{{ point.name }}
-
高度: {{ point.alt }}m | 速度: {{ point.speed }}
+
高度: {{ point.alt }}m | 速度: {{ point.speed }} | 相对K: {{ formatWaypointKTime(point.startTime) }}
@@ -334,6 +334,17 @@ export default {
}
},
methods: {
+ /** 航点 startTime(如 K+00:40:00)格式化为简短显示:K+40 或 K-15 */
+ formatWaypointKTime(startTime) {
+ if (!startTime || typeof startTime !== 'string') return '—';
+ const m = startTime.match(/K([+-])(\d{2}):(\d{2})/);
+ if (!m) return startTime;
+ const sign = m[1];
+ const h = parseInt(m[2], 10);
+ const min = parseInt(m[3], 10);
+ const totalMin = h * 60 + min;
+ return totalMin === 0 ? 'K+0' : `K${sign}${totalMin}`;
+ },
// 切换方案展开/折叠
togglePlan(planId) {
const index = this.expandedPlans.indexOf(planId)
diff --git a/ruoyi-ui/src/views/childRoom/TopHeader.vue b/ruoyi-ui/src/views/childRoom/TopHeader.vue
index b3e3b34..b04d5d2 100644
--- a/ruoyi-ui/src/views/childRoom/TopHeader.vue
+++ b/ruoyi-ui/src/views/childRoom/TopHeader.vue
@@ -233,11 +233,18 @@
-
+
{{ $t('topHeader.info.combatTime') }}
-
{{ combatTime }}
+
+ {{ combatTime }}
+
+
@@ -312,6 +319,14 @@ export default {
type: String,
default: ''
},
+ roomDetail: {
+ type: Object,
+ default: null
+ },
+ canSetKTime: {
+ type: Boolean,
+ default: false
+ },
userAvatar: {
type: String,
default: 'https://cube.elemecdn.com/0/88dd03f9bf287d08f58fbcf58fddbf4a8c6/avatar.png'
@@ -389,9 +404,7 @@ export default {
this.$emit('import-layer')
},
- importRoute() {
- this.$emit('import-route')
- },
+
exportPlan() {
this.$emit('export-plan')
@@ -856,6 +869,17 @@ export default {
font-weight: 600;
}
+.info-box.clickable {
+ cursor: pointer;
+}
+
+.info-box .set-k-hint {
+ margin-left: 4px;
+ font-size: 12px;
+ color: #008aff;
+ vertical-align: middle;
+}
+
.info-icon {
font-size: 20px;
color: #008aff;
diff --git a/ruoyi-ui/src/views/childRoom/index.vue b/ruoyi-ui/src/views/childRoom/index.vue
index 041697d..d50aaea 100644
--- a/ruoyi-ui/src/views/childRoom/index.vue
+++ b/ruoyi-ui/src/views/childRoom/index.vue
@@ -36,6 +36,26 @@
确 定
+
+
+
+
+
+
+
+ 航线的任务时间将以此 K 时为基准进行加减;航点表时间为相对 K 的分钟数。房主/管理员可随时再次点击「作战时间」修改 K 时。
+
+
+