import type { Metadata } from "next"; import { redirect } from "next/navigation"; import { formatLocalDateTime } from "@/lib/datetime"; import { getRequestOrigin } from "@/lib/request-origin"; import { buildSubscriptionUrl, describeRemainingTraffic } from "@/lib/subscription"; import { requireUserSession } from "@/lib/session"; import { formatBytes, getUserById } from "@/lib/store"; export const metadata: Metadata = { title: "我的订阅", }; export default async function MePage() { const session = await requireUserSession(); const [user, origin] = await Promise.all([ getUserById(session.user_id), getRequestOrigin(), ]); if (!user) { redirect("/login"); } const usedBytes = user.used_tx_bytes + user.used_rx_bytes; const subscriptionUrl = user.subscription_token ? buildSubscriptionUrl(user.subscription_token, origin) : null; const clashImportUrl = subscriptionUrl ? `clash://install-config?url=${encodeURIComponent(subscriptionUrl)}` : null; return (
账户中心

{user.username}

{user.enabled ? "账号已启用" : "账号已禁用"} {formatLocalDateTime(user.expires_at, "长期有效")} {describeRemainingTraffic(user)}
用户 ID {user.auth_id}

订阅名称:{user.subscription_label || user.username}

订阅

订阅

Clash / Mihomo
{clashImportUrl ? ( 一键导入 ) : ( 订阅暂不可用 )} {subscriptionUrl ? ( 打开订阅链接 ) : null}
订阅链接

{subscriptionUrl ?? "暂不可用"}

流量概览

总用量 {formatBytes(usedBytes)}
剩余额度 {describeRemainingTraffic(user)}
上传 {formatBytes(user.used_tx_bytes)}
下载 {formatBytes(user.used_rx_bytes)}
账户

账户

); }