icons.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /**
  2. * 驾驶舱图标语义注册表。
  3. *
  4. * 图标文件由统一运行时资产解析层登记和解析;组件仍只消费语义 key,
  5. * 因此蓝湖文件改名或发布版本切换不会牵动引用点。
  6. *
  7. * 切图素材由维护者按中文语义命名导入(public/cockpit/assets/icons/*.png),
  8. * manifest 的 source.layer 记录原文件名,语义以维护者命名为准。
  9. */
  10. import { resolveAsset } from './runtimeAssets.js'
  11. const ICON_SPECS = {
  12. brand: 'icon.brand',
  13. // 票 17 第六轮:品牌区装饰(标题下光带 + 顶栏底部光路),见 manifest icon.brand.glow*
  14. brandGlow: 'icon.brand.glow',
  15. brandGlowPath: 'icon.brand.glow.path',
  16. // 票 17 第七轮:模式按钮选中态底板(CSS background 消费,非 <img>),见 manifest icon.nav.active-bg
  17. navActiveBg: 'icon.nav.active-bg',
  18. // 票 18(批次 5):品牌标题后方光池(CSS background 消费,非 <img>),见 manifest icon.brand.pool
  19. brandPool: 'icon.brand.pool',
  20. layers: 'icon.layers',
  21. points: 'icon.points',
  22. event: 'icon.event',
  23. resource: 'icon.resource',
  24. blank: 'icon.blank',
  25. // 行业筛选
  26. gas: 'icon.industry.gas',
  27. water: 'icon.industry.water',
  28. drainage: 'icon.industry.drainage',
  29. manhole: 'icon.manhole',
  30. // 面板小标题(第三轮:I/Pipe/Q 系列去色染主蓝统一风格,见 manifest icon.panel.*)
  31. panelSituation: 'icon.panel.situation',
  32. panelMonitoring: 'icon.panel.monitoring',
  33. panelAlert: 'icon.panel.alert',
  34. panelArchive: 'icon.panel.archive',
  35. panelEmergency: 'icon.panel.emergency',
  36. panelDistribution: 'icon.panel.distribution',
  37. panelLedger: 'icon.panel.ledger',
  38. panelCurrent: 'icon.panel.emergency',
  39. panelHistory: 'icon.panel.history',
  40. panelEfficiency: 'icon.panel.efficiency',
  41. panelAnalysis: 'icon.panel.analysis',
  42. // 状态标识(地图图例行,各状态语义色染色,见 manifest icon.status.*)
  43. statusAlarm: 'icon.status.alarm',
  44. statusWarning: 'icon.status.warning',
  45. statusWorkOrder: 'icon.status.workOrder',
  46. statusNormal: 'icon.status.normal',
  47. statusOffline: 'icon.status.offline',
  48. statusEmpty: 'icon.status.empty',
  49. statusUnknown: 'icon.status.unknown',
  50. statusUnassociated: 'icon.status.unassociated',
  51. // KPI 数据卡片图标(票 37 走查扩展;manifest icon.kpi.*,白剪影 + mask 染语义色)
  52. kpiFacilityCount: 'icon.kpi.facilityCount',
  53. kpiSmartDeviceCount: 'icon.kpi.smartDeviceCount',
  54. kpiDeviceCount: 'icon.kpi.deviceCount',
  55. kpiMonitoringPointCount: 'icon.kpi.monitoringPointCount',
  56. kpiFacility: 'icon.kpi.facility',
  57. kpiIndustryCount: 'icon.kpi.industryCount',
  58. kpiOnlineRate: 'icon.kpi.onlineRate',
  59. kpiOffline: 'icon.kpi.offline',
  60. kpiStale: 'icon.kpi.stale',
  61. kpiUnknownOrMissing: 'icon.kpi.unknownOrMissing',
  62. kpiWarning: 'icon.kpi.warning',
  63. kpiAlarm: 'icon.kpi.alarm',
  64. kpiAbnormalCount: 'icon.kpi.abnormalCount',
  65. kpiResolved: 'icon.kpi.resolved',
  66. kpiEfficiency: 'icon.kpi.efficiency',
  67. kpiTime: 'icon.kpi.time',
  68. kpiScale: 'icon.kpi.scale',
  69. kpiShield: 'icon.kpi.shield',
  70. }
  71. export const ICON_NAMES = Object.keys(ICON_SPECS)
  72. export function isKnownIcon(name) {
  73. return Object.prototype.hasOwnProperty.call(ICON_SPECS, name)
  74. }
  75. export function iconFor(name, options = {}) {
  76. const assetKey = ICON_SPECS[name]
  77. if (!assetKey) return null
  78. const asset = resolveAsset(assetKey, options)
  79. if (!asset.url) return null
  80. // 票 37:KPI 图标走 mask(渲染层按 KPI_ICON_COLORS 染语义色);其余按 manifest 原样。
  81. if (assetKey.startsWith('icon.kpi.')) return { name, ...asset, renderMode: 'mask' }
  82. return { name, ...asset }
  83. }