_defects.json 77 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652
  1. [
  2. {
  3. "module": "235分站监测",
  4. "file": "src/views/vent/safetyList/common/detail-235.vue:352-369,608-768,888,958-1013",
  5. "title": "235 页面误用 130 协议 API",
  6. "severity": "致命",
  7. "type": "wrong_api",
  8. "symptom": "235 分站参数下发、改名、删除等操作打到 130 接口,控制/配置失败或污染错误协议设备",
  9. "root_cause": "从 detail-130 复制后未替换:set130StationData/update130DevName/remove130Device/remove130Substation;api 中亦无对应 235 写接口",
  10. "repro": "在 235 监测详情编辑并下发任意参数,观察请求 URL 含 130 路径",
  11. "fix_hint": "补齐并改用 235 专用读写/删除 API,移除 130 引用",
  12. "id": "BUG-001",
  13. "status": "新建",
  14. "date": "2026-11-02",
  15. "method": "静态审查"
  16. },
  17. {
  18. "module": "主风机管控",
  19. "file": "src/views/vent/monitorManager/mainFanMonitor/index.vue:1609-1662",
  20. "title": "倒机正转/反转共用同一 paramcode",
  21. "severity": "致命",
  22. "type": "control buttons sharing same paramcode",
  23. "symptom": "changeSmoke1 场景下正启动与反启动都下发 CtrlFan1ToFan2 / CtrlFan2ToFan1,无法区分正反转倒机指令",
  24. "root_cause": "同文件 changeSmoke 分支正确使用 CtrlFan1ToFan2Forward/Reverse 与 CtrlFan2ToFan1Forward/Reverse,但 changeSmoke1 分支正反转都调用无方向后缀的同一点位",
  25. "repro": "风机处于正转/反转运行态触发一键倒机(modalType=changeSmoke1)→ 对比下发 paramcode",
  26. "fix_hint": "与 changeSmoke 分支对齐,正转用 *Forward、反转用 *Reverse",
  27. "id": "BUG-002",
  28. "status": "新建",
  29. "date": "2026-11-02",
  30. "method": "静态审查"
  31. },
  32. {
  33. "module": "喷淋监控系统",
  34. "file": "src/views/vent/monitorManager/sprayMonitor/index.vue:68-140",
  35. "title": "多路控制按钮共用同一 paramcode/value",
  36. "severity": "致命",
  37. "type": "wrong_control_payload",
  38. "symptom": "急停/补水阀/搅拌阀/组化泵/上料机/搅拌电机/上料自动/喷洒自动等按钮下发同一 paramcode,无法区分控制对象",
  39. "root_cause": "operations 全部使用 key='run_auto_sign',且多数 value='0';BasicMonitoring.deviceControl 仅按 key/value 下发",
  40. "repro": "打开喷淋监控 → 分别点击不同操作按钮 → 抓包/日志观察 paramcode 全为 run_auto_sign",
  41. "fix_hint": "为每个操作配置真实设备参数码(如急停、补水阀、搅拌阀等各自 key),并核对 value 语义",
  42. "id": "BUG-003",
  43. "status": "新建",
  44. "date": "2026-11-02",
  45. "method": "静态审查"
  46. },
  47. {
  48. "module": "喷雾降尘监控",
  49. "file": "src/router/helper/routeHelper.ts:21-28,98-113,122-146",
  50. "title": "layouts/RouteView 组件文件缺失导致路由无法解析",
  51. "severity": "致命",
  52. "type": "missing_component",
  53. "symptom": "菜单 component 配为 layouts/RouteView 的父级打开空白/路由失败",
  54. "root_cause": "src/layouts 下无 RouteView.vue;LayoutMap 未注册;dynamicImport 只扫 views/components",
  55. "repro": "后端菜单配置 component=layouts/RouteView 后进入喷雾降尘父路由",
  56. "fix_hint": "新增 layouts/RouteView.vue 并加入 LayoutMap;菜单改为已存在布局",
  57. "id": "BUG-004",
  58. "status": "新建",
  59. "date": "2026-11-02",
  60. "method": "静态审查"
  61. },
  62. {
  63. "module": "多灾融合预警",
  64. "file": "src/views/vent/monitorManager/alarmMonitor/common.api.ts:3-10,46",
  65. "title": "bjlist 引用不存在的 Api.bjlist",
  66. "severity": "致命",
  67. "type": "undefined_api_ref",
  68. "symptom": "瓦斯管道故障诊断轮询请求 url 为 undefined,列表/曲线无法加载",
  69. "root_cause": "enum Api 无 bjlist 成员,但 bjlist() 仍使用 Api.bjlist",
  70. "repro": "宝德矿打开瓦斯预警→管道故障诊断,抓包看请求 URL",
  71. "fix_hint": "恢复 bjlist='/safety/ventanalyAlarmLog/list' 或改用 warningHistoryList 路径",
  72. "id": "BUG-005",
  73. "status": "新建",
  74. "date": "2026-11-02",
  75. "method": "静态审查"
  76. },
  77. {
  78. "module": "抽采泵站管控",
  79. "file": "src/views/vent/monitorManager/gasPumpMonitor/components/gasPumpHome.vue:159-178,355-375,329-333",
  80. "title": "就地/远程与检修控制 paramcode 对调且入参分支不匹配",
  81. "severity": "致命",
  82. "type": "inverted_control_mapping",
  83. "symptom": "点就地/远程下发 jxmsqh;点检修下发 ykjdqh;传 0 时 handlerType 不赋值仍弹密码框",
  84. "root_cause": "changeCtr 写死 jxmsqh、changeMode 写死 ykjdqh;模板传 0/1,函数判 1/2",
  85. "repro": "抽采泵站管控点就地/远程/检修开闭→确认密码→抓包 paramcode",
  86. "fix_hint": "changeCtr→ykjdqh,changeMode→jxmsqh;统一 0/1 分支",
  87. "id": "BUG-006",
  88. "status": "新建",
  89. "date": "2026-11-02",
  90. "method": "静态审查"
  91. },
  92. {
  93. "module": "测风装置管控",
  94. "file": "src/views/vent/monitorManager/windrectMonitor/windrect.api.ts:59; src/views/vent/monitorManager/windrectMonitor/index.vue:769-771",
  95. "title": "测风导出函数实际请求导入接口",
  96. "severity": "致命",
  97. "type": "export calling wrong import API",
  98. "symptom": "一键测风结果导出不会调用 /safety/testwindDetail/exportXls,而是 POST /sys/user/importExcel,导出失败或误触发用户导入接口",
  99. "root_cause": "exportXls 实现写成 defHttp.post({ url: Api.importExcel }),而 index.vue 的 exportExcel 直接调用该函数(未使用正确的 getExportUrl)",
  100. "repro": "打开测风装置管控 → 触发 exportExcel(id) / 结果导出 → 抓包可见请求 importExcel",
  101. "fix_hint": "改为 defHttp.post({ url: Api.exportXls, params }),并确认 method/responseType 与导出一致",
  102. "id": "BUG-007",
  103. "status": "新建",
  104. "date": "2026-11-02",
  105. "method": "静态审查"
  106. },
  107. {
  108. "module": "瓦斯日报分析",
  109. "file": "src/views/vent/gas/gasReportInspect/index-time.vue:62-82",
  110. "title": "空 records 时先访问 [0] 导致挂载崩溃",
  111. "severity": "致命",
  112. "type": "crash_on_mount",
  113. "symptom": "无日报数据时 Cannot read properties of undefined,页面白屏",
  114. "root_cause": "先读 tableList[0].id/content,后才判 length;JSON.parse 无空保护",
  115. "repro": "瓦斯日报分析在 queryReportList 返回空 records 时进入页面",
  116. "fix_hint": "先判空 return;JSON.parse 包 try/catch(index-type/index-lt 同改)",
  117. "id": "BUG-008",
  118. "status": "新建",
  119. "date": "2026-11-02",
  120. "method": "静态审查"
  121. },
  122. {
  123. "module": "瓦斯监测预警",
  124. "file": "src/views/vent/monitorManager/alarmMonitor/common.api.ts:3-10,46",
  125. "title": "bjlist 引用未定义的 Api.bjlist",
  126. "severity": "致命",
  127. "type": "api",
  128. "symptom": "gasWarn 拉取报警历史时 url 为 undefined,请求失败",
  129. "root_cause": "enum Api 未声明 bjlist,但 bjlist() 使用 Api.bjlist",
  130. "repro": "进入瓦斯监测预警并触发 bjlist 调用 → 控制台/网络见 undefined URL",
  131. "fix_hint": "在 Api 中补齐报警历史路径(并与后端对齐),或改为已有正确枚举字段",
  132. "id": "BUG-009",
  133. "status": "新建",
  134. "date": "2026-11-02",
  135. "method": "静态审查"
  136. },
  137. {
  138. "module": "色谱仪报表分析",
  139. "file": "src/views/vent/bundleSpy/bundleSpyTable/index.vue:134-147",
  140. "title": "色谱仪报表被硬编码 mock 覆盖真实 API",
  141. "severity": "致命",
  142. "type": "mock_override",
  143. "symptom": "页面恒显示写死的 10月2日假报表,真实 queryReportData 不调用",
  144. "root_cause": "getbundleSpyInfoList 被注释,改为本地写死 res 对象",
  145. "repro": "打开色谱仪报表分析首页列表 → 数据固定为 10月2日样例,与后端无关",
  146. "fix_hint": "恢复 await getbundleSpyInfoList({ type: 'bundleSpy', ...params }) 并删除硬编码",
  147. "id": "BUG-010",
  148. "status": "新建",
  149. "date": "2026-11-02",
  150. "method": "静态审查"
  151. },
  152. {
  153. "module": "预警联动控制",
  154. "file": "src/views/vent/deviceManager/workingFace/workingFace.api.ts:18-21,79-90",
  155. "title": "智能管控批量删除/导入导出误指向 /sys/user/*",
  156. "severity": "致命",
  157. "type": "wrong_endpoint",
  158. "symptom": "批删打到用户批量删除接口,可能删错资源或失败;单删走 managesys 正确路径",
  159. "root_cause": "deleteBatch/importExcel/exportXls 从用户模块拷贝未改",
  160. "repro": "预警联动勾选多条批删,抓包确认 /sys/user/deleteBatch",
  161. "fix_hint": "改为 /safety/ventanalyManageSystem/deleteBatch 及对应导入导出路径",
  162. "id": "BUG-011",
  163. "status": "新建",
  164. "date": "2026-11-02",
  165. "method": "静态审查"
  166. },
  167. {
  168. "module": "130分站监测",
  169. "file": "src/views/vent/safetyList/common/detail-130.vue:865-892",
  170. "title": "devInfoList 空指针(同 index/detail)",
  171. "severity": "严重",
  172. "type": "null_crash",
  173. "symptom": "130 分站无子设备时列表处理抛错",
  174. "root_cause": "el.children.forEach 未处理 null/undefined devInfoList",
  175. "repro": "打开 130 详情页并选中无设备分站",
  176. "fix_hint": "遍历前 `el.children = el.devInfoList || []`",
  177. "id": "BUG-012",
  178. "status": "新建",
  179. "date": "2026-11-02",
  180. "method": "静态审查"
  181. },
  182. {
  183. "module": "130分站监测",
  184. "file": "src/views/vent/safetyList/safetyList.api.ts:23-25,72,76",
  185. "title": "删除130分站/传感器误调158删除接口",
  186. "severity": "严重",
  187. "type": "api",
  188. "symptom": "130 分站删除可能删错资源或后端拒绝,与 158 接口串用",
  189. "root_cause": "remove130Substation/remove130Device 分别使用 Api.remove158Substation/Api.remove158Device,尽管 enum 已定义 remove130*",
  190. "repro": "130 分站详情执行删除分站或传感器 → 查看请求 URL 是否含 remove158*",
  191. "fix_hint": "改为 Api.remove130Substation / Api.remove130Device",
  192. "id": "BUG-013",
  193. "status": "新建",
  194. "date": "2026-11-02",
  195. "method": "静态审查"
  196. },
  197. {
  198. "module": "158分站监测",
  199. "file": "src/views/vent/safetyList/common/detail.vue:977-1002,1013-1022",
  200. "title": "devInfoList 为空时 forEach 崩溃",
  201. "severity": "严重",
  202. "type": "null_crash",
  203. "symptom": "部分分站无子设备时详细信息表加载失败",
  204. "root_cause": "el.children = el.devInfoList 后未判空直接 forEach(getStationList1/getStationListAll)",
  205. "repro": "选择无测点的分站查看详细信息",
  206. "fix_hint": "使用可选链或默认空数组后再遍历",
  207. "id": "BUG-014",
  208. "status": "新建",
  209. "date": "2026-11-02",
  210. "method": "静态审查"
  211. },
  212. {
  213. "module": "一张表",
  214. "file": "src/views/vent/monitorManager/deviceMonitor/staticSheets/gasSheet.vue:1-151",
  215. "title": "瓦斯一张表静态硬编码 HTML,无实时数据",
  216. "severity": "严重",
  217. "type": "data",
  218. "symptom": "瓦斯参数表固定静态内容,非实时监测",
  219. "root_cause": "硬编码表格,无数据请求",
  220. "repro": "打开瓦斯一张表观察数据不更新",
  221. "fix_hint": "接入瓦斯监测/抽采接口动态填充",
  222. "id": "BUG-015",
  223. "status": "新建",
  224. "date": "2026-11-02",
  225. "method": "静态审查"
  226. },
  227. {
  228. "module": "光纤测温监测",
  229. "file": "src/views/vent/monitorManager/deviceMonitor/components/device/modal/fiber.modal.vue:239-243",
  230. "title": "光纤弹窗 Object.keys(readData) 空指针",
  231. "severity": "严重",
  232. "type": "null deref on mount/update",
  233. "symptom": "设备无 readData 时打开弹窗直接 TypeError",
  234. "root_cause": "未判断 item.readData 即 Object.keys(item.readData)",
  235. "repro": "选中 readData 为空的光纤设备打开详情",
  236. "fix_hint": "if (!item.readData) return; 后再解析分段温度",
  237. "id": "BUG-016",
  238. "status": "新建",
  239. "date": "2026-11-02",
  240. "method": "静态审查"
  241. },
  242. {
  243. "module": "光纤测温监测",
  244. "file": "src/views/vent/monitorManager/deviceMonitor/components/device/modal/fiber.modal.vue:49,169-188,232-257",
  245. "title": "光纤详情风险等级与预警历史写死假数据",
  246. "severity": "严重",
  247. "type": "mock hardcode replacing real API",
  248. "symptom": "风险等级恒为“低风险”,预警历史永远是测点6/318℃等假记录,不随真实报警变化",
  249. "root_cause": "模板写死低风险;warningConfig.data 硬编码数组,watch 未用真实告警填充",
  250. "repro": "打开光纤测温弹窗 → 对比真实告警与滚动板内容",
  251. "fix_hint": "绑定设备真实风险字段与告警历史接口/数据",
  252. "id": "BUG-017",
  253. "status": "新建",
  254. "date": "2026-11-02",
  255. "method": "静态审查"
  256. },
  257. {
  258. "module": "喷淋监控系统",
  259. "file": "src/components/vent/BasicMonitoring.vue:19,193-201",
  260. "title": "操作列表 :key 冲突 + 空场景崩溃",
  261. "severity": "严重",
  262. "type": "vue_key_collision/null_crash",
  263. "symptom": "喷淋多个按钮共用 key 导致 DOM 复用异常;无场景数据时页面直接抛错白屏",
  264. "root_cause": "v-for 使用 item.key 作唯一键但喷淋键重复;getSysDataSource 无空数组守卫直接取 options[0].id",
  265. "repro": "1) 打开喷淋页观察按钮交互状态错乱;2) 后端返回空 records 时进入页面立即报错",
  266. "fix_hint": "key 使用 label 或唯一 id;取首项前判断 records.length",
  267. "id": "BUG-018",
  268. "status": "新建",
  269. "date": "2026-11-02",
  270. "method": "静态审查"
  271. },
  272. {
  273. "module": "喷雾降尘监控",
  274. "file": "src/views/vent/home/configurable/dust.vue:87-93",
  275. "title": "服务端配置被测试数据覆盖且只用 Mock",
  276. "severity": "严重",
  277. "type": "hardcoded_override",
  278. "symptom": "粉尘首页始终展示 testConfigDust + BDDustMock,真实监测数据不刷新",
  279. "root_cause": "fetchConfigs('dust') 后强制 configs=testConfigDust,并用 Promise.resolve(BDDustMock) 代替 getHomeData",
  280. "repro": "任意环境打开粉尘可配置首页,对比接口与页面数据源",
  281. "fix_hint": "生产移除测试覆盖,恢复 getHomeData 轮询",
  282. "id": "BUG-019",
  283. "status": "新建",
  284. "date": "2026-11-02",
  285. "method": "静态审查"
  286. },
  287. {
  288. "module": "喷雾降尘监控",
  289. "file": "src/views/vent/home/configurable/dustControl.vue:53-54",
  290. "title": "错误 pageType 拉取后再覆盖测试配置",
  291. "severity": "严重",
  292. "type": "wrong_param/hardcoded_override",
  293. "symptom": "降尘管控页配置与粉尘业务不匹配,最终仍被本地测试配置覆盖",
  294. "root_cause": "fetchConfigs('mine_fire') 后 configs.value=testConfigDustControl",
  295. "repro": "打开 dustControl 页检查 configuration 请求 pageType 与最终 configs",
  296. "fix_hint": "使用正确粉尘 pageType,并按环境决定是否使用测试配置",
  297. "id": "BUG-020",
  298. "status": "新建",
  299. "date": "2026-11-02",
  300. "method": "静态审查"
  301. },
  302. {
  303. "module": "多灾融合预警",
  304. "file": "src/views/vent/monitorManager/alarmMonitor/warn/gasWarn.vue:311",
  305. "title": "gasGlFaultDia 无防护 JSON.parse 可抛错",
  306. "severity": "严重",
  307. "type": "crash_on_mount",
  308. "symptom": "缺/非法 gasGlFaultDia 时脚本异常,故障诊断页中断",
  309. "root_cause": "JSON.parse(data.readData.gasGlFaultDia) 无空值与 try/catch",
  310. "repro": "故障诊断选中无 gasGlFaultDia 的设备",
  311. "fix_hint": "JSON.parse(x||'{}') 并 catch 给默认坐标",
  312. "id": "BUG-021",
  313. "status": "新建",
  314. "date": "2026-11-02",
  315. "method": "静态审查"
  316. },
  317. {
  318. "module": "多灾融合预警",
  319. "file": "src/views/vent/monitorManager/alarmMonitor/warn/ventilateWarn.vue:239-250",
  320. "title": "从巷道阻力分析切回通风监测后轮询不恢复",
  321. "severity": "严重",
  322. "type": "timer_not_restarted",
  323. "symptom": "切回通风监测后顶部/测点停止自动刷新",
  324. "root_cause": "btnClick(0) 只 clearNetTimer+getMenuList,未 getMonitor(true)",
  325. "repro": "通风监测→巷道阻力→再点通风监测,等待>3s 看是否更新",
  326. "fix_hint": "ind===0 时调用 getMonitor(true)",
  327. "id": "BUG-022",
  328. "status": "新建",
  329. "date": "2026-11-02",
  330. "method": "静态审查"
  331. },
  332. {
  333. "module": "多灾融合预警",
  334. "file": "src/views/vent/monitorManager/alarmMonitor/warn/fireWarn.vue:74-83,148-157,173-185,215-217",
  335. "title": "匿名 setTimeout 未清理且 getMonitor 不先 clear",
  336. "severity": "严重",
  337. "type": "timer_leak",
  338. "symptom": "快速切换/离开后仍请求 sysTypeWarn;可能双轮询",
  339. "root_cause": "cardClick/reset 的 setTimeout 无句柄;getMonitor 赋值前不清旧 timer",
  340. "repro": "火灾预警连点内因/外因后返回首页,抓包仍见请求",
  341. "fix_hint": "保存 delay timer 并在 unmount clear;getMonitor 开头 clearPollTimer",
  342. "id": "BUG-023",
  343. "status": "新建",
  344. "date": "2026-11-02",
  345. "method": "静态审查"
  346. },
  347. {
  348. "module": "多灾融合预警",
  349. "file": "src/views/vent/monitorManager/alarmMonitor/common/external-fourc.vue:147-153",
  350. "title": "四参外因温度误绑 fireval",
  351. "severity": "严重",
  352. "type": "wrong_field_binding",
  353. "symptom": "温度监测显示错误/空",
  354. "root_cause": "与 threec 相同拷贝错误 val: el.readData.fireval",
  355. "repro": "打开外因四参温度列表",
  356. "fix_hint": "改为 temperature",
  357. "id": "BUG-024",
  358. "status": "新建",
  359. "date": "2026-11-02",
  360. "method": "静态审查"
  361. },
  362. {
  363. "module": "多灾融合预警",
  364. "file": "src/views/vent/monitorManager/alarmMonitor/warn/gasWarn.vue:346-365",
  365. "title": "宝德矿第三 Tab 映射到瓦斯参数而非预警指标",
  366. "severity": "严重",
  367. "type": "wrong_field_binding",
  368. "symptom": "菜单第三项「预警指标」点击却渲染 gasParamter(wscs)",
  369. "root_cause": "getMonitorComponent(宝德)=[预警监测,故障诊断,预警指标];btnClick ind===2 固定 isShow='wscs'",
  370. "repro": "sysOrgCode=sdmtjtbdmk 打开瓦斯预警点第三个类型按钮",
  371. "fix_hint": "宝德 ind===2 → yjzb;布尔台 ind===2 保持 wscs",
  372. "id": "BUG-025",
  373. "status": "新建",
  374. "date": "2026-11-02",
  375. "method": "静态审查"
  376. },
  377. {
  378. "module": "多灾融合预警",
  379. "file": "src/views/vent/monitorManager/alarmMonitor/warn/gasWarn.vue:368-377",
  380. "title": "宝德预警监测卡片误走故障诊断轮询",
  381. "severity": "严重",
  382. "type": "wrong_comparison",
  383. "symptom": "预警监测点卡片会走 bjlist,菜单被故障设备覆盖",
  384. "root_cause": "cardClick 仅按 isflag=='1' 分支,未看 isShow/activeIndex",
  385. "repro": "宝德→预警监测→切换工作面卡片,观察是否请求 bjlist",
  386. "fix_hint": "yjjc→getMonitor;gzzd→getMonitor1",
  387. "id": "BUG-026",
  388. "status": "新建",
  389. "date": "2026-11-02",
  390. "method": "静态审查"
  391. },
  392. {
  393. "module": "多灾融合预警",
  394. "file": "src/views/vent/monitorManager/alarmMonitor/alarmHistoryTable.vue:166-167",
  395. "title": "未传 deviceType 时 strtype 变成 \"undefined*\"",
  396. "severity": "严重",
  397. "type": "wrong_field_binding",
  398. "symptom": "设备预警报警历史过滤错误,列表空或错数据",
  399. "root_cause": "beforeFetch: props.deviceType + '*';deviceWarn.vue:43 未传 deviceType",
  400. "repro": "设备监测预警→报警历史,检查请求 strtype",
  401. "fix_hint": "传入正确 deviceType,或空时不拼 strtype",
  402. "id": "BUG-027",
  403. "status": "新建",
  404. "date": "2026-11-02",
  405. "method": "静态审查"
  406. },
  407. {
  408. "module": "多灾融合预警",
  409. "file": "src/views/vent/monitorManager/alarmMonitor/common/external-threec.vue:118-124",
  410. "title": "温度传感器列表误绑 fireval",
  411. "severity": "严重",
  412. "type": "wrong_field_binding",
  413. "symptom": "外因火灾温度卡片显示火焰字段/空值",
  414. "root_cause": "temperature.map 使用 readData.fireval;mainWell 正确用 temperature",
  415. "repro": "外因火灾 temperature 有值、fireval 空时看温度卡",
  416. "fix_hint": "改为 el.readData.temperature(fourc:147-153 同步)",
  417. "id": "BUG-028",
  418. "status": "新建",
  419. "date": "2026-11-02",
  420. "method": "静态审查"
  421. },
  422. {
  423. "module": "多灾融合预警",
  424. "file": "src/views/vent/monitorManager/alarmMonitor/warn/gasWarn.vue:193",
  425. "title": "甲烷显示运算符优先级错误",
  426. "severity": "严重",
  427. "type": "wrong_operator_precedence",
  428. "symptom": "gasC 为空时显示 \"undefined%\" 而非 '--'",
  429. "root_cause": "el.readData.gasC + '%' || '--' 中字符串恒 truthy",
  430. "repro": "测点 gasC 缺失时看左侧甲烷值",
  431. "fix_hint": "(gasC!=null&&gasC!=='') ? gasC+'%' : '--'",
  432. "id": "BUG-029",
  433. "status": "新建",
  434. "date": "2026-11-02",
  435. "method": "静态审查"
  436. },
  437. {
  438. "module": "多灾融合预警",
  439. "file": "src/views/vent/monitorManager/alarmMonitor/warn/dustWarn.vue:131-143,166-176",
  440. "title": "粉尘预测曲线每轮 push 不清理导致无限膨胀",
  441. "severity": "严重",
  442. "type": "timer_state_leak",
  443. "symptom": "停留越久曲线点越多、内存升高",
  444. "root_cause": "fillChartByIndex 每秒 echartYc.push;仅 topAreaClick 会清空",
  445. "repro": "粉尘预警停留数分钟观察 echartYc 长度",
  446. "fix_hint": "每次 fill 前重置 echartYc,或替换最新点",
  447. "id": "BUG-030",
  448. "status": "新建",
  449. "date": "2026-11-02",
  450. "method": "静态审查"
  451. },
  452. {
  453. "module": "多灾融合预警",
  454. "file": "src/views/vent/monitorManager/alarmMonitor/warn/ventilateWarn.vue:10",
  455. "title": "返回按钮权限取反",
  456. "severity": "严重",
  457. "type": "inverted_permission",
  458. "symptom": "有 gasWarn:return 权限看不到返回;无权限反而显示",
  459. "root_cause": "v-if=\"!hasPermission(...)\";对照 deviceMonitorWarn 为正逻辑",
  460. "repro": "分配 gasWarn:return 后对比返回按钮显隐",
  461. "fix_hint": "改为 hasPermission;fire/dust/ventilate/device/waterLevel 同步",
  462. "id": "BUG-031",
  463. "status": "新建",
  464. "date": "2026-11-02",
  465. "method": "静态审查"
  466. },
  467. {
  468. "module": "安全监控分站管理",
  469. "file": "src/views/vent/safetyList/index.vue:234-257,408-417",
  470. "title": "卸载引用未定义 timer + children 空指针 + 分页 total 错误",
  471. "severity": "严重",
  472. "type": "reference_error/null_crash",
  473. "symptom": "离开页面报 timer is not defined;devInfoList 为空时列表渲染崩溃;分页总数异常",
  474. "root_cause": "timer 声明被注释但 onUnmounted 仍引用;el.children=el.devInfoList 后直接 forEach;res.total 在数组结果上常为 undefined",
  475. "repro": "进入页再离开;返回含 null devInfoList 的分站;观察 pagination.total",
  476. "fix_hint": "删除或恢复 timer;`(el.devInfoList||[]).forEach`;按接口实际结构取 records/total",
  477. "id": "BUG-032",
  478. "status": "新建",
  479. "date": "2026-11-02",
  480. "method": "静态审查"
  481. },
  482. {
  483. "module": "密闭监测系统",
  484. "file": "src/views/vent/monitorManager/obfurageMonitor/index.vue:89-138",
  485. "title": "空数据崩溃且切换系统不刷新关联设备",
  486. "severity": "严重",
  487. "type": "null_crash/stale_state",
  488. "symptom": "无密闭系统/无关联设备时崩溃;切换密闭点后历史页设备 Tab 仍是旧设备",
  489. "root_cause": "直接访问 msgTxt[0]、deviceArr[0];getSelectRow 只改 optionValue,未调用 getDeviceList",
  490. "repro": "空数据进页;有多套密闭→切换后打开历史监测看设备按钮未更新",
  491. "fix_hint": "空数组守卫;getSelectRow 内调用 getDeviceList()",
  492. "id": "BUG-033",
  493. "status": "新建",
  494. "date": "2026-11-02",
  495. "method": "静态审查"
  496. },
  497. {
  498. "module": "局部风机管控",
  499. "file": "src/views/vent/monitorManager/fanLocalMonitor/index.vue:782-791",
  500. "title": "风筒直径控制按钮重复且同 key",
  501. "severity": "严重",
  502. "type": "control buttons sharing same paramcode",
  503. "symptom": "控制区出现两个相同“风筒直径”按钮,key 均为 diameter,行为完全重复",
  504. "root_cause": "leftBtnArr 中 diameter 配置项被复制粘贴两次",
  505. "repro": "开启 fanLocal:diameter → 顶部控制按钮可见重复项",
  506. "fix_hint": "删除重复配置;若本意为主/备直径,需不同 key 与 paramcode",
  507. "id": "BUG-034",
  508. "status": "新建",
  509. "date": "2026-11-02",
  510. "method": "静态审查"
  511. },
  512. {
  513. "module": "工作面来压预警",
  514. "file": "src/views/vent/monitorManager/betKy/index.vue:112-146,148-154,258-262",
  515. "title": "矿压监测轮询逻辑错误且特定矿用假数据",
  516. "severity": "严重",
  517. "type": "mock hardcode + setInterval/setTimeout poll without proper clear",
  518. "symptom": "A02A02 矿强制使用 ceshi.json;轮询前把 timer 置 null 未 clearTimeout,chartData 每次 push 不清理导致曲线数据膨胀错乱;卸载用 clearInterval 清 setTimeout",
  519. "root_cause": "chartData 每轮 push 不清空;timer=setTimeout 却 clearInterval;重启只置 null 不 clear",
  520. "repro": "返回含 readData=null 的 Minepressure 列表",
  521. "fix_hint": "每轮 chartData=[];统一 clearTimeout 并先 clear 再置空",
  522. "id": "BUG-035",
  523. "status": "新建",
  524. "date": "2026-11-02",
  525. "method": "静态审查"
  526. },
  527. {
  528. "module": "报表数据映射",
  529. "file": "src/views/vent/reportManager/comment/reportMap.vue:82-119,135-145",
  530. "title": "reactive 表单被整体重赋值 + 部门树空 children 崩溃",
  531. "severity": "严重",
  532. "type": "reactivity_break/null_crash",
  533. "symptom": "新增/编辑后表单状态异常;部门节点无 children 时查询部门树直接报错",
  534. "root_cause": "handleAdd/handleEdit 执行 formState = { ... },替换了 reactive 代理",
  535. "repro": "编辑一条映射再点新增观察表单残留;部门树缺 children 的节点触发加载",
  536. "fix_hint": "用 Object.assign(formState, ...) 或重置字段;forEach 前守卫 children",
  537. "id": "BUG-036",
  538. "status": "新建",
  539. "date": "2026-11-02",
  540. "method": "静态审查"
  541. },
  542. {
  543. "module": "报表数据映射",
  544. "file": "src/views/vent/reportManager/comment/report-modal.vue:135-151",
  545. "title": "编辑时 JSON.parse(mineCells) 在非字符串时抛错",
  546. "severity": "严重",
  547. "type": "type_error",
  548. "symptom": "编辑已有映射弹窗打开失败或控制台 TypeError",
  549. "root_cause": "watch 中无条件 JSON.parse(formStates.mineCells);接口若已反序列化为数组则解析失败;且 Object.assign 不会清除旧 id",
  550. "repro": "打开编辑,当 record.mineCells 为数组或空时复现",
  551. "fix_hint": "typeof===string 再 parse,数组则直接使用;新增时显式清空 id",
  552. "id": "BUG-037",
  553. "status": "新建",
  554. "date": "2026-11-02",
  555. "method": "静态审查"
  556. },
  557. {
  558. "module": "抽采泵站管控",
  559. "file": "src/views/vent/gas/gasPumpMonitor/components/monitorChart.vue:50-65",
  560. "title": "setInterval 用 clearTimeout 清理导致泄漏",
  561. "severity": "严重",
  562. "type": "timer_not_cleared",
  563. "symptom": "离开监测图表后仍每 2s 推数据",
  564. "root_cause": "setInterval + onUnmounted clearTimeout",
  565. "repro": "进入监测图表后切走,观察回调是否继续",
  566. "fix_hint": "改为 clearInterval(timer)",
  567. "id": "BUG-038",
  568. "status": "新建",
  569. "date": "2026-11-02",
  570. "method": "静态审查"
  571. },
  572. {
  573. "module": "抽采泵站管控",
  574. "file": "src/views/vent/gas/gasPumpMonitor/index.vue:57-68",
  575. "title": "井下泵模型切换后被无条件覆盖为地上泵",
  576. "severity": "严重",
  577. "type": "copy_paste_bug",
  578. "symptom": "选中 pump_under* 仍加载地上 gasPump 三维",
  579. "root_cause": "if/else 设类型后末尾又 setModelType('gasPump')",
  580. "repro": "抽采泵站监测切到井下泵站设备",
  581. "fix_hint": "删除末尾无条件 setModelType('gasPump')",
  582. "id": "BUG-039",
  583. "status": "新建",
  584. "date": "2026-11-02",
  585. "method": "静态审查"
  586. },
  587. {
  588. "module": "抽采达标评判",
  589. "file": "src/views/vent/gas/gasAssessment/components/gasUnit.vue:27,55,73-75",
  590. "title": "单元混量/纯量图表写死 mock",
  591. "severity": "严重",
  592. "type": "mock_override",
  593. "symptom": "图表恒为本地假数据,真实监测不驱动",
  594. "root_cause": "CustomChart 绑定 mockGasUnitHlData/mockGasUnitClData",
  595. "repro": "打开抽采单元对比接口与图表数据源",
  596. "fix_hint": "用接口历史数据替换 mock",
  597. "id": "BUG-040",
  598. "status": "新建",
  599. "date": "2026-11-02",
  600. "method": "静态审查"
  601. },
  602. {
  603. "module": "抽采达标评判",
  604. "file": "src/views/vent/gas/gasAssessment/components/gasControl.vue:32-40,88-112",
  605. "title": "调控页 getMonitor 空转且阀门无绑定",
  606. "severity": "严重",
  607. "type": "incomplete",
  608. "symptom": "测点值始终为空;阀门开度输入/控制按钮无事件与接口",
  609. "root_cause": "getMonitor 仅 setTimeout 自调用不请求数据;阀门区无 @click/API",
  610. "repro": "打开抽采达标评判-调控相关页 → 测点 '-'、按钮无响应",
  611. "fix_hint": "接入监测 list API 填充 dataSource;为阀门控制绑定下发接口",
  612. "id": "BUG-041",
  613. "status": "新建",
  614. "date": "2026-11-02",
  615. "method": "静态审查"
  616. },
  617. {
  618. "module": "抽采达标评判",
  619. "file": "src/views/vent/gas/gasAssessment/index.vue:43",
  620. "title": "进入抽采单元页未传入 unitId",
  621. "severity": "严重",
  622. "type": "wrong_field_binding",
  623. "symptom": "侧栏 list({ids}) 为空,实时数据无法对应选中单元",
  624. "root_cause": "<gasUnit/> 未绑定 :unitId=\"activeUnitId\"",
  625. "repro": "达标评判点选单元后看 list 请求 ids",
  626. "fix_hint": "<gasUnit :unitId=\"activeUnitId\" />",
  627. "id": "BUG-042",
  628. "status": "新建",
  629. "date": "2026-11-02",
  630. "method": "静态审查"
  631. },
  632. {
  633. "module": "抽采达标评判/瓦斯抽采单元",
  634. "file": "src/views/vent/gas/gasAssessment/components/{gasEcharts,gasUnit,gasPipingEcharts}.vue:gasEcharts 14-47; gasUnit 27,55; gasPipingEcharts 13-99",
  635. "title": "图表永久绑定 mock* 数据",
  636. "severity": "严重",
  637. "type": "data",
  638. "symptom": "抽采单元/管网相关图表始终显示 gasAssessment.data 中的 mock 曲线/饼图,即使列表接口已取到真实测点",
  639. "root_cause": "模板 :chart-data/:dataSource 直接绑定 mockGasUnitData/mockPieData/mockGasPiping* 等,未接入接口结果",
  640. "repro": "进入抽采达标评判相关子页 → 图表不随实时监测变化",
  641. "fix_hint": "用接口返回历史/累计数据替换 mock 绑定;gasUnit 已有 list(),应生成 chart-data",
  642. "id": "BUG-043",
  643. "status": "新建",
  644. "date": "2026-11-02",
  645. "method": "静态审查"
  646. },
  647. {
  648. "module": "掘进面智能管控",
  649. "file": "src/views/vent/monitorManager/tunFaceMonitor/components/tunFaceHome.vue:254,262-271",
  650. "title": "掘进面首页无条件解包 warnInfo/readData",
  651. "severity": "严重",
  652. "type": "null deref on mount",
  653. "symptom": "缺 dustS/fireS/gasS/synthesizeS/ventS、缺 surface_history、或缺 location.readData 时页面直接崩溃",
  654. "root_cause": "无守卫直接访问 res['warnInfo'][x]['devices']、res['surface_history'][0]、data['readData']['flen']",
  655. "repro": "接口缺任一 warn 分组或 location.readData → 打开掘进面主页",
  656. "fix_hint": "逐层可选链;缺省赋空数组/空对象",
  657. "id": "BUG-044",
  658. "status": "新建",
  659. "date": "2026-11-02",
  660. "method": "静态审查"
  661. },
  662. {
  663. "module": "文件共享中心",
  664. "file": "src/views/vent/performance/fileDetail/index.vue:292-314,367-377,387",
  665. "title": "空树上标崩溃 + 可空文件上传 + nodeParam 丢失响应式",
  666. "severity": "严重",
  667. "type": "null_crash/invalid_upload",
  668. "symptom": "无目录时白屏;未选文件仍可点确定上传;树节点切换后表格参数可能异常",
  669. "root_cause": "listArr[0] 无守卫;handleOk 不校验 fileList;nodeParam=node 重赋放弃 reactive",
  670. "repro": "空目录数据进页;打开上传不选文件点确定;切换目录观察列表 parentId",
  671. "fix_hint": "空树提示;上传前校验 fileList.length;Object.assign(nodeParam, node)",
  672. "id": "BUG-045",
  673. "status": "新建",
  674. "date": "2026-11-02",
  675. "method": "静态审查"
  676. },
  677. {
  678. "module": "智能注氮系统",
  679. "file": "src/views/vent/monitorManager/compressor/components/nitrogenHome_ln.vue:341-349",
  680. "title": "监测数据忽略选中系统ID",
  681. "severity": "严重",
  682. "type": "wrong_data_binding",
  683. "symptom": "切换注氮系统后仍展示 msgTxt[0] 数据,监控内容与下拉选择不一致",
  684. "root_cause": "getDataSource(systemID) 入参未用于请求,固定取 res.msgTxt[0].datalist",
  685. "repro": "配置≥2套注氮系统→切换下拉→数据不随 systemId 变化",
  686. "fix_hint": "按 systemID/deviceId 过滤或带参请求对应系统数据",
  687. "id": "BUG-046",
  688. "status": "新建",
  689. "date": "2026-11-02",
  690. "method": "静态审查"
  691. },
  692. {
  693. "module": "智能注氮系统",
  694. "file": "src/views/vent/monitorManager/compressor/index.vue:93-126",
  695. "title": "空列表崩溃且 modalType 未随系统类型切换",
  696. "severity": "严重",
  697. "type": "null_crash/stale_config",
  698. "symptom": "无注氮系统时白屏;依赖 modalType 的矿端组件始终按 nitrogenUnderground 建模",
  699. "root_cause": "options.value[0]['id'] 无空判断;changeModalType 中 modalType 赋值被注释,仅改了 moduleTypeName",
  700. "repro": "空数据进页崩溃;潞宁等使用 modalType 的矿切换空压机/制氮机后模型类型不变",
  701. "fix_hint": "空 records 提前 return;恢复按 strsystype 设置 modalType",
  702. "id": "BUG-047",
  703. "status": "新建",
  704. "date": "2026-11-02",
  705. "method": "静态审查"
  706. },
  707. {
  708. "module": "智能注浆系统",
  709. "file": "src/views/vent/monitorManager/groutMonitor/index.vue:110-119,67,86",
  710. "title": "空数据崩溃且 currentDeviceType 永不赋值",
  711. "severity": "严重",
  712. "type": "null_crash/dead_state",
  713. "symptom": "无注浆系统时白屏;传给 groutHome 的 device-type 恒为空字符串",
  714. "root_cause": "options.value[0]['id'] 无守卫;deviceChange 只写 deviceType,从未写入 currentDeviceType",
  715. "repro": "空列表进页崩溃;有数据时检查 groutHome props.deviceType 为空",
  716. "fix_hint": "空 records 保护;deviceChange/getSelectRow 同步 currentDeviceType",
  717. "id": "BUG-048",
  718. "status": "新建",
  719. "date": "2026-11-02",
  720. "method": "静态审查"
  721. },
  722. {
  723. "module": "机电硐室管控",
  724. "file": "src/views/vent/home/configurable/electroChamber.vue:86-99,29-50",
  725. "title": "拉取配置后强制覆盖为本地测试配置且历史无设备ID",
  726. "severity": "严重",
  727. "type": "hardcoded_override/missing_param",
  728. "symptom": "线上始终使用 testConfigElectro;切历史 Tab 时 deviceId 常为空导致查询无效",
  729. "root_cause": "fetchConfigs 成功后 configs.value=testConfigElectro;optionValue 仅来自路由 query,无设备选择赋值",
  730. "repro": "非 A02A02 环境打开页面看配置是否被测试数据覆盖;无 query.id 切历史记录",
  731. "fix_hint": "生产去掉测试覆盖;补充硐室/系统选择并写入 optionValue",
  732. "id": "BUG-049",
  733. "status": "新建",
  734. "date": "2026-11-02",
  735. "method": "静态审查"
  736. },
  737. {
  738. "module": "束管日报分析",
  739. "file": "src/views/vent/bundleSpy/bundleSpyTable/index.vue; vent/bundle/bundleMonitorTable/index.vue:bundleSpy:108-109; bundle:101-102",
  740. "title": "保德 sysOrgCode 大小写错误导致专用列永不命中",
  741. "severity": "严重",
  742. "type": "copy_paste_orgcode",
  743. "symptom": "保德落到 default 列配置,专用字段不显示",
  744. "root_cause": "写 case 'sdmtjtBdmk';全库其余为 'sdmtjtbdmk'",
  745. "repro": "sysOrgCode=sdmtjtbdmk 打开色谱仪/束管日报",
  746. "fix_hint": "统一改为 sdmtjtbdmk",
  747. "id": "BUG-050",
  748. "status": "新建",
  749. "date": "2026-11-02",
  750. "method": "静态审查"
  751. },
  752. {
  753. "module": "束管日报分析",
  754. "file": "src/views/vent/bundle/bundleMonitorTable/bundle-table.data.ts:595-610",
  755. "title": "保德束管 NO₂ 最小值 dataIndex 写成 no22_max",
  756. "severity": "严重",
  757. "type": "wrong_column_dataIndex",
  758. "symptom": "NO₂最小值空白或错值",
  759. "root_cause": "最小值 dataIndex:'no22_max',key/dataIndex 交叉贴错",
  760. "repro": "保德束管日报对比 no2_min/no2_max 与三列",
  761. "fix_hint": "最大值 no2_max;最小值 no2_min",
  762. "id": "BUG-051",
  763. "status": "新建",
  764. "date": "2026-11-02",
  765. "method": "静态审查"
  766. },
  767. {
  768. "module": "束管日报分析",
  769. "file": "src/views/vent/bundle/bundleMonitorTable/bundle-table.data.ts:1465-1472,1848-1855",
  770. "title": "寸草塔一矿/哈拉沟 O₂最大值列绑定 o2_min",
  771. "severity": "严重",
  772. "type": "wrong_column_dataIndex",
  773. "symptom": "标题最大值实际显示最小值",
  774. "root_cause": "title:最大值 却 dataIndex:'o2_min'",
  775. "repro": "对应矿打开束管日报对比 o2_max/o2_min",
  776. "fix_hint": "改为 dataIndex:'o2_max'",
  777. "id": "BUG-052",
  778. "status": "新建",
  779. "date": "2026-11-02",
  780. "method": "静态审查"
  781. },
  782. {
  783. "module": "束管日报分析",
  784. "file": "src/views/vent/bundle/bundleMonitorTable/index.vue:103-104,453",
  785. "title": "补连塔图表分支 orgCode 写成 sdmtjtBltmk",
  786. "severity": "严重",
  787. "type": "copy_paste_orgcode",
  788. "symptom": "表格用 Bltcolumns 正确,柱状图落入 default",
  789. "root_cause": "computedColumns 用 sdmtjtbltmk,getSeriesConfig 用 sdmtjtBltmk",
  790. "repro": "sysOrgCode=sdmtjtbltmk 对比表头与图例",
  791. "fix_hint": "图表 case 改为 sdmtjtbltmk",
  792. "id": "BUG-053",
  793. "status": "新建",
  794. "date": "2026-11-02",
  795. "method": "静态审查"
  796. },
  797. {
  798. "module": "火灾监测预警",
  799. "file": "src/views/vent/monitorManager/alarmMonitor/warn/fireWarn.vue:4",
  800. "title": "返回按钮权限判断取反(!hasPermission('fireWarn:return'))",
  801. "severity": "严重",
  802. "type": "权限逻辑错误",
  803. "symptom": "有 *:return 权限的用户看不到返回;无权限用户反而可见(与 deviceMonitorWarn 正确写法相反)",
  804. "root_cause": "使用 v-if=\"!hasPermission('xxx:return')\";对照 deviceMonitorWarn 应为正向 hasPermission",
  805. "repro": "分别用有/无 gasWarn:return 等权限账号打开预警页,观察返回按钮显隐",
  806. "fix_hint": "去掉 !,改为 v-if=\"hasPermission('...:return')\"",
  807. "id": "BUG-054",
  808. "status": "新建",
  809. "date": "2026-11-02",
  810. "method": "静态审查"
  811. },
  812. {
  813. "module": "灾变应急控制",
  814. "file": "src/views/vent/monitorManager/deviceMonitor/components/emergency/index.vue:196-226",
  815. "title": "工作面详情多项共用同一数据 code",
  816. "severity": "严重",
  817. "type": "wrong field mapping / logic bug",
  818. "symptom": "工作面编号/采区/煤层都显示 dTotalArea;长度/走向/采高都显示 totallength",
  819. "root_cause": "analysisDetailDataList 多项复用相同 code,未映射独立字段",
  820. "repro": "打开灾变应急分析详情区 → 观察多行数值是否雷同",
  821. "fix_hint": "为每项配置正确业务字段 code,并在 pageData 中补齐对应值",
  822. "id": "BUG-055",
  823. "status": "新建",
  824. "date": "2026-11-02",
  825. "method": "静态审查"
  826. },
  827. {
  828. "module": "灾变应急控制",
  829. "file": "src/views/vent/monitorManager/deviceMonitor/components/emergency/index.vue:273-275",
  830. "title": "应急解算局部阻力同样误绑 dHNature",
  831. "severity": "严重",
  832. "type": "wrong field mapping / logic bug",
  833. "symptom": "灾变应急巷道阻力表局部阻力错误",
  834. "root_cause": "与 network 相同的复制错误:dHLocal: item['dHNature']",
  835. "repro": "进入灾变应急页加载解算结果 → 查看巷道阻力列",
  836. "fix_hint": "改为 item['dHLocal']",
  837. "id": "BUG-056",
  838. "status": "新建",
  839. "date": "2026-11-02",
  840. "method": "静态审查"
  841. },
  842. {
  843. "module": "灾变应急控制",
  844. "file": "src/views/vent/monitorManager/deviceMonitor/components/emergency/index.vue:314-321",
  845. "title": "应急页传感器 readData 空指针",
  846. "severity": "严重",
  847. "type": "null deref on mount/update",
  848. "symptom": "同网络页,缺 readData 时应急页崩溃",
  849. "root_cause": "item['readData']['va'] 无空判断",
  850. "repro": "推送缺 readData 的 monitors → 打开应急页",
  851. "fix_hint": "对 readData 做空对象兜底",
  852. "id": "BUG-057",
  853. "status": "新建",
  854. "date": "2026-11-02",
  855. "method": "静态审查"
  856. },
  857. {
  858. "module": "瓦斯人工巡检业务分析",
  859. "file": "src/views/vent/gas/gasAnalysis/index.vue:177-182,216-219",
  860. "title": "列表成功后强制 pagination.current=1 导致分页失效",
  861. "severity": "严重",
  862. "type": "pagination_logic_bug",
  863. "symptom": "翻到第 2 页后被打回第 1 页",
  864. "root_cause": "gasReportLogLists 在有 records 时无条件 current=1",
  865. "repro": "业务分析多页数据点第 2 页",
  866. "fix_hint": "删除该赋值;仅查询/重置时置 1",
  867. "id": "BUG-058",
  868. "status": "新建",
  869. "date": "2026-11-02",
  870. "method": "静态审查"
  871. },
  872. {
  873. "module": "瓦斯人工巡检地点管理",
  874. "file": "src/views/vent/gas/gasInspectNonfc/components/inspectEdit.vue:12-14,79-81,71-76",
  875. "title": "区队下拉缺 value 且整对象重赋值打断响应式",
  876. "severity": "严重",
  877. "type": "nfc_nonfc_copy_paste",
  878. "symptom": "提交可能把区队名当 id;二次编辑表单不刷新",
  879. "root_cause": "option 无 :value;formStateEdit=Object.assign 重赋值丢失 reactive 绑定",
  880. "repro": "Nonfc 编辑改区队提交看 payload;连续编辑两条",
  881. "fix_hint": "补 :value=\"item.value\";Object.assign(formStateEdit, newV) 原地更新",
  882. "id": "BUG-059",
  883. "status": "新建",
  884. "date": "2026-11-02",
  885. "method": "静态审查"
  886. },
  887. {
  888. "module": "瓦斯人工巡检地点管理(NFC)",
  889. "file": "src/views/vent/gas/gasInspect/index.vue:66-75",
  890. "title": "早/中/晚是否巡检真假分支都渲染「是」",
  891. "severity": "严重",
  892. "type": "wrong_field_binding",
  893. "symptom": "未巡检也显示「是」,状态失真",
  894. "root_cause": "text=='1' 与 v-else 内均写「是」",
  895. "repro": "NFC 地点管理查看未巡检班次列",
  896. "fix_hint": "else 显示「否」;对齐 Nonfc 字段约定",
  897. "id": "BUG-060",
  898. "status": "新建",
  899. "date": "2026-11-02",
  900. "method": "静态审查"
  901. },
  902. {
  903. "module": "瓦斯人工巡检报表管理",
  904. "file": "src/views/vent/gas/gasReport/index.vue:357-440",
  905. "title": "审核/导出异常校验 else-if 导致任一气体合格即放行",
  906. "severity": "严重",
  907. "type": "inverted_validation_logic",
  908. "symptom": "O2 超限但 CO 合格仍可审核通过;多行以最后一行结果为准",
  909. "root_cause": "getTs 对 O2/CO/CO2/T/CH4 用 else-if;forEach return 不能结束函数",
  910. "repro": "仅 O2 异常其余合格→点审核通过",
  911. "fix_hint": "全部字段均在阈内才放行;任异常即 true",
  912. "id": "BUG-061",
  913. "status": "新建",
  914. "date": "2026-11-02",
  915. "method": "静态审查"
  916. },
  917. {
  918. "module": "瓦斯人工巡检报表管理",
  919. "file": "src/views/vent/gas/gasReport/index.vue:271-274",
  920. "title": "巡检图片 Blob 二次封装错误",
  921. "severity": "严重",
  922. "type": "wrong_blob_usage",
  923. "symptom": "查看班次图片失败或 Failed to construct 'Blob'",
  924. "root_cause": "gasServerImg 已是 blob,又 new Blob(res,...);构造需 Array",
  925. "repro": "日报管理点夜/早/中班「查看」",
  926. "fix_hint": "URL.createObjectURL(res) 或 new Blob([res],...)",
  927. "id": "BUG-062",
  928. "status": "新建",
  929. "date": "2026-11-02",
  930. "method": "静态审查"
  931. },
  932. {
  933. "module": "瓦斯监测预警",
  934. "file": "src/views/vent/monitorManager/alarmMonitor/warn/gasWarn.vue:5",
  935. "title": "返回按钮权限判断取反(!hasPermission('gasWarn:return'))",
  936. "severity": "严重",
  937. "type": "权限逻辑错误",
  938. "symptom": "有 *:return 权限的用户看不到返回;无权限用户反而可见(与 deviceMonitorWarn 正确写法相反)",
  939. "root_cause": "使用 v-if=\"!hasPermission('xxx:return')\";对照 deviceMonitorWarn 应为正向 hasPermission",
  940. "repro": "分别用有/无 gasWarn:return 等权限账号打开预警页,观察返回按钮显隐",
  941. "fix_hint": "去掉 !,改为 v-if=\"hasPermission('...:return')\"",
  942. "id": "BUG-063",
  943. "status": "新建",
  944. "date": "2026-11-02",
  945. "method": "静态审查"
  946. },
  947. {
  948. "module": "瓦斯管网管控",
  949. "file": "src/views/vent/gas/gasPipeNet/index.vue:142-147",
  950. "title": "管网阀门控制提交未调控制接口",
  951. "severity": "严重",
  952. "type": "undefined_api_call",
  953. "symptom": "点确定只 toast 表单 JSON,阀门无动作",
  954. "root_cause": "submitHandler 仅 message.success,无 deviceControl",
  955. "repro": "管网管控→阀门控制→提交",
  956. "fix_hint": "接入泵站同款控制 API",
  957. "id": "BUG-064",
  958. "status": "新建",
  959. "date": "2026-11-02",
  960. "method": "静态审查"
  961. },
  962. {
  963. "module": "瓦斯钻孔监测",
  964. "file": "src/views/vent/gas/gasZk/index.vue:61-79",
  965. "title": "setInterval 回调内再 startPolling 造成重叠轮询",
  966. "severity": "严重",
  967. "type": "timer_logic_bug",
  968. "symptom": "慢网时 /drill/get/status 并发堆积",
  969. "root_cause": "interval 不等待完成可再次触发;成功后又 stop+new interval",
  970. "repro": "打开钻孔监测并限速网络观察并发",
  971. "fix_hint": "改为 await 后 setTimeout 串行轮询",
  972. "id": "BUG-065",
  973. "status": "新建",
  974. "date": "2026-11-02",
  975. "method": "静态审查"
  976. },
  977. {
  978. "module": "用户日志管理",
  979. "file": "src/views/monitor/log/index.vue:2,56-84",
  980. "title": "v-modal 拼写错误 + 登录统计破坏 searchInfo 响应式",
  981. "severity": "严重",
  982. "type": "typo/reactivity_break",
  983. "symptom": "Tab 无法双向绑定;切到“登录统计”后查询条件失效、列表参数丢失 logType",
  984. "root_cause": "模板写 v-modal 而非 v-model;case '4' 执行 searchInfo={} 丢掉 reactive 代理",
  985. "repro": "打开日志页切换 Tab;切到登录统计后再查询",
  986. "fix_hint": "改为 v-model;用 Object.keys 清空或重置字段,禁止重赋 searchInfo",
  987. "id": "BUG-066",
  988. "status": "新建",
  989. "date": "2026-11-02",
  990. "method": "静态审查"
  991. },
  992. {
  993. "module": "皮带巷管控系统",
  994. "file": "src/views/vent/monitorManager/beltTunMonitor/components/beltTunHome.vue:260-268",
  995. "title": "皮带巷首页 warnInfo/sysInfo 无空保护",
  996. "severity": "严重",
  997. "type": "null deref on mount",
  998. "symptom": "sysInfo 或某类 warn 分组缺失时页面加载失败",
  999. "root_cause": "直接 Object.assign(res['sysInfo'], res['sysInfo']['readData']) 与 warnInfo.*.devices",
  1000. "repro": "返回不完整 beltTun 监测包 → 打开皮带巷主页",
  1001. "fix_hint": "增加空判断与默认值",
  1002. "id": "BUG-067",
  1003. "status": "新建",
  1004. "date": "2026-11-02",
  1005. "method": "静态审查"
  1006. },
  1007. {
  1008. "module": "粉尘参数一张表",
  1009. "file": "src/views/vent/monitorManager/deviceMonitor/staticSheets/dustSheet.vue:1-103",
  1010. "title": "粉尘参数一张表静态硬编码 HTML,无实时数据",
  1011. "severity": "严重",
  1012. "type": "data",
  1013. "symptom": "粉尘参数表固定静态内容,非实时监测",
  1014. "root_cause": "硬编码表格,无数据请求",
  1015. "repro": "打开粉尘参数一张表观察数据不更新",
  1016. "fix_hint": "接入粉尘监测接口动态填充",
  1017. "id": "BUG-068",
  1018. "status": "新建",
  1019. "date": "2026-11-02",
  1020. "method": "静态审查"
  1021. },
  1022. {
  1023. "module": "粉尘报表分析",
  1024. "file": "src/views/vent/dust/dustMonitorTable/index.vue:317-320,510-513",
  1025. "title": "保德当日粉尘总体最大值误用 zcjqpj/hcjqpj",
  1026. "severity": "严重",
  1027. "type": "wrong_field_binding",
  1028. "symptom": "当日分析最大值恒 -Infinity 或字段映射失败",
  1029. "root_cause": "BdMaxValues 用 qc/hc;overallBdMaxValues 误用布尔台字段",
  1030. "repro": "保德粉尘报表切「当日粉尘情况分析」",
  1031. "fix_hint": "overallBdMaxValues 改为 qc/hc",
  1032. "id": "BUG-069",
  1033. "status": "新建",
  1034. "date": "2026-11-02",
  1035. "method": "静态审查"
  1036. },
  1037. {
  1038. "module": "粉尘报表分析",
  1039. "file": "src/views/vent/dust/dustMonitorTable/index.vue:269-270,429-436,472-475",
  1040. "title": "哈拉沟分组键 ccdd 被最大值循环改写成 jcdd",
  1041. "severity": "严重",
  1042. "type": "logic_state",
  1043. "symptom": "工作场所下拉变成测点名,过滤错乱",
  1044. "root_cause": "分组 gzcs=ccdd,HlgMaxValues 更新时 gzcs=item.jcdd 覆盖",
  1045. "repro": "哈拉沟粉尘报表看工作场所下拉与过滤",
  1046. "fix_hint": "更新最大值时不要用 jcdd 覆盖 gzcs",
  1047. "id": "BUG-070",
  1048. "status": "新建",
  1049. "date": "2026-11-02",
  1050. "method": "静态审查"
  1051. },
  1052. {
  1053. "module": "粉尘监测预警",
  1054. "file": "src/views/vent/monitorManager/alarmMonitor/warn/dustWarn.vue:6",
  1055. "title": "返回按钮权限判断取反(!hasPermission('dustWarn:return'))",
  1056. "severity": "严重",
  1057. "type": "权限逻辑错误",
  1058. "symptom": "有 *:return 权限的用户看不到返回;无权限用户反而可见(与 deviceMonitorWarn 正确写法相反)",
  1059. "root_cause": "使用 v-if=\"!hasPermission('xxx:return')\";对照 deviceMonitorWarn 应为正向 hasPermission",
  1060. "repro": "分别用有/无 gasWarn:return 等权限账号打开预警页,观察返回按钮显隐",
  1061. "fix_hint": "去掉 !,改为 v-if=\"hasPermission('...:return')\"",
  1062. "id": "BUG-071",
  1063. "status": "新建",
  1064. "date": "2026-11-02",
  1065. "method": "静态审查"
  1066. },
  1067. {
  1068. "module": "综采面智能管控",
  1069. "file": "src/views/vent/monitorManager/workFaceMonitor/components/workFaceHome.vue:251-254",
  1070. "title": "定位列表读取 readData.flen 空指针",
  1071. "severity": "严重",
  1072. "type": "null deref on mount/update",
  1073. "symptom": "location 设备无 readData 时过滤阶段抛错,后续监控数据不完整",
  1074. "root_cause": "locationData.push 中直接 data['readData']['flen']",
  1075. "repro": "location.datalist 含 readData=null 的项",
  1076. "fix_hint": "使用 data?.readData?.flen ?? '-'",
  1077. "id": "BUG-072",
  1078. "status": "新建",
  1079. "date": "2026-11-02",
  1080. "method": "静态审查"
  1081. },
  1082. {
  1083. "module": "综采面智能管控",
  1084. "file": "src/views/vent/monitorManager/workFaceMonitor/components/workFaceHome.vue:262-276",
  1085. "title": "综合预警判断键错误且可能空指针",
  1086. "severity": "严重",
  1087. "type": "null deref / wrong field mapping",
  1088. "symptom": "用 warnInfo.warnInfo 判断却读取 synthesizeS;键不匹配时综合预警不更新,或 synthesizeS 缺失时崩溃;surface_history/sysInfo 亦缺保护",
  1089. "root_cause": "条件写成 res['warnInfo']['warnInfo'];并对 surface_history[0]、sysInfo.readData 无空保护",
  1090. "repro": "返回缺 synthesizeS 或 surface_history 为空的综采面数据",
  1091. "fix_hint": "条件改为 synthesizeS;对各嵌套字段做空判断",
  1092. "id": "BUG-073",
  1093. "status": "新建",
  1094. "date": "2026-11-02",
  1095. "method": "静态审查"
  1096. },
  1097. {
  1098. "module": "色谱仪报表分析",
  1099. "file": "src/views/vent/bundleSpy/bundleSpyTable/index.vue:237-241,386-390",
  1100. "title": "活鸡兔/寸草塔二矿图表 O₂闭内 误绑 CH₄ 数据",
  1101. "severity": "严重",
  1102. "type": "wrong_field_binding",
  1103. "symptom": "图例 O₂闭内 柱状与 CH₄闭内完全相同",
  1104. "root_cause": "name:'O₂闭内' 的 data 写成 ch4AveValues",
  1105. "repro": "对应矿打开色谱仪报表对比 o2_ave 与图",
  1106. "fix_hint": "改为 o2AveValues",
  1107. "id": "BUG-074",
  1108. "status": "新建",
  1109. "date": "2026-11-02",
  1110. "method": "静态审查"
  1111. },
  1112. {
  1113. "module": "视频墙",
  1114. "file": "src/views/vent/monitorManager/camera/index.vue:100-128,172-178",
  1115. "title": "设备树加载与分页 paramKind 计算脆弱",
  1116. "severity": "严重",
  1117. "type": "null_crash/wrong_param",
  1118. "symptom": "itemValue 无 '&' 或 msgTxt 结构异常时树展开/翻页失败或请求错误类型",
  1119. "root_cause": "假定 msgTxt[0].datalist 存在;分页用 searchParam.devKind.indexOf('&') 对 nodeData.itemValue 做 substring,缺 '&' 得空串",
  1120. "repro": "点击 itemValue 不含 '&' 的分类再翻页;或返回空 datalist 的节点",
  1121. "fix_hint": "安全解析 itemValue;访问 datalist 前判空;分页直接用 nodeData.itemValue",
  1122. "id": "BUG-075",
  1123. "status": "新建",
  1124. "date": "2026-11-02",
  1125. "method": "静态审查"
  1126. },
  1127. {
  1128. "module": "设备监测预警",
  1129. "file": "src/views/vent/monitorManager/alarmMonitor/warn/deviceWarn.vue:5",
  1130. "title": "返回按钮权限判断取反(!hasPermission('deviceWarn:return'))",
  1131. "severity": "严重",
  1132. "type": "权限逻辑错误",
  1133. "symptom": "有 *:return 权限的用户看不到返回;无权限用户反而可见(与 deviceMonitorWarn 正确写法相反)",
  1134. "root_cause": "使用 v-if=\"!hasPermission('xxx:return')\";对照 deviceMonitorWarn 应为正向 hasPermission",
  1135. "repro": "分别用有/无 gasWarn:return 等权限账号打开预警页,观察返回按钮显隐",
  1136. "fix_hint": "去掉 !,改为 v-if=\"hasPermission('...:return')\"",
  1137. "id": "BUG-076",
  1138. "status": "新建",
  1139. "date": "2026-11-02",
  1140. "method": "静态审查"
  1141. },
  1142. {
  1143. "module": "通风参数一张表",
  1144. "file": "src/views/vent/monitorManager/deviceMonitor/staticSheets/ventilateSheet.vue:1-263",
  1145. "title": "通风参数一张表为静态硬编码 HTML,无实时数据",
  1146. "severity": "严重",
  1147. "type": "data",
  1148. "symptom": "页面展示固定矿井参数表(如明安木独等),不刷新监测值",
  1149. "root_cause": "纯静态 table;script 仅注释转换工具,无 API/绑定",
  1150. "repro": "打开通风参数一张表 → 任意时刻数据不变、与监测无关",
  1151. "fix_hint": "改为接口驱动渲染;若仅为示意文档页需在需求中降级为非监测页",
  1152. "id": "BUG-077",
  1153. "status": "新建",
  1154. "date": "2026-11-02",
  1155. "method": "静态审查"
  1156. },
  1157. {
  1158. "module": "通风监测预警",
  1159. "file": "src/views/vent/monitorManager/alarmMonitor/warn/ventilateWarn.vue:10",
  1160. "title": "返回按钮权限判断取反(!hasPermission('ventilateWarn:return'))",
  1161. "severity": "严重",
  1162. "type": "权限逻辑错误",
  1163. "symptom": "有 *:return 权限的用户看不到返回;无权限用户反而可见(与 deviceMonitorWarn 正确写法相反)",
  1164. "root_cause": "使用 v-if=\"!hasPermission('xxx:return')\";对照 deviceMonitorWarn 应为正向 hasPermission",
  1165. "repro": "分别用有/无 gasWarn:return 等权限账号打开预警页,观察返回按钮显隐",
  1166. "fix_hint": "去掉 !,改为 v-if=\"hasPermission('...:return')\"",
  1167. "id": "BUG-078",
  1168. "status": "新建",
  1169. "date": "2026-11-02",
  1170. "method": "静态审查"
  1171. },
  1172. {
  1173. "module": "通风网络解算",
  1174. "file": "src/views/vent/monitorManager/deviceMonitor/components/network/index.vue:447-454",
  1175. "title": "传感器列表未判空直接读 readData",
  1176. "severity": "严重",
  1177. "type": "null deref on mount/update",
  1178. "symptom": "monitors 中某条缺少 readData 时 analyzePageResult 抛错,页面解算结果渲染中断",
  1179. "root_cause": "直接访问 item['readData']['va']/['m3'],无空保护",
  1180. "repro": "构造 monitors 项 readData=null 的解算推送 → 打开网络页",
  1181. "fix_hint": "先取 const rd=item.readData||{} 再读字段",
  1182. "id": "BUG-079",
  1183. "status": "新建",
  1184. "date": "2026-11-02",
  1185. "method": "静态审查"
  1186. },
  1187. {
  1188. "module": "通风网络解算",
  1189. "file": "src/views/vent/monitorManager/deviceMonitor/components/network/index.vue:403-405",
  1190. "title": "局部阻力字段误读自然风压",
  1191. "severity": "严重",
  1192. "type": "wrong field mapping / logic bug",
  1193. "symptom": "巷道表“局部阻力”与“自然风压”显示相同值,局部阻力失真",
  1194. "root_cause": "dHLocal 赋值使用 item['dHNature'],与 dHNature 同源",
  1195. "repro": "打开网络解算结果表 → 对比局部阻力与自然风压列",
  1196. "fix_hint": "改为读取 item['dHLocal'](或后端真实局部阻力字段)",
  1197. "id": "BUG-080",
  1198. "status": "新建",
  1199. "date": "2026-11-02",
  1200. "method": "静态审查"
  1201. },
  1202. {
  1203. "module": "防尘系统监测",
  1204. "file": "src/views/vent/monitorManager/deviceMonitor/components/device/modal/dust.modal.vue:216-238",
  1205. "title": "粉尘弹窗测点状态/预警历史硬编码",
  1206. "severity": "严重",
  1207. "type": "mock hardcode replacing real API",
  1208. "symptom": "测点状态 customRender 永远返回“正常”;预警滚动板为固定假数据",
  1209. "root_cause": "columns.state 写死正常;warningConfig.data 硬编码",
  1210. "repro": "打开粉尘监测详情弹窗观察状态与预警列表",
  1211. "fix_hint": "状态取真实字段;预警列表接真实告警数据",
  1212. "id": "BUG-081",
  1213. "status": "新建",
  1214. "date": "2026-11-02",
  1215. "method": "静态审查"
  1216. },
  1217. {
  1218. "module": "需风量分析系统",
  1219. "file": "src/components/vent/micro/createSubApp.vue:15-37",
  1220. "title": "非 micro-* 路径组件恒为 null",
  1221. "severity": "严重",
  1222. "type": "shell_mount_failure",
  1223. "symptom": "菜单若未挂在 micro-need-air/micro-vent-doc 前缀下则壳空白",
  1224. "root_cause": "resetComponent 仅识别有限 appType",
  1225. "repro": "用非 micro 路径打开需风量/核定",
  1226. "fix_hint": "按实际菜单 path 扩展映射",
  1227. "id": "BUG-082",
  1228. "status": "新建",
  1229. "date": "2026-11-02",
  1230. "method": "静态审查"
  1231. },
  1232. {
  1233. "module": "风窗管控",
  1234. "file": "src/views/vent/monitorManager/windowMonitor/index.vue:37-41",
  1235. "title": "后门控制按钮文案错写成前门",
  1236. "severity": "严重",
  1237. "type": "control buttons sharing same paramcode / mislabeled control",
  1238. "symptom": "界面显示“打开前门/关闭前门”,实际下发 rearGateOpen_S/rearGateClose_S,操作员会误控后门",
  1239. "root_cause": "按钮展示文案复制前门未改,第二参数标题已是后门,UI 文本与指令不一致",
  1240. "repro": "具备 window:gateControl 且 ndoorcount==2 → 看后两颗按钮文案与 setControl 参数",
  1241. "fix_hint": "将后两颗按钮文案改为“打开后门/关闭后门”",
  1242. "id": "BUG-083",
  1243. "status": "新建",
  1244. "date": "2026-11-02",
  1245. "method": "静态审查"
  1246. },
  1247. {
  1248. "module": "风窗管控",
  1249. "file": "src/views/vent/monitorManager/windowMonitor/index.vue:11-14,623-651",
  1250. "title": "窗面积与窗角度控制共用 paramcode 1/2",
  1251. "severity": "严重",
  1252. "type": "control buttons sharing same paramcode",
  1253. "symptom": "窗1/窗2 面积设定与角度设定最终都下发 paramcode='1'/'2',后端无法区分面积/角度",
  1254. "root_cause": "twoAreaControl 与 twoAngleControl 都 setControl('1'|'2'),handleOK else 分支直接 data.paramcode=handlerState",
  1255. "repro": "同时开启 window:twoAreaControl 与 window:twoAngleControl → 分别设定面积/角度 → 抓包对比 paramcode",
  1256. "fix_hint": "角度使用独立点位(如 frontSetAngle1),或在 value/附加字段中区分控制类型",
  1257. "id": "BUG-084",
  1258. "status": "新建",
  1259. "date": "2026-11-02",
  1260. "method": "静态审查"
  1261. },
  1262. {
  1263. "module": "风窗管控",
  1264. "file": "src/views/vent/monitorManager/windowMonitor/index.vue:31-33,504-520",
  1265. "title": "设定风窗面积误走角度弹窗流程",
  1266. "severity": "严重",
  1267. "type": "control buttons sharing same paramcode",
  1268. "symptom": "权限 window:showAngleArea 的“设定风窗面积”调用 setAngle(1),弹窗标题按角度生成,但点位仍 frontSetValue",
  1269. "root_cause": "面积按钮错误绑定 setAngle 而非 setArea",
  1270. "repro": "开启 window:showAngleArea → 点击“设定风窗面积” → 观察 modalTitle 与下发参数",
  1271. "fix_hint": "改为 setArea(1),或单独实现面积设定入口",
  1272. "id": "BUG-085",
  1273. "status": "新建",
  1274. "date": "2026-11-02",
  1275. "method": "静态审查"
  1276. },
  1277. {
  1278. "module": "风门集中同控",
  1279. "file": "src/views/vent/monitorManager/airDoor/components/tipModal.vue:28-54",
  1280. "title": "倒计时弹窗 setTimeout 递归不清理",
  1281. "severity": "严重",
  1282. "type": "setInterval/setTimeout poll without clear on unmount",
  1283. "symptom": "提示弹窗显示后每秒递归创建定时器;关闭/卸载后仍继续;timeout<=0 时先 timer=undefined 再 clearTimeout(undefined) 无效,且仍调用 getMonitor()",
  1284. "root_cause": "getMonitor 无论 timeout 是否归零都递归调用;clearTimeout 写在 timer=undefined 之后;无取消句柄、watchEffect 可见时重复启动",
  1285. "repro": "触发 visibleTs30=true → 关闭弹窗或离开页面 → 观察仍有定时回调",
  1286. "fix_hint": "timeout<=0 时 return 不再递归;保存并 clearTimeout;Visible=false 时清理;避免 watchEffect 重复启动",
  1287. "id": "BUG-086",
  1288. "status": "新建",
  1289. "date": "2026-11-02",
  1290. "method": "静态审查"
  1291. },
  1292. {
  1293. "module": "风门集中同控",
  1294. "file": "src/views/vent/monitorManager/airDoor/index.vue:44-51",
  1295. "title": "风门同控菜单拉取未判空 msgTxt[0]",
  1296. "severity": "严重",
  1297. "type": "null deref on mount",
  1298. "symptom": "接口返回空/异常结构时 getMenuList 抛错,左侧菜单无法加载",
  1299. "root_cause": "直接访问 res.msgTxt[0].datalist.length",
  1300. "repro": "mock /monitor/device 返回无 msgTxt 或空数组 → 打开风门集中同控",
  1301. "fix_hint": "使用可选链与默认 []:res?.msgTxt?.[0]?.datalist || []",
  1302. "id": "BUG-087",
  1303. "status": "新建",
  1304. "date": "2026-11-02",
  1305. "method": "静态审查"
  1306. },
  1307. {
  1308. "module": "主风机管控",
  1309. "file": "src/views/vent/monitorManager/mainFanMonitor/hooks/useAreaSetSimulation.ts:37-109; useMainFanSimulation.ts:25-72",
  1310. "title": "天窗/闸板面积模拟 setInterval 卸载未清理",
  1311. "severity": "一般",
  1312. "type": "setInterval/setTimeout poll without clear on unmount",
  1313. "symptom": "开启 fanSwitchoverSimulation 后设定面积过程中离开页面,interval 仍改 selectData,可能写已销毁状态",
  1314. "root_cause": "useAreaSetSimulation 仅在过程结束 clear;无 onUnmounted 遍历 activeProcesses 清理(对比 useFanSwitchoverSimulation 有 stopTick)",
  1315. "repro": "开启模拟 → 设定天窗面积 → 过渡未完成即路由离开",
  1316. "fix_hint": "在 composable 增加 dispose/onUnmounted,清理 Map 内全部 interval",
  1317. "id": "BUG-088",
  1318. "status": "新建",
  1319. "date": "2026-11-02",
  1320. "method": "静态审查"
  1321. },
  1322. {
  1323. "module": "多灾融合预警",
  1324. "file": "src/views/vent/monitorManager/alarmMonitor/warn/gasWarn.vue:189-190",
  1325. "title": "strinstallpos 为空时 indexOf 抛错",
  1326. "severity": "一般",
  1327. "type": "crash_on_mount",
  1328. "symptom": "getDetailList 抛错,监测卡片不更新",
  1329. "root_cause": "假定 strinstallpos 必为 string",
  1330. "repro": "gas 明细 strinstallpos 为 null",
  1331. "fix_hint": "const pos=el.strinstallpos||'' 再操作",
  1332. "id": "BUG-089",
  1333. "status": "新建",
  1334. "date": "2026-11-02",
  1335. "method": "静态审查"
  1336. },
  1337. {
  1338. "module": "多灾融合预警",
  1339. "file": "src/views/vent/monitorManager/alarmMonitor/warn/ventilateWarn.vue:207",
  1340. "title": "warnDes 为空时 indexOf 抛错中断菜单构建",
  1341. "severity": "一般",
  1342. "type": "crash_on_mount",
  1343. "symptom": "左侧菜单空白且轮询中断",
  1344. "root_cause": "el.warnDes.indexOf('预警') 无空保护",
  1345. "repro": "sysTypeWarn 返回 warnDes 缺失条目",
  1346. "fix_hint": "(el.warnDes||'').indexOf(...)",
  1347. "id": "BUG-090",
  1348. "status": "新建",
  1349. "date": "2026-11-02",
  1350. "method": "静态审查"
  1351. },
  1352. {
  1353. "module": "多灾融合预警",
  1354. "file": "src/views/vent/monitorManager/alarmMonitor/warn/dustWarn.vue:255",
  1355. "title": "巷道温度单位错误依赖 humidity",
  1356. "severity": "一般",
  1357. "type": "wrong_field_binding",
  1358. "symptom": "有温度无湿度时单位空白",
  1359. "root_cause": "dw: el.humidity ? '(℃)' : ''",
  1360. "repro": "temperature 有值 humidity 空时看单位",
  1361. "fix_hint": "dw: el.temperature ? '(℃)' : ''",
  1362. "id": "BUG-091",
  1363. "status": "新建",
  1364. "date": "2026-11-02",
  1365. "method": "静态审查"
  1366. },
  1367. {
  1368. "module": "多灾融合预警",
  1369. "file": "src/views/vent/monitorManager/alarmMonitor/alarm.data.ts:483-780",
  1370. "title": "散点图动画 setInterval/resize 监听未清理",
  1371. "severity": "一般",
  1372. "type": "resource-leak",
  1373. "symptom": "调用 setScatterEcharts 后即使销毁图表,30ms 动画与 window resize 监听仍存活",
  1374. "root_cause": "setInterval(... ,30) 与 addEventListener('resize') 无返回清理函数",
  1375. "repro": "进入使用 setScatterEcharts 的预警可视化 → 离开页面后 interval 仍跑",
  1376. "fix_hint": "返回 { dispose }:clearInterval + removeEventListener + wwbzl.dispose()",
  1377. "id": "BUG-092",
  1378. "status": "新建",
  1379. "date": "2026-11-02",
  1380. "method": "静态审查"
  1381. },
  1382. {
  1383. "module": "安全监控分站管理",
  1384. "file": "src/views/vent/safetyList/index.vue:144-146,71-76",
  1385. "title": "调试风向取值与展示映射不一致",
  1386. "severity": "一般",
  1387. "type": "value_mismatch",
  1388. "symptom": "调试选“反向”写入 '0',列表展示逻辑把反风映射为 '2',显示异常",
  1389. "root_cause": "derictList 反向 value='0',而 valueJc 渲染把 '2' 当作反风",
  1390. "repro": "调试设备选反向并确认,查看列表风向展示",
  1391. "fix_hint": "统一风向枚举(建议 1 正/2 反)并同步调试与展示",
  1392. "id": "BUG-093",
  1393. "status": "新建",
  1394. "date": "2026-11-02",
  1395. "method": "静态审查"
  1396. },
  1397. {
  1398. "module": "密闭监测系统",
  1399. "file": "src/views/vent/monitorManager/obfurageMonitor/index.vue:107-113",
  1400. "title": "forEach 内 data=Object.assign 未回写",
  1401. "severity": "一般",
  1402. "type": "dead_assignment",
  1403. "symptom": "readData 字段未合并进列表项,监测展示缺字段",
  1404. "root_cause": "dataSource.forEach 中 `data = Object.assign(data, readData)` 只改局部绑定,未写回数组元素",
  1405. "repro": "对比接口 readData 与页面 options 字段是否缺失",
  1406. "fix_hint": "改为 Object.assign(data, readData) 不重绑,或显式写回",
  1407. "id": "BUG-094",
  1408. "status": "新建",
  1409. "date": "2026-11-02",
  1410. "method": "静态审查"
  1411. },
  1412. {
  1413. "module": "局部风机管控",
  1414. "file": "src/views/vent/monitorManager/{fanLocalMonitor,gateMonitor,windowMonitor,mainFanMonitor,balancePressMonitor,compressor,windrectMonitor}/**; src/views/vent/gas/gasAssessment/threejs/gasAssessmen.threejs.ts:多处 active debugger",
  1415. "title": "生产路径残留 debugger 断点",
  1416. "severity": "一般",
  1417. "type": "debug-leftover",
  1418. "symptom": "DevTools 打开时模型切换/动画初始化/工况辅助计算会暂停页面",
  1419. "root_cause": "遗留未注释 debugger;(如 fanLocal.threejs.Two.ts:40-42, gate.threejs.two.ssl.ts:190, dandaoFcBd3.threejs.ts:170, mainWind.xj.threejs.ts:768/795, balancePress.threejs.ts:60, nitrogenHome_dtyj.vue:326, windrect.threejs.ts:366, gasAssessmen.threejs.ts:69, conditionAssistance.vue:207, fanLocal/index.vue:1549 等)",
  1420. "repro": "打开 DevTools → 进入对应三维监控页触发模型加载/动画",
  1421. "fix_hint": "删除全部 active debugger,或统一用开发开关包裹",
  1422. "id": "BUG-095",
  1423. "status": "新建",
  1424. "date": "2026-11-02",
  1425. "method": "静态审查"
  1426. },
  1427. {
  1428. "module": "报表数据映射",
  1429. "file": "src/views/vent/reportManager/comment/report-modal.vue:135-138",
  1430. "title": "formStates 被重新赋值为 Object.assign 返回值",
  1431. "severity": "一般",
  1432. "type": "reactivity",
  1433. "symptom": "极端情况下表单代理引用混乱;与父级 reportMap 的 formState 断裂叠加更易丢字段",
  1434. "root_cause": "formStates = Object.assign(formStates, newV) 不必要地重绑定 let",
  1435. "repro": "编辑映射记录时反复打开弹窗观察字段回填",
  1436. "fix_hint": "仅 Object.assign(formStates, newV) 或 for..in 赋值,不要重赋值 let",
  1437. "id": "BUG-096",
  1438. "status": "新建",
  1439. "date": "2026-11-02",
  1440. "method": "静态审查"
  1441. },
  1442. {
  1443. "module": "报表管理",
  1444. "file": "src/views/vent/reportManager/index.vue:89-106",
  1445. "title": "三类根节点重复挂载同一套子树",
  1446. "severity": "一般",
  1447. "type": "wrong_tree_build",
  1448. "symptom": "系统/手动/模板三类下出现完全相同的业务分类,筛选易混淆",
  1449. "root_cause": "getTreeList 对 listArr 每个根节点都 push 完整 res 树,未按业务类型分流",
  1450. "repro": "打开报表管理对比三个根节点的 children",
  1451. "fix_hint": "按返回字段或接口分类型填充到对应根节点",
  1452. "id": "BUG-097",
  1453. "status": "新建",
  1454. "date": "2026-11-02",
  1455. "method": "静态审查"
  1456. },
  1457. {
  1458. "module": "抽采泵站监测",
  1459. "file": "src/views/vent/gas/gasPumpMonitor/components/monitorChart.vue:49-66",
  1460. "title": "setInterval 用 clearTimeout 清理",
  1461. "severity": "一般",
  1462. "type": "resource-leak",
  1463. "symptom": "离开页面后图表轮询可能继续,造成多余计算/内存占用",
  1464. "root_cause": "timer=setInterval(...),onUnmounted 调用 clearTimeout(timer)",
  1465. "repro": "打开含 monitorChart 的泵站页 → 离开路由 → 断点/日志可见 interval 仍触发",
  1466. "fix_hint": "改为 clearInterval(timer)",
  1467. "id": "BUG-098",
  1468. "status": "新建",
  1469. "date": "2026-11-02",
  1470. "method": "静态审查"
  1471. },
  1472. {
  1473. "module": "文件共享中心",
  1474. "file": "src/views/vent/performance/fileDetail/index.vue:240-260,465-469",
  1475. "title": "setInterval 用 clearTimeout 清理",
  1476. "severity": "一般",
  1477. "type": "resource_leak",
  1478. "symptom": "关闭汇总弹窗或卸载后轮询未必停止,持续请求 queryVentMonReportJd",
  1479. "root_cause": "timer=setInterval 但 handleCancelHz/onUnmounted 使用 clearTimeout",
  1480. "repro": "打开汇总报表后关闭弹窗,观察是否仍持续请求 queryVentMonReportJd",
  1481. "fix_hint": "统一使用 clearInterval(timer)",
  1482. "id": "BUG-099",
  1483. "status": "新建",
  1484. "date": "2026-11-02",
  1485. "method": "静态审查"
  1486. },
  1487. {
  1488. "module": "智能注浆系统",
  1489. "file": "src/views/vent/monitorManager/groutMonitor/index.vue:1-35",
  1490. "title": "2D 模型与 groutHome 同时渲染可能叠层",
  1491. "severity": "一般",
  1492. "type": "ui_logic",
  1493. "symptom": "is2DModel 为 true 时流程图与监控壳同时存在,交互/遮罩异常",
  1494. "root_cause": "v-if is2DModel 渲染 modelComponent,同时 activeKey==monitor 仍挂载 groutHome",
  1495. "repro": "开启全局 is2DModel 进入注浆监控页",
  1496. "fix_hint": "2D 时由单一容器负责模型,或让 groutHome 在 2D 模式跳过三维初始化",
  1497. "id": "BUG-100",
  1498. "status": "新建",
  1499. "date": "2026-11-02",
  1500. "method": "静态审查"
  1501. },
  1502. {
  1503. "module": "机电硐室管控",
  1504. "file": "src/views/vent/home/configurable/configurable.data.ts:6164,6217",
  1505. "title": "electro-champer / electro-chamber pageType 拼写分裂",
  1506. "severity": "一般",
  1507. "type": "config_typo",
  1508. "symptom": "部分配置按错误 pageType 入库后,fetchConfigs('electro-champer') 只能拿到半套模块",
  1509. "root_cause": "同一业务存在 champer/chamber 两种 pageType 字面量",
  1510. "repro": "在配置表按两种 pageType 各查一次 records 数量",
  1511. "fix_hint": "统一为一种拼写并做数据迁移",
  1512. "id": "BUG-101",
  1513. "status": "新建",
  1514. "date": "2026-11-02",
  1515. "method": "静态审查"
  1516. },
  1517. {
  1518. "module": "束管日报分析",
  1519. "file": "src/views/vent/bundle/bundleMonitorTable/bundle-table.data.ts:412-435",
  1520. "title": "保德 N₂ 子列重复两个平均值缺少最小值",
  1521. "severity": "一般",
  1522. "type": "wrong_column_dataIndex",
  1523. "symptom": "N₂ 两列相同平均值;最小值无法展示",
  1524. "root_cause": "第二、三列均为 title:平均值 + n2_ave",
  1525. "repro": "保德束管日报看氮气表头",
  1526. "fix_hint": "中间列改为最小值/n2_min",
  1527. "id": "BUG-102",
  1528. "status": "新建",
  1529. "date": "2026-11-02",
  1530. "method": "静态审查"
  1531. },
  1532. {
  1533. "module": "瓦斯人工巡检地点管理(NFC)",
  1534. "file": "src/views/vent/gas/gasInspect/index.vue:331-342",
  1535. "title": "筛「两次」误把 pagination.current 写成 2",
  1536. "severity": "一般",
  1537. "type": "copy_paste_bug",
  1538. "symptom": "筛选两次后分页状态错乱",
  1539. "root_cause": "case '2': pagination.current=2",
  1540. "repro": "地点管理→巡检次数筛选→两次",
  1541. "fix_hint": "两次也 current=1",
  1542. "id": "BUG-103",
  1543. "status": "新建",
  1544. "date": "2026-11-02",
  1545. "method": "静态审查"
  1546. },
  1547. {
  1548. "module": "用户日志管理",
  1549. "file": "src/views/monitor/log/index.vue:34,61-66",
  1550. "title": "初始 fieldMapToTime 格式与切换后不一致",
  1551. "severity": "一般",
  1552. "type": "config_mismatch",
  1553. "symptom": "首次进入登录日志时时间范围映射可能无效,切 Tab 后才正常",
  1554. "root_cause": "paramTime 初始为扁平数组,tabChange 才设为 [[field,[begin,end],fmt]] 结构",
  1555. "repro": "首次进入不切 Tab,使用时间筛选对比切 Tab 后行为",
  1556. "fix_hint": "初始化即使用与 case '1' 相同的 fieldMapToTime 结构",
  1557. "id": "BUG-104",
  1558. "status": "新建",
  1559. "date": "2026-11-02",
  1560. "method": "静态审查"
  1561. },
  1562. {
  1563. "module": "色谱仪报表分析",
  1564. "file": "src/views/vent/bundleSpy/bundleSpyTable/index.vue; src/views/vent/monitorManager/comment/bundleSpyMonitorTable.vue:bundleSpyTable 175-195; bundleSpyMonitorTable 93-95",
  1565. "title": "发火阶段筛选项文案不一致",
  1566. "severity": "一般",
  1567. "type": "logic",
  1568. "symptom": "阶段统计为 0 或与报警字典不一致;同数据在不同组件统计结果不同",
  1569. "root_cause": "bundleSpyTable 过滤 '加速氧化升温阶段'(与 warnFire-brt 一致),comment/bundleSpyMonitorTable 过滤 '加速氧化阶段(自热期)';历史计算注释仍写 '加速氧化阶段'",
  1570. "repro": "同一份含阶段字段的报表分别在两处打开,对比进度条计数",
  1571. "fix_hint": "统一与后端/告警字典的阶段枚举(建议 '加速氧化升温阶段')",
  1572. "id": "BUG-105",
  1573. "status": "新建",
  1574. "date": "2026-11-02",
  1575. "method": "静态审查"
  1576. },
  1577. {
  1578. "module": "防尘系统监测",
  1579. "file": "src/views/vent/monitorManager/deviceMonitor/components/device/modal/atomizing.modal.vue:33-42",
  1580. "title": "主机位置字段错误附加 ℃ 单位",
  1581. "severity": "一般",
  1582. "type": "logic/display bug",
  1583. "symptom": "位置类字段后显示温度单位,信息误导",
  1584. "root_cause": "holderLocation 展示模板误加 ℃",
  1585. "repro": "打开喷雾监测详情查看“主机位置”",
  1586. "fix_hint": "去掉 ℃,位置字段无需单位",
  1587. "id": "BUG-106",
  1588. "status": "新建",
  1589. "date": "2026-11-02",
  1590. "method": "静态审查"
  1591. },
  1592. {
  1593. "module": "防火门智能管控",
  1594. "file": "src/views/vent/home/configurable/firedoor/fireDoorMonitor.vue:76-99",
  1595. "title": "场景列表为空仍继续后续逻辑且配置增强未启用",
  1596. "severity": "一般",
  1597. "type": "incomplete_init",
  1598. "symptom": "无防火门场景时下拉为空、模块无有效数据;服务端配置未走 updateEnhancedConfigs",
  1599. "root_cause": "records 为空时仍调用 loadFireGateData;updateEnhancedConfigs 被注释",
  1600. "repro": "manageFireList 返回空→页面无场景可选且面板无数据",
  1601. "fix_hint": "无 records 时提示并 return;恢复 updateEnhancedConfigs(configs)",
  1602. "id": "BUG-107",
  1603. "status": "新建",
  1604. "date": "2026-11-02",
  1605. "method": "静态审查"
  1606. },
  1607. {
  1608. "module": "防灭火系统监测",
  1609. "file": "src/views/vent/monitorManager/deviceMonitor/components/device/modal/firemon.modal.vue:63-65",
  1610. "title": "智慧球温度值单位误标为 %",
  1611. "severity": "一般",
  1612. "type": "logic/display bug",
  1613. "symptom": "温度值旁显示 % 而非 ℃,监控读数语义错误",
  1614. "root_cause": "模板单位复制错误",
  1615. "repro": "打开 firemon 详情查看温度项单位",
  1616. "fix_hint": "将单位改为 ℃",
  1617. "id": "BUG-108",
  1618. "status": "新建",
  1619. "date": "2026-11-02",
  1620. "method": "静态审查"
  1621. },
  1622. {
  1623. "module": "预警联动控制",
  1624. "file": "src/views/vent/deviceManager/workingFace/CustomNormalTable.vue:250-251",
  1625. "title": "批量删除未传 handleSuccess 回调",
  1626. "severity": "一般",
  1627. "type": "undefined_api_ref",
  1628. "symptom": "确认后 handleSuccess is not a function,列表不刷新",
  1629. "root_cause": "batchDeleteById(params, handleSuccess) 被调用为 batchDelete({ids})",
  1630. "repro": "预警联动批删点确认看控制台",
  1631. "fix_hint": "传入 reload 作为第二参",
  1632. "id": "BUG-109",
  1633. "status": "新建",
  1634. "date": "2026-11-02",
  1635. "method": "静态审查"
  1636. },
  1637. {
  1638. "module": "预警联动控制",
  1639. "file": "src/views/vent/deviceManager/workingFace/index.vue:1-92",
  1640. "title": "预警联动控制落到通用智能管控 CRUD,无联动逻辑",
  1641. "severity": "一般",
  1642. "type": "incomplete",
  1643. "symptom": "范围名为预警联动控制,实际仅为 managesys 列表增删改,无预警联动控制流程",
  1644. "root_cause": "页面复用 CustomNormalTable + managesys_list;onMounted 空实现,无联动策略/告警动作 UI",
  1645. "repro": "按菜单进入预警联动控制 → 仅见设备/系统管理表",
  1646. "fix_hint": "补齐联动规则配置与执行界面,或修正菜单路由到正确页面",
  1647. "id": "BUG-110",
  1648. "status": "新建",
  1649. "date": "2026-11-02",
  1650. "method": "静态审查"
  1651. }
  1652. ]