1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
| import Notification from '../base/notification';
|
| const prefixCls = 'ivu-message';
| const iconPrefixCls = 'ivu-icon';
| const prefixKey = 'ivu_message_key_';
|
| const defaults = {
| top: 24,
| duration: 1.5
| };
|
| let messageInstance;
| let name = 1;
|
| const iconTypes = {
| 'info': 'ios-information-circle',
| 'success': 'ios-checkmark-circle',
| 'warning': 'ios-alert',
| 'error': 'ios-close-circle',
| 'loading': 'ios-loading'
| };
|
| function getMessageInstance () {
| messageInstance = messageInstance || Notification.newInstance({
| prefixCls: prefixCls,
| styles: {
| top: `${defaults.top}px`
| }
| });
|
| return messageInstance;
| }
|
| function notice (content = '', duration = defaults.duration, type, onClose = function () {}, closable = false, render = function () {}, background = false) {
| const iconType = iconTypes[type];
|
| // if loading
| const loadCls = type === 'loading' ? ' ivu-load-loop' : '';
|
| let instance = getMessageInstance();
|
| instance.notice({
| name: `${prefixKey}${name}`,
| duration: duration,
| styles: {},
| transitionName: 'move-up',
| content: `
| <div class="${prefixCls}-custom-content ${prefixCls}-${type}">
| <i class="${iconPrefixCls} ${iconPrefixCls}-${iconType} ${loadCls}"></i>
| <span>${content}</span>
| </div>
| `,
| render: render,
| onClose: onClose,
| closable: closable,
| type: 'message',
| msgType: type,
| background: background
| });
|
| // 用于手动消除
| return (function () {
| let target = name++;
|
| return function () {
| instance.remove(`${prefixKey}${target}`);
| };
| })();
| }
|
| export default {
| name: 'Message',
|
| info (options) {
| return this.message('info', options);
| },
| success (options) {
| return this.message('success', options);
| },
| warning (options) {
| return this.message('warning', options);
| },
| error (options) {
| return this.message('error', options);
| },
| loading (options) {
| return this.message('loading', options);
| },
| message(type, options){
| if (typeof options === 'string') {
| options = {
| content: options
| };
| }
| return notice(options.content, options.duration, type, options.onClose, options.closable, options.render, options.background);
| },
| config (options) {
| if (options.top || options.top === 0) {
| defaults.top = options.top;
| }
| if (options.duration || options.duration === 0) {
| defaults.duration = options.duration;
| }
| },
| destroy () {
| let instance = getMessageInstance();
| messageInstance = null;
| instance.destroy('ivu-message');
| }
| };
|
|