import { useEffect, useState } from "react"; import { adminWechatUsers, type WechatUserRow } from "../api"; // 平台 · 微信用户:所有微信扫码登录的用户,集中查看。 // 每个用户仍是独立租户/独立积分(各买各的),这里只做统一观测。 const MICRO = 1_000_000; const credits = (m: number) => (m / MICRO).toLocaleString("zh-CN", { maximumFractionDigits: 2 }); export function WechatUsersPage() { const [rows, setRows] = useState([]); const [err, setErr] = useState(""); const [loading, setLoading] = useState(true); const [copied, setCopied] = useState(""); useEffect(() => { adminWechatUsers() .then(setRows) .catch((e) => setErr((e as Error).message)) .finally(() => setLoading(false)); }, []); const copy = (s: string) => { void navigator.clipboard?.writeText(s); setCopied(s); setTimeout(() => setCopied(""), 1200); }; return (

微信用户

扫码登录的用户 · 共 {rows.length} 人 · 每人独立租户与积分(各买各的)

{err &&

{err}

} {rows.map((u) => ( ))} {rows.length === 0 && !loading && ( )}
昵称 OpenID 积分余额 加入时间
{u.name || "—"} {/* openid 长且要复制,点一下复制全串 */} {credits(u.balance_micro)} {new Date(u.created_at).toLocaleString("zh-CN")}
还没有微信用户
); }