main.ts 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import './public-path'
  2. import { createApp } from 'vue'
  3. import App from './App.vue'
  4. import router, { routes } from './router'
  5. import '@/router/before'
  6. import { createPinia } from 'pinia'
  7. import antd from 'ant-design-vue'
  8. import UsePro from './utils/UsePro'
  9. import { assets } from '@/utils/static'
  10. import cronAnt from '@vue-js-cron/ant'
  11. import '@vue-js-cron/ant/dist/ant.css'
  12. import 'normalize.css'
  13. import { keyboard } from '@/directives/index'
  14. import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
  15. const pinia = createPinia()
  16. pinia.use(piniaPluginPersistedstate)
  17. // `trace` 是组件层级结构的追踪
  18. // app.config.warnHandler = (msg, instance, trace) => {
  19. // }
  20. // 全局注册一些辅助性的函数 desc在 global.d.ts下
  21. window.Map.prototype.toArray = function () {
  22. if (this === null || this === undefined) return this
  23. return Array.from(this, ([key, value]) => {
  24. if (typeof value === 'object') {
  25. return { key, ...value }
  26. } else {
  27. return { key, value }
  28. }
  29. })
  30. }
  31. window.Array.prototype.toMap = function (key: string, valueKey?: string): Map<string, any> {
  32. if (this && typeof this[0] !== 'object') throw new Error('仅支持Record<string, any>[]格式的数组')
  33. else if (this == null || this === undefined) return this
  34. const _map = new Map()
  35. this.forEach(item => {
  36. _map.set(item[key], valueKey ? item[valueKey] : item)
  37. })
  38. return _map
  39. }
  40. let _router = router
  41. let instance: any = null
  42. const render = (props: any = {}) => {
  43. const { container, data } = props
  44. if (window.__POWERED_BY_QIANKUN__) {
  45. data.store.useJLYAppRouter().setChildrenSiderRoutes(routes.map(item => item.children).filter(_ => !!_)[0])
  46. }
  47. instance = createApp(App)
  48. instance.use(router)
  49. .use(pinia)
  50. .use(antd)
  51. .use(UsePro)
  52. .use(cronAnt)
  53. .directive('keyboard', keyboard)
  54. .provide('useStaticImg', assets)
  55. instance.mount(container ? container.querySelector('#cloudlink-ui') : '#cloudlink-ui') as any
  56. }
  57. console.log('是否是window.__POWERED_BY_QIANKUN__:', window.__POWERED_BY_QIANKUN__)
  58. /** eslint-disable */
  59. if (!window.__POWERED_BY_QIANKUN__) {
  60. render()
  61. }
  62. export async function bootstrap () {
  63. console.log('cloudlink app bootstraped')
  64. }
  65. export async function mount (props) {
  66. console.log('cloudlink 子应用 挂载')
  67. render(props)
  68. }
  69. export async function unmount () {
  70. // if (instance.$destroy) {
  71. instance.unmount()
  72. instance._container.innerHTML = ''
  73. instance = null
  74. _router = null as any
  75. // }
  76. }