后端(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批次段
6.2 KiB
6.2 KiB
DevFlow UI/UX 扩展审查报告(2026-08-02)
触发:任务
0115aea6「总览页 + 项目列表 UI/UX 优化(持续更新)」原 12 问题清单 方法:基于原 12 问题提炼 15 审查角度(A-O),workflowwf_wynylx23h10 路并行扫描(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)
- 列表筛选/排序/分页/Tab 状态不持久化(Tasks/Ideas/Knowledge/Projects/AuditLog/ProjectDetail 多处裸 ref 不入 localStorage)
- AuditLog 客户端筛选只作用于当前页 50 条 + hasMore 靠满页推断 + 无总数(4 路共同命中,筛选给人全局错觉)
- 多处长内容缺折叠/截断(AI 文本气泡/ConflictResolver 多冲突/HelpRequiredCard 错误堆栈/AuditLog brief 列/ToolResultBody 100px 过小)
- 后端 git 工具吞错误返假成功(exec_git 返空串非 Result,
let _=丢弃,branch create/switch/commit 三处) - Dashboard 统计源与 Tasks 分页源共用 state.tasks(统计卡/项目行活跃数被分页/筛选污染,两面板数字打架)
- 审批体系三入口授权粒度不一致 + 反馈缺失(ToolCard/ApprovalPopup 三按钮 vs DirAuthDialog 四按钮,拒绝无确认,失败无提示,浮窗无超时计时)
- git 子进程缺 CREATE_NO_WINDOW 散落多处(module.rs/ai/tools/git.rs,Windows 闪窗)且 N² 放大(每次展开全仓 git status)
- 设计 token 漂移与硬编码(--df-primary 幽灵变量/git 状态色 3 文件重复硬编码/内联 style 散落)
四、实施批次规划
🅿 P0 确定性 bug(低风险,本会话首批 · 并行实施)
批 1 后端(src-tauri,主代理统一 cargo check):
commands/project.rs—— 4 处空 if 块补return Errcommands/ai/tools/git.rs—— exec_git 改返(String,bool)暴露 success;create/switch/commit 验证判定;顺带加 CREATE_NO_WINDOWcommands/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 + 筛选持久化
- 列表状态持久化:抽
usePersistedRefcomposable,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)。