# 计划执行 — 定时任务弹窗交互优化

> 版本：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 |
