App.vue 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <script setup lang="ts">
  2. import { breakpointsTailwind, useBreakpoints } from '@vueuse/core'
  3. import {
  4. NConfigProvider,
  5. NModalProvider,
  6. NDialogProvider,
  7. NNotificationProvider,
  8. NMessageProvider,
  9. NWatermark,
  10. NGlobalStyle,
  11. NEl,
  12. } from 'naive-ui'
  13. import { storeToRefs } from 'pinia'
  14. import { provide, ref } from 'vue'
  15. import { RouterView } from 'vue-router'
  16. import Noise from '@/components/Noise.vue'
  17. import { getConfigProviderProps } from '@/composables'
  18. import { usePreferencesStore } from '@/stores'
  19. import { layoutInjectionKey, mediaQueryInjectionKey } from './injection'
  20. import type { LayoutSlideDirection } from './injection'
  21. const { showWatermark, showNoise, watermarkOptions } = storeToRefs(usePreferencesStore())
  22. const configProviderProps = getConfigProviderProps()
  23. const breakpoints = useBreakpoints(breakpointsTailwind)
  24. const layoutSlideDirection = ref<LayoutSlideDirection>(null)
  25. const shouldRefreshRoute = ref(false)
  26. const isSidebarColResizing = ref(false)
  27. function setLayoutSlideDirection(direction: LayoutSlideDirection) {
  28. layoutSlideDirection.value = direction === layoutSlideDirection.value ? null : direction
  29. }
  30. provide(mediaQueryInjectionKey, {
  31. isMaxSm: breakpoints.smaller('sm'),
  32. isMaxMd: breakpoints.smaller('md'),
  33. isMaxLg: breakpoints.smaller('lg'),
  34. isMaxXl: breakpoints.smaller('xl'),
  35. isMax2Xl: breakpoints.smaller('2xl'),
  36. })
  37. provide(layoutInjectionKey, {
  38. shouldRefreshRoute,
  39. layoutSlideDirection,
  40. setLayoutSlideDirection,
  41. isSidebarColResizing,
  42. mobileLeftAsideWidth: ref(0),
  43. mobileRightAsideWidth: ref(0),
  44. })
  45. </script>
  46. <template>
  47. <NConfigProvider v-bind="configProviderProps">
  48. <NGlobalStyle />
  49. <NEl>
  50. <NModalProvider>
  51. <NNotificationProvider placement="bottom-right">
  52. <NMessageProvider>
  53. <NDialogProvider>
  54. <RouterView />
  55. <NWatermark
  56. v-if="showWatermark"
  57. fullscreen
  58. v-bind="watermarkOptions"
  59. />
  60. <Noise v-if="showNoise" />
  61. </NDialogProvider>
  62. </NMessageProvider>
  63. </NNotificationProvider>
  64. </NModalProvider>
  65. </NEl>
  66. </NConfigProvider>
  67. </template>