const ComplaintsPage = { async render() { return '

加载中...

'; }, async mount() { const container = document.getElementById('page-content'); document.getElementById('page-title').textContent = '投诉列表'; document.getElementById('page-actions').innerHTML = ''; await this.loadList(container); }, async loadList(container, filters = {}) { const params = new URLSearchParams(); if (filters.status) params.set('status', filters.status); if (filters.priority) params.set('priority', filters.priority); if (filters.category) params.set('category', filters.category); if (filters.search) params.set('search', filters.search); const qs = params.toString(); container.innerHTML = '

加载中...

'; try { const complaints = await API.get('/complaints' + (qs ? '?' + qs : '')); this.renderList(container, complaints, filters); } catch (err) { container.innerHTML = `
加载失败: ${err.message}
`; } }, renderList(container, complaints, filters = {}) { container.innerHTML = `
${complaints.length === 0 ? `

暂无投诉记录

` : `
${complaints.map(c => ` `).join('')}
# 标题 玩家 分类 优先级 状态 规划者 实施者 审查者 更新时间 操作
${c.id} ${Utils.escapeHtml(c.title)} ${Utils.escapeHtml(c.player_name)} ${Utils.categoryBadge(c.category)} ${Utils.priorityBadge(c.priority)} ${Utils.statusBadge(c.status)} ${c.planner_name || '-'} ${c.implementer_name || '-'} ${c.reviewer_name || '-'} ${Utils.formatDate(c.updated_at)}
`} `; }, applyFilters() { const filters = { status: document.getElementById('filter-status').value, priority: document.getElementById('filter-priority').value, category: document.getElementById('filter-category').value, search: document.getElementById('filter-search').value, }; const container = document.getElementById('page-content'); this.loadList(container, filters); }, resetFilters() { const container = document.getElementById('page-content'); this.loadList(container, {}); }, showCreateModal() { Utils.openModal('提交投诉', `
`); document.getElementById('create-complaint-form').addEventListener('submit', async (e) => { e.preventDefault(); const btn = e.target.querySelector('button[type="submit"]'); btn.disabled = true; btn.innerHTML = ' 提交中...'; try { await API.post('/complaints', { title: document.getElementById('c-title').value, description: document.getElementById('c-description').value, category: document.getElementById('c-category').value, priority: document.getElementById('c-priority').value, player_name: document.getElementById('c-player_name').value, player_email: document.getElementById('c-player_email').value, player_contact: document.getElementById('c-player_contact').value, }); App.closeModal(); this.mount(); } catch (err) { alert(err.message); btn.disabled = false; btn.innerHTML = ' 提交'; } }); } };