From b371c4303a558aee7008ad7211f621da04fcfbd1 Mon Sep 17 00:00:00 2001 From: wangyunfei <1224056307@qq,com> Date: Mon, 29 Sep 2025 14:34:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B6=88=E9=98=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/business_basic/background1.png | Bin 0 -> 34095 bytes src/assets/business_basic/download.png | Bin 0 -> 382 bytes src/assets/business_basic/fire_fighting1.png | Bin 0 -> 11064 bytes src/assets/business_basic/fire_fighting2.png | Bin 0 -> 36197 bytes src/assets/business_basic/fire_fighting3.png | Bin 0 -> 31387 bytes src/assets/business_basic/img1.png | Bin 0 -> 11064 bytes src/assets/business_basic/upload.png | Bin 0 -> 377 bytes .../business_basic/module/EvaluationReport.js | 920 +++++++++----- .../module/EvaluationReport.less | 318 +++-- .../business_basic/module/OnlineMonitoring.js | 1017 ++++++++++----- .../module/OnlineMonitoring.less | 1056 +++++++++++++--- .../module/ResponsibilityImplementation.js | 131 +- .../module/ResponsibilityImplementation.less | 334 ++++- .../business_basic/module/RiskAssessment.js | 1101 +++++++++++------ .../business_basic/module/RiskAssessment.less | 633 ++++++---- 15 files changed, 3915 insertions(+), 1595 deletions(-) create mode 100644 src/assets/business_basic/background1.png create mode 100644 src/assets/business_basic/download.png create mode 100644 src/assets/business_basic/fire_fighting1.png create mode 100644 src/assets/business_basic/fire_fighting2.png create mode 100644 src/assets/business_basic/fire_fighting3.png create mode 100644 src/assets/business_basic/img1.png create mode 100644 src/assets/business_basic/upload.png diff --git a/src/assets/business_basic/background1.png b/src/assets/business_basic/background1.png new file mode 100644 index 0000000000000000000000000000000000000000..2065e2f1ba4e7be3971b2689ff1ffe1ac3c8d8ad GIT binary patch literal 34095 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 D{>rnO literal 0 HcmV?d00001 diff --git a/src/assets/business_basic/download.png b/src/assets/business_basic/download.png new file mode 100644 index 0000000000000000000000000000000000000000..17e65190db872db9ad2fd6b6d8831e884c446969 GIT binary patch literal 382 zcmV-^0fGLBP)lV~ao*^=7$%!AH)+Tgpp^0fVNkki(4?^jw85nW_|evb z6QMnNOLaikbv}bpI{SOn=l&>-j}5^%jgK{5SIuR`FRH#VdVtk`7tB?TL@@#R3@n?( zC!vTLrf?8>jCgIF!EPNaMX?a`gT5m`B(&JAdrL6Qzywm|Tqyai2HDqpZ)Vgr1thC5 zr?Qwx7c1Hq!zP^q3zCm86PnmGbpRu0i1gSWr#H|Vct;g)>VQsJO!vxpMaHPDT^E(F cJ;S;90lzp_TKSUQXaE2J07*qoM6N<$g4Q6LK>z>% literal 0 HcmV?d00001 diff --git a/src/assets/business_basic/fire_fighting1.png b/src/assets/business_basic/fire_fighting1.png new file mode 100644 index 0000000000000000000000000000000000000000..55eae7d1daeb58dd46830aace0f97514e04b7a6f GIT binary patch literal 11064 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 XDK=U6kjoOJ00000NkvXXu0mjf3|*Cm literal 0 HcmV?d00001 diff --git a/src/pages/business_basic/module/EvaluationReport.js b/src/pages/business_basic/module/EvaluationReport.js index 03872f5..e98bee6 100644 --- a/src/pages/business_basic/module/EvaluationReport.js +++ b/src/pages/business_basic/module/EvaluationReport.js @@ -1,300 +1,634 @@ -import React, { useState, useEffect } from 'react'; -import { Card, Table, Button, Modal, Form, Input, Select, message, Space, Tag } from 'antd'; -import { PlusOutlined, EditOutlined, DeleteOutlined, EyeOutlined } from '@ant-design/icons'; -import './EvaluationReport.less'; +import React, { useEffect, useRef, useState } from 'react'; +import { Card, Result, CheckCircleOutlined, Button } from 'antd'; +import * as echarts from 'echarts'; +import StandardTable from '@/components/StandardTable'; +import styles from './EvaluationReport.less'; + +import img1 from '@/assets/safe_majorHazard/online_monitoring/img1.png'; +import img2 from '@/assets/safe_majorHazard/online_monitoring/img2.png'; +import img3 from '@/assets/safe_majorHazard/online_monitoring/img3.png'; -const { Option } = Select; const EvaluationReport = () => { - const [form] = Form.useForm(); - const [dataSource, setDataSource] = useState([]); - const [loading, setLoading] = useState(false); - const [modalVisible, setModalVisible] = useState(false); - const [editingRecord, setEditingRecord] = useState(null); - const [pagination, setPagination] = useState({ - current: 1, - pageSize: 10, - total: 0, - }); - - // 模拟数据 - const mockData = [ - { - id: 1, - reportName: '2024年第一季度安全评估报告', - reportType: '季度评估', - assessmentPeriod: '2024-01-01 至 2024-03-31', - assessor: '张三', - status: '已完成', - createTime: '2024-04-01 10:00:00', - description: '对第一季度安全生产情况进行全面评估', - }, - { - id: 2, - reportName: '2024年年度安全评估报告', - reportType: '年度评估', - assessmentPeriod: '2024-01-01 至 2024-12-31', - assessor: '李四', - status: '进行中', - createTime: '2024-01-15 14:30:00', - description: '年度安全生产综合评估', - }, - ]; - - useEffect(() => { - fetchData(); - }, [pagination.current, pagination.pageSize]); - - const fetchData = async () => { - setLoading(true); - try { - // 模拟API调用 - setTimeout(() => { - setDataSource(mockData); - setPagination(prev => ({ ...prev, total: mockData.length })); - setLoading(false); - }, 500); - } catch (error) { - message.error('获取数据失败'); - setLoading(false); - } - }; - - const handleAdd = () => { - setEditingRecord(null); - form.resetFields(); - setModalVisible(true); - }; - - const handleEdit = (record) => { - setEditingRecord(record); - form.setFieldsValue(record); - setModalVisible(true); - }; - - const handleDelete = (record) => { - Modal.confirm({ - title: '确认删除', - content: `确定要删除评估报告"${record.reportName}"吗?`, - onOk: () => { - setDataSource(dataSource.filter(item => item.id !== record.id)); - message.success('删除成功'); - }, + const trendChartRef = useRef(null); + const pieChartRef = useRef(null); + const barChartRef = useRef(null); + + // 表格相关状态 + const [selectedRowKeys, setSelectedRowKeys] = useState([]); + const [selectedRows, setSelectedRows] = useState([]); + const [loading, setLoading] = useState(false); + const [dataSource, setDataSource] = useState([]); + const [pagination, setPagination] = useState({ + current: 1, + pageSize: 5, + total: 0, }); - }; - - const handleView = (record) => { - Modal.info({ - title: '查看评估报告', - content: ( -
-

报告名称:{record.reportName}

-

报告类型:{record.reportType}

-

评估周期:{record.assessmentPeriod}

-

评估人:{record.assessor}

-

状态:{record.status}

-

创建时间:{record.createTime}

-

描述:{record.description}

-
- ), - width: 600, - }); - }; - - const handleSubmit = async (values) => { - try { - if (editingRecord) { - // 编辑 - setDataSource(dataSource.map(item => - item.id === editingRecord.id ? { ...item, ...values } : item - )); - message.success('编辑成功'); - } else { - // 新增 - const newRecord = { - id: Date.now(), - ...values, - status: '进行中', - createTime: new Date().toLocaleString(), - }; - setDataSource([...dataSource, newRecord]); - message.success('添加成功'); - } - setModalVisible(false); - form.resetFields(); - } catch (error) { - message.error('操作失败'); - } - }; - - const columns = [ - { - title: '报告名称', - dataIndex: 'reportName', - key: 'reportName', - width: 200, - }, - { - title: '报告类型', - dataIndex: 'reportType', - key: 'reportType', - width: 120, - }, - { - title: '评估周期', - dataIndex: 'assessmentPeriod', - key: 'assessmentPeriod', - width: 200, - }, - { - title: '评估人', - dataIndex: 'assessor', - key: 'assessor', - width: 100, - }, - { - title: '状态', - dataIndex: 'status', - key: 'status', - width: 100, - render: (status) => ( - - {status} - - ), - }, - { - title: '创建时间', - dataIndex: 'createTime', - key: 'createTime', - width: 150, - }, - { - title: '操作', - key: 'action', - width: 200, - render: (_, record) => ( - - - - - - ), - }, - ]; - - return ( -
- } onClick={handleAdd}> - 新增报告 - + + // 隐患趋势分析折线图 + useEffect(() => { + if (trendChartRef.current) { + const chart = echarts.init(trendChartRef.current); + + const option = { + color: ['#FF4D4F', '#FAAD14', '#52C41A'], + legend: { + data: ['重大隐患', '一般隐患', '轻微隐患'], + top: "5px", + left: "center", + itemGap: 20, + textStyle: { + fontSize: 10 + } + }, + grid: { + left: '3%', + right: '4%', + bottom: '3%', + top: '20%', + containLabel: true + }, + xAxis: { + type: 'category', + boundaryGap: false, + data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], + axisLabel: { + fontSize: 10 + } + }, + yAxis: { + type: 'value', + axisLabel: { + fontSize: 10 + } + }, + series: [ + { + name: '重大隐患', + type: 'line', + smooth: true, + symbol: 'circle', + symbolSize: 6, + lineStyle: { + width: 2, + color: '#FF4D4F' + }, + itemStyle: { + color: '#FF4D4F', + borderColor: '#FF4D4F', + borderWidth: 2 + }, + data: [12, 8, 15, 10, 18, 14, 20, 16, 22, 19, 25, 21] + }, + { + name: '一般隐患', + type: 'line', + smooth: true, + symbol: 'circle', + symbolSize: 6, + lineStyle: { + width: 2, + color: '#FAAD14' + }, + itemStyle: { + color: '#FAAD14', + borderColor: '#FAAD14', + borderWidth: 2 + }, + data: [25, 30, 28, 35, 32, 38, 40, 36, 42, 38, 45, 41] + }, + { + name: '轻微隐患', + type: 'line', + smooth: true, + symbol: 'circle', + symbolSize: 6, + lineStyle: { + width: 2, + color: '#52C41A' + }, + itemStyle: { + color: '#52C41A', + borderColor: '#52C41A', + borderWidth: 2 + }, + data: [45, 50, 48, 55, 52, 58, 60, 56, 62, 58, 65, 61] + } + ] + }; + + chart.setOption(option); + + const handleResize = () => { + if (chart && !chart.isDisposed()) { + chart.resize(); + } + }; + + window.addEventListener('resize', handleResize); + + return () => { + window.removeEventListener('resize', handleResize); + if (chart && !chart.isDisposed()) { + chart.dispose(); + } + }; + } + }, []); + + // 隐患类型分布玫瑰饼图 + useEffect(() => { + if (pieChartRef.current) { + const chart = echarts.init(pieChartRef.current); + + const option = { + color: ['#FF4D4F', '#FAAD14', '#52C41A', '#1890FF', '#722ED1', '#13C2C2'], + legend: { + orient: 'vertical', + left: 'left', + top: 'center', + textStyle: { + fontSize: 10 + } + }, + series: [ + { + name: '隐患类型', + type: 'pie', + radius: ['20%', '70%'], + center: ['60%', '50%'], + roseType: 'area', + itemStyle: { + borderRadius: 5, + borderColor: '#fff', + borderWidth: 2 + }, + label: { + show: true, + formatter: '{b}: {c}', + fontSize: 10 + }, + data: [ + { value: 35, name: '设备故障' }, + { value: 28, name: '操作失误' }, + { value: 22, name: '环境因素' }, + { value: 18, name: '管理缺陷' }, + { value: 15, name: '设计缺陷' }, + { value: 12, name: '其他' } + ] + } + ] + }; + + chart.setOption(option); + + const handleResize = () => { + if (chart && !chart.isDisposed()) { + chart.resize(); + } + }; + + window.addEventListener('resize', handleResize); + + return () => { + window.removeEventListener('resize', handleResize); + if (chart && !chart.isDisposed()) { + chart.dispose(); + } + }; + } + }, []); + + // 隐患整改情况柱状图 + useEffect(() => { + if (barChartRef.current) { + const chart = echarts.init(barChartRef.current); + + const option = { + color: ['#FF4D4F', '#FAAD14', '#1890FF', '#52C41A', '#722ED1'], + grid: { + left: '3%', + right: '4%', + bottom: '3%', + top: '10%', + containLabel: true + }, + xAxis: { + type: 'category', + data: ['待处理', '处理中', '待审核', '已完成', '已关闭'], + axisLabel: { + fontSize: 10 + } + }, + yAxis: { + type: 'value', + axisLabel: { + fontSize: 10 + } + }, + series: [ + { + name: '数量', + type: 'bar', + data: [25, 18, 12, 35, 8], + itemStyle: { + borderRadius: [4, 4, 0, 0] + }, + barWidth: '60%' + } + ] + }; + + chart.setOption(option); + + const handleResize = () => { + if (chart && !chart.isDisposed()) { + chart.resize(); + } + }; + + window.addEventListener('resize', handleResize); + + return () => { + window.removeEventListener('resize', handleResize); + if (chart && !chart.isDisposed()) { + chart.dispose(); + } + }; } - > - - `第 ${range[0]}-${range[1]} 条/共 ${total} 条`, - onChange: (page, pageSize) => { - setPagination(prev => ({ - ...prev, - current: page, - pageSize: pageSize || prev.pageSize, - })); - }, - }} - /> - - - { - setModalVisible(false); - form.resetFields(); - }} - onOk={() => form.submit()} - width={600} - > -
- - - - - - - - - - - - - - - - - - - - -
- - ); + }, []); + + // 表格列定义 + const columns = [ + { + title: '编号', + dataIndex: 'id', + key: 'id', + width: 80, + render: (text, record, index) => { + const page = pagination.current || 1; + const pageSize = pagination.pageSize || 5; + const number = (page - 1) * pageSize + index + 1; + return `0${number}`.slice(-2); + } + }, + { + title: '报告名称', + dataIndex: 'reportName', + key: 'reportName', + width: 200, + }, + { + title: '类型', + dataIndex: 'type', + key: 'type', + width: 120, + }, + { + title: '上传时间', + dataIndex: 'uploadTime', + key: 'uploadTime', + width: 150, + }, + { + title: '版本', + dataIndex: 'version', + key: 'version', + width: 80, + }, + { + title: '状态', + dataIndex: 'status', + key: 'status', + width: 100, + render: (text) => { + const statusMap = { + '已完成': { color: '#52C41A', bg: '#F6FFED' }, + '处理中': { color: '#FAAD14', bg: '#FFFBE6' }, + '待审核': { color: '#1890FF', bg: '#E6F7FF' } + }; + const status = statusMap[text] || { color: '#333', bg: '#F5F5F5' }; + return ( + + {text} + + ); + } + }, + { + title: '上传人', + dataIndex: 'uploader', + key: 'uploader', + width: 100, + }, + { + title: '操作', + key: 'action', + width: 80, + render: (_, record) => ( +
+ +
+ ), + }, + ]; + + // 模拟数据 + const mockData = [ + { + key: '1', + id: '001', + reportName: '2024年第一季度安全评估报告', + type: '季度报告', + uploadTime: '2024-01-15 08:30:25', + version: 'V1.0', + status: '已完成', + uploader: '张三', + }, + { + key: '2', + id: '002', + reportName: '重大危险源专项评估报告', + type: '专项报告', + uploadTime: '2024-01-15 09:15:10', + version: 'V2.1', + status: '处理中', + uploader: '李四', + }, + { + key: '3', + id: '003', + reportName: '年度安全风险评估报告', + type: '年度报告', + uploadTime: '2024-01-15 10:45:30', + version: 'V1.5', + status: '待审核', + uploader: '王五', + }, + { + key: '4', + id: '004', + reportName: '设备安全评估报告', + type: '设备报告', + uploadTime: '2024-01-15 11:20:45', + version: 'V1.2', + status: '已完成', + uploader: '赵六', + }, + { + key: '5', + id: '005', + reportName: '应急预案评估报告', + type: '应急报告', + uploadTime: '2024-01-15 12:10:20', + version: 'V3.0', + status: '已完成', + uploader: '孙七', + }, + { + key: '6', + id: '006', + reportName: '环境安全评估报告', + type: '环境报告', + uploadTime: '2024-01-15 13:25:15', + version: 'V1.8', + status: '处理中', + uploader: '周八', + }, + { + key: '7', + id: '007', + reportName: '人员安全培训评估报告', + type: '培训报告', + uploadTime: '2024-01-15 14:10:30', + version: 'V2.3', + status: '待审核', + uploader: '吴九', + }, + { + key: '8', + id: '008', + reportName: '消防安全评估报告', + type: '消防报告', + uploadTime: '2024-01-15 15:45:20', + version: 'V1.1', + status: '已完成', + uploader: '郑十', + }, + { + key: '9', + id: '009', + reportName: '化学品安全评估报告', + type: '化学品报告', + uploadTime: '2024-01-15 16:30:45', + version: 'V2.0', + status: '处理中', + uploader: '钱十一', + }, + { + key: '10', + id: '010', + reportName: '职业健康安全评估报告', + type: '职业健康报告', + uploadTime: '2024-01-15 17:15:10', + version: 'V1.6', + status: '已完成', + uploader: '陈十二', + }, + { + key: '11', + id: '011', + reportName: '安全管理制度评估报告', + type: '制度报告', + uploadTime: '2024-01-15 18:20:35', + version: 'V1.3', + status: '待审核', + uploader: '刘十三', + }, + { + key: '12', + id: '012', + reportName: '安全投入评估报告', + type: '投入报告', + uploadTime: '2024-01-15 19:05:50', + version: 'V1.9', + status: '已完成', + uploader: '黄十四', + }, + ]; + + // 初始化数据 + useEffect(() => { + setPagination(prev => ({ ...prev, total: mockData.length })); + }, []); + + // 根据分页获取当前页数据 + const getCurrentPageData = () => { + const { current, pageSize } = pagination; + const startIndex = (current - 1) * pageSize; + const endIndex = startIndex + pageSize; + return mockData.slice(startIndex, endIndex); + }; + + // 表格选择变化 + const onSelectChange = (newSelectedRowKeys, newSelectedRows) => { + setSelectedRowKeys(newSelectedRowKeys); + setSelectedRows(newSelectedRows); + }; + + // 分页变化处理 + const handleTableChange = (pagination) => { + setPagination(prev => ({ + ...prev, + current: pagination.current, + pageSize: pagination.pageSize, + })); + }; + + return ( +
+ {/* 第一个大块 - 高度16% */} +
+
+
+ {/* 块1 */} +
+
+
总危险源数量
+
65
+
+ + 较昨日 +2 +
+
+
+ 总危险源数量 +
+
+ + {/* 块2 */} +
+
+
高风险设备
+
65
+
+ + 较昨日 +2 +
+
+
+ 高风险设备 +
+
+ + {/* 块3 */} +
+
+
今日预警次数
+
65
+
+ + 较昨日 +2 +
+
+
+ 今日预警次数 +
+
+ + {/* 块4 */} +
+
+
未处理预警
+
65
+
+ + 较昨日 +2 +
+
+
+ 未处理预警 +
+
+
+
+
+ + {/* 第二个大块 - 三个图表块 */} +
+
+ {/* 第一个小块 - 隐患趋势分析 */} +
+
+
+
隐患趋势分析
+
+
+
+ + {/* 第二个小块 - 隐患类型分布 */} +
+
+
+
隐患类型分布
+
+
+
+ + {/* 第三小块 - 隐患整改情况 */} +
+
+
+
隐患整改情况
+
+
+
+
+
+ + {/* 第三大块 - 评估报告表格 */} +
+ {/* 首行 左侧标题左对齐 右侧按钮右对齐 */} +
+
+
+
评估报告
+
+
+ + {/* 表格 5行8列 带页码 每页5条数据 */} +
+ + `共 ${total} 条`, + }} + scroll={{ x: 1000 }} + /> +
+
+
+ ); }; -export default EvaluationReport; +export default EvaluationReport; \ No newline at end of file diff --git a/src/pages/business_basic/module/EvaluationReport.less b/src/pages/business_basic/module/EvaluationReport.less index 4186bb8..9ac7a4d 100644 --- a/src/pages/business_basic/module/EvaluationReport.less +++ b/src/pages/business_basic/module/EvaluationReport.less @@ -1,115 +1,225 @@ -.evaluation-report { - padding: 20px; - - .ant-card { - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); - border-radius: 6px; - - .ant-card-head { - border-bottom: 1px solid #f0f0f0; - - .ant-card-head-title { - font-size: 16px; - font-weight: 600; - color: #262626; - } - } +.Econtainer { + padding: 8px 6px 0px 6px; + height: 100%; + display: flex; + flex-direction: column; + gap: 10px; - .ant-card-body { - padding: 20px; - } - } - - .ant-table { - .ant-table-thead > tr > th { - background-color: #fafafa; - font-weight: 600; - color: #262626; - border-bottom: 1px solid #f0f0f0; - } + // 第一个大块 - 高度16% + .EcontainerTop { + height: 16%; + border-radius: 4px; + display: flex; + flex-direction: column; - .ant-table-tbody > tr > td { - border-bottom: 1px solid #f0f0f0; - } + .sectionContent { + height: 100%; + display: flex; + flex-direction: column; - .ant-table-tbody > tr:hover > td { - background-color: #f5f5f5; - } - } - - .ant-btn { - border-radius: 4px; - - &.ant-btn-primary { - background-color: #1890ff; - border-color: #1890ff; - - &:hover { - background-color: #40a9ff; - border-color: #40a9ff; - } - } + .blocksContainer { + flex: 1; + display: flex; + gap: 10px; + height: 100%; - &.ant-btn-link { - padding: 4px 8px; - height: auto; - - &:hover { - background-color: #f5f5f5; - } - } - } - - .ant-tag { - border-radius: 4px; - font-size: 12px; - padding: 2px 8px; - } - - .ant-modal { - .ant-modal-header { - border-bottom: 1px solid #f0f0f0; - - .ant-modal-title { - font-size: 16px; - font-weight: 600; - color: #262626; - } - } + .blockItem { + flex: 1; + height: 100%; + display: flex; + background: linear-gradient(170.5deg, #EBEFF4 6.87%, #FFFFFF 92.55%); + border-radius: 4px; + border: 2px solid #FFFFFF; - .ant-modal-body { - padding: 24px; - } + .blockLeft { + width: 60%; + height: 100%; + display: flex; + flex-direction: column; + justify-content: center; + padding: 15px; + padding-left: 20px; + gap: 8px; + + .blockTitle { + font-family: PingFang SC; + font-weight: 400; + font-size: 12px; + color: #666666; + line-height: 1.2; + } + + .blockNumber { + font-family: PingFang SC; + font-weight: 700; + font-size: 24px; + color: #333333; + line-height: 1.2; + } + + .blockChange { + font-family: PingFang SC; + font-weight: 400; + font-size: 12px; + color: #1269FF; + line-height: 1.2; + display: flex; + align-items: center; + gap: 4px; - .ant-form-item-label > label { - font-weight: 500; - color: #262626; + .arrow { + font-size: 14px; + font-weight: bold; + } + + .checkIcon { + font-size: 16px; + color: #1269FF; + } + } + } + + .blockRight { + flex: 1; + height: 100%; + background-color: transparent; + border-radius: 0 4px 4px 0; + display: flex; + align-items: center; + justify-content: center; + + .blockImage { + height: 130%; + object-fit: contain; + margin-right: -10px; + } + } + } + } + } } - .ant-input, - .ant-select-selector { - border-radius: 4px; - border: 1px solid #d9d9d9; - - &:hover { - border-color: #40a9ff; - } - - &:focus, - &.ant-select-focused .ant-select-selector { - border-color: #40a9ff; - box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); - } + // 第二个大块 - 三个图表块 + .EcontainerMiddle { + height: 30%; + border-radius: 4px; + background-color: #fff; + display: flex; + flex-direction: column; + + .sectionContent { + height: 100%; + display: flex; + flex-direction: row; + gap: 10px; + padding: 10px; + + .chartBlock { + flex: 1; + height: 100%; + background: linear-gradient(170.5deg, #EBEFF4 6.87%, #FFFFFF 53.01%); + border: 2px solid #fff; + border-radius: 4px; + display: flex; + flex-direction: column; + font-family: PingFang SC; + font-size: 14px; + color: #333333; + + .chartTitle { + display: flex; + align-items: center; + gap: 8px; + font-weight: 500; + font-size: 14px; + color: #333333; + padding: 10px 15px 5px 15px; + + .titleIcon { + width: 3px; + height: 14px; + background-color: #2E4CD4; + } + } + + .chartContainer { + flex: 1; + width: 100%; + height: 120%; + // // min-height: 200px; + } + } + } } - } - - .ant-pagination { - margin-top: 16px; - text-align: right; - - .ant-pagination-total-text { - color: #8c8c8c; - margin-right: 16px; + + // 第三大块 - 评估报告表格 + .EcontainerBottom { + flex: 1; + background-color: #fff; + border-radius: 4px; + display: flex; + flex-direction: column; + padding: 10px; + + .tableHeader { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 10px; + + .tableTitle { + display: flex; + align-items: center; + gap: 8px; + font-weight: 500; + font-size: 14px; + color: #333333; + + .titleIcon { + width: 3px; + height: 14px; + background-color: #2E4CD4; + } + } + } + + .tableContainer { + flex: 1; + overflow: hidden; + + :global(.ant-table-wrapper) { + height: 100%; + } + + :global(.ant-table) { + height: 100%; + } + + :global(.ant-table-container) { + height: 100%; + } + + :global(.ant-table-body) { + height: calc(100% - 55px); // 减去表头高度 + overflow-y: auto; + } + + :global(.ant-table-tbody > tr > td) { + padding: 8px 16px; + font-size: 12px; + } + + :global(.ant-table-thead > tr > th) { + padding: 8px 16px; + font-size: 12px; + font-weight: 500; + background-color: #fafafa; + } + + :global(.ant-pagination) { + margin-top: 10px; + text-align: right; + } + } } - } } diff --git a/src/pages/business_basic/module/OnlineMonitoring.js b/src/pages/business_basic/module/OnlineMonitoring.js index adfae54..047b795 100644 --- a/src/pages/business_basic/module/OnlineMonitoring.js +++ b/src/pages/business_basic/module/OnlineMonitoring.js @@ -1,344 +1,715 @@ -import React, { useState, useEffect } from 'react'; -import { Card, Table, Button, Modal, Form, Input, Select, message, Space, Tag, Badge } from 'antd'; -import { PlusOutlined, EditOutlined, DeleteOutlined, EyeOutlined, PlayCircleOutlined, PauseCircleOutlined } from '@ant-design/icons'; -import './OnlineMonitoring.less'; -const { Option } = Select; +import React, { useEffect, useRef, useState } from 'react'; +import { Card, Result, Select, Button } from 'antd'; +import * as echarts from 'echarts'; +import StandardTable from '@/components/StandardTable'; +import styles from './OnlineMonitoring.less'; + +import alarm0 from '@/assets/safe_majorHazard/online_monitoring/alarm0.png'; +import alarm1 from '@/assets/safe_majorHazard/online_monitoring/alarm1.png'; +import alarm2 from '@/assets/safe_majorHazard/online_monitoring/alarm2.png'; +import alarm3 from '@/assets/safe_majorHazard/online_monitoring/alarm3.png'; +import exportIcon from '@/assets/safe_majorHazard/online_monitoring/export.png'; +import deleteIcon from '@/assets/safe_majorHazard/online_monitoring/delete.png'; const OnlineMonitoring = () => { - const [form] = Form.useForm(); - const [dataSource, setDataSource] = useState([]); - const [loading, setLoading] = useState(false); - const [modalVisible, setModalVisible] = useState(false); - const [editingRecord, setEditingRecord] = useState(null); - const [pagination, setPagination] = useState({ - current: 1, - pageSize: 10, - total: 0, - }); + const chartRef = useRef(null); + const [selectedRowKeys, setSelectedRowKeys] = useState([]); + const [selectedRows, setSelectedRows] = useState([]); + const [loading, setLoading] = useState(false); + const [dataSource, setDataSource] = useState([]); + const [pagination, setPagination] = useState({ + current: 1, + pageSize: 5, + total: 0, + }); - // 模拟数据 - const mockData = [ - { - id: 1, - deviceName: '温度传感器-001', - deviceType: '温度传感器', - location: '生产车间A区', - status: '在线', - lastUpdate: '2024-01-15 14:30:25', - value: '25.6°C', - threshold: '30°C', - description: '监测生产车间温度变化', - }, - { - id: 2, - deviceName: '压力传感器-002', - deviceType: '压力传感器', - location: '储罐区B区', - status: '离线', - lastUpdate: '2024-01-15 12:15:30', - value: '--', - threshold: '2.5MPa', - description: '监测储罐压力状态', - }, - { - id: 3, - deviceName: '气体检测器-003', - deviceType: '气体检测器', - location: '危险品仓库', - status: '在线', - lastUpdate: '2024-01-15 14:32:10', - value: '正常', - threshold: '50ppm', - description: '监测有害气体浓度', - }, - ]; + useEffect(() => { + if (chartRef.current) { + const chart = echarts.init(chartRef.current); - useEffect(() => { - fetchData(); - }, [pagination.current, pagination.pageSize]); + const option = { + color: ['#04A7F3', '#E7C42C', '#EC6941'], - const fetchData = async () => { - setLoading(true); - try { - // 模拟API调用 - setTimeout(() => { - setDataSource(mockData); - setPagination(prev => ({ ...prev, total: mockData.length })); - setLoading(false); - }, 500); - } catch (error) { - message.error('获取数据失败'); - setLoading(false); - } - }; + legend: { + data: ['液位', '温度', '压力'], + top: "-3px", + left: "center", + itemGap: 40, // 图例间距 + textStyle: { + fontSize: 10 + } + }, + grid: { + left: '2%', + right: '4%', + bottom: '2%', + top: '12%', + containLabel: true + }, + xAxis: { + type: 'category', + boundaryGap: false, + data: ['0:00', '2:00', '4:00', '6:00', '8:00', '10:00', '12:00', '14:00', '16:00', '18:00', '20:00', '22:00', '24:00'], + axisLabel: { + fontSize: 10 + } + }, + yAxis: { + type: 'value', + min: 0, + max: 500, + axisLabel: { + formatter: '{value}', + fontSize: 10 + } + }, + series: [ + { + name: '液位', + type: 'line', + smooth: true, + lineStyle: { + width: 1.5, + color: '#04A7F3' + }, + areaStyle: { + color: { + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [ + { offset: 0, color: 'rgba(4, 167, 243, 0.3)' }, + { offset: 1, color: 'rgba(4, 167, 243, 0)' } + ] + } + }, + symbol: 'none', // 不显示数据点 + data: [120, 200, 150, 300, 250, 400, 350, 280, 320, 180, 220, 160, 140] + }, + { + name: '温度', + type: 'line', + smooth: true, + lineStyle: { + width: 1.5, + color: '#E7C42C' + }, + areaStyle: { + color: { + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [ + { offset: 0, color: 'rgba(231, 196, 44, 0.3)' }, + { offset: 1, color: 'rgba(231, 196, 44, 0)' } + ] + } + }, + symbol: 'none', + data: [80, 120, 100, 180, 160, 220, 200, 150, 170, 90, 110, 85, 75] + }, + { + name: '压力', + type: 'line', + smooth: true, + lineStyle: { + width: 1.5, + color: '#EC6941' + }, + areaStyle: { + color: { + type: 'linear', + x: 0, + y: 1, + x2: 0, + y2: 0, + colorStops: [ + { offset: 0, color: 'rgba(236, 105, 65, 0)' }, + { offset: 1, color: 'rgba(236, 105, 65, 0.3)' } + ] + } + }, + symbol: 'none', + data: [200, 300, 250, 450, 400, 430, 480, 420, 480, 280, 320, 260, 240] + } + ] + }; - const handleAdd = () => { - setEditingRecord(null); - form.resetFields(); - setModalVisible(true); - }; + chart.setOption(option); - const handleEdit = (record) => { - setEditingRecord(record); - form.setFieldsValue(record); - setModalVisible(true); - }; + // 响应式调整 - 使用ResizeObserver监听容器尺寸变化 + let resizeTimer = null; + const handleResize = () => { + // 防抖处理,避免频繁调用resize + if (resizeTimer) { + clearTimeout(resizeTimer); + } + resizeTimer = setTimeout(() => { + chart.resize(); + }, 100); + }; + + // 监听窗口大小变化 + window.addEventListener('resize', handleResize); + + // 监听容器尺寸变化(解决菜单栏伸缩时的自适应问题) + let resizeObserver = null; + if (window.ResizeObserver) { + resizeObserver = new ResizeObserver(() => { + // 使用setTimeout确保DOM更新完成后再调整图表 + setTimeout(() => { + handleResize(); + }, 0); + }); + resizeObserver.observe(chartRef.current); + } - const handleDelete = (record) => { - Modal.confirm({ - title: '确认删除', - content: `确定要删除监控设备"${record.deviceName}"吗?`, - onOk: () => { - setDataSource(dataSource.filter(item => item.id !== record.id)); - message.success('删除成功'); - }, - }); - }; + return () => { + window.removeEventListener('resize', handleResize); + if (resizeObserver) { + resizeObserver.disconnect(); + } + if (resizeTimer) { + clearTimeout(resizeTimer); + } + chart.dispose(); + }; + } + }, []); - const handleView = (record) => { - Modal.info({ - title: '查看监控设备详情', - content: ( -
-

设备名称:{record.deviceName}

-

设备类型:{record.deviceType}

-

安装位置:{record.location}

-

运行状态: - -

-

当前数值:{record.value}

-

阈值设置:{record.threshold}

-

最后更新:{record.lastUpdate}

-

设备描述:{record.description}

-
- ), - width: 600, - }); - }; + // 表格列定义 + const columns = [ + { + title: '编号', + dataIndex: 'id', + key: 'id', + width: 80, + render: (text, record, index) => { + const page = pagination.current || 1; + const pageSize = pagination.pageSize || 5; + const number = (page - 1) * pageSize + index + 1; + return `0${number}`.slice(-2); + } + }, + { + title: '报警时间', + dataIndex: 'alarmTime', + key: 'alarmTime', + width: 150, + }, + { + title: '报警传感器名称', + dataIndex: 'sensorName', + key: 'sensorName', + width: 150, + }, + { + title: '报警类型', + dataIndex: 'alarmType', + key: 'alarmType', + width: 120, + }, + { + title: '报警内容', + dataIndex: 'alarmContent', + key: 'alarmContent', + width: 200, + }, + { + title: '优先级', + dataIndex: 'priority', + key: 'priority', + width: 80, + render: (text) => { + const colorMap = { + '高': '#FF4D4F', + '中': '#FAAD14', + '低': '#52C41A' + }; + return {text}; + } + }, + { + title: '处理状态', + dataIndex: 'status', + key: 'status', + width: 100, + render: (text) => { + const statusMap = { + '未处理': { color: '#FF4D4F', bg: '#FFF2F0' }, + '处理中': { color: '#FAAD14', bg: '#FFFBE6' }, + '已处理': { color: '#52C41A', bg: '#F6FFED' } + }; + const status = statusMap[text] || { color: '#333', bg: '#F5F5F5' }; + return ( + + {text} + + ); + } + }, + { + title: '处理时间', + dataIndex: 'processTime', + key: 'processTime', + width: 150, + }, + { + title: '处理人', + dataIndex: 'processor', + key: 'processor', + width: 100, + }, + { + title: '操作', + key: 'action', + width: 120, + render: (_, record) => ( +
+ +
+ ), + }, + ]; - const handleStartStop = (record) => { - const newStatus = record.status === '在线' ? '离线' : '在线'; - setDataSource(dataSource.map(item => - item.id === record.id ? { ...item, status: newStatus } : item - )); - message.success(`设备已${newStatus === '在线' ? '启动' : '停止'}`); - }; + // 模拟数据 + const mockData = [ + { + key: '1', + id: '001', + alarmTime: '2024-01-15 08:30:25', + sensorName: 'LNG储罐', + alarmType: '温度超限', + alarmContent: '储罐温度超过安全阈值', + priority: '高', + status: '未处理', + processTime: '-', + processor: '-', + }, + { + key: '2', + id: '002', + alarmTime: '2024-01-15 09:15:10', + sensorName: 'LNG储罐', + alarmType: '压力异常', + alarmContent: '管道压力异常波动', + priority: '中', + status: '处理中', + processTime: '2024-01-15 09:20:00', + processor: '张三', + }, + { + key: '3', + id: '003', + alarmTime: '2024-01-15 10:45:30', + sensorName: 'LNG储罐', + alarmType: '液位异常', + alarmContent: '储罐液位低于警戒线', + priority: '高', + status: '已处理', + processTime: '2024-01-15 11:00:15', + processor: '李四', + }, + { + key: '4', + id: '004', + alarmTime: '2024-01-15 11:20:45', + sensorName: 'LNG储罐', + alarmType: '气体泄漏', + alarmContent: '检测到可燃气体泄漏', + priority: '高', + status: '未处理', + processTime: '-', + processor: '-', + }, + { + key: '5', + id: '005', + alarmTime: '2024-01-15 12:10:20', + sensorName: 'LNG储罐', + alarmType: '设备振动', + alarmContent: '设备异常振动', + priority: '低', + status: '已处理', + processTime: '2024-01-15 12:30:00', + processor: '王五', + }, + { + key: '6', + id: '006', + alarmTime: '2024-01-15 13:25:15', + sensorName: 'LNG管道', + alarmType: '流量异常', + alarmContent: '管道流量异常波动', + priority: '中', + status: '未处理', + processTime: '-', + processor: '-', + }, + { + key: '7', + id: '007', + alarmTime: '2024-01-15 14:10:30', + sensorName: 'LNG储罐', + alarmType: '温度异常', + alarmContent: '储罐温度异常升高', + priority: '高', + status: '处理中', + processTime: '2024-01-15 14:15:00', + processor: '赵六', + }, + { + key: '8', + id: '008', + alarmTime: '2024-01-15 15:45:20', + sensorName: 'LNG管道', + alarmType: '压力超限', + alarmContent: '管道压力超过安全阈值', + priority: '高', + status: '已处理', + processTime: '2024-01-15 16:00:00', + processor: '孙七', + }, + { + key: '9', + id: '009', + alarmTime: '2024-01-15 16:30:45', + sensorName: 'LNG储罐', + alarmType: '液位超限', + alarmContent: '储罐液位超过警戒线', + priority: '中', + status: '未处理', + processTime: '-', + processor: '-', + }, + { + key: '10', + id: '010', + alarmTime: '2024-01-15 17:15:10', + sensorName: 'LNG管道', + alarmType: '泄漏检测', + alarmContent: '检测到轻微气体泄漏', + priority: '低', + status: '已处理', + processTime: '2024-01-15 17:30:00', + processor: '周八', + }, + { + key: '11', + id: '011', + alarmTime: '2024-01-15 18:20:35', + sensorName: 'LNG储罐', + alarmType: '设备故障', + alarmContent: '储罐阀门异常关闭', + priority: '高', + status: '处理中', + processTime: '2024-01-15 18:25:00', + processor: '吴九', + }, + { + key: '12', + id: '012', + alarmTime: '2024-01-15 19:05:50', + sensorName: 'LNG管道', + alarmType: '温度异常', + alarmContent: '管道温度异常下降', + priority: '中', + status: '未处理', + processTime: '-', + processor: '-', + }, + ]; - const handleSubmit = async (values) => { - try { - if (editingRecord) { - // 编辑 - setDataSource(dataSource.map(item => - item.id === editingRecord.id ? { ...item, ...values } : item - )); - message.success('编辑成功'); - } else { - // 新增 - const newRecord = { - id: Date.now(), - ...values, - status: '离线', - lastUpdate: new Date().toLocaleString(), - value: '--', - }; - setDataSource([...dataSource, newRecord]); - message.success('添加成功'); - } - setModalVisible(false); - form.resetFields(); - } catch (error) { - message.error('操作失败'); - } - }; + // 初始化数据 + useEffect(() => { + setPagination(prev => ({ ...prev, total: mockData.length })); + }, []); - const columns = [ - { - title: '设备名称', - dataIndex: 'deviceName', - key: 'deviceName', - width: 150, - }, - { - title: '设备类型', - dataIndex: 'deviceType', - key: 'deviceType', - width: 120, - }, - { - title: '安装位置', - dataIndex: 'location', - key: 'location', - width: 150, - }, - { - title: '运行状态', - dataIndex: 'status', - key: 'status', - width: 100, - render: (status) => ( - - ), - }, - { - title: '当前数值', - dataIndex: 'value', - key: 'value', - width: 100, - }, - { - title: '阈值设置', - dataIndex: 'threshold', - key: 'threshold', - width: 100, - }, - { - title: '最后更新', - dataIndex: 'lastUpdate', - key: 'lastUpdate', - width: 150, - }, - { - title: '操作', - key: 'action', - width: 250, - render: (_, record) => ( - - - - - - - ), - }, - ]; + // 根据分页获取当前页数据 + const getCurrentPageData = () => { + const { current, pageSize } = pagination; + const startIndex = (current - 1) * pageSize; + const endIndex = startIndex + pageSize; + return mockData.slice(startIndex, endIndex); + }; - return ( -
- } onClick={handleAdd}> - 新增设备 - - } - > -
- `第 ${range[0]}-${range[1]} 条/共 ${total} 条`, - onChange: (page, pageSize) => { - setPagination(prev => ({ - ...prev, - current: page, - pageSize: pageSize || prev.pageSize, - })); - }, - }} - /> - + // 表格选择变化 + const onSelectChange = (newSelectedRowKeys, newSelectedRows) => { + setSelectedRowKeys(newSelectedRowKeys); + setSelectedRows(newSelectedRows); + }; + + // 分页变化处理 + const handleTableChange = (pagination) => { + setPagination(prev => ({ + ...prev, + current: pagination.current, + pageSize: pagination.pageSize, + })); + }; - { - setModalVisible(false); - form.resetFields(); - }} - onOk={() => form.submit()} - width={600} - > -
- - - + // 导出功能 + const handleExport = () => { + console.log('导出数据'); + // 这里可以添加导出逻辑 + }; - - - + // 批量删除功能 + const handleBatchDelete = () => { + if (selectedRowKeys.length === 0) { + console.log('没有选中任何行'); + // 可以在这里添加提示用户选择行的逻辑 + return; + } + console.log('批量删除', selectedRowKeys); + // 这里可以添加批量删除逻辑 + }; + + return ( +
+
+
+
+
+
+ alarm0 +
+
+
总报警
+
1456
+
+
+ 未处理 6 +
+
+ 处理中 10 +
+
+
+
+
+
+ alarm1 +
+
+
一级报警
+
357
+
+
+ 未处理 6 +
+
+ 处理中 10 +
+
+
+
+
+
+ alarm2 +
+
+
二级报警
+
401
+
+
+ 未处理 6 +
+
+ 处理中 10 +
+
+
+
+
+
+ alarm3 +
+
+
三级报警
+
556
+
+
+ 未处理 6 +
+
+ 处理中 10 +
+
+
+
+
+
+
+
+
+
预警看板
+
+
+
检测对象
+ - +
+
+
+
+
+
+
+
实时数据采集
+
+
+ 总数: 1378 +
+
- - - +
+
+
储罐液化装置区
+
R值: 1765
+
编号:XXXXXXXX
+
+
+
+
+
+
三级
+
危险等级
+
+
+
+
+
+
+
+
储罐液化装置区
+
R值: 1765
+
编号:XXXXXXXX
+
+
+
+
+
+
一级
+
危险等级
+
+
+
+
+
+
+
+
储罐液化装置区
+
R值: 1765
+
编号:XXXXXXXX
+
+
+
+
+
+
二级
+
危险等级
+
+
+
+
+
+
+
+
储罐液化装置区
+
R值: 1765
+
编号:XXXXXXXX
+
+
+
+
+
+
三级
+
危险等级
+
+
+
+
+
+
+
+ {/* 表格 */} +
+ {/* 首行 左侧标题左对齐 右侧按钮右对齐 */} +
+
+
+
报警信息列表
+
+
+ + + +
+
- - - - - -
- ); + {/* 表格 5行10列 带页码 每页5条数据 */} +
+ + `共 ${total} 条`, + }} + scroll={{ x: 1200 }} + /> +
+
+
+ ); }; -export default OnlineMonitoring; +export default OnlineMonitoring; \ No newline at end of file diff --git a/src/pages/business_basic/module/OnlineMonitoring.less b/src/pages/business_basic/module/OnlineMonitoring.less index 680ed76..283ce83 100644 --- a/src/pages/business_basic/module/OnlineMonitoring.less +++ b/src/pages/business_basic/module/OnlineMonitoring.less @@ -1,157 +1,919 @@ -.online-monitoring { - padding: 20px; - - .ant-card { - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); - border-radius: 6px; - - .ant-card-head { - border-bottom: 1px solid #f0f0f0; - - .ant-card-head-title { - font-size: 16px; - font-weight: 600; - color: #262626; - } - } +.Ocontainer { + padding: 8px 6px 0px 6px; + height: 100%; + display: flex; + flex-direction: column; - .ant-card-body { - padding: 20px; - } - } - - .ant-table { - .ant-table-thead > tr > th { - background-color: #fafafa; - font-weight: 600; - color: #262626; - border-bottom: 1px solid #f0f0f0; - } + .OcontainerTop { + display: flex; - .ant-table-tbody > tr > td { - border-bottom: 1px solid #f0f0f0; - } + height: 50%; + margin-bottom: 5px; - .ant-table-tbody > tr:hover > td { - background-color: #f5f5f5; - } - } - - .ant-btn { - border-radius: 4px; - - &.ant-btn-primary { - background-color: #1890ff; - border-color: #1890ff; - - &:hover { - background-color: #40a9ff; - border-color: #40a9ff; - } - } + .OcontainerTopLeft { + width: 72%; + height: 100%; + // background-color: pink; + margin-right: 10px; + // display: flex; - &.ant-btn-link { - padding: 4px 8px; - height: auto; - - &:hover { - background-color: #f5f5f5; - } - } - } + .OcontainerTopLeftTop { + width: 100%; + height: 35%; + display: flex; + gap: 12px; - .ant-badge { - .ant-badge-status-dot { - width: 8px; - height: 8px; - } - - .ant-badge-status-text { - margin-left: 8px; - font-size: 12px; - } - } - - .ant-modal { - .ant-modal-header { - border-bottom: 1px solid #f0f0f0; - - .ant-modal-title { - font-size: 16px; - font-weight: 600; - color: #262626; - } - } + .alarmO { + flex: 1; + height: 100%; + background-color: #F4F7FF; + border: 1px solid #AED3FF; + border-bottom: 0px solid #AED3FF; + border-radius: 4px; + box-shadow: 0px 2px 31px 0px #5382FE33 inset; + display: flex; - .ant-modal-body { - padding: 24px; - } + .alarmOLeft { + width: 35%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + } - .ant-form-item-label > label { - font-weight: 500; - color: #262626; - } + .alarmORight { + flex: 1; + width: 35%; + height: 100%; + display: flex; + flex-direction: column; + margin-left: 2px; + gap: 18px; + + font-family: PingFang SC; + font-weight: 400; + font-style: Regular; + font-size: 12px; + line-height: 100%; + letter-spacing: 0%; + color: #333333; + + .alarmORightText1 { + margin-top: 15px; + } + + + .alarmORightText2 { + font-weight: 700; + font-size: 16px; + } + + .alarmORightText3 { + display: flex; + gap: 22px; + } + + } + + + + } + + .alarmTw { + flex: 1; + height: 100%; + background-color: #FFF5f4; + border: 1px solid #FFC5BC; + border-bottom: 0px solid #FFC5BC; + border-radius: 4px; + box-shadow: 0px 2px 31px 0px #FE5F4C33 inset; + display: flex; + + .alarmTwLeft { + width: 35%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + } + + .alarmTwRight { + flex: 1; + width: 35%; + height: 100%; + display: flex; + flex-direction: column; + margin-left: 2px; + gap: 18px; + + font-family: PingFang SC; + font-weight: 400; + font-style: Regular; + font-size: 12px; + line-height: 100%; + letter-spacing: 0%; + color: #333333; + + .alarmTwRightText1 { + margin-top: 15px; + } + + .alarmTwRightText2 { + font-weight: 700; + font-size: 16px; + } + + .alarmTwRightText3 { + display: flex; + gap: 22px; + } + } + } + + .alarmTh { + flex: 1; + height: 100%; + background-color: #FFF7F2; + border: 1px solid #FFD9B2; + border-bottom: 0px solid #FFD9B2; + border-radius: 4px; + box-shadow: 0px 2px 31px 0px #FD883C33 inset; + display: flex; + + .alarmThLeft { + width: 35%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + } + + .alarmThRight { + flex: 1; + width: 35%; + height: 100%; + display: flex; + flex-direction: column; + margin-left: 2px; + gap: 18px; + + font-family: PingFang SC; + font-weight: 400; + font-style: Regular; + font-size: 12px; + line-height: 100%; + letter-spacing: 0%; + color: #333333; + + .alarmThRightText1 { + margin-top: 15px; + } + + .alarmThRightText2 { + font-weight: 700; + font-size: 16px; + } + + .alarmThRightText3 { + display: flex; + gap: 22px; + } + } + } + + .alarmF { + flex: 1; + height: 100%; + background-color: #EFF9FF; + border: 1px solid #89E1FF; + border-bottom: 0px solid #89E1FF; + border-radius: 4px; + box-shadow: 0px 2px 31px 0px #22A4FD33 inset; + display: flex; + + .alarmFLeft { + width: 35%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + } + + .alarmFRight { + flex: 1; + width: 35%; + height: 100%; + display: flex; + flex-direction: column; + margin-left: 2px; + gap: 18px; + + font-family: PingFang SC; + font-weight: 400; + font-style: Regular; + font-size: 12px; + line-height: 100%; + letter-spacing: 0%; + color: #333333; + + .alarmFRightText1 { + margin-top: 15px; + } + + .alarmFRightText2 { + font-weight: 700; + font-size: 16px; + } + + .alarmFRightText3 { + display: flex; + gap: 22px; + } + } + } + } + + .OcontainerTopLeftBottom { + margin-top: 12px; + background-color: #fff; + width: 100%; + height: 60%; + + .OcontainerTopLeftBottomTitle { + display: flex; + justify-content: space-between; + align-items: center; + // padding: 8px 15px; + padding: 8px 15px 0px 15px; + + .titleLeft { + display: flex; + align-items: center; + gap: 8px; + font-family: PingFang SC; + font-weight: 500; + font-style: Medium; + font-size: 14px; + line-height: 100%; + letter-spacing: 0%; + + + .titleIcon { + width: 3px; + height: 16px; + background-color: #2E4CD4; + } + } + + .titleRight { + display: flex; + align-items: center; + gap: 8px; + + font-family: PingFang SC; + font-style: Medium; + font-size: 13px; + line-height: 100%; + letter-spacing: 0%; + + + .selectBox { + padding: 4px 8px; + border: 1px solid #d9d9d9; + border-radius: 4px; + background-color: #fff; + font-size: 12px; + color: #333; + outline: none; + + &:focus { + border-color: #2E4CD4; + } + } + } + } + + .OcontainerTopLeftBottomChart { + flex: 1; + width: 100%; + height: 75%; + } + } + } + + .OcontainerTopRight { + flex: 1; + height: calc(100% - 3.3px); + background-color: #fff; + background-image: url('@/assets/safe_majorHazard/online_monitoring/backTopRight.png'); + background-size: 100% auto; + display: flex; + flex-direction: column; + overflow-y: auto; + + .realTimeDataHeader { + display: flex; + justify-content: space-between; + align-items: center; + padding: 8px 15px; + margin-bottom: 10px; + + .titleLeft { + display: flex; + align-items: center; + gap: 8px; + font-family: PingFang SC; + font-weight: 500; + font-style: Medium; + font-size: 14px; + line-height: 100%; + letter-spacing: 0%; + + .titleIcon { + width: 3px; + height: 16px; + background-color: #2E4CD4; + } + } + + .totalCount { + font-family: PingFang SC; + font-weight: 400; + font-size: 13px; + color: #333333; + } + } + + .dataItem { + height: 23%; + flex-shrink: 0; + border: 1px solid #89E1FF; + border-radius: 2px; + margin: 0 15px; + margin-bottom: 6px; + display: flex; + align-items: center; + justify-content: center; + font-family: PingFang SC; + font-size: 14px; + // color: #666; + background-color: #EFF9FF; + + &:last-child { + // margin-bottom: 1px; + } + } + + .dataItem1 { + height: 25%; + flex-shrink: 0; + border: 1px solid #89E1FF; + border-radius: 4px; + margin: 0 15px; + margin-bottom: 6px; + display: flex; + align-items: center; + padding: 0px 15px; + background-color: #EFF9FF; + + .dataItemLeft { + width: 65%; + display: flex; + flex-direction: column; + gap: 8px; + + .areaName { + + font-family: PingFang SC; + font-weight: 400; + font-size: 13px; + color: #333333; + line-height: 2.2; + } + + .rValue { + font-family: PingFang SC; + font-weight: 400; + font-size: 14px; + color: #666666; + line-height: 0.2; + } + + .codeNumber { + font-family: PingFang SC; + font-weight: 400; + font-size: 12px; + color: #666666; + } + } + + .dataItemRight { + width: 35%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + + .circleContainer { + position: relative; + height: 80%; + aspect-ratio: 1; // 强制宽高比1:1 + + .outerCircle { + + width: 100%; + height: 100%; + background-color: rgba(51, 176, 253, 0.3); + border-radius: 50%; + display: flex; + justify-content: center; + align-items: center; + + .innerCircle { + width: 70%; + height: 70%; + background-color: rgba(4, 128, 251, 0.8); + border-radius: 50%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + + .levelText { + font-family: PingFang SC; + font-weight: 500; + font-size: 11px; + color: #FFFFFF; + line-height: 1.4; + margin-top: -4px; + } + + .riskText { + font-family: PingFang SC; + font-weight: 300; + font-size: 8px; + color: #FFFFFF; + line-height: 1; + } + } + } + } + } + } + + .dataItem2 { + height: 25%; + flex-shrink: 0; + border: 1px solid rgba(255, 197, 188, 1); + border-radius: 4px; + margin: 0 15px; + margin-bottom: 6px; + display: flex; + align-items: center; + padding: 0px 15px; + background-color: #fff5f4; + + .dataItemLeft { + width: 65%; + display: flex; + flex-direction: column; + gap: 8px; + + .areaName { + font-family: PingFang SC; + font-weight: 400; + font-size: 13px; + color: #333333; + line-height: 2.2; + } + + .rValue { + font-family: PingFang SC; + font-weight: 400; + font-size: 14px; + color: #666666; + line-height: 0.2; + } + + .codeNumber { + font-family: PingFang SC; + font-weight: 400; + font-size: 12px; + color: #666666; + } + } + + .dataItemRight { + width: 35%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + + .circleContainer { + position: relative; + height: 80%; + aspect-ratio: 1; + + .outerCircle { + width: 100%; + height: 100%; + background-color: rgba(254, 214, 209, 1); + border-radius: 50%; + display: flex; + justify-content: center; + align-items: center; + + .innerCircle { + width: 70%; + height: 70%; + background-color: rgba(253, 41, 14, 1); + border-radius: 50%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + + .levelText { + font-family: PingFang SC; + font-weight: 500; + font-size: 11px; + color: #FFFFFF; + line-height: 1.4; + margin-top: -4px; + } + + .riskText { + font-family: PingFang SC; + font-weight: 300; + font-size: 8px; + color: #FFFFFF; + line-height: 1; + } + } + } + } + } + } + + .dataItem3 { + height: 25%; + flex-shrink: 0; + border: 1px solid rgba(255, 217, 178, 1); + border-radius: 4px; + margin: 0 15px; + margin-bottom: 6px; + display: flex; + align-items: center; + padding: 0px 15px; + background-color: #fef6f1; + + .dataItemLeft { + width: 65%; + display: flex; + flex-direction: column; + gap: 8px; + + .areaName { + font-family: PingFang SC; + font-weight: 400; + font-size: 13px; + color: #333333; + line-height: 2.2; + } + + .rValue { + font-family: PingFang SC; + font-weight: 400; + font-size: 14px; + color: #666666; + line-height: 0.2; + } + + .codeNumber { + font-family: PingFang SC; + font-weight: 400; + font-size: 12px; + color: #666666; + } + } + + .dataItemRight { + width: 35%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + + .circleContainer { + position: relative; + height: 80%; + aspect-ratio: 1; + + .outerCircle { + width: 100%; + height: 100%; + background-color: rgba(255, 234, 218, 1); + border-radius: 50%; + display: flex; + justify-content: center; + align-items: center; + + .innerCircle { + width: 70%; + height: 70%; + background-color: rgba(252, 103, 18, 1); + border-radius: 50%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + + .levelText { + font-family: PingFang SC; + font-weight: 500; + font-size: 11px; + color: #FFFFFF; + line-height: 1.4; + margin-top: -4px; + } + + .riskText { + font-family: PingFang SC; + font-weight: 300; + font-size: 8px; + color: #FFFFFF; + line-height: 1; + } + } + } + } + } + } + + .dataItem4 { + height: 25%; + flex-shrink: 0; + border: 1px solid #89E1FF; + border-radius: 4px; + margin: 0 15px; + margin-bottom: 6px; + display: flex; + align-items: center; + padding: 0px 15px; + background-color: #EFF9FF; + + .dataItemLeft { + width: 65%; + display: flex; + flex-direction: column; + gap: 8px; + + .areaName { + font-family: PingFang SC; + font-weight: 400; + font-size: 13px; + color: #333333; + line-height: 2.2; + } + + .rValue { + font-family: PingFang SC; + font-weight: 400; + font-size: 14px; + color: #666666; + line-height: 0.2; + } + + .codeNumber { + font-family: PingFang SC; + font-weight: 400; + font-size: 12px; + color: #666666; + } + } + + .dataItemRight { + width: 35%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + + .circleContainer { + position: relative; + height: 80%; + aspect-ratio: 1; + + .outerCircle { + width: 100%; + height: 100%; + background-color: rgba(51, 176, 253, 0.3); + border-radius: 50%; + display: flex; + justify-content: center; + align-items: center; + + .innerCircle { + width: 70%; + height: 70%; + background-color: rgba(4, 128, 251, 0.8); + border-radius: 50%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + + .levelText { + font-family: PingFang SC; + font-weight: 500; + font-size: 11px; + color: #FFFFFF; + line-height: 1.4; + margin-top: -4px; + } + + .riskText { + font-family: PingFang SC; + font-weight: 300; + font-size: 8px; + color: #FFFFFF; + line-height: 1; + } + } + } + } + } + } + } - .ant-input, - .ant-select-selector { - border-radius: 4px; - border: 1px solid #d9d9d9; - - &:hover { - border-color: #40a9ff; - } - - &:focus, - &.ant-select-focused .ant-select-selector { - border-color: #40a9ff; - box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); - } - } - } - - .ant-pagination { - margin-top: 16px; - text-align: right; - - .ant-pagination-total-text { - color: #8c8c8c; - margin-right: 16px; - } - } - - // 状态指示器样式 - .status-indicator { - display: inline-flex; - align-items: center; - gap: 4px; - - &.online { - color: #52c41a; - } - - &.offline { - color: #ff4d4f; - } - } - - // 数值显示样式 - .value-display { - font-weight: 500; - - &.normal { - color: #52c41a; - } - - &.warning { - color: #faad14; - } - - &.danger { - color: #ff4d4f; } - - &.unknown { - color: #8c8c8c; + + .OcontainerBottom { + background-color: #fff; + flex: 1; + padding: 8px 15px 5px 15px; + display: flex; + flex-direction: column; + + .tableHeader { + display: flex; + justify-content: space-between; + align-items: center; + // margin-bottom: 15px; + padding-bottom: 5px; + // border-bottom: 1px solid #f0f0f0; + + .tableTitle { + display: flex; + align-items: center; + gap: 8px; + font-family: PingFang SC; + font-weight: 500; + font-size: 14px; + color: #333333; + + .titleIcon { + width: 3px; + height: 16px; + background-color: #2E4CD4; + } + } + + .tableActions { + display: flex; + gap: 8px; + + // 自定义按钮样式 + :global(.ant-btn) { + background-color: #ffffff !important; + border-color: #DFE4F6 !important; + color: #333333 !important; + box-shadow: none !important; + + &:hover { + background-color: #f5f5f5 !important; + border-color: #DFE4F6 !important; + color: #333333 !important; + box-shadow: none !important; + } + + &:focus { + background-color: #ffffff !important; + border-color: #DFE4F6 !important; + color: #333333 !important; + box-shadow: none !important; + } + + &:active { + background-color: #e6e6e6 !important; + border-color: #DFE4F6 !important; + color: #333333 !important; + box-shadow: none !important; + } + + // 主要按钮样式 + &.ant-btn-primary { + background-color: #ffffff !important; + border-color: #DFE4F6 !important; + color: #333333 !important; + box-shadow: none !important; + + &:hover { + background-color: #f5f5f5 !important; + border-color: #DFE4F6 !important; + color: #333333 !important; + box-shadow: none !important; + } + + &:focus { + background-color: #ffffff !important; + border-color: #DFE4F6 !important; + color: #333333 !important; + box-shadow: none !important; + } + + &:active { + background-color: #e6e6e6 !important; + border-color: #DFE4F6 !important; + color: #333333 !important; + box-shadow: none !important; + } + } + + // 危险按钮样式 + &.ant-btn-dangerous { + background-color: #ffffff !important; + border-color: #DFE4F6 !important; + color: #333333 !important; + box-shadow: none !important; + + &:hover { + background-color: #f5f5f5 !important; + border-color: #DFE4F6 !important; + color: #333333 !important; + box-shadow: none !important; + } + + &:focus { + background-color: #ffffff !important; + border-color: #DFE4F6 !important; + color: #333333 !important; + box-shadow: none !important; + } + + &:active { + background-color: #e6e6e6 !important; + border-color: #DFE4F6 !important; + color: #333333 !important; + box-shadow: none !important; + } + } + + // 禁用状态 + &:disabled { + background-color: #f5f5f5 !important; + border-color: #d9d9d9 !important; + color: #bfbfbf !important; + box-shadow: none !important; + } + } + } + } + + .tableContainer { + flex: 1; + overflow: hidden; + + :global(.ant-table) { + font-size: 12px; + } + + :global(.ant-table-thead > tr > th) { + background-color: #f5f5fa; + font-weight: 500; + font-size: 14px; + color: #333333; + border-bottom: 1px solid #f0f0f0; + padding: 8px 12px; + text-align: center; + } + + :global(.ant-table-tbody > tr > td) { + padding: 8px 12px; + border-bottom: 1px solid #f0f0f0; + text-align: center; + } + + :global(.ant-table-tbody > tr:hover > td) { + background-color: #f5f5f5; + } + + :global(.ant-pagination) { + margin-top: 16px; + text-align: right; + } + } } - } -} + +} \ No newline at end of file diff --git a/src/pages/business_basic/module/ResponsibilityImplementation.js b/src/pages/business_basic/module/ResponsibilityImplementation.js index e8daf90..f9235eb 100644 --- a/src/pages/business_basic/module/ResponsibilityImplementation.js +++ b/src/pages/business_basic/module/ResponsibilityImplementation.js @@ -1,13 +1,26 @@ import React from 'react'; -import { Card, Result, Timeline,Statistic, Table,Row, Input,Button,Col, Select} from 'antd'; +import { Card, Statistic, Table,Row, Input,Button,Col, Select} from 'antd'; +import { PhoneOutlined, IdcardOutlined } from '@ant-design/icons'; import StandardTable from '@/components/StandardTable'; import styles from './ResponsibilityImplementation.less'; - +import upload from '@/assets/business_basic/upload.png'; +import download from '@/assets/business_basic/download.png'; +import fire_fighting1 from '@/assets/business_basic/fire_fighting1.png'; +import fire_fighting2 from '@/assets/business_basic/fire_fighting2.png'; +import fire_fighting3 from '@/assets/business_basic/fire_fighting3.png'; +import frameIcon from '@/assets/business_basic/Frame.png'; +import background1 from '@/assets/business_basic/background1.png'; const ResponsibilityImplementation = () => { + // 搜索处理函数 + const onSearch = (value) => { + console.log('搜索内容:', value); + // 这里可以添加实际的搜索逻辑 + }; + const columns = [ { title:"编号", @@ -108,7 +121,7 @@ const ResponsibilityImplementation = () => {
{/* 警告提示框 */}
- 警告 + 警告 有5个消防设备需要维护,3个资质证书即将到期,请及时处理。 @@ -125,11 +138,11 @@ const ResponsibilityImplementation = () => {
@@ -138,52 +151,98 @@ const ResponsibilityImplementation = () => { {/* 第二行:图片占位 */}
-
🏢
-
组织架构图
+ 消防1 +
+ 消防2 + 消防3 +
+
- {/* 第一块:标题 + 下拉选择框 + 导出按钮 */} + {/* 第一行:标题 + 搜索栏 + 下拉选择框 */}
-
履职时间轴
+
成员信息管理
- +
- {/* 第二块:图片内容 */} + {/* 第二行:三个小块 */}
-
-
📊
-
数据图表
+
+
+
+
+ {/* 第一个块:姓名和单位 */} +
+
张明
+
东义区消防队
+
+ + {/* 第二个块:电话 */} +
+ + 132****3847 +
+ + {/* 第三个块:身份证 */} +
+ + 1304************10 +
+ + {/* 第四个块:职位标签 */} +
+
+
队长
+
消防工程师
+
+
+ + {/* 第五个块:证书状态 */} +
+
+
消防工程师
+
证书3天后到期
+
+
+ + {/* 第六个块:操作按钮 */} +
+
+ + +
+
+
+
+
+
+
待开发
+
+
+
待开发
+
diff --git a/src/pages/business_basic/module/ResponsibilityImplementation.less b/src/pages/business_basic/module/ResponsibilityImplementation.less index 91ffca9..c6d7b35 100644 --- a/src/pages/business_basic/module/ResponsibilityImplementation.less +++ b/src/pages/business_basic/module/ResponsibilityImplementation.less @@ -34,12 +34,12 @@ margin-bottom: 10px; gap: 10px; - .containerOneLeft{ + .containerOneLeft { background-color: white; width: calc(50% - 5px); display: flex; flex-direction: column; - padding: 15px; + padding: 5px 15px; border: 1px solid #f0f0f0; border-radius: 4px; @@ -47,7 +47,7 @@ display: flex; justify-content: space-between; align-items: center; - margin-bottom: 15px; + // margin-bottom: 15px; .titleLeft { display: flex; @@ -73,12 +73,13 @@ display: flex; align-items: center; gap: 4px; + height: 28px; border: 1px solid #DFE4F6; border-radius: 4px; color: #2E4CD4; font-weight: 500; font-size: 12px; - padding: 4px 8px; + padding: 0px 8px; background: transparent; cursor: pointer; transition: all 0.2s; @@ -89,7 +90,8 @@ } .btnIcon { - font-size: 12px; + width: 12px; + height: 12px; } } } @@ -100,36 +102,58 @@ display: flex; align-items: center; justify-content: center; - background-color: #fafafa; - border: 1px dashed #d9d9d9; - border-radius: 4px; .imagePlaceholder { display: flex; flex-direction: column; align-items: center; - gap: 8px; - color: #999999; - .imageIcon { - font-size: 32px; - opacity: 0.6; + .imageIcon1 { + transform: scale(0.9) translateY(-5px); // 稍微向上移动 + object-fit: contain; + } + + + .imageRow { + display: flex; + justify-content: space-between; + // width: 100%; + margin-bottom: 10px; + // padding-bottom: 20px; + // gap: 12px; + + .imageIcon2 { + height: 55%; + transform: scale(0.7) translateY(-25%) translateX(20%); // 稍微向上移动 + object-fit: contain; + background-color: #EFF5FE; + // padding-bottom: 20px; + } + + .imageIcon3 { + height: 40%; + transform: scale(0.65) translateY(-32%) translateX(4%); // 向上移动10px + object-fit: contain; + padding-bottom: 20px; + // background-color: #EFF5FE; + + } } .imageText { - font-size: 14px; + font-size: 12px; font-weight: 400; } } } } - .containerOneRight{ + .containerOneRight { background-color: white; width: calc(50% - 5px); display: flex; flex-direction: column; - padding: 15px; + padding: 5px 15px; border: 1px solid #f0f0f0; border-radius: 4px; @@ -137,7 +161,7 @@ display: flex; justify-content: space-between; align-items: center; - margin-bottom: 15px; + margin-bottom: 10px; .rightTopLeft { display: flex; @@ -161,18 +185,56 @@ } .rightTopRight { - .exportBtn { - background-color: #2E4CD4 !important; - border-color: #2E4CD4 !important; - color: #fff !important; - font-size: 14px !important; - font-weight: 500 !important; - height: 32px; - padding: 0 16px; + .searchGroup { + display: flex; + gap: 8px; + align-items: center; - &:hover { - background-color: #1e3bb8 !important; - border-color: #1e3bb8 !important; + .searchInput { + width: 200px; + height: 32px; + + :global(.ant-input) { + height: 32px; + border-radius: 4px; + border: 1px solid #d9d9d9; + font-size: 14px; + + &:focus { + border-color: #2E4CD4; + box-shadow: 0 0 0 2px rgba(46, 76, 212, 0.2); + } + } + + :global(.ant-input-suffix) { + color: #999999; + font-size: 14px; + } + } + + .organizationSelect { + width: 120px; + height: 32px; + + :global(.ant-select-selector) { + height: 32px !important; + border-radius: 4px !important; + border: 1px solid #d9d9d9 !important; + + &:hover { + border-color: #2E4CD4 !important; + } + + &:focus { + border-color: #2E4CD4 !important; + box-shadow: 0 0 0 2px rgba(46, 76, 212, 0.2) !important; + } + } + + :global(.ant-select-selection-item) { + line-height: 30px !important; + font-size: 14px !important; + } } } } @@ -180,42 +242,191 @@ .rightBottomSection { flex: 1; - display: flex; - align-items: center; - justify-content: center; + padding: 5px 15px; + width: 100%; + height: 100%; - .imagePlaceholder { + .threeBlocksContainer { display: flex; - flex-direction: column; - align-items: center; - justify-content: center; + gap: 20px; width: 100%; height: 100%; - background-color: #f5f5f5; - border: 2px dashed #d9d9d9; - border-radius: 4px; - .imageIcon { - font-size: 48px; - margin-bottom: 10px; - } + .blockItem { + width: 100%; + height: 100%; + flex: 1; + display: flex; + justify-content: center; + background: url('@/assets/business_basic/background1.png') no-repeat center center; + background-size: 100% auto; - .imageText { - font-size: 14px; - color: #999999; + .blockContent { + // background-color: pink; + font-size: 12px; + color: #666666; + font-weight: 400; + width: 100%; + height: 100%; + } + + // 新的6个横向块样式 + .backgroundContainer { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + gap: 8px; + .infoBlock { + width: 100%; + display: flex; + justify-content: flex-start; + white-space: nowrap; + .nameText { + font-size: 12px; + font-weight: 500; + color: #333333; + margin-left: 10px; + margin-right: 10px; + margin-top: 15px; + } + + + .unitText { + font-size: 10px; + font-weight: 400; + color: #666666; + margin-top: 18px; + } + + .infoIcon { + font-size: 10px; + color: #666666; + margin-left: 10px; + margin-right: 10px; + } + + .infoText { + font-size: 10px; + font-weight: 400; + color: #666666; + + } + + } + + .tagContainer { + display: flex; + gap: 8px; + align-items: center; + } + + .tagBlue1 { + background-color: #D5E5FF; + color: #1269FF; + font-size: 10px; + font-weight: 400; + padding: 4px 8px; + border-radius: 4px; + white-space: nowrap; + margin-left: 10px; + } + .tagBlue2 { + background-color: #D5E5FF; + color: #1269FF; + font-size: 10px; + font-weight: 400; + padding: 4px 8px; + border-radius: 4px; + white-space: nowrap; + + } + .tagBlue3 { + background-color: #D5E5FF; + color: #1269FF; + font-size: 10px; + font-weight: 400; + padding: 4px 8px; + border-radius: 4px; + white-space: nowrap; + margin-left: 10px; + + } + + .tagYellow { + background-color: #FFF8E2; + color: #FFC403; + font-size: 10px; + font-weight: 400; + padding: 4px 8px; + border-radius: 4px; + white-space: nowrap; + } + + .actionBlock { + width: 100%; + height: 50%; + background-color: #BDD6FDCC; + display: flex; + align-items: center; + justify-content: center; + } + + .buttonContainer { + display: flex; + gap: 15px; + align-items: center; + justify-content: center; + width: 100%; + + .editBtn { + height: 80%; + background-color: #1269FF; + color: #fff; + font-size: 10px; + font-weight: 400; + border: none; + border-radius: 2px; + cursor: pointer; + padding: 2px 15px; + + &:hover { + background-color: #0f5ae0; + } + } + + .deleteBtn { + height: 80%; + background-color: #FF5F60; + color: #fff; + font-size: 10px; + font-weight: 400; + border: none; + border-radius: 2px; + cursor: pointer; + padding: 2px 15px; + + &:hover { + background-color: #ff4a4b; + } + } + } + + + } } } } } } - - .containerTwo{ + + .containerTwo { flex: 1; background-color: white; display: flex; flex-direction: column; - padding: 15px; + padding: 5px 15px; border: 1px solid #f0f0f0; border-radius: 4px; @@ -266,7 +477,7 @@ gap: 8px; :global(.ant-btn) { - height: 32px; + height: 28px; padding: 0 16px; border-radius: 4px; font-size: 14px; @@ -324,7 +535,8 @@ } -.rightTopSelect{ +.rightTopSelect { + // 下拉框本身的样式 :global(.ant-select-selector) { background-color: #f8f9fa !important; @@ -332,17 +544,17 @@ border-radius: 6px !important; height: 32px !important; min-height: 32px !important; - + &:hover { border-color: #2E4CD4 !important; } - + &:focus { border-color: #2E4CD4 !important; box-shadow: 0 0 0 2px rgba(46, 76, 212, 0.2) !important; } } - + // 下拉框内的文字样式 :global(.ant-select-selection-item) { color: #333333 !important; @@ -350,13 +562,13 @@ font-weight: 500 !important; line-height: 30px !important; } - + // 下拉箭头样式 :global(.ant-select-arrow) { color: #666666 !important; font-size: 12px !important; } - + // 下拉菜单容器样式 :global(.ant-select-dropdown) { background-color: #ffffff !important; @@ -365,7 +577,7 @@ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important; padding: 4px 0 !important; } - + // 下拉选项样式 :global(.ant-select-item) { color: #333333 !important; @@ -373,19 +585,19 @@ padding: 8px 12px !important; border-radius: 4px !important; margin: 2px 8px !important; - + &:hover { background-color: #f0f2ff !important; color: #2E4CD4 !important; } - + &.ant-select-item-option-selected { background-color: #e6f7ff !important; color: #2E4CD4 !important; font-weight: 600 !important; } } - + // 选中状态的样式 :global(.ant-select-focused .ant-select-selector) { border-color: #2E4CD4 !important; @@ -399,12 +611,12 @@ align-items: center; gap: 8px; padding: 4px 0; - + .optionIcon { font-size: 16px; color: #2E4CD4; } - + .optionText { font-size: 14px; color: #333333; diff --git a/src/pages/business_basic/module/RiskAssessment.js b/src/pages/business_basic/module/RiskAssessment.js index 1895bfa..ad4430f 100644 --- a/src/pages/business_basic/module/RiskAssessment.js +++ b/src/pages/business_basic/module/RiskAssessment.js @@ -1,425 +1,720 @@ -import React, { useState, useEffect } from 'react'; -import { Card, Table, Button, Modal, Form, Input, Select, message, Space, Tag, Rate, Progress } from 'antd'; -import { PlusOutlined, EditOutlined, DeleteOutlined, EyeOutlined, ExclamationCircleOutlined } from '@ant-design/icons'; -import './RiskAssessment.less'; -const { Option } = Select; +import React, { useEffect, useRef, useState } from 'react'; +import { Card, Result, Select, Button } from 'antd'; +import { CheckCircleOutlined } from '@ant-design/icons'; +import * as echarts from 'echarts'; +import StandardTable from '@/components/StandardTable'; +import styles from './RiskAssessment.less'; +// import './RiskAssessment.less'; -const RiskAssessment = () => { - const [form] = Form.useForm(); - const [dataSource, setDataSource] = useState([]); - const [loading, setLoading] = useState(false); - const [modalVisible, setModalVisible] = useState(false); - const [editingRecord, setEditingRecord] = useState(null); - const [pagination, setPagination] = useState({ - current: 1, - pageSize: 10, - total: 0, - }); +import img1 from '@/assets/safe_majorHazard/online_monitoring/img1.png'; +import img2 from '@/assets/safe_majorHazard/online_monitoring/img2.png'; +import img3 from '@/assets/safe_majorHazard/online_monitoring/img3.png'; +import map1 from '@/assets/safe_majorHazard/online_monitoring/map.png'; +import risk1 from '@/assets/safe_majorHazard/online_monitoring/risk1.png'; +import risk2 from '@/assets/safe_majorHazard/online_monitoring/risk2.png'; +import risk3 from '@/assets/safe_majorHazard/online_monitoring/risk3.png'; - // 模拟数据 - const mockData = [ - { - id: 1, - riskName: '化学品泄漏风险', - riskType: '环境风险', - riskLevel: '高', - probability: 4, - impact: 5, - riskScore: 20, - assessor: '张三', - assessDate: '2024-01-15', - status: '待处理', - description: '生产过程中化学品可能发生泄漏,造成环境污染', - controlMeasures: '加强设备维护,安装泄漏检测装置', - }, - { - id: 2, - riskName: '设备故障风险', - riskType: '设备风险', - riskLevel: '中', - probability: 3, - impact: 3, - riskScore: 9, - assessor: '李四', - assessDate: '2024-01-10', - status: '已处理', - description: '关键设备可能发生故障,影响生产安全', - controlMeasures: '定期维护保养,建立备件库存', - }, - { - id: 3, - riskName: '人员操作风险', - riskType: '人员风险', - riskLevel: '低', - probability: 2, - impact: 2, - riskScore: 4, - assessor: '王五', - assessDate: '2024-01-08', - status: '监控中', - description: '操作人员误操作可能导致安全事故', - controlMeasures: '加强培训,完善操作规程', - }, - ]; - useEffect(() => { - fetchData(); - }, [pagination.current, pagination.pageSize]); +const RiskAssessment = () => { + const chartRef = useRef(null); + const [selectedRowKeys, setSelectedRowKeys] = useState([]); + const [selectedRows, setSelectedRows] = useState([]); + const [loading, setLoading] = useState(false); + const [dataSource, setDataSource] = useState([]); + const [pagination, setPagination] = useState({ + current: 1, + pageSize: 5, + total: 0, + }); - const fetchData = async () => { - setLoading(true); - try { - // 模拟API调用 - setTimeout(() => { - setDataSource(mockData); - setPagination(prev => ({ ...prev, total: mockData.length })); - setLoading(false); - }, 500); - } catch (error) { - message.error('获取数据失败'); - setLoading(false); - } - }; + useEffect(() => { + if (chartRef.current) { + const chart = echarts.init(chartRef.current); + + // 强制初始化时调整大小 + setTimeout(() => { + if (chart && !chart.isDisposed()) { + chart.resize(); + } + }, 100); - const handleAdd = () => { - setEditingRecord(null); - form.resetFields(); - setModalVisible(true); - }; + const option = { + color: ['#FF2526', '#FF8800', '#FFC403', '#65E5F9'], - const handleEdit = (record) => { - setEditingRecord(record); - form.setFieldsValue(record); - setModalVisible(true); - }; + legend: { + data: ['重大风险', '较高风险', '一般风险', '低风险'], + top: "-3px", + left: "center", + itemGap: 40, // 图例间距 + textStyle: { + fontSize: 10 + } + }, + grid: { + left: '2%', + right: '4%', + bottom: '2%', + top: '12%', + containLabel: true + }, + xAxis: { + type: 'category', + boundaryGap: false, + data: ['9/22', '9/23', '9/24', '9/25', '9/26', '9/27', '9/28'], + axisLabel: { + fontSize: 10 + } + }, + yAxis: { + type: 'value', + min: 0, + max: 30, + axisLabel: { + formatter: '{value}', + fontSize: 10 + } + }, + series: [ + { + name: '重大风险', + type: 'line', + smooth: true, + lineStyle: { + width: 1.5, + color: '#FF2526' + }, + areaStyle: { + color: { + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [ + { offset: 0, color: 'rgba(38, 12, 12, 0.4)' }, + { offset: 1, color: 'rgba(255, 37, 38, 0)' } + ] + } + }, + symbol: 'none', + data: [8, 15, 12, 22, 18, 26, 20] + }, + { + name: '较高风险', + type: 'line', + smooth: true, + lineStyle: { + width: 1.5, + color: '#FF8800' + }, + areaStyle: { + color: { + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [ + { offset: 0, color: 'rgba(255, 136, 0, 0.4)' }, + { offset: 1, color: 'rgba(255, 136, 0, 0)' } + ] + } + }, + symbol: 'none', + data: [5, 8, 6, 12, 10, 15, 13] + }, + { + name: '一般风险', + type: 'line', + smooth: true, + lineStyle: { + width: 1.5, + color: '#FFC403' + }, + areaStyle: { + color: { + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [ + { offset: 0, color: 'rgba(255, 196, 3, 0.4)' }, + { offset: 1, color: 'rgba(255, 196, 3, 0)' } + ] + } + }, + symbol: 'none', + data: [12, 18, 15, 25, 22, 24, 26] + }, + { + name: '低风险', + type: 'line', + smooth: true, + lineStyle: { + width: 1.5, + color: '#65E5F9' + }, + areaStyle: { + color: { + type: 'linear', + x: 0, + y: 0, + x2: 0, + y2: 1, + colorStops: [ + { offset: 0, color: 'rgba(101, 229, 249, 0.4)' }, + { offset: 1, color: 'rgba(101, 229, 249, 0)' } + ] + } + }, + symbol: 'none', + data: [3, 5, 7, 9, 6, 8, 4] + } + ] + }; - const handleDelete = (record) => { - Modal.confirm({ - title: '确认删除', - content: `确定要删除风险评估"${record.riskName}"吗?`, - onOk: () => { - setDataSource(dataSource.filter(item => item.id !== record.id)); - message.success('删除成功'); - }, - }); - }; + chart.setOption(option); - const handleView = (record) => { - Modal.info({ - title: '查看风险评估详情', - content: ( -
-

风险名称:{record.riskName}

-

风险类型:{record.riskType}

-

风险等级: - - {record.riskLevel} - -

-

发生概率: - - ({record.probability}/5) -

-

影响程度: - - ({record.impact}/5) -

-

风险评分:{record.riskScore}

-

评估人:{record.assessor}

-

评估日期:{record.assessDate}

-

处理状态: - - {record.status} - -

-

风险描述:{record.description}

-

控制措施:{record.controlMeasures}

-
- ), - width: 700, - }); - }; + // 响应式调整 - 使用多种方式监听容器尺寸变化 + let resizeTimer = null; + const handleResize = () => { + // 防抖处理,避免频繁调用resize + if (resizeTimer) { + clearTimeout(resizeTimer); + } + resizeTimer = setTimeout(() => { + if (chart && !chart.isDisposed()) { + chart.resize(); + } + }, 50); // 减少延迟时间 + }; + + // 监听窗口大小变化 + window.addEventListener('resize', handleResize); + + // 监听容器尺寸变化(解决菜单栏伸缩时的自适应问题) + let resizeObserver = null; + if (window.ResizeObserver) { + resizeObserver = new ResizeObserver((entries) => { + for (let entry of entries) { + // 使用requestAnimationFrame确保在下一帧执行 + requestAnimationFrame(() => { + handleResize(); + }); + } + }); + resizeObserver.observe(chartRef.current); + } - const handleSubmit = async (values) => { - try { - const riskScore = values.probability * values.impact; - const riskLevel = riskScore >= 16 ? '高' : riskScore >= 9 ? '中' : '低'; - - const formData = { - ...values, - riskScore, - riskLevel, - }; + // 额外监听父容器的尺寸变化 + const parentContainer = chartRef.current?.parentElement; + let parentObserver = null; + if (parentContainer && window.ResizeObserver) { + parentObserver = new ResizeObserver((entries) => { + for (let entry of entries) { + requestAnimationFrame(() => { + handleResize(); + }); + } + }); + parentObserver.observe(parentContainer); + } - if (editingRecord) { - // 编辑 - setDataSource(dataSource.map(item => - item.id === editingRecord.id ? { ...item, ...formData } : item - )); - message.success('编辑成功'); - } else { - // 新增 - const newRecord = { - id: Date.now(), - ...formData, - assessor: '当前用户', - assessDate: new Date().toISOString().split('T')[0], - status: '待处理', - }; - setDataSource([...dataSource, newRecord]); - message.success('添加成功'); - } - setModalVisible(false); - form.resetFields(); - } catch (error) { - message.error('操作失败'); - } - }; + // 使用MutationObserver监听DOM结构变化(菜单展开收起时) + const mutationObserver = new MutationObserver((mutations) => { + mutations.forEach((mutation) => { + if (mutation.type === 'attributes' && + (mutation.attributeName === 'class' || mutation.attributeName === 'style')) { + // 延迟执行,确保DOM更新完成 + setTimeout(() => { + handleResize(); + }, 200); + } + }); + }); - const getRiskLevelColor = (level) => { - switch (level) { - case '高': return 'red'; - case '中': return 'orange'; - case '低': return 'green'; - default: return 'default'; - } - }; + // 监听整个页面的class和style变化 + mutationObserver.observe(document.body, { + attributes: true, + attributeFilter: ['class', 'style'], + subtree: true + }); - const getStatusColor = (status) => { - switch (status) { - case '已处理': return 'green'; - case '待处理': return 'red'; - case '监控中': return 'blue'; - default: return 'default'; - } - }; + return () => { + window.removeEventListener('resize', handleResize); + if (resizeObserver) { + resizeObserver.disconnect(); + } + if (parentObserver) { + parentObserver.disconnect(); + } + if (mutationObserver) { + mutationObserver.disconnect(); + } + if (resizeTimer) { + clearTimeout(resizeTimer); + } + if (chart && !chart.isDisposed()) { + chart.dispose(); + } + }; + } + }, []); - const columns = [ - { - title: '风险名称', - dataIndex: 'riskName', - key: 'riskName', - width: 150, - }, - { - title: '风险类型', - dataIndex: 'riskType', - key: 'riskType', - width: 120, - }, - { - title: '风险等级', - dataIndex: 'riskLevel', - key: 'riskLevel', - width: 100, - render: (level) => ( - - {level} - - ), - }, - { - title: '风险评分', - dataIndex: 'riskScore', - key: 'riskScore', - width: 100, - render: (score) => ( -
- = 16 ? 'exception' : score >= 9 ? 'active' : 'success'} - showInfo={false} - /> - {score} -
- ), - }, - { - title: '发生概率', - dataIndex: 'probability', - key: 'probability', - width: 120, - render: (probability) => ( -
- - ({probability}/5) -
- ), - }, - { - title: '影响程度', - dataIndex: 'impact', - key: 'impact', - width: 120, - render: (impact) => ( -
- - ({impact}/5) -
- ), - }, - { - title: '处理状态', - dataIndex: 'status', - key: 'status', - width: 100, - render: (status) => ( - - {status} - - ), - }, - { - title: '评估人', - dataIndex: 'assessor', - key: 'assessor', - width: 100, - }, - { - title: '评估日期', - dataIndex: 'assessDate', - key: 'assessDate', - width: 120, - }, - { - title: '操作', - key: 'action', - width: 200, - render: (_, record) => ( - - - - - - ), - }, - ]; + // 表格列定义 + const columns = [ + { + title: '编号', + dataIndex: 'id', + key: 'id', + width: 80, + render: (text, record, index) => { + const page = pagination.current || 1; + const pageSize = pagination.pageSize || 5; + const number = (page - 1) * pageSize + index + 1; + return `0${number}`.slice(-2); + } + }, + { + title: '设备编号', + dataIndex: 'deviceId', + key: 'deviceId', + width: 120, + }, + { + title: '风险等级', + dataIndex: 'riskLevel', + key: 'riskLevel', + width: 100, + render: (text) => { + const colorMap = { + '高': '#FF4D4F', + '中': '#FAAD14', + '低': '#52C41A' + }; + return {text}; + } + }, + { + title: '预警时间', + dataIndex: 'warningTime', + key: 'warningTime', + width: 150, + }, + { + title: '主要原因', + dataIndex: 'mainReason', + key: 'mainReason', + width: 200, + }, + { + title: '处理状态', + dataIndex: 'status', + key: 'status', + width: 100, + render: (text) => { + const statusMap = { + '未处理': { color: '#FF4D4F', bg: '#FFF2F0' }, + '处理中': { color: '#FAAD14', bg: '#FFFBE6' }, + '已处理': { color: '#52C41A', bg: '#F6FFED' } + }; + const status = statusMap[text] || { color: '#333', bg: '#F5F5F5' }; + return ( + + {text} + + ); + } + }, + { + title: '操作', + key: 'action', + width: 120, + render: (_, record) => ( +
+ + +
+ ), + }, + ]; - return ( -
- } onClick={handleAdd}> - 新增评估 - - } - > -
- `第 ${range[0]}-${range[1]} 条/共 ${total} 条`, - onChange: (page, pageSize) => { - setPagination(prev => ({ - ...prev, - current: page, - pageSize: pageSize || prev.pageSize, - })); - }, - }} - /> - + // 模拟数据 + const mockData = [ + { + key: '1', + id: '001', + deviceId: 'DEV-001', + riskLevel: '高', + warningTime: '2024-01-15 08:30:25', + mainReason: '设备温度异常升高', + status: '未处理', + }, + { + key: '2', + id: '002', + deviceId: 'DEV-002', + riskLevel: '中', + warningTime: '2024-01-15 09:15:10', + mainReason: '压力波动超出正常范围', + status: '处理中', + }, + { + key: '3', + id: '003', + deviceId: 'DEV-003', + riskLevel: '高', + warningTime: '2024-01-15 10:45:30', + mainReason: '液位传感器故障', + status: '已处理', + }, + { + key: '4', + id: '004', + deviceId: 'DEV-004', + riskLevel: '高', + warningTime: '2024-01-15 11:20:45', + mainReason: '检测到气体泄漏', + status: '未处理', + }, + { + key: '5', + id: '005', + deviceId: 'DEV-005', + riskLevel: '低', + warningTime: '2024-01-15 12:10:20', + mainReason: '设备振动异常', + status: '已处理', + }, + { + key: '6', + id: '006', + deviceId: 'DEV-006', + riskLevel: '中', + warningTime: '2024-01-15 13:25:15', + mainReason: '流量传感器读数异常', + status: '未处理', + }, + { + key: '7', + id: '007', + deviceId: 'DEV-007', + riskLevel: '高', + warningTime: '2024-01-15 14:10:30', + mainReason: '储罐压力超限', + status: '处理中', + }, + { + key: '8', + id: '008', + deviceId: 'DEV-008', + riskLevel: '中', + warningTime: '2024-01-15 15:45:20', + mainReason: '管道温度异常', + status: '已处理', + }, + { + key: '9', + id: '009', + deviceId: 'DEV-009', + riskLevel: '高', + warningTime: '2024-01-15 16:30:45', + mainReason: '阀门控制系统故障', + status: '未处理', + }, + { + key: '10', + id: '010', + deviceId: 'DEV-010', + riskLevel: '低', + warningTime: '2024-01-15 17:15:10', + mainReason: '轻微泄漏检测', + status: '已处理', + }, + { + key: '11', + id: '011', + deviceId: 'DEV-011', + riskLevel: '高', + warningTime: '2024-01-15 18:20:35', + mainReason: '安全阀异常开启', + status: '处理中', + }, + { + key: '12', + id: '012', + deviceId: 'DEV-012', + riskLevel: '中', + warningTime: '2024-01-15 19:05:50', + mainReason: '液位计读数不稳定', + status: '未处理', + }, + ]; + + // 初始化数据 + useEffect(() => { + setPagination(prev => ({ ...prev, total: mockData.length })); + }, []); + + // 根据分页获取当前页数据 + const getCurrentPageData = () => { + const { current, pageSize } = pagination; + const startIndex = (current - 1) * pageSize; + const endIndex = startIndex + pageSize; + return mockData.slice(startIndex, endIndex); + }; + + // 表格选择变化 + const onSelectChange = (newSelectedRowKeys, newSelectedRows) => { + setSelectedRowKeys(newSelectedRowKeys); + setSelectedRows(newSelectedRows); + }; + + // 分页变化处理 + const handleTableChange = (pagination) => { + setPagination(prev => ({ + ...prev, + current: pagination.current, + pageSize: pagination.pageSize, + })); + }; + + return ( +
+ {/* 第一个div - 高度20% */} +
+
+
+ {/* 块1 */} +
+
+
总危险源数量
+
65
+
+ + 较昨日 +2 +
+
+
+ 总危险源数量 +
+
+ + {/* 块2 */} +
+
+
高风险设备
+
65
+
+ + 较昨日 +2 +
+
+
+ 高风险设备 +
+
+ + {/* 块3 */} +
+
+
今日预警次数
+
65
+
+ + 较昨日 +2 +
+
+
+ 今日预警次数 +
+
- { - setModalVisible(false); - form.resetFields(); - }} - onOk={() => form.submit()} - width={700} - > -
- - - + {/* 块4 */} +
+
+
未处理预警
+
65
+
+ + 较昨日 +2 +
+
+
+ 未处理预警 +
+
- - - + {/* 块5 */} +
+
+
已处理预警
+
65
+
+ + 已完成 +
+
+
+ 已处理预警 +
+
+
+
+
- - - + +
+
+
+
+ +
+
+ 危险源风险热力分布 +
+ +
+
+
+
+
- - - +
+
- - - + {/* 第三个div - 占满剩余位置 */} +
+
+
+ {/* 第一行块 - 蓝色方块加标题 */} +
+
+
风险评估参数
+
+ + {/* 第二行块 - 图片 */} +
+ {/* 风险评估图 */} +
+ + {/* 第三行块 */} +
+
风险等级
+
高风险
+
+ + {/* 第四行块 */} +
+
评估时间
+
2024-01-15
+
+ + {/* 第五行块 */} +
+
评估人员
+
张三
+
+
+ +
+ {/* 表格 */} +
+
+
+
最新预警信息
+
+
- - - - - -
- ); -}; + {/* 表格 */} +
+ + `共 ${total} 条`, + }} + scroll={{ x: 1200 }} + /> +
+
+
+ + + ); +}; -export default RiskAssessment; +export default RiskAssessment; \ No newline at end of file diff --git a/src/pages/business_basic/module/RiskAssessment.less b/src/pages/business_basic/module/RiskAssessment.less index ea268cc..ab8ffe0 100644 --- a/src/pages/business_basic/module/RiskAssessment.less +++ b/src/pages/business_basic/module/RiskAssessment.less @@ -1,241 +1,418 @@ -.risk-assessment { - padding: 20px; - - .ant-card { - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); - border-radius: 6px; - - .ant-card-head { - border-bottom: 1px solid #f0f0f0; - - .ant-card-head-title { - font-size: 16px; - font-weight: 600; - color: #262626; - } - } +.Rcontainer { + padding: 8px 6px 0px 6px; + height: 100%; + display: flex; + flex-direction: column; + gap: 10px; - .ant-card-body { - padding: 20px; - } - } - - .ant-table { - .ant-table-thead > tr > th { - background-color: #fafafa; - font-weight: 600; - color: #262626; - border-bottom: 1px solid #f0f0f0; - } + // 第一个div - 高度20% + .RcontainerTop { + height: 16%; + // background-color: #fff; + border-radius: 4px; + display: flex; + flex-direction: column; - .ant-table-tbody > tr > td { - border-bottom: 1px solid #f0f0f0; - } + .sectionContent { + height: 100%; + display: flex; + flex-direction: column; + // padding: 15px; - .ant-table-tbody > tr:hover > td { - background-color: #f5f5f5; - } - } - - .ant-btn { - border-radius: 4px; - - &.ant-btn-primary { - background-color: #1890ff; - border-color: #1890ff; - - &:hover { - background-color: #40a9ff; - border-color: #40a9ff; - } - } + .blocksContainer { + flex: 1; + display: flex; + gap: 10px; + height: 100%; - &.ant-btn-link { - padding: 4px 8px; - height: auto; - - &:hover { - background-color: #f5f5f5; - } - } - } - - .ant-tag { - border-radius: 4px; - font-size: 12px; - padding: 2px 8px; - } - - .ant-rate { - font-size: 14px; - - .ant-rate-star { - margin-right: 2px; - } - } + .blockItem { + flex: 1; + height: 100%; + display: flex; + background: linear-gradient(170.5deg, #EBEFF4 6.87%, #FFFFFF 92.55%); + border-radius: 4px; + border: 2px solid #FFFFFF; - .ant-progress { - .ant-progress-bg { - border-radius: 2px; - } - - &.ant-progress-small { - .ant-progress-text { - font-size: 10px; - } - } - } - - .ant-modal { - .ant-modal-header { - border-bottom: 1px solid #f0f0f0; - - .ant-modal-title { - font-size: 16px; - font-weight: 600; - color: #262626; - } - } + .blockLeft { + width: 60%; + height: 100%; + display: flex; + flex-direction: column; + justify-content: center; + padding: 15px; + padding-left: 20px; + gap: 8px; - .ant-modal-body { - padding: 24px; - } + .blockTitle { + font-family: PingFang SC; + font-weight: 400; + font-size: 12px; + color: #666666; + line-height: 1.2; + } - .ant-form-item-label > label { - font-weight: 500; - color: #262626; - } + .blockNumber { + font-family: PingFang SC; + font-weight: 700; + font-size: 24px; + color: #333333; + line-height: 1.2; + } - .ant-input, - .ant-select-selector { - border-radius: 4px; - border: 1px solid #d9d9d9; - - &:hover { - border-color: #40a9ff; - } - - &:focus, - &.ant-select-focused .ant-select-selector { - border-color: #40a9ff; - box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); - } - } - } - - .ant-pagination { - margin-top: 16px; - text-align: right; - - .ant-pagination-total-text { - color: #8c8c8c; - margin-right: 16px; - } - } - - // 风险等级颜色 - .risk-level-high { - color: #ff4d4f; - font-weight: 600; - } - - .risk-level-medium { - color: #faad14; - font-weight: 600; - } - - .risk-level-low { - color: #52c41a; - font-weight: 600; - } - - // 状态指示器 - .status-indicator { - display: inline-flex; - align-items: center; - gap: 4px; - - &.processed { - color: #52c41a; - } - - &.pending { - color: #ff4d4f; - } - - &.monitoring { - color: #1890ff; - } - } + .blockChange { + font-family: PingFang SC; + font-weight: 400; + font-size: 12px; + color: #1269FF; + line-height: 1.2; + display: flex; + align-items: center; + gap: 4px; - // 评分显示 - .score-display { - display: flex; - flex-direction: column; - align-items: center; - gap: 4px; - - .score-value { - font-weight: 600; - font-size: 14px; - } - - .score-label { - font-size: 12px; - color: #8c8c8c; - } - } + .arrow { + font-size: 14px; + font-weight: bold; + } - // 概率和影响程度显示 - .rate-display { - display: flex; - flex-direction: column; - align-items: center; - gap: 4px; - - .rate-stars { - display: flex; - align-items: center; - gap: 2px; + .checkIcon { + font-size: 16px; + color: #1269FF; + } + } + } + + .blockRight { + flex: 1; + height: 100%; + background-color: transparent; + border-radius: 0 4px 4px 0; + display: flex; + align-items: center; + justify-content: center; + + .blockImage { + // width: 80%; + height: 130%; + // height: 80%; + object-fit: contain; + margin-right: -10px; + } + } + } + } + } } - - .rate-text { - font-size: 12px; - color: #8c8c8c; + + // 第二个div - 高度30% + .RcontainerMiddle { + height: 30%; + border-radius: 4px; + display: flex; + flex-direction: column; + + .sectionContent { + height: 100%; + display: flex; + display: flex; + gap: 10px; + height: 100%; + + + + .middleBlock1 { + flex: 1; + height: 100%; + background: linear-gradient(170.5deg, #EBEFF4 6.87%, #FFFFFF 53.01%); + + border: 2px solid #fff; + border-radius: 4px; + position: relative; + padding: 0px 10px 10px 2px; + font-family: PingFang SC; + font-size: 14px; + color: #333333; + + .block1Header { + position: absolute; + top: 5px; + left: 10px; + right: 10px; + display: flex; + justify-content: space-between; + align-items: center; + z-index: 10; + + .block1Title { + display: flex; + align-items: center; + gap: 8px; + font-weight: 500; + font-size: 14px; + color: #333333; + + .titleIcon { + width: 3px; + height: 14px; + background-color: #2E4CD4; + } + } + + .block1Select { + width: 100px; + + :global(.ant-select-selector) { + height: 28px !important; + font-size: 12px !important; + } + + :global(.ant-select-selection-item) { + line-height: 26px !important; + font-size: 12px !important; + } + } + } + + .riskLegend { + position: absolute; + Top: 18px; + left: 50%; + transform: translateX(-50%); + display: flex; + justify-content: center; + align-items: center; + gap: 10px; + z-index: 10; + + .legendItem { + display: flex; + align-items: center; + gap: 5px; + + .legendDot { + width: 8px; + height: 8px; + border-radius: 50%; + } + + .legendText { + font-size: 12px; + color: #333; + font-weight: 400; + } + } + } + + .block1Chart { + width: 100%; + height: 100%; + margin-top: 20px; + + .mapImage { + margin-top: 7%; + width: 90%; + height: 77%; + object-fit: cover; + border-radius: 4px; + display: block; + margin-left: auto; + margin-right: auto; + } + } + } + + .middleBlock2 { + flex: 1; + height: 100%; + // background: linear-gradient(170.5deg, #EBEFF4 6.87%, #FFFFFF 53.01%); + // border: 2px solid #fff; + background-color: #fff; + // border-radius: 4px; + display: flex; + flex-direction: column; + font-family: PingFang SC; + font-size: 14px; + color: #333333; + padding: 5px 10px 5px 10px; + + .middleBlock2Title { + display: flex; + justify-content: space-between; + align-items: center; + // margin-bottom: 10px; + + .titleLeft { + display: flex; + align-items: center; + gap: 8px; + font-weight: 500; + font-size: 14px; + color: #333333; + + .titleIcon { + width: 3px; + height: 14px; + background-color: #2E4CD4; + } + } + + .titleRight { + display: flex; + align-items: center; + gap: 8px; + font-size: 12px; + color: #666; + } + } + + .middleBlock2Chart { + width: 100%; + height: 100%; + // min-height: 200px; + } + } + + } } - } - - // 风险矩阵样式 - .risk-matrix { - display: grid; - grid-template-columns: repeat(5, 1fr); - gap: 8px; - margin: 16px 0; - - .matrix-cell { - padding: 8px; - text-align: center; - border: 1px solid #d9d9d9; - border-radius: 4px; - font-size: 12px; - - &.high-risk { - background-color: #fff2f0; - border-color: #ff4d4f; - color: #ff4d4f; - } - - &.medium-risk { - background-color: #fffbe6; - border-color: #faad14; - color: #faad14; - } - - &.low-risk { - background-color: #f6ffed; - border-color: #52c41a; - color: #52c41a; - } + + // 第三个div - 占满剩余位置 + .RcontainerBottom { + flex: 1; // 占满剩余空间 + display: flex; + flex-direction: column; + + .sectionContent { + display: flex; + flex-direction: row; + gap: 10px; + padding: 0; + + .leftBlock { + width: 30%; + height: 100%; + background: url('@/assets/safe_majorHazard/online_monitoring/risk3.png') no-repeat center center; + background-size: cover; + padding: 0; + display: flex; + flex-direction: column; + gap: 10px; + padding: 15px; + + .leftBlockTitle { + display: flex; + align-items: center; + gap: 8px; + font-family: PingFang SC; + font-weight: 500; + font-size: 14px; + color: #333333; + + .titleIcon { + width: 3px; + height: 16px; + background-color: #2E4CD4; + } + } + + .leftBlockImage { + height: 40%; + width: 100%; + border-radius: 4px; + overflow: hidden; + display: flex; + justify-content: center; + align-items: center; + height: 80%; + } + + .leftBlockItem { + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; + padding: 10px; + // background-color: #f5f5f5; + border-radius: 4px; + font-family: PingFang SC; + + .itemTitle { + font-size: 12px; + color: #666666; + margin-bottom: 5px; + } + + .itemValue { + font-size: 14px; + color: #333333; + font-weight: 500; + } + } + } + + .rightBlock { + width: 68%; + height: 100%; + background-color: #fff; + padding: 0; + display: flex; + flex-direction: column; + + .tableHeader { + display: flex; + justify-content: space-between; + align-items: center; + padding: 8px 15px 5px 15px; + + .tableTitle { + display: flex; + align-items: center; + gap: 8px; + font-family: PingFang SC; + font-weight: 500; + font-size: 14px; + color: #333333; + + .titleIcon { + width: 3px; + height: 16px; + background-color: #2E4CD4; + } + } + } + + .tableContainer { + flex: 1; + overflow: hidden; + + :global(.ant-table) { + font-size: 12px; + } + + :global(.ant-table-thead > tr > th) { + background-color: #f5f5fa; + font-weight: 500; + font-size: 14px; + color: #333333; + border-bottom: 1px solid #f0f0f0; + padding: 8px 12px; + text-align: center; + } + + :global(.ant-table-tbody > tr > td) { + padding: 8px 12px; + border-bottom: 1px solid #f0f0f0; + text-align: center; + } + + :global(.ant-table-tbody > tr:hover > td) { + background-color: #f5f5f5; + } + + :global(.ant-pagination) { + margin-top: 16px; + text-align: right; + } + } + } + } } - } -} +} \ No newline at end of file