fix(admin,api): 上分超额提示而非静默截断,并返回中文业务错误
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user