|
|
|
@ -1,114 +1,345 @@
|
|
|
|
|
|
|
|
|
|
|
|
import React from 'react';
|
|
|
|
import React from 'react';
|
|
|
|
import { Card, Result, Timeline,Statistic, Table,Row, Input,Button,Col, Select} from 'antd';
|
|
|
|
import { Card, Result, Timeline, Statistic, Table, Row, Input, Button, Col, Select } from 'antd';
|
|
|
|
import { ExportOutlined } from '@ant-design/icons';
|
|
|
|
import { ExportOutlined, PlusOutlined } from '@ant-design/icons';
|
|
|
|
import StandardTable from '@/components/StandardTable';
|
|
|
|
import StandardTable from '@/components/StandardTable';
|
|
|
|
|
|
|
|
import ReactECharts from 'echarts-for-react';
|
|
|
|
import styles from './ResponsibilityImplementation.less';
|
|
|
|
import styles from './ResponsibilityImplementation.less';
|
|
|
|
|
|
|
|
|
|
|
|
import timer_shaft from '@/assets/basic_information/timer_shaft.png'
|
|
|
|
import timer_shaft from '@/assets/basic_information/timer_shaft.png'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const ResponsibilityImplementation = () => {
|
|
|
|
const ResponsibilityImplementation = () => {
|
|
|
|
|
|
|
|
|
|
|
|
const columns = [
|
|
|
|
const columns = [
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title:"编号",
|
|
|
|
title: "编号",
|
|
|
|
dataIndex:"id",
|
|
|
|
dataIndex: "id",
|
|
|
|
key:"id",
|
|
|
|
key: "id",
|
|
|
|
width:60,
|
|
|
|
width: 50,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title:"责任区域",
|
|
|
|
title: "责任区域",
|
|
|
|
dataIndex:"zrqy",
|
|
|
|
dataIndex: "zrqy",
|
|
|
|
key:"zrqy",
|
|
|
|
key: "zrqy",
|
|
|
|
width:120,
|
|
|
|
width: 80,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title:"设备型号",
|
|
|
|
title: "设备型号",
|
|
|
|
dataIndex:"sbxh",
|
|
|
|
dataIndex: "sbxh",
|
|
|
|
key:"sbxh",
|
|
|
|
key: "sbxh",
|
|
|
|
width:120,
|
|
|
|
width: 120,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title:"危险源类型",
|
|
|
|
title: "危险源类型",
|
|
|
|
dataIndex:"wxlylx",
|
|
|
|
dataIndex: "wxlylx",
|
|
|
|
key:"wxlylx",
|
|
|
|
key: "wxlylx",
|
|
|
|
width:120,
|
|
|
|
width: 110,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title:"责任人",
|
|
|
|
title: "责任人",
|
|
|
|
dataIndex:"zrr",
|
|
|
|
dataIndex: "zrr",
|
|
|
|
key:"zrr",
|
|
|
|
key: "zrr",
|
|
|
|
width:120,
|
|
|
|
width: 80,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title:"联系方式",
|
|
|
|
title: "电话",
|
|
|
|
dataIndex:"lxfs",
|
|
|
|
dataIndex: "lxfs",
|
|
|
|
key:"lxfs",
|
|
|
|
key: "lxfs",
|
|
|
|
width:120,
|
|
|
|
width: 120,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title:"巡检频率",
|
|
|
|
title: "巡检频率",
|
|
|
|
dataIndex:"xjpl",
|
|
|
|
dataIndex: "xjpl",
|
|
|
|
key:"xjpl",
|
|
|
|
key: "xjpl",
|
|
|
|
width:120,
|
|
|
|
width: 120,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title:"最近巡检",
|
|
|
|
title: "最近巡检",
|
|
|
|
dataIndex:"zjxj",
|
|
|
|
dataIndex: "zjxj",
|
|
|
|
key:"zjxj",
|
|
|
|
key: "zjxj",
|
|
|
|
width:120,
|
|
|
|
width: 120,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title:"状态",
|
|
|
|
title: "状态",
|
|
|
|
dataIndex:"zt",
|
|
|
|
dataIndex: "zt",
|
|
|
|
key:"zt",
|
|
|
|
key: "zt",
|
|
|
|
width:120,
|
|
|
|
width: 90,
|
|
|
|
|
|
|
|
render: (text) => {
|
|
|
|
|
|
|
|
const statusMap = {
|
|
|
|
|
|
|
|
'正常': { color: '#44BB5F', bg: '#D8F7DE' },
|
|
|
|
|
|
|
|
'待巡检': { color: '#FFC405', bg: '#FFF6DA' },
|
|
|
|
|
|
|
|
'需处理': { color: '#FF2526', bg: '#FCEAEA' }
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
const status = statusMap[text] || { color: '#333', bg: '#F5F5F5' };
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
|
|
|
<span style={{
|
|
|
|
|
|
|
|
color: status.color,
|
|
|
|
|
|
|
|
backgroundColor: status.bg,
|
|
|
|
|
|
|
|
padding: '2px 8px',
|
|
|
|
|
|
|
|
borderRadius: '4px',
|
|
|
|
|
|
|
|
fontSize: '12px'
|
|
|
|
|
|
|
|
}}>
|
|
|
|
|
|
|
|
{text}
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title:"操作",
|
|
|
|
title: "操作",
|
|
|
|
dataIndex:"cz",
|
|
|
|
dataIndex: "cz",
|
|
|
|
key:"cz",
|
|
|
|
key: "cz",
|
|
|
|
width:120,
|
|
|
|
width: 120,
|
|
|
|
render: (text, record) => { // ======== 渲染操作列 ========
|
|
|
|
render: (text, record) => {
|
|
|
|
const handleView = (record) => { // ======== 定义查看函数 ========
|
|
|
|
const handleView = (record) => {
|
|
|
|
console.log('查看记录:', record); // ======== 打印记录信息到控制台 ========
|
|
|
|
console.log('查看记录:', record);
|
|
|
|
// 这里可以添加查看详情的逻辑 // ======== 注释:可以添加查看详情的逻辑 ========
|
|
|
|
};
|
|
|
|
}; // ======== 函数结束 ========
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return ( // ======== 返回按钮组件 ========
|
|
|
|
const handleEdit = (record) => {
|
|
|
|
<Button type="link" onClick={() => handleView(record)}>查看</Button> // ======== 查看按钮,点击时调用handleView函数 ========
|
|
|
|
console.log('编辑记录:', record);
|
|
|
|
); // ======== return语句结束 ========
|
|
|
|
};
|
|
|
|
} // ======== render函数结束 ========
|
|
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
|
|
|
<div>
|
|
|
|
|
|
|
|
<Button
|
|
|
|
|
|
|
|
type="link"
|
|
|
|
|
|
|
|
onClick={() => handleView(record)}
|
|
|
|
|
|
|
|
style={{ color: '#2E4CD4' }}
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
查看
|
|
|
|
|
|
|
|
</Button>
|
|
|
|
|
|
|
|
<Button
|
|
|
|
|
|
|
|
type="link"
|
|
|
|
|
|
|
|
onClick={() => handleEdit(record)}
|
|
|
|
|
|
|
|
style={{ color: '#2E4CD4' }}
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
编辑
|
|
|
|
|
|
|
|
</Button>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 12条写死数据
|
|
|
|
|
|
|
|
const tableData = [
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
key: '1',
|
|
|
|
|
|
|
|
id: '01',
|
|
|
|
|
|
|
|
zrqy: '储罐区A',
|
|
|
|
|
|
|
|
sbxh: '130910180007',
|
|
|
|
|
|
|
|
wxlylx: '易燃易爆品存储',
|
|
|
|
|
|
|
|
zrr: '陈安心',
|
|
|
|
|
|
|
|
lxfs: '152****7754',
|
|
|
|
|
|
|
|
xjpl: '每日两次',
|
|
|
|
|
|
|
|
zjxj: '2025-06-08 13:34',
|
|
|
|
|
|
|
|
zt: '正常'
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
key: '2',
|
|
|
|
|
|
|
|
id: '02',
|
|
|
|
|
|
|
|
zrqy: '储罐区A',
|
|
|
|
|
|
|
|
sbxh: '130910180007',
|
|
|
|
|
|
|
|
wxlylx: '易燃易爆品存储',
|
|
|
|
|
|
|
|
zrr: '陈安心',
|
|
|
|
|
|
|
|
lxfs: '152****7754',
|
|
|
|
|
|
|
|
xjpl: '每日两次',
|
|
|
|
|
|
|
|
zjxj: '2025-06-08 13:34',
|
|
|
|
|
|
|
|
zt: '待巡检'
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
key: '3',
|
|
|
|
|
|
|
|
id: '03',
|
|
|
|
|
|
|
|
zrqy: '储罐区A',
|
|
|
|
|
|
|
|
sbxh: '130910180007',
|
|
|
|
|
|
|
|
wxlylx: '易燃易爆品存储',
|
|
|
|
|
|
|
|
zrr: '陈安心',
|
|
|
|
|
|
|
|
lxfs: '152****7754',
|
|
|
|
|
|
|
|
xjpl: '每日两次',
|
|
|
|
|
|
|
|
zjxj: '2025-06-08 13:34',
|
|
|
|
|
|
|
|
zt: '需处理'
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
key: '4',
|
|
|
|
|
|
|
|
id: '04',
|
|
|
|
|
|
|
|
zrqy: '储罐区A',
|
|
|
|
|
|
|
|
sbxh: '130910180007',
|
|
|
|
|
|
|
|
wxlylx: '易燃易爆品存储',
|
|
|
|
|
|
|
|
zrr: '陈安心',
|
|
|
|
|
|
|
|
lxfs: '152****7754',
|
|
|
|
|
|
|
|
xjpl: '每日两次',
|
|
|
|
|
|
|
|
zjxj: '2025-06-08 13:34',
|
|
|
|
|
|
|
|
zt: '正常'
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
key: '5',
|
|
|
|
|
|
|
|
id: '05',
|
|
|
|
|
|
|
|
zrqy: '储罐区A',
|
|
|
|
|
|
|
|
sbxh: '130910180007',
|
|
|
|
|
|
|
|
wxlylx: '易燃易爆品存储',
|
|
|
|
|
|
|
|
zrr: '陈安心',
|
|
|
|
|
|
|
|
lxfs: '152****7754',
|
|
|
|
|
|
|
|
xjpl: '每日两次',
|
|
|
|
|
|
|
|
zjxj: '2025-06-08 13:34',
|
|
|
|
|
|
|
|
zt: '待巡检'
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
key: '6',
|
|
|
|
|
|
|
|
id: '06',
|
|
|
|
|
|
|
|
zrqy: '储罐区A',
|
|
|
|
|
|
|
|
sbxh: '130910180007',
|
|
|
|
|
|
|
|
wxlylx: '易燃易爆品存储',
|
|
|
|
|
|
|
|
zrr: '陈安心',
|
|
|
|
|
|
|
|
lxfs: '152****7754',
|
|
|
|
|
|
|
|
xjpl: '每日两次',
|
|
|
|
|
|
|
|
zjxj: '2025-06-08 13:34',
|
|
|
|
|
|
|
|
zt: '需处理'
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
key: '7',
|
|
|
|
|
|
|
|
id: '07',
|
|
|
|
|
|
|
|
zrqy: '储罐区A',
|
|
|
|
|
|
|
|
sbxh: '130910180007',
|
|
|
|
|
|
|
|
wxlylx: '易燃易爆品存储',
|
|
|
|
|
|
|
|
zrr: '陈安心',
|
|
|
|
|
|
|
|
lxfs: '152****7754',
|
|
|
|
|
|
|
|
xjpl: '每日两次',
|
|
|
|
|
|
|
|
zjxj: '2025-06-08 13:34',
|
|
|
|
|
|
|
|
zt: '正常'
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
key: '8',
|
|
|
|
|
|
|
|
id: '08',
|
|
|
|
|
|
|
|
zrqy: '储罐区A',
|
|
|
|
|
|
|
|
sbxh: '130910180007',
|
|
|
|
|
|
|
|
wxlylx: '易燃易爆品存储',
|
|
|
|
|
|
|
|
zrr: '陈安心',
|
|
|
|
|
|
|
|
lxfs: '152****7754',
|
|
|
|
|
|
|
|
xjpl: '每日两次',
|
|
|
|
|
|
|
|
zjxj: '2025-06-08 13:34',
|
|
|
|
|
|
|
|
zt: '待巡检'
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
key: '9',
|
|
|
|
|
|
|
|
id: '09',
|
|
|
|
|
|
|
|
zrqy: '储罐区A',
|
|
|
|
|
|
|
|
sbxh: '130910180007',
|
|
|
|
|
|
|
|
wxlylx: '易燃易爆品存储',
|
|
|
|
|
|
|
|
zrr: '陈安心',
|
|
|
|
|
|
|
|
lxfs: '152****7754',
|
|
|
|
|
|
|
|
xjpl: '每日两次',
|
|
|
|
|
|
|
|
zjxj: '2025-06-08 13:34',
|
|
|
|
|
|
|
|
zt: '需处理'
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
key: '10',
|
|
|
|
|
|
|
|
id: '10',
|
|
|
|
|
|
|
|
zrqy: '储罐区A',
|
|
|
|
|
|
|
|
sbxh: '130910180007',
|
|
|
|
|
|
|
|
wxlylx: '易燃易爆品存储',
|
|
|
|
|
|
|
|
zrr: '陈安心',
|
|
|
|
|
|
|
|
lxfs: '152****7754',
|
|
|
|
|
|
|
|
xjpl: '每日两次',
|
|
|
|
|
|
|
|
zjxj: '2025-06-08 13:34',
|
|
|
|
|
|
|
|
zt: '正常'
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
key: '11',
|
|
|
|
|
|
|
|
id: '11',
|
|
|
|
|
|
|
|
zrqy: '储罐区A',
|
|
|
|
|
|
|
|
sbxh: '130910180007',
|
|
|
|
|
|
|
|
wxlylx: '易燃易爆品存储',
|
|
|
|
|
|
|
|
zrr: '陈安心',
|
|
|
|
|
|
|
|
lxfs: '152****7754',
|
|
|
|
|
|
|
|
xjpl: '每日两次',
|
|
|
|
|
|
|
|
zjxj: '2025-06-08 13:34',
|
|
|
|
|
|
|
|
zt: '待巡检'
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
key: '12',
|
|
|
|
|
|
|
|
id: '12',
|
|
|
|
|
|
|
|
zrqy: '储罐区A',
|
|
|
|
|
|
|
|
sbxh: '130910180007',
|
|
|
|
|
|
|
|
wxlylx: '易燃易爆品存储',
|
|
|
|
|
|
|
|
zrr: '陈安心',
|
|
|
|
|
|
|
|
lxfs: '152****7754',
|
|
|
|
|
|
|
|
xjpl: '每日两次',
|
|
|
|
|
|
|
|
zjxj: '2025-06-08 13:34',
|
|
|
|
|
|
|
|
zt: '需处理'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
];
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
// 生成20条假数据
|
|
|
|
// 雷达图配置方法
|
|
|
|
const generateMockData = () => { // ======== 定义生成假数据的函数 ========
|
|
|
|
const getRadarChartOption = () => {
|
|
|
|
const data = []; // ======== 创建空数组存储数据 ========
|
|
|
|
return {
|
|
|
|
const areas = ['生产车间A区', '生产车间B区', '储罐区', '配电室', '锅炉房', '化学品仓库', '实验室', '办公区']; // ======== 责任区域选项 ========
|
|
|
|
radar: {
|
|
|
|
const devices = ['压力容器', '储罐', '反应釜', '压缩机', '泵类设备', '电气设备', '管道系统', '安全阀']; // ======== 设备型号选项 ========
|
|
|
|
indicator: [
|
|
|
|
const statuses = ['正常', '维护中', '故障', '停用', '检修']; // ======== 状态选项 ========
|
|
|
|
{ name: '{a|问题处理率} {b|85%}', max: 100, nameLocation: 'start', nameGap: -60 },
|
|
|
|
const names = ['张三', '李四', '王五', '赵六', '孙七', '周八', '吴九', '郑十', '钱十一', '陈十二']; // ======== 责任人姓名选项 ========
|
|
|
|
{ name: '{a|隐患整改率} {b|15%}', max: 100, nameGap: 20 },
|
|
|
|
|
|
|
|
{ name: '{a|履职频次} {b|92%}', max: 100, nameGap: 20 }
|
|
|
|
for (let i = 1; i <= 20; i++) { // ======== 循环生成20条数据 ========
|
|
|
|
],
|
|
|
|
data.push({ // ======== 添加一条数据到数组 ========
|
|
|
|
center: ['50%', '60%'],
|
|
|
|
key: i.toString(), // ======== 唯一标识 ========
|
|
|
|
radius: 48,
|
|
|
|
id: `WX${String(i).padStart(3, '0')}`, // ======== 编号:WX001, WX002... ========
|
|
|
|
splitNumber: 4,
|
|
|
|
zrqy: areas[Math.floor(Math.random() * areas.length)], // ======== 随机选择责任区域 ========
|
|
|
|
shape: 'polygon',
|
|
|
|
sbxh: devices[Math.floor(Math.random() * devices.length)], // ======== 随机选择设备型号 ========
|
|
|
|
axisName: {
|
|
|
|
zrr: names[Math.floor(Math.random() * names.length)], // ======== 随机选择责任人 ========
|
|
|
|
rich: {
|
|
|
|
zt: statuses[Math.floor(Math.random() * statuses.length)], // ======== 随机选择状态 ========
|
|
|
|
a: {
|
|
|
|
}); // ======== 数据对象结束 ========
|
|
|
|
color: '#333',
|
|
|
|
} // ======== 循环结束 ========
|
|
|
|
fontSize: 12,
|
|
|
|
return data; // ======== 返回生成的数据数组 ========
|
|
|
|
fontWeight: 400,
|
|
|
|
}; // ======== 函数结束 ========
|
|
|
|
},
|
|
|
|
|
|
|
|
b: {
|
|
|
|
const tableData = generateMockData(); // ======== 调用函数生成假数据 ========
|
|
|
|
color: '#2E4CD4',
|
|
|
|
|
|
|
|
fontSize: 12,
|
|
|
|
return (
|
|
|
|
fontWeight: 400,
|
|
|
|
<div className={styles.containerR}>
|
|
|
|
}
|
|
|
|
<div className={styles.containerOne}>
|
|
|
|
}
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
splitLine: {
|
|
|
|
|
|
|
|
lineStyle: {
|
|
|
|
|
|
|
|
color: ['#BFCBFF']
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
splitArea: {
|
|
|
|
|
|
|
|
areaStyle: {
|
|
|
|
|
|
|
|
color: ['#fff']
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
axisLine: {
|
|
|
|
|
|
|
|
lineStyle: {
|
|
|
|
|
|
|
|
color: '#E6EAF5'
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
series: [{
|
|
|
|
|
|
|
|
type: 'radar',
|
|
|
|
|
|
|
|
data: [
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
value: [85, 15, 92],
|
|
|
|
|
|
|
|
areaStyle: {
|
|
|
|
|
|
|
|
color: '#499BFF'
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
lineStyle: {
|
|
|
|
|
|
|
|
color: '#1269FF',
|
|
|
|
|
|
|
|
width: 2
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
symbol: 'circle',
|
|
|
|
|
|
|
|
symbolSize: 6,
|
|
|
|
|
|
|
|
itemStyle: {
|
|
|
|
|
|
|
|
color: '#2E4CD4',
|
|
|
|
|
|
|
|
borderColor: '#fff',
|
|
|
|
|
|
|
|
borderWidth: 2
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
}]
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
|
|
|
<div className={styles.containerR}>
|
|
|
|
|
|
|
|
<div className={styles.containerOne}>
|
|
|
|
<div className={styles.containerOneLeft}>
|
|
|
|
<div className={styles.containerOneLeft}>
|
|
|
|
{/* 第一块:蓝色块 + 标题 履职时间轴 */}
|
|
|
|
{/* 第一块:蓝色块 + 标题 履职时间轴 */}
|
|
|
|
<div className={styles.leftTopSection}>
|
|
|
|
<div className={styles.leftTopSection}>
|
|
|
|
@ -121,10 +352,10 @@ const ResponsibilityImplementation = () => {
|
|
|
|
<div style={{ marginTop: '15px' }}>
|
|
|
|
<div style={{ marginTop: '15px' }}>
|
|
|
|
<img src={timer_shaft} alt="时间轴" style={{ width: '100%', height: 'auto' }} />
|
|
|
|
<img src={timer_shaft} alt="时间轴" style={{ width: '100%', height: 'auto' }} />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div className={styles.containerOneRight}>
|
|
|
|
<div className={styles.containerOneRight}>
|
|
|
|
{/* 第一块:标题 + 下拉选择框 + 导出按钮 */}
|
|
|
|
{/* 第一块:标题 + 下拉选择框 + 导出按钮 */}
|
|
|
|
<div className={styles.rightTopSection}>
|
|
|
|
<div className={styles.rightTopSection}>
|
|
|
|
@ -150,8 +381,8 @@ const ResponsibilityImplementation = () => {
|
|
|
|
/>
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div className={styles.rightTopRight}>
|
|
|
|
<div className={styles.rightTopRight}>
|
|
|
|
<Button
|
|
|
|
<Button
|
|
|
|
type="primary"
|
|
|
|
type="primary"
|
|
|
|
className={styles.exportBtn}
|
|
|
|
className={styles.exportBtn}
|
|
|
|
icon={<ExportOutlined />}
|
|
|
|
icon={<ExportOutlined />}
|
|
|
|
>
|
|
|
|
>
|
|
|
|
@ -159,26 +390,28 @@ const ResponsibilityImplementation = () => {
|
|
|
|
</Button>
|
|
|
|
</Button>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
{/* 第二块:重叠图片和div */}
|
|
|
|
{/* 第二块:雷达图 */}
|
|
|
|
<div className={styles.rightBottomSection}>
|
|
|
|
<div className={styles.rightBottomSection}>
|
|
|
|
<div className={styles.overlayContainer}>
|
|
|
|
<div style={{
|
|
|
|
{/* 背景图片1 */}
|
|
|
|
width: '100%',
|
|
|
|
<div className={styles.backgroundImage1}>
|
|
|
|
height: '100%',
|
|
|
|
<div className={styles.placeholderText}>占位图片1</div>
|
|
|
|
display: 'flex',
|
|
|
|
</div>
|
|
|
|
// backgroundColor: 'red',
|
|
|
|
{/* 背景图片2 */}
|
|
|
|
alignItems: 'center',
|
|
|
|
<div className={styles.backgroundImage2}>
|
|
|
|
justifyContent: 'center',
|
|
|
|
<div className={styles.placeholderText}>占位图片2</div>
|
|
|
|
position: 'relative',
|
|
|
|
</div>
|
|
|
|
// padding: '20px'
|
|
|
|
{/* 重叠的div元素 */}
|
|
|
|
}}>
|
|
|
|
<div className={styles.overlayDiv1}>待开发123</div>
|
|
|
|
<ReactECharts
|
|
|
|
<div className={styles.overlayDiv2}>待开发123</div>
|
|
|
|
option={getRadarChartOption()}
|
|
|
|
<div className={styles.overlayDiv3}>待开发123</div>
|
|
|
|
style={{ width: '100%', height: '100%' }}
|
|
|
|
|
|
|
|
opts={{ renderer: 'canvas' }}
|
|
|
|
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div className={styles.containerTwo}>
|
|
|
|
<div className={styles.containerTwo}>
|
|
|
|
{/* 第一个大块:标题 */}
|
|
|
|
{/* 第一个大块:标题 */}
|
|
|
|
@ -188,37 +421,63 @@ const ResponsibilityImplementation = () => {
|
|
|
|
<div>重大危险源安全包信息库</div>
|
|
|
|
<div>重大危险源安全包信息库</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
{/* 第二个大块:搜索和按钮 */}
|
|
|
|
{/* 第二个大块:搜索和按钮 */}
|
|
|
|
<div className={styles.containerTwoActions}>
|
|
|
|
<div className={styles.containerTwoActions}>
|
|
|
|
<div className={styles.searchSection}>
|
|
|
|
<div className={styles.searchSection}>
|
|
|
|
<Input placeholder="搜索危险源编号" />
|
|
|
|
<Input.Search
|
|
|
|
|
|
|
|
placeholder="搜索危险源编号..."
|
|
|
|
|
|
|
|
style={{ fontSize: '12px', width:'220px' }}
|
|
|
|
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div className={styles.buttonSection}>
|
|
|
|
<div className={styles.buttonSection}>
|
|
|
|
<Button>新增责任人</Button>
|
|
|
|
<Button
|
|
|
|
<Button>导出清单</Button>
|
|
|
|
icon={<PlusOutlined />}
|
|
|
|
|
|
|
|
style={{
|
|
|
|
|
|
|
|
color: '#2E4CD4',
|
|
|
|
|
|
|
|
backgroundColor: 'transparent',
|
|
|
|
|
|
|
|
borderColor: '#DFE4F6',
|
|
|
|
|
|
|
|
fontSize: '12px'
|
|
|
|
|
|
|
|
}}
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
新增责任人
|
|
|
|
|
|
|
|
</Button>
|
|
|
|
|
|
|
|
<Button
|
|
|
|
|
|
|
|
icon={<ExportOutlined />}
|
|
|
|
|
|
|
|
style={{
|
|
|
|
|
|
|
|
color: '#2E4CD4',
|
|
|
|
|
|
|
|
backgroundColor: 'transparent',
|
|
|
|
|
|
|
|
borderColor: '#DFE4F6',
|
|
|
|
|
|
|
|
fontSize: '12px'
|
|
|
|
|
|
|
|
}}
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
导出清单
|
|
|
|
|
|
|
|
</Button>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
{/* 第三个大块:表格 */}
|
|
|
|
{/* 第三个大块:表格 */}
|
|
|
|
<div className={styles.containerTwoTable}>
|
|
|
|
<div className={styles.containerTwoTable}>
|
|
|
|
<StandardTable
|
|
|
|
<StandardTable
|
|
|
|
columns={columns} // ======== 表格列配置 ========
|
|
|
|
columns={columns}
|
|
|
|
data={{ // ======== 数据对象,包含list和pagination ========
|
|
|
|
data={{
|
|
|
|
list: tableData, // ======== 表格数据列表 ========
|
|
|
|
list: tableData,
|
|
|
|
pagination: { // ======== 分页配置 ========
|
|
|
|
pagination: {
|
|
|
|
currentPage: 1, // ======== 当前页码 ========
|
|
|
|
currentPage: 1,
|
|
|
|
pageSize: 5, // ======== 每页显示10条数据 ========
|
|
|
|
pageSize: 5,
|
|
|
|
total: tableData.length, // ======== 总数据条数 ========
|
|
|
|
total: tableData.length,
|
|
|
|
} // ======== 分页配置结束 ========
|
|
|
|
showTotal: (total, range) => `共 ${total} 条数据`,
|
|
|
|
}} // ======== 数据对象结束 ========
|
|
|
|
showSizeChanger: false,
|
|
|
|
selectedRows={[]} // ======== 选中的行数据,初始为空数组 ========
|
|
|
|
jumpText: '前往',
|
|
|
|
onSelectRow={() => {}} // ======== 行选择事件处理函数 ========
|
|
|
|
}
|
|
|
|
onChange={() => {}} // ======== 表格变化事件处理函数 ========
|
|
|
|
}}
|
|
|
|
/>
|
|
|
|
selectedRows={[]}
|
|
|
|
|
|
|
|
onSelectRow={() => { }}
|
|
|
|
|
|
|
|
onChange={() => { }}
|
|
|
|
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
export default ResponsibilityImplementation;
|
|
|
|
export default ResponsibilityImplementation;
|
|
|
|
|