_agent_monitor.json 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. [
  2. {
  3. "id-suggestion": "MON-WINDRECT-EXPORT-IMPORT-API",
  4. "module": "测风装置管控",
  5. "file path with line ranges": "src/views/vent/monitorManager/windrectMonitor/windrect.api.ts:59; src/views/vent/monitorManager/windrectMonitor/index.vue:769-771",
  6. "title": "测风导出函数实际请求导入接口",
  7. "severity": "致命",
  8. "type": "export calling wrong import API",
  9. "symptom": "一键测风结果导出不会调用 /safety/testwindDetail/exportXls,而是 POST /sys/user/importExcel,导出失败或误触发用户导入接口",
  10. "root_cause": "exportXls 实现写成 defHttp.post({ url: Api.importExcel }),而 index.vue 的 exportExcel 直接调用该函数(未使用正确的 getExportUrl)",
  11. "repro": "打开测风装置管控 → 触发 exportExcel(id) / 结果导出 → 抓包可见请求 importExcel",
  12. "fix_hint": "将 exportXls 的 url 改为 Api.exportXls,或改为使用 getExportUrl 走正确导出下载链路"
  13. },
  14. {
  15. "id-suggestion": "MON-MAINFAN-CHANGE-SMOKE1-SHARED-PARAM",
  16. "module": "主风机管控",
  17. "file path with line ranges": "src/views/vent/monitorManager/mainFanMonitor/index.vue:1609-1662",
  18. "title": "倒机正转/反转共用同一 paramcode",
  19. "severity": "致命",
  20. "type": "control buttons sharing same paramcode",
  21. "symptom": "changeSmoke1 场景下正启动与反启动都下发 CtrlFan1ToFan2 / CtrlFan2ToFan1,无法区分正反转倒机指令",
  22. "root_cause": "同文件 changeSmoke 分支正确使用 CtrlFan1ToFan2Forward/Reverse 与 CtrlFan2ToFan1Forward/Reverse,但 changeSmoke1 分支正反转都调用无方向后缀的同一点位",
  23. "repro": "风机处于正转/反转运行态触发一键倒机(modalType=changeSmoke1)→ 对比下发 paramcode",
  24. "fix_hint": "与 changeSmoke 分支对齐,正转用 *Forward、反转用 *Reverse"
  25. },
  26. {
  27. "id-suggestion": "MON-WINDOW-REAR-GATE-LABEL-MISMATCH",
  28. "module": "风窗管控",
  29. "file path with line ranges": "src/views/vent/monitorManager/windowMonitor/index.vue:37-41",
  30. "title": "后门控制按钮文案错写成前门",
  31. "severity": "严重",
  32. "type": "control buttons sharing same paramcode / mislabeled control",
  33. "symptom": "界面显示“打开前门/关闭前门”,实际下发 rearGateOpen_S/rearGateClose_S,操作员会误控后门",
  34. "root_cause": "按钮展示文案复制前门未改,第二参数标题已是后门,UI 文本与指令不一致",
  35. "repro": "具备 window:gateControl 且 ndoorcount==2 → 看后两颗按钮文案与 setControl 参数",
  36. "fix_hint": "将后两颗按钮文案改为“打开后门/关闭后门”"
  37. },
  38. {
  39. "id-suggestion": "MON-WINDOW-AREA-ANGLE-SHARED-PARAM",
  40. "module": "风窗管控",
  41. "file path with line ranges": "src/views/vent/monitorManager/windowMonitor/index.vue:11-14,623-651",
  42. "title": "窗面积与窗角度控制共用 paramcode 1/2",
  43. "severity": "严重",
  44. "type": "control buttons sharing same paramcode",
  45. "symptom": "窗1/窗2 面积设定与角度设定最终都下发 paramcode='1'/'2',后端无法区分面积/角度",
  46. "root_cause": "twoAreaControl 与 twoAngleControl 都 setControl('1'|'2'),handleOK else 分支直接 data.paramcode=handlerState",
  47. "repro": "同时开启 window:twoAreaControl 与 window:twoAngleControl → 分别设定面积/角度 → 抓包对比 paramcode",
  48. "fix_hint": "角度使用独立点位(如 frontSetAngle1),或在 value/附加字段中区分控制类型"
  49. },
  50. {
  51. "id-suggestion": "MON-WINDOW-SHOWANGLEAREA-USES-SETANGLE",
  52. "module": "风窗管控",
  53. "file path with line ranges": "src/views/vent/monitorManager/windowMonitor/index.vue:31-33,504-520",
  54. "title": "设定风窗面积误走角度弹窗流程",
  55. "severity": "严重",
  56. "type": "control buttons sharing same paramcode",
  57. "symptom": "权限 window:showAngleArea 的“设定风窗面积”调用 setAngle(1),弹窗标题按角度生成,但点位仍 frontSetValue",
  58. "root_cause": "面积按钮错误绑定 setAngle 而非 setArea",
  59. "repro": "开启 window:showAngleArea → 点击“设定风窗面积” → 观察 modalTitle 与下发参数",
  60. "fix_hint": "改为 setArea(1),或单独实现面积设定入口"
  61. },
  62. {
  63. "id-suggestion": "MON-FANLOCAL-DUP-DIAMETER-BTN",
  64. "module": "局部风机管控",
  65. "file path with line ranges": "src/views/vent/monitorManager/fanLocalMonitor/index.vue:782-791",
  66. "title": "风筒直径控制按钮重复且同 key",
  67. "severity": "严重",
  68. "type": "control buttons sharing same paramcode",
  69. "symptom": "控制区出现两个相同“风筒直径”按钮,key 均为 diameter,行为完全重复",
  70. "root_cause": "leftBtnArr 中 diameter 配置项被复制粘贴两次",
  71. "repro": "开启 fanLocal:diameter → 顶部控制按钮可见重复项",
  72. "fix_hint": "删除重复配置;若本意为主/备直径,需不同 key 与 paramcode"
  73. },
  74. {
  75. "id-suggestion": "MON-NETWORK-DHLOCAL-WRONG-FIELD",
  76. "module": "通风系统监测/通风网络解算",
  77. "file path with line ranges": "src/views/vent/monitorManager/deviceMonitor/components/network/index.vue:403-405",
  78. "title": "局部阻力字段误读自然风压",
  79. "severity": "严重",
  80. "type": "wrong field mapping / logic bug",
  81. "symptom": "巷道表“局部阻力”与“自然风压”显示相同值,局部阻力失真",
  82. "root_cause": "dHLocal 赋值使用 item['dHNature'],与 dHNature 同源",
  83. "repro": "打开网络解算结果表 → 对比局部阻力与自然风压列",
  84. "fix_hint": "改为读取 item['dHLocal'](或后端真实局部阻力字段)"
  85. },
  86. {
  87. "id-suggestion": "MON-EMERGENCY-DHLOCAL-WRONG-FIELD",
  88. "module": "灾变应急控制",
  89. "file path with line ranges": "src/views/vent/monitorManager/deviceMonitor/components/emergency/index.vue:273-275",
  90. "title": "应急解算局部阻力同样误绑 dHNature",
  91. "severity": "严重",
  92. "type": "wrong field mapping / logic bug",
  93. "symptom": "灾变应急巷道阻力表局部阻力错误",
  94. "root_cause": "与 network 相同的复制错误:dHLocal: item['dHNature']",
  95. "repro": "进入灾变应急页加载解算结果 → 查看巷道阻力列",
  96. "fix_hint": "改为 item['dHLocal']"
  97. },
  98. {
  99. "id-suggestion": "MON-EMERGENCY-SHARED-DETAIL-CODES",
  100. "module": "灾变应急控制",
  101. "file path with line ranges": "src/views/vent/monitorManager/deviceMonitor/components/emergency/index.vue:196-226",
  102. "title": "工作面详情多项共用同一数据 code",
  103. "severity": "严重",
  104. "type": "wrong field mapping / logic bug",
  105. "symptom": "工作面编号/采区/煤层都显示 dTotalArea;长度/走向/采高都显示 totallength",
  106. "root_cause": "analysisDetailDataList 多项复用相同 code,未映射独立字段",
  107. "repro": "打开灾变应急分析详情区 → 观察多行数值是否雷同",
  108. "fix_hint": "为每项配置正确业务字段 code,并在 pageData 中补齐对应值"
  109. },
  110. {
  111. "id-suggestion": "MON-NETWORK-READDATA-NULL-DEREF",
  112. "module": "通风系统监测/通风网络解算",
  113. "file path with line ranges": "src/views/vent/monitorManager/deviceMonitor/components/network/index.vue:447-454",
  114. "title": "传感器列表未判空直接读 readData",
  115. "severity": "严重",
  116. "type": "null deref on mount/update",
  117. "symptom": "monitors 中某条缺少 readData 时 analyzePageResult 抛错,页面解算结果渲染中断",
  118. "root_cause": "直接访问 item['readData']['va']/['m3'],无空保护",
  119. "repro": "构造 monitors 项 readData=null 的解算推送 → 打开网络页",
  120. "fix_hint": "先取 const rd=item.readData||{} 再读字段"
  121. },
  122. {
  123. "id-suggestion": "MON-EMERGENCY-READDATA-NULL-DEREF",
  124. "module": "灾变应急控制",
  125. "file path with line ranges": "src/views/vent/monitorManager/deviceMonitor/components/emergency/index.vue:314-321",
  126. "title": "应急页传感器 readData 空指针",
  127. "severity": "严重",
  128. "type": "null deref on mount/update",
  129. "symptom": "同网络页,缺 readData 时应急页崩溃",
  130. "root_cause": "item['readData']['va'] 无空判断",
  131. "repro": "推送缺 readData 的 monitors → 打开应急页",
  132. "fix_hint": "对 readData 做空对象兜底"
  133. },
  134. {
  135. "id-suggestion": "MON-FIBER-HARDCODE-WARN",
  136. "module": "光纤测温监测",
  137. "file path with line ranges": "src/views/vent/monitorManager/deviceMonitor/components/device/modal/fiber.modal.vue:49,169-188,232-257",
  138. "title": "光纤详情风险等级与预警历史写死假数据",
  139. "severity": "严重",
  140. "type": "mock hardcode replacing real API",
  141. "symptom": "风险等级恒为“低风险”,预警历史永远是测点6/318℃等假记录,不随真实报警变化",
  142. "root_cause": "模板写死低风险;warningConfig.data 硬编码数组,watch 未用真实告警填充",
  143. "repro": "打开光纤测温弹窗 → 对比真实告警与滚动板内容",
  144. "fix_hint": "绑定设备真实风险字段与告警历史接口/数据"
  145. },
  146. {
  147. "id-suggestion": "MON-FIBER-READDATA-NULL-DEREF",
  148. "module": "光纤测温监测",
  149. "file path with line ranges": "src/views/vent/monitorManager/deviceMonitor/components/device/modal/fiber.modal.vue:239-243",
  150. "title": "光纤弹窗 Object.keys(readData) 空指针",
  151. "severity": "严重",
  152. "type": "null deref on mount/update",
  153. "symptom": "设备无 readData 时打开弹窗直接 TypeError",
  154. "root_cause": "未判断 item.readData 即 Object.keys(item.readData)",
  155. "repro": "选中 readData 为空的光纤设备打开详情",
  156. "fix_hint": "if (!item.readData) return; 后再解析分段温度"
  157. },
  158. {
  159. "id-suggestion": "MON-DUST-HARDCODE-WARN",
  160. "module": "防尘系统监测",
  161. "file path with line ranges": "src/views/vent/monitorManager/deviceMonitor/components/device/modal/dust.modal.vue:216-238",
  162. "title": "粉尘弹窗测点状态/预警历史硬编码",
  163. "severity": "严重",
  164. "type": "mock hardcode replacing real API",
  165. "symptom": "测点状态 customRender 永远返回“正常”;预警滚动板为固定假数据",
  166. "root_cause": "columns.state 写死正常;warningConfig.data 硬编码",
  167. "repro": "打开粉尘监测详情弹窗观察状态与预警列表",
  168. "fix_hint": "状态取真实字段;预警列表接真实告警数据"
  169. },
  170. {
  171. "id-suggestion": "MON-FIREMON-TEMP-UNIT-WRONG",
  172. "module": "防灭火系统监测",
  173. "file path with line ranges": "src/views/vent/monitorManager/deviceMonitor/components/device/modal/firemon.modal.vue:63-65",
  174. "title": "智慧球温度值单位误标为 %",
  175. "severity": "一般",
  176. "type": "logic/display bug",
  177. "symptom": "温度值旁显示 % 而非 ℃,监控读数语义错误",
  178. "root_cause": "模板单位复制错误",
  179. "repro": "打开 firemon 详情查看温度项单位",
  180. "fix_hint": "将单位改为 ℃"
  181. },
  182. {
  183. "id-suggestion": "MON-ATOMIZING-LOCATION-UNIT-WRONG",
  184. "module": "喷雾降尘/防尘系统监测",
  185. "file path with line ranges": "src/views/vent/monitorManager/deviceMonitor/components/device/modal/atomizing.modal.vue:33-42",
  186. "title": "主机位置字段错误附加 ℃ 单位",
  187. "severity": "一般",
  188. "type": "logic/display bug",
  189. "symptom": "位置类字段后显示温度单位,信息误导",
  190. "root_cause": "holderLocation 展示模板误加 ℃",
  191. "repro": "打开喷雾监测详情查看“主机位置”",
  192. "fix_hint": "去掉 ℃,位置字段无需单位"
  193. },
  194. {
  195. "id-suggestion": "MON-BETKY-MOCK-AND-POLL-BUG",
  196. "module": "工作面来压预警",
  197. "file path with line ranges": "src/views/vent/monitorManager/betKy/index.vue:110-146,253-263",
  198. "title": "矿压监测轮询逻辑错误且特定矿用假数据",
  199. "severity": "严重",
  200. "type": "mock hardcode + setInterval/setTimeout poll without proper clear",
  201. "symptom": "A02A02 矿强制使用 ceshi.json;轮询前把 timer 置 null 未 clearTimeout,chartData 每次 push 不清理导致曲线数据膨胀错乱;卸载用 clearInterval 清 setTimeout",
  202. "root_cause": "getDataSource 用本地 json 替换真实 list;timer 管理与 chartData 累积错误",
  203. "repro": "进入 betKy 页(尤其 A02A02)观察请求与图表随时间变化",
  204. "fix_hint": "去掉矿别假数据分支;轮询用 clearTimeout;每次刷新重置 chartData"
  205. },
  206. {
  207. "id-suggestion": "MON-BETKY-READDATA-NULL",
  208. "module": "工作面来压预警",
  209. "file path with line ranges": "src/views/vent/monitorManager/betKy/index.vue:127-131",
  210. "title": "矿压轮询 Object.values(readData) 空指针",
  211. "severity": "严重",
  212. "type": "null deref on mount",
  213. "symptom": "设备缺 readData 时页面轮询崩溃,后续刷新停止",
  214. "root_cause": "未判空直接 Object.values(readData)",
  215. "repro": "返回含 readData=null 的 Minepressure 列表",
  216. "fix_hint": "if (!readData) continue; 后再处理"
  217. },
  218. {
  219. "id-suggestion": "MON-AIRDOOR-TIPMODAL-TIMER-LEAK",
  220. "module": "风门集中同控",
  221. "file path with line ranges": "src/views/vent/monitorManager/airDoor/components/tipModal.vue:28-54",
  222. "title": "倒计时弹窗 setTimeout 递归不清理",
  223. "severity": "严重",
  224. "type": "setInterval/setTimeout poll without clear on unmount",
  225. "symptom": "提示弹窗显示后每秒递归创建定时器;关闭/卸载后仍继续;timeout<=0 时先 timer=undefined 再 clearTimeout(undefined) 无效,且仍调用 getMonitor()",
  226. "root_cause": "无 onUnmounted/Visible=false 时 clear;递归无退出;clear 顺序错误",
  227. "repro": "触发 visibleTs30=true → 关闭弹窗或离开页面 → 观察仍有定时回调",
  228. "fix_hint": "保存 timerId;Visible 变 false 与 onUnmounted 时 clearTimeout;倒计时结束停止递归"
  229. },
  230. {
  231. "id-suggestion": "MON-AIRDOOR-MSGTXT-NULL-DEREF",
  232. "module": "风门集中同控",
  233. "file path with line ranges": "src/views/vent/monitorManager/airDoor/index.vue:44-51",
  234. "title": "风门同控菜单拉取未判空 msgTxt[0]",
  235. "severity": "严重",
  236. "type": "null deref on mount",
  237. "symptom": "接口返回空/异常结构时 getMenuList 抛错,左侧菜单无法加载",
  238. "root_cause": "直接访问 res.msgTxt[0].datalist.length",
  239. "repro": "mock /monitor/device 返回无 msgTxt 或空数组 → 打开风门集中同控",
  240. "fix_hint": "使用可选链与默认 []:res?.msgTxt?.[0]?.datalist || []"
  241. },
  242. {
  243. "id-suggestion": "MON-WORKFACE-WARNINFO-KEY-BUG",
  244. "module": "综采面智能管控",
  245. "file path with line ranges": "src/views/vent/monitorManager/workFaceMonitor/components/workFaceHome.vue:262-276",
  246. "title": "综合预警判断键错误且可能空指针",
  247. "severity": "严重",
  248. "type": "null deref / wrong field mapping",
  249. "symptom": "用 warnInfo.warnInfo 判断却读取 synthesizeS;键不匹配时综合预警不更新,或 synthesizeS 缺失时崩溃;surface_history/sysInfo 亦缺保护",
  250. "root_cause": "条件写成 res['warnInfo']['warnInfo'];并对 surface_history[0]、sysInfo.readData 无空保护",
  251. "repro": "返回缺 synthesizeS 或 surface_history 为空的综采面数据",
  252. "fix_hint": "条件改为 synthesizeS;对各嵌套字段做空判断"
  253. },
  254. {
  255. "id-suggestion": "MON-TUNFACE-WARN-NULL-DEREF",
  256. "module": "掘进面智能管控",
  257. "file path with line ranges": "src/views/vent/monitorManager/tunFaceMonitor/components/tunFaceHome.vue:254,262-271",
  258. "title": "掘进面首页无条件解包 warnInfo/readData",
  259. "severity": "严重",
  260. "type": "null deref on mount",
  261. "symptom": "缺 dustS/fireS/gasS/synthesizeS/ventS、缺 surface_history、或缺 location.readData 时页面直接崩溃",
  262. "root_cause": "无守卫直接访问 res['warnInfo'][x]['devices']、res['surface_history'][0]、data['readData']['flen']",
  263. "repro": "接口缺任一 warn 分组或 location.readData → 打开掘进面主页",
  264. "fix_hint": "逐层可选链;缺省赋空数组/空对象"
  265. },
  266. {
  267. "id-suggestion": "MON-BELTTUN-WARN-NULL-DEREF",
  268. "module": "皮带巷管控系统",
  269. "file path with line ranges": "src/views/vent/monitorManager/beltTunMonitor/components/beltTunHome.vue:260-268",
  270. "title": "皮带巷首页 warnInfo/sysInfo 无空保护",
  271. "severity": "严重",
  272. "type": "null deref on mount",
  273. "symptom": "sysInfo 或某类 warn 分组缺失时页面加载失败",
  274. "root_cause": "直接 Object.assign(res['sysInfo'], res['sysInfo']['readData']) 与 warnInfo.*.devices",
  275. "repro": "返回不完整 beltTun 监测包 → 打开皮带巷主页",
  276. "fix_hint": "增加空判断与默认值"
  277. },
  278. {
  279. "id-suggestion": "MON-WORKFACE-LOCATION-FLEN-NULL",
  280. "module": "综采面智能管控",
  281. "file path with line ranges": "src/views/vent/monitorManager/workFaceMonitor/components/workFaceHome.vue:251-254",
  282. "title": "定位列表读取 readData.flen 空指针",
  283. "severity": "严重",
  284. "type": "null deref on mount/update",
  285. "symptom": "location 设备无 readData 时过滤阶段抛错,后续监控数据不完整",
  286. "root_cause": "locationData.push 中直接 data['readData']['flen']",
  287. "repro": "location.datalist 含 readData=null 的项",
  288. "fix_hint": "使用 data?.readData?.flen ?? '-'"
  289. },
  290. {
  291. "id-suggestion": "MON-MAINFAN-AREA-SIM-INTERVAL-LEAK",
  292. "module": "主风机管控",
  293. "file path with line ranges": "src/views/vent/monitorManager/mainFanMonitor/hooks/useAreaSetSimulation.ts:37-109; useMainFanSimulation.ts:25-72",
  294. "title": "天窗/闸板面积模拟 setInterval 卸载未清理",
  295. "severity": "一般",
  296. "type": "setInterval/setTimeout poll without clear on unmount",
  297. "symptom": "开启 fanSwitchoverSimulation 后设定面积过程中离开页面,interval 仍改 selectData,可能写已销毁状态",
  298. "root_cause": "useAreaSetSimulation 仅在过程结束 clear;无 onUnmounted 遍历 activeProcesses 清理(对比 useFanSwitchoverSimulation 有 stopTick)",
  299. "repro": "开启模拟 → 设定天窗面积 → 过渡未完成即路由离开",
  300. "fix_hint": "在 composable 增加 dispose/onUnmounted,清理 Map 内全部 interval"
  301. }
  302. ]