# 需求说明:投票(最简实现,复用问卷) ## 概览 - 目标:实现一个“单/多选投票”的最简模块,支持可见范围、截止时间、发布/归档/延期、结果统计(各选项票数)。 - 复用策略:完全复用现有“问卷(表单收集)”模块的数据结构与接口,约定投票=仅包含一题的选择题(单选或多选),投票项=题目选项。 - 支持端: - 管理侧:列表/详情(含票数统计)/新建(草稿)/编辑(仅草稿)/发布/延期/归档/置顶。 - 门户侧:列表(可见范围内、含过期)/详情+填写(截止前允许覆盖)/我的投票。 ## 角色权限 - 管理侧:`manage:survey:list|query|add|edit|publish|extend|archive|pin` - 门户侧:登录即可(`isAuthenticated()`)。 ## 状态流转 - 0 草稿 → 1 已发布 → 2 已归档;发布后不可修改结构;归档后不可提交、不可延期。 - 截止时间过去后不可提交;过期自动取消置顶。 ## 可见范围 - 与通知/问卷一致:全员 或 自定义范围(角色/部门/岗位三者取并集,只要命中任意一种即可可见)。 ## 数据与表 - 复用表:`tb_survey`(投票头)/`tb_survey_item`(题目)/`tb_survey_option`(选项)/`tb_survey_scope`(范围)/`tb_survey_answer`(答卷)/`tb_survey_answer_item`(答案)。 - 本次无 DDL 变更;管理侧详情新增选项票数统计(后端 SQL JSON_CONTAINS 聚合)。 ## 接口与约定 - 管理:`/manage/survey/**`(详情返回时,单/多选题的 `options[].voteCount` 为累计票数)。 - 门户:`/portal/survey/**`(不返回 voteCount,用户仅能在截止前提交或修改自己的投票)。 ## MVP 边界 - 仅支持单选/多选投票(一个投票建议只建一题)。 - 暂不支持匿名开关、未投/未提交名单导出、图表化报表;后续迭代。 ## 用例流程 1) 管理侧新建草稿(单/多选题 + 选项)→ 发布。 2) 门户用户在可见范围内看到该投票 → 截止前提交/覆盖。 3) 管理侧详情可查看每个选项获得的票数;可延期或归档。 ## 备注 - 为便于联调,`book-mis.sql` 已附带“校园食堂口味投票(示例)”数据(单选)。