| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- [
- {
- "module": "喷淋监控系统",
- "file": "src/views/vent/monitorManager/sprayMonitor/index.vue",
- "lines": "68-140",
- "title": "多路控制按钮共用同一 paramcode/value",
- "severity": "critical",
- "type": "wrong_control_payload",
- "symptom": "除急停外,补水阀/搅拌阀/组化泵/上料机/喷洒自动等按钮下发完全相同的指令,设备无法按按钮区分控制,存在误控风险",
- "root_cause": "operations 全部使用 key='run_auto_sign',且多数 value='0';BasicMonitoring.deviceControl 仅按 key/value 下发",
- "repro": "打开喷淋监控→输入密码点击“补水阀启停”与“喷洒自动”→抓包可见 paramcode/value 相同",
- "fix_hint": "为每个操作配置独立 paramcode,并按启停状态设置正确 value(参考业务点表)"
- },
- {
- "module": "喷淋监控系统",
- "file": "src/components/vent/BasicMonitoring.vue",
- "lines": "19,193-201",
- "title": "操作列表 :key 冲突 + 空场景崩溃",
- "severity": "high",
- "type": "vue_key_collision/null_crash",
- "symptom": "喷淋多个按钮共用 key 导致 DOM 复用异常;无场景数据时页面直接抛错白屏",
- "root_cause": "v-for 使用 item.key 作唯一键但喷淋键重复;getSysDataSource 无空数组守卫直接取 options[0].id",
- "repro": "1) 打开喷淋页观察按钮交互状态错乱;2) 后端返回空 records 时进入页面立即报错",
- "fix_hint": "key 使用 label 或唯一 id;取首项前判断 records.length"
- },
- {
- "module": "智能注氮系统",
- "file": "src/views/vent/monitorManager/compressor/index.vue",
- "lines": "93-126",
- "title": "空列表崩溃且 modalType 未随系统类型切换",
- "severity": "high",
- "type": "null_crash/stale_config",
- "symptom": "无注氮系统时白屏;依赖 modalType 的矿端组件始终按 nitrogenUnderground 建模",
- "root_cause": "options.value[0]['id'] 无空判断;changeModalType 中 modalType 赋值被注释,仅改了 moduleTypeName",
- "repro": "空数据进页崩溃;潞宁等使用 modalType 的矿切换空压机/制氮机后模型类型不变",
- "fix_hint": "空 records 提前 return;恢复按 strsystype 设置 modalType"
- },
- {
- "module": "智能注氮系统",
- "file": "src/views/vent/monitorManager/compressor/components/nitrogenHome_ln.vue",
- "lines": "341-349",
- "title": "监测数据忽略选中系统ID",
- "severity": "high",
- "type": "wrong_data_binding",
- "symptom": "切换注氮系统后仍展示 msgTxt[0] 数据,监控内容与下拉选择不一致",
- "root_cause": "getDataSource(systemID) 入参未用于请求,固定取 res.msgTxt[0].datalist",
- "repro": "配置≥2套注氮系统→切换下拉→数据不随 systemId 变化",
- "fix_hint": "按 systemID/deviceId 过滤或带参请求对应系统数据"
- },
- {
- "module": "智能注浆系统",
- "file": "src/views/vent/monitorManager/groutMonitor/index.vue",
- "lines": "110-119,67,86",
- "title": "空数据崩溃且 currentDeviceType 永不赋值",
- "severity": "high",
- "type": "null_crash/dead_state",
- "symptom": "无注浆系统时白屏;传给 groutHome 的 device-type 恒为空字符串",
- "root_cause": "options.value[0]['id'] 无守卫;deviceChange 只写 deviceType,从未写入 currentDeviceType",
- "repro": "空列表进页崩溃;有数据时检查 groutHome props.deviceType 为空",
- "fix_hint": "空 records 保护;deviceChange/getSelectRow 同步 currentDeviceType"
- },
- {
- "module": "密闭监测系统",
- "file": "src/views/vent/monitorManager/obfurageMonitor/index.vue",
- "lines": "89-138",
- "title": "空数据崩溃且切换系统不刷新关联设备",
- "severity": "high",
- "type": "null_crash/stale_state",
- "symptom": "无密闭系统/无关联设备时崩溃;切换密闭点后历史页设备 Tab 仍是旧设备",
- "root_cause": "直接访问 msgTxt[0]、deviceArr[0];getSelectRow 只改 optionValue,未调用 getDeviceList",
- "repro": "空数据进页;有多套密闭→切换后打开历史监测看设备按钮未更新",
- "fix_hint": "空数组守卫;getSelectRow 内调用 getDeviceList()"
- },
- {
- "module": "防火门智能管控",
- "file": "src/views/vent/home/configurable/firedoor/fireDoorMonitor.vue",
- "lines": "76-99",
- "title": "场景列表为空仍继续后续逻辑且配置增强未启用",
- "severity": "medium",
- "type": "incomplete_init",
- "symptom": "无防火门场景时下拉为空、模块无有效数据;服务端配置未走 updateEnhancedConfigs",
- "root_cause": "records 为空时仍调用 loadFireGateData;updateEnhancedConfigs 被注释",
- "repro": "manageFireList 返回空→页面无场景可选且面板无数据",
- "fix_hint": "无 records 时提示并 return;恢复 updateEnhancedConfigs(configs)"
- },
- {
- "module": "机电硐室管控",
- "file": "src/views/vent/home/configurable/electroChamber.vue",
- "lines": "86-99,29-50",
- "title": "拉取配置后强制覆盖为本地测试配置且历史无设备ID",
- "severity": "high",
- "type": "hardcoded_override/missing_param",
- "symptom": "线上始终使用 testConfigElectro;切历史 Tab 时 deviceId 常为空导致查询无效",
- "root_cause": "fetchConfigs 成功后 configs.value=testConfigElectro;optionValue 仅来自路由 query,无设备选择赋值",
- "repro": "非 A02A02 环境打开页面看配置是否被测试数据覆盖;无 query.id 切历史记录",
- "fix_hint": "生产去掉测试覆盖;补充硐室/系统选择并写入 optionValue"
- },
- {
- "module": "报表管理",
- "file": "src/views/vent/reportManager/comment/reportMap.vue",
- "lines": "82-119,135-145",
- "title": "reactive 表单被整体重赋值 + 部门树空 children 崩溃",
- "severity": "high",
- "type": "reactivity_break/null_crash",
- "symptom": "新增/编辑后表单状态异常;部门节点无 children 时查询部门树直接报错",
- "root_cause": "formState= {...} 丢弃 reactive 代理;el.children.forEach 未判空",
- "repro": "编辑一条映射再点新增观察表单残留;部门树缺 children 的节点触发加载",
- "fix_hint": "用 Object.assign(formState, ...) 或重置字段;forEach 前守卫 children"
- },
- {
- "module": "报表数据映射",
- "file": "src/views/vent/reportManager/comment/report-modal.vue",
- "lines": "135-151",
- "title": "编辑时 JSON.parse(mineCells) 在非字符串时抛错",
- "severity": "high",
- "type": "type_error",
- "symptom": "编辑已有映射弹窗打开失败或控制台 TypeError",
- "root_cause": "watch 中无条件 JSON.parse(formStates.mineCells);接口若已反序列化为数组则解析失败;且 Object.assign 不会清除旧 id",
- "repro": "打开编辑,当 record.mineCells 为数组或空时复现",
- "fix_hint": "typeof===string 再 parse,数组则直接使用;新增时显式清空 id"
- },
- {
- "module": "安全监控分站管理",
- "file": "src/views/vent/safetyList/index.vue",
- "lines": "234-257,408-417",
- "title": "卸载引用未定义 timer + children 空指针 + 分页 total 错误",
- "severity": "high",
- "type": "reference_error/null_crash",
- "symptom": "离开页面报 timer is not defined;devInfoList 为空时列表渲染崩溃;分页总数异常",
- "root_cause": "timer 声明被注释但 onUnmounted 仍引用;el.children=el.devInfoList 后直接 forEach;res.total 在数组结果上常为 undefined",
- "repro": "进入页再离开;返回含 null devInfoList 的分站;观察 pagination.total",
- "fix_hint": "删除或恢复 timer;
|