提交 7fd766f6 authored 作者: 周欢凯's avatar 周欢凯

1

上级 daa31e63
......@@ -49,4 +49,27 @@
- `isChange_flag_firstBackDate` 是实现数据时序控制的核心标志之一
- 项目有复杂的 UE 和 WebUI 集成机制,涉及时间同步和数据分发
- 左侧卫星数据表格通过 WebSocket 实时更新,数据流经过多个组件传递
- **时间轴有自动实时滚动机制**:通过 `autoUpdateDateRange` setInterval 每秒更新一次,正常模式下应注释掉初始定时器,用 `isDateRangeNotEmpty` watch 控制实时/历史模式切换
\ No newline at end of file
- **时间轴有自动实时滚动机制**:通过 `autoUpdateDateRange` setInterval 每秒更新一次,正常模式下应注释掉初始定时器,用 `isDateRangeNotEmpty` watch 控制实时/历史模式切换
### 主系统/子系统实时模式状态同步(2026-04-03)
- **问题1**:历史模式从子系统返回后可以恢复播放,实时模式返回后会被重置
- **根本原因**:onMounted 中只判断了历史模式 (`globalLeftWssCONTINE.type === "history"`),实时模式走了 else 分支,调用了 `updateTimeline()``realTimeData()`,导致从头开始
- **修复方案1**
1. 在 Store 添加 `globalIsRealtime` 字段保存实时/历史模式状态
2. `onUnmounted` 时保存 `is_flag_isRealtime``globalIsRealtime`
3. `onMounted` 中添加实时模式返回的判断分支:
- 恢复 `is_flag_isRealtime = true`
- 只刷新刻度(`generateTimelineDates()`),不调用 `updateTimeline()`
- 重新开启实时 WS(`realTimeData()`
- 重新启动自动播放(`startAutoPlay()`
4. 避免底部 `!isPlaying` 判断重复调用 `realTimeData()`(增加 `!footerTimeHasedSelectTimeToSub` 条件)
- **问题2**:历史模式返回的判断条件不精确,原代码用 `!globalIsRealtime` 判断,这不够准确
- **根本原因**:应该通过 WebSocket 数据对象 `globalLeftWssCONTINE.type` 来精确区分历史模式和实时模式
- **修复方案2**
- 历史模式判断从 `!globalIsRealtime` 改为 `globalLeftWssCONTINE?.type === "history"`
- 同时将历史模式恢复时 `wssOpenHandle``isRealtime` 参数改为 `false`,确保参数正确性
- **代码位置**
- Store:`src/store/module/app.js`(添加 `globalIsRealtime``setGlobalIsRealtime`
- 组件:`src/pages/footer/component/timers.vue`(修改 `onUnmounted``onMounted` 的三个分支)
\ No newline at end of file
......@@ -25,4 +25,21 @@
## UE 与 WebUI 集成
- WebUI 嵌入 UE 需要处理渲染层级和光照影响
- 建议使用 Unlit 材质或调整材质 Emissive 值来避免 UE 灯光影响 WebUI 显示
\ No newline at end of file
- 建议使用 Unlit 材质或调整材质 Emissive 值来避免 UE 灯光影响 WebUI 显示
## 主系统/子系统 间的时间轴状态同步
- `footerTimeHasedSelectTimeToSub`:标记主系统时间范围是否已同步给子系统
- `globalTimeLineEndSelectTime`:记录滑块当前指向的时间,用于分系统返回后恢复(**实时和历史模式都要更新**`updateSelectedTimes` 已改为无条件更新,不再限制 `!is_flag_isRealtime`
- `globalSubsystemSelectedStartTime`:记录用户选择的时间范围 `[startTime, endTime]`
- `globalLeftWssCONTINE`:WebSocket 数据对象,包含 `type``"history"``"realtime"`
- 从子系统返回时,根据 `footerTimeHasedSelectTimeToSub``globalLeftWssCONTINE.type` 判断走历史模式恢复还是实时模式恢复
- **实时模式返回**:恢复 `is_flag_isRealtime = true`,重新开启实时 WS + 自动播放,不重置滑块
- **历史模式返回**:恢复时间范围和滑块位置,发 `continue` WS 请求
- 滑块恢复:`handleDateRangeChange(..., true)` 内部会把滑块重置为 0,需在 `nextTick` 后调用 `jumpToSpecificTime(new Date(tempDateTime.value))` 跳回保存的位置
- `tempDateTime.value``onMounted` 开头赋值为 `globalTimeLineEndSelectTime`(每次 `updateSelectedTimes` 都会更新该 Store 字段)
- `jumpToSpecificTime(time)` 通过 `((targetMs - start) / totalMs) * 100` 计算百分比,写入 `endHandlePercent.value`
- ⚠️ **关键时序**`wssOpenHandle` 末尾无条件调用 `startAutoPlay()`,因此必须把 `wssOpenHandle` 放在 `nextTick` **内部**(在 `jumpToSpecificTime` 之后),否则 `startAutoPlay` 会从 `endHandlePercent=0` 开始播放,自动走的滑块仍会从头重置
- 正确顺序:`handleDateRangeChange``nextTick``jumpToSpecificTime``wssOpenHandle`(含 `startAutoPlay`
- ⚠️ **onMounted 末尾的 realTimeData() 陷阱**`onUnmounted` 调用 `stopAutoPlay()` 导致 `isPlaying=false`,所以 onMounted 末尾的 `if (!isPlaying.value) { realTimeData() }` 在历史恢复分支执行后**还会继续执行**,生成新 taskCode、重开 WS,把恢复逻辑全部覆盖。修复:在 `setGlobalisFromTosub(false)` 之后,`realTimeData()` 之前,判断 `if (footerTimeHasedSelectTimeToSub) return;` 提前退出。
- ⚠️ **实时模式 is_flag_isRealtime 被覆盖**`handleDateRangeChange` 内部会把 `is_flag_isRealtime = false`,导致实时模式返回后变成历史模式。修复:在调用 `handleDateRangeChange` 前先读取 `wasRealtime = globalLeftWssCONTINE.type === "realtime"`,调用后如果 `wasRealtime=true` 则恢复 `is_flag_isRealtime.value = true`
- ⚠️ **isPlaying 没有恢复**`handleDateRangeChange` 内部设置 `isPlaying=false`,但 `startAutoPlay` 里没有设置 `isPlaying=true`,导致 `moveEndHandle` 检查 `if (!isPlaying) return` 直接返回,滑块不动。修复:在 `nextTick``jumpToSpecificTime` 之后、`wssOpenHandle` 之前手动设置 `isPlaying.value = true`
\ No newline at end of file
......@@ -234,17 +234,17 @@ onMounted(async () => {
router.push(
{
name: 'subsystem',
// params: {
// userId: 123,
// userName: '张三',
// timestamp: Date.now()
// }
}
);
toSubSystemFlag.value = !toSubSystemFlag.value;
}
if (resData.locationReplace === 'false') {
router.push('/');
router.push({
path: '/',
query: {
mode: 'history'
}
})
//console.log("1111111111111111111111111",useAppStoreInstance.isSourceLegendShow);
useAppStoreInstance.setGlobalisFromTosub(true);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论