"use client" import { format } from "date-fns" import { Suspense, useState } from "react" import { toast } from "sonner" import { deleteCoupon, getPagCoupon } from "@/actions/coupon" import { Auth } from "@/components/auth" import { DataTable, useDataTable } from "@/components/data-table" import { Page } from "@/components/page" import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from "@/components/ui/alert-dialog" import { Button } from "@/components/ui/button" import { ScopeCouponWriteAssign } from "@/lib/scopes" import type { Coupon } from "@/models/coupon" import { CreateDiscount } from "./create" import { ReleaseCoupon } from "./release" import { UpdateCoupon } from "./update" export default function CouponPage() { const table = useDataTable((page, size) => getPagCoupon({ page, size })) return (
{...table} columns={[ { header: "优惠券名称", accessorKey: "name" }, { header: "优惠券数量", accessorKey: "count" }, { header: "优惠券金额", accessorKey: "amount" }, { header: "最低消费金额", accessorKey: "min_amount" }, { header: "优惠券状态", accessorKey: "status", cell: ({ row }) => { const status = row.original.status if (status === 0) { return 禁用 } if (status === 1) { return 正常 } return - }, }, { header: "过期类型", accessorFn: row => { switch (row.expire_type) { case 0: return "不过期" case 1: return "固定日期" case 2: return "相对日期" default: return "" } }, }, { header: "过期时长(天)", accessorKey: "expire_in", }, { header: "过期时间", accessorKey: "expire_at", cell: ({ row }) => { const coupon = row.original if (coupon.expire_type === 2 && coupon.expire_in) { const expireDate = new Date(coupon.created_at) expireDate.setDate(expireDate.getDate() + coupon.expire_in) return format(expireDate, "yyyy-MM-dd HH:mm:ss") } if (coupon.expire_type === 1 && coupon.expire_at) { return format( new Date(coupon.expire_at), "yyyy-MM-dd HH:mm:ss", ) } return 永久有效 }, }, { header: "创建时间", accessorKey: "created_at", cell: ({ row }) => format( new Date(row.original.created_at), "yyyy-MM-dd HH:mm:ss", ), }, { id: "action", meta: { pin: "right" }, header: "操作", cell: ({ row }) => (
), }, ]} />
) } function DeleteCoupon({ coupon, onSuccess, }: { coupon: Coupon onSuccess?: () => void }) { const [loading, setLoading] = useState(false) const handleConfirm = async () => { setLoading(true) try { const resp = await deleteCoupon(coupon.id) if (resp.success) { toast.success("删除成功") onSuccess?.() } else { toast.error(resp.message ?? "删除失败") } } catch (error) { const message = error instanceof Error ? error.message : error toast.error(`接口请求错误: ${message}`) } finally { setLoading(false) } } return ( 确认删除 确定要删除折扣「{coupon.name}」吗?此操作不可撤销。 取消 删除 ) }