跳到主要内容
版本:1.3.0

《问卷业务协议规范》

版本

1.0.0

版本规范

版本号使用 MAJOR.MINOR.PATCH:

  1. 大版本:协议结构修订且不兼容时使用 MAJOR
  2. 小版本:协议结构修订且向下兼容时使用 MINOR
  3. 打补丁:协议结构修订问题或者缺陷时使用 PATCH

名词术语

名词含义
编辑器将 JSON 结构渲染显示为用户可交互的界面,主要用于编辑问卷
渲染器将 JSON 结构渲染显示为用户可视化的界面,主要用于预览和回收问卷
协议协议是指问卷的字段、类型和结构定义,用于自描述问卷的题型和回收数据类型
题型题目类型,根据问卷领域提供一系列符合用户习惯的交互组件,如输入框、单选框、复选框、下拉框等等
必填该题目是否必须填写
格式限制文本输入的内容
限制限制问卷回收数量

背景

问卷协议规范,用于约束编辑问卷、回收问卷、数据分析的一套规范,让编辑器、渲染器、以及未来功能扩展时能够保持一致性。

协议概述

协议主要分为两组:

  • 问卷协议:定义整份问卷的协议结构,如标题、提示语、答题方式、结果页,包括页面样式等等
  • 题型协议:定义题型的协议结构,如开放题型的输入类题型,封闭式题型的选项类等等

协议结构

最新定义查看 server/src/modules/survey/template/surveyTemplate/x

顶级结构

字段类型描述
versionString(Semver)版本号
baseConfObject基本配置
dataConfObject题目配置
submitConfObject提交设置
bannerConfObject页面头部设置
bottomConfObject页面尾部设置
skinConfObject样式设置
pageConfArray分页设置
logicConfArray逻辑设置

示例:

{
"version": "1.0.0",
"baseConf": {
"beginTime": "",
"endTime": "",
"language": "chinese",
"showVoteProcess": "allow",
"tLimit": 0,
"answerBeginTime": "",
"answerEndTime": "",
"answerLimitTime": 0
},
"dataConf": {
"dataList": [
{
"field": "data560",
"showIndex": false,
"showType": false,
"showSpliter": true,
"type": "text",
"title": "姓名",
"placeholder": "",
"valid": "",
"isRequired": true,
"minNum": "",
"maxNum": "",
"starStyle": "star",
"starMin": 1,
"starMax": 5,
"rangeConfig": {},
"npsMin": 0,
"npsMax": 0,
"numberRange": {
"min": { "placeholder": "0", "value": 0 },
"max": { "placeholder": "1000", "value": 1000 }
},
"title": "姓名",
"othersKeyMap": {}
}
]
},
"bannerConf": {
"titleConfig": {
"mainTitle": "<h3 style='text-align: center'>欢迎填写问卷</h3>",
"subTitle": "<p>为了给您提供更好的服务,希望您能抽出几分钟时间,将您的感受和建议告诉我们,<span style='color: rgb(204, 0, 0)'>期待您的参与!</span></p>",
"applyTitle": ""
},
"bannerConfig": {
"bgImage": "",
"bgImageAllowJump": false,
"bgImageJumpLink": "",
"videoLink": "",
"postImg": ""
}
},
"bottomConf": {
"logoImage": "",
"logoImageWidth": "28%"
},
"skinConf": {
"skinColor": "#4a4c5b",
"inputBgColor": "ffffff"
},
"submitConf": {
"submitTitle": "",
"msgContent": {},
"confirmAgain": {
"isAgain": true
},
"buttonList": [
{
"title": "",
"url": ""
}
],
"link": "",
"jumpConfig": {
"type": "link",
"link": "",
"buttonText?": ""
}
}
}

基础设置

字段类型默认值枚举值描述
beginTimeDatetime当前时间问卷有效期,开始时间,示例:2023-01-01 00:00:00
endTimeDatetime当前时间加 10 年问卷有效期,结束时间,示例:2038-01-01 00:00:00
answerBeginTimeTime00:00:00答题时段,开始时间,8:00:00
answerEndTimeTime23:59:59答题时段,截止时间,16:00:00
answerLimitTimeInteger0答题限时(分钟),0 为无限制,问卷必须在规定时间内填完,超时自动提交
tLimitInteger0总提交次数限制,0 为无限制,此功能用于限制该问卷总提交的数据量。当数据量达到限额时,该问卷将不能继续提交
languageEnum<String>chinesechinese问卷语言
showVoteProcessEnum<String>allowallow notallow是否显示投票进度

题目设置

基本结构

字段类型描述
fieldString题目 ID,规则:data{RAND(number)},示例:data36
typeEnum<String>题型,如 text、radio、radio-star、matrix-checkbox
titleString题目标题,如果是特殊题型,title 可以为空

题型功能

字段类型描述
isRequiredBoolean必填项
showTypeBoolean显示题型
showIndexBoolean显示题目序号
showSpliterBoolean显示分割线

输入类题型

字段子字段类型枚举值描述
validEnum<String>* 任意格式 n 数值格式 m 手机号格式 e Email 格式 idcard 身份证格式 licensePlate 车牌格式内容格式限制
textRangeObject文本长度区间限制,当限制内容为*时生效
min.valueNumber最短文本长度
min.placeholderString输入提示文案
max.valueNumber最长文本长度
max.placholderString输入提示文案
numberRangeObject数值区间限制,当限制内容为 n 时生效
min.valueNumber最小值
min.placeholderString输入提示文案
max.valueNumber最大值
max.placholderString输入提示文案
placeholderString引导提示文案
单行输入框

通用字段

多行输入框

通用字段

选项类题型

字段子字段类型描述
optionshashString选项 ID
textString选项文本
othersBoolean是否支持自定义输入内容
othersKeyString自定义输入内容 ID
mustOthersBoolean自定义输入内容是否必填
mutexBoolean选项互斥
placeholderString输入提示文案,当 others 为 true 时生效
单选题

通用字段

多选题
{
name: 'minNum',
propType: Number,
description: '最少选择数'
},
{
name: 'maxNum',
propType: Number,
description: '最多选择数'
}
判断题

同单选题

投票题
{
name: 'innerType',
propType: String,
description: '描述单选投票还是多选投票'
},
{
name: 'minNum',
propType: Number,
description: '最少选择数'
},
{
name: 'maxNum',
propType: Number,
description: '最多选择数'
}

评分类题型

字段子字段类型描述
rangeConfigObject<value, Object>自定义输入内容,当题型为评分题、NPS 题时生效,value 为评分值或 NPS 值
isShowInputBoolean是否支持自定义输入内容
requiredBoolean是否必填
textString评分或 NPS 值
explainString输入提示文案
评分题
{
name: 'starMin',
propType: Number,
description: '这是用于描述评分最小值'
},
{
name: 'starMax',
propType: Number,
description: '这是用于描述评分最大值'
},
{
name: 'starStyle',
propType: String,
description: ''
}
NPS 评分题
{
name: 'min',
propType: Number,
description: '这是用于描述NPS量表最小值',
},
{
name: 'max',
propType: Number,
description: '这是用于描述NPS量表最大值',
},
{
name: 'minMsg',
propType: String,
description: '这是用于描述最小值文案',
},
{
name: 'maxMsg',
propType: String,
description: '这是用于描述最大值文案',
}

提交设置

字段子字段类型默认值描述
submitTitleString提交按钮名称
msgContentObject成功/错误提示消息
msg_200String提交成功
msg_9003String您来晚了,已经满额!
msg_9004String提交失败!
confirmAgainObject提交确认按钮配置
isAgainBoolean是否继续

页面头部设置

字段子字段类型描述
titleConfigObject标题设置
mainTitleString主标题
subTitleString页头文案
applyTitleString提交文案
bannerConfigObjectBanner 设置
bgImageString背景图片
bgImageAllowJumpBoolean背景图片是否支持点击跳转
bgImageJumpLinkString背景图片跳转链接
videoLinkString背景视频链接
postImgString视频海报地址

页面尾部设置

字段类型描述
logoImageStringLogo URL
logoImageWidthStringLogo 大小设置

样式设置

字段类型默认值描述
skinColorString#4a4c5b页面主色调
inputBgColorString#ffffff按钮背景颜色
backgroundConfObject背景 设置
colorString颜色
typeString背景类型,Enumcolorimage
imageString背景图片地址
themeConfObject主题 设置
colorString颜色
contentConfObject内容区域 设置
opacityNumber透明度

分页设置

字段类型默认值描述
pageConfArray[]每页数量

逻辑设置

字段类型默认值描述
showLogicConfArray[]显示逻辑
jumpLogicConfArray[]跳转逻辑

Condition

字段类型默认值描述
conditionsArray目标题 ID
targetString目标题 ID
scopeString目标作用类型

Field

字段类型默认值描述
fieldString条件题 ID
operatorString操作符
valueString条件值

示例:

"logicConf": {
"jumpLogicConf": [
{
"target": "end",
"scope": "question",
"conditions": [
{
"field": "data631",
"operator": "neq",
"value": ""
}
]
}
]
}