fix(admin,api): 上分超额提示而非静默截断,并返回中文业务错误

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-08 15:47:45 +08:00
parent 414998ce36
commit 22535d4c27
8 changed files with 97 additions and 29 deletions

View File

@@ -2,6 +2,7 @@ import { ref, computed } from 'vue';
import { ElMessage } from 'element-plus';
import api from '../api';
import { useAdminLocale } from './useAdminLocale';
import { resolveApiError } from '../i18n/form-validation';
import {
depositAmountCap,
parsePlayerAvailable,
@@ -36,6 +37,20 @@ export function useAdminPlayerTransfer(onSuccess?: () => void | Promise<void>) {
const transferAmountDisabled = computed(() => transferAmountRange.value.max === 0);
/** 有上限时超出额度(勿用 el-input-number :max否则会静默截断到上限 */
const transferAmountExceedsCap = computed(() => {
const max = transferAmountRange.value.max;
if (max === undefined) return false;
return transferAmount.value > max;
});
const transferAmountCapError = computed(() => {
if (!transferAmountExceedsCap.value) return '';
return transferType.value === 'deposit'
? t('err.insufficient_credit')
: t('transfer.context.withdraw_exceed');
});
function transferTitle() {
const name = transferTarget.value?.username ?? transferTarget.value?.id ?? '';
return transferType.value === 'deposit'
@@ -63,8 +78,7 @@ export function useAdminPlayerTransfer(onSuccess?: () => void | Promise<void>) {
transferAmount.value = cap > 0 ? Math.min(100, cap) : 0;
}
} catch (e: unknown) {
const err = e as { response?: { data?: { error?: string } } };
ElMessage.error(err.response?.data?.error ?? t('msg.load_failed'));
ElMessage.error(resolveApiError(e, t, 'msg.load_failed'));
transferVisible.value = false;
} finally {
transferContextLoading.value = false;
@@ -105,10 +119,7 @@ export function useAdminPlayerTransfer(onSuccess?: () => void | Promise<void>) {
transferVisible.value = false;
await onSuccess?.();
} catch (e: unknown) {
const err = e as { response?: { data?: { error?: string } } };
const fallback =
transferType.value === 'deposit' ? t('msg.topup_failed') : t('msg.transfer_failed');
ElMessage.error(err.response?.data?.error ?? fallback);
ElMessage.error(resolveApiError(e, t, transferType.value === 'deposit' ? 'msg.topup_failed' : 'msg.transfer_failed'));
} finally {
transferLoading.value = false;
}
@@ -125,6 +136,8 @@ export function useAdminPlayerTransfer(onSuccess?: () => void | Promise<void>) {
transferContextLoading,
transferAmountRange,
transferAmountDisabled,
transferAmountExceedsCap,
transferAmountCapError,
transferTitle,
openTransfer,
submitTransfer,