App.vue 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <template>
  2. <AppConfig>
  3. <router-view/>
  4. </AppConfig>
  5. </template>
  6. <script setup>
  7. import {nextTick, ref, watch} from "vue";
  8. import {useAppStore} from "~src/store";
  9. import AppConfig from "~com/AppConfig/index.vue";
  10. import {setElementMainColor, ulog, getObjValue} from "js-fast-way"
  11. import {useOsTheme} from '~src/plugins/useOsTheme';
  12. import config from '~src/config/index';
  13. //初始变量
  14. const appStore = useAppStore()
  15. const UserTheme = ref(appStore.getTheme)
  16. //监听
  17. watch(() => [
  18. appStore.getTheme,
  19. appStore.getThemeVal,
  20. appStore.getColor
  21. ], ([Theme,ThemeVal,ColorVal]) => {
  22. UserTheme.value = Theme
  23. setUserTheme(ThemeVal, ColorVal)
  24. })
  25. nextTick(()=> {
  26. setUserTheme(appStore.getThemeVal, appStore.getColor)
  27. ulog('档案管理 启动成功', '当前开发版本 v' + config?.version)
  28. //当屏幕分辨率宽度低于1920时,自动折叠菜单
  29. const width = document.body.clientWidth
  30. if (width < 1920) {
  31. appStore.setCollapse(true)
  32. }
  33. })
  34. //设置主题
  35. const setUserTheme = (theme, appColor) => {
  36. const colorVal = getObjValue(appColor)
  37. //设置主色调
  38. setElementMainColor(colorVal?.color)
  39. const colorName = colorVal?.name || 'green'
  40. //设置主题
  41. let val = UserTheme.value
  42. if (val === 'auto') {
  43. theme = useOsTheme().value;
  44. }
  45. if (theme === '') {
  46. theme = val;
  47. }
  48. //挂载相关样式
  49. document.documentElement.setAttribute('class',`${theme} color-${colorName}`)
  50. }
  51. </script>