()
| 302 | } |
| 303 | |
| 304 | async function saveSchedule() { |
| 305 | const btn = document.getElementById('selfcheck-save-schedule-btn'); |
| 306 | const enabledNode = document.getElementById('selfcheck-auto-enabled'); |
| 307 | const intervalNode = document.getElementById('selfcheck-interval-select'); |
| 308 | const modeNode = document.getElementById('selfcheck-auto-mode-select'); |
| 309 | if (!btn || !enabledNode || !intervalNode || !modeNode) return; |
| 310 | |
| 311 | loading.show(btn, '保存中...'); |
| 312 | try { |
| 313 | const payload = { |
| 314 | enabled: Boolean(enabledNode.checked), |
| 315 | interval_minutes: Number(intervalNode.value || 15), |
| 316 | mode: String(modeNode.value || 'quick'), |
| 317 | run_now: false, |
| 318 | }; |
| 319 | const data = await api.post('/selfcheck/schedule', payload); |
| 320 | renderSchedule({ ...payload, runtime: data?.runtime || {} }); |
| 321 | toast.success(data?.message || '保存成功'); |
| 322 | } catch (error) { |
| 323 | toast.error(`保存失败: ${parseErrorMessage(error)}`); |
| 324 | } finally { |
| 325 | loading.hide(btn); |
| 326 | } |
| 327 | } |
| 328 | |
| 329 | async function runNow() { |
| 330 | const btn = document.getElementById('selfcheck-run-now-btn'); |
nothing calls this directly
no test coverage detected