管理员与审核员
职责划分
| 任务 | admin | moderator |
|---|---|---|
| 用户增删改、改角色、导入 | 是 | 否 |
| 新建 / 编辑竞选、规则、名簿 | 是 | 否 |
| 开启 / 结束投票 | 是 | 是 |
| 清空本场选票 | 是 | 是 |
批量为 voter 入卷 | 是 | 是 |
| 自己投票 | 否 | 若有本场选票则可以 |
用户管理
路径:/admin/users、/admin/users/new。
- 文本批量:按空白 / 逗号 / 分号拆邮箱。
- 表格导入:解析逻辑在
lib/user-import-table.ts;模板见仓库public/templates/users-import-template.csv。 - 部门、职位下拉先展示固定列表(文娱部、事务部、技术部等;部长 / 副部长 / 主席),再合并库里出现过的值。
- 不能把最后一个
admin改成其他角色。
竞选管理
路径:/admin/campaigns、/admin/campaigns/new。
创建必填:名称、至少一条票数规则、候选人名簿(每行一名,同场去空白且忽略大小写后不能重名)。
改候选人名单
保存名簿是全量替换。已产生的分票会随选项 id 被级联删除。投票开始后不要随意改名单。
编辑名称等字段时,不要把「开闭投票」只当名称表单的附属开关依赖;当前开闭入口在选票管理的 setCampaignOngoing。
选票管理
路径:/campaigns/[id]/ballots。
- 查看已发票数、已投票情况
- 开启或结束
ongoing - 「为未进场的用户生成选票」:仅
role = voter且尚未participation的用户 - 清空本场
ballots(分票一并级联删除)
清空选票
resetCampaignBallots 不可撤销。生产环境操作前确认场次 id。