文档

社区三种活动模板系统开发需求文档

社区需要建立三种固定活动类型的标准化模板系统,以提高活动组织效率和参与体验

社区三种活动模板系统开发需求文档

1. 概述

1.1 背景

社区需要建立三种固定活动类型的标准化模板系统,以提高活动组织效率和参与体验。三种活动类型分别是:

  1. 迷你黑客松 - 全天学习+开发活动
  2. 客厅 Demo 局 (Demo Day) - 作品展示交流活动
  3. Building Public - 21天线上打卡挑战活动

1.2 核心目标

  • 建立活动模板系统,支持一键创建和模板复用
  • 完善作品提交与活动关联机制
  • 建立电子奖状和奖项管理系统
  • 开发Building Public专用打卡系统
  • 实现押金管理和自动结算机制

2. 三种活动模板详细设计

2.1 迷你黑客松模板

2.1.1 基本配置

  • 活动类型: HACKATHON_LEARNING
  • 时长: 全天 (10:00-18:00)
  • 票种设置: 无票种区分,所有人都是参与者
  • 审核机制: 默认开启成员审核

2.1.2 志愿者角色配置(请复用原来的,我们在超级管理员页面中可以自定义这个志愿者配置)

角色描述招募数量CP奖励
主持人负责活动流程主持和氛围调动1-2人50 CP
场地协助负责场地布置、设备调试等2-3人30 CP
计时员负责各环节时间控制和提醒1人25 CP
签到员负责参与者签到和人员统计1-2人25 CP
技术导师提供技术指导和答疑支持3-5人80 CP

2.1.3 预设流程安排

10:00-10:30  签到和准备时间
10:30-11:00  活动介绍和破冰环节
11:00-12:30  共学时间
12:30-14:00  午餐和休息时间
14:00-17:00  开发时间
17:00-17:30  路演展示时间
17:30-18:00  颁奖和总结环节

2.1.4 预设报名问题

  1. 作品想法: 有什么作品想法想要在活动中实现?
  2. 合作意愿: 是否愿意与其他参与者组队合作?

2.2 Demo Day模板 (客厅 Demo 局)

2.2.1 基本配置

  • 活动类型: DEMO_DAY
  • 时长: 2小时
  • 分享者限制: 默认6位 (注意这个相当于一个票种,可以设置为0,表示不限制)
  • 审核机制: 默认开启成员审核
  • 作品要求: 分享者必须关联作品进行分享

2.2.2 票种配置

票种价格描述权限要求
观众票免费普通观众参与观看、互动、反馈user Profile 必需有至少一个 projects |
分享者票免费作品分享者分享展示、获得反馈必须选择一个 project 跟当前活动关联|
付费观众票¥100起高级观众体验优先座位、茶歇、深度交流无要求

2.2.3 志愿者角色配置(请复用原来的,我们在超级管理员页面中可以自定义这个志愿者配置)

角色描述招募数量CP奖励
主持人控制活动节奏,引导互动1人60 CP
场地协助场地布置、设备调试1-2人30 CP
技术员设备调试、技术支持1人40 CP

2.2.4 预设流程安排

第一阶段 (60分钟):
00:00-00:05  主持人介绍活动规则
00:05-00:35  第一轮分享 (3位分享者 × 10分钟)
00:35-01:00  自由社交和茶歇时间

第二阶段 (60分钟):  
01:00-01:30  第二轮分享 (3位分享者 × 10分钟)
01:30-02:00  总结交流和联系对接

2.2.5 预设报名问题

分享者问题:

  1. 作品选择: 请选择要分享的作品 (关联到用户projects)
  2. 分享重点: 本次主要想展示作品的哪些方面?
  3. 当前进度: 作品当前完成度 (10%-90%)
  4. 寻求反馈: 最希望获得哪方面的反馈?(技术/产品/商业模式等)
  5. 分享时长: 预计演示时间 (5-8分钟)

观众问题:

  1. 参与目的: 参加Demo Day的主要目的?(学习/合作/投资等)

2.3 Building Public模板

2.3.1 基本配置

  • 活动类型: BUILDING_PUBLIC
  • 活动周期: 21天 (可配置)
  • 打卡要求: 6次打卡 (可配置)
  • 押金机制: ¥100押金,完不成退还80%
  • 作品要求: 必须关联开发作品,说明21天开发计划

2.3.2 押金和奖励机制

完成情况押金处理额外奖励
完成≥6次打卡全额退还50 CP + 完成徽章
完成4-5次打卡退还80%20 CP
完成小于4次打卡退还50%-
最佳作品奖全额退还额外100 CP + 特殊徽章

2.3.3 志愿者角色配置(请复用原来的,我们在超级管理员页面中可以自定义这个志愿者配置, 如果没有的话,在数据库中创建)

角色描述招募数量CP奖励
财务核实员核实打卡内容,管理押金结算1-2人80 CP
气氛组主持人活跃社群,督促打卡,组织交流2-3人60 CP

2.3.4 打卡系统设计

  • 打卡方式: 官网提交为主,微信群发送为辅
  • 提交截止: 活动最后一天23:59
  • 内容要求:
    • 本次完成的具体进度
    • 遇到的问题和解决方案
    • 下一步开发计划
    • 作品截图或演示链接(可选)

2.3.5 社交功能

  • 公开性选择: 打卡内容可选择完全公开或仅报名者可见
  • 互动功能: 其他参与者可以点赞、评论、提供建议
  • 评选机制: 根据点赞数和完成质量评选"最佳作品"

3. 核心系统设计

3.1 活动模板系统

3.1.1 数据模型

-- 活动模板表
model EventTemplate {
  id              String          @id @default(cuid())
  name            String          // 模板名称
  type            EventTemplateType // 模板类型
  description     String          // 模板描述
  
  -- 基本活动信息模板
  title           String          // 默认活动标题
  description     String          // 默认活动描述  
  duration        Int?            // 建议时长(分钟)
  maxAttendees    Int?            // 建议最大参与人数
  requireApproval Boolean         @default(false) // 是否需要审核
  
  -- 模板元信息
  isSystemTemplate Boolean        @default(false) // 是否为系统模板
  isActive        Boolean         @default(true)  // 是否启用
  createdBy       String?         // 创建者ID
  organizationId  String?         // 所属组织ID
  
  -- 使用统计
  usageCount      Int             @default(0)     // 使用次数
  
  createdAt       DateTime        @default(now())
  updatedAt       DateTime        @updatedAt
  
  -- Relations
  creator         User?           @relation(fields: [createdBy], references: [id])
  organization    Organization?   @relation(fields: [organizationId], references: [id])
  ticketTypes     EventTemplateTicketType[]
  volunteerRoles  EventTemplateVolunteerRole[]
  questions       EventTemplateQuestion[]
  schedules       EventTemplateSchedule[]
  events          Event[]         // 使用此模板的活动
  
  @@map("event_template")
}

-- 模板票种配置
model EventTemplateTicketType {
  id              String          @id @default(cuid())
  templateId      String
  name            String          // 票种名称
  description     String?         // 票种说明
  price           Float?          // 价格
  maxQuantity     Int?            // 最大数量
  isDefault       Boolean         @default(false) // 是否为默认票种
  sortOrder       Int             @default(0)
  
  template        EventTemplate   @relation(fields: [templateId], references: [id], onDelete: Cascade)
  
  @@map("event_template_ticket_type")
}

-- 模板志愿者角色配置  
model EventTemplateVolunteerRole {
  id              String          @id @default(cuid())
  templateId      String
  volunteerRoleId String
  recruitCount    Int             @default(1)
  description     String?
  requireApproval Boolean         @default(true)
  cpReward        Int             @default(0) // CP奖励
  
  template        EventTemplate   @relation(fields: [templateId], references: [id], onDelete: Cascade)
  volunteerRole   VolunteerRole   @relation(fields: [volunteerRoleId], references: [id])
  
  @@map("event_template_volunteer_role")
}

-- 模板预设问题
model EventTemplateQuestion {
  id              String          @id @default(cuid())
  templateId      String
  question        String
  type            QuestionType
  options         String[]        @default([])
  required        Boolean         @default(false)
  targetRole      String?         // 针对特定角色的问题 (speaker/audience/all)
  order           Int             @default(0)
  
  template        EventTemplate   @relation(fields: [templateId], references: [id], onDelete: Cascade)
  
  @@map("event_template_question")  
}

-- 模板流程安排
model EventTemplateSchedule {
  id              String          @id @default(cuid())
  templateId      String
  title           String          // 环节标题
  description     String?         // 环节描述
  startMinute     Int             // 开始时间(相对分钟)
  duration        Int             // 持续时间(分钟)
  type            ScheduleType    // 环节类型
  order           Int             @default(0)
  
  template        EventTemplate   @relation(fields: [templateId], references: [id], onDelete: Cascade)
  
  @@map("event_template_schedule")
}

enum EventTemplateType {
  HACKATHON_LEARNING  // 迷你黑客松
  DEMO_DAY           // Demo Day
  BUILDING_PUBLIC    // Building Public打卡
  CUSTOM             // 自定义模板
}

enum ScheduleType {
  CHECK_IN           // 签到
  INTRODUCTION       // 介绍
  LEARNING           // 学习
  DEVELOPMENT        // 开发
  DEMO               // 演示
  NETWORKING         // 社交
  AWARD              // 颁奖
  BREAK              // 休息
}

3.1.2 模板功能

创建模板:

  • 从现有活动一键保存为模板
  • 手动创建新模板
  • 设置模板权限和可见性

使用模板:

  • 选择模板创建活动
  • 自动填充基本信息、票种、志愿者角色、问题等
  • 支持在创建过程中修改模板内容

管理模板:

  • 修改模板内容
  • 查看模板使用统计
  • 启用/禁用模板

3.2 作品提交系统

3.2.1 数据模型

-- 活动作品提交表
model EventProjectSubmission {
  id              String              @id @default(cuid())
  eventId         String
  projectId       String
  userId          String              // 提交者
  submissionType  SubmissionType      // 提交类型
  
  -- 提交信息
  title           String              // 提交标题(可与作品标题不同)
  description     String              // 本次提交的描述
  demoUrl         String?             // 演示链接
  sourceCode      String?             // 源码链接
  presentationUrl String?             // 演示文档链接
  
  -- 状态管理
  status          SubmissionStatus    @default(SUBMITTED)
  submittedAt     DateTime            @default(now())
  reviewedAt      DateTime?
  reviewedBy      String?
  reviewNote      String?
  
  -- 评分信息
  judgeScore      Float?              // 评委评分
  audienceScore   Float?              // 观众评分
  finalScore      Float?              // 最终得分
  
  -- 作品快照(提交时的作品状态)
  projectSnapshot Json                // 作品信息快照
  
  createdAt       DateTime            @default(now())
  updatedAt       DateTime            @updatedAt
  
  -- Relations
  event           Event               @relation(fields: [eventId], references: [id], onDelete: Cascade)
  project         Project             @relation(fields: [projectId], references: [id], onDelete: Cascade)
  user            User                @relation(fields: [userId], references: [id], onDelete: Cascade)
  reviewer        User?               @relation("ReviewedSubmissions", fields: [reviewedBy], references: [id])
  awards          ProjectAward[]      // 获得的奖项
  
  @@unique([eventId, projectId]) // 同一活动中同一作品只能提交一次
  @@map("event_project_submission")
}

enum SubmissionType {
  HACKATHON_PROJECT   // 黑客松作品
  DEMO_PROJECT        // Demo演示作品  
  BUILDING_PROJECT    // Building作品
}

enum SubmissionStatus {
  SUBMITTED           // 已提交
  UNDER_REVIEW        // 审核中
  APPROVED            // 已通过
  REJECTED            // 已拒绝
  AWARDED             // 已获奖
}

3.2.2 作品提交流程

迷你黑客松:

  1. 参与者在17:00前必须提交作品
  2. 系统自动创建作品记录(如果不存在)
  3. 关联到当前活动
  4. 路演环节根据提交的作品进行展示

Demo Day:

  1. 分享者在报名时关联已有作品
  2. 活动当天可以更新作品信息
  3. 分享结束后自动创建提交记录

Building Public:

  1. 报名时必须说明要开发的作品
  2. 每次打卡更新作品进度
  3. 21天结束后自动创建最终提交记录

3.3 电子奖状和奖项管理系统

3.3.1 数据模型

-- 奖项表
model Award {
  id              String          @id @default(cuid())
  name            String          // 奖项名称
  description     String          // 奖项描述
  category        AwardCategory   // 奖项类别
  level           AwardLevel      // 奖项级别
  
  -- 视觉设计
  iconUrl         String?         // 奖项图标
  badgeUrl        String?         // 徽章图片
  certificateTemplate String?     // 证书模板
  color           String?         // 主题色彩
  
  -- 奖项设置
  isActive        Boolean         @default(true)
  cpReward        Int             @default(0) // CP奖励
  sortOrder       Int             @default(0)
  
  -- 元信息
  createdBy       String?         // 创建者
  organizationId  String?         // 所属组织
  
  createdAt       DateTime        @default(now())
  updatedAt       DateTime        @updatedAt
  
  -- Relations
  creator         User?           @relation(fields: [createdBy], references: [id])
  organization    Organization?   @relation(fields: [organizationId], references: [id])
  projectAwards   ProjectAward[]  // 作品获奖记录
  
  @@map("award")
}

-- 作品获奖记录表
model ProjectAward {
  id              String              @id @default(cuid())
  projectId       String
  awardId         String
  eventId         String?             // 获奖活动
  submissionId    String?             // 关联的提交记录
  
  -- 获奖信息
  awardedAt       DateTime            @default(now())
  awardedBy       String              // 颁发者
  reason          String?             // 获奖理由
  score           Float?              // 获奖分数
  
  -- 证书信息
  certificateUrl  String?             // 电子证书URL
  certificateGenerated Boolean        @default(false)
  
  -- Relations
  project         Project             @relation(fields: [projectId], references: [id], onDelete: Cascade)
  award           Award               @relation(fields: [awardId], references: [id], onDelete: Cascade)
  event           Event?              @relation(fields: [eventId], references: [id])
  submission      EventProjectSubmission? @relation(fields: [submissionId], references: [id])
  awarder         User                @relation(fields: [awardedBy], references: [id])
  
  @@unique([projectId, awardId, eventId]) // 同一作品在同一活动中不能重复获得同一奖项
  @@map("project_award")
}

enum AwardCategory {
  GENERAL         // 通用奖项
  TECHNICAL       // 技术奖项  
  CREATIVE        // 创意奖项
  COMMERCIAL      // 商业奖项
  SOCIAL          // 社会影响奖项
  SPECIAL         // 特殊奖项
}

enum AwardLevel {
  FIRST           // 一等奖
  SECOND          // 二等奖
  THIRD           // 三等奖
  EXCELLENCE      // 优秀奖
  PARTICIPATION   // 参与奖
  SPECIAL         // 特殊奖
}

3.3.2 预设奖项

系统默认创建以下奖项:

黑客松奖项:

  • 一等奖、二等奖、三等奖
  • 最佳技术创新奖
  • 最佳产品设计奖
  • 最具商业价值奖
  • 最佳团队协作奖
  • 参与奖

Demo Day奖项:

  • 最受观众喜爱奖
  • 最具投资价值奖
  • 最佳演示奖
  • 最有潜力奖

Building Public奖项:

  • 最佳坚持奖(完成所有打卡)
  • 最佳作品奖(点赞最多)
  • 最受关注奖
  • 最具进步奖

3.3.3 电子证书生成

  • 基于模板自动生成电子证书
  • 包含作品信息、获奖信息、活动信息
  • 支持自定义证书模板
  • 可以分享到社交媒体

3.4 Building Public打卡系统

3.4.1 数据模型

-- Building Public活动扩展配置
model BuildingActivityConfig {
  id              String          @id @default(cuid())
  eventId         String          @unique
  
  -- 打卡配置
  duration        Int             @default(21)        // 活动天数
  requiredCheckIns Int            @default(6)         // 要求打卡次数
  depositAmount   Float           @default(100)       // 押金金额
  refundRate      Float           @default(0.8)       // 未完成退款比例
  
  -- 内容设置
  isPublic        Boolean         @default(true)      // 默认是否公开
  allowAnonymous  Boolean         @default(false)     // 是否允许匿名打卡
  
  -- 评选设置
  enableVoting    Boolean         @default(true)      // 是否启用投票
  votingEndTime   DateTime?                           // 投票截止时间
  
  event           Event           @relation(fields: [eventId], references: [id], onDelete: Cascade)
  
  @@map("building_activity_config")
}

-- Building Public报名记录扩展
model BuildingRegistration {
  id              String              @id @default(cuid())
  eventId         String
  userId          String
  projectId       String              // 关联作品
  
  -- 报名信息
  developmentPlan String              // 21天开发计划
  targetGoals     String[]            @default([]) // 目标列表
  isPublic        Boolean             @default(true) // 内容是否公开
  
  -- 押金信息
  depositPaid     Boolean             @default(false)
  depositAmount   Float               
  depositStatus   DepositStatus       @default(PENDING)
  
  -- 统计数据
  checkInCount    Int                 @default(0)    // 已打卡次数
  likeCount       Int                 @default(0)    // 获得点赞数
  commentCount    Int                 @default(0)    // 获得评论数
  
  -- 完成状态
  isCompleted     Boolean             @default(false)
  completedAt     DateTime?
  finalScore      Float?              // 最终评分
  
  registeredAt    DateTime            @default(now())
  
  -- Relations
  event           Event               @relation(fields: [eventId], references: [id], onDelete: Cascade)
  user            User                @relation(fields: [userId], references: [id], onDelete: Cascade)
  project         Project             @relation(fields: [projectId], references: [id])
  checkIns        CheckInRecord[]
  depositTrans    DepositTransaction[]
  
  @@unique([eventId, userId])
  @@map("building_registration")
}

-- 打卡记录表
model CheckInRecord {
  id              String              @id @default(cuid())
  registrationId  String
  eventId         String
  userId          String
  day             Int                 // 第几天打卡
  
  -- 打卡内容
  title           String              // 打卡标题
  content         String              // 打卡内容(进度描述)
  nextPlan        String?             // 下一步计划
  imageUrls       String[]            @default([]) // 截图
  demoUrl         String?             // 演示链接
  
  -- 状态信息
  isApproved      Boolean             @default(true)
  isPublic        Boolean             @default(true)
  
  -- 互动数据
  likeCount       Int                 @default(0)
  commentCount    Int                 @default(0)
  
  checkedInAt     DateTime            @default(now())
  
  -- Relations
  registration    BuildingRegistration @relation(fields: [registrationId], references: [id], onDelete: Cascade)
  event           Event               @relation(fields: [eventId], references: [id], onDelete: Cascade)
  user            User                @relation(fields: [userId], references: [id], onDelete: Cascade)
  likes           CheckInLike[]
  comments        CheckInComment[]
  
  @@map("check_in_record")
}

-- 打卡点赞表
model CheckInLike {
  id              String          @id @default(cuid())
  checkInId       String
  userId          String
  likedAt         DateTime        @default(now())
  
  checkIn         CheckInRecord   @relation(fields: [checkInId], references: [id], onDelete: Cascade)
  user            User            @relation(fields: [userId], references: [id], onDelete: Cascade)
  
  @@unique([checkInId, userId])
  @@map("check_in_like")
}

-- 打卡评论表
model CheckInComment {
  id              String          @id @default(cuid())
  checkInId       String
  userId          String
  content         String
  commentedAt     DateTime        @default(now())
  
  checkIn         CheckInRecord   @relation(fields: [checkInId], references: [id], onDelete: Cascade)
  user            User            @relation(fields: [userId], references: [id], onDelete: Cascade)
  
  @@map("check_in_comment")
}

-- 押金交易记录表
model DepositTransaction {
  id              String              @id @default(cuid())
  registrationId  String
  userId          String
  type            TransactionType     // 交易类型
  amount          Float               // 金额
  status          TransactionStatus   // 状态
  
  -- 支付信息
  paymentId       String?             // 第三方支付ID
  paymentMethod   String?             // 支付方式
  paidAt          DateTime?           // 支付时间
  
  -- 退款信息
  refundReason    String?             // 退款原因
  refundRate      Float?              // 退款比例
  refundedAt      DateTime?           // 退款时间
  
  createdAt       DateTime            @default(now())
  
  -- Relations
  registration    BuildingRegistration @relation(fields: [registrationId], references: [id], onDelete: Cascade)
  user            User                @relation(fields: [userId], references: [id], onDelete: Cascade)
  
  @@map("deposit_transaction")
}

enum DepositStatus {
  PENDING         // 待支付
  PAID            // 已支付
  REFUNDED        // 已退款
  FORFEITED       // 已没收
}

enum TransactionType {
  DEPOSIT         // 押金支付
  REFUND          // 退款
  FORFEIT         // 没收
}

enum TransactionStatus {
  PENDING         // 待处理
  PROCESSING      // 处理中
  COMPLETED       // 已完成
  FAILED          // 失败
  CANCELLED       // 已取消
}

3.4.2 打卡系统功能

打卡功能:

  • 每日打卡提交进度和计划
  • 支持图片、链接等多媒体内容
  • 可选择公开或仅报名者可见

互动功能:

  • 其他参与者可以点赞和评论
  • 实时打卡动态展示
  • 每日打卡提醒和督促

评选功能:

  • 根据点赞数排行
  • 综合完成度和质量评选最佳作品
  • 颁发相应奖项和徽章

押金管理:

  • 自动计算完成度
  • 根据规则自动退款
  • 支持人工干预和调整

4. 扩展现有数据模型

4.1 Event表扩展

-- 在Event表中添加字段
model Event {
  // ... 现有字段
  
  -- 模板信息
  templateId      String?                 // 使用的模板ID
  
  -- 作品相关
  requireProjectSubmission Boolean        @default(false) // 是否需要作品提交
  projectSubmissionDeadline DateTime?     // 作品提交截止时间
  
  -- 新增关联
  template        EventTemplate?          @relation(fields: [templateId], references: [id])
  projectSubmissions EventProjectSubmission[]
  buildingConfig  BuildingActivityConfig?
  buildingRegistrations BuildingRegistration[]
  checkInRecords  CheckInRecord[]
  projectAwards   ProjectAward[]
}

4.2 Project表扩展

-- 在Project表中添加字段
model Project {
  // ... 现有字段
  
  -- 活动相关统计
  submissionCount Int                     @default(0) // 提交次数
  awardCount      Int                     @default(0) // 获奖次数
  
  -- 新增关联
  eventSubmissions EventProjectSubmission[]
  buildingRegistrations BuildingRegistration[]
  awards          ProjectAward[]
}

4.3 User表扩展

-- 在User表中添加关联
model User {
  // ... 现有字段
  
  -- 新增关联
  createdTemplates EventTemplate[]
  projectSubmissions EventProjectSubmission[]
  reviewedSubmissions EventProjectSubmission[] @relation("ReviewedSubmissions")
  buildingRegistrations BuildingRegistration[]
  checkInRecords  CheckInRecord[]
  checkInLikes    CheckInLike[]
  checkInComments CheckInComment[]
  depositTransactions DepositTransaction[]
  awardedProjects ProjectAward[]
  createdAwards   Award[]
}

5. 功能设计

5.1 活动创建流程增强

5.1.1 模板选择界面

选择活动模板:
┌─────────────────────────────────────┐
│ [🎯] 迷你黑客松                      │
│ 全天学习+开发,适合技能提升          │
│ 已使用 28 次                        │
│ [选择模板] [预览详情]               │
├─────────────────────────────────────┤
│ [🎤] Demo Day (客厅 Demo 局)           │
│ 2小时作品分享,适合获得反馈          │
│ 已使用 15 次                        │
│ [选择模板] [预览详情]               │
├─────────────────────────────────────┤
│ [📅] Building Public                │
│ 21天打卡挑战,适合作品推进          │
│ 已使用 8 次                         │
│ [选择模板] [预览详情]               │
├─────────────────────────────────────┤
│ [➕] 自定义活动                      │
│ 从空白开始创建                      │
│ [开始创建]                          │
└─────────────────────────────────────┘

5.1.2 模板应用和自定义

  1. 选择模板后自动填充基本信息
  2. 可以修改模板的任何配置项
  3. 提供"保存为新模板"选项
  4. 支持在组织内共享模板

5.2 作品提交界面

5.2.1 迷你黑客松作品提交

作品提交 - AI写作助手
┌─────────────────────────────────────┐
│ 📁 作品选择:                        │
│ ○ 选择已有作品: [下拉选择]          │
│ ● 创建新作品                        │
│                                     │
│ 📝 作品信息:                        │
│ 标题: [文本输入]                    │
│ 一句话介绍: [文本输入]              │
│ 详细描述: [Markdown编辑器]          │
│                                     │
│ 🔗 相关链接:                        │
│ 演示链接: [URL输入]                 │
│ 源码仓库: [URL输入]                 │
│ 演示文档: [文件上传]                │
│                                     │
│ 📊 完成情况:                        │
│ 完成度: [滑块] 70% ━━━━━○━━━━━       │
│ 主要功能: [标签选择]                │
│ 技术栈: [标签选择]                  │
│                                     │
│ ⏰ 截止时间: 17:00 (剩余 1小时23分)  │
│ [提交作品] [保存草稿]               │
└─────────────────────────────────────┘

5.3 Building Public打卡界面

5.3.1 打卡提交页面

第 8 天打卡 - 智能客服机器人
┌─────────────────────────────────────┐
│ 📅 打卡日期: 2024年3月23日           │
│ 🎯 已完成: 7/6 次打卡 ✅            │
│                                     │
│ 📝 今日进展:                        │
│ 标题: [完成了用户对话管理模块]      │
│ 详细描述: [Markdown编辑器]          │
│                                     │
│ 📸 进展截图:                        │
│ [图片上传区域] [+ 添加图片]         │
│                                     │
│ 🔗 演示链接:                        │
│ [URL输入框]                         │
│                                     │
│ 📋 下一步计划:                      │
│ [文本编辑器]                        │
│                                     │
│ 👀 可见性:                          │
│ ○ 完全公开 ● 仅报名者可见 ○ 仅自己  │
│                                     │
│ [提交打卡] [保存草稿]               │
└─────────────────────────────────────┘

5.3.2 打卡动态展示

Building Public - 进展动态
┌─────────────────────────────────────┐
│ 🏆 排行榜:                          │
│ 1. 张三 - AI写作助手 (25👍 8💬)      │
│ 2. 李四 - 智能客服 (22👍 6💬)        │
│ 3. 王五 - 代码生成器 (18👍 5💬)      │
│                                     │
│ 📊 整体进度:                        │
│ 总参与: 15人 | 完成目标: 12人(80%)   │
│ 平均打卡: 6.8次                     │
│                                     │
│ 📱 最新动态:                        │
│ [头像] 张三 刚刚完成第8次打卡        │
│ "完成了AI模型的优化,响应速度提升50%" │
│ 📷 [截图] 🔗 [演示链接]             │
│ 👍 12 💬 3 📤 分享                  │
│                                     │
│ [头像] 李四 2小时前                 │
│ "集成了语音识别功能,测试效果不错"   │
│ 👍 8 💬 2                           │
└─────────────────────────────────────┘

5.4 电子奖状和证书系统

5.4.1 奖项管理界面

奖项管理 - 迷你黑客松第12期
┌─────────────────────────────────────┐
│ 🏆 设置奖项:                        │
│                                     │
│ [🥇] 一等奖 (1名)                   │
│ 奖励: 证书 + 200 CP + 定制奖品       │
│ [编辑] [删除]                       │
│                                     │
│ [🥈] 二等奖 (2名)                   │  
│ 奖励: 证书 + 100 CP                 │
│ [编辑] [删除]                       │
│                                     │
│ [🥉] 三等奖 (3名)                   │
│ 奖励: 证书 + 50 CP                  │
│ [编辑] [删除]                       │
│                                     │
│ [⭐] 最佳技术创新奖 (1名)            │
│ 奖励: 特殊徽章 + 100 CP             │
│ [编辑] [删除]                       │
│                                     │
│ [+ 添加新奖项]                      │
│                                     │
│ 📋 颁奖流程:                        │
│ 1. 作品评分 ⏳                      │
│ 2. 确定获奖名单 ⏳                  │
│ 3. 生成电子证书 ⏳                  │
│ 4. 发放奖励 ⏳                      │
└─────────────────────────────────────┘

5.4.2 电子证书展示

🏆 电子获奖证书
┌─────────────────────────────────────┐
│          HackathonWeekly            │
│           社区荣誉证书               │
│                                     │
│    兹证明                           │
│    张三                             │
│    在"AI创新迷你黑客松第12期"活动中    │
│    凭借作品"AI写作助手"              │
│    荣获                             │
│    🥇 一等奖                        │
│                                     │
│    活动时间: 2024年3月15日           │
│    颁发日期: 2024年3月15日           │
│                                     │
│    主办方: HackathonWeekly社区       │
│    [官方印章]                       │
│                                     │
│ [下载证书] [分享到社交媒体] [查看作品] │
└─────────────────────────────────────┘

6. 组织作品汇总功能

6.1 组织作品统计页面

北京HackathonWeekly - 作品汇总
┌─────────────────────────────────────┐
│ 📊 作品统计总览:                    │
│ 成员作品: 156个 | 活动作品: 89个     │
│ 获奖作品: 23个 | 优秀作品: 45个      │
│                                     │
│ 📈 数据分析:                        │
│ [图表] 作品增长趋势                 │
│ [图表] 技术栈分布                   │
│ [图表] 作品阶段分布                 │
│                                     │
│ 🎯 查看方式:                        │
│ ○ 成员作品汇总                      │
│ ● 活动作品汇总                      │
│                                     │
│ 🏆 优秀作品展示:                    │
│ [作品卡片] AI写作助手 - 一等奖       │
│ [作品卡片] 智能客服 - 最佳创新       │
│ [作品卡片] 代码生成器 - 二等奖       │
│                                     │
│ 📅 活动作品分组:                    │
│ • 迷你黑客松第12期 (8个作品)         │
│ • Demo Day第5期 (6个作品)           │
│ • Building Public第3期 (12个作品)   │
│                                     │
│ [导出作品列表] [生成统计报告]        │
└─────────────────────────────────────┘

7. 技术实现方案

7.1 数据库迁移计划

阶段一:基础表结构

-- 创建活动模板相关表
CREATE TABLE event_template (...);
CREATE TABLE event_template_ticket_type (...);
CREATE TABLE event_template_volunteer_role (...);
CREATE TABLE event_template_question (...);
CREATE TABLE event_template_schedule (...);

-- 创建作品提交相关表  
CREATE TABLE event_project_submission (...);

-- 创建奖项相关表
CREATE TABLE award (...);
CREATE TABLE project_award (...);

阶段二:Building Public系统

-- 创建打卡系统相关表
CREATE TABLE building_activity_config (...);
CREATE TABLE building_registration (...);
CREATE TABLE check_in_record (...);
CREATE TABLE check_in_like (...);
CREATE TABLE check_in_comment (...);
CREATE TABLE deposit_transaction (...);

阶段三:数据初始化

-- 初始化三种系统模板
INSERT INTO event_template VALUES (...);

-- 初始化预设奖项
INSERT INTO award VALUES (...);

-- 初始化预设志愿者角色
INSERT INTO volunteer_role VALUES (...);

7.2 API接口设计

7.2.1 活动模板API

// 获取活动模板列表
GET /api/event-templates
// 创建活动模板
POST /api/event-templates
// 从活动保存为模板
POST /api/events/{eventId}/save-as-template
// 使用模板创建活动
POST /api/events/create-from-template/{templateId}

7.2.2 作品提交API

// 提交作品到活动
POST /api/events/{eventId}/submit-project
// 获取活动作品提交列表
GET /api/events/{eventId}/submissions
// 评分作品
PUT /api/submissions/{submissionId}/score

7.2.3 Building Public API

// 获取打卡活动配置
GET /api/events/{eventId}/building-config
// 提交打卡记录
POST /api/events/{eventId}/check-in
// 获取打卡动态
GET /api/events/{eventId}/check-ins
// 点赞打卡
POST /api/check-ins/{checkInId}/like

7.2.4 奖项和证书API

// 获取奖项列表
GET /api/awards
// 为作品颁奖
POST /api/projects/{projectId}/awards
// 生成电子证书
POST /api/projects/{projectId}/generate-certificate
// 获取组织作品统计
GET /api/organizations/{orgId}/project-stats

📈 实现进度

已完成的任务

任务一:数据库表结构建立 ✅

  • 创建EventTemplate相关表(事件模板、票种、志愿者角色、问题、流程安排)
  • 创建EventProjectSubmission相关表(作品提交系统)
  • 创建Award和ProjectAward表(电子奖状系统)
  • 创建Building Public相关表(打卡系统、押金管理)
  • 扩展现有Event、Project、User、Organization表
  • 为VolunteerRole和Award表添加unique约束
  • 生成Prisma客户端并推送数据库变更

任务二:初始化数据 ✅

  • 创建8个志愿者角色(主持人、场地协助、计时员、签到员、技术导师、技术员、财务核实员、气氛组主持人)
  • 创建16个预设奖项(黑客松、Demo Day、Building Public各类奖项)
  • 创建三种系统活动模板:
    • 迷你黑客松模板(ID: cmefn6q0z0000uqxn33efufaw)
    • Demo Day模板(ID: cmefn6q1o000tuqxn4cd12wpm)
    • Building Public模板(ID: cmefn6q21001suqxn9803h521)

任务三:API接口开发 ✅

  • 创建完整的EventTemplate CRUD API (/api/event-templates)
    • GET /event-templates - 获取模板列表
    • GET /event-templates/:id - 获取模板详情
    • POST /event-templates - 创建新模板
    • PUT /event-templates/:id - 更新模板
    • DELETE /event-templates/:id - 删除模板
    • POST /event-templates/:id/duplicate - 复制模板
  • 在Events API中添加保存为模板功能
    • POST /events/:id/save-as-template - 从活动保存为模板
  • 集成到主API路由系统
  • 修复编译错误,成功启动开发服务器
  • API接口测试通过,三种系统模板正常返回

已完成的任务

任务四:前端组件开发 ✅

  • EventTemplateSelector组件 - 模板选择界面
    • 支持三种系统模板的可视化展示
    • 自定义活动选项
    • 模板使用统计显示
    • 响应式设计和加载状态
  • EventTemplateForm组件 - 模板编辑表单
    • 完整的模板创建/编辑功能
    • 票种、志愿者角色、问题配置
    • 表单验证和错误处理
  • EventCreateWithTemplate组件 - 集成组件
    • 模板选择到表单创建的完整流程
    • 模板数据到表单的自动转换
    • 返回模板选择功能
  • 活动创建页面集成
    • 更新existing create event page使用新的模板选择流程
    • API集成和数据获取
    • 完整的用户体验优化

🔄 进行中的任务

任务五:作品提交系统

  • 作品提交API接口
  • 作品提交前端组件
  • 活动作品列表展示

任务六:Building Public打卡系统

  • 打卡相关API接口
  • 打卡提交和管理界面
  • 押金管理系统

任务七:电子奖状系统

  • 奖项管理API接口
  • 电子证书生成功能
  • 奖项颁发界面

🗃️ 数据库现状

当前已成功创建的数据表:

  • event_template - 活动模板主表
  • event_template_ticket_type - 模板票种配置
  • event_template_volunteer_role - 模板志愿者角色配置
  • event_template_question - 模板预设问题
  • event_template_schedule - 模板流程安排
  • event_project_submission - 活动作品提交
  • award - 奖项表
  • project_award - 作品获奖记录
  • building_activity_config - Building Public活动配置
  • building_registration - Building Public报名记录
  • check_in_record - 打卡记录
  • check_in_like - 打卡点赞
  • check_in_comment - 打卡评论
  • deposit_transaction - 押金交易记录

所有表结构已经生成并推送到开发数据库,初始化数据已完成。


8. 任务拆分建议

基于系统的复杂性和模块独立性,我建议将整个作品拆分为以下6个相对独立的任务模块:

8.1 任务一:活动模板系统 ⭐⭐⭐

负责范围:

  • EventTemplate相关数据模型
  • 模板创建、编辑、使用功能
  • 三种固定模板的初始化
  • 模板选择和应用界面

预估工期: 1-2周 依赖关系: 依赖现有Event系统,相对独立 核心文件:

  • src/modules/dashboard/events/components/EventTemplateSelector.tsx
  • src/modules/dashboard/events/components/EventTemplateForm.tsx
  • src/server/routes/event-templates.ts

8.2 任务二:作品提交与活动关联系统 ⭐⭐⭐

负责范围:

  • EventProjectSubmission数据模型
  • 作品提交流程和界面
  • 活动作品列表展示
  • 作品快照和版本管理

预估工期: 1-2周
依赖关系: 依赖现有Project和Event系统 核心文件:

  • src/modules/dashboard/events/components/ProjectSubmissionForm.tsx
  • src/modules/dashboard/events/components/EventProjectList.tsx
  • src/server/routes/event-projects.ts

8.3 任务三:电子奖状与奖项管理系统 ⭐⭐

负责范围:

  • Award和ProjectAward数据模型
  • 奖项管理界面
  • 电子证书生成
  • 组织作品统计功能

预估工期: 1周 依赖关系: 依赖任务二(作品提交系统) 核心文件:

  • src/modules/dashboard/awards/components/AwardManagement.tsx
  • src/modules/dashboard/awards/components/CertificateGenerator.tsx
  • src/server/routes/awards.ts

8.4 任务四:Building Public打卡系统 ⭐⭐⭐⭐

负责范围:

  • 打卡相关数据模型
  • 打卡提交和管理界面
  • 打卡动态和社交功能
  • 统计和排行榜功能

预估工期: 2-3周 依赖关系: 依赖现有Event和Project系统,相对独立 核心文件:

  • src/modules/dashboard/building/components/CheckInForm.tsx
  • src/modules/dashboard/building/components/BuildingDashboard.tsx
  • src/server/routes/building-public.ts

8.5 任务五:押金管理系统 ⭐⭐

负责范围:

  • DepositTransaction数据模型
  • 押金支付和退款流程
  • 财务管理界面
  • 自动结算规则

预估工期: 1周 依赖关系: 依赖任务四(Building Public系统) 核心文件:

  • src/modules/dashboard/finance/components/DepositManagement.tsx
  • src/server/routes/deposits.ts

8.6 任务六:系统集成与优化 ⭐⭐

负责范围:

  • 各模块集成测试
  • 用户界面统一优化
  • 性能优化和错误处理
  • 文档和教程完善

预估工期: 1周 依赖关系: 依赖前面所有任务 核心文件:

  • 集成测试用例
  • 用户使用文档
  • 系统部署文档

9. 开发优先级建议

9.1 第一优先级 (MVP功能)

  1. 任务一:活动模板系统 - 解决模板复用问题
  2. 任务二:作品提交系统 - 解决作品沉淀问题

9.2 第二优先级 (增强功能)

  1. 任务三:电子奖状系统 - 增强激励机制
  2. 任务四:Building Public系统 - 新增打卡功能

9.3 第三优先级 (完善功能)

  1. 任务五:押金管理系统 - 完善Building Public
  2. 任务六:系统集成优化 - 整体体验提升

10. 风险评估与解决方案

10.1 主要风险点

  1. 数据迁移风险:新表结构与现有数据的兼容性
  2. 性能风险:Building Public系统的高频打卡操作
  3. 支付风险:押金管理涉及资金安全
  4. 用户体验风险:新功能学习成本

10.2 解决方案

  1. 渐进式迁移:先创建新表,逐步迁移数据
  2. 缓存优化:使用Redis缓存热点数据
  3. 第三方支付:集成成熟的支付网关
  4. 用户引导:制作详细的使用教程和引导流程

这个拆分方案确保了各任务模块相对独立,可以并行开发,同时保持了合理的依赖关系。每个任务都有明确的交付物和预期工期,便于作品管理和进度跟踪。

On this page

社区三种活动模板系统开发需求文档1. 概述1.1 背景1.2 核心目标2. 三种活动模板详细设计2.1 迷你黑客松模板2.1.1 基本配置2.1.2 志愿者角色配置(请复用原来的,我们在超级管理员页面中可以自定义这个志愿者配置)2.1.3 预设流程安排2.1.4 预设报名问题2.2 Demo Day模板 (客厅 Demo 局)2.2.1 基本配置2.2.2 票种配置2.2.3 志愿者角色配置(请复用原来的,我们在超级管理员页面中可以自定义这个志愿者配置)2.2.4 预设流程安排2.2.5 预设报名问题2.3 Building Public模板2.3.1 基本配置2.3.2 押金和奖励机制2.3.3 志愿者角色配置(请复用原来的,我们在超级管理员页面中可以自定义这个志愿者配置, 如果没有的话,在数据库中创建)2.3.4 打卡系统设计2.3.5 社交功能3. 核心系统设计3.1 活动模板系统3.1.1 数据模型3.1.2 模板功能3.2 作品提交系统3.2.1 数据模型3.2.2 作品提交流程3.3 电子奖状和奖项管理系统3.3.1 数据模型3.3.2 预设奖项3.3.3 电子证书生成3.4 Building Public打卡系统3.4.1 数据模型3.4.2 打卡系统功能4. 扩展现有数据模型4.1 Event表扩展4.2 Project表扩展4.3 User表扩展5. 功能设计5.1 活动创建流程增强5.1.1 模板选择界面5.1.2 模板应用和自定义5.2 作品提交界面5.2.1 迷你黑客松作品提交5.3 Building Public打卡界面5.3.1 打卡提交页面5.3.2 打卡动态展示5.4 电子奖状和证书系统5.4.1 奖项管理界面5.4.2 电子证书展示6. 组织作品汇总功能6.1 组织作品统计页面7. 技术实现方案7.1 数据库迁移计划阶段一:基础表结构阶段二:Building Public系统阶段三:数据初始化7.2 API接口设计7.2.1 活动模板API7.2.2 作品提交API7.2.3 Building Public API7.2.4 奖项和证书API📈 实现进度✅ 已完成的任务任务一:数据库表结构建立 ✅任务二:初始化数据 ✅任务三:API接口开发 ✅✅ 已完成的任务任务四:前端组件开发 ✅🔄 进行中的任务任务五:作品提交系统任务六:Building Public打卡系统任务七:电子奖状系统🗃️ 数据库现状8. 任务拆分建议8.1 任务一:活动模板系统 ⭐⭐⭐8.2 任务二:作品提交与活动关联系统 ⭐⭐⭐8.3 任务三:电子奖状与奖项管理系统 ⭐⭐8.4 任务四:Building Public打卡系统 ⭐⭐⭐⭐8.5 任务五:押金管理系统 ⭐⭐8.6 任务六:系统集成与优化 ⭐⭐9. 开发优先级建议9.1 第一优先级 (MVP功能)9.2 第二优先级 (增强功能)9.3 第三优先级 (完善功能)10. 风险评估与解决方案10.1 主要风险点10.2 解决方案