From 7ed7bad97585fe0bab737b8bc5e3e4785ae76175 Mon Sep 17 00:00:00 2001 From: zetaloop Date: Sat, 21 Feb 2026 00:24:03 +0800 Subject: [PATCH] refactor: rewrite and expand mock data into modular files --- app/(account)/notifications/page.tsx | 2 +- app/(account)/settings/page.tsx | 2 +- app/(account)/wallet/page.tsx | 2 +- app/(auth)/login/page.tsx | 2 +- app/(auth)/register/page.tsx | 2 +- app/(dashboard)/dashboard/page.tsx | 2 +- .../dashboard/services/new/page.tsx | 2 +- app/(dashboard)/dashboard/services/page.tsx | 2 +- .../dashboard/shop/employees/page.tsx | 2 +- .../dashboard/shop/income/page.tsx | 2 +- .../dashboard/shop/orders/page.tsx | 2 +- app/(dashboard)/dashboard/shop/page.tsx | 2 +- app/(dashboard)/dashboard/shop/rules/page.tsx | 2 +- .../dashboard/shop/templates/page.tsx | 2 +- app/(main)/community/page.tsx | 2 +- app/(main)/page.tsx | 2 +- app/(main)/player/[id]/page.tsx | 2 +- app/(main)/post/[id]/page.tsx | 2 +- app/(main)/post/new/page.tsx | 2 +- app/(main)/search/page.tsx | 2 +- app/(main)/shop/[id]/page.tsx | 2 +- app/(main)/user/[id]/page.tsx | 2 +- app/(order)/chat/[id]/page.tsx | 2 +- app/(order)/chat/page.tsx | 2 +- app/(order)/dispute/[id]/page.tsx | 2 +- app/(order)/order/[id]/page.tsx | 2 +- app/(order)/order/new/page.tsx | 2 +- app/(order)/orders/page.tsx | 2 +- app/(order)/review/[id]/page.tsx | 2 +- components/header.tsx | 2 +- components/login-dialog.tsx | 2 +- lib/mock-data.ts | 736 ------------------ lib/mock/chat.ts | 256 ++++++ lib/mock/comments.ts | 158 ++++ lib/mock/disputes.ts | 25 + lib/mock/favorites.ts | 74 ++ lib/mock/games.ts | 16 + lib/mock/index.ts | 14 + lib/mock/notifications.ts | 109 +++ lib/mock/orders.ts | 235 ++++++ lib/mock/players.ts | 69 ++ lib/mock/posts.ts | 160 ++++ lib/mock/reviews.ts | 217 ++++++ lib/mock/services.ts | 181 +++++ lib/mock/shops.ts | 88 +++ lib/mock/transactions.ts | 139 ++++ lib/mock/users.ts | 119 +++ 47 files changed, 1891 insertions(+), 767 deletions(-) delete mode 100644 lib/mock-data.ts create mode 100644 lib/mock/chat.ts create mode 100644 lib/mock/comments.ts create mode 100644 lib/mock/disputes.ts create mode 100644 lib/mock/favorites.ts create mode 100644 lib/mock/games.ts create mode 100644 lib/mock/index.ts create mode 100644 lib/mock/notifications.ts create mode 100644 lib/mock/orders.ts create mode 100644 lib/mock/players.ts create mode 100644 lib/mock/posts.ts create mode 100644 lib/mock/reviews.ts create mode 100644 lib/mock/services.ts create mode 100644 lib/mock/shops.ts create mode 100644 lib/mock/transactions.ts create mode 100644 lib/mock/users.ts diff --git a/app/(account)/notifications/page.tsx b/app/(account)/notifications/page.tsx index ecd7e03..0cc410e 100644 --- a/app/(account)/notifications/page.tsx +++ b/app/(account)/notifications/page.tsx @@ -4,7 +4,7 @@ import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Card, CardContent } from "@/components/ui/card" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" -import { mockNotifications } from "@/lib/mock-data" +import { mockNotifications } from "@/lib/mock" import type { Notification } from "@/lib/types" const typeIcons: Record = { diff --git a/app/(account)/settings/page.tsx b/app/(account)/settings/page.tsx index 59363d7..0c22a45 100644 --- a/app/(account)/settings/page.tsx +++ b/app/(account)/settings/page.tsx @@ -11,7 +11,7 @@ import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group" import { Separator } from "@/components/ui/separator" import { Switch } from "@/components/ui/switch" import { Textarea } from "@/components/ui/textarea" -import { currentUser } from "@/lib/mock-data" +import { currentUser } from "@/lib/mock" import type { UserRole } from "@/lib/types" import { useAuthStore } from "@/store/auth" diff --git a/app/(account)/wallet/page.tsx b/app/(account)/wallet/page.tsx index 00dec7e..3018b3a 100644 --- a/app/(account)/wallet/page.tsx +++ b/app/(account)/wallet/page.tsx @@ -13,7 +13,7 @@ import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Input } from "@/components/ui/input" import { Separator } from "@/components/ui/separator" -import { mockTransactions, walletBalance } from "@/lib/mock-data" +import { mockTransactions, walletBalance } from "@/lib/mock" import { useAuthStore } from "@/store/auth" const typeLabels: Record = { diff --git a/app/(auth)/login/page.tsx b/app/(auth)/login/page.tsx index d17ec15..ef6abf3 100644 --- a/app/(auth)/login/page.tsx +++ b/app/(auth)/login/page.tsx @@ -9,7 +9,7 @@ import { z } from "zod" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" -import { currentUser } from "@/lib/mock-data" +import { currentUser } from "@/lib/mock" import { useAuthStore } from "@/store/auth" const loginSchema = z.object({ diff --git a/app/(auth)/register/page.tsx b/app/(auth)/register/page.tsx index 34caeac..217f994 100644 --- a/app/(auth)/register/page.tsx +++ b/app/(auth)/register/page.tsx @@ -9,7 +9,7 @@ import { z } from "zod" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" -import { currentUser } from "@/lib/mock-data" +import { currentUser } from "@/lib/mock" import { useAuthStore } from "@/store/auth" const registerSchema = z diff --git a/app/(dashboard)/dashboard/page.tsx b/app/(dashboard)/dashboard/page.tsx index 6534f24..95205fc 100644 --- a/app/(dashboard)/dashboard/page.tsx +++ b/app/(dashboard)/dashboard/page.tsx @@ -7,7 +7,7 @@ import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Progress } from "@/components/ui/progress" import { statusLabels } from "@/lib/constants" -import { mockOrders, mockPlayers, mockServices, mockShops } from "@/lib/mock-data" +import { mockOrders, mockPlayers, mockServices, mockShops } from "@/lib/mock" import { useAuthStore } from "@/store/auth" export default function DashboardPage() { diff --git a/app/(dashboard)/dashboard/services/new/page.tsx b/app/(dashboard)/dashboard/services/new/page.tsx index 0527b26..fbcb538 100644 --- a/app/(dashboard)/dashboard/services/new/page.tsx +++ b/app/(dashboard)/dashboard/services/new/page.tsx @@ -19,7 +19,7 @@ import { } from "@/components/ui/select" import { Textarea } from "@/components/ui/textarea" import { GameIcon } from "@/lib/game-icons" -import { mockGames } from "@/lib/mock-data" +import { mockGames } from "@/lib/mock" const serviceSchema = z.object({ title: z.string().min(2, "标题至少2个字符"), diff --git a/app/(dashboard)/dashboard/services/page.tsx b/app/(dashboard)/dashboard/services/page.tsx index 1ad4bb0..90bffbb 100644 --- a/app/(dashboard)/dashboard/services/page.tsx +++ b/app/(dashboard)/dashboard/services/page.tsx @@ -11,7 +11,7 @@ import { TableHeader, TableRow, } from "@/components/ui/table" -import { mockServices } from "@/lib/mock-data" +import { mockServices } from "@/lib/mock" export default function ServicesPage() { return ( diff --git a/app/(dashboard)/dashboard/shop/employees/page.tsx b/app/(dashboard)/dashboard/shop/employees/page.tsx index bb16c60..2c08544 100644 --- a/app/(dashboard)/dashboard/shop/employees/page.tsx +++ b/app/(dashboard)/dashboard/shop/employees/page.tsx @@ -18,7 +18,7 @@ import { TableHeader, TableRow, } from "@/components/ui/table" -import { mockPlayers } from "@/lib/mock-data" +import { mockPlayers } from "@/lib/mock" const shopPlayers = mockPlayers.filter((p) => p.shopId === "shop1") diff --git a/app/(dashboard)/dashboard/shop/income/page.tsx b/app/(dashboard)/dashboard/shop/income/page.tsx index e0f33f0..783d910 100644 --- a/app/(dashboard)/dashboard/shop/income/page.tsx +++ b/app/(dashboard)/dashboard/shop/income/page.tsx @@ -9,7 +9,7 @@ import { TableHeader, TableRow, } from "@/components/ui/table" -import { mockOrders, mockTransactions } from "@/lib/mock-data" +import { mockOrders, mockTransactions } from "@/lib/mock" export default function ShopIncomePage() { const completedOrders = mockOrders.filter((o) => o.status === "completed") diff --git a/app/(dashboard)/dashboard/shop/orders/page.tsx b/app/(dashboard)/dashboard/shop/orders/page.tsx index c637423..bde0bb0 100644 --- a/app/(dashboard)/dashboard/shop/orders/page.tsx +++ b/app/(dashboard)/dashboard/shop/orders/page.tsx @@ -12,7 +12,7 @@ import { TableRow, } from "@/components/ui/table" import { statusLabels } from "@/lib/constants" -import { mockOrders } from "@/lib/mock-data" +import { mockOrders } from "@/lib/mock" export default function ShopOrdersPage() { const totalOrders = mockOrders.length diff --git a/app/(dashboard)/dashboard/shop/page.tsx b/app/(dashboard)/dashboard/shop/page.tsx index f947856..c12d077 100644 --- a/app/(dashboard)/dashboard/shop/page.tsx +++ b/app/(dashboard)/dashboard/shop/page.tsx @@ -7,7 +7,7 @@ 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-data" +import { mockShops } from "@/lib/mock" export default function ShopManagementPage() { const shop = mockShops[0] diff --git a/app/(dashboard)/dashboard/shop/rules/page.tsx b/app/(dashboard)/dashboard/shop/rules/page.tsx index 1e5ffb1..ac240eb 100644 --- a/app/(dashboard)/dashboard/shop/rules/page.tsx +++ b/app/(dashboard)/dashboard/shop/rules/page.tsx @@ -14,7 +14,7 @@ import { SelectValue, } from "@/components/ui/select" import { Switch } from "@/components/ui/switch" -import { mockShops } from "@/lib/mock-data" +import { mockShops } from "@/lib/mock" import type { Shop } from "@/lib/types" export default function ShopRulesPage() { diff --git a/app/(dashboard)/dashboard/shop/templates/page.tsx b/app/(dashboard)/dashboard/shop/templates/page.tsx index 0564cd2..d05ff5c 100644 --- a/app/(dashboard)/dashboard/shop/templates/page.tsx +++ b/app/(dashboard)/dashboard/shop/templates/page.tsx @@ -6,7 +6,7 @@ import { type DragEvent, useEffect, useState } from "react" import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Switch } from "@/components/ui/switch" -import { mockShops } from "@/lib/mock-data" +import { mockShops } from "@/lib/mock" import type { ShopSection } from "@/lib/types" const sectionLabels: Record = { diff --git a/app/(main)/community/page.tsx b/app/(main)/community/page.tsx index 12798af..a43b116 100644 --- a/app/(main)/community/page.tsx +++ b/app/(main)/community/page.tsx @@ -8,7 +8,7 @@ import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Card, CardContent, CardFooter, CardHeader } from "@/components/ui/card" import { roleLabels } from "@/lib/constants" -import { mockGames, mockPosts } from "@/lib/mock-data" +import { mockGames, mockPosts } from "@/lib/mock" export default function CommunityPage() { const [sortMode, setSortMode] = useState<"latest" | "hot">("latest") diff --git a/app/(main)/page.tsx b/app/(main)/page.tsx index 0e1b892..fded128 100644 --- a/app/(main)/page.tsx +++ b/app/(main)/page.tsx @@ -5,7 +5,7 @@ import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Card, CardContent, CardFooter, CardHeader, CardTitle } from "@/components/ui/card" import { GameIcon } from "@/lib/game-icons" -import { mockGames, mockPlayers, mockShops } from "@/lib/mock-data" +import { mockGames, mockPlayers, mockShops } from "@/lib/mock" export default function HomePage() { return ( diff --git a/app/(main)/player/[id]/page.tsx b/app/(main)/player/[id]/page.tsx index 23375f0..787b720 100644 --- a/app/(main)/player/[id]/page.tsx +++ b/app/(main)/player/[id]/page.tsx @@ -15,7 +15,7 @@ import { } from "@/components/ui/card" import { Separator } from "@/components/ui/separator" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" -import { mockFavorites, mockPlayers, mockReviews, mockServices } from "@/lib/mock-data" +import { mockFavorites, mockPlayers, mockReviews, mockServices } from "@/lib/mock" export default async function PlayerDetailPage({ params }: { params: Promise<{ id: string }> }) { const { id } = await params diff --git a/app/(main)/post/[id]/page.tsx b/app/(main)/post/[id]/page.tsx index 532d92d..c1a9d57 100644 --- a/app/(main)/post/[id]/page.tsx +++ b/app/(main)/post/[id]/page.tsx @@ -9,7 +9,7 @@ import { Card, CardContent, CardHeader } from "@/components/ui/card" import { Separator } from "@/components/ui/separator" import { Textarea } from "@/components/ui/textarea" import { roleLabels } from "@/lib/constants" -import { mockComments, mockOrders, mockPlayers, mockPosts } from "@/lib/mock-data" +import { mockComments, mockOrders, mockPlayers, mockPosts } from "@/lib/mock" export default async function PostDetailPage({ params }: { params: Promise<{ id: string }> }) { const { id } = await params diff --git a/app/(main)/post/new/page.tsx b/app/(main)/post/new/page.tsx index 70c585e..a587a2c 100644 --- a/app/(main)/post/new/page.tsx +++ b/app/(main)/post/new/page.tsx @@ -20,7 +20,7 @@ import { SelectValue, } from "@/components/ui/select" import { Textarea } from "@/components/ui/textarea" -import { mockPosts } from "@/lib/mock-data" +import { mockPosts } from "@/lib/mock" import { useRequireAuth } from "@/lib/use-require-auth" const postSchema = z.object({ diff --git a/app/(main)/search/page.tsx b/app/(main)/search/page.tsx index 7c47e77..4de532d 100644 --- a/app/(main)/search/page.tsx +++ b/app/(main)/search/page.tsx @@ -42,7 +42,7 @@ import { } from "@/components/ui/sheet" import { Switch } from "@/components/ui/switch" import { GameIcon } from "@/lib/game-icons" -import { mockGames, mockPlayers } from "@/lib/mock-data" +import { mockGames, mockPlayers } from "@/lib/mock" import type { Player } from "@/lib/types" import { cn } from "@/lib/utils" diff --git a/app/(main)/shop/[id]/page.tsx b/app/(main)/shop/[id]/page.tsx index adac6d9..0dc875d 100644 --- a/app/(main)/shop/[id]/page.tsx +++ b/app/(main)/shop/[id]/page.tsx @@ -7,7 +7,7 @@ import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" import { Badge } from "@/components/ui/badge" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Separator } from "@/components/ui/separator" -import { mockFavorites, mockPlayers, mockReviews, mockServices, mockShops } from "@/lib/mock-data" +import { mockFavorites, mockPlayers, mockReviews, mockServices, mockShops } from "@/lib/mock" interface PageProps { params: Promise<{ id: string }> diff --git a/app/(main)/user/[id]/page.tsx b/app/(main)/user/[id]/page.tsx index 93e6da6..c582a74 100644 --- a/app/(main)/user/[id]/page.tsx +++ b/app/(main)/user/[id]/page.tsx @@ -5,7 +5,7 @@ import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" import { Badge } from "@/components/ui/badge" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" -import { mockFavorites, mockPlayers, mockPosts, mockShops, mockUsers } from "@/lib/mock-data" +import { mockFavorites, mockPlayers, mockPosts, mockShops, mockUsers } from "@/lib/mock" export default async function UserProfilePage({ params }: { params: Promise<{ id: string }> }) { const { id } = await params diff --git a/app/(order)/chat/[id]/page.tsx b/app/(order)/chat/[id]/page.tsx index 7361bcd..8ffb756 100644 --- a/app/(order)/chat/[id]/page.tsx +++ b/app/(order)/chat/[id]/page.tsx @@ -8,7 +8,7 @@ import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { ScrollArea } from "@/components/ui/scroll-area" -import { mockChatMessages, mockChatSessions } from "@/lib/mock-data" +import { mockChatMessages, mockChatSessions } from "@/lib/mock" import { cn } from "@/lib/utils" import { useAuthStore } from "@/store/auth" diff --git a/app/(order)/chat/page.tsx b/app/(order)/chat/page.tsx index 134c654..5e2c608 100644 --- a/app/(order)/chat/page.tsx +++ b/app/(order)/chat/page.tsx @@ -3,7 +3,7 @@ import Link from "next/link" import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" import { Badge } from "@/components/ui/badge" import { Card, CardContent } from "@/components/ui/card" -import { mockChatSessions } from "@/lib/mock-data" +import { mockChatSessions } from "@/lib/mock" export default function ChatListPage() { return ( diff --git a/app/(order)/dispute/[id]/page.tsx b/app/(order)/dispute/[id]/page.tsx index 30c1d96..ec87c45 100644 --- a/app/(order)/dispute/[id]/page.tsx +++ b/app/(order)/dispute/[id]/page.tsx @@ -11,7 +11,7 @@ import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Label } from "@/components/ui/label" import { Separator } from "@/components/ui/separator" import { Textarea } from "@/components/ui/textarea" -import { mockDisputes, mockOrders } from "@/lib/mock-data" +import { mockDisputes, mockOrders } from "@/lib/mock" const disputeStatusLabels: Record = { open: "已提交", diff --git a/app/(order)/order/[id]/page.tsx b/app/(order)/order/[id]/page.tsx index fdd87fd..f2302fa 100644 --- a/app/(order)/order/[id]/page.tsx +++ b/app/(order)/order/[id]/page.tsx @@ -6,7 +6,7 @@ import { Badge } from "@/components/ui/badge" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Separator } from "@/components/ui/separator" import { statusLabels } from "@/lib/constants" -import { mockChatSessions, mockOrders, mockReviews } from "@/lib/mock-data" +import { mockChatSessions, mockOrders, mockReviews } from "@/lib/mock" import type { OrderStatus } from "@/lib/types" const statusSteps: OrderStatus[] = [ diff --git a/app/(order)/order/new/page.tsx b/app/(order)/order/new/page.tsx index a452b48..6889567 100644 --- a/app/(order)/order/new/page.tsx +++ b/app/(order)/order/new/page.tsx @@ -11,7 +11,7 @@ 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 { mockOrders, mockPlayers, mockServices, walletBalance } from "@/lib/mock-data" +import { mockOrders, mockPlayers, mockServices, walletBalance } from "@/lib/mock" import { useRequireAuth } from "@/lib/use-require-auth" function showFeedback(message: string) { diff --git a/app/(order)/orders/page.tsx b/app/(order)/orders/page.tsx index 668ce9f..58a916b 100644 --- a/app/(order)/orders/page.tsx +++ b/app/(order)/orders/page.tsx @@ -8,7 +8,7 @@ import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { statusLabels } from "@/lib/constants" -import { mockChatSessions, mockOrders } from "@/lib/mock-data" +import { mockChatSessions, mockOrders } from "@/lib/mock" import type { OrderStatus } from "@/lib/types" import { cn } from "@/lib/utils" import { useAuthStore } from "@/store/auth" diff --git a/app/(order)/review/[id]/page.tsx b/app/(order)/review/[id]/page.tsx index 0d25305..5515a9b 100644 --- a/app/(order)/review/[id]/page.tsx +++ b/app/(order)/review/[id]/page.tsx @@ -7,7 +7,7 @@ import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Label } from "@/components/ui/label" import { Textarea } from "@/components/ui/textarea" -import { mockOrders } from "@/lib/mock-data" +import { mockOrders } from "@/lib/mock" export default function ReviewPage({ params }: { params: Promise<{ id: string }> }) { const { id } = use(params) diff --git a/components/header.tsx b/components/header.tsx index cbec558..6ab9a8c 100644 --- a/components/header.tsx +++ b/components/header.tsx @@ -29,7 +29,7 @@ import { } from "@/components/ui/dropdown-menu" import { Input } from "@/components/ui/input" import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from "@/components/ui/sheet" -import { currentUser, mockNotifications, mockShops } from "@/lib/mock-data" +import { currentUser, mockNotifications, mockShops } from "@/lib/mock" import type { UserRole } from "@/lib/types" import { cn } from "@/lib/utils" import { useAuthStore } from "@/store/auth" diff --git a/components/login-dialog.tsx b/components/login-dialog.tsx index 17bc32b..3e48696 100644 --- a/components/login-dialog.tsx +++ b/components/login-dialog.tsx @@ -14,7 +14,7 @@ import { } from "@/components/ui/dialog" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" -import { currentUser } from "@/lib/mock-data" +import { currentUser } from "@/lib/mock" import { useAuthStore } from "@/store/auth" const loginSchema = z.object({ diff --git a/lib/mock-data.ts b/lib/mock-data.ts deleted file mode 100644 index 69725bf..0000000 --- a/lib/mock-data.ts +++ /dev/null @@ -1,736 +0,0 @@ -import type { - ChatMessage, - ChatSession, - Comment, - Dispute, - Favorite, - Game, - Notification, - Order, - Player, - PlayerService, - Post, - Review, - Shop, - User, - WalletTransaction, -} from "./types" - -export const mockUsers: User[] = [ - { - id: "u1", - username: "xm_2003", - nickname: "小明", - avatar: "/avatars/u1.jpg", - role: "consumer", - phone: "138****1234", - bio: "工作日打两三把,周末偶尔通宵", - createdAt: "2025-01-15", - }, - { - id: "u2", - username: "LDShen666", - nickname: "老李", - avatar: "/avatars/u2.jpg", - role: "player", - phone: "139****5678", - bio: "晚上在线多,逆风不摆,能语音更快", - createdAt: "2024-11-20", - }, - { - id: "u3", - username: "wangzai77", - nickname: "王哥", - avatar: "/avatars/u3.jpg", - role: "owner", - phone: "137****9012", - bio: "店里就三个人,忙的时候回消息会慢点", - createdAt: "2024-08-10", - }, - { - id: "u4", - username: "Achen9k", - nickname: "阿辰", - avatar: "/avatars/u4.jpg", - role: "player", - bio: "主狙和突破都打,报点直给", - createdAt: "2025-02-01", - }, - { - id: "u5", - username: "甜甜酱w", - nickname: "甜甜酱", - avatar: "/avatars/u5.jpg", - role: "player", - bio: "主辅+原神日常,社恐,但会认真打", - createdAt: "2025-01-05", - }, -] - -export const mockGames: Game[] = [ - { id: "g1", name: "英雄联盟", icon: "Swords", category: "MOBA" }, - { id: "g2", name: "王者荣耀", icon: "Crown", category: "MOBA" }, - { id: "g3", name: "CS2", icon: "Crosshair", category: "FPS" }, - { id: "g4", name: "永劫无间", icon: "Flame", category: "动作" }, - { id: "g5", name: "原神", icon: "Sparkles", category: "RPG" }, - { id: "g6", name: "和平精英", icon: "Target", category: "FPS" }, - { id: "g7", name: "DOTA2", icon: "Shield", category: "MOBA" }, - { id: "g8", name: "无畏契约", icon: "Bomb", category: "FPS" }, -] - -export const mockServices: PlayerService[] = [ - { - id: "s1", - playerId: "u2", - gameId: "g1", - gameName: "英雄联盟", - title: "LOL双排稳一点上分", - description: "主打野/中,前两把先磨合。逆风会讲思路,不闷着。", - price: 33, - unit: "局", - rankRange: "铂金-大师", - availability: ["周一至周五 20:00-01:00", "周末 14:00-02:00"], - }, - { - id: "s2", - playerId: "u2", - gameId: "g2", - gameName: "王者荣耀", - title: "王者补位冲星", - description: "连跪想止损就来,射手辅助都能补。冲几星先说,我按你节奏来。", - price: 27, - unit: "星", - rankRange: "星耀-王者80星", - availability: ["每天 18:30-00:30"], - }, - { - id: "s3", - playerId: "u4", - gameId: "g3", - gameName: "CS2", - title: "CS2车队位", - description: "语音里先报点,残局我来喊。不开喷,失误就下一把拉回来。", - price: 57, - unit: "局", - rankRange: "白银-超凡", - availability: ["每天 15:00-01:00"], - }, - { - id: "s4", - playerId: "u5", - gameId: "g1", - gameName: "英雄联盟", - title: "LOL轻松双排", - description: "主辅位,偏保人打法。想聊天就聊,不想说话也行。", - price: 22, - unit: "局", - availability: ["周末 11:00-23:30"], - }, - { - id: "s5", - playerId: "u5", - gameId: "g5", - gameName: "原神", - title: "原神日常清体力", - description: "每日委托、树脂、活动本都能清。做完发截图,不乱动你号。", - price: 19, - unit: "次", - availability: ["工作日 21:00-24:00", "周末白天可加急"], - }, -] - -export const mockPlayers: Player[] = [ - { - id: "u2", - user: mockUsers[1], - rating: 4.5, - totalOrders: 83, - completionRate: 0.93, - status: "available", - games: ["英雄联盟", "王者荣耀"], - services: mockServices.filter((s) => s.playerId === "u2"), - shopId: "shop1", - shopName: "王者电竞工作室", - tags: ["补位稳", "会复盘", "麦克风在线"], - }, - { - id: "u4", - user: mockUsers[3], - rating: 4.8, - totalOrders: 47, - completionRate: 0.96, - status: "busy", - games: ["CS2", "无畏契约"], - services: mockServices.filter((s) => s.playerId === "u4"), - tags: ["报点快", "节奏凶", "不压力队友"], - }, - { - id: "u5", - user: mockUsers[4], - rating: 3.9, - totalOrders: 21, - completionRate: 0.86, - status: "available", - games: ["英雄联盟", "原神"], - services: mockServices.filter((s) => s.playerId === "u5"), - shopId: "shop1", - shopName: "王者电竞工作室", - tags: ["主辅", "不抢话", "原神日常"], - }, -] - -export const mockShops: Shop[] = [ - { - id: "shop1", - owner: mockUsers[2], - name: "王者电竞工作室", - banner: "/banners/shop1.jpg", - description: "晚上在线的人多一点,接单前会先问清楚你想怎么打。", - rating: 4.4, - totalOrders: 68, - playerCount: 7, - commissionType: "percentage", - commissionValue: 15, - allowMultiShop: false, - allowIndependentOrders: true, - dispatchMode: "manual", - announcements: ["晚上9点后单子多,等位可能会慢", "这周加了原神日常代清,截图回传"], - templateConfig: { - sections: [ - { type: "banner", enabled: true, order: 0 }, - { type: "intro", enabled: true, order: 1 }, - { type: "announcements", enabled: true, order: 2 }, - { type: "services", enabled: true, order: 3 }, - { type: "players", enabled: true, order: 4 }, - { type: "reviews", enabled: true, order: 5 }, - ], - }, - }, -] - -export const mockOrders: Order[] = [ - { - id: "ord1", - consumerId: "u1", - consumerName: "小明", - playerId: "u2", - playerName: "老李", - shopId: "shop1", - shopName: "王者电竞工作室", - service: mockServices[0], - status: "pending_review", - totalPrice: 99, - note: "今晚冲三把,输了也别急", - createdAt: "2025-02-18T14:30:00", - acceptedAt: "2025-02-18T14:35:00", - closedAt: "2025-02-18T23:48:00", - completedAt: "2025-02-18T23:50:00", - }, - { - id: "ord2", - consumerId: "u1", - consumerName: "小明", - playerId: "u4", - playerName: "阿辰", - service: mockServices[2], - status: "completed", - totalPrice: 116, - createdAt: "2025-02-15T10:00:00", - acceptedAt: "2025-02-15T10:05:00", - closedAt: "2025-02-15T12:30:00", - completedAt: "2025-02-15T12:35:00", - }, - { - id: "ord3", - consumerId: "u1", - consumerName: "小明", - playerId: "u5", - playerName: "甜甜酱", - shopId: "shop1", - shopName: "王者电竞工作室", - service: mockServices[3], - status: "pending_accept", - totalPrice: 69, - note: "只想放松玩,不冲分", - createdAt: "2025-02-19T20:00:00", - }, - { - id: "ord4", - consumerId: "u1", - consumerName: "小明", - playerId: "u2", - playerName: "老李", - shopId: "shop1", - shopName: "王者电竞工作室", - service: mockServices[1], - status: "disputed", - totalPrice: 87, - createdAt: "2025-02-10T16:00:00", - acceptedAt: "2025-02-10T16:10:00", - }, - { - id: "ord5", - consumerId: "u1", - consumerName: "小明", - playerId: "u2", - playerName: "老李", - shopId: "shop1", - shopName: "王者电竞工作室", - service: mockServices[1], - status: "completed", - totalPrice: 54, - note: "补两星就收工", - createdAt: "2025-02-08T21:10:00", - acceptedAt: "2025-02-08T21:15:00", - closedAt: "2025-02-08T22:20:00", - completedAt: "2025-02-08T22:25:00", - }, - { - id: "ord6", - consumerId: "u1", - consumerName: "小明", - playerId: "u5", - playerName: "甜甜酱", - shopId: "shop1", - shopName: "王者电竞工作室", - service: mockServices[4], - status: "completed", - totalPrice: 38, - note: "帮我清两天日常", - createdAt: "2025-02-06T19:40:00", - acceptedAt: "2025-02-06T19:45:00", - closedAt: "2025-02-06T20:25:00", - completedAt: "2025-02-06T20:28:00", - }, - { - id: "ord7", - consumerId: "u1", - consumerName: "小明", - playerId: "u4", - playerName: "阿辰", - service: mockServices[2], - status: "completed", - totalPrice: 57, - createdAt: "2025-02-03T23:10:00", - acceptedAt: "2025-02-03T23:12:00", - closedAt: "2025-02-04T00:05:00", - completedAt: "2025-02-04T00:08:00", - }, -] - -export const mockReviews: Review[] = [ - { - id: "r1", - orderId: "ord2", - fromUserId: "u1", - fromUserName: "小明", - fromUserAvatar: "/avatars/u1.jpg", - toUserId: "u4", - rating: 5, - content: "报点很快,架枪位也会提前说。中间崩了一把,后面拉回来了。", - sealed: false, - createdAt: "2025-02-15T13:00:00", - }, - { - id: "r2", - orderId: "ord2", - fromUserId: "u4", - fromUserName: "阿辰", - fromUserAvatar: "/avatars/u4.jpg", - toUserId: "u1", - rating: 4, - content: "人挺好沟通,听指令,不会乱冲。", - sealed: false, - createdAt: "2025-02-15T13:30:00", - }, - { - id: "r3", - orderId: "ord1", - fromUserId: "u1", - fromUserName: "小明", - fromUserAvatar: "/avatars/u1.jpg", - toUserId: "u2", - rating: 4, - content: "整体可以,第二把他家里来电话断了几分钟,后面补回来了。", - sealed: true, - createdAt: "2025-02-19T00:05:00", - }, - { - id: "r4", - orderId: "ord5", - fromUserId: "u1", - fromUserName: "小明", - fromUserAvatar: "/avatars/u1.jpg", - toUserId: "u2", - rating: 5, - content: "补位确实稳。最后一把逆风翻了,爽。", - sealed: false, - createdAt: "2025-02-08T22:40:00", - }, - { - id: "r5", - orderId: "ord5", - fromUserId: "u2", - fromUserName: "老李", - fromUserAvatar: "/avatars/u2.jpg", - toUserId: "u1", - rating: 4, - content: "配合OK,心态稳,输一局也没甩锅。", - sealed: false, - createdAt: "2025-02-08T22:45:00", - }, - { - id: "r6", - orderId: "ord6", - fromUserId: "u1", - fromUserName: "小明", - fromUserAvatar: "/avatars/u1.jpg", - toUserId: "u5", - rating: 3, - content: "日常都做了,就是比我想的晚半小时。", - sealed: false, - createdAt: "2025-02-06T20:40:00", - }, - { - id: "r7", - orderId: "ord6", - fromUserId: "u5", - fromUserName: "甜甜酱", - fromUserAvatar: "/avatars/u5.jpg", - toUserId: "u1", - rating: 4, - content: "需求给得清楚,省事。", - sealed: false, - createdAt: "2025-02-06T20:46:00", - }, - { - id: "r8", - orderId: "ord7", - fromUserId: "u1", - fromUserName: "小明", - fromUserAvatar: "/avatars/u1.jpg", - toUserId: "u4", - rating: 5, - content: "节奏飞快,枪很硬。就是我跟得有点累哈哈。", - sealed: false, - createdAt: "2025-02-04T00:20:00", - }, - { - id: "r9", - orderId: "ord7", - fromUserId: "u4", - fromUserName: "阿辰", - fromUserAvatar: "/avatars/u4.jpg", - toUserId: "u1", - rating: 5, - content: "上手快,喊点就能到。", - sealed: false, - createdAt: "2025-02-04T00:25:00", - }, -] - -export const mockDisputes: Dispute[] = [ - { - id: "d1", - orderId: "ord4", - initiatorId: "u1", - initiatorName: "小明", - reason: "中途掉线后一直没回来,约好的上星数量没打完。", - evidence: ["/evidence/d1-1.jpg", "/evidence/d1-2.jpg"], - status: "reviewing", - createdAt: "2025-02-12T10:00:00", - }, -] - -export const mockChatSessions: ChatSession[] = [ - { - id: "chat1", - type: "order", - orderId: "ord1", - participants: [ - { id: "u1", name: "小明", avatar: "/avatars/u1.jpg" }, - { id: "u2", name: "老李", avatar: "/avatars/u2.jpg" }, - ], - lastMessage: "行,20:00开", - lastMessageAt: "2025-02-18T18:30:00", - unreadCount: 2, - readonly: false, - }, - { - id: "chat2", - type: "consultation", - participants: [ - { id: "u1", name: "小明", avatar: "/avatars/u1.jpg" }, - { id: "u5", name: "甜甜酱", avatar: "/avatars/u5.jpg" }, - ], - lastMessage: "周末还能接吗", - lastMessageAt: "2025-02-19T15:00:00", - unreadCount: 0, - readonly: false, - }, - { - id: "chat3", - type: "order", - orderId: "ord2", - participants: [ - { id: "u1", name: "小明", avatar: "/avatars/u1.jpg" }, - { id: "u4", name: "阿辰", avatar: "/avatars/u4.jpg" }, - ], - lastMessage: "下次再组", - lastMessageAt: "2025-02-15T12:30:00", - unreadCount: 0, - readonly: true, - }, -] - -export const mockChatMessages: ChatMessage[] = [ - { - id: "msg1", - sessionId: "chat1", - senderId: "u1", - senderName: "小明", - senderAvatar: "/avatars/u1.jpg", - type: "system", - content: "订单创建成功", - createdAt: "2025-02-18T14:35:00", - }, - { - id: "msg2", - sessionId: "chat1", - senderId: "u2", - senderName: "老李", - senderAvatar: "/avatars/u2.jpg", - type: "text", - content: "在,能打。你想几把?", - createdAt: "2025-02-18T14:36:00", - }, - { - id: "msg3", - sessionId: "chat1", - senderId: "u1", - senderName: "小明", - senderAvatar: "/avatars/u1.jpg", - type: "text", - content: "8点开行不", - createdAt: "2025-02-18T18:30:00", - }, - { - id: "msg4", - sessionId: "chat1", - senderId: "u2", - senderName: "老李", - senderAvatar: "/avatars/u2.jpg", - type: "text", - content: "行,到点我拉你", - createdAt: "2025-02-18T18:32:00", - }, -] - -export const mockPosts: Post[] = [ - { - id: "p1", - author: mockUsers[0], - authorRole: "consumer", - title: "CS2上分体验分享", - content: "昨晚跟阿辰打了三把,前两把顺,第三把差点翻车。总体值这个价。", - images: ["/posts/p1-1.jpg"], - tags: ["CS2", "上分", "好评"], - linkedOrderId: "ord2", - likeCount: 42, - commentCount: 8, - liked: false, - pinned: false, - createdAt: "2025-02-16T10:00:00", - }, - { - id: "p2", - author: mockUsers[1], - authorRole: "player", - title: "新赛季英雄联盟上分攻略", - content: "新赛季改动有点多,先别急着硬冲分。前10分钟别乱接团,先稳住发育。", - images: [], - tags: ["英雄联盟", "攻略", "新赛季"], - likeCount: 128, - commentCount: 35, - liked: true, - pinned: true, - createdAt: "2025-02-14T08:00:00", - }, - { - id: "p3", - author: mockUsers[4], - authorRole: "player", - title: "原神4.5版本日常代肝服务上线", - content: "新活动有点肝,没空的话我可以帮清日常,做完发截图。", - images: ["/posts/p3-1.jpg", "/posts/p3-2.jpg"], - tags: ["原神", "代肝", "新版本"], - likeCount: 67, - commentCount: 12, - liked: false, - pinned: false, - createdAt: "2025-02-17T14:00:00", - }, -] - -export const mockComments: Comment[] = [ - { - id: "c1", - postId: "p1", - author: mockUsers[3], - content: "收到,下次继续组", - likeCount: 15, - liked: false, - createdAt: "2025-02-16T11:00:00", - }, - { - id: "c2", - postId: "p1", - author: mockUsers[4], - content: "他枪法确实硬,不过脾气也直哈哈", - likeCount: 8, - liked: false, - createdAt: "2025-02-16T12:00:00", - }, - { - id: "c3", - postId: "p2", - author: mockUsers[0], - content: "我照着打了两把,确实有用", - likeCount: 5, - liked: true, - createdAt: "2025-02-14T10:00:00", - }, -] - -export const mockNotifications: Notification[] = [ - { - id: "n1", - type: "order", - title: "订单已接单", - content: "老李接单了,去聊天里约时间就行", - read: false, - link: "/order/ord1", - createdAt: "2025-02-18T14:35:00", - }, - { - id: "n2", - type: "order", - title: "争议处理中", - content: "你提交的订单争议已进入审核", - read: true, - link: "/dispute/ord4", - createdAt: "2025-02-12T10:05:00", - }, - { - id: "n3", - type: "community", - title: "帖子获得点赞", - content: "你的帖子「CS2上分体验分享」又多了42个赞", - read: false, - link: "/post/p1", - createdAt: "2025-02-17T20:00:00", - }, - { - id: "n4", - type: "system", - title: "平台公告", - content: "春节活动 2 月 3 日上线,活动页明天开放。", - read: true, - createdAt: "2025-02-01T00:00:00", - }, - { - id: "n5", - type: "community", - title: "新评论", - content: "阿辰评论了你的帖子", - read: false, - link: "/post/p1", - createdAt: "2025-02-16T11:00:00", - }, -] - -export const mockTransactions: WalletTransaction[] = [ - { - id: "t1", - type: "topup", - amount: 500, - description: "充值", - createdAt: "2025-02-10T10:00:00", - }, - { - id: "t2", - type: "payment", - amount: -116, - description: "支付订单 ord2", - createdAt: "2025-02-15T10:00:00", - }, - { - id: "t3", - type: "payment", - amount: -99, - description: "支付订单 ord1", - createdAt: "2025-02-18T14:30:00", - }, - { - id: "t4", - type: "topup", - amount: 200, - description: "充值", - createdAt: "2025-02-19T09:00:00", - }, - { - id: "t5", - type: "payment", - amount: -69, - description: "支付订单 ord3", - createdAt: "2025-02-19T20:00:00", - }, - { - id: "t6", - type: "payment", - amount: -87, - description: "支付订单 ord4", - createdAt: "2025-02-10T16:00:00", - }, - { - id: "t7", - type: "payment", - amount: -54, - description: "支付订单 ord5", - createdAt: "2025-02-08T21:10:00", - }, - { - id: "t8", - type: "payment", - amount: -38, - description: "支付订单 ord6", - createdAt: "2025-02-06T19:40:00", - }, - { - id: "t9", - type: "payment", - amount: -57, - description: "支付订单 ord7", - createdAt: "2025-02-03T23:10:00", - }, -] - -export const currentUser = mockUsers[0] -export const walletBalance = 180 - -export const mockFavorites: Favorite[] = [ - { - id: "fav1", - userId: "u1", - targetType: "player", - targetId: "u2", - createdAt: "2025-02-16T10:00:00", - }, - { - id: "fav2", - userId: "u1", - targetType: "shop", - targetId: "shop1", - createdAt: "2025-02-17T14:00:00", - }, -] diff --git a/lib/mock/chat.ts b/lib/mock/chat.ts new file mode 100644 index 0000000..e35c20c --- /dev/null +++ b/lib/mock/chat.ts @@ -0,0 +1,256 @@ +import type { ChatMessage, ChatSession } from "../types" + +export const mockChatSessions: ChatSession[] = [ + { + id: "chat1", + type: "order", + orderId: "ord10", + participants: [ + { id: "u2", name: "玲玲", avatar: "/avatars/u2.jpg" }, + { id: "u7", name: "琪琪", avatar: "/avatars/u2.jpg" }, + ], + lastMessage: "好的那我先上号等你", + lastMessageAt: "2025-02-06T19:15:00Z", + unreadCount: 1, + readonly: false, + }, + { + id: "chat2", + type: "order", + orderId: "ord11", + participants: [ + { id: "u3", name: "zz", avatar: "/avatars/u3.jpg" }, + { id: "u9", name: "飞飞", avatar: "/avatars/u4.jpg" }, + ], + lastMessage: "走走走开一把", + lastMessageAt: "2025-02-08T21:10:00Z", + unreadCount: 0, + readonly: false, + }, + { + id: "chat3", + type: "order", + orderId: "ord1", + participants: [ + { id: "u2", name: "玲玲", avatar: "/avatars/u2.jpg" }, + { id: "u5", name: "俊俊", avatar: "/avatars/u5.jpg" }, + ], + lastMessage: "好的辛苦了", + lastMessageAt: "2025-01-05T22:15:00Z", + unreadCount: 0, + readonly: true, + }, + { + id: "chat4", + type: "consultation", + participants: [ + { id: "u1", name: "小陈", avatar: "/avatars/u1.jpg" }, + { id: "u7", name: "琪琪", avatar: "/avatars/u2.jpg" }, + ], + lastMessage: "周末能接单吗", + lastMessageAt: "2025-02-09T15:00:00Z", + unreadCount: 0, + readonly: false, + }, + { + id: "chat5", + type: "order", + orderId: "ord2", + participants: [ + { id: "u1", name: "小陈", avatar: "/avatars/u1.jpg" }, + { id: "u6", name: "Winter", avatar: "/avatars/u1.jpg" }, + ], + lastMessage: "下次再组", + lastMessageAt: "2025-01-08T17:45:00Z", + unreadCount: 0, + readonly: true, + }, + { + id: "chat6", + type: "consultation", + participants: [ + { id: "u4", name: "莫莫", avatar: "/avatars/u4.jpg" }, + { id: "u8", name: "暗影", avatar: "/avatars/u3.jpg" }, + ], + lastMessage: "你CS2什么段位", + lastMessageAt: "2025-02-10T20:30:00Z", + unreadCount: 2, + readonly: false, + }, + { + id: "chat7", + type: "order", + orderId: "ord5", + participants: [ + { id: "u1", name: "小陈", avatar: "/avatars/u1.jpg" }, + { id: "u9", name: "飞飞", avatar: "/avatars/u4.jpg" }, + ], + lastMessage: "打得不错 下次还找你", + lastMessageAt: "2025-01-17T23:10:00Z", + unreadCount: 0, + readonly: true, + }, +] + +export const mockChatMessages: ChatMessage[] = [ + { + id: "msg1", + sessionId: "chat1", + senderId: "system", + senderName: "系统", + senderAvatar: "", + type: "system", + content: "订单已创建,请协商游戏时间", + createdAt: "2025-02-06T19:00:00Z", + }, + { + id: "msg2", + sessionId: "chat1", + senderId: "u7", + senderName: "琪琪", + senderAvatar: "/avatars/u2.jpg", + type: "text", + content: "在的,你现在能打吗", + createdAt: "2025-02-06T19:02:00Z", + }, + { + id: "msg3", + sessionId: "chat1", + senderId: "u2", + senderName: "玲玲", + senderAvatar: "/avatars/u2.jpg", + type: "text", + content: "可以 我先上号", + createdAt: "2025-02-06T19:05:00Z", + }, + { + id: "msg4", + sessionId: "chat1", + senderId: "u7", + senderName: "琪琪", + senderAvatar: "/avatars/u2.jpg", + type: "text", + content: "你ID多少 我加你", + createdAt: "2025-02-06T19:08:00Z", + }, + { + id: "msg5", + sessionId: "chat1", + senderId: "u2", + senderName: "玲玲", + senderAvatar: "/avatars/u2.jpg", + type: "text", + content: "玲玲不会输,区服是微信区", + createdAt: "2025-02-06T19:10:00Z", + }, + { + id: "msg6", + sessionId: "chat1", + senderId: "u7", + senderName: "琪琪", + senderAvatar: "/avatars/u2.jpg", + type: "text", + content: "好 加了 你通过一下", + createdAt: "2025-02-06T19:12:00Z", + }, + { + id: "msg7", + sessionId: "chat1", + senderId: "u2", + senderName: "玲玲", + senderAvatar: "/avatars/u2.jpg", + type: "text", + content: "好的那我先上号等你", + createdAt: "2025-02-06T19:15:00Z", + }, + { + id: "msg8", + sessionId: "chat2", + senderId: "system", + senderName: "系统", + senderAvatar: "", + type: "system", + content: "订单已创建", + createdAt: "2025-02-08T21:00:00Z", + }, + { + id: "msg9", + sessionId: "chat2", + senderId: "u9", + senderName: "飞飞", + senderAvatar: "/avatars/u4.jpg", + type: "text", + content: "来了 你steam名字是啥", + createdAt: "2025-02-08T21:06:00Z", + }, + { + id: "msg10", + sessionId: "chat2", + senderId: "u3", + senderName: "zz", + senderAvatar: "/avatars/u3.jpg", + type: "text", + content: "zz_noob 别笑", + createdAt: "2025-02-08T21:07:00Z", + }, + { + id: "msg11", + sessionId: "chat2", + senderId: "u9", + senderName: "飞飞", + senderAvatar: "/avatars/u4.jpg", + type: "text", + content: "哈哈没事 加了", + createdAt: "2025-02-08T21:08:00Z", + }, + { + id: "msg12", + sessionId: "chat2", + senderId: "u3", + senderName: "zz", + senderAvatar: "/avatars/u3.jpg", + type: "text", + content: "走走走开一把", + createdAt: "2025-02-08T21:10:00Z", + }, + { + id: "msg13", + sessionId: "chat4", + senderId: "u1", + senderName: "小陈", + senderAvatar: "/avatars/u1.jpg", + type: "text", + content: "你好 想问下你周末能接王者的单吗", + createdAt: "2025-02-09T14:55:00Z", + }, + { + id: "msg14", + sessionId: "chat4", + senderId: "u7", + senderName: "琪琪", + senderAvatar: "/avatars/u2.jpg", + type: "text", + content: "可以的 周末全天都在 你直接下单就行", + createdAt: "2025-02-09T14:58:00Z", + }, + { + id: "msg15", + sessionId: "chat4", + senderId: "u1", + senderName: "小陈", + senderAvatar: "/avatars/u1.jpg", + type: "text", + content: "周末能接单吗", + createdAt: "2025-02-09T15:00:00Z", + }, + { + id: "msg16", + sessionId: "chat6", + senderId: "u4", + senderName: "莫莫", + senderAvatar: "/avatars/u4.jpg", + type: "text", + content: "你CS2什么段位", + createdAt: "2025-02-10T20:30:00Z", + }, +] diff --git a/lib/mock/comments.ts b/lib/mock/comments.ts new file mode 100644 index 0000000..95cc577 --- /dev/null +++ b/lib/mock/comments.ts @@ -0,0 +1,158 @@ +import type { Comment } from "../types" +import { mockUsers } from "./users" + +export const mockComments: Comment[] = [ + { + id: "c1", + postId: "p1", + author: mockUsers[4], + content: "谢谢老板 下次还可以组", + likeCount: 12, + liked: false, + createdAt: "2025-01-02T11:00:00Z", + }, + { + id: "c2", + postId: "p1", + author: mockUsers[2], + content: "这个活动力度可以 我去看看", + likeCount: 5, + liked: false, + createdAt: "2025-01-02T12:30:00Z", + }, + { + id: "c3", + postId: "p2", + author: mockUsers[4], + content: "收到好评 下次继续", + likeCount: 8, + liked: false, + createdAt: "2025-01-06T10:00:00Z", + }, + { + id: "c4", + postId: "p2", + author: mockUsers[3], + content: "俊俊确实稳 我也找过他", + likeCount: 6, + liked: true, + createdAt: "2025-01-06T11:30:00Z", + }, + { + id: "c5", + postId: "p3", + author: mockUsers[0], + content: "第三点说得对 之前就是自己乱搞输的", + likeCount: 15, + liked: false, + createdAt: "2025-01-11T08:00:00Z", + }, + { + id: "c6", + postId: "p3", + author: mockUsers[1], + content: "学到了 下次试试", + likeCount: 3, + liked: false, + createdAt: "2025-01-11T09:20:00Z", + }, + { + id: "c7", + postId: "p3", + author: mockUsers[5], + content: "补充一下 打野来gank的时候别退 跟着打就行", + likeCount: 22, + liked: true, + createdAt: "2025-01-11T10:45:00Z", + }, + { + id: "c8", + postId: "p4", + author: mockUsers[6], + content: "确实有些人态度不行 但大部分还是靠谱的", + likeCount: 18, + liked: false, + createdAt: "2025-01-14T00:10:00Z", + }, + { + id: "c9", + postId: "p4", + author: mockUsers[9], + content: "我们店里不会这样 有问题随时找我", + likeCount: 7, + liked: false, + createdAt: "2025-01-14T08:00:00Z", + }, + { + id: "c10", + postId: "p5", + author: mockUsers[0], + content: "Winter确实不催人 这点很舒服", + likeCount: 4, + liked: false, + createdAt: "2025-01-09T19:00:00Z", + }, + { + id: "c11", + postId: "p6", + author: mockUsers[3], + content: "决赛圈那段说得好 我每次都死在跑圈", + likeCount: 11, + liked: false, + createdAt: "2025-01-18T16:30:00Z", + }, + { + id: "c12", + postId: "p6", + author: mockUsers[0], + content: "稳健打法确实适合新手 我试了几把有效果", + likeCount: 8, + liked: true, + createdAt: "2025-01-19T10:00:00Z", + }, + { + id: "c13", + postId: "p7", + author: mockUsers[6], + content: "谢谢认可!下次还可以组", + likeCount: 14, + liked: false, + createdAt: "2025-01-15T22:00:00Z", + }, + { + id: "c14", + postId: "p7", + author: mockUsers[1], + content: "女打手这么猛的吗 我也想试试", + likeCount: 9, + liked: false, + createdAt: "2025-01-16T08:30:00Z", + }, + { + id: "c15", + postId: "p8", + author: mockUsers[8], + content: "我可以 私聊了", + likeCount: 2, + liked: false, + createdAt: "2025-01-22T12:00:00Z", + }, + { + id: "c16", + postId: "p9", + author: mockUsers[8], + content: "谢谢老板好评 准时上线是基本的", + likeCount: 6, + liked: false, + createdAt: "2025-01-19T00:10:00Z", + }, + { + id: "c17", + postId: "p10", + author: mockUsers[7], + content: "谢谢推荐", + likeCount: 3, + liked: false, + createdAt: "2025-01-14T11:00:00Z", + }, +] diff --git a/lib/mock/disputes.ts b/lib/mock/disputes.ts new file mode 100644 index 0000000..4519852 --- /dev/null +++ b/lib/mock/disputes.ts @@ -0,0 +1,25 @@ +import type { Dispute } from "../types" + +export const mockDisputes: Dispute[] = [ + { + id: "d1", + orderId: "ord14", + initiatorId: "u3", + initiatorName: "zz", + reason: "打了两局DOTA,第二局中途说有事直接退了,等了半小时没回来。约好的两局只打了一局半。", + evidence: ["/evidence/d1-1.jpg", "/evidence/d1-2.jpg"], + status: "reviewing", + createdAt: "2025-02-15T10:00:00Z", + }, + { + id: "d2", + orderId: "ord10", + initiatorId: "u7", + initiatorName: "琪琪", + reason: "对方下单后一直不上线,约了三次时间都放鸽子,已经拖了两天了。", + evidence: ["/evidence/d2-1.jpg"], + status: "resolved", + result: "partial_refund", + createdAt: "2025-02-08T12:00:00Z", + }, +] diff --git a/lib/mock/favorites.ts b/lib/mock/favorites.ts new file mode 100644 index 0000000..c8a7787 --- /dev/null +++ b/lib/mock/favorites.ts @@ -0,0 +1,74 @@ +import type { Favorite } from "../types" + +export const mockFavorites: Favorite[] = [ + { + id: "fav1", + userId: "u1", + targetType: "player", + targetId: "u5", + createdAt: "2025-01-06T10:30:00Z", + }, + { + id: "fav2", + userId: "u1", + targetType: "shop", + targetId: "shop1", + createdAt: "2025-01-10T14:00:00Z", + }, + { + id: "fav3", + userId: "u1", + targetType: "player", + targetId: "u7", + createdAt: "2025-01-16T20:00:00Z", + }, + { + id: "fav4", + userId: "u2", + targetType: "player", + targetId: "u6", + createdAt: "2025-01-09T18:00:00Z", + }, + { + id: "fav5", + userId: "u2", + targetType: "shop", + targetId: "shop2", + createdAt: "2025-01-12T09:00:00Z", + }, + { + id: "fav6", + userId: "u3", + targetType: "player", + targetId: "u8", + createdAt: "2025-01-12T01:00:00Z", + }, + { + id: "fav7", + userId: "u4", + targetType: "player", + targetId: "u7", + createdAt: "2025-01-15T22:30:00Z", + }, + { + id: "fav8", + userId: "u4", + targetType: "shop", + targetId: "shop1", + createdAt: "2025-01-20T11:00:00Z", + }, + { + id: "fav9", + userId: "u1", + targetType: "player", + targetId: "u9", + createdAt: "2025-01-18T23:30:00Z", + }, + { + id: "fav10", + userId: "u3", + targetType: "shop", + targetId: "shop3", + createdAt: "2025-02-09T15:00:00Z", + }, +] diff --git a/lib/mock/games.ts b/lib/mock/games.ts new file mode 100644 index 0000000..9497192 --- /dev/null +++ b/lib/mock/games.ts @@ -0,0 +1,16 @@ +import type { Game } from "../types" + +export const mockGames: Game[] = [ + { id: "g1", name: "英雄联盟", icon: "Swords", category: "MOBA" }, + { id: "g2", name: "王者荣耀", icon: "Crown", category: "MOBA" }, + { id: "g3", name: "CS2", icon: "Crosshair", category: "FPS" }, + { id: "g4", name: "永劫无间", icon: "Sword", category: "动作" }, + { id: "g5", name: "原神", icon: "Sparkles", category: "RPG" }, + { id: "g6", name: "和平精英", icon: "Target", category: "FPS" }, + { id: "g7", name: "DOTA2", icon: "Shield", category: "MOBA" }, + { id: "g8", name: "无畏契约", icon: "Zap", category: "FPS" }, + { id: "g9", name: "绝区零", icon: "Flame", category: "动作" }, + { id: "g10", name: "崩坏:星穹铁道", icon: "Star", category: "RPG" }, + { id: "g11", name: "第五人格", icon: "Ghost", category: "动作" }, + { id: "g12", name: "三角洲行动", icon: "Radar", category: "FPS" }, +] diff --git a/lib/mock/index.ts b/lib/mock/index.ts new file mode 100644 index 0000000..4c59281 --- /dev/null +++ b/lib/mock/index.ts @@ -0,0 +1,14 @@ +export { mockChatMessages, mockChatSessions } from "./chat" +export { mockComments } from "./comments" +export { mockDisputes } from "./disputes" +export { mockFavorites } from "./favorites" +export { mockGames } from "./games" +export { mockNotifications } from "./notifications" +export { mockOrders } from "./orders" +export { mockPlayers } from "./players" +export { mockPosts } from "./posts" +export { mockReviews } from "./reviews" +export { mockServices } from "./services" +export { mockShops } from "./shops" +export { mockTransactions, walletBalance } from "./transactions" +export { currentUser, mockUsers } from "./users" diff --git a/lib/mock/notifications.ts b/lib/mock/notifications.ts new file mode 100644 index 0000000..3afa270 --- /dev/null +++ b/lib/mock/notifications.ts @@ -0,0 +1,109 @@ +import type { Notification } from "../types" + +export const mockNotifications: Notification[] = [ + { + id: "n1", + type: "order", + title: "订单已接单", + content: "琪琪接了你的王者荣耀订单,去聊天约时间吧", + read: false, + link: "/order/ord10", + createdAt: "2025-02-06T19:08:00Z", + }, + { + id: "n2", + type: "order", + title: "订单已完成", + content: "你和俊俊的LOL订单已完成,快去评价吧", + read: false, + link: "/order/ord1", + createdAt: "2025-01-05T22:25:00Z", + }, + { + id: "n3", + type: "order", + title: "争议处理中", + content: "你提交的订单争议已进入审核,请耐心等待", + read: true, + link: "/dispute/ord14", + createdAt: "2025-02-15T10:05:00Z", + }, + { + id: "n4", + type: "community", + title: "帖子获得点赞", + content: "你的帖子「找了个LOL陪玩 三把全赢了」又多了87个赞", + read: false, + link: "/post/p1", + createdAt: "2025-01-08T20:00:00Z", + }, + { + id: "n5", + type: "community", + title: "新评论", + content: "俊俊评论了你的帖子", + read: false, + link: "/post/p2", + createdAt: "2025-01-06T10:00:00Z", + }, + { + id: "n6", + type: "system", + title: "平台公告", + content: "春节活动上线,2月1日至2月15日全场服务享9折优惠", + read: true, + createdAt: "2025-01-28T00:00:00Z", + }, + { + id: "n7", + type: "order", + title: "新订单待接单", + content: "莫莫下了一个原神深渊代打的单,快去看看", + read: false, + link: "/order/ord12", + createdAt: "2025-02-10T20:00:00Z", + }, + { + id: "n8", + type: "community", + title: "帖子被引用", + content: "zz引用了你的帖子「吐槽一下,有些打手真的不行」", + read: true, + link: "/post/p10", + createdAt: "2025-01-14T10:05:00Z", + }, + { + id: "n9", + type: "system", + title: "认证通过", + content: "你的打手认证已通过,现在可以发布服务了", + read: true, + createdAt: "2024-12-20T09:00:00Z", + }, + { + id: "n10", + type: "order", + title: "订单已取消", + content: "玲玲取消了CS2车队位的订单", + read: true, + link: "/order/ord15", + createdAt: "2025-02-16T18:05:00Z", + }, + { + id: "n11", + type: "community", + title: "新评论", + content: "Winter评论了你的帖子「LOL双排接单攻略」", + read: false, + link: "/post/p3", + createdAt: "2025-01-11T10:45:00Z", + }, + { + id: "n12", + type: "system", + title: "系统维护通知", + content: "2月20日凌晨2:00-4:00进行系统维护,届时无法下单", + read: false, + createdAt: "2025-02-18T12:00:00Z", + }, +] diff --git a/lib/mock/orders.ts b/lib/mock/orders.ts new file mode 100644 index 0000000..acbb5ef --- /dev/null +++ b/lib/mock/orders.ts @@ -0,0 +1,235 @@ +import type { Order } from "../types" +import { mockServices } from "./services" + +export const mockOrders: Order[] = [ + { + id: "ord1", + consumerId: "u2", + consumerName: "玲玲", + playerId: "u5", + playerName: "俊俊", + shopId: "shop1", + shopName: "老王游戏工作室", + service: mockServices[0], + status: "completed", + totalPrice: 75, + note: "麻烦打3局,我今天状态不好一直输", + createdAt: "2025-01-05T19:30:00Z", + acceptedAt: "2025-01-05T19:45:00Z", + closedAt: "2025-01-05T22:10:00Z", + completedAt: "2025-01-05T22:25:00Z", + }, + { + id: "ord2", + consumerId: "u1", + consumerName: "小陈", + playerId: "u6", + playerName: "Winter", + shopId: "shop2", + shopName: "Yuki 小屋", + service: mockServices[3], + status: "completed", + totalPrice: 54, + note: "3星,我用鲁班", + createdAt: "2025-01-08T15:00:00Z", + acceptedAt: "2025-01-08T15:12:00Z", + closedAt: "2025-01-08T17:40:00Z", + completedAt: "2025-01-08T17:55:00Z", + }, + { + id: "ord3", + consumerId: "u3", + consumerName: "zz", + playerId: "u8", + playerName: "暗影", + service: mockServices[9], + status: "completed", + totalPrice: 90, + createdAt: "2025-01-11T22:00:00Z", + acceptedAt: "2025-01-11T22:05:00Z", + closedAt: "2025-01-12T00:30:00Z", + completedAt: "2025-01-12T00:45:00Z", + }, + { + id: "ord4", + consumerId: "u4", + consumerName: "莫莫", + playerId: "u7", + playerName: "琪琪", + shopId: "shop1", + shopName: "老王游戏工作室", + service: mockServices[7], + status: "completed", + totalPrice: 44, + note: "2局就行,主要想练练枪法", + createdAt: "2025-01-14T20:00:00Z", + acceptedAt: "2025-01-14T20:08:00Z", + closedAt: "2025-01-14T21:50:00Z", + completedAt: "2025-01-14T22:05:00Z", + }, + { + id: "ord5", + consumerId: "u1", + consumerName: "小陈", + playerId: "u9", + playerName: "飞飞", + shopId: "shop3", + shopName: "浩哥开黑", + service: mockServices[12], + status: "completed", + totalPrice: 60, + note: "3局,打辅助配合我就行", + createdAt: "2025-01-17T20:30:00Z", + acceptedAt: "2025-01-17T20:35:00Z", + closedAt: "2025-01-17T23:00:00Z", + completedAt: "2025-01-17T23:15:00Z", + }, + { + id: "ord6", + consumerId: "u3", + consumerName: "zz", + playerId: "u6", + playerName: "Winter", + shopId: "shop2", + shopName: "Yuki 小屋", + service: mockServices[5], + status: "completed", + totalPrice: 40, + note: "2局,我是新手别嫌弃", + createdAt: "2025-01-20T21:00:00Z", + acceptedAt: "2025-01-20T21:10:00Z", + closedAt: "2025-01-20T23:20:00Z", + completedAt: "2025-01-20T23:35:00Z", + }, + { + id: "ord7", + consumerId: "u2", + consumerName: "玲玲", + playerId: "u9", + playerName: "飞飞", + shopId: "shop3", + shopName: "浩哥开黑", + service: mockServices[13], + status: "completed", + totalPrice: 30, + createdAt: "2025-01-23T10:00:00Z", + acceptedAt: "2025-01-23T10:15:00Z", + closedAt: "2025-01-23T11:00:00Z", + completedAt: "2025-01-23T11:20:00Z", + }, + { + id: "ord8", + consumerId: "u4", + consumerName: "莫莫", + playerId: "u5", + playerName: "俊俊", + shopId: "shop1", + shopName: "老王游戏工作室", + service: mockServices[1], + status: "pending_review", + totalPrice: 40, + note: "2局,随便打打", + createdAt: "2025-02-01T20:00:00Z", + acceptedAt: "2025-02-01T20:10:00Z", + closedAt: "2025-02-01T22:00:00Z", + }, + { + id: "ord9", + consumerId: "u1", + consumerName: "小陈", + playerId: "u8", + playerName: "暗影", + service: mockServices[11], + status: "pending_review", + totalPrice: 120, + createdAt: "2025-02-03T22:30:00Z", + acceptedAt: "2025-02-03T22:35:00Z", + closedAt: "2025-02-04T01:00:00Z", + }, + { + id: "ord10", + consumerId: "u2", + consumerName: "玲玲", + playerId: "u7", + playerName: "琪琪", + shopId: "shop1", + shopName: "老王游戏工作室", + service: mockServices[6], + status: "in_progress", + totalPrice: 84, + note: "3星,我段位铂金2", + createdAt: "2025-02-06T19:00:00Z", + acceptedAt: "2025-02-06T19:08:00Z", + }, + { + id: "ord11", + consumerId: "u3", + consumerName: "zz", + playerId: "u9", + playerName: "飞飞", + shopId: "shop3", + shopName: "浩哥开黑", + service: mockServices[14], + status: "in_progress", + totalPrice: 50, + createdAt: "2025-02-08T21:00:00Z", + acceptedAt: "2025-02-08T21:05:00Z", + }, + { + id: "ord12", + consumerId: "u4", + consumerName: "莫莫", + playerId: "u6", + playerName: "Winter", + shopId: "shop2", + shopName: "Yuki 小屋", + service: mockServices[4], + status: "pending_accept", + totalPrice: 30, + note: "2局轻松局,不用太认真", + createdAt: "2025-02-10T20:00:00Z", + }, + { + id: "ord13", + consumerId: "u1", + consumerName: "小陈", + playerId: "u7", + playerName: "琪琪", + shopId: "shop1", + shopName: "老王游戏工作室", + service: mockServices[8], + status: "pending_close", + totalPrice: 18, + createdAt: "2025-02-12T14:00:00Z", + acceptedAt: "2025-02-12T14:10:00Z", + closedAt: "2025-02-12T15:30:00Z", + }, + { + id: "ord14", + consumerId: "u3", + consumerName: "zz", + playerId: "u8", + playerName: "暗影", + service: mockServices[10], + status: "disputed", + totalPrice: 60, + note: "2局DOTA,我是herald别介意", + createdAt: "2025-02-14T21:00:00Z", + acceptedAt: "2025-02-14T21:08:00Z", + closedAt: "2025-02-14T23:30:00Z", + }, + { + id: "ord15", + consumerId: "u2", + consumerName: "玲玲", + playerId: "u5", + playerName: "俊俊", + shopId: "shop1", + shopName: "老王游戏工作室", + service: mockServices[2], + status: "cancelled", + totalPrice: 44, + note: "临时有事取消了,下次再约", + createdAt: "2025-02-16T18:00:00Z", + }, +] diff --git a/lib/mock/players.ts b/lib/mock/players.ts new file mode 100644 index 0000000..c8ff178 --- /dev/null +++ b/lib/mock/players.ts @@ -0,0 +1,69 @@ +import type { Player } from "../types" +import { mockServices } from "./services" +import { mockUsers } from "./users" + +export const mockPlayers: Player[] = [ + { + id: "u5", + user: mockUsers[4], + rating: 4.2, + totalOrders: 156, + completionRate: 0.94, + status: "available", + games: ["英雄联盟", "王者荣耀"], + services: mockServices.filter((s) => s.playerId === "u5"), + shopId: "shop1", + shopName: "老王游戏工作室", + tags: ["闷声干活", "不催不急", "准时上线"], + }, + { + id: "u6", + user: mockUsers[5], + rating: 4.7, + totalOrders: 412, + completionRate: 0.97, + status: "available", + games: ["英雄联盟", "DOTA2", "原神", "第五人格"], + services: mockServices.filter((s) => s.playerId === "u6"), + shopId: "shop2", + shopName: "Yuki 小屋", + tags: ["态度好", "会讲思路", "老手"], + }, + { + id: "u7", + user: mockUsers[6], + rating: 4.5, + totalOrders: 289, + completionRate: 0.95, + status: "busy", + games: ["王者荣耀", "和平精英", "绝区零"], + services: mockServices.filter((s) => s.playerId === "u7"), + shopId: "shop1", + shopName: "老王游戏工作室", + tags: ["女打手", "技术硬", "不闲聊"], + }, + { + id: "u8", + user: mockUsers[7], + rating: 4.8, + totalOrders: 97, + completionRate: 0.91, + status: "available", + games: ["无畏契约", "DOTA2", "CS2"], + services: mockServices.filter((s) => s.playerId === "u8"), + tags: ["效率高", "话少", "枪法硬"], + }, + { + id: "u9", + user: mockUsers[8], + rating: 4.4, + totalOrders: 203, + completionRate: 0.98, + status: "offline", + games: ["英雄联盟", "崩坏:星穹铁道", "三角洲行动"], + services: mockServices.filter((s) => s.playerId === "u9"), + shopId: "shop3", + shopName: "浩哥开黑", + tags: ["不掉线", "守时", "长期接单"], + }, +] diff --git a/lib/mock/posts.ts b/lib/mock/posts.ts new file mode 100644 index 0000000..0d843ef --- /dev/null +++ b/lib/mock/posts.ts @@ -0,0 +1,160 @@ +import type { Post } from "../types" +import { mockUsers } from "./users" + +export const mockPosts: Post[] = [ + { + id: "p1", + author: mockUsers[10], + authorRole: "owner", + title: "Yuki小屋新年活动!1月全场8折,限时7天", + content: + "新年快乐各位!1月份搞个小活动,全部服务打八折,包括LOL、第五人格、王者都有。时间就到1月15号,有需要的赶紧来,名额有限哈。Winter和我都在,随时接单。", + images: ["/posts/p1-1.jpg"], + tags: ["Yuki小屋", "活动", "英雄联盟", "第五人格", "王者荣耀"], + likeCount: 87, + commentCount: 14, + liked: false, + pinned: true, + createdAt: "2025-01-02T10:00:00Z", + }, + { + id: "p2", + author: mockUsers[1], + authorRole: "consumer", + title: "跟俊俊打了三局LOL,赢了两把!", + content: + "之前一直输一直输,今天下单试了一下,俊俊打野,我打中单,配合还挺顺的。第一局有点磨合,后面两局就好多了。话不多但是打得认真,该抓的时候就来,不会乱。下次还找他。", + images: ["/posts/p2-1.jpg", "/posts/p2-2.jpg"], + tags: ["英雄联盟", "LOL", "秀单"], + linkedOrderId: "ord1", + likeCount: 43, + commentCount: 8, + liked: true, + pinned: false, + createdAt: "2025-01-06T09:15:00Z", + }, + { + id: "p3", + author: mockUsers[4], + authorRole: "player", + title: "LOL双排接单攻略——怎么配合你的打手赢更多", + content: + "接了这么多单,发现很多人不知道怎么配合打手,导致明明打手发挥不错但还是输了。说几个常见问题:\n\n1. 打手在打野的时候别乱走,跟着走就行\n2. 团战不要先手,等打手起手再跟\n3. 有什么想法直接说,别憋着,我们可以调整\n\n其实很简单,信任就行,别自己乱搞。", + images: [], + tags: ["英雄联盟", "LOL", "攻略", "双排技巧"], + likeCount: 126, + commentCount: 19, + liked: false, + pinned: true, + createdAt: "2025-01-10T20:30:00Z", + }, + { + id: "p4", + author: mockUsers[2], + authorRole: "consumer", + title: "吐槽一下,有些打手真的不行", + content: + "不点名,就说一下体验。下了个单,打手全程不说话,问他要不要换个打法也不回,最后输了还说是我的问题。我知道我菜,但你接单就得有个服务态度吧?钱也不少收。\n\n后来换了家,好多了,所以还是要多看评价再下单。", + images: [], + tags: ["吐槽", "陪玩体验"], + likeCount: 58, + commentCount: 11, + liked: false, + pinned: false, + createdAt: "2025-01-13T22:45:00Z", + }, + { + id: "p5", + author: mockUsers[0], + authorRole: "consumer", + title: "和Winter打王者,体验还不错", + content: + "我用鲁班,他配合我,打了三局赢了两局。主要是他不催,我手速慢他也没说什么,就正常打。上了两颗星,今天满足了。", + images: ["/posts/p5-1.jpg"], + tags: ["王者荣耀", "秀单", "Yuki小屋"], + linkedOrderId: "ord2", + likeCount: 31, + commentCount: 5, + liked: false, + pinned: false, + createdAt: "2025-01-09T18:20:00Z", + }, + { + id: "p6", + author: mockUsers[6], + authorRole: "player", + title: "和平精英吃鸡小技巧,稳健打法分享", + content: + "很多人喜欢一上来就冲,其实稳健打法胜率更高。我的习惯是:\n\n- 落点选边缘区,物资够用就行,别贪\n- 中期跟圈走,不主动找人\n- 决赛圈再打,这时候人少了,优势更大\n\n当然这不是唯一打法,但对新手来说最容易上手。有问题可以问我。", + images: ["/posts/p6-1.jpg", "/posts/p6-2.jpg"], + tags: ["和平精英", "吃鸡", "攻略"], + likeCount: 94, + commentCount: 16, + liked: true, + pinned: false, + createdAt: "2025-01-18T15:00:00Z", + }, + { + id: "p7", + author: mockUsers[3], + authorRole: "consumer", + title: "琪琪带我打和平,枪法真的稳", + content: + "之前一直觉得女生打手可能没那么厉害,结果被打脸了。琪琪枪法比我认识的大多数男生都稳,决赛圈那把压枪压得我看呆了。两局都进了前三,第二局吃鸡。下次还找她。", + images: ["/posts/p7-1.jpg"], + tags: ["和平精英", "秀单", "老王游戏工作室"], + linkedOrderId: "ord4", + likeCount: 67, + commentCount: 9, + liked: true, + pinned: false, + createdAt: "2025-01-15T21:30:00Z", + }, + { + id: "p8", + author: mockUsers[9], + authorRole: "owner", + title: "老王工作室招新打手,有意向的来聊", + content: + "工作室目前在招LOL、王者、和平精英方向的打手。要求不高,段位够用就行,主要看服务态度和稳定性。接单量大,不愁没单。有意向的私信我,说一下你玩什么游戏、段位、每天能上几个小时。", + images: [], + tags: ["老王游戏工作室", "招募", "打手招募"], + likeCount: 52, + commentCount: 7, + liked: false, + pinned: false, + createdAt: "2025-01-22T11:00:00Z", + }, + { + id: "p9", + author: mockUsers[1], + authorRole: "consumer", + title: "飞飞LOL辅助真的很懂配合", + content: + "我打ADC,飞飞打辅助,三局全赢。他会看我的走位然后跟着保护,不会乱抢资源,视野也插得很好。感觉比我之前随机到的辅助强多了。而且说好几点上就几点上,没让我等。", + images: ["/posts/p9-1.jpg", "/posts/p9-2.jpg"], + tags: ["英雄联盟", "LOL", "秀单", "浩哥开黑"], + linkedOrderId: "ord5", + likeCount: 49, + commentCount: 6, + liked: false, + pinned: false, + createdAt: "2025-01-18T23:45:00Z", + }, + { + id: "p10", + author: mockUsers[2], + authorRole: "consumer", + title: "回复p4,找打手真的要看评价", + content: + "看到之前那个吐槽帖,深有同感。我也踩过坑,后来学乖了,下单前一定先看评价,特别是最近一个月的。评价少的或者有差评的直接跳过,不值得赌。\n\n现在找到几个靠谱的了,暗影的无畏契约打得很好,推荐。", + images: [], + tags: ["陪玩体验", "避坑"], + quotedPostId: "p4", + likeCount: 38, + commentCount: 4, + liked: false, + pinned: false, + createdAt: "2025-01-14T10:00:00Z", + }, +] diff --git a/lib/mock/reviews.ts b/lib/mock/reviews.ts new file mode 100644 index 0000000..50218b3 --- /dev/null +++ b/lib/mock/reviews.ts @@ -0,0 +1,217 @@ +import type { Review } from "../types" + +export const mockReviews: Review[] = [ + { + id: "r1", + orderId: "ord1", + fromUserId: "u1", + fromUserName: "小陈", + fromUserAvatar: "/avatars/u1.jpg", + toUserId: "u5", + rating: 5, + content: "打得很好,带我上了好几局,沟通也顺畅,下次还找", + sealed: false, + createdAt: "2025-01-10T20:30:00Z", + }, + { + id: "r2", + orderId: "ord1", + fromUserId: "u5", + fromUserName: "俊俊", + fromUserAvatar: "/avatars/u4.jpg", + toUserId: "u1", + rating: 5, + content: "配合很好,没有乱跑,愉快", + sealed: false, + createdAt: "2025-01-10T21:00:00Z", + }, + { + id: "r3", + orderId: "ord2", + fromUserId: "u2", + fromUserName: "玲玲", + fromUserAvatar: "/avatars/u2.jpg", + toUserId: "u6", + rating: 4, + content: "整体还不错,就是中间断线了一次,不过后来补回来了", + sealed: false, + createdAt: "2025-01-12T19:15:00Z", + }, + { + id: "r4", + orderId: "ord2", + fromUserId: "u6", + fromUserName: "Winter", + fromUserAvatar: "/avatars/u1.jpg", + toUserId: "u2", + rating: 4, + sealed: false, + createdAt: "2025-01-12T19:45:00Z", + }, + { + id: "r5", + orderId: "ord3", + fromUserId: "u3", + fromUserName: "zz", + fromUserAvatar: "/avatars/u3.jpg", + toUserId: "u7", + rating: 5, + content: "琪琪真的很厉害!教了我好多操作,感觉进步了不少", + sealed: false, + createdAt: "2025-01-14T22:00:00Z", + }, + { + id: "r6", + orderId: "ord3", + fromUserId: "u7", + fromUserName: "琪琪", + fromUserAvatar: "/avatars/u2.jpg", + toUserId: "u3", + rating: 5, + content: "学得很认真,问题也问得很到位,喜欢这种用户", + sealed: false, + createdAt: "2025-01-14T22:30:00Z", + }, + { + id: "r7", + orderId: "ord4", + fromUserId: "u4", + fromUserName: "莫莫", + fromUserAvatar: "/avatars/u4.jpg", + toUserId: "u8", + rating: 3, + content: "发挥一般,感觉状态不太好,赢了两局输了三局", + sealed: false, + createdAt: "2025-01-16T18:00:00Z", + }, + { + id: "r8", + orderId: "ord4", + fromUserId: "u8", + fromUserName: "暗影", + fromUserAvatar: "/avatars/u3.jpg", + toUserId: "u4", + rating: 4, + content: "还行,没有乱催,比较好说话", + sealed: false, + createdAt: "2025-01-16T18:20:00Z", + }, + { + id: "r9", + orderId: "ord5", + fromUserId: "u1", + fromUserName: "小陈", + fromUserAvatar: "/avatars/u1.jpg", + toUserId: "u9", + rating: 5, + content: "飞飞太强了,全程碾压,爽!", + sealed: false, + createdAt: "2025-01-18T21:10:00Z", + }, + { + id: "r10", + orderId: "ord5", + fromUserId: "u9", + fromUserName: "飞飞", + fromUserAvatar: "/avatars/u4.jpg", + toUserId: "u1", + rating: 5, + sealed: false, + createdAt: "2025-01-18T21:30:00Z", + }, + { + id: "r11", + orderId: "ord6", + fromUserId: "u2", + fromUserName: "玲玲", + fromUserAvatar: "/avatars/u2.jpg", + toUserId: "u5", + rating: 4, + content: "挺专业的,就是话不多,不过打得好就行", + sealed: false, + createdAt: "2025-01-20T20:00:00Z", + }, + { + id: "r12", + orderId: "ord6", + fromUserId: "u5", + fromUserName: "俊俊", + fromUserAvatar: "/avatars/u4.jpg", + toUserId: "u2", + rating: 3, + content: "中途有点急,催了好几次,下次希望耐心一点", + sealed: false, + createdAt: "2025-01-20T20:25:00Z", + }, + { + id: "r13", + orderId: "ord7", + fromUserId: "u3", + fromUserName: "zz", + fromUserAvatar: "/avatars/u3.jpg", + toUserId: "u6", + rating: 2, + content: "感觉没有简介里说的那么厉害,好几局都没发挥出来,有点失望", + sealed: false, + createdAt: "2025-01-22T17:30:00Z", + }, + { + id: "r14", + orderId: "ord7", + fromUserId: "u6", + fromUserName: "Winter", + fromUserAvatar: "/avatars/u1.jpg", + toUserId: "u3", + rating: 4, + content: "配合还可以,就是网络有点卡", + sealed: false, + createdAt: "2025-01-22T17:50:00Z", + }, + { + id: "r15", + orderId: "ord8", + fromUserId: "u4", + fromUserName: "莫莫", + fromUserAvatar: "/avatars/u4.jpg", + toUserId: "u7", + rating: 5, + content: "超级好!带我连赢了五局,开心死了", + sealed: true, + createdAt: "2025-01-24T23:00:00Z", + }, + { + id: "r16", + orderId: "ord8", + fromUserId: "u7", + fromUserName: "琪琪", + fromUserAvatar: "/avatars/u2.jpg", + toUserId: "u4", + rating: 5, + content: "很好带,状态也好,合作愉快", + sealed: true, + createdAt: "2025-01-24T23:15:00Z", + }, + { + id: "r17", + orderId: "ord9", + fromUserId: "u1", + fromUserName: "小陈", + fromUserAvatar: "/avatars/u1.jpg", + toUserId: "u8", + rating: 4, + content: "打得稳,没有骚操作,就是风格比较保守", + sealed: false, + createdAt: "2025-01-26T19:40:00Z", + }, + { + id: "r18", + orderId: "ord9", + fromUserId: "u8", + fromUserName: "暗影", + fromUserAvatar: "/avatars/u3.jpg", + toUserId: "u1", + rating: 4, + sealed: false, + createdAt: "2025-01-26T20:00:00Z", + }, +] diff --git a/lib/mock/services.ts b/lib/mock/services.ts new file mode 100644 index 0000000..83f8ec3 --- /dev/null +++ b/lib/mock/services.ts @@ -0,0 +1,181 @@ +import type { PlayerService } from "../types" + +export const mockServices: PlayerService[] = [ + { + id: "s1", + playerId: "u5", + gameId: "g1", + gameName: "英雄联盟", + title: "LOL双排上分", + description: "打得不好说话,但是认真打。黄金到铂金段位都接,不保证赢但保证尽力。", + price: 25, + unit: "局", + rankRange: "黄金-铂金", + availability: ["工作日晚上9点后", "周末全天"], + }, + { + id: "s2", + playerId: "u5", + gameId: "g4", + gameName: "永劫无间", + title: "永劫双人组队", + description: "永劫玩了两年多,输出位,跟着我打就行,不用担心被带走。", + price: 20, + unit: "局", + availability: ["每天晚上8点到凌晨1点"], + }, + { + id: "s3", + playerId: "u5", + gameId: "g3", + gameName: "CS2", + title: "CS2车队位", + description: "信使/支援位,不抢枪不乱走,配合好的话胜率挺高的。", + price: 22, + unit: "局", + rankRange: "金级-传奇", + availability: ["工作日晚上9点后", "周末下午到凌晨"], + }, + { + id: "s4", + playerId: "u6", + gameId: "g2", + gameName: "王者荣耀", + title: "王者双排稳上星", + description: + "服务第一,不催不急,你想打哪个英雄都行,我来配合。段位不高但胜率稳,接过几百单了。", + price: 18, + unit: "星", + rankRange: "钻石-星耀", + availability: ["每天下午3点到凌晨"], + }, + { + id: "s5", + playerId: "u6", + gameId: "g1", + gameName: "英雄联盟", + title: "LOL陪玩轻松局", + description: "不想上分只想开心的也可以来,我陪你打,不骂人不催,聊天也行。", + price: 15, + unit: "局", + rankRange: "不限", + availability: ["每天都有空,提前说一声"], + }, + { + id: "s6", + playerId: "u6", + gameId: "g11", + gameName: "第五人格", + title: "第五人格求生者陪玩", + description: "求生者主,各个角色都会,带你赢监管者。新手也接,慢慢教。", + price: 20, + unit: "局", + availability: ["周末全天", "工作日晚上8点后"], + }, + { + id: "s7", + playerId: "u7", + gameId: "g2", + gameName: "王者荣耀", + title: "王者女生陪玩双排", + description: "女生打手,段位星耀,不接受质疑我的操作。认真打的来,想找人聊天的别来。", + price: 28, + unit: "星", + rankRange: "铂金-王者", + availability: ["每天晚上7点到12点"], + }, + { + id: "s8", + playerId: "u7", + gameId: "g6", + gameName: "和平精英", + title: "和平精英吃鸡陪玩", + description: "和平玩了三年,枪法稳,带你吃鸡。不喜欢乱冲的,打法偏稳健。", + price: 22, + unit: "局", + rankRange: "白金-王牌", + availability: ["周末全天", "工作日晚上8点后"], + }, + { + id: "s9", + playerId: "u7", + gameId: "g9", + gameName: "绝区零", + title: "绝区零日常代肝", + description: "每天日常、周常都帮你做,不漏活动,有什么特殊需求说一声。", + price: 18, + unit: "次", + availability: ["每天下午到晚上"], + }, + { + id: "s10", + playerId: "u8", + gameId: "g8", + gameName: "无畏契约", + title: "无畏契约上分", + description: "不多说,看战绩。", + price: 45, + unit: "局", + rankRange: "铁-白金", + availability: ["晚上10点后"], + }, + { + id: "s11", + playerId: "u8", + gameId: "g7", + gameName: "DOTA2", + title: "DOTA2组排", + description: "DOTA老玩家,各位置都行,不废话,进来打就是了。", + price: 30, + unit: "局", + rankRange: "herald-legend", + availability: ["每天凌晨前都在"], + }, + { + id: "s12", + playerId: "u8", + gameId: "g3", + gameName: "CS2", + title: "CS2上分代打", + description: "只接代打,不陪玩。效率高,不磨蹭。", + price: 60, + unit: "局", + rankRange: "银级-金级", + availability: ["不定时,接单后尽快开始"], + }, + { + id: "s13", + playerId: "u9", + gameId: "g1", + gameName: "英雄联盟", + title: "LOL稳定双排", + description: "接单稳,不掉线,说几点上就几点上。打辅助和打野,配合你的节奏走。", + price: 20, + unit: "局", + rankRange: "白银-钻石", + availability: ["工作日晚上8点后", "周末下午开始"], + }, + { + id: "s14", + playerId: "u9", + gameId: "g10", + gameName: "崩坏:星穹铁道", + title: "星铁日常代肝", + description: "每日任务、模拟宇宙、忘却之庭都做,体力全清,活动不落。长期单子优先。", + price: 15, + unit: "次", + availability: ["每天都有,早上到晚上都行"], + }, + { + id: "s15", + playerId: "u9", + gameId: "g12", + gameName: "三角洲行动", + title: "三角洲行动组队", + description: "三角洲玩得比较多,战术打法,不乱冲。稳定上线,说好时间不会放鸽子。", + price: 25, + unit: "局", + rankRange: "不限", + availability: ["每天晚上8点到凌晨"], + }, +] diff --git a/lib/mock/shops.ts b/lib/mock/shops.ts new file mode 100644 index 0000000..9ef508d --- /dev/null +++ b/lib/mock/shops.ts @@ -0,0 +1,88 @@ +import type { Shop } from "../types" +import { mockUsers } from "./users" + +export const mockShops: Shop[] = [ + { + id: "shop1", + owner: mockUsers[9], + name: "老王游戏工作室", + banner: "/banners/shop1.jpg", + description: + "做了三年了,老客户都知道我们靠谱。团队十几个人,各种游戏都有人带,不接单就不派,质量有保障。", + rating: 4.7, + totalOrders: 3842, + playerCount: 14, + commissionType: "percentage", + commissionValue: 15, + allowMultiShop: false, + allowIndependentOrders: false, + dispatchMode: "manual", + announcements: [ + "新人进店先看公告,接单前确认好游戏段位要求", + "每天 12:00-24:00 正常营业,节假日不休", + "有问题直接找客服,不要私聊陪玩", + ], + templateConfig: { + sections: [ + { type: "banner", enabled: true, order: 1 }, + { type: "intro", enabled: true, order: 2 }, + { type: "services", enabled: true, order: 3 }, + { type: "players", enabled: true, order: 4 }, + { type: "announcements", enabled: true, order: 5 }, + { type: "reviews", enabled: true, order: 6 }, + ], + }, + }, + { + id: "shop2", + owner: mockUsers[10], + name: "Yuki 小屋", + description: + "小店不追求量,就想好好做。陪玩都是我自己挑的,玩得好、态度好才能留下来。自动派单,接了就会认真打。", + rating: 4.5, + totalOrders: 671, + playerCount: 5, + commissionType: "percentage", + commissionValue: 12, + allowMultiShop: true, + allowIndependentOrders: true, + dispatchMode: "auto", + announcements: ["单子接了就会打完,中途不跑单", "有特殊需求下单前备注一下"], + templateConfig: { + sections: [ + { type: "banner", enabled: false, order: 1 }, + { type: "intro", enabled: true, order: 2 }, + { type: "players", enabled: true, order: 3 }, + { type: "services", enabled: true, order: 4 }, + { type: "reviews", enabled: true, order: 5 }, + { type: "announcements", enabled: true, order: 6 }, + ], + }, + }, + { + id: "shop3", + owner: mockUsers[11], + name: "浩哥开黑", + description: + "刚开店,还在摸索中。我自己是老玩家了,带人打球没问题,就是店还没啥名气,价格实惠,欢迎来试试。", + rating: 3.9, + totalOrders: 88, + playerCount: 3, + commissionType: "fixed", + commissionValue: 8, + allowMultiShop: true, + allowIndependentOrders: false, + dispatchMode: "manual", + announcements: ["新店开业,有问题随时找我"], + templateConfig: { + sections: [ + { type: "banner", enabled: false, order: 1 }, + { type: "intro", enabled: true, order: 2 }, + { type: "services", enabled: true, order: 3 }, + { type: "players", enabled: true, order: 4 }, + { type: "announcements", enabled: true, order: 5 }, + { type: "reviews", enabled: false, order: 6 }, + ], + }, + }, +] diff --git a/lib/mock/transactions.ts b/lib/mock/transactions.ts new file mode 100644 index 0000000..13cb157 --- /dev/null +++ b/lib/mock/transactions.ts @@ -0,0 +1,139 @@ +import type { WalletTransaction } from "../types" + +export const mockTransactions: WalletTransaction[] = [ + { + id: "t1", + type: "topup", + amount: 500, + description: "充值", + createdAt: "2025-01-03T10:00:00Z", + }, + { + id: "t2", + type: "payment", + amount: -75, + description: "支付订单 ord1", + createdAt: "2025-01-05T19:30:00Z", + }, + { + id: "t3", + type: "payment", + amount: -54, + description: "支付订单 ord2", + createdAt: "2025-01-08T15:00:00Z", + }, + { + id: "t4", + type: "topup", + amount: 300, + description: "充值", + createdAt: "2025-01-15T09:00:00Z", + }, + { + id: "t5", + type: "payment", + amount: -60, + description: "支付订单 ord5", + createdAt: "2025-01-17T20:30:00Z", + }, + { + id: "t6", + type: "payment", + amount: -90, + description: "支付订单 ord3", + createdAt: "2025-01-11T22:00:00Z", + }, + { + id: "t7", + type: "payment", + amount: -44, + description: "支付订单 ord4", + createdAt: "2025-01-14T20:00:00Z", + }, + { + id: "t8", + type: "refund", + amount: 44, + description: "订单 ord15 退款", + createdAt: "2025-02-16T18:10:00Z", + }, + { + id: "t9", + type: "topup", + amount: 200, + description: "充值", + createdAt: "2025-02-01T09:00:00Z", + }, + { + id: "t10", + type: "payment", + amount: -40, + description: "支付订单 ord8", + createdAt: "2025-02-01T20:00:00Z", + }, + { + id: "t11", + type: "payment", + amount: -120, + description: "支付订单 ord9", + createdAt: "2025-02-03T22:30:00Z", + }, + { + id: "t12", + type: "payment", + amount: -84, + description: "支付订单 ord10", + createdAt: "2025-02-06T19:00:00Z", + }, + { + id: "t13", + type: "payment", + amount: -50, + description: "支付订单 ord11", + createdAt: "2025-02-08T21:00:00Z", + }, + { + id: "t14", + type: "payment", + amount: -30, + description: "支付订单 ord12", + createdAt: "2025-02-10T20:00:00Z", + }, + { + id: "t15", + type: "payment", + amount: -18, + description: "支付订单 ord13", + createdAt: "2025-02-12T14:00:00Z", + }, + { + id: "t16", + type: "payment", + amount: -60, + description: "支付订单 ord14", + createdAt: "2025-02-14T21:00:00Z", + }, + { + id: "t17", + type: "income", + amount: 63.75, + description: "订单 ord1 收入(扣除15%抽成)", + createdAt: "2025-01-05T22:30:00Z", + }, + { + id: "t18", + type: "income", + amount: 47.52, + description: "订单 ord2 收入(扣除12%抽成)", + createdAt: "2025-01-08T18:00:00Z", + }, + { + id: "t19", + type: "withdrawal", + amount: -100, + description: "提现到银行卡", + createdAt: "2025-01-20T14:00:00Z", + }, +] + +export const walletBalance = 275 diff --git a/lib/mock/users.ts b/lib/mock/users.ts new file mode 100644 index 0000000..0292a78 --- /dev/null +++ b/lib/mock/users.ts @@ -0,0 +1,119 @@ +import type { User } from "../types" + +export const mockUsers: User[] = [ + { + id: "u1", + username: "xiao_chen2333", + nickname: "小陈", + avatar: "/avatars/u1.jpg", + role: "consumer", + phone: "138****2047", + bio: "下班打两把放松,别催我", + createdAt: "2024-07-12T10:23:00Z", + }, + { + id: "u2", + username: "lingling_up", + nickname: "玲玲", + avatar: "/avatars/u2.jpg", + role: "consumer", + phone: "177****8831", + bio: "周末通宵选手", + createdAt: "2024-08-03T15:44:00Z", + }, + { + id: "u3", + username: "zz_noob99", + nickname: "zz", + avatar: "/avatars/u3.jpg", + role: "consumer", + createdAt: "2024-09-20T09:11:00Z", + }, + { + id: "u4", + username: "MoMo_1107", + nickname: "莫莫", + avatar: "/avatars/u4.jpg", + role: "consumer", + phone: "152****6603", + bio: "只玩排位不玩娱乐", + createdAt: "2024-11-05T21:30:00Z", + }, + { + id: "u5", + username: "ace_junjun", + nickname: "俊俊", + avatar: "/avatars/u5.jpg", + role: "player", + phone: "186****4419", + bio: "不太会说话但是会认真打", + createdAt: "2024-06-18T13:00:00Z", + }, + { + id: "u6", + username: "w1nter_gg", + nickname: "Winter", + avatar: "/avatars/u1.jpg", + role: "player", + bio: "段位不代表实力,服务第一", + createdAt: "2024-07-29T18:55:00Z", + }, + { + id: "u7", + username: "qiqi_carry", + nickname: "琪琪", + avatar: "/avatars/u2.jpg", + role: "player", + phone: "139****7720", + bio: "女生打手,不接受质疑", + createdAt: "2024-08-14T11:22:00Z", + }, + { + id: "u8", + username: "darkk_solo", + nickname: "暗影", + avatar: "/avatars/u3.jpg", + role: "player", + createdAt: "2024-10-01T08:40:00Z", + }, + { + id: "u9", + username: "feifei_top1", + nickname: "飞飞", + avatar: "/avatars/u4.jpg", + role: "player", + phone: "173****5582", + bio: "接单稳,不掉线", + createdAt: "2024-12-09T20:15:00Z", + }, + { + id: "u10", + username: "boss_laowang", + nickname: "老王", + avatar: "/avatars/u5.jpg", + role: "owner", + phone: "135****0094", + bio: "开店三年,靠谱", + createdAt: "2024-06-01T09:00:00Z", + }, + { + id: "u11", + username: "yuki_studio", + nickname: "Yuki", + avatar: "/avatars/u1.jpg", + role: "owner", + phone: "158****3367", + bio: "小店慢慢做,质量不将就", + createdAt: "2024-09-07T14:30:00Z", + }, + { + id: "u12", + username: "hao_ge_gg", + nickname: "浩哥", + avatar: "/avatars/u2.jpg", + role: "owner", + createdAt: "2025-01-15T16:48:00Z", + }, +] + +export const currentUser = mockUsers[0]