社区三种活动模板系统开发需求文档
社区需要建立三种固定活动类型的标准化模板系统,以提高活动组织效率和参与体验
社区三种活动模板系统开发需求文档
1. 概述
1.1 背景
社区需要建立三种固定活动类型的标准化模板系统,以提高活动组织效率和参与体验。三种活动类型分别是:
- 迷你黑客松 - 全天学习+开发活动
- 客厅 Demo 局 (Demo Day) - 作品展示交流活动
- 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 预设报名问题
- 作品想法: 有什么作品想法想要在活动中实现?
- 合作意愿: 是否愿意与其他参与者组队合作?
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 预设报名问题
分享者问题:
- 作品选择: 请选择要分享的作品 (关联到用户projects)
- 分享重点: 本次主要想展示作品的哪些方面?
- 当前进度: 作品当前完成度 (10%-90%)
- 寻求反馈: 最希望获得哪方面的反馈?(技术/产品/商业模式等)
- 分享时长: 预计演示时间 (5-8分钟)
观众问题:
- 参与目的: 参加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 作品提交流程
迷你黑客松:
- 参与者在17:00前必须提交作品
- 系统自动创建作品记录(如果不存在)
- 关联到当前活动
- 路演环节根据提交的作品进行展示
Demo Day:
- 分享者在报名时关联已有作品
- 活动当天可以更新作品信息
- 分享结束后自动创建提交记录
Building Public:
- 报名时必须说明要开发的作品
- 每次打卡更新作品进度
- 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 模板应用和自定义
- 选择模板后自动填充基本信息
- 可以修改模板的任何配置项
- 提供"保存为新模板"选项
- 支持在组织内共享模板
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功能)
- 任务一:活动模板系统 - 解决模板复用问题
- 任务二:作品提交系统 - 解决作品沉淀问题
9.2 第二优先级 (增强功能)
- 任务三:电子奖状系统 - 增强激励机制
- 任务四:Building Public系统 - 新增打卡功能
9.3 第三优先级 (完善功能)
- 任务五:押金管理系统 - 完善Building Public
- 任务六:系统集成优化 - 整体体验提升
10. 风险评估与解决方案
10.1 主要风险点
- 数据迁移风险:新表结构与现有数据的兼容性
- 性能风险:Building Public系统的高频打卡操作
- 支付风险:押金管理涉及资金安全
- 用户体验风险:新功能学习成本
10.2 解决方案
- 渐进式迁移:先创建新表,逐步迁移数据
- 缓存优化:使用Redis缓存热点数据
- 第三方支付:集成成熟的支付网关
- 用户引导:制作详细的使用教程和引导流程
这个拆分方案确保了各任务模块相对独立,可以并行开发,同时保持了合理的依赖关系。每个任务都有明确的交付物和预期工期,便于作品管理和进度跟踪。