import Vue from 'vue' import './public-path.js' import App from './App.vue' import router from './router' import { api } from '@/api' import pinia from '@/store' import { useUserStore } from '@/store/user' import { useMenuStore } from '@/store/menu' import { useReuseTabStore } from '@/store/reuse-tab' import { GlobalActions } from '@/utils/enums' Vue.config.productionTip = false Vue.prototype.$http = api let instance: any = null const reuseTabStore = useReuseTabStore(pinia) function render(props: any = {}) { const { container } = props instance = new Vue({ router, render: (h) => h(App), pinia, }).$mount(container ? container.querySelector('#app') : '#app') if (window.__POWERED_BY_QIANKUN__) { props.setGlobalState({ loading: false, }) } } // 独立运行时 if (!window.__POWERED_BY_QIANKUN__) { render() } function setStore(props) { try { const userStore = useUserStore(pinia) const menuStore = useMenuStore(pinia) menuStore.init({ menus: props.menuStore.menu, originalMenus: props.menuStore.originalMenus, buttons: props.menuStore.buttons, }) userStore.setUserInfo(props.userStore.info) } catch (e) { console.log(e) } } export async function bootstrap() { console.log('vue app bootstraped') } export async function mount(props) { console.log('props from main framework', props) setStore(props) const { baseRoute } = props window.baseRoute = baseRoute Vue.prototype.$setGlobalState = props.setGlobalState Vue.prototype.$parentReuseTabStore = props.reuseTabStore Vue.prototype.$parentLodingStore = props.lodingStore Vue.prototype.$onGlobalStateChange = props.onGlobalStateChange props.onGlobalStateChange((state) => { // state: 变更后的状态; prev 变更前的状态 console.log('onGlobalStateChange:', state) switch (state.action) { case GlobalActions.SetReuseTab: reuseTabStore.changeSource({ source: state.reuseTabSource }) break } }) render(props) } export async function unmount() { instance.$destroy() instance.$el.innerHTML = '' instance = null }