feat : updae

This commit is contained in:
2026-10-07 17:03:15 +07:00 Unverified
parent 1fa2f80a83
commit 5d195968ec
43 changed files with 515 additions and 243 deletions
+10 -9
View File
@@ -19,22 +19,23 @@ async function CommissionContent() {
if (!availability.isOpen) return <div className="flex flex-col gap-8"><div className="flex flex-col gap-4 rounded-xl border p-6">
<h2 className="font-heading text-xl font-semibold">ปิดรับ Commission ชั่วคราว</h2>
<p className="whitespace-pre-wrap">{availability.closureMessage}</p>
<Button variant="outline" nativeButton={false} render={<Link href="/commission/tickets" />}>
ดู Ticket และคำขอที่มีอยู่
<Button variant="outline" className="min-h-11" nativeButton={false} render={<Link href="/commission/tickets" />}>
ดูคำขอของฉัน
</Button>
</div><CommissionIntro /></div>;
const session = await getCustomerSession();
if (!session) return <div className="flex flex-col gap-8"><CommissionIntro /><div className="flex flex-col gap-4 rounded-xl border p-6">
<p>เข้าสู่ระบบหรือสมัครสมาชิกก่อนเริ่มคำขอ</p>
if (!session) return <div className="flex flex-col gap-8"><div className="flex flex-col gap-4 rounded-xl border p-6">
<h2 className="font-heading text-xl font-semibold">เริ่มคำขอ</h2>
<p>เข้าสู่ระบบหรือสมัครสมาชิกเพื่อบันทึกคำขอ ติดตามผล และพูดคุยกับทีมงาน</p>
<div className="flex flex-wrap gap-2">
<Button nativeButton={false} render={<Link href="/auth/login?next=%2Fcommission" />}>เข้าสู่ระบบ</Button>
<Button variant="outline" nativeButton={false} render={<Link href="/auth/register?next=%2Fcommission" />}>สมัครสมาชิก</Button>
<Button className="min-h-11" nativeButton={false} render={<Link href="/auth/login?next=%2Fcommission" />}>เข้าสู่ระบบ</Button>
<Button variant="outline" className="min-h-11" nativeButton={false} render={<Link href="/auth/register?next=%2Fcommission" />}>สมัครสมาชิก</Button>
</div>
</div></div>;
</div><CommissionIntro /></div>;
const catalog = await getCatalogOptions();
if (!catalog) return <p>ยังไม่มีข้อมูลตัวละครสำหรับสร้างคำขอ</p>;
return <div className="flex flex-col gap-6">
<div className="flex items-center gap-3"><Button variant="outline" nativeButton={false} render={<Link href="/commission/tickets" />}>ดู Ticket ของฉัน</Button></div>
<div className="flex items-center gap-3"><Button variant="outline" className="min-h-11" nativeButton={false} render={<Link href="/commission/tickets" />}>ดูคำขอของฉัน</Button></div>
<CommissionRequestForm key={session.user.id} catalog={catalog} userId={session.user.id} />
</div>;
}
@@ -42,7 +43,7 @@ async function CommissionContent() {
export default function CommissionPage() {
return <div className="min-h-svh"><SiteHeader />
<main className="mx-auto flex w-full max-w-5xl flex-col gap-6 p-4 py-10 sm:p-8">
<header><h1 className="font-heading text-3xl font-semibold">Commission</h1>
<header><h1 className="font-heading text-3xl font-semibold">จ้างคำนวณทีม</h1>
<p className="text-muted-foreground">ขอทีม เปรียบเทียบอาวุธหรือกลุ่มดาวตามที่ต้องการ</p></header>
<Suspense fallback={<Card><CardHeader><Skeleton className="h-6 w-48" /><Skeleton className="h-4 w-full max-w-md" /></CardHeader></Card>}><CommissionContent /></Suspense>
</main>
+5 -4
View File
@@ -30,21 +30,22 @@ export default async function CommissionTicketsPage() {
return <div className="min-h-svh"><SiteHeader /><CommissionLiveRefresh endpoint="/api/commission/events" userId={session.user.id} />
<main className="mx-auto flex max-w-4xl flex-col gap-5 p-4 py-10 sm:p-8">
<div className="flex items-center justify-between gap-3">
<h1 className="font-heading text-3xl font-semibold">Ticket ของฉัน</h1>
<h1 className="font-heading text-3xl font-semibold">คำขอของฉัน</h1>
</div>
<p className="text-sm text-muted-foreground">แต่ละคำขอมีแชตสำหรับรับผลและพูดคุยกับทีมงาน (Ticket) สถานะแชตบอกว่ายังส่งข้อความได้หรือไม่ ส่วนความคืบหน้าของงานสอบถามได้ในแชต</p>
<Link href="/commission" className="text-sm underline">สร้างคำขอเพิ่ม</Link>
{pending.length > 0 && <h2 className="text-xl font-semibold">รอชำระเงิน</h2>}
{pending.map((checkout) => <Link key={checkout.id} href={`/commission/pay/${checkout.id}`}>
<Card><CardHeader><CardTitle>รอชำระเงิน - ฿{checkout.amount}</CardTitle></CardHeader>
<CardContent>{checkout.createdAt.toLocaleString("th-TH")}</CardContent></Card>
</Link>)}
<h2 className="text-xl font-semibold">Ticket ที่ชำระเงินแล้ว</h2>
{tickets.length === 0 && <p>ยังไม่มี Ticket</p>}
<h2 className="text-xl font-semibold">คำขอที่ชำระเงินแล้ว</h2>
{tickets.length === 0 && <p>ยังไม่มีคำขอที่ชำระเงินแล้ว</p>}
{tickets.map(({ ticket, amount }) => <Link key={ticket.id} href={`/commission/tickets/${ticket.id}`}>
<Card><CardHeader><CardTitle>{ticket.title || `Ticket #${ticket.id.slice(0, 8)}`}</CardTitle>
<CardAction><Badge variant={ticket.status === "open" ? "outline" : "destructive"}
className={ticket.status === "open" ? "border-success/30 bg-success/10 text-success" : undefined}>
{ticket.status === "open" ? "เปิดอยู่" : "ปิดแล้ว"}
{ticket.status === "open" ? "แชตเปิดอยู่" : "แชตปิดแล้ว"}
</Badge></CardAction></CardHeader>
<CardContent>฿{amount} - {ticket.updatedAt.toLocaleString("th-TH")}</CardContent></Card>
</Link>)}