Files
DevFlow/docs/05-代码审查/整体UIUX三维走查-2026-09-29.md

8.2 KiB

DevFlow 整体 UI/UX 三维走查 — 易用 / 智能 / 可靠

日期: 2026-09-29 | 统筹: AI-Ops | 方法: 3 路只读子代理并行走查 + 主代理抽查核验 范围: 非 aichat 全部页面(aichat 区已有 09-28/09-29 两轮 56 项覆盖,不重复) 核验: 主代理对高严重度条目抽查 4 条(Knowledge 假成功 toast/阶段徽章硬编码/AiHome 空占位/extractNow 零调用),全部属实 派工: 修复批次与决策项见《02-架构设计/专项设计/aichat上下文管理-派工与决策单-2026-09-29.md》第二部分(UI/UX 扩展节)


一、易用性维度

基线核对: 08-02《UIUX扩展审查》P0+P1 共 12 项全部已修 ✅

项 证据
P0 project.rs 空if块 7f0edce,现 6 处 return Err(project.rs:172/288/380/494/558/813)
P0 git.rs exec_git 返 success+NO_WINDOW git.rs:87-90 (String,bool);:48-60 creation_flags
P0 module.rs NO_WINDOW module.rs:629-634(同 7f0edce)
P0 DependencyGraph 环高亮 :346-348 cycleNodes 经 renderGraph 注入,4df91ed 深化防环
P0 FileExplorer closeDropdown :422-423 closest('.module-dropdown')
P0 Tasks 快捷菜单 :923 document click 监听
P1 统计源解耦 f736f43,stores/project.ts:111-117 独立 COUNT 通道
P1 长 AI 文本折叠 9e85cad,MessageList/ConflictResolver/HelpRequiredCard/ToolResultBody 四处
P1 AuditLog 后端筛选+total audit/record.rs:222-249 WHERE+COUNT
P1 usePersistedRef composable 存在,五页接入
P1 审批体系一致 13ecd7e/4860505 浮窗计时+四键统一+拒绝确认+失败 toast
P1 git status 缓存 5a92e60,module.rs:354-383 TTL 缓存

结论: 08-02 基线 P0/P1 已清零,P2 打磨随近期提交消化大半。易用性存量债已还清。

易用性增量(3 条)

  1. 原生 alert 残留+绕过 i18n: Tasks.vue:828 alert('请选择项目') — Tauri webview 原生弹窗,项目已自建 ConfirmDialog 就是为此,全 views 仅剩此一处
  2. 分离窗口坏参数无错误态: FileExplorerDetached.vue:4-6 ?projectId= 缺失时永远 spinner,无错误/空态
  3. dev 路由进生产: router/index.ts:69-72 /dev/x6 无 import.meta.env.DEV 守卫

其余抽查良好: 删除均有 ConfirmDialog、表单有防双击、详情页有返回路径。

二、智能化维度(AI 触点盘点)

触点地图要点(13 页面)

  • 有触点: TaskDetail(AI 执行推进+TaskOutputCard+自审)、Projects(AI 扫描填表+批量导入 LLM)、Ideas(对抗式评估)、Knowledge(被动收件箱)、Settings(AI 配置齐全)、ApprovalPopup(审批本身)
  • 零触点: Tasks(全页手工,无一处 AI)、Dashboard(纯 SQL 计数)、AuditLog(纯分页)、AiHome(空占位 div,讽刺:AI 首页零内容)
  • 架构缺口: AiChat 不接收业务上下文 props(AiChat.vue:150-152 仅 detached),业务页对 75 个注册工具零触达;唯一上下文通道是用户手打 @提及

空白发现(按 价值×成本 排序,前 5)

  1. 知识库「立即提炼」按钮: 后端链路全就绪零调用 — knowledge_extract_now 已注册(lib.rs:483)/api 已封装(stores/knowledge.ts:191)/views 零引用(grep 实证 0)。自动提炼每会话仅 1 次且失败静默。纯接线活
  2. 想法批量对抗评估: evaluate_ideas_batch(idea.rs:318)已实现,前端无任何调用。Ideas 过滤栏加批量入口即可。纯接线活
  3. 业务页带上下文开 AI 面板(最大架构缺口): useAiPanel 暴露 openWithAugmentation({kind:'task',id}) 预填 @提及+指令模板,复用 augmentation/resolvers.rs 解析链。解锁「就此任务问 AI」全场景
  4. 工作流失败 AI 诊断: 失败仅静态文案,后端已有 failed_node 结构化信息(workflow.rs:411-430)无人消费。失败旁加「AI 诊断」发会话分析
  5. Dashboard AI 洞察位: 统计纯本地计数,项目进度是硬编码映射表(constants/project.ts:52-59 planning=20%/in_progress=55%);AI 工具 get_project_timeline 已能答"上周做了什么"但无产品出口。加 AI 周报卡

其余: 任务推进前风险检查(复用 AiSelfReviewNode)/对话转任务草稿(create_task 工具+idea 关联已有)/项目健康度真实化(先用 count 通道替换映射表,不必 AI)。

交互一致性

AI 触点至少四套范式并存: 入口(🤖 ghost 按钮/accent 实心/header primary/无入口)、失败提示(内联 warning/eval-error/error-banner/自管 toast)各页各异。建议抽「AI 触点」通用组件统一,否则每个新 AI 功能都在复制新样式。

三、可靠性维度(15 条,按严重度)

数据错(成功假象/竞态/重复提交)

  1. Knowledge 新建失败仍弹成功 toast 且丢表单 views/Knowledge.vue:384-393 — store.create 吞错返 null,视图不检查返回值直接关弹窗+success(对照 Projects.vue:304 有 if (!r) return 守卫)
  2. AuditLog 翻页竞态 views/AuditLog.vue:289 — load() 无序号守卫,prevPage/nextPage 无 loading 拦截,慢旧响应覆盖新页数据
  3. TaskDrawer 切任务慢响应覆盖 components/task/TaskDrawer.vue:249-258 — 常驻挂载+watch taskId 触发 load 无守卫,A 数据盖到 B 上
  4. GitChanges 双触发源竞态+失败静默清空 components/project/GitChanges.vue:352 — watch(moduleId)+watch(refreshKey) 并发,旧响应晚到覆盖;:371/:421/:439 三处 catch 静默
  5. 回收站恢复/彻底删除无 pending 禁用 views/Projects.vue:83-84 — 双击同帧两次 purge(不可逆级联物理删)
  6. 灵感状态切换失败零反馈 views/Ideas.vue:452 — 无 try/catch 成 unhandled rejection,badge 静默回弹(同文件其他操作有 catch,此处漏网)

布局破

  1. Diff 长行静默裁剪不可滚动 components/project/FilePreview.vue:1063-1067 — white-space:pre; overflow:hidden flex min-width 归零,diff 核心信息不可读
  2. Markdown 宽表格被裁 views/TaskDetail.vue:916 + TaskOutputCard.vue:93-97 — ai-md.css:59 约定滚动交各页容器,AiChat 加了这两处没加
  3. ConfirmDialog 长路径溢出 components/ConfirmDialog.vue:82-86 — 360px 弹窗无 word-break,Windows 反斜杠路径画出去
  4. 浅色主题滚动条隐身 styles/global.css:132-133 — 白色低透明 thumb 硬编码,light 无 override

视觉契约破坏(硬编码绕过 token)

  1. 任务阶段徽章 6 色 Material 硬编码 views/ProjectDetail.vue:1430-1436 — 浅色主题下 #64b5f6/#ffc107 对比度塌陷;ProjectCard.vue:140 同款
  2. 优先级色零散硬编码 views/Tasks.vue:1247 + TaskDetail.vue:877 + TaskBatchBar.vue:272-273(Element 调色板 #67c23a 非 --df-success)
  3. git untracked 绕过已定义 token GitChanges.vue:671 + FilePreview.vue:658 — #999 而 --df-git-untracked 就定义在 global.css:47
  4. FileExplorer 增删/扫描失败仅 console components/project/FileExplorer.vue:529/545/464 — 无任何 UI 反馈(同款操作 ProjectDetail:812 有 Message.error)
  5. Dashboard 加载失败渲染成空数据假象 views/Dashboard.vue:81-94 — store 吞错写 state.error,页面与两面板均不消费,故障时显示"暂无灵感"+统计归零

干净面(实测确认,无需担心)

stores 层序号守卫(project/tasks/knowledge)与审批链(_approvalInFlight/processingId/submitting)防御完整;看板拖拽/批量动作/双击防护完整;渐变 10 处均 token 填充无违规;FileTree 77 处 hex 为 SVG 图标品牌色合法。


四、专项: AI 工具授权目录体验(用户需求 2026-09-29)

用户实测痛点(截图实证): agent 任务中被路径授权拦截(微信目录属白名单外/敏感路径),工具执行失败,体验中断。

现状体系(audit/path_auth.rs): 三层判定 — 黑名单硬拒(Denied,不挂起)/白名单外挂起(NeedsAuth→DirAuthDialog 四级授权 once/session/always/deny)/白名单放行(Authorized)。

需求: 加「一键放行」总开关。设计建议(已可派工,细节见派工单 A1):

  • 开关落点: check_file_tool_auth 读 Settings KV,bypass 开启时 NeedsAuth→Authorized 直通
  • 黑名单保留硬拒(安全自保护: .ssh/.aws/凭据目录防 AI 误读,与体验无关) — 是否连黑名单一起放行作为子决策 D2
  • UI 显眼性: 开启时对话区常驻横幅「授权已放行」,防静默裸奔(对齐 claude code bypassPermissions 红条先例)