import React, { useState } from 'react'; import { Plus, Search, MapPin, Store, Pencil, X, FileText, Image as ImageIcon, ChevronDown, ChevronRight, HelpCircle, ArrowUpDown, Lock } from 'lucide-react'; import { Input } from "../ui/input"; import { Button } from "../ui/button"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "../ui/select"; import { cn } from "../ui/utils"; // Mock Data Types type FileItem = { id: string; name: string; date: string; type: 'image' | 'doc'; url?: string; }; type SubCategory = { id: string; name: string; files: FileItem[]; isOpen?: boolean; }; type Category = { id: string; name: string; subcategories: SubCategory[]; isOpen?: boolean; }; export function TrainingView() { const [categories, setCategories] = useState([ { id: '1', name: 'Pop', isOpen: true, subcategories: [ { id: '1-1', name: '2024', isOpen: true, files: [ { id: 'f1', name: 'uuuuu', date: '10/23/24, 12:21 AM', type: 'image' }, { id: 'f2', name: '664EF167-DFCE-49C1-A417-DC09FEDF78D7.jpg', date: '11/24/25, 8:40 PM', type: 'image' } ] } ] }, { id: '2', name: 'Training', isOpen: true, subcategories: [ { id: '2-1', name: 'BOH', isOpen: false, files: [] }, { id: '2-2', name: 'FOH', isOpen: true, files: [] // Empty for demo to match screenshot structure which shows FILES section but maybe empty? // Actually screenshot shows FOH expanded and FILES header but no files listed below it in the visible area, // or maybe the FILES header is part of the subcategory content. } ] }, { id: '3', name: 'ww', isOpen: false, subcategories: [] } ]); const toggleCategory = (id: string) => { setCategories(prev => prev.map(cat => cat.id === id ? { ...cat, isOpen: !cat.isOpen } : cat )); }; const toggleSubcategory = (catId: string, subId: string) => { setCategories(prev => prev.map(cat => { if (cat.id !== catId) return cat; return { ...cat, subcategories: cat.subcategories.map(sub => sub.id === subId ? { ...sub, isOpen: !sub.isOpen } : sub ) }; })); }; return (
{/* Controls: Search, Location — 与 Labels 等页一致的框样式:单行、圆角、细边框、统一高度 40px */}
{/* Header Bar */}

Information

NEW
55789
{/* Main Content Area */}
{/* New Category Button */} {/* Categories List */}
{categories.map(category => (
{/* Category Header */}
{/* Category Content */} {category.isOpen && (
{/* New Subcategory Button */} {/* Subcategories List */}
{category.subcategories.map(sub => (
{/* Subcategory Header */}
{/* Subcategory Content (Files) */} {sub.isOpen && (
Files
{/* File Actions */}
{/* Files List */}
{sub.files.length > 0 ? ( sub.files.map(file => (
{file.type === 'image' ? ( ) : ( )}
{file.name}
{file.date}
)) ) : (
No files in this subcategory
)}
)}
))} {category.subcategories.length === 0 && (
No subcategories
)}
)}
))}
); }