// 自动更换版本号start console.log('注意保证第2行中的代码是console.log') // 自动更换版本号end import './public-path' import { createApp, App as AppInstance } from 'vue' import App from './App.vue' import { createRouter, createWebHashHistory, Router, RouterHistory, } from 'vue-router' import routes from '@/router' import store from '@/store/index' import { detail } from '@/hooks/useLogin' let app: AppInstance | null = null let router: Router | null = null let history: RouterHistory | null = null // 注册页面布局方式 import DefaultLayout from '@/layouts/default.vue' import tools from 'yskj-tools' import util from '@/utils' // 注册公用组件 import com from './components/index' import { Button, ConfigProvider, Layout, message, Menu, Input, Space, Dropdown, Form, Drawer, Table, InputNumber, Row, Col, Select, DatePicker, Breadcrumb, Upload, Tabs, TreeSelect, Popconfirm, Modal, } from 'ant-design-vue' // 前端打印插件 import yskjUi from 'yskj-ui' import 'yskj-ui/dist/style.css' import '@/assets/style/common.scss' import { usePermission } from './hooks/usePermission' import { handleMicroData } from './hooks/useMicro' declare global { interface Window { microApp: any __MICRO_APP_NAME__: string __MICRO_APP_ENVIRONMENT__: string __MICRO_APP_BASE_ROUTE__: string } } // ----------分割线---umd模式------两种模式任选其一-------------- // // 将渲染操作放入 mount 函数 function mount() { app = createApp(App) for (const keys of Object.keys(tools)) { app.config.globalProperties[keys] = tools[keys] } // __MICRO_APP_BASE_ROUTE__ 为micro-app传入的基础路由 history = createWebHashHistory(window.__MICRO_APP_BASE_ROUTE__ || '/') router = createRouter({ history, routes, }) as Router if (!window.__MICRO_APP_ENVIRONMENT__ && app.config.globalProperties._query('accesstoken')) { app.config.globalProperties .p_initVue({ baseUrl: window.globalConfig.baseUrl, token: app.config.globalProperties._query('accesstoken'), getInfo: true }) .then(data => { store.commit('ACCESSTOKEN', data.data.token) sessionStorage.setItem('accesstoken', data.data.token) store.commit('USERINFO', data.data.userInfo) sessionStorage.setItem('userInfo', data.data.userInfo) detail().then(() => { location.href = app?.config.globalProperties._urlDel('accesstoken') location.reload() }) }) } else { app.use(yskjUi) .use(com) .use(util) .use(Button) .use(Layout) .use(ConfigProvider) .use(Tabs) .use(Input) .use(Table) .use(Row) .use(Col) .use(InputNumber) .use(Select) .use(Space) .use(Drawer) .use(Menu) .use(Form) .use(DatePicker) .use(Upload) .use(Dropdown) .use(TreeSelect) .use(Breadcrumb) .use(Popconfirm) .use(Modal) .component('default-layout', DefaultLayout) .use(store) .use(router) .mount('#demo-app') } handleMicroData(router) const permission = usePermission() let flag = false // 保证第一次渲染时的正确 router.beforeEach((to: any, from: any, next) => { if (!to.matched.length && to.path.includes('/demo/')) { if (window.__MICRO_APP_ENVIRONMENT__) { window.microApp.dispatch({ code: 404 }) } } store.commit('ISBREAD', to.meta.noBread ? false : true) store.commit('MARGIN0', to.meta.margin0 ? true : false) store.commit('PADDING0', to.meta.padding0 ? true : false) store.commit('LAYOUTTYPE', to.meta.layoutType) permission .p_hasPermission(store.state.userInfo.permissions, to) .then(res => { if (res) { next() } else { if (tools._query('filterRoles') == 1) { next() } else { if (window.__MICRO_APP_ENVIRONMENT__) { if(flag) { window.microApp.dispatch({ code: 404 }) }else { flag = true } } } } }) }) } // 将卸载操作放入 unmount 函数 function unmount() { app?.unmount() history?.destroy() app = null router = null history = null } // 微前端环境下,注册mount和unmount方法 if (window.__MICRO_APP_ENVIRONMENT__) { // 解决iconfont在shadow DOM模式下无法显示的问题 const str = (window as any)._iconfont_svg_string_2596567 const div = document.createElement('div') div.innerHTML = str div.style.display = 'none' document.getElementsByTagName('micro-app-body')[0].appendChild(div) window[`micro-app-${window.__MICRO_APP_NAME__}`] = { mount, unmount } } else { // 非微前端环境直接渲染 mount() } window.$message = message