Files
vxe-table/examples/plugins/ajax.js
xuliangzhan 8c8b209903 内部优化
2020-01-06 18:22:27 +08:00

63 lines
1.4 KiB
JavaScript

import Vue from 'vue'
import XEUtils from 'xe-utils'
import XEAjax from 'xe-ajax'
// 挂载到 vue 实例中
Vue.prototype.$ajax = XEAjax
/**
* 生成模拟数据
*/
const columnsWorker = new Worker('static/worker/columns.js')
const dataWorker = new Worker('static/worker/data.js')
const callMaps = {}
const dataMaps = {}
const colMaps = {}
columnsWorker.onmessage = function (evnt) {
var rest = evnt.data
if (rest && callMaps[rest.key]) {
colMaps[rest.columns.length] = rest.columns.slice(0)
callMaps[rest.key](rest.columns)
delete callMaps[rest.key]
}
}
dataWorker.onmessage = function (evnt) {
var rest = evnt.data
if (rest && callMaps[rest.key]) {
dataMaps[rest.list.length] = rest.list.slice(0)
callMaps[rest.key](rest.list)
delete callMaps[rest.key]
}
}
XEAjax.mixin({
mockColumns (size) {
return new Promise(resolve => {
const key = XEUtils.uniqueId()
setTimeout(() => {
if (colMaps[size]) {
resolve(colMaps[size])
} else {
callMaps[key] = resolve
columnsWorker.postMessage({ key, size })
}
}, 100)
})
},
mockList (size) {
return new Promise(resolve => {
const key = XEUtils.uniqueId()
setTimeout(() => {
if (dataMaps[size]) {
resolve(dataMaps[size])
} else {
callMaps[key] = resolve
dataWorker.postMessage({ key, size })
}
}, 100)
})
}
})