问卷调研系统怎么设计织码在线教育系统的表单、答卷与结果闭环培训结束后组织者通常还需要回答几个问题学员对课程是否满意哪些内容最难理解不同部门的反馈有没有差异如果只是把几道题临时放进报名表问题很快就会变成“想问的问不了收回来的数据也不好用”。织码在线教育系统把问卷做成了独立能力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一次答卷的汇总信息实体关键字段职责QnrUserqnrId、userId、completionStatus保存用户与问卷的参与关系及完成状态QnrUserAnswerrecordId、questionId、qsType、userOption、userAnswer、code保存逐题作答快照QnrUserRecordqnrId、formId、userId、answerTime保存一次答卷的汇总记录和用时QnrUserAnswer 使用 userOption 与 userAnswer 两个字段兼容不同题型选择题保存选项 ID便于统计文本题保存原文便于阅读与分析code 则可服务于手机号等需要编码或脱敏的场景。这种拆分有两个直接好处答卷列表可以快速按用户和问卷查询题目明细又可以独立展开导出时也能根据题型选择适合的展示方式。五、从填写到导出两条接入链路学习端的实名答卷链路由 AuthQnrController 提供/page 我的问卷列表 ↓ /form 载入表单结构 ↓ /submit 提交答卷 ↓ /record 查看我的答卷记录Web 端入口为 pages/learn/qnr.vueApp 端有对应页面。未登录场景则通过 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 接入。当表单结构、问卷实例和答卷数据各司其职满意度调查、课程评价和知识普查就不必再“临时拼一个表”。问卷不只是收集答案的页面更是把培训反馈沉淀为可复用数据的入口。
阅读完成 · 觉得有帮助?