Skip to content

Latest commit

History

50 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

在线问卷系统

这是个前后端分离的、支持跨域访问的REST风格的Vue.js+Spring Boot项目,开发工具为IDEA,数据库为MySQL。由于当时时间匆忙及能力有限,部分功能实现有待进一步优化,可移步参考我最近整理的SpringBoot 2.x+Maven多模块项目示例进行修改。

前端地址

体验地址

数据库名称:questionnaire

字符集:UTF-8

user表

字段类型长度Null默认主键唯一说明
idvarchar64notY用户ID
usernamevarchar64not用户昵称
passwordvarchar64notmd5加密后的密码
emailvarchar64notY邮箱
create_timedatetimenot用户创建时间
last_login_timedatetimenullnull用户最后登录时间
statusintnot0用户账号状态
0:未激活
1:已激活
random_codevarchar64notY随机码(用户激活邮箱)

paper表

字段类型长度Null默认主键唯一说明
idvarchar64notY问卷ID
user_idvarchar64not用户ID,外键
titlevarchar64not问卷标题
create_timedatetimenot问卷创建时间
statusintnot0问卷状态
0:未发布
1:已发布
2:已结束
3:已删除
start_timedatetimenullnull开始时间
end_timedatetimenullnull截止时间

question表

字段类型长度Null默认主键唯一说明
idvarchar64notY问题ID
paper_idvarchar64not问卷ID,外键
create_timedatetimenot问题创建时间
question_typeintnot问题类型
1:单选
2:多选
3:简答
question_titlevarchar128not问题标题
question_optionvarchar512not问题选项
1:选择题,数组字符串
[option1,option2,option3...]
2:简答题,空数组字符串
[]

answer表

字段类型长度Null默认主键唯一说明
idvarchar64notY答案ID
paper_idvarchar64not问卷ID,外键
question_idvarchar64not问题ID,外键
question_typeintnot问题类型
1:单选
2:多选
3:简答
create_timedatetimenot答题时间
answer_optionvarchar512not答题选项
1:选择题,来自question表的问题选项,单选题只有一个option,多选至少一个
[option1,option2,option3...]
2:简答题,至多一个元素的数组字符串
["只能有一个元素"]
若未达,则无元素
[]

API

编码方式均为UTF-8

1.管理员相关

1.1 注册

接口地址

domain/api/v1/register

请求方式

HTTP POST

请求示例

{
"username": "Alice",
"password": "123456",
"email": "alice@gmail.com"
}

请求参数

参数类型是否必须取值范围说明
usernameStringY2-64个字符用户名(昵称)
passwordStringY6-64个字符登录密码
emailStringY5-64个字符且格式正确邮箱

返回参数

返回示例

{
"code": 0,
"msg": "ok",
"data": 0
}

参数说明

参数类型是否必须取值范围说明
codeintY-请求状态码
msgStringY-消息提示
dataintN-结果数据

code说明

状态值说明
-1token失效或未登录(用于需要登录后才能进行的操作)
0请求成功(全文适用,下文不再赘述)
1系统异常(全文适用,下文不再赘述)
2参数不正确(全文适用,下文不再赘述)

code的补充

  • code非0时,无data参数,可通过msg判断问题原因
  • code取0时,若data中有值,则data参数存在,否则无data参数

data说明

状态值说明
0注册成功,等待邮件激活
1邮箱已被注册过且被激活
2邮箱被注册过,但未激活,重新发送激活邮件

1.2 激活

接口地址

domain/api/v1/activate

请求方式

HTTP GET 请求示例

domain/api/v1/activate/code

请求参数

参数类型是否必须取值范围说明
codeStringY-激活码(即随机码)

返回参数

说明

  1. 若激活成功,跳转success页面
  2. 若激活码已失效,跳转invalid页面

1.3 登录

接口地址

domain/api/v1/login

请求方式

HTTP POST

请求示例

{ "email": "alice@gmail.com",
"password": "123456" }

请求参数

参数类型是否必须取值范围说明
emailStringY5-64个字符邮箱
passwordStringY6-64个字符登录密码

返回参数

返回示例

//登录成功
{
"code": 0,
"msg": "ok",
"data": {
"result": 0,
"token": "abcdefghijkl12345",
"username": "Alice",
"email": "abc@gmail.com
}
}
//登录失败
{
"code": 0,
"msg": "password error",
"data": {
"result": 1
}
}

参数说明

参数类型是否必须取值范围说明
codeintY-请求状态码
msgStringY-消息提示
dataObjectN-结果

data说明

参数类型是否必须取值范围说明
resultintY-结果
tokenStringN-登陆成功后用于身份识别,凡请求的URL中含admin都需要将token放入请求header
usernameStringN-昵称
emailStringN-邮箱

result说明

取值说明
0登录成功
1密码错误
2用户不存在
3账号未激活

header使用token示例

 ...
headers: {'token': token }
...

1.4 退出登录

接口地址

domain/api/v1/admin/logout

请求方式

HTTP GET

请求示例

请求参数

返回参数

返回示例

{
"code": 0,
"msg": "ok",
"data": 0
}

参数说明

参数类型是否必须取值范围说明
codeintY-请求状态码
msgStringY-消息提示
dataintN-结果:0.退出成功,1.失败(未登录或登录已超时)

2.问卷相关

2.1 管理员获取问卷列表

接口地址

domain/api/v1/admin/paper-lists

请求方式

HTTP GET

请求示例

请求参数

返回参数

返回示例

//成功
{
"code": 0,
"msg": "ok",
"data": [
{"id": "12345678910","title": "问卷", "status": 0, "createTime": 1536887397173, "startTime": "2018-09-20", "endTime": "2018-10-01"},
{"id": "22345678910","title": "问卷标题", "status": 1, "createTime": 1536887397666, "startTime": "2018-09-10", "endTime": "2018-10-01"},
{"id": "32345678910","title": "问题", "status": 2, "createTime": 1536887397888, "startTime": "2018-09-10", "endTime": "2018-09-12"},
{"id": "42345678910","title": "标题", "status": 0, "createTime": 1536887397173, "startTime": "", "endTime": ""}
]
}
//失败
{ "code": 1,
"msg": "server exception"
}
//token过期或未登录,下同
{ "code": -1,
"msg": "token expired or not login",
}

参数说明

参数类型是否必须取值范围说明
idStringY-问卷ID
titleStringY-问卷标题
statusintY-问卷状态:0.未发布,1.已发布,2.已结束
createTimelongY-问卷创建时的时间戳
startTimeStringY-问卷开达日期,若未设置则是空字符串
endTimeStringY-问卷结束日期,若未设置则是空字符串

2.2 查看问卷

接口地址

domain/api/v1/admin/view-paper

请求方式

HTTP POST

请求示例

{
"id": "4askfj1093jfi9348oueir932"
}

请求参数

参数类型是否必须取值范围说明
idStringY-问卷id

返回参数

返回示例

{
"code": 0,
"msg": "ok",
"data": {
"id": "4askfj1093jfi9348oueir932",
"title": "你幸福吗的调查",
"status": 0,
"createTime": 1536887397173,
"startTime": "2018-09-12",
"endTime": "2018-10-01", "questions": [
{"id": "1234", "questionType":1, "questionTitle": "你的收入是多少?", "questionOption": ["2000以下", "2000-5000", "5000+"]},
{"id": "2234", "questionType":2, "questionTitle": "你家里有哪些家电?", "questionOption": ["冰箱", "洗衣机", "空调", "麻将机"]},
{"id": "3234", "questionType":3, "questionTitle": "说一说你觉得最幸福的事", "questionOption": []}
]
}
}

data参数说明

参数类型是否必须取值范围说明
idStringY-问卷ID
titleStringY-问卷标题
statusintY-问卷状态:0.未发布,1.已发布,2.已结束
createTimelongY-问卷创建时的时间戳
startTimeStringY-问卷开达日期,若未设置则是空字符串
endTimeStringY-问卷结束日期,若未设置则是空字符串
questionsArrayY-问题列表

questions参数说明

参数类型是否必须取值范围说明
idStringY-问题ID
questionTypeintY-问题类型:1.单选题,2.多选题,3.简答题
questionTitleStringY-问题标题
questionOptionArrayY-问题选项:简答题为空的Array

2.3 新增问卷

接口地址

//与更新问卷共用接口
domain/api/v1/admin/update-paper

请求方式

HTTP POST

请求示例

{
"title": "你幸福吗的调查",
"startTime": "2018-09-12",
"endTime": "2018-10-01",
"status": 0,
"questions": [
{"questionType":1, "questionTitle": "你的收入是多少?", "questionOption": ["2000以下", "2000-5000", "5000+"]},
{"questionType":2, "questionTitle": "你家里有哪些家电?", "questionOption": ["冰箱", "洗衣机", "空调", "麻将机"]},
{"questionType":3, "questionTitle": "说一说你觉得最幸福的事", "questionOption": []}
]
}

请求参数

参数类型是否必须取值范围说明
titleStringY2-64个字符问卷名称
startTimeStringY10个字符开始日期,若未设置则是空字符串
endTimeStringY10个字符结束日期,若未设置则是空字符串
statusintY0或1问卷状态,0:不发布仅保存;1:发布(此时start_time和end_time必须有合法取值);

questions参数说明

参数类型是否必须取值范围说明
questionTypeintY-问题类型:1.单选题,2.多选题,3.简答题
questionTitleStringY1-128字符问题标题
questionOptionArrayY-问题选项, 是选择题则至少有两个元素,简答题无元素

返回参数

返回示例

{
"code": 0,
"msg": "ok",
"data": 0
}

参数说明

参数类型是否必须取值范围说明
codeintY--1.token失效或未登录,0.请求成功,1.系统异常
msgStringY-提示消息
dataintN-0.成功

2.4 修改问卷

接口地址

//与新增问卷共用接口,仅多一个参数id
domain/api/v1/admin/update-paper

请求方式

HTTP POST

请求示例

//页面中的数据来自view-paper接口,若管理员选择更新,则删除原id的paper的问题,再为该id的paper插入questions的新题目
{
"id": "4askfj1093jfi9348oueir932", //在add-paper中无此参数
"title": "你幸福吗的调查",
"status": 0,
"startTime": "2018-09-12",
"endTime": "2018-10-01", "questions": [
{"questionType":1, "questionTitle": "你的收入是多少?", "questionOption": ["2000以下", "2000-5000", "5000+"]},
{"questionType":2, "questionTitle": "你家里有哪些家电?", "questionOption": ["冰箱", "洗衣机", "空调", "麻将机"]},
{"questionType":3, "questionTitle": "说一说你觉得最幸福的事", "questionOption": []}
]
}
}

请求参数

参数说明

参数类型是否必须取值范围说明
idStringY-问卷ID
titleStringY-问卷标题
statusintY-问卷状态:0.未发布,1.发布
startTimeStringY-问卷开达日期,若未设置则是空字符串
endTimeStringY-问卷结束日期,若未设置则是空字符串
questionsArrayY-问题列表

questions参数说明

参数类型是否必须取值范围说明
questionTypeintY-问题类型:1.单选题,2.多选题,3.简答题
questionTitleStringY-问题标题
questionOptionArrayY-问题选项, 是选择题则至少有两个元素,简答题无元素

返回参数

返回示例

{
"code": 0,
"msg": "ok",
"data": 0
}

data参数说明

参数类型是否必须取值范围说明
dataintY-0.操作成功,1.操作失败,2.paper的id非法(无此问卷)

2.5 删除问卷

接口地址

domain/api/v1/admin/delete-paper

请求方式

HTTP POST

请求示例

{
"idList": ["4askfj1093jfi9348oueir932", "sfs6f465vfsdf65sf654s6sf"]
}

请求参数

参数类型是否必须取值范围说明
idListArrayY-问卷id列表,至少一个元素

返回参数

返回示例

{
"code": 0,
"msg": "ok",
"data": 0
}

data参数说明

参数类型是否必须取值范围说明
dataintY-0.操作成功,1.操作失败,2.paper的id非法(无此问卷)

2.6 用户查看问卷(答卷页面)

接口地址

domain/api/v1/user/view-paper?id=4askfj1093jfi9348oueir932

请求方式

HTTP GET

请求示例

请求参数

参数类型是否必须取值范围说明
idStringY-问卷id

返回参数

返回示例

{
"code": 0,
"msg": "ok",
"data": {
"status": 0, //只有status为1时才可作答
"id": "4askfj1093jfi9348oueir932",
"title": "你幸福吗的调查", "createTime": 1536887397173,
"startTime": "2018-09-12",
"endTime": "2018-10-01",
"questions": [
{"id": "1234", "questionType":1, "questionTitle": "你的收入是多少?", "questionOption": ["2000以下", "2000-5000", "5000+"]},
{"id": "2234", "questionType":2, "questionTitle": "你家里有哪些家电?", "questionOption": ["冰箱", "洗衣机", "空调", "麻将机"]},
{"id": "3234", "questionType":3, "questionTitle": "说一说你觉得最幸福的事", "questionOption": []}
]
}
}

data参数说明

参数类型是否必须取值范围说明
statusintY-问卷状态:0.未发布,1.发布中(可作答),2.已结束,3.无此问卷,4.已发布但未到开始时间
idStringN-问卷ID
titleStringN-问卷标题
createTimelongN-问卷创建时的时间戳
startTimeStringN-问卷开达日期,若未设置则是空字符串
endTimeStringN-问卷结束日期,若未设置则是空字符串
questionsArrayN-问题列表

questions参数说明

参数类型是否必须取值范围说明
idStringY-问题ID
questionTypeintY-问题类型:1.单选题,2.多选题,3.简答题
questionTitleStringY-问题标题
questionOptionArrayY-问题选项, 是选择题则至少有两个元素,简答题无元素

补充说明

  1. status为必须参数
  2. 若status为0或3,则data中除status外无其他参数
  3. 若status为1,data中包含全部参数,用户可正常作答
  4. 若status为2或4,data中只包含title、startTime、endTime,用于提示用户

2.7 提交问卷答案

接口地址

domain/api/v1/user/commit-paper

请求方式

HTTP POST

请求示例

//页面中的数据来自view-paper接口
{
"id": "4askfj1093jfi9348oueir932",
"answers": [
{"id": "1234", "questionType":1, "answerContent": ["2000-5000"]}, //单选题,Array中仅一个元素
{"id": "2234", "questionType":2, "answerContent": ["空调", "麻将机"]}, //多选,Array中至少一个元素
{"id": "3234", "questionType":3, "answerContent": ["上了王者"]} //简答
]
}
}

请求参数

参数类型是否必须取值范围说明
idStringY-问卷ID
answersArrayY-答案列表

answers参数说明

参数类型是否必须取值范围说明
idStringY-问题id
questionTypeintY-问题类型:1.单选,2.多选,3.简答
answerContent-Y0-512字符答题选项, 是选择题则至少有一个元素,简答题最多一个元素(不答则为无元素)

返回参数

返回示例

{
"code": 0,
"msg": "ok"
}

data参数说明

参数类型是否必须取值范围说明
codeintY-0.操作成功,1.操作失败,2.问卷id无效

2.8 查看问卷数据

接口地址

domain/api/v1/admin/paper-data

请求方式

HTTP POST

请求示例

{
"id": "4askfj1093jfi9348oueir932"
}

请求参数

参数类型是否必须取值范围说明
idStringY-问卷id

返回参数

返回示例

{
"code": 0,
"msg": "ok",
"data": {
"id": "4askfj1093jfi9348oueir932",
"title": "你幸福吗的调查",
"status": 0,
"createTime": 1536887397173,
"startTime": "2018-09-12",
"endTime": "2018-10-01", "totalCount": 140,
"questions": [
{
"id": "1234", "questionType":1, "questionTitle": "你的收入是多少?", "questionOption": ["2000以下", "2000-5000", "5000+"],
"answerContent": [10, 30, 100]
},
{ "id": "2234", "questionType":2, "questionTitle": "你家里有哪些家电?", "questionOption": ["冰箱", "洗衣机", "空调", "麻将机"],
"answerContent": [30, 40, 80, 20]
},
{ "id": "3234", "questionType":3, "questionTitle": "说一说你觉得最幸福的事", "questionOption": [],
"answerContent": [
"从青铜",
"到黄金",
"到王者" ]
},
{ "id": "4234", "questionType":3, "questionTitle": "说一说你觉得最难过的事", "questionOption": [],
"answerContent": [
"从王者", "到青铜" ]
}
]
}
}

data参数说明

参数类型是否必须取值范围说明
idStringY-问卷ID
titleStringY-问卷标题
statusintY-问卷状态:0.未发布,1.已发布,2.已结束
createTimelongY-问卷创建时的时间戳
startTimeStringY-问卷开达日期,若未设置则是空字符串
endTimeStringY-问卷结束日期,若未设置则是空字符串
totalCountintY-问卷被达总次数(人次)
questionsArrayY-问题列表

questions参数说明

参数类型是否必须取值范围说明
idStringY-问题ID
questionTypeintY-问题类型:1.单选题,2.多选题,3.简答题
questionTitleStringY-问题标题
questionOptionArrayY-问题选项,选择题是Array,简答题为空字符串
answerContentArrayY-答案内容,选择题中的元素为int,简答题为String

2.9 下载问卷模板文件

文件地址

domain/template.xls

使用方式

<ahref="url">下载模板</a>

2.10 上传问卷模板文件生成问卷

接口地址

domain/api/v1/admin/upload

请求方式

HTTP POST

请求示例

{
"file": FILE //文件
}

请求参数

参数类型是否必须取值范围说明
fileFILEY-文件模板文件(Excel)

返回参数

返回示例

{
"code": 0,
"msg": "ok"
}

data参数说明

参数类型是否必须取值范围说明
codeintY-0.操作成功,1.系统异常,2.文件不合法

常见返回值情形

codemsg
-1账号未登录或登录已经失效
0ok
1异常的具体信息
2未选择文件!
2文件类型不支持!
2文件大小限制在100KB以内!
2文件转换失败,请注意格式要求!

About

springboot+mybatis在线问卷系统

Topics

Resources

Stars

181 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages