Files
T
yinjianm cda7e0a018 fix(frontend): 修复文件管理器删除与上传稳定性
补齐文件管理器右键子菜单点击展开,新增拖拽上传目标确认,
并在上传完成后自动刷新当前可见目录

目录删除改为区分仅删空目录与强制递归删除,删除后自动回退
失效路径,避免文件树持续报 No such file

同步后端 sftp:rmdir 的 recursive 分支,并将关于页与版本检查
默认仓库链接切换到 Micah123321/nexus-terminal
2026-03-26 03:48:50 +08:00

64 lines
3.1 KiB
Markdown

# 变更提案: file-manager-delete-upload-stability
## 元信息
```yaml
类型: 修复增强
方案类型: implementation
优先级: P1
状态: 已完成
状态说明: 已完成子菜单点击展开、拖拽上传目标确认、目录删除模式区分与删除后无效路径自动回退
创建: 2026-03-26
```
---
## 1. 需求
### 背景
文件管理器近期完成了资源管理器树与右键菜单改造,但当前仍存在一组影响可用性的连锁问题:终端/上传/压缩子菜单点击无反应,上传后没有自动刷新且拖拽上传没有目标确认,目录删除缺少“空目录删除 / 强制递归删除”的明确选项,并且删除后树会持续触发 `读取目录失败: No such file`
### 目标
- 修复文件右键菜单的子菜单交互。
- 上传后自动刷新,并在拖拽上传时明确目标目录。
- 目录删除提供“仅删除空目录”和“强制递归删除”二次确认。
- 删除后不再持续触发已不存在路径的目录加载错误。
### 约束条件
```yaml
范围约束: 优先收敛在 FileManager.vue、FileManagerContextMenu.vue、useFileManagerContextMenu.ts 和 useSftpActions.ts
后端约束: 可复用现有 sftp:rmdir 能力,必要时仅做最小协议扩展
交互约束: 保持当前资源管理器树和右键菜单风格,不回退到旧文件表格
兼容约束: 单文件/目录右键、多选和空白处右键仍需可用
```
### 验收标准
- [x] 终端 / 上传 / 压缩子菜单可明确展开并可点击执行
- [x] 上传完成后自动刷新,拖拽上传前能确认目标目录
- [x] 删除目录时弹二次确认并区分空目录删除与强制递归删除
- [x] 删除后不再持续报 `读取目录失败: No such file`
- [x] 前端构建通过
---
## 2. 方案
### 技术方案
`FileManagerContextMenu.vue` 中补桌面端点击展开二级菜单与更稳定的 hover/click 保持逻辑;在 `FileManager.vue` 中为拖拽上传新增目标目录提示与确认,并在上传成功回调后触发目标目录刷新;目录删除改成显式二次确认流程,给目录提供“仅删除空目录”和“强制递归删除”两种执行路径。`useSftpActions.ts` 与删除成功后的树更新逻辑同步修正,若当前路径或挂起加载目标落在已删除目录下,则自动回退到父目录或 `/`,避免持续请求不存在路径。
### 影响范围
```yaml
涉及模块:
- frontend: FileManager.vue
- frontend: FileManagerContextMenu.vue
- frontend: useFileManagerContextMenu.ts
- frontend: useSftpActions.ts
预计变更文件: 4-7
```
### 风险评估
| 风险 | 等级 | 应对 |
|------|------|------|
| 删除协议若需扩展 `recursive` 参数,前后端需同步 | 中 | 先核对现有后端 `sftp:rmdir` 能否透传策略,不足时做最小扩展 |
| 拖拽上传增加确认可能影响原有快捷操作感 | 低 | 仅在目标不明确时或跨目录时确认,默认场景仍快速上传 |
| 删除后自动回退目录可能与用户当前聚焦目录预期不一致 | 低 | 仅在当前路径已失效时回退到父目录,优先保证不报错 |