// Filename: frontend/js/pages/logs/index.js import { apiFetchJson } from '../../services/api.js'; import LogList from './logList.js'; class LogsPage { constructor() { this.state = { logs: [], // [修正] 暂时将分页状态设为默认值,直到后端添加分页支持 pagination: { page: 1, pages: 1, total: 0 }, isLoading: true, filters: { page: 1, page_size: 20 } }; this.elements = { tableBody: document.getElementById('logs-table-body'), }; this.initialized = !!this.elements.tableBody; if (this.initialized) { this.logList = new LogList(this.elements.tableBody); } } async init() { if (!this.initialized) { console.error("LogsPage: Could not initialize. Essential container element 'logs-table-body' is missing."); return; } this.initEventListeners(); await this.loadAndRenderLogs(); } initEventListeners() { // 分页和筛选的事件监听器将在后续任务中添加 } async loadAndRenderLogs() { this.state.isLoading = true; this.logList.renderLoading(); try { const url = `/admin/logs?page=${this.state.filters.page}&page_size=${this.state.filters.page_size}`; const responseData = await apiFetchJson(url); // [核心修正] 调整条件以匹配当前 API 返回的 { success: true, data: [...] } 结构 if (responseData && responseData.success && Array.isArray(responseData.data)) { // [核心修正] 直接从 responseData.data 获取日志数组 this.state.logs = responseData.data; // [临时] 由于当前响应不包含分页信息,我们暂时不更新 this.state.pagination // 等待后端完善分页后,再恢复这里的逻辑 this.logList.render(this.state.logs); // this.renderPaginationControls(); } else { console.error("API response for logs is incorrect:", responseData); this.logList.render([]); } } catch (error) { console.error("Failed to load logs:", error); // this.logList.renderError(error); } finally { this.state.isLoading = false; } } } // 导出符合 main.js 规范的 default 函数 export default function() { const page = new LogsPage(); page.init(); }