main.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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 echarts from 'echarts'
  18. import VueI18n from 'vue-i18n'
  19. import Print from 'vue-print-nb'
  20. Vue.use(Print) // 注册
  21. Vue.prototype.$echarts = echarts
  22. Vue.config.productionTip = false
  23. // mount axios Vue.$http and this.$http
  24. Vue.use(VueAxios)
  25. Vue.use(BaseTool)
  26. Vue.use(VueI18n) // 通过插件的形式挂载
  27. Vue.use(Viewer)
  28. export const eventBus = new Vue()
  29. Vue.prototype.$eventBus = eventBus
  30. Vue.directive('drag-modal', (el, bindings, vnode) => {
  31. Vue.nextTick(() => {
  32. const { visible, destroyOnClose } = vnode.componentInstance
  33. // 防止未定义 destroyOnClose 关闭弹窗时dom未被销毁,指令被重复调用
  34. if (!visible) return
  35. const modal = el.getElementsByClassName('ant-modal')[0]
  36. const header = el.getElementsByClassName('ant-modal-header')[0]
  37. let left = 0
  38. let top = 0
  39. // 未定义 destroyOnClose 时,dom未被销毁,关闭弹窗再次打开,弹窗会停留在上一次拖动的位置
  40. if (!destroyOnClose) {
  41. left = modal.left || 0
  42. top = modal.top || 0
  43. }
  44. // top 初始值为 offsetTop
  45. top = top || modal.offsetTop
  46. header.onmousedown = e => {
  47. const startX = e.clientX
  48. const startY = e.clientY
  49. header.left = header.offsetLeft
  50. header.top = header.offsetTop
  51. el.onmousemove = event => {
  52. const endX = event.clientX
  53. const endY = event.clientY
  54. modal.left = header.left + (endX - startX) + left
  55. modal.top = header.top + (endY - startY) + top
  56. modal.style.left = modal.left + 'px'
  57. modal.style.top = modal.top + 'px'
  58. }
  59. el.onmouseup = event => {
  60. left = modal.left
  61. top = modal.top
  62. el.onmousemove = null
  63. el.onmouseup = null
  64. header.releaseCapture && header.releaseCapture()
  65. }
  66. header.setCapture && header.setCapture()
  67. }
  68. })
  69. })
  70. const i18n = new VueI18n({
  71. locale: localStorage.getItem('locale') || 'zh-CN',
  72. messages: {
  73. 'zh-CN': require('./i18n/zh')
  74. // 'en-US': require('./i18n/en')
  75. }
  76. })
  77. Viewer.setDefaults({
  78. Options: {
  79. inline: true,
  80. button: false,
  81. navbar: true,
  82. title: true,
  83. toolbar: true,
  84. tooltip: true,
  85. movable: true,
  86. zoomable: true,
  87. rotatable: true,
  88. scalable: true,
  89. transition: true,
  90. fullscreen: true,
  91. keyboard: true,
  92. url: 'data-source'
  93. }
  94. })
  95. new Vue({
  96. i18n,
  97. router,
  98. store,
  99. created: bootstrap,
  100. render: h => h(App)
  101. }).$mount('#app')