feat(scada): align map asset fields

This commit is contained in:
2026-07-15 18:30:12 +08:00
parent 16ecb69d00
commit 055335e404
11 changed files with 153 additions and 71 deletions
@@ -71,27 +71,23 @@ describe("feature panel properties", () => {
it("shows SCADA identity, device, state, and sync fields", () => {
const model = getFeaturePanelModel("scada", {
id: "4bfa834b-cbbb-5f35-9523-7487ac021ed2",
point_id: "aaedc54a-e5b4-5791-b729-4b7e838a8d00",
point_external_id: "36455",
point_name: "DY22东市南街环城南路西段交叉口",
device_external_id: "26825171",
scada_id: "4bfa834b-cbbb-5f35-9523-7487ac021ed2",
site_external_id: "36455",
name: "DY22东市南街环城南路西段交叉口",
external_id: "26825171",
kind: "water_quality",
active: true,
device_type_id: 72,
device_type_name: "2代水质仪",
junction_id: "31011502010001809",
synced_at: "Jul 15, 2026, 7:38:45 AM"
});
expect(model.id).toBe("36455");
expect(model.id).toBe("4bfa834b-cbbb-5f35-9523-7487ac021ed2");
expect(model.badge).toEqual({ label: "在线", tone: "active" });
expect(model.attributes.map((entry) => entry.key)).toEqual([
"id",
"point_id",
"point_name",
"device_external_id",
"device_type_id",
"device_type_name",
"site_external_id",
"name",
"external_id",
"kind",
"junction_id",
"synced_at"
]);
@@ -99,12 +95,12 @@ describe("feature panel properties", () => {
it("omits the internal SCADA clustering size from user-facing properties", () => {
const entries = getLocalizedFeatureProperties({
point_name: "THC雷达液位计(MQTT",
name: "THC雷达液位计(MQTT",
cluster_size: 29,
device_external_id: "DEVICE-002"
external_id: "DEVICE-002"
});
expect(entries.map((entry) => entry.key)).toEqual(["point_name", "device_external_id"]);
expect(entries.map((entry) => entry.key)).toEqual(["name", "external_id"]);
});
it("labels uniformly sampled SCADA locations", () => {
@@ -23,6 +23,7 @@ export type FeaturePanelModel = {
const PROPERTY_LABELS: Record<string, string> = {
fid: "GeoServer 要素 ID",
id: "编号",
scada_id: "编号 UUID",
gid: "要素编号",
name: "名称",
code: "编码",
@@ -69,14 +70,18 @@ const PROPERTY_LABELS: Record<string, string> = {
device_type_name: "设备类型",
device_icon_code: "设备图标编码",
active: "运行状态",
external_id: "设备编号",
junction_id: "关联检查井",
kind: "设备类型",
location_source: "位置来源",
site_external_id: "站点编号",
synced_at: "同步时间"
};
const PROPERTY_ORDER: Record<string, number> = {
fid: 9,
id: 10,
scada_id: 10,
gid: 11,
name: 12,
code: 13,
@@ -136,7 +141,7 @@ const FEATURE_PANEL_PROPERTY_KEYS: Record<WaterNetworkSourceId, readonly string[
junctions: ["id", "invert_elevation", "max_depth"],
orifices: ["id", "discharge_coeff", "gated", "shape", "geom1", "geom2"],
outfalls: ["id", "invert_elevation", "outfall_type"],
scada: ["id", "point_id", "point_external_id", "point_name", "device_external_id", "active", "device_type_id", "device_type_name", "junction_id", "synced_at"]
scada: ["scada_id", "site_external_id", "name", "external_id", "kind", "active", "junction_id", "synced_at"]
};
const FEATURE_PANEL_BADGE_KEYS: Partial<Record<WaterNetworkSourceId, string>> = {
@@ -159,7 +164,7 @@ export function getFeaturePanelProperties(
featureId?: string
): LocalizedFeatureProperty[] {
return FEATURE_PANEL_PROPERTY_KEYS[layer].map((key) => {
const value = key === "id" ? properties[key] ?? featureId : properties[key];
const value = key === "id" || key === "scada_id" ? properties[key] ?? featureId : properties[key];
return {
key,
@@ -175,7 +180,7 @@ export function getFeaturePanelModel(
featureId?: string
): FeaturePanelModel {
const entries = getFeaturePanelProperties(layer, properties, featureId);
const idKey = layer === "scada" ? "point_external_id" : "id";
const idKey = layer === "scada" ? "scada_id" : "id";
const id = entries.find((entry) => entry.key === idKey)?.value ?? "暂无";
const badgeKey = FEATURE_PANEL_BADGE_KEYS[layer];
const badgeEntry = badgeKey ? entries.find((entry) => entry.key === badgeKey) : undefined;