# 苏州市青少年竞赛报名平台
## 需求update-20240918
### 比赛列表接口
1. 需增加主办方；
2. 排序：默认需根据报名截止时间降序排序；
3. 报名状态筛选：默认显示所有报名状态；后端根据当前时间返回报名状态（未开始、报名中、已截止）；
4. 比赛分组gradeType（比如：小学组、初中组、高中组）要可以筛选。如果比赛没有设置分组，则默认显示所有比赛。
5. 


## 产品规划


### 家长用户端功能详细规划

#### **注册与登录**
1. 注册与登录：
     - 打开登录页面时，先判断用户环境。如果是微信环境，则获取openid，使用微信登录；如果是其他环境，则使用手机号登录。如果没有微信openid的，则跳转到手机号登录页面。
     - 手机号，需获取手机验证码验证；无需密码登录。使用手机号登录时，如果是微信环境的，则自动绑定微信openid。
     - 登录成功后，跳转到登录前一个页面，或主页。

#### **个人中心**
  
1. 学生管理：
    - 显示已绑定的学生。显示绑定学生按钮。
    - 绑定学生：
      - 输入学生姓名、身份证号，进行添加。根据学生身份证号、家长手机号，调用学籍库接口（根据学生身份证查询，返回的家长手机号与注册手机号匹配），获取学生信息。如果成功，则记录：姓名、性别、学校、年级、身份证号；如果失败，则提示错误信息（未查到、信息不匹配）。
      - 拉取信息后，需上传学生照片（选填）。
      - 绑定成功后，显示学生信息。
    - 绑定多个学生。解绑学生。
2. 参赛情况
    - 列表：姓名、比赛名称、报名时间、比赛状态、获奖情况。
    - 详情：姓名、比赛名称、报名类型、报名组别、报名时间、参赛时间、比赛低点、比赛状态、获奖情况等；
      - 根据比赛状态，增加功能按钮：已报名（增加取消按钮）、已审核、审核失败（增加审核失败原因，增加修改按钮）、已取消、已结束。
      - 根据获奖情况，增加功能按钮：查看获奖证书。
3. 积分
    - 显示积分，显示积分获得的来源。
#### **主页**
1. 比赛列表：图片+标题+状态：正在进行、即将开始、已结束。
2. 详情页：比赛名称、报名时间、报名截止时间、报名人数、报名方式、比赛地点、比赛介绍、报名方式、比赛奖项等。
     - 点击报名按钮，跳转到报名页面。

#### **报名页面**
1. 选择报名的学生。如果未登录，跳转到登录页面；如果未绑定学生，则跳转到绑定学生页面。
2. 带出学生信息：学校、年级、姓名、身份证号（脱敏）、家长手机号（脱敏，可修改）、学生照片（如果没有照片，则必须上传。可修改）。
3. 选择个人报名，还是团队报名。
   1. 个人报名：
        - 比赛报名须知。
       - 增加两个指导老师的信息：老师姓名、手机号。选填。
        - 根据比赛设置，选择二级比赛类目（下拉框）。如有，则必填。
        - 根据比赛设置，填写参赛证号（文本框），如有，则必填。
        - 根据比赛设置，显示其他需要填写的内容。如有，则必填。
        - 根据比赛设置，自动显示所属组别（低年级、初中组等。需在比赛设置里设置），无法更改。
        - 全部信息填写结束。点击提交报名按钮后（需检查必填项），显示所有信息再次确认后，提交。
   2. 团队报名：
        - 参与团队：检查按钮：检查是否有其他成员邀请加入团队，如果有，则显示邀请信息，并提示“接受邀请”，或拒绝邀请。如果接受邀请，则比赛设置无需填写，直接显示比赛详情、团队详情，但如果有以下信息，则需要填写：参赛证号、其他必填的内容。确认参赛。邀请信息包括：邀请人学校、年级、姓名、身份证号（脱敏）、手机号（脱敏）、参加的比赛名称、类目（如有）、团队编号。
        - 创建团队：如果没有其他成员邀请，则点击“创建团队”按钮，填写团队信息和报名信息。
        - 团队信息：点击增加团队成员按钮，填写团队成员姓名、身份证号。
        - 参赛信息：与“个人报名”一致：指导老师、类目、参赛证号等；
        - 确认团队信息后，点击提交报名按钮，提交报名信息。
4. 点击提交报名按钮，提交报名信息。


### 管理端功能详细规划
#### **登录与权限管理**
   - 常规后台管理帐号登录。无需特殊权限。不给其他老师使用。无需考虑额外的权限。
#### **竞赛管理**
1. 发布比赛：
      - 比赛名称标题、简介（生成一级比赛类目）
      - 可选是否有二级比赛类目，如果有，则添加类目名称
      - 报名开始时间、报名结束时间
      - 可选是否支持团队报名
      - 可选是否需要参赛证号
      - 可选是否需要添加备注1、备注2，备注的名称和内容
      - 组别设置：xx年级对应xx组别
      - 比赛详情页：标题图片、详情介绍等。
      - 竞赛编号生成规则：前缀、日期、随机数。
      - 点击发布按钮，发布成功。生成竞赛号码。
      - 查看、编辑、删除等其他功能；
2. 报名管理：
      - 比赛筛选：对一、二级比赛类目进行筛选，查看报名信息。
      - 手动增加单条报名信息。唯一性：一次竞赛只允许一个人报，不存在一个竞赛里出现两次相同的身份证号；
      - 批量导入excel报名信息。需对唯一性进行检查。
      - 批量导出。
      - 对单条信息进行修改、删除等。

3. 审核管理：
      - 比赛筛选：对一、二级比赛类目进行筛选，查看报名人员信息。
      - 团队、个人筛选。 
      - 审核筛选：未审核、审核通过、未到报名截止期、审核失败、已过期（未审核但比赛已开始）等。
     
4. 获奖管理：
    - 获奖信息：比赛名称（编号）、获奖人姓名、身份证号、奖项、颁发单位、颁奖时间、获得的积分数量等。
    - 增加奖状模版功能。上传奖状模版，系统自动生成奖状。
    - 增加单条获奖信息。
    - 批量导入excel获奖信息。需对唯一性进行检查。  
#### **家长与学生管理**
1. 家长管理
     - 手机号、微信openid、注册日期、最后登录日期、绑定学生数量等。
     - 增删改查。
2. 学生管理
      - 学生信息：姓名、性别、学校、年级、身份证号、家长手机号、学生照片（base64？url？）。
      - 增删改查。
3. 积分管理
      - 积分规则：每报名成功一次，获得10积分。
      - 积分规则：根据获奖情况，获得不同积分。
      - 积分明细（姓名、身份证号、获得的积分数量、来源、获得时间等）。
      - 积分汇总：显示学生的积分总和。

## 业务逻辑
### 审核逻辑
  ### 团队比赛：
- 团队报名：由某一个学生作为主邀请人，在报名时选择团队比赛，并填写团队成员的姓名、身份证号。
- 系统自动生成一个团队号码，并将填写的团队成员信息绑定到这个团队号码。
- 学生报名时，系统检索学生是否有团队邀请，如果有，则提示学生邀请信息；如果接受邀请，则将学生信息绑定到团队号码，复用团队报名信息，报名成功。
- 邀请人可以查看团队成员信息。
- 审核：如果以团队报名，则必须至少2个人报名成功，如果只有1个主邀请人，没有其他被邀请人接受邀请，则本次报名失败；如果有至少有1个人接受了邀请，其他人未接受或拒绝接受邀请，则本次报名成功。
  