Files
panel/resources/js/views/dashboards/analytics/AnalyticsEarningReportsWeeklyOverview.vue

221 lines
4.9 KiB
Vue
Raw Permalink Normal View History

2025-08-04 16:33:07 +03:30
<script setup>
import { useTheme } from 'vuetify'
import { hexToRgb } from '@layouts/utils'
const vuetifyTheme = useTheme()
const series = [{
data: [
40,
65,
50,
45,
90,
55,
70,
],
}]
const chartOptions = computed(() => {
const currentTheme = vuetifyTheme.current.value.colors
const variableTheme = vuetifyTheme.current.value.variables
return {
chart: {
parentHeightOffset: 0,
type: 'bar',
toolbar: { show: false },
},
plotOptions: {
bar: {
barHeight: '60%',
columnWidth: '38%',
startingShape: 'rounded',
endingShape: 'rounded',
borderRadius: 4,
distributed: true,
},
},
grid: {
show: false,
padding: {
top: -30,
bottom: 0,
left: -10,
right: -10,
},
},
colors: [
`rgba(${ hexToRgb(currentTheme.primary) },${ variableTheme['dragged-opacity'] })`,
`rgba(${ hexToRgb(currentTheme.primary) },${ variableTheme['dragged-opacity'] })`,
`rgba(${ hexToRgb(currentTheme.primary) },${ variableTheme['dragged-opacity'] })`,
`rgba(${ hexToRgb(currentTheme.primary) },${ variableTheme['dragged-opacity'] })`,
`rgba(${ hexToRgb(currentTheme.primary) }, 1)`,
`rgba(${ hexToRgb(currentTheme.primary) },${ variableTheme['dragged-opacity'] })`,
`rgba(${ hexToRgb(currentTheme.primary) },${ variableTheme['dragged-opacity'] })`,
],
dataLabels: { enabled: false },
legend: { show: false },
xaxis: {
categories: [
'Mo',
'Tu',
'We',
'Th',
'Fr',
'Sa',
'Su',
],
axisBorder: { show: false },
axisTicks: { show: false },
labels: {
style: {
colors: `rgba(${ hexToRgb(currentTheme['on-surface']) },${ variableTheme['disabled-opacity'] })`,
fontSize: '13px',
fontFamily: 'Public Sans',
},
},
},
yaxis: { labels: { show: false } },
tooltip: { enabled: false },
responsive: [{
breakpoint: 1025,
options: { chart: { height: 199 } },
}],
}
})
const earningsReports = [
{
color: 'primary',
icon: 'tabler-currency-dollar',
title: 'Earnings',
amount: '$545.69',
progress: '55',
},
{
color: 'info',
icon: 'tabler-chart-pie-2',
title: 'Profit',
amount: '$256.34',
progress: '25',
},
{
color: 'error',
icon: 'tabler-brand-paypal',
title: 'Expense',
amount: '$74.19',
progress: '65',
},
]
const moreList = [
{
title: 'View More',
value: 'View More',
},
{
title: 'Delete',
value: 'Delete',
},
]
</script>
<template>
<VCard>
<VCardItem class="pb-sm-0">
<VCardTitle>Earning Reports</VCardTitle>
<VCardSubtitle>Weekly Earnings Overview</VCardSubtitle>
<template #append>
<div class="mt-n4 me-n2">
<MoreBtn
size="small"
:menu-list="moreList"
/>
</div>
</template>
</VCardItem>
<VCardText>
<VRow>
<VCol
cols="12"
sm="5"
lg="6"
class="d-flex flex-column align-self-center"
>
<div class="d-flex align-center gap-2 mb-3 flex-wrap">
<h2 class="text-h2">
$468
</h2>
<VChip
label
size="small"
color="success"
>
+4.2%
</VChip>
</div>
<span class="text-sm text-medium-emphasis">
You informed of this week compared to last week
</span>
</VCol>
<VCol
cols="12"
sm="7"
lg="6"
>
<VueApexCharts
:options="chartOptions"
:series="series"
height="161"
/>
</VCol>
</VRow>
<div class="border rounded mt-5 pa-5">
<VRow>
<VCol
v-for="report in earningsReports"
:key="report.title"
cols="12"
sm="4"
>
<div class="d-flex align-center">
<VAvatar
rounded
size="26"
:color="report.color"
variant="tonal"
class="me-2"
>
<VIcon
size="18"
:icon="report.icon"
/>
</VAvatar>
<h6 class="text-base font-weight-regular">
{{ report.title }}
</h6>
</div>
<h6 class="text-h4 my-2">
{{ report.amount }}
</h6>
<VProgressLinear
:model-value="report.progress"
:color="report.color"
height="4"
rounded
rounded-bar
/>
</VCol>
</VRow>
</div>
</VCardText>
</VCard>
</template>