main.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import Vue from 'vue'
  2. import App from './App.vue'
  3. import router from './router'
  4. import store from './store'
  5. import {
  6. Button, Table, TableColumn, Form, FormItem, Input, Select, Option, Dialog,
  7. Pagination, Tag, Card, Col, Row, Icon, Descriptions, DescriptionsItem,
  8. Radio, RadioGroup, Switch, Checkbox, CheckboxGroup, Dropdown,
  9. DropdownMenu, DropdownItem, DatePicker, Upload, Tabs, TabPane,
  10. Menu, Submenu, MenuItem, Empty, Drawer, Timeline, TimelineItem,
  11. Progress, Container, Header, Aside, Main, Avatar, Scrollbar, Divider,
  12. Tab, Badge, Tree, ColorPicker, Tooltip, Popover,
  13. Slider, InputNumber, Link,
  14. MessageBox, Message
  15. } from 'element-ui'
  16. import 'element-ui/lib/theme-chalk/index.css'
  17. import './styles/admin-tokens.css'
  18. import { formatPrice, formatPriceWithSymbol, formatRate, formatScore } from './utils/format'
  19. Vue.use(Button)
  20. Vue.use(Table)
  21. Vue.use(TableColumn)
  22. Vue.use(Form)
  23. Vue.use(FormItem)
  24. Vue.use(Input)
  25. Vue.use(Select)
  26. Vue.use(Option)
  27. Vue.use(Dialog)
  28. Vue.use(Pagination)
  29. Vue.use(Tag)
  30. Vue.use(Card)
  31. Vue.use(Col)
  32. Vue.use(Row)
  33. Vue.use(Icon)
  34. Vue.use(Descriptions)
  35. Vue.use(DescriptionsItem)
  36. Vue.use(Radio)
  37. Vue.use(RadioGroup)
  38. Vue.use(Switch)
  39. Vue.use(Checkbox)
  40. Vue.use(CheckboxGroup)
  41. Vue.use(Dropdown)
  42. Vue.use(DropdownMenu)
  43. Vue.use(DropdownItem)
  44. Vue.use(DatePicker)
  45. Vue.use(Upload)
  46. Vue.use(Tabs)
  47. Vue.use(TabPane)
  48. Vue.use(Menu)
  49. Vue.use(Submenu)
  50. Vue.use(MenuItem)
  51. Vue.use(Empty)
  52. Vue.use(Drawer)
  53. Vue.use(Timeline)
  54. Vue.use(TimelineItem)
  55. Vue.use(Progress)
  56. Vue.use(Container)
  57. Vue.use(Header)
  58. Vue.use(Aside)
  59. Vue.use(Main)
  60. Vue.use(Avatar)
  61. Vue.use(Scrollbar)
  62. Vue.use(Divider)
  63. Vue.use(Badge)
  64. Vue.use(Tree)
  65. Vue.use(ColorPicker)
  66. Vue.use(Tooltip)
  67. Vue.use(Popover)
  68. Vue.use(Slider)
  69. Vue.use(InputNumber)
  70. Vue.use(Link)
  71. // MessageBox 没有 install 方法,Vue.use(MessageBox) ——这是错误的,不会注册 $confirm
  72. // 需要手动挂载到 prototype 上
  73. Vue.prototype.$confirm = MessageBox.confirm
  74. Vue.prototype.$alert = MessageBox.alert
  75. Vue.prototype.$prompt = MessageBox.prompt
  76. Vue.prototype.$message = Message
  77. Vue.prototype.formatPrice = formatPrice
  78. Vue.prototype.formatPriceWithSymbol = formatPriceWithSymbol
  79. Vue.prototype.formatRate = formatRate
  80. Vue.prototype.formatScore = formatScore
  81. // Fix Element UI 2.15.x el-submenu removeTabindex null error
  82. // https://github.com/ElemeFE/element/issues/21965
  83. // Also fixes: v-if 切换菜单项后 el-submenu 残留 DOM 遮罩导致无法点击的问题
  84. const ElSubmenu = Vue.component('ElSubmenu')
  85. if (ElSubmenu && ElSubmenu.options && ElSubmenu.options.methods) {
  86. const origRemove = ElSubmenu.options.methods.removeTabindex
  87. if (origRemove) {
  88. ElSubmenu.options.methods.removeTabindex = function() {
  89. try {
  90. if (!this.$el || !this.$el.querySelector) return
  91. const tooltip = this.$el.querySelector('.el-tooltip')
  92. if (!tooltip) return
  93. return origRemove.call(this)
  94. } catch (e) {
  95. // v-if 切换导致 DOM 已销毁时的静默容错
  96. }
  97. }
  98. }
  99. // el-submenu 展开/收起时也可能操作已销毁的 DOM
  100. const origOpen = ElSubmenu.options.methods.open
  101. if (origOpen) {
  102. ElSubmenu.options.methods.open = function() {
  103. try {
  104. return origOpen.call(this)
  105. } catch (e) {
  106. // 静默容错
  107. }
  108. }
  109. }
  110. }
  111. Vue.config.productionTip = false
  112. new Vue({
  113. router,
  114. store,
  115. render: h => h(App)
  116. }).$mount('#app')