App.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <template>
  2. <a-config-provider :locale="locale" :get-popup-container="popContainer">
  3. <router-view/>
  4. </a-config-provider>
  5. </template>
  6. <script>
  7. import {enquireScreen} from './utils/util'
  8. import {mapState, mapMutations} from 'vuex'
  9. import themeUtil from '@/utils/themeUtil';
  10. import {getI18nKey} from '@/utils/routerUtil'
  11. export default {
  12. name: 'App',
  13. data() {
  14. return {
  15. locale: {}
  16. }
  17. },
  18. created () {
  19. this.setHtmlTitle()
  20. this.setLanguage(this.lang)
  21. enquireScreen(isMobile => this.setDevice(isMobile))
  22. },
  23. mounted() {
  24. this.setWeekModeTheme(this.weekMode)
  25. },
  26. watch: {
  27. weekMode(val) {
  28. this.setWeekModeTheme(val)
  29. },
  30. lang(val) {
  31. this.setLanguage(val)
  32. this.setHtmlTitle()
  33. },
  34. $route() {
  35. this.setHtmlTitle()
  36. },
  37. 'theme.mode': function(val) {
  38. let closeMessage = this.$message.loading(`您选择了主题模式 ${val}, 正在切换...`)
  39. themeUtil.changeThemeColor(this.theme.color, val).then(closeMessage)
  40. },
  41. 'theme.color': function(val) {
  42. let closeMessage = this.$message.loading(`您选择了主题色 ${val}, 正在切换...`)
  43. themeUtil.changeThemeColor(val, this.theme.mode).then(closeMessage)
  44. },
  45. 'layout': function() {
  46. window.dispatchEvent(new Event('resize'))
  47. }
  48. },
  49. computed: {
  50. ...mapState('setting', ['layout', 'theme', 'weekMode', 'lang'])
  51. },
  52. methods: {
  53. ...mapMutations('setting', ['setDevice']),
  54. setWeekModeTheme(weekMode) {
  55. if (weekMode) {
  56. document.body.classList.add('week-mode')
  57. } else {
  58. document.body.classList.remove('week-mode')
  59. }
  60. },
  61. setLanguage(lang) {
  62. this.$i18n.locale = lang
  63. switch (lang) {
  64. case 'CN':
  65. this.locale = require('ant-design-vue/es/locale-provider/zh_CN').default
  66. break
  67. case 'HK':
  68. this.locale = require('ant-design-vue/es/locale-provider/zh_TW').default
  69. break
  70. case 'US':
  71. default:
  72. this.locale = require('ant-design-vue/es/locale-provider/en_US').default
  73. break
  74. }
  75. },
  76. setHtmlTitle() {
  77. const route = this.$route
  78. const key = route.path === '/' ? 'home.name' : getI18nKey(route.matched[route.matched.length - 1].path)
  79. document.title = process.env.VUE_APP_NAME + ' | ' + this.$t(key)
  80. },
  81. popContainer() {
  82. return document.getElementById("popContainer")
  83. }
  84. }
  85. }
  86. </script>
  87. <style lang="less" scoped>
  88. #id{
  89. }
  90. </style>