# 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` 数组
