优化错题,收藏,增加删除,增加报名列表

This commit is contained in:
flower 2019-01-26 00:55:09 +08:00
parent c263ef9442
commit b92279a498
18 changed files with 466 additions and 369 deletions

View File

@ -1,5 +1,6 @@
package com.ruoyi.cms.controller;
import com.github.pagehelper.PageInfo;
import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.exam.domain.*;
import com.ruoyi.exam.service.*;
@ -14,6 +15,7 @@ import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.*;
@ -59,6 +61,47 @@ public class CmsExaminationController {
return prefix + "list";
}
/**
* 考试列表
* @param map
* @return
*/
@RequestMapping("/examination/list")
@GetMapping()
@ResponseBody
public AjaxResult list(ExamExamination examExamination) {
SysUser sysUser = sysUserService.selectUserByLoginName( ShiroUtils.getLoginName() );
Map<String, Object> map = new HashMap<>();
map.put( "ination", examExamination );
map.put( "userId", sysUser.getUserId() );
List<ExamExamination> list = examExaminationService.selectListFromWeb( map );
AjaxResult success = AjaxResult.success( "查询成功" );
success.put( "data", list );
success.put("total",new PageInfo(list).getTotal());
return success;
}
/**
* 报名列表
* @param map
* @return
*/
@RequestMapping("/examination/signuplist")
@GetMapping()
@ResponseBody
public AjaxResult signupist(ExamExamination examExamination) {
SysUser sysUser = sysUserService.selectUserByLoginName( ShiroUtils.getLoginName() );
Map<String, Object> map = new HashMap<>();
map.put( "ination", examExamination );
map.put( "userId", sysUser.getUserId() );
List<ExamExamination> list = examExaminationService.selectEnterNameListFromWeb( map );
AjaxResult success = AjaxResult.success( "查询成功" );
success.put("total",new PageInfo(list).getTotal());
success.put( "data", list );
return success;
}
@RequestMapping("/examination/start/{id}")
@GetMapping()
public String start(@PathVariable String id, ModelMap mmap) {

View File

@ -1,9 +1,9 @@
package com.ruoyi.cms.controller;
import com.ruoyi.exam.domain.ExamPractice;
import com.ruoyi.exam.domain.ExamUserErrorQuestion;
import com.ruoyi.exam.domain.ExamUserErrorQuestionVO;
import com.ruoyi.common.base.AjaxResult;
import com.ruoyi.exam.domain.*;
import com.ruoyi.exam.service.IExamPracticeService;
import com.ruoyi.exam.service.IExamUserCollectionQuestionService;
import com.ruoyi.exam.service.IExamUserErrorQuestionService;
import com.ruoyi.framework.jwt.JwtUtil;
import com.ruoyi.framework.web.util.ShiroUtils;
@ -23,6 +23,7 @@ import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@ -44,6 +45,9 @@ public class CmsUserController {
@Autowired
private IExamUserErrorQuestionService examUserErrorQuestionService;
@Autowired
private IExamUserCollectionQuestionService examUserCollectionQuestionService;
@RequestMapping("/user/login.html")
@ -93,4 +97,60 @@ public class CmsUserController {
map.put( "user", ShiroUtils.getSysUser() );
return prefix + "/user/errorquestion";
}
@RequestMapping("/user/collectquestion.html")
public String collectQuestion(ModelMap map) {
ExamUserCollectionQuestionVO examUserCollectionQuestion = new ExamUserCollectionQuestionVO();
SysUser sysUser = ShiroUtils.getSysUser();
examUserCollectionQuestion.setVipUserId( sysUser.getUserId().intValue() );
List<ExamUserCollectionQuestionVO> list = examUserCollectionQuestionService.selectExamUserCollectionQuestionList( examUserCollectionQuestion );
map.put("data", list);
map.put( "user", ShiroUtils.getSysUser() );
return prefix + "/user/collectquestion";
}
/**
* 增加错题
* @param questionId
* @return
*/
@RequestMapping("/user/adderrorquestion")
@ResponseBody
public AjaxResult addErrorquestion(String questionId) {
SysUser sysUser = ShiroUtils.getSysUser();
examUserErrorQuestionService.insertError(questionId,sysUser);
AjaxResult success = AjaxResult.success("插入成功");
return success;
}
@RequestMapping("/user/addcollectquestion")
@ResponseBody
public AjaxResult addCollectionquestion(String questionId) {
SysUser sysUser = ShiroUtils.getSysUser();
examUserCollectionQuestionService.insertSelectiveBySelf(Integer.parseInt(questionId),sysUser);
AjaxResult success = AjaxResult.success("插入成功");
return success;
}
@RequestMapping("/user/delerrorquestion")
@ResponseBody
public AjaxResult delErrorquestion(Integer questionId) {
ExamUserErrorQuestion question = new ExamUserErrorQuestion();
question.setVipUserId(ShiroUtils.getUserId().intValue());
question.setExamQuestionId(questionId);
examUserErrorQuestionService.delete(question);
AjaxResult success = AjaxResult.success("删除成功");
return success;
}
@RequestMapping("/user/delcollectquestion")
@ResponseBody
public AjaxResult delCollectionquestion(Integer questionId) {
ExamUserCollectionQuestion examUserCollectionQuestion = new ExamUserCollectionQuestion();
examUserCollectionQuestion.setVipUserId(ShiroUtils.getUserId().intValue());
examUserCollectionQuestion.setExamQuestionId(questionId);
examUserCollectionQuestionService.delete(examUserCollectionQuestion);
AjaxResult success = AjaxResult.success("删除成功");
return success;
}
}

View File

@ -8,110 +8,130 @@
</div>
<div class="layui-container">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="fly-panel">
<table class="layui-hide" id="test" lay-filter="test"></table>
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="fly-panel">
<div class="layui-tab">
<ul class="layui-tab-title">
<li class="layui-this">考试列表</li>
<li>报名列表</li>
</ul>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
<table class="layui-hide" id="test" lay-filter="test"></table>
</div>
<div class="layui-tab-item"><table class="layui-hide" id="signupList" lay-filter="signupList"></table></div>
</div>
</div>
<script type="text/html" id="barDemo">
<a class="layui-btn layui-btn-xs" lay-event="start">开始考试
</a>
<!--<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>-->
</script>
<script type="text/html" id="barDemo">
<a class="layui-btn layui-btn-xs" lay-event="start">开始考试
</a>
</script>
</div>
<script type="text/html" id="signup">
<a class="layui-btn layui-btn-xs" lay-event="signup">报名
</a>
</script>
</div>
</div>
</div>
</div>
</div>
<div class="fly-footer" th:replace="web/index::cmsBottom">
</div>
<script src="/web/res/layui/layui.js"></script>
<script src="/js/jquery.min.js"></script>
<script type="text/javascript">var cnzz_protocol = (("https:" == document.location.protocol) ? " https://" : " http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_30088308'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "w.cnzz.com/c.php%3Fid%3D30088308' type='text/javascript'%3E%3C/script%3E"));</script>
<script type="text/javascript">var cnzz_protocol = (("https:" == document.location.protocol) ? " https://" : " http://");
document.write(unescape("%3Cspan id='cnzz_stat_icon_30088308'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "w.cnzz.com/c.php%3Fid%3D30088308' type='text/javascript'%3E%3C/script%3E"));</script>
<script type="text/javascript">
var layer;
$(function(){
layui.use('layer', function(){
$(function () {
layui.use('layer', function () {
layer = layui.layer;
});
var errormsg = '[[${error}]]';
if(errormsg){
if (errormsg) {
layer.msg(errormsg, {icon: 2});
}
})
layui.use('table', function(){
layui.use('table', function () {
var table = layui.table;
table.render({
elem: '#test'
,url:'/api/v1/examination/list'
,title: '用户数据表'
,cols: [ [
{checkbox: true}
,{field: 'name', title: '考试名称'}
,{field: 'trainCourseName', title: '课程名称'}
,{field: 'timeLength', title: '考试时长'}
,{field: 'passMark', title: '及格分数'}
,{title: '操作',toolbar: '#barDemo'}
, url: '/web/examination/list'
, title: '用户数据表'
, cols: [ [
{checkbox: true}
, {field: 'name', title: '考试名称'}
, {field: 'trainCourseName', title: '课程名称'}
, {field: 'timeLength', title: '考试时长'}
, {field: 'passMark', title: '及格分数'}
, {title: '操作', toolbar: '#barDemo'}
] ]
,request: {
, request: {
pageName: 'pageNumber' //页码的参数名称默认page
,limitName: 'pageSize' //每页数据量的参数名默认limit
, limitName: 'pageSize' //每页数据量的参数名默认limit
}
,response: {
, response: {
statusCode: 200,
countName: 'total'//规定成功的状态码默认0
}
,page: true
, page: true
});
//头工具栏事件
table.on('toolbar(test)', function(obj){
table.on('toolbar(test)', function (obj) {
var checkStatus = table.checkStatus(obj.config.id);
switch(obj.event){
switch (obj.event) {
case 'getCheckData':
var data = checkStatus.data;
layer.alert(JSON.stringify(data));
break;
case 'getCheckLength':
var data = checkStatus.data;
layer.msg('选中了:'+ data.length + ' 个');
layer.msg('选中了:' + data.length + ' 个');
break;
case 'isAll':
layer.msg(checkStatus.isAll ? '全选': '未全选');
layer.msg(checkStatus.isAll ? '全选' : '未全选');
break;
};
}
;
});
//监听行工具事件
table.on('tool(test)', function(obj){
table.on('tool(test)', function (obj) {
var data = obj.data;
//console.log(obj)
if(obj.event === 'del'){
layer.confirm('真的删除行么', function(index){
if (obj.event === 'del') {
layer.confirm('真的删除行么', function (index) {
obj.del();
layer.close(index);
});
} else if(obj.event === 'edit'){
} else if (obj.event === 'edit') {
layer.prompt({
formType: 2
,value: data.email
}, function(value, index){
, value: data.email
}, function (value, index) {
obj.update({
email: value
});
@ -120,17 +140,52 @@
}
});
table.on('tool(test)', function(obj){ //注tool 是工具条事件名test 是 table 原始容器的属性 lay-filter="对应的值"
table.on('tool(test)', function (obj) { //注tool 是工具条事件名test 是 table 原始容器的属性 lay-filter="对应的值"
var data = obj.data //获得当前行数据
,layEvent = obj.event; //获得 lay-event 对应的值
if(layEvent === 'start'){
window.location.href = "/web/examination/start/"+data.id;
, layEvent = obj.event; //获得 lay-event 对应的值
if (layEvent === 'start') {
window.location.href = "/web/examination/start/" + data.id;
}
})
});
layui.use('table', function () {
var table = layui.table;
table.render({
elem: '#signupList'
, url: '/web/examination/signuplist'
, title: '用户数据表'
, cols: [ [
{checkbox: true}
, {field: 'name', title: '考试名称'}
, {field: 'trainCourseName', title: '课程名称'}
, {field: 'timeLength', title: '考试时长'}
, {field: 'passMark', title: '及格分数'}
, {title: '操作', toolbar: '#signup'}
] ]
, request: {
pageName: 'pageNumber' //页码的参数名称默认page
, limitName: 'pageSize' //每页数据量的参数名默认limit
}
, response: {
statusCode: 200,
countName: 'total'//规定成功的状态码默认0
}
, page: true
});
table.on('tool(signup)', function (obj) { //注tool 是工具条事件名test 是 table 原始容器的属性 lay-filter="对应的值"
var data = obj.data //获得当前行数据
, layEvent = obj.event; //获得 lay-event 对应的值
if (layEvent === 'start') {
window.location.href = "/web/examination/start/" + data.id;
}
})
});
</script>

View File

@ -186,11 +186,12 @@
<img src="https://tva1.sinaimg.cn/crop.0.0.118.118.180/5db11ff4gw1e77d3nqrv8j203b03cweg.jpg">
</a>
<dl class="layui-nav-child">
<!--<dd><a th:href="@{/web/user/message.html}"><i class="iconfont icon-tongzhi" style="top: 4px;"></i>我的消息</a></dd>-->
<!--<dd><a th:href="@{/web/user/home.html}"><i class="layui-icon" style="margin-left: 2px; font-size: 22px;">&#xe68e;</i>我的主页</a></dd>-->
<dd><a th:href="@{/web/user/set.html}"><i class="layui-icon">&#xe620;</i>基本设置</a></dd>
<dd><a th:href="@{/web/user/message.html}"><i class="iconfont icon-tongzhi" style="top: 4px;"></i>我的消息</a></dd>
<dd><a th:href="@{/web/user/home.html}"><i class="layui-icon" style="margin-left: 2px; font-size: 22px;">&#xe68e;</i>我的主页</a></dd>
<dd><a th:href="@{/web/user/errorquestion.html}"><i class="layui-icon" style="margin-left: 2px; font-size: 22px;">&#xe63c;</i>我的错题本</a></dd>
<dd><a th:href="@{/web/user/collect.html}"><i class="layui-icon" style="margin-left: 2px; font-size: 22px;">&#xe600;</i>我的收藏</a></dd>
<dd><a th:href="@{/web/user/set.html}"><i class="layui-icon" style="margin-left: 2px; font-size: 22px;">&#xe63c;</i>更多...</a></dd>
<!--<dd><a th:href="@{/web/user/collectquestion.html}"><i class="layui-icon" style="margin-left: 2px; font-size: 22px;">&#xe600;</i>我的收藏</a></dd>-->
<dd><a href="" style="text-align: center;">退出</a></dd>
</dl>
</li>

View File

@ -81,12 +81,11 @@ document.write(unescape("%3Cspan id='cnzz_stat_icon_30088308'%3E%3C/span%3E%3Csc
$.ajax({
type: 'post',
url: "/api/v1/practice/answer",
contentType: "application/json",
data: "[" + id + "]",
url: "/web/user/adderrorquestion",
data: {questionId:id},
success: function (result) {
if (result.code != web_status.SUCCESS) {
layer.msg('result.msg', {icon: 2});
layer.msg(result.msg, {icon: 2});
}
}
});
@ -98,6 +97,19 @@ document.write(unescape("%3Cspan id='cnzz_stat_icon_30088308'%3E%3C/span%3E%3Csc
$("#" + id + "answer").show()
}
function shoucang(id){
$.ajax({
type: 'post',
url: "/web/user/addcollectquestion",
data: {questionId:id},
success: function (result) {
if (result.code != web_status.SUCCESS) {
layer.msg(result.msg, {icon: 2});
}
}
});
}
function checkbox(value) {
$(value).prev().prop("checked", !$(value).prev().prop("checked"));
}

View File

@ -0,0 +1,74 @@
<!DOCTYPE HTML>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<meta charset="utf-8">
<head th:include="web/index::cmsHeader">
</head>
<body>
<div class="fly-header layui-bg-black" th:replace="web/index::top">
</div>
<div class="layui-container fly-marginTop fly-user-main">
<div th:replace="web/user/set::userinfo">
</div>
<div class="fly-panel fly-panel-user" pad20>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
<legend>我的收藏</legend>
</fieldset>
<div class="layui-collapse" lay-filter="test">
<div class="layui-colla-item" th:each="item:${data}">
<h2 class="layui-colla-title">[[${itemStat.index+1}]]:[[${item.question.title}]]
<span th:if="${item.question.type=='1'}">(单选)</span>
<span th:if="${item.question.type=='2'}">(多选)</span>
<span th:if="${item.question.type=='3'}">(判断)</span>
<button class="layui-btn layui-btn-primary layui-btn-sm" th:onclick="'del('+${item.question.id}+')'">删除</button></h2>
<div class="layui-colla-content">
<p th:each="qItem:${item.question.questionItem}">[[${qItem.number}]]:[[${qItem.content}]]</p>
<p>解析:正确答案[[${item.question.answer}]]</p>
<p>[[${item.question.label}]]</p>
</div>
</div>
</div>
</div>
</div>
<div class="fly-footer" th:replace="web/index::cmsBottom">
</div>
<script src="/web/res/layui/layui.js"></script>
<script src="/js/jquery.min.js"></script>
<script type="text/javascript">var cnzz_protocol = (("https:" == document.location.protocol) ? " https://" : " http://");
document.write(unescape("%3Cspan id='cnzz_stat_icon_30088308'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "w.cnzz.com/c.php%3Fid%3D30088308' type='text/javascript'%3E%3C/script%3E"));</script>
<script type="text/javascript">
$(function(){
$("#collectquestion").addClass("layui-this")
})
function del(id) {
$.ajax({
type: 'post',
url: "/web/user/delcollectquestion",
data: {questionId:id},
success: function (result) {
if (result.code != web_status.SUCCESS) {
layer.msg(result.msg, {icon: 2});
}else{
window.location="/web/user/collectquestion.html"
}
}
});
}
</script>
</body>
</html>

View File

@ -6,51 +6,37 @@
<body>
<div class="fly-header layui-bg-black" th:replace="web/index::top">
</div>
<div class="layui-container">
<div class="layui-row layui-col-space15">
<div class="layui-col-md15">
<div class="fly-panel">
<div class="layui-col-md15">
<div class="layui-col-md12">
<div class="layui-card" th:each="item:${data}">
<div class="layui-card-header">[[${itemStat.index+1}]]:<span
th:text="${item.question.title}"></span>
<span th:if="${item.question.type=='1'}">(单选)</span>
<span th:if="${item.question.type=='2'}">(多选)</span>
<span th:if="${item.question.type=='3'}">(判断)</span>
</div>
<div class="layui-card-body" th:each="qItem:${item.question.questionItem}">
[[${qItem.number}]]:
<span th:text="${qItem.content}" ></span>
</div>
<div class="layui-card-body" th:id="${item.question.id}+'answer'">
解析:正确答案[[${item.question.answer}]]<br>
[[${item.question.label}]]
</div>
</div>
</div>
</div>
</div>
</div>
<div class="layui-container fly-marginTop fly-user-main">
<div th:replace="web/user/set::userinfo">
</div>
<div class="fly-panel fly-panel-user" pad20>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
<legend>我的错题</legend>
</fieldset>
<div class="layui-collapse" lay-filter="test">
<div class="layui-colla-item" th:each="item:${data}">
<h2 class="layui-colla-title">[[${itemStat.index+1}]]:[[${item.question.title}]]
<span th:if="${item.question.type=='1'}">(单选)</span>
<span th:if="${item.question.type=='2'}">(多选)</span>
<span th:if="${item.question.type=='3'}">(判断)</span>
<button class="layui-btn layui-btn-primary layui-btn-sm" th:onclick="'del('+${item.question.id}+')'">删除</button>
</h2>
<div class="layui-colla-content">
<p th:each="qItem:${item.question.questionItem}">[[${qItem.number}]]:[[${qItem.content}]]</p>
<p>解析:正确答案[[${item.question.answer}]]</p>
<p>[[${item.question.label}]]</p>
</div>
</div>
</div>
</div>
</div>
<div class="fly-footer" th:replace="web/index::cmsBottom">
<div class="fly-footer" th:replace="web/index::cmsBottom">
</div>
<script src="/web/res/layui/layui.js"></script>
@ -59,35 +45,25 @@
document.write(unescape("%3Cspan id='cnzz_stat_icon_30088308'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "w.cnzz.com/c.php%3Fid%3D30088308' type='text/javascript'%3E%3C/script%3E"));</script>
<script type="text/javascript">
var layer;
$(function () {
layui.use('layer', function () {
layer = layui.layer;
});
$("#errorquestion").addClass("layui-this")
})
function del(id) {
$.ajax({
type: 'post',
url: "/web/user/delerrorquestion",
data: {questionId:id},
success: function (result) {
if (result.code != web_status.SUCCESS) {
layer.msg(result.msg, {icon: 2});
}else{
window.location="/web/user/errorquestion.html"
}
}
});
}
// function endPaper() {
// var userAnswer = $("." + id + "useranswer:checked").val();
// if (userAnswer != answer) {
// layer.msg('回答错误', {icon: 2});
//
// $.ajax({
// type: 'post',
// url: "/api/v1/practice/answer",
// contentType: "application/json",
// data: "[" + id + "]",
// success: function (result) {
// if (result.code != web_status.SUCCESS) {
// $.modal.msgError(result.msg);
// }
// }
// });
//
//
// }
// $("#" + id + "answer").show()
// }
</script>

View File

@ -4,42 +4,7 @@
<head th:include="web/index::cmsHeader">
</head>
<body style="margin-top: 65px;">
<div class="fly-header layui-bg-black">
<div class="layui-container">
<a class="fly-logo" href="/">
<img src="../../res/images/logo.png" alt="layui">
</a>
<ul class="layui-nav fly-nav layui-hide-xs">
<li class="layui-nav-item layui-this">
<a href="/"><i class="iconfont icon-jiaoliu"></i>交流</a>
</li>
<li class="layui-nav-item">
<a href="../case/case.html"><i class="iconfont icon-iconmingxinganli"></i>案例</a>
</li>
<li class="layui-nav-item">
<a href="http://www.layui.com/" target="_blank"><i class="iconfont icon-ui"></i>框架</a>
</li>
</ul>
<ul class="layui-nav fly-nav-user">
<!-- 登入后的状态 -->
<li class="layui-nav-item">
<a class="fly-nav-avatar" href="javascript:;">
<cite class="layui-hide-xs">贤心</cite>
<i class="iconfont icon-renzheng layui-hide-xs" title="认证信息layui 作者"></i>
<i class="layui-badge fly-badge-vip layui-hide-xs">VIP3</i>
<img src="https://tva1.sinaimg.cn/crop.0.0.118.118.180/5db11ff4gw1e77d3nqrv8j203b03cweg.jpg">
</a>
<dl class="layui-nav-child">
<dd><a href="../user/set.html"><i class="layui-icon">&#xe620;</i>基本设置</a></dd>
<dd><a href="../user/message.html"><i class="iconfont icon-tongzhi" style="top: 4px;"></i>我的消息</a></dd>
<dd><a href="../user/home.html"><i class="layui-icon" style="margin-left: 2px; font-size: 22px;">&#xe68e;</i>我的主页</a></dd>
<hr style="margin: 5px 0;">
<dd><a href="" style="text-align: center;">退出</a></dd>
</dl>
</li>
</ul>
</div>
<div class="fly-header layui-bg-black" th:replace="web/index::top">
</div>
<div class="fly-home fly-panel" style="background-image: url();">

View File

@ -5,134 +5,66 @@
</head>
<body>
<div class="fly-header layui-bg-black">
<div class="layui-container">
<a class="fly-logo" href="/">
<img src="../../res/images/logo.png" alt="layui">
</a>
<ul class="layui-nav fly-nav layui-hide-xs">
<li class="layui-nav-item layui-this">
<a href="/"><i class="iconfont icon-jiaoliu"></i>交流</a>
</li>
<li class="layui-nav-item">
<a href="../case/case.html"><i class="iconfont icon-iconmingxinganli"></i>案例</a>
</li>
<li class="layui-nav-item">
<a href="http://www.layui.com/" target="_blank"><i class="iconfont icon-ui"></i>框架</a>
</li>
</ul>
<ul class="layui-nav fly-nav-user">
<!-- 登入后的状态 -->
<li class="layui-nav-item">
<a class="fly-nav-avatar" href="javascript:;">
<cite class="layui-hide-xs">贤心</cite>
<i class="iconfont icon-renzheng layui-hide-xs" title="认证信息layui 作者"></i>
<i class="layui-badge fly-badge-vip layui-hide-xs">VIP3</i>
<img src="https://tva1.sinaimg.cn/crop.0.0.118.118.180/5db11ff4gw1e77d3nqrv8j203b03cweg.jpg">
</a>
<dl class="layui-nav-child">
<dd><a href="../user/set.html"><i class="layui-icon">&#xe620;</i>基本设置</a></dd>
<dd><a href="../user/message.html"><i class="iconfont icon-tongzhi" style="top: 4px;"></i>我的消息</a></dd>
<dd><a href="../user/home.html"><i class="layui-icon" style="margin-left: 2px; font-size: 22px;">&#xe68e;</i>我的主页</a></dd>
<hr style="margin: 5px 0;">
<dd><a href="" style="text-align: center;">退出</a></dd>
</dl>
</li>
</ul>
</div>
<div class="fly-header layui-bg-black" th:replace="web/index::top">
</div>
<div class="layui-container fly-marginTop fly-user-main">
<ul class="layui-nav layui-nav-tree layui-inline" lay-filter="user">
<li class="layui-nav-item">
<a href="home.html">
<i class="layui-icon">&#xe609;</i>
我的主页
</a>
</li>
<li class="layui-nav-item">
<a href="index.html">
<i class="layui-icon">&#xe612;</i>
用户中心
</a>
</li>
<li class="layui-nav-item">
<a href="set.html">
<i class="layui-icon">&#xe620;</i>
基本设置
</a>
</li>
<li class="layui-nav-item layui-this">
<a href="message.html">
<i class="layui-icon">&#xe611;</i>
我的消息
</a>
</li>
</ul>
<div th:replace="web/user/set::userinfo">
</div>
<div class="site-tree-mobile layui-hide">
<i class="layui-icon">&#xe602;</i>
</div>
<div class="site-mobile-shade"></div>
<div class="site-tree-mobile layui-hide">
<i class="layui-icon">&#xe602;</i>
</div>
<div class="site-mobile-shade"></div>
<div class="fly-panel fly-panel-user" pad20>
<div class="layui-tab layui-tab-brief" lay-filter="user" id="LAY_msg" style="margin-top: 15px;">
<button class="layui-btn layui-btn-danger" id="LAY_delallmsg">清空全部消息</button>
<div id="LAY_minemsg" style="margin-top: 10px;">
<!--<div class="fly-none">您暂时没有最新消息</div>-->
<ul class="mine-msg">
<li data-id="123">
<blockquote class="layui-elem-quote">
<a href="/jump?username=Absolutely" target="_blank"><cite>Absolutely</cite></a>回答了您的求解<a target="_blank" href="/jie/8153.html/page/0/#item-1489505778669"><cite>layui后台框架</cite></a>
</blockquote>
<p><span>1小时前</span><a href="javascript:;" class="layui-btn layui-btn-small layui-btn-danger fly-delete">删除</a></p>
</li>
<li data-id="123">
<blockquote class="layui-elem-quote">
系统消息:欢迎使用 layui
</blockquote>
<p><span>1小时前</span><a href="javascript:;" class="layui-btn layui-btn-small layui-btn-danger fly-delete">删除</a></p>
</li>
</ul>
</div>
</div>
</div>
<div class="fly-panel fly-panel-user" pad20>
<div class="layui-tab layui-tab-brief" lay-filter="user" id="LAY_msg" style="margin-top: 15px;">
<div class="layui-container">
<div class="layui-row layui-col-space15">
<div class="layui-col-md15">
<div class="fly-panel">
<div class="layui-col-md15">
<div class="layui-col-md12">
<div class="layui-card" th:each="item:${data}">
<div class="layui-card-header">[[${itemStat.index+1}]]:<span
th:text="${item.question.title}"></span>
<span th:if="${item.question.type=='1'}">(单选)</span>
<span th:if="${item.question.type=='2'}">(多选)</span>
<span th:if="${item.question.type=='3'}">(判断)</span>
</div>
<div class="layui-card-body" th:each="qItem:${item.question.questionItem}">
[[${qItem.number}]]:
<span th:text="${qItem.content}"></span>
</div>
<div class="layui-card-body" th:id="${item.question.id}+'answer'">
解析:正确答案[[${item.question.answer}]]<br>
[[${item.question.label}]]
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="fly-footer">
<p><a href="http://fly.layui.com/" target="_blank">Fly社区</a> 2017 &copy; <a href="http://www.layui.com/" target="_blank">layui.com 出品</a></p>
<p>
<a href="http://fly.layui.com/jie/3147/" target="_blank">付费计划</a>
<a href="http://www.layui.com/template/fly/" target="_blank">获取Fly社区模版</a>
<a href="http://fly.layui.com/jie/2461/" target="_blank">微信公众号</a>
</p>
<div class="fly-footer" th:replace="web/index::cmsBottom">
</div>
<script src="../../res/layui/layui.js"></script>
<script>
layui.cache.page = 'user';
layui.cache.user = {
username: '游客'
,uid: -1
,avatar: '../../res/images/avatar/00.jpg'
,experience: 83
,sex: '男'
};
layui.config({
version: "3.0.0"
,base: '../../res/mods/'
}).extend({
fly: 'index'
}).use('fly');
$(function () {
$("#message").addClass("layui-this")
})
</script>
</body>

View File

@ -5,68 +5,45 @@
</head>
<body>
<div class="fly-header layui-bg-black">
<div class="layui-container">
<a class="fly-logo" href="/">
<img src="../../res/images/logo.png" alt="layui">
</a>
<ul class="layui-nav fly-nav layui-hide-xs">
<li class="layui-nav-item layui-this">
<a href="/"><i class="iconfont icon-jiaoliu"></i>交流</a>
</li>
<li class="layui-nav-item">
<a href="../case/case.html"><i class="iconfont icon-iconmingxinganli"></i>案例</a>
</li>
<li class="layui-nav-item">
<a href="http://www.layui.com/" target="_blank"><i class="iconfont icon-ui"></i>框架</a>
</li>
</ul>
<ul class="layui-nav fly-nav-user">
<!-- 登入后的状态 -->
<li class="layui-nav-item">
<a class="fly-nav-avatar" href="javascript:;">
<cite class="layui-hide-xs">贤心</cite>
<i class="iconfont icon-renzheng layui-hide-xs" title="认证信息layui 作者"></i>
<i class="layui-badge fly-badge-vip layui-hide-xs">VIP3</i>
<img src="https://tva1.sinaimg.cn/crop.0.0.118.118.180/5db11ff4gw1e77d3nqrv8j203b03cweg.jpg">
</a>
<dl class="layui-nav-child">
<dd><a href="../user/set.html"><i class="layui-icon">&#xe620;</i>基本设置</a></dd>
<dd><a href="../user/message.html"><i class="iconfont icon-tongzhi" style="top: 4px;"></i>我的消息</a></dd>
<dd><a href="../user/home.html"><i class="layui-icon" style="margin-left: 2px; font-size: 22px;">&#xe68e;</i>我的主页</a></dd>
<hr style="margin: 5px 0;">
<dd><a href="" style="text-align: center;">退出</a></dd>
</dl>
</li>
</ul>
</div>
<div class="fly-header layui-bg-black" th:replace="web/index::top">
</div>
<div class="layui-container fly-marginTop fly-user-main">
<ul class="layui-nav layui-nav-tree layui-inline" lay-filter="user">
<li class="layui-nav-item">
<div class="layui-container fly-marginTop fly-user-main" >
<ul class="layui-nav layui-nav-tree layui-inline" lay-filter="user" th:fragment="userinfo">
<!-- <li class="layui-nav-item" id="home">
<a href="home.html">
<i class="layui-icon">&#xe609;</i>
我的主页
</a>
</li>
<li class="layui-nav-item">
<a href="index.html">
<i class="layui-icon">&#xe612;</i>
用户中心
</a>
</li>
<li class="layui-nav-item layui-this">
</li>-->
<!--<li class="layui-nav-item" id="index">-->
<!--<a href="index.html">-->
<!--<i class="layui-icon">&#xe612;</i>-->
<!--用户中心-->
<!--</a>-->
<!--</li>-->
<li class="layui-nav-item" id="set">
<a href="set.html">
<i class="layui-icon">&#xe620;</i>
基本设置
</a>
</li>
<li class="layui-nav-item">
<a href="message.html">
<i class="layui-icon">&#xe611;</i>
我的消息
<!--<li class="layui-nav-item" id="message">-->
<!--<a href="message.html">-->
<!--<i class="layui-icon">&#xe611;</i>-->
<!--我的消息-->
<!--</a>-->
<!--</li>-->
<li class="layui-nav-item" id="errorquestion">
<a th:href="@{/web/user/errorquestion.html}">
<i class="layui-icon">&#xe63c;</i>
我的错题本
</a>
</li>
<li class="layui-nav-item" id="collectquestion">
<a th:href="@{/web/user/collectquestion.html}">
<i class="layui-icon">&#xe600;</i>
我的收藏
</a>
</li>
</ul>
@ -200,20 +177,9 @@
<div class="fly-footer" th:replace="web/index::cmsBottom">
</div>
<script>
layui.cache.page = 'user';
layui.cache.user = {
username: '游客'
,uid: -1
,avatar: '../../res/images/avatar/00.jpg'
,experience: 83
,sex: '男'
};
layui.config({
version: "2.0.0"
,base: '../../res/mods/'
}).extend({
fly: 'index'
}).use('fly');
$(function(){
$("#set").addClass("layui-this")
})
</script>
</body>

View File

@ -61,7 +61,7 @@ public class ApiExaminationController extends BaseController {
@GetMapping("/v1/examination/list")
public AjaxResult list(ExamExamination examExamination) {
SysUser sysUser = sysUserService.selectUserByLoginName( ShiroUtils.getLoginName() );
SysUser sysUser = sysUserService.selectUserByLoginName( JwtUtil.getLoginName() );
Map<String, Object> map = new HashMap<>();
map.put( "ination", examExamination );
map.put( "userId", sysUser.getUserId() );

View File

@ -38,16 +38,10 @@ public class ApiUserCollectionQuestionController extends BaseController {
*/
@PostMapping("/v1/question/collection/{id}")
public AjaxResult answer(@PathVariable("id") Integer id) {
ExamUserCollectionQuestion examUserCollectionQuestion = new ExamUserCollectionQuestion();
examUserCollectionQuestion.setExamQuestionId( id );
SysUser sysUser = sysUserService.selectUserByLoginName( JwtUtil.getLoginName() );
examUserCollectionQuestion.setVipUserId( sysUser.getUserId().intValue() );
examUserCollectionQuestion.setCreateBy( sysUser.getLoginName() );
examUserCollectionQuestion.setCreateDate( new Date() );
examUserCollectionQuestion.setDelFlag( "0" );
examUserCollectionQuestion.setUpdateBy( sysUser.getLoginName() );
examUserCollectionQuestion.setUpdateDate( new Date() );
int insert = examUserCollectionQuestionService.insertSelectiveBySelf( examUserCollectionQuestion );
int insert = examUserCollectionQuestionService.insertSelectiveBySelf(id,sysUser);
AjaxResult success = success( "插入我的收藏记录成功" );
return success;
}

View File

@ -54,20 +54,9 @@ public class ApiUserErrorQuestionController extends BaseController {
@PostMapping("/v1/practice/answer")
public AjaxResult answer(@RequestBody List<String> questionIds) {
for (String questionId : questionIds) {
ExamUserErrorQuestion examUserErrorQuestion = new ExamUserErrorQuestion();
examUserErrorQuestion.setExamQuestionId(Integer.parseInt(questionId));
SysUser sysUser = sysUserService.selectUserByLoginName(ShiroUtils.getLoginName());
examUserErrorQuestion.setVipUserId(sysUser.getUserId().intValue());
List<ExamUserErrorQuestion> db = examUserErrorQuestionService.selectList(examUserErrorQuestion);
if(db.size()>0){
return success("错题已存在");
}
examUserErrorQuestion.setCreateBy(sysUser.getLoginName());
examUserErrorQuestion.setCreateDate(new Date());
examUserErrorQuestion.setDelFlag("0");
examUserErrorQuestion.setUpdateBy(sysUser.getLoginName());
examUserErrorQuestion.setUpdateDate(new Date());
int insert = examUserErrorQuestionService.insertError( examUserErrorQuestion );
SysUser sysUser = sysUserService.selectUserByLoginName(JwtUtil.getLoginName());
int insert = examUserErrorQuestionService.insertError(questionId,sysUser );
}
AjaxResult success = success("插入错题本成功");
return success;

View File

@ -5,6 +5,8 @@ import java.util.List;
import com.ruoyi.exam.domain.ExamUserCollectionQuestionVO;
import com.ruoyi.framework.web.base.AbstractBaseService;
import com.ruoyi.system.domain.SysUser;
/**
* 我的收藏 服务层
*
@ -30,8 +32,9 @@ public interface IExamUserCollectionQuestionService extends AbstractBaseService<
/**
* 插入收藏题库
* @param examUserCollectionQuestion
* @param questionId
* @param sysUser
* @return
*/
int insertSelectiveBySelf(ExamUserCollectionQuestion examUserCollectionQuestion);
int insertSelectiveBySelf(Integer questionId, SysUser sysUser);
}

View File

@ -5,6 +5,8 @@ import java.util.List;
import com.ruoyi.exam.domain.ExamUserErrorQuestionVO;
import com.ruoyi.framework.web.base.AbstractBaseService;
import com.ruoyi.system.domain.SysUser;
/**
* 我的错题 服务层
*
@ -44,5 +46,5 @@ public interface IExamUserErrorQuestionService extends AbstractBaseService<ExamU
List<ExamUserErrorQuestionVO> selectExamUserErrorQuestionDetailList(ExamUserErrorQuestion examUserErrorQuestion);
int insertError(ExamUserErrorQuestion examUserErrorQuestion);
int insertError(String questionId, SysUser sysUser);
}

View File

@ -1,14 +1,15 @@
package com.ruoyi.exam.service.impl;
import java.util.Date;
import java.util.List;
import com.ruoyi.exam.domain.ExamUserCollectionQuestionVO;
import com.ruoyi.system.domain.SysUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.exam.mapper.ExamUserCollectionQuestionMapper;
import com.ruoyi.exam.domain.ExamUserCollectionQuestion;
import com.ruoyi.exam.service.IExamUserCollectionQuestionService;
import com.ruoyi.common.support.Convert;
import com.ruoyi.framework.web.base.AbstractBaseServiceImpl;
/**
* 我的收藏 服务层实现
@ -47,7 +48,15 @@ public class ExamUserCollectionQuestionServiceImpl extends AbstractBaseServiceIm
}
@Override
public int insertSelectiveBySelf(ExamUserCollectionQuestion examUserCollectionQuestion) {
public int insertSelectiveBySelf(Integer questionId, SysUser sysUser) {
ExamUserCollectionQuestion examUserCollectionQuestion = new ExamUserCollectionQuestion();
examUserCollectionQuestion.setExamQuestionId( questionId );
examUserCollectionQuestion.setVipUserId( sysUser.getUserId().intValue() );
examUserCollectionQuestion.setCreateBy( sysUser.getLoginName() );
examUserCollectionQuestion.setCreateDate( new Date() );
examUserCollectionQuestion.setDelFlag( "0" );
examUserCollectionQuestion.setUpdateBy( sysUser.getLoginName() );
examUserCollectionQuestion.setUpdateDate( new Date() );
return examUserCollectionQuestionMapper.insertSelective(examUserCollectionQuestion);
}

View File

@ -1,8 +1,10 @@
package com.ruoyi.exam.service.impl;
import java.util.Date;
import java.util.List;
import com.ruoyi.exam.domain.ExamUserErrorQuestionVO;
import com.ruoyi.system.domain.SysUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.exam.mapper.ExamUserErrorQuestionMapper;
@ -20,6 +22,8 @@ public class ExamUserErrorQuestionServiceImpl extends AbstractBaseServiceImpl<Ex
{
@Autowired
private ExamUserErrorQuestionMapper examUserErrorQuestionMapper;
@Autowired
private IExamUserErrorQuestionService examUserErrorQuestionService;
/**
@ -44,8 +48,20 @@ public class ExamUserErrorQuestionServiceImpl extends AbstractBaseServiceImpl<Ex
return examUserErrorQuestionMapper.selectExamUserErrorQuestionDetailList(examUserErrorQuestion);
}
@Override
public int insertError(ExamUserErrorQuestion examUserErrorQuestion) {
public int insertError(String questionId, SysUser sysUser) {
ExamUserErrorQuestion examUserErrorQuestion = new ExamUserErrorQuestion();
examUserErrorQuestion.setExamQuestionId(Integer.parseInt(questionId));
examUserErrorQuestion.setVipUserId(sysUser.getUserId().intValue());
List<ExamUserErrorQuestion> db = examUserErrorQuestionService.selectList(examUserErrorQuestion);
if(db.size()>0){
return 0;
}
examUserErrorQuestion.setCreateBy(sysUser.getLoginName());
examUserErrorQuestion.setCreateDate(new Date());
examUserErrorQuestion.setDelFlag("0");
examUserErrorQuestion.setUpdateBy(sysUser.getLoginName());
examUserErrorQuestion.setUpdateDate(new Date());
return examUserErrorQuestionMapper.insert( examUserErrorQuestion );
}

View File

@ -92,7 +92,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
LEFT JOIN exam_examination_user eeu ON eeu.exam_examination_id = exam_examination.id
<where>
(exam_examination.type = '1' or eeu.vip_user_id = #{userId})
(exam_examination.type = '1' or eeu.vip_user_id = #{userId} or exam_examination.examination_user_limit = '1')
and
<![CDATA[((enable_control_time = '1' and end_time > NOW() and start_time < NOW())
or enable_control_time = '0') ]]>
@ -130,7 +130,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<where>
exam_examination.type = '2' and exam_examination.id not in (select exam_examination_id from exam_examination_user where vip_user_id = #{userId})
and
and exam_examination.examination_user_limit = '2' and
<![CDATA[((enable_control_time = '1' and end_time > NOW() and start_time < NOW())
or enable_control_time = '0') ]]>
<if test="id != null "> and exam_examination.id = #{ination.id}</if>