/** * 张家峁煤自燃监测预警页面数据 * * 当前阶段后端接口尚未提供,页面先使用本地模拟数据, * 后续接入接口时只需要替换本文件中的模拟常量即可。 */ export interface GoafOverviewItem { label: string; value: number; } export interface DeviceInstallItem { name: string; installed: number; running: number; } export interface OverallWarning { level: number; levelText: string; levelName: string; total: number; color: string; } export interface WarningRow { id: number; name: string; seam: string; level: string; safetyLevel?: string; status?: string; } export interface AlertItem { id: number; time: string; level: number; location: string; message: string; } export interface BundleRow { point: string; o2: string; co: number; ch4: string; c2h4: string; temp: number; status: '正常' | '关注' | '预警'; } export interface FiberTrend { times: string[]; maxTemp: number[]; avgTemp: number[]; maxValue: number; avgValue: number; pointCount: number; } export interface RiskLevel { level: number; name: string; range: string; colorName: string; color: string; } export interface ManualOption { label: string; value: string; score: number; } export interface ManualField { key: string; label: string; value: string; options: ManualOption[]; } export interface ManualGroup { key: string; title: string; fields: ManualField[]; } export interface EvaluationResult { score: number; level: number; levelText: string; color: string; highlightLevel: number; target: string; time: string; source: string; suggestion: string; } export const GOAF_OVERVIEW: GoafOverviewItem[] = [ { label: '矿井采空区总数', value: 28 }, { label: '已封闭采空区数', value: 6 }, { label: '回撤工作面采空区数', value: 4 }, { label: '回采工作面采空区数', value: 12 }, { label: '停产工作面采空区数', value: 6 }, ]; export const INSTALLED_DEVICES: DeviceInstallItem[] = [ { name: '束管监测', installed: 15, running: 13 }, { name: '光纤测温', installed: 15, running: 13 }, { name: '密闭监测', installed: 15, running: 13 }, ]; export const OVERALL_WARNING: OverallWarning = { level: 4, levelText: 'IV', levelName: '高风险', total: 12, color: '#ff9d1c', }; export const WARNING_ROWS: WarningRow[] = [ { id: 1, name: '12采空区', seam: '5-2煤', level: '一般风险', status: '回采中' }, { id: 2, name: '14采空区', seam: '5-2煤', level: '一般风险', status: '回撤中' }, { id: 3, name: '16采空区', seam: '5-1煤', level: '一般风险', status: '停产' }, { id: 4, name: '18采空区', seam: '5-2煤', level: '低风险', status: '回采中' }, { id: 5, name: '20采空区', seam: '5-1煤', level: '中等风险', status: '回采中' }, { id: 6, name: '22采空区', seam: '5-2煤', level: '低风险', status: '已封闭' }, { id: 7, name: '24采空区', seam: '4-2煤', level: '一般风险', status: '回采中' }, { id: 8, name: '26采空区', seam: '4-2煤', level: '低风险', status: '已封闭' }, { id: 9, name: '28采空区', seam: '5-1煤', level: '中等风险', status: '回撤中' }, { id: 10, name: '30采空区', seam: '5-2煤', level: '一般风险', status: '停产' }, { id: 11, name: '32采空区', seam: '4-2煤', level: '低风险', status: '已封闭' }, { id: 12, name: '34采空区', seam: '5-1煤', level: '一般风险', status: '回采中' }, ]; export const ALERTS: AlertItem[] = [ { id: 1, time: '09:28:16', level: 4, location: '12采空区', message: '束管测点 CO 浓度上升至 24ppm' }, { id: 2, time: '09:16:42', level: 3, location: '20采空区', message: '密闭内 O₂ 浓度低于 15%,请关注' }, { id: 3, time: '08:57:03', level: 2, location: '14采空区', message: '光纤测温 3# 测点温度波动 1.8℃' }, { id: 4, time: '08:35:27', level: 4, location: '28采空区', message: '回风顺槽 CH₄ 浓度达到 0.86%' }, { id: 5, time: '08:12:51', level: 2, location: '18采空区', message: '风速传感器数据短时中断,已恢复' }, ]; export const BUNDLE_ROWS: BundleRow[] = [ { point: '12采空区-1#', o2: '18.62', co: 16, ch4: '0.42', c2h4: '0.00', temp: 26.4, status: '正常' }, { point: '12采空区-2#', o2: '17.85', co: 24, ch4: '0.56', c2h4: '0.02', temp: 28.1, status: '关注' }, { point: '14采空区-1#', o2: '19.04', co: 9, ch4: '0.35', c2h4: '0.00', temp: 25.2, status: '正常' }, { point: '16采空区-1#', o2: '16.92', co: 31, ch4: '0.63', c2h4: '0.04', temp: 30.6, status: '预警' }, { point: '20采空区-1#', o2: '18.11', co: 18, ch4: '0.48', c2h4: '0.01', temp: 27.3, status: '正常' }, { point: '28采空区-1#', o2: '17.36', co: 27, ch4: '0.74', c2h4: '0.03', temp: 29.4, status: '关注' }, ]; export const FIBER_TREND: FiberTrend = { times: [ '00:00', '01:00', '02:00', '03:00', '04:00', '05:00', '06:00', '07:00', '08:00', '09:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00', ], maxTemp: [ 24.1, 23.8, 23.6, 23.4, 23.5, 24.0, 25.2, 26.8, 28.4, 30.1, 31.6, 32.6, 33.1, 32.8, 32.2, 31.5, 30.6, 29.4, 28.2, 27.3, 26.6, 26.0, 25.4, 24.8, ], avgTemp: [ 22.2, 22.0, 21.9, 21.8, 21.9, 22.1, 22.6, 23.2, 23.9, 24.5, 25.1, 25.6, 25.9, 25.8, 25.6, 25.3, 24.9, 24.5, 24.1, 23.8, 23.4, 23.1, 22.8, 22.5, ], maxValue: 33.1, avgValue: 23.9, pointCount: 15, }; export const RISK_LEVELS: RiskLevel[] = [ { level: 1, name: 'I 低风险', range: '0-20', colorName: '绿色', color: '#7ed321' }, { level: 2, name: 'II 较低风险', range: '20-40', colorName: '蓝色', color: '#3df6ff' }, { level: 3, name: 'III 中等风险', range: '40-60', colorName: '黄色', color: '#ffd15c' }, { level: 4, name: 'IV 高风险', range: '60-80', colorName: '橙色', color: '#ff9d1c' }, { level: 5, name: 'V 极高风险', range: '80-100', colorName: '红色', color: '#ff4d4f' }, ]; export const MANUAL_GROUPS: ManualGroup[] = [ { key: 'pre', title: '采前评价', fields: [ { key: 'spontaneous', label: '自燃倾向性', value: '自燃', options: [ { label: '不易自燃', value: '不易自燃', score: 3 }, { label: '自燃', value: '自燃', score: 10 }, { label: '容易自燃', value: '容易自燃', score: 18 }, ], }, { key: 'sealQuality', label: '封闭质量', value: '一般', options: [ { label: '好', value: '好', score: 2 }, { label: '一般', value: '一般', score: 8 }, { label: '差', value: '差', score: 15 }, ], }, { key: 'residualCoal', label: '遗煤厚度(m)', value: '1.0', options: [ { label: '0.5', value: '0.5', score: 3 }, { label: '1.0', value: '1.0', score: 7 }, { label: '1.5', value: '1.5', score: 11 }, { label: '2.0', value: '2.0', score: 15 }, ], }, { key: 'advanceSpeed', label: '推进速度(m/d)', value: '3.5', options: [ { label: '4.8', value: '4.8', score: 3 }, { label: '3.5', value: '3.5', score: 7 }, { label: '2.5', value: '2.5', score: 11 }, { label: '1.5', value: '1.5', score: 15 }, ], }, { key: 'airLeakage', label: '漏风强度', value: '中', options: [ { label: '低', value: '低', score: 3 }, { label: '中', value: '中', score: 8 }, { label: '高', value: '高', score: 15 }, ], }, ], }, { key: 'condition', title: '开采条件', fields: [ { key: 'roof', label: '顶板岩性', value: '泥岩', options: [ { label: '砂岩', value: '砂岩', score: 3 }, { label: '泥岩', value: '泥岩', score: 8 }, { label: '复合顶板', value: '复合顶板', score: 12 }, ], }, { key: 'structure', label: '地质构造', value: '较复杂', options: [ { label: '简单', value: '简单', score: 3 }, { label: '较复杂', value: '较复杂', score: 8 }, { label: '复杂', value: '复杂', score: 12 }, ], }, { key: 'miningMethod', label: '采煤方法', value: '综放', options: [ { label: '综采', value: '综采', score: 4 }, { label: '综放', value: '综放', score: 10 }, ], }, { key: 'ventMode', label: '通风方式', value: 'U型', options: [ { label: 'U型', value: 'U型', score: 4 }, { label: 'W型', value: 'W型', score: 8 }, { label: 'U+L型', value: 'U+L型', score: 10 }, ], }, { key: 'sealMode', label: '封闭方式', value: '永久密闭', options: [ { label: '永久密闭', value: '永久密闭', score: 3 }, { label: '临时密闭', value: '临时密闭', score: 8 }, { label: '未封闭', value: '未封闭', score: 13 }, ], }, ], }, { key: 'monitor', title: '监测数据', fields: [ { key: 'o2', label: 'O₂浓度(%)', value: '15-18', options: [ { label: '≥18', value: '≥18', score: 3 }, { label: '15-18', value: '15-18', score: 7 }, { label: '10-15', value: '10-15', score: 12 }, { label: '<10', value: '<10', score: 16 }, ], }, { key: 'co', label: 'CO浓度(ppm)', value: '10-24', options: [ { label: '<10', value: '<10', score: 3 }, { label: '10-24', value: '10-24', score: 7 }, { label: '24-50', value: '24-50', score: 12 }, { label: '>50', value: '>50', score: 16 }, ], }, { key: 'ch4', label: 'CH₄浓度(%)', value: '0.5-1.0', options: [ { label: '<0.5', value: '<0.5', score: 3 }, { label: '0.5-1.0', value: '0.5-1.0', score: 6 }, { label: '>1.0', value: '>1.0', score: 10 }, ], }, { key: 'temperature', label: '温度(℃)', value: '26-30', options: [ { label: '<26', value: '<26', score: 3 }, { label: '26-30', value: '26-30', score: 7 }, { label: '30-35', value: '30-35', score: 12 }, { label: '>35', value: '>35', score: 16 }, ], }, ], }, ]; export const SUGGESTIONS: Record = { 1: '保持现有监测频次,按计划开展日常巡检,关注束管测点气体变化趋势。', 2: '关注束管测点变化趋势,定期校验传感器,保持采空区密闭完好。', 3: '加密束管采样频次,加强回风顺槽气体分析;对高温测点进行连续测温跟踪;必要时调整推进速度并落实注浆与注氮措施。', 4: '立即加密监测并核查高温测点,落实注浆、注氮等综合防灭火措施,必要时调整推进速度。', 5: '立即停止作业并撤出受影响区域人员,启动应急预案,实施连续监测与注浆注氮措施。', }; const LEVEL_TEXT: Record = { 1: 'I 低风险', 2: 'II 较低风险', 3: 'III 中等风险', 4: 'IV 高风险', 5: 'V 极高风险', }; export const INITIAL_EVALUATION: EvaluationResult = { score: 58.6, level: 3, levelText: 'III 高风险', color: '#ff9d1c', highlightLevel: 4, target: '12采空区工作面', time: '2026-10-12 09:30', source: '人工录入', suggestion: SUGGESTIONS[3], }; /** 按 0-20 / 20-40 / 40-60 / 60-80 / 80-100 划分风险等级 */ export function getRiskLevel(score: number): { level: number; name: string; color: string } { if (score < 20) return { level: 1, name: LEVEL_TEXT[1], color: RISK_LEVELS[0].color }; if (score < 40) return { level: 2, name: LEVEL_TEXT[2], color: RISK_LEVELS[1].color }; if (score < 60) return { level: 3, name: LEVEL_TEXT[3], color: RISK_LEVELS[2].color }; if (score < 80) return { level: 4, name: LEVEL_TEXT[4], color: RISK_LEVELS[3].color }; return { level: 5, name: LEVEL_TEXT[5], color: RISK_LEVELS[4].color }; } /** 根据人工录入的各项得分计算 0-100 的风险分值 */ export function calcManualScore(groups: ManualGroup[]): number { let score = 0; let maxScore = 0; groups.forEach((group) => { group.fields.forEach((field) => { const selected = field.options.find((option) => option.value === field.value); score += selected?.score ?? 0; maxScore += Math.max(...field.options.map((option) => option.score)); }); }); if (!maxScore) return 0; return Math.round((score / maxScore) * 1000) / 10; } /** 深度复制人工录入表单,避免多个标签页共享同一份可变数据 */ export function createManualGroups(): ManualGroup[] { return MANUAL_GROUPS.map((group) => ({ ...group, fields: group.fields.map((field) => ({ ...field, options: field.options.map((option) => ({ ...option })), })), })); } export interface SelfIgnitionPageData { overview: GoafOverviewItem[]; devices: DeviceInstallItem[]; overall: OverallWarning; warnings: WarningRow[]; alerts: AlertItem[]; bundleRows: BundleRow[]; fiber: FiberTrend; } /** 生成页面数据副本;数据接口就绪后替换此函数即可 */ export function createSelfIgnitionData(): SelfIgnitionPageData { return { overview: GOAF_OVERVIEW.map((item) => ({ ...item })), devices: INSTALLED_DEVICES.map((item) => ({ ...item })), overall: { ...OVERALL_WARNING }, warnings: WARNING_ROWS.map((item) => ({ ...item })), alerts: ALERTS.map((item) => ({ ...item })), bundleRows: BUNDLE_ROWS.map((item) => ({ ...item })), fiber: { ...FIBER_TREND, times: [...FIBER_TREND.times], maxTemp: [...FIBER_TREND.maxTemp], avgTemp: [...FIBER_TREND.avgTemp], }, }; } /* ==================== 设备实时监测与分析 ==================== */ export interface SensorReading { label: string; value: string; } export interface SensorGroup { name: string; rows: SensorReading[]; } export const SENSOR_GROUPS: SensorGroup[] = [ { name: '工作面#1', rows: [ { label: '回风隅角氧气', value: '20.9%' }, { label: '回风巷一氧化碳', value: '12ppm' }, { label: '回风巷温度', value: '26.5℃' }, ], }, { name: '工作面#2', rows: [ { label: '回风隅角氧气', value: '20.8%' }, { label: '回风巷一氧化碳', value: '15ppm' }, { label: '回风巷温度', value: '27.1℃' }, ], }, ]; export const NATURAL_FIRE_STAGE = { levelText: 'IV', levelName: '高风险', color: '#ff9d1c', }; export const ALERT_ADVICE = '加密束管采样频次,加强回风顺槽气体分析;对高温测点进行连续测温跟踪;必要时调整推进速度并落实注浆与注氮措施。'; export interface FiberChartData { categories: string[]; solid: number[]; dashed: number[]; peakIndex: number; } export const FIBER_CHART_DATA: FiberChartData = { categories: ['测点01', '测点02', '测点03', '测点04', '测点05', '测点06', '测点07', '测点08', '测点09', '测点10', '测点11', '测点12'], solid: [120, 180, 140, 160, 110, 140, 130, 210, 800, 520, 360, 280], dashed: [160, 200, 170, 190, 140, 170, 150, 240, 700, 480, 320, 260], peakIndex: 8, }; export interface BundleMonitorRow { deviceNo: string; o2: string; n2: string; co: number; co2: string; ch4: string; c2h4: string; c2h6: string; c2h2: string; } const BUNDLE_DEVICE_NAMES = ['1#束管', '2#束管', '3#束管', '4#束管']; export const BUNDLE_MONITOR_ROWS: BundleMonitorRow[] = Array.from({ length: 40 }, (_, index) => { return { deviceNo: BUNDLE_DEVICE_NAMES[index % 4], o2: (20.9 - (index % 12) * 0.08).toFixed(2), n2: (78.1 + (index % 9) * 0.06).toFixed(2), co: 6 + (index % 15) * 2, co2: (0.03 + (index % 10) * 0.005).toFixed(3), ch4: (0.18 + (index % 8) * 0.03).toFixed(2), c2h4: (index % 5 === 0 ? 0.02 : 0).toFixed(2), c2h6: (index % 6 === 0 ? 0.01 : 0).toFixed(2), c2h2: (index % 7 === 0 ? 0.01 : 0).toFixed(2), }; }); export interface DeviceMonitorRow { deviceNo: string; o2: string; co: number; co2: string; ch4: string; temp: string; pressureDiff: string; } export const DEVICE_MONITOR_ROWS: DeviceMonitorRow[] = Array.from({ length: 40 }, (_, index) => { return { deviceNo: `${(index % 4) + 1}#密闭`, o2: (20.4 - (index % 10) * 0.07).toFixed(2), co: 8 + (index % 12) * 2, co2: (0.04 + (index % 9) * 0.004).toFixed(3), ch4: (0.22 + (index % 8) * 0.03).toFixed(2), temp: (25.8 + (index % 10) * 0.5).toFixed(1), pressureDiff: (12 + (index % 7) * 3).toFixed(0), }; });