Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录
切换导航
U
ubains-module-test
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
1
议题
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
郑晓兵
ubains-module-test
Commits
633da268
提交
633da268
authored
7月 21, 2026
作者:
陈泽健
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
docs(service-monitor): 定时任务弹窗优化 PRD 文档
Co-Authored-By:
Claude
<
noreply@anthropic.com
>
上级
9d887980
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
211 行增加
和
0 行删除
+211
-0
PRD_计划执行_定时任务弹窗优化.md
Docs/需求文档/服务监测/PRD_计划执行_定时任务弹窗优化.md
+73
-0
PRD_需求文档_定时任务弹窗优化.md
Docs/需求文档/服务监测/PRD_需求文档_定时任务弹窗优化.md
+138
-0
没有找到文件。
Docs/需求文档/服务监测/PRD_计划执行_定时任务弹窗优化.md
0 → 100644
浏览文件 @
633da268
# 计划执行 — 定时任务弹窗交互优化
> 版本:1.0 | 日期:2026-07-21 | 关联 PRD:PRD_需求文档_定时任务弹窗优化.md
---
## 执行步骤
### 步骤 1:后端 schedule_service 增加友好调度字段
**文件**
:
`skill/code/web/service_monitor/services/schedule_service.py`
**改动**
:
1.
`create_schedule()`
— 接收
`repeat_mode`
/
`hour`
/
`minute`
/
`weekdays`
/
`start_date`
/
`end_date`
,自动生成 cron
2.
`update_schedule()`
— 支持更新新字段,重算 cron
3.
新增
`_build_cron(repeat_mode, hour, minute, weekdays)`
纯函数,将友好字段转为 cron 表达式
4.
`_add_job()`
— 传入
`start_date`
/
`end_date`
到
`CronTrigger`
5.
数据模型:schedule 对象新增 6 个字段,保留
`cron`
兼容
6.
兼容旧数据:无
`repeat_mode`
时从 cron 反推(best-effort)
**映射规则**
:
| repeat_mode | cron 生成 |
|-------------|-----------|
|
`daily`
|
`{minute} {hour} * * *`
|
|
`weekday`
|
`{minute} {hour} * * 1-5`
|
|
`weekly`
|
`{minute} {hour} * * {weekdays}`
|
**验证**
:Python 语法检查
---
### 步骤 2:前端 schedule.html 弹窗与列表优化
**文件**
:
`skill/code/web/templates/service_monitor/schedule.html`
**改动**
:
1.
**弹窗表单**
:
-
删除 Cron 表达式输入框和预设按钮
-
新增:重复周期单选组(每天/工作日/每周)
-
新增:时/分下拉选择器
-
新增:星期多选按钮组(仅每周模式显示)
-
新增:生效日期/失效日期选择器
2.
**列表**
:
-
"Cron" 列改为"调度周期",显示友好描述
-
有起止日期时追加显示
3.
**JS 逻辑**
:
-
`saveSchedule()`
— 收集新字段发给后端,不再传 cron
-
`openEdit()`
— 从后端数据回填所有字段
-
重复周期切换控制星期区域显隐
-
星期按钮多选交互
4.
**CSS**
:星期按钮样式、单选组样式
**验证**
:浏览器打开测试
---
### 步骤 3:部署验证
1.
部署到 5.60
2.
浏览器访问定时任务页面
3.
创建定时任务:选择"工作日 09:00",确认列表显示"工作日 09:00"
4.
编辑定时任务:确认字段回填正确
5.
设置起止日期:确认保存和显示正确
---
## 风险与兜底
| 风险 | 兜底方案 |
|------|----------|
| 旧数据无 repeat_mode 字段 | 后端从 cron 反推 repeat_mode,best-effort 解析 |
| weekly 模式未选星期 | 前端校验 + 后端校验,至少选 1 天 |
| 起止日期格式 | 后端校验 YYYY-MM-DD,end_date > start_date |
Docs/需求文档/服务监测/PRD_需求文档_定时任务弹窗优化.md
0 → 100644
浏览文件 @
633da268
# PRD — 定时任务弹窗交互优化
> 版本:1.0 | 日期:2026-07-21 | 作者:czj
---
## 1. 背景与问题
当前定时任务创建/编辑弹窗使用
**Cron 表达式**
(如
`0 8 * * *`
)配置调度周期,存在以下问题:
1.
**非技术人员看不懂**
:Cron 表达式是运维/开发专用语法,普通管理员难以理解
2.
**容易写错**
:5 段格式、特殊字符规则复杂,输入错误率高
3.
**缺少起止时间**
:无法设置任务的有效期,任务会无限期执行
4.
**预设不够直观**
:虽然有快捷预设,但仍是填入 Cron 文本,用户不知道选了什么
## 2. 需求目标
将 Cron 表达式替换为
**用户友好的可视化调度配置**
:
-
**重复周期**
:每天 / 工作日 / 每周 — 三种模式覆盖绝大多数场景
-
**时间点**
:时:分 选择器,直观选择执行时间
-
**星期选择**
:每周模式下选择具体星期几
-
**起止日期**
:可选设置任务生效的起止日期
-
**列表展示**
:用自然语言描述替代 Cron 表达式显示
## 3. 功能设计
### 3.1 弹窗表单字段
| 字段 | 控件 | 说明 |
|------|------|------|
| 任务名称 | 文本输入 | 必填,如"每日全量巡检" |
| 监测目标 | 下拉选择 | 必选,从已有目标列表选 |
| 巡检套件 | 下拉选择 | 快速巡检 / 全量巡检 |
|
**重复周期**
|
**单选按钮组**
|
**每天 / 工作日 / 每周**
|
|
**执行时间**
|
**时间选择器**
|
**时(0-23) + 分(0-59)**
|
|
**星期几**
|
**多选按钮**
|
**仅"每周"模式显示,可选周一~周日**
|
|
**生效日期**
|
**日期选择器**
|
**可选,任务开始生效日期**
|
|
**失效日期**
|
**日期选择器**
|
**可选,任务到期后不再执行**
|
### 3.2 重复周期与 Cron 映射
| 重复周期 | 用户选择 | 生成的 Cron | 显示描述 |
|----------|----------|-------------|----------|
| 每天 | 时间 08:00 |
`0 8 * * *`
| 每天 08:00 |
| 工作日 | 时间 09:00 |
`0 9 * * 1-5`
| 工作日 09:00 |
| 每周 | 周一 + 时间 08:00 |
`0 8 * * 1`
| 每周一 08:00 |
| 每周 | 周一、三、五 + 时间 10:30 |
`30 10 * * 1,3,5`
| 每周一、三、五 10:30 |
### 3.3 起止日期逻辑
-
**生效日期**
(start_date):可选,不填则立即生效。APScheduler 的
`start_date`
参数
-
**失效日期**
(end_date):可选,不填则永不过期。APScheduler 的
`end_date`
参数
-
列表显示:如有起止日期,在描述后追加"(2026-07-21 至 2026-12-31)"
### 3.4 列表展示优化
| 原展示 | 新展示 |
|--------|--------|
| Cron 列:
`0 8 * * *`
| 周期列:每天 08:00 |
| Cron 列:
`0 9 * * 1-5`
| 周期列:工作日 09:00 |
| Cron 列:
`30 10 * * 1,3,5`
| 周期列:每周一、三、五 10:30 |
去掉"Cron"列头,改为"调度周期"。
### 3.5 编辑回填
编辑定时任务时,弹窗需从存储的
`repeat_mode`
/
`hour`
/
`minute`
/
`weekdays`
/
`start_date`
/
`end_date`
字段回填,而非反向解析 Cron。
## 4. 数据模型变更
### schedules.json 新增字段
```
json
{
"id"
:
"sched_xxx"
,
"name"
:
"每日全量巡检"
,
"target_id"
:
"tgt_xxx"
,
"target_name"
:
"生产服务器"
,
"suite"
:
"quick"
,
"cron"
:
"0 8 * * *"
,
"repeat_mode"
:
"daily"
,
"hour"
:
8
,
"minute"
:
0
,
"weekdays"
:
[],
"start_date"
:
"2026-07-21"
,
"end_date"
:
"2026-12-31"
,
"enabled"
:
true
,
"next_run_at"
:
"2026-07-22T08:00:00:00"
,
"created_at"
:
"2026-07-21T10:00:00"
,
"created_by"
:
"admin"
}
```
| 字段 | 类型 | 说明 |
|------|------|------|
|
`repeat_mode`
| string |
`daily`
/
`weekday`
/
`weekly`
|
|
`hour`
| int | 执行时间-时(0-23) |
|
`minute`
| int | 执行时间-分(0-59) |
|
`weekdays`
| int
[]
| 星期几(1=周一…7=周日),仅 weekly 模式 |
|
`start_date`
| string
\|
null | 生效日期(YYYY-MM-DD),可选 |
|
`end_date`
| string
\|
null | 失效日期(YYYY-MM-DD),可选 |
> `cron` 字段保留,由后端根据 repeat_mode/hour/minute/weekdays 自动生成,前端不再直接传 cron。
## 5. 交互细节
### 5.1 重复周期切换
-
选择"每天":只显示时间选择器
-
选择"工作日":只显示时间选择器
-
选择"每周":显示时间选择器 + 星期多选按钮组
### 5.2 星期多选按钮
7 个按钮横排:周一 周二 周三 周四 周五 周六 周日
-
选中态:实心蓝色背景 + 白色文字
-
未选态:浅灰背景 + 深灰文字
-
至少选 1 个,否则提示"请选择至少一个星期"
### 5.3 时间选择器
-
小时:下拉 00-23
-
分钟:下拉 00/15/30/45(整刻度,简化选择)
-
也可手动输入任意分钟
### 5.4 起止日期
-
日期选择器(
`<input type="date">`
)
-
生效日期默认为今天
-
失效日期不填则表示永不过期
-
校验:失效日期必须晚于生效日期
## 6. 不做的事
-
不支持"每月"/"自定义 Cron"等高级模式(后续可扩展)
-
不修改 APScheduler 调度逻辑,仅改前端输入和后端字段转换
-
不修改已有定时任务数据(兼容旧数据:无 repeat_mode 字段时仍用 cron 显示)
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论