"use client" import { useState, useEffect } from "react" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Checkbox } from "@/components/ui/checkbox" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Search, Check, Smartphone } from "lucide-react" // 模拟数据 const mockDevices = [ { id: "1", name: "iPhone 13 Pro", online: true }, { id: "2", name: "Xiaomi 12", online: true }, { id: "3", name: "Samsung Galaxy S22", online: false }, { id: "4", name: "OPPO Find X5", online: true }, ] const mockFriends = [ { id: "1-friend-1", deviceId: "1", name: "张三", avatar: "/placeholder.svg?height=40&width=40", tags: ["同事", "重要"], region: "北京", }, { id: "1-friend-2", deviceId: "1", name: "李四", avatar: "/placeholder.svg?height=40&width=40", tags: ["朋友"], region: "上海", }, { id: "1-friend-3", deviceId: "1", name: "王五", avatar: "/placeholder.svg?height=40&width=40", tags: ["家人"], region: "广州", }, { id: "1-friend-4", deviceId: "1", name: "赵六", avatar: "/placeholder.svg?height=40&width=40", tags: ["客户", "重要"], region: "深圳", }, { id: "2-friend-1", deviceId: "2", name: "陈一", avatar: "/placeholder.svg?height=40&width=40", tags: ["同学"], region: "北京", }, { id: "2-friend-2", deviceId: "2", name: "杨二", avatar: "/placeholder.svg?height=40&width=40", tags: ["朋友", "重要"], region: "上海", }, { id: "2-friend-3", deviceId: "2", name: "刘三", avatar: "/placeholder.svg?height=40&width=40", tags: ["同事"], region: "广州", }, { id: "3-friend-1", deviceId: "3", name: "周七", avatar: "/placeholder.svg?height=40&width=40", tags: ["客户"], region: "北京", }, { id: "3-friend-2", deviceId: "3", name: "吴八", avatar: "/placeholder.svg?height=40&width=40", tags: ["朋友"], region: "上海", }, { id: "3-friend-3", deviceId: "3", name: "郑九", avatar: "/placeholder.svg?height=40&width=40", tags: ["家人", "重要"], region: "广州", }, { id: "4-friend-1", deviceId: "4", name: "冯十", avatar: "/placeholder.svg?height=40&width=40", tags: ["同事"], region: "深圳", }, { id: "4-friend-2", deviceId: "4", name: "蒋十一", avatar: "/placeholder.svg?height=40&width=40", tags: ["朋友"], region: "北京", }, ] interface Friend { id: string deviceId: string name: string avatar: string tags: string[] region: string } interface FriendSelectorProps { onSelectionChange: (friends: Friend[]) => void defaultSelectedFriendIds?: string[] } export function FriendSelector({ onSelectionChange, defaultSelectedFriendIds = [] }: FriendSelectorProps) { const [selectedDevices, setSelectedDevices] = useState([]) const [selectedFriendIds, setSelectedFriendIds] = useState(defaultSelectedFriendIds) const [searchQuery, setSearchQuery] = useState("") const [selectedTag, setSelectedTag] = useState("all") const [selectedRegion, setSelectedRegion] = useState("all") // 获取所有可用的标签和地区 const allTags = Array.from(new Set(mockFriends.flatMap((friend) => friend.tags))) const allRegions = Array.from(new Set(mockFriends.map((friend) => friend.region))) // 根据选择的设备过滤好友 const filteredFriends = mockFriends .filter((friend) => { // 如果没有选择设备,显示所有好友 if (selectedDevices.length === 0) return true // 只显示选中设备的好友 return selectedDevices.includes(friend.deviceId) }) .filter((friend) => { // 搜索过滤 if (searchQuery) { return friend.name.toLowerCase().includes(searchQuery.toLowerCase()) } return true }) .filter((friend) => { // 标签过滤 if (selectedTag !== "all") { return friend.tags.includes(selectedTag) } return true }) .filter((friend) => { // 地区过滤 if (selectedRegion !== "all") { return friend.region === selectedRegion } return true }) // 当选择的好友ID变化时,通知父组件 useEffect(() => { const selectedFriends = mockFriends.filter((friend) => selectedFriendIds.includes(friend.id)) onSelectionChange(selectedFriends) }, [selectedFriendIds, onSelectionChange]) const toggleDeviceSelection = (deviceId: string) => { setSelectedDevices((prev) => { if (prev.includes(deviceId)) { return prev.filter((id) => id !== deviceId) } else { return [...prev, deviceId] } }) } const toggleFriendSelection = (friendId: string) => { setSelectedFriendIds((prev) => { if (prev.includes(friendId)) { return prev.filter((id) => id !== friendId) } else { return [...prev, friendId] } }) } const selectAllFriends = () => { setSelectedFriendIds(filteredFriends.map((friend) => friend.id)) } const deselectAllFriends = () => { setSelectedFriendIds([]) } return (
{/* 设备选择 */}
{mockDevices.map((device) => ( ))}
{/* 好友筛选 */}
setSearchQuery(e.target.value)} className="pl-8" />
{/* 好友列表 */}
{filteredFriends.length > 0 ? (
{filteredFriends.map((friend) => (
toggleFriendSelection(friend.id)} /> {friend.name}
{friend.name}
{friend.region}
{friend.tags.length > 0 && (
{friend.tags.map((tag) => ( {tag} ))}
)}
))}
) : (
没有找到符合条件的好友
)}
已选择 {selectedFriendIds.length} 位好友
) }