import React, { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Box, Card, CardContent, Typography, Button, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Paper, Chip, IconButton, Dialog, DialogTitle, DialogContent, DialogActions, TextField, Alert, Divider, Stack } from '@mui/material'; import { PersonAdd as PersonAddIcon, Person as PersonIcon, Group as GroupIcon, Delete as DeleteIcon, Check as CheckIcon, Close as CloseIcon, ExitToApp as ExitToAppIcon } from '@mui/icons-material'; import { useTeamSetting } from '@/hooks/setting-hooks'; import { useDialog } from '@/hooks/useDialog'; interface TenantUser { id: string; nickname: string; email: string; role: string; update_date: string; status: string; } interface JoinedTenant { tenant_id: string; nickname: string; email: string; role: string; update_date: string; } const TENANT_ROLES = { Owner: 'owner', Invite: 'invite', Normal: 'normal', } as const type TenantRole = (typeof TENANT_ROLES)[keyof typeof TENANT_ROLES] function TeamsSetting() { const { t } = useTranslation(); const { userInfo, tenantInfo, tenantList, tenantUsers, loading, error, inviteUser, deleteUser, agreeTenant, quitTenant } = useTeamSetting(); const [inviteDialogOpen, setInviteDialogOpen] = useState(false); const [inviteEmail, setInviteEmail] = useState(''); const handleInviteUser = async () => { if (!inviteEmail.trim()) return; const result = await inviteUser(inviteEmail); if (result?.success) { setInviteDialogOpen(false); setInviteEmail(''); } }; const dialog = useDialog(); const handleDeleteUser = async (userId: string) => { dialog.confirm({ content: t('setting.sureDelete'), onConfirm: async () => { await deleteUser(userId); } }); }; const handleAgreeTenant = async (tenantId: string) => { await agreeTenant(tenantId); }; const handleQuitTenant = async (tenantId: string) => { await quitTenant(tenantId); }; const formatDate = (dateString: string) => { return new Date(dateString).toLocaleString('zh-CN'); }; const getRoleColor = (role: TenantRole) => { if (!role) return 'primary'; // "error" | "primary" | "success" | "info" | "warning" | "secondary" | "default" if (role === 'owner') return 'primary'; if (role === 'normal') return 'success'; if (role === 'invite') return 'warning'; return 'primary'; }; return ( {/* 工作空间卡片 */} {userInfo?.nickname} {t('setting.workspace')} {/* 团队成员表格 */} {t('setting.teamMembers')} {t('common.name')} {t('setting.email')} {t('setting.role')} {t('setting.updateDate')} {t('common.action')} {tenantUsers.map((user) => ( {user.nickname} {user.email} {formatDate(user.update_date)} {user.id !== userInfo?.id && ( handleDeleteUser(user.user_id)} > )} ))}
{/* 加入的团队表格 */} {t('setting.joinedTeams')} {t('common.name')} {t('setting.email')} {t('setting.updateDate')} {t('common.action')} {tenantList.map((tenant) => ( {tenant.nickname} {tenant.email} {formatDate(tenant.update_date)} {tenant.role === TENANT_ROLES.Invite ? ( ) : ( tenant.role !== TENANT_ROLES.Owner && ( ) )} ))}
{/* 邀请用户对话框 */} setInviteDialogOpen(false)} maxWidth="sm" fullWidth> {t('setting.invite')} {error && ( {error} )} setInviteEmail(e.target.value)} placeholder={t('setting.emailPlaceholder')} />
); } export default TeamsSetting;