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

ai注释并修改

上级 a1e1d476
......@@ -186,33 +186,30 @@ const jumpToSpecificTime = (targetTime, PerformDrag = false) => {
}
};
// websock发送数据并接受数据
// websock发送数据(只发送,不注册消息处理器)
const wssOpenHandle = (data) => {
console.log("发送数据", (wssInstance.value).readyState);
if ((wssInstance.value).readyState === WebSocket.OPEN) {
// 如果连接已打开,直接发送数据
(wssInstance.value).send(JSON.stringify(data));
wssMessageHandle();
// console.warn('WebSocket 已连接,无法发送数据:', data);
} else if ((wssInstance.value).readyState === WebSocket.CLOSED) {
console.warn('WebSocket 已关闭,无法发送数据:', data);
(wssInstance.value) = new WebSocket((wssInstance.value).url);
const oldUrl = (wssInstance.value).url; // 保存 URL
(wssInstance.value) = new WebSocket(oldUrl);
// 重连时重新注册消息处理器
wssMessageHandle();
(wssInstance.value).onopen = () => {
(wssInstance.value).send(JSON.stringify(data));
};
console.log("发送数据1111");
wssMessageHandle();
} else {
// 否则等待连接打开后再发送
(wssInstance.value).onopen = () => {
(wssInstance.value).send(JSON.stringify(data));
};
wssMessageHandle();
}
console.log("触发1");
startAutoPlay();
};
const wssResponeFlag_isSuccess = ref(true);
const loading = ref('');
......@@ -289,8 +286,8 @@ const wsTimeInstanceFn = () => {
}
const preTimeWindowEnd = ref(null);
const preTimeAllDate = ref(null);
const preTimeWindowEnd = ref(null);//下一个时间窗口结束时间
const preTimeAllDate = ref(null);//上一条完整数据
const onMessageIndex = ref(0);
// const hasPlayed = ref(false);//判断是否在自动播放中
......@@ -298,166 +295,133 @@ const unlesscount = ref(0);
const wssMessageHandle = () => {
// let WwflagToNext = 0
(wssInstance.value).onmessage = (event) => {
const data = JSON.parse(event.data);
console.log('data接受到返回的数据了----------------', data)
if (data.type === "realtime") {
console.log('是否开始播放');
let data;
// 修复问题2: 添加 try-catch 包裹 JSON.parse
try {
data = JSON.parse(event.data);
} catch (error) {
console.error('WebSocket 数据解析失败:', error);
return;
}
console.log('data接受到返回的数据了----------------', data);
playForward();//开始播放
// 修复问题1: 将 history 类型统一处理
if (data.type === 'realtime') {
console.log('是否开始播放');
playForward();
useAppStoreInstance.setGlobalLeftWssCONTINE(data);
Loading.hide(); // 成功处理后隐藏 loading
// 实时模式下,如果后端返回 SMOOTH 类型,说明是拖动后的同步数据
// 需要通知 UE5 继续播放,与时间轴同步
if (data.controlType === 'SMOOTH') {
if (window.ue5) {
window.ue5("callBackTimeFn", String(JSON.stringify({
isRealtime: true,
replayTime: formatDateTime(selectedEndTime.value),
taskCode: String(taskCode_everyChange.value) === "" ? useAppStoreInstance.globalRecordMainSysTaskCode || (useAppStoreInstance.globalSubsystemTaskCode) : String(taskCode_everyChange.value),
speed: playbackSpeed.value,
status: "continue", // 通知 UE5 继续播放
})));
console.log("SMOOTH类型,通知UE5继续播放");
}
// 只有history和实时模式数据,回复已收到数据的确认。要修改以下代码
if ((data.type === 'history' && !(data?.isLagrangeInterpolation === true))) {
}
} else if (data.type === 'history') {
// 发送确认(仅非插值数据)
if (!(data?.isLagrangeInterpolation === true)) {
wssOpenHandle({
type: "confirm",
taskCode: String(taskCode_everyChange.value) === "" ? useAppStoreInstance.globalRecordMainSysTaskCode || (useAppStoreInstance.globalSubsystemTaskCode) : String(taskCode_everyChange.value),
clientType: "web"
})
});
}
if (data.type === 'control' && (data.controlType === 'continue' && data?.messageTypeFalg === 'true')) {
// 跳到指定时间点
console.log(tempDateTime.value, '试试模式的时间?-------');
jumpToSpecificTime(new Date(subtractSecondsAndFormat(alignTo56Seconds(tempDateTime.value).toISOString(), data.remainingTimeMs + 1)), false)
playForward();//开始播放
// if (!hasPlayed.value) {
//console.log("我是playForward--3");
// hasPlayed.value = true;
// }
}
// //console.log('setTimeout:', (1000*60)/playbackSpeed.value,playbackSpeed.value);
if ((data.type === 'history' && (data?.isLagrangeInterpolation === true)) && (data.controlType === 'SMOOTH')) {
//console.log("我是playForward--1");
// 平滑插值处理
if ((data?.isLagrangeInterpolation === true) && (data.controlType === 'SMOOTH')) {
if (data.nextTimestamp) {
console.log('时间值111');
preTimeWindowEnd.value = data.nextTimestamp;
}
jumpToNextTime.value = data.remainingTimeMs || 0;
hasDraged_first_falseToTrue.value = true;
isChange_flag_firstBackDate.value = true;
playForward();
// hasPlayed.value = true;
useAppStoreInstance.setGlobalLeftWssCONTINE(data);
// console.log("useAppStoreInstance.globalLeftWssCONTINE;执行了");
}
// 使用 Promise 包装 setTimeout
// await new Promise(resolve => {
// setTimeout(() => {
// loading.close()
// resolve()
// }, 2000)
// })
//console.log('我是timer获取的wssRespone:', data);
//console.log("我走了seekConfirm",!(data?.isLagrangeInterpolation === true));
let flagToNext = 0
Loading.hide()//接受到后端ws传递的消息,这时候隐藏loading
if (data.type === 'control' && !(data.controlType === 'stop') && !(data.controlType === 'continue')) {
if (data.nextTimestamp) {
console.log('时间值222');
preTimeWindowEnd.value = data.nextTimestamp || data.dataTime;
}
hasDraged_first_falseToTrue.value = true;
console.log('是否跳转');
jumpToSpecificTime(new Date(subtractSecondsAndFormat(alignTo56Seconds(selectedEndTime.value).toISOString(), data.remainingTimeMs + 1)));
//console.log("我走了ElMessage",hasDraged_first_falseToTrue.value , !(data?.isLagrangeInterpolation === true) , (data.controlType === 'seekConfirm'));
// ElMessage.warning("dsadasd",jumpToNextTime.value)
if (hasDraged_first_falseToTrue.value && !(data?.isLagrangeInterpolation === true) && (data.controlType === 'seekConfirm')) {
// ElMessage({
// type: 'success',
// message: `${jumpToNextTime.value/1000}秒后可进行下次时间轴拖动!!!`,
// })
}
isChange_flag_firstBackDate.value = true;
}
if (data.type === 'error') {
wssResponeFlag_isSuccess.value = false;
// eleplate plus 关闭loading
// (loading.value).close()
console.log(data.type, data.type === 'error', '为什么会进来33');
ElMessage({
type: 'error',
message: data.message ? `主系统:${data.message} ` : `已暂停,没有查询到该时间段的历史数据!!!`,
})
// //console.log("获取的wssResponeFlag_isSuccess信息1:", wssResponeFlag_isSuccess.value);
useAppStoreInstance.setglobalStartWss(false)
//console.log("我走了这里4")
stopAutoPlay();
// isChange_flag_firstBackDate.value = false;
// hasPlayed.value = false;
// 处理任务数据
}
if (data.type === 'history' && !(data?.isLagrangeInterpolation === true)) {
// 普通历史数据处理
if (!(data?.isLagrangeInterpolation === true)) {
useAppStoreInstance.setGlobalLeftWssCONTINE(data);
// 处理日志数据
// //console.log("endDateTime.value === selectedEndTime.value:", endDateTime.value , selectedEndTime.value.toISOString(),endDateTime.value === selectedEndTime.value);
useAppStoreInstance.setglobalStartWss(true)
speedChangedNormalDataBack.value = false;//多余
useAppStoreInstance.setglobalStartWss(true);
speedChangedNormalDataBack.value = false;
if (data.nextTimestamp || data.timeWindowEnd) {
console.log('时间值333');
preTimeWindowEnd.value = data.nextTimestamp || data.timeWindowEnd;
}
hasDraged_first_falseToTrue.value = false;
// if (!(is_flag_confirmAndPauseAndSpeed.value) && !(is_flag_isRealtime.value)) {
// //console.log("我走了is_flag_confirmAndPauseAndSpeed",!(is_flag_confirmAndPauseAndSpeed.value) && !(is_flag_isRealtime.value));
// is_flag_confirmAndPauseAndSpeed.value = true;
// }
preTimeAllDate.value = data;
// clearTimeout(WwflagToNext);
if (flagToNext !== 0) {
clearTimeout(flagToNext);
}
isChange_flag_firstBackDate.value = true;
onMessageIndex.value += 1
if (endDateTime.value === selectedEndTime.value.toISOString()) {
//console.log("我走了这里1",endDateTime.value === selectedEndTime.value.toISOString(),endDateTime.value,selectedEndTime.value.toISOString());
console.log('接受值后');
onMessageIndex.value += 1;
// 修复问题6: 添加容差判断(2秒容差)
// 添加空值保护
if (endDateTime.value && selectedEndTime.value) {
const toleranceMs = 2000; // 2秒容差
const endTimeMs = new Date(endDateTime.value).getTime();
const selectedTimeMs = selectedEndTime.value.getTime();
const timeDiff = endTimeMs - selectedTimeMs;
if (timeDiff <= toleranceMs && timeDiff >= 0) {
console.log('接受值后,已到达终点容差范围');
stopAutoPlay();
} else {
playForward();
// if (!hasPlayed.value) {
// //console.log("我是playForward--3");
// hasPlayed.value = true;
// }
// startAutoPlay()
}
wssResponeFlag_isSuccess.value = true;
} else {
playForward();
}
if (data.type === 'EndProcess') {
useAppStoreInstance.setglobalStartWss(false)
// useAppStoreInstance.setglobalStartWss(false)
// isChange_flag_firstBackDate.value = false;
Loading.hide(); // 成功处理后隐藏 loading
}
} else if (data.type === 'control') {
// control 类型单独处理
if (data.controlType === 'continue' && data?.messageTypeFalg === 'true') {
// 跳到指定时间点
console.log(tempDateTime.value, '试试模式的时间?-------');
jumpToSpecificTime(new Date(subtractSecondsAndFormat(alignTo56Seconds(tempDateTime.value).toISOString(), data.remainingTimeMs + 1)), false);
playForward();
Loading.hide();
} else if (!(data.controlType === 'stop') && !(data.controlType === 'continue')) {
if (data.nextTimestamp) {
console.log('时间值222');
preTimeWindowEnd.value = data.nextTimestamp || data.dataTime;
}
hasDraged_first_falseToTrue.value = true;
console.log('是否跳转');
jumpToSpecificTime(new Date(subtractSecondsAndFormat(alignTo56Seconds(selectedEndTime.value).toISOString(), data.remainingTimeMs + 1)));
isChange_flag_firstBackDate.value = true;
Loading.hide();
}
} else if (data.type === 'error') {
console.log(data.type, '为什么会进来33');
ElMessage({
type: 'error',
message: data.message ? `主系统:${data.message} ` : `已暂停,没有查询到该时间段的历史数据!!!`,
});
useAppStoreInstance.setglobalStartWss(false);
stopAutoPlay();
// 错误情况不隐藏 loading,保持加载状态提示用户
} else if (data.type === 'EndProcess') {
useAppStoreInstance.setglobalStartWss(false);
console.log(data.type, data.type === 'error', '为什么会进来11');
ElMessage({
type: 'error',
message: data.message || `已暂停,没有查询到该时间段的历史数据!!!`,
})
});
stopAutoPlay();
// //console.log('我是left,type == time获取的wssRespone:', JSONdata, typeof JSONdata.time);
// //console.log('我是left,type == time获取的wssRespone:', JSONdata.time, typeof JSONdata.time);
// //console.log('我是left,type == time获取的wssRespone:', JSONdata.time.toLocaleString(), typeof JSONdata.time.toLocaleString());
}
unlesscount.value += 1
unlesscount.value += 1;
};
}
......@@ -570,8 +534,7 @@ const handleDateRangeChange = async (val, flag = false, RemoveSat, speed) => {
}
if (val && val.length > 0) {
wssResponeFlag_isSuccess.value = true;
isPlaying.value = false;
isPlaying.value = false;//播放暂停
if (!flag) {
Loading.show()
}
......@@ -620,7 +583,6 @@ const handleDateRangeChange = async (val, flag = false, RemoveSat, speed) => {
console.log("走了这里3");
}
wssMessageHandle()
} else {
ElMessage({
type: 'warning',
......@@ -642,24 +604,6 @@ const handleDateRangeChange = async (val, flag = false, RemoveSat, speed) => {
}
};
watch(() => wssResponeFlag_isSuccess.value, (newVal) => {
//console.log("我是这里再监测数值变化,",newVal);
if (newVal) {
console.log("触发2");
startAutoPlay();
}
else {
//console.log("我是watch(())stopAutoPlay()");
//console.log("我走了这里6")
console.log('触发了暂停');
stopAutoPlay();
// (wssInstance.value).close()
}
})
const isDateRangeNotEmpty = ref(false);
const autoUpdateDateRange = ref(null);
autoUpdateDateRange.value = setInterval(() => {
......@@ -917,7 +861,7 @@ const toggleAutoPlay = () => {
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",
status: isPlaying.value ? "continue" : "stop",
// status: isPlaying.value ? "continue" : "stop",
//时间参数
})))
......@@ -1020,9 +964,9 @@ const playForward = async () => {
// 第二版开始播放
const startAutoPlay = () => {
console.log('开始播放?', !isPlaying.value);
// 清除定时器
// 清除定时器(注意:playbackInterval 存储的是 setTimeout 返回值)
if (playbackInterval.value) {
clearInterval(playbackInterval.value);
clearTimeout(playbackInterval.value);
}
let expectedTime = Date.now() + (1000 / playbackSpeed.value);
......@@ -1042,12 +986,12 @@ const stopAutoPlay = () => {
isPlaying.value = false;
console.log("停止自动播放", playbackInterval.value);
if (playbackInterval.value) {
clearInterval(playbackInterval.value);
clearTimeout(playbackInterval.value);
playbackInterval.value = null;
}
if (flag_SetTimeOutCycle.value !== null) {
clearInterval(flag_SetTimeOutCycle.value);
clearTimeout(flag_SetTimeOutCycle.value);
flag_SetTimeOutCycle.value = null;
}
......@@ -1147,23 +1091,16 @@ const startDrag = (handle, e) => {
// console.log("拖动开始", currentDragHandle.value);
// 手动拖动时停止自动播放
// if (isPlaying.value) {
// //console.log("我是拖动开始stopAutoPlay()",isPlaying.value);
// //console.log("我走了这里9")
// stopAutoPlay();
// }
if (isPlaying.value) {
stopAutoPlay();
}
// 移除旧的事件监听器,防止重复绑定
window.removeEventListener('mousemove', handleDrag);
window.removeEventListener('mouseup', endDrag);
// 添加新的事件监听器
window.addEventListener('mousemove', handleDrag);
window.addEventListener('mouseup', endDrag);
// if(!hasDraged_first_falseToTrue.value) {
// // 添加全局事件监听器
// window.addEventListener('mousemove', handleDrag);
// window.addEventListener('mouseup', endDrag);
// }else{
// ElMessage.warning("已拖动过,请等待执行下次拖动!");
// }
};
// 拖动过程中函数回显样式等信息
......@@ -1315,6 +1252,14 @@ const endDrag = () => {
console.log('触发了暂停');
stopAutoPlay();
// 问题4修复:拖动结束后,如果处于实时模式,恢复自动更新定时器
if (isDateRangeNotEmpty.value) {
clearInterval(autoUpdateDateRange.value);
autoUpdateDateRange.value = setInterval(() => {
autoHandleDateRangeChange([new Date((new Date(useAppStoreInstance.globalSubsystemSelectedStartTime[0]))).toISOString(), new Date((new Date(useAppStoreInstance.globalSubsystemSelectedStartTime[1]))).toISOString()]);
}, 1000);
}
};
// 重置滑块-重置当天日期
......@@ -1375,17 +1320,26 @@ const resetclick = () => {
startHandlePercent.value = 0;
endHandlePercent.value = 100;//实时模式滑块为100
dateRange.value = []
// 向ue5发送消息转换成实时模式
// window.ue5("callBackTimeFn", String(JSON.stringify({
// isRealtime: is_flag_isRealtime.value,
// taskCode: String(taskCode_everyChange.value) === "" ? useAppStoreInstance.globalRecordMainSysTaskCode || (useAppStoreInstance.globalSubsystemTaskCode) : String(taskCode_everyChange.value),
// speed: playbackSpeed.value,
// // status: isPlaying.value ? "continue" : "stop",
// })))
// 向后端发送消息转换成实时模式
handleDateRangeChange(JSON.parse(localStorage.getItem("isRealtimetime")), true, false, localStorage.getItem("playbackSpeed"));
wssOpenHandle({
isRealtime: is_flag_isRealtime.value,
status: 'continue',
messageTypeFalg: true,
// status: 'continue',
speed: playbackSpeed.value,
taskCode: useAppStoreInstance.globalRecordMainSysTaskCode || (useAppStoreInstance.globalSubsystemTaskCode),
})
}
const tempDateTime = ref(new Date(useAppStoreInstance.globalTimeLineEndSelectTime))
onMounted(() => {
wssMessageHandle();// 只在初始化时注册一次消息处理器
wsTimeInstanceFn();//接受实时模式下的数据
//进入前时间
tempDateTime.value = ""
......@@ -1550,7 +1504,7 @@ watch(
}
}
jiangerTime.value += 1;
console.log(formatDateTime(selectedEndTime.value), preTimeWindowEnd.value, '时间对比');
// console.log(formatDateTime(selectedEndTime.value), preTimeWindowEnd.value, '时间对比');
//对比时间----判断是否需要停止,拖动后后端连续返回三条数据,第一条是提示,第二第三条是ue用来定位和平滑的数据,这是后不应该停止时间,到56秒后应该接收到下一条数据时
// if (compareTime(formatDateTime(selectedEndTime.value), preTimeWindowEnd.value)) {
......
......@@ -12,60 +12,70 @@ import { tr } from "element-plus/es/locales.mjs";
const useAppStore = defineStore("app", {
state: () => ({
// 记录时间轴走的时间
globalTimeLineEndSelectTime: "2025-11-02 00:00:00",
globalTimeLineStartTime: "2025-11-02 00:00:00",
globalTimeLineEndTime: "2025-11-02 00:00:00",
globalisFromTosub: false,
footerTimeHasedSelectTimeToSub: false,
// ==================== 时间轴相关 ====================
globalTimeLineEndSelectTime: "2025-11-02 00:00:00", // 时间轴滑块当前选中的结束时间
globalTimeLineStartTime: "2025-11-02 00:00:00", // 时间轴范围开始时间
globalTimeLineEndTime: "2025-11-02 00:00:00", // 时间轴范围结束时间
globalisFromTosub: false, // 是否从主系统进入子系统
footerTimeHasedSelectTimeToSub: false, // 判断是否需要发送时间到子系统(返回时恢复状态用)
// ==================== 子系统时间范围 ====================
globalSubsystemSelectedTimeRange: [
"Sun Nov 02 2025 00:00:00 GMT+0800 (中国标准时间) ",
"Tue Nov 04 2025 00:00:00 GMT+0800 (中国标准时间) ",
],
], // 子系统选中时间段范围
globalLeftWssCONTINE: false,
globalLeftWssCONTINE: false, // WebSocket 连续数据推送状态
// 进入子系统前是否处于实时模式(专门用于返回时恢复,不依赖 globalLeftWssCONTINE)
globalIsRealtimeBeforeSub: false,
globalRecordMainSysTaskCode: 0,
subSystemTimeLineEndSelectTime: "-",
subsystemSocket: null,
subsystemSocketContent: "",
HeartbeatInterval: null,
isTimeLineShow: true,
islegendShow: true,//主系统时间下方图例是否隐藏
isSourceLegendShow: true,
isdataPanelShow: true,
issatelliteOrbitShow: false,
issatelliteBeamShow: true,
iscontrolPanelShow: true,//控制主系统右上角悬浮框,分系统右上角悬浮框
globaleAutoPlay: true,
globalIntervalTime: 3000,
globalStartWss: false,
globalSatelliteSearchID: "4097",//卫星id
globalSubsystemActiveIndex: "0",
globalSubsystemIsFastForward: false,
globalSubsystemSpeed: 1,
globalSubsystemTaskCode: 0,
globalRecordMainSysTaskCode: 0, // 主系统当前任务码
// ==================== 子系统时间轴 ====================
subSystemTimeLineEndSelectTime: "-", // 子系统时间轴滑块结束时间
subsystemSocket: null, // 子系统 WebSocket 实例
subsystemSocketContent: "", // 子系统 WebSocket 接收内容
HeartbeatInterval: null, // 心跳定时器实例
// ==================== 面板显示控制 ====================
isTimeLineShow: true, // 是否显示时间轴
islegendShow: true, // 主系统时间下方图例是否隐藏
isSourceLegendShow: true, // 源图例是否显示
isdataPanelShow: true, // 数据面板是否显示
issatelliteOrbitShow: false, // 卫星轨道是否显示
issatelliteBeamShow: true, // 卫星波束是否显示
iscontrolPanelShow: true, // 控制面板是否显示(主系统/子系统右上角悬浮框)
// ==================== 播放控制 ====================
globaleAutoPlay: true, // 是否自动播放
globalIntervalTime: 3000, // 播放间隔时间(毫秒)
globalStartWss: false, // 是否已启动 WebSocket
// ==================== 卫星相关 ====================
globalSatelliteSearchID: "4097", // 当前选中的卫星 ID
globalSubsystemActiveIndex: "0", // 子系统当前激活的索引
globalSubsystemIsFastForward: false, // 子系统是否处于快进状态
globalSubsystemSpeed: 1, // 子系统播放倍速
globalSubsystemTaskCode: 0, // 子系统当前任务码
globalSubsystemSelectedStartTime: [
"Sun Nov 02 2025 00:00:00 GMT+0800 (中国标准时间) ",
"Tue Nov 04 2025 00:00:00 GMT+0800 (中国标准时间) ",
],
globalSubsystemSelectedEndTime: "2025-11-04 00:00:00", //暂未使用
globalDisableTimeLine: true,
], // 子系统选中时间段(开始时间)
globalSubsystemSelectedEndTime: "2025-11-04 00:00:00", // 子系统选中时间段(结束时间)
globalDisableTimeLine: true, // 是否禁用时间轴
gridPanelData: [], //格网面板
regionPanelData: [], //区域面板
signalSitePanelData: [], //信关站面板
// ==================== 面板数据 ====================
gridPanelData: [], // 格网面板数据
regionPanelData: [], // 区域面板数据
signalSitePanelData: [], // 信关站面板数据
chartConfig: {}, //图表配置项,
// ==================== 图表配置 ====================
chartConfig: {}, // 图表配置项(模板、粒度、类型等)
currentHotMapCountry: null,
gridInfoList: null, //全部格网信息列表
// ==================== 其他 ====================
currentHotMapCountry: null, // 当前热力图选中的国家
gridInfoList: null, // 全部格网信息列表
}),
actions: {
setGlobalRecordMainSysTaskCode(status) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论