修改项目设置,准备发包
笑笑 编写于 2023-03-17 18:26:54
NewLife.CubeVue
import { createApi } from '@/api';
import LayoutAntdv from '@/layouts/antdv/index.vue';
import { AppMain, Navbar, Sidebar } from '@/layouts/default/components/index';
import LayoutDefault from '@/layouts/default/index.vue';
import '@/styles/index.scss'; // global css
import { createAxios } from '@/utils/request';
import * as ElementIcons from '@element-plus/icons-vue';
import * as Element from 'element-plus';
import { createRouter } from './router';
import { fileContext } from './services/file-context';
import { createStore } from './store';
import { getMenu } from './utils/menu';

// const files = require.context('@/', true, /^.*\.(vue|tsx)$/);
// tslint:disable-next-line:whitespace
const files = import.meta.glob('@/**/*.(vue|tsx)', { eager: true });

// 注入视图文件
fileContext.addFiles(files);

const install: any = (app: any) => {
  if (install.installed) {
    return;
  }
  install.installed = true;

  app.component('LayoutDefault', LayoutDefault);
  app.component('LayoutAntdv', LayoutAntdv);
  app.component('Navbar', Navbar);
  app.component('Sidebar', Sidebar);
  app.component('AppMain', AppMain);

  const store = createStore(app);

  // 注册组件
  store.dispatch('setFiles', files);

  // 注册请求封装和api,注入$http
  const axios = createAxios(app, undefined, (options) => {
    // options.response = (res) => {
    //   return Promise.resolve(res)
    // }
    // options.responseError = (err) => {}
  });
  axios.interceptors.request.use((config) => {
    config.baseURL = store.getters.urls.getBaseUrl();
    return config;
  });

  // 创建api,公用接口,注入$api
  createApi(app, axios);

  store.dispatch('setMessage', Element.ElMessage);
  store.dispatch('setMessageBox', Element.ElMessageBox);

  // 尝试从本地缓存加载菜单
  const accessedRouters = getMenu();
  let menuRouters: any[] = [];
  if (accessedRouters && accessedRouters.length > 0) {
    // 设置路由信息
    store.dispatch('generateRoutes', accessedRouters);

    // 添加路由信息
    menuRouters = store.getters.addRouters;
  }

  // 配置路由
  const router = createRouter(app, (options) => {
    // options.history = createWebHashHistory()
    // 从本地缓存加载的路由必须在这里添加
    // 否则在已登录的情况,先进行导航再动态添加路由,导致找不到页面
    options.routes = menuRouters.concat(options.routes);
  });

  app.use(Element, { size: store.state.app.size });
  for (const key in ElementIcons) {
    if (Object.prototype.hasOwnProperty.call(ElementIcons, key)) {
      const e = (ElementIcons as any)[key];
      app.component(e.name, e);
    }
  }

  app.config.globalProperties.$message = Element.ElMessage;
  app.config.globalProperties.$messageBox = Element.ElMessageBox;
  app.config.globalProperties.$warn = (config: any) => {
    Element.ElMessage.warning(config);
  };

  // 注入的计算属性自动解包
  app.config.unwrapInjectedRef = true;
};

export const createCubeUI = () => {
  return {
    install,
  };
};
export default {
  version: '1.0',
  install,
};

export * from './components/index';
export * from './services/file-context';
export * from './utils';
export { LayoutDefault, LayoutAntdv, Navbar, Sidebar, AppMain };
export { createStore, createRouter, createAxios, createApi };