|
|
@@ -0,0 +1,457 @@
|
|
|
+/**
|
|
|
+ * 张家峁煤自燃监测预警页面数据
|
|
|
+ *
|
|
|
+ * 当前阶段后端接口尚未提供,页面先使用本地模拟数据,
|
|
|
+ * 后续接入接口时只需要替换本文件中的模拟常量即可。
|
|
|
+ */
|
|
|
+
|
|
|
+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;
|
|
|
+ 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 },
|
|
|
+ { 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<number, string> = {
|
|
|
+ 1: '保持现有监测频次,按计划开展日常巡检,关注束管测点气体变化趋势。',
|
|
|
+ 2: '关注束管测点变化趋势,定期校验传感器,保持采空区密闭完好。',
|
|
|
+ 3: '加密束管采样频次,加强回风顺槽气体分析;对高温测点进行连续测温跟踪;必要时调整推进速度并落实注浆与注氮措施。',
|
|
|
+ 4: '立即加密监测并核查高温测点,落实注浆、注氮等综合防灭火措施,必要时调整推进速度。',
|
|
|
+ 5: '立即停止作业并撤出受影响区域人员,启动应急预案,实施连续监测与注浆注氮措施。',
|
|
|
+};
|
|
|
+
|
|
|
+const LEVEL_TEXT: Record<number, string> = {
|
|
|
+ 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],
|
|
|
+ },
|
|
|
+ };
|
|
|
+}
|