App.vue 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <script setup lang="ts">
  2. import { computed } from 'vue'
  3. import { useAppStore } from '@/store/modules/app'
  4. import { ConfigGlobal } from '@/components/ConfigGlobal'
  5. import { isDark } from '@/utils/is'
  6. import { useDesign } from '@/hooks/web/useDesign'
  7. const { getPrefixCls } = useDesign()
  8. const prefixCls = getPrefixCls('app')
  9. const appStore = useAppStore()
  10. const currentSize = computed(() => appStore.getCurrentSize)
  11. const greyMode = computed(() => appStore.getGreyMode)
  12. const initDark = () => {
  13. const isDarkTheme = isDark()
  14. appStore.setIsDark(isDarkTheme)
  15. }
  16. initDark()
  17. </script>
  18. <template>
  19. <ConfigGlobal :size="currentSize">
  20. <RouterView :class="greyMode ? `${prefixCls}-grey-mode` : ''" />
  21. </ConfigGlobal>
  22. </template>
  23. <style lang="less">
  24. @prefix-cls: ~'@{namespace}-app';
  25. .size {
  26. width: 100%;
  27. height: 100%;
  28. }
  29. html,
  30. body {
  31. padding: 0 !important;
  32. margin: 0;
  33. overflow: hidden;
  34. .size;
  35. #app {
  36. .size;
  37. }
  38. }
  39. .@{prefix-cls}-grey-mode {
  40. -webkit-filter: grayscale(100%);
  41. -moz-filter: grayscale(100%);
  42. -ms-filter: grayscale(100%);
  43. -o-filter: grayscale(100%);
  44. filter: grayscale(100%);
  45. filter: progid:dximagetransform.microsoft.basicimage(grayscale=1);
  46. }
  47. </style>