base_ui/components/global/Notification.vue

327 lines
6.2 KiB
Vue
Raw Normal View History

2025-02-01 09:34:55 +00:00
<template>
<div class="dropdown profile-dropdown d-sm-flex align-items-center">
<a
@click="getListUnseen()"
title="اعلانات"
class="nav-link dropdown-toggle"
href="#"
role="button"
data-bs-toggle="dropdown"
aria-expanded="false"
>
<span class="badge bg-primary" title="اعلانات خوانده نشده">
<svg class="icon icon-Component-285--2">
<use xlink:href="#icon-Component-285--2"></use>
</svg>
{{ countUnseen ?? 0 }}
</span>
<span class="badge bg-primary" title="اعلانات خوانده نشده">
{{ countUnseen ?? 0 }}
</span>
</a>
<ul
class="dropdown-menu dropdown-menu-end text-right"
aria-labelledby="navbarDropdown"
>
<the-content-loading
class="absolute-positioning"
v-if="fetchingData"
></the-content-loading>
<div v-else>
<div v-if="listUnseen && listUnseen.length">
<div class="user__container p-0">
<notification-item
v-for="item in listUnseen"
:item="item"
:key="item._id"
:shortenTitle="true"
@go-to-notification-show-page="goToNotificationShowPage(item)"
></notification-item>
</div>
</div>
<no-data v-else>
<div class="d-flex justify-content-center align-items-center">
<div
class="alert alert-warning d-flex justify-content-center align-items-center"
>
<span
class="tavasi tavasi-warning-circle color-inherit ml-1 text__32"
></span>
اعلان خوانده نشده ندارید
</div>
</div>
</no-data>
<hr />
<more-button-component
@go-to-notification-show-page="goToNotificationPage()"
:list="listUnseen"
></more-button-component>
</div>
</ul>
</div>
</template>
<script>
import notificationMixin from "~/mixins/notifications/notificationMixin";
export default {
extends: notificationMixin,
mounted() {
this.getCountUnseen();
},
};
</script>
<style scoped lang="scss">
.user {
&__container {
padding-left: 30px;
}
&__header {
h4 {
font-size: 16px;
padding-bottom: 14px;
padding-top: 18px;
}
}
&__item {
// @include border-top(1px, var(--color-14));
display: flex;
padding-top: 16px;
margin-bottom: 12px;
.color-1 span {
background-color: var(--color-17) !important;
}
.color-2 span {
background-color: var(--color-19) !important;
}
.color-3 span {
background-color: var(--color-19) !important;
}
.color-4 span {
background-color: var(--color-20) !important;
}
.color-5 span {
background-color: var(--color-35) !important;
}
.color-6 span {
background-color: var(--color-21) !important;
}
.color-7 span {
background-color: var(--color-22) !important;
}
.color-8 span {
background-color: var(--color-23) !important;
}
}
&__pic {
margin-left: 15px;
img {
width: 32px;
height: 32px;
border-radius: 50%;
overflow: hidden;
}
}
&__no-pic {
span {
width: 32px;
height: 32px;
color: var(--color-14);
font-size: 14px;
display: flex;
justify-content: center;
align-items: center;
border-radius: 50%;
}
&.color-3 span {
background: var(--color-24);
}
}
&__content {
flex: 1;
display: flex;
flex-direction: column;
}
&__item-head {
display: flex;
align-items: center;
margin-bottom: 3px;
}
&__name {
font-size: 14px;
font-weight: 600;
color: var(--color-4);
display: flex;
align-items: center;
}
&__status {
margin-left: auto;
font-weight: normal;
padding-right: 5px;
font-size: 14px;
color: var(--color-9);
}
&__date {
margin-right: auto;
font-size: 12px;
color: var(--color-7);
}
&__breadcrumb {
ul {
display: flex;
align-items: center;
list-style: none;
}
li {
display: flex;
align-items: center;
&:not(:last-child):after {
content: ">";
padding-right: 8px;
padding-left: 8px;
padding-top: 4px;
font-size: 10px;
font-weight: bold;
color: var(--color-7);
display: flex;
justify-content: center;
align-items: center;
}
&:last-child {
flex: 1;
a {
// @include lineclamp(1);
}
}
}
a {
display: block;
font-size: 12px;
color: var(--color-4);
}
}
&__text {
font-size: 14px;
color: var(--color-9);
margin-top: 4px;
}
&__invite {
color: var(--color-1);
}
}
.user-avatar-component {
position: absolute;
top: calc(50% - 20px);
left: 0;
}
.in-sidebar {
position: absolute;
bottom: 6em;
// &.#{$VITE_BUILD_NAME}-sidebar {
// margin-right: 0.5em;
// .user-avatar {
// width: 2.7em;
// height: 3em;
// }
// }
// &.#{$VITE_BUILD_NAME}-navbar {
// .dropdown-toggle{
// color: #fff;
// }
// }
.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);
}
.dropdown-menu {
width: 20em;
padding: 1em;
max-height: 30em;
overflow-y: auto;
}
.icon-Component-285--2 {
position: relative;
width: 0.5em;
height: 0.5em;
line-height: 0.5em;
border-radius: 50%;
text-align: center;
background: #fff;
padding: 0.1em;
font-size: 3.5rem;
box-shadow: rgba(23, 23, 23, 0.24) 0px 1px 3px;
&:hover {
box-shadow: rgba(23, 23, 23, 0.24) 0px 2px 4px;
}
}
.badge {
position: absolute;
top: 0;
right: 0;
}
</style>