feat: 新增定时任务功能
This commit is contained in:
449
Cron-Development-Plan.md
Normal file
449
Cron-Development-Plan.md
Normal file
@@ -0,0 +1,449 @@
|
||||
# zn-ai 定时任务(Cron)功能开发计划
|
||||
|
||||
## 项目概述
|
||||
|
||||
基于ClawX项目的定时任务功能分析,制定zn-ai项目的功能迁移开发计划。目标是在zn-ai项目中实现类似的定时任务管理功能,保持核心功能一致性,同时适配zn-ai的技术栈(Vue 3 + Element Plus + Pinia + Tailwind CSS)。
|
||||
|
||||
## 核心目标
|
||||
|
||||
1. **实现定时任务管理**:创建、编辑、删除、启用/禁用定时任务
|
||||
2. **支持调度配置**:预设调度和自定义Cron表达式
|
||||
3. **提供基础交付模式**:至少支持"仅应用内"模式
|
||||
4. **集成现有架构**:与zn-ai现有状态管理、API通信、国际化系统集成
|
||||
5. **保持UI一致性**:使用Element Plus和现有设计模式
|
||||
|
||||
## 技术约束
|
||||
|
||||
- **前端框架**:Vue 3 Composition API
|
||||
- **状态管理**:Pinia
|
||||
- **UI组件库**:Element Plus + Tailwind CSS
|
||||
- **国际化**:Vue I18n
|
||||
- **API通信**:现有`hostApiFetch` IPC机制
|
||||
- **后端集成**:需评估现有任务调度能力,必要时实现简化版本
|
||||
|
||||
## 开发原则
|
||||
|
||||
1. **分阶段实施**:优先核心功能,逐步增强
|
||||
2. **渐进式增强**:先实现基本功能,再添加高级特性
|
||||
3. **代码复用**:尽可能复用现有组件和工具函数
|
||||
4. **类型安全**:使用TypeScript确保类型安全
|
||||
5. **测试驱动**:关键功能编写单元测试
|
||||
|
||||
## 阶段一:基础架构与类型定义
|
||||
|
||||
### 目标
|
||||
建立定时任务功能的基础架构,包括类型定义、状态管理和API接口。
|
||||
|
||||
### 任务清单
|
||||
|
||||
#### 1.1 创建类型定义文件
|
||||
- **文件**:`src/lib/cron-types.ts`
|
||||
- **内容**:
|
||||
- 复制并适配ClawX的`CronJob`、`CronJobCreateInput`、`CronJobDelivery`等核心类型
|
||||
- 根据zn-ai需求调整类型定义(如简化交付配置)
|
||||
- 添加必要的工具类型和类型守卫
|
||||
- **依赖**:无
|
||||
- **预估工时**:2小时
|
||||
|
||||
#### 1.2 创建Pinia Store
|
||||
- **文件**:`src/store/cron.ts`
|
||||
- **内容**:
|
||||
- 定义store状态:`jobs`、`loading`、`error`
|
||||
- 实现操作:`fetchJobs`、`createJob`、`updateJob`、`deleteJob`、`toggleJob`、`triggerJob`
|
||||
- 使用现有`hostApiFetch`进行API调用
|
||||
- 添加适当的错误处理和状态管理
|
||||
- **依赖**:`cron-types.ts`、`hostApiFetch`
|
||||
- **预估工时**:4小时
|
||||
|
||||
#### 1.3 创建API接口占位
|
||||
- **文件**:更新现有API服务或创建`src/lib/cron-api.ts`
|
||||
- **内容**:
|
||||
- 定义API端点常量
|
||||
- 创建API函数包装器(如果现有`hostApiFetch`不足)
|
||||
- 添加模拟数据用于开发测试
|
||||
- **依赖**:`hostApiFetch`、`cron-types.ts`
|
||||
- **预估工时**:3小时
|
||||
|
||||
#### 1.4 创建国际化文件
|
||||
- **文件**:`src/i18n/locales/{zh,en,ja}/cron.json`
|
||||
- **内容**:
|
||||
- 翻译ClawX的cron.json文件
|
||||
- 适配zn-ai的翻译键命名约定
|
||||
- 确保所有UI文本都有翻译键
|
||||
- **依赖**:ClawX翻译文件
|
||||
- **预估工时**:2小时
|
||||
|
||||
#### 1.5 更新国际化配置
|
||||
- **文件**:`src/i18n/constants.ts`、`src/i18n/index.ts`
|
||||
- **内容**:
|
||||
- 添加cron命名空间到`NAMESPACES`数组
|
||||
- 确保翻译文件正确加载
|
||||
- **依赖**:国际化文件
|
||||
- **预估工时**:1小时
|
||||
|
||||
### 交付成果
|
||||
- 完整的类型定义系统
|
||||
- 可工作的Pinia store(带模拟数据)
|
||||
- 国际化支持
|
||||
- 基础API接口层
|
||||
|
||||
### 阶段验收标准
|
||||
- TypeScript编译无错误
|
||||
- Store基本操作可通过模拟数据工作
|
||||
- 国际化文件正确加载
|
||||
- 代码符合项目代码规范
|
||||
|
||||
## 阶段二:核心UI组件开发
|
||||
|
||||
### 目标
|
||||
开发定时任务功能的核心用户界面组件。
|
||||
|
||||
### 任务清单
|
||||
|
||||
#### 2.1 创建主页面组件
|
||||
- **文件**:`src/pages/cron/index.vue`
|
||||
- **内容**:
|
||||
- 页面布局和结构
|
||||
- 集成统计卡片区域
|
||||
- 任务列表展示区域
|
||||
- 空状态处理
|
||||
- 加载状态和错误显示
|
||||
- 创建任务按钮
|
||||
- **依赖**:Cron store、国际化
|
||||
- **预估工时**:6小时
|
||||
|
||||
#### 2.2 创建任务卡片组件
|
||||
- **文件**:`src/pages/cron/components/CronJobCard.vue`
|
||||
- **内容**:
|
||||
- 任务信息展示(名称、调度、消息预览)
|
||||
- 状态指示器(启用/禁用)
|
||||
- 操作按钮(运行、编辑、删除)
|
||||
- 最后运行状态显示
|
||||
- 下次运行时间显示
|
||||
- 悬停和交互效果
|
||||
- **依赖**:Cron store、国际化、Element Plus组件
|
||||
- **预估工时**:5小时
|
||||
|
||||
#### 2.3 创建任务对话框组件
|
||||
- **文件**:`src/pages/cron/components/CronTaskDialog.vue`
|
||||
- **内容**:
|
||||
- 表单布局和字段(名称、消息、调度、交付模式等)
|
||||
- 预设调度选择器
|
||||
- 自定义Cron表达式输入
|
||||
- 表单验证和错误提示
|
||||
- 调度预览(下一次运行时间)
|
||||
- 提交和取消按钮
|
||||
- **依赖**:Element Plus表单组件、Cron store、国际化
|
||||
- **预估工时**:8小时
|
||||
|
||||
#### 2.4 创建统计卡片组件
|
||||
- **文件**:`src/pages/cron/components/CronStats.vue`(或复用现有模式)
|
||||
- **内容**:
|
||||
- 总任务数卡片
|
||||
- 活跃任务卡片
|
||||
- 暂停任务卡片
|
||||
- 失败任务卡片
|
||||
- 响应式布局
|
||||
- **依赖**:Cron store、国际化、Tailwind CSS
|
||||
- **预估工时**:3小时
|
||||
|
||||
#### 2.5 创建工具函数
|
||||
- **文件**:`src/pages/cron/utils.ts`
|
||||
- **内容**:
|
||||
- Cron表达式解析和格式化函数
|
||||
- 下一次运行时间预估函数
|
||||
- 时间格式化辅助函数
|
||||
- 交付模式处理函数
|
||||
- **依赖**:`cron-types.ts`
|
||||
- **预估工时**:4小时
|
||||
|
||||
### 交付成果
|
||||
- 完整的用户界面组件
|
||||
- 响应式布局和设计
|
||||
- 基本的用户交互
|
||||
- 表单验证和反馈
|
||||
|
||||
### 阶段验收标准
|
||||
- 所有组件可独立渲染
|
||||
- 表单验证正常工作
|
||||
- 响应式设计适配不同屏幕尺寸
|
||||
- 与现有设计风格一致
|
||||
|
||||
## 阶段三:功能集成与数据绑定
|
||||
|
||||
### 目标
|
||||
将UI组件与store和API集成,实现完整的功能流程。
|
||||
|
||||
### 任务清单
|
||||
|
||||
#### 3.1 集成Store到主页面
|
||||
- **内容**:
|
||||
- 连接主页面与Cron store
|
||||
- 实现数据加载和状态管理
|
||||
- 添加刷新功能
|
||||
- 处理空状态和错误状态
|
||||
- **依赖**:阶段一和二的成果
|
||||
- **预估工时**:3小时
|
||||
|
||||
#### 3.2 实现任务操作集成
|
||||
- **内容**:
|
||||
- 连接任务卡片操作按钮到store方法
|
||||
- 实现启用/禁用切换
|
||||
- 实现立即触发功能
|
||||
- 实现删除功能(带确认)
|
||||
- **依赖**:Cron store、Element Plus MessageBox
|
||||
- **预估工时**:4小时
|
||||
|
||||
#### 3.3 实现对话框表单提交
|
||||
- **内容**:
|
||||
- 连接对话框表单到store创建/更新方法
|
||||
- 实现表单数据验证
|
||||
- 添加提交状态反馈
|
||||
- 处理成功/失败场景
|
||||
- **依赖**:Cron store、Element Plus表单验证
|
||||
- **预估工时**:5小时
|
||||
|
||||
#### 3.4 实现调度预览功能
|
||||
- **内容**:
|
||||
- 实时计算并显示下一次运行时间
|
||||
- 支持预设调度和自定义Cron表达式
|
||||
- 添加时间格式化
|
||||
- **依赖**:Cron工具函数
|
||||
- **预估工时**:3小时
|
||||
|
||||
#### 3.5 添加加载状态和反馈
|
||||
- **内容**:
|
||||
- 全局加载状态管理
|
||||
- 操作反馈(成功/错误toast)
|
||||
- 网络错误处理
|
||||
- 数据缓存策略
|
||||
- **依赖**:Element Plus反馈组件、Cron store
|
||||
- **预估工时**:3小时
|
||||
|
||||
#### 3.6 集成路由和导航
|
||||
- **文件**:`src/router/index.ts`
|
||||
- **内容**:
|
||||
- 添加定时任务页面路由
|
||||
- 更新侧边栏菜单(如果需要)
|
||||
- 添加路由守卫(如果需要)
|
||||
- **依赖**:主页面组件
|
||||
- **预估工时**:2小时
|
||||
|
||||
### 交付成果
|
||||
- 完整的功能流程
|
||||
- 实时数据绑定
|
||||
- 用户操作反馈
|
||||
- 错误处理和恢复
|
||||
|
||||
### 阶段验收标准
|
||||
- 可以完整执行创建、编辑、删除任务流程
|
||||
- 所有操作有适当的反馈
|
||||
- 数据实时同步
|
||||
- 错误场景得到妥善处理
|
||||
|
||||
## 阶段四:测试、优化与完善
|
||||
|
||||
### 目标
|
||||
确保功能质量,优化性能,添加高级特性。
|
||||
|
||||
### 任务清单
|
||||
|
||||
#### 4.1 编写单元测试
|
||||
- **文件**:`tests/unit/cron-store.test.ts`、`tests/unit/cron-utils.test.ts`
|
||||
- **内容**:
|
||||
- Store逻辑单元测试
|
||||
- 工具函数单元测试
|
||||
- 组件逻辑单元测试
|
||||
- **依赖**:Vue Test Utils、Vitest
|
||||
- **预估工时**:6小时
|
||||
|
||||
#### 4.2 添加集成测试
|
||||
- **文件**:`tests/e2e/cron.spec.ts`
|
||||
- **内容**:
|
||||
- 完整用户流程测试
|
||||
- 表单验证测试
|
||||
- 错误场景测试
|
||||
- **依赖**:Playwright或Cypress
|
||||
- **预估工时**:5小时
|
||||
|
||||
#### 4.3 性能优化
|
||||
- **内容**:
|
||||
- 虚拟滚动(如果任务数量多)
|
||||
- 数据缓存优化
|
||||
- 减少不必要的重新渲染
|
||||
- 代码分割和懒加载
|
||||
- **预估工时**:4小时
|
||||
|
||||
#### 4.4 可访问性改进
|
||||
- **内容**:
|
||||
- 添加ARIA属性
|
||||
- 键盘导航支持
|
||||
- 屏幕阅读器优化
|
||||
- 颜色对比度检查
|
||||
- **预估工时**:3小时
|
||||
|
||||
#### 4.5 高级功能增强
|
||||
- **内容**:
|
||||
- 任务导入/导出功能
|
||||
- 批量操作支持
|
||||
- 任务执行历史查看
|
||||
- 高级调度选项(时区支持等)
|
||||
- **预估工时**:8小时(可选)
|
||||
|
||||
#### 4.6 文档编写
|
||||
- **内容**:
|
||||
- 组件API文档
|
||||
- 用户使用指南
|
||||
- 开发指南
|
||||
- **预估工时**:3小时
|
||||
|
||||
### 交付成果
|
||||
- 完整的测试覆盖
|
||||
- 优化后的性能
|
||||
- 可访问性支持
|
||||
- 可选的高级功能
|
||||
|
||||
### 阶段验收标准
|
||||
- 关键路径测试覆盖率达到80%以上
|
||||
- 性能指标符合要求
|
||||
- 通过可访问性检查
|
||||
- 代码质量通过审查
|
||||
|
||||
## 时间总览
|
||||
|
||||
| 阶段 | 任务数 | 预估工时 | 累计工时 |
|
||||
|------|--------|----------|----------|
|
||||
| 阶段一 | 5 | 12小时 | 12小时 |
|
||||
| 阶段二 | 5 | 26小时 | 38小时 |
|
||||
| 阶段三 | 6 | 20小时 | 58小时 |
|
||||
| 阶段四 | 6 | 29小时 | 87小时 |
|
||||
| **总计** | **22** | **87小时** | **87小时** |
|
||||
|
||||
*注:阶段四的高级功能增强为可选,如不包括则总工时为79小时*
|
||||
|
||||
## 风险与缓解措施
|
||||
|
||||
### 技术风险
|
||||
|
||||
#### 风险1:后端调度引擎缺失
|
||||
- **描述**:zn-ai可能没有现成的任务调度引擎
|
||||
- **影响**:核心功能无法实现
|
||||
- **概率**:中
|
||||
- **缓解措施**:
|
||||
1. 评估现有`electron/process/`目录中的任务执行能力
|
||||
2. 实现简化版的Node.js调度器(使用`node-cron`或`node-schedule`)
|
||||
3. 与Gateway功能解耦,设计可插拔的后端接口
|
||||
|
||||
#### 风险2:频道系统不兼容
|
||||
- **描述**:zn-ai的频道系统与ClawX的频道系统完全不同
|
||||
- **影响**:交付功能无法直接迁移
|
||||
- **概率**:高
|
||||
- **缓解措施**:
|
||||
1. 阶段一评估现有频道系统能力
|
||||
2. 先实现"仅应用内"模式
|
||||
3. 设计适配器层,未来集成现有频道系统
|
||||
4. 简化交付配置,仅支持基本功能
|
||||
|
||||
#### 风险3:Cron表达式复杂性
|
||||
- **描述**:Cron表达式解析和验证复杂
|
||||
- **影响**:用户输入错误导致任务不执行
|
||||
- **概率**:低
|
||||
- **缓解措施**:
|
||||
1. 使用成熟的Cron解析库(如`cron-parser`)
|
||||
2. 提供预设调度选项,减少用户直接输入
|
||||
3. 添加实时验证和预览
|
||||
|
||||
### 资源风险
|
||||
|
||||
#### 风险1:开发时间不足
|
||||
- **描述**:预估工时可能低估
|
||||
- **影响**:项目延期
|
||||
- **概率**:中
|
||||
- **缓解措施**:
|
||||
1. 优先实现核心功能(阶段一至三)
|
||||
2. 阶段四作为后续迭代
|
||||
3. 定期进度评估和调整
|
||||
|
||||
#### 风险2:技能匹配问题
|
||||
- **描述**:开发人员对Vue 3或Element Plus不熟悉
|
||||
- **影响**:开发效率低下
|
||||
- **概率**:低
|
||||
- **缓解措施**:
|
||||
1. 提供代码示例和参考实现
|
||||
2. 复用现有组件模式
|
||||
3. 代码审查和结对编程
|
||||
|
||||
## 成功标准
|
||||
|
||||
### 功能成功标准
|
||||
1. 用户可以创建、编辑、删除定时任务
|
||||
2. 任务可以按预定调度执行
|
||||
3. 用户界面直观易用
|
||||
4. 系统稳定可靠,错误处理得当
|
||||
|
||||
### 技术成功标准
|
||||
1. 代码质量高,符合项目规范
|
||||
2. 测试覆盖关键功能路径
|
||||
3. 性能满足要求
|
||||
4. 可维护性和可扩展性好
|
||||
|
||||
### 业务成功标准
|
||||
1. 功能满足用户需求
|
||||
2. 用户体验良好
|
||||
3. 与现有系统集成顺畅
|
||||
4. 为未来扩展奠定基础
|
||||
|
||||
## 下一步行动
|
||||
|
||||
1. **需求确认**:与相关方确认功能范围和优先级
|
||||
2. **技术评估**:详细评估后端调度能力
|
||||
3. **环境准备**:设置开发环境和测试数据
|
||||
4. **开始实施**:按照阶段一任务开始开发
|
||||
|
||||
## 附录
|
||||
|
||||
### A. 文件结构规划
|
||||
|
||||
```
|
||||
src/
|
||||
├── lib/
|
||||
│ ├── cron-types.ts # 类型定义
|
||||
│ └── cron-api.ts # API接口(可选)
|
||||
├── store/
|
||||
│ └── cron.ts # Pinia store
|
||||
├── pages/
|
||||
│ └── cron/
|
||||
│ ├── components/
|
||||
│ │ ├── CronJobCard.vue
|
||||
│ │ ├── CronTaskDialog.vue
|
||||
│ │ └── CronStats.vue
|
||||
│ ├── utils.ts # 工具函数
|
||||
│ └── index.vue # 主页面
|
||||
└── i18n/
|
||||
└── locales/
|
||||
├── zh/
|
||||
│ └── cron.json
|
||||
├── en/
|
||||
│ └── cron.json
|
||||
└── ja/
|
||||
└── cron.json
|
||||
```
|
||||
|
||||
### B. 依赖库评估
|
||||
|
||||
1. **Cron解析**:`cron-parser`(成熟、稳定、TypeScript支持)
|
||||
2. **时间处理**:使用原生Date对象或`day.js`(如果项目已使用)
|
||||
3. **UI组件**:Element Plus(项目已使用)
|
||||
4. **状态管理**:Pinia(项目已使用)
|
||||
|
||||
### C. 与现有系统集成点
|
||||
|
||||
1. **用户认证**:使用现有用户会话
|
||||
2. **API通信**:使用现有`hostApiFetch`机制
|
||||
3. **错误处理**:集成现有错误处理系统
|
||||
4. **主题系统**:支持现有明暗主题
|
||||
5. **路由系统**:集成现有路由配置
|
||||
|
||||
---
|
||||
|
||||
*本计划将根据实际情况进行迭代更新。建议每阶段结束后进行回顾和调整。*
|
||||
Reference in New Issue
Block a user