diff --git a/package.json b/package.json index 6582b3e..95f5ce1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lanhu-admin", - "version": "1.9.0", + "version": "1.10.0", "private": true, "scripts": { "dev": "next dev -H 0.0.0.0 -p 3001 --turbopack", diff --git a/src/actions/trade.ts b/src/actions/trade.ts index 75965e8..736a5e3 100644 --- a/src/actions/trade.ts +++ b/src/actions/trade.ts @@ -30,3 +30,22 @@ export async function getTrade(params: { }) { return callByUser>("/api/admin/trade/page/of-user", params) } + +export async function updateTradeRemark(params: { + trade_no: string + remark: string +}) { + return callByUser>("/api/admin/trade/update/remark", params) +} + +type PayCloseData = { + status: 0 | 1 | 2 + TransId: string +} + +export async function getTradeCheckk(params: { + trade_no: string + method: number +}) { + return callByUser("/api/admin/trade/check", params) +} diff --git a/src/app/(root)/trade/page.tsx b/src/app/(root)/trade/page.tsx index 4abc584..90c8aee 100644 --- a/src/app/(root)/trade/page.tsx +++ b/src/app/(root)/trade/page.tsx @@ -1,15 +1,29 @@ "use client" import { zodResolver } from "@hookform/resolvers/zod" import { format } from "date-fns" -import { CheckCircle, Clock, XCircle } from "lucide-react" +import { CheckCircle, Clock, Loader2, XCircle } from "lucide-react" import Link from "next/link" import { Suspense, useCallback, useState } from "react" import { Controller, useForm } from "react-hook-form" +import { toast } from "sonner" import { z } from "zod" -import { getPageTrade } from "@/actions/trade" +import { + getPageTrade, + getTradeCheckk, + updateTradeRemark, +} from "@/actions/trade" import { DataTable, useDataTable } from "@/components/data-table" import { Page } from "@/components/page" import { Button } from "@/components/ui/button" +import { + Dialog, + DialogClose, + DialogContent, + DialogFooter, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog" import { Field, FieldError, FieldLabel } from "@/components/ui/field" import { Input } from "@/components/ui/input" import { @@ -105,6 +119,7 @@ export default function TradePage() { setFilters(result) table.pagination.onPageChange(1) }) + console.log(...table.data.map(i => i.remark), "tabletabletabletable") return ( @@ -365,9 +380,173 @@ export default function TradePage() { }, }, { header: "渠道订单号", accessorKey: "outer_no" }, + { + header: "备注信息", + accessorKey: "remark", + }, + { + header: "操作", + id: "actions", + meta: { pin: "right" }, + cell: ({ row }) => ( +
+ + +
+ ), + }, ]} />
) } +type PayCloseData = { + status: 0 | 1 | 2 + TransId?: string +} +function CheckOrder(props: { trade: Trade }) { + const [open, setOpen] = useState(false) + const [loading, setLoading] = useState(false) + const [data, setData] = useState(null) + + const handleCheck = useCallback(async () => { + setLoading(true) + try { + const res = await getTradeCheckk({ + trade_no: props.trade.inner_no, + method: Number(props.trade.method), + }) + + console.log(res, "res") + if (res.success) { + setData(res.data) + } else { + toast.error(res.message) + } + setOpen(true) + } catch (error) { + const message = error instanceof Error ? error.message : error + toast.error(`检查失败,请重试: ${message}`) + } finally { + setLoading(false) + } + }, [props.trade.inner_no, props.trade.method]) + + return ( + <> + + + + + + 订单检查结果 + + + {data && ( +
+
+

创建时间:{data?.TransId}

+

+ 支付状态: + {data?.status === 1 + ? "已支付" + : data?.status === 0 + ? "待支付" + : "已取消"} +

+
+
+ )} + + + + + + +
+
+ + ) +} + +function UpdateRole(props: { trade: Trade; onSuccess?: () => void }) { + const [open, setOpen] = useState(false) + const [loading, setLoading] = useState(false) + const { register, handleSubmit, reset } = useForm<{ + remark: string + }>({ + defaultValues: { remark: "" }, + }) + const handleOpenChange = (isOpen: boolean) => { + setOpen(isOpen) + if (isOpen) { + reset({ remark: props.trade.remark ?? "" }) + } + } + + const submitEditRemark = async (data: { remark: string }) => { + try { + setLoading(true) + const response = await updateTradeRemark({ + trade_no: props.trade.inner_no || "", + remark: data.remark, + }) + + if (!response.success) { + throw new Error(response.message) + } + toast.success("备注修改成功") + setOpen(false) + props.onSuccess?.() + } catch (error) { + toast.error( + `修改备注失败:${error instanceof Error ? error.message : String(error)}`, + ) + } finally { + setLoading(false) + } + } + + return ( + + + + + + +
+ + 修改备注 + + +
+ + 备注信息 + + +
+ + + + + + + +
+
+
+ ) +} diff --git a/src/models/trade.ts b/src/models/trade.ts index e388780..90364a8 100644 --- a/src/models/trade.ts +++ b/src/models/trade.ts @@ -15,4 +15,5 @@ export type Trade = { canceled_at: Date updated_at: Date user?: User + remark: string }