main.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. import Vue from 'vue';
  2. import './public-path';
  3. import initParentStore from '../qiankun_config/store';
  4. import App from './App.vue';
  5. import store from './store';
  6. import router from './router';
  7. import permission from './utils/permission';
  8. import { MAP_KEY, LICENSE_CODE } from '@/config/setting';
  9. import EleAdmin from 'ele-admin';
  10. import VueClipboard from 'vue-clipboard2';
  11. import VueFullscreen from 'vue-fullscreen';
  12. import i18n from './i18n';
  13. import './styles/index.scss';
  14. import DictSelection from '@/components/Dict/DictSelection';
  15. import HeaderTitle from '@/components/header-title';
  16. // import authSelection from '@/components/authSelection';
  17. import Vue2OrgTree from 'vue2-org-tree';
  18. import seekPage from '@/BIZComponents/seekPage';
  19. import clickOnce from './utils/clickOnce.js';
  20. import noChinese from './utils/noChinese.js';
  21. import { VirtualScroller } from 'vue-virtual-scroller';
  22. import 'vue-virtual-scroller/dist/vue-virtual-scroller.css';
  23. Vue.component('virtual-scroller', VirtualScroller);
  24. import dataV from '@jiaminghi/data-view'
  25. import { all, create } from 'mathjs'; // 引入mathjs工具并初始化
  26. // REM 适配大屏 - 基于设计稿 1920px
  27. (function() {
  28. function setRem() {
  29. const baseSize = 192; // 基础值,设计稿宽度 / 10
  30. const scale = document.documentElement.clientWidth / 1920;
  31. // 限制最大缩放比例为 2 倍
  32. const rem = baseSize * Math.min(scale, 2);
  33. document.documentElement.style.fontSize = rem + 'px';
  34. // 同时设置 data 属性,方便 CSS 中使用
  35. document.documentElement.setAttribute('data-scale', Math.min(scale, 2).toFixed(4));
  36. }
  37. // 初始化
  38. setRem();
  39. // 防抖处理
  40. let timer = null;
  41. window.addEventListener('resize', function() {
  42. if (timer) clearTimeout(timer);
  43. timer = setTimeout(setRem, 100);
  44. });
  45. // 确保 DOM 加载完成后执行
  46. if (document.readyState !== 'complete') {
  47. window.addEventListener('load', setRem);
  48. }
  49. })();
  50. // 注册全局自定义指令
  51. Vue.directive('click-once', clickOnce);
  52. Vue.directive('no-chinese', noChinese);
  53. Vue.component('HeaderTitle', HeaderTitle);
  54. // Vue.component('authSelection', authSelection);
  55. // // register globally
  56. import '@/icons';
  57. Vue.component('DictSelection', DictSelection);
  58. Vue.component('seekPage', seekPage);
  59. Vue.config.productionTip = false;
  60. Vue.prototype.$math = create(all, {
  61. number: 'BigNumber',
  62. precision: 64
  63. });
  64. Vue.use(Vue2OrgTree);
  65. Vue.use(dataV);
  66. Vue.use(EleAdmin, {
  67. response: {
  68. dataName: 'list'
  69. },
  70. mapKey: MAP_KEY,
  71. license: LICENSE_CODE,
  72. i18n: (key, value) => i18n.t(key, value)
  73. });
  74. Vue.use(permission);
  75. Vue.use(VueClipboard);
  76. Vue.use(VueFullscreen);
  77. let instance = null;
  78. // bpmnProcessDesigner 需要引入
  79. import MyPD from '@/components/bpmnProcessDesigner/package/index.js';
  80. Vue.use(MyPD);
  81. import paramsDataMixins from './mixins/paramsDataMixins';
  82. Vue.mixin(paramsDataMixins);
  83. import '@/components/bpmnProcessDesigner/package/theme/index.scss';
  84. import 'bpmn-js/dist/assets/diagram-js.css';
  85. import 'bpmn-js/dist/assets/bpmn-font/css/bpmn.css';
  86. import 'bpmn-js/dist/assets/bpmn-font/css/bpmn-codes.css';
  87. import 'bpmn-js/dist/assets/bpmn-font/css/bpmn-embedded.css';
  88. import fileMain from '@/components/addDoc/index.vue';
  89. Vue.component('fileMain', fileMain);
  90. function render(props = {}) {
  91. const { container, routerBase } = props;
  92. // const router = new VueRouter({
  93. // base: window.__POWERED_BY_QIANKUN__ ? routerBase : process.env.BASE_URL,
  94. // mode: 'history',
  95. // routes
  96. // });
  97. instance = new Vue({
  98. router,
  99. store,
  100. i18n,
  101. render: (h) => h(App)
  102. }).$mount(container ? container.querySelector('#app') : '#app');
  103. }
  104. if (!window.__POWERED_BY_QIANKUN__) {
  105. // 这里是子应用独立运行的环境,实现子应用的登录逻辑
  106. render();
  107. }
  108. // window.location.reload()
  109. export async function bootstrap() {
  110. console.log('[vue] vue app bootstraped');
  111. }
  112. export async function mount(props) {
  113. console.log('[vue] props from main framework', props);
  114. Vue.prototype.$portalStore = props.store;
  115. initParentStore(props.store);
  116. props.onGlobalStateChange((state, prev) => {
  117. // state: 变更后的状态; prev 变更前的状态
  118. initParentStore(state);
  119. });
  120. render(props);
  121. }
  122. export async function unmount() {
  123. instance.$destroy();
  124. instance.$el.innerHTML = '';
  125. instance = null;
  126. }