fix: admin users
Deploy banu-front / deploy (push) Failing after 16s

This commit is contained in:
sajjadtalkhabi
2026-06-10 20:55:54 +03:30
parent b8ccbcc030
commit b9fa65b84f
51 changed files with 373 additions and 255 deletions
@@ -2,18 +2,22 @@
<div class="users-table">
<div v-for="user in users" :key="user.id" class="users-table__row">
<div class="users-table__avatar">
<img v-if="user.avatarUrl" :src="user.avatarUrl" :alt="fullName(user)" />
<img v-if="user.avatarUrl" :src="user.avatarUrl" :alt="user?.name" />
<SvgIcon v-else name="user" :size="36" color="#cbd5e1" />
</div>
<div class="users-table__info">
<p class="users-table__name">{{ fullName(user) || '—' }}</p>
<p class="users-table__name">{{ user?.name || '—' }}</p>
<div class="users-table__meta">
<span v-if="user.phoneNumber">{{ user.phoneNumber }}</span>
<span v-if="user.phone">{{ user.phone }}</span>
<span v-if="user.nationalCode" class="users-table__sep">|</span>
<span v-if="user.nationalCode">کد ملی: {{ user.nationalCode }}</span>
</div>
</div>
<Badge v-if="user.status === 'blocked'" variant="danger" size="sm" dot>
{{ USER_STATUS.blocked }}
</Badge>
<button
type="button"
class="users-table__role-badge"
@@ -66,8 +70,9 @@
</template>
<script setup>
import { ROLES } from '@/enums'
import { computed, ref } from 'vue'
import Badge from '@/components/Badge.vue'
import { ROLES, USER_STATUS } from '@/enums'
import { useQueryClient } from '@tanstack/vue-query'
import SvgIcon from '@/components/icons/SvgIcon.vue'
import BaseButton from '@/components/BaseButton.vue'
@@ -80,17 +85,7 @@ defineProps({
const queryClient = useQueryClient()
const emit = defineEmits([
'edit',
'delete',
'block',
'show-details',
'show-assignments',
'show-exams',
'export-pdf',
])
const fullName = (user) => `${user.firstName || ''} ${user.lastName || ''}`.trim()
const emit = defineEmits(['edit', 'delete', 'block', 'unblock', 'show-details'])
const roleName = (user) => {
const first = user.roles?.[0]
@@ -155,45 +150,38 @@ const roleMenuItems = computed(() => {
}))
})
const menuItems = computed(() => [
{
key: 'edit',
label: 'ویرایش',
icon: 'pencil',
onClick: () => emit('edit', activeUser.value),
},
{
key: 'delete',
label: 'حذف',
icon: 'trash',
onClick: () => emit('delete', activeUser.value),
},
{
key: 'block',
label: 'مسدود کردن کاربر',
icon: 'close',
danger: true,
onClick: () => emit('block', activeUser.value),
},
{
key: 'show-assignments',
label: 'جزئیات تکلیف',
icon: 'file',
onClick: () => emit('show-assignments', activeUser.value),
},
{
key: 'show-exams',
label: 'جزئیات آزمون',
icon: 'file',
onClick: () => emit('show-exams', activeUser.value),
},
{
key: 'export-pdf',
label: 'خروجی PDF',
icon: 'upload',
onClick: () => emit('export-pdf', activeUser.value),
},
])
const menuItems = computed(() => {
const user = activeUser.value
const isBlocked = user?.status === 'blocked'
return [
{
key: 'edit',
label: 'ویرایش',
icon: 'pencil',
onClick: () => emit('edit', user),
},
{
key: 'delete',
label: 'حذف',
icon: 'trash',
onClick: () => emit('delete', user),
},
isBlocked
? {
key: 'unblock',
label: 'رفع مسدودیت کاربر',
icon: 'check',
onClick: () => emit('unblock', user),
}
: {
key: 'block',
label: 'مسدود کردن کاربر',
icon: 'close',
danger: true,
onClick: () => emit('block', user),
},
]
})
</script>
<style lang="scss" scoped>