|
|
@@ -3,32 +3,94 @@ order: 2
|
|
|
title: 带浮层卡片
|
|
|
---
|
|
|
|
|
|
-点击展开通知卡片,展现多种类型的通知,通常放在顶部通栏。
|
|
|
+点击展开通知卡片,展现多种类型的通知,通常放在导航工具栏。
|
|
|
|
|
|
````jsx
|
|
|
import NoticeIcon from 'ant-design-pro/lib/NoticeIcon';
|
|
|
import moment from 'moment';
|
|
|
+import groupBy from 'lodash/groupBy';
|
|
|
import { Tag } from 'antd';
|
|
|
|
|
|
const data = [{
|
|
|
- key: '1',
|
|
|
+ id: '000000001',
|
|
|
+ avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png',
|
|
|
+ title: '你收到了 14 份新周报',
|
|
|
+ datetime: '2017-08-09',
|
|
|
+ type: '通知',
|
|
|
+}, {
|
|
|
+ id: '000000002',
|
|
|
+ avatar: 'https://gw.alipayobjects.com/zos/rmsportal/OKJXDXrmkNshAMvwtvhu.png',
|
|
|
+ title: '你推荐的 曲妮妮 已通过第三轮面试',
|
|
|
+ datetime: '2017-08-08',
|
|
|
+ type: '通知',
|
|
|
+}, {
|
|
|
+ id: '000000003',
|
|
|
+ avatar: 'https://gw.alipayobjects.com/zos/rmsportal/kISTdvpyTAhtGxpovNWd.png',
|
|
|
+ title: '这种模板可以区分多种通知类型',
|
|
|
+ datetime: '2017-08-07',
|
|
|
+ read: true,
|
|
|
+ type: '通知',
|
|
|
+}, {
|
|
|
+ id: '000000004',
|
|
|
+ avatar: 'https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png',
|
|
|
+ title: '左侧图标用于区分不同的类型',
|
|
|
+ datetime: '2017-08-07',
|
|
|
+ type: '通知',
|
|
|
+}, {
|
|
|
+ id: '000000005',
|
|
|
+ avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png',
|
|
|
+ title: '内容不要超过两行字,超出时自动截断',
|
|
|
+ datetime: '2017-08-07',
|
|
|
+ type: '通知',
|
|
|
+}, {
|
|
|
+ id: '000000006',
|
|
|
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg',
|
|
|
title: '曲丽丽 评论了你',
|
|
|
description: '描述信息描述信息描述信息',
|
|
|
- datetime: moment('2017-08-07').fromNow(),
|
|
|
+ datetime: '2017-08-07',
|
|
|
+ type: '消息',
|
|
|
}, {
|
|
|
- key: '2',
|
|
|
+ id: '000000007',
|
|
|
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg',
|
|
|
title: '朱偏右 回复了你',
|
|
|
description: '这种模板用于提醒谁与你发生了互动,左侧放『谁』的头像',
|
|
|
- datetime: moment('2017-08-07').fromNow(),
|
|
|
+ datetime: '2017-08-07',
|
|
|
+ type: '消息',
|
|
|
}, {
|
|
|
- key: '3',
|
|
|
+ id: '000000008',
|
|
|
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg',
|
|
|
title: '标题',
|
|
|
description: '这种模板用于提醒谁与你发生了互动,左侧放『谁』的头像',
|
|
|
- datetime: moment('2017-08-07').fromNow(),
|
|
|
- extra: <Tag color="red" style={{ marginRight: 0 }}>标签</Tag>,
|
|
|
+ datetime: '2017-08-07',
|
|
|
+ type: '消息',
|
|
|
+}, {
|
|
|
+ id: '000000009',
|
|
|
+ title: '任务名称',
|
|
|
+ description: '任务需要在 2017-01-12 20:00 前启动',
|
|
|
+ extra: '未开始',
|
|
|
+ status: 'todo',
|
|
|
+ type: '待办',
|
|
|
+}, {
|
|
|
+ id: '000000010',
|
|
|
+ title: '第三方紧急代码变更',
|
|
|
+ description: '冠霖提交于 2017-01-06,需在 2017-01-07 前完成代码变更任务',
|
|
|
+ extra: '马上到期',
|
|
|
+ status: 'urgent',
|
|
|
+ type: '待办',
|
|
|
+}, {
|
|
|
+ id: '000000011',
|
|
|
+ title: '信息安全考试',
|
|
|
+ description: '指派竹尔于 2017-01-09 前完成更新并发布',
|
|
|
+ extra: '已耗时 8 天',
|
|
|
+ status: 'doing',
|
|
|
+ type: '待办',
|
|
|
+}, {
|
|
|
+ id: '000000012',
|
|
|
+ title: 'ABCD 版本发布',
|
|
|
+ description: '冠霖提交于 2017-01-06,需在 2017-01-07 前完成代码变更任务',
|
|
|
+ extra: '进行中',
|
|
|
+ status: 'processing',
|
|
|
+ type: '待办',
|
|
|
}];
|
|
|
|
|
|
function onItemClick(item, tabProps) {
|
|
|
@@ -39,6 +101,35 @@ function onClear(tabTitle) {
|
|
|
console.log(tabTitle);
|
|
|
}
|
|
|
|
|
|
+function getNoticeData(notices) {
|
|
|
+ if (notices.length === 0) {
|
|
|
+ return {};
|
|
|
+ }
|
|
|
+ const newNotices = notices.map((notice) => {
|
|
|
+ const newNotice = { ...notice };
|
|
|
+ if (newNotice.datetime) {
|
|
|
+ newNotice.datetime = moment(notice.datetime).fromNow();
|
|
|
+ }
|
|
|
+ // transform id to item key
|
|
|
+ if (newNotice.id) {
|
|
|
+ newNotice.key = newNotice.id;
|
|
|
+ }
|
|
|
+ if (newNotice.extra && newNotice.status) {
|
|
|
+ const color = ({
|
|
|
+ todo: '',
|
|
|
+ processing: 'blue',
|
|
|
+ urgent: 'red',
|
|
|
+ doing: 'gold',
|
|
|
+ })[newNotice.status];
|
|
|
+ newNotice.extra = <Tag color={color} style={{ marginRight: 0 }}>{newNotice.extra}</Tag>;
|
|
|
+ }
|
|
|
+ return newNotice;
|
|
|
+ });
|
|
|
+ return groupBy(newNotices, 'type');
|
|
|
+}
|
|
|
+
|
|
|
+const noticeData = getNoticeData(data);
|
|
|
+
|
|
|
ReactDOM.render(
|
|
|
<div
|
|
|
style={{
|
|
|
@@ -50,21 +141,27 @@ ReactDOM.render(
|
|
|
width: '400px',
|
|
|
}}
|
|
|
>
|
|
|
- <NoticeIcon count={5} onItemClick={onItemClick} onClear={onClear}>
|
|
|
+ <NoticeIcon
|
|
|
+ className="notice-icon"
|
|
|
+ count={5}
|
|
|
+ onItemClick={onItemClick}
|
|
|
+ onClear={onClear}
|
|
|
+ popupAlign={{ offset: [20, -16] }}
|
|
|
+ >
|
|
|
<NoticeIcon.Tab
|
|
|
- list={data}
|
|
|
+ list={noticeData['通知']}
|
|
|
title="通知"
|
|
|
emptyText="你已查看所有通知"
|
|
|
emptyImage="https://gw.alipayobjects.com/zos/rmsportal/wAhyIChODzsoKIOBHcBk.svg"
|
|
|
/>
|
|
|
<NoticeIcon.Tab
|
|
|
- list={data}
|
|
|
+ list={noticeData['消息']}
|
|
|
title="消息"
|
|
|
emptyText="您已读完所有消息"
|
|
|
emptyImage="https://gw.alipayobjects.com/zos/rmsportal/sAuJeJzSKbUmHfBQRzmZ.svg"
|
|
|
/>
|
|
|
<NoticeIcon.Tab
|
|
|
- list={data}
|
|
|
+ list={noticeData['待办']}
|
|
|
title="待办"
|
|
|
emptyText="你已完成所有待办"
|
|
|
emptyImage="https://gw.alipayobjects.com/zos/rmsportal/HsIsxMZiWKrNUavQUXqx.svg"
|
|
|
@@ -73,3 +170,7 @@ ReactDOM.render(
|
|
|
</div>
|
|
|
, mountNode);
|
|
|
````
|
|
|
+
|
|
|
+```css
|
|
|
+
|
|
|
+```
|