/** * 工单管理页面组件 */ export default class WorkOrders { constructor(container, route) { this.container = container; this.route = route; this.currentPage = 1; this.perPage = 20; this.currentStatus = 'all'; this.searchQuery = ''; this.init(); } async init() { try { this.render(); this.bindEvents(); await this.loadWorkOrders(); } catch (error) { console.error('WorkOrders init error:', error); this.showError(error); } } render() { this.container.innerHTML = `
工单列表
共 0 个工单
ID 标题 类别 优先级 状态 创建时间 操作
加载中...
`; } bindEvents() { // 状态筛选 document.getElementById('status-filter').addEventListener('change', () => { this.currentStatus = document.getElementById('status-filter').value; this.currentPage = 1; this.loadWorkOrders(); }); // 搜索 document.getElementById('search-btn').addEventListener('click', () => { this.searchQuery = document.getElementById('search-input').value.trim(); this.currentPage = 1; this.loadWorkOrders(); }); document.getElementById('search-input').addEventListener('keypress', (e) => { if (e.key === 'Enter') { document.getElementById('search-btn').click(); } }); // 新建工单 document.getElementById('create-workorder-btn').addEventListener('click', () => { this.showCreateWorkOrderModal(); }); } async loadWorkOrders() { try { const params = new URLSearchParams({ page: this.currentPage, per_page: this.perPage, status: this.currentStatus, search: this.searchQuery }); const response = await fetch(`/api/workorders?${params}`); const data = await response.json(); if (response.ok && data.success) { this.renderWorkOrders(data.workorders || []); this.renderPagination(data.pagination || {}); document.getElementById('workorder-count').textContent = `共 ${data.total || 0} 个工单`; } else { this.showErrorInTable(data.message || '加载工单失败'); } } catch (error) { console.error('加载工单失败:', error); this.showErrorInTable('网络错误'); } } renderWorkOrders(workorders) { const tbody = document.getElementById('workorders-tbody'); if (workorders.length === 0) { tbody.innerHTML = ` 暂无工单 `; return; } tbody.innerHTML = workorders.map(workorder => { const statusBadge = this.getStatusBadge(workorder.status); const priorityBadge = this.getPriorityBadge(workorder.priority); const createTime = new Date(workorder.created_at).toLocaleString(); return ` ${workorder.order_id || workorder.id}
${workorder.title}
${workorder.description?.substring(0, 50) || ''}... ${workorder.category || '未分类'} ${priorityBadge} ${statusBadge} ${createTime}
`; }).join(''); } renderPagination(pagination) { const nav = document.getElementById('pagination-nav'); const list = document.getElementById('pagination-list'); if (!pagination || pagination.total_pages <= 1) { nav.style.display = 'none'; return; } nav.style.display = 'block'; let html = ''; // 上一页 if (pagination.has_prev) { html += `
  • 上一页
  • `; } // 页码 for (let i = Math.max(1, pagination.page - 2); i <= Math.min(pagination.total_pages, pagination.page + 2); i++) { const activeClass = i === pagination.page ? 'active' : ''; html += `
  • ${i}
  • `; } // 下一页 if (pagination.has_next) { html += `
  • 下一页
  • `; } list.innerHTML = html; } getStatusBadge(status) { const statusMap = { 'open': '待处理', 'in_progress': '处理中', 'resolved': '已解决', 'closed': '已关闭' }; return statusMap[status] || `${status}`; } getPriorityBadge(priority) { const priorityMap = { 'low': '', 'medium': '', 'high': '', 'urgent': '紧急' }; return priorityMap[priority] || `${priority}`; } showErrorInTable(message) { const tbody = document.getElementById('workorders-tbody'); tbody.innerHTML = ` ${message} `; } showCreateWorkOrderModal() { // 这里应该显示创建工单的模态框 if (window.showToast) { window.showToast('创建工单功能开发中', 'info'); } } showError(error) { this.container.innerHTML = `

    页面加载失败

    ${error.message || '未知错误'}

    `; } } // 全局函数供表格操作使用 window.viewWorkOrder = function(id) { if (window.showToast) { window.showToast(`查看工单 ${id} 功能开发中`, 'info'); } }; window.editWorkOrder = function(id) { if (window.showToast) { window.showToast(`编辑工单 ${id} 功能开发中`, 'info'); } }; window.deleteWorkOrder = function(id) { if (confirm(`确定要删除工单 ${id} 吗?`)) { if (window.showToast) { window.showToast('删除功能开发中', 'info'); } } }; window.changePage = function(page) { // 重新加载当前页面实例 const event = new CustomEvent('changePage', { detail: { page } }); document.dispatchEvent(event); };