- 审批卡尊重滚动意图,等长切换回底,排队超时按钮修活 - 带图编辑提示不静默丢,删除目标回写,切换文案消歧 - 会话键盘可达+搜索态重命名,筛选计数口径对齐 - 子任务提示正名,看板加载态 - 主题跟随系统,表单脏态拦截,密钥显隐留空提示
7.0 KiB
7.0 KiB
UX 走查 — 会话管理与任务/项目管理域(2026-10-03)
只读勘察,零代码改动。范围:ConversationSidebar / AppSidebar 集成 / Tasks / TaskDrawer / TaskBatchBar / GitChanges / ProjectCard + 相关 store/composable。 已规避防重复清单:审批徽标、12 截图样式、UX token、removeGoal 回写、任务列表重复渲染+全选框裁切(shot-3)、标题截断(shot-4)。 排序:严重度 P1 → P2 → P3。
P1(3 条)
P1-1 新建任务失败完全静默:错误条被模态遮罩盖住,弹窗不关无任何反馈
- 位置:
src/views/Tasks.vue:827-848(confirmCreate)+src/styles/global.css:201-208 - 链路:store.createTask 失败 → runWithCatch 置 state.error(
src/stores/project/tasks.ts:42)→if (!r) return弹窗保持打开。错误横幅渲染在页面流内(z-index:auto),而.modal-overlay是position:fixed; inset:0; z-index:100全屏遮罩 → 横幅在遮罩之下不可见。 - 用户视角:点「确认」→ 按钮短暂 loading → 恢复,无任何提示,像"点了没反应";只有关掉弹窗才能看到错误条。
- 修向:失败时在 modal 内联展示错误(或失败 toast),不要只依赖页面级 error-banner。
P1-2 会话切换无即时反馈与加载态,快速连点像失灵
- 位置:
src/components/ai/ConversationSidebar.vue:42,107(高亮绑activeConversationId)+src/composables/ai/useAiConversations.ts:275-360 - 链路:switchConversation 在 IPC 返回且 parse 成功后才写
state.activeConversationId(L360,注释明言防错配)。期间:侧栏点击项不高亮、原高亮不动、消息区无 loading 指示(AiChat 全文只有 isCompressing 一个加载态)。大历史会话 IPC 数百 ms 起,用户连点多个会话时全程无视觉响应,直到最后一个完成瞬间跳变。 - 竞态本身已由
_latestSwitchIdtoken + 切换窗口缓冲治理(良好),缺的是进行时反馈。 - 修向:点击即挂 pending 态(半透明/spinner 于目标项),或消息区顶部 loading 条。
P1-3 状态多选筛选 + 数据变更联动刷新:查询语义冲突致列表被冲空
- 位置:
src/views/Tasks.vue:795-807(buildTaskQuery 不传 status)+src/stores/project.ts:70-80(buildActiveTaskQuery 把 status 下沉后端)+Tasks.vue:858(setActiveTaskStatus 传逗号拼接多选) - 链路:视图内刷新走 buildTaskQuery(status 纯前端过滤);但 df-data-changed 事件联动刷新走 buildActiveTaskQuery,把
status="todo,done"这样的多选拼接串传给后端(注释自证"后端 status 单值")→ 后端按单值精确匹配返回空集 → 用户勾着状态芯片时,任何外部任务变更(AI 工具建任务/他视图推进)都让可见行突然清空,与筛选芯片状态直接矛盾。 - 修向:buildActiveTaskQuery 不传 status(对齐视图口径),或后端支持多值。
P2(7 条)
P2-1 状态芯片点击触发冗余服务端重载 + 整列表闪屏
Tasks.vue:857-861:watch(activeStatuses) 调 loadTasks(buildTaskQuery()),但 status 不进 query → 拉回完全相同数据;loading=true时列表区整个替换为一行"加载中"文本(L75,无 spinner)。纯客户端筛选却付出全量重载+闪屏代价。
P2-2 筛选计数与可见行数不符
Tasks.vue:55:filter-count显示store.tasks.length(未过前端 status 过滤);勾选状态芯片后计数不变,与实际可见行数矛盾(同 P1-3 的双口径根因相邻)。
P2-3 TaskDrawer 新建子任务成功提示文案错位
src/components/task/TaskDrawer.vue:326:子任务创建成功 toast 复用tasks.batch.advanceResult("已推进 1 个任务"),语义误导——用户刚做的是"新建"不是"推进"。
P2-4 看板模式无加载态,展示陈旧筛选数据
Tasks.vue:270-302:loading 分支只存在于列表模式(.task-groups 内 L75);看板切项目/搜索期间继续渲染上一筛选的任务卡,无任何"加载中"指示,新旧数据瞬间替换易误读。
P2-5 看板拖拽非法流转静默弹回,无原因反馈
src/composables/task/useTaskKanban.ts:30-34:onMove 返回 false 卡片弹回;仅父卡有 title tooltip(tasks.kanban.parentNoDrag),非父卡因状态机不允许(如 done→todo 之外的路径)被拒时无 toast/提示,用户不知道"为什么拖不过去"。
P2-6 键盘可用性:两域列表项全部不可键盘达
- 会话项/时间分组头(ConversationSidebar L88,102)、任务行/分组头(Tasks L88,98)、看板卡、GitChanges 文件行/提交行、ProjectCard 整卡均为 div+@click,无 tabindex/role/keydown;会话项「...」操作菜单 hover 才 display:flex(CSS L730-738),键盘用户永久够不到置顶/归档/删除。批量栏、快捷菜单、会话菜单均无 Esc 关闭(仅外部点击)。
P2-7 会话操作失败反馈位置错配
useAiConversations.ts:550-559(pushConvOpFail):rename/archive/pin 失败以错误气泡推进聊天消息流,而操作发生在侧栏——视线焦点不在聊天区;若消息区被清空/切换后气泡也可能看不到。侧栏内联轻提示更对位。
P3(7 条)
- P3-1 搜索态功能降级:搜索结果平铺列表不支持双击重命名(ConversationSidebar L36-82 无 startRename 分支);搜索框无 Esc 清空(Tasks 搜索框有
@keyup.esc,不一致)。 - P3-2 首次进入"暂无会话"误导:
conversations.length===0即渲染空态(L214),loadConversations IPC 未返回前无 loading 区分,一闪而过的假空态。 - P3-3 quickDelete 异常路径吞错:
Tasks.vue:536catch 仅 console.error(正常失败走 deleteTask→banner,但 throw 型异常无用户反馈)。 - P3-4 GitChanges 点击文件双 IPC:组件内 getModuleFileDiff(L457)与 FilePreview 自身加载各拉一次 diff;
diffContent/diffLoading为死状态(模板未消费),最终以第二次 emit 覆盖。 - P3-5 批量推进"无共同目标"提示永不可见:TaskBatchBar L11 按钮 disabled 于 advanceTargets 为空,L15 的 tbb-dropdown-empty 分支永远渲染不出,用户不知按钮为何灰。
- P3-6 ProjectCard 工程数静默 0 起显:moduleCount 异步拉取无 loading/骨架,先显 0 再跳变;descOverflow 不随窗口 resize 重测,展开按钮显隐可能失准(ProjectCard L91-100)。
- P3-7 看板同列拖动后 DOM 顺序与数据排序短暂不一致:onEnd 对 to===from 直接 return 不刷新(useTaskKanban L47),卡片停留位置与 store 排序脱节直至下次刷新。
核查良好(不登记)
- 列表竞态:loadTasks seq 守卫(tasks.ts:11)、GitChanges statusReqSeq 双校验、TaskDrawer tid 校验、switchConversation token+切换窗口缓冲——四处竞态防护完整。
- 危险操作确认:会话删除(活跃会话独立强文案)/任务删除(含级联子任务数)/批量删除/项目删除均有 ConfirmDialog,无过度确认(新建会话不确认符合真并发决策)。
- 批量边界:0 选中隐藏批量栏、全选覆盖可见范围、scope 变化 prune 幽灵选中、busy 统一禁用、选中父+子去重级联、批量结果 toast 分 success/warning/error 三态。
- 空态/错误态:GitChanges 骨架屏+主区错误/行内错误分离、看板空列虚线框、Tasks 搜索空态带新建入口,覆盖良好。