影响图增强:脏标签净化(A) + 节点上限(B) · 2026-07-31
用户指令
"A, B" —— A:给影响图标签加脏数据净化(避免 [object Object]/{is_null});B:给 analyze 加节点上限,让产品级大对象也能安全出图。
A · 标签净化(前端)
src/views/AiWorkbench.vue:新增safeLabel(n),在tryImpactAnalysis构建 nodes 时替换原item_number||name||id直取逻辑。规则:优先干净item_number(剔除[object Object]/{is_null}/{#text等对象串)→ 退回name→ 退回截断的id(>10 字符截前 10+…)→未知编号。src/components/ImpactChart.vue:新增safeLabel()防御层(对象 →#text/keyed_name提取 →未知编号),即使脏数据绕过前端也能兜底。summary在json.truncated时追加"(已聚合展示前 N 个关联对象,完整数据请在 SCSAI 查看)"。
B · 后端节点上限(server/routes/change.js)
- 在
analyzeChangeImpact的 collector 区域新增MAX_IMPACT_NODES = 300与checkLimit(),对product/part分支的 models/parts/parents 循环加if (!checkLimit()) break;提前终止。 - 响应体新增
truncated字段(达到上限为 true)。 - 改动极小、仅加早退,不破坏既有逻辑;未提交。
验证(真实接口实测,非 mock)
- 产品级(智能控制器产品 350CB71A…):改动前 60s 超时;改动后 16.9s 返回,truncated=true,节点 300 封顶,不再卡死服务/爆图。
- 零件级(0460-2536 922B8F1B…):1.5s,31 含 16 唯一节点,truncated=false,稳。
- 脏标签净化:对产品级 300 节点跑
safeLabel,脏标签数 0(原[object Object]/{is_null}全部净化为_MTP-1784425208364/0460-2536/0403等干净编号)。 - 前端
npm run build✓ built in 25.70s,AiWorkbench + ImpactChart 均编译进 bundle。
服务状态
- server 已重启(pid 13380,端口 3006,/api/health 200)以使后端上限生效。
改动清单(均未提交,遵守 no-commit 约束)
- M server/routes/change.js(B:节点上限)
- M src/views/AiWorkbench.vue(A:safeLabel + truncated 提示)
- ?? src/components/ImpactChart.vue(A:safeLabel 兜底)
- 注:git status 还显示 M server/utils/SCSAI-client.js 与 M server/data/unified-messages.json,均为本会话之前的遗留改动,非本次引入。
演示推荐
- 主演示:查询 0460-2536 的影响范围(1.5s,16 节点放射图,稳)。
- 要炸裂效果:查询 智能控制器产品 的影响范围(16.9s,300 节点大图,truncated 提示,安全)。
- P-1001 留作浅层对照。
BossAgents