/* Copyright (C) 2025 QuantumNous This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ import React from 'react'; import { Button, Dropdown, Space, Tag, Tooltip, Typography } from '@douyinfe/semi-ui'; import { User, Shield, Crown, HelpCircle, CheckCircle, XCircle, Minus, Coins, Activity, Users, DollarSign, UserPlus, } from 'lucide-react'; import { IconMore } from '@douyinfe/semi-icons'; import { renderGroup, renderNumber, renderQuota } from '../../../helpers'; const { Text } = Typography; /** * Render user role */ const renderRole = (role, t) => { switch (role) { case 1: return ( }> {t('普通用户')} ); case 10: return ( }> {t('管理员')} ); case 100: return ( }> {t('超级管理员')} ); default: return ( }> {t('未知身份')} ); } }; /** * Render user status */ const renderStatus = (status, t) => { switch (status) { case 1: return }>{t('已激活')}; case 2: return ( }> {t('已封禁')} ); default: return ( }> {t('未知状态')} ); } }; /** * Render username with remark */ const renderUsername = (text, record) => { const remark = record.remark; if (!remark) { return {text}; } const maxLen = 10; const displayRemark = remark.length > maxLen ? remark.slice(0, maxLen) + '…' : remark; return ( {text}
{displayRemark}
); }; /** * Render user statistics */ const renderStatistics = (text, record, t) => { return (
}> {t('剩余')}: {renderQuota(record.quota)} }> {t('已用')}: {renderQuota(record.used_quota)} }> {t('调用')}: {renderNumber(record.request_count)}
); }; /** * Render invite information */ const renderInviteInfo = (text, record, t) => { return (
}> {t('邀请')}: {renderNumber(record.aff_count)} }> {t('收益')}: {renderQuota(record.aff_history_quota)} }> {record.inviter_id === 0 ? t('无邀请人') : `邀请人: ${record.inviter_id}`}
); }; /** * Render overall status including deleted status */ const renderOverallStatus = (status, record, t) => { if (record.DeletedAt !== null) { return }>{t('已注销')}; } else { return renderStatus(status, t); } }; /** * Render operations column */ const renderOperations = (text, record, { setEditingUser, setShowEditUser, showPromoteModal, showDemoteModal, showEnableDisableModal, showDeleteModal, t }) => { if (record.DeletedAt !== null) { return <>; } // Create more operations dropdown menu items const moreMenuItems = [ { node: 'item', name: t('提升'), type: 'warning', onClick: () => showPromoteModal(record), }, { node: 'item', name: t('降级'), type: 'secondary', onClick: () => showDemoteModal(record), }, { node: 'item', name: t('注销'), type: 'danger', onClick: () => showDeleteModal(record), } ]; // Add enable/disable button dynamically if (record.status === 1) { moreMenuItems.splice(-1, 0, { node: 'item', name: t('禁用'), type: 'warning', onClick: () => showEnableDisableModal(record, 'disable'), }); } else { moreMenuItems.splice(-1, 0, { node: 'item', name: t('启用'), type: 'secondary', onClick: () => showEnableDisableModal(record, 'enable'), disabled: record.status === 3, }); } return (