main.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. import Vue from 'vue'
  2. import axios from './router/axios'
  3. import VueAxios from 'vue-axios'
  4. import App from './App'
  5. import router from './router/router'
  6. import './permission' // 权限
  7. import './error' // 日志
  8. import './cache' //页面缓存
  9. import store from './store'
  10. import { loadStyle } from './util/util'
  11. import * as urls from '@/config/env'
  12. import Element from 'element-ui'
  13. import { iconfontUrl, iconfontVersion } from '@/config/env'
  14. import i18n from './lang' // Internationalization
  15. import './styles/common.scss'
  16. import basicBlock from './components/basic-block/main'
  17. import basicContainer from './components/basic-container/main'
  18. import thirdRegister from './components/third-register/main'
  19. import avueUeditor from 'avue-plugin-ueditor'
  20. import website from '@/config/website'
  21. import crudCommon from '@/mixins/crud'
  22. import Example from './components/example'
  23. import Pagination from './components/Pagination'
  24. //cdn迁移进src目录
  25. import './assets/cdn/element-ui/2.15.1/theme-chalk/index.css'
  26. import './assets/cdn/animate/3.5.2/animate.css'
  27. import './assets/cdn/iconfont/avue/iconfont.css'
  28. import './assets/cdn/iconfont/saber/iconfont.css'
  29. import './assets/cdn/avue/2.8.18/index.css'
  30. import { set } from 'nprogress'
  31. import { setToken } from '@/util/auth';
  32. // 注册全局crud驱动
  33. window.$crudCommon = crudCommon
  34. // 加载Vue拓展
  35. Vue.use(router)
  36. Vue.use(VueAxios, axios)
  37. Vue.use(Element, {
  38. i18n: (key, value) => i18n.t(key, value),
  39. })
  40. Vue.use(window.AVUE, {
  41. size: 'small',
  42. tableSize: 'small',
  43. calcHeight: 65,
  44. i18n: (key, value) => i18n.t(key, value),
  45. })
  46. Vue.use(Example)
  47. Vue.use(Pagination)
  48. Vue.use(set)
  49. Element.Select.props.filterable = {
  50. type: Boolean,
  51. default: true,
  52. }
  53. Element.Select.props.clearable = {
  54. type: Boolean,
  55. default: true,
  56. }
  57. Element.TimePicker.props.editable = {
  58. type: Boolean,
  59. default: false,
  60. }
  61. Element.TimeSelect.props.editable = {
  62. type: Boolean,
  63. default: false,
  64. }
  65. Element.DatePicker.props.editable = {
  66. type: Boolean,
  67. default: false,
  68. }
  69. Element.Dialog.props.closeOnClickModal.default = false
  70. Element.Dialog.props.appendToBody.default = true
  71. // 注册全局容器
  72. Vue.component('basicContainer', basicContainer)
  73. Vue.component('basicBlock', basicBlock)
  74. Vue.component('thirdRegister', thirdRegister)
  75. Vue.component('avueUeditor', avueUeditor)
  76. Vue.component('Example', Example)
  77. Vue.component('Pagination', Pagination)
  78. Vue.prototype.msgSuccess = function (msg) {
  79. this.$message({ showClose: true, message: msg, type: 'success' })
  80. }
  81. Vue.prototype.msgError = function (msg) {
  82. this.$message({ showClose: true, message: msg, type: 'error' })
  83. }
  84. Vue.prototype.msgWarning = function (msg) {
  85. this.$message({ showClose: true, message: msg, type: 'warning' })
  86. }
  87. Vue.prototype.msgInfo = function (msg) {
  88. this.$message.info(msg)
  89. }
  90. // 加载相关url地址
  91. Object.keys(urls).forEach((key) => {
  92. Vue.prototype[key] = urls[key]
  93. })
  94. // 加载website
  95. Vue.prototype.website = website
  96. // 动态加载阿里云字体库
  97. iconfontVersion.forEach((ele) => {
  98. loadStyle(iconfontUrl.replace('$key', ele))
  99. })
  100. //乾坤代码
  101. Vue.config.productionTip = false
  102. let instance = null
  103. function render({ props = {} } = {}) {
  104. console.log(props)
  105. const { container } = props
  106. instance = new Vue({
  107. router,
  108. store,
  109. i18n,
  110. data(){},
  111. render: (h) => h(App),
  112. }).$mount(container ? container.querySelector('#fjhxCloudVue') : '#fjhxCloudVue')
  113. console.log(instance)
  114. }
  115. // 独立运行时
  116. (function () {
  117. console.log(window.__POWERED_BY_QIANKUN__)
  118. if (window.__POWERED_BY_QIANKUN__) {
  119. __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__
  120. } else {
  121. render()
  122. }
  123. })()
  124. export async function bootstrap() {
  125. console.log('vue app bootstraped')
  126. }
  127. export async function mount(props) {
  128. //设置token
  129. console.log(props.data.token)
  130. //挂载父路由
  131. Vue.prototype.$parentRouter = props.data.router
  132. if(props.data.token != null){
  133. //注入父应用传来的登录信息
  134. setToken(props.data.token.access_token)
  135. store.commit('SET_TOKEN',props.data.token.access_token)
  136. store.commit('SET_REFRESH_TOKEN', props.data.token.refresh_token);
  137. store.commit('SET_TENANT_ID', props.data.token.tenant_id);
  138. store.commit('SET_USER_INFO', props.data.token);
  139. //设置监听事件触发方法,全局共享
  140. props.onGlobalStateChange((state, prev) => {
  141. // state: 变更后的状态; prev 变更前的状态
  142. console.log(state, prev, '子组件监听');
  143. });
  144. }
  145. //发送数据给全局
  146. // props.setGlobalState({ token: 21312312 })
  147. render(props)
  148. }
  149. export async function unmount() {
  150. // instance.$destroy();
  151. instance.$el.innerHTML = "";
  152. instance = null;
  153. // router = null;
  154. }
  155. Vue.config.productionTip = false