251 lines
5.8 KiB
Vue
251 lines
5.8 KiB
Vue
<script setup>
|
|
import avatar1 from '@images/avatars/avatar-1.png'
|
|
import avatar2 from '@images/avatars/avatar-2.png'
|
|
import avatar3 from '@images/avatars/avatar-3.png'
|
|
import avatar4 from '@images/avatars/avatar-4.png'
|
|
import avatar5 from '@images/avatars/avatar-5.png'
|
|
import avatar6 from '@images/avatars/avatar-6.png'
|
|
import avatar7 from '@images/avatars/avatar-7.png'
|
|
import avatar8 from '@images/avatars/avatar-8.png'
|
|
|
|
const headers = [
|
|
{
|
|
title: 'User',
|
|
key: 'username',
|
|
},
|
|
{
|
|
title: 'Email',
|
|
key: 'email',
|
|
},
|
|
{
|
|
title: 'Role',
|
|
key: 'role',
|
|
},
|
|
{
|
|
title: 'Status',
|
|
key: 'status',
|
|
},
|
|
]
|
|
|
|
const userData = [
|
|
{
|
|
id: 1,
|
|
fullName: 'Galasasen Slixby',
|
|
company: 'Yotz PVT LTD',
|
|
role: 'editor',
|
|
username: 'gslixby0',
|
|
country: 'El Salvador',
|
|
contact: '(479) 232-9151',
|
|
email: 'gslixby0@abc.net.au',
|
|
currentPlan: 'enterprise',
|
|
status: 'inactive',
|
|
avatar: avatar1,
|
|
},
|
|
{
|
|
id: 2,
|
|
fullName: 'Halsey Redmore',
|
|
company: 'Skinder PVT LTD',
|
|
role: 'author',
|
|
username: 'hredmore1',
|
|
country: 'Albania',
|
|
contact: '(472) 607-9137',
|
|
email: 'hredmore1@imgur.com',
|
|
currentPlan: 'team',
|
|
status: 'pending',
|
|
avatar: avatar2,
|
|
},
|
|
{
|
|
id: 3,
|
|
fullName: 'Marjory Sicely',
|
|
company: 'Oozz PVT LTD',
|
|
role: 'maintainer',
|
|
username: 'msicely2',
|
|
country: 'Russia',
|
|
contact: '(321) 264-4599',
|
|
email: 'msicely2@who.int',
|
|
currentPlan: 'enterprise',
|
|
status: 'active',
|
|
avatar: avatar3,
|
|
},
|
|
{
|
|
id: 4,
|
|
fullName: 'Cyrill Risby',
|
|
company: 'Oozz PVT LTD',
|
|
role: 'Admin',
|
|
username: 'crisby3',
|
|
country: 'China',
|
|
contact: '(923) 690-6806',
|
|
email: 'crisby3@wordpress.com',
|
|
currentPlan: 'team',
|
|
status: 'inactive',
|
|
avatar: avatar4,
|
|
},
|
|
{
|
|
id: 5,
|
|
fullName: 'Maggy Hurran',
|
|
company: 'Aimbo PVT LTD',
|
|
role: 'subscriber',
|
|
username: 'mhurran4',
|
|
country: 'Pakistan',
|
|
contact: '(669) 914-1078',
|
|
email: 'mhurran4@yahoo.co.jp',
|
|
currentPlan: 'enterprise',
|
|
status: 'pending',
|
|
avatar: avatar5,
|
|
},
|
|
{
|
|
id: 6,
|
|
fullName: 'Silvain Halstead',
|
|
company: 'Jaxbean PVT LTD',
|
|
role: 'author',
|
|
username: 'shalstead5',
|
|
country: 'China',
|
|
contact: '(958) 973-3093',
|
|
email: 'shalstead5@shinystat.com',
|
|
currentPlan: 'company',
|
|
status: 'active',
|
|
avatar: avatar6,
|
|
},
|
|
{
|
|
id: 7,
|
|
fullName: 'Breena Gallemore',
|
|
company: 'Jazzy PVT LTD',
|
|
role: 'subscriber',
|
|
username: 'bgallemore6',
|
|
country: 'Canada',
|
|
contact: '(825) 977-8152',
|
|
email: 'bgallemore6@boston.com',
|
|
currentPlan: 'company',
|
|
status: 'pending',
|
|
avatar: avatar7,
|
|
},
|
|
{
|
|
id: 8,
|
|
fullName: 'Kathryne Liger',
|
|
company: 'Pixoboo PVT LTD',
|
|
role: 'author',
|
|
username: 'kliger7',
|
|
country: 'France',
|
|
contact: '(187) 440-0934',
|
|
email: 'kliger7@vinaora.com',
|
|
currentPlan: 'enterprise',
|
|
status: 'pending',
|
|
avatar: avatar8,
|
|
},
|
|
]
|
|
|
|
const resolveUserRoleVariant = role => {
|
|
const roleLowerCase = role.toLowerCase()
|
|
if (roleLowerCase === 'subscriber')
|
|
return {
|
|
color: 'success',
|
|
icon: 'ri-user-line',
|
|
}
|
|
if (roleLowerCase === 'author')
|
|
return {
|
|
color: 'error',
|
|
icon: 'ri-computer-line',
|
|
}
|
|
if (roleLowerCase === 'maintainer')
|
|
return {
|
|
color: 'info',
|
|
icon: 'ri-pie-chart-line',
|
|
}
|
|
if (roleLowerCase === 'editor')
|
|
return {
|
|
color: 'warning',
|
|
icon: 'ri-edit-box-line',
|
|
}
|
|
if (roleLowerCase === 'admin')
|
|
return {
|
|
color: 'primary',
|
|
icon: 'ri-vip-crown-line',
|
|
}
|
|
|
|
return {
|
|
color: 'success',
|
|
icon: 'ri-user-line',
|
|
}
|
|
}
|
|
|
|
const resolveUserStatusVariant = stat => {
|
|
const statLowerCase = stat.toLowerCase()
|
|
if (statLowerCase === 'pending')
|
|
return 'warning'
|
|
if (statLowerCase === 'active')
|
|
return 'success'
|
|
if (statLowerCase === 'inactive')
|
|
return 'secondary'
|
|
|
|
return 'primary'
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<VCard>
|
|
<VDataTable
|
|
:headers="headers"
|
|
:items="userData"
|
|
item-value="id"
|
|
class="text-no-wrap"
|
|
>
|
|
<!-- User -->
|
|
<template #item.username="{ item }">
|
|
<div class="d-flex align-center gap-x-4">
|
|
<VAvatar
|
|
size="34"
|
|
:variant="!item.avatar ? 'tonal' : undefined"
|
|
:color="!item.avatar ? resolveUserRoleVariant(item.role).color : undefined"
|
|
>
|
|
<VImg
|
|
v-if="item.avatar"
|
|
:src="item.avatar"
|
|
/>
|
|
<span v-else>{{ avatarText(item.fullName) }}</span>
|
|
</VAvatar>
|
|
|
|
<div class="d-flex flex-column">
|
|
<RouterLink
|
|
:to="{ name: 'apps-user-view-id', params: { id: item.id } }"
|
|
class="text-h6 font-weight-medium user-list-name"
|
|
>
|
|
{{ item.fullName }}
|
|
</RouterLink>
|
|
|
|
<span class="text-sm text-medium-emphasis">@{{ item.username }}</span>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
<!-- Role -->
|
|
<template #item.role="{ item }">
|
|
<div class="d-flex gap-4">
|
|
<VIcon
|
|
:icon="resolveUserRoleVariant(item.role).icon"
|
|
:color="resolveUserRoleVariant(item.role).color"
|
|
size="22"
|
|
/>
|
|
<div class="text-capitalize text-high-emphasis">
|
|
{{ item.role }}
|
|
</div>
|
|
</div>
|
|
</template>
|
|
<!-- Plan -->
|
|
<template #item.plan="{ item }">
|
|
<span class="text-capitalize text-high-emphasis">{{ item.currentPlan }}</span>
|
|
</template>
|
|
<!-- Status -->
|
|
<template #item.status="{ item }">
|
|
<VChip
|
|
:color="resolveUserStatusVariant(item.status)"
|
|
size="small"
|
|
class="text-capitalize"
|
|
>
|
|
{{ item.status }}
|
|
</VChip>
|
|
</template>
|
|
|
|
<template #bottom />
|
|
</VDataTable>
|
|
</VCard>
|
|
</template>
|