# 问卷(表单收集)模块 - MVP 设计 ## 概览 - 目标:提供最简可用的表单收集能力,支持定向可见、限时填写、单人单份、截止前可修改;支持草稿/发布/归档与置顶。 - 角色:登录用户均可填写;管理端由具备 `manage:survey:*` 权限的用户进行创建与操作(建议仅管理员持有)。 - 范围:本期仅实现文本、单选、多选三种题型;为文件/时间题预留扩展字段。 ## 术语 - 问卷(Survey):表单头,含标题、截止时间、可见范围与状态。 - 题目(Item):单道题,包含题干、题型、是否必填、排序及选项集合(若为选择题)。 - 答卷(Answer):用户对某份问卷的提交。约束:每人每份问卷最多一份(可重复提交覆盖)。 ## 角色与权限 - 管理侧权限: - `manage:survey:list` 列表 - `manage:survey:query` 详情 - `manage:survey:add` 新建 - `manage:survey:archive` 归档 - `manage:survey:extend` 延期 - 门户需登录(`isAuthenticated()`)。 ## 用户流程(状态流转) - 管理侧: - 创建表单:默认保存为草稿(可编辑问题与选项);也可直接“发布”。 - 发布:草稿→发布(发布后不可编辑结构);支持“延期/置顶/归档”。 - 归档:发布→归档(不可提交与延期,展示仅在管理端)。 - 置顶:仅发布态可置顶;过期自动取消置顶。 - 列表视图:已发布 / 草稿 / 已过期 / 已归档 / 全部(支持条件查询)。 - 用户侧: - 表单列表:仅显示“已发布”问卷(同时包含未过期与已过期)。 - 填写问卷:在截止前可提交/覆盖;截止后不允许提交。 - 我填写的:罗列已提交的问卷,便于回看或在截止前再次修改。 ## 边界与约束 - 截止规则:`now() > deadline` 时拒绝提交与修改;过期自动取消置顶。 - 可见规则:全员可见或命中“角色/部门/岗位”任意一项即可见(并集)。 - 幂等:提交接口按(surveyId, userId)唯一,重复提交覆盖上一份答案。 - 数据保留:归档不删除历史答案。 ## 表结构(见 book-mis.sql) - `tb_survey` 问卷头;`tb_survey_item` 题目;`tb_survey_option` 选项; - `tb_survey_scope` 可见范围;`tb_survey_answer` 答卷;`tb_survey_answer_item` 答案明细。 ## MVP 交付清单 - 后端:管理/门户接口;草稿编辑/发布/归档/延期/置顶;权限与可见性校验;截止校验;幂等提交;过期自动取消置顶。 - 前端:管理端列表(多视图筛选)+新建/编辑页+详情(提交用户弹窗);门户列表(置顶/状态/填写列)+填写页+我的填写。 - 文档:API 与 Apifox;模块报告;SQL 注释+示例数据。