import Vue from 'vue'; import './public-path'; import initParentStore from '../qiankun_config/store'; import App from './App.vue'; import store from './store'; import router from './router'; import permission from './utils/permission'; import { MAP_KEY, LICENSE_CODE } from '@/config/setting'; import EleAdmin from 'ele-admin'; import VueClipboard from 'vue-clipboard2'; import VueFullscreen from 'vue-fullscreen'; import i18n from './i18n'; import './styles/index.scss'; import DictSelection from '@/components/Dict/DictSelection'; import HeaderTitle from '@/components/header-title'; // import authSelection from '@/components/authSelection'; import Vue2OrgTree from 'vue2-org-tree'; import seekPage from '@/BIZComponents/seekPage'; import clickOnce from './utils/clickOnce.js'; import noChinese from './utils/noChinese.js'; import { VirtualScroller } from 'vue-virtual-scroller'; import 'vue-virtual-scroller/dist/vue-virtual-scroller.css'; Vue.component('virtual-scroller', VirtualScroller); import dataV from '@jiaminghi/data-view' import { all, create } from 'mathjs'; // 引入mathjs工具并初始化 // REM 适配大屏 - 基于设计稿 1920px (function() { function setRem() { const baseSize = 192; // 基础值,设计稿宽度 / 10 const scale = document.documentElement.clientWidth / 1920; // 限制最大缩放比例为 2 倍 const rem = baseSize * Math.min(scale, 2); document.documentElement.style.fontSize = rem + 'px'; // 同时设置 data 属性,方便 CSS 中使用 document.documentElement.setAttribute('data-scale', Math.min(scale, 2).toFixed(4)); } // 初始化 setRem(); // 防抖处理 let timer = null; window.addEventListener('resize', function() { if (timer) clearTimeout(timer); timer = setTimeout(setRem, 100); }); // 确保 DOM 加载完成后执行 if (document.readyState !== 'complete') { window.addEventListener('load', setRem); } })(); // 注册全局自定义指令 Vue.directive('click-once', clickOnce); Vue.directive('no-chinese', noChinese); Vue.component('HeaderTitle', HeaderTitle); // Vue.component('authSelection', authSelection); // // register globally import '@/icons'; Vue.component('DictSelection', DictSelection); Vue.component('seekPage', seekPage); Vue.config.productionTip = false; Vue.prototype.$math = create(all, { number: 'BigNumber', precision: 64 }); Vue.use(Vue2OrgTree); Vue.use(dataV); Vue.use(EleAdmin, { response: { dataName: 'list' }, mapKey: MAP_KEY, license: LICENSE_CODE, i18n: (key, value) => i18n.t(key, value) }); Vue.use(permission); Vue.use(VueClipboard); Vue.use(VueFullscreen); let instance = null; // bpmnProcessDesigner 需要引入 import MyPD from '@/components/bpmnProcessDesigner/package/index.js'; Vue.use(MyPD); import paramsDataMixins from './mixins/paramsDataMixins'; Vue.mixin(paramsDataMixins); import '@/components/bpmnProcessDesigner/package/theme/index.scss'; import 'bpmn-js/dist/assets/diagram-js.css'; import 'bpmn-js/dist/assets/bpmn-font/css/bpmn.css'; import 'bpmn-js/dist/assets/bpmn-font/css/bpmn-codes.css'; import 'bpmn-js/dist/assets/bpmn-font/css/bpmn-embedded.css'; import fileMain from '@/components/addDoc/index.vue'; Vue.component('fileMain', fileMain); function render(props = {}) { const { container, routerBase } = props; // const router = new VueRouter({ // base: window.__POWERED_BY_QIANKUN__ ? routerBase : process.env.BASE_URL, // mode: 'history', // routes // }); instance = new Vue({ router, store, i18n, render: (h) => h(App) }).$mount(container ? container.querySelector('#app') : '#app'); } if (!window.__POWERED_BY_QIANKUN__) { // 这里是子应用独立运行的环境,实现子应用的登录逻辑 render(); } // window.location.reload() export async function bootstrap() { console.log('[vue] vue app bootstraped'); } export async function mount(props) { console.log('[vue] props from main framework', props); Vue.prototype.$portalStore = props.store; initParentStore(props.store); props.onGlobalStateChange((state, prev) => { // state: 变更后的状态; prev 变更前的状态 initParentStore(state); }); render(props); } export async function unmount() { instance.$destroy(); instance.$el.innerHTML = ''; instance = null; }