评论功能

main
tamguo 7 years ago
parent 7930049a4d
commit e9a1db3d02

@ -69,7 +69,7 @@ public class SystemConstant {
public static final String ALIYUN_MAIL_FIND_PASSWORD_PREFIX = "EMAIL_FIND_PASSWORD_";
/** 默认会员头像*/
public static final String DEFAULT_MEMBER_AVATAR = "images/avatar.png";
public static final String DEFAULT_MEMBER_AVATAR = "/images/avatar.png";
/** 登录错误次数*/
public static final String LOGIN_FAILURE_COUNT = "loginFailureCount:";

@ -0,0 +1,8 @@
package com.tamguo.modules.tiku.dao;
import com.tamguo.config.dao.SuperMapper;
import com.tamguo.modules.tiku.model.QuestionAnswerEntity;
public interface QuestionAnswerMapper extends SuperMapper<QuestionAnswerEntity>{
}

@ -2,7 +2,6 @@ package com.tamguo.modules.tiku.model;
import java.io.Serializable;
import java.util.Date;
import com.baomidou.mybatisplus.annotations.TableName;
import com.tamguo.config.dao.SuperEntity;
@ -13,6 +12,7 @@ public class QuestionAnswerEntity extends SuperEntity<PaperEntity> implements Se
private String questionId;
private String memberId;
private String memberAvatar;
private String memberName;
private String answer;
private Integer agreeNum;
@ -64,5 +64,11 @@ public class QuestionAnswerEntity extends SuperEntity<PaperEntity> implements Se
public static long getSerialversionuid() {
return serialVersionUID;
}
public String getMemberAvatar() {
return memberAvatar;
}
public void setMemberAvatar(String memberAvatar) {
this.memberAvatar = memberAvatar;
}
}

@ -0,0 +1,10 @@
package com.tamguo.modules.tiku.service;
import com.baomidou.mybatisplus.service.IService;
import com.tamguo.modules.tiku.model.QuestionAnswerEntity;
public interface IQuestionAnswerService extends IService<QuestionAnswerEntity>{
void sendAnswer(QuestionAnswerEntity entity);
}

@ -0,0 +1,25 @@
package com.tamguo.modules.tiku.service.impl;
import java.util.Date;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.tamguo.modules.tiku.dao.QuestionAnswerMapper;
import com.tamguo.modules.tiku.model.QuestionAnswerEntity;
import com.tamguo.modules.tiku.service.IQuestionAnswerService;
@Service
public class QuestionAnswerServiceImpl extends ServiceImpl<QuestionAnswerMapper, QuestionAnswerEntity> implements IQuestionAnswerService{
@Transactional(readOnly=false)
@Override
public void sendAnswer(QuestionAnswerEntity entity) {
entity.setCreateDate(new Date());
entity.setAgreeNum(0);
entity.setDisagreeNum(0);
baseMapper.insert(entity);
}
}

@ -109,7 +109,7 @@ public class AccountController {
UploaderMessage msg = new UploaderMessage();
msg.setStatus(Status.SUCCESS);
msg.setStatusMsg("File upload success");
msg.setFilePath("files/" + DateUtils.format(new Date(), "yyyyMMdd") + "/" + avatorName);
msg.setFilePath("/files/" + DateUtils.format(new Date(), "yyyyMMdd") + "/" + avatorName);
msg.setFileDomain(domainName);
return msg;
} catch (Exception e) {

@ -104,4 +104,12 @@ public class LoginController {
return result;
}
@RequestMapping(value = "/isLogin.html", method = RequestMethod.GET)
@ResponseBody
public Result isLogin() {
if(ShiroUtils.isLogin()) {
return Result.result(1, null , "已经登录");
}
return Result.result(0, null, "未登录");
}
}

@ -0,0 +1,30 @@
package com.tamguo.web.member;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.tamguo.common.utils.Result;
import com.tamguo.modules.tiku.model.QuestionAnswerEntity;
import com.tamguo.modules.tiku.service.IQuestionAnswerService;
import com.tamguo.utils.ShiroUtils;
@Controller
public class QuestionAnswerController {
@Autowired
private IQuestionAnswerService iQuestionAnswerService;
@RequestMapping(value = "member/sendAnswer.html", method = RequestMethod.POST)
@ResponseBody
public Result sendAnswer(@RequestBody QuestionAnswerEntity entity){
entity.setMemberAvatar(ShiroUtils.getMember().getAvatar());
entity.setMemberId(ShiroUtils.getMemberId());
entity.setMemberName(ShiroUtils.getMember().getNickName());
iQuestionAnswerService.sendAnswer(entity);
return Result.result(0, null, "保存成功");
}
}

@ -22,6 +22,7 @@ import com.tamguo.modules.tiku.model.QuestionEntity;
import com.tamguo.modules.tiku.model.SubjectEntity;
import com.tamguo.modules.tiku.service.IChapterService;
import com.tamguo.modules.tiku.service.ICourseService;
import com.tamguo.modules.tiku.service.IQuestionAnswerService;
import com.tamguo.modules.tiku.service.IQuestionService;
import com.tamguo.modules.tiku.service.ISubjectService;
@ -38,6 +39,8 @@ public class QuestionContrller {
private ISubjectService iSubjectService;
@Autowired
private ICourseService iCourseService;
@Autowired
private IQuestionAnswerService iQuestionAnswerService;
@SuppressWarnings("unchecked")
@RequestMapping(value = {"questionlist/{chapterId}-{current}-{size}.html"}, method = RequestMethod.GET)
@ -80,6 +83,7 @@ public class QuestionContrller {
* @param model
* @return
*/
@SuppressWarnings("unchecked")
@RequestMapping(value = {"/question/{uid}.html"}, method = RequestMethod.GET)
public ModelAndView question(@PathVariable String uid , ModelAndView model , HttpServletRequest request){
try {
@ -89,6 +93,7 @@ public class QuestionContrller {
QuestionEntity question = iQuestionService.selectById(uid);
question.setQuestionType(question.getQuestionType());
model.addObject("question", question);
model.addObject("answerList", iQuestionAnswerService.selectList(Condition.create().eq("question_id", uid).orderDesc(Arrays.asList("create_date"))));
return model;
} catch (Exception e) {
model.setViewName("404");

@ -1,6 +1,6 @@
<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-4.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<div id="passport-login-pop" class="tang-pass-pop-login-merge tang-pass-pop-login-tpl-do tang-pass-pop-login-color-blue tang-pass-pop-login" style="left:40%;top:30%;z-index: 60001;display:none;" th:fragment="minilogin">
<div id="passport-login-pop" class="tang-pass-pop-login-merge tang-pass-pop-login-tpl-do tang-pass-pop-login-color-blue tang-pass-pop-login" style="left:40%;top:10%;z-index: 60001;display:none;" th:fragment="minilogin">
<div class="tang-foreground" id="TANGRAM__PSP_19__foreground" style="width: 356px;">
<div class="tang-title tang-title-dragable" id="TANGRAM__PSP_19__title">
<div class="buttons" id="TANGRAM__PSP_19__titleButtons">

@ -14,6 +14,7 @@
<link rel="stylesheet" th:href="${domainName + 'css/footer.css'}" />
<link rel="stylesheet" th:href="${domainName + 'css/member/minilogin.css'}" />
<link rel="stylesheet" th:href="${domainName + 'css/questionExt.css'}" />
<link rel="stylesheet" th:href="${domainName + 'js/plugins/layui/css/layui.css'}">
<link type="favicon" rel="shortcut icon" th:href="${domainName + 'images/favicon.png'}" />
</head>
<body>
@ -63,22 +64,27 @@
<div class="kpoint-contain">
<h3 class="point-title">考察知识点</h3>
<p class="point"> <span class="point-item" th:each="p,pStat:${#strings.arraySplit(question.reviewPoint,',')}" th:text="${p}">社会工作的含义与特点</span></p>
<h3 class="point-title">相关回答</h3>
<ul class="am-comments-list am-comments-list-flip">
<li class="am-comment"><a href="#link-to-user-home"><img
src="http://s.amazeui.org/media/i/demos/bw-2014-06-19.jpg?imageView/1/w/96/h/96"
alt="" class="am-comment-avatar" width="48" height="48"></a>
<p>
<h3 class="point-title">相关回答 <button type="button" class="am-btn am-btn-primary am-radius" onclick="doAnswer()">我来回答</button></h3>
<p id="answerDiv" class="point" style="margin-top:20px;display:none;">
<textarea id="demo" style="display: none;"></textarea>
<button type="button" style="margin-top:20px;" onclick="sendAnswer()" class="am-btn am-btn-primary am-radius">发布</button>
<p>
<ul class="am-comments-list am-comments-list-flip" style="margin-left: 30px;">
<li class="am-comment" th:each="answer,status:${answerList}">
<a rel="nofollow">
<img th:src="${answer.memberAvatar}" alt="用户头像" class="am-comment-avatar" width="48" height="48"></a>
<div class="am-comment-main">
<header class="am-comment-hd">
<div class="am-comment-meta">
<a href="#link-to-user" class="am-comment-author">某人</a>
<a href="#link-to-user" rel="nofollow" class="am-comment-author" th:text="${answer.memberName}">某人</a>
评论于
<time datetime="2013-07-27T04:54:29-07:00"
title="2013年7月27日 下午7:54 格林尼治标准时间+0800">2014-7-12
<time
th:title="${#dates.format(answer.createDate, 'yyyy-MM-dd HH:mm:ss')}" th:text="${#dates.format(answer.createDate, 'yyyy-MM-dd HH:mm:ss')}">2014-7-12
15:30</time>
</div>
</header>
<div class="am-comment-bd">
<div class="am-comment-bd" th:utext="${answer.answer}">
<p>那,那是一封写给南部母亲的信。我茫然站在骑楼下,我又看到永远的樱子走到街心。其实雨下得并不大,却是一生一世中最大的一场雨。而那封信是这样写的,年轻的樱子知不知道呢?</p>
<blockquote>妈:我打算在下个月和樱子结婚。</blockquote>
</div>
@ -89,7 +95,8 @@
class="am-icon-reply"></i></a>
</div>
</footer>
</div></li>
</div>
</li>
</ul>
</div>
</div>
@ -149,4 +156,44 @@
<script type="text/javascript" th:src="${domainName + 'js/jquery.iDialog.js'}"></script>
<script type="text/javascript" th:src="${domainName + 'js/main.js'}" ></script>
<script type="text/javascript" th:src="${domainName + 'js/member/minlogin.js'}"></script>
<script type="text/javascript" th:src="${domainName + 'js/plugins/layui/layui.js'}"></script>
<script th:src="${domainName + 'js/plugins/layer/layer.js'}"></script>
<script src="https://cdn.jsdelivr.net/npm/axios@0.18.0/dist/axios.min.js"></script>
<script type="text/javascript" th:inline="javascript">
var layedit = null;
var edit = null;
function doAnswer(){
// 判断是否登录
axios.get(mainHttp + 'isLogin.html').then(function(response){
if(response.data.code != 1){
if($(".header .login-container").find("span").length == 1){
$(".mask").css("display","block");
$("#passport-login-pop").css("display","block");
}
}else{
layui.use('layedit', function(){
layedit = layui.layedit;
edit = layedit.build('demo'); //建立编辑器
});
$("#answerDiv").fadeIn(1000);
}
});
}
// 发布
function sendAnswer(){
var content = layedit.getContent(edit);
axios.post(mainHttp + 'member/sendAnswer.html',{'questionId':[[${question.id}]],'answer':content}).then(function(response){
if(response.data.code == 0){
//墨绿深蓝风
layer.alert('回答成功!', {closeBtn: 0
}, function(){
window.location.reload();
});
}else{
layer.alert('服务器异常!')
}
});
}
</script>
</html>

Loading…
Cancel
Save