From e4cb66718daf31ea86ad0df156e68f691404278d Mon Sep 17 00:00:00 2001 From: MaysWind Date: Tue, 29 Jul 2025 00:16:37 +0800 Subject: [PATCH] reload reconciliation statement after adding new transaction --- src/stores/transaction.ts | 28 +++++++++++++++++++ .../accounts/ReconciliationStatementPage.vue | 4 +++ 2 files changed, 32 insertions(+) diff --git a/src/stores/transaction.ts b/src/stores/transaction.ts index e083a0bf..0e6b5804 100644 --- a/src/stores/transaction.ts +++ b/src/stores/transaction.ts @@ -135,6 +135,7 @@ export const useTransactionsStore = defineStore('transactions', () => { const transactions = ref([]); const transactionsNextTimeId = ref(0); const transactionListStateInvalid = ref(true); + const transactionReconciliationStatementStateInvalid = ref(true); const allFilterCategoryIds = computed>(() => splitItemsToMap(transactionsFilter.value.categoryIds, ',')); const allFilterAccountIds = computed>(() => splitItemsToMap(transactionsFilter.value.accountIds, ',')); @@ -596,6 +597,10 @@ export const useTransactionsStore = defineStore('transactions', () => { transactionListStateInvalid.value = invalidState; } + function updateTransactionReconciliationStatementInvalidState(invalidState: boolean): void { + transactionReconciliationStatementStateInvalid.value = invalidState; + } + function resetTransactions(): void { transactionsFilter.value.dateType = DateRange.All.type; transactionsFilter.value.maxTime = 0; @@ -610,6 +615,7 @@ export const useTransactionsStore = defineStore('transactions', () => { transactions.value = []; transactionsNextTimeId.value = 0; transactionListStateInvalid.value = true; + transactionReconciliationStatementStateInvalid.value = true; } function clearTransactions(): void { @@ -972,14 +978,26 @@ export const useTransactionsStore = defineStore('transactions', () => { const data = response.data; if (!data || !data.success || !data.result) { + if (!transactionReconciliationStatementStateInvalid.value) { + updateTransactionReconciliationStatementInvalidState(true); + } + reject({ message: 'Unable to retrieve reconciliation statements' }); return; } + if (transactionReconciliationStatementStateInvalid.value) { + updateTransactionReconciliationStatementInvalidState(false); + } + resolve(data.result); }).catch(error => { logger.error('failed to load reconciliation statements', error); + if (!transactionReconciliationStatementStateInvalid.value) { + updateTransactionReconciliationStatementInvalidState(true); + } + if (error.response && error.response.data && error.response.data.errorMessage) { reject({ error: error.response.data }); } else if (!error.processed) { @@ -1067,6 +1085,10 @@ export const useTransactionsStore = defineStore('transactions', () => { }); } + if (!transactionReconciliationStatementStateInvalid.value) { + updateTransactionReconciliationStatementInvalidState(true); + } + if (!accountsStore.accountListStateInvalid) { accountsStore.updateAccountListInvalidState(true); } @@ -1124,6 +1146,10 @@ export const useTransactionsStore = defineStore('transactions', () => { }); } + if (!transactionReconciliationStatementStateInvalid.value) { + updateTransactionReconciliationStatementInvalidState(true); + } + if (!accountsStore.accountListStateInvalid) { accountsStore.updateAccountListInvalidState(true); } @@ -1334,6 +1360,7 @@ export const useTransactionsStore = defineStore('transactions', () => { transactions, transactionsNextTimeId, transactionListStateInvalid, + transactionReconciliationStatementStateInvalid, // computed states allFilterCategoryIds, allFilterAccountIds, @@ -1350,6 +1377,7 @@ export const useTransactionsStore = defineStore('transactions', () => { clearTransactionDraft, setTransactionSuitableDestinationAmount, updateTransactionListInvalidState, + updateTransactionReconciliationStatementInvalidState, resetTransactions, clearTransactions, initTransactionListFilter, diff --git a/src/views/mobile/accounts/ReconciliationStatementPage.vue b/src/views/mobile/accounts/ReconciliationStatementPage.vue index fb0b9b36..a6a7506c 100644 --- a/src/views/mobile/accounts/ReconciliationStatementPage.vue +++ b/src/views/mobile/accounts/ReconciliationStatementPage.vue @@ -452,6 +452,10 @@ function renderExternal(vl: unknown, vlData: ReconciliationStatementVirtualListD } function onPageAfterIn(): void { + if (finishQuery.value && transactionsStore.transactionReconciliationStatementStateInvalid) { + reload(false); + } + routeBackOnError(props.f7router, loadingError); }