feat: 增强注单处理逻辑并优化用户反馈体验
新增注单错误处理逻辑,支持已退款及待确认状态的异常场景处理。 更新 HallBetResultDialog:针对部分失败与已退款订单显示对应提示信息。 优化注单分组逻辑,新增订单状态处理,提升整体订单管理能力。 新增订单状态与用户通知相关多语言翻译,进一步提升用户体验。
This commit is contained in:
@@ -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,
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user