| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- import { apiPost } from "@/lib/api";
- export type OrderStatus = 1 | 2 | 3 | 4 | 5;
- export type OrderRecord = {
- id: string;
- serial: string;
- amount: number;
- status: OrderStatus;
- addTime: string;
- payTime: string;
- details: string;
- };
- export type OrderPage = {
- current: number;
- row: number;
- total: number;
- };
- export type OrderListResult = {
- list: OrderRecord[];
- page: OrderPage;
- };
- function pickList(raw: unknown): unknown[] {
- if (!raw || typeof raw !== "object") return [];
- const o = raw as Record<string, unknown>;
- const inner = o.data ?? o.list ?? o.rows ?? o.records;
- if (Array.isArray(inner)) return inner;
- if (inner && typeof inner === "object") {
- const x = inner as Record<string, unknown>;
- if (Array.isArray(x.list)) return x.list;
- if (Array.isArray(x.records)) return x.records;
- if (Array.isArray(x.rows)) return x.rows;
- }
- return [];
- }
- function normalizeDetails(value: unknown): string {
- if (typeof value === "string" && value.trim()) return value.trim();
- if (Array.isArray(value)) {
- return value
- .map((v) => (typeof v === "string" ? v.trim() : ""))
- .filter(Boolean)
- .join("、");
- }
- if (value && typeof value === "object") {
- const o = value as Record<string, unknown>;
- const name = o.title ?? o.name ?? o.goodsName ?? o.courseName;
- if (typeof name === "string" && name.trim()) return name.trim();
- }
- return "-";
- }
- function pickPage(raw: unknown, fallback: { current: number; row: number }): OrderPage {
- if (!raw || typeof raw !== "object") {
- return { current: fallback.current, row: fallback.row, total: 0 };
- }
- const o = raw as Record<string, unknown>;
- const fromData =
- o.data && typeof o.data === "object" && o.data !== null
- ? (o.data as Record<string, unknown>)
- : null;
- const page =
- (fromData?.page && typeof fromData.page === "object" ? fromData.page : null) ??
- (o.page && typeof o.page === "object" ? o.page : null);
- const current = Number(
- (page as Record<string, unknown> | null)?.current ??
- (page as Record<string, unknown> | null)?.pageNum ??
- fallback.current,
- );
- const row = Number(
- (page as Record<string, unknown> | null)?.row ??
- (page as Record<string, unknown> | null)?.size ??
- fallback.row,
- );
- const total = Number((page as Record<string, unknown> | null)?.total ?? 0);
- return {
- current: Number.isFinite(current) && current > 0 ? current : fallback.current,
- row: Number.isFinite(row) && row > 0 ? row : fallback.row,
- total: Number.isFinite(total) && total >= 0 ? total : 0,
- };
- }
- export function getOrderStatusLabel(status: number): string {
- const map: Record<number, string> = {
- 1: "未支付",
- 2: "已支付",
- 3: "支付失败",
- 4: "已过期",
- 5: "已取消",
- };
- return map[status] ?? `状态${status}`;
- }
- export async function fetchOrderList(page: {
- current: number;
- row: number;
- } = {
- current: 1,
- row: 10,
- }): Promise<OrderListResult> {
- const current = Number.isFinite(page.current) ? Math.max(1, page.current) : 1;
- const row = Number.isFinite(page.row) ? Math.max(1, page.row) : 10;
- const raw = await apiPost<
- unknown,
- {
- page: { current: number; row: number };
- }
- >("/order/search/list", {
- page: {
- current,
- row,
- },
- });
- const list = pickList(raw);
- const out: OrderRecord[] = [];
- for (const item of list) {
- if (!item || typeof item !== "object") continue;
- const o = item as Record<string, unknown>;
- const id = String(o.id ?? o.orderId ?? o.tradeId ?? o.serial ?? "").trim();
- const serial = String(o.serial ?? o.orderNo ?? o.tradeNo ?? o.id ?? "").trim();
- if (!serial || !id) continue;
- const amountRaw = o.amount ?? o.payAmount ?? o.totalAmount ?? 0;
- const amount = typeof amountRaw === "number" ? amountRaw : Number(amountRaw) || 0;
- const statusRaw = Number(o.status ?? o.payStatus ?? 1);
- const status: OrderStatus =
- statusRaw === 1 || statusRaw === 2 || statusRaw === 3 || statusRaw === 4 || statusRaw === 5
- ? statusRaw
- : 1;
- const addTime = String(o.addTime ?? o.createTime ?? o.createdAt ?? "").trim();
- const payTime = String(o.payTime ?? o.paidAt ?? "").trim();
- const details = normalizeDetails(o.details ?? o.detail ?? o.goodsName ?? o.courseName);
- out.push({
- id,
- serial,
- amount,
- status,
- addTime,
- payTime,
- details,
- });
- }
- return {
- list: out,
- page: pickPage(raw, { current, row }),
- };
- }
- export async function cancelOrder(id: string): Promise<void> {
- await apiPost("/order/cancel", { id });
- }
- export async function generateOrderByGoodId(goodsId: string): Promise<void> {
- await apiPost("/order/generated", { goodsId });
- }
|