topo-engine 0.1.7 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/docs/API.md CHANGED
@@ -575,6 +575,118 @@ resetAllNodeStyles(): void
575
575
 
576
576
  ---
577
577
 
578
+ ### 节点 / 箱内电表户染色(psrId / 资产编号)
579
+
580
+ > 给图元“换颜色”。引用规则与 `addConnection` 完全一致:
581
+ > - **普通节点** —— 节点内部 id 或 **`psrId`(设备编码)**:变压器 / 开关 / 熔丝 /
582
+ > 导线连接点 / 母线 / 用户接入点 / 计量箱本体均可;
583
+ > - **箱内电表户** —— 客户档案里的 **`assetNo`(资产编号)**(兼容 `consNo`/`consId`):
584
+ > 命中计量箱内该户的**电表图标 + 户名**(单户箱即整箱那一只表;多户箱只染该格)。
585
+ >
586
+ > 渲染效果:
587
+ > - 普通节点为**整图单色换装**——主体 / 引线 / 描边全部换成指定色,
588
+ > 白字与浅色细节(开关 Kxx 标签、内高光、装饰条)保留以保证可读;
589
+ > - 箱内电表户染该户表体 / 显示窗 / 脉冲点与户名颜色;悬停(青)与选中(金)优先级更高,
590
+ > 取消悬停 / 选中后自动回到所染颜色。
591
+ >
592
+ > 染色记录保存在 API 内部,**主题切换 / 数据重渲染后自动保留并重放**(同一次会话内
593
+ > 无需重新调用;`resetNodeColor` / `resetAllNodeColors` 可清除)。
594
+
595
+ #### `setNodeColor(ref, color)`
596
+
597
+ 按 **节点 psrId / id** 或 **用户 assetNo(资产编号)** 染色。
598
+
599
+ ```ts
600
+ setNodeColor(ref: string, color: string | null): boolean
601
+ // color 传 null / '' / undefined 等价于清除该处染色(回到主题默认配色)
602
+ ```
603
+
604
+ **示例:**
605
+ ```js
606
+ // 1) 普通节点:按 psrId(设备编码)把变压器染红
607
+ topo.setNodeColor('8ff4786d548a7073a2517297e801518ff456732f4d', '#FF0000');
608
+
609
+ // 2) 电表户:按资产编号(assetNo)把某户电表染橙
610
+ topo.setNodeColor('4230010007008084768', '#FF6600');
611
+
612
+ // 3) 也支持节点内部 id
613
+ topo.setNodeColor('5', '#00FF00');
614
+
615
+ // 4) 清除染色(回到主题默认色)
616
+ topo.setNodeColor('4230010007008084768', null);
617
+ ```
618
+
619
+ ---
620
+
621
+ #### `batchSetNodeColor(entries, color?)`
622
+
623
+ 批量染色(如后端返回「psrId → 状态色」「assetNo → 状态色」列表时一次性下发)。
624
+ 三种入参形式:
625
+
626
+ ```ts
627
+ batchSetNodeColor(entries: any, color?: string): {
628
+ total: number;
629
+ ok: number;
630
+ failed: Array<{ ref: string, reason: string }>;
631
+ }
632
+ ```
633
+
634
+ **示例:**
635
+ ```js
636
+ // 形式 1:[ref, color] 数组
637
+ topo.batchSetNodeColor([
638
+ ['8ff4786d548a7073a2517297e801518ff456732f4d', '#FF0000'],
639
+ ['4230010007008084768', '#FF6600'],
640
+ ]);
641
+
642
+ // 形式 2:对象数组(color 缺省时用第 2 参)
643
+ topo.batchSetNodeColor([
644
+ { psrId: '8ff4…', color: '#FF0000' },
645
+ { assetNo: '4230…' },
646
+ ], '#FF6600');
647
+
648
+ // 形式 3:ref → color 对象
649
+ topo.batchSetNodeColor({
650
+ '8ff4786d548a7073a2517297e801518ff456732f4d': '#FF0000',
651
+ '4230010007008084768': '#FF6600',
652
+ });
653
+ ```
654
+
655
+ ---
656
+
657
+ #### `resetNodeColor(ref)`
658
+
659
+ 清除指定节点 / 电表户的染色。
660
+
661
+ ```ts
662
+ resetNodeColor(ref: string): boolean
663
+ ```
664
+
665
+ ---
666
+
667
+ #### `resetAllNodeColors()`
668
+
669
+ 清除全部染色(所有节点与电表户回到主题默认配色)。
670
+
671
+ ```ts
672
+ resetAllNodeColors(): void
673
+ ```
674
+
675
+ ---
676
+
677
+ #### `getNodeColor(ref)`
678
+
679
+ 查询某处当前生效的染色(未命中返回 `null`)。
680
+
681
+ ```ts
682
+ getNodeColor(ref: string):
683
+ | { kind: 'node', id: string, color: string | null }
684
+ | { kind: 'customer', id: string, boxId: string, index: number, color: string | null }
685
+ | null
686
+ ```
687
+
688
+ ---
689
+
578
690
  ## 四、边样式
579
691
 
580
692
  ### `setEdgeStyle(srcId, tgtId, style)`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "topo-engine",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "配电台区单线图拓扑成图引擎 (Vue3 + G6 v5 + Node/Vite)",