2024-08-01 21:26:01 +00:00
|
|
|
<script setup>
|
|
|
|
|
|
|
|
import { onMounted } from 'vue'
|
|
|
|
import { RouterLink, RouterView } from 'vue-router'
|
|
|
|
|
2024-09-21 17:08:36 +00:00
|
|
|
import { GetUser, HasAdmin, UserStatus, LoadUser } from '@/services/User.js'
|
2024-08-01 21:26:01 +00:00
|
|
|
import { IsAdmin } from './services/User'
|
|
|
|
|
2024-08-08 23:29:08 +00:00
|
|
|
import useEmitter from '@/services/Emitter';
|
|
|
|
const emitter = useEmitter();
|
|
|
|
|
|
|
|
import { DisplayToast, SetEmitter } from './services/Dragonroll'
|
|
|
|
import { ImportModule, GetModulesToLoad } from './services/Modules'
|
|
|
|
import { CreateWindow } from './services/Windows';
|
2024-09-12 21:55:22 +00:00
|
|
|
import { FetchVanillaResources } from './services/Resources';
|
2024-08-08 23:29:08 +00:00
|
|
|
|
2024-08-01 21:26:01 +00:00
|
|
|
LoadUser();
|
|
|
|
|
2024-08-08 23:29:08 +00:00
|
|
|
SetEmitter(emitter);
|
2024-09-12 21:55:22 +00:00
|
|
|
|
2024-09-21 17:08:36 +00:00
|
|
|
async function start(){
|
2024-09-12 21:55:22 +00:00
|
|
|
if(GetUser()){
|
|
|
|
CreateWindow('main_menu');
|
|
|
|
// DisplayToast('green', 'Logged in successfully as ' + GetUser().username + '!', 3000)
|
2024-09-21 17:08:36 +00:00
|
|
|
} else {
|
|
|
|
if(await HasAdmin()){
|
|
|
|
CreateWindow('login');
|
|
|
|
} else {
|
|
|
|
CreateWindow('register');
|
|
|
|
}
|
|
|
|
}
|
2024-09-12 21:55:22 +00:00
|
|
|
|
|
|
|
const modules = GetModulesToLoad();
|
|
|
|
let moduleLoads = [];
|
|
|
|
|
|
|
|
modules.forEach(moduleName => {
|
|
|
|
moduleLoads.push(ImportModule(moduleName));
|
|
|
|
});
|
|
|
|
|
|
|
|
await Promise.all(moduleLoads);
|
|
|
|
|
|
|
|
await FetchVanillaResources();
|
|
|
|
|
|
|
|
DisplayToast('aqua', 'All modules loaded successfully');
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2024-08-08 23:29:08 +00:00
|
|
|
onMounted(() => {
|
2024-09-21 17:08:36 +00:00
|
|
|
start();
|
2024-08-08 23:29:08 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
|
2024-08-01 21:26:01 +00:00
|
|
|
</script>
|
|
|
|
|
|
|
|
<template>
|
|
|
|
<div class="wrapper" id="container">
|
|
|
|
<RouterView />
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<style scoped>
|
|
|
|
|
|
|
|
.web-title {
|
|
|
|
font-size: 22px;
|
|
|
|
font-weight: bolder;
|
|
|
|
padding-bottom: 12px;
|
|
|
|
color: var(--color-heading)
|
|
|
|
}
|
|
|
|
|
|
|
|
.sidebar-link {
|
|
|
|
font-weight: bold;
|
|
|
|
}
|
|
|
|
|
|
|
|
.sidebar-separator {
|
|
|
|
margin-top: 10px;
|
|
|
|
margin-left: 8px;
|
|
|
|
margin-bottom: 10px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.top-nav {
|
|
|
|
display: flex;
|
|
|
|
width: 100%;
|
|
|
|
flex-direction: column;
|
|
|
|
}
|
|
|
|
|
|
|
|
a {
|
|
|
|
width: 100%;
|
|
|
|
}
|
|
|
|
|
|
|
|
.sidebar {
|
|
|
|
flex-grow: 0;
|
|
|
|
flex-shrink: 0;
|
|
|
|
position: sticky;
|
|
|
|
top: 0;
|
|
|
|
display: flex;
|
|
|
|
max-height: 100vh;
|
|
|
|
min-height: 100vh;
|
|
|
|
overflow-y: auto;
|
|
|
|
|
|
|
|
background-color: var(--color-background-soft);
|
|
|
|
}
|
|
|
|
|
|
|
|
.wrapper {
|
|
|
|
flex-grow: 1;
|
|
|
|
flex-shrink: 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
@media (min-width: 1024px) {
|
|
|
|
.sidebar {
|
|
|
|
min-width: 240px;
|
|
|
|
padding: 16px;
|
|
|
|
height: 100%;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</style>
|