优化账户余额调整功能:新增调整余额的逻辑,更新相关页面以显示账户余额和可用额度,调整路由配置以移除不必要的动画效果。

This commit is contained in:
2026-04-05 18:40:52 +08:00
parent 5fbff39c4f
commit c7c84c74d3
9 changed files with 255 additions and 84 deletions
+30 -1
View File
@@ -195,6 +195,7 @@
:class="{ 'disabled': !allVisibleAccounts.length || (mode === TransactionEditPageMode.Edit && transaction.type === TransactionType.ModifyBalance), 'readonly': mode === TransactionEditPageMode.View }"
:header="tt(sourceAccountTitle)"
:title="sourceAccountName"
:footer="sourceAccountBalanceDisplay"
@click="showSourceAccountSheet = true"
>
<two-column-list-item-selection-sheet primary-key-field="id" primary-value-field="category"
@@ -218,6 +219,7 @@
:class="{ 'disabled': !allVisibleAccounts.length, 'readonly': mode === TransactionEditPageMode.View }"
:header="tt('Destination Account')"
:title="destinationAccountName"
:footer="destinationAccountBalanceDisplay"
v-if="transaction.type === TransactionType.Transfer"
@click="showDestinationAccountSheet = true"
>
@@ -523,6 +525,7 @@ import {
import { useSettingsStore } from '@/stores/setting.ts';
import { useUserStore } from '@/stores/user.ts';
import { useAccountsStore } from '@/stores/account.ts';
import type { Account } from '@/models/account.ts';
import { useTransactionCategoriesStore } from '@/stores/transactionCategory.ts';
import { useTransactionTagsStore } from '@/stores/transactionTag.ts';
import { useTransactionsStore } from '@/stores/transaction.ts';
@@ -572,7 +575,8 @@ const {
formatDateTimeToLongDate,
formatDateTimeToLongTime,
formatGregorianTextualYearMonthDayToLongDate,
parseAmountFromLocalizedNumerals
parseAmountFromLocalizedNumerals,
formatAmountToLocalizedNumeralsWithCurrency
} = useI18n();
const { showAlert, showConfirm, showToast, routeBackOnError } = useI18nUIComponents();
@@ -679,6 +683,31 @@ const quickSaveButtonFloatingPosition = computed<string>(() => {
}
});
function getAccountBalanceDisplay(account: Account): string {
if (account.creditLimit) {
const outstanding = -account.balance;
const available = account.creditLimit + account.balance;
return formatAmountToLocalizedNumeralsWithCurrency(outstanding, account.currency)
+ ' · ' + tt('Available') + ' ' + formatAmountToLocalizedNumeralsWithCurrency(available, account.currency);
}
const displayBalance = account.isLiability ? -account.balance : account.balance;
return formatAmountToLocalizedNumeralsWithCurrency(displayBalance, account.currency);
}
const sourceAccountBalanceDisplay = computed<string>(() => {
if (!transaction.value.sourceAccountId) return '';
const account = allVisibleAccounts.value.find(a => a.id === transaction.value.sourceAccountId);
if (!account) return '';
return getAccountBalanceDisplay(account);
});
const destinationAccountBalanceDisplay = computed<string>(() => {
if (!transaction.value.destinationAccountId) return '';
const account = allVisibleAccounts.value.find(a => a.id === transaction.value.destinationAccountId);
if (!account) return '';
return getAccountBalanceDisplay(account);
});
const sourceAmountClass = computed<Record<string, boolean>>(() => {
const classes: Record<string, boolean> = {
'readonly': mode.value === TransactionEditPageMode.View,