From 31803a1d24a505f2162b7c175683806ca3921872 Mon Sep 17 00:00:00 2001 From: shanshanzhong Date: Mon, 9 Mar 2026 04:08:23 -0700 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=90=8E=E5=8F=B0=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=96=B0=E5=A2=9E=E6=89=8B=E5=8A=A8=E6=BF=80?= =?UTF-8?q?=E6=B4=BB=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - API 层新增 activateOrder 方法 (POST /v1/admin/order/activate) - pending(1) 和 cancelled(3) 状态的订单显示 Activate 按钮 - 点击后调用后端手动激活接口,强制发放订阅权益 --- apps/admin/src/sections/order/index.tsx | 49 ++++++++++++++++++------- packages/ui/src/services/admin/order.ts | 18 +++++++++ 2 files changed, 54 insertions(+), 13 deletions(-) diff --git a/apps/admin/src/sections/order/index.tsx b/apps/admin/src/sections/order/index.tsx index fce99ab..b8fd831 100644 --- a/apps/admin/src/sections/order/index.tsx +++ b/apps/admin/src/sections/order/index.tsx @@ -13,6 +13,7 @@ import { } from "@workspace/ui/composed/pro-table/pro-table"; import { cn } from "@workspace/ui/lib/utils"; import { + activateOrder, getOrderList, updateOrderStatus, } from "@workspace/ui/services/admin/order"; @@ -180,6 +181,14 @@ export default function Order() { ); }, }, + { + accessorKey: "payment", + header: t("method", "Payment Method"), + cell: ({ row }) => { + const order = row.original as API.Order; + return order.payment?.name || order.payment?.platform || "--"; + }, + }, { accessorKey: "user_id", header: t("user", "User"), @@ -206,19 +215,33 @@ export default function Order() { ); if ([1, 3, 4].includes(row.getValue("status"))) { return ( - - className={cn(option?.className)} - onChange={async (value) => { - await updateOrderStatus({ - id: order.id, - status: value, - }); - ref.current?.refresh(); - }} - options={statusOptions} - placeholder={t("status.0", "Status")} - value={order.status} - /> +
+ + className={cn(option?.className)} + onChange={async (value) => { + await updateOrderStatus({ + id: order.id, + status: value, + }); + ref.current?.refresh(); + }} + options={statusOptions} + placeholder={t("status.0", "Status")} + value={order.status} + /> + {[1, 3].includes(order.status) && ( + + )} +
); } return ( diff --git a/packages/ui/src/services/admin/order.ts b/packages/ui/src/services/admin/order.ts index 9d2e0fd..1c5c529 100644 --- a/packages/ui/src/services/admin/order.ts +++ b/packages/ui/src/services/admin/order.ts @@ -55,3 +55,21 @@ export async function updateOrderStatus( } ); } + +/** Manually activate order POST /v1/admin/order/activate */ +export async function activateOrder( + body: { order_no: string }, + options?: { [key: string]: any } +) { + return request( + `${import.meta.env.VITE_API_PREFIX || ""}/v1/admin/order/activate`, + { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + data: body, + ...(options || {}), + } + ); +}