feat(player): 充值订单详情与审核记录,优化桌面端交互与记录列表样式
新增充值详情页及单条订单 API,修复桌面充值提交路径;充值/注单记录编号改为中性色,并包含桌面首页与投注相关 UI 改进。
This commit is contained in:
@@ -416,6 +416,85 @@ export class DepositService {
|
||||
return map;
|
||||
}
|
||||
|
||||
private formatPlayerDepositOrder(
|
||||
o: {
|
||||
id: bigint;
|
||||
orderNo: string;
|
||||
paymentMethodId: bigint;
|
||||
methodType: string;
|
||||
amount: Decimal;
|
||||
screenshotUrl: string;
|
||||
status: string;
|
||||
approvedAmount: Decimal | null;
|
||||
rejectReason: string | null;
|
||||
remark: string | null;
|
||||
createdAt: Date;
|
||||
reviewedAt: Date | null;
|
||||
paymentMethod: {
|
||||
bankName: string | null;
|
||||
usdtAddress: string | null;
|
||||
displayName: string | null;
|
||||
methodType: string;
|
||||
} | null;
|
||||
},
|
||||
auditLogs: Array<{
|
||||
id: string;
|
||||
action: string;
|
||||
actorType: string;
|
||||
statusBefore: string | null;
|
||||
statusAfter: string;
|
||||
amount: string | null;
|
||||
approvedAmount: string | null;
|
||||
remark: string | null;
|
||||
createdAt: string;
|
||||
}>,
|
||||
) {
|
||||
return {
|
||||
id: o.id.toString(),
|
||||
orderNo: o.orderNo,
|
||||
paymentMethodId: o.paymentMethodId.toString(),
|
||||
methodType: o.methodType,
|
||||
amount: o.amount.toString(),
|
||||
screenshotUrl: o.screenshotUrl,
|
||||
status: o.status,
|
||||
approvedAmount: o.approvedAmount?.toString() ?? null,
|
||||
rejectReason: o.rejectReason,
|
||||
remark: o.remark,
|
||||
createdAt: o.createdAt,
|
||||
reviewedAt: o.reviewedAt,
|
||||
paymentMethodName:
|
||||
o.paymentMethod?.displayName ?? o.paymentMethod?.bankName ?? o.paymentMethod?.usdtAddress ?? null,
|
||||
auditLogs,
|
||||
};
|
||||
}
|
||||
|
||||
async getPlayerDepositOrder(playerId: bigint, orderId: bigint) {
|
||||
const order = await this.prisma.depositOrder.findFirst({
|
||||
where: { id: orderId, playerId },
|
||||
include: {
|
||||
paymentMethod: {
|
||||
select: { bankName: true, usdtAddress: true, displayName: true, methodType: true },
|
||||
},
|
||||
},
|
||||
});
|
||||
if (!order) throw appBadRequest('ORDER_NOT_FOUND');
|
||||
|
||||
const auditMap = await this.attachPlayerAuditLogs([order]);
|
||||
const auditLogs = (auditMap.get(order.id.toString()) ?? []).map((log) => ({
|
||||
id: log.id,
|
||||
action: log.action,
|
||||
actorType: log.actorType,
|
||||
statusBefore: log.statusBefore,
|
||||
statusAfter: log.statusAfter,
|
||||
amount: log.amount,
|
||||
approvedAmount: log.approvedAmount,
|
||||
remark: log.remark,
|
||||
createdAt: log.createdAt,
|
||||
}));
|
||||
|
||||
return this.formatPlayerDepositOrder(order, auditLogs);
|
||||
}
|
||||
|
||||
async createDepositOrder(
|
||||
playerId: bigint,
|
||||
paymentMethodId: bigint,
|
||||
@@ -522,6 +601,47 @@ export class DepositService {
|
||||
});
|
||||
}
|
||||
|
||||
async getPlayerDepositOrder(playerId: bigint, orderId: bigint) {
|
||||
const order = await this.prisma.depositOrder.findFirst({
|
||||
where: { id: orderId, playerId },
|
||||
include: {
|
||||
paymentMethod: {
|
||||
select: { bankName: true, usdtAddress: true, displayName: true, methodType: true },
|
||||
},
|
||||
},
|
||||
});
|
||||
if (!order) throw appBadRequest('ORDER_NOT_FOUND');
|
||||
|
||||
const auditMap = await this.attachPlayerAuditLogs([order]);
|
||||
const o = order;
|
||||
return {
|
||||
id: o.id.toString(),
|
||||
orderNo: o.orderNo,
|
||||
paymentMethodId: o.paymentMethodId.toString(),
|
||||
methodType: o.methodType,
|
||||
amount: o.amount.toString(),
|
||||
screenshotUrl: o.screenshotUrl,
|
||||
status: o.status,
|
||||
approvedAmount: o.approvedAmount?.toString() ?? null,
|
||||
rejectReason: o.rejectReason,
|
||||
remark: o.remark,
|
||||
createdAt: o.createdAt,
|
||||
reviewedAt: o.reviewedAt,
|
||||
paymentMethodName: o.paymentMethod?.displayName ?? o.paymentMethod?.bankName ?? o.paymentMethod?.usdtAddress ?? null,
|
||||
auditLogs: (auditMap.get(o.id.toString()) ?? []).map((log) => ({
|
||||
id: log.id,
|
||||
action: log.action,
|
||||
actorType: log.actorType,
|
||||
statusBefore: log.statusBefore,
|
||||
statusAfter: log.statusAfter,
|
||||
amount: log.amount,
|
||||
approvedAmount: log.approvedAmount,
|
||||
remark: log.remark,
|
||||
createdAt: log.createdAt,
|
||||
})),
|
||||
};
|
||||
}
|
||||
|
||||
async getPlayerDepositOrders(playerId: bigint, page = 1, pageSize = 20) {
|
||||
const skip = (page - 1) * pageSize;
|
||||
const where = { playerId };
|
||||
@@ -543,32 +663,22 @@ export class DepositService {
|
||||
const auditMap = await this.attachPlayerAuditLogs(items);
|
||||
|
||||
return {
|
||||
items: items.map((o) => ({
|
||||
id: o.id.toString(),
|
||||
orderNo: o.orderNo,
|
||||
paymentMethodId: o.paymentMethodId.toString(),
|
||||
methodType: o.methodType,
|
||||
amount: o.amount.toString(),
|
||||
screenshotUrl: o.screenshotUrl,
|
||||
status: o.status,
|
||||
approvedAmount: o.approvedAmount?.toString() ?? null,
|
||||
rejectReason: o.rejectReason,
|
||||
remark: o.remark,
|
||||
createdAt: o.createdAt,
|
||||
reviewedAt: o.reviewedAt,
|
||||
paymentMethodName: o.paymentMethod?.displayName ?? o.paymentMethod?.bankName ?? o.paymentMethod?.usdtAddress ?? null,
|
||||
auditLogs: (auditMap.get(o.id.toString()) ?? []).map((log) => ({
|
||||
id: log.id,
|
||||
action: log.action,
|
||||
actorType: log.actorType,
|
||||
statusBefore: log.statusBefore,
|
||||
statusAfter: log.statusAfter,
|
||||
amount: log.amount,
|
||||
approvedAmount: log.approvedAmount,
|
||||
remark: log.remark,
|
||||
createdAt: log.createdAt,
|
||||
})),
|
||||
})),
|
||||
items: items.map((o) =>
|
||||
this.formatPlayerDepositOrder(
|
||||
o,
|
||||
(auditMap.get(o.id.toString()) ?? []).map((log) => ({
|
||||
id: log.id,
|
||||
action: log.action,
|
||||
actorType: log.actorType,
|
||||
statusBefore: log.statusBefore,
|
||||
statusAfter: log.statusAfter,
|
||||
amount: log.amount,
|
||||
approvedAmount: log.approvedAmount,
|
||||
remark: log.remark,
|
||||
createdAt: log.createdAt,
|
||||
})),
|
||||
),
|
||||
),
|
||||
total,
|
||||
page,
|
||||
pageSize,
|
||||
|
||||
Reference in New Issue
Block a user