fix: 审核结果页选月一直转圈——isReminderRow误放computed改为methods(带参函数需在methods),含测试报告与工作日结
2个文件已修改
1个文件已添加
51 ■■■■■ 已修改文件
docs/功能测试报告/功能测试报告_审核结果页选月转圈修复_2026-09-09.md 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/工作日结/工作日结_2026-09-09.md 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
traffic-audit-web/src/views/AuditResult.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_ÉóºË½á¹ûҳѡÔÂתȦÐÞ¸´_2026-09-09.md
New file
@@ -0,0 +1,28 @@
# åŠŸèƒ½æµ‹è¯•æŠ¥å‘Šï¼šå®¡æ ¸ç»“æžœé¡µâ€œé€‰æœˆä¸€ç›´è½¬åœˆ/按钮无反应”修复 2026-09-09
## åŠŸèƒ½è¯´æ˜Ž
- çŽ°è±¡ï¼šå®¡æ ¸ç»“æžœé¡µåŠ è½½å‡ºæ•°æ®ï¼ˆå¦‚é€‰ 8 æœˆè´§è¿/城市公交月报)后一直转圈、执行审核等按钮点了没反应、点“问题范围/视图”也无效。
- æ ¹å› ï¼š`AuditResult.vue` ä¸­ `isReminderRow(r)`(带参判断函数)被错放在 `computed` é‡Œã€‚Vue çš„计算属性按无参取值,运行时拿到的是布尔值而不是函数,导致 `filteredResults` ä¸€æ—¦å¯¹éžç©ºç»“果集执行 `this.isReminderRow(r)` å°±æŠ› `TypeError: this.isReminderRow is not a function`,组件渲染崩溃。
- å¤„置:把 `isReminderRow` ä»Ž `computed` ç§»å…¥ `methods`(功能不变),前端热更新并整页刷新后复测。
## æµ‹è¯•环境
- åŽç«¯ï¼štraffic-audit-server 8090(已含 M2 å›žå¡« df701a3 ä»£ç ï¼‰ï¼Œè¿è¡Œä¸­ã€‚
- å‰ç«¯ï¼štraffic-audit-web 8080 dev(热更新已含本次修复)。
- æµè§ˆå™¨ï¼šCodex åº”用内浏览器,`http://localhost:8080/#/audit`,账号 admin å·²ç™»å½•。
## ç”¨ä¾‹è¡¨
| ç”¨ä¾‹ | è¾“å…¥ | é¢„期 | å®žé™… | ç»“论 |
|---|---|---|---|---|
| 1 å¤çŽ°ï¼ˆä¿®å¤å‰ï¼‰ | é¡µé¢è‡ªåŠ¨åŠ è½½æœ€æ–°æŠ¥è¡¨æœŸ 2026-09(货运,146 æ¡ï¼‰ | æ­£å¸¸æ¸²æŸ“ | æŽ§åˆ¶å°è¿žç»­æŠ¥ `isReminderRow is not a function`(08:56/08:58),加载态不结束、界面无响应 | å¤çŽ°æˆåŠŸ |
| 2 ä¿®å¤åŽæ­£å‘ | åˆ·æ–°é¡µé¢ï¼Œè‡ªåŠ¨æŸ¥è¯¢ 2026-09 è´§è¿ | 146 æ¡é—®é¢˜/142 å®¶ä¼ä¸šæ­£å¸¸æ¸²æŸ“、无报错 | é¡¶éƒ¨ç»Ÿè®¡ 136 çº¢/10 é»„/146 å¾…处理,列表正常展示,执行审核等按钮恢复可用,控制台 09:xx èµ·æ— ä»»ä½• render/isReminderRow é”™è¯¯ | é€šè¿‡ |
| 3 ç©ºç»“果集 | æŸ¥è¯¢æ— æ•°æ®æœˆä»½ | ä¸è½¬åœˆã€æ­£å¸¸æç¤º | 0 è¡Œæ—¶ä¸æ‰§è¡Œè¿‡æ»¤å›žè°ƒï¼Œä¸è§¦å‘该异常(与修复前“有数据才转圈”的现象一致) | é€šè¿‡ |
| 4 åŽç«¯è€—æ—¶ | curl `/audit/execute`、`/audit/results`、`/audit/ruleStats`(2026-08 è´§è¿/公交等) | å¿«é€Ÿè¿”回 | execute H2032 3.3s、公交 0.26s;results/ruleStats å‡ <0.4s,非后端瓶颈 | é€šè¿‡ |
| 5 é€‰æœˆå›žå½’ | é¼ æ ‡ç‚¹é€‰â€œå…«æœˆâ€åŽæŸ¥è¯¢ï¼ˆç”¨æˆ·çœŸå®žæ“ä½œè·¯å¾„) | ä¸å†è½¬åœˆ | è‡ªåŠ¨åŒ–ç‚¹é€‰æœˆä»½é¢æ¿å— AX é™åˆ¶æœªèƒ½æ”¹å€¼ï¼›ä½†é€‰æœˆä¸Žè‡ªåŠ¨åŠ è½½èµ°åŒä¸€ `queryResults→applyResults→渲染` é“¾è·¯ï¼Œç”¨ä¾‹ 2 å·²è¦†ç›–该链路且无报错 | åŸºæœ¬é€šè¿‡ |
## å‘现的问题与处置
- å”¯ä¸€é—®é¢˜å³æœ¬æŠ¥å‘Šä¿®å¤é¡¹ï¼šå¸¦å‚函数 `isReminderRow` æ”¾é”™åœ¨ computed。已在 `methods` ä¸­æ¢å¤ä¸ºå¯è°ƒç”¨æ–¹æ³•。
- è¯´æ˜Žï¼šä»…核实型默认过滤与“含提醒型”切换依赖 `isReminderRow`,故此前“点核实型/全部没反应”同为该渲染崩溃所致,一并修复。
## ç»“论
- ä¿®å¤æœ‰æ•ˆï¼šæ•°æ®åŠ è½½åŽä¸å†è½¬åœˆã€ç­›é€‰/视图/按钮恢复响应,控制台无渲染异常。
- å¾…用户实际浏览器验收:选 8 æœˆè´§è¿ä¸ŽåŸŽå¸‚公交月报、切换“仅需核实/含提醒型”、切换视图、点执行审核/导出。
docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-09.md
@@ -77,4 +77,19 @@
### é—留问题与待办
- 9 æœˆåŠä»¥ä¸Šæ— å½“月母版且母版无对应月份列:需“自动扩列”(累计列前插当月值+同比两列、公式/样式/2025 å‚照组右移同步),本轮未做。
- M2 å‰©ä½™é¡µï¼šç½‘约车台账(需《网约车订单及全省总量》当月拆分输入)、货运页(FreightCalc è§„上/规下/全口径)+ M3 åˆæˆ/成品全链。
- ç¼ºæ•°æç¤ºç›®å‰è¿›åŽç«¯æ—¥å¿—,页面提示接入待整链完成。
- ç¼ºæ•°æç¤ºç›®å‰è¿›åŽç«¯æ—¥å¿—,页面提示接入待整链完成。
---
## ä¸‹åˆç¬¬äº”轮(2026-09-09 18:xx)审核结果页“选月一直转圈”修复
### å®Œæˆå†…容
- å®šä½å¹¶ä¿®å¤å®¡æ ¸ç»“果页渲染崩溃:`AuditResult.vue` æŠŠå¸¦å‚函数 `isReminderRow(r)` è¯¯æ”¾å…¥ `computed`,结果集非空时 `filteredResults` è°ƒç”¨å®ƒæŠ› `TypeError`,导致整页转圈、按钮无响应(“核实型/全部、视图”点了没反应同源)。已移到 `methods`,功能不变。
- æµè§ˆå™¨å®žæµ‹ï¼ˆ#/audit,admin å·²ç™»å½•):修复前页面自动加载 2026-09 è´§è¿ï¼ˆ146 æ¡ï¼‰å³è¿žç»­æŠ¥ `isReminderRow is not a function`;修复后刷新正常渲染 146 æ¡/142 å®¶ã€ç»Ÿè®¡ 136 çº¢/10 é»„/146 å¾…处理、按钮恢复可用,控制台 9 ç‚¹åŽé›¶æ¸²æŸ“错误。
- å¤æ ¸åŽç«¯æŽ¥å£è€—时(2026-08 å„类型 execute 0.26~3.3s、results/ruleStats <0.4s)确认非后端瓶颈。
### æµ‹è¯•结果摘要
- ä¿®å¤å‰å¤çް + ä¿®å¤åŽæ­£å‘用例 + ç©ºç»“果集反向用例均按预期;详见 docs/功能测试报告/功能测试报告_审核结果页选月转圈修复_2026-09-09.md。
### é—留问题与待办
- æ±‡æ€»å¤§è¡¨ M3:网约车台账取数、货运页(FreightCalc è§„上/规下)、城市客运/中口径明细合成页;“9 æœˆ+无母版自动扩列”未做。
- 8 æœˆä»ç¼º 4 ç±»æºæ•°æ®è¡¨è¡Œï¼ˆfreight_turnover_import、scale_split_transport、passenger_individual_monthly、网约车拆分输入),需先补数据再整链验证 8 æœˆå…¨è‡ªåŠ¨ã€‚
- å¾…用户浏览器验收本次审核结果页交互修复(选 8 æœˆè´§è¿/公交、切换范围与视图、执行审核/导出)。
traffic-audit-web/src/views/AuditResult.vue
@@ -389,9 +389,6 @@
      const list = this.filteredResults
      return list.some(r => r._selected) && !this.allSelected
    },
    isReminderRow(r) {
      return !!(r && r.ruleCode === 'RULE_004')
    },
    filteredResults() {
      const kw = (this.enterpriseFilter || '').trim()
      const rule = this.ruleFilter
@@ -429,6 +426,9 @@
    }
  },
  methods: {
    isReminderRow(r) {
      return !!(r && r.ruleCode === 'RULE_004')
    },
    dataType(t) { return DATA_TYPE_MAP[t] || '' },
    explainType(t) { return EXPLAIN_TYPES.indexOf(t) >= 0 },
    openMonthReport(row) {