269 lines
15 KiB
Vue
269 lines
15 KiB
Vue
<template>
|
||
<nav class="layout-navbar container-xxl navbar navbar-expand-xl navbar-detached align-items-center bg-navbar-theme" id="layout-navbar">
|
||
<div class="layout-menu-toggle navbar-nav align-items-xl-center me-4 me-xl-0 d-xl-none">
|
||
<a class="nav-item nav-link px-0 me-xl-6" href="javascript:void(0)">
|
||
<i class="bx bx-menu bx-md"></i>
|
||
</a>
|
||
</div>
|
||
|
||
<div class="navbar-nav-right d-flex align-items-center" id="navbar-collapse">
|
||
<ul class="navbar-nav flex-row align-items-center ms-auto">
|
||
<button class="btn p-1" @click="switchToLightMode"><i class="bx bxs-sun link-warning"></i></button>
|
||
<button class="btn p-1" @click="switchToDarkMode"><i class="bx bxs-moon"></i></button>
|
||
|
||
<i class="bx bx-bell bx-md bx-log-out cursor-pointer p-1" @click="handleLogout"></i>
|
||
|
||
<!-- Notification -->
|
||
<li class="nav-item dropdown-notifications navbar-dropdown dropdown me-3 me-xl-2 p-1">
|
||
<a
|
||
class="nav-link dropdown-toggle hide-arrow p-0"
|
||
href="javascript:void(0);"
|
||
data-bs-toggle="dropdown"
|
||
data-bs-auto-close="outside"
|
||
aria-expanded="false"
|
||
>
|
||
<span class="position-relative">
|
||
<i class="bx bx-bell bx-md"></i>
|
||
<span class="badge rounded-pill bg-danger badge-dot badge-notifications border"></span>
|
||
</span>
|
||
</a>
|
||
<ul class="dropdown-menu dropdown-menu-end p-0">
|
||
<li class="dropdown-menu-header border-bottom">
|
||
<div class="dropdown-header d-flex align-items-center py-3">
|
||
<h6 class="mb-0 me-auto">Notification</h6>
|
||
<div class="d-flex align-items-center h6 mb-0">
|
||
<span class="badge bg-label-primary me-2">8 New</span>
|
||
<a
|
||
href="javascript:void(0)"
|
||
class="dropdown-notifications-all p-2"
|
||
data-bs-toggle="tooltip"
|
||
data-bs-placement="top"
|
||
title="Mark all as read"
|
||
><i class="bx bx-envelope-open text-heading"></i
|
||
></a>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
<li class="dropdown-notifications-list scrollable-container">
|
||
<ul class="list-group list-group-flush">
|
||
<li class="list-group-item list-group-item-action dropdown-notifications-item">
|
||
<div class="d-flex">
|
||
<div class="flex-shrink-0 me-3">
|
||
<div class="avatar">
|
||
<img src="/img/avatars/1.png" class="rounded-circle" />
|
||
</div>
|
||
</div>
|
||
<div class="flex-grow-1">
|
||
<h6 class="small mb-0">Congratulation Lettie 🎉</h6>
|
||
<small class="mb-1 d-block text-body">Won the monthly best seller gold badge</small>
|
||
<small class="text-muted">1h ago</small>
|
||
</div>
|
||
<div class="flex-shrink-0 dropdown-notifications-actions">
|
||
<a href="javascript:void(0)" class="dropdown-notifications-read"
|
||
><span class="badge badge-dot"></span
|
||
></a>
|
||
<a href="javascript:void(0)" class="dropdown-notifications-archive"
|
||
><span class="bx bx-x"></span
|
||
></a>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
<li class="list-group-item list-group-item-action dropdown-notifications-item">
|
||
<div class="d-flex">
|
||
<div class="flex-shrink-0 me-3">
|
||
<div class="avatar">
|
||
<span class="avatar-initial rounded-circle bg-label-danger">CF</span>
|
||
</div>
|
||
</div>
|
||
<div class="flex-grow-1">
|
||
<h6 class="small mb-0">Charles Franklin</h6>
|
||
<small class="mb-1 d-block text-body">Accepted your connection</small>
|
||
<small class="text-muted">12hr ago</small>
|
||
</div>
|
||
<div class="flex-shrink-0 dropdown-notifications-actions">
|
||
<a href="javascript:void(0)" class="dropdown-notifications-read"
|
||
><span class="badge badge-dot"></span
|
||
></a>
|
||
<a href="javascript:void(0)" class="dropdown-notifications-archive"
|
||
><span class="bx bx-x"></span
|
||
></a>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
<li class="list-group-item list-group-item-action dropdown-notifications-item marked-as-read">
|
||
<div class="d-flex">
|
||
<div class="flex-shrink-0 me-3">
|
||
<div class="avatar">
|
||
<img src="/img/avatars/2.png" class="rounded-circle" />
|
||
</div>
|
||
</div>
|
||
<div class="flex-grow-1">
|
||
<h6 class="small mb-0">New Message ✉️</h6>
|
||
<small class="mb-1 d-block text-body">You have new message from Natalie</small>
|
||
<small class="text-muted">1h ago</small>
|
||
</div>
|
||
<div class="flex-shrink-0 dropdown-notifications-actions">
|
||
<a href="javascript:void(0)" class="dropdown-notifications-read"
|
||
><span class="badge badge-dot"></span
|
||
></a>
|
||
<a href="javascript:void(0)" class="dropdown-notifications-archive"
|
||
><span class="bx bx-x"></span
|
||
></a>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
<li class="list-group-item list-group-item-action dropdown-notifications-item">
|
||
<div class="d-flex">
|
||
<div class="flex-shrink-0 me-3">
|
||
<div class="avatar">
|
||
<span class="avatar-initial rounded-circle bg-label-success"
|
||
><i class="bx bx-cart"></i
|
||
></span>
|
||
</div>
|
||
</div>
|
||
<div class="flex-grow-1">
|
||
<h6 class="small mb-0">Whoo! You have new order 🛒</h6>
|
||
<small class="mb-1 d-block text-body">ACME Inc. made new order $1,154</small>
|
||
<small class="text-muted">1 day ago</small>
|
||
</div>
|
||
<div class="flex-shrink-0 dropdown-notifications-actions">
|
||
<a href="javascript:void(0)" class="dropdown-notifications-read"
|
||
><span class="badge badge-dot"></span
|
||
></a>
|
||
<a href="javascript:void(0)" class="dropdown-notifications-archive"
|
||
><span class="bx bx-x"></span
|
||
></a>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="border-top">
|
||
<div class="d-grid p-4">
|
||
<a class="btn btn-primary btn-sm d-flex" href="javascript:void(0);">
|
||
<small class="align-middle">View all notifications</small>
|
||
</a>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<!--/ Notification -->
|
||
<!-- User -->
|
||
<li class="nav-item navbar-dropdown dropdown-user dropdown">
|
||
<a class="nav-link dropdown-toggle hide-arrow p-0" href="javascript:void(0);" data-bs-toggle="dropdown">
|
||
<img
|
||
v-if="user"
|
||
:src="`${baseUrl}upload/img/profile/${user.profile}`"
|
||
alt="Profile Image"
|
||
class="w-px-40 h-px-40 rounded-circle"
|
||
@error="$event.target.src = '/img/icons/icon.png'"
|
||
/>
|
||
</a>
|
||
<ul class="dropdown-menu dropdown-menu-end">
|
||
<li>
|
||
<a class="dropdown-item" href="pages-account-settings-account.html">
|
||
<div class="d-flex">
|
||
<div class="flex-shrink-0 me-3">
|
||
<div class="avatar avatar-online">
|
||
<img src="/img/avatars/1.png" class="w-px-40 h-auto rounded-circle" />
|
||
</div>
|
||
</div>
|
||
<div class="flex-grow-1">
|
||
<h6 class="mb-0">John Doe</h6>
|
||
<small class="text-muted">Admin</small>
|
||
</div>
|
||
</div>
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<div class="dropdown-divider my-1"></div>
|
||
</li>
|
||
<li>
|
||
<a class="dropdown-item" href="pages-profile-user.html">
|
||
<i class="bx bx-user bx-md me-3"></i><span>My Profile</span>
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<a class="dropdown-item" href="pages-account-settings-account.html">
|
||
<i class="bx bx-cog bx-md me-3"></i><span>Settings</span>
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<a class="dropdown-item" href="pages-account-settings-billing.html">
|
||
<span class="d-flex align-items-center align-middle">
|
||
<i class="flex-shrink-0 bx bx-credit-card bx-md me-3"></i
|
||
><span class="flex-grow-1 align-middle">Billing Plan</span>
|
||
<span class="flex-shrink-0 badge rounded-pill bg-danger">4</span>
|
||
</span>
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<div class="dropdown-divider my-1"></div>
|
||
</li>
|
||
<li>
|
||
<a class="dropdown-item" href="pages-pricing.html">
|
||
<i class="bx bx-dollar bx-md me-3"></i><span>Pricing</span>
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<a class="dropdown-item" href="pages-faq.html">
|
||
<i class="bx bx-help-circle bx-md me-3"></i><span>FAQ</span>
|
||
</a>
|
||
</li>
|
||
<li>
|
||
<div class="dropdown-divider my-1"></div>
|
||
</li>
|
||
<li>
|
||
<a class="dropdown-item" href="auth-login-cover.html" target="_blank">
|
||
<i class="bx bx-power-off bx-md me-3"></i><span>Log Out</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<!--/ User -->
|
||
</ul>
|
||
</div>
|
||
|
||
<!-- Search Small Screens -->
|
||
<div class="navbar-search-wrapper search-input-wrapper d-none">
|
||
<input type="text" class="form-control search-input container-xxl border-0" placeholder="Search..." aria-label="Search..." />
|
||
<i class="bx bx-x bx-md search-toggler cursor-pointer"></i>
|
||
</div>
|
||
</nav>
|
||
</template>
|
||
<script setup>
|
||
import { useAuthStore } from '@s/useAuthStore';
|
||
import { useUserInfoStore } from '@/stores/useUserInfoStore';
|
||
import { useRouter } from 'vue-router';
|
||
import { useThemeStore } from '@s/darkmode';
|
||
import { onMounted, ref } from 'vue';
|
||
import $api from '@api';
|
||
|
||
const user = ref(null);
|
||
//const baseUrl = $api.defaults.baseURL.replace(/api\/$/, '');
|
||
const baseUrl = import.meta.env.BASE_URL;
|
||
|
||
const authStore = useAuthStore();
|
||
const userStore = useUserInfoStore();
|
||
const router = useRouter();
|
||
|
||
const { isDarkMode, switchToDarkMode, switchToLightMode } = useThemeStore();
|
||
|
||
onMounted(async () => {
|
||
if (isDarkMode) {
|
||
switchToDarkMode();
|
||
} else {
|
||
switchToLightMode();
|
||
}
|
||
|
||
await userStore.userInfo();
|
||
user.value = userStore.user;
|
||
});
|
||
|
||
const handleLogout = async () => {
|
||
await authStore.logout();
|
||
router.push('/login');
|
||
};
|
||
</script>
|
||
<style></style>
|