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" });