38 lines
1.9 KiB
Markdown
38 lines
1.9 KiB
Markdown
|
|
# 2026-06-01 文件管理浏览修复
|
|||
|
|
|
|||
|
|
## 日期
|
|||
|
|
2026-06-01
|
|||
|
|
|
|||
|
|
## 变更摘要
|
|||
|
|
修复 SPA 文件管理页(`#/files`)目录列表为空、breadcrumb 无法点击、路径不一致等问题;统一 `/api/sync/browse` 响应为 `items` 字段。
|
|||
|
|
|
|||
|
|
## 2026-06-01 追加(全面巡检)
|
|||
|
|
- 面包屑:Vuetify 4 `#item` 槽 + `onBreadcrumbClick`,当前层级禁用
|
|||
|
|
- 新增 `remotePath.ts`:路径规范化、拼接、面包屑数据、上级目录
|
|||
|
|
- 工具栏「上级」按钮;未选服务器时提示
|
|||
|
|
- `parseBrowseResponse`:空目录 `items: []` 不再误判
|
|||
|
|
- 预览截断 800 字;批量删除反馈成功/失败数
|
|||
|
|
|
|||
|
|
## 动机
|
|||
|
|
- 后端 `POST /api/sync/browse` 返回 `{ entries: [...] }`(字段 `is_dir`、`perms`)
|
|||
|
|
- 前端 `FilesPage.vue` 仅读取 `res.items`,且条目需要 `type: directory|file`
|
|||
|
|
- 生产环境表现为「暂无文件」,浏览/进入子目录均不可用
|
|||
|
|
|
|||
|
|
## 涉及文件
|
|||
|
|
- `server/api/sync_v2.py` — 返回 `items`(含 `type`/`permissions`),过滤 `.` / `..`
|
|||
|
|
- `frontend/src/utils/fileBrowse.ts` — 解析 `items`,兼容旧版 `entries`
|
|||
|
|
- `frontend/src/pages/FilesPage.vue` — 使用 `parseBrowseResponse`,展示 SSH `error`
|
|||
|
|
- `frontend/src/types/api.ts` — `BrowseResponse` 类型与后端对齐
|
|||
|
|
- `frontend/src/pages/FilesPage.vue` — 表格 `return-object`、面包屑/上级/路径规范化
|
|||
|
|
- `frontend/src/utils/remotePath.ts` — 远程路径与面包屑工具
|
|||
|
|
- `docs/audit/2026-06-01-files-page-inspection.md` — 巡检审计
|
|||
|
|
|
|||
|
|
## 迁移 / 重启
|
|||
|
|
- 需重新构建并部署前端至 `web/app/`
|
|||
|
|
- 需部署后端并 `supervisorctl restart nexus`(或仅前端亦可临时兼容旧 API)
|
|||
|
|
|
|||
|
|
## 验证方式
|
|||
|
|
1. 打开 `app/#/files`,选择一台可 SSH 的服务器
|
|||
|
|
2. 应看到 `/` 下文件列表;点击目录可进入
|
|||
|
|
3. `curl -H "Authorization: Bearer …" -d '{"server_id":1,"path":"/"}' …/api/sync/browse` 响应含 `items` 数组
|