complete Complete User Request Submission section RAD-1
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
<script setup>
|
||||
import { ref } from 'vue';
|
||||
import Chart from 'primevue/chart';
|
||||
import { convertEnglishToPersian } from '../../utils/numberUtils';
|
||||
|
||||
const chartData = ref({
|
||||
labels: ['۱۴۰۴/۰۱/۰۱', '۱۴۰۴/۰۱/۰۲', '۱۴۰۴/۰۱/۰۳', '۱۴۰۴/۰۱/۰۴', '۱۴۰۴/۰۱/۰۵', '۱۴۰۴/۰۱/۰۶', '۱۴۰۴/۰۱/۰۷'],
|
||||
datasets: [
|
||||
{
|
||||
label: 'فعالیتهای روزانه',
|
||||
backgroundColor: 'rgba(87, 105, 137, 0.2)',
|
||||
borderColor: '#576989',
|
||||
borderWidth: 2,
|
||||
fill: true,
|
||||
tension: 0,
|
||||
data: [65, 59, 80, 81, 56, 55, 40]
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
const chartOptions = ref({
|
||||
responsive: true,
|
||||
maintainAspectRatio: false,
|
||||
plugins: {
|
||||
legend: {
|
||||
labels: {
|
||||
font: {
|
||||
family: 'yekanBakh, sans-serif',
|
||||
size: 12
|
||||
}
|
||||
}
|
||||
},
|
||||
tooltip: {
|
||||
titleFont: {
|
||||
family: 'yekanBakh, sans-serif'
|
||||
},
|
||||
bodyFont: {
|
||||
family: 'yekanBakh, sans-serif'
|
||||
},
|
||||
callbacks: {
|
||||
label: function(context) {
|
||||
return `${context.dataset.label}: ${context.parsed.y} مورد`;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
scales: {
|
||||
x: {
|
||||
ticks: {
|
||||
font: {
|
||||
family: 'yekanBakh, sans-serif',
|
||||
size: 11
|
||||
}
|
||||
}
|
||||
},
|
||||
y: {
|
||||
position: 'right',
|
||||
ticks: {
|
||||
stepSize: 10,
|
||||
maxTicks: 8,
|
||||
font: {
|
||||
family: 'yekanBakh, sans-serif',
|
||||
size: 11
|
||||
},
|
||||
callback: function(value) {
|
||||
return convertEnglishToPersian(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<Chart type="line" :data="chartData" :options="chartOptions" class="h-[15rem]" />
|
||||
</div>
|
||||
</template>
|
||||
@@ -0,0 +1,18 @@
|
||||
<script setup>
|
||||
import { Link } from '@inertiajs/inertia-vue3'
|
||||
import ActivityCard from './ActivityCard.vue'
|
||||
import { formatPrice } from '../../utils/numberUtils'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<section class="grid grid-cols-4 max-lg:grid-cols-2 max-sm:grid-cols-1 gap-4">
|
||||
<ActivityCard title="کیس در انتظار بررسی"
|
||||
:count="5" link="/dashboard/doctor/cases" label-link="مشاهده و بررسی" />
|
||||
<ActivityCard title="کیس بررسی شده در ماه"
|
||||
:count="999" link="/dashboard/doctor/cases" label-link="مشاهده گزارشات کیسها" />
|
||||
<ActivityCard title="تومان درآمد"
|
||||
:count="formatPrice(50000000)" link="/dashboard/doctor/cases" label-link="مشاهده گزارشات مالی " />
|
||||
<ActivityCard title="ساعت تا شیت بعدی"
|
||||
:count="4" link="/dashboard/doctor/cases" label-link="مشاهده شیفتها" />
|
||||
</section>
|
||||
</template>
|
||||
@@ -0,0 +1,36 @@
|
||||
<script setup>
|
||||
import { Link } from '@inertiajs/inertia-vue3'
|
||||
import PetBoldSvg from '../../components/svg/petBold.svg'
|
||||
import { convertEnglishToPersian } from '../../utils/numberUtils'
|
||||
|
||||
defineProps({
|
||||
title: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
count: {
|
||||
type: Number,
|
||||
required: true
|
||||
},
|
||||
labelLink: {
|
||||
type: String,
|
||||
required: false
|
||||
},
|
||||
link: {
|
||||
type: String,
|
||||
required: false
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="bg-white px-4 h-20 border-[1px] border-complement-50 items-center justify-center rounded-xl grid grid-cols-[auto_1fr] gap-2">
|
||||
<div class="w-14 h-14 bg-danger-100 rounded-md flex items-center justify-center">
|
||||
<PetBoldSvg/>
|
||||
</div>
|
||||
<div class="text-complement-700 text-center grid grid-cols-1 gap-2 text-sm font-normal">
|
||||
<p class="font-semibold text-[11px]"><span class="font-bold text-[13px]">{{ convertEnglishToPersian(count) }}</span> {{ title }}</p>
|
||||
<Link v-if="link" :href="link" class="text-complement-700 bg-complement-50 text-center px-2 py-2 rounded-md text-[11px] font-semibold"> {{ labelLink }} </Link>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -0,0 +1,48 @@
|
||||
<script setup>
|
||||
import { convertEnglishToPersian } from '../../utils/numberUtils'
|
||||
import UiButton from '../../components/ui/UiButton.vue'
|
||||
import CtScanIcon from '../../components/svg/ctScanIcon.svg'
|
||||
import MriIcon from '../../components/svg/mriIcon.svg'
|
||||
import SonographyIcon from '../../components/svg/sonographyIcon.svg'
|
||||
import ECOIcon from '../../components/svg/ecoIcon.svg'
|
||||
import RadiologyIcon from '../../components/svg/radiologyIcon.svg'
|
||||
import { computed } from 'vue'
|
||||
|
||||
const props = defineProps({
|
||||
title: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
icon: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
})
|
||||
const iconComponent = computed(() => {
|
||||
switch (props.icon) {
|
||||
case 'ct-scan':
|
||||
return CtScanIcon
|
||||
case 'mri':
|
||||
return MriIcon
|
||||
case 'sonography':
|
||||
return SonographyIcon
|
||||
case 'echo':
|
||||
return ECOIcon
|
||||
case 'radiology':
|
||||
return RadiologyIcon
|
||||
default:
|
||||
return null
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="w-full h-[169px] p-[12px] flex flex-col gap-1 items-center justify-center border-[1px] border-[#DEE3EB] rounded-[12px]">
|
||||
<component :is="iconComponent" class="w-[87px] h-[80px]" />
|
||||
<div class="w-full flex flex-col gap-1">
|
||||
<p class="w-full flex items-center justify-center font-[700] text-[14px]">{{ title }}</p>
|
||||
<ui-button label="ثبت درخواست" severity="secondary" size="small" full-width="true"/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
Reference in New Issue
Block a user