From: wang.yu Date: Thu, 20 Aug 2026 02:33:54 +0000 (+0800) Subject: 修复:领域方案 AI 资产补全未写入表格 X-Git-Url: http://acesimba.cloud/gitweb/?a=commitdiff_plain;h=d3b5bd8611a978ba429530b6924551fbf71166b2;p=StationBuilder.git 修复:领域方案 AI 资产补全未写入表格 - handleDomainCompleteAssets 在 emit 结果前,将解析后的资产按 device_template_id 去重、sort_order 顺延追加写入 domain_template_assets - 此前仅 emit result 未落库,前端 load() 重载后覆盖本地新增行, 导致 AI 补全的设备建议不显示在资产表格中 --- diff --git a/db-sidecar.mjs b/db-sidecar.mjs index 6d4a05c..06d13c8 100644 --- a/db-sidecar.mjs +++ b/db-sidecar.mjs @@ -1794,6 +1794,16 @@ async function handleDomainCompleteAssets(req, res, tmplId) { if (r.created) createdNames.push(it.type); assets.push({ device_template_id: r.id, count: it.count, rule: it.rule }); } + // 落库:追加写入 domain_template_assets(按 device_template_id 去重,避免覆盖用户手动已录入的行) + const maxSort = db.prepare("SELECT COALESCE(MAX(sort_order), -1) AS m FROM domain_template_assets WHERE domain_template_id=?").get(tmplId).m; + let so = maxSort + 1; + const ins = db.prepare("INSERT INTO domain_template_assets (domain_template_id, device_template_id, count, rule, sort_order) VALUES (?,?,?,?,?)"); + const exists = db.prepare("SELECT 1 FROM domain_template_assets WHERE domain_template_id=? AND device_template_id=?"); + for (const a of assets) { + if (!a || !a.device_template_id) continue; + if (exists.get(tmplId, a.device_template_id)) continue; + ins.run(tmplId, Number(a.device_template_id), Number(a.count) || 0, a.rule || "", so++); + } emit({ log: `\n✓ 已生成 ${assets.length} 类设备配置${createdNames.length ? `,并自动创建设备模板:${createdNames.join("、")}` : ""}\n` }); emit({ result: assets, created: createdNames }); emit({ task: "AI 资产补全", status: "done" });