"use client"; import Link from "next/link"; import { useParams } from "next/navigation"; // useRouter حذف شد import { useState, useEffect } from "react"; import { useQuery, useMutation } from "@tanstack/react-query"; import { API_ROUTES, request } from "@/services/api"; import { Avatar, Breadcrumb, Button, Card, Descriptions, Divider, message as antdMessage, Select, Spin, Table, Tabs, Tag, Typography, } from "antd"; import type { ColumnsType } from "antd/es/table"; import { UserOutlined, RobotOutlined, TeamOutlined,HistoryOutlined } from "@ant-design/icons"; // تعریف تایپ‌ها interface SubUser { id: string; username: string; name: string | null; mobile_number: string | null; created_at: string; level: number; } // تعریف تایپ بات برای جلوگیری از خطای any interface Bot { id: number; name: string; description: string; image: string | null; } interface UserDetail { id: string; username: string; name: string | null; mobile_number: string | null; email: string | null; image: string | null; level: number; credit: number; income: number; created_at: string; sub_users: SubUser[]; bots?: Bot[]; // استفاده از تایپ Bot به جای any } export default function UserPage() { const { id } = useParams(); const [messageApi, contextHolder] = antdMessage.useMessage(); const [selectedLevel, setSelectedLevel] = useState(1); // 1. دریافت اطلاعات کامل کاربر const { data: user, isLoading, refetch } = useQuery({ queryKey: ["user", id], queryFn: async () => { const res = await request.get(API_ROUTES.USER.ONE(id as string)); return res.data.user as UserDetail; }, }); // 2. سینک کردن لول انتخابی useEffect(() => { if (user) { setSelectedLevel(user.level || 1); } }, [user]); // 3. تابع آپدیت لول const updateLevelMutation = useMutation({ mutationFn: async () => { if (!user?.id) throw new Error("User ID not found"); return await request.put(`/admin/user/${user.id}/level`, { level: selectedLevel, }); }, onSuccess: () => { messageApi.success("سطح کاربر با موفقیت بروزرسانی شد"); refetch(); }, onError: () => { messageApi.error("خطا در تغییر سطح کاربر"); }, }); // ستون‌های جدول زیرمجموعه‌ها const subUsersColumns: ColumnsType = [ { title: "نام کاربری", dataIndex: "username", key: "username", render: (text) => ( {text} ), }, { title: "نام", dataIndex: "name", key: "name", render: (text) => text || ---, }, { title: "شماره موبایل", dataIndex: "mobile_number", key: "mobile_number", render: (text) => {text}, }, { title: "سطح", dataIndex: "level", key: "level", render: (level) => ( 1 ? "gold" : "blue"}>سطح {level} ), }, { title: "تاریخ عضویت", dataIndex: "created_at", key: "created_at", render: (date) => new Date(date).toLocaleDateString("fa-IR"), }, ]; if (isLoading) return (
); if (!user) return (
کاربر یافت نشد
); const items = [ { key: "1", label: ( دستیارها ), children: (
{user.bots && user.bots.length > 0 ? (
{user.bots.map((bot: Bot) => ( مشاهده}>

{bot.description}

))}
) : (

این کاربر دستیاری ندارد.

)}
), }, { key: "2", label: ( زیرمجموعه‌ها ({user.sub_users ? user.sub_users.length : 0}) ), children: ( ), }, ]; return ( <> {contextHolder} داشبورد }, { title: کاربران }, { title: user.username }, ]} className="mb-6" />
} />
{user.name || "کاربر ناشناس"} @{user.username}
سطح فعلی: {user.level} {/* ۲. دکمه جدید برای مشاهده تاریخچه تراکنش‌ها */}
{user.email || "---"} {user.mobile_number || "---"} {new Date(user.created_at).toLocaleDateString("fa-IR")} {user.credit.toLocaleString()} سکه {user.income.toLocaleString()} تومان