diff --git a/app/(dashboard)/dashboard/shop/employees/page.tsx b/app/(dashboard)/dashboard/shop/employees/page.tsx index 2c08544..b316a23 100644 --- a/app/(dashboard)/dashboard/shop/employees/page.tsx +++ b/app/(dashboard)/dashboard/shop/employees/page.tsx @@ -1,4 +1,8 @@ +"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" @@ -18,9 +22,8 @@ import { TableHeader, TableRow, } from "@/components/ui/table" -import { mockPlayers } from "@/lib/mock" - -const shopPlayers = mockPlayers.filter((p) => p.shopId === "shop1") +import { usePlayerStore } from "@/store/players" +import { useShopStore } from "@/store/shops" const statusLabels: Record = { available: "在线", @@ -35,11 +38,39 @@ const statusVariants: Record = { } export default function EmployeesPage() { + const [search, setSearch] = useState("") + const players = usePlayerStore((state) => state.players) + const assignToShop = usePlayerStore((state) => state.assignToShop) + const removeFromShop = usePlayerStore((state) => state.removeFromShop) + const shop = useShopStore((state) => state.shops[0]) + const updateShop = useShopStore((state) => state.updateShop) + + const shopPlayers = useMemo( + () => + players.filter( + (player) => + player.shopId === shop.id && + player.user.nickname.toLowerCase().includes(search.trim().toLowerCase()), + ), + [players, shop.id, search], + ) + + const inviteCandidate = useMemo( + () => players.find((player) => player.shopId !== shop.id), + [players, shop.id], + ) + return (

员工管理

- @@ -49,7 +80,12 @@ export default function EmployeesPage() {
签约打手 ({shopPlayers.length}) - + setSearch(event.target.value)} + />
@@ -108,9 +144,21 @@ export default function EmployeesPage() { - 查看详情 - 调整抽成 - 移除打手 + + 查看详情 + + + 调整抽成 + + { + removeFromShop(player.id) + updateShop(shop.id, { playerCount: Math.max(0, shop.playerCount - 1) }) + }} + > + 移除打手 + diff --git a/app/(dashboard)/dashboard/shop/page.tsx b/app/(dashboard)/dashboard/shop/page.tsx index c12d077..7cbb87a 100644 --- a/app/(dashboard)/dashboard/shop/page.tsx +++ b/app/(dashboard)/dashboard/shop/page.tsx @@ -1,5 +1,8 @@ +"use client" + import { DollarSign, Edit, ExternalLink, ListOrdered, Star, Users } from "lucide-react" import Link from "next/link" +import { useEffect, useState } from "react" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" @@ -7,10 +10,20 @@ import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Separator } from "@/components/ui/separator" import { Textarea } from "@/components/ui/textarea" -import { mockShops } from "@/lib/mock" +import { useShopStore } from "@/store/shops" export default function ShopManagementPage() { - const shop = mockShops[0] + const shop = useShopStore((state) => state.shops[0]) + const updateShop = useShopStore((state) => state.updateShop) + const updateAnnouncement = useShopStore((state) => state.updateAnnouncement) + const addAnnouncement = useShopStore((state) => state.addAnnouncement) + const [name, setName] = useState(shop.name) + const [description, setDescription] = useState(shop.description) + + useEffect(() => { + setName(shop.name) + setDescription(shop.description) + }, [shop]) return (
@@ -74,13 +87,25 @@ export default function ShopManagementPage() {
- + setName(event.target.value)} />
-