"use client" import { MoreHorizontal, Star, UserPlus } from "lucide-react" import Link from "next/link" import { useMemo, useState } from "react" import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" import { Input } from "@/components/ui/input" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table" import { resolveOwnerShop } from "@/lib/domain/resolve-current-shop" import { useAuthStore } from "@/store/auth" import { usePlayerStore } from "@/store/players" import { useShopStore } from "@/store/shops" const statusLabels: Record = { available: "在线", busy: "忙碌", offline: "离线", } const statusVariants: Record = { available: "default", busy: "secondary", offline: "outline", } export default function EmployeesPage() { const [search, setSearch] = useState("") const userId = useAuthStore((state) => state.user?.id) const shops = useShopStore((state) => state.shops) const players = usePlayerStore((state) => state.players) const assignToShop = usePlayerStore((state) => state.assignToShop) const removeFromShop = usePlayerStore((state) => state.removeFromShop) const shop = resolveOwnerShop(userId, shops) const updateShop = useShopStore((state) => state.updateShop) const shopPlayers = useMemo(() => { if (!shop) return [] return players.filter( (player) => player.shopId === shop.id && player.user.nickname.toLowerCase().includes(search.trim().toLowerCase()), ) }, [players, shop, search]) const inviteCandidate = useMemo( () => (shop ? players.find((player) => player.shopId !== shop.id) : undefined), [players, shop], ) if (!shop) { return
当前账号没有可管理的店铺
} return (

员工管理

签约打手 ({shopPlayers.length}) setSearch(event.target.value)} />
打手 擅长游戏 评分 完成率 状态 操作 {shopPlayers.map((player) => (
{player.user.nickname[0]}

{player.user.nickname}

{player.totalOrders} 单

{player.games.map((game) => ( {game} ))}
{player.rating}
{(player.completionRate * 100).toFixed(0)}% {statusLabels[player.status]} 查看详情 调整抽成 { removeFromShop(player.id) updateShop(shop.id, { playerCount: Math.max(0, shop.playerCount - 1) }) }} > 移除打手
))}
) }