|
|
|
@ -1,16 +1,407 @@
|
|
|
|
import React from 'react';
|
|
|
|
import React, { useState } from 'react';
|
|
|
|
|
|
|
|
import { Input, Select, Button, Checkbox, Tag } from 'antd';
|
|
|
|
|
|
|
|
import {
|
|
|
|
|
|
|
|
EditOutlined,
|
|
|
|
|
|
|
|
VideoCameraOutlined,
|
|
|
|
|
|
|
|
SendOutlined,
|
|
|
|
|
|
|
|
ClockCircleOutlined,
|
|
|
|
|
|
|
|
LeftOutlined,
|
|
|
|
|
|
|
|
PlayCircleOutlined,
|
|
|
|
|
|
|
|
InfoCircleOutlined,
|
|
|
|
|
|
|
|
RightOutlined
|
|
|
|
|
|
|
|
} from '@ant-design/icons';
|
|
|
|
|
|
|
|
import StandardTable from '@/components/StandardTable';
|
|
|
|
import styles from './EventNotification.less';
|
|
|
|
import styles from './EventNotification.less';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const { TextArea } = Input;
|
|
|
|
|
|
|
|
const { Option } = Select;
|
|
|
|
|
|
|
|
|
|
|
|
const EventNotification = () => {
|
|
|
|
const EventNotification = () => {
|
|
|
|
|
|
|
|
const [eventTitle, setEventTitle] = useState('');
|
|
|
|
|
|
|
|
const [eventType, setEventType] = useState('');
|
|
|
|
|
|
|
|
const [eventLevel, setEventLevel] = useState('');
|
|
|
|
|
|
|
|
const [eventDescription, setEventDescription] = useState('');
|
|
|
|
|
|
|
|
const [location, setLocation] = useState('');
|
|
|
|
|
|
|
|
const [videoRecord, setVideoRecord] = useState('');
|
|
|
|
|
|
|
|
const [pushTargets, setPushTargets] = useState({
|
|
|
|
|
|
|
|
'director-li': false,
|
|
|
|
|
|
|
|
'captain-zhang': true,
|
|
|
|
|
|
|
|
'professor-wang': true
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
const [pushMethod, setPushMethod] = useState({
|
|
|
|
|
|
|
|
'sms': true,
|
|
|
|
|
|
|
|
'email': false
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 事件列表数据
|
|
|
|
|
|
|
|
const eventListData = [
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
key: '1',
|
|
|
|
|
|
|
|
title: '交通事故(A301国道K125段)',
|
|
|
|
|
|
|
|
time: '2023-04-17 14:45',
|
|
|
|
|
|
|
|
status: '重大',
|
|
|
|
|
|
|
|
statusColor: '#ff4d4f',
|
|
|
|
|
|
|
|
currentStatus: '处理中',
|
|
|
|
|
|
|
|
id: 'EVT-20230615-008'
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
key: '2',
|
|
|
|
|
|
|
|
title: '火灾事故(南城区商业街)',
|
|
|
|
|
|
|
|
time: '2023-04-16 09:30',
|
|
|
|
|
|
|
|
status: '较大',
|
|
|
|
|
|
|
|
statusColor: '#ff9800',
|
|
|
|
|
|
|
|
currentStatus: '已解决',
|
|
|
|
|
|
|
|
id: 'EVT-20230614-005'
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
key: '3',
|
|
|
|
|
|
|
|
title: '化学品泄漏(工业区A区)',
|
|
|
|
|
|
|
|
time: '2023-04-15 16:20',
|
|
|
|
|
|
|
|
status: '一般',
|
|
|
|
|
|
|
|
statusColor: '#36cfc9',
|
|
|
|
|
|
|
|
currentStatus: '已解决',
|
|
|
|
|
|
|
|
id: 'EVT-20230613-003'
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
key: '4',
|
|
|
|
|
|
|
|
title: '自然灾害(台风影响)',
|
|
|
|
|
|
|
|
time: '2023-04-14 11:15',
|
|
|
|
|
|
|
|
status: '较大',
|
|
|
|
|
|
|
|
statusColor: '#ff9800',
|
|
|
|
|
|
|
|
currentStatus: '已解决',
|
|
|
|
|
|
|
|
id: 'EVT-20230612-001'
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 推送记录表格数据
|
|
|
|
|
|
|
|
const pushRecordData = {
|
|
|
|
|
|
|
|
list: [
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
key: '1',
|
|
|
|
|
|
|
|
eventId: '#ALRT-20230512-001',
|
|
|
|
|
|
|
|
eventName: '城南小区火灾事故',
|
|
|
|
|
|
|
|
pushTime: '2025-10-20 01:32:25',
|
|
|
|
|
|
|
|
recipient: '消防救援支队、社区',
|
|
|
|
|
|
|
|
pushMethod: '短信、系统消息',
|
|
|
|
|
|
|
|
status: '已送达',
|
|
|
|
|
|
|
|
statusType: 'delivered'
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
key: '2',
|
|
|
|
|
|
|
|
eventId: '#ALRT-20230512-002',
|
|
|
|
|
|
|
|
eventName: '城西路段积水报告',
|
|
|
|
|
|
|
|
pushTime: '2025-10-18 21:15:07',
|
|
|
|
|
|
|
|
recipient: '市政管理处、交警',
|
|
|
|
|
|
|
|
pushMethod: '系统消息',
|
|
|
|
|
|
|
|
status: '已送达',
|
|
|
|
|
|
|
|
statusType: 'delivered'
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
key: '3',
|
|
|
|
|
|
|
|
eventId: '#ALRT-20230512-003',
|
|
|
|
|
|
|
|
eventName: '国道交通事故',
|
|
|
|
|
|
|
|
pushTime: '2025-10-15 12:24:25',
|
|
|
|
|
|
|
|
recipient: '交警、急救中心',
|
|
|
|
|
|
|
|
pushMethod: '短信、电话',
|
|
|
|
|
|
|
|
status: '发送中',
|
|
|
|
|
|
|
|
statusType: 'sending'
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
pagination: {
|
|
|
|
|
|
|
|
current: 3,
|
|
|
|
|
|
|
|
currentPage: 3,
|
|
|
|
|
|
|
|
pageSize: 10,
|
|
|
|
|
|
|
|
total: 48,
|
|
|
|
|
|
|
|
showSizeChanger: true,
|
|
|
|
|
|
|
|
showQuickJumper: true,
|
|
|
|
|
|
|
|
showTotal: (total) => `共 ${total} 条`
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 推送记录表格列定义
|
|
|
|
|
|
|
|
const pushRecordColumns = [
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
title: '事件编号',
|
|
|
|
|
|
|
|
dataIndex: 'eventId',
|
|
|
|
|
|
|
|
key: 'eventId',
|
|
|
|
|
|
|
|
width: 180
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
title: '事件名称',
|
|
|
|
|
|
|
|
dataIndex: 'eventName',
|
|
|
|
|
|
|
|
key: 'eventName',
|
|
|
|
|
|
|
|
width: 180
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
title: '推送时间',
|
|
|
|
|
|
|
|
dataIndex: 'pushTime',
|
|
|
|
|
|
|
|
key: 'pushTime',
|
|
|
|
|
|
|
|
width: 180
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
title: '接收对象',
|
|
|
|
|
|
|
|
dataIndex: 'recipient',
|
|
|
|
|
|
|
|
key: 'recipient',
|
|
|
|
|
|
|
|
width: 200
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
title: '推送方式',
|
|
|
|
|
|
|
|
dataIndex: 'pushMethod',
|
|
|
|
|
|
|
|
key: 'pushMethod',
|
|
|
|
|
|
|
|
width: 150
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
title: '状态',
|
|
|
|
|
|
|
|
dataIndex: 'status',
|
|
|
|
|
|
|
|
key: 'status',
|
|
|
|
|
|
|
|
width: 100,
|
|
|
|
|
|
|
|
render: (text, record) => {
|
|
|
|
|
|
|
|
let color = '#52c41a';
|
|
|
|
|
|
|
|
if (record.statusType === 'sending') color = '#ff9800';
|
|
|
|
|
|
|
|
return <Tag color={color}>{text}</Tag>;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
title: '操作',
|
|
|
|
|
|
|
|
key: 'action',
|
|
|
|
|
|
|
|
width: 100,
|
|
|
|
|
|
|
|
render: () => (
|
|
|
|
|
|
|
|
<Button type="link" size="small">查看</Button>
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const handlePushTargetChange = (key, checked) => {
|
|
|
|
|
|
|
|
setPushTargets(prev => ({
|
|
|
|
|
|
|
|
...prev,
|
|
|
|
|
|
|
|
[key]: checked
|
|
|
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const handlePushMethodChange = (key, checked) => {
|
|
|
|
|
|
|
|
setPushMethod(prev => ({
|
|
|
|
|
|
|
|
...prev,
|
|
|
|
|
|
|
|
[key]: checked
|
|
|
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
return (
|
|
|
|
<div className={styles.container}>
|
|
|
|
<div className={styles.container}>
|
|
|
|
<div className={styles.content}>
|
|
|
|
{/* A块:顶部区域,高度60%,背景透明 */}
|
|
|
|
<h2>事件通知</h2>
|
|
|
|
<div className={styles.blockA}>
|
|
|
|
{/* 这里可以添加具体的内容 */}
|
|
|
|
{/* a块:事件信息编辑 */}
|
|
|
|
|
|
|
|
<div className={styles.blockA_a}>
|
|
|
|
|
|
|
|
<div className={styles.cardHeader}>
|
|
|
|
|
|
|
|
<EditOutlined className={styles.headerIcon} />
|
|
|
|
|
|
|
|
<span className={styles.headerText}>事件信息编辑</span>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className={styles.cardContent}>
|
|
|
|
|
|
|
|
<div className={styles.formItem}>
|
|
|
|
|
|
|
|
<label className={styles.label}>事件标题</label>
|
|
|
|
|
|
|
|
<Input
|
|
|
|
|
|
|
|
placeholder="请输入事件标题"
|
|
|
|
|
|
|
|
value={eventTitle}
|
|
|
|
|
|
|
|
onChange={(e) => setEventTitle(e.target.value)}
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className={styles.formItem}>
|
|
|
|
|
|
|
|
<label className={styles.label}>事件类型</label>
|
|
|
|
|
|
|
|
<Select
|
|
|
|
|
|
|
|
placeholder="请选择事件类型"
|
|
|
|
|
|
|
|
value={eventType}
|
|
|
|
|
|
|
|
onChange={setEventType}
|
|
|
|
|
|
|
|
suffixIcon={<RightOutlined />}
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<Option value="traffic">交通事故</Option>
|
|
|
|
|
|
|
|
<Option value="fire">火灾事故</Option>
|
|
|
|
|
|
|
|
<Option value="chemical">化学品泄漏</Option>
|
|
|
|
|
|
|
|
<Option value="natural">自然灾害</Option>
|
|
|
|
|
|
|
|
</Select>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className={styles.formItem}>
|
|
|
|
|
|
|
|
<label className={styles.label}>事件级别</label>
|
|
|
|
|
|
|
|
<Select
|
|
|
|
|
|
|
|
placeholder="请选择事件级别"
|
|
|
|
|
|
|
|
value={eventLevel}
|
|
|
|
|
|
|
|
onChange={setEventLevel}
|
|
|
|
|
|
|
|
suffixIcon={<RightOutlined />}
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<Option value="major">重大</Option>
|
|
|
|
|
|
|
|
<Option value="significant">较大</Option>
|
|
|
|
|
|
|
|
<Option value="general">一般</Option>
|
|
|
|
|
|
|
|
</Select>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className={styles.formItem}>
|
|
|
|
|
|
|
|
<label className={styles.label}>事件描述</label>
|
|
|
|
|
|
|
|
<TextArea
|
|
|
|
|
|
|
|
placeholder="请详细描述事件情况..."
|
|
|
|
|
|
|
|
rows={4}
|
|
|
|
|
|
|
|
value={eventDescription}
|
|
|
|
|
|
|
|
onChange={(e) => setEventDescription(e.target.value)}
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<Button type="primary" className={styles.saveButton}>
|
|
|
|
|
|
|
|
保存事件信息
|
|
|
|
|
|
|
|
</Button>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{/* b块:视频核实 */}
|
|
|
|
|
|
|
|
<div className={styles.blockA_b}>
|
|
|
|
|
|
|
|
<div className={styles.cardHeader}>
|
|
|
|
|
|
|
|
<VideoCameraOutlined className={styles.headerIcon} />
|
|
|
|
|
|
|
|
<span className={styles.headerText}>视频核实</span>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className={styles.cardContent}>
|
|
|
|
|
|
|
|
<div className={styles.formItem}>
|
|
|
|
|
|
|
|
<label className={styles.label}>事发地点</label>
|
|
|
|
|
|
|
|
<Input
|
|
|
|
|
|
|
|
placeholder="请输入事发地点"
|
|
|
|
|
|
|
|
value={location}
|
|
|
|
|
|
|
|
onChange={(e) => setLocation(e.target.value)}
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className={styles.formItem}>
|
|
|
|
|
|
|
|
<label className={styles.label}>视频监控画面</label>
|
|
|
|
|
|
|
|
<div className={styles.videoContainer}>
|
|
|
|
|
|
|
|
<div className={styles.videoPlaceholder}>
|
|
|
|
|
|
|
|
{/* 视频占位图 */}
|
|
|
|
|
|
|
|
<div className={styles.videoImage}>
|
|
|
|
|
|
|
|
<div className={styles.cityscape}></div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className={styles.videoControls}>
|
|
|
|
|
|
|
|
<LeftOutlined className={styles.controlIcon} />
|
|
|
|
|
|
|
|
<PlayCircleOutlined className={styles.controlIcon} />
|
|
|
|
|
|
|
|
<InfoCircleOutlined className={styles.controlIcon} />
|
|
|
|
|
|
|
|
<RightOutlined className={styles.controlIcon} />
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className={styles.videoButtons}>
|
|
|
|
|
|
|
|
<Button type="primary">搜索监控点</Button>
|
|
|
|
|
|
|
|
<Button type="primary">播放实时画面</Button>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className={styles.formItem}>
|
|
|
|
|
|
|
|
<label className={styles.label}>视频核实记录</label>
|
|
|
|
|
|
|
|
<TextArea
|
|
|
|
|
|
|
|
placeholder="记录视频核实情况..."
|
|
|
|
|
|
|
|
rows={3}
|
|
|
|
|
|
|
|
value={videoRecord}
|
|
|
|
|
|
|
|
onChange={(e) => setVideoRecord(e.target.value)}
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{/* c块:信息推送 */}
|
|
|
|
|
|
|
|
<div className={styles.blockA_c}>
|
|
|
|
|
|
|
|
<div className={styles.cardHeader}>
|
|
|
|
|
|
|
|
<SendOutlined className={styles.headerIcon} />
|
|
|
|
|
|
|
|
<span className={styles.headerText}>信息推送</span>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className={styles.cardContent}>
|
|
|
|
|
|
|
|
<div className={styles.formItem}>
|
|
|
|
|
|
|
|
<label className={styles.label}>推送对象</label>
|
|
|
|
|
|
|
|
<div className={styles.checkboxGroup}>
|
|
|
|
|
|
|
|
<Checkbox
|
|
|
|
|
|
|
|
checked={pushTargets['director-li']}
|
|
|
|
|
|
|
|
onChange={(e) => handlePushTargetChange('director-li', e.target.checked)}
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
现场指挥中心-李主任
|
|
|
|
|
|
|
|
</Checkbox>
|
|
|
|
|
|
|
|
<Checkbox
|
|
|
|
|
|
|
|
checked={pushTargets['captain-zhang']}
|
|
|
|
|
|
|
|
onChange={(e) => handlePushTargetChange('captain-zhang', e.target.checked)}
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
消防救援队-张队长
|
|
|
|
|
|
|
|
</Checkbox>
|
|
|
|
|
|
|
|
<Checkbox
|
|
|
|
|
|
|
|
checked={pushTargets['professor-wang']}
|
|
|
|
|
|
|
|
onChange={(e) => handlePushTargetChange('professor-wang', e.target.checked)}
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
应急专家组-王教授
|
|
|
|
|
|
|
|
</Checkbox>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className={styles.formItem}>
|
|
|
|
|
|
|
|
<label className={styles.label}>事件类型</label>
|
|
|
|
|
|
|
|
<Select
|
|
|
|
|
|
|
|
placeholder="选择应急预案"
|
|
|
|
|
|
|
|
suffixIcon={<RightOutlined />}
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<Option value="plan1">应急预案1</Option>
|
|
|
|
|
|
|
|
<Option value="plan2">应急预案2</Option>
|
|
|
|
|
|
|
|
</Select>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className={styles.formItem}>
|
|
|
|
|
|
|
|
<label className={styles.label}>推送方式</label>
|
|
|
|
|
|
|
|
<div className={styles.checkboxGroupHorizontal}>
|
|
|
|
|
|
|
|
<Checkbox
|
|
|
|
|
|
|
|
checked={pushMethod['sms']}
|
|
|
|
|
|
|
|
onChange={(e) => handlePushMethodChange('sms', e.target.checked)}
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
短信
|
|
|
|
|
|
|
|
</Checkbox>
|
|
|
|
|
|
|
|
<Checkbox
|
|
|
|
|
|
|
|
checked={pushMethod['email']}
|
|
|
|
|
|
|
|
onChange={(e) => handlePushMethodChange('email', e.target.checked)}
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
邮件
|
|
|
|
|
|
|
|
</Checkbox>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<Button type="primary" className={styles.pushButton}>
|
|
|
|
|
|
|
|
立即推送
|
|
|
|
|
|
|
|
</Button>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{/* d块:事件列表 */}
|
|
|
|
|
|
|
|
<div className={styles.blockA_d}>
|
|
|
|
|
|
|
|
<div className={styles.blockA_d_header}>
|
|
|
|
|
|
|
|
<div className={styles.titleBar}></div>
|
|
|
|
|
|
|
|
<span className={styles.titleText}>事件列表</span>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className={styles.eventList}>
|
|
|
|
|
|
|
|
{eventListData.map(item => (
|
|
|
|
|
|
|
|
<div key={item.key} className={styles.eventItem}>
|
|
|
|
|
|
|
|
<div className={styles.eventItemHeader}>
|
|
|
|
|
|
|
|
<span className={styles.eventTitle}>{item.title}</span>
|
|
|
|
|
|
|
|
<Tag color={item.statusColor}>{item.status}</Tag>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className={styles.eventItemFooter}>
|
|
|
|
|
|
|
|
<div className={styles.eventTime}>
|
|
|
|
|
|
|
|
<ClockCircleOutlined className={styles.timeIcon} />
|
|
|
|
|
|
|
|
<span>{item.time}</span>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className={styles.eventStatus}>
|
|
|
|
|
|
|
|
<span className={styles.currentStatus}>{item.currentStatus}</span>
|
|
|
|
|
|
|
|
<span className={styles.eventId}>ID: {item.id}</span>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
))}
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{/* B块:推送记录 */}
|
|
|
|
|
|
|
|
<div className={styles.blockB}>
|
|
|
|
|
|
|
|
<div className={styles.blockB_header}>
|
|
|
|
|
|
|
|
<div className={styles.titleBar}></div>
|
|
|
|
|
|
|
|
<span className={styles.titleText}>推送记录</span>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div className={styles.tableContent}>
|
|
|
|
|
|
|
|
<StandardTable
|
|
|
|
|
|
|
|
data={pushRecordData}
|
|
|
|
|
|
|
|
columns={pushRecordColumns}
|
|
|
|
|
|
|
|
rowKey="key"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
export default EventNotification;
|
|
|
|
export default EventNotification;
|
|
|
|
|
|
|
|
|
|
|
|
|