<template> <!-- <div class="dropdown vertical-line"> --> <div v-if="currentUser" :style="{ display: $route.name == 'dashboard' ? 'block' : 'flex' }" class="dropdown profile-dropdown d-sm-flex align-items-center" :class="buildName() + '-user-avatar'" > <!-- :title="userFullname(currentUser?.user_data)" --> <a class="nav-link dropdown-toggle px-0" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-bs-toggle="dropdown" > <!-- <span> {{ currentUser?.user_data?.first_name }} </span> --> <!-- <span> {{ userFullname(currentUser?.user_data) }} </span> --> <svg v-if="isGuest && showRegister" class="icon icon-personal"> <use class="icon-personal" xlink:href="#icon-personal"></use> </svg> <!-- :alt="userFullname(currentUser?.user_data)" --> <img v-else class="img-fluid user-avatar" :src="avatar" /> </a> <div class="dropdown-menu text-right" aria-labelledby="navbarDropdown"> <NuxtLink v-can="'admin_dahsboard'" :to="{ name: 'admin' }" class="dropdown-item" >{{ $t("admin") }}</NuxtLink > <slot /> <button title="نصب سامانه - در صفحه گوشی یا رایانه" class="dropdown-item" type="button" @click.prevent="checkBeforeInstallingPwa()" > {{ $t("InstallSystem") }} </button> <button @click.prevent="logout()" class="dropdown-item"> {{ $t("Exit") }} </button> <button v-if="isNewVersionAvailable" @click="reloadPage()" class="dropdown-item" > <svg style="height: 1em" class="icon icon-reset-form"> <use xlink:href="#icon-reset-form"></use> </svg> بروزرسانی </button> <div v-else style="background-color: #eee" class="text-center px-3"> نسخه : <strong style="font-size: 1.1rem"> {{ versionNumber }} </strong> </div> </div> <a v-if="isGuest && showRegister" title="ثبت نام" href="/login" class="text__14 text__blue button button-guest" >ثبت نام </a> </div> </template> <script> import { mapState } from "pinia"; import { useAuthStore } from "~/stores/authStore"; import { useStorage } from "@vueuse/core"; /** * @vue-prop {Boolean} [showRegister=true] - نشان میدهد که آیا فرم ثبتنام نمایش داده شود یا خیر * * @vue-data {Boolean} [isNewVersionAvailable=false] - نشان میدهد که آیا نسخه جدیدی موجود است یا خیر * @vue-data {String|null} [envVersion=null] - نسخه محیط * @vue-data {String|null} [lsVersion=null] - نسخه ذخیره شده در localStorage * * @vue-computed {Object} [currentUser] - کاربر فعلی * @vue-computed {Boolean} [isGuest] - نشان میدهد که آیا کاربر میهمان است یا خیر * @vue-computed {String} [versionNumber] - شماره نسخه برنامه از متغیرهای محیطی */ export default { props: { showRegister: { default: true, }, }, async mounted() { this.envVersion = import.meta.env.VITE_VERSION; this.lsVersion = useStorage("app-version", "0.0.0").value; if (this.lsVersion) { if (this.envVersion != this.lsVersion) this.isNewVersionAvailable = true; } this.avatar = await userAvatar(this.currentUser?.user_data); }, data() { return { isNewVersionAvailable: false, envVersion: null, lsVersion: null, avatar: "", }; }, computed: { ...mapState(useAuthStore, ["currentUser", "isGuest"]), versionNumber() { return import.meta.env.VITE_VERSION; }, }, methods: { /** * صفحه فعلی را مجدداً بارگذاری میکند. */ reloadPage() { location.reload(); }, /** * قبل از تلاش برای نصب یک اپلیکیشن وب پیشرونده (PWA) مرورگر را بررسی میکند. * اگر مرورگر Firefox باشد، به کاربر اعلام میکند که PWA پشتیبانی نمیشود. * در غیر این صورت، فرآیند نصب PWA را ادامه میدهد. */ checkBeforeInstallingPwa() { if (identifyBrowser().includes("Firefox")) { alertPwaNotSupported(); } else { installPwa(); } }, }, }; </script> <style scoped lang="scss"> .user-avatar-component { position: absolute; top: calc(50% - 20px); left: 0; } .in-sidebar { // position: absolute; // bottom: 6em; // left: 0; // right: 0; justify-content: center; .nav-link.dropdown-toggle { &::after { content: none; } span { display: none; } } } .button { min-height: 32px; min-width: 92px; width: -webkit-max-content; width: -moz-max-content; width: max-content; border: 2px solid #00b6e3; border-radius: 20px; display: flex; justify-content: center; align-items: center; padding: 0 10px; color: var(--primary-color); text-decoration: none; } .button:hover { color: #fff !important; background-color: var(--primary-color); } .dropdown-toggle:hover { color: var(--primary-color); } .task-avatar { .dropdown-menu { position: absolute !important; } } .majles-user-avatar { .button-guest { color: #00b7b7 !important; } .button { border: 2px solid #1d645a; } .button:hover { color: #fff !important; background-color: #316161; } } </style>