Files
Nexus/docs/design/specs/2026-06-08-schedule-cycle-picker-design.md
2026-07-08 22:31:31 +08:00

1.6 KiB
Raw Permalink Blame History

调度执行周期可视化 — 设计

背景

新建/编辑调度时要求手工填写 5 字段 Cron,运维成本高且易错。宝塔面板(aaPanel)通过「执行周期」下拉 + 参数表单生成 Cron,体验更直观。

目标

  • 循环调度:用「执行周期」选择器替代 Cron 文本框
  • 一次性调度:保留「指定日期(年-月-日 时:分)」
  • 列表展示人类可读周期标签,底层仍存 cron_expr
  • 与现有 schedule_runner 完全兼容,不改 DB schema

方案

周期类型 宝塔 type 生成 Cron
每天 day {分} {时} * * *
每 N 天 day-n {分} {时} */{N} * *
每小时 hour {分} * * * *
每 N 小时 hour-n {分} */{N} * * *
每 N 分钟 minute-n */{N} * * * *

不含「每 N 秒」runner 60s 轮询,秒级 Cron 与 minute-n 无法 roundtrip;最短周期为 1 分钟。 | 每周 | week | {分} {时} * * {周} | | 每月 | month | {分} {时} {日} * * |

秒级:runner 60s 轮询,不提供「每 N 秒」(与 minute-n Cron 无法 roundtrip);最短 1 分钟

无法反解析的历史 Cron → custom 模式保留原表达式编辑。

涉及文件

  • frontend/src/utils/scheduleCycle.ts
  • frontend/src/components/schedules/ScheduleCyclePicker.vue
  • frontend/src/pages/SchedulesPage.vue
  • server/utils/schedule_cycle.py(单测镜像)

验收

  • 新建各类型周期 → 保存 → 列表显示中文标签 → runner 可触发
  • 编辑已有 Cron 调度 → 反解析为对应表单
  • 无法识别的 Cron → 自定义模式可保存