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

Merge branch 'dev/z' into dev/L

...@@ -50,3 +50,26 @@ ...@@ -50,3 +50,26 @@
- 项目有复杂的 UE 和 WebUI 集成机制,涉及时间同步和数据分发 - 项目有复杂的 UE 和 WebUI 集成机制,涉及时间同步和数据分发
- 左侧卫星数据表格通过 WebSocket 实时更新,数据流经过多个组件传递 - 左侧卫星数据表格通过 WebSocket 实时更新,数据流经过多个组件传递
- **时间轴有自动实时滚动机制**:通过 `autoUpdateDateRange` setInterval 每秒更新一次,正常模式下应注释掉初始定时器,用 `isDateRangeNotEmpty` watch 控制实时/历史模式切换 - **时间轴有自动实时滚动机制**:通过 `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
...@@ -26,3 +26,20 @@ ...@@ -26,3 +26,20 @@
## UE 与 WebUI 集成 ## UE 与 WebUI 集成
- WebUI 嵌入 UE 需要处理渲染层级和光照影响 - WebUI 嵌入 UE 需要处理渲染层级和光照影响
- 建议使用 Unlit 材质或调整材质 Emissive 值来避免 UE 灯光影响 WebUI 显示 - 建议使用 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
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
<div class="right_block"> <div class="right_block">
<!--限制 :disabled="!is_flag_confirmAndPauseAndSpeed" --> <!--限制 :disabled="!is_flag_confirmAndPauseAndSpeed" -->
<el-button class="right_block_confirm_btn" size="small" <el-button class="right_block_confirm_btn" size="small"
@click="handleDateRangeChange(pick_select_date)">确认</el-button> @click="handleDateRangeChange(pick_select_date, false, true)">确认</el-button>
<div class="right_block_center"> <div class="right_block_center">
<!-- <el-button circle class="right_block_conter_btn" @click="playBackward"> <!-- <el-button circle class="right_block_conter_btn" @click="playBackward">
<el-icon> <el-icon>
...@@ -479,17 +479,6 @@ const wssMessageHandle = () => { ...@@ -479,17 +479,6 @@ const wssMessageHandle = () => {
// startAutoPlay() // startAutoPlay()
} }
// startAutoPlay();
// toggleAutoPlay();
//console.log("这里是startAutoPlay()");
// if(loading.value){
// (loading.value).close()
// }else{
// }
wssResponeFlag_isSuccess.value = true; wssResponeFlag_isSuccess.value = true;
// message.success("同步时间轴数据状态成功!!!"); // message.success("同步时间轴数据状态成功!!!");
// //console.log('我是history的数据:', data); // //console.log('我是history的数据:', data);
...@@ -607,7 +596,13 @@ const isChange_flag_select_date = ref(false); ...@@ -607,7 +596,13 @@ const isChange_flag_select_date = ref(false);
const taskCode_everyChange = ref(''); const taskCode_everyChange = ref('');
// 点击确认后,处理日期范围变化 // 点击确认后,处理日期范围变化
const handleDateRangeChange = async (val, flag = false) => { const handleDateRangeChange = async (val, flag = false, RemoveSat) => {
if (RemoveSat) {
window.ue5("RemoveSat", String(JSON.stringify({
Sat: true,
})))
}
jiangerTime.value = 0; jiangerTime.value = 0;
isChange_flag_firstBackDate.value = false; isChange_flag_firstBackDate.value = false;
hasPlayed.value = false; hasPlayed.value = false;
...@@ -630,7 +625,6 @@ const handleDateRangeChange = async (val, flag = false) => { ...@@ -630,7 +625,6 @@ const handleDateRangeChange = async (val, flag = false) => {
if (!flag) { if (!flag) {
Loading.show() Loading.show()
//console.log("cao cao1,Loading.show()"); //console.log("cao cao1,Loading.show()");
} }
// debugger // debugger
// Loading.show() // Loading.show()
...@@ -660,7 +654,7 @@ const handleDateRangeChange = async (val, flag = false) => { ...@@ -660,7 +654,7 @@ const handleDateRangeChange = async (val, flag = false) => {
// 强制更新视图 // 强制更新视图
nextTick(() => { nextTick(() => {
updateSelectedTimes(); updateSelectedTimes(); //更新选中的时间滑块位置 → 实际时间的转换
}); });
} }
...@@ -681,7 +675,6 @@ const handleDateRangeChange = async (val, flag = false) => { ...@@ -681,7 +675,6 @@ const handleDateRangeChange = async (val, flag = false) => {
speed: playbackSpeed.value, speed: playbackSpeed.value,
endTime: (formatDateTime(val[1])), endTime: (formatDateTime(val[1])),
taskCode: String(taskCode_everyChange.value) === "" ? useAppStoreInstance.globalRecordMainSysTaskCode || (useAppStoreInstance.globalSubsystemTaskCode) : String(taskCode_everyChange.value), taskCode: String(taskCode_everyChange.value) === "" ? useAppStoreInstance.globalRecordMainSysTaskCode || (useAppStoreInstance.globalSubsystemTaskCode) : String(taskCode_everyChange.value),
currentTime: (formatDateTime(selectedEndTime.value)), currentTime: (formatDateTime(selectedEndTime.value)),
status: isPlaying.value ? "stop" : "continue", status: isPlaying.value ? "stop" : "continue",
//时间参数 //时间参数
...@@ -747,7 +740,6 @@ watch(() => wssResponeFlag_isSuccess.value, (newVal) => { ...@@ -747,7 +740,6 @@ watch(() => wssResponeFlag_isSuccess.value, (newVal) => {
if (newVal) { if (newVal) {
startAutoPlay(); startAutoPlay();
// toggleAutoPlay();
} }
else { else {
...@@ -765,19 +757,27 @@ autoUpdateDateRange.value = setInterval(() => { ...@@ -765,19 +757,27 @@ autoUpdateDateRange.value = setInterval(() => {
autoHandleDateRangeChange([startDateTime.value, endDateTime.value]); autoHandleDateRangeChange([startDateTime.value, endDateTime.value]);
}, 1000); }, 1000);
//isDateRangeNotEmpty 实时模式 true 每秒自动更新时间范围 滑块随着当前时间往前推24小时的窗口自动前进 历史模式 false 停止自动更新 使用用户手动选择的固定日期范围
watch(() => isDateRangeNotEmpty.value, (newVal) => { watch(() => isDateRangeNotEmpty.value, (newVal) => {
console.log("发生变化", newVal);
if (newVal) { if (newVal) {
// === 实时模式:开启自动更新 ===
autoUpdateDateRange.value = setInterval(() => { autoUpdateDateRange.value = setInterval(() => {
// //console.log("开启循环",autoUpdateDateRange.value); // 生成动态时间范围:从当前时间往前推24小时
autoHandleDateRangeChange([new Date(new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString()), new Date(new Date(Date.now()).toISOString())]); // 例如:当前时间是 2026-04-03 18:00:00
}, 1000); // 则生成 [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()) // 结束时间 = 当前时间
]);
}, 1000); // 每秒执行一次,让时间范围随着当前时间前进
} else { } else {
// //console.log("关闭循环",autoUpdateDateRange.value); // === 历史模式:关闭自动更新 ===
clearInterval(autoUpdateDateRange.value); clearInterval(autoUpdateDateRange.value);
// 使用用户在日期选择器中手动选择的固定日期范围
} }
}); });
const autoHandleDateRangeChange = (val) => { const autoHandleDateRangeChange = (val) => {
useAppStoreInstance.setglobalSubsystemSelectedStartTime(val); useAppStoreInstance.setglobalSubsystemSelectedStartTime(val);
if (val && val.length === 2) { if (val && val.length === 2) {
...@@ -944,9 +944,9 @@ const updateSelectedTimes = () => { ...@@ -944,9 +944,9 @@ const updateSelectedTimes = () => {
selectedStartTime.value = startTime; selectedStartTime.value = startTime;
selectedEndTime.value = endTime; selectedEndTime.value = endTime;
if (!is_flag_isRealtime.value) { // 无论是实时还是历史模式,都要更新 globalTimeLineEndSelectTime
// 这样从分系统返回时,tempDateTime 才能拿到正确的滑块位置(实时模式自动走时也需要保存)
useAppStoreInstance.setGlobalTimeLineEndSelectTime(formatDateTime(selectedEndTime.value)); useAppStoreInstance.setGlobalTimeLineEndSelectTime(formatDateTime(selectedEndTime.value));
}
// //console.log("************",useAppStoreInstance.globalTimeLineEndSelectTime); // //console.log("************",useAppStoreInstance.globalTimeLineEndSelectTime);
...@@ -1159,6 +1159,7 @@ const startAutoPlay = () => { ...@@ -1159,6 +1159,7 @@ const startAutoPlay = () => {
const drift = Date.now() - expectedTime; const drift = Date.now() - expectedTime;
moveEndHandle(); moveEndHandle();
expectedTime += (1000 / playbackSpeed.value); expectedTime += (1000 / playbackSpeed.value);
// 第4步:递归调用(根据漂移量修正间隔)
playbackInterval.value = setTimeout(update, Math.max(0, (1000 / playbackSpeed.value) - drift)); playbackInterval.value = setTimeout(update, Math.max(0, (1000 / playbackSpeed.value) - drift));
}; };
...@@ -1548,30 +1549,48 @@ const handleSetTimeOutCycle = () => { ...@@ -1548,30 +1549,48 @@ const handleSetTimeOutCycle = () => {
// }); // });
const tempDateTime = ref(new Date(useAppStoreInstance.globalTimeLineEndSelectTime)) const tempDateTime = ref(new Date(useAppStoreInstance.globalTimeLineEndSelectTime))
onMounted(() => { onMounted(() => {
timeInfoApi().then((res) => {
if (res && res.data) {
const { startTime, endTime } = res.data;
startDateTime.value = startTime;
endDateTime.value = endTime;
}
})
wsTimeInstanceFn(); wsTimeInstanceFn();
tempDateTime.value = "" tempDateTime.value = ""
if (useAppStoreInstance.footerTimeHasedSelectTimeToSub) { if (useAppStoreInstance.footerTimeHasedSelectTimeToSub) {
console.log("初始化走上面"); console.log("初始化走上面(历史模式恢复)", is_flag_isRealtime.value, useAppStoreInstance.globalLeftWssCONTINE.type);
tempDateTime.value = useAppStoreInstance.globalTimeLineEndSelectTime tempDateTime.value = useAppStoreInstance.globalTimeLineEndSelectTime
subSysToMainSysFirstDataBack.value = false; subSysToMainSysFirstDataBack.value = false;
//历史模式时间范围
dateRange.value = [new Date((new Date(useAppStoreInstance.globalSubsystemSelectedStartTime[0]))).toISOString(), new Date((new Date(useAppStoreInstance.globalSubsystemSelectedStartTime[1]))).toISOString()] 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()] 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";
handleDateRangeChange(useAppStoreInstance.globalSubsystemSelectedStartTime, true); handleDateRangeChange(useAppStoreInstance.globalSubsystemSelectedStartTime, true);
// Loading.show(); // handleDateRangeChange 之后恢复 isRealtime 标志(否则实时模式会变成历史模式)
if (wasRealtime) {
is_flag_isRealtime.value = true;
}
// 正确顺序:
// 1. handleDateRangeChange → 重置 endHandlePercent=0、isPlaying=false
// 2. nextTick → DOM 更新完毕
// 3. jumpToSpecificTime → 恢复 endHandlePercent 到离开前位置
// 4. isPlaying = true → 允许 moveEndHandle 运行
// 5. wssOpenHandle → 末尾调用 startAutoPlay,从正确位置开始播放
nextTick(() => {
if (tempDateTime.value) {
const restored = new Date(tempDateTime.value);
if (!isNaN(restored.getTime())) {
jumpToSpecificTime(restored, false);
console.log("滑块恢复到离开前位置:", tempDateTime.value, "isRealtime:", wasRealtime);
}
}
// handleDateRangeChange 内部把 isPlaying 设为 false,重新设为 true
// 否则 moveEndHandle() 会因为 isPlaying=false 立即返回,滑块不会动
isPlaying.value = true;
// wssOpenHandle 放在 nextTick 内,保证 endHandlePercent 已恢复后再触发 startAutoPlay
});
wssOpenHandle({ wssOpenHandle({
isRealtime: is_flag_isRealtime.value ? true : false, isRealtime: wasRealtime,
status: 'continue', status: 'continue',
messageTypeFalg: true, messageTypeFalg: true,
taskCode: useAppStoreInstance.globalRecordMainSysTaskCode || (useAppStoreInstance.globalSubsystemTaskCode), taskCode: useAppStoreInstance.globalRecordMainSysTaskCode || (useAppStoreInstance.globalSubsystemTaskCode),
...@@ -1582,20 +1601,22 @@ onMounted(() => { ...@@ -1582,20 +1601,22 @@ onMounted(() => {
updateTimeline(); updateTimeline();
console.log("初始化走下面"); console.log("初始化走下面");
if (window.ue5) { if (window.ue5) {
window.ue5("callBackTimeFn", String(JSON.stringify({ window.ue5("callBackTimeFn", String(JSON.stringify({
isRealtime: is_flag_isRealtime.value, isRealtime: is_flag_isRealtime.value,
taskCode: String(taskCode_everyChange.value) === "" ? useAppStoreInstance.globalRecordMainSysTaskCode || (useAppStoreInstance.globalSubsystemTaskCode) : String(taskCode_everyChange.value), taskCode: String(taskCode_everyChange.value) === "" ? useAppStoreInstance.globalRecordMainSysTaskCode || (useAppStoreInstance.globalSubsystemTaskCode) : String(taskCode_everyChange.value),
speed: playbackSpeed.value, speed: playbackSpeed.value,
status: isPlaying.value ? "continue" : "stop", status: isPlaying.value ? "continue" : "stop",
}))) })))
// wssOpenHandle({
// isRealtime: is_flag_isRealtime.value? true: false,
// })
} }
} }
useAppStoreInstance.setGlobalisFromTosub(false) useAppStoreInstance.setGlobalisFromTosub(false)
// ⚠️ 如果是从分系统返回,上面已经在 nextTick 里恢复了滑块和 wssOpenHandle
// 不能再调 realTimeData(),否则会生成新 taskCode、重置 WS,把之前的恢复全部覆盖
if (useAppStoreInstance.footerTimeHasedSelectTimeToSub) {
return;
}
console.log('isPlaying', isPlaying.value) console.log('isPlaying', isPlaying.value)
if (!isPlaying.value) { if (!isPlaying.value) {
if (window.ue5) { if (window.ue5) {
...@@ -1604,10 +1625,10 @@ onMounted(() => { ...@@ -1604,10 +1625,10 @@ onMounted(() => {
} }
} }
}); });
// 定义定时器引用
// 定义定时器引用
const realTimeData = () => { const realTimeData = () => {
// startAutoPlay() // startAutoPlay()
taskCode_everyChange.value = String(Date.now()); taskCode_everyChange.value = String(Date.now());
...@@ -1736,7 +1757,19 @@ onUnmounted(() => { ...@@ -1736,7 +1757,19 @@ onUnmounted(() => {
//console.log("jieshuli 1,组件卸载时要发暂停",getDayRangeFromTime(useAppStoreInstance.globalTimeLineEndSelectTime)[0],getDayRangeFromTime(useAppStoreInstance.globalTimeLineEndSelectTime)[1]); //console.log("jieshuli 1,组件卸载时要发暂停",getDayRangeFromTime(useAppStoreInstance.globalTimeLineEndSelectTime)[0],getDayRangeFromTime(useAppStoreInstance.globalTimeLineEndSelectTime)[1]);
if (is_flag_isRealtime.value) { if (is_flag_isRealtime.value) {
// 实时传输时,组件卸载时要发暂停 // 实时传输时,组件卸载时要发暂停
// todo list if (window.ue5) {
window.ue5("callBackSpeedFn", String(JSON.stringify({
isRealtime: true,
status: "stop",
speed: playbackSpeed.value,
taskCode: String(taskCode_everyChange.value) === "" ? useAppStoreInstance.globalRecordMainSysTaskCode || (useAppStoreInstance.globalSubsystemTaskCode) : String(taskCode_everyChange.value),
})));
}
wssOpenHandle({
isRealtime: true,
status: "stop",
taskCode: String(taskCode_everyChange.value) === "" ? useAppStoreInstance.globalRecordMainSysTaskCode || (useAppStoreInstance.globalSubsystemTaskCode) : String(taskCode_everyChange.value),
})
} else { } else {
// 非实时传输时,组件卸载时要发暂停 // 非实时传输时,组件卸载时要发暂停
if (window.ue5) { if (window.ue5) {
...@@ -1746,9 +1779,6 @@ onUnmounted(() => { ...@@ -1746,9 +1779,6 @@ onUnmounted(() => {
status: "stop", status: "stop",
speed: playbackSpeed.value, speed: playbackSpeed.value,
taskCode: String(taskCode_everyChange.value) === "" ? useAppStoreInstance.globalRecordMainSysTaskCode || (useAppStoreInstance.globalSubsystemTaskCode) : String(taskCode_everyChange.value), taskCode: String(taskCode_everyChange.value) === "" ? useAppStoreInstance.globalRecordMainSysTaskCode || (useAppStoreInstance.globalSubsystemTaskCode) : String(taskCode_everyChange.value),
}))); })));
wssOpenHandle({ wssOpenHandle({
isRealtime: is_flag_isRealtime.value ? true : false, isRealtime: is_flag_isRealtime.value ? true : false,
...@@ -1757,9 +1787,6 @@ onUnmounted(() => { ...@@ -1757,9 +1787,6 @@ onUnmounted(() => {
}) })
} }
} }
}); });
</script> </script>
......
...@@ -233,17 +233,17 @@ onMounted(async () => { ...@@ -233,17 +233,17 @@ onMounted(async () => {
router.push( router.push(
{ {
name: 'subsystem', name: 'subsystem',
// params: {
// userId: 123,
// userName: '张三',
// timestamp: Date.now()
// }
} }
); );
toSubSystemFlag.value = !toSubSystemFlag.value; toSubSystemFlag.value = !toSubSystemFlag.value;
} }
if (resData.locationReplace === 'false') { if (resData.locationReplace === 'false') {
router.push('/'); router.push({
path: '/',
query: {
mode: 'history'
}
})
//console.log("1111111111111111111111111",useAppStoreInstance.isSourceLegendShow); //console.log("1111111111111111111111111",useAppStoreInstance.isSourceLegendShow);
useAppStoreInstance.setGlobalisFromTosub(true); useAppStoreInstance.setGlobalisFromTosub(true);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论