"use client" import React from "react" import { useState, useEffect } from "react" import { useRouter } from "next/navigation" import Link from "next/link" import { Button } from "@/components/ui/button" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { ArrowLeft, Edit, ArrowUp, ArrowDown, ArrowUpDown } from "lucide-react" import { toast } from "sonner" import { use } from "react" import Image from "next/image" import { Badge } from "@/components/ui/badge" import { apiRequest } from '@/lib/api-utils' import { Loader2 } from "lucide-react" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" interface ProjectProfile { id: number name: string memo: string companyId: number createTime: string account: string phone: string | null deviceCount: number friendCount: number userCount: number } interface Device { id: number memo: string phone: string model: string brand: string alive: number deviceId: number wechatId: string friendCount: number wAlive: number imei: string } interface SubUser { id: number account: string username: string phone: string avatar: string status: number createTime: string typeId: number } interface ProjectDetailPageProps { params: { id: string } } export default function ProjectDetailPage({ params }: ProjectDetailPageProps) { const { id } = use(params) const router = useRouter() const [isLoading, setIsLoading] = useState(true) const [isDevicesLoading, setIsDevicesLoading] = useState(false) const [isSubUsersLoading, setIsSubUsersLoading] = useState(false) const [profile, setProfile] = useState(null) const [devices, setDevices] = useState([]) const [subUsers, setSubUsers] = useState([]) const [activeTab, setActiveTab] = useState("overview") const [sortOrder, setSortOrder] = useState<'asc' | 'desc' | null>(null) const [deviceStatusFilter, setDeviceStatusFilter] = useState<'all' | 'online' | 'offline'>('all') const [wechatStatusFilter, setWechatStatusFilter] = useState<'all' | 'loggedIn' | 'loggedOut' | 'notLogged'>('all') const [userStatusFilter, setUserStatusFilter] = useState<'all' | 'enabled' | 'disabled'>('all') const [userTypeFilter, setUserTypeFilter] = useState<'all' | 'system' | 'operator' | 'consultant'>('all') const [pollingCount, setPollingCount] = useState(0) const [isPolling, setIsPolling] = useState(false) const [qrCode, setQrCode] = useState("") const [showQrCode, setShowQrCode] = useState(false) const maxPollingCount = 60 // 修改为60次 const fetchProject = async () => { try { setIsLoading(true) const result = await apiRequest(`/company/profile/${id}`) if (result.code === 200 && result.data) { setProfile(result.data) } else { toast.error(result.msg || "获取项目信息失败") } } catch (error) { console.error("获取项目信息失败:", error) toast.error("网络错误,请稍后再试") } finally { setIsLoading(false) } } useEffect(() => { fetchProject() }, [id]) const fetchDevices = async () => { if (activeTab !== "devices") return setIsDevicesLoading(true) try { const result = await apiRequest(`/company/devices?companyId=${id}`) if (result.code === 200) { let filteredDevices = result.data // 应用设备状态筛选 if (deviceStatusFilter !== 'all') { filteredDevices = filteredDevices.filter(device => deviceStatusFilter === 'online' ? device.alive === 1 : device.alive !== 1 ) } // 应用微信状态筛选 if (wechatStatusFilter !== 'all') { filteredDevices = filteredDevices.filter(device => { if (wechatStatusFilter === 'loggedIn') return device.wAlive === 1 if (wechatStatusFilter === 'loggedOut') return device.wAlive === 0 return device.wAlive === -1 }) } // 应用排序 if (sortOrder) { filteredDevices = [...filteredDevices].sort((a, b) => { const aCount = a.friendCount || 0 const bCount = b.friendCount || 0 return sortOrder === 'asc' ? aCount - bCount : bCount - aCount }) } setDevices(filteredDevices) } else { toast.error(result.msg || "获取设备列表失败") setDevices([]) } } catch (error) { toast.error("网络错误,请稍后重试") setDevices([]) } finally { setIsDevicesLoading(false) } } useEffect(() => { fetchDevices() }, [activeTab, id, sortOrder, deviceStatusFilter, wechatStatusFilter]) const fetchSubUsers = async () => { if (activeTab !== "accounts") return setIsSubUsersLoading(true) try { const result = await apiRequest(`/company/subusers?companyId=${id}`) if (result.code === 200) { let filteredUsers = result.data // 应用状态筛选 if (userStatusFilter !== 'all') { filteredUsers = filteredUsers.filter(user => userStatusFilter === 'enabled' ? user.status === 1 : user.status !== 1 ) } // 应用账号类型筛选 if (userTypeFilter !== 'all') { filteredUsers = filteredUsers.filter(user => { if (userTypeFilter === 'system') return user.typeId === -1 if (userTypeFilter === 'operator') return user.typeId === 1 return user.typeId === 2 }) } setSubUsers(filteredUsers) } else { toast.error(result.msg || "获取子账号列表失败") setSubUsers([]) } } catch (error) { toast.error("网络错误,请稍后重试") setSubUsers([]) } finally { setIsSubUsersLoading(false) } } useEffect(() => { fetchSubUsers() }, [activeTab, id, userStatusFilter, userTypeFilter]) const handleSort = () => { setSortOrder(prev => { if (prev === null) return 'desc' if (prev === 'desc') return 'asc' return null }) } const startPolling = () => { setPollingCount(0) setIsPolling(true) const timer = setInterval(async () => { if (pollingCount >= maxPollingCount) { clearInterval(timer) setIsPolling(false) toast.error("轮询超时,请重试") return } try { const result = await apiRequest(`/company/device/query?accountId=${profile?.s2_accountId}`) if (result.code === 200 && result.data) { clearInterval(timer) setIsPolling(false) setShowQrCode(false) toast.success("设备添加成功") fetchDevices() // 刷新设备列表 } } catch (error) { console.error("轮询失败:", error) } setPollingCount(prev => prev + 1) }, 1000) return timer } if (isLoading) { return
加载中...
} if (!profile) { return
未找到项目信息
} return (

{profile.name}

项目概览 关联设备 子账号 基本信息
项目名称
{profile.name}
手机号
{profile.phone || "未设置"}
账号
{profile.account}
创建时间
{profile.createTime}
项目介绍
{profile.memo}
关联设备数
{profile.deviceCount}
子账号数
{profile.userCount}
微信好友总数
{profile.friendCount}

设备列表

设备状态:
微信状态:
{isDevicesLoading ? (
) : devices.length > 0 ? (
设备名称 型号 品牌 IMEI 设备状态 微信状态 微信好友数量 {devices.map((device) => ( {device.memo} {device.model} {device.brand} {device.imei} {device.alive === 1 ? "在线" : "离线"} {device.wAlive === 1 ? "已登录" : device.wAlive === 0 ? "已登出" : "未登录微信"} {device.friendCount || 0} ))}
) : (
暂无设备数据
)}

子账号列表

状态:
账号类型:
{isSubUsersLoading ? (
) : subUsers.length > 0 ? (
头像 账号ID 登录账号 昵称 手机号 状态 账号类型 创建时间 {subUsers.map((user) => ( {user.id} {user.account} {user.username} {user.phone} {user.status === 1 ? "启用" : "禁用"} {user.typeId === -1 ? "系统账号" : user.typeId === 1 ? "操盘手" : "门店顾问"} {user.createTime} ))}
) : (
暂无子账号数据
)}
) }