From 996460698f3b0010e64a00b8c2cfaa8c8aa62cad Mon Sep 17 00:00:00 2001 From: cryptocommuniums-afk Date: Mon, 16 Feb 2026 18:50:07 +0800 Subject: [PATCH] feat: expand redeem duration options (hours/days/months/year) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add 6h, 12h, 1d, 3d, 7d, 14d, 1mo, 3mo, 6mo, 1yr presets - Add formatDuration helper for smart display (分钟/小时/天/月/年) - Fix custom value handling when editing items with non-preset durations Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- frontend/src/app/admin-redeem/page.tsx | 41 ++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/frontend/src/app/admin-redeem/page.tsx b/frontend/src/app/admin-redeem/page.tsx index 81916c3..9f51c98 100644 --- a/frontend/src/app/admin-redeem/page.tsx +++ b/frontend/src/app/admin-redeem/page.tsx @@ -62,6 +62,23 @@ function fmtTs(v: number | null | undefined): string { return new Date(v * 1000).toLocaleString(); } +function formatDuration(mins: number): string { + if (mins >= 525600) { + const y = mins / 525600; + return Number.isInteger(y) ? `${y}年` : `${(mins / 1440).toFixed(0)}天`; + } + if (mins >= 43200) { + const m = mins / 43200; + return Number.isInteger(m) ? `${m}个月` : `${(mins / 1440).toFixed(0)}天`; + } + if (mins >= 1440) return `${(mins / 1440).toFixed(0)}天`; + if (mins >= 60) { + const h = mins / 60; + return Number.isInteger(h) ? `${h}小时` : `${h.toFixed(1)}小时`; + } + return `${mins}分钟`; +} + export default function AdminRedeemPage() { const { tx } = useI18nText(); const [token, setToken] = useState(""); @@ -224,7 +241,12 @@ export default function AdminRedeemPage() {
- {form.duration_minutes === -1 && ( + {(form.duration_minutes === -1 || (form.duration_minutes > 0 && ![15,30,60,90,120,180,360,720,1440,4320,10080,20160,43200,129600,259200,525600].includes(form.duration_minutes))) && ( 0 ? form.duration_minutes : ""} onChange={(e) => { const v = Math.max(1, Number(e.target.value) || 1); setForm((prev) => ({ ...prev, duration_minutes: v })); @@ -325,9 +358,7 @@ export default function AdminRedeemPage() { {item.unit_label} {" · "} {item.duration_minutes > 0 - ? (item.duration_minutes >= 60 - ? `⏱️ ${item.duration_minutes / 60}${tx("小时", "h")}` - : `⏱️ ${item.duration_minutes}${tx("分钟", "min")}`) + ? `⏱️ ${formatDuration(item.duration_minutes)}` : `♾️ ${tx("永久", "Permanent")}`}