main.js 3.3 KB

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