mirror of
https://github.com/infiniflow/ragflow.git
synced 2025-12-08 20:42:30 +08:00
### What problem does this PR solve? Feat: Add TeamManagement component #3221 ### Type of change - [x] New Feature (non-breaking change which adds functionality)
108 lines
3.7 KiB
TypeScript
108 lines
3.7 KiB
TypeScript
import { Button } from '@/components/ui/button';
|
|
import { Card } from '@/components/ui/card';
|
|
import {
|
|
DropdownMenu,
|
|
DropdownMenuContent,
|
|
DropdownMenuItem,
|
|
DropdownMenuTrigger,
|
|
} from '@/components/ui/dropdown-menu';
|
|
import { Table, TableBody, TableCell, TableRow } from '@/components/ui/table';
|
|
import { ChevronDown, MoreVertical, Plus, UserPlus } from 'lucide-react';
|
|
|
|
interface TeamMember {
|
|
email: string;
|
|
name: string;
|
|
role: string;
|
|
}
|
|
|
|
const TeamManagement = () => {
|
|
const teamMembers: TeamMember[] = [
|
|
{ email: 'yifanwu92@gmail.com', name: 'Yifan Wu', role: 'Admin' },
|
|
{ email: 'yifanwu92@gmail.com', name: 'Yifan Wu', role: 'Admin' },
|
|
];
|
|
|
|
const stats = {
|
|
project: 1,
|
|
token: '1,000',
|
|
storage: '1GB',
|
|
};
|
|
|
|
return (
|
|
<div className="min-h-screen text-white p-8 ">
|
|
<div className="max-w-6xl mx-auto">
|
|
<div className="flex justify-between items-center mb-8">
|
|
<h1 className="text-4xl font-bold">Team management</h1>
|
|
<Button className="hover:bg-[#6B4FD8] text-white bg-colors-background-core-standard">
|
|
<Plus className="mr-2 h-4 w-4" />
|
|
Create team
|
|
</Button>
|
|
</div>
|
|
|
|
<div className="mb-8">
|
|
<div className="flex justify-between items-center mb-4">
|
|
<h2 className="text-2xl font-semibold">Yifan's team</h2>
|
|
<Button variant="secondary" size="icon">
|
|
<ChevronDown className="h-4 w-4" />
|
|
</Button>
|
|
</div>
|
|
|
|
<Card className="border-0 p-6 mb-6 bg-colors-background-inverse-weak">
|
|
<div className="grid grid-cols-3 gap-8">
|
|
<div>
|
|
<p className="text-sm text-gray-400 mb-2">Project</p>
|
|
<p className="text-2xl font-semibold">{stats.project}</p>
|
|
</div>
|
|
<div>
|
|
<p className="text-sm text-gray-400 mb-2">Token</p>
|
|
<p className="text-2xl font-semibold">{stats.token}</p>
|
|
</div>
|
|
<div>
|
|
<p className="text-sm text-gray-400 mb-2">Storage</p>
|
|
<p className="text-2xl font-semibold">{stats.storage}</p>
|
|
</div>
|
|
</div>
|
|
</Card>
|
|
|
|
<Card className="border-0 p-6 bg-colors-background-inverse-weak">
|
|
<Table>
|
|
<TableBody>
|
|
{teamMembers.map((member, idx) => (
|
|
<TableRow key={idx}>
|
|
<TableCell>{member.email}</TableCell>
|
|
<TableCell>{member.name}</TableCell>
|
|
<TableCell className="flex items-center justify-end">
|
|
<span className="text-colors-text-core-standard">
|
|
{member.role}
|
|
</span>
|
|
<DropdownMenu>
|
|
<DropdownMenuTrigger asChild>
|
|
<Button variant="ghost" size="icon">
|
|
<MoreVertical className="h-4 w-4" />
|
|
</Button>
|
|
</DropdownMenuTrigger>
|
|
<DropdownMenuContent align="end">
|
|
<DropdownMenuItem>Edit</DropdownMenuItem>
|
|
<DropdownMenuItem className="text-red-600">
|
|
Remove
|
|
</DropdownMenuItem>
|
|
</DropdownMenuContent>
|
|
</DropdownMenu>
|
|
</TableCell>
|
|
</TableRow>
|
|
))}
|
|
</TableBody>
|
|
</Table>
|
|
|
|
<Button variant="outline" className="mt-6 ">
|
|
<UserPlus className="mr-2 h-4 w-4" />
|
|
Invite member
|
|
</Button>
|
|
</Card>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default TeamManagement;
|