Files
gemini-banlancer/frontend/js/pages/logs/index.js
2025-11-20 12:24:05 +08:00

78 lines
2.6 KiB
JavaScript

// 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();
}