Skip to content

feat: 活动管理模块 SOP 清单增强与模板管理 #79

@ZhengZhenyu

Description

@ZhengZhenyu

背景

活动规划模块已具备基础数据模型,但缺乏对 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions