53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
<script setup lang="ts">
 | 
						|
import { RouterView, useRoute } from 'vue-router';
 | 
						|
import { NGlobalStyle, NMessageProvider, NNotificationProvider, darkTheme } from 'naive-ui';
 | 
						|
import { darkThemeOverrides, lightThemeOverrides } from './themes';
 | 
						|
import { layouts } from './layouts';
 | 
						|
import { useStyleStore } from './stores/style.store';
 | 
						|
 | 
						|
const route = useRoute();
 | 
						|
const layout = computed(() => route?.meta?.layout ?? layouts.base);
 | 
						|
const styleStore = useStyleStore();
 | 
						|
 | 
						|
const theme = computed(() => (styleStore.isDarkTheme ? darkTheme : null));
 | 
						|
const themeOverrides = computed(() => (styleStore.isDarkTheme ? darkThemeOverrides : lightThemeOverrides));
 | 
						|
 | 
						|
const { locale } = useI18n();
 | 
						|
 | 
						|
syncRef(
 | 
						|
  locale,
 | 
						|
  useStorage('locale', locale),
 | 
						|
);
 | 
						|
</script>
 | 
						|
 | 
						|
<template>
 | 
						|
  <n-config-provider :theme="theme" :theme-overrides="themeOverrides">
 | 
						|
    <NGlobalStyle />
 | 
						|
    <NMessageProvider placement="bottom">
 | 
						|
      <NNotificationProvider placement="bottom-right">
 | 
						|
        <component :is="layout">
 | 
						|
          <RouterView />
 | 
						|
        </component>
 | 
						|
      </NNotificationProvider>
 | 
						|
    </NMessageProvider>
 | 
						|
  </n-config-provider>
 | 
						|
</template>
 | 
						|
 | 
						|
<style>
 | 
						|
body {
 | 
						|
  min-height: 100%;
 | 
						|
  margin: 0;
 | 
						|
  padding: 0;
 | 
						|
}
 | 
						|
 | 
						|
html {
 | 
						|
  height: 100%;
 | 
						|
  margin: 0;
 | 
						|
  padding: 0;
 | 
						|
}
 | 
						|
 | 
						|
* {
 | 
						|
  box-sizing: border-box;
 | 
						|
}
 | 
						|
</style>
 |