61 lines
1.2 KiB
Vue
61 lines
1.2 KiB
Vue
<script setup>
|
|
import { RouterView } from "vue-router";
|
|
import Navbar from "./components/navbar/Navbar.vue";
|
|
import useUserInfoStore from "@/stores/useUserInfoStore";
|
|
import { ref, provide, onUnmounted, onMounted } from "vue";
|
|
|
|
const store = useUserInfoStore();
|
|
let isToastOpen = ref({
|
|
open: false,
|
|
content: "",
|
|
status: "info",
|
|
to: "body",
|
|
});
|
|
const cancelToastOpen = () => {
|
|
isToastOpen.value = {
|
|
open: false,
|
|
content: "",
|
|
};
|
|
};
|
|
|
|
const openToast = (status, content, to = "body", confirm = null) => {
|
|
isToastOpen.value = {
|
|
open: true,
|
|
content,
|
|
status,
|
|
to,
|
|
confirm,
|
|
};
|
|
};
|
|
provide("app_toast", { openToast, cancelToastOpen });
|
|
</script>
|
|
|
|
<template>
|
|
<Toast
|
|
:content="isToastOpen.content"
|
|
:open="isToastOpen.open"
|
|
:status="isToastOpen.status"
|
|
:cancel="cancelToastOpen"
|
|
:confirm="isToastOpen.confirm"
|
|
:to="isToastOpen.to"
|
|
/>
|
|
<div v-if="store.user.token" class="min-h-screen">
|
|
<Navbar />
|
|
<div class="px-8 w-full relative app-container">
|
|
<RouterView />
|
|
</div>
|
|
</div>
|
|
<div v-else class="min-h-screen"><RouterView /></div>
|
|
</template>
|
|
|
|
<style scoped>
|
|
header {
|
|
line-height: 1.5;
|
|
}
|
|
|
|
.logo {
|
|
display: block;
|
|
margin: 0 auto 1rem;
|
|
}
|
|
</style>
|