mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-11-03 14:03:18 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			150 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
<template>
 | 
						|
  <div class="grid grid-cols-1 gap-6 mt-10 xl:grid-cols-2">
 | 
						|
    <!-- Due Invoices -->
 | 
						|
    <div class="due-invoices">
 | 
						|
      <div class="relative z-10 flex items-center justify-between mb-3">
 | 
						|
        <h6 class="mb-0 text-xl font-semibold leading-normal">
 | 
						|
          {{ $t('dashboard.recent_invoices_card.title') }}
 | 
						|
        </h6>
 | 
						|
 | 
						|
        <BaseButton
 | 
						|
          size="sm"
 | 
						|
          variant="primary-outline"
 | 
						|
          @click="$router.push({ name: 'invoices.dashboard' })"
 | 
						|
        >
 | 
						|
          {{ $t('dashboard.recent_invoices_card.view_all') }}
 | 
						|
        </BaseButton>
 | 
						|
      </div>
 | 
						|
      <!-- Recent Invoice-->
 | 
						|
      <BaseTable
 | 
						|
        :data="dashboardStore.recentInvoices"
 | 
						|
        :columns="dueInvoiceColumns"
 | 
						|
        :loading="!globalStore.getDashboardDataLoaded"
 | 
						|
      >
 | 
						|
        <template #cell-invoice_number="{ row }">
 | 
						|
          <router-link
 | 
						|
            :to="{
 | 
						|
              path: `/${globalStore.companySlug}/customer/invoices/${row.data.id}/view`,
 | 
						|
            }"
 | 
						|
            class="font-medium text-primary-500"
 | 
						|
          >
 | 
						|
            {{ row.data.invoice_number }}
 | 
						|
          </router-link>
 | 
						|
        </template>
 | 
						|
 | 
						|
        <template #cell-paid_status="{ row }">
 | 
						|
          <BasePaidStatusBadge :status="row.data.paid_status">
 | 
						|
            {{ row.data.paid_status }}
 | 
						|
          </BasePaidStatusBadge>
 | 
						|
        </template>
 | 
						|
 | 
						|
        <template #cell-due_amount="{ row }">
 | 
						|
          <BaseFormatMoney
 | 
						|
            :amount="row.data.due_amount"
 | 
						|
            :currency="globalStore.currency"
 | 
						|
          />
 | 
						|
        </template>
 | 
						|
      </BaseTable>
 | 
						|
    </div>
 | 
						|
 | 
						|
    <!-- Recent Estimates -->
 | 
						|
    <div class="recent-estimates">
 | 
						|
      <div class="relative z-10 flex items-center justify-between mb-3">
 | 
						|
        <h6 class="mb-0 text-xl font-semibold leading-normal">
 | 
						|
          {{ $t('dashboard.recent_estimate_card.title') }}
 | 
						|
        </h6>
 | 
						|
 | 
						|
        <BaseButton
 | 
						|
          variant="primary-outline"
 | 
						|
          size="sm"
 | 
						|
          @click="$router.push({ name: 'estimates.dashboard' })"
 | 
						|
        >
 | 
						|
          {{ $t('dashboard.recent_estimate_card.view_all') }}
 | 
						|
        </BaseButton>
 | 
						|
      </div>
 | 
						|
 | 
						|
      <BaseTable
 | 
						|
        :data="dashboardStore.recentEstimates"
 | 
						|
        :columns="recentEstimateColumns"
 | 
						|
        :loading="!globalStore.getDashboardDataLoaded"
 | 
						|
      >
 | 
						|
        <template #cell-estimate_number="{ row }">
 | 
						|
          <router-link
 | 
						|
            :to="{
 | 
						|
              path: `/${globalStore.companySlug}/customer/estimates/${row.data.id}/view`,
 | 
						|
            }"
 | 
						|
            class="font-medium text-primary-500"
 | 
						|
          >
 | 
						|
            {{ row.data.estimate_number }}
 | 
						|
          </router-link>
 | 
						|
        </template>
 | 
						|
        <template #cell-status="{ row }">
 | 
						|
          <BaseEstimateStatusBadge :status="row.data.status" class="px-3 py-1">
 | 
						|
            {{ row.data.status }}
 | 
						|
          </BaseEstimateStatusBadge>
 | 
						|
        </template>
 | 
						|
        <template #cell-total="{ row }">
 | 
						|
          <BaseFormatMoney
 | 
						|
            :amount="row.data.total"
 | 
						|
            :currency="globalStore.currency"
 | 
						|
          />
 | 
						|
        </template>
 | 
						|
      </BaseTable>
 | 
						|
    </div>
 | 
						|
  </div>
 | 
						|
</template>
 | 
						|
 | 
						|
<script setup>
 | 
						|
import { computed, inject } from 'vue'
 | 
						|
import { useI18n } from 'vue-i18n'
 | 
						|
import { useRoute } from 'vue-router'
 | 
						|
import { useGlobalStore } from '@/scripts/customer/stores/global'
 | 
						|
import { useDashboardStore } from '@/scripts/customer/stores/dashboard'
 | 
						|
import BaseTable from '@/scripts/components/base/base-table/BaseTable.vue'
 | 
						|
 | 
						|
// store
 | 
						|
 | 
						|
const globalStore = useGlobalStore()
 | 
						|
const dashboardStore = useDashboardStore()
 | 
						|
const { tm, t } = useI18n()
 | 
						|
const utils = inject('utils')
 | 
						|
const route = useRoute()
 | 
						|
 | 
						|
//computed prop
 | 
						|
 | 
						|
const dueInvoiceColumns = computed(() => {
 | 
						|
  return [
 | 
						|
    {
 | 
						|
      key: 'formattedDueDate',
 | 
						|
      label: t('dashboard.recent_invoices_card.due_on'),
 | 
						|
    },
 | 
						|
    {
 | 
						|
      key: 'invoice_number',
 | 
						|
      label: t('invoices.number'),
 | 
						|
    },
 | 
						|
    { key: 'paid_status', label: t('invoices.status') },
 | 
						|
    {
 | 
						|
      key: 'due_amount',
 | 
						|
      label: t('dashboard.recent_invoices_card.amount_due'),
 | 
						|
    },
 | 
						|
  ]
 | 
						|
})
 | 
						|
const recentEstimateColumns = computed(() => {
 | 
						|
  return [
 | 
						|
    {
 | 
						|
      key: 'formattedEstimateDate',
 | 
						|
      label: t('dashboard.recent_estimate_card.date'),
 | 
						|
    },
 | 
						|
    {
 | 
						|
      key: 'estimate_number',
 | 
						|
      label: t('estimates.number'),
 | 
						|
    },
 | 
						|
    { key: 'status', label: t('estimates.status') },
 | 
						|
    {
 | 
						|
      key: 'total',
 | 
						|
      label: t('dashboard.recent_estimate_card.amount_due'),
 | 
						|
    },
 | 
						|
  ]
 | 
						|
})
 | 
						|
</script>
 |