Skip to content

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

Merged
opensourceways-bot merged 1 commit intoopensourceways:mainfrom
ZhengZhenyu:main
Feb 25, 2026
Merged

feat: 活动管理模块 SOP 清单增强与模板管理#80
opensourceways-bot merged 1 commit intoopensourceways:mainfrom
ZhengZhenyu:main

Conversation

@ZhengZhenyu
Copy link
Collaborator

关联 Issue

Closes #79

变更概述

本 PR 实现了 Issue #79 描述的 SOP 清单全功能增强,覆盖后端模型/API、数据库迁移、前端页面及测试。

主要变更

后端

  • 数据模型扩展models/event.py

    • ChecklistTemplateItem 新增:is_mandatoryresponsible_roledeadline_offset_daysestimated_hoursreference_url
    • ChecklistItem 新增:descriptionis_mandatoryresponsible_rolecompleted_at
  • API 新增api/events.pyapi/event_templates.py

    • POST /events/{id}/checklist — 手动创建清单项
    • DELETE /events/{id}/checklist/{item_id} — 删除清单项
    • POST/PATCH/DELETE /event-templates/{id}/items — 模板条目 CRUD
    • DELETE /event-templates/{id} — 删除模板
    • 修复模板列表/详情/更新的权限校验(仅公开模板或本人创建的私有模板可见)
  • 自动化逻辑

    • 从模板创建活动时,按 deadline_offset_days 自动计算清单项 due_date
    • 清单项状态改为 done 时自动写入 completed_at;改回 pending/skipped 时清空
  • Alembic 迁移:新增两个 migration 文件

前端

  • 新页面 EventTemplates.vue(路由 /event-templates

    • 模板列表 + 详情编辑双栏布局
    • 清单条目拖拽排序(vuedraggable,六点把手,hover 显示)
    • 条目增删改弹窗
  • Events.vue — 创建活动表单新增 SOP 模板选择器

  • EventDetail.vue 执行清单 Tab

    • 手动添加/编辑/删除清单项(弹窗,支持所有 SOP 字段)
    • 「从模板导入」弹窗:预览条目 + 一键批量导入(自动计算 due_date)
    • 条目行内展开说明文本(▶ 按钮)
    • 编辑/删除按钮 hover 显示
  • App.vue — 活动管理改为子菜单,新增 SOP 模板入口

  • frontend/Dockerfilenpm ci + BuildKit 缓存加速,基础镜像固定版本

测试

  • test_events_api.py — 新增 TestChecklistCRUD(12 个用例)、TestChecklistCompletedAt(4 个)、TestCreateEventFromTemplate(4 个)
  • test_event_templates_api.py — 全面覆盖权限、条目 CRUD、删除模板
  • test_upload_api.py — autouse fixture 隔离 boto3/S3 依赖,修复 CI 中的测试失败

测试验证

555 passed, 3 skipped

前端构建无 TypeScript 错误。

测试计划

  • 所有新增端点成功路径、404/401 错误
  • 跨活动清单项隔离验证
  • 从模板创建活动,due_date 按偏移量计算正确
  • 清单项状态变更,completed_at 自动设置/清空
  • 模板权限:私有模板仅创建者可见/修改/删除
  • 前端构建无类型错误

后端:
- ChecklistItem/ChecklistTemplateItem 新增 SOP 字段(is_mandatory、responsible_role、description、reference_url、completed_at、deadline_offset_days、estimated_hours)
- events.py 新增 POST/DELETE /events/{id}/checklist 端点,扩展 ChecklistItemUpdate 字段
- event_templates.py 新增模板条目 CRUD(POST/PATCH/DELETE /event-templates/{id}/items)及模板 DELETE 端点,修复列表/详情/更新权限校验
- 上传测试修复:autouse fixture 隔离 boto3/S3 依赖
- 新增 Alembic migration(sop_fields + reference_url)

前端:
- EventDetail.vue:清单 Tab 支持手动添加/编辑/删除单条清单项;新增「从模板导入」对话框(预览条目 + 按偏移量计算 due_date)
- Events.vue:创建活动表单新增 SOP 模板选择器
- EventTemplates.vue:新建 SOP 模板管理页面,支持条目拖拽排序(vuedraggable)
- App.vue:活动管理改为子菜单,新增 SOP 模板入口
- frontend/Dockerfile:npm ci + BuildKit 缓存加速,基础镜像固定版本
- 路由新增 /event-templates

测试:
- test_events_api.py 新增 TestChecklistCRUD(POST/PATCH/DELETE 全路径)、TestChecklistCompletedAt、TestCreateEventFromTemplate
- test_event_templates_api.py 完整覆盖权限、条目 CRUD、删除模板
@opensourceways-bot
Copy link
Contributor

CLA Signature Pass

ZhengZhenyu, thanks for your pull request. All authors of the commits have signed the CLA. 👍

@sunshuang1866
Copy link
Contributor

/lgtm
/approve

@opensourceways-bot
Copy link
Contributor

Review Code Feedback

  • The label lgtm was added to this pull request. It means that sunshuang1866 reviewed the code changes. 👋
Tips
  • If this pull request is not merged while all conditions are met, comment /check-pr to try again. 😄

@opensourceways-bot
Copy link
Contributor

Review Code Feedback

  • The label approved was added to this pull request. It means that sunshuang1866 reviewed the code changes. 👋
Tips
  • If this pull request is not merged while all conditions are met, comment /check-pr to try again. 😄

@opensourceways-bot
Copy link
Contributor

PR Merge Failed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

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

3 participants