tethys.backend/resources/js/Components/CardBoxClient.vue

102 lines
1.9 KiB
Vue
Raw Normal View History

2023-03-03 15:54:28 +00:00
<script setup>
import { computed } from 'vue'
import { mdiTrendingDown, mdiTrendingUp, mdiTrendingNeutral } from '@mdi/js'
import CardBox from '@/Components/CardBox.vue'
import BaseLevel from '@/Components/BaseLevel.vue'
import PillTag from '@/Components/PillTag.vue'
import UserAvatar from '@/Components/UserAvatar.vue'
const props = defineProps({
name: {
type: String,
required: true
},
login: {
type: String,
required: false
},
email: {
type: String,
required: false
},
date: {
type: String,
required: false
},
progress: {
type: Number,
default: 0
},
text: {
type: String,
default: null
},
type: {
type: String,
default: null
}
})
const pillType = computed(() => {
if (props.type) {
return props.type
}
if (props.progress) {
if (props.progress >= 60) {
return 'success'
}
if (props.progress >= 40) {
return 'warning'
}
return 'danger'
}
return 'info'
})
const pillIcon = computed(() => {
return {
success: mdiTrendingUp,
warning: mdiTrendingNeutral,
danger: mdiTrendingDown,
info: mdiTrendingNeutral,
}[pillType.value]
})
const pillText = computed(() => props.text ?? `${props.progress}%`)
</script>
<template>
<CardBox
class="mb-6 last:mb-0"
hoverable
>
<BaseLevel>
<BaseLevel type="justify-start">
<UserAvatar
class="w-12 h-12 mr-6"
:username="props.name"
/>
<div class="text-center md:text-left overflow-hidden">
<h4 class="text-xl text-ellipsis ">
{{ name }}
</h4>
<p class="text-gray-500 dark:text-slate-400">
<!-- {{ date }} @ {{ login }} -->
{{ email }}
</p>
</div>
</BaseLevel>
<PillTag
:type="pillType"
:text="pillText"
small
:icon="pillIcon"
/>
</BaseLevel>
</CardBox>
</template>