# 文件管理器重构 P1 — 拆分 Composable

**日期**: 2026-06-02  
**设计**: `docs/design/specs/2026-06-02-files-refactor-design.md` §3 P1  
**前置**: P0 JWT 主动续期（已完成）

## 目标

- 将 `FilesPage.vue` 业务逻辑迁入 `stores/files.ts` + `composables/files/*`
- `FilesPage.vue` 仅保留模板、筛选 UI 状态、组合 composable（目标 script < 400 行，P2 再压至 ≤250）
- 引入 Pinia 单一真相 + 5s 目录缓存（P3 子集）

## 文件清单

| 路径 | 职责 |
|------|------|
| `frontend/src/stores/files.ts` | 服务器/路径/列表/loading/权限/缓存 |
| `frontend/src/composables/files/constants.ts` | sessionStorage 键 |
| `frontend/src/composables/files/useFilesBrowse.ts` | browse、错误文案、emptyHint |
| `frontend/src/composables/files/useFilesNavigation.ts` | 路由同步、面包屑、初始化、watch |
| `frontend/src/composables/files/useFilesPermissions.ts` | capability、横幅、一键 sudo |
| `frontend/src/composables/files/useFilesEditor.ts` | 预览/编辑/保存回调 |
| `frontend/src/composables/files/useFilesActions.ts` | 上传/删除/重命名/压缩等 |
| `frontend/src/composables/files/index.ts` | 桶导出 |
| `frontend/src/pages/FilesPage.vue` | 瘦身后页面 |

## 测试要点

- `npx vite build` 通过
- 进目录仍 ≤1 次 `/sync/browse`（缓存命中 0 次）
- 切换服务器、面包屑、粘贴、编辑、sudo 一键配置行为不变

## 回滚

`git revert` P1 commit；`FilesPage.vue` 单文件可独立回退。
