main.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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. import VueUeditorWrap from 'vue-ueditor-wrap'
  11. // mock
  12. // import './mock'
  13. import bootstrap from './core/bootstrap'
  14. import './core/use'
  15. import './permission' // permission control
  16. import './utils/filter' // global filter
  17. import BaseTool from './utils/install'
  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. Vue.component('vue-ueditor-wrap', VueUeditorWrap)
  30. export const eventBus = new Vue()
  31. Vue.prototype.$eventBus = eventBus
  32. Vue.directive('drag-modal', (el, bindings, vnode) => {
  33. Vue.nextTick(() => {
  34. const { visible, destroyOnClose } = vnode.componentInstance
  35. // 防止未定义 destroyOnClose 关闭弹窗时dom未被销毁,指令被重复调用
  36. if (!visible) return
  37. const modal = el.getElementsByClassName('ant-modal')[0]
  38. const header = el.getElementsByClassName('ant-modal-header')[0]
  39. let left = 0
  40. let top = 0
  41. // 未定义 destroyOnClose 时,dom未被销毁,关闭弹窗再次打开,弹窗会停留在上一次拖动的位置
  42. if (!destroyOnClose) {
  43. left = modal.left || 0
  44. top = modal.top || 0
  45. }
  46. // top 初始值为 offsetTop
  47. top = top || modal.offsetTop
  48. header.onmousedown = e => {
  49. const startX = e.clientX
  50. const startY = e.clientY
  51. header.left = header.offsetLeft
  52. header.top = header.offsetTop
  53. el.onmousemove = event => {
  54. const endX = event.clientX
  55. const endY = event.clientY
  56. modal.left = header.left + (endX - startX) + left
  57. modal.top = header.top + (endY - startY) + top
  58. modal.style.left = modal.left + 'px'
  59. modal.style.top = modal.top + 'px'
  60. }
  61. el.onmouseup = event => {
  62. left = modal.left
  63. top = modal.top
  64. el.onmousemove = null
  65. el.onmouseup = null
  66. header.releaseCapture && header.releaseCapture()
  67. }
  68. header.setCapture && header.setCapture()
  69. }
  70. })
  71. })
  72. const i18n = new VueI18n({
  73. // locale: localStorage.getItem('locale') || 'zh-CN',
  74. 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')