Spaces:
Sleeping
Sleeping
<script setup lang='ts'> | |
import { computed } from 'vue' | |
import { NLayout, NLayoutContent } from 'naive-ui' | |
import { useRouter } from 'vue-router' | |
import Sider from './sider/index.vue' | |
import Permission from './Permission.vue' | |
import { useBasicLayout } from '@/hooks/useBasicLayout' | |
import { useAppStore, useAuthStore, useChatStore } from '@/store' | |
const router = useRouter() | |
const appStore = useAppStore() | |
const chatStore = useChatStore() | |
const authStore = useAuthStore() | |
router.replace({ name: 'Chat', params: { uuid: chatStore.active } }) | |
const { isMobile } = useBasicLayout() | |
const collapsed = computed(() => appStore.siderCollapsed) | |
const needPermission = computed(() => !!authStore.session?.auth && !authStore.token) | |
const getMobileClass = computed(() => { | |
if (isMobile.value) | |
return ['rounded-none', 'shadow-none'] | |
return ['border', 'rounded-md', 'shadow-md', 'dark:border-neutral-800'] | |
}) | |
const getContainerClass = computed(() => { | |
return [ | |
'h-full', | |
{ 'pl-[260px]': !isMobile.value && !collapsed.value }, | |
] | |
}) | |
</script> | |
<template> | |
<div class="h-full dark:bg-[#24272e] transition-all" :class="[isMobile ? 'p-0' : 'p-4']"> | |
<div class="h-full overflow-hidden" :class="getMobileClass"> | |
<NLayout class="z-40 transition" :class="getContainerClass" has-sider> | |
<Sider /> | |
<NLayoutContent class="h-full"> | |
<RouterView v-slot="{ Component, route }"> | |
<component :is="Component" :key="route.fullPath" /> | |
</RouterView> | |
</NLayoutContent> | |
</NLayout> | |
</div> | |
<Permission :visible="needPermission" /> | |
</div> | |
</template> | |