/** * 弹窗服务类 */ import type { MarkerData, DetectorInfo } from '../types/map.types' import { getHighestPriorityStatus, getStatusLabel, getStatusColor, createClusterPopupHTML, sortDetectorsByPriority } from '../utils/map.utils' export class PopupService { /** * 处理聚合标记弹窗 */ handleClusterPopup(features: any[]): string { // 收集所有探测器信息 const detectorList: DetectorInfo[] = features.map((f) => { const markerData = f.get('markerData') as MarkerData const status = getHighestPriorityStatus(markerData) return { name: markerData.name, status, statusLabel: getStatusLabel(status), statusColor: getStatusColor(status) } }) // 按优先级排序 const sortedDetectorList = sortDetectorsByPriority(detectorList) // 生成弹窗HTML return createClusterPopupHTML(sortedDetectorList) } /** * 处理单个标记弹窗 */ handleSingleMarkerPopup(markerData: MarkerData): string { const status = getHighestPriorityStatus(markerData) return `