mirror of
https://github.com/cool-team-official/cool-admin-vue.git
synced 2024-11-02 06:33:40 +08:00
151 lines
2.6 KiB
JavaScript
151 lines
2.6 KiB
JavaScript
|
import Vue from "vue";
|
|||
|
import Cool from "cool";
|
|||
|
import store from '@/store'
|
|||
|
import router from '@/router'
|
|||
|
import { deepMerge, isFunction, isObject } from "../utils";
|
|||
|
|
|||
|
export default function (options = {}) {
|
|||
|
if (!options.events) {
|
|||
|
options.events = {};
|
|||
|
}
|
|||
|
|
|||
|
// 组件模块
|
|||
|
let componentModules = [];
|
|||
|
|
|||
|
// 组件列表
|
|||
|
let components = [];
|
|||
|
|
|||
|
// 安装组件
|
|||
|
function install(comp) {
|
|||
|
let { store: _store, components, service, directives, filters, pages, views, name } = comp;
|
|||
|
let { onInstall, onSuccess, onFail } = options.events[name] || {};
|
|||
|
|
|||
|
try {
|
|||
|
const next = () => {
|
|||
|
// 注册vuex模块
|
|||
|
if (_store) {
|
|||
|
for (let i in _store) {
|
|||
|
store.registerModule(`${name}-${i}`, _store[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 注册组件
|
|||
|
if (components) {
|
|||
|
for (let i in components) {
|
|||
|
Vue.component(components[i].name, components[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 注册请求服务
|
|||
|
if (service) {
|
|||
|
deepMerge(store.$service, service);
|
|||
|
}
|
|||
|
|
|||
|
// 注册指令
|
|||
|
if (directives) {
|
|||
|
for (let i in directives) {
|
|||
|
Vue.directive(i, directives[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 注册过滤器
|
|||
|
if (filters) {
|
|||
|
for (let i in filters) {
|
|||
|
Vue.filter(i, filters[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 注册页面
|
|||
|
if (pages) {
|
|||
|
pages.forEach((e) => {
|
|||
|
router.addRoute(e);
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
// 注册视图
|
|||
|
if (views) {
|
|||
|
views.forEach((e) => {
|
|||
|
if (!e.meta) {
|
|||
|
e.meta = {};
|
|||
|
}
|
|||
|
|
|||
|
if (e.moduleName) {
|
|||
|
componentModules.push(e);
|
|||
|
} else {
|
|||
|
e.meta.label = e.label;
|
|||
|
|
|||
|
if (e.path) {
|
|||
|
router.$plugin.addViews([e], {
|
|||
|
ignore404: true
|
|||
|
});
|
|||
|
} else {
|
|||
|
console.error(`[${name}-views]:path in null`);
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
// 包安装成功
|
|||
|
if (onSuccess) onSuccess(comp);
|
|||
|
};
|
|||
|
|
|||
|
// 安装前
|
|||
|
if (onInstall) {
|
|||
|
onInstall(comp, { next });
|
|||
|
} else {
|
|||
|
next();
|
|||
|
}
|
|||
|
} catch (e) {
|
|||
|
console.error(e);
|
|||
|
|
|||
|
// 安装失败
|
|||
|
if (onFail) onFail(comp, e);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 解析组件
|
|||
|
Cool.components.map((e) => {
|
|||
|
if (!e) {
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
let comp = null;
|
|||
|
|
|||
|
if (isObject(e)) {
|
|||
|
comp = e;
|
|||
|
} else {
|
|||
|
comp = {
|
|||
|
name: e[0],
|
|||
|
value: e[1],
|
|||
|
options: e[2]
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
if (comp.value) {
|
|||
|
if (isFunction(comp.value.install)) {
|
|||
|
comp.value = comp.value.install(Vue, comp.options);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 是否开启
|
|||
|
if (comp.options && comp.options.enable === false) {
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
if (comp) {
|
|||
|
comp = {
|
|||
|
name: comp.name,
|
|||
|
options: comp.options,
|
|||
|
...comp.value
|
|||
|
};
|
|||
|
|
|||
|
components.push(comp);
|
|||
|
install(comp);
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
// 设置缓存
|
|||
|
store.commit("SET_COMPONENT_MODULES", componentModules);
|
|||
|
store.commit("SET_COMPONENT", components);
|
|||
|
}
|