import { Card, Table, Tag, Typography } from 'antd' import { KeyOutlined } from '@ant-design/icons' import { quotaToUsd, getTokenStatusTag, formatTimestamp } from '@/utils/quota' const { Text } = Typography interface TokenItem { id: number name: string status: number remain_quota: number used_quota: number unlimited_quota: boolean created_time: number expired_time: number } interface Props { tokens: TokenItem[] loading: boolean } export default function TokenOverview({ tokens, loading }: Props) { const columns = [ { title: '名称', dataIndex: 'name', key: 'name', ellipsis: true, }, { title: '状态', dataIndex: 'status', key: 'status', width: 80, render: (status: number) => { const tag = getTokenStatusTag(status) return {tag.text} }, }, { title: '剩余额度', key: 'remain', width: 120, render: (_: any, record: TokenItem) => record.unlimited_quota ? 无限 : `$${quotaToUsd(record.remain_quota)}`, }, { title: '已用额度', dataIndex: 'used_quota', key: 'used', width: 120, render: (val: number) => `$${quotaToUsd(val)}`, }, { title: '过期时间', dataIndex: 'expired_time', key: 'expired', width: 120, render: (val: number) => val === -1 ? '永不过期' : formatTimestamp(val), }, ] return ( 令牌概览} hoverable className="stat-accent"> ) }