mirror of
https://github.com/JetSprow/J-Board-Lite.git
synced 2026-05-01 01:14:10 +05:30
fix: submit recharge card form
This commit is contained in:
@@ -4,6 +4,7 @@ import { createCoupon, createPromotionRule } from "@/actions/admin/commerce";
|
||||
import { ActiveStatusBadge, StatusBadge } from "@/components/admin/status-badge";
|
||||
import { CopyButton } from "@/components/shared/copy-button";
|
||||
import { PageHeader, PageShell, SectionHeader } from "@/components/shared/page-shell";
|
||||
import { Pagination } from "@/components/shared/pagination";
|
||||
import { PendingSubmitButton } from "@/components/shared/pending-submit-button";
|
||||
import { BooleanToggle } from "@/components/ui/boolean-toggle";
|
||||
import { Input } from "@/components/ui/input";
|
||||
@@ -28,8 +29,25 @@ export const metadata: Metadata = {
|
||||
description: "管理优惠券与满减规则。",
|
||||
};
|
||||
|
||||
export default async function AdminCommercePage() {
|
||||
const { coupons, promotions, rechargeCards, plans } = await getCommerceData();
|
||||
const rechargeCardStatusLabels: Record<string, string> = {
|
||||
UNUSED: "未使用",
|
||||
REDEEMED: "已兑换",
|
||||
EXPIRED: "已过期",
|
||||
DISABLED: "已停用",
|
||||
};
|
||||
|
||||
function normalizeCommerceTab(value: string | string[] | undefined) {
|
||||
return value === "manage" || value === "cards" ? value : "create";
|
||||
}
|
||||
|
||||
export default async function AdminCommercePage({
|
||||
searchParams,
|
||||
}: {
|
||||
searchParams: Promise<Record<string, string | string[] | undefined>>;
|
||||
}) {
|
||||
const params = await searchParams;
|
||||
const activeTab = normalizeCommerceTab(params.tab);
|
||||
const { coupons, promotions, rechargeCards, rechargeCardPagination, plans } = await getCommerceData(params);
|
||||
|
||||
return (
|
||||
<PageShell>
|
||||
@@ -38,7 +56,7 @@ export default async function AdminCommercePage() {
|
||||
title="优惠与奖励"
|
||||
/>
|
||||
|
||||
<Tabs defaultValue="create" className="space-y-6">
|
||||
<Tabs defaultValue={activeTab} className="space-y-6">
|
||||
<TabsList variant="line" className="surface-card p-1">
|
||||
<TabsTrigger value="create">新建规则</TabsTrigger>
|
||||
<TabsTrigger value="manage">规则列表</TabsTrigger>
|
||||
@@ -185,7 +203,7 @@ export default async function AdminCommercePage() {
|
||||
<RechargeCardForm plans={plans} />
|
||||
|
||||
<div className="space-y-4">
|
||||
<SectionHeader title="最近充值卡" />
|
||||
<SectionHeader title="充值卡列表" />
|
||||
<div className="surface-card divide-y divide-border/60 overflow-hidden rounded-xl">
|
||||
{rechargeCards.map((card) => (
|
||||
<article key={card.id} className="grid gap-4 px-4 py-4 lg:grid-cols-[minmax(0,1fr)_minmax(14rem,0.6fr)_auto] lg:items-center">
|
||||
@@ -197,13 +215,7 @@ export default async function AdminCommercePage() {
|
||||
<div className="flex min-h-6 flex-wrap items-center gap-2">
|
||||
<h3 className="min-w-0 truncate font-mono font-semibold">{card.code}</h3>
|
||||
<StatusBadge tone={card.status === "UNUSED" ? "success" : "neutral"}>
|
||||
{card.status === "UNUSED"
|
||||
? "未使用"
|
||||
: card.status === "REDEEMED"
|
||||
? "已兑换"
|
||||
: card.status === "EXPIRED"
|
||||
? "已过期"
|
||||
: "已停用"}
|
||||
{rechargeCardStatusLabels[card.status] ?? "未知状态"}
|
||||
</StatusBadge>
|
||||
</div>
|
||||
<p className="mt-1 text-sm text-muted-foreground">
|
||||
@@ -216,7 +228,7 @@ export default async function AdminCommercePage() {
|
||||
<div className="flex flex-wrap gap-2">
|
||||
{card.batchName && <StatusBadge>{card.batchName}</StatusBadge>}
|
||||
{card.redeemedBy && <StatusBadge tone="info">{card.redeemedBy.email}</StatusBadge>}
|
||||
{card.expiresAt && <StatusBadge>到期 {formatDate(card.expiresAt)}</StatusBadge>}
|
||||
<StatusBadge>{card.expiresAt ? `到期 ${formatDate(card.expiresAt)}` : "永不过期"}</StatusBadge>
|
||||
</div>
|
||||
<div className="flex justify-start lg:justify-end">
|
||||
<CopyButton text={card.code} />
|
||||
@@ -227,6 +239,12 @@ export default async function AdminCommercePage() {
|
||||
<p className="px-4 py-8 text-center text-sm text-muted-foreground">暂无充值卡</p>
|
||||
)}
|
||||
</div>
|
||||
<Pagination
|
||||
total={rechargeCardPagination.total}
|
||||
pageSize={rechargeCardPagination.pageSize}
|
||||
page={rechargeCardPagination.page}
|
||||
fixedParams={{ tab: "cards" }}
|
||||
/>
|
||||
</div>
|
||||
</section>
|
||||
</TabsContent>
|
||||
|
||||
Reference in New Issue
Block a user