提交 c62bcf89 authored 作者: liujiaxing's avatar liujiaxing

Merge branch 'dev/z' into dev/L

......@@ -31,9 +31,14 @@
- `footerTimeHasedSelectTimeToSub`:标记主系统时间范围是否已同步给子系统
- `globalTimeLineEndSelectTime`:记录滑块当前指向的时间,用于分系统返回后恢复(**实时和历史模式都要更新**`updateSelectedTimes` 已改为无条件更新,不再限制 `!is_flag_isRealtime`
- `globalSubsystemSelectedStartTime`:记录用户选择的时间范围 `[startTime, endTime]`
- `globalLeftWssCONTINE`:WebSocket 数据对象,包含 `type``"history"``"realtime"`
- 从子系统返回时,根据 `footerTimeHasedSelectTimeToSub``globalLeftWssCONTINE.type` 判断走历史模式恢复还是实时模式恢复
- `globalLeftWssCONTINE`:WebSocket 数据对象,包含 `type``"history"``"realtime"`)。**注意**`lefts/index.vue``onMounted` 会把 `wss`(WebSocket 实例)写入该字段,导致 `.type` 变成 `undefined`**不可用于判断实时/历史模式**
- `globalIsRealtimeBeforeSub`**专门用于从子系统返回时恢复**,在 `timers.vue``onUnmounted` 时写入 `is_flag_isRealtime.value``onMounted` 恢复时读该字段判断。
- 从子系统返回时,根据 `footerTimeHasedSelectTimeToSub``globalIsRealtimeBeforeSub` 判断走历史模式恢复还是实时模式恢复
- **实时模式返回**:恢复 `is_flag_isRealtime = true`,重新开启实时 WS + 自动播放,不重置滑块
- 实时模式不回显时间段:`dateRange=[]``pick_select_date=null`
- **不走 `handleDateRangeChange`**,因为它会重置 `is_flag_isRealtime=false``isDateRangeNotEmpty=false``updateTimeline()` 重置滑块为0;之后设 `isDateRangeNotEmpty=true` 会触发 watch,`autoHandleDateRangeChange` 每秒把时间改成 `Date.now()-24h`,覆盖原来时间
- 实时模式恢复只需:`is_flag_isRealtime=true` + `isChange_flag_select_date=true` + `updateTimeline()` + `wssOpenHandle({continue})`
- **不设 `isDateRangeNotEmpty=true`**,避免 `autoHandleDateRangeChange` 把时间改成当前时间;实时模式的 WS 返回数据时会自动更新时间
- **历史模式返回**:恢复时间范围和滑块位置,发 `continue` WS 请求
- 滑块恢复:`handleDateRangeChange(..., true)` 内部会把滑块重置为 0,需在 `nextTick` 后调用 `jumpToSpecificTime(new Date(tempDateTime.value))` 跳回保存的位置
- `tempDateTime.value``onMounted` 开头赋值为 `globalTimeLineEndSelectTime`(每次 `updateSelectedTimes` 都会更新该 Store 字段)
......@@ -41,5 +46,5 @@
- ⚠️ **关键时序**`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`
- ⚠️ **实时模式 is_flag_isRealtime 被覆盖**`handleDateRangeChange` 内部会把 `is_flag_isRealtime = false`,导致实时模式返回后变成历史模式。修复:在 `onUnmounted` 时把 `is_flag_isRealtime.value` 存入 `globalIsRealtimeBeforeSub``onMounted` 恢复时读 `wasRealtime = globalIsRealtimeBeforeSub === true`,调用 `handleDateRangeChange` 后如果 `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
......@@ -188,28 +188,9 @@ const jumpToSpecificTime = (targetTime, PerformDrag = false) => {
// 标记为手动选择时间点
isDraged.value = true;
is_flag_isRealtime.value = false;
// is_flag_isRealtime.value = false;
isConfirmedWithRange.value = false; // 设置为false以显示完整的选中区域
// 强制更新视图
// nextTick(() => {
// updateSelectedTimes();
// //console.log("跳转到指定时间:", targetTime, "滑块位置:", percentPosition);
// // 调用UE5回调函数
// // if (window.ue5) {
// // window.ue5("callBackTimeFn", String(JSON.stringify({
// // isRealtime: false,
// // replayTime: formatDateTime(targetTime),
// // taskCode: String(taskCode_everyChange.value) === "" ? useAppStoreInstance.globalRecordMainSysTaskCode || (useAppStoreInstance.globalSubsystemTaskCode) : String(taskCode_everyChange.value),
// // })));
// // wssOpenHandle({
// // isRealtime: false,
// // replayTime: formatDateTime(targetTime),
// // taskCode: String(taskCode_everyChange.value) === "" ? useAppStoreInstance.globalRecordMainSysTaskCode || (useAppStoreInstance.globalSubsystemTaskCode) : String(taskCode_everyChange.value),
// // });
// // }
// });
// playForward();
if (PerformDrag) {
endDrag();
......@@ -582,11 +563,6 @@ const disabledDate = (time) => {
const pick_select_date = ref();
const pick_select_date_handFn = (val) => {
if (!isDraged.value) {
// window.ue5("callBackTimeFn", String(JSON.stringify({
// taskCode:String(taskCode_everyChange.value) === "" ? useAppStoreInstance.globalRecordMainSysTaskCode || (useAppStoreInstance.globalSubsystemTaskCode) : String(taskCode_everyChange.value),
// })));
}
pick_select_date.value = val;
//console.log("dddddd",val);
isChange_flag_select_date.value = true;
......@@ -598,11 +574,15 @@ const taskCode_everyChange = ref('');
// 点击确认后,处理日期范围变化
const handleDateRangeChange = async (val, flag = false, RemoveSat) => {
if (RemoveSat) {
is_flag_isRealtime.value = false;
localStorage.setItem("is_flag_isRealtime", false);
window.ue5("RemoveSat", String(JSON.stringify({
Sat: true,
})))
} else {
localStorage.setItem("is_flag_isRealtime", true);
}
useAppStoreInstance.setglobalSubsystemSelectedStartTime(val);
jiangerTime.value = 0;
isChange_flag_firstBackDate.value = false;
hasPlayed.value = false;
......@@ -616,18 +596,9 @@ const handleDateRangeChange = async (val, flag = false, RemoveSat) => {
if (isChange_flag_select_date.value || useAppStoreInstance.globalisFromTosub) {
wssResponeFlag_isSuccess.value = true;
isPlaying.value = false;
// element plus组件显示加载中
// loading.value = ElLoading.service({
// lock: true,
// text: 'Loading',
// background: 'rgba(0, 0, 0, 0.7)',
// })
if (!flag) {
Loading.show()
//console.log("cao cao1,Loading.show()");
}
// debugger
// Loading.show()
if (val && val.length === 2) {
//console.log("cao cao11",val);
......@@ -636,13 +607,10 @@ const handleDateRangeChange = async (val, flag = false, RemoveSat) => {
endDateTime.value = new Date((new Date(val[1]))).toISOString();
// //console.log("//////////////////",val[0],"4444444444--",pick_select_date.value[0]);
// preTimeWindowEnd.value = new Date((new Date(new Date(selectedStartTime.value))).setSeconds(56+60)).toISOString();
useAppStoreInstance.setglobalSubsystemSelectedStartTime(val);
// useAppStoreInstance.setglobalSubsystemSelectedEndTime(formatDateTime(val[1]));
isDraged.value = false;
is_flag_isRealtime.value = false;
isDateRangeNotEmpty.value = false;
isConfirmedWithRange.value = true; // 标记为带范围确认
clearInterval(autoUpdateDateRange.value);
......@@ -677,10 +645,8 @@ const handleDateRangeChange = async (val, flag = false, RemoveSat) => {
taskCode: String(taskCode_everyChange.value) === "" ? useAppStoreInstance.globalRecordMainSysTaskCode || (useAppStoreInstance.globalSubsystemTaskCode) : String(taskCode_everyChange.value),
currentTime: (formatDateTime(selectedEndTime.value)),
status: isPlaying.value ? "stop" : "continue",
//时间参数
})))
console.log("走了这里3");
}
wssMessageHandle()
......@@ -708,24 +674,6 @@ const handleDateRangeChange = async (val, flag = false, RemoveSat) => {
isChange_flag_select_date.value = false;//表示已经选过时间段了
playbackSpeed.value = 1;
stopAutoPlay();
// 切换实时模式的时候,之前的播放任务停止
// wssOpenHandle({
// isRealtime: is_flag_isRealtime.value? true: false,
// // status: "stop",
// // taskCode: String(taskCode_everyChange.value) === "" ? useAppStoreInstance.globalRecordMainSysTaskCode || (useAppStoreInstance.globalSubsystemTaskCode) : String(taskCode_everyChange.value),
// })
// 标志实时模式
// if(window.ue5) {
// window.ue5("callBackTimeFn", String(JSON.stringify({
// isRealtime: is_flag_isRealtime.value? true: false,
// // startTime: formatDateTime(pick_select_date.value[0]),
// // endTime: formatDateTime(pick_select_date.value[1]),
// // taskCode: String(taskCode_everyChange.value) === "" ? useAppStoreInstance.globalRecordMainSysTaskCode || (useAppStoreInstance.globalSubsystemTaskCode) : String(taskCode_everyChange.value),
// })))
// wssOpenHandle({
// isRealtime: is_flag_isRealtime.value? true: false,
// })
// }
// 强制更新视图
nextTick(() => {
......@@ -753,7 +701,6 @@ watch(() => wssResponeFlag_isSuccess.value, (newVal) => {
const isDateRangeNotEmpty = ref(false);
const autoUpdateDateRange = ref(null);
autoUpdateDateRange.value = setInterval(() => {
// autoHandleDateRangeChange([new Date(new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString()), new Date(new Date(Date.now()).toISOString())]);
autoHandleDateRangeChange([startDateTime.value, endDateTime.value]);
}, 1000);
......@@ -762,13 +709,7 @@ watch(() => isDateRangeNotEmpty.value, (newVal) => {
if (newVal) {
// === 实时模式:开启自动更新 ===
autoUpdateDateRange.value = setInterval(() => {
// 生成动态时间范围:从当前时间往前推24小时
// 例如:当前时间是 2026-04-03 18:00:00
// 则生成 [2026-04-02 18:00:00, 2026-04-03 18:00:00]
autoHandleDateRangeChange([
new Date(new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString()), // 开始时间 = 当前时间 - 24小时
new Date(new Date(Date.now()).toISOString()) // 结束时间 = 当前时间
]);
autoHandleDateRangeChange([new Date((new Date(useAppStoreInstance.globalSubsystemSelectedStartTime[0]))).toISOString(), new Date((new Date(useAppStoreInstance.globalSubsystemSelectedStartTime[1]))).toISOString()]);
}, 1000); // 每秒执行一次,让时间范围随着当前时间前进
} else {
// === 历史模式:关闭自动更新 ===
......@@ -999,14 +940,11 @@ const toggleAutoPlay = () => {
endTime: formatDateTime(new Date(endDateTime.value)),
speed: playbackSpeed.value,
taskCode: String(taskCode_everyChange.value) === "" ? useAppStoreInstance.globalRecordMainSysTaskCode || (useAppStoreInstance.globalSubsystemTaskCode) : String(taskCode_everyChange.value),
currentTime: (formatDateTime(selectedEndTime.value)),
status: isPlaying.value ? "stop" : "continue",
//时间参数
})))
console.log("走了这里4");
}
......@@ -1418,6 +1356,7 @@ const endDrag = () => {
speed: playbackSpeed.value,
status: isPlaying.value ? "continue" : "stop",
})));
console.log("走了这里5");
} else {
window.ue5("callBackTimeFn", String(JSON.stringify({
isRealtime: false,
......@@ -1426,7 +1365,7 @@ const endDrag = () => {
speed: playbackSpeed.value,
status: isPlaying.value ? "continue" : "stop",
})));
console.log("走了这里6");
wssOpenHandle({
isRealtime: false,
replayTime: formatDateTime(selectedEndTime.value),
......@@ -1552,24 +1491,24 @@ onMounted(() => {
wsTimeInstanceFn();
tempDateTime.value = ""
if (useAppStoreInstance.footerTimeHasedSelectTimeToSub) {
console.log("初始化走上面(历史模式恢复)", is_flag_isRealtime.value, useAppStoreInstance.globalLeftWssCONTINE.type);
is_flag_isRealtime.value = localStorage.getItem("is_flag_isRealtime") === "true";
console.log("初始化走上面(历史模式恢复)", is_flag_isRealtime.value, useAppStoreInstance.globalLeftWssCONTINE.mode);
tempDateTime.value = useAppStoreInstance.globalTimeLineEndSelectTime
subSysToMainSysFirstDataBack.value = false;
//历史模式时间范围
if (!is_flag_isRealtime.value) {
dateRange.value = [new Date((new Date(useAppStoreInstance.globalSubsystemSelectedStartTime[0]))).toISOString(), new Date((new Date(useAppStoreInstance.globalSubsystemSelectedStartTime[1]))).toISOString()]
pick_select_date.value = [new Date(dateRange.value[0]).toString(), new Date(dateRange.value[1]).toString()]
}
{
// ⚠️ 保存离开前的 isRealtime 状态,因为 handleDateRangeChange 内部会把 is_flag_isRealtime 设为 false
const wasRealtime = useAppStoreInstance.globalLeftWssCONTINE.type === "realtime";
// const wasRealtime = useAppStoreInstance.globalLeftWssCONTINE.type === "realtime";
handleDateRangeChange(useAppStoreInstance.globalSubsystemSelectedStartTime, true);
// handleDateRangeChange 之后恢复 isRealtime 标志(否则实时模式会变成历史模式)
if (wasRealtime) {
is_flag_isRealtime.value = true;
}
// if (wasRealtime) {
// is_flag_isRealtime.value = true;
// }
// 正确顺序:
// 1. handleDateRangeChange → 重置 endHandlePercent=0、isPlaying=false
// 2. nextTick → DOM 更新完毕
......@@ -1581,16 +1520,16 @@ onMounted(() => {
const restored = new Date(tempDateTime.value);
if (!isNaN(restored.getTime())) {
jumpToSpecificTime(restored, false);
console.log("滑块恢复到离开前位置:", tempDateTime.value, "isRealtime:", wasRealtime);
console.log("滑块恢复到离开前位置:", tempDateTime.value);
}
isPlaying.value = true;
}
// handleDateRangeChange 内部把 isPlaying 设为 false,重新设为 true
// 否则 moveEndHandle() 会因为 isPlaying=false 立即返回,滑块不会动
isPlaying.value = true;
// wssOpenHandle 放在 nextTick 内,保证 endHandlePercent 已恢复后再触发 startAutoPlay
});
wssOpenHandle({
isRealtime: wasRealtime,
isRealtime: is_flag_isRealtime.value,
status: 'continue',
messageTypeFalg: true,
taskCode: useAppStoreInstance.globalRecordMainSysTaskCode || (useAppStoreInstance.globalSubsystemTaskCode),
......@@ -1607,6 +1546,7 @@ onMounted(() => {
speed: playbackSpeed.value,
status: isPlaying.value ? "continue" : "stop",
})))
console.log("走了这里1");
}
}
useAppStoreInstance.setGlobalisFromTosub(false)
......@@ -1654,7 +1594,7 @@ const realTimeData = () => {
//时间参数
})))
console.log("走了这里2");
}
......@@ -1753,6 +1693,9 @@ onUnmounted(() => {
stopAutoPlay();
window.removeEventListener('mousemove', handleDrag);
window.removeEventListener('mouseup', endDrag);
// 保存进入子系统前的实时/历史状态,供 onMounted 恢复时使用
// 不能依赖 globalLeftWssCONTINE,因为它会被 lefts/index.vue 用 wss 实例覆盖
useAppStoreInstance.setGlobalIsRealtimeBeforeSub(is_flag_isRealtime.value);
useAppStoreInstance.setGlobalSubsystemSelectedTimeRange(getDayRangeFromTime(useAppStoreInstance.globalTimeLineEndSelectTime));
//console.log("jieshuli 1,组件卸载时要发暂停",getDayRangeFromTime(useAppStoreInstance.globalTimeLineEndSelectTime)[0],getDayRangeFromTime(useAppStoreInstance.globalTimeLineEndSelectTime)[1]);
if (is_flag_isRealtime.value) {
......
......@@ -154,9 +154,9 @@ const calculateConfig = (selectedTemplate) => {
component2.value = obj[selectedTemplate.availabilityCurveType]
component3.value = obj[selectedTemplate.latencyCurveType]
console.log('component1', component1.value)
console.log('component2', component2.value)
console.log('component3', component3.value)
// console.log('component1', component1.value)
// console.log('component2', component2.value)
// console.log('component3', component3.value)
const curveType = {
'1': '瞬时值曲线',
......
......@@ -25,6 +25,9 @@ const useAppStore = defineStore("app", {
globalLeftWssCONTINE: false,
// 进入子系统前是否处于实时模式(专门用于返回时恢复,不依赖 globalLeftWssCONTINE)
globalIsRealtimeBeforeSub: false,
globalRecordMainSysTaskCode: 0,
subSystemTimeLineEndSelectTime: "-",
......@@ -71,6 +74,9 @@ const useAppStore = defineStore("app", {
setGlobalLeftWssCONTINE(status) {
this.globalLeftWssCONTINE = status;
},
setGlobalIsRealtimeBeforeSub(status) {
this.globalIsRealtimeBeforeSub = status;
},
setSubSystemTimeLineEndSelectTime(status) {
this.subSystemTimeLineEndSelectTime = status;
},
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论