# 变更提案: 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` 能否透传策略,不足时做最小扩展 | | 拖拽上传增加确认可能影响原有快捷操作感 | 低 | 仅在目标不明确时或跨目录时确认,默认场景仍快速上传 | | 删除后自动回退目录可能与用户当前聚焦目录预期不一致 | 低 | 仅在当前路径已失效时回退到父目录,优先保证不报错 |