"use client" import { useState } from "react" import { DashboardShell } from "@/components/dashboard-shell" import { DashboardHeader } from "@/components/dashboard-header" import { Button } from "@/components/ui/button" import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card" import { Input } from "@/components/ui/input" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { Badge } from "@/components/ui/badge" import { Search, Edit, Eye } from "lucide-react" import { AddHomeDecorDialog } from "@/components/home-decor/add-home-decor-dialog" import { DeleteConfirmationDialog } from "@/components/delete-confirmation-dialog" import { useToast } from "@/components/ui/use-toast" import Link from "next/link" import type { HomeDecor } from "@/components/home-decor/home-decor-detail-dialog" // 初始家居装饰数据 const initialDecors: HomeDecor[] = [ { id: "DEC001", name: "星空投影灯", type: "灯饰", rarity: "稀有", description: "可以在房间内投影出美丽的星空,营造浪漫氛围。", releaseDate: "2023-10-20", status: "已发布", activatedCount: 1342, image: "/placeholder.svg?height=300&width=300", }, { id: "DEC002", name: "音乐主题壁纸", type: "墙饰", rarity: "普通", description: "以音乐元素为主题的壁纸,适合洛天依的房间装饰。", releaseDate: "2023-11-05", status: "已发布", activatedCount: 2156, image: "/placeholder.svg?height=300&width=300", }, { id: "DEC003", name: "音符地毯", type: "地饰", rarity: "稀有", description: "音符形状的地毯,踩上去会发出悦耳的音符声。", releaseDate: "2023-12-15", status: "已发布", activatedCount: 987, image: "/placeholder.svg?height=300&width=300", }, { id: "DEC004", name: "全息投影装置", type: "科技装饰", rarity: "传说", description: "可以投影出洛天依的全息影像,实现虚拟互动。", releaseDate: "2024-01-20", status: "已发布", activatedCount: 456, image: "/placeholder.svg?height=300&width=300", }, { id: "DEC005", name: "樱花主题家具套装", type: "家具套装", rarity: "史诗", description: "以樱花为主题的家具套装,包含床、桌椅、柜子等多件家具。", releaseDate: "", status: "未发布", activatedCount: 0, image: "/placeholder.svg?height=300&width=300", }, ] export default function HomeDecorPage() { const { toast } = useToast() const [decors, setDecors] = useState(initialDecors) const [searchTerm, setSearchTerm] = useState("") const [currentPage, setCurrentPage] = useState(1) const [selectedDecor, setSelectedDecor] = useState(null) const [isEditDialogOpen, setIsEditDialogOpen] = useState(false) const itemsPerPage = 5 // 过滤和分页 const filteredDecors = decors.filter( (decor) => decor.name.toLowerCase().includes(searchTerm.toLowerCase()) || decor.id.toLowerCase().includes(searchTerm.toLowerCase()) || decor.type.toLowerCase().includes(searchTerm.toLowerCase()), ) const totalPages = Math.ceil(filteredDecors.length / itemsPerPage) const paginatedDecors = filteredDecors.slice((currentPage - 1) * itemsPerPage, currentPage * itemsPerPage) // 处理添加家居装饰 const handleAddDecor = (newDecor: HomeDecor) => { setDecors((prevDecors) => [...prevDecors, newDecor]) toast({ title: "添加成功", description: `家居装饰 ${newDecor.name} 已成功添加`, }) } // 处理编辑家居装饰 const handleEditDecor = (updatedDecor: HomeDecor) => { setDecors((prevDecors) => prevDecors.map((decor) => (decor.id === updatedDecor.id ? updatedDecor : decor))) setSelectedDecor(null) setIsEditDialogOpen(false) toast({ title: "更新成功", description: `家居装饰 ${updatedDecor.name} 已成功更新`, }) } // 处理删除家居装饰 const handleDeleteDecor = async (decorId: string) => { // 模拟API请求 await new Promise((resolve) => setTimeout(resolve, 1000)) setDecors((prevDecors) => prevDecors.filter((decor) => decor.id !== decorId)) toast({ title: "删除成功", description: "家居装饰已成功删除", variant: "destructive", }) } // 打开编辑对话框 const openEditDialog = (decor: HomeDecor) => { setSelectedDecor(decor) setIsEditDialogOpen(true) } return (
{ setSearchTerm(e.target.value) setCurrentPage(1) // 重置到第一页 }} />
家居装饰列表
管理洛天依的家居装饰卡牌
ID 装饰名称 类型 稀有度 发布日期 状态 激活数量 操作 {paginatedDecors.map((decor) => ( {decor.id} {decor.name} {decor.type} {decor.rarity} {decor.releaseDate || "-"} {decor.status} {decor.activatedCount} {decor.status !== "已发布" && ( <> handleDeleteDecor(decor.id)} /> )} ))} {paginatedDecors.length === 0 && ( 没有找到匹配的家居装饰 )}
显示 {paginatedDecors.length > 0 ? (currentPage - 1) * itemsPerPage + 1 : 0}- {Math.min(currentPage * itemsPerPage, filteredDecors.length)} 共 {filteredDecors.length} 个家居装饰
{/* 编辑家居装饰对话框 - 当选中家居装饰时显示 */} {selectedDecor && isEditDialogOpen && ( )}
) }