diff --git a/src/components/dict/Dict.js b/src/components/dict/Dict.js new file mode 100644 index 0000000..80d046e --- /dev/null +++ b/src/components/dict/Dict.js @@ -0,0 +1,29 @@ +import Vue from 'vue' +import { get as getDictDetail } from '@/api/dictDetail' + +export default class Dict { + constructor (dict) { + this.dict = dict + } + + async init (names, completeCallback) { + if (names === undefined || name === null) { + throw new Error('need dict names') + } + const ps = [] + names.forEach(n => { + Vue.set(this.dict.dict, n, {}) + Vue.set(this.dict.label, n, {}) + Vue.set(this.dict, n, []) + ps.push(getDictDetail(n).then(data => { + this.dict[n].splice(0, 0, ...data.content) + data.content.forEach(d => { + Vue.set(this.dict.dict[n], d.value, d) + Vue.set(this.dict.label[n], d.value, d.label) + }) + })) + }) + await Promise.all(ps) + completeCallback() + } +} diff --git a/src/components/dict/index.js b/src/components/dict/index.js new file mode 100644 index 0000000..4d27a7b --- /dev/null +++ b/src/components/dict/index.js @@ -0,0 +1,29 @@ +import Dict from './Dict' + +const install = function (Vue) { + Vue.mixin({ + data () { + if (this.$options.dicts instanceof Array) { + const dict = { + dict: {}, + label: {}, + } + return { + dict, + } + } + return {} + }, + created () { + if (this.$options.dicts instanceof Array) { + new Dict(this.dict).init(this.$options.dicts, () => { + this.$nextTick(() => { + this.$emit('dictReady') + }) + }) + } + }, + }) +} + +export default { install } diff --git a/src/main.js b/src/main.js index 905dfa8..dca6efa 100644 --- a/src/main.js +++ b/src/main.js @@ -11,6 +11,7 @@ import '@/styles/index.scss' // global css import App from './App' import router from './router/routers' import permission from './components/permission' +import dict from './components/dict' import store from './store' import '@/icons' // icon @@ -19,6 +20,7 @@ import './router/index' // permission control Vue.use(mavonEditor) Vue.use(permission) +Vue.use(dict) Vue.use(ElementUI, { locale }) Vue.config.productionTip = false diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue index 0859757..460486d 100644 --- a/src/views/system/user/index.vue +++ b/src/views/system/user/index.vue @@ -1,7 +1,7 @@