be966e9f
梁灏
add Modal component
|
1
2
|
import Vue from 'vue';
import Modal from './modal.vue';
|
77cf1cd5
Aresn
$Modal support SSR
|
3
|
import Button from '../button/button.vue';
|
e5337c81
梁灏
fixed some compon...
|
4
|
import Locale from '../../mixins/locale';
|
be966e9f
梁灏
add Modal component
|
5
6
7
8
9
10
|
const prefixCls = 'ivu-modal-confirm';
Modal.newInstance = properties => {
const _props = properties || {};
|
77cf1cd5
Aresn
$Modal support SSR
|
11
|
const Instance = new Vue({
|
e5337c81
梁灏
fixed some compon...
|
12
|
mixins: [ Locale ],
|
77cf1cd5
Aresn
$Modal support SSR
|
13
|
data: Object.assign({}, _props, {
|
be966e9f
梁灏
add Modal component
|
14
15
16
17
18
19
|
visible: false,
width: 416,
title: '',
body: '',
iconType: '',
iconName: '',
|
e5337c81
梁灏
fixed some compon...
|
20
21
|
okText: undefined,
cancelText: undefined,
|
be966e9f
梁灏
add Modal component
|
22
23
|
showCancel: false,
loading: false,
|
a87da689
Rijn
added scrollable ...
|
24
|
buttonLoading: false,
|
34324f28
zhigang.li
add closable prop...
|
25
|
scrollable: false,
|
504f8c52
梁灏
update Modal
|
26
|
closable: false
|
be966e9f
梁灏
add Modal component
|
27
|
}),
|
77cf1cd5
Aresn
$Modal support SSR
|
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
render (h) {
let footerVNodes = [];
if (this.showCancel) {
footerVNodes.push(h(Button, {
props: {
type: 'text',
size: 'large'
},
on: {
click: this.cancel
}
}, this.localeCancelText));
}
footerVNodes.push(h(Button, {
props: {
type: 'primary',
size: 'large',
loading: this.buttonLoading
},
on: {
click: this.ok
}
}, this.localeOkText));
|
3ef24d5f
Aresn
$Modal support re...
|
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
|
// render content
let body_render;
if (this.render) {
body_render = h('div', {
attrs: {
class: `${prefixCls}-body ${prefixCls}-body-render`
}
}, [this.render(h)]);
} else {
body_render = h('div', {
attrs: {
class: `${prefixCls}-body`
}
}, [
h('div', {
class: this.iconTypeCls
}, [
h('i', {
class: this.iconNameCls
})
]),
h('div', {
domProps: {
innerHTML: this.body
}
})
]);
}
|
77cf1cd5
Aresn
$Modal support SSR
|
81
82
83
|
return h(Modal, {
props: Object.assign({}, _props, {
width: this.width,
|
34324f28
zhigang.li
add closable prop...
|
84
85
|
scrollable: this.scrollable,
closable: this.closable
|
77cf1cd5
Aresn
$Modal support SSR
|
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
}),
domProps: {
value: this.visible
},
on: {
input: (status) => {
this.visible = status;
}
}
}, [
h('div', {
attrs: {
class: prefixCls
}
}, [
h('div', {
attrs: {
class: `${prefixCls}-head`
}
|
48e7799e
Aresn
update $Modal
|
105
106
107
108
109
110
111
112
113
114
|
}, [
h('div', {
attrs: {
class: `${prefixCls}-head-title`
},
domProps: {
innerHTML: this.title
}
})
]),
|
3ef24d5f
Aresn
$Modal support re...
|
115
|
body_render,
|
77cf1cd5
Aresn
$Modal support SSR
|
116
117
118
119
120
121
122
123
|
h('div', {
attrs: {
class: `${prefixCls}-footer`
}
}, footerVNodes)
])
]);
},
|
be966e9f
梁灏
add Modal component
|
124
125
126
|
computed: {
iconTypeCls () {
return [
|
66993732
梁灏
update Modal、Poptip
|
127
128
|
`${prefixCls}-body-icon`,
`${prefixCls}-body-icon-${this.iconType}`
|
b0893113
jingsam
add eslint
|
129
|
];
|
be966e9f
梁灏
add Modal component
|
130
131
132
133
134
|
},
iconNameCls () {
return [
'ivu-icon',
`ivu-icon-${this.iconName}`
|
b0893113
jingsam
add eslint
|
135
|
];
|
e5337c81
梁灏
fixed some compon...
|
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
},
localeOkText () {
if (this.okText) {
return this.okText;
} else {
return this.t('i.modal.okText');
}
},
localeCancelText () {
if (this.cancelText) {
return this.cancelText;
} else {
return this.t('i.modal.cancelText');
}
|
be966e9f
梁灏
add Modal component
|
150
151
152
153
|
}
},
methods: {
cancel () {
|
6259471f
梁灏
support Modal
|
154
|
this.$children[0].visible = false;
|
be966e9f
梁灏
add Modal component
|
155
156
157
158
159
160
161
162
|
this.buttonLoading = false;
this.onCancel();
this.remove();
},
ok () {
if (this.loading) {
this.buttonLoading = true;
} else {
|
6259471f
梁灏
support Modal
|
163
|
this.$children[0].visible = false;
|
be966e9f
梁灏
add Modal component
|
164
165
166
167
168
169
170
171
172
173
174
|
this.remove();
}
this.onOk();
},
remove () {
setTimeout(() => {
this.destroy();
}, 300);
},
destroy () {
this.$destroy();
|
6259471f
梁灏
support Modal
|
175
|
document.body.removeChild(this.$el);
|
be966e9f
梁灏
add Modal component
|
176
177
178
179
180
181
|
this.onRemove();
},
onOk () {},
onCancel () {},
onRemove () {}
}
|
77cf1cd5
Aresn
$Modal support SSR
|
182
183
184
185
186
|
});
const component = Instance.$mount();
document.body.appendChild(component.$el);
const modal = Instance.$children[0];
|
be966e9f
梁灏
add Modal component
|
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
|
return {
show (props) {
modal.$parent.showCancel = props.showCancel;
modal.$parent.iconType = props.icon;
switch (props.icon) {
case 'info':
modal.$parent.iconName = 'information-circled';
break;
case 'success':
modal.$parent.iconName = 'checkmark-circled';
break;
case 'warning':
modal.$parent.iconName = 'android-alert';
break;
case 'error':
modal.$parent.iconName = 'close-circled';
break;
case 'confirm':
modal.$parent.iconName = 'help-circled';
break;
}
if ('width' in props) {
modal.$parent.width = props.width;
}
|
34324f28
zhigang.li
add closable prop...
|
215
216
217
218
|
if ('closable' in props) {
modal.$parent.closable = props.closable;
}
|
be966e9f
梁灏
add Modal component
|
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
|
if ('title' in props) {
modal.$parent.title = props.title;
}
if ('content' in props) {
modal.$parent.body = props.content;
}
if ('okText' in props) {
modal.$parent.okText = props.okText;
}
if ('cancelText' in props) {
modal.$parent.cancelText = props.cancelText;
}
if ('onCancel' in props) {
modal.$parent.onCancel = props.onCancel;
}
if ('onOk' in props) {
modal.$parent.onOk = props.onOk;
}
// async for ok
if ('loading' in props) {
modal.$parent.loading = props.loading;
}
|
a87da689
Rijn
added scrollable ...
|
248
249
250
251
|
if ('scrollable' in props) {
modal.$parent.scrollable = props.scrollable;
}
|
be966e9f
梁灏
add Modal component
|
252
253
254
255
256
257
258
259
260
261
262
|
// notice when component destroy
modal.$parent.onRemove = props.onRemove;
modal.visible = true;
},
remove () {
modal.visible = false;
modal.$parent.buttonLoading = false;
modal.$parent.remove();
},
component: modal
|
b0893113
jingsam
add eslint
|
263
|
};
|
be966e9f
梁灏
add Modal component
|
264
265
266
|
};
export default Modal;
|