216 lines
5.6 KiB
Vue
216 lines
5.6 KiB
Vue
![]() |
<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>
|