// 物品数据库管理工具 - 主要JavaScript逻辑 class ItemDatabase { constructor() { this.items = this.loadItems(); this.history = this.loadHistory(); this.init(); } // 初始化应用 init() { this.setupEventListeners(); this.renderItems(); this.updateStats(); this.initAnimations(); this.loadSampleData(); } // 设置事件监听器 setupEventListeners() { // 表单提交 document.getElementById('add-item-form').addEventListener('submit', (e) => { e.preventDefault(); this.addItem(); }); // 搜索和筛选 document.getElementById('search-input').addEventListener('input', (e) => { this.filterItems(); }); document.getElementById('filter-select').addEventListener('change', (e) => { this.filterItems(); }); // 数据导入导出 document.getElementById('export-data-btn').addEventListener('click', () => { this.exportData(); }); document.getElementById('import-data-btn').addEventListener('click', () => { document.getElementById('import-file-input').click(); }); document.getElementById('import-file-input').addEventListener('change', (e) => { this.importData(e.target.files[0]); }); // 编辑模态框 document.getElementById('edit-form').addEventListener('submit', (e) => { e.preventDefault(); this.updateItem(); }); document.getElementById('cancel-edit').addEventListener('click', () => { this.closeEditModal(); }); // 点击模态框外部关闭 document.getElementById('edit-modal').addEventListener('click', (e) => { if (e.target.id === 'edit-modal') { this.closeEditModal(); } }); } // 加载示例数据 loadSampleData() { if (this.items.length === 0) { const sampleItems = [ { id: this.generateId(), name: "明代青花瓷瓶", imageUrl: "https://images.unsplash.com/photo-1578662996442-48f60103fc96?w=400&h=300&fit=crop", description: "明代宣德年间的青花瓷瓶,品相完好,具有极高的收藏价值", tags: ["古董", "瓷器", "明代"], createdAt: new Date().toISOString(), updatedAt: new Date().toISOString() }, { id: this.generateId(), name: "清代玉雕摆件", imageUrl: "https://images.unsplash.com/photo-1605883705077-8d3d848f8a9d?w=400&h=300&fit=crop", description: "清代乾隆时期的玉雕摆件,雕工精细,玉质温润", tags: ["古董", "玉器", "清代"], createdAt: new Date(Date.now() - 86400000).toISOString(), updatedAt: new Date(Date.now() - 86400000).toISOString() }, { id: this.generateId(), name: "宋代书法作品", imageUrl: "https://images.unsplash.com/photo-1581833971358-2c8b550f87b3?w=400&h=300&fit=crop", description: "宋代书法名家作品,纸本墨迹,保存完好", tags: ["艺术品", "书法", "宋代"], createdAt: new Date(Date.now() - 172800000).toISOString(), updatedAt: new Date(Date.now() - 172800000).toISOString() }, { id: this.generateId(), name: "唐代金银器", imageUrl: "https://images.unsplash.com/photo-1578662996442-48f60103fc96?w=400&h=300&fit=crop", description: "唐代金银器,工艺精湛,具有重要历史价值", tags: ["古董", "金银器", "唐代"], createdAt: new Date(Date.now() - 259200000).toISOString(), updatedAt: new Date(Date.now() - 259200000).toISOString() }, { id: this.generateId(), name: "现代艺术画作", imageUrl: "https://images.unsplash.com/photo-1579783902614-a3fb3927b6a5?w=400&h=300&fit=crop", description: "当代知名艺术家作品,抽象风格,色彩丰富", tags: ["艺术品", "现代艺术", "画作"], createdAt: new Date(Date.now() - 345600000).toISOString(), updatedAt: new Date(Date.now() - 345600000).toISOString() }, { id: this.generateId(), name: "古代青铜器", imageUrl: "https://images.unsplash.com/photo-1605883705077-8d3d848f8a9d?w=400&h=300&fit=crop", description: "商周时期青铜器,纹饰精美,保存完好", tags: ["古董", "青铜器", "商周"], createdAt: new Date(Date.now() - 432000000).toISOString(), updatedAt: new Date(Date.now() - 432000000).toISOString() } ]; this.items = sampleItems; this.saveItems(); this.renderItems(); this.updateStats(); } } // 生成唯一ID generateId() { return Date.now().toString(36) + Math.random().toString(36).substr(2); } // 添加物品 addItem() { const name = document.getElementById('item-name').value.trim(); const imageUrl = document.getElementById('item-image').value.trim(); const description = document.getElementById('item-description').value.trim(); const tags = document.getElementById('item-tags').value.trim(); if (!name || !imageUrl) { this.showNotification('请填写必填项', 'error'); return; } const newItem = { id: this.generateId(), name, imageUrl, description, tags: tags ? tags.split(',').map(tag => tag.trim()).filter(tag => tag) : [], createdAt: new Date().toISOString(), updatedAt: new Date().toISOString() }; this.items.unshift(newItem); this.saveItems(); this.renderItems(); this.updateStats(); // 清空表单 document.getElementById('add-item-form').reset(); this.showNotification('物品添加成功', 'success'); } // 编辑物品 editItem(itemId) { const item = this.items.find(i => i.id === itemId); if (!item) return; document.getElementById('edit-item-id').value = item.id; document.getElementById('edit-item-name').value = item.name; document.getElementById('edit-item-image').value = item.imageUrl; document.getElementById('edit-item-description').value = item.description || ''; document.getElementById('edit-item-tags').value = item.tags ? item.tags.join(', ') : ''; document.getElementById('edit-modal').classList.remove('hidden'); document.getElementById('edit-modal').classList.add('flex'); } // 更新物品 updateItem() { const itemId = document.getElementById('edit-item-id').value; const item = this.items.find(i => i.id === itemId); if (!item) return; item.name = document.getElementById('edit-item-name').value.trim(); item.imageUrl = document.getElementById('edit-item-image').value.trim(); item.description = document.getElementById('edit-item-description').value.trim(); const tags = document.getElementById('edit-item-tags').value.trim(); item.tags = tags ? tags.split(',').map(tag => tag.trim()).filter(tag => tag) : []; item.updatedAt = new Date().toISOString(); this.saveItems(); this.renderItems(); this.closeEditModal(); this.showNotification('物品更新成功', 'success'); } // 关闭编辑模态框 closeEditModal() { document.getElementById('edit-modal').classList.add('hidden'); document.getElementById('edit-modal').classList.remove('flex'); } // 删除物品 deleteItem(itemId) { if (confirm('确定要删除这个物品吗?')) { this.items = this.items.filter(item => item.id !== itemId); this.saveItems(); this.renderItems(); this.updateStats(); this.showNotification('物品删除成功', 'success'); } } // 渲染物品列表 renderItems() { const grid = document.getElementById('items-grid'); const emptyState = document.getElementById('empty-state'); if (this.items.length === 0) { grid.innerHTML = ''; emptyState.classList.remove('hidden'); return; } emptyState.classList.add('hidden'); const filteredItems = this.getFilteredItems(); grid.innerHTML = filteredItems.map(item => `
${item.description || '暂无描述'}