@caoguo/maplibre-pipeline 0.0.6 → 0.0.7
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/dist/{chunk-3656CGXE.js → chunk-33TITD2I.js} +31 -3
- package/dist/chunk-33TITD2I.js.map +1 -0
- package/dist/health/index.cjs +30 -0
- package/dist/health/index.cjs.map +1 -1
- package/dist/health/index.d.cts +29 -1
- package/dist/health/index.d.ts +29 -1
- package/dist/health/index.js +1 -1
- package/dist/index.cjs +30 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-3656CGXE.js.map +0 -1
- package/dist/chunk-BWQKY35F.js +0 -259
- package/dist/chunk-BWQKY35F.js.map +0 -1
- package/dist/chunk-GCDA7KJM.js +0 -289
- package/dist/chunk-GCDA7KJM.js.map +0 -1
- package/dist/chunk-HCT6NSNS.js +0 -532
- package/dist/chunk-HCT6NSNS.js.map +0 -1
- package/dist/chunk-QVY4WJLM.js +0 -256
- package/dist/chunk-QVY4WJLM.js.map +0 -1
- package/dist/chunk-YBLESEN4.js +0 -133
- package/dist/chunk-YBLESEN4.js.map +0 -1
- package/dist/chunk-YS2ICFVK.js +0 -101
- package/dist/chunk-YS2ICFVK.js.map +0 -1
package/dist/chunk-QVY4WJLM.js
DELETED
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
// src/style/pipelineTheme.ts
|
|
2
|
-
var PIPELINE_TYPE_COLORS = {
|
|
3
|
-
gas: "#f59e0b",
|
|
4
|
-
// 琥珀(燃气)
|
|
5
|
-
water: "#3b82f6",
|
|
6
|
-
// 蓝(供水)
|
|
7
|
-
drainage: "#6b7280",
|
|
8
|
-
// 灰(排水)
|
|
9
|
-
heating: "#ef4444",
|
|
10
|
-
// 红(供热)
|
|
11
|
-
power: "#8b5cf6",
|
|
12
|
-
// 紫(电力管沟)
|
|
13
|
-
telecom: "#10b981"
|
|
14
|
-
// 绿(通信管沟)
|
|
15
|
-
};
|
|
16
|
-
var PIPELINE_TYPE_LABELS = {
|
|
17
|
-
gas: "\u71C3\u6C14\u7BA1",
|
|
18
|
-
water: "\u4F9B\u6C34\u7BA1",
|
|
19
|
-
drainage: "\u6392\u6C34\u7BA1",
|
|
20
|
-
heating: "\u4F9B\u70ED\u7BA1",
|
|
21
|
-
power: "\u7535\u529B\u7BA1\u6C9F",
|
|
22
|
-
telecom: "\u901A\u4FE1\u7BA1\u6C9F"
|
|
23
|
-
};
|
|
24
|
-
var PIPELINE_TYPE_ICONS = {
|
|
25
|
-
gas: "\u{1F525}",
|
|
26
|
-
water: "\u{1F4A7}",
|
|
27
|
-
drainage: "\u{1F6B0}",
|
|
28
|
-
heating: "\u{1F534}",
|
|
29
|
-
power: "\u26A1",
|
|
30
|
-
telecom: "\u{1F4E1}"
|
|
31
|
-
};
|
|
32
|
-
var PIPE_STATUS_COLORS = {
|
|
33
|
-
normal: "#4ade80",
|
|
34
|
-
// 绿
|
|
35
|
-
aging: "#fbbf24",
|
|
36
|
-
// 黄
|
|
37
|
-
damaged: "#ef4444",
|
|
38
|
-
// 红
|
|
39
|
-
under_repair: "#8b5cf6",
|
|
40
|
-
// 紫
|
|
41
|
-
abandoned: "#4b5563",
|
|
42
|
-
// 深灰
|
|
43
|
-
unknown: "#6b7280"
|
|
44
|
-
// 灰
|
|
45
|
-
};
|
|
46
|
-
var PIPE_STATUS_META = {
|
|
47
|
-
normal: { label: "\u6B63\u5E38", animation: "none" },
|
|
48
|
-
aging: { label: "\u8001\u5316", animation: "none" },
|
|
49
|
-
damaged: { label: "\u635F\u574F", animation: "pulse" },
|
|
50
|
-
under_repair: { label: "\u7EF4\u4FEE\u4E2D", animation: "dashed" },
|
|
51
|
-
abandoned: { label: "\u5E9F\u5F03", animation: "none" },
|
|
52
|
-
unknown: { label: "\u672A\u77E5", animation: "none" }
|
|
53
|
-
};
|
|
54
|
-
var PIPE_MATERIAL_COLORS = {
|
|
55
|
-
cast_iron: "#94a3b8",
|
|
56
|
-
// 蓝灰(旧铸铁)
|
|
57
|
-
ductile_iron: "#0ea5e9",
|
|
58
|
-
// 天蓝(球墨铸铁)
|
|
59
|
-
steel: "#64748b",
|
|
60
|
-
// 钢蓝
|
|
61
|
-
pe: "#22c55e",
|
|
62
|
-
// 绿(PE 现代管材)
|
|
63
|
-
pvc: "#a78bfa",
|
|
64
|
-
// 紫(PVC)
|
|
65
|
-
concrete: "#a8a29e",
|
|
66
|
-
// 米灰(混凝土)
|
|
67
|
-
hdpe: "#16a34a",
|
|
68
|
-
// 深绿(HDPE)
|
|
69
|
-
copper: "#d97706",
|
|
70
|
-
// 橙(铜)
|
|
71
|
-
unknown: "#6b7280"
|
|
72
|
-
};
|
|
73
|
-
var NODE_KIND_ICONS = {
|
|
74
|
-
junction: "M -6 0 L 6 0 M 0 -6 L 0 6",
|
|
75
|
-
// 十字
|
|
76
|
-
valve: "M -8 -4 L 8 4 M 0 -4 L 0 4",
|
|
77
|
-
// X
|
|
78
|
-
pump: "M -6 0 A 6 6 0 1 0 6 0 A 6 6 0 1 0 -6 0",
|
|
79
|
-
// 圆
|
|
80
|
-
meter: "M -6 -6 L 6 -6 L 6 6 L -6 6 Z",
|
|
81
|
-
// 方
|
|
82
|
-
source: "M 0 -10 L 6 6 L -6 6 Z",
|
|
83
|
-
// 三角
|
|
84
|
-
tank: "M -8 -6 Q 0 -10 8 -6 L 8 6 L -8 6 Z",
|
|
85
|
-
// 圆角
|
|
86
|
-
junction_box: "M -7 -4 L 7 -4 L 7 4 L -7 4 Z"
|
|
87
|
-
// 小方
|
|
88
|
-
};
|
|
89
|
-
var NODE_KIND_COLORS = {
|
|
90
|
-
junction: "#94a3b8",
|
|
91
|
-
valve: "#ef4444",
|
|
92
|
-
// 阀门=红(控制关键)
|
|
93
|
-
pump: "#f59e0b",
|
|
94
|
-
meter: "#3b82f6",
|
|
95
|
-
source: "#22c55e",
|
|
96
|
-
tank: "#06b6d4",
|
|
97
|
-
junction_box: "#8b5cf6"
|
|
98
|
-
};
|
|
99
|
-
var HEALTH_LEVEL_COLORS = {
|
|
100
|
-
excellent: "#22c55e",
|
|
101
|
-
// 绿 80-100
|
|
102
|
-
good: "#3b82f6",
|
|
103
|
-
// 蓝 60-80
|
|
104
|
-
fair: "#eab308",
|
|
105
|
-
// 黄 40-60
|
|
106
|
-
poor: "#f97316",
|
|
107
|
-
// 橙 20-40
|
|
108
|
-
critical: "#ef4444"
|
|
109
|
-
// 红 0-20
|
|
110
|
-
};
|
|
111
|
-
var HEALTH_LEVEL_LABELS = {
|
|
112
|
-
excellent: "\u4F18",
|
|
113
|
-
good: "\u826F",
|
|
114
|
-
fair: "\u4E2D",
|
|
115
|
-
poor: "\u5DEE",
|
|
116
|
-
critical: "\u5371"
|
|
117
|
-
};
|
|
118
|
-
function healthLevel(score) {
|
|
119
|
-
if (score >= 80) return "excellent";
|
|
120
|
-
if (score >= 60) return "good";
|
|
121
|
-
if (score >= 40) return "fair";
|
|
122
|
-
if (score >= 20) return "poor";
|
|
123
|
-
return "critical";
|
|
124
|
-
}
|
|
125
|
-
function pipelineTypeColor(type) {
|
|
126
|
-
if (!type) return "#94a3b8";
|
|
127
|
-
return PIPELINE_TYPE_COLORS[type];
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
// src/style/paintRules.ts
|
|
131
|
-
function paintPipeByType(types) {
|
|
132
|
-
if (!types || types.length === 0) {
|
|
133
|
-
return [
|
|
134
|
-
"match",
|
|
135
|
-
["get", "pipelineType"],
|
|
136
|
-
...Object.entries(PIPELINE_TYPE_COLORS).flatMap(([k, v]) => [k, v]),
|
|
137
|
-
"#94a3b8"
|
|
138
|
-
];
|
|
139
|
-
}
|
|
140
|
-
return [
|
|
141
|
-
"match",
|
|
142
|
-
["get", "pipelineType"],
|
|
143
|
-
...types.flatMap((t) => [t, PIPELINE_TYPE_COLORS[t]]),
|
|
144
|
-
"#94a3b8"
|
|
145
|
-
];
|
|
146
|
-
}
|
|
147
|
-
function paintPipeByDiameter() {
|
|
148
|
-
return [
|
|
149
|
-
"interpolate",
|
|
150
|
-
["linear"],
|
|
151
|
-
["coalesce", ["get", "diameter"], 0],
|
|
152
|
-
0,
|
|
153
|
-
"#4ade80",
|
|
154
|
-
// 极细管 绿
|
|
155
|
-
50,
|
|
156
|
-
"#4ade80",
|
|
157
|
-
// DN50 以下 绿(支管)
|
|
158
|
-
150,
|
|
159
|
-
"#60a5fa",
|
|
160
|
-
// DN150 蓝(配水管)
|
|
161
|
-
300,
|
|
162
|
-
"#f59e0b",
|
|
163
|
-
// DN300 黄(干管)
|
|
164
|
-
600,
|
|
165
|
-
"#ef4444",
|
|
166
|
-
// DN600+ 红(主管)
|
|
167
|
-
1500,
|
|
168
|
-
"#7f1d1d"
|
|
169
|
-
// 极大管 深红
|
|
170
|
-
];
|
|
171
|
-
}
|
|
172
|
-
function paintPipeByStatus() {
|
|
173
|
-
return [
|
|
174
|
-
"match",
|
|
175
|
-
["coalesce", ["get", "status"], "unknown"],
|
|
176
|
-
...Object.entries(PIPE_STATUS_COLORS).flatMap(([k, v]) => [k, v]),
|
|
177
|
-
"#6b7280"
|
|
178
|
-
];
|
|
179
|
-
}
|
|
180
|
-
function paintPipeByMaterial() {
|
|
181
|
-
return [
|
|
182
|
-
"match",
|
|
183
|
-
["coalesce", ["get", "material"], "unknown"],
|
|
184
|
-
...Object.entries(PIPE_MATERIAL_COLORS).flatMap(([k, v]) => [k, v]),
|
|
185
|
-
"#6b7280"
|
|
186
|
-
];
|
|
187
|
-
}
|
|
188
|
-
function paintPipeByHealth() {
|
|
189
|
-
return [
|
|
190
|
-
"step",
|
|
191
|
-
["coalesce", ["get", "healthScore"], 100],
|
|
192
|
-
HEALTH_LEVEL_COLORS.critical,
|
|
193
|
-
// <20
|
|
194
|
-
20,
|
|
195
|
-
HEALTH_LEVEL_COLORS.poor,
|
|
196
|
-
40,
|
|
197
|
-
HEALTH_LEVEL_COLORS.fair,
|
|
198
|
-
60,
|
|
199
|
-
HEALTH_LEVEL_COLORS.good,
|
|
200
|
-
80,
|
|
201
|
-
HEALTH_LEVEL_COLORS.excellent
|
|
202
|
-
];
|
|
203
|
-
}
|
|
204
|
-
function paintPipeBy(mode, opts) {
|
|
205
|
-
switch (mode) {
|
|
206
|
-
case "type":
|
|
207
|
-
return paintPipeByType(opts?.types);
|
|
208
|
-
case "diameter":
|
|
209
|
-
return paintPipeByDiameter();
|
|
210
|
-
case "status":
|
|
211
|
-
return paintPipeByStatus();
|
|
212
|
-
case "material":
|
|
213
|
-
return paintPipeByMaterial();
|
|
214
|
-
case "health":
|
|
215
|
-
return paintPipeByHealth();
|
|
216
|
-
case "uniform":
|
|
217
|
-
default:
|
|
218
|
-
return "#60a5fa";
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
function paintNodeByKind() {
|
|
222
|
-
return [
|
|
223
|
-
"match",
|
|
224
|
-
["get", "kind"],
|
|
225
|
-
"junction",
|
|
226
|
-
"#94a3b8",
|
|
227
|
-
"valve",
|
|
228
|
-
"#ef4444",
|
|
229
|
-
"pump",
|
|
230
|
-
"#f59e0b",
|
|
231
|
-
"meter",
|
|
232
|
-
"#3b82f6",
|
|
233
|
-
"source",
|
|
234
|
-
"#22c55e",
|
|
235
|
-
"tank",
|
|
236
|
-
"#06b6d4",
|
|
237
|
-
"junction_box",
|
|
238
|
-
"#8b5cf6",
|
|
239
|
-
"#cbd5e1"
|
|
240
|
-
];
|
|
241
|
-
}
|
|
242
|
-
function paintPipeWidthByDiameter(minWidth = 1.5, maxWidth = 6) {
|
|
243
|
-
return [
|
|
244
|
-
"interpolate",
|
|
245
|
-
["linear"],
|
|
246
|
-
["coalesce", ["get", "diameter"], 100],
|
|
247
|
-
0,
|
|
248
|
-
minWidth,
|
|
249
|
-
1500,
|
|
250
|
-
maxWidth
|
|
251
|
-
];
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
export { HEALTH_LEVEL_COLORS, HEALTH_LEVEL_LABELS, NODE_KIND_COLORS, NODE_KIND_ICONS, PIPELINE_TYPE_COLORS, PIPELINE_TYPE_ICONS, PIPELINE_TYPE_LABELS, PIPE_MATERIAL_COLORS, PIPE_STATUS_COLORS, PIPE_STATUS_META, healthLevel, paintNodeByKind, paintPipeBy, paintPipeByDiameter, paintPipeByHealth, paintPipeByMaterial, paintPipeByStatus, paintPipeByType, paintPipeWidthByDiameter, pipelineTypeColor };
|
|
255
|
-
//# sourceMappingURL=chunk-QVY4WJLM.js.map
|
|
256
|
-
//# sourceMappingURL=chunk-QVY4WJLM.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/style/pipelineTheme.ts","../src/style/paintRules.ts"],"names":[],"mappings":"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","file":"chunk-QVY4WJLM.js","sourcesContent":["/**\n * 草果地图管网专用样式 - `caoguo-pipeline`\n *\n * 设计目标:\n * - 行业辨识度高:燃气=琥珀、供水=蓝、供热=红、电力=紫、通信=绿、排水=灰\n * - 状态语义强:正常/老化/损坏/维修中 各有专属色 + 动画\n * - 与 caoguo-dark/light 主题协调:在亮/暗模式下都可读\n *\n * 颜色规范依据 PRD §4.5。\n */\n\nimport type { PipelineType, PipeMaterial, PipeStatus, NodeKind } from '../types';\n\n/** 管线大类配色(caoguo-pipeline) */\nexport const PIPELINE_TYPE_COLORS: Record<PipelineType, string> = {\n gas: '#f59e0b', // 琥珀(燃气)\n water: '#3b82f6', // 蓝(供水)\n drainage: '#6b7280', // 灰(排水)\n heating: '#ef4444', // 红(供热)\n power: '#8b5cf6', // 紫(电力管沟)\n telecom: '#10b981', // 绿(通信管沟)\n};\n\n/** 管线大类的中文标签(地图图例/卡片显示) */\nexport const PIPELINE_TYPE_LABELS: Record<PipelineType, string> = {\n gas: '燃气管',\n water: '供水管',\n drainage: '排水管',\n heating: '供热管',\n power: '电力管沟',\n telecom: '通信管沟',\n};\n\n/** 管线大类的 Emoji 图标(轻量可视化标识,用于卡片/Tag) */\nexport const PIPELINE_TYPE_ICONS: Record<PipelineType, string> = {\n gas: '🔥',\n water: '💧',\n drainage: '🚰',\n heating: '🔴',\n power: '⚡',\n telecom: '📡',\n};\n\n/** 管段状态配色 */\nexport const PIPE_STATUS_COLORS: Record<PipeStatus, string> = {\n normal: '#4ade80', // 绿\n aging: '#fbbf24', // 黄\n damaged: '#ef4444', // 红\n under_repair: '#8b5cf6', // 紫\n abandoned: '#4b5563', // 深灰\n unknown: '#6b7280', // 灰\n};\n\n/** 状态的语义 + 动画 */\nexport const PIPE_STATUS_META: Record<\n PipeStatus,\n { label: string; animation?: 'pulse' | 'dashed' | 'none' }\n> = {\n normal: { label: '正常', animation: 'none' },\n aging: { label: '老化', animation: 'none' },\n damaged: { label: '损坏', animation: 'pulse' },\n under_repair: { label: '维修中', animation: 'dashed' },\n abandoned: { label: '废弃', animation: 'none' },\n unknown: { label: '未知', animation: 'none' },\n};\n\n/** 管材配色(maplibre style 用) */\nexport const PIPE_MATERIAL_COLORS: Record<PipeMaterial, string> = {\n cast_iron: '#94a3b8', // 蓝灰(旧铸铁)\n ductile_iron: '#0ea5e9', // 天蓝(球墨铸铁)\n steel: '#64748b', // 钢蓝\n pe: '#22c55e', // 绿(PE 现代管材)\n pvc: '#a78bfa', // 紫(PVC)\n concrete: '#a8a29e', // 米灰(混凝土)\n hdpe: '#16a34a', // 深绿(HDPE)\n copper: '#d97706', // 橙(铜)\n unknown: '#6b7280',\n};\n\n/** 节点图标(用 SVG path 描点,地图渲染层用) */\nexport const NODE_KIND_ICONS: Record<NodeKind, string> = {\n junction: 'M -6 0 L 6 0 M 0 -6 L 0 6', // 十字\n valve: 'M -8 -4 L 8 4 M 0 -4 L 0 4', // X\n pump: 'M -6 0 A 6 6 0 1 0 6 0 A 6 6 0 1 0 -6 0', // 圆\n meter: 'M -6 -6 L 6 -6 L 6 6 L -6 6 Z', // 方\n source: 'M 0 -10 L 6 6 L -6 6 Z', // 三角\n tank: 'M -8 -6 Q 0 -10 8 -6 L 8 6 L -8 6 Z', // 圆角\n junction_box: 'M -7 -4 L 7 -4 L 7 4 L -7 4 Z',// 小方\n};\n\n/** 节点配色(默认按 type 衍生) */\nexport const NODE_KIND_COLORS: Record<NodeKind, string> = {\n junction: '#94a3b8',\n valve: '#ef4444', // 阀门=红(控制关键)\n pump: '#f59e0b',\n meter: '#3b82f6',\n source: '#22c55e',\n tank: '#06b6d4',\n junction_box: '#8b5cf6',\n};\n\n/** 健康度等级配色(PipelineHealth 用) */\nexport const HEALTH_LEVEL_COLORS: Record<string, string> = {\n excellent: '#22c55e', // 绿 80-100\n good: '#3b82f6', // 蓝 60-80\n fair: '#eab308', // 黄 40-60\n poor: '#f97316', // 橙 20-40\n critical: '#ef4444', // 红 0-20\n};\n\n/** 健康等级 label */\nexport const HEALTH_LEVEL_LABELS: Record<string, string> = {\n excellent: '优',\n good: '良',\n fair: '中',\n poor: '差',\n critical: '危',\n};\n\n/**\n * 健康度 → 等级(保留闭区间,遵守 PRD §4.4.2)\n * @param score 0-100 健康分\n */\nexport function healthLevel(score: number): 'excellent' | 'good' | 'fair' | 'poor' | 'critical' {\n if (score >= 80) return 'excellent';\n if (score >= 60) return 'good';\n if (score >= 40) return 'fair';\n if (score >= 20) return 'poor';\n return 'critical';\n}\n\n/** 按管线类型取默认色(兜底用) */\nexport function pipelineTypeColor(type: PipelineType | undefined): string {\n if (!type) return '#94a3b8';\n return PIPELINE_TYPE_COLORS[type];\n}\n","/**\n * 管网 MapLibre paint 规则(caoguo-pipeline)\n *\n * 把\"管线/节点如何着色\"的业务规则翻译成 MapLibre style spec,\n * 业务方可直接 addLayer / setPaintProperty 使用。\n *\n * 规则集:\n * - 管线按管线大类着色(type)\n * - 管线按管径着色(diameter,PRD §4.1.4)\n * - 管线按状态着色(status)\n * - 管线按材质着色(material)\n * - 管线按健康度着色(health,PipelineHealth 集成)\n *\n * 节点按节点类型着色 + 图标。\n */\n\nimport type {\n PipelineType,\n PipeMaterial,\n PipeStatus,\n ColorByMode,\n} from '../types';\nimport { PIPELINE_TYPE_COLORS, PIPE_STATUS_COLORS, HEALTH_LEVEL_COLORS, PIPE_MATERIAL_COLORS } from './pipelineTheme';\n\n/**\n * MapLibre style spec 的 color function DSL(typed),\n * 业务方可直接 `map.addLayer({type:'line', paint: {'line-color': rule} })`\n *\n * MapLibre 表达式其实接受 string | number | 嵌套数组,所以我们用 unknown 让 TS 放行\n */\nexport type PaintRule = unknown;\n\n/** 管线按\"管线大类\"着色 */\nexport function paintPipeByType(types?: PipelineType[]): PaintRule {\n if (!types || types.length === 0) {\n // 全部类型都涂色\n return [\n 'match',\n ['get', 'pipelineType'],\n ...Object.entries(PIPELINE_TYPE_COLORS).flatMap(([k, v]) => [k, v]),\n '#94a3b8',\n ];\n }\n return [\n 'match',\n ['get', 'pipelineType'],\n ...types.flatMap((t) => [t, PIPELINE_TYPE_COLORS[t]]),\n '#94a3b8',\n ];\n}\n\n/** 管线按\"管径\"渐变着色(PRD §4.1.4) */\nexport function paintPipeByDiameter(): PaintRule {\n return [\n 'interpolate',\n ['linear'],\n ['coalesce', ['get', 'diameter'], 0],\n 0, '#4ade80', // 极细管 绿\n 50, '#4ade80', // DN50 以下 绿(支管)\n 150, '#60a5fa', // DN150 蓝(配水管)\n 300, '#f59e0b', // DN300 黄(干管)\n 600, '#ef4444', // DN600+ 红(主管)\n 1500, '#7f1d1d', // 极大管 深红\n ];\n}\n\n/** 管线按\"状态\"着色 */\nexport function paintPipeByStatus(): PaintRule {\n return [\n 'match',\n ['coalesce', ['get', 'status'], 'unknown'],\n ...Object.entries(PIPE_STATUS_COLORS).flatMap(([k, v]) => [k, v]),\n '#6b7280',\n ];\n}\n\n/** 管线按\"材质\"着色 */\nexport function paintPipeByMaterial(): PaintRule {\n return [\n 'match',\n ['coalesce', ['get', 'material'], 'unknown'],\n ...Object.entries(PIPE_MATERIAL_COLORS).flatMap(([k, v]) => [k, v]),\n '#6b7280',\n ];\n}\n\n/** 管线按\"健康度\"着色(健康分 0-100,规则按 healthLevel 离散) */\nexport function paintPipeByHealth(): PaintRule {\n return [\n 'step',\n ['coalesce', ['get', 'healthScore'], 100],\n HEALTH_LEVEL_COLORS.critical, // <20\n 20, HEALTH_LEVEL_COLORS.poor,\n 40, HEALTH_LEVEL_COLORS.fair,\n 60, HEALTH_LEVEL_COLORS.good,\n 80, HEALTH_LEVEL_COLORS.excellent,\n ];\n}\n\n/** 根据模式返回 paint rule 工厂 */\nexport function paintPipeBy(mode: ColorByMode, opts?: { types?: PipelineType[] }): PaintRule {\n switch (mode) {\n case 'type':\n return paintPipeByType(opts?.types);\n case 'diameter':\n return paintPipeByDiameter();\n case 'status':\n return paintPipeByStatus();\n case 'material':\n return paintPipeByMaterial();\n case 'health':\n return paintPipeByHealth();\n case 'uniform':\n default:\n return '#60a5fa';\n }\n}\n\n/** 节点按 kind 着色(maplibre style circle-color 用) */\nexport function paintNodeByKind(): PaintRule {\n return [\n 'match',\n ['get', 'kind'],\n 'junction', '#94a3b8',\n 'valve', '#ef4444',\n 'pump', '#f59e0b',\n 'meter', '#3b82f6',\n 'source', '#22c55e',\n 'tank', '#06b6d4',\n 'junction_box', '#8b5cf6',\n '#cbd5e1',\n ];\n}\n\n/** 默认管段宽度(按管径递推) */\nexport function paintPipeWidthByDiameter(minWidth = 1.5, maxWidth = 6): PaintRule {\n return [\n 'interpolate',\n ['linear'],\n ['coalesce', ['get', 'diameter'], 100],\n 0, minWidth,\n 1500, maxWidth,\n ];\n}\n"]}
|
package/dist/chunk-YBLESEN4.js
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
// src/nlpg/pipelineNlp.ts
|
|
2
|
-
var PATTERNS = [
|
|
3
|
-
{ intent: "burst", re: /(爆管|破裂|泄漏|故障|事故|爆裂)/, confidence: 0.95 },
|
|
4
|
-
{ intent: "valve", re: /(阀门|闸).*?(关闭|关|合)|(?:关闭|关|合).*?(阀门|闸)/, confidence: 0.9 },
|
|
5
|
-
{ intent: "material_age", re: /(\d+)\s*年.*?(铸铁|钢|PE|PVC|铜)/, confidence: 0.85 },
|
|
6
|
-
{ intent: "material_age", re: /(铸铁|钢|PE|PVC|铜).*?(\d+)\s*年/, confidence: 0.85 },
|
|
7
|
-
{ intent: "pressure", re: /压力.*?(低于|高于|小于|大于|<|>|>=|<=|低|高)\s*(\d+\.?\d*)/, confidence: 0.85 },
|
|
8
|
-
{ intent: "nearby", re: /(\d+)\s*(米|m|公里|km).*?(学校|医院|工厂|消防|政府|小区)/, confidence: 0.85 },
|
|
9
|
-
{ intent: "alarm_cluster", re: /报警|告警/, confidence: 0.8 }
|
|
10
|
-
];
|
|
11
|
-
var TYPE_REGEX = [
|
|
12
|
-
{ type: "gas", re: /燃气|煤气|天然气/ },
|
|
13
|
-
{ type: "water", re: /供水|自来水|水管/ },
|
|
14
|
-
{ type: "drainage", re: /排水|污水|雨水/ },
|
|
15
|
-
{ type: "heating", re: /供热|暖气|热力/ },
|
|
16
|
-
{ type: "power", re: /电力|电缆|高压/ },
|
|
17
|
-
{ type: "telecom", re: /通信|光纤|光缆/ }
|
|
18
|
-
];
|
|
19
|
-
var MATERIAL_REGEX = [
|
|
20
|
-
{ key: "cast_iron", cname: "\u94F8\u94C1", re: /铸铁/ },
|
|
21
|
-
{ key: "ductile_iron", cname: "\u7403\u58A8\u94F8\u94C1", re: /球墨/ },
|
|
22
|
-
{ key: "steel", cname: "\u94A2", re: /钢/ },
|
|
23
|
-
{ key: "pe", cname: "PE", re: /PE/ },
|
|
24
|
-
{ key: "pvc", cname: "PVC", re: /PVC/ },
|
|
25
|
-
{ key: "concrete", cname: "\u6DF7\u51DD\u571F", re: /混凝土/ },
|
|
26
|
-
{ key: "hdpe", cname: "HDPE", re: /HDPE/ },
|
|
27
|
-
{ key: "copper", cname: "\u94DC", re: /铜/ }
|
|
28
|
-
];
|
|
29
|
-
var REGION_REGEX = /(朝阳区|海淀区|江岸区|江汉区|硚口区|汉阳区|武昌区|青山区|洪山区|东西湖区|黄陂区|新洲区|江夏区|蔡甸区|汉南区)/;
|
|
30
|
-
function parsePipelineQuery(query) {
|
|
31
|
-
let best = { intent: "unknown", confidence: 0 };
|
|
32
|
-
for (const p of PATTERNS) {
|
|
33
|
-
const m = query.match(p.re);
|
|
34
|
-
if (m) {
|
|
35
|
-
const c = p.confidence * (1 + 0.05 * (m[0].length / query.length));
|
|
36
|
-
if (c > best.confidence) best = { intent: p.intent, confidence: Math.min(c, 1) };
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
const filters = {};
|
|
40
|
-
for (const t of TYPE_REGEX) {
|
|
41
|
-
if (t.re.test(query)) {
|
|
42
|
-
filters.pipelineType = t.type;
|
|
43
|
-
break;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
for (const m of MATERIAL_REGEX) {
|
|
47
|
-
if (m.re.test(query)) {
|
|
48
|
-
filters.material = m.key;
|
|
49
|
-
break;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
const ageMatch = query.match(/(\d+)\s*年/);
|
|
53
|
-
if (ageMatch) {
|
|
54
|
-
const years = parseInt(ageMatch[1]);
|
|
55
|
-
if (best.intent === "material_age") {
|
|
56
|
-
if (/超[过于]/.test(query) || /[以]?上/.test(query)) filters.minAgeYears = years;
|
|
57
|
-
else if (/内|以下|不超/.test(query)) filters.maxAgeYears = years;
|
|
58
|
-
else filters.minAgeYears = years;
|
|
59
|
-
} else {
|
|
60
|
-
filters.minAgeYears = years;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
const pressureMatch = query.match(/(\d+\.?\d*)\s*(MPa|mpa)/);
|
|
64
|
-
if (pressureMatch) {
|
|
65
|
-
const v = parseFloat(pressureMatch[1]);
|
|
66
|
-
if (/低|小于|小于等于|</.test(query)) filters.maxPressure = v;
|
|
67
|
-
else if (/高|大于|大于等于|>/.test(query)) filters.minPressure = v;
|
|
68
|
-
else filters.maxPressure = v;
|
|
69
|
-
} else if (/压力/.test(query)) {
|
|
70
|
-
filters.maxPressure = 0.2;
|
|
71
|
-
}
|
|
72
|
-
const distMatch = query.match(/(\d+)\s*(公里|km|千米|米|m)/);
|
|
73
|
-
if (distMatch) {
|
|
74
|
-
let d = parseInt(distMatch[1]);
|
|
75
|
-
const unit = distMatch[2];
|
|
76
|
-
if (/公里|km|千米/.test(unit)) d *= 1e3;
|
|
77
|
-
filters.radius = d;
|
|
78
|
-
}
|
|
79
|
-
if (/昨天/.test(query)) filters.timeWindow = "1d";
|
|
80
|
-
else if (/今天/.test(query)) filters.timeWindow = "1d";
|
|
81
|
-
else if (/最近一周|过去一周|7\s*天/.test(query)) filters.timeWindow = "7d";
|
|
82
|
-
else if (/最近一个月/.test(query)) filters.timeWindow = "30d";
|
|
83
|
-
const regionMatch = query.match(REGION_REGEX);
|
|
84
|
-
if (regionMatch) filters.region = regionMatch[1];
|
|
85
|
-
return {
|
|
86
|
-
intent: best.intent,
|
|
87
|
-
filters,
|
|
88
|
-
description: buildDescription(best.intent, filters),
|
|
89
|
-
confidence: best.confidence
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
function buildDescription(intent, f) {
|
|
93
|
-
const desc = [];
|
|
94
|
-
if (intent === "burst") desc.push("\u89E6\u53D1\u7206\u7BA1\u63A8\u6F14");
|
|
95
|
-
else if (intent === "valve") desc.push("\u67E5\u8BE2\u9600\u95E8\u5173\u95ED\u5F71\u54CD");
|
|
96
|
-
else if (intent === "material_age") {
|
|
97
|
-
const matName = MATERIAL_REGEX.find((m) => m.key === f.material)?.cname ?? f.material ?? "";
|
|
98
|
-
desc.push(`\u7B5B\u9009${matName}\u7BA1${f.minAgeYears ?? "?"}\u5E74\u4EE5\u4E0A`);
|
|
99
|
-
} else if (intent === "pressure") desc.push(`\u7B5B\u9009\u538B\u529B${f.maxPressure ?? ""}MPa\u4EE5\u4E0B`);
|
|
100
|
-
else if (intent === "nearby") desc.push(`${f.radius}m\u5185\u67E5\u627EPOI`);
|
|
101
|
-
else if (intent === "alarm_cluster") desc.push(`\u67E5\u8BE2${f.timeWindow ?? "1d"}\u5185\u62A5\u8B66\u805A\u96C6`);
|
|
102
|
-
if (f.pipelineType) desc.push(`[${f.pipelineType}]`);
|
|
103
|
-
if (f.region) desc.push(`\u533A\u57DF:${f.region}`);
|
|
104
|
-
return desc.join(" ");
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// src/nlpg/pipelineNlpClass.ts
|
|
108
|
-
var PipelineNlp = class {
|
|
109
|
-
burstSimulator;
|
|
110
|
-
onIntent;
|
|
111
|
-
constructor(options = {}) {
|
|
112
|
-
this.burstSimulator = options.burstSimulator;
|
|
113
|
-
this.onIntent = options.onIntent;
|
|
114
|
-
}
|
|
115
|
-
/** 解析并按意图触发动作 */
|
|
116
|
-
query(text) {
|
|
117
|
-
const result = parsePipelineQuery(text);
|
|
118
|
-
if (this.onIntent) this.onIntent(result.intent, result);
|
|
119
|
-
return result;
|
|
120
|
-
}
|
|
121
|
-
/** 仅解析不触发动作 */
|
|
122
|
-
parse(text) {
|
|
123
|
-
return parsePipelineQuery(text);
|
|
124
|
-
}
|
|
125
|
-
/** 关联 BurstSimulator */
|
|
126
|
-
setBurstSimulator(sim) {
|
|
127
|
-
this.burstSimulator = sim;
|
|
128
|
-
}
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
export { PipelineNlp, parsePipelineQuery };
|
|
132
|
-
//# sourceMappingURL=chunk-YBLESEN4.js.map
|
|
133
|
-
//# sourceMappingURL=chunk-YBLESEN4.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/nlpg/pipelineNlp.ts","../src/nlpg/pipelineNlpClass.ts"],"names":[],"mappings":"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","file":"chunk-YBLESEN4.js","sourcesContent":["/**\n * NLPG 管网场景扩展(Phase 1)\n */\nimport type { PipelineType } from '../types';\n\nexport type PipelineNlpIntent =\n | 'burst'\n | 'valve'\n | 'material_age'\n | 'pressure'\n | 'nearby'\n | 'alarm_cluster'\n | 'unknown';\n\nexport interface PipelineNlpFilters {\n pipelineType?: PipelineType;\n material?: string;\n minAgeYears?: number;\n maxAgeYears?: number;\n minPressure?: number;\n maxPressure?: number;\n radius?: number;\n timeWindow?: '1h' | '1d' | '7d' | '30d';\n region?: string;\n}\n\nexport interface PipelineNlpResult {\n intent: PipelineNlpIntent;\n filters: PipelineNlpFilters;\n description: string;\n confidence: number;\n}\n\nconst PATTERNS: Array<{ intent: PipelineNlpIntent; re: RegExp; confidence: number }> = [\n { intent: 'burst', re: /(爆管|破裂|泄漏|故障|事故|爆裂)/, confidence: 0.95 },\n { intent: 'valve', re: /(阀门|闸).*?(关闭|关|合)|(?:关闭|关|合).*?(阀门|闸)/, confidence: 0.9 },\n { intent: 'material_age', re: /(\\d+)\\s*年.*?(铸铁|钢|PE|PVC|铜)/, confidence: 0.85 },\n { intent: 'material_age', re: /(铸铁|钢|PE|PVC|铜).*?(\\d+)\\s*年/, confidence: 0.85 },\n { intent: 'pressure', re: /压力.*?(低于|高于|小于|大于|<|>|>=|<=|低|高)\\s*(\\d+\\.?\\d*)/, confidence: 0.85 },\n { intent: 'nearby', re: /(\\d+)\\s*(米|m|公里|km).*?(学校|医院|工厂|消防|政府|小区)/, confidence: 0.85 },\n { intent: 'alarm_cluster', re: /报警|告警/, confidence: 0.8 },\n];\n\nconst TYPE_REGEX: Array<{ type: PipelineType; re: RegExp }> = [\n { type: 'gas', re: /燃气|煤气|天然气/ },\n { type: 'water', re: /供水|自来水|水管/ },\n { type: 'drainage', re: /排水|污水|雨水/ },\n { type: 'heating', re: /供热|暖气|热力/ },\n { type: 'power', re: /电力|电缆|高压/ },\n { type: 'telecom', re: /通信|光纤|光缆/ },\n];\n\nconst MATERIAL_REGEX: Array<{ key: string; re: RegExp; cname: string }> = [\n { key: 'cast_iron', cname: '铸铁', re: /铸铁/ },\n { key: 'ductile_iron', cname: '球墨铸铁', re: /球墨/ },\n { key: 'steel', cname: '钢', re: /钢/ },\n { key: 'pe', cname: 'PE', re: /PE/ },\n { key: 'pvc', cname: 'PVC', re: /PVC/ },\n { key: 'concrete', cname: '混凝土', re: /混凝土/ },\n { key: 'hdpe', cname: 'HDPE', re: /HDPE/ },\n { key: 'copper', cname: '铜', re: /铜/ },\n];\n\nconst REGION_REGEX = /(朝阳区|海淀区|江岸区|江汉区|硚口区|汉阳区|武昌区|青山区|洪山区|东西湖区|黄陂区|新洲区|江夏区|蔡甸区|汉南区)/;\n\nexport function parsePipelineQuery(query: string): PipelineNlpResult {\n let best: { intent: PipelineNlpIntent; confidence: number } = { intent: 'unknown', confidence: 0 };\n for (const p of PATTERNS) {\n const m = query.match(p.re);\n if (m) {\n const c = p.confidence * (1 + 0.05 * (m[0].length / query.length));\n if (c > best.confidence) best = { intent: p.intent, confidence: Math.min(c, 1) };\n }\n }\n\n const filters: PipelineNlpFilters = {};\n for (const t of TYPE_REGEX) {\n if (t.re.test(query)) {\n filters.pipelineType = t.type;\n break;\n }\n }\n for (const m of MATERIAL_REGEX) {\n if (m.re.test(query)) {\n filters.material = m.key;\n break;\n }\n }\n const ageMatch = query.match(/(\\d+)\\s*年/);\n if (ageMatch) {\n const years = parseInt(ageMatch[1]);\n if (best.intent === 'material_age') {\n if (/超[过于]/.test(query) || /[以]?上/.test(query)) filters.minAgeYears = years;\n else if (/内|以下|不超/.test(query)) filters.maxAgeYears = years;\n else filters.minAgeYears = years;\n } else {\n filters.minAgeYears = years;\n }\n }\n const pressureMatch = query.match(/(\\d+\\.?\\d*)\\s*(MPa|mpa)/);\n if (pressureMatch) {\n const v = parseFloat(pressureMatch[1]);\n if (/低|小于|小于等于|</.test(query)) filters.maxPressure = v;\n else if (/高|大于|大于等于|>/.test(query)) filters.minPressure = v;\n else filters.maxPressure = v;\n } else if (/压力/.test(query)) {\n filters.maxPressure = 0.2; // 默认低压阈值\n }\n const distMatch = query.match(/(\\d+)\\s*(公里|km|千米|米|m)/);\n if (distMatch) {\n let d = parseInt(distMatch[1]);\n const unit = distMatch[2];\n if (/公里|km|千米/.test(unit)) d *= 1000;\n filters.radius = d;\n }\n if (/昨天/.test(query)) filters.timeWindow = '1d';\n else if (/今天/.test(query)) filters.timeWindow = '1d';\n else if (/最近一周|过去一周|7\\s*天/.test(query)) filters.timeWindow = '7d';\n else if (/最近一个月/.test(query)) filters.timeWindow = '30d';\n const regionMatch = query.match(REGION_REGEX);\n if (regionMatch) filters.region = regionMatch[1];\n\n return {\n intent: best.intent,\n filters,\n description: buildDescription(best.intent, filters),\n confidence: best.confidence,\n };\n}\n\nfunction buildDescription(intent: PipelineNlpIntent, f: PipelineNlpFilters): string {\n const desc: string[] = [];\n if (intent === 'burst') desc.push('触发爆管推演');\n else if (intent === 'valve') desc.push('查询阀门关闭影响');\n else if (intent === 'material_age') {\n const matName = MATERIAL_REGEX.find((m) => m.key === f.material)?.cname ?? f.material ?? '';\n desc.push(`筛选${matName}管${f.minAgeYears ?? '?'}年以上`);\n } else if (intent === 'pressure') desc.push(`筛选压力${f.maxPressure ?? ''}MPa以下`);\n else if (intent === 'nearby') desc.push(`${f.radius}m内查找POI`);\n else if (intent === 'alarm_cluster') desc.push(`查询${f.timeWindow ?? '1d'}内报警聚集`);\n if (f.pipelineType) desc.push(`[${f.pipelineType}]`);\n if (f.region) desc.push(`区域:${f.region}`);\n return desc.join(' ');\n}\n","/**\n * PipelineNlp 组件类(占位 stub)\n *\n * 包装 parsePipelineQuery + 与 BurstSimulator 路由集成\n */\n\nimport { parsePipelineQuery, type PipelineNlpResult, type PipelineNlpIntent } from './pipelineNlp';\nimport type { BurstSimulator } from '../burst/burstClass';\n\nexport interface PipelineNlpOptions {\n burstSimulator?: BurstSimulator;\n onIntent?: (intent: PipelineNlpIntent, result: PipelineNlpResult) => void;\n}\n\nexport class PipelineNlp {\n private burstSimulator?: BurstSimulator;\n private onIntent?: PipelineNlpOptions['onIntent'];\n\n constructor(options: PipelineNlpOptions = {}) {\n this.burstSimulator = options.burstSimulator;\n this.onIntent = options.onIntent;\n }\n\n /** 解析并按意图触发动作 */\n query(text: string): PipelineNlpResult {\n const result = parsePipelineQuery(text);\n if (this.onIntent) this.onIntent(result.intent, result);\n return result;\n }\n\n /** 仅解析不触发动作 */\n parse(text: string): PipelineNlpResult {\n return parsePipelineQuery(text);\n }\n\n /** 关联 BurstSimulator */\n setBurstSimulator(sim: BurstSimulator): void {\n this.burstSimulator = sim;\n }\n}\n"]}
|
package/dist/chunk-YS2ICFVK.js
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import { PIPELINE_TYPE_COLORS, PIPELINE_TYPE_LABELS, PIPE_STATUS_COLORS, PIPE_STATUS_META, PIPE_MATERIAL_COLORS, HEALTH_LEVEL_COLORS, HEALTH_LEVEL_LABELS } from './chunk-QVY4WJLM.js';
|
|
2
|
-
|
|
3
|
-
// src/style/legend.ts
|
|
4
|
-
function legendByType() {
|
|
5
|
-
return {
|
|
6
|
-
title: "\u7BA1\u7EBF\u7C7B\u578B",
|
|
7
|
-
items: Object.keys(PIPELINE_TYPE_COLORS).map((k) => ({
|
|
8
|
-
label: PIPELINE_TYPE_LABELS[k],
|
|
9
|
-
color: PIPELINE_TYPE_COLORS[k]
|
|
10
|
-
}))
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
function legendByDiameter() {
|
|
14
|
-
return {
|
|
15
|
-
title: "\u7BA1\u5F84\uFF08mm\uFF09",
|
|
16
|
-
items: [
|
|
17
|
-
{ label: "\u226450 \u652F\u7BA1", color: "#4ade80" },
|
|
18
|
-
{ label: "50-150 \u914D\u6C34/\u914D\u6C14", color: "#60a5fa" },
|
|
19
|
-
{ label: "150-300 \u5E72\u7BA1", color: "#f59e0b" },
|
|
20
|
-
{ label: "300-600 \u4E3B\u7BA1", color: "#ef4444" },
|
|
21
|
-
{ label: "\u2265600 \u4E3B\u5E72", color: "#7f1d1d" }
|
|
22
|
-
]
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
function legendByStatus() {
|
|
26
|
-
return {
|
|
27
|
-
title: "\u7BA1\u6BB5\u72B6\u6001",
|
|
28
|
-
items: Object.keys(PIPE_STATUS_COLORS).map(
|
|
29
|
-
(k) => {
|
|
30
|
-
const meta = PIPE_STATUS_META[k];
|
|
31
|
-
return {
|
|
32
|
-
label: meta.label,
|
|
33
|
-
color: PIPE_STATUS_COLORS[k],
|
|
34
|
-
style: meta.animation === "dashed" ? "dashed" : "solid"
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
)
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
function legendByMaterial() {
|
|
41
|
-
return {
|
|
42
|
-
title: "\u7BA1\u6750",
|
|
43
|
-
items: Object.entries(PIPE_MATERIAL_COLORS).map(([k, v]) => ({
|
|
44
|
-
label: materialLabel(k),
|
|
45
|
-
color: v
|
|
46
|
-
}))
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
function legendByHealth() {
|
|
50
|
-
return {
|
|
51
|
-
title: "\u5065\u5EB7\u7B49\u7EA7",
|
|
52
|
-
items: Object.entries(HEALTH_LEVEL_COLORS).map(([k, v]) => ({
|
|
53
|
-
label: `${HEALTH_LEVEL_LABELS[k]}\uFF08${healthRangeLabel(k)}\uFF09`,
|
|
54
|
-
color: v
|
|
55
|
-
}))
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
function materialLabel(k) {
|
|
59
|
-
const map = {
|
|
60
|
-
cast_iron: "\u94F8\u94C1",
|
|
61
|
-
ductile_iron: "\u7403\u58A8\u94F8\u94C1",
|
|
62
|
-
steel: "\u94A2",
|
|
63
|
-
pe: "PE",
|
|
64
|
-
pvc: "PVC",
|
|
65
|
-
concrete: "\u6DF7\u51DD\u571F",
|
|
66
|
-
hdpe: "HDPE",
|
|
67
|
-
copper: "\u94DC",
|
|
68
|
-
unknown: "\u672A\u77E5"
|
|
69
|
-
};
|
|
70
|
-
return map[k] ?? k;
|
|
71
|
-
}
|
|
72
|
-
function healthRangeLabel(k) {
|
|
73
|
-
const map = {
|
|
74
|
-
excellent: "80-100",
|
|
75
|
-
good: "60-80",
|
|
76
|
-
fair: "40-60",
|
|
77
|
-
poor: "20-40",
|
|
78
|
-
critical: "0-20"
|
|
79
|
-
};
|
|
80
|
-
return map[k] ?? "";
|
|
81
|
-
}
|
|
82
|
-
function buildLegend(mode) {
|
|
83
|
-
switch (mode) {
|
|
84
|
-
case "type":
|
|
85
|
-
return legendByType();
|
|
86
|
-
case "diameter":
|
|
87
|
-
return legendByDiameter();
|
|
88
|
-
case "status":
|
|
89
|
-
return legendByStatus();
|
|
90
|
-
case "material":
|
|
91
|
-
return legendByMaterial();
|
|
92
|
-
case "health":
|
|
93
|
-
return legendByHealth();
|
|
94
|
-
default:
|
|
95
|
-
return legendByType();
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
export { buildLegend, legendByDiameter, legendByHealth, legendByMaterial, legendByStatus, legendByType };
|
|
100
|
-
//# sourceMappingURL=chunk-YS2ICFVK.js.map
|
|
101
|
-
//# sourceMappingURL=chunk-YS2ICFVK.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/style/legend.ts"],"names":[],"mappings":"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","file":"chunk-YS2ICFVK.js","sourcesContent":["/**\n * 管网图例(Legend)\n *\n * 每个组件都可以在浮层面板显示一份图例。本文件是图例数据生成器,\n * 业务方可拿到后用任意 UI 库渲染。\n */\n\nimport type { ColorByMode } from '../types';\nimport {\n PIPELINE_TYPE_COLORS,\n PIPELINE_TYPE_LABELS,\n PIPE_STATUS_COLORS,\n PIPE_STATUS_META,\n HEALTH_LEVEL_COLORS,\n HEALTH_LEVEL_LABELS,\n PIPE_MATERIAL_COLORS,\n} from './pipelineTheme';\n\nexport interface LegendItem {\n label: string;\n color: string;\n /** 可选样式(实线/虚线) */\n style?: 'solid' | 'dashed';\n /** 圆形图标用(设备点) */\n shape?: 'rect' | 'circle' | 'triangle';\n}\n\nexport interface LegendSection {\n title: string;\n items: LegendItem[];\n}\n\n/** 按\"管线大类\"生成图例 */\nexport function legendByType(): LegendSection {\n return {\n title: '管线类型',\n items: Object.keys(PIPELINE_TYPE_COLORS).map((k) => ({\n label: PIPELINE_TYPE_LABELS[k as keyof typeof PIPELINE_TYPE_LABELS],\n color: PIPELINE_TYPE_COLORS[k as keyof typeof PIPELINE_TYPE_COLORS],\n })),\n };\n}\n\n/** 按\"管径\"生成图例 */\nexport function legendByDiameter(): LegendSection {\n return {\n title: '管径(mm)',\n items: [\n { label: '≤50 支管', color: '#4ade80' },\n { label: '50-150 配水/配气', color: '#60a5fa' },\n { label: '150-300 干管', color: '#f59e0b' },\n { label: '300-600 主管', color: '#ef4444' },\n { label: '≥600 主干', color: '#7f1d1d' },\n ],\n };\n}\n\n/** 按\"状态\"生成图例(含动画标识) */\nexport function legendByStatus(): LegendSection {\n return {\n title: '管段状态',\n items: (Object.keys(PIPE_STATUS_COLORS) as Array<keyof typeof PIPE_STATUS_COLORS>).map(\n (k) => {\n const meta = PIPE_STATUS_META[k];\n return {\n label: meta.label,\n color: PIPE_STATUS_COLORS[k],\n style: meta.animation === 'dashed' ? ('dashed' as const) : ('solid' as const),\n };\n }\n ),\n };\n}\n\n/** 按\"材质\"生成图例 */\nexport function legendByMaterial(): LegendSection {\n return {\n title: '管材',\n items: Object.entries(PIPE_MATERIAL_COLORS).map(([k, v]) => ({\n label: materialLabel(k),\n color: v,\n })),\n };\n}\n\n/** 按\"健康度\"生成图例 */\nexport function legendByHealth(): LegendSection {\n return {\n title: '健康等级',\n items: Object.entries(HEALTH_LEVEL_COLORS).map(([k, v]) => ({\n label: `${HEALTH_LEVEL_LABELS[k]}(${healthRangeLabel(k)})`,\n color: v,\n })),\n };\n}\n\nfunction materialLabel(k: string): string {\n const map: Record<string, string> = {\n cast_iron: '铸铁',\n ductile_iron: '球墨铸铁',\n steel: '钢',\n pe: 'PE',\n pvc: 'PVC',\n concrete: '混凝土',\n hdpe: 'HDPE',\n copper: '铜',\n unknown: '未知',\n };\n return map[k] ?? k;\n}\n\nfunction healthRangeLabel(k: string): string {\n const map: Record<string, string> = {\n excellent: '80-100',\n good: '60-80',\n fair: '40-60',\n poor: '20-40',\n critical: '0-20',\n };\n return map[k] ?? '';\n}\n\n/** 通用入口:按模式取图例 */\nexport function buildLegend(mode: ColorByMode): LegendSection {\n switch (mode) {\n case 'type':\n return legendByType();\n case 'diameter':\n return legendByDiameter();\n case 'status':\n return legendByStatus();\n case 'material':\n return legendByMaterial();\n case 'health':\n return legendByHealth();\n default:\n return legendByType();\n }\n}\n"]}
|