import transaction from custom delimiter-separated values file

This commit is contained in:
MaysWind
2025-03-03 23:55:25 +08:00
parent 703ceb44e4
commit 9430f57a0b
24 changed files with 3374 additions and 91 deletions
+39 -2
View File
@@ -2,6 +2,10 @@ import axios, { type AxiosRequestConfig, type AxiosRequestHeaders, type AxiosRes
import type { ApiResponse } from '@/core/api.ts';
import {
TransactionType
} from '@/core/transaction.ts';
import {
BASE_API_URL_PATH,
BASE_QRCODE_PATH,
@@ -426,10 +430,43 @@ export default {
deleteTransaction: (req: TransactionDeleteRequest): ApiResponsePromise<boolean> => {
return axios.post<ApiResponse<boolean>>('v1/transactions/delete.json', req);
},
parseImportTransaction: ({ fileType, importFile }: { fileType: string, importFile: File }): ApiResponsePromise<ImportTransactionResponsePageWrapper> => {
parseImportDsvFile: ({ fileType, fileEncoding, importFile }: { fileType: string, fileEncoding?: string, importFile: File }): ApiResponsePromise<string[][]> => {
return axios.postForm<ApiResponse<string[][]>>('v1/transactions/parse_dsv_file.json', {
fileType: fileType,
fileEncoding: fileEncoding,
file: importFile
}, {
timeout: DEFAULT_UPLOAD_API_TIMEOUT
} as ApiRequestConfig);
},
parseImportTransaction: ({ fileType, fileEncoding, importFile, columnMapping, transactionTypeMapping, hasHeaderLine, timeFormat, timezoneFormat, geoSeparator, tagSeparator }: { fileType: string, fileEncoding?: string, importFile: File, columnMapping?: Record<number, number>, transactionTypeMapping?: Record<string, TransactionType>, hasHeaderLine?: boolean, timeFormat?: string, timezoneFormat?: string, geoSeparator?: string, tagSeparator?: string }): ApiResponsePromise<ImportTransactionResponsePageWrapper> => {
let textualColumnMapping: string | undefined = undefined;
let textualTransactionTypeMapping: string | undefined = undefined;
let textualHasHeaderLine: string | undefined = undefined;
if (columnMapping) {
textualColumnMapping = JSON.stringify(columnMapping);
}
if (transactionTypeMapping) {
textualTransactionTypeMapping = JSON.stringify(transactionTypeMapping);
}
if (hasHeaderLine) {
textualHasHeaderLine = 'true';
}
return axios.postForm<ApiResponse<ImportTransactionResponsePageWrapper>>('v1/transactions/parse_import.json', {
fileType: fileType,
file: importFile
fileEncoding: fileEncoding,
file: importFile,
columnMapping: textualColumnMapping,
transactionTypeMapping: textualTransactionTypeMapping,
hasHeaderLine: textualHasHeaderLine,
timeFormat: timeFormat,
timezoneFormat: timezoneFormat,
geoSeparator: geoSeparator,
tagSeparator: tagSeparator
}, {
timeout: DEFAULT_UPLOAD_API_TIMEOUT
} as ApiRequestConfig);