app.vue 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <script lang="ts" setup>
  2. import type { GlobalThemeOverrides } from 'naive-ui';
  3. import { computed } from 'vue';
  4. import { useNaiveDesignTokens } from '@vben/hooks';
  5. import { preferences } from '@vben/preferences';
  6. import {
  7. darkTheme,
  8. dateEnUS,
  9. dateZhCN,
  10. enUS,
  11. lightTheme,
  12. NConfigProvider,
  13. NMessageProvider,
  14. NNotificationProvider,
  15. zhCN,
  16. } from 'naive-ui';
  17. defineOptions({ name: 'App' });
  18. const { commonTokens } = useNaiveDesignTokens();
  19. const tokenLocale = computed(() =>
  20. preferences.app.locale === 'zh-CN' ? zhCN : enUS,
  21. );
  22. const tokenDateLocale = computed(() =>
  23. preferences.app.locale === 'zh-CN' ? dateZhCN : dateEnUS,
  24. );
  25. const tokenTheme = computed(() =>
  26. preferences.theme.mode === 'dark' ? darkTheme : lightTheme,
  27. );
  28. const themeOverrides = computed((): GlobalThemeOverrides => {
  29. return {
  30. common: commonTokens,
  31. };
  32. });
  33. </script>
  34. <template>
  35. <NConfigProvider
  36. :date-locale="tokenDateLocale"
  37. :locale="tokenLocale"
  38. :theme="tokenTheme"
  39. :theme-overrides="themeOverrides"
  40. class="h-full"
  41. >
  42. <NNotificationProvider>
  43. <NMessageProvider>
  44. <RouterView />
  45. </NMessageProvider>
  46. </NNotificationProvider>
  47. </NConfigProvider>
  48. </template>