Files
yinjianm 2233e3fa4f feat(ui): 重设计文件管理器书签与传输面板
新增书签作用域与连接关联,后端为 favorite_paths
补充 scope 和 connection_id 字段及查询写入支持

前端重构书签弹窗与编辑表单,支持本地/云端筛选、
作用域选择与多语言文案更新

文件管理器工具栏改为紧凑图标样式,上传入口合并为
下拉菜单,并新增底部传输面板统一展示上传任务

同时优化 SSH 终端运行态为显式状态机,并为短命令
补充最短可见时间,避免运行中标记闪烁难以感知
2026-05-01 22:54:29 +08:00

99 lines
5.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 方案包: file-manager-ui-redesign
- 创建日期: 2026-05-01 21:11
- 类型: implementation
- 决策ID: file-manager-ui-redesign#D001
## 1. 需求
### 背景
用户提供了 5 张目标截图,要求重新设计工作台文件管理器的 UI,涵盖目录树、工具栏、书签系统、新增书签弹窗、传输管理面板五个区域。当前实现使用卡片式行布局和文字+图标按钮,与目标的紧凑树视图和纯图标工具栏存在较大差异。
### 目标
- 目录树:从卡片行布局转为紧凑传统文件树(黄色文件夹图标、绿色高亮活动目录、符号链接显示目标、更紧密间距、无卡片边框)
- 工具栏:从文字+图标按钮转为紧凑纯图标工具栏(tooltip 提示),上传按钮合并为下拉菜单("上传文件"/"上传文件夹"
- 书签系统:重新设计为"书签列表 N"头部、"本地"/"云端"标签切换(本地=仅当前服务器、云端=全局共享)、scope 标签、更丰富的卡片布局和操作按钮
- 新增书签弹窗:新增"记录位置"scope 选择器(仅当前服务器/全局共享)
- 传输管理面板:新增底部抽屉面板,含"全部/上传/下载"标签,统一展示上传和传输任务,空态"暂无传输任务"
### 约束条件
- 使用项目现有技术栈:Vue 3 + Composition API、Pinia、Tailwind CSS、vue-i18n
- 书签 scope 功能需要后端数据库 migration(新增 scope 和 connection_id 字段)
- 保持所有现有功能不变,仅改变 UI 呈现和增加 scope 功能
- 遵循项目现有主题变量系统
### 验收标准
- 目录树视觉效果匹配目标截图:紧凑行高、黄色文件夹图标、绿色活动行高亮
- 工具栏为纯图标按钮,上传按钮为下拉菜单
- 书签支持本地/云端 scope 切换和筛选
- 传输面板在底部以抽屉形式展开,支持三个 tab 筛选
- 所有 i18n 键已添加(zh-CN、en-US、ja-JP
## 2. 方案
### 技术方案
#### 任务1:目录树 UI 重设计
- 修改 `FileManager.vue` 模板中的 `explorerTreeRows` 渲染区域
- 移除卡片样式(`rounded-lg border`),改为紧凑行(`py-0.5`
- 图标颜色:目录用 `text-yellow-500`(黄色文件夹),文件保持现有图标
- 活动行:使用 `bg-green-600/20 text-green-400` 高亮
- 符号链接:在文件名后显示 `→ target`
- 调整树头部样式使其更紧凑
#### 任务2:工具栏重设计
- 将工具栏区域的文字+图标按钮改为纯图标按钮(统一 `w-7 h-7`
- 为每个按钮添加 `title` tooltip
- 上传文件和上传文件夹合并为单个按钮 + 下拉菜单
- 新增 `uploadMenuOpen` ref 控制下拉菜单显隐
#### 任务3:书签系统重构
- 后端:`favorite_paths` 表新增 `scope` (TEXT, DEFAULT 'global') 和 `connection_id` (INTEGER, NULLABLE) 字段
- 后端:API 支持 `?scope=local&connectionId=X` 查询参数
- 前端 store:扩展 `FavoritePathItem` 类型,添加 scope 和 connectionId 字段
- 前端 `FavoritePathsModal.vue`:重设计为含头部计数、本地/云端 tab、scope 标签的布局
- 前端 `AddEditFavoritePathForm.vue`:新增 scope 选择器
#### 任务4:传输管理面板
- 新建 `TransferPanel.vue` 组件:底部抽屉面板
- 含"全部/上传/下载"标签切换
- 统一展示 `uploads`(来自 FileUploadPopup)和 `transferTasks`(来自 TransferProgressModal
- 空态显示"暂无传输任务"
- 集成到 `FileManager.vue` 底部
### 影响范围
- `packages/frontend/src/components/FileManager.vue` — 目录树+工具栏+传输面板集成
- `packages/frontend/src/components/FavoritePathsModal.vue` — 书签列表重设计
- `packages/frontend/src/components/AddEditFavoritePathForm.vue` — 新增 scope 选择器
- `packages/frontend/src/components/TransferPanel.vue` — 新组件
- `packages/frontend/src/stores/favoritePaths.store.ts` — scope 支持
- `packages/backend/src/database/schema.ts` — 数据库 migration
- `packages/backend/src/favorite-paths/` — API 扩展
- `packages/frontend/src/locales/` — i18n 键
### 风险评估
- 数据库 migration 需谨慎处理现有数据兼容性(现有书签默认 scope='global'
- FileManager.vue 文件较大(~2570 行),修改需精确定位避免副作用
- 传输面板需同时消费两个不同数据源(uploads + transferTasks
### 方案取舍
- 选择在 `FileManager.vue` 内直接修改而非拆分子组件,因为目录树渲染与父组件状态紧密耦合,拆分成本高于收益
- 书签 scope 选择直接内联到现有表单而非独立组件,保持简单
- 传输面板选择新建独立组件,因为它的数据源和生命周期独立于文件管理器其他部分
### 验证策略
- verifyMode: review-first
- reviewerFocus: UI 视觉匹配目标截图、样式一致性、响应式表现
- testerFocus: 书签 CRUD 功能完整性、scope 筛选正确性、传输面板数据展示
- 风险边界: 数据库 migration 回滚方案为手动删除新增字段
## 成果设计
### 美学基调
延续项目现有的暗色终端风格,紧凑高信息密度,使用项目主题变量系统保持一致性。
### 视觉要素
- 配色:遵循项目现有 `--color-*` CSS 变量体系;目录树活动行使用绿色系,文件夹图标使用黄色系
- 布局:紧凑垂直排列,减少 padding 和 margin,提升信息密度
- 交互:hover 状态使用 `bg-background` 微弱高亮,保持轻量