feat: 增强注单处理逻辑并优化用户反馈体验

新增注单错误处理逻辑,支持已退款及待确认状态的异常场景处理。
更新 HallBetResultDialog:针对部分失败与已退款订单显示对应提示信息。
优化注单分组逻辑,新增订单状态处理,提升整体订单管理能力。
新增订单状态与用户通知相关多语言翻译,进一步提升用户体验。
This commit is contained in:
2026-05-26 16:32:53 +08:00
parent 51b2a36cc5
commit ab81da3199
19 changed files with 373 additions and 142 deletions

View File

@@ -3,6 +3,7 @@ import type { TicketItemListRow } from "@/types/api/ticket-items";
export type TicketItemGroup = {
key: string;
order_no: string | null;
order_status: string | null;
draw_no: string | null;
placed_at: string | null;
currency_code: string | null;
@@ -29,6 +30,25 @@ export function getTicketItemGroupKey(row: TicketItemListRow): string {
return `fallback:${drawNo}|${placedAt}|${currency}|${status}`;
}
function resolveGroupStatus(items: TicketItemListRow[]): string {
const orderStatus = items.map((row) => row.order_status).find((s) => s != null && s !== "");
if (orderStatus === "partial_failed" || orderStatus === "partial_pending_confirm") {
return orderStatus;
}
const itemStatuses = new Set(items.map((row) => row.status));
if (
itemStatuses.has("failed") &&
(itemStatuses.has("pending_draw") ||
itemStatuses.has("placed") ||
itemStatuses.has("pending_confirm"))
) {
return "partial_failed";
}
return items[0]?.status ?? "unknown";
}
export function sortTicketGroupItems(items: TicketItemListRow[]): TicketItemListRow[] {
return [...items].sort((a, b) => {
const byPlay = a.play_code.localeCompare(b.play_code);
@@ -50,6 +70,7 @@ export function groupTicketItems(items: TicketItemListRow[]): TicketItemGroup[]
group = {
key,
order_no: orderNo || null,
order_status: row.order_status ?? null,
draw_no: row.draw_no ?? null,
placed_at: row.placed_at ?? null,
currency_code: row.currency_code ?? null,
@@ -72,7 +93,13 @@ export function groupTicketItems(items: TicketItemListRow[]): TicketItemGroup[]
return order.map((key) => {
const group = map.get(key)!;
return { ...group, items: sortTicketGroupItems(group.items) };
const sortedItems = sortTicketGroupItems(group.items);
return {
...group,
items: sortedItems,
status: resolveGroupStatus(sortedItems),
order_status: sortedItems[0]?.order_status ?? group.order_status,
};
});
}