App.vue 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. <script setup lang="ts">
  2. import { isDark } from '@/utils/is'
  3. import { useAppStore } from '@/store/modules/app'
  4. import { useDesign } from '@/hooks/web/useDesign'
  5. import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
  6. const { getPrefixCls } = useDesign()
  7. const prefixCls = getPrefixCls('app')
  8. const appStore = useAppStore()
  9. const currentSize = computed(() => appStore.getCurrentSize)
  10. const greyMode = computed(() => appStore.getGreyMode)
  11. const { wsCache } = useCache()
  12. // 根据浏览器当前主题设置系统主题色
  13. const setDefaultTheme = () => {
  14. let isDarkTheme = wsCache.get(CACHE_KEY.IS_DARK)
  15. if (isDarkTheme === null) {
  16. isDarkTheme = isDark()
  17. }
  18. appStore.setIsDark(isDarkTheme)
  19. }
  20. setDefaultTheme()
  21. </script>
  22. <template>
  23. <ConfigGlobal :size="currentSize">
  24. <RouterView :class="greyMode ? `${prefixCls}-grey-mode` : ''" />
  25. </ConfigGlobal>
  26. </template>
  27. <style lang="scss">
  28. $prefix-cls: #{$namespace}-app;
  29. .size {
  30. width: 100%;
  31. height: 100%;
  32. }
  33. html,
  34. body {
  35. padding: 0 !important;
  36. margin: 0;
  37. overflow: hidden;
  38. @extend .size;
  39. #app {
  40. @extend .size;
  41. }
  42. }
  43. .#{$prefix-cls}-grey-mode {
  44. filter: grayscale(100%);
  45. }
  46. </style>