From 4336d1ed1a69690d0e2d202c039225630f281af1 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Sun, 15 Jun 2025 21:50:31 +0800 Subject: [PATCH] export statistics & analysis data in desktop version --- src/components/desktop/TrendsChart.vue | 32 +++ src/locales/de.json | 10 +- src/locales/en.json | 10 +- src/locales/es.json | 10 +- src/locales/it.json | 10 +- src/locales/ja.json | 10 +- src/locales/ru.json | 10 +- src/locales/uk.json | 10 +- src/locales/vi.json | 10 +- src/locales/zh_Hans.json | 10 +- src/locales/zh_Hant.json | 10 +- src/styles/desktop/global.scss | 8 + .../desktop/statistics/TransactionPage.vue | 55 ++++- .../transaction/dialogs/ExportDialog.vue | 206 ++++++++++++++++++ 14 files changed, 390 insertions(+), 11 deletions(-) create mode 100644 src/views/desktop/statistics/transaction/dialogs/ExportDialog.vue diff --git a/src/components/desktop/TrendsChart.vue b/src/components/desktop/TrendsChart.vue index 3e324b41..56c3aaad 100644 --- a/src/components/desktop/TrendsChart.vue +++ b/src/components/desktop/TrendsChart.vue @@ -25,6 +25,9 @@ import { isArray, isNumber } from '@/lib/common.ts'; +import { + formatAmount +} from '@/lib/numeral.ts'; import { getYearMonthFirstUnixTime, getYearMonthLastUnixTime, @@ -420,9 +423,38 @@ function clickItem(e: ECElementEvent): void { }); } +function exportData(): { headers: string[], data: string[][] } { + const headers: string[] = []; + const data: string[][] = []; + + headers.push(tt('Date')); + + for (let i = 0; i < allSeries.value.length; i++) { + const id = allSeries.value[i].id; + const name = itemsMap.value[id] && props.nameField && itemsMap.value[id][props.nameField] ? getItemName(itemsMap.value[id][props.nameField] as string) : id; + headers.push(name); + } + + for (let i = 0; i < allDisplayDateRanges.value.length; i++) { + const row: string[] = []; + row.push(allDisplayDateRanges.value[i]); + row.push(...allSeries.value.map(item => formatAmount(item.data[i], {}))); + data.push(row); + } + + return { + headers: headers, + data: data + }; +} + function onLegendSelectChanged(e: { selected: Record }): void { selectedLegends.value = e.selected; } + +defineExpose({ + exportData +})