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")}`}