Files
DevFlow/docs/05-代码审查/UIUX扩展审查-2026-08-02.md
T
lxy 7f0edced01 修复: UX扩展审查P0批(后端git/路径确定性bug + 前端UI + 编译阻断)
后端(src-tauri):

- project.rs: 4处空if目录校验补return Err(import/relocate/scan_directory/scan_project_with_ai),目录不存在不再静默放行

- ai/tools/git.rs: exec_git改返(String,bool)治git_commit·git_branch create/switch假成功 + git_merge补失败分支 + 加CREATE_NO_WINDOW

- module.rs: run_git_cmd加CREATE_NO_WINDOW,治Windows cmd黑窗闪烁(原问题9)

前端:

- DependencyGraph.vue: 环检测高亮注入renderGraph,原被fromJSON重建抹除致功能失效

- FileExplorer.vue: 工程下拉closeDropdown加closest判定,原打不开

附(预存编译阻断顺带修):

- df-nodes ai_node_helpers.rs: extract_first_json_object临时值借用悬垂E0716

- MessageList.vue: 删isLastUser死代码(vue-tsc TS6133)

审查产出: docs/05-代码审查/UIUX扩展审查-2026-08-02.md(80条发现,8高grep核验全属实)+ docs/todo.md批次段
2026-08-02 12:19:40 +08:00

74 lines
6.2 KiB
Markdown

# DevFlow UI/UX 扩展审查报告(2026-08-02)
> **触发**:任务 `0115aea6`「总览页 + 项目列表 UI/UX 优化(持续更新)」原 12 问题清单
> **方法**:基于原 12 问题提炼 15 审查角度(A-O),workflow `wf_wynylx23h` 10 路并行扫描(6 模块深审 + 4 跨文件维度 grep),11 agent / 91 万 token / 488s
> **完整数据**:`audit_summary.json`(80 条发现)
> **核验**:主代理独立 grep 核验 8 条高严重度,**全部属实**(子代理本次无幻觉)
## 一、与原 12 问题关系
- **38 条全新**:原 12 完全未碰的模块 —— AI 对话核心区(MessageList/ChatInput/ConversationSidebar/PlanProgress 等)、工具卡审批体系(ToolCard/ApprovalPopup/DirAuthDialog)、文件浏览器(FileExplorer/FileTree/FilePreview)、AuditLog、后端 commands(task/idea/workflow/events/knowledge/services/project)、死代码
- **29+ 条延伸**:原 12 涉及文件/角度的新的具体落点(GitChanges 子串误配延伸、settings 控件延伸、Tasks 菜单延伸、git 子进程 CREATE_NO_WINDOW 延伸等)
## 二、高严重度核查(8 条 · 主代理独立 grep 核验 · 全部属实)
| # | 标题 | 位置 | 核查佐证 | 严重度 |
|---|---|---|---|---|
| 1 | project.rs 空 if 目录校验 | `L250-251 / L410-411 / L473-474 / L708-709` | ✅ **4 处空块**(原报 3 处,实 4 处),对比 L135 `create_project` 正确写法(`create_dir_all`)。import/relocate/scan 不应静默放行 | 高 |
| 2 | git_branch create/switch 吞错误 | `ai/tools/git.rs L284/L289-291` | ✅ `let _ = exec_git(...)` 恒返 `{created}/{switched_to}`,exec_git 失败返 `String::new()`(L36-48 非 Result) | 高 |
| 3 | git_commit committed 假成功 | `ai/tools/git.rs L243` | ✅ `committed: !hash.is_empty()`,commit 失败 HEAD 不动,`log -1` 仍返上次 hash | 高 |
| 4 | DependencyGraph 环检测被抹除 | `DependencyGraph.vue L227-232` | ✅ `cell.attr` 设红框后立即 `renderGraph()``fromJSON`(L175)重建节点,attr 丢失。**功能完全失效** | 高 |
| 5 | FileExplorer 工程下拉打不开 | `FileExplorer.vue L13 + L364-365` | ✅ 按钮 toggle 开 → 事件冒泡到 document `closeDropdown`(无 target 判定)立即关。**功能失效** | 高 |
| 6 | 统计源污染 state.tasks | `stores/project.ts L96` | ✅ `activeTasks: state.tasks.filter(...)` 读 Tasks 当前筛选+分页页 | 高 |
| 7 | ActiveProjectsPanel 同源 | `ActiveProjectsPanel.vue L55` | ✅ `getProjectTaskCount` 同读 `store.tasks`,与 StatCard 数字打架 | 高(与 6 合并) |
| 8 | ApprovalPopup 浮窗无计时 | `ApprovalPopup.vue L38-105` | ✅ grep `waitSecs/waitLevel` 无命中,浮窗确无挂起倒计时 | **降中**(体验,非功能;ToolCard 内联审批有,浮窗缺) |
## 三、高频主题(8)
1. **列表筛选/排序/分页/Tab 状态不持久化**(Tasks/Ideas/Knowledge/Projects/AuditLog/ProjectDetail 多处裸 ref 不入 localStorage)
2. **AuditLog 客户端筛选只作用于当前页 50 条** + hasMore 靠满页推断 + 无总数(4 路共同命中,筛选给人全局错觉)
3. **多处长内容缺折叠/截断**(AI 文本气泡/ConflictResolver 多冲突/HelpRequiredCard 错误堆栈/AuditLog brief 列/ToolResultBody 100px 过小)
4. **后端 git 工具吞错误返假成功**(exec_git 返空串非 Result,`let _=` 丢弃,branch create/switch/commit 三处)
5. **Dashboard 统计源与 Tasks 分页源共用 state.tasks**(统计卡/项目行活跃数被分页/筛选污染,两面板数字打架)
6. **审批体系三入口授权粒度不一致 + 反馈缺失**(ToolCard/ApprovalPopup 三按钮 vs DirAuthDialog 四按钮,拒绝无确认,失败无提示,浮窗无超时计时)
7. **git 子进程缺 CREATE_NO_WINDOW 散落多处**(module.rs/ai/tools/git.rs,Windows 闪窗)且 N² 放大(每次展开全仓 git status)
8. **设计 token 漂移与硬编码**(--df-primary 幽灵变量/git 状态色 3 文件重复硬编码/内联 style 散落)
## 四、实施批次规划
### 🅿 P0 确定性 bug(低风险,本会话首批 · 并行实施)
**批 1 后端(src-tauri,主代理统一 cargo check)**:
- `commands/project.rs` —— 4 处空 if 块补 `return Err`
- `commands/ai/tools/git.rs` —— exec_git 改返 `(String,bool)` 暴露 success;create/switch/commit 验证判定;顺带加 CREATE_NO_WINDOW
- `commands/module.rs` —— `run_git_cmd` 加 CREATE_NO_WINDOW(原问题 9)
**批 2 前端(主代理统一 vue-tsc)**:
- `DependencyGraph.vue` —— 环高亮注入 renderGraph(不再 attr 后 fromJSON)
- `FileExplorer.vue` —— closeDropdown 加 `closest('.module-dropdown')` 判定
- `Tasks.vue` —— 快捷菜单 document click 监听(原问题 11)
### 🅿 P1 体验/数据源(中风险,后续批)
- **数据源解耦**:`stores/project.ts` 统计 + Dashboard + ActiveProjectsPanel 改读独立 count(后端聚合或 store 全量计数),不依赖分页 state.tasks
- **长 AI 文本折叠**:MessageList 文本气泡 max-height+折叠 / ConflictResolver 多冲突折叠 / HelpRequiredCard 堆栈折叠 / ToolResultBody max-height 调大
- **AuditLog**:后端 WHERE 筛选 + 真实 total + 筛选持久化
- **列表状态持久化**:抽 `usePersistedRef` composable,Tasks/Ideas/Knowledge/Projects/ProjectDetail Tab 接入
- **审批体系一致**:ApprovalPopup 浮窗加挂起计时(H1)+ 授权粒度统一 + 拒绝二次确认 + 失败 toast
- **cmd 闪烁 N²**:FileTree 展开缓存的 git status(避免每次全仓扫描)
### 🅿 P2 一致性/打磨
- 幽灵 CSS 变量 `--df-primary` 定义(global.css + 5 处引用)
- git 变更状态色抽设计 token(3 文件硬编码)
- settings 控件统一(原问题 8 延伸:.setting-number/.setting-input/.setting-textarea)
- 死代码清理(PlanProgress.vue 全文件 / MessageList isLastUser+残留 CSS)
### 🅿 批次 I —— 原 12 问题大改(风险大,后续专项)
依赖 P1 数据源的:Dashboard 统计卡压底行(问题 1)。独立大改:Projects 列表/卡片视图(问题 2)、TaskDetail 重设计(问题 4)、IdeaDetail 重设计(问题 5)、KnowledgeDetail 重设计(问题 6)、ProjectDetail 三栏(问题 10)。埋点:project_event_repo 接入(问题 3)。
## 五、中/低严重度详单
38 中 + 34 低,按主题归组见 `audit_summary.json`(字段:highSeverity/mediumSeverity/lowSeverity,每条含 file/location/current/issue/angle/severity/novelty/suggestion)。