import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core'; import { NoticeIconList, NoticeIconSelect, NoticeItem } from '@delon/abc/notice-icon'; import { add, formatDistanceToNow, parse } from 'date-fns'; import { NzI18nService } from 'ng-zorro-antd/i18n'; import { NzMessageService } from 'ng-zorro-antd/message'; @Component({ selector: 'header-notify', template: ` `, changeDetection: ChangeDetectionStrategy.OnPush }) export class HeaderNotifyComponent { data: NoticeItem[] = [ { title: '告警通知', list: [], emptyText: '暂无告警通知', emptyImage: 'https://gw.alipayobjects.com/zos/rmsportal/wAhyIChODzsoKIOBHcBk.svg', clearText: '清空告警' } ]; count = 5; loading = false; constructor(private msg: NzMessageService, private nzI18n: NzI18nService, private cdr: ChangeDetectorRef) {} private updateNoticeData(notices: NoticeIconList[]): NoticeItem[] { const data = this.data.slice(); data.forEach(i => (i.list = [])); notices.forEach(item => { const newItem = { ...item } as NoticeIconList; if (typeof newItem.datetime === 'string') { newItem.datetime = parse(newItem.datetime, 'yyyy-MM-dd', new Date()); } if (newItem.datetime) { newItem.datetime = formatDistanceToNow(newItem.datetime as Date, { locale: this.nzI18n.getDateLocale() }); } if (newItem.extra && newItem.status) { newItem.color = ( { todo: undefined, processing: 'blue', urgent: 'red', doing: 'gold' } as { [key: string]: string | undefined } )[newItem.status]; } data.find(w => w.title === newItem.type)!.list.push(newItem); }); return data; } loadData(): void { if (this.loading) { return; } this.loading = true; setTimeout(() => { const now = new Date(); this.data = this.updateNoticeData([ { id: '000000001', avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png', title: '监控-MYSQL_192.135.34.2-发出2级告警', datetime: add(now, { days: 10 }), type: '告警通知' }, { id: '000000002', avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png', title: '监控-MYSQL_192.135.44.2-发出1级告警', datetime: add(now, { days: -3 }), type: '告警通知' }, { id: '000000003', avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png', title: '监控-WEBSITE_www.baidu.com-发出4级告警', datetime: add(now, { months: -3 }), read: true, type: '告警通知' }, { id: '000000004', avatar: 'https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png', title: '监控-REDIS_192.34.55.3-发出4级告警', datetime: add(now, { years: -1 }), type: '告警通知' }, { id: '000000005', avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png', title: '监控-REDIS_192.34.55.6-发出4级告警', datetime: '2020-08-07', type: '告警通知' } ]); this.loading = false; this.cdr.detectChanges(); }, 500); } clear(type: string): void { this.loading = true; setTimeout(() => { this.data = this.updateNoticeData([]); this.loading = false; this.cdr.detectChanges(); }, 500); this.msg.success(`已清空 ${type}`); } select(res: NoticeIconSelect): void { this.msg.success(`点击了 ${res.title} 的 ${res.item.title}`); } }