Skip to main content
Version: Current

Server Actions

业务写操作全部是 'use server' 函数。没有对外 REST 资源。下表按模块列出;权限以代码为准。

用户(仅 admin)​

函数文件作用副作用
updateUserRoleapp/(dashboard)/admin/users/actions.ts改角色不能去掉唯一 admin
addEmailsFromText同上文本批量加邮箱插入 users
单条创建 / 更新资料 / 导入表格 / 删除同上CRUD 与 xlsx 导入revalidatePath('/admin/users') 等

竞选(仅 admin,入卷例外)​

函数文件作用
createCampaignapp/(dashboard)/admin/campaigns/actions.ts插入竞选、规则、名簿;candidateCanVote/HasVote 固定 false
更新竞选 / 名簿同上名簿走 syncCampaignCandidateNameOptions(全量替换)
保存规则rule-actions.ts → persistCampaignRuleWeightRows写 campaign_rule_weights 并同步权重
enrollRegisteredUsersInCampaignenroll-action.tsadmin 或 moderator;只入卷 role=voter

加入与投票​

函数文件权限作用
joinOngoingCampaigncampaigns/join-action.ts已登录进行中才能加入;写 participation + ballot
submitCastVotecampaigns/[id]/vote/actions.ts已登录且非 admin校验 ongoing、候选人、合计等于权重、尚未投过

选票管理(admin 或 moderator)​

函数文件作用
setCampaignOngoingballots/ballot-page-actions.ts开启 / 结束投票
resetCampaignBallots同上DELETE FROM ballots WHERE campaign = ?(分票级联删除)

共享库(非 Action,但写库)​

函数文件作用
syncBallotWeightsForCampaignlib/campaign-voter-weight.ts刷新 weight,按比例缩放已有分票
syncCampaignCandidateNameOptionslib/campaign-candidate-sync.ts删除并重建名簿
refreshCampaignBallotsAfterParticipationlib/refresh-campaign-ballots.ts按参与关系补全 / 清理选票行