From 48fb8045a088f16968d8f1adc9e136a7218ffadd Mon Sep 17 00:00:00 2001
From: sd <1504629600@qq.com>
Date: Tue, 24 Feb 2026 15:52:27 +0800
Subject: [PATCH 1/9] =?UTF-8?q?=E7=94=98=E7=89=B9=E5=9B=BE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ruoyi-ui/src/lang/en.js | 7 +
ruoyi-ui/src/lang/zh.js | 7 +
ruoyi-ui/src/router/index.js | 5 +
ruoyi-ui/src/views/cesiumMap/index.vue | 11 +-
ruoyi-ui/src/views/childRoom/BottomLeftPanel.vue | 4 +
ruoyi-ui/src/views/childRoom/BottomTimeline.vue | 105 +----
ruoyi-ui/src/views/childRoom/TopHeader.vue | 5 +
ruoyi-ui/src/views/childRoom/index.vue | 14 +-
ruoyi-ui/src/views/ganttChart/index.vue | 540 +++++++++++++++++++++++
9 files changed, 607 insertions(+), 91 deletions(-)
create mode 100644 ruoyi-ui/src/views/ganttChart/index.vue
diff --git a/ruoyi-ui/src/lang/en.js b/ruoyi-ui/src/lang/en.js
index 57a7351..3d55431 100644
--- a/ruoyi-ui/src/lang/en.js
+++ b/ruoyi-ui/src/lang/en.js
@@ -71,6 +71,13 @@ export default {
systemDescription: 'System Description',
language: 'Language'
},
+ tools: {
+ routeCalculation: 'Route Calculation',
+ conflictDisplay: 'Conflict Display',
+ dataMaterials: 'Data Materials',
+ coordinateConversion: 'Coordinate Conversion',
+ generateGanttChart: 'Generate Gantt Chart'
+ },
favorites: {
layerFavorites: 'Layer Favorites',
routeFavorites: 'Route Favorites'
diff --git a/ruoyi-ui/src/lang/zh.js b/ruoyi-ui/src/lang/zh.js
index ece9c1f..11c1864 100644
--- a/ruoyi-ui/src/lang/zh.js
+++ b/ruoyi-ui/src/lang/zh.js
@@ -71,6 +71,13 @@ export default {
systemDescription: '系统说明',
language: '语言'
},
+ tools: {
+ routeCalculation: '航线计算',
+ conflictDisplay: '冲突显示',
+ dataMaterials: '数据资料',
+ coordinateConversion: '坐标转换',
+ generateGanttChart: '生成甘特图'
+ },
favorites: {
layerFavorites: '图层收藏',
routeFavorites: '航线收藏'
diff --git a/ruoyi-ui/src/router/index.js b/ruoyi-ui/src/router/index.js
index 1015974..1770a53 100644
--- a/ruoyi-ui/src/router/index.js
+++ b/ruoyi-ui/src/router/index.js
@@ -70,6 +70,11 @@ export const constantRoutes = [
hidden: true
},
{
+ path: '/ganttChart',
+ component: () => import('@/views/ganttChart'),
+ hidden: true
+ },
+ {
path: '/register',
component: () => import('@/views/register'),
hidden: true
diff --git a/ruoyi-ui/src/views/cesiumMap/index.vue b/ruoyi-ui/src/views/cesiumMap/index.vue
index 9985c6c..aba51cc 100644
--- a/ruoyi-ui/src/views/cesiumMap/index.vue
+++ b/ruoyi-ui/src/views/cesiumMap/index.vue
@@ -62,7 +62,7 @@
/>
-
+
{{ scaleBarText }}
@@ -119,6 +119,10 @@ export default {
coordinateFormat: {
type: String,
default: 'dms' // 'decimal' 或 'dms'
+ },
+ bottomPanelVisible: {
+ type: Boolean,
+ default: false
}
},
watch: {
@@ -5241,6 +5245,11 @@ this.viewer.scene.postProcessStages.fxaa.enabled = true
gap: 6px;
z-index: 1000;
pointer-events: none;
+ transition: bottom 0.3s ease;
+}
+
+.map-info-panel.panel-raised {
+ bottom: 65px;
}
/* 比例尺:高德风格,浅色底、圆角、刻度线 */
diff --git a/ruoyi-ui/src/views/childRoom/BottomLeftPanel.vue b/ruoyi-ui/src/views/childRoom/BottomLeftPanel.vue
index 5e4db4e..aceab24 100644
--- a/ruoyi-ui/src/views/childRoom/BottomLeftPanel.vue
+++ b/ruoyi-ui/src/views/childRoom/BottomLeftPanel.vue
@@ -75,19 +75,23 @@ export default {
this.$refs.timeline.isVisible = true
this.isExpanded = false
this.showPanel = false
+ this.$emit('bottom-panel-visible', true)
}
},
onTimelineHidden() {
this.showPanel = true
+ this.$emit('bottom-panel-visible', false)
},
showSixSteps() {
this.showSixStepsBar = true
this.isExpanded = false
this.showPanel = false
+ this.$emit('bottom-panel-visible', true)
},
hideSixStepsBar() {
this.showSixStepsBar = false
this.showPanel = true
+ this.$emit('bottom-panel-visible', false)
},
selectStep(index) {
const clickedStep = this.sixStepsData[index]
diff --git a/ruoyi-ui/src/views/childRoom/BottomTimeline.vue b/ruoyi-ui/src/views/childRoom/BottomTimeline.vue
index 8b8b636..f26ae5c 100644
--- a/ruoyi-ui/src/views/childRoom/BottomTimeline.vue
+++ b/ruoyi-ui/src/views/childRoom/BottomTimeline.vue
@@ -137,28 +137,6 @@
-
-
- 弹窗提醒
- 声音提醒
- 消息提醒
-
-
-
-
-
-
-
取消
@@ -189,18 +167,6 @@
{{ currentSegment.description }}
-
- {{ getTaskName(currentSegment.assignedTask) }}
-
-
-
-
- 弹窗
- 声音
- 消息
-
-
-
{{ currentSegment.passed ? '已到达' : (currentSegment.active ? '即将到达' : '未到达') }}
@@ -236,23 +202,11 @@ export default {
segmentForm: {
time: null,
name: '',
- description: '',
- reminderTypes: ['popup', 'message'],
- assignedTask: null
+ description: ''
},
timer: null,
audio: null,
- currentTimeStr: '',
- availableTasks: [
- { id: 1, name: '任务准备' },
- { id: 2, name: '资源调配' },
- { id: 3, name: '任务执行' },
- { id: 4, name: '任务监控' },
- { id: 5, name: '任务完成' },
- { id: 6, name: '数据收集' },
- { id: 7, name: '分析评估' },
- { id: 8, name: '报告生成' }
- ]
+ currentTimeStr: ''
}
},
mounted() {
@@ -279,9 +233,7 @@ export default {
this.segmentForm = {
time: null,
name: '',
- description: '',
- reminderTypes: ['popup', 'message'],
- assignedTask: null
+ description: ''
}
this.showSegmentDialog = true
},
@@ -312,8 +264,6 @@ export default {
description: '开始准备任务所需的资源和设备',
active: false,
passed: false,
- reminderTypes: ['popup', 'message'],
- assignedTask: 1,
position: 0,
triggered: false
},
@@ -323,8 +273,6 @@ export default {
description: '完成资源的调配和分配',
active: false,
passed: false,
- reminderTypes: ['popup', 'message'],
- assignedTask: 2,
position: 0,
triggered: false
},
@@ -334,8 +282,6 @@ export default {
description: '开始执行主要任务',
active: false,
passed: false,
- reminderTypes: ['popup', 'sound', 'message'],
- assignedTask: 3,
position: 0,
triggered: false
},
@@ -345,8 +291,6 @@ export default {
description: '监控任务执行进度',
active: false,
passed: false,
- reminderTypes: ['popup', 'message'],
- assignedTask: 4,
position: 0,
triggered: false
},
@@ -356,8 +300,6 @@ export default {
description: '任务完成,进行总结',
active: false,
passed: false,
- reminderTypes: ['popup', 'sound', 'message'],
- assignedTask: 5,
position: 0,
triggered: false
}
@@ -426,26 +368,20 @@ export default {
},
triggerReminder(segment) {
- if (segment.reminderTypes.includes('popup')) {
- this.$notify({
- title: '时间提醒',
- message: `${segment.time} - ${segment.name}`,
- type: 'warning',
- duration: 5000
- })
- }
+ this.$notify({
+ title: '时间提醒',
+ message: `${segment.time} - ${segment.name}`,
+ type: 'warning',
+ duration: 5000
+ })
- if (segment.reminderTypes.includes('sound')) {
- this.playSound()
- }
+ this.playSound()
- if (segment.reminderTypes.includes('message')) {
- this.$message({
- message: `时间提醒:${segment.time} - ${segment.name}`,
- type: 'warning',
- duration: 5000
- })
- }
+ this.$message({
+ message: `时间提醒:${segment.time} - ${segment.name}`,
+ type: 'warning',
+ duration: 5000
+ })
},
playSound() {
@@ -492,9 +428,7 @@ export default {
this.segmentForm = {
time: this.parseTime(segment.time),
name: segment.name,
- description: segment.description,
- reminderTypes: [...segment.reminderTypes],
- assignedTask: segment.assignedTask
+ description: segment.description
}
this.showSegmentDialog = true
},
@@ -509,8 +443,6 @@ export default {
time: this.formatTime(this.segmentForm.time),
name: this.segmentForm.name,
description: this.segmentForm.description,
- reminderTypes: [...this.segmentForm.reminderTypes],
- assignedTask: this.segmentForm.assignedTask,
active: false,
passed: false,
triggered: false,
@@ -544,11 +476,6 @@ export default {
}).catch(() => {})
},
- getTaskName(taskId) {
- const task = this.availableTasks.find(t => t.id === taskId)
- return task ? task.name : '未分配'
- },
-
formatTime(date) {
const hours = date.getHours().toString().padStart(2, '0')
const minutes = date.getMinutes().toString().padStart(2, '0')
diff --git a/ruoyi-ui/src/views/childRoom/TopHeader.vue b/ruoyi-ui/src/views/childRoom/TopHeader.vue
index 456b03a..6348df4 100644
--- a/ruoyi-ui/src/views/childRoom/TopHeader.vue
+++ b/ruoyi-ui/src/views/childRoom/TopHeader.vue
@@ -156,6 +156,7 @@
{{ $t('topHeader.tools.conflictDisplay') }}
{{ $t('topHeader.tools.dataMaterials') }}
{{ $t('topHeader.tools.coordinateConversion') }}
+ {{ $t('topHeader.tools.generateGanttChart') }}
@@ -574,6 +575,10 @@ export default {
this.$emit('toggle-route', this.isRouteVisible)
},
+ generateGanttChart() {
+ this.$emit('generate-gantt-chart')
+ },
+
systemDescription() {
this.$emit('system-description')
},
diff --git a/ruoyi-ui/src/views/childRoom/index.vue b/ruoyi-ui/src/views/childRoom/index.vue
index 418e33e..05d3047 100644
--- a/ruoyi-ui/src/views/childRoom/index.vue
+++ b/ruoyi-ui/src/views/childRoom/index.vue
@@ -13,6 +13,7 @@
:tool-mode="drawDom ? 'ranging' : (airspaceDrawDom ? 'airspace' : 'airspace')"
:scaleConfig="scaleConfig"
:coordinateFormat="coordinateFormat"
+ :bottomPanelVisible="bottomPanelVisible"
@draw-complete="handleMapDrawComplete"
@drawing-points-update="missionDrawingPointsCount = $event"
@open-waypoint-dialog="handleOpenWaypointEdit"
@@ -126,6 +127,7 @@
@toggle-airport="toggleAirport"
@toggle-landmark="toggleLandmark"
@toggle-route="toggleRoute"
+ @generate-gantt-chart="generateGanttChart"
@system-description="systemDescription"
@layer-favorites="layerFavorites"
@route-favorites="routeFavorites"
@@ -190,7 +192,7 @@
@open-import-dialog="showImportDialog = true"
/>
-
+
>> [父组件接收] 航点 ID: ${wpId}, 所属航线 ID: ${routeId}`);
@@ -1867,6 +1874,11 @@ export default {
this.$message.success(this.showRoute ? '显示航线' : '隐藏航线');
},
+ generateGanttChart() {
+ const url = this.$router.resolve('/ganttChart').href
+ window.open(url, '_blank')
+ },
+
systemDescription() {
this.$message.success('系统说明');
// 这里可以添加系统说明的逻辑
diff --git a/ruoyi-ui/src/views/ganttChart/index.vue b/ruoyi-ui/src/views/ganttChart/index.vue
new file mode 100644
index 0000000..0f3b6d5
--- /dev/null
+++ b/ruoyi-ui/src/views/ganttChart/index.vue
@@ -0,0 +1,540 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ item.name }}
+
{{ formatTime(item.startTime) }} - {{ formatTime(item.endTime) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From 1dd39bbda2116371855cd94c52bf63d4f709ed0c Mon Sep 17 00:00:00 2001
From: sd <1504629600@qq.com>
Date: Wed, 25 Feb 2026 15:09:41 +0800
Subject: [PATCH 2/9] =?UTF-8?q?=E6=97=B6=E9=97=B4=E8=BD=B4=E5=8A=A0?=
=?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../system/SysTimelineSegmentController.java | 81 ++++
.../core/domain/entity/SysTimelineSegment.java | 89 ++++
.../system/mapper/SysTimelineSegmentMapper.java | 22 +
.../system/service/ISysTimelineSegmentService.java | 21 +
.../impl/SysTimelineSegmentServiceImpl.java | 57 +++
.../mapper/system/SysTimelineSegmentMapper.xml | 77 ++++
ruoyi-ui/src/api/system/timeline.js | 53 +++
ruoyi-ui/src/views/cesiumMap/index.vue | 2 +-
ruoyi-ui/src/views/childRoom/BottomLeftPanel.vue | 12 +-
ruoyi-ui/src/views/childRoom/BottomTimeline.vue | 449 ++++++++++++++-------
ruoyi-ui/src/views/childRoom/index.vue | 2 +-
sql/sys_timeline_segment.sql | 22 +
12 files changed, 747 insertions(+), 140 deletions(-)
create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysTimelineSegmentController.java
create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysTimelineSegment.java
create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTimelineSegmentMapper.java
create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTimelineSegmentService.java
create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTimelineSegmentServiceImpl.java
create mode 100644 ruoyi-system/src/main/resources/mapper/system/SysTimelineSegmentMapper.xml
create mode 100644 ruoyi-ui/src/api/system/timeline.js
create mode 100644 sql/sys_timeline_segment.sql
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysTimelineSegmentController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysTimelineSegmentController.java
new file mode 100644
index 0000000..25a06a1
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysTimelineSegmentController.java
@@ -0,0 +1,81 @@
+package com.ruoyi.web.controller.system;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysTimelineSegment;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.system.service.ISysTimelineSegmentService;
+
+@RestController
+@RequestMapping("/system/timeline")
+public class SysTimelineSegmentController extends BaseController
+{
+ @Autowired
+ private ISysTimelineSegmentService segmentService;
+
+ @PreAuthorize("@ss.hasPermi('system:timeline:list')")
+ @GetMapping("/list")
+ public AjaxResult list(SysTimelineSegment segment)
+ {
+ List
list = segmentService.selectSegmentList(segment);
+ return success(list);
+ }
+
+ @GetMapping("/listByRoomId/{roomId}")
+ public AjaxResult listByRoomId(@PathVariable Long roomId)
+ {
+ List list = segmentService.selectSegmentListByRoomId(roomId);
+ return success(list);
+ }
+
+ @PreAuthorize("@ss.hasPermi('system:timeline:query')")
+ @GetMapping(value = "/{segmentId}")
+ public AjaxResult getInfo(@PathVariable Long segmentId)
+ {
+ return success(segmentService.selectSegmentById(segmentId));
+ }
+
+ @PreAuthorize("@ss.hasPermi('system:timeline:add')")
+ @Log(title = "时间轴管理", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody SysTimelineSegment segment)
+ {
+ return toAjax(segmentService.insertSegment(segment));
+ }
+
+ @PreAuthorize("@ss.hasPermi('system:timeline:edit')")
+ @Log(title = "时间轴管理", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody SysTimelineSegment segment)
+ {
+ return toAjax(segmentService.updateSegment(segment));
+ }
+
+ @PreAuthorize("@ss.hasPermi('system:timeline:remove')")
+ @Log(title = "时间轴管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{segmentId}")
+ public AjaxResult remove(@PathVariable Long segmentId)
+ {
+ return toAjax(segmentService.deleteSegmentById(segmentId));
+ }
+
+ @PreAuthorize("@ss.hasPermi('system:timeline:remove')")
+ @Log(title = "时间轴管理", businessType = BusinessType.DELETE)
+ @DeleteMapping("/room/{roomId}")
+ public AjaxResult removeByRoomId(@PathVariable Long roomId)
+ {
+ return toAjax(segmentService.deleteSegmentByRoomId(roomId));
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysTimelineSegment.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysTimelineSegment.java
new file mode 100644
index 0000000..03476e4
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysTimelineSegment.java
@@ -0,0 +1,89 @@
+package com.ruoyi.common.core.domain.entity;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+public class SysTimelineSegment
+{
+ private static final long serialVersionUID = 1L;
+
+ private Long segmentId;
+
+ private Long roomId;
+
+ @NotBlank(message = "时间点不能为空")
+ @Size(min = 0, max = 8, message = "时间点长度不能超过8个字符")
+ private String segmentTime;
+
+ @NotBlank(message = "时间段名称不能为空")
+ @Size(min = 0, max = 50, message = "时间段名称长度不能超过50个字符")
+ private String segmentName;
+
+ @Size(max = 500, message = "时间段描述长度不能超过500个字符")
+ private String segmentDesc;
+
+ public Long getSegmentId()
+ {
+ return segmentId;
+ }
+
+ public void setSegmentId(Long segmentId)
+ {
+ this.segmentId = segmentId;
+ }
+
+ @NotNull(message = "房间ID不能为空")
+ public Long getRoomId()
+ {
+ return roomId;
+ }
+
+ public void setRoomId(Long roomId)
+ {
+ this.roomId = roomId;
+ }
+
+ public String getSegmentTime()
+ {
+ return segmentTime;
+ }
+
+ public void setSegmentTime(String segmentTime)
+ {
+ this.segmentTime = segmentTime;
+ }
+
+ public String getSegmentName()
+ {
+ return segmentName;
+ }
+
+ public void setSegmentName(String segmentName)
+ {
+ this.segmentName = segmentName;
+ }
+
+ public String getSegmentDesc()
+ {
+ return segmentDesc;
+ }
+
+ public void setSegmentDesc(String segmentDesc)
+ {
+ this.segmentDesc = segmentDesc;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+ .append("segmentId", getSegmentId())
+ .append("roomId", getRoomId())
+ .append("segmentTime", getSegmentTime())
+ .append("segmentName", getSegmentName())
+ .append("segmentDesc", getSegmentDesc())
+ .toString();
+ }
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTimelineSegmentMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTimelineSegmentMapper.java
new file mode 100644
index 0000000..9325299
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysTimelineSegmentMapper.java
@@ -0,0 +1,22 @@
+package com.ruoyi.system.mapper;
+
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+import com.ruoyi.common.core.domain.entity.SysTimelineSegment;
+
+public interface SysTimelineSegmentMapper
+{
+ public List selectSegmentList(SysTimelineSegment segment);
+
+ public List selectSegmentListByRoomId(@Param("roomId") Long roomId);
+
+ public SysTimelineSegment selectSegmentById(Long segmentId);
+
+ public int insertSegment(SysTimelineSegment segment);
+
+ public int updateSegment(SysTimelineSegment segment);
+
+ public int deleteSegmentById(Long segmentId);
+
+ public int deleteSegmentByRoomId(@Param("roomId") Long roomId);
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTimelineSegmentService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTimelineSegmentService.java
new file mode 100644
index 0000000..7889654
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysTimelineSegmentService.java
@@ -0,0 +1,21 @@
+package com.ruoyi.system.service;
+
+import java.util.List;
+import com.ruoyi.common.core.domain.entity.SysTimelineSegment;
+
+public interface ISysTimelineSegmentService
+{
+ public List selectSegmentList(SysTimelineSegment segment);
+
+ public List selectSegmentListByRoomId(Long roomId);
+
+ public SysTimelineSegment selectSegmentById(Long segmentId);
+
+ public int insertSegment(SysTimelineSegment segment);
+
+ public int updateSegment(SysTimelineSegment segment);
+
+ public int deleteSegmentById(Long segmentId);
+
+ public int deleteSegmentByRoomId(Long roomId);
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTimelineSegmentServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTimelineSegmentServiceImpl.java
new file mode 100644
index 0000000..4623bc5
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTimelineSegmentServiceImpl.java
@@ -0,0 +1,57 @@
+package com.ruoyi.system.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.common.core.domain.entity.SysTimelineSegment;
+import com.ruoyi.system.mapper.SysTimelineSegmentMapper;
+import com.ruoyi.system.service.ISysTimelineSegmentService;
+
+@Service
+public class SysTimelineSegmentServiceImpl implements ISysTimelineSegmentService
+{
+ @Autowired
+ private SysTimelineSegmentMapper segmentMapper;
+
+ @Override
+ public List selectSegmentList(SysTimelineSegment segment)
+ {
+ return segmentMapper.selectSegmentList(segment);
+ }
+
+ @Override
+ public List selectSegmentListByRoomId(Long roomId)
+ {
+ return segmentMapper.selectSegmentListByRoomId(roomId);
+ }
+
+ @Override
+ public SysTimelineSegment selectSegmentById(Long segmentId)
+ {
+ return segmentMapper.selectSegmentById(segmentId);
+ }
+
+ @Override
+ public int insertSegment(SysTimelineSegment segment)
+ {
+ return segmentMapper.insertSegment(segment);
+ }
+
+ @Override
+ public int updateSegment(SysTimelineSegment segment)
+ {
+ return segmentMapper.updateSegment(segment);
+ }
+
+ @Override
+ public int deleteSegmentById(Long segmentId)
+ {
+ return segmentMapper.deleteSegmentById(segmentId);
+ }
+
+ @Override
+ public int deleteSegmentByRoomId(Long roomId)
+ {
+ return segmentMapper.deleteSegmentByRoomId(roomId);
+ }
+}
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysTimelineSegmentMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysTimelineSegmentMapper.xml
new file mode 100644
index 0000000..4543628
--- /dev/null
+++ b/ruoyi-system/src/main/resources/mapper/system/SysTimelineSegmentMapper.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select s.segment_id, s.room_id, s.segment_time, s.segment_name, s.segment_desc
+ from sys_timeline_segment s
+
+
+
+
+
+
+
+
+
+ insert into sys_timeline_segment(
+ room_id,
+ segment_time,
+ segment_name,
+ segment_desc,
+ segment_id
+ )values(
+ #{roomId},
+ #{segmentTime},
+ #{segmentName},
+ #{segmentDesc},
+ #{segmentId}
+ )
+
+
+
+ update sys_timeline_segment
+
+ segment_time = #{segmentTime},
+ segment_name = #{segmentName},
+ segment_desc = #{segmentDesc},
+
+ where segment_id = #{segmentId}
+
+
+
+ delete from sys_timeline_segment where segment_id = #{segmentId}
+
+
+
+ delete from sys_timeline_segment where room_id = #{roomId}
+
+
+
diff --git a/ruoyi-ui/src/api/system/timeline.js b/ruoyi-ui/src/api/system/timeline.js
new file mode 100644
index 0000000..11c9873
--- /dev/null
+++ b/ruoyi-ui/src/api/system/timeline.js
@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+export function listTimelineSegments(query) {
+ return request({
+ url: '/system/timeline/list',
+ method: 'get',
+ params: query
+ })
+}
+
+export function getTimelineSegmentsByRoomId(roomId) {
+ return request({
+ url: '/system/timeline/listByRoomId/' + roomId,
+ method: 'get'
+ })
+}
+
+export function getTimelineSegment(id) {
+ return request({
+ url: '/system/timeline/' + id,
+ method: 'get'
+ })
+}
+
+export function addTimelineSegment(data) {
+ return request({
+ url: '/system/timeline',
+ method: 'post',
+ data: data
+ })
+}
+
+export function updateTimelineSegment(data) {
+ return request({
+ url: '/system/timeline',
+ method: 'put',
+ data: data
+ })
+}
+
+export function delTimelineSegment(id) {
+ return request({
+ url: '/system/timeline/' + id,
+ method: 'delete'
+ })
+}
+
+export function delTimelineSegmentsByRoomId(roomId) {
+ return request({
+ url: '/system/timeline/room/' + roomId,
+ method: 'delete'
+ })
+}
diff --git a/ruoyi-ui/src/views/cesiumMap/index.vue b/ruoyi-ui/src/views/cesiumMap/index.vue
index aba51cc..d401725 100644
--- a/ruoyi-ui/src/views/cesiumMap/index.vue
+++ b/ruoyi-ui/src/views/cesiumMap/index.vue
@@ -5249,7 +5249,7 @@ this.viewer.scene.postProcessStages.fxaa.enabled = true
}
.map-info-panel.panel-raised {
- bottom: 65px;
+ bottom: 75px;
}
/* 比例尺:高德风格,浅色底、圆角、刻度线 */
diff --git a/ruoyi-ui/src/views/childRoom/BottomLeftPanel.vue b/ruoyi-ui/src/views/childRoom/BottomLeftPanel.vue
index aceab24..9eede47 100644
--- a/ruoyi-ui/src/views/childRoom/BottomLeftPanel.vue
+++ b/ruoyi-ui/src/views/childRoom/BottomLeftPanel.vue
@@ -1,6 +1,6 @@
-
+
@@ -51,6 +51,12 @@ export default {
components: {
BottomTimeline
},
+ props: {
+ roomId: {
+ type: Number,
+ default: null
+ }
+ },
data() {
return {
isExpanded: false,
@@ -209,7 +215,7 @@ export default {
background: linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(248, 250, 252, 0.98) 100%);
backdrop-filter: blur(20px);
box-shadow: 0 -8px 32px rgba(0, 0, 0, 0.08);
- padding: 5px 60px 5px 60px;
+ padding: 2px 60px 4px 60px;
z-index: 1000;
animation: slideUp 0.4s cubic-bezier(0.4, 0, 0.2, 1);
border-top: 1px solid rgba(0, 0, 0, 0.05);
@@ -253,7 +259,7 @@ export default {
.steps-bar-container {
display: flex;
gap: 12px;
- height: 40px;
+ height: 62px;
align-items: center;
}
diff --git a/ruoyi-ui/src/views/childRoom/BottomTimeline.vue b/ruoyi-ui/src/views/childRoom/BottomTimeline.vue
index f26ae5c..e2fe34f 100644
--- a/ruoyi-ui/src/views/childRoom/BottomTimeline.vue
+++ b/ruoyi-ui/src/views/childRoom/BottomTimeline.vue
@@ -1,11 +1,18 @@
@@ -22,6 +29,10 @@
:title="segment.time + ' - ' + segment.name"
>
+
@@ -182,8 +193,16 @@
+
+