support "Add Another" in transaction add page / dialog (#471)

This commit is contained in:
MaysWind
2026-03-02 00:54:17 +08:00
parent d2ce801277
commit 732c256db2
29 changed files with 336 additions and 63 deletions
@@ -53,6 +53,7 @@ export const ALL_APPLICATION_CLOUD_SETTINGS: CategorizedApplicationCloudSettingI
{
categoryName: 'Transaction Edit Page',
items: [
{ settingKey: 'quickAddButtonActionInMobileTransactionEditPage', settingName: 'Quick Add Button Action', mobile: true, desktop: false },
{ settingKey: 'autoSaveTransactionDraft', settingName: 'Automatically Save Draft', mobile: true, desktop: true },
{ settingKey: 'autoGetCurrentGeoLocation', settingName: 'Automatically Add Geolocation', mobile: true, desktop: true },
{ settingKey: 'alwaysShowTransactionPicturesInMobileTransactionEditPage', settingName: 'Always Show Transaction Pictures', mobile: true, desktop: false }
@@ -13,7 +13,7 @@ import { useExchangeRatesStore } from '@/stores/exchangeRates.ts';
import type { NumeralSystem } from '@/core/numeral.ts';
import type { WeekDayValue } from '@/core/datetime.ts';
import type { LocalizedTimezoneInfo } from '@/core/timezone.ts';
import { TransactionType } from '@/core/transaction.ts';
import { TransactionType, TransactionQuickAddButtonActionType } from '@/core/transaction.ts';
import { TemplateType } from '@/core/template.ts';
import { DISPLAY_HIDDEN_AMOUNT } from '@/consts/numeral.ts';
import { TRANSACTION_MAX_PICTURE_COUNT } from '@/consts/transaction.ts';
@@ -64,6 +64,12 @@ export enum GeoLocationStatus {
Error = 'error'
}
export enum AfterSaveAction {
GoBack = 'goBack',
StayWithNewTransaction = 'stayWithNewTransaction',
StayWithCurrentTransaction = 'stayWithCurrentTransaction'
}
export function useTransactionEditPageBase(type: TransactionEditPageType, initMode?: TransactionEditPageMode, transactionDefaultType?: number) {
const {
tt,
@@ -93,6 +99,7 @@ export function useTransactionEditPageBase(type: TransactionEditPageType, initMo
const clientSessionId = ref<string>('');
const loading = ref<boolean>(true);
const submitting = ref<boolean>(false);
const submitted = ref<boolean>(false);
const uploadingPicture = ref<boolean>(false);
const geoLocationStatus = ref<GeoLocationStatus | null>(null);
const setGeoLocationByClickMap = ref<boolean>(false);
@@ -170,6 +177,20 @@ export function useTransactionEditPageBase(type: TransactionEditPageType, initMo
}
});
const quickSaveButtonTitle = computed<string>(() => {
if (mode.value === TransactionEditPageMode.Add) {
const quickAddActionType = TransactionQuickAddButtonActionType.valueOf(settingsStore.appSettings.quickAddButtonActionInMobileTransactionEditPage);
if (quickAddActionType && quickAddActionType.type !== TransactionQuickAddButtonActionType.OpenMenu.type) {
return quickAddActionType.name;
} else {
return 'Add';
}
} else {
return 'Save';
}
});
const cancelButtonTitle = computed<string>(() => {
if (mode.value === TransactionEditPageMode.View) {
return 'Close';
@@ -395,6 +416,16 @@ export function useTransactionEditPageBase(type: TransactionEditPageType, initMo
);
}
function updateTransactionModelByAfterSaveAction(afterSaveAction: AfterSaveAction, initOptions?: SetTransactionOptions): void {
if (afterSaveAction === AfterSaveAction.StayWithNewTransaction) {
transaction.value = createNewTransactionModel(transactionDefaultType);
setTransactionModel(null, initOptions, true);
geoLocationStatus.value = null;
} else if (afterSaveAction === AfterSaveAction.StayWithCurrentTransaction) {
transaction.value.clearPictures();
}
}
function updateTransactionTime(newTime: number): void {
transaction.value.time = newTime;
updateTransactionTimezone(transaction.value.timeZone ?? '');
@@ -489,6 +520,7 @@ export function useTransactionEditPageBase(type: TransactionEditPageType, initMo
clientSessionId,
loading,
submitting,
submitted,
uploadingPicture,
geoLocationStatus,
setGeoLocationByClickMap,
@@ -516,6 +548,7 @@ export function useTransactionEditPageBase(type: TransactionEditPageType, initMo
canAddTransactionPicture,
title,
saveButtonTitle,
quickSaveButtonTitle,
cancelButtonTitle,
sourceAmountName,
sourceAmountTitle,
@@ -533,6 +566,7 @@ export function useTransactionEditPageBase(type: TransactionEditPageType, initMo
// functions
createNewTransactionModel,
setTransactionModel,
updateTransactionModelByAfterSaveAction,
updateTransactionTime,
updateTransactionTimezone,
swapTransactionData,