diff --git a/tonesc-red-packet/app/admin/[id]/draw-list.client.tsx b/tonesc-red-packet/app/admin/[id]/draw-list.client.tsx index c604b5a..758689c 100644 --- a/tonesc-red-packet/app/admin/[id]/draw-list.client.tsx +++ b/tonesc-red-packet/app/admin/[id]/draw-list.client.tsx @@ -1,8 +1,10 @@ "use client" -import { useState } from "react" +import { useCallback, useState } from "react" import { getRedPacketDrawsByRedPacketId } from "@/app/server/actions/get-red-packet-draws" import { formatAmount } from "@/lib/format-amount" +import { CreateRedPacketPayload } from "@/lib/types/red-packet" +import { formatAmountFromInt, parseAmountToInt } from "@/lib/utils" type Draw = { id: string @@ -12,10 +14,14 @@ type Draw = { } export function DrawList({ + count, + rule, precision, redPacketId, initialDraws, }: { + count: number + rule: CreateRedPacketPayload['rule'] precision: number redPacketId: string initialDraws: Draw[] @@ -37,6 +43,39 @@ export function DrawList({ } } + const getBalance = useCallback(() => { + const used = draws.reduce((p, draw) => { + const pInt = parseAmountToInt(p, precision) + const dInt = parseAmountToInt(draw.amount, precision) + return formatAmountFromInt(dInt + pInt, precision) + }, '0.0'); + + if (rule.type === 'fixed') { + const amount = formatAmountFromInt( + parseAmountToInt(rule.singleAmount, precision) * BigInt(count), + precision + ) + + return formatAmountFromInt( + parseAmountToInt(amount, precision) - parseAmountToInt(used, precision), + precision, + ) + } else if (rule.type === 'luck') { + const amount = formatAmountFromInt( + parseAmountToInt(rule.totalAmount, precision), + precision + ) + + return formatAmountFromInt( + parseAmountToInt(amount, precision) - parseAmountToInt(used, precision), + precision, + ) + } else if (rule.type === 'random') { + return '' + } + return '' + }, [rule, draws]) + return (
{/* 标题 + 刷新按钮 */} @@ -54,31 +93,39 @@ export function DrawList({ {draws.length === 0 ? (
暂无领取记录
) : ( - +
+ {/* 金额 */} + + {formatAmount(draw.amount, precision)} + + + {/* 时间 */} + + {draw.createdAt.toLocaleString()} + +
+ + ))} + + {getBalance() &&
+
+ 剩余: + {getBalance()} +
+
} + )}
) diff --git a/tonesc-red-packet/app/admin/[id]/page.tsx b/tonesc-red-packet/app/admin/[id]/page.tsx index 022d49e..e32d968 100644 --- a/tonesc-red-packet/app/admin/[id]/page.tsx +++ b/tonesc-red-packet/app/admin/[id]/page.tsx @@ -73,6 +73,8 @@ export default async function AdminRedPacketPage({ params }: Props) {