!145 docs(xispeak): 归档前端页面 QA 审查报告(用户视角)

* docs(xispeak): 归档前端页面 QA 审查报告(用户视角)
* docs(fixcontact): 归档前端页面 QA 审查报告(用户视角)
* docs(inspectTask): 归档前端页面 QA 审查报告(工程师+用户视角)
* docs(bqtakepulse): 归档前端页面 QA 审查报告(工程师+用户视角)
* docs(bgpartymatter): 归档前端页面 QA 审查报告(工程师+用户视角)
This commit is contained in:
wsm
2026-08-11 07:27:58 +00:00
parent 33dfb1ca9b
commit 237a5810cf
8 changed files with 751 additions and 0 deletions
+87
View File
@@ -0,0 +1,87 @@
# 前端页面审查报告 — 我为四所把把脉(bg/bqtakepulse/BgTakepulseList
## 审查信息
- 页面/路由:`http://127.0.0.1:3100/bg/bqtakepulse/BgTakepulseList`(我为四所把把脉 台账列表)
- 审查日期:2026-08-11
- 审查视角:资深前端工程师(frontend-page-qa,浏览器实测 + 代码审查结合)
- 相关文件:
- `src/views/bg/bqtakepulse/BgTakepulseList.vue`
- `src/views/bg/bqtakepulse/components/BgTakepulseForm.vue``BgTakepulseModal.vue``BgTakepulseBPMForm.vue`
- `src/views/bg/bqtakepulse/BgTakepulse.api.ts``BgTakepulse.data.ts`
- `src/components/Form/src/jeecg/components/SzSelectDept.vue``modal/SzDeptSelectModal.vue`
- `src/components/Form/src/jeecg/hooks/useTreeBiz.ts`
- `src/components/semri/userComponent/DeptRoleUserSelectRadioGroup.vue`
- `src/hooks/system/useMethods.ts`(导出)
- 后端:`BgTakepulseController.java``BgPartymatterController.java``BgXiSpeakController.java`(导出 500 交叉验证)
- 测试账号:`admin` / `123456`mock,唯一账号)
- 证据目录:`qa-tmp/bqtakepulse/`eng_screens/ + scripts/eng*_steps.txt / eng*_api.json / eng*_console.json
> 说明:本报告为工程师视角,先读代码建立假设再浏览器实测。所有 P0/P1 均来自浏览器实测证据;标注「代码推断,待实测」的项只计入 P2(未实测到或实测被 P0 阻断)。
> 视觉维度:以 DOM 结构 + `getComputedStyle` 计算样式评估,**视觉细节需人工复核**(本环境 Read 图片返回 Unsupported,未直接判读截图)。
## 总体结论
- **P0 × 1 P1 × 2 P2 × 9**
- 一句话总结:**「新增」链路被部门树选择失效阻断(P0)**——牵头部门必填但部门树弹窗点选后无法回写值,导致一条新记录都建不出来、查询区也无法按部门筛选;导出 Excel 三个模块全量 500(后端 AutoPoi 共享缺陷)且前端静默吞错无提示;顶部统计标签不随搜索/增删改刷新。页面**当前不建议交付**,需先修 P0。
- 与 UX 报告(`QA_REPORT_UX.md`P0×0/P1×2/P2×6)对比:UX 报告漏掉了**部门树无法回写(P0)**与**统计标签不刷新(P1)**两条——前者是会把用户直接卡死的关键缺陷,工程师视角通过代码(`useTreeBiz.onSelect` 守卫)定位并实测确认。
## P0 - 必须修复
| # | 维度 | 问题描述 | 证据 | 位置 |
|---|------|---------|------|------|
| 1 | 逻辑合理性 / 用户流程 | **部门树弹窗点选后无法回写表单值,新建记录被彻底阻断**。新增弹窗与查询区的「牵头部门」「协办部门」打开部门树后:树节点无复选框、点击节点(如 QLS)仅高亮(`ant-tree-node-selected`),点「确认」后表单输入框仍为空,值不回写。牵头部门为必填项(空表单提交提示「请选择牵头部门」)→ **用户无法通过校验,一条新记录都建不出来**;查询区同样无法按部门筛选。 | 实测:`engC_steps.txt`(点击 QLS→`sel:true`;确认后 input `value:""`);`engB_steps.txt:8-12`(确认后牵头部门仍「请选择」);截图 `engC_query_vs_form_tree.png`(树无复选框)、`engC_dept_after_confirm.png`;提交校验报错含「请选择牵头部门」(`engB_steps.txt` | 前端:`BgTakepulseForm.vue:69,74``BgTakepulseList.vue:28,36``<sz-select-dept :multiple="true" checkStrictly>` 未传 `checkable`);`SzDeptSelectModal.vue`**根因** `useTreeBiz.ts:79-89 onSelect` 守卫 `if (props.checkable == false)`——`checkable` 未传默认 `undefined``undefined == false``false`,分支永不执行,`checkedKeys` 恒空;`getSelectTreeData``:238-249`)只读 `checkedKeys/selectRows` → 确认回传空值。该部门组件改造由 commit `e852ebd`czh-20260612「完成部门组件改造…目前已经把把把脉的组件替换」)引入 |
| | | **修复建议**:给 `SzSelectDept``checkable`(复选框树),或令 `SzDeptSelectModal` 内部 `checkable` 恒为 `true`;并修正 `useTreeBiz.onSelect``checkable === undefined` 的守卫逻辑(按「非 checkable 即 select 模式」处理)。修复后回归:新增弹窗选部门→确认→值回写→提交成功;查询区选部门→列表按部门过滤。 | | |
## P1 - 强烈建议
| # | 维度 | 问题描述 | 证据 | 位置 |
|---|------|---------|------|------|
| 1 | 后端调用 / 用户体验 | **导出 Excel 全部 500,且前端无任何错误提示**。三个模块(bqtakepulse / bgpartymatter / xispeak`exportXls` 均返回 HTTP 500`org.jeecgframework.poi.exception.excel.ExcelExportException: Excel导出错误`AutoPoi/JeecgEntityExcelView 路径);同一列表 EasyExcel 路径 `exportXlsHeaders` 正常(200/xlsx)。前端 `useMethods.exportXls``try/catch``errorMessageMode` 默认 `'none'``FileReader` 的 "success" 判断是死代码 → 用户点「导出」后无响应、无提示,表现为「卡死」。 | 实测:`engA_batch_export.json`(三模块均 500 + 异常类名);`exportXlsHeaders` 200`engA_steps.txt`);截图 `engA_list.png`UX 报告同样实测到(`walk14/15_log.txt` 500×2 | 后端:`BgTakepulseController.java:366-401 exportXls``JeecgEntityExcelView` + AutoPoi);前端:`src/hooks/system/useMethods.ts:23-55``useListPage.ts:66-117`;表头「导出」按钮 `BgTakepulseList.vue:53` |
| | | **根因(后端共享,本次仅报告不改后端)**AutoPoi 1.4.11 与 POI 版本不兼容(源码 `ExcelExportServer.createSheet:213``ExcelExportException``e.getCause()` 为 null,具体堆栈在后端 IntelliJ 控制台不可读)。**前端修复建议**:`useMethods.exportXls``try/catch`,失败 `createMessage.error('导出失败,请稍后重试')`;后端排查 AutoPoi/POI 版本或迁移 EasyExcel 导出。 | | |
| 2 | 状态一致性 | **顶部统计标签(未开始/督办中/已完成)不随搜索、重置、增删改刷新**`statusStats` 仅在 `onMounted` 调用一次:实测搜索无命中(rows=0)后标签仍显示全量「未开始 0 / 督办中 1(已逾期 0)/ 已完成 0」;重置、删除后同样不更新。用户看到的是与列表/筛选结果矛盾的过期统计。 | 实测:`eng2_steps.txt:70-71`(无命中搜索 stats 不变、rows=0);`engA_steps.txt`statusStats 调用数 初始后=1、搜索后=1、重置后=1,仅 mount 一次) | `BgTakepulseList.vue:383-385``onMounted(() => fetchStatusStats())`);`searchQuery:360-364``searchReset``handleSuccess` 均未调用 |
| | | **修复建议**:在 `searchQuery` / `searchReset` / `handleSuccess`(增删改后)里调用 `fetchStatusStats()`,与 xispeak 已实现的「统计标签随搜索/筛选/增删改同步刷新」保持一致。 | | |
## P2 - 建议
| # | 维度 | 问题描述 | 证据 | 位置 |
|---|------|---------|------|------|
| 1 | 用户体验 | **保存成功无任何提示**(代码推断,待实测)。`submitForm``saveOrUpdate``emit('success')`,无 `createMessage.success``BgTakepulseModal.submitSuccess` 同样无 toast。用户保存成功看不到反馈。(因 P0 部门树问题无法走通完整保存,未实测) | 代码:`BgTakepulseForm.vue:391-399``BgTakepulseModal.vue:43-46` | 同上 |
| 2 | 数据源 | **所办领导选项显示为内部编码**`bg_ld_01` / `dd_ld_02`),用户看不出审批人是谁。`queryUserRoleComponentData` 返回的 `realname` 字段就是编码,`DeptRoleUserSelectRadioGroup` 直接渲染 `realname`。根因在数据(用户表 realname 存了编码),前端照实渲染。 | 实测:`engB_steps.txt:16``queryUserRoleComponentData: [{"username":"dd_ld_02","realname":"dd_ld_02"},{"username":"bg_ld_01","realname":"bg_ld_01"}]` | `DeptRoleUserSelectRadioGroup.vue:4` |
| 3 | 数据源 | **部门树节点名称为缩写**QLS、SLD、BG部、DQ部、SZHZX、RH、JJ、DD,非部门全称,用户选部门靠猜。数据来自 `queryTreeList``sys_depart.depart_name`。 | 实测:`engC_steps.txt`(部门树弹窗节点)、`engB_steps.txt`、截图 `engB_dept_tree.png` | `SzDeptSelectModal.vue`(数据源) |
| 4 | 用户体验 | **点击意见主题标题同时触发行展开与详情弹窗**。标题 `<a>``@click="handleDetail"` 未阻止冒泡,表格 `expandRowByClick: true` → 点标题「办理情况」反馈区被一起展开 + 详情弹窗打开,与用户看详情意图冲突。 | 实测:`engD_steps.txt`(点 assac 标题后 `expanded=1``modals=['详情']`);截图 `engD_title_click.png` | `BgTakepulseList.vue:86`title a)、`:220``expandRowByClick: true` |
| 5 | 表单校验 | **牵头部门必填但无红色星号**(代码推断,待实测)。`responDeptid``validatorRules` 仅自定义 validator(值为空时 reject「请选择牵头部门」),无 `required: true` → 表单不渲染必填星号,用户提交失败才知道必填。 | 实测:`eng2_steps.txt:152`(空表单校验错误含「请选择牵头部门」);代码:`BgTakepulseForm.vue:260-269` | `BgTakepulseForm.vue:68-71` |
| 6 | 逻辑合理性 | **bpmStatus 为空时下拉同时出现「发起督办流程」与「再次督办」**(代码推断,待实测)。`getDropDownAction``record.bpmStatus=='1'||!record.bpmStatus``record.bpmStatus=='2'||!record.bpmStatus` 两个独立 if:从未发起过流程(bpmStatus 空)的记录两个入口都会显示,且二者都走 `handleProcess`(功能重复、用户困惑)。 | 代码:`BgTakepulseList.vue:474-485``eng2_steps.txt:143`assac bpmStatus='2' 仅显示「再次督办」,空值分支未被实测到) | `BgTakepulseList.vue:474-485` |
| 7 | 后端调用(性能) | **搜索框每键触发查询,快速筛选产生大量重复请求且无序号守卫**`JInput @change="searchQuery"` 每键入一次发一次 `/list` 请求;实测快速切筛选(assac→ZZZ→assac)触发 14 次 `/list` 请求,存在旧响应覆盖新结果的竞态风险(最终状态正确,但冗余明显)。 | 实测:`eng2_steps.txt:140`(竞态期间 /list 14 次)、`eng3_api.json`(相邻两次同 query 重复请求) | `BgTakepulseList.vue:12``JInput @change="searchQuery"` |
| 8 | 美观 / 表格 | **25 列宽 3848px 横向滚动,仅「操作」列固定右,「完成状态」(第 24 列)等关键列不固定**,横向滚动时无法对照查看。建议固定右侧「完成状态 / 操作」两列。 | 实测:`eng2_steps.txt:137``contentScrollW=3848, contentClientW=1200, fixRight=['操作'], fixLeft=[]`);`BgTakepulse.data.ts` 24 列(含反馈子表共 25 | `BgTakepulseList.vue:223-226``actionColumn.fixed:'right'`)、`BgTakepulse.data.ts` |
| 9 | 控制台告警 | **BaseSelect/VcSelect/ASelect 组件 prop 类型告警泛滥**:控制台大量 `[Vue warn]: Invalid prop: type check failed for prop "onChange"/"onClick". Expected Function, got Array`(牵头/协办部门选择框)。另有布局组件未解析告警(AppSearch/Notify/AppLocalePicker/SettingDrawer/Aide,框架级、非本页)。 | 实测:`eng2_console.json`157KB 告警,`onChange/onClick Expected Function got Array` 重复出现) | 部门选择组件(`BaseSelect`/`VcSelect` 封装对 `onChange/onClick` 传参类型错误) |
## 通过项(做得好的地方)
- 登录、列表加载、数据回显正常;行数据正确。
- 行状态配色生效:首行 `class="... status-row-2"``eng2_steps.txt:145`)。
- 删除有 popconfirm 二次确认(「是否确认删除」),下拉菜单(详情/删除/查询督办流程/再次督办)正常渲染(`eng2_steps.txt:142-148`)。
- 空表单提交校验错误提示清晰且定位到字段:请选择年份 / 请选择密级 / 请输入意见主题 / 请选择牵头部门(`eng2_steps.txt:152`)。
- 密级字典选项正常(非密/内部/秘密/机密);年份选择器可用(`engB_steps.txt`)。
- 「是否需要所办领导审批」开关正确联动「所办领导」字段显隐,不需要时自动清空历史值(`showSupDeptLeader` + `clearSupDeptLeaderIfNotNeeded``BgTakepulseForm.vue:253,302-310`)。
- 竞态测试最终列表状态正确(快速切筛选后 rows=1,无脏数据落库)。
- 导出 EasyExcel 路径(`exportXlsHeaders`)接口正常(200)。
## 未覆盖项(受账号/数据限制)
- **权限多账号对比**:仅有 `admin`,不同角色/密级/部门下的按钮显隐(`v-auth`)、数据范围、只读态未验证。
- **完整「新建→保存成功」链路**:被 P0 部门树阻断,无法走通;「保存无 toast」仅代码推断(P2)。
- **详情编辑保存、模板导入、发起/再次督办流程提交**:为避免产生真实流程实例 / 改动真实数据,未执行提交类操作。
- **视觉细节**:本环境无法直接判读截图,美观/响应式/暗黑主题以 DOM + 计算样式评估,**需人工复核**。
## 测试过程记录
- **脚本**`qa-tmp/bqtakepulse/scripts/eng_probe.py`(初始探针)、`eng_probe2.py`(状态一致性/删除/下拉/固定列/竞态)、`eng_probe3.py`(清空搜索 title=** / QA_TEST 建删)、`eng_probeA.py`(批量导出 500 交叉验证 + statusStats 时机 + 数据源)、`eng_probeB.py`(新建表单/所办领导编码/保存无 toast)、`eng_probeC.py`(部门树选择实证)、`eng_probeD.py`(标题点击展开)。
- **截图**`qa-tmp/bqtakepulse/eng_screens/``eng_02_list_initial.png``engA_list.png``engB_*.png``engC_query_vs_form_tree.png``engC_dept_after_confirm.png``engD_title_click.png``eng2_dropdown.png``eng2_new_validation.png` 等)。
- **网络记录**`engA_batch_export.json`(导出 500×3 + 异常类)、`engB_api.json``eng2_api.json``eng3_api.json``title=**` 清空搜索行为:输入 `assac` 后清空回车发 `title=**`,返回全部)。
- **console**`eng2_console.json``engB_console.json`0 error、87+ warning,主要两类:`onChange/onClick Expected Function got Array` 与布局组件未解析)。
- **关键实测结论**
1. 导出 `exportXls`bqtakepulse/bgpartymatter/xispeak 均 500 `ExcelExportException``exportXlsHeaders` 200 → AutoPoi 导出路径全局失效(后端根因)。
2. `statusStats`:mount 调 1 次,搜索/重置后不再调用,统计标签与列表结果不一致。
3. 部门树弹窗:点节点仅高亮、确认后值不回写(P0 根因)。
4. 所办领导:`queryUserRoleComponentData` realname 为编码。
5. 标题点击:同时展开行 + 打开详情弹窗。
6. 竞态:3 次筛选触发 14 次 `/list` 请求。
- **测试数据卫生**:尝试创建 `QA_TEST_PULSE_ENG_*` 记录,被部门树 P0 阻断未创建成功;全流程未对真实数据做增删改,**无残留数据**。
## 修复优先级建议
1. 先修 P0(部门树选择回写)——否则「新增」功能完全不可用。
2. 同步修 P1:导出失败前端提示(后端 AutoPoi 单独提缺陷);统计标签随筛选/增删改刷新。
3. P2 按性价比排:所办领导/部门树数据源补全名称 → 标题点击 stopPropagation → 搜索防抖/序号守卫 → 固定完成状态列。
+75
View File
@@ -0,0 +1,75 @@
# 前端页面用户视角审查报告 — 我为四所把把脉(bg/bqtakepulse/BgTakepulseList
## 审查信息
- 页面/路由:`http://127.0.0.1:3100/bg/bqtakepulse/BgTakepulseList`
- 审查日期:2026-08-11
- 审查视角:业务用户(兼顾首次使用的新手)
- 相关文件:`src/views/bg/bqtakepulse/BgTakepulseList.vue``BgTakepulseForm.vue``BgTakepulseModal.vue``BgTakepulse.data.ts``BgTakepulse.api.ts`
- 证据目录:`qa-tmp/bqtakepulse/`screenshots/ + walk*.log + new_modal_fields.json + scripts/probe_1920_log.json
> 说明:本报告为"用户视角"审查,所有问题均来自浏览器实测(用户实际操作触发 + 截图/操作日志/后端响应为证)。涉及代码的部分仅用于定位根因,不替代实测。
> 视觉复核:P2-4 已用 claude-vision-skill 复核 1920×1080 截图 + DOM 实测。**vision 只能确认可视区内内容,判断不了被横向滚动藏住的列(曾误判"右边没有未显示列")**,溢出/隐藏列以 DOM 实测(`probe_1920_log.json`)为准。
## 总体结论
- **P0 × 0 P1 × 2 P2 × 6**
- 一句话总结:作为业务用户,这个页面"查台账、看详情、查流程、下载模板"这些日常动作基本能办成,搜索/筛选/校验提示都算顺;但**核心工具栏里的"导出"点了毫无反应(后端 500 静默失败)**,且**新建表单里"牵头部门"这项必填却不打星号、提交失败了才知道**,这两处会让用户卡住或以为系统坏了——页面对新用户"一眼就能上手"还有距离,但主要流程可以走通、数据无损。
## P0 - 用户办不成事 / 会出错
无(实测范围内未发现会导致任务完全无法进行或数据丢失/误导的 P0 项)。
## P1 - 明显受阻 / 容易困惑
| # | 用户场景 | 用户会遇到什么 | 后果 | 证据 | 位置 |
|---|---------|--------------|------|------|------|
| 1 | 台账要拿给领导,点工具栏的"导出" | 点导出后**没有任何反应**:不弹保存、不下载文件、不转 loading、也没有任何成功或失败提示。连点两次都这样。 | 数据导不出去,用户不知道是没点中、是卡了、还是系统坏了,会反复点、找别的方式导出,耽误事 | 实测点击"导出"2 次,后端 `exportXls` 接口**两次都返回 HTTP 500**,页面无 toast/无下载;证据 `qa-tmp/bqtakepulse/screenshots/63_after_export2.png``65_after_export_final.png`network 记录见 `walk14_log.txt`/`walk15_log.txt`500×2toasts 为空) | 表头"导出"按钮(`BgTakepulseList.vue:53`,走 `useListPage``onExportXls`);根因在**后端** `exportXls`(500),前端未把失败反馈给用户 |
| 2 | 新建一条意见,看到必填项随手填 | 牵头部门这一栏**页面上没有任何"必填"星号**,看起来可填可不填;直接提交时却被拦下报"请选择牵头部门"。 | 必填项全靠用户"试错"才知道,提交一次失败一次,让人不耐烦;新手可能以为系统乱拦 | 空表单提交校验报错原文:`请选择年份 / 请选择密级 / 请输入意见主题 / 请选择牵头部门``qa-tmp/bqtakepulse/screenshots/17_validation_empty.png`);而实测弹窗字段结构里**牵头部门 `required: false`、无红色星号**`new_modal_fields.json`);代码 `BgTakepulseForm.vue:260-269``responDeptid` 只写了自定义 validator、rule 里没有 `required` | 新建弹窗表单项"牵头部门"(`BgTakepulseForm.vue:68-71` |
## P2 - 体验细节
| # | 用户场景 | 用户会遇到什么 | 后果 | 证据 | 位置 |
|---|---------|--------------|------|------|------|
| 1 | 想看一下某条意见的详细内容,点意见主题 | 点标题看详情的同时,**下面的"办理情况"反馈区也被一起展开了**,关掉详情弹窗后多出一个我没让打开的展开区,还得手动再收起 | 多一步多余动作,页面状态和用户意图不符,轻微困惑 | 实测点击标题前展开图标为 collapsed,点击后变 expanded 且页面同时出现"办理情况"区(`qa-tmp/bqtakepulse/screenshots/15_title_click_expand.png``walk3_log.txt` A 段) | 标题链接 `@click="handleDetail"` 未阻止冒泡,与 `expandRowByClick: true``BgTakepulseList.vue:220,84-88`)叠加触发 |
| 2 | 要发起督办流程,选"所办领导" | 流程发起弹窗里"所办领导"的选项显示的是**内部编码 `bg_ld_01``dd_ld_02` 而不是人名**,看不出是谁 | 用户无法识别审批人是谁,可能选错人或不敢选;此为流程关键字段 | 实测发起流程弹窗文案含 `所办领导 bg_ld_01 dd_ld_02``qa-tmp/bqtakepulse/screenshots/59_process_modal.png`) | 流程发起弹窗"所办领导"选项(`DeptRoleUserSelectRadioGroup` 渲染;疑似用户表缺可读姓名,根因待后端确认) |
| 3 | 填部门相关的字段(牵头/协办部门) | 部门选择树里显示的是**缩写编码**:QLS、SLD、BG部、DQ部、SZHZX、RH、JJ、DD,新用户看不懂哪个部门是哪个 | 选部门靠猜,容易选错 | 实测部门树节点即这些缩写(`qa-tmp/bqtakepulse/screenshots/25_dept_picker.png``50_dept_picker.png``walk9_log.txt`) | 部门选择组件数据源(部门树本身的数据/编码) |
| 4 | 台账很多列,想看看某条"完成状态/完成时间" | 表格有 25 列且很多宽列,第一屏只看到前 10 列左右,**"完成状态"(第 24 列)在很右边,要一直往右拖才看得到**;"操作"列固定在最右始终可见,反而容易让人以为就这些列 | 每看一条都要大量横向滚动才能看到关键状态,效率低 | 1920×1080 视口 DOM 实测:表格 `.ant-table-content` 总宽 **3848px**、可视区仅 **1680px**`qa-tmp/bqtakepulse/scripts/probe_1920_log.json`;截图 `66_list_1920_viewport.png``66_list_1920_full.png`);列配置 25 列、`完成状态` 为第 24 列未固定(`BgTakepulse.data.ts:8-160`);vision 复核截图确认视口内约 10 列、右端为固定"操作"列 | 表格列配置 `BgTakepulse.data.ts`"完成状态"第 24 列,未固定;"操作"为固定右列) |
| 5 | 搜不到想找的记录 | 空结果显示一张空表 + "暂无数据",**没有"没有匹配数据,去清除筛选"之类的引导**,用户得自己去找上方的"重置" | 轻度困惑,新手可能以为数据丢了 | 实测搜索不存在关键词显示"暂无数据"(`qa-tmp/bqtakepulse/screenshots/06_empty_search.png` | 列表空态(`BgTakepulseList.vue` 未配置空态引导文案) |
| 6 | 删除一条记录 | 删除有二次确认(好),但确认框只写"是否确认删除",**没说删的是哪条、也没提示删除是否可恢复**;且对正在督办中的记录同样允许删 | 误删后无法撤销,确认信息不足以让用户做出正确判断 | 实测删除 popconfirm 文案 `是否确认删除``qa-tmp/bqtakepulse/screenshots/64_delete_popconfirm.png`);代码推断:删除接口不校验 `bpmStatus`,督办中记录也可删(**代码推断,待实测**,未对真实督办中记录执行删除以免破坏数据) | 删除 popconfirm`BgTakepulse.api.ts:65-69``deleteOne` |
## 用户会觉得顺的地方
- **顶部统计标签很直观**:未开始 / 督办中(已逾期 n)/ 已完成 一眼看清整体进度,用户不用数表格就能知道大概情况。
- **空表单提交的校验提示具体、标红**:"请选择年份 / 请选择密级 / 请输入意见主题 / 请选择牵头部门",指哪错哪,比笼统的"请检查必填项"好很多。
- **搜索顺手**:意见主题输入框支持回车即查、提示了"支持模糊查询";四个筛选条件(主题/分管所领导/牵头部门/协办部门)+ 查询/重置,够用。
- **点标题看详情**符合直觉;**行内展开看"办理情况"**并带状态统计标签(未开始/进行中/已完成 + 共 N 条),信息组织清晰。
- **下载模板可用**(实测下载"把把脉-导入模板.xls"成功)。
- **删除有二次确认**,不会一点就没了。
- 行按完成状态着色(黄/红/绿),状态一眼区分(注:实测配色为浅粉彩,单行浅红 #fff1f0 与白行区分度中等,快速扫视可能忽略);"操作"列固定在最右始终可见。
## 12 维度核对结果汇总
| # | 维度 | 通过 | 问题(简写+证据位置) |
|---|------|------|----------------------|
| 1 | 目标达成 | 部分 | 搜索/详情/查流程/下载模板可用;**导出失败无果**(P1-1);新建成功保存链路未能完整实测(见"待实测" |
| 2 | 可发现性 | 通过 | 新增/导出/下载模板/模板校验/模板导入/高级查询都在表头一眼可见;行操作在"更多"下拉 |
| 3 | 可学习性 | 问题 | 牵头部门必填无星标(P1-2);部门树缩写看不懂(P2-3);所办领导显示编码(P2-2) |
| 4 | 效率 | 问题 | 25 列超宽表大量横向滚动(P2-4);新建需填 4 项必填 |
| 5 | 认知负荷 | 问题 | 25 列同屏信息过载;统计标签+工具栏+查询区较满 |
| 6 | 文案清晰度 | 部分 | 校验文案具体;但所办领导编码/部门缩写看不懂(P2-2/3);删除确认文案笼统(P2-6) |
| 7 | 反馈及时性 | 问题 | 导出静默失败无任何提示(P1-1);保存成功是否有提示未实测(见"待实测" |
| 8 | 误操作防护 | 部分 | 删除有确认;但确认信息不点明记录与后果(P2-6);督办中记录删除未做防护(代码推断,待实测) |
| 9 | 空态/加载/错误态 | 部分 | 空搜索"暂无数据"但无清除筛选引导(P2-5);导出失败无错误态(P1-1) |
| 10 | 无障碍细节 | 待实测 | 未用键盘走查关键流程;长文本在宽列内正常换行未发现撑爆 |
| 11 | 视觉一致性 | 通过 | 与平台其他页面(jeecg 风格)一致;行状态配色、操作列固定均正常 |
| 12 | 边界场景 | 部分 | 空表单校验友好;超长文本/特殊字符/快速连点等未专项实测(见"待实测" |
## 用户任务走查记录
- **任务 1:搜索/筛选台账记录** → 登录后进列表,用"意见主题"输入框模糊查 `assac` 命中 1 条;查不存在的词显示"暂无数据";点"重置"恢复全量。各步截图 `01_login → 05_search_assac → 06_empty_search → 07_after_reset`。**顺畅**。
- **任务 2:查看详情 / 展开办理情况** → 点意见主题标题打开"详情"弹窗(只读);同时行被连带展开出现"办理情况"区(P2-1)。显式点展开图标也能看到反馈表(该记录暂无反馈数据)。截图 `08_detail_modal``12_expand_feedback``15_title_click_expand`。**基本顺畅,有 1 处多余展开**。
- **任务 3:新建一条意见记录** → 点"新增"打开表单;空表单点"确 认"被 4 项校验拦下(报错明确、标红字段清晰,见 P2 维度);依次填年份/密级/意见主题并尝试选牵头部门。**自动化未能驱动"部门选择"弹窗把值写回表单(多次尝试未果,属测试手段限制,非用户侧证据)**,因此"成功保存"这一步未实测到;牵头部门必填但无星标为实测发现(P1-2)。截图 `16_new_modal``17_validation_empty``41_secret_dropdown``50_dept_picker`
- **任务 4:查询/发起督办流程** → 在"更多"下拉见"详情/删除/查询督办流程/再次督办"(该记录为督办中,故显示"再次督办"而非"发起督办流程",符合业务);"查询督办流程"打开流程列表(含流程图/审批历史等);"再次督办"打开流程发起弹窗(标题正确、字段齐全,但"所办领导"显示编码——P2-2)。全部只打开未提交,无数据变更。截图 `57_dropdown_assac``58_query_process``59_process_modal`。**顺畅**。
- **任务 5:导出 / 下载模板 / 删除确认** → "下载模板"成功下载 xls"导出"点击后无文件下载、无任何提示,后端 `exportXls` 返回 500(P1-1,实测 2 次);删除弹 popconfirm"是否确认删除"后取消(未删真实数据)。截图 `61_after_template``63_after_export2``65_after_export_final``64_delete_popconfirm`
## 待实测 / 代码推断(未进 P0/P1/P2 分级)
以下项因**无法在本次实测中完成**,按纪律只列在待实测区,不参与级别判定:
1. **新建记录的"成功保存"全链路**:自动化无法驱动"部门选择"弹窗将选择值写回表单,导致表单始终缺"牵头部门"而被校验拦截,未能实测到"保存成功→列表新增→成功反馈"。从代码看保存逻辑(`BgTakepulseModal.handleSubmit → submitForm → saveOrUpdate`)完整,**无证据表明真实用户无法创建记录**,需人工或换一种自动化方式实测确认(包括保存成功后是否有"保存成功"提示——代码中 `submitSuccess` 仅关闭弹窗,未见显式 toast,待实测)。
2. **删除正在督办中(有运行中流程)的记录**:代码中 `deleteOne` 不校验 `bpmStatus`,理论上可直接删掉有流程的记录(可能造成流程与台账脱节)。因会破坏真实数据,**未实测**,仅代码推断(`BgTakepulse.api.ts:65-69`)。
3. **导出失败的根因归属**:实测页面"导出"触发后端 `exportXls` 返回 **HTTP 500**(复现 2 次)。这是后端异常;前端未把失败反馈给用户。属后端问题还是环境问题需后端确认,用户侧影响已按 P1-1 记录。
4. **键盘走查 / 特殊字符 / 超长文本 / 快速连点** 等边界场景未专项实测。
5. **测试数据卫生**:本次尝试创建 `QA_UX_PULSE_*` 记录均未成功(未发送任何新增请求),**无 QA_UX 残留**;实测前后台账记录数均为 1(`assac`),已确认无污染。