UX/UI improvements.
This commit is contained in:
parent
418d3cc402
commit
4e6f5d36b8
14 changed files with 1964 additions and 924 deletions
|
|
@ -1,6 +1,10 @@
|
|||
<template>
|
||||
<div class="site">
|
||||
<a href="#main-content" class="sr-only focus:not-sr-only focus:absolute focus:z-[100] focus:p-3 focus:bg-[var(--bg)] focus:text-[var(--text)]">Skip to content</a>
|
||||
<a
|
||||
href="#main-content"
|
||||
class="sr-only focus:not-sr-only focus:absolute focus:z-[100] focus:p-3 focus:bg-[var(--bg)] focus:text-[var(--text)]"
|
||||
>Skip to content</a
|
||||
>
|
||||
<!-- Desktop Sidebar -->
|
||||
<aside class="sidebar sidebar-desktop">
|
||||
<NuxtLink to="/" class="sidebar-brand">Ghost Guild</NuxtLink>
|
||||
|
|
@ -14,17 +18,26 @@
|
|||
</NuxtLink>
|
||||
</li>
|
||||
<li>
|
||||
<NuxtLink to="/admin/members" :class="{ active: route.path.startsWith('/admin/members') }">
|
||||
<NuxtLink
|
||||
to="/admin/members"
|
||||
:class="{ active: route.path.startsWith('/admin/members') }"
|
||||
>
|
||||
Members
|
||||
</NuxtLink>
|
||||
</li>
|
||||
<li>
|
||||
<NuxtLink to="/admin/events" :class="{ active: route.path.startsWith('/admin/events') }">
|
||||
<NuxtLink
|
||||
to="/admin/events"
|
||||
:class="{ active: route.path.startsWith('/admin/events') }"
|
||||
>
|
||||
Events
|
||||
</NuxtLink>
|
||||
</li>
|
||||
<li>
|
||||
<NuxtLink to="/admin/series-management" :class="{ active: route.path.includes('/admin/series') }">
|
||||
<NuxtLink
|
||||
to="/admin/series-management"
|
||||
:class="{ active: route.path.includes('/admin/series') }"
|
||||
>
|
||||
Series
|
||||
</NuxtLink>
|
||||
</li>
|
||||
|
|
@ -38,7 +51,7 @@
|
|||
</div>
|
||||
|
||||
<div class="sidebar-meta">
|
||||
<span class="admin-tag">admin</span><br>
|
||||
<span class="admin-tag">admin</span><br />
|
||||
<a href="#" @click.prevent="logout">Sign out</a>
|
||||
</div>
|
||||
</aside>
|
||||
|
|
@ -59,28 +72,49 @@
|
|||
<USlideover v-model:open="isMobileMenuOpen" side="left">
|
||||
<template #body>
|
||||
<aside class="sidebar sidebar-mobile">
|
||||
<NuxtLink to="/" class="sidebar-brand" @click="isMobileMenuOpen = false">Ghost Guild</NuxtLink>
|
||||
<NuxtLink
|
||||
to="/"
|
||||
class="sidebar-brand"
|
||||
@click="isMobileMenuOpen = false"
|
||||
>Ghost Guild</NuxtLink
|
||||
>
|
||||
|
||||
<div class="sidebar-body">
|
||||
<div class="sidebar-section">Admin</div>
|
||||
<ul class="sidebar-nav">
|
||||
<li>
|
||||
<NuxtLink to="/admin" :class="{ active: route.path === '/admin' }" @click="isMobileMenuOpen = false">
|
||||
<NuxtLink
|
||||
to="/admin"
|
||||
:class="{ active: route.path === '/admin' }"
|
||||
@click="isMobileMenuOpen = false"
|
||||
>
|
||||
Dashboard
|
||||
</NuxtLink>
|
||||
</li>
|
||||
<li>
|
||||
<NuxtLink to="/admin/members" :class="{ active: route.path.startsWith('/admin/members') }" @click="isMobileMenuOpen = false">
|
||||
<NuxtLink
|
||||
to="/admin/members"
|
||||
:class="{ active: route.path.startsWith('/admin/members') }"
|
||||
@click="isMobileMenuOpen = false"
|
||||
>
|
||||
Members
|
||||
</NuxtLink>
|
||||
</li>
|
||||
<li>
|
||||
<NuxtLink to="/admin/events" :class="{ active: route.path.startsWith('/admin/events') }" @click="isMobileMenuOpen = false">
|
||||
<NuxtLink
|
||||
to="/admin/events"
|
||||
:class="{ active: route.path.startsWith('/admin/events') }"
|
||||
@click="isMobileMenuOpen = false"
|
||||
>
|
||||
Events
|
||||
</NuxtLink>
|
||||
</li>
|
||||
<li>
|
||||
<NuxtLink to="/admin/series-management" :class="{ active: route.path.includes('/admin/series') }" @click="isMobileMenuOpen = false">
|
||||
<NuxtLink
|
||||
to="/admin/series-management"
|
||||
:class="{ active: route.path.includes('/admin/series') }"
|
||||
@click="isMobileMenuOpen = false"
|
||||
>
|
||||
Series
|
||||
</NuxtLink>
|
||||
</li>
|
||||
|
|
@ -88,13 +122,23 @@
|
|||
|
||||
<div class="sidebar-section">Site</div>
|
||||
<ul class="sidebar-nav">
|
||||
<li><NuxtLink to="/member/dashboard" @click="isMobileMenuOpen = false">Your Dashboard</NuxtLink></li>
|
||||
<li><NuxtLink to="/" @click="isMobileMenuOpen = false">Public Site</NuxtLink></li>
|
||||
<li>
|
||||
<NuxtLink
|
||||
to="/member/dashboard"
|
||||
@click="isMobileMenuOpen = false"
|
||||
>Your Dashboard</NuxtLink
|
||||
>
|
||||
</li>
|
||||
<li>
|
||||
<NuxtLink to="/" @click="isMobileMenuOpen = false"
|
||||
>Public Site</NuxtLink
|
||||
>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="sidebar-meta">
|
||||
<span class="admin-tag">admin</span><br>
|
||||
<span class="admin-tag">admin</span><br />
|
||||
<a href="#" @click.prevent="logout">Sign out</a>
|
||||
</div>
|
||||
</aside>
|
||||
|
|
@ -104,23 +148,29 @@
|
|||
</template>
|
||||
|
||||
<script setup>
|
||||
const route = useRoute()
|
||||
const isMobileMenuOpen = ref(false)
|
||||
const route = useRoute();
|
||||
const isMobileMenuOpen = ref(false);
|
||||
|
||||
const pageBreadcrumbTitle = useState("pageBreadcrumbTitle", () => "");
|
||||
|
||||
const currentPageName = computed(() => {
|
||||
const path = route.path
|
||||
if (path === '/admin') return 'admin'
|
||||
return path.slice(1).replace(/\//g, ' / ')
|
||||
})
|
||||
const path = route.path;
|
||||
if (path === "/admin") return "admin";
|
||||
const segments = path.slice(1).split("/");
|
||||
if (pageBreadcrumbTitle.value && segments.length > 1) {
|
||||
return [...segments.slice(0, -1), pageBreadcrumbTitle.value].join(" / ");
|
||||
}
|
||||
return segments.join(" / ");
|
||||
});
|
||||
|
||||
const logout = async () => {
|
||||
try {
|
||||
await $fetch('/api/auth/logout', { method: 'POST' })
|
||||
await navigateTo('/')
|
||||
await $fetch("/api/auth/logout", { method: "POST" });
|
||||
await navigateTo("/");
|
||||
} catch (error) {
|
||||
console.error('Logout failed:', error)
|
||||
console.error("Logout failed:", error);
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
|
@ -155,7 +205,7 @@ const logout = async () => {
|
|||
|
||||
.sidebar-brand {
|
||||
display: block;
|
||||
font-family: 'Brygada 1918', serif;
|
||||
font-family: "Brygada 1918", serif;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
color: var(--candle);
|
||||
|
|
@ -163,7 +213,9 @@ const logout = async () => {
|
|||
border-bottom: 1px dashed var(--border);
|
||||
text-decoration: none;
|
||||
}
|
||||
.sidebar-brand:hover { text-decoration: none; }
|
||||
.sidebar-brand:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.sidebar-body {
|
||||
flex: 1;
|
||||
|
|
@ -239,7 +291,7 @@ const logout = async () => {
|
|||
}
|
||||
|
||||
.brand {
|
||||
font-family: 'Brygada 1918', serif;
|
||||
font-family: "Brygada 1918", serif;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
color: var(--candle);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue