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
| import { Spin } from 'ant-design-vue'
|
| export const PageLoading = {
| name: 'PageLoading',
| props: {
| tip: {
| type: String,
| default: 'Loading..'
| },
| size: {
| type: String,
| default: 'large'
| }
| },
| render () {
| const style = {
| textAlign: 'center',
| background: 'rgba(0,0,0,0.6)',
| position: 'fixed',
| top: 0,
| bottom: 0,
| left: 0,
| right: 0,
| zIndex: 1100
| }
| const spinStyle = {
| position: 'absolute',
| left: '50%',
| top: '40%',
| transform: 'translate(-50%, -50%)'
| }
| return (<div style={style}>
| <Spin size={this.size} style={spinStyle} tip={this.tip} />
| </div>)
| }
| }
|
| const version = '0.0.1'
| const loading = {}
|
| loading.newInstance = (Vue, options) => {
| let loadingElement = document.querySelector('body>div[type=loading]')
| if (!loadingElement) {
| loadingElement = document.createElement('div')
| loadingElement.setAttribute('type', 'loading')
| loadingElement.setAttribute('class', 'ant-loading-wrapper')
| document.body.appendChild(loadingElement)
| }
|
| const cdProps = Object.assign({ visible: false, size: 'large', tip: 'Loading...' }, options)
|
| const instance = new Vue({
| data () {
| return {
| ...cdProps
| }
| },
| render () {
| const { tip } = this
| const props = {}
| this.tip && (props.tip = tip)
| if (this.visible) {
| return <PageLoading { ...{ props } } />
| }
| return null
| }
| }).$mount(loadingElement)
|
| function update (config) {
| const { visible, size, tip } = { ...cdProps, ...config }
| instance.$set(instance, 'visible', visible)
| if (tip) {
| instance.$set(instance, 'tip', tip)
| }
| if (size) {
| instance.$set(instance, 'size', size)
| }
| }
|
| return {
| instance,
| update
| }
| }
|
| const api = {
| show: function (options) {
| this.instance.update({ ...options, visible: true })
| },
| hide: function () {
| this.instance.update({ visible: false })
| }
| }
|
| const install = function (Vue, options) {
| if (Vue.prototype.$loading) {
| return
| }
| api.instance = loading.newInstance(Vue, options)
| Vue.prototype.$loading = api
| }
|
| export default {
| version,
| install
| }
|
|