🐛 修复定时任务日志和执行问题

- 修复日志按钮点击无反应(类型匹配和错误处理)
- 修复定时任务到时间不执行(时间格式标准化)
- 增强所有检查点的调试日志输出
- 改进今日执行检查逻辑(支持同一天不同时间执行)

Bug 1: 日志按钮完全没反应
- 将严格相等(===)改为宽松相等(==)避免类型不匹配
- 添加详细的错误日志和用户提示
- 添加容器元素存在性检查

Bug 2: 定时任务到时间不会被执行
- 标准化时间格式(8:00 -> 08:00)
- 增强所有检查点的日志输出(时间、星期、账号)
- 改进今日执行检查(同一天不同时间可再次执行)
- 前端添加时间格式验证和标准化

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-10 19:10:59 +08:00
parent 8e5a5cb679
commit 226d6724bd
2 changed files with 95 additions and 20 deletions

View File

@@ -1282,7 +1282,23 @@
function saveSchedule() {
const name = document.getElementById('scheduleName').value.trim() || '我的定时任务';
const scheduleTime = document.getElementById('scheduleTime').value;
const scheduleTimeRaw = document.getElementById('scheduleTime').value;
// 标准化时间格式为 HH:MM
const timeParts = scheduleTimeRaw.match(/^(\d{1,2}):(\d{2})$/);
if (!timeParts) {
showToast('时间格式错误请使用HH:MM格式', 'error');
return;
}
const hour = parseInt(timeParts[1], 10);
const minute = parseInt(timeParts[2], 10);
if (hour < 0 || hour > 23 || minute < 0 || minute > 59) {
showToast('时间范围错误', 'error');
return;
}
const scheduleTime = hour.toString().padStart(2, '0') + ':' + minute.toString().padStart(2, '0');
console.log('[定时任务] 标准化时间:', scheduleTimeRaw, '->', scheduleTime);
const browseType = document.getElementById('scheduleBrowseType').value;
const enableScreenshot = document.getElementById('scheduleScreenshot').checked ? 1 : 0;
const weekdays = [];
@@ -1305,11 +1321,17 @@
}
function viewScheduleLogs(scheduleId) {
console.log('[日志弹窗] 开始查看日志, scheduleId=', scheduleId);
console.log('[日志弹窗] 开始查看日志, scheduleId=', scheduleId, '(类型:', typeof scheduleId + ')');
console.log('[日志弹窗] 当前schedules数组:', schedules);
const schedule = schedules.find(s => s.id === scheduleId);
// 类型转换确保兼容性
const numericId = parseInt(scheduleId, 10);
const schedule = schedules.find(s => s.id == numericId); // 使用宽松相等
if (!schedule) {
console.log('[日志弹窗] 未找到任务');
console.error('[日志弹窗] 未找到任务, scheduleId=', scheduleId);
console.error('[日志弹窗] 可用的任务IDs:', schedules.map(s => s.id));
showToast('未找到该定时任务', 'error');
return;
}
@@ -1317,7 +1339,7 @@
document.getElementById("scheduleLogsTitle").textContent = "【" + (schedule.name || "未命名任务") + "】 执行日志";
console.log('[日志弹窗] 开始请求API');
fetch("/api/schedules/" + scheduleId + "/logs?limit=20")
fetch("/api/schedules/" + numericId + "/logs?limit=20")
.then(r => {
console.log('[日志弹窗] API响应状态:', r.status);
return r.json();
@@ -1326,6 +1348,12 @@
console.log('[日志弹窗] 收到日志数据:', logs);
const container = document.getElementById("scheduleLogsList");
if (!container) {
console.error('[日志弹窗] 找不到日志容器元素 scheduleLogsList');
showToast('页面元素加载异常', 'error');
return;
}
if (!logs || logs.length === 0) {
console.log('[日志弹窗] 无日志,显示空状态');
container.innerHTML = "<div class=\"empty-state\"><p>暂无执行日志</p></div>";