Files
DevFlow/docs/05-代码审查/UIUX扩展审查-2026-08-02.md
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

6.2 KiB

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)。