main.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. // ie polyfill
  2. import '@babel/polyfill'
  3. import Vue from 'vue'
  4. import App from './App.vue'
  5. import router from './router'
  6. import store from './store/'
  7. import { VueAxios } from './utils/request'
  8. import Viewer from 'v-viewer'
  9. import 'viewerjs/dist/viewer.css'
  10. // mock
  11. // import './mock'
  12. import bootstrap from './core/bootstrap'
  13. import './core/use'
  14. import './permission' // permission control
  15. import './utils/filter' // global filter
  16. import BaseTool from './utils/install'
  17. import { installKeepAliveMixin } from './core/keep_alive_mixin'
  18. import echarts from 'echarts'
  19. import VueI18n from 'vue-i18n'
  20. import Print from 'vue-print-nb'
  21. Vue.use(Print) // 注册
  22. Vue.prototype.$echarts = echarts
  23. Vue.config.productionTip = false
  24. // mount axios Vue.$http and this.$http
  25. Vue.use(VueAxios)
  26. Vue.use(BaseTool)
  27. Vue.use(VueI18n) // 通过插件的形式挂载
  28. Vue.use(Viewer)
  29. // 多标签页保活:注册全局混入,页面 mounted 时用真实组件 name 加入 keep-alive 缓存
  30. installKeepAliveMixin(Vue)
  31. export const eventBus = new Vue()
  32. Vue.prototype.$eventBus = eventBus
  33. Vue.directive('drag-modal', (el, bindings, vnode) => {
  34. Vue.nextTick(() => {
  35. const { visible, destroyOnClose } = vnode.componentInstance
  36. // 防止未定义 destroyOnClose 关闭弹窗时dom未被销毁,指令被重复调用
  37. if (!visible) return
  38. const modal = el.getElementsByClassName('ant-modal')[0]
  39. const header = el.getElementsByClassName('ant-modal-header')[0]
  40. let left = 0
  41. let top = 0
  42. // 未定义 destroyOnClose 时,dom未被销毁,关闭弹窗再次打开,弹窗会停留在上一次拖动的位置
  43. if (!destroyOnClose) {
  44. left = modal.left || 0
  45. top = modal.top || 0
  46. }
  47. // top 初始值为 offsetTop
  48. top = top || modal.offsetTop
  49. header.onmousedown = e => {
  50. const startX = e.clientX
  51. const startY = e.clientY
  52. header.left = header.offsetLeft
  53. header.top = header.offsetTop
  54. el.onmousemove = event => {
  55. const endX = event.clientX
  56. const endY = event.clientY
  57. modal.left = header.left + (endX - startX) + left
  58. modal.top = header.top + (endY - startY) + top
  59. modal.style.left = modal.left + 'px'
  60. modal.style.top = modal.top + 'px'
  61. }
  62. el.onmouseup = event => {
  63. left = modal.left
  64. top = modal.top
  65. el.onmousemove = null
  66. el.onmouseup = null
  67. header.releaseCapture && header.releaseCapture()
  68. }
  69. header.setCapture && header.setCapture()
  70. }
  71. })
  72. })
  73. const i18n = new VueI18n({
  74. locale: localStorage.getItem('locale') || 'zh-CN',
  75. messages: {
  76. 'zh-CN': require('./i18n/zh')
  77. // 'en-US': require('./i18n/en')
  78. }
  79. })
  80. Viewer.setDefaults({
  81. Options: {
  82. inline: true,
  83. button: false,
  84. navbar: true,
  85. title: true,
  86. toolbar: true,
  87. tooltip: true,
  88. movable: true,
  89. zoomable: true,
  90. rotatable: true,
  91. scalable: true,
  92. transition: true,
  93. fullscreen: true,
  94. keyboard: true,
  95. url: 'data-source'
  96. }
  97. })
  98. new Vue({
  99. i18n,
  100. router,
  101. store,
  102. created: bootstrap,
  103. render: h => h(App)
  104. }).$mount('#app')