|
|
@@ -0,0 +1,95 @@
|
|
|
+/**
|
|
|
+ * 控制模式配色注册表
|
|
|
+ *
|
|
|
+ * 设计原则:
|
|
|
+ * - 暗色大屏背景, 全部色相亮度 50-65% (饱和、不刺眼)
|
|
|
+ * - 同业务族用同色系: 算法类蓝色, 协调网络绿色, 人工/中央紫色, 预警黄/橙, 紧急红, 关闭/异常灰
|
|
|
+ * - 后端只返 { name, value }, 前端按 name 查表注入 color
|
|
|
+ * - 未注册的 name 走 FALLBACK_PALETTE 按 hash 兜底
|
|
|
+ *
|
|
|
+ * 用法:
|
|
|
+ * import { resolveControlModeColor, getControlModeStyle } from '@/config/controlModeColors'
|
|
|
+ * const color = resolveControlModeColor('定周期控制') // -> '#33a3ff'
|
|
|
+ * const item = getControlModeStyle({ name, value }) // -> { name, value, color }
|
|
|
+ */
|
|
|
+
|
|
|
+// 16 种业务模式 → 颜色
|
|
|
+// 排序按业务族, 不影响 API 返回顺序
|
|
|
+export const CONTROL_MODE_COLORS = {
|
|
|
+ // ── 算法类 (冷色蓝) ───────────────────────────────
|
|
|
+ '定周期控制': '#33a3ff',
|
|
|
+ '感应控制': '#e6734d', // 现状保留 (历史橙)
|
|
|
+ '干线协调': '#10b981', // 现状保留 (绿)
|
|
|
+ '自适应控制': '#2dd4bf', // 现状保留 (青)
|
|
|
+
|
|
|
+ // ── 协调/网络 (绿色) ─────────────────────────────
|
|
|
+ '区域协调': '#14b8a6',
|
|
|
+ '公交优先': '#06b6d4',
|
|
|
+ '行人请求': '#84cc16',
|
|
|
+
|
|
|
+ // ── 人工/中央 (紫色) ─────────────────────────────
|
|
|
+ '中心计划': '#a78bfa',
|
|
|
+ '手动控制': '#c084fc',
|
|
|
+
|
|
|
+ // ── 预警类 (黄/橙) ───────────────────────────────
|
|
|
+ '黄闪控制': '#eab308', // 现状保留 (物理黄灯)
|
|
|
+ '降级模式': '#f59e0b',
|
|
|
+ '感应降级': '#fb923c',
|
|
|
+
|
|
|
+ // ── 紧急类 (红色) ─────────────────────────────────
|
|
|
+ '紧急抢占': '#f43f5e',
|
|
|
+ '全红控制': '#dc2626', // 物理全红灯
|
|
|
+ '应急疏散': '#ef4444',
|
|
|
+
|
|
|
+ // ── 关闭/异常 (灰色) ─────────────────────────────
|
|
|
+ '关灯': '#6b7280',
|
|
|
+}
|
|
|
+
|
|
|
+// 未在表内的 name 走这套兜底色板 (按 hash 落位)
|
|
|
+const FALLBACK_PALETTE = [
|
|
|
+ '#7dd3fc', '#fda4af', '#fcd34d', '#a3e635', '#67e8f9',
|
|
|
+ '#c4b5fd', '#fb7185', '#fde047', '#86efac', '#f0abfc',
|
|
|
+]
|
|
|
+
|
|
|
+function hashCode(s) {
|
|
|
+ let h = 0
|
|
|
+ for (let i = 0; i < s.length; i++) {
|
|
|
+ h = ((h << 5) - h) + s.charCodeAt(i)
|
|
|
+ h |= 0
|
|
|
+ }
|
|
|
+ return Math.abs(h)
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 根据模式名取颜色
|
|
|
+ * @param {string} name
|
|
|
+ * @returns {string} hex color
|
|
|
+ */
|
|
|
+export function resolveControlModeColor(name) {
|
|
|
+ if (!name) return FALLBACK_PALETTE[0]
|
|
|
+ if (CONTROL_MODE_COLORS[name]) return CONTROL_MODE_COLORS[name]
|
|
|
+ return FALLBACK_PALETTE[hashCode(name) % FALLBACK_PALETTE.length]
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 把后端 { name, value } 列表注入颜色
|
|
|
+ * @param {Array<{name: string, value: number}>} list
|
|
|
+ * @returns {Array<{name: string, value: number, color: string}>}
|
|
|
+ */
|
|
|
+export function applyControlModeColors(list) {
|
|
|
+ if (!Array.isArray(list)) return []
|
|
|
+ return list.map(item => ({
|
|
|
+ ...item,
|
|
|
+ color: item.color || resolveControlModeColor(item.name),
|
|
|
+ }))
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 单条注入 (给单 item 用)
|
|
|
+ */
|
|
|
+export function getControlModeStyle(item) {
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ color: item.color || resolveControlModeColor(item.name),
|
|
|
+ }
|
|
|
+}
|