解决状态未初始化Bug

This commit is contained in:
zqm
2026-01-14 09:27:05 +08:00
parent 4a14dc9158
commit 89f9884df9
3 changed files with 84 additions and 0 deletions

View File

@@ -942,6 +942,17 @@ const addFloatingPanel = (panel) => {
// 同时注册到AreaHandler的状态管理中确保事件处理能正常进行 // 同时注册到AreaHandler的状态管理中确保事件处理能正常进行
areaActions.createFloating(newArea) areaActions.createFloating(newArea)
// 初始化面板状态
const tabPage = newArea.children
if (tabPage.children) {
const childrenArray = Array.isArray(tabPage.children) ? tabPage.children : [tabPage.children]
for (const panel of childrenArray) {
if (panel.type === 'Panel' && panel.id) {
panelActions.initializePanelState(panel.id, areaId)
}
}
}
return newArea.id return newArea.id
} }
@@ -1400,11 +1411,34 @@ const onAreaResizeEnd = (event) => {
// 只需要更新本地floatingAreas中的状态 // 只需要更新本地floatingAreas中的状态
}; };
/**
* 初始化主区域的所有面板状态
*/
const initializeMainAreaPanels = () => {
const mainTabPage = mainAreaConfig.value.children;
if (mainTabPage && mainTabPage.type === 'TabPage' && mainTabPage.children) {
const childrenArray = Array.isArray(mainTabPage.children)
? mainTabPage.children
: [mainTabPage.children];
console.log(`[DockLayout] 初始化主区域面板,共 ${childrenArray.length}`);
for (const panel of childrenArray) {
if (panel.type === 'Panel' && panel.id) {
panelActions.initializePanelState(panel.id, mainAreaConfig.value.id);
}
}
}
}
// 轻量级生命周期处理 // 轻量级生命周期处理
onMounted(() => { onMounted(() => {
// 初始化轻量级状态 // 初始化轻量级状态
console.log('DockLayout component mounted'); console.log('DockLayout component mounted');
unsubscribeFunctions.value = setupEventListeners(); unsubscribeFunctions.value = setupEventListeners();
// 初始化主区域的面板状态
initializeMainAreaPanels();
}) })
// 组件卸载时清理资源 // 组件卸载时清理资源

View File

@@ -157,6 +157,7 @@ import {
onEvent onEvent
} from './eventBus'; } from './eventBus';
import { areaActions, getAreaHandler } from './handlers/AreaHandler'; import { areaActions, getAreaHandler } from './handlers/AreaHandler';
import { panelActions } from './handlers/PanelHandler';
// 获取AreaHandler实例 // 获取AreaHandler实例
const areaHandler = getAreaHandler(); const areaHandler = getAreaHandler();
@@ -850,6 +851,10 @@ onMounted(() => {
}, { }, {
source: { component: 'Panel', panelId: props.id } source: { component: 'Panel', panelId: props.id }
}); });
// 初始化面板状态
console.log(`[Panel:${props.id}] 初始化面板状态areaId: ${areaId}`);
panelActions.initializePanelState(props.id, areaId);
} }
if (import.meta.env.DEV) { if (import.meta.env.DEV) {

View File

@@ -824,6 +824,50 @@ class PanelEventHandler {
memoryProtected: !!this.memoryProtection memoryProtected: !!this.memoryProtection
} }
} }
/**
* 初始化面板状态
* @param {string} panelId - 面板ID
* @param {string} areaId - 所属区域ID
* @param {Object} initialState - 初始状态(可选)
* @returns {Object} 初始化后的面板状态
*/
initializePanelState(panelId, areaId, initialState = {}) {
try {
// 参数验证
if (!panelId || !areaId) {
console.error(`[PanelHandler] initializePanelState: 参数错误 - panelId: ${panelId}, areaId: ${areaId}`)
return null
}
// 检查是否已存在状态
if (this.panelStates.has(panelId)) {
console.debug(`[PanelHandler] 面板 ${panelId} 状态已存在,跳过初始化`)
return this.panelStates.get(panelId)
}
// 创建初始状态
const panelState = {
id: panelId,
areaId: areaId,
closed: false,
maximized: false,
collapsed: false,
toolbarExpanded: true,
createdAt: Date.now(),
lastModified: Date.now(),
...initialState
}
// 存储状态
this.panelStates.set(panelId, panelState)
console.debug(`[PanelHandler] 面板 ${panelId} 状态初始化完成`)
return panelState
} catch (error) {
console.error(`[PanelHandler] initializePanelState 失败: ${error.message}`)
return null
}
}
} }
// 单例实例变量 // 单例实例变量
@@ -858,6 +902,7 @@ export const panelActions = {
close: (panelId, areaId, options) => panelHandler.close(panelId, areaId, options), close: (panelId, areaId, options) => panelHandler.close(panelId, areaId, options),
requestClose: (panelId, options) => panelHandler.requestClose(panelId, options), requestClose: (panelId, options) => panelHandler.requestClose(panelId, options),
toggleToolbar: (panelId, options) => panelHandler.toggleToolbar(panelId, options), toggleToolbar: (panelId, options) => panelHandler.toggleToolbar(panelId, options),
initializePanelState: (panelId, areaId, initialState) => panelHandler.initializePanelState(panelId, areaId, initialState),
// 拖拽操作 // 拖拽操作
startDrag: (panelId, event, options) => panelHandler.startDrag(panelId, event, options), startDrag: (panelId, event, options) => panelHandler.startDrag(panelId, event, options),