248 lines
6.2 KiB
Vue
248 lines
6.2 KiB
Vue
<script setup>
|
|
const props = defineProps({
|
|
userData: {
|
|
type: Object,
|
|
required: true,
|
|
},
|
|
})
|
|
|
|
const standardPlan = {
|
|
plan: 'Standard',
|
|
price: 99,
|
|
benefits: [
|
|
'10 Users',
|
|
'Up to 10GB storage',
|
|
'Basic Support',
|
|
],
|
|
}
|
|
|
|
const isUserInfoEditDialogVisible = ref(false)
|
|
const isUpgradePlanDialogVisible = ref(false)
|
|
|
|
const resolveUserStatusVariant = stat => {
|
|
if (stat === 'pending')
|
|
return 'warning'
|
|
if (stat === 'active')
|
|
return 'success'
|
|
if (stat === 'inactive')
|
|
return 'secondary'
|
|
|
|
return 'primary'
|
|
}
|
|
|
|
const resolveUserRoleVariant = role => {
|
|
if (role === 'subscriber')
|
|
return {
|
|
color: 'primary',
|
|
icon: 'ri-user-line',
|
|
}
|
|
if (role === 'author')
|
|
return {
|
|
color: 'warning',
|
|
icon: 'ri-settings-2-line',
|
|
}
|
|
if (role === 'maintainer')
|
|
return {
|
|
color: 'success',
|
|
icon: 'ri-database-2-line',
|
|
}
|
|
if (role === 'editor')
|
|
return {
|
|
color: 'info',
|
|
icon: 'ri-pencil-line',
|
|
}
|
|
if (role === 'admin')
|
|
return {
|
|
color: 'error',
|
|
icon: 'ri-server-line',
|
|
}
|
|
|
|
return {
|
|
color: 'primary',
|
|
icon: 'ri-user-line',
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<VRow>
|
|
<!-- SECTION User Details -->
|
|
<VCol cols="12">
|
|
<VCard v-if="props.userData">
|
|
<VCardText class="text-center pt-12 pb-6">
|
|
<!-- 👉 Avatar -->
|
|
<VAvatar
|
|
rounded
|
|
:size="120"
|
|
:color="!props.userData.telemed.avatar ? 'primary' : undefined"
|
|
:variant="!props.userData.telemed.avatar ? 'tonal' : undefined"
|
|
>
|
|
<VImg
|
|
v-if="props.userData.telemed.avatar"
|
|
:src="props.userData.telemed.avatar"
|
|
/>
|
|
<span
|
|
v-else
|
|
class="text-5xl font-weight-medium"
|
|
>
|
|
{{ avatarText(props.userData.telemed.name ) }}
|
|
</span>
|
|
</VAvatar>
|
|
|
|
<!-- 👉 User fullName -->
|
|
<h5 class="text-h5 mt-4">
|
|
{{ props.userData.telemed.first_name }} {{ props.userData.telemed.last_name }}
|
|
</h5>
|
|
|
|
<!-- 👉 Role chip -->
|
|
<VChip
|
|
:color="resolveUserRoleVariant('Patient').color"
|
|
size="small"
|
|
class="text-capitalize mt-4"
|
|
>
|
|
Patient
|
|
</VChip>
|
|
</VCardText>
|
|
|
|
|
|
|
|
<!-- 👉 Details -->
|
|
<VCardText class="pb-6">
|
|
<h5 class="text-h5">
|
|
Details
|
|
</h5>
|
|
|
|
<VDivider class="my-4" />
|
|
|
|
<!-- 👉 User Details list -->
|
|
<VList class="card-list">
|
|
<VListItem>
|
|
<VListItemTitle class="text-sm">
|
|
<span class="font-weight-medium">
|
|
Email:
|
|
</span>
|
|
<span class="text-body-1">{{ props.userData.telemed.email }}</span>
|
|
</VListItemTitle>
|
|
</VListItem>
|
|
|
|
<VListItem>
|
|
<VListItemTitle class="text-sm">
|
|
<span class="font-weight-medium">
|
|
Address:
|
|
</span>
|
|
<span class="text-body-1">{{ props.userData.telemed.address }}</span>
|
|
</VListItemTitle>
|
|
</VListItem>
|
|
<VListItem>
|
|
<VListItemTitle class="text-sm">
|
|
<span class="font-weight-medium">
|
|
City:
|
|
</span>
|
|
<span class="text-body-1">{{ props.userData.telemed.city }}</span>
|
|
</VListItemTitle>
|
|
</VListItem>
|
|
<VListItem>
|
|
<VListItemTitle class="text-sm">
|
|
<span class="font-weight-medium">
|
|
State:
|
|
</span>
|
|
<span class="text-body-1">{{ props.userData.telemed.state }}</span>
|
|
</VListItemTitle>
|
|
</VListItem>
|
|
<VListItem>
|
|
<VListItemTitle class="text-sm">
|
|
<span class="font-weight-medium">
|
|
Zip:
|
|
</span>
|
|
<span class="text-body-1">{{ props.userData.telemed.zip_code }}</span>
|
|
</VListItemTitle>
|
|
</VListItem>
|
|
<VListItem>
|
|
<VListItemTitle class="text-sm">
|
|
<span class="font-weight-medium">
|
|
Status:
|
|
</span>
|
|
<VChip
|
|
size="small"
|
|
:color="resolveUserStatusVariant('Active')"
|
|
class="text-capitalize"
|
|
>
|
|
Active
|
|
</VChip>
|
|
</VListItemTitle>
|
|
</VListItem>
|
|
|
|
|
|
|
|
|
|
|
|
<VListItem>
|
|
<VListItemTitle class="text-sm">
|
|
<span class="font-weight-medium">
|
|
Contact:
|
|
</span>
|
|
<span class="text-body-1">{{ props.userData.telemed.phone_no }}</span>
|
|
</VListItemTitle>
|
|
</VListItem>
|
|
|
|
|
|
<VListItem>
|
|
<VListItemTitle class="text-sm">
|
|
<span class="font-weight-medium">
|
|
Country:
|
|
</span>
|
|
<span class="text-body-1">{{ props.userData.telemed.country }}</span>
|
|
</VListItemTitle>
|
|
</VListItem>
|
|
</VList>
|
|
</VCardText>
|
|
|
|
<!-- 👉 Edit and Suspend button -->
|
|
<VCardText class="d-flex justify-center">
|
|
<VBtn
|
|
variant="elevated"
|
|
class="me-4"
|
|
@click="isUserInfoEditDialogVisible = true"
|
|
>
|
|
Edit
|
|
</VBtn>
|
|
<VBtn
|
|
variant="outlined"
|
|
color="error"
|
|
>
|
|
Suspend
|
|
</VBtn>
|
|
</VCardText>
|
|
</VCard>
|
|
</VCol>
|
|
<!-- !SECTION -->
|
|
|
|
<!-- SECTION Current Plan -->
|
|
|
|
<!-- !SECTION -->
|
|
</VRow>
|
|
|
|
<!-- 👉 Edit user info dialog -->
|
|
<UserInfoEditDialog
|
|
v-model:isDialogVisible="isUserInfoEditDialogVisible"
|
|
:user-data="props.userData"
|
|
/>
|
|
|
|
<!-- 👉 Upgrade plan dialog -->
|
|
<UserUpgradePlanDialog v-model:isDialogVisible="isUpgradePlanDialogVisible" />
|
|
</template>
|
|
|
|
<style lang="scss" scoped>
|
|
.card-list {
|
|
--v-card-list-gap: .5rem;
|
|
}
|
|
|
|
.current-plan {
|
|
border: 2px solid rgb(var(--v-theme-primary));
|
|
}
|
|
|
|
.text-capitalize {
|
|
text-transform: capitalize !important;
|
|
}
|
|
</style>
|