Add frontend workspace UI and refactor plan

This commit is contained in:
fenghp
2026-06-09 10:07:22 +08:00
parent 307249499c
commit 8692edd2dd
61 changed files with 7877 additions and 70 deletions
@@ -2,7 +2,7 @@
## 状态
todo
done
## 优先级
@@ -59,4 +59,37 @@ pnpm typecheck
## 完成记录
待完成后填写。
- 完成日期:2026-06-08
- 实际修改文件:
- `mactfsui/electron/main.cjs`
- `mactfsui/electron/preload.cjs`
- `mactfsui/app/lib/electron/bridge.ts`
- `mactfsui/app/lib/api/client.ts`
- `mactfsui/app/lib/api/types.ts`
- `mactfsui/app/routes/home.tsx`
- `mactfsui/package.json`
- `task/README.md`
- `task/frontend/FE-001-实现Electron启动服务与API客户端.md`
- 实际实现内容:
- Electron 主进程增加 preload 配置、contextIsolation、nodeIntegration 关闭。
- Electron 主进程增加本地 token 读取、`/api/health` 检查、未运行时通过 `../tfsIntegration/gradlew runServer` 拉起本地 Java API 服务。
- 新增 preload 窄接口:`getToken`、`getServiceStatus`。
- 新增 renderer 侧 Electron bridge 类型封装。
- 新增统一 API client,所有请求自动读取 token 并附加 `Authorization: Bearer <token>`。
- 首页替换脚手架内容,展示本地 API 服务状态、token 路径和请求状态;服务未就绪时给出明确提示。
- 调整 `electron:dev` 等待条件为 `wait-on tcp:5173`,避免 React Router dev 的 HTTP 探测差异阻塞 Electron 启动。
- 已执行测试:
- `cd /Users/fenghp/Desktop/DEV/project/mydev/mactfsui && pnpm typecheck`:通过。
- `cd /Users/fenghp/Desktop/DEV/project/mydev/mactfsui && node -c electron/main.cjs`:通过。
- `cd /Users/fenghp/Desktop/DEV/project/mydev/mactfsui && node -c electron/preload.cjs`:通过。
- `cd /Users/fenghp/Desktop/DEV/project/mydev/mactfs && ../tfsIntegration/gradlew runServer` 后请求 `/api/health`:通过,返回 `success=true`。
- `cd /Users/fenghp/Desktop/DEV/project/mydev/mactfsui && pnpm electron:dev`:通过,Electron 启动后拉起 Java API 服务,`curl /api/health` 返回 `success=true`。
- 内置浏览器打开 `http://127.0.0.1:5173/`:通过,非 Electron 环境显示明确的 preload 缺失提示,不是空白页。
- 未执行测试及原因:
- 未执行真实 TFS 连接、目录浏览或文件操作;本任务只要求本地服务、health 和 API client,不涉及真实 TFS 业务操作。
- 验收标准确认:
- Electron 启动后可连接本地 API:满足,`electron:dev` 启动后 38765 端口监听,health 返回 `success=true`。
- API 请求能自动带 token:满足,`apiRequest` 统一从 preload 获取 token 并设置 Bearer header,首页通过该 client 请求 health。
- 服务未启动时 UI 有明确提示:满足,首页根据 bridge/service 状态展示未就绪或 preload 缺失提示。
- 遗留问题:
- 生产环境打包启动命令仍待 Release 阶段确定,当前按前端规范使用开发期 Gradle `runServer`。
+31 -2
View File
@@ -2,7 +2,7 @@
## 状态
todo
done
## 优先级
@@ -64,4 +64,33 @@ pnpm typecheck
## 完成记录
待完成后填写。
- 完成日期:2026-06-08
- 实际修改文件:
- `mactfsui/app/lib/api/types.ts`
- `mactfsui/app/lib/api/endpoints.ts`
- `mactfsui/app/routes/home.tsx`
- `task/README.md`
- `task/frontend/FE-002-实现登录配置页.md`
- 实际实现内容:
- 新增 `AppConfig`、`ConfigData`、`ConnectData` 等前端 API 类型。
- 新增 `getConfig`、`connectSession` API endpoint 封装,复用 FE-001 的统一 `apiRequest` 自动 Bearer token 能力。
- 首页增加连接配置表单,支持 `serverUri`、`authType`、`domain`、`username`、`password`。
- 页面初始化时在本地服务可用后读取 `/api/config`,将默认配置回填到表单。
- 点击连接后调用 `/api/session/connect`,展示连接中状态;失败展示后端错误,成功进入已连接工作台状态。
- 保留右侧本地服务状态面板,服务未启动或 preload 缺失时继续显示明确提示。
- 已执行测试:
- `cd /Users/fenghp/Desktop/DEV/project/mydev/mactfsui && pnpm typecheck`:通过。
- `cd /Users/fenghp/Desktop/DEV/project/mydev/mactfsui && node -c electron/main.cjs && node -c electron/preload.cjs`:通过。
- `git diff --check`:通过。
- 内置浏览器打开 `http://127.0.0.1:5173/`:通过,连接表单与服务状态面板可见,非 Electron 环境显示 preload 缺失提示。
- `cd /Users/fenghp/Desktop/DEV/project/mydev/mactfsui && pnpm electron:dev`:通过,Electron 启动后本地 API health 与 config 接口可访问。
- 使用无效 TFS 地址请求 `/api/session/connect`:通过,后端返回 `success=false` 和错误信息,配置未被保存。
- 未执行测试及原因:
- 未执行真实 TFS 账号的连接成功验证;当前环境没有可用于验收的真实 TFS 凭据,且任务规则要求谨慎处理真实 TFS 操作。
- 验收标准确认:
- 可填写配置并调用连接 API:满足,表单字段完整,连接提交走 `connectSession`。
- 连接成功进入主界面:满足,`connectSession` 返回成功后进入已连接工作台状态;真实 TFS 成功连接未在当前环境执行。
- 连接失败显示错误:满足,无效连接返回的错误会写入页面错误提示。
- 再次打开能回填配置:满足,页面初始化读取 `/api/config` 并回填表单。
- 遗留问题:
- 真实 TFS 成功连接需要在具备有效 TFS 地址和账号后做端到端验收。
@@ -2,7 +2,7 @@
## 状态
todo
done
## 优先级
@@ -58,4 +58,31 @@ pnpm typecheck
## 完成记录
待完成后填写。
- 完成日期:2026-06-08
- 实际修改文件:
- `mactfsui/app/components/app/app-shell.tsx`
- `mactfsui/app/routes/home.tsx`
- `mactfsui/app/app.css`
- `task/README.md`
- `task/frontend/FE-003-实现VS风格主布局.md`
- 实际实现内容:
- 新增 `AppShell` 主工作台组件,包含顶部工具栏、左侧 Source List、中间 Source Workspace、右侧 Inspector、底部 Console。
- 首页改为通过 `AppShell` 承载连接配置页和已连接后的文件列表占位,保留 FE-002 的连接表单逻辑。
- 右侧 Inspector 预留 Pending Changes 区域,并展示本地 API 服务状态。
- 底部 Console 展示 service、request、session 三类基础日志状态。
- 增加桌面与窄屏响应式网格:桌面三栏,较窄宽度下 Inspector 下移。
- 将全局字体从脚手架 slab serif 调整为 macOS/system sans,符合 `mactfsui/AGENTS.md` 的 macOS Source Workspace 风格要求。
- 已执行测试:
- `cd /Users/fenghp/Desktop/DEV/project/mydev/mactfsui && pnpm typecheck`:通过。
- `git diff --check`:通过。
- `find /Users/fenghp/Desktop/DEV/project/mydev/task -type f -name "*.md" | wc -l`:通过,结果为 `50`。
- 内置浏览器打开 `http://127.0.0.1:5173/`:通过,顶部工具栏、Source List、Source Workspace、Inspector、Console 均可见;截图检查未发现空白或重叠。
- `cd /Users/fenghp/Desktop/DEV/project/mydev/mactfsui && pnpm electron:dev`:通过,Electron 启动后本地 API health 返回 `success=true`。
- 未执行测试及原因:
- 未执行真实 Collection、目录树、Pending Changes 数据加载;本任务只实现布局区域,不实现具体业务数据。
- 验收标准确认:
- UI 不再是默认模板页:满足,首页已替换为 macOS Source Workspace 工作台。
- 主界面布局与 PRD 区域一致:满足,包含顶部连接/Workspace 信息、左侧目录树区、中间文件区、右侧挂起更改区、底部操作日志区。
- 桌面窗口下可正常使用:满足,浏览器与 Electron dev 验证通过。
- 遗留问题:
- 具体 Collection 目录树、文件列表、Pending Changes 数据加载留给后续 FE-004、FE-005、FE-008。
@@ -2,7 +2,7 @@
## 状态
todo
done
## 优先级
@@ -58,4 +58,32 @@ pnpm typecheck
## 完成记录
待完成后填写。
- 完成日期:2026-06-08
- 实际修改文件:
- `mactfsui/app/lib/api/types.ts`
- `mactfsui/app/lib/api/endpoints.ts`
- `mactfsui/app/components/app/app-shell.tsx`
- `mactfsui/app/components/explorer/server-tree-panel.tsx`
- `mactfsui/app/routes/home.tsx`
- `task/README.md`
- `task/frontend/FE-004-实现Collection服务端目录树.md`
- 实际实现内容:
- 新增 Collection、服务端目录节点相关前端类型。
- 新增 `listCollections`、`listServerTree` API endpoint 封装,继续复用统一 Bearer token client。
- `AppShell` 左侧 Source List 支持传入业务树组件。
- 新增 `ServerTreePanel`,连接成功后加载 Collection,默认加载第一个 Collection 的 `$/` 根目录。
- 展开目录时按服务端路径调用 `/api/server-tree` 懒加载子节点,不要求目录已映射到本地。
- 选中 Collection 或目录节点后通过回调更新首页当前 Collection 和当前服务端路径,中间区域展示当前路径。
- 已执行测试:
- `cd /Users/fenghp/Desktop/DEV/project/mydev/mactfsui && pnpm typecheck`:通过。
- `git diff --check`:通过。
- `find /Users/fenghp/Desktop/DEV/project/mydev/task -type f -name "*.md" | wc -l`:通过,结果为 `50`。
- 内置浏览器打开 `http://127.0.0.1:5173/`:通过,未连接状态下 Source List、主内容、Inspector、Console 均稳定显示。
- 未执行测试及原因:
- 未执行真实 TFS Collection 与目录树成功浏览;当前环境没有可用于验收的真实 TFS 连接配置,且任务规则要求谨慎处理真实 TFS 操作。
- 验收标准确认:
- 可浏览 Collection 下目录树:代码路径满足,真实 TFS 数据未在当前环境执行。
- 展开节点不要求本地已映射:满足,展开时只使用服务端 `collection + path` 调用 `/api/server-tree`。
- 选中目录能更新当前路径:满足,`ServerTreePanel` 通过 `onPathSelect` 通知首页并更新中间区域当前路径。
- 遗留问题:
- 需要在具备真实 TFS 连接后补充 Collection / 目录树端到端验收。
@@ -2,7 +2,7 @@
## 状态
todo
done
## 优先级
@@ -58,4 +58,33 @@ pnpm typecheck
## 完成记录
待完成后填写。
- 完成日期:2026-06-08
- 实际修改文件:
- `mactfsui/app/lib/api/types.ts`
- `mactfsui/app/lib/api/endpoints.ts`
- `mactfsui/app/components/explorer/folder-items-panel.tsx`
- `mactfsui/app/routes/home.tsx`
- `task/README.md`
- `task/frontend/FE-005-实现中间目录文件列表.md`
- 实际实现内容:
- 新增 Mapping 与目录文件列表相关前端类型。
- 新增 `listMappings`、`listServerFolderItems` API endpoint 封装。
- 新增 `FolderItemsPanel`,根据当前 Collection 和服务端路径加载下一级文件 / 文件夹。
- 中间列表展示名称、类型、服务端路径、本地路径、映射状态、状态。
- 根据 Mapping 计算本地路径;已映射项展示 `notDownloaded / 未下载` 状态,未映射项展示 `未映射`。
- 支持文件 / 目录行选中,并在底部展示已选中路径。
- 基础操作入口按映射状态展示:未映射项只保留 History,已映射项显示 Get Latest / Checkout 入口。
- 已执行测试:
- `cd /Users/fenghp/Desktop/DEV/project/mydev/mactfsui && pnpm typecheck`:通过。
- `git diff --check`:通过。
- `find /Users/fenghp/Desktop/DEV/project/mydev/task -type f -name "*.md" | wc -l`:通过,结果为 `50`。
- 内置浏览器打开 `http://127.0.0.1:5173/`:通过,未连接状态下主布局和中间区域稳定显示。
- 未执行测试及原因:
- 未执行真实 TFS 目录点击后加载文件列表;当前环境没有可用于验收的真实 TFS 连接配置。
- 未验证真实本地文件是否存在;当前后端目录接口未返回本地存在状态,前端只能根据 Mapping 计算本地路径并展示 `notDownloaded / 未下载` 的基础状态。
- 验收标准确认:
- 目录点击后中间列表更新:代码路径满足,左侧选中路径会传给 `FolderItemsPanel` 并触发 `/api/server-folder/items`。
- 未映射目录不展示本地操作:满足,未映射项不显示 Get Latest / Checkout 本地操作入口。
- 已映射未下载项状态清晰:满足,已映射项展示 `notDownloaded / 未下载` 状态;真实本地存在性需后续后端状态字段或目录对比补强。
- 遗留问题:
- 真实 TFS 目录文件列表、真实本地存在状态需要后续端到端环境补验。
@@ -2,7 +2,7 @@
## 状态
todo
done
## 优先级
@@ -59,4 +59,36 @@ pnpm typecheck
## 完成记录
待完成后填写。
- 完成日期:2026-06-08
- 实际修改文件:
- `mactfsui/electron/main.cjs`
- `mactfsui/electron/preload.cjs`
- `mactfsui/app/lib/electron/bridge.ts`
- `mactfsui/app/lib/api/types.ts`
- `mactfsui/app/lib/api/endpoints.ts`
- `mactfsui/app/components/explorer/folder-items-panel.tsx`
- `task/README.md`
- `task/frontend/FE-006-实现Mapping创建流程.md`
- 实际实现内容:
- Electron 主进程新增本地目录选择器 IPC:`mactfs:select-directory`。
- preload 和 renderer bridge 新增 `selectDirectory()`。
- 新增 `AddMappingRequest`、`AddMappingData` 类型和 `addMapping` endpoint 封装。
- 中间目录面板在当前服务端目录未映射时展示“映射到本地”。
- Mapping 表单支持选择本地目录、手动输入本地路径、选择是否立即 `Get Latest`。
- 调用 `/api/mappings` 创建 Mapping,成功后刷新当前目录列表和 Mapping 状态。
- 已执行测试:
- `cd /Users/fenghp/Desktop/DEV/project/mydev/mactfsui && pnpm typecheck`:通过。
- `cd /Users/fenghp/Desktop/DEV/project/mydev/mactfsui && node -c electron/main.cjs && node -c electron/preload.cjs`:通过。
- `git diff --check`:通过。
- `find /Users/fenghp/Desktop/DEV/project/mydev/task -type f -name "*.md" | wc -l`:通过,结果为 `50`。
- 内置浏览器打开 `http://127.0.0.1:5173/`:通过,未连接状态下主布局稳定显示。
- `cd /Users/fenghp/Desktop/DEV/project/mydev/mactfsui && pnpm electron:dev`:通过,Electron 启动后本地 API health 返回 `success=true`。
- 未执行测试及原因:
- 未执行真实 Mapping 创建;当前环境没有可用于验收的真实 TFS 连接、Workspace 和本地目录选择上下文。
- 未实际点击系统目录选择弹窗;已完成 main/preload/bridge 代码接入和 CJS 语法校验。
- 验收标准确认:
- 可创建 Mapping:代码路径满足,提交 `/api/mappings`。
- 可选择是否立即 Get Latest:满足,表单提供 `立即 Get Latest` 选项并传递 `getLatest`。
- 不立即下载时后续仍可对下级文件 Get Latest:满足,不勾选时仅保存 Mapping;下级文件列表会根据刷新后的 Mapping 状态展示 Get Latest 入口。
- 遗留问题:
- 真实 Mapping 创建和目录选择弹窗需要在具备有效 TFS 连接后做端到端验收。
@@ -2,7 +2,7 @@
## 状态
todo
done
## 优先级
@@ -59,4 +59,31 @@ pnpm typecheck
## 完成记录
待完成后填写。
- 实际修改文件:
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/lib/api/types.ts`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/lib/api/endpoints.ts`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/components/explorer/folder-items-panel.tsx`
- `/Users/fenghp/Desktop/DEV/project/mydev/task/README.md`
- `/Users/fenghp/Desktop/DEV/project/mydev/task/frontend/FE-007-实现目录对比页面.md`
- 实际实现内容:
- 新增目录对比请求、响应和差异状态类型。
- 新增 `compareFolder` 统一 API 封装,对接 `POST /api/compare/folder` 的 `diffs` 返回结构。
- 在中间目录文件面板增加“目录对比”区域,已映射目录可执行 Compare,未映射目录仅展示不可对比状态。
- 目录对比请求期间展示“正在执行目录对比,TFS 网络请求可能需要一段时间。”。
- 对比结果默认隐藏 `upToDate`,支持切换显示状态。
- 差异列表支持逐项勾选和当前筛选结果批量勾选。
- 按状态展示可用操作入口:`checkout`、`diff`、`add`、`delete local`、`delete`、`restore from server`、`get latest`、`checkin`、`undo`、`手工处理`。
- 已执行测试:
- `cd /Users/fenghp/Desktop/DEV/project/mydev/mactfsui && pnpm typecheck`:通过。
- `git diff --check`:通过。
- Browser 打开 `http://127.0.0.1:5173/`:页面工作台结构可渲染,连接页、Source Workspace、Inspector、Console 可见。
- 未执行测试及原因:
- 未执行真实 TFS 目录对比请求;当前环境没有真实 TFS 凭据、已连接会话和真实 Mapping,且该操作依赖外部 TFS 网络状态。
- Browser 截图调用超时,但 DOM 快照已确认本地页面基础结构渲染正常。
- 是否满足验收标准:
- 可展示 `localModified`、`localOnly`、`notDownloaded`、`pendingEdit`、`pendingAdd`、`pendingDelete` 等状态文案和操作入口。
- 可勾选指定差异文件,并可批量勾选当前筛选结果。
- 未映射目录不显示 Compare 执行按钮,并展示不能执行对比的状态。
- 遗留问题:
- 当前任务只展示可用操作入口,不执行真实文件操作;具体操作交互属于后续 FE-009。
- 真实 TFS 成功路径需要在具备测试 Collection、Workspace 和 Mapping 后做端到端验收。
@@ -2,7 +2,7 @@
## 状态
todo
done
## 优先级
@@ -59,4 +59,34 @@ pnpm typecheck
## 完成记录
待完成后填写。
- 实际修改文件:
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/lib/api/types.ts`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/lib/api/endpoints.ts`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/components/app/app-shell.tsx`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/components/inspector/pending-changes-panel.tsx`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/routes/home.tsx`
- `/Users/fenghp/Desktop/DEV/project/mydev/task/README.md`
- `/Users/fenghp/Desktop/DEV/project/mydev/task/frontend/FE-008-实现右侧挂起更改面板.md`
- 实际实现内容:
- 新增 `TfsPendingChangeInfo`、`PendingChangeStatus`、`PendingChangesData` 类型。
- 新增 `listPendingChanges` API 封装,对接 `GET /api/pending-changes` 的 `pendingChanges` 返回结构。
- 新增右侧 `PendingChangesPanel`,连接后查询当前 Workspace 的 pending changes。
- 后端返回的 pending changes 默认进入 Included Changes。
- 支持单个文件在 Included Changes 和 Excluded Changes 之间移动。
- Included / Excluded 状态只维护在 React 当前 UI 会话内,不写入后端或本地存储。
- AppShell 支持传入自定义 Inspector 内容,Home 中接入 PendingChangesPanel。
- 面板展示“后续签入只读取 Included Changes”及 Included 数量,供后续签入流程读取 Included 语义。
- 已执行测试:
- `cd /Users/fenghp/Desktop/DEV/project/mydev/mactfsui && pnpm typecheck`:通过。
- `git diff --check`:通过。
- Browser 打开 `http://127.0.0.1:5173/`:右侧 Inspector 可渲染 Pending Changes 面板;当前非 Electron 环境显示未连接状态。
- 未执行测试及原因:
- 未执行真实 pending changes 查询成功路径;当前环境没有真实 TFS 凭据、已连接会话和真实 Workspace pending changes。
- 未执行真实签入;签入流程属于后续 FE-010,本任务只维护 Included / Excluded 会话状态。
- 是否满足验收标准:
- pending changes 查询入口已实现,连接后会在右侧面板展示。
- 后端返回的 pending changes 默认进入 Included Changes。
- 用户可通过每项右侧按钮在 Included / Excluded 之间移动。
- 面板明确保留 Included Changes 作为后续签入读取范围。
- 遗留问题:
- 真实 TFS pending changes 展示和移动后的签入行为,需要在 FE-010 或后续端到端验收任务中验证。
@@ -2,7 +2,7 @@
## 状态
todo
done
## 优先级
@@ -62,4 +62,39 @@ pnpm typecheck
## 完成记录
待完成后填写。
- 实际修改文件:
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/lib/api/types.ts`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/lib/api/endpoints.ts`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/routes/home.tsx`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/components/explorer/folder-items-panel.tsx`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/components/inspector/pending-changes-panel.tsx`
- `/Users/fenghp/Desktop/DEV/project/mydev/task/README.md`
- `/Users/fenghp/Desktop/DEV/project/mydev/task/frontend/FE-009-实现文件操作交互.md`
- 实际实现内容:
- 新增 Get Latest、checkout、add、delete、undo 的前端 API 类型和 endpoint 封装。
- 目录对比结果中按状态展示可执行文件操作按钮:
- `notDownloaded`、`remoteChanged`、`remoteOnly` 可 Get Latest。
- `localModified` 可 checkout。
- `localOnly` 可 add。
- `localDeleted` 可 pending delete。
- `pendingEdit`、`pendingAdd`、`pendingDelete` 可 undo。
- 目录 checkout 前使用当前选择项数量做二次确认。
- 操作成功后展示影响数量,并提示重新 Compare 刷新差异。
- Get Latest 成功后刷新当前目录列表。
- checkout、add、delete、undo 成功后触发右侧 Pending Changes 刷新。
- 文件列表底部选中项接入 Get Latest 和 Checkout 操作入口。
- 右侧 Pending Changes 面板新增每项 Undo 操作入口,并支持外部刷新信号。
- 已执行测试:
- `cd /Users/fenghp/Desktop/DEV/project/mydev/mactfsui && pnpm typecheck`:通过。
- `git diff --check`:通过。
- Browser 打开 `http://127.0.0.1:5173/`:工作台、Inspector、Pending Changes 基础结构可渲染;当前非 Electron 环境显示未连接状态。
- 未执行测试及原因:
- 未执行真实 checkout、add、delete、undo、get latest;这些操作会修改真实 TFS Workspace 或本地工作区,当前环境没有真实 TFS 凭据和测试 Workspace。
- 目录 checkout 的真实影响数量由当前选择项数量确认,不做递归文件数预扫描;后续端到端验收可结合真实 TFS 数据校验。
- 是否满足验收标准:
- 目录 checkout 前会显示二次确认并包含当前影响项数量。
- 不同 diff 状态只展示对应文件操作入口。
- 操作后会刷新当前目录列表或右侧 Pending Changes,并提示重新 Compare。
- 遗留问题:
- 未实现本地未版本控制文件的直接删除;当前任务范围只要求 `localOnly` 可 add。
- 真实操作成功路径需要在后续端到端验收中验证。
+29 -2
View File
@@ -2,7 +2,7 @@
## 状态
todo
done
## 优先级
@@ -61,4 +61,31 @@ pnpm typecheck
## 完成记录
待完成后填写。
- 实际修改文件:
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/lib/api/types.ts`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/lib/api/endpoints.ts`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/components/inspector/pending-changes-panel.tsx`
- `/Users/fenghp/Desktop/DEV/project/mydev/task/README.md`
- `/Users/fenghp/Desktop/DEV/project/mydev/task/frontend/FE-010-实现签入流程.md`
- 实际实现内容:
- 新增 `CheckinRequest`、`TfsCheckinResult`、`CheckinData` 类型。
- 新增 `checkin` API 封装,对接 `POST /api/checkin`。
- 在右侧 Pending Changes 面板新增 Checkin 区域。
- 新增 comment 输入框,comment 为空时 Checkin 按钮不可用,并在执行函数内保留必填校验。
- Checkin 只提交当前 Included Changes 的 `serverPath`,Excluded Changes 不参与提交。
- 签入中禁用刷新、移动和提交按钮,并显示 loading 状态。
- 签入成功后显示 changeset 和提交数量,清空 comment 与 Included Changes,保留 Excluded 会话状态。
- 签入失败时展示 `errorMessage || message`,用于直接显示 TFS policy、权限、冲突等错误。
- 已执行测试:
- `cd /Users/fenghp/Desktop/DEV/project/mydev/mactfsui && pnpm typecheck`:通过。
- `git diff --check`:通过。
- Browser 打开 `http://127.0.0.1:5173/`:工作台、Inspector、Pending Changes 基础结构可渲染;当前非 Electron 环境显示未连接状态。
- 未执行测试及原因:
- 未执行真实 checkin;该操作会提交真实 TFS Workspace 的 pending changes,当前环境没有真实测试凭据、Workspace 和可提交变更。
- 是否满足验收标准:
- comment 为空不能签入。
- Excluded Changes 不会进入 checkin 请求。
- 成功后 Included 清空。
- Excluded 保留在当前 UI 会话内。
- 遗留问题:
- 真实签入成功、policy 失败、权限失败、冲突失败路径需要在后续端到端验收中验证。
@@ -2,7 +2,7 @@
## 状态
todo
done
## 优先级
@@ -59,4 +59,34 @@ pnpm typecheck
## 完成记录
待完成后填写。
- 实际修改文件:
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/lib/api/types.ts`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/lib/api/endpoints.ts`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/components/explorer/folder-items-panel.tsx`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/components/explorer/history-panel.tsx`
- `/Users/fenghp/Desktop/DEV/project/mydev/task/README.md`
- `/Users/fenghp/Desktop/DEV/project/mydev/task/frontend/FE-011-实现历史记录界面.md`
- 实际实现内容:
- 新增 `TfsHistoryEntry`、`HistoryData`、`ChangesetFilesData` 类型。
- 新增 `queryHistory` 和 `queryChangesetFiles` API 封装。
- 新增 `HistoryPanel`,展示文件或目录最近历史记录。
- 历史列表展示 changeset、变更类型、作者、时间、comment。
- 当前目录和选中文件 / 目录均可打开 History。
- 目录历史可点击 changeset 查看影响文件列表。
- 文件历史支持选择两个历史版本并进入 Diff 入口。
- changeset 文件列表支持单文件 Diff 入口提示;真实 Diff 渲染由后续 FE-012 接入。
- 已执行测试:
- `cd /Users/fenghp/Desktop/DEV/project/mydev/mactfsui && pnpm typecheck`:通过。
- `git diff --check`:通过。
- Browser 打开 `http://127.0.0.1:5173/`:工作台、Inspector、Source Workspace 基础结构可渲染;当前非 Electron 环境显示未连接状态。
- 未执行测试及原因:
- 未执行真实历史查询成功路径;当前环境没有真实 TFS 凭据、连接会话和可查询的 TFS 路径。
- 未执行真实 Diff 渲染;完整 Diff 界面属于后续 FE-012。
- 是否满足验收标准:
- 文件可打开历史入口。
- 目录可打开历史入口。
- 目录历史 changeset 可查询并展示影响文件列表。
- 可选择历史版本或 changeset 文件进入 Diff 入口。
- 遗留问题:
- 历史 Diff 当前只记录入口选择,不渲染实际 diff 内容,待 FE-012 完成。
- 真实 TFS 历史成功路径需要在后续端到端验收中验证。
+32 -2
View File
@@ -2,7 +2,7 @@
## 状态
todo
done
## 优先级
@@ -58,4 +58,34 @@ pnpm typecheck
## 完成记录
待完成后填写。
- 实际修改文件:
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/lib/api/types.ts`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/lib/api/endpoints.ts`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/components/explorer/diff-panel.tsx`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/components/explorer/history-panel.tsx`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/components/explorer/folder-items-panel.tsx`
- `/Users/fenghp/Desktop/DEV/project/mydev/task/README.md`
- `/Users/fenghp/Desktop/DEV/project/mydev/task/frontend/FE-012-实现文件Diff界面.md`
- 实际实现内容:
- 新增 `DiffLocalLatestRequest`、`DiffRevisionsRequest`、`TfsTextDiff`、`TextDiffData` 类型。
- 新增 `diffLocalLatest` 和 `diffRevisions` API 封装,对接 `POST /api/diff/local-latest` 与 `POST /api/diff/revisions`。
- 新增 `DiffPanel`,支持本地文件 vs 服务器 latest、两个历史 changeset 之间的文本 diff 展示。
- `DiffPanel` 将后端统一 diff lines 转成左右两栏文本展示,并在接口失败或无 diff 内容时提示大文件、二进制或不支持类型无法展示文本 diff。
- `HistoryPanel` 支持选择两个文件历史版本后打开真实 Diff 面板。
- `FolderItemsPanel` 新增 Diff 打开状态,目录对比结果中选择单个可对比文件后可打开本地 vs latest Diff。
- 切换连接、Collection 或服务端目录时同步关闭已打开的 History 和 Diff 面板,避免旧路径内容残留。
- 已执行测试:
- `cd /Users/fenghp/Desktop/DEV/project/mydev/mactfsui && pnpm typecheck`:通过。
- `git diff --check`:通过。
- Browser 打开 `http://127.0.0.1:5173/`:工作台、连接页、Inspector、Console 基础结构可渲染;当前非 Electron 环境显示未检测到 preload。
- 未执行测试及原因:
- 未执行真实本地 vs latest Diff;当前环境没有真实 TFS 凭据、连接会话和可对比的映射工作区。
- 未执行真实历史版本 A/B Diff;当前环境没有可查询的 TFS 文件历史。
- 未验证真实大文件或二进制文件响应;该提示由 Diff API 失败或空 diff 响应统一展示。
- 是否满足验收标准:
- 目录对比结果已接入单文件 Diff 入口。
- 文件历史已支持选择两个版本并打开 Diff 面板。
- 大文件、二进制或不支持类型在 Diff 面板中有明确提示。
- 遗留问题:
- 真实 TFS Diff 成功路径、权限失败、二进制文件和大文件路径需要在后续端到端验收中验证。
- Browser 非 Electron 预览中控制台存在 lucide/react `Invalid hook call` 报错;当前页面 DOM 仍可渲染,且未连接状态不会挂载本次 FE-012 的 Diff 组件,建议后续作为前端整体问题单独排查。
@@ -2,7 +2,7 @@
## 状态
todo
done
## 优先级
@@ -60,4 +60,33 @@ pnpm typecheck
## 完成记录
待完成后填写。
- 实际修改文件:
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/lib/api/client.ts`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/lib/api/types.ts`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/lib/api/endpoints.ts`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/components/app/operation-log-panel.tsx`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/components/app/app-shell.tsx`
- `/Users/fenghp/Desktop/DEV/project/mydev/mactfsui/app/routes/home.tsx`
- `/Users/fenghp/Desktop/DEV/project/mydev/task/README.md`
- `/Users/fenghp/Desktop/DEV/project/mydev/task/frontend/FE-013-实现操作日志面板.md`
- 实际实现内容:
- 在统一 `apiRequest` 中新增请求日志订阅机制,请求发出时记录 `running`,请求返回或失败时更新为成功 / 失败。
- 请求日志记录操作名称、开始时间、结束时间、耗时、路径摘要、成功 / 失败、错误信息和后端 logs。
- 新增 `TfsOperationLogEntry`、`OperationLogsData` 类型。
- 新增 `listOperationLogs` API 封装,对接 `GET /api/logs`。
- 新增 `OperationLogPanel`,替换底部静态 Console,按表格展示操作、状态、开始、结束、耗时、路径摘要和错误信息。
- `Home` 订阅统一 API 日志事件,并支持从服务端刷新最近操作日志。
- 已执行测试:
- `cd /Users/fenghp/Desktop/DEV/project/mydev/mactfsui && pnpm typecheck`:通过。
- `git diff --check`:通过。
- Browser 打开 `http://127.0.0.1:5173/`:底部 Console 初始显示 0 条日志和 service/request/session 兜底信息。
- Browser 点击“刷新服务端操作日志”:当前非 Electron 环境下生成 1 条 `frontendRequest` 失败日志,状态、开始时间、结束时间、耗时、路径摘要 `/api/logs` 和错误信息均可读。
- 未执行测试及原因:
- 未执行真实后端 `/api/logs` 成功路径;当前 Browser 预览没有 Electron preload,无法读取本地 API token。
- 未执行真实慢 TFS 请求期间的长时间 running 状态;当前环境没有可用真实 TFS 连接和慢请求场景。
- 是否满足验收标准:
- 通过统一 API client 发出的主要操作都会产生底部日志记录。
- 请求发出时会先显示执行中状态,TFS 慢请求期间 UI 可明确看到正在执行。
- 失败日志展示操作名称、路径摘要和 `errorMessage || message`,信息可读。
- 遗留问题:
- 真实 `/api/logs` 成功路径和慢请求 running 状态需要在后续端到端验收中验证。