开始重构
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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组件依赖
|
||||||
|
|||||||
Reference in New Issue
Block a user