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 条)
- 原生 alert 残留+绕过 i18n: Tasks.vue:828
alert('请选择项目')— Tauri webview 原生弹窗,项目已自建 ConfirmDialog 就是为此,全 views 仅剩此一处 - 分离窗口坏参数无错误态: FileExplorerDetached.vue:4-6
?projectId=缺失时永远 spinner,无错误/空态 - 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)
- 知识库「立即提炼」按钮: 后端链路全就绪零调用 —
knowledge_extract_now已注册(lib.rs:483)/api 已封装(stores/knowledge.ts:191)/views 零引用(grep 实证 0)。自动提炼每会话仅 1 次且失败静默。纯接线活 - 想法批量对抗评估:
evaluate_ideas_batch(idea.rs:318)已实现,前端无任何调用。Ideas 过滤栏加批量入口即可。纯接线活 - 业务页带上下文开 AI 面板(最大架构缺口): useAiPanel 暴露
openWithAugmentation({kind:'task',id})预填 @提及+指令模板,复用 augmentation/resolvers.rs 解析链。解锁「就此任务问 AI」全场景 - 工作流失败 AI 诊断: 失败仅静态文案,后端已有 failed_node 结构化信息(workflow.rs:411-430)无人消费。失败旁加「AI 诊断」发会话分析
- 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 条,按严重度)
数据错(成功假象/竞态/重复提交)
- Knowledge 新建失败仍弹成功 toast 且丢表单 views/Knowledge.vue:384-393 — store.create 吞错返 null,视图不检查返回值直接关弹窗+success(对照 Projects.vue:304 有
if (!r) return守卫) - AuditLog 翻页竞态 views/AuditLog.vue:289 — load() 无序号守卫,prevPage/nextPage 无 loading 拦截,慢旧响应覆盖新页数据
- TaskDrawer 切任务慢响应覆盖 components/task/TaskDrawer.vue:249-258 — 常驻挂载+watch taskId 触发 load 无守卫,A 数据盖到 B 上
- GitChanges 双触发源竞态+失败静默清空 components/project/GitChanges.vue:352 — watch(moduleId)+watch(refreshKey) 并发,旧响应晚到覆盖;:371/:421/:439 三处 catch 静默
- 回收站恢复/彻底删除无 pending 禁用 views/Projects.vue:83-84 — 双击同帧两次 purge(不可逆级联物理删)
- 灵感状态切换失败零反馈 views/Ideas.vue:452 — 无 try/catch 成 unhandled rejection,badge 静默回弹(同文件其他操作有 catch,此处漏网)
布局破
- Diff 长行静默裁剪不可滚动 components/project/FilePreview.vue:1063-1067 —
white-space:pre; overflow:hiddenflex min-width 归零,diff 核心信息不可读 - Markdown 宽表格被裁 views/TaskDetail.vue:916 + TaskOutputCard.vue:93-97 — ai-md.css:59 约定滚动交各页容器,AiChat 加了这两处没加
- ConfirmDialog 长路径溢出 components/ConfirmDialog.vue:82-86 — 360px 弹窗无 word-break,Windows 反斜杠路径画出去
- 浅色主题滚动条隐身 styles/global.css:132-133 — 白色低透明 thumb 硬编码,light 无 override
视觉契约破坏(硬编码绕过 token)
- 任务阶段徽章 6 色 Material 硬编码 views/ProjectDetail.vue:1430-1436 — 浅色主题下 #64b5f6/#ffc107 对比度塌陷;ProjectCard.vue:140 同款
- 优先级色零散硬编码 views/Tasks.vue:1247 + TaskDetail.vue:877 + TaskBatchBar.vue:272-273(Element 调色板 #67c23a 非 --df-success)
- git untracked 绕过已定义 token GitChanges.vue:671 + FilePreview.vue:658 —
#999而--df-git-untracked就定义在 global.css:47 - FileExplorer 增删/扫描失败仅 console components/project/FileExplorer.vue:529/545/464 — 无任何 UI 反馈(同款操作 ProjectDetail:812 有 Message.error)
- 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 红条先例)