# 文件管理页迭代（SPA #/files）

## 背景
`FilesPage.vue` 已修复 browse 契约与面包屑；仍缺生产级文件管理体验（下载、预览、状态持久化、过滤等）。

## 目标
1. 下载：对接 `StreamingResponse`，浏览器真实保存文件
2. 预览：对话框展示文本（非 snackbar 全文）
3. 路由：`?server_id=&path=` 刷新可恢复
4. UX：状态栏、名称过滤、双击进目录、拖拽上传、符号链接展示

## 涉及文件
- `frontend/src/api/index.ts` — `http.download`
- `frontend/src/utils/fileDownload.ts` — 触发浏览器保存
- `frontend/src/utils/fileBrowse.ts` / `types/api.ts` — symlink 类型
- `server/api/sync_v2.py` — browse 返回 `symlink` + `link_target`
- `frontend/src/pages/FilesPage.vue` — UI 迭代

## 验收
- [ ] 点击下载得到本地文件且可打开
- [ ] 预览大文件在对话框内滚动，不超过 read-file 限制
- [ ] 刷新页面保留服务器与路径（query）
- [ ] 面包屑/上级/双击目录行为一致
- [ ] 空目录显示「暂无文件」且状态栏计数为 0
