CrmWeeklySales.vue 3.15 KB
<script setup lang="ts">
import { useTheme } from 'vuetify'
import { hexToRgb } from '@core/utils/colorConverter'

const vuetifyTheme = useTheme()

const options = computed(() => {
  const currentTheme = ref(vuetifyTheme.current.value.colors)
  const variableTheme = ref(vuetifyTheme.current.value.variables)

  const secondaryColor = `rgba(${hexToRgb(currentTheme.value['on-surface'])},${variableTheme.value['medium-emphasis-opacity']})`

  return {
    chart: {
      parentHeightOffset: 0,
      toolbar: { show: false },
    },
    plotOptions: {
      bar: {
        borderRadius: 4,
        distributed: true,
        columnWidth: '60%',
      },
    },
    legend: { show: false },
    dataLabels: { enabled: false },
    colors: [
      'rgba(var(--v-theme-primary), 0.16)',
      'rgba(var(--v-theme-primary), 0.16)',
      'rgba(var(--v-theme-primary), 0.16)',
      'rgba(var(--v-theme-primary), 0.16)',
      'rgba(var(--v-theme-primary),1)',
      'rgba(var(--v-theme-primary), 0.16)',
      'rgba(var(--v-theme-primary), 0.16)',
    ],
    states: {
      hover: {
        filter: { type: 'none' },
      },
      active: {
        filter: { type: 'none' },
      },
    },
    xaxis: {
      categories: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
      axisTicks: { show: false },
      crosshairs: { opacity: 0 },
      axisBorder: { show: false },
      tickPlacement: 'on',
      labels: {
        style: {
          fontSize: '13px',
          colors: secondaryColor,
        },
      },
    },
    yaxis: { show: false },
    grid: {
      show: false,
      padding: {
        top: -15,
        left: -10,
        right: -10,
      },
    },
    tooltip: {
      enabled: false,
    },
  }
})

const series = [{ data: [40, 60, 50, 60, 90, 40, 50] }]

const weeklySalesData = [
  {
    avatar: {
      icon: 'ri-pie-chart-2-line',
      color: 'primary',
    },
    title: '34.6k',
    subtitle: 'Sales',
  },
  {
    avatar: {
      icon: 'ri-money-dollar-circle-line',
      color: 'success',
    },
    title: '$482k',
    subtitle: 'Total Profit',
  },
]
</script>

<template>
  <VCard>
    <VCardItem>
      <VCardTitle>Weekly Sales</VCardTitle>
      <VCardSubtitle>Total 85.4k Sales</VCardSubtitle>

      <template #append>
        <div class="mt-n7 me-n3">
          <MoreBtn density="compact" />
        </div>
      </template>
    </VCardItem>

    <VCardText>
      <VueApexCharts
        type="bar"
        :options="options"
        :series="series"
        :height="203"
        class="py-5"
      />
    </VCardText>

    <VCardText class="d-flex justify-space-around">
      <div
        v-for="data in weeklySalesData"
        :key="data.title"
        class="d-flex align-center me-3"
      >
        <div>
          <VAvatar
            rounded
            :color="data.avatar.color"
            variant="tonal"
            class="me-3"
          >
            <VIcon :icon="data.avatar.icon" />
          </VAvatar>
        </div>

        <div>
          <h6 class="text-h6">
            {{ data.title }}
          </h6>
          <div class="text-base text-no-wrap">
            {{ data.subtitle }}
          </div>
        </div>
      </div>
    </VCardText>
  </VCard>
</template>