feat(files): 文件管理四项——侧栏拖拽移动、草稿跨窗口认领、未命名默认存根目录、打开所在位置(docs/25)
This commit is contained in:
58
docs/25-文件管理四项.md
Normal file
58
docs/25-文件管理四项.md
Normal file
@@ -0,0 +1,58 @@
|
||||
# docs/25 文件管理四项:拖拽移动 / 草稿跨窗口 / 未命名默认保存 / 重命名与定位
|
||||
|
||||
## 1. 左侧栏拖拽移动
|
||||
|
||||
- 文件、文件夹均可拖到任意文件夹上松手完成移动(底层走 rename_path);
|
||||
拖到顶部根目录标题行 = 移回工作区根目录。
|
||||
- 投放合法性在拖拽悬停时就判定,不合法的目标不亮、不接受投放:
|
||||
- **拖回原文件夹**(原位置)→ 不接受(无操作,避免无意义的报错与刷新);
|
||||
- 拖到自己身上 → 不接受;
|
||||
- 文件夹拖进自己或自己的子文件夹 → 不接受(App 侧执行时再校验一遍,
|
||||
并拦截目标已有同名的情况,报错不覆盖)。
|
||||
- 投放目标高亮(accent 描边+弱底色),被拖条目半透明。
|
||||
- 移动后已打开的标签路径跟随(含文件夹内的子文档)、最近列表与恢复
|
||||
记录键统一换位(remapAfterRelocate,改名共用同一套)。
|
||||
|
||||
## 2. 新窗口不再重复弹「未保存草稿」
|
||||
|
||||
根因:恢复记录在全应用共享的 SQLite 里,每个窗口启动都全量扫描并
|
||||
按 planRecovery 提示;文档还开在另一个窗口里编辑时,它的自动保存
|
||||
记录也被当成了崩溃草稿。
|
||||
|
||||
修复(services/windowClaims.ts):跨窗口认领注册表(localStorage,
|
||||
多窗口同源共享)——每个窗口把「打开中的文档键 + 正在提示的草稿键」
|
||||
登记并 10 秒心跳保鲜、关闭时注销;启动扫描滤掉被其他存活窗口认领
|
||||
的记录。窗口崩溃残留的认领 45 秒后过期,真正的崩溃草稿不会被吞。
|
||||
|
||||
## 3. 未命名文档保存默认落工作区根目录
|
||||
|
||||
- 普通保存(Ctrl+S):有工作区时直接写到根目录的「未命名.md」,
|
||||
同名自动避让为「未命名 1.md / 2.md…」(上限 100,仍撞名退回弹框);
|
||||
没有工作区才弹保存框(与原来一致)。
|
||||
- 另存为仍弹框,但默认位置预填到工作区根目录。
|
||||
|
||||
## 4. 重命名与打开所在位置
|
||||
|
||||
- 重命名本来就有(文件/文件夹右键均有),这次补齐短板:改文件夹名时,
|
||||
其内已打开的子文档标签、最近列表、恢复记录一并换位(此前只跟随
|
||||
恰好同路径的单个文件标签,文件夹内的标签会指向失效路径)。
|
||||
- 右键新增「打开所在位置」:新增 Rust 命令 reveal_in_explorer,
|
||||
用 explorer /select 打开父目录并选中该文件/文件夹(文件、文件夹
|
||||
均有此项)。
|
||||
|
||||
## 验证
|
||||
|
||||
- vitest 106+2(新增:window-claims 3 例、路径助手 2 例、文件树拖放
|
||||
与定位菜单 5 例);tsc 0 错误;构建通过。
|
||||
- 无头浏览器实测:应用启动后认领注册表落盘、打开文档的键即时登记,
|
||||
无页面错误。
|
||||
- Rust 命令沙箱无工具链未编译(按 commands.rs 既有风格编写),
|
||||
待 Windows 构建验证。
|
||||
|
||||
## 待真机复验
|
||||
|
||||
- 拖拽手感(WebView2 下 HTML5 拖放)与各拦截提示;
|
||||
- 双窗口:窗口 A 编辑未保存 → 开新窗口不再弹草稿;A 崩溃/强杀后
|
||||
新窗口仍能收到草稿提示;
|
||||
- 未命名保存直接落根目录、避让命名;
|
||||
- 「打开所在位置」资源管理器定位效果。
|
||||
Reference in New Issue
Block a user