- 新增初始上分备注(日常上分/开户赠金/自定义)及前后台校验与展示 - 优化钱包流水类型与备注显示,区分管理员/代理/玩家上下分 - 修复登录后语言被后端覆盖的问题,登录时同步当前语言到服务端 - 后台代理/玩家表格操作栏重构,充值订单增加备注列 - 前台个人中心、充值、账单与验证码组件体验优化 Co-authored-by: Cursor <cursoragent@cursor.com>
46 lines
1.7 KiB
TypeScript
46 lines
1.7 KiB
TypeScript
export type InitialDepositRemarkKind = 'daily' | 'opening_bonus' | 'custom';
|
|
|
|
export type InitialDepositOperator = 'admin' | 'agent';
|
|
|
|
export const OPENING_BONUS_REMARK = '开户初始余额';
|
|
export const ADMIN_DAILY_DEPOSIT_REMARK = '管理员上分';
|
|
export const AGENT_DAILY_DEPOSIT_REMARK = '代理上分';
|
|
|
|
export type InitialDepositRemarkValidationError =
|
|
| 'INITIAL_DEPOSIT_REMARK_REQUIRED'
|
|
| 'INITIAL_DEPOSIT_REMARK_CUSTOM_INVALID';
|
|
|
|
export function dailyDepositRemark(operator: InitialDepositOperator): string {
|
|
return operator === 'admin' ? ADMIN_DAILY_DEPOSIT_REMARK : AGENT_DAILY_DEPOSIT_REMARK;
|
|
}
|
|
|
|
export function resolveInitialDepositRemark(
|
|
kind: InitialDepositRemarkKind,
|
|
custom: string | undefined,
|
|
operator: InitialDepositOperator,
|
|
): string {
|
|
if (kind === 'daily') return dailyDepositRemark(operator);
|
|
if (kind === 'opening_bonus') return OPENING_BONUS_REMARK;
|
|
const trimmed = custom?.trim() ?? '';
|
|
if (trimmed.length < 2) {
|
|
throw new Error('INITIAL_DEPOSIT_REMARK_CUSTOM_INVALID');
|
|
}
|
|
return trimmed;
|
|
}
|
|
|
|
export function validateInitialDepositRemark(
|
|
initialDeposit: number,
|
|
remark: string | undefined,
|
|
operator: InitialDepositOperator,
|
|
): { ok: true; remark: string } | { ok: false; code: InitialDepositRemarkValidationError } {
|
|
if (initialDeposit <= 0) {
|
|
return { ok: true, remark: remark?.trim() ?? '' };
|
|
}
|
|
const r = remark?.trim();
|
|
if (!r) return { ok: false, code: 'INITIAL_DEPOSIT_REMARK_REQUIRED' };
|
|
const daily = dailyDepositRemark(operator);
|
|
if (r === daily || r === OPENING_BONUS_REMARK) return { ok: true, remark: r };
|
|
if (r.length < 2) return { ok: false, code: 'INITIAL_DEPOSIT_REMARK_CUSTOM_INVALID' };
|
|
return { ok: true, remark: r };
|
|
}
|