-
Notifications
You must be signed in to change notification settings - Fork 3
Closed
Description
背景
活动规划模块已具备基础数据模型,但缺乏对 SOP(标准操作流程)的完整支持:
- 模板条目缺少 SOP 级属性(必填标记、负责角色、时间偏移量、估时、参考链接)
- 活动实例的清单条目缺少说明文本、是否必填、负责角色、完成时间戳
- 创建活动时无法选择 SOP 模板
- 活动详情页无法手动增删改清单条目
- 缺少专门的 SOP 模板管理页面
需求描述
后端
数据模型扩展
ChecklistTemplateItem 新增字段:
is_mandatory: bool— 是否必须完成responsible_role: str— 负责角色deadline_offset_days: int— 相对活动日期的偏移天数(负数=活动前,正数=活动后)estimated_hours: float— 预计耗时(小时)reference_url: str— 参考资料链接
ChecklistItem 新增字段:
description: text— 操作说明/指引is_mandatory: bool— 是否必须完成responsible_role: str— 负责角色completed_at: datetime— 完成时间戳(标记为done时自动设置)
API 新增/变更
| 方法 | 路径 | 说明 |
|---|---|---|
POST |
/events/{id}/checklist |
手动创建清单项 |
DELETE |
/events/{id}/checklist/{item_id} |
删除清单项 |
POST |
/event-templates/{id}/items |
为模板添加条目 |
PATCH |
/event-templates/{id}/items/{item_id} |
更新模板条目 |
DELETE |
/event-templates/{id}/items/{item_id} |
删除模板条目 |
DELETE |
/event-templates/{id} |
删除模板 |
变更逻辑:
- 从模板创建活动时,根据
deadline_offset_days自动计算due_date - 将清单项状态改为
done时,自动写入completed_at;改回pending/skipped时清空
前端
1. SOP 模板管理页(新页面 /event-templates)
- 左侧模板列表(卡片,含类型/条目数/公开状态)
- 右侧模板详情编辑区:基本信息 + 清单条目(按会前/会中/会后分组)
- 条目支持拖拽排序(六点把手,hover 显示)
- 条目增删改弹窗
2. 创建活动表单
- 新增 SOP 模板选择器(可选),选择后预览将自动生成的条目数量
3. 活动详情 - 执行清单 Tab
- 顶部操作栏:「添加清单项」+ 「从模板导入」
- 每条清单项支持行内展开说明文本(▶ 按钮),显示
description和参考链接 - 每条清单项 hover 显示「编辑」/「删除」按钮
- 每个阶段标题旁有「添加」快捷按钮(hover 显示)
- 「从模板导入」弹窗:选择模板 → 预览条目列表 → 一键批量导入(自动按偏移量计算 due_date)
4. 侧边栏
- 活动管理改为子菜单,包含「活动列表」和「SOP 模板」入口
验收标准
- 所有新增字段有对应的 Alembic migration
- 新增 API 端点有权限校验(登录必须,模板增删改限创建者或超级用户)
- 活动详情页清单可手动增删改,从模板导入时 due_date 按偏移量计算正确
- SOP 模板管理页可正常增删改模板及条目,条目拖拽排序后持久化
- 测试覆盖新增端点的成功路径、404/401 错误、跨资源隔离
- 前端构建无 TypeScript 错误
相关技术栈
- 后端:FastAPI / SQLAlchemy / Pydantic v2 / Alembic
- 前端:Vue 3 / TypeScript / Element Plus / vuedraggable
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels