123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- 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);
- }
|