import React, { useState } from 'react'; import { useTheme } from '../contexts/ThemeContext'; import { FileBox, Search, Plus, Edit, Trash2, Download, Upload, Filter, Grid3X3, List, MoreVertical, ChevronRight, FileText, Image, Film, Music, Archive, ExternalLink, Copy, Share2, } from 'lucide-react'; import { PageType } from '../components/Sidebar'; interface ZZResource { id: string; name: string; type: 'document' | 'image' | 'video' | 'audio' | 'archive' | 'other'; size: string; category: string; tags: string[]; createdAt: string; updatedAt: string; author: string; status: 'active' | 'archived' | 'draft'; description: string; } interface ZZResourceManagementProps { onNavigate: (page: PageType) => void; } const mockResources: ZZResource[] = [ { id: 'zz-001', name: '品牌视觉规范手册', type: 'document', size: '15.2 MB', category: '品牌资产', tags: ['品牌', 'VI', '规范'], createdAt: '2024-01-15', updatedAt: '2024-03-10', author: '张三', status: 'active', description: '公司品牌视觉识别系统标准手册,包含LOGO、色彩、字体等规范' }, { id: 'zz-002', name: '产品宣传视频素材', type: 'video', size: '256 MB', category: '营销素材', tags: ['视频', '宣传', '产品'], createdAt: '2024-02-20', updatedAt: '2024-03-08', author: '李四', status: 'active', description: '2024年第一季度产品宣传视频原始素材' }, { id: 'zz-003', name: '活动背景音乐库', type: 'audio', size: '1.2 GB', category: '音频素材', tags: ['音乐', '背景', '活动'], createdAt: '2024-01-08', updatedAt: '2024-02-28', author: '王五', status: 'active', description: '各类活动背景音乐合集,包含不同风格和时长' }, { id: 'zz-004', name: '图标矢量素材包', type: 'image', size: '45 MB', category: '设计素材', tags: ['图标', '矢量', 'UI'], createdAt: '2024-03-01', updatedAt: '2024-03-15', author: '赵六', status: 'active', description: '500+高质量矢量图标素材,适用于各类项目' }, { id: 'zz-005', name: '历史项目归档', type: 'archive', size: '2.5 GB', category: '归档文件', tags: ['归档', '历史', '项目'], createdAt: '2023-12-01', updatedAt: '2024-01-20', author: '系统', status: 'archived', description: '2023年度已完成项目文件归档' }, { id: 'zz-006', name: 'PPT模板套装', type: 'document', size: '88 MB', category: '模板素材', tags: ['PPT', '模板', '演示'], createdAt: '2024-02-10', updatedAt: '2024-03-12', author: '钱七', status: 'draft', description: '商务演示PPT模板,包含多种风格和场景' }, ]; const typeIcons: Record = { document: , image: , video: , audio: , archive: , other: , }; const typeColors: Record = { document: 'bg-blue-500/20 text-blue-400', image: 'bg-green-500/20 text-green-400', video: 'bg-purple-500/20 text-purple-400', audio: 'bg-orange-500/20 text-orange-400', archive: 'bg-gray-500/20 text-gray-400', other: 'bg-slate-500/20 text-slate-400', }; const statusColors: Record = { active: { bg: 'bg-green-500/20', text: 'text-green-400', label: '使用中' }, archived: { bg: 'bg-gray-500/20', text: 'text-gray-400', label: '已归档' }, draft: { bg: 'bg-yellow-500/20', text: 'text-yellow-400', label: '草稿' }, }; const categories = ['全部', '品牌资产', '营销素材', '音频素材', '设计素材', '模板素材', '归档文件']; const ZZResourceManagement: React.FC = ({ onNavigate }) => { const { theme } = useTheme(); const isDark = theme === 'dark'; const [viewMode, setViewMode] = useState<'grid' | 'list'>('grid'); const [searchQuery, setSearchQuery] = useState(''); const [selectedCategory, setSelectedCategory] = useState('全部'); const [selectedStatus, setSelectedStatus] = useState('all'); const [selectedResource, setSelectedResource] = useState(null); const [showUploadModal, setShowUploadModal] = useState(false); const filteredResources = mockResources.filter(resource => { const matchesSearch = resource.name.toLowerCase().includes(searchQuery.toLowerCase()) || resource.description.toLowerCase().includes(searchQuery.toLowerCase()) || resource.tags.some(tag => tag.toLowerCase().includes(searchQuery.toLowerCase())); const matchesCategory = selectedCategory === '全部' || resource.category === selectedCategory; const matchesStatus = selectedStatus === 'all' || resource.status === selectedStatus; return matchesSearch && matchesCategory && matchesStatus; }); const stats = { total: mockResources.length, active: mockResources.filter(r => r.status === 'active').length, archived: mockResources.filter(r => r.status === 'archived').length, draft: mockResources.filter(r => r.status === 'draft').length, }; return (
{/* 页面标题 */}

ZZ资源管理

管理各类制作资源和素材文件

{/* 统计卡片 */}

资源总数

{stats.total}

使用中

{stats.active}

已归档

{stats.archived}

草稿

{stats.draft}

{/* 筛选和搜索 */}
{/* 搜索框 */}
setSearchQuery(e.target.value)} className={`w-full pl-10 pr-4 py-2 rounded-lg border transition-all ${ isDark ? 'bg-slate-900/50 border-slate-700 text-white placeholder-slate-500 focus:border-blue-500' : 'bg-gray-50 border-gray-200 text-gray-900 placeholder-gray-400 focus:border-red-400' }`} />
{/* 分类筛选 */}
{/* 状态筛选 */}
{/* 视图切换 */}
{/* 资源列表 */} {viewMode === 'grid' ? (
{filteredResources.map(resource => (
setSelectedResource(resource)} >
{typeIcons[resource.type]}
{statusColors[resource.status].label}

{resource.name}

{resource.description}

{resource.tags.slice(0, 2).map(tag => ( {tag} ))}
{resource.size}
))}
) : (
{filteredResources.map(resource => ( setSelectedResource(resource)} > ))}
资源名称 类型 分类 大小 状态 更新日期 操作
{typeIcons[resource.type]}

{resource.name}

{resource.author}

{resource.type === 'document' ? '文档' : resource.type === 'image' ? '图片' : resource.type === 'video' ? '视频' : resource.type === 'audio' ? '音频' : resource.type === 'archive' ? '归档' : '其他'} {resource.category} {resource.size} {statusColors[resource.status].label} {resource.updatedAt}
e.stopPropagation()}>
)} {/* 资源详情弹窗 */} {selectedResource && (
setSelectedResource(null)}>
e.stopPropagation()} >
{typeIcons[selectedResource.type]}

{selectedResource.name}

{selectedResource.category} · {selectedResource.size}

描述

{selectedResource.description}

创建者

{selectedResource.author}

创建时间

{selectedResource.createdAt}

更新时间

{selectedResource.updatedAt}

状态

{statusColors[selectedResource.status].label}

标签

{selectedResource.tags.map(tag => ( {tag} ))}
)}
); }; export default ZZResourceManagement;