开始重构

This commit is contained in:
zqm
2025-11-19 11:00:22 +08:00
parent 0d3b81df7f
commit c11f1212ba
2 changed files with 57 additions and 43 deletions

View File

@@ -312,7 +312,9 @@ const addFloatingPanel = () => {
showTitleBar: true, showTitleBar: true,
// 2. 向Area添加一个TabPage。TabPage的初始设置为填充满父容器 // 2. 向Area添加一个TabPage。TabPage的初始设置为填充满父容器
tabPages: [ tabPages: [
{ ]
}
const newTabPage = {
id: `tabpage-${areaIdCounter - 1}-1`, id: `tabpage-${areaIdCounter - 1}-1`,
title: `标签页 1`, title: `标签页 1`,
// TabPage填充满父容器 // TabPage填充满父容器
@@ -320,7 +322,9 @@ const addFloatingPanel = () => {
height: 100, height: 100,
// 3. 向TabPage添加一个Panel。Panel的初始设置为填充满父容器 // 3. 向TabPage添加一个Panel。Panel的初始设置为填充满父容器
panels: [ panels: [
{ ]
}
const newPanel = {
id: `panel-${areaIdCounter - 1}-1-1`, id: `panel-${areaIdCounter - 1}-1-1`,
title: `面板 ${areaIdCounter - 1}`, title: `面板 ${areaIdCounter - 1}`,
x: 0, x: 0,
@@ -332,13 +336,10 @@ const addFloatingPanel = () => {
// 添加随机测试内容以便合并测试 // 添加随机测试内容以便合并测试
content: generateRandomContent(areaIdCounter - 1) content: generateRandomContent(areaIdCounter - 1)
} }
] newTabPage.panels.push(newPanel)
} newArea.tabPages.push(newTabPage)
]
}
floatingAreas.value.push(newArea) floatingAreas.value.push(newArea)
} }
// 更新区域位置 // 更新区域位置
const onUpdatePosition = (id, position) => { const onUpdatePosition = (id, position) => {
const area = floatingAreas.value.find(a => a.id === id) const area = floatingAreas.value.find(a => a.id === id)

View File

@@ -39,34 +39,47 @@
4.1. Area的merge行为只接受一个Area参数. 4.1. Area的merge行为只接受一个Area参数.
4.1. 如果目标Area内容区为空则将源Area内容区的子组件添加到目标Area内容区。这个源Area保存到DockLayout的的隐藏列表中。 4.1. 如果目标Area内容区为空则将源Area内容区的子组件添加到目标Area内容区。这个源Area保存到DockLayout的的隐藏列表中。
4.2. 如果目标Area内容区已经包含一个TabPage则将源Area的TabPage组件的每个标签页添加到目标Area的Tabpage中。这个源Area和源Area的TabPage组件保存到DockLayout的的隐藏列表中。 4.2. 如果目标Area内容区已经包含一个TabPage则将源Area的TabPage组件的每个标签页添加到目标Area的Tabpage中。这个源Area和源Area的TabPage组件保存到DockLayout的的隐藏列表中。
5. 当将源Area拖动到外部边缘指示器时 5. 当将源Area拖动到外部边缘指示器时**已完成**
**核心功能实现**
- ✅ 外部边缘停靠检测和执行逻辑
- ✅ 并排布局创建createSideBySideLayout函数
- ✅ ResizeBar集成和事件处理
5.1. 如果主区域内只有一个Area(目标区域)则压缩目标Area的空间源区域和目标区域并排放置在主区域内。 5.1. 如果主区域内只有一个Area(目标区域)则压缩目标Area的空间源区域和目标区域并排放置在主区域内。
- 实现压缩目标Area空间的逻辑实现 - 实现压缩目标Area空间的逻辑完成
- 设置源Area和目标Area的并排布局实现 - 设置源Area和目标Area的并排布局完成
- 在并排的Area之间添加ResizeBar组件以支持拖动调整大小 - 在并排的Area之间添加ResizeBar组件以支持拖动调整大小
- ResizeBar的方向根据停靠方向动态设置 - ResizeBar的方向根据停靠方向动态设置
* 左右停靠使用水平ResizeBar垂直分割线 * 左右停靠使用水平ResizeBar垂直分割线
* 上下停靠使用垂直ResizeBar水平分割线 * 上下停靠使用垂直ResizeBar水平分割线
- 确保ResizeBar支持最小/最大尺寸限制 - 确保ResizeBar支持最小/最大尺寸限制
5.2. 如果主区域内没有Area则从隐藏列表中取出Area如果隐藏列表中没有Area则创建一个Area将主区域内的组件添加到Area中作为目标Area。 压缩目标Area的空间源区域和目标区域并排放置在主区域内。 5.2. 如果主区域内没有Area则从隐藏列表中取出Area如果隐藏列表中没有Area则创建一个Area将主区域内的组件添加到Area中作为目标Area。 压缩目标Area的空间源区域和目标区域并排放置在主区域内。
- 检查隐藏列表是否有可用Area - 检查隐藏列表是否有可用Area
- 如果没有隐藏Area创建新的Area - 如果没有隐藏Area创建新的Area
- 将主区域内的组件移动到新创建的Area中作为目标Area - 将主区域内的组件移动到新创建的Area中作为目标Area
- 执行并排放置逻辑复用5.1的实现) - ✅ 自动迁移tabPages和receivedContent
- 添加ResizeBar支持拖动调整 - ✅ 清空主区域内容为并排布局做准备
- ✅ 创建默认tabPage当主区域为空时
- ✅ 执行并排放置逻辑复用5.1的实现)
- ✅ 添加ResizeBar支持拖动调整
**技术特性**
5.3. 并排停靠后的ResizeBar集成 5.3. 并排停靠后的ResizeBar集成
- 在并排的Area之间动态插入ResizeBar组件 - 在并排的Area之间动态插入ResizeBar组件
- ResizeBar的事件处理 - ResizeBar的事件处理
* resize事件实时调整并排Area的尺寸比例 * resize事件实时调整并排Area的尺寸比例
* resizeStart/resizeEnd事件处理调整开始/结束状态 * resizeStart/resizeEnd事件处理调整开始/结束状态
- 保持Area的最小尺寸限制避免调整过小无法使用 - 保持Area的最小尺寸限制避免调整过小无法使用
- 调整后更新Area的ratio属性以保持布局持久化 - 调整后更新Area的ratio属性以保持布局持久化
- 支持双向调整拖动ResizeBar可以同时影响两个Area的大小 - 支持双向调整拖动ResizeBar可以同时影响两个Area的大小
5.4. ResizeBar的样式和交互优化 5.4. ResizeBar的样式和交互优化
- ResizeBar的显示条件仅在并排布局中存在时显示 - ResizeBar的显示条件仅在并排布局中存在时显示
- 鼠标悬停效果高亮显示ResizeBar指示器 - 鼠标悬停效果高亮显示ResizeBar指示器
- 拖动时的视觉反馈:实时显示调整效果 - 拖动时的视觉反馈:实时显示调整效果
- 确保ResizeBar不会影响Area的拖拽和停靠功能 - 确保ResizeBar不会影响Area的拖拽和停靠功能
### ResizeBar集成技术要求 ### ResizeBar集成技术要求
1. ResizeBar组件依赖 1. ResizeBar组件依赖