App.vue 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <template>
  2. <HcAppConfig>
  3. <router-view/>
  4. </HcAppConfig>
  5. </template>
  6. <script setup>
  7. import {nextTick, ref, watch} from "vue";
  8. import {useAppStore} from "~src/store";
  9. import {useOsTheme} from '~src/plugins/useOsTheme';
  10. import {setElementMainColor, ulog, getObjValue} from "js-fast-way"
  11. import config from '~src/config/index';
  12. //初始变量
  13. const appStore = useAppStore()
  14. const UserTheme = ref(appStore.getTheme)
  15. //监听
  16. watch(() => [
  17. appStore.getTheme,
  18. appStore.getThemeVal,
  19. appStore.getColor
  20. ], ([Theme, ThemeVal, ColorVal]) => {
  21. UserTheme.value = Theme
  22. setUserTheme(ThemeVal, ColorVal)
  23. })
  24. nextTick(() => {
  25. setUserTheme(appStore.getThemeVal, appStore.getColor)
  26. ulog('启动成功', '当前开发版本 v' + config?.version)
  27. })
  28. //设置主题 #0081ff
  29. const setUserTheme = (theme, appColor) => {
  30. const colorVal = getObjValue(appColor)
  31. //设置主色调
  32. setElementMainColor(colorVal?.color)
  33. const colorName = colorVal?.name || 'blue'
  34. //设置主题
  35. let val = UserTheme.value
  36. if (val === 'auto') {
  37. theme = useOsTheme().value;
  38. }
  39. if (theme === '') {
  40. theme = val;
  41. }
  42. //挂载相关样式
  43. document.documentElement.setAttribute('class', `${theme} color-${colorName}`)
  44. }
  45. </script>