'use client'; import { useState, useCallback } from 'react'; import { useParams, useRouter } from 'next/navigation'; import Image from 'next/image'; import Link from 'next/link'; import { Button, toast } from '@/components/common'; import { PageContainer } from '@/components/layout'; import { cn } from '@/utils/helpers'; import { formatNumber, formatRanking } from '@/utils/formatters'; import { useUserFullDetail, useReferralTree, usePlantingLedger, useWalletLedger, useAuthorizationDetail, } from '@/hooks/useUserDetailPage'; import type { ReferralNode, PlantingLedgerItem, WalletLedgerItem, WALLET_ENTRY_TYPE_LABELS, ASSET_TYPE_LABELS, PLANTING_STATUS_LABELS, AUTHORIZATION_ROLE_LABELS, AUTHORIZATION_STATUS_LABELS, ASSESSMENT_RESULT_LABELS, } from '@/types/userDetail.types'; import styles from './user-detail.module.scss'; // Tab 类型 type TabType = 'referral' | 'planting' | 'wallet' | 'authorization'; const tabs: { key: TabType; label: string }[] = [ { key: 'referral', label: '推荐关系' }, { key: 'planting', label: '认种信息' }, { key: 'wallet', label: '钱包信息' }, { key: 'authorization', label: '授权信息' }, ]; // 流水类型标签 const entryTypeLabels: Record = { DEPOSIT: '充值', DEPOSIT_USDT: 'USDT充值', DEPOSIT_BNB: 'BNB充值', WITHDRAW: '提现', WITHDRAW_FROZEN: '提现冻结', WITHDRAW_CONFIRMED: '提现确认', WITHDRAW_CANCELLED: '提现取消', PLANTING_PAYMENT: '认种支付', PLANTING_FROZEN: '认种冻结', PLANTING_DEDUCT: '认种扣款', REWARD_PENDING: '收益待领取', REWARD_SETTLED: '收益结算', REWARD_EXPIRED: '收益过期', TRANSFER_OUT: '转出', TRANSFER_IN: '转入', INTERNAL_TRANSFER: '内部转账', ADMIN_ADJUSTMENT: '管理员调整', SYSTEM_DEDUCT: '系统扣款', FEE: '手续费', }; const assetTypeLabels: Record = { USDT: '绿积分', DST: 'DST', BNB: 'BNB', OG: 'OG', RWAD: 'RWAD', HASHPOWER: '算力', }; const plantingStatusLabels: Record = { CREATED: '已创建', PAID: '已支付', FUND_ALLOCATED: '资金已分配', MINING_ENABLED: '已开始挖矿', CANCELLED: '已取消', EXPIRED: '已过期', }; const roleTypeLabels: Record = { COMMUNITY_PARTNER: '社区合伙人', PROVINCE_COMPANY: '省公司', CITY_COMPANY: '市公司', AUTH_PROVINCE_COMPANY: '授权省公司', AUTH_CITY_COMPANY: '授权市公司', }; const authStatusLabels: Record = { PENDING: '待授权', AUTHORIZED: '已授权', REVOKED: '已撤销', EXPIRED: '已过期', }; const assessmentResultLabels: Record = { NOT_ASSESSED: '未考核', PASSED: '通过', FAILED: '未通过', BYPASSED: '豁免', }; /** * 用户详情页面 */ export default function UserDetailPage() { const params = useParams(); const router = useRouter(); const accountSequence = params.id as string; const [activeTab, setActiveTab] = useState('referral'); const [treeRootUser, setTreeRootUser] = useState(accountSequence); const [plantingPage, setPlantingPage] = useState(1); const [walletPage, setWalletPage] = useState(1); // 获取用户完整信息 const { data: userDetail, isLoading: detailLoading, error: detailError } = useUserFullDetail(accountSequence); // 获取推荐关系树(以当前选中的用户为根) const { data: referralTree, isLoading: treeLoading } = useReferralTree(treeRootUser, 'both', 1); // 获取认种分类账 const { data: plantingData, isLoading: plantingLoading } = usePlantingLedger(accountSequence, { page: plantingPage, pageSize: 10, }); // 获取钱包分类账 const { data: walletData, isLoading: walletLoading } = useWalletLedger(accountSequence, { page: walletPage, pageSize: 10, }); // 获取授权信息 const { data: authData, isLoading: authLoading } = useAuthorizationDetail(accountSequence); // 切换推荐关系树的根节点 const handleTreeNodeClick = useCallback((node: ReferralNode) => { setTreeRootUser(node.accountSequence); }, []); // 返回列表 const handleBack = useCallback(() => { router.push('/users'); }, [router]); // 格式化日期 const formatDate = (dateStr: string | null) => { if (!dateStr) return '-'; return new Date(dateStr).toLocaleString('zh-CN'); }; // 格式化金额 const formatAmount = (amount: string | null) => { if (!amount) return '-'; const num = parseFloat(amount); return num.toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 8 }); }; if (detailLoading) { return (
加载中...
); } if (detailError || !userDetail) { return (

加载失败: {(detailError as Error)?.message || '用户不存在'}

); } return (
{/* 返回按钮 */}
{/* 用户基本信息卡片 */}

{userDetail.nickname || '未设置昵称'} {userDetail.status === 'active' ? '正常' : userDetail.status === 'frozen' ? '冻结' : '停用'}

账户序号: {userDetail.accountSequence} 手机号: {userDetail.phoneNumberMasked || '未绑定'} KYC: {userDetail.kycStatus}
注册时间: {formatDate(userDetail.registeredAt)} 最后活跃: {formatDate(userDetail.lastActiveAt)}
{/* 统计卡片 */}
个人认种量 {formatNumber(userDetail.personalAdoptions)}
团队认种量 {formatNumber(userDetail.teamAdoptions)}
团队地址数 {formatNumber(userDetail.teamAddresses)}
龙虎榜排名 {userDetail.ranking ? formatRanking(userDetail.ranking) : '-'}
直推人数 {formatNumber(userDetail.referralInfo.directReferralCount)}
活跃直推 {formatNumber(userDetail.referralInfo.activeDirectCount)}
{/* 推荐人信息 */} {userDetail.referralInfo.referrerSequence && (
推荐人: {userDetail.referralInfo.referrerSequence} {userDetail.referralInfo.referrerNickname && ` (${userDetail.referralInfo.referrerNickname})`} 邀请码: {userDetail.referralInfo.usedReferralCode || '-'} 层级深度: {userDetail.referralInfo.depth}
)}
{/* Tab 切换 */}
{tabs.map((tab) => ( ))}
{/* Tab 内容 */}
{/* 推荐关系 Tab */} {activeTab === 'referral' && (

推荐关系树

{treeRootUser !== accountSequence && ( )}
{treeLoading ? (
加载中...
) : referralTree ? (
{/* 向上的推荐人链 */} {referralTree.ancestors.length > 0 && (
推荐人链 (向上)
{referralTree.ancestors.map((ancestor, index) => (
{index < referralTree.ancestors.length - 1 && (
)}
))}
)} {/* 当前用户 */}
{referralTree.currentUser.accountSequence} {referralTree.currentUser.nickname || '未设置'} 认种: {formatNumber(referralTree.currentUser.personalAdoptions)} 直推: {formatNumber(referralTree.currentUser.directReferralCount)}
{/* 直推用户 */} {referralTree.directReferrals.length > 0 && (
直推用户 ({referralTree.directReferrals.length})
{referralTree.directReferrals.map((referral) => ( ))}
)} {referralTree.directReferrals.length === 0 && referralTree.ancestors.length === 0 && (
暂无推荐关系
)}
) : (
暂无推荐关系数据
)}
)} {/* 认种信息 Tab */} {activeTab === 'planting' && (
{plantingLoading ? (
加载中...
) : plantingData ? ( <> {/* 认种汇总 */}

认种汇总

总订单数 {formatNumber(plantingData.summary.totalOrders)}
总认种量 {formatNumber(plantingData.summary.totalTreeCount)}
总金额 (绿积分) {formatAmount(plantingData.summary.totalAmount)}
有效认种量 {formatNumber(plantingData.summary.effectiveTreeCount)}
首次认种 {formatDate(plantingData.summary.firstPlantingAt)}
最近认种 {formatDate(plantingData.summary.lastPlantingAt)}
{/* 认种分类账 */}

认种分类账明细

订单号
认种数量
金额
状态
省市
创建时间
支付时间
{plantingData.items.length === 0 ? (
暂无认种记录
) : ( plantingData.items.map((item) => (
{item.orderNo}
{formatNumber(item.treeCount)}
{formatAmount(item.totalAmount)}
{plantingStatusLabels[item.status] || item.status}
{item.selectedProvince || '-'} / {item.selectedCity || '-'}
{formatDate(item.createdAt)}
{formatDate(item.paidAt)}
)) )}
{/* 分页 */} {plantingData.totalPages > 1 && (
第 {plantingPage} / {plantingData.totalPages} 页
)}
) : (
暂无认种数据
)}
)} {/* 钱包信息 Tab */} {activeTab === 'wallet' && (
{walletLoading ? (
加载中...
) : walletData ? ( <> {/* 钱包汇总 */}

钱包汇总

绿积分 可用 {formatAmount(walletData.summary.usdtAvailable)}
绿积分 冻结 {formatAmount(walletData.summary.usdtFrozen)}
DST 可用 {formatAmount(walletData.summary.dstAvailable)}
算力 {formatAmount(walletData.summary.hashpower)}
待领取收益 {formatAmount(walletData.summary.pendingUsdt)}
可结算收益 {formatAmount(walletData.summary.settleableUsdt)}
已结算收益 {formatAmount(walletData.summary.settledTotalUsdt)}
过期收益 {formatAmount(walletData.summary.expiredTotalUsdt)}
{/* 钱包分类账 */}

钱包分类账明细

流水ID
类型
资产
金额
余额快照
关联订单
时间
{walletData.items.length === 0 ? (
暂无钱包流水
) : ( walletData.items.map((item) => (
{item.entryId}
{entryTypeLabels[item.entryType] || item.entryType}
{assetTypeLabels[item.assetType] || item.assetType}
= 0 ? styles['ledgerTable__cell--positive'] : styles['ledgerTable__cell--negative'] )}> {parseFloat(item.amount) >= 0 ? '+' : ''}{formatAmount(item.amount)}
{formatAmount(item.balanceAfter)}
{item.refOrderId || item.refTxHash || '-'}
{formatDate(item.createdAt)}
)) )}
{/* 分页 */} {walletData.totalPages > 1 && (
第 {walletPage} / {walletData.totalPages} 页
)}
) : (
暂无钱包数据
)}
)} {/* 授权信息 Tab */} {activeTab === 'authorization' && (
{authLoading ? (
加载中...
) : authData ? ( <> {/* 授权角色列表 */}

授权角色

{authData.roles.length === 0 ? (
暂无授权角色
) : (
{authData.roles.map((role) => (
{roleTypeLabels[role.roleType] || role.roleType} {authStatusLabels[role.status] || role.status}

区域: {role.regionName} ({role.regionCode})

显示头衔: {role.displayTitle}

权益状态: {role.benefitActive ? ( 已激活 ) : ( 未激活 )}

初始目标: {formatNumber(role.initialTargetTreeCount)} 棵

月度目标类型: {role.monthlyTargetType}

授权时间: {formatDate(role.authorizedAt)}

))}
)}
{/* 月度考核记录 */}

月度考核记录

{authData.assessments.length === 0 ? (
暂无考核记录
) : (
考核月份
角色
月度目标/完成
累计目标/完成
结果
区域排名
{authData.assessments.map((assessment) => (
{assessment.assessmentMonth}
{roleTypeLabels[assessment.roleType] || assessment.roleType}
{formatNumber(assessment.monthlyCompleted)} / {formatNumber(assessment.monthlyTarget)}
{formatNumber(assessment.cumulativeCompleted)} / {formatNumber(assessment.cumulativeTarget)}
{assessmentResultLabels[assessment.result] || assessment.result}
{assessment.rankingInRegion || '-'} {assessment.isFirstPlace && ' 🥇'}
))}
)}
{/* 系统账户流水(如果有) */} {authData.systemAccountLedger.length > 0 && (

系统账户流水

流水ID
账户类型
流水类型
金额
余额
时间
{authData.systemAccountLedger.map((ledger) => (
{ledger.ledgerId}
{ledger.accountType}
{ledger.entryType}
= 0 ? styles['ledgerTable__cell--positive'] : styles['ledgerTable__cell--negative'] )}> {parseFloat(ledger.amount) >= 0 ? '+' : ''}{formatAmount(ledger.amount)}
{formatAmount(ledger.balanceAfter)}
{formatDate(ledger.createdAt)}
))}
)} ) : (
暂无授权数据
)}
)}
); }