问卷调研系统怎么设计?织码在线教育系统的表单、答卷与结果闭环
问卷调研系统怎么设计?织码在线教育系统的表单、答卷与结果闭环
培训结束后,组织者通常还需要回答几个问题:学员对课程是否满意?哪些内容最难理解?不同部门的反馈有没有差异?如果只是把几道题临时放进报名表,问题很快就会变成“想问的问不了,收回来的数据也不好用”。
织码在线教育系统把问卷做成了独立能力:Qnr 管理一次问卷实例,QnrForm 管理可复用的表单结构,QnrUser、QnrUserAnswer、QnrUserRecord 管理答卷数据,同时覆盖题型配置、人员指派、有效期、发布状态和结果导出。
本文从问卷的完整生命周期出发,拆解这套设计如何解决三个问题:表单怎么复用、问卷怎么发放、答卷怎么沉淀为可分析的数据。
图 1:问卷系统从表单设计开始,经发布与答题,最终进入结果查看和导出分析。
一、先分清三个概念:表单、问卷和答卷
问卷系统最重要的设计,是把“题目长什么样”和“这次调研发给谁”拆开。
QnrForm(表单模板:题目集合) └─ QnrFormQs(题目) └─ QnrFormQsOption(选项) Qnr(问卷实例:标题、指派、有效期、发布状态) └─ formId → QnrForm QnrUser / QnrUserAnswer / QnrUserRecord(本次答卷数据)三者分别回答不同问题:
| 概念 | 解决的问题 | 例子 |
|---|---|---|
| 表单 | 要问哪些问题、题目如何配置 | 《课程满意度表单》 |
| 问卷实例 | 这次调研发给谁、何时有效 | 2026 年第一期培训评价 |
| 答卷 | 谁在什么时候提交了什么答案 | 张三的课程评价记录 |
同一份《课程满意度表单》可以挂到多期培训任务下,每一期都是独立的 Qnr 实例,各自拥有指派范围和答卷数据。这样,表单结构可以复用,历史调研又不会混在一起。
这里的“复用”指实例引用表单结构,并不意味着修改历史结构后,历史答卷会自动变成另一份问卷。实际系统是否对已发布表单做版本冻结,仍应以具体实现规则为准;对运营来说,发布后的表单应尽量避免直接修改题意。
二、表单结构:10 种题型,题目级约束
QnrFormQs 通过 qsType 表达题目类型,QsTypeEnum 定义了 10 种题型:
| 枚举 | 题型 | 适用场景 |
|---|---|---|
| SINGLE_CHOICE(11) / MULTIPLE_CHOICE(12) | 单选 / 多选 | 选择课程、服务或原因 |
| SINGLE_DROPDOWN(13) / MULTIPLE_DROPDOWN(14) | 下拉单选 / 下拉多选 | 选项较多时节省页面空间 |
| SINGLE_TEXT(15) / MULTIPLE_TEXT(16) | 单行 / 多行文本 | 填写简短意见或详细建议 |
| SCORE(21) | 评分 | 课程、讲师或服务打分 |
| IMAGE(31) | 图片 / 文件上传 | 提交现场照片或凭证 |
| SIGNATURE(41) | 手写签名 | 确认或签字场景 |
| PHONE(51) | 手机号 | 联系方式或短信相关场景 |
题型只是基础,真正影响填写质量的是题目级配置:
| 字段 | 作用 |
|---|---|
| requiredEnable | 控制是否必答 |
| randomEnable | 打乱选项顺序,降低默认选项偏差 |
| textFormat、maxLength、minLength | 约束文本格式与长度 |
| numFormat、numDecimal | 约束数字格式和小数位 |
| maxCount、maxSize | 限制上传数量与文件大小 |
| smsEnable | 手机号题是否触发短信相关能力 |
选项实体 QnrFormQsOption 除了保存 content,还保存 score。因此,一道评分题既可以展示“非常满意—非常不满意”等语义标签,也可以直接产生可统计的分值。
管理端表单维护由 AdminQnrFormController 承担,路径为 /resource/admin/qnr/form。除常规增删改查外,/move 端点支持题目跨表单移动,适合在多个调研模板之间整理题目。
三、问卷实例:有效期和指派决定“怎么发”
表单解决“问什么”,Qnr 实例解决“这次怎么发”。它的字段主要围绕关联对象、有效期、指派范围和发布状态展开。
| 字段 | 作用 |
|---|---|
| categoryId、relateType、relateId | 分类以及与课程、任务等对象的关联 |
| validityDateType | 选择有效期模式 |
| days、beginTime、endTime | 提供有效期参数 |
| assignSet、assignDept、assignUser | 控制指派开关和范围 |
| publishStatus | 区分草稿与已发布 |
| sort、statusId | 控制排序和状态 |
ValidityDateTypeEnum 覆盖三种常见时间策略:
LONG_EFFECTIVE(1) 长期有效 —— 常驻意见反馈 FIXED_DAY(2) 有效天数 —— 发布后 N 天内完成 FIXED_PERIOD(3) 固定周期 —— 指定开始和结束时间指派方式与培训任务的组织模型一致,可以按部门或按用户发布。答卷数据因此天然带有组织属性,后续能够按部门、院区、门店等维度切片。
AdminQnrController 的端点也对应这一生命周期:/assign 负责指派,/batch/publish 支持批量发布,/publish/status 管理发布状态,/user/record 查看答卷记录。
图 2:表单结构复用后,问卷实例独立管理指派、有效期和发布状态。
四、答卷数据:参与关系、逐题明细和汇总记录分开
提交答卷后,系统没有把所有内容塞进一张大表,而是按职责拆成三类实体:
QnrUser(谁需要答、是否完成) └─ QnrUserAnswer(每一道题具体答了什么) └─ QnrUserRecord(一次答卷的汇总信息)| 实体 | 关键字段 | 职责 |
|---|---|---|
| QnrUser | qnrId、userId、completionStatus | 保存用户与问卷的参与关系及完成状态 |
| QnrUserAnswer | recordId、questionId、qsType、userOption、userAnswer、code | 保存逐题作答快照 |
| QnrUserRecord | qnrId、formId、userId、answerTime | 保存一次答卷的汇总记录和用时 |
QnrUserAnswer 使用 userOption 与 userAnswer 两个字段兼容不同题型:选择题保存选项 ID,便于统计;文本题保存原文,便于阅读与分析;code 则可服务于手机号等需要编码或脱敏的场景。
这种拆分有两个直接好处:答卷列表可以快速按用户和问卷查询,题目明细又可以独立展开;导出时也能根据题型选择适合的展示方式。
五、从填写到导出:两条接入链路
学习端的实名答卷链路由 AuthQnrController 提供:
/page 我的问卷列表 ↓ /form 载入表单结构 ↓ /submit 提交答卷 ↓ /record 查看我的答卷记录Web 端入口为 pages/learn/qnr.vue,App 端有对应页面。未登录场景则通过 ApiQnrController 的 /resource/api/qnr 承载匿名调研。
管理端由 AdminQnrUserController 负责答卷管理,路径为 /resource/admin/qnr/user,包括答卷分页、绑定关系查看与解绑,以及 /export 结果导出。导出复用异步导出框架,QnrUserExport 负责问卷结果的具体导出任务。
图 3:答卷提交后,系统按参与关系、逐题明细和汇总记录保存,管理端再进行查看与导出。
六、管理端页面如何承接实际运营
问卷管理页面集中在 views/training/qnr/:
| 页面 | 职责 |
|---|---|
| index.vue | 问卷列表与基础管理 |
| update/index.vue、update/Assign.vue | 问卷编辑、指派与发布 |
| record/index.vue | 答卷记录列表 |
| record/Binding.vue、record/UnbindForm.vue | 人员绑定与解绑 |
| record/Qnr.vue、record/QnrInfo.vue、record/view.vue | 查看问卷结构与作答明细 |
这些页面对应的不是抽象的“后台功能”,而是几个连续的运营动作:先建表单,再创建问卷实例,配置范围和有效期,发布后跟踪完成情况,最后查看或导出结果。
七、设计取舍:轻量、可复用、易导出
这套问卷体系有三项明确取舍:
不做逻辑跳转。题目之间没有条件分支,系统依靠必答配置与选项随机保证基础数据质量。这样会牺牲复杂调研的灵活性,但表单结构更简单,导出和统计也更直接。
实名答卷为主,匿名场景单独接入。QnrUser 关联 userId,便于按组织和人员追踪完成情况;未登录访问则走 ApiQnrController。实名与匿名的数据口径应分开统计,避免直接混用。
结果导出复用异步框架。问卷导出不另起一套任务系统,而是复用 IExport 和现有导出能力。数据量较大时,异步生成文件比让页面长时间等待更适合实际运营。
这些取舍说明了一个方向:问卷系统优先解决“结构清楚、发放可控、答卷可追溯、结果可导出”,而不是一开始就做成高度复杂的调研平台。
结语
织码在线教育系统的问卷能力可以概括为四层:
- 结构层:QnrForm、QnrFormQs、QnrFormQsOption 组成可复用表单,覆盖 10 种题型与题目级约束;
- 实例层:Qnr 管理问卷关联、有效期、指派和发布状态;
- 数据层:QnrUser、QnrUserAnswer、QnrUserRecord 分别保存参与关系、逐题答案和答卷汇总;
- 接入层:管理端维护问卷与结果,学习端完成填写与回看,匿名场景通过 API 接入。
当表单结构、问卷实例和答卷数据各司其职,满意度调查、课程评价和知识普查就不必再“临时拼一个表”。问卷不只是收集答案的页面,更是把培训反馈沉淀为可复用数据的入口。