From b1fbc921cd60b0aa021db7f370312d0f9430f0c2 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 20 Mar 2026 01:13:35 +0100 Subject: [PATCH] feat: dashboard page with year/month summary, charts and CSV upload --- .../components/CumulativeSpendingChart.vue | 32 ++++++++ .../src/components/DonutChart.vue | 59 +++++++++++++++ .../src/components/MonthSummary.vue | 74 +++++++++++++++++++ .../src/components/MonthlyBalancesChart.vue | 32 ++++++++ .../src/components/UploadCsvButton.vue | 56 ++++++++++++++ .../src/components/YearSummary.vue | 74 +++++++++++++++++++ .../src/stores/dashPeriod.ts | 28 +++++++ .../src/views/DashboardView.vue | 40 +++++++++- 8 files changed, 394 insertions(+), 1 deletion(-) create mode 100644 src/AccountTracking.Web/src/components/CumulativeSpendingChart.vue create mode 100644 src/AccountTracking.Web/src/components/DonutChart.vue create mode 100644 src/AccountTracking.Web/src/components/MonthSummary.vue create mode 100644 src/AccountTracking.Web/src/components/MonthlyBalancesChart.vue create mode 100644 src/AccountTracking.Web/src/components/UploadCsvButton.vue create mode 100644 src/AccountTracking.Web/src/components/YearSummary.vue create mode 100644 src/AccountTracking.Web/src/stores/dashPeriod.ts diff --git a/src/AccountTracking.Web/src/components/CumulativeSpendingChart.vue b/src/AccountTracking.Web/src/components/CumulativeSpendingChart.vue new file mode 100644 index 0000000..37f9f9f --- /dev/null +++ b/src/AccountTracking.Web/src/components/CumulativeSpendingChart.vue @@ -0,0 +1,32 @@ + + + diff --git a/src/AccountTracking.Web/src/components/DonutChart.vue b/src/AccountTracking.Web/src/components/DonutChart.vue new file mode 100644 index 0000000..ca26e12 --- /dev/null +++ b/src/AccountTracking.Web/src/components/DonutChart.vue @@ -0,0 +1,59 @@ + + + diff --git a/src/AccountTracking.Web/src/components/MonthSummary.vue b/src/AccountTracking.Web/src/components/MonthSummary.vue new file mode 100644 index 0000000..1cf2368 --- /dev/null +++ b/src/AccountTracking.Web/src/components/MonthSummary.vue @@ -0,0 +1,74 @@ + + + diff --git a/src/AccountTracking.Web/src/components/MonthlyBalancesChart.vue b/src/AccountTracking.Web/src/components/MonthlyBalancesChart.vue new file mode 100644 index 0000000..e7b49de --- /dev/null +++ b/src/AccountTracking.Web/src/components/MonthlyBalancesChart.vue @@ -0,0 +1,32 @@ + + + diff --git a/src/AccountTracking.Web/src/components/UploadCsvButton.vue b/src/AccountTracking.Web/src/components/UploadCsvButton.vue new file mode 100644 index 0000000..ecdc38b --- /dev/null +++ b/src/AccountTracking.Web/src/components/UploadCsvButton.vue @@ -0,0 +1,56 @@ + + + diff --git a/src/AccountTracking.Web/src/components/YearSummary.vue b/src/AccountTracking.Web/src/components/YearSummary.vue new file mode 100644 index 0000000..2373e10 --- /dev/null +++ b/src/AccountTracking.Web/src/components/YearSummary.vue @@ -0,0 +1,74 @@ + + + diff --git a/src/AccountTracking.Web/src/stores/dashPeriod.ts b/src/AccountTracking.Web/src/stores/dashPeriod.ts new file mode 100644 index 0000000..93acbd9 --- /dev/null +++ b/src/AccountTracking.Web/src/stores/dashPeriod.ts @@ -0,0 +1,28 @@ +import { defineStore } from 'pinia' +import { ref, computed } from 'vue' + +export const useDashPeriodStore = defineStore('dashPeriod', () => { + const now = new Date() + const year = ref(now.getFullYear()) + const month = ref(now.getMonth() + 1) // 1-based + + const monthLabel = computed(() => { + const d = new Date(year.value, month.value - 1, 1) + return d.toLocaleDateString('cs-CZ', { month: 'long', year: 'numeric' }) + }) + + function prevMonth() { + if (month.value === 1) { month.value = 12; year.value-- } + else month.value-- + } + + function nextMonth() { + if (month.value === 12) { month.value = 1; year.value++ } + else month.value++ + } + + function prevYear() { year.value-- } + function nextYear() { year.value++ } + + return { year, month, monthLabel, prevMonth, nextMonth, prevYear, nextYear } +}) diff --git a/src/AccountTracking.Web/src/views/DashboardView.vue b/src/AccountTracking.Web/src/views/DashboardView.vue index 5a928f7..092d648 100644 --- a/src/AccountTracking.Web/src/views/DashboardView.vue +++ b/src/AccountTracking.Web/src/views/DashboardView.vue @@ -1 +1,39 @@ - + + +