Переглянути джерело

修改 活动反馈修改

huZhiHao 6 роки тому
батько
коміт
beb0be3a6c

+ 44 - 0
sql/20200109.sql

@@ -0,0 +1,44 @@
+/*
+ Navicat Premium Data Transfer
+
+ Date: 09/01/2020 10:37:59
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for ac_activity_feedback
+-- ----------------------------
+DROP TABLE IF EXISTS `ac_activity_feedback`;
+CREATE TABLE `ac_activity_feedback`  (
+  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
+  `activity_id` int(11) NULL DEFAULT NULL COMMENT '活动id',
+  `user_id` int(11) NULL DEFAULT NULL COMMENT '用户id',
+  `feedback_name` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '微信昵称',
+  `weixin_head_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '微信头像',
+  `user_type` varchar(2) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '用户类型(0政府,1园区,2超级管理员,3企业,4街道,5个人,6微信)',
+  `feedback_type` int(1) NULL DEFAULT 0 COMMENT ' 评分 1:一星、2:二星、3:三星、4:四星、5:五星、0:无星  废弃字段',
+  `approval_status` int(1) NULL DEFAULT NULL COMMENT '0:未审核、1:已审核    废弃字段',
+  `content` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT '反馈内容',
+  `feedback_time` datetime(0) NULL DEFAULT NULL COMMENT '反馈时间',
+  `reply` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT '回复',
+  `reply_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '回复人id',
+  `score_1` int(2) NULL DEFAULT NULL COMMENT '内容设计星级 共五星 一星4分',
+  `score_2` int(2) NULL DEFAULT NULL COMMENT '讲师水平星级 共五星 一星4分',
+  `score_3` int(2) NULL DEFAULT NULL COMMENT '活动效果星级 共五星 一星12分',
+  `score` int(4) NULL DEFAULT NULL COMMENT '综合评分',
+  `is_public` tinyint(1) NULL DEFAULT NULL COMMENT '是否公开',
+  `is_view` tinyint(1) NULL DEFAULT NULL COMMENT '是否门户显示',
+  `is_top` tinyint(1) NULL DEFAULT NULL COMMENT '是否置顶',
+  `del_flag` tinyint(1) NULL DEFAULT 0 COMMENT '删除标记',
+  `create_time` varchar(45) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '创建时间',
+  `create_by` int(11) NULL DEFAULT NULL COMMENT '创建人id',
+  `create_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '创建人姓名',
+  `update_time` varchar(45) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '修改时间',
+  `update_by` int(11) NULL DEFAULT NULL COMMENT '修改人id',
+  `update_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '修改人姓名',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '活动反馈' ROW_FORMAT = Dynamic;
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 31 - 4
src/main/java/platform/modules/api/web/ActivityOpenController.java

@@ -1,6 +1,7 @@
 package platform.modules.api.web;
 
 import org.apache.commons.lang3.StringUtils;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
@@ -18,11 +19,9 @@ import platform.modules.government.service.AttachmentService;
 import platform.modules.government.service.UserService;
 import platform.modules.sys.entity.ActivityDetail;
 import platform.modules.sys.entity.ActivityFavourite;
+import platform.modules.sys.entity.ActivityFeedback;
 import platform.modules.sys.entity.ActivityRegistration;
-import platform.modules.sys.service.ActivityFavouriteService;
-import platform.modules.sys.service.ActivityRegistrationService;
-import platform.modules.sys.service.ActivityService;
-import platform.modules.sys.service.WaitToDoService;
+import platform.modules.sys.service.*;
 import platform.modules.sys.web.ResponseMessage;
 
 import java.util.*;
@@ -44,6 +43,9 @@ public class ActivityOpenController extends BaseController {
     @Autowired
     private ActivityRegistrationService activityRegistrationService;
 
+    @Autowired
+    private ActivityFeedbackService activityFeedbackService;
+
     @Autowired
     private AttachmentService attachmentService;
 
@@ -342,4 +344,29 @@ public class ActivityOpenController extends BaseController {
         }
         return ResponseMessage.success("查询成功!", map);
     }
+
+    @OperationLog(value = "根据活动id获取最新的公开反馈评论信息")
+    @GetMapping(value = "/feedback/list")
+    public ResponseMessage feedbackList(@RequestParam("activity_id") String activityId, @RequestParam("min_score") String minScore, @RequestParam("max_score") String maxScore) {
+        List<ActivityFeedback> list = activityFeedbackService.feedbackList(activityId, "1", "1", minScore, maxScore);
+        return ResponseMessage.success("操作成功!", list);
+    }
+
+    @OperationLog(value = "根据活动id和用户id获取反馈评论信息")
+    @GetMapping(value = "/feedback")
+    public ResponseMessage feedbackGet(@RequestParam("activity_id") String activityId, @RequestParam("user_id") String userId) {
+        return ResponseMessage.success("操作成功!", activityFeedbackService.feedbackGet(activityId, userId));
+    }
+
+    @OperationLog(value = "新增反馈")
+    @PostMapping(value = "/feedback")
+    public ResponseMessage feedbackSave(@RequestBody ActivityFeedback activityFeedback) {
+        return ResponseMessage.success("操作成功!", activityFeedbackService.feedbackSave(activityFeedback));
+    }
+
+    @OperationLog(value = "获取各分数段人数")
+    @GetMapping(value = "/feedback/score_count")
+    public ResponseMessage feedbackScoreCount(@RequestParam("activity_id") String activityId) {
+        return ResponseMessage.success("操作成功!", activityFeedbackService.getScoreCount(activityId, "1", "1", null, null));
+    }
 }

+ 24 - 5
src/main/java/platform/modules/government/web/ActivityController.java

@@ -125,10 +125,9 @@ public class ActivityController extends BaseController {
      */
     @OperationLog(value = "查看活动详情")
     @GetMapping(value = "/get/{id}")
-    public String view(@PathVariable("id") Integer id, ModelMap modelMap) throws Exception {
+    public String view(@PathVariable("id") Integer id, @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum, String minScore, String maxScore, ModelMap modelMap) throws Exception {
         log.info("跳转到活动详情页面!");
 
-
         ActivityDetail activityDetail = activityService.findOne(id.toString());
         List<Attachment> attachments = attachmentService.selectByIdAndBusinessId(Constant.Attachment.ACTIVITY, activityDetail.getId(), null);
         if (null != attachments && attachments.size() > 0) {
@@ -177,11 +176,17 @@ public class ActivityController extends BaseController {
                 num++;
             }
         }
-
+        PageInfo<ActivityFeedback> feedbackPageInfo = activityFeedbackService.feedbackPage(id + "", minScore, maxScore, pageNum, PAGESIZE);
+        Map<String, Integer> scoreCount = activityFeedbackService.getScoreCount(id + "", null, null, null, null);
         modelMap.put("fileUrl", setFileUrl());
         modelMap.addAttribute("registrationList", registrationList);
         modelMap.addAttribute("signList", signList);
-        modelMap.addAttribute("feedbackList", feedbackList);
+//        modelMap.addAttribute("feedbackList", feedbackList);
+        modelMap.addAttribute("activity_id", id);
+        modelMap.addAttribute("pageInfo", feedbackPageInfo);
+        modelMap.addAttribute("scoreCount", scoreCount);
+        modelMap.addAttribute("minScore", minScore);
+        modelMap.addAttribute("maxScore", maxScore);
         modelMap.addAttribute("quota", quota);
         modelMap.addAttribute("num", num);
 
@@ -1130,10 +1135,24 @@ public class ActivityController extends BaseController {
      * @throws Exception
      */
     @GetMapping(value = "/map")
-    public String toMap() throws Exception {
+    public String toMap() {
         log.info("跳转到地图!");
 
         return BASE_GOVERNMENT_PATH + "map_component/map";
     }
+
+    /**
+     * 跳转到回复反馈
+     *
+     * @return
+     * @throws Exception
+     */
+    @GetMapping(value = "/reply/{id}")
+    public String toReplyDialog(@PathVariable("id") String feedbackId, ModelMap modelMap) {
+        log.info("跳转到回复反馈!");
+        ActivityFeedback feedback = activityFeedbackService.findById(Integer.parseInt(feedbackId));
+        modelMap.addAttribute("feedback", feedback);
+        return BASE_GOVERNMENT_PATH + "activity_reply";
+    }
 }
 

+ 26 - 12
src/main/java/platform/modules/government/web/ActivityFeedbackController.java

@@ -7,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
+import platform.common.annotation.OperationLog;
 import platform.common.base.controller.BaseController;
 import platform.common.base.service.DictionaryItemService;
 import platform.common.util.DateUtil;
@@ -46,7 +47,7 @@ public class ActivityFeedbackController extends BaseController {
      * @return
      */
     @GetMapping("index")
-    public Object index(FeedbackQuery query, ModelMap modelMap){
+    public Object index(FeedbackQuery query, ModelMap modelMap) {
         PageInfo<ActivityFeedback> pageInfo = activityFeedbackService.findFeedbackList(query);
         modelMap.put("pageInfo", pageInfo);
         modelMap.put("query", query);
@@ -54,13 +55,12 @@ public class ActivityFeedbackController extends BaseController {
     }
 
     /**
-     *
      * @param query
      * @return
      */
     @GetMapping("/list")
     @ResponseBody
-    public Object getFeedbackList(FeedbackQuery query){
+    public Object getFeedbackList(FeedbackQuery query) {
         PageInfo<ActivityFeedback> pageInfo = activityFeedbackService.findFeedbackList(query);
         return ResponseMessage.success("success", pageInfo);
     }
@@ -73,7 +73,7 @@ public class ActivityFeedbackController extends BaseController {
      */
     @GetMapping("/feedbackCount")
     @ResponseBody
-    public Object getFeedbackTypeCount(FeedbackQuery query){
+    public Object getFeedbackTypeCount(FeedbackQuery query) {
         ActivityFeedback feedback = activityFeedbackService.findCountByFeedbackType(query);
         return ResponseMessage.success("success", feedback);
     }
@@ -86,7 +86,7 @@ public class ActivityFeedbackController extends BaseController {
      */
     @GetMapping("/home")
     @ResponseBody
-    public Object homeIndex(FeedbackQuery query){
+    public Object homeIndex(FeedbackQuery query) {
         PageInfo<ActivityFeedback> pageInfo = activityFeedbackService.findFeedbackList(query);
         return ResponseMessage.success("sucdess", pageInfo);
     }
@@ -99,7 +99,7 @@ public class ActivityFeedbackController extends BaseController {
      */
     @PostMapping("/save")
     @ResponseBody
-    public Object save(@RequestBody ActivityFeedback feedback){
+    public Object save(@RequestBody ActivityFeedback feedback) {
         feedback.setFeedback_time(new Date());
         feedback.setApproval_status(0);
         activityFeedbackService.insertAndGetId(feedback);
@@ -114,14 +114,13 @@ public class ActivityFeedbackController extends BaseController {
      */
     @PostMapping("/isView")
     @ResponseBody
-    public Object isView(Integer id, Boolean is_view){
+    public Object isView(Integer id, Boolean is_view) {
         ActivityFeedback feedback = activityFeedbackService.findById(id);
-        if (feedback != null){
+        if (feedback != null) {
             feedback.setIs_view(is_view);
-            if (is_view){
+            if (is_view) {
                 feedback.setApproval_status(1);
-            }
-            else {
+            } else {
                 feedback.setApproval_status(2);
             }
             activityFeedbackService.updateSelective(feedback);
@@ -136,8 +135,23 @@ public class ActivityFeedbackController extends BaseController {
      * @return
      */
     @GetMapping("/re_review/{id}")
-    public Object re_review(@PathVariable Integer id, ModelMap modelMap){
+    public Object re_review(@PathVariable Integer id, ModelMap modelMap) {
         modelMap.put("feedback_id", id);
         return BASE_GOVERNMENT_PATH + "activity_feedback/approval";
     }
+
+//    @OperationLog(value = "根据活动id获取所有反馈评论信息")
+//    @GetMapping(value = "/feedback/page")
+//    public Object feedbackPage(@RequestParam("activity_id") String activity_id, Integer pageNum, Integer pageSize, ModelMap modelMap) {
+//        PageInfo<ActivityFeedback> pageInfo = activityFeedbackService.feedbackPage(activity_id, pageNum, pageSize);
+//        modelMap.put("pageInfo", pageInfo);
+//        return BASE_GOVERNMENT_PATH + "activity_feedback/list";
+//    }
+
+    @OperationLog(value = "根据活动id修改反馈评论信息")
+    @PutMapping(value = "/feedback")
+    @ResponseBody
+    public Object feedbackPut(ActivityFeedback activityFeedback) {
+        return ResponseMessage.success("操作成功!", activityFeedbackService.feedbackUpdate(activityFeedback));
+    }
 }

+ 4 - 0
src/main/java/platform/modules/sys/dao/ActivityFeedbackDao.java

@@ -22,4 +22,8 @@ public interface ActivityFeedbackDao extends BaseMapper<ActivityFeedback> {
     Double findAvgStar(Integer activity_id);
 
     List<ActivityFeedback> findUserFeedback(@Param("id") Integer id, @Param("userId") int userId);
+
+    List<ActivityFeedback> feedbackList(@Param("activity_id") String activityId, @Param("is_public") String isPublic, @Param("is_view") String isview, @Param("minScore") String minScore, @Param("maxScore") String maxScore);
+
+    List<ActivityFeedback> feedbackPage(@Param("activity_id") String activityId, @Param("minScore") String minScore, @Param("maxScore") String maxScore);
 }

+ 45 - 5
src/main/java/platform/modules/sys/entity/ActivityFeedback.java

@@ -12,29 +12,69 @@ import java.util.List;
 @Table(name = "ac_activity_feedback")
 public class ActivityFeedback extends BaseEntity {
 
-    private Integer activity_id;
+    //活动id
+    private String activity_id;
 
-    private Integer user_id;
+    //用户id
+    private String user_id;
 
+    //微信头像
+    private String weixin_head_url;
+
+    //微信昵称
+    private String feedback_name;
+
+    //用户类型(0政府,1园区,2超级管理员,3企业,4街道,5个人,6微信)
     private String user_type;
 
-    private Integer feedback_type;          //反馈类型1:一星、2:二星、3:三星、4:四星、5:五星、0:无星
+    //评分 1:一星、2:二星、3:三星、4:四星、5:五星、0:无星
+    private Integer feedback_type;
 
+    //反馈内容
     private String content;
 
+    //反馈时间
     private Date feedback_time;
 
+    //回复
+    private String reply;
+
+    //回复人id
+    private String reply_id;
+
+    //内容设计星级 共五星 一星4分
+    private Integer score_1;
+
+    //讲师水平星级 共五星 一星4分
+    private Integer score_2;
+
+    //活动效果星级 共五星 一星12分
+    private Integer score_3;
+
+    //综合评分
+    private Integer score;
+
+    //是否公开
+    private Boolean is_public;
+
+    //是否门户显示
     private Boolean is_view;
 
-    private Integer approval_status;
+    //是否置顶
+    private Boolean is_top;
 
-    private Boolean is_no_name;
+    //0:未审核、1:已审核    废弃字段
+    private Integer approval_status;
 
     @Transient
     private String activity_title;
+
     @Transient
     private Integer feedback_count;
+
     @Transient
     private String feedback_type_str;
 
+    @Transient
+    private String reply_name;
 }

+ 131 - 4
src/main/java/platform/modules/sys/service/ActivityFeedbackService.java

@@ -2,9 +2,11 @@ package platform.modules.sys.service;
 
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.RequestParam;
 import platform.common.base.service.BaseService;
 import platform.common.util.ShiroUtils;
 import platform.modules.government.dto.FeedbackQuery;
@@ -13,7 +15,7 @@ import platform.modules.sys.dao.ActivityFeedbackDao;
 import platform.modules.sys.entity.ActivityFeedback;
 
 import java.math.BigDecimal;
-import java.util.List;
+import java.util.*;
 
 @Service
 @Transactional
@@ -25,7 +27,7 @@ public class ActivityFeedbackService extends BaseService<ActivityFeedback> {
     public Integer saveActivityFeedback(ActivityFeedback activityFeedback) {
 
         User currUser = ShiroUtils.getUserEntity();
-        activityFeedback.setUser_id(currUser.getId());
+        activityFeedback.setUser_id(currUser.getId() + "");
         activityFeedback.setUser_type(currUser.getUser_type().toString());
         return this.saveSelective(activityFeedback);
     }
@@ -70,7 +72,7 @@ public class ActivityFeedbackService extends BaseService<ActivityFeedback> {
     }
 
     /**
-     *  获取反馈类型数
+     * 获取反馈类型数
      *
      * @param query
      * @return
@@ -100,9 +102,134 @@ public class ActivityFeedbackService extends BaseService<ActivityFeedback> {
      */
     public ActivityFeedback findUserFeedback(Integer id, int userId) {
         List<ActivityFeedback> feedbacks = activityFeedbackDao.findUserFeedback(id, userId);
-        if (feedbacks.size() > 0){
+        if (feedbacks.size() > 0) {
             return feedbacks.get(0);
         }
         return new ActivityFeedback();
     }
+
+    /**
+     * @Author: huZhiHao
+     * @Description: 获取列表
+     * @Date: 2020/1/7
+     * @Params: [activityId, userId, isPublic, isView]
+     * @Return: java.util.List<platform.modules.sys.entity.ActivityFeedback>
+     **/
+    @Transactional(readOnly = true)
+    public List<ActivityFeedback> feedbackList(String activityId, String isPublic, String isView, String minScore, String maxScore) {
+
+        List<ActivityFeedback> feedbacks = activityFeedbackDao.feedbackList(activityId, isPublic, isView, minScore, maxScore);
+        return feedbacks;
+    }
+
+    /**
+     * @Author: huZhiHao
+     * @Description: 保存
+     * @Date: 2020/1/7
+     * @Params: [activityFeedback]
+     * @Return: java.lang.Integer
+     **/
+    public Integer feedbackSave(ActivityFeedback activityFeedback) {
+
+        Integer score_1 = activityFeedback.getScore_1();
+        Integer score_2 = activityFeedback.getScore_2();
+        Integer score_3 = activityFeedback.getScore_3();
+        Integer score = 0;
+        if (score_1 != null) score += score_1 * 4;
+        if (score_2 != null) score += score_2 * 4;
+        if (score_3 != null) score += score_3 * 12;
+        activityFeedback.setScore(score);
+        activityFeedback.setFeedback_time(new Date());
+        return this.saveSelective(activityFeedback);
+    }
+
+    /**
+     * @Author: huZhiHao
+     * @Description: 更新
+     * @Date: 2020/1/7
+     * @Params: [activityFeedback]
+     * @Return: java.lang.Integer
+     **/
+    public Integer feedbackUpdate(ActivityFeedback activityFeedback) {
+
+        if (activityFeedback.getIs_top() != null && activityFeedback.getIs_top()) {
+            activityFeedback.setIs_view(true);
+
+            ActivityFeedback temp1 = this.findById(activityFeedback.getId());
+            ActivityFeedback query = new ActivityFeedback();
+            query.setActivity_id(temp1.getActivity_id());
+            query.setIs_top(true);
+            ActivityFeedback temp2 = this.findOne(query);
+            if(temp2!=null){
+                temp2.setIs_top(false);
+                this.updateSelective(temp2);
+            }
+        }
+        if (activityFeedback.getIs_view() != null && !activityFeedback.getIs_view()) {
+            activityFeedback.setIs_top(false);
+        }
+        return this.updateSelective(activityFeedback);
+    }
+
+    /**
+     * @Author: huZhiHao
+     * @Description: 获取详情
+     * @Date: 2020/1/7
+     * @Params: [activityId, userId]
+     * @Return: platform.modules.sys.entity.ActivityFeedback
+     **/
+    @Transactional(readOnly = true)
+    public ActivityFeedback feedbackGet(String activityId, String userId) {
+
+        ActivityFeedback activityFeedback = new ActivityFeedback();
+        activityFeedback.setActivity_id(activityId);
+        activityFeedback.setUser_id(userId);
+        return this.findOne(activityFeedback);
+    }
+
+    /**
+     * @Author: huZhiHao
+     * @Description: 获取分页
+     * @Date: 2020/1/7
+     * @Params: [activityId, pageNum, pageSize]
+     * @Return: com.github.pagehelper.PageInfo<platform.modules.sys.entity.ActivityFeedback>
+     **/
+    @Transactional(readOnly = true)
+    public PageInfo<ActivityFeedback> feedbackPage(String activityId, String minScore, String maxScore, Integer pageNum, Integer pageSize) {
+
+        PageHelper.startPage(pageNum, pageSize);
+        List<ActivityFeedback> page = activityFeedbackDao.feedbackPage(activityId, minScore, maxScore);
+        return new PageInfo<ActivityFeedback>(page);
+    }
+
+    @Transactional(readOnly = true)
+    public Map getScoreCount(String activityId, String isPublic, String isView, String minScore, String maxScore) {
+        int score100_80 = 0, score80_60 = 0, score60_40 = 0, score40_20 = 0, score20_0 = 0;
+        List<ActivityFeedback> feedbacks = activityFeedbackDao.feedbackList(activityId, isPublic, isView, minScore, maxScore);
+        for (ActivityFeedback feedback : feedbacks) {
+            Integer score = feedback.getScore();
+            if (score != null) {
+                if (score > 80) {
+                    score100_80++;
+                } else if (score > 60) {
+                    score80_60++;
+                } else if (score > 40) {
+                    score60_40++;
+                } else if (score > 20) {
+                    score40_20++;
+                } else if (score >= 0) {
+                    score20_0++;
+                }
+            }
+        }
+        Map<String, Integer> map = new HashMap();
+        map.put("score100_80", score100_80);
+        map.put("score80_60", score80_60);
+        map.put("score60_40", score60_40);
+        map.put("score40_20", score40_20);
+        map.put("score20_0", score20_0);
+        map.put("score_all", feedbacks.size());
+        return map;
+    }
+
 }

+ 42 - 0
src/main/resources/mapper/sys/ActivityFeedbackDao.xml

@@ -87,4 +87,46 @@
     <select id="findUserFeedback" resultType="platform.modules.sys.entity.ActivityFeedback">
         select * from ac_activity_feedback where activity_id = #{id} AND user_id = #{userId} AND feedback_type != 0
     </select>
+
+    <select id="feedbackList" resultType="platform.modules.sys.entity.ActivityFeedback">
+        SELECT
+            *
+        FROM
+            ac_activity_feedback
+        WHERE
+            del_flag = 0
+            AND activity_id = #{activity_id}
+        <if test="is_public != null and is_public != ''">
+            AND is_public = #{is_public}
+        </if>
+        <if test="is_view != null and is_view != ''">
+            AND is_view = #{is_view}
+        </if>
+        <if test="minScore != null and minScore != ''">
+            AND score <![CDATA[>]]> #{minScore}
+        </if>
+        <if test="maxScore != null and maxScore != ''">
+            AND score <![CDATA[<=]]> #{maxScore}
+        </if>
+        ORDER BY is_top DESC
+    </select>
+
+    <select id="feedbackPage" resultType="platform.modules.sys.entity.ActivityFeedback">
+        SELECT
+            *
+        FROM
+            ac_activity_feedback
+        WHERE
+            del_flag = 0
+        AND
+            activity_id = #{activity_id}
+        <if test="minScore != null and minScore != ''">
+            AND score <![CDATA[>]]> #{minScore}
+        </if>
+        <if test="maxScore != null and maxScore != ''">
+            AND score <![CDATA[<=]]> #{maxScore}
+        </if>
+        ORDER BY
+            feedback_time DESC
+    </select>
 </mapper>

+ 32 - 0
src/main/resources/static/home/font2/iconfont.css

@@ -0,0 +1,32 @@
+@font-face {font-family: "ifont";
+  src: url('iconfont.eot?t=1578390719138'); /* IE9 */
+  src: url('iconfont.eot?t=1578390719138#iefix') format('embedded-opentype'), /* IE6-IE8 */
+  url('iconfont.woff?t=1578390719138') format('woff'),
+  url('iconfont.ttf?t=1578390719138') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
+  url('iconfont.svg?t=1578390719138#ifont') format('svg'); /* iOS 4.1- */
+}
+
+.ifont ,[class *= 'ifont-'],[class ^= ' ifont-']{
+  font-family: "ifont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.ifont-xing:before {
+  content: "\e652";
+}
+
+.ifont-star:before {
+  content: "\e63d";
+}
+
+.ifont-guan:before {
+  content: "\e664";
+}
+
+.ifont-kai:before {
+  content: "\e65f";
+}
+

BIN
src/main/resources/static/home/font2/iconfont.eot


+ 38 - 0
src/main/resources/static/home/font2/iconfont.svg

@@ -0,0 +1,38 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<!--
+2013-9-30: Created.
+-->
+<svg>
+<metadata>
+Created by iconfont
+</metadata>
+<defs>
+
+<font id="ifont" horiz-adv-x="1024" >
+  <font-face
+    font-family="ifont"
+    font-weight="500"
+    font-stretch="normal"
+    units-per-em="1024"
+    ascent="896"
+    descent="-128"
+  />
+    <missing-glyph />
+    
+    <glyph glyph-name="xing" unicode="&#58962;" d="M779.830455-121.733458l-265.668824 160.05551-265.697267-160.112399a42.950741 42.950741 0 0 0-48.326695 2.673755 48.070697 48.070697 0 0 0-17.40785 47.587146l63.430565 313.113748L18.521455 455.968234c-13.027443 12.344783-20.479824 31.402396-15.075426 48.867134 5.489731 17.464738 22.698471 29.894854 40.191654 31.82906l304.893375 33.791709L473.51487 862.720287C480.682809 879.47392 496.61156 892.444475 514.161631 892.444475s33.450379-12.970555 40.646762-29.724188l125.012256-292.26415 304.893375-33.791709c17.464738-1.934206 29.041528-14.364321 34.47437-31.82906 5.461286-17.436294 3.640858-36.550796-9.358142-48.867134l-227.695817-214.412376 63.487453-313.113748a48.070697 48.070697 0 0 0-17.40785-47.558702 42.80852 42.80852 0 0 0-48.383583-2.616866z m0 0"  horiz-adv-x="1024" />
+
+    
+    <glyph glyph-name="star" unicode="&#58941;" d="M782.336-106.49599999999998c-14.848 0-29.184 4.608-42.496 13.312l-214.528 147.968c-8.192 5.632-18.432 5.632-27.136 0l-214.016-147.968c-26.624-18.432-60.416-17.92-86.528 1.024-26.112 18.944-36.864 50.688-27.648 81.408l74.24 250.368c2.56 9.216-0.512 18.944-8.192 25.088L34.304 419.328C8.192 439.296-2.56 472.576 7.68 503.808s37.888 52.224 71.168 52.736L331.776 563.2c10.24 0 19.968 7.168 23.552 17.408l86.016 244.224c10.752 30.208 37.888 49.664 70.144 49.664h0.512c31.744 0 59.392-19.456 70.656-49.664l87.04-245.76c3.072-9.216 11.776-15.36 21.504-15.872l260.608-6.656c31.744-0.512 58.88-20.992 68.608-51.2 10.24-30.72 0-62.976-25.6-82.944l-206.848-158.72c-7.68-5.632-10.752-15.872-8.192-24.576l74.24-250.368c9.216-30.72-1.536-62.464-27.648-81.408-13.312-9.216-28.672-13.824-44.032-13.824z m-269.824 216.576c14.848 0 29.696-4.608 41.984-13.312l214.528-147.968c12.8-8.704 24.064-2.048 27.136 0.512 3.072 2.048 12.8 10.752 8.704 25.6l-74.24 249.856c-9.216 28.672 1.024 61.44 25.6 80.384l206.848 158.72c12.288 9.216 9.216 22.528 8.192 26.112-1.024 3.584-6.144 15.872-21.504 15.872l-260.608 6.656c-30.72 1.024-58.368 20.992-68.608 49.664l-87.04 245.76c-5.12 14.336-18.944 15.36-22.528 15.36-4.096 0-16.896-1.024-22.016-15.36L403.456 563.712c-10.752-30.208-38.912-50.688-70.656-51.2l-252.928-6.656c-16.896-0.512-22.528-13.312-23.552-17.408-1.536-4.096-4.608-17.92 8.704-28.16l202.24-154.624c24.576-18.432 35.328-50.176 26.624-80.384l-74.24-250.368c-4.608-14.848 5.632-23.04 8.704-25.6 3.072-2.56 14.336-9.216 27.136-0.512l214.528 147.968c12.8 8.704 27.648 13.312 42.496 13.312z"  horiz-adv-x="1024" />
+
+    
+    <glyph glyph-name="guan" unicode="&#58980;" d="M624.56806026-10.998314240000013l783.84345777 0C1625.67332801-10.998314240000013 1803.50781236 166.79697775 1803.50781237 384.07838471c0 217.30100235-177.83448435 395.09629433-395.11589053 395.09629433l-783.84345775 1e-8c-217.28140617 0-395.07669893-177.795292-395.07669817-395.09629435C229.49136133 166.79697775 407.28665409-10.998314240000013 624.56806026-10.998314240000013zM306.36680888 384.33313345c0 180.51914812 147.6957037 328.21485182 328.21485182 328.21485182L1406.9222148 712.54798527c180.51914812 0 328.21485182-147.6957037 328.21485184-328.21485183 0-180.53874428-147.6957037-328.23444801-328.21485183-328.234448l-772.3405541 0c-180.51914811-0.01959617-328.21485182 147.6957037-328.21485183 328.234448zM628.66364254 386.27314639m238.09245023 0a238.09245023 238.09245023 0 1 1-476.18490045 0 238.09245023 238.09245023 0 1 1 476.18490046 0Z"  horiz-adv-x="2037" />
+
+    
+    <glyph glyph-name="kai" unicode="&#58975;" d="M1410.66824077 766.75105206l-759.53971774 0C440.60310218 766.75105206 268.28252885 594.46845589 268.28252884 383.92404567000005c0-210.56339803 172.32057333-382.84599419 382.86498278-382.84599418l759.53971774-1e-8c210.54440945 0 382.82700636 172.28259618 382.82700561 382.8459942C1793.49524715 594.46845589 1621.21265022 766.75105206 1410.66824077 766.75105206zM1719.0033889 383.67719564000004c0-174.92199681-143.11627148-318.03826828-318.03826828-318.03826828L652.57164915 65.63892737000003c-174.92199681 0-318.03826828 143.11627148-318.0382683 318.03826828 0 174.94098537 143.11627148 318.05725687 318.03826829 318.05725686l748.39347148 0c174.92199679 0.01898857 318.03826828-143.11627148 318.03826828-318.05725686zM1406.69964554 381.79733447m-230.71018918 0a230.7101892 230.7101892 0 1 1 461.42037838 0 230.7101892 230.7101892 0 1 1-461.42037839 0Z"  horiz-adv-x="2037" />
+
+    
+
+
+  </font>
+</defs></svg>

BIN
src/main/resources/static/home/font2/iconfont.ttf


BIN
src/main/resources/static/home/font2/iconfont.woff


+ 5 - 0
src/main/resources/static/js/government/activity/activity_list.js

@@ -21,10 +21,15 @@ function editActivity(title, url, w, h) {
 
 /*详情*/
 function activityDetail(title, url, w, h) {
+    removeTabFlag();
     var index = layer_show(title, pagePath + url, w, h);
     layer.full(index);
 }
 
+function removeTabFlag() {
+    sessionStorage.removeItem("tabIndex");
+}
+
 /*审核*/
 function activityReview(title, url, w, h) {
     var index = layer_show(title, pagePath + url, w, h);

+ 1 - 0
src/main/resources/templates/admin/common/common.html

@@ -30,6 +30,7 @@
     <!--<link rel="stylesheet" th:href="@{/h-ui/static/bootstrap.min.css}">-->
     <!--<link rel="stylesheet" th:href="@{/h-ui/static/bootstrap-select.css}" type="text/css">-->
 	<link rel="stylesheet" th:href="@{/home/font/iconfont.css}">
+    <link rel="stylesheet" th:href="@{/home/font2/iconfont.css}">
     <link rel="stylesheet" type="text/css" th:href="@{/home/css/cover.css}" />
 
 

+ 323 - 17
src/main/resources/templates/admin/government/activity_detail.html

@@ -62,17 +62,60 @@
         .l {
             padding: 10px 20px;
         }
+
+        .activity-top {
+            border: solid 1px #dadada;
+            padding: 15px;
+        }
+
+        .activity-box {
+            margin-bottom: 10px;
+        }
+
+        .activity-box:last-child {
+            margin-bottom: 0;
+        }
+
+        .activity-box-label {
+            display: block;
+            float: left;
+            width: 80px;
+            padding: 5px 0;
+        }
+
+        .activity-box-list {
+            float: left;
+        }
+
+        .activity-box-list ul {
+            border: solid 1px #dadada;
+        }
+
+        .activity-box-list ul li {
+            float: left;
+            border-right: solid 1px #dadada;
+            padding: 5px 20px;
+            cursor: pointer;
+        }
+
+        .activity-box-list ul li.active {
+            background: #7DB4D8;
+            color: #fff;
+        }
+
+        .activity-box-list ul li:last-child {
+            border-right: 0;
+        }
     </style>
 </head>
 
 <body layout:fragment="content">
-
 <article class="page-container">
     <div class="tabBar cl">
         <span>活动详情</span>
         <span>报名信息</span>
         <span>签到信息</span>
-        <span>反馈信息</span>
+        <span onclick="setTabFlag(3)">反馈信息</span>
     </div>
     <!--活动热度-->
     <div>
@@ -281,28 +324,227 @@
         </div>
         <!--反馈信息-->
         <div class="tabCon">
-            <div class="row cl">
-                <div class="formControls col-xs-12 col-sm-12">
-                    <ul class="formControls_ul" th:each="m,iterStat:${feedbackList}">
-                        <li>
-                            <p th:text="${m.content}"></p>
-                            <p class="formControls_p"><span>用户昵称:[[${m.create_name}]]</span><span
-                                    th:text="${#dates.format(m.feedback_time, 'yyyy年MM月dd日')}"></span></p>
-                        </li>
-                    </ul>
+
+            <form id="myForm" th:action="@{/government/activity/get/{activity_id}(activity_id=${activity_id})}"
+                  th:method="get">
+
+                <div class="activity-top">
+                    <div class="clearfix activity-box">
+                        <span class="activity-box-label">综合评分:</span>
+                        <div class="activity-box-list">
+                            <ul class="clearfix" id="feedback_type">
+                                <li th:class="${maxScore=='101'&&minScore=='-1'}? 'active' : ''">
+                                    <input hidden name="maxScore" type="radio" th:checked="${maxScore=='101'}"
+                                           value="101">
+                                    <input hidden name="minScore" type="radio" th:checked="${minScore=='-1'}"
+                                           value="-1">
+                                    <span>全部</span>
+                                    <span th:text="${'('+scoreCount.score_all+')'}">(0)</span>
+                                </li>
+                                <li th:class="${maxScore=='100'&&minScore=='80'}? 'active' : ''">
+                                    <input hidden name="maxScore" type="radio" th:checked="${maxScore=='100'}"
+                                           value="100">
+                                    <input hidden name="minScore" type="radio" th:checked="${minScore=='80'}"
+                                           value="80">
+                                    <span>100-80</span>
+                                    <span th:text="${'('+scoreCount.score100_80+')'}">(0)</span>
+                                </li>
+                                <li th:class="${maxScore=='80'&&minScore=='60'}? 'active' : ''">
+                                    <input hidden name="maxScore" type="radio" th:checked="${maxScore=='80'}"
+                                           value="80">
+                                    <input hidden name="minScore" type="radio" th:checked="${minScore=='60'}"
+                                           value="60">
+                                    <span>80-60</span>
+                                    <span th:text="${'('+scoreCount.score80_60+')'}">(0)</span>
+                                </li>
+                                <li th:class="${maxScore=='60'&&minScore=='40'}? 'active' : ''">
+                                    <input hidden name="maxScore" type="radio" th:checked="${maxScore=='60'}"
+                                           value="60">
+                                    <input hidden name="minScore" type="radio" th:checked="${minScore=='40'}"
+                                           value="40">
+                                    <span>60-40</span>
+                                    <span th:text="${'('+scoreCount.score60_40+')'}">(0)</span>
+                                </li>
+                                <li th:class="${maxScore=='40'&&minScore=='20'}? 'active' : ''">
+                                    <input hidden name="maxScore" type="radio" th:checked="${maxScore=='40'}"
+                                           value="40">
+                                    <input hidden name="minScore" type="radio" th:checked="${minScore=='20'}"
+                                           value="20">
+                                    <span>40-20</span>
+                                    <span th:text="${'('+scoreCount.score40_20+')'}">(0)</span>
+                                </li>
+                                <li th:class="${maxScore=='20'&&minScore=='-2'}? 'active' : ''">
+                                    <input hidden name="maxScore" type="radio" th:checked="${maxScore=='20'}"
+                                           value="20">
+                                    <input hidden name="minScore" type="radio" th:checked="${minScore=='-2'}"
+                                           value="-2">
+                                    <span>20-0</span>
+                                    <span th:text="${'('+scoreCount.score20_0+')'}">(0)</span>
+                                </li>
+                            </ul>
+                        </div>
+                    </div>
                 </div>
-            </div>
-            <div class="row cl" style="padding-top: 10px">
-                <div style="text-align: center">
-                    <a onclick="removeIframe();" class="btn btn-default radius" type="button">返回</a>
+                <div class="page-container">
+                    <div class="cl pd-5 bg-1 bk-gray mt-20">
+                        <span class="l">
+                        </span>
+                        <span class="r">共有数据:<strong th:text="${pageInfo?.total}" id="total">0</strong> 条</span>
+                    </div>
+                    <table class="table table-border table-bordered table-bg table-hover"
+                           style="table-layout: fixed;width:100%;">
+                        <thead>
+                        <tr class="text-c">
+                            <th width="60">用户姓名</th>
+                            <th width="100">反馈时间</th>
+                            <th>活动评价</th>
+                            <th width="60">综合评分</th>
+                            <th>反馈及建议</th>
+                            <th>回复内容</th>
+                            <th width="60">反馈类型</th>
+                            <th width="60">是否显示</th>
+                            <th width="120">操作</th>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        <tr class="text-c" th:each="m,iterStat:${pageInfo.list}">
+                            <!-- 用户姓名 -->
+                            <td th:text="${m.feedback_name}"></td>
+                            <!-- 反馈时间 -->
+                            <td>
+                                <p th:text="${#dates.format(m.feedback_time,'yyyy年MM月dd日')}"></p>
+                                <p th:text="${#dates.format(m.feedback_time,'HH:mm:ss')}"></p>
+                            </td>
+                            <!-- 活动评价 -->
+                            <td>
+                                <p>内容设计(20分)
+                                    <i th:if="${m.score_1 > 0}">
+                                        <i th:each="i:${#numbers.sequence(1,m.score_1)}" class="ifont-xing"
+                                           style="color:#FFD700"></i>
+                                    </i>
+                                    <i th:if="${m.score_1 < 5}">
+                                        <i th:each="i:${#numbers.sequence(m.score_1,4)}" class="ifont-star"
+                                           style="color:#DCDCDC"></i>
+                                    </i>
+                                </p>
+                                <p>讲师水平(20分)
+                                    <i th:if="${m.score_2 > 0}">
+                                        <i th:each="i:${#numbers.sequence(1,m.score_2)}" class="ifont-xing"
+                                           style="color:#FFD700"></i>
+                                    </i>
+                                    <i th:if="${m.score_2 < 5}">
+                                        <i th:each="i:${#numbers.sequence(m.score_2,4)}" class="ifont-star"
+                                           style="color:#DCDCDC"></i>
+                                    </i>
+                                </p>
+                                <p>活动效果(60分)
+                                    <i th:if="${m.score_3 > 0}">
+                                        <i th:each="i:${#numbers.sequence(1,m.score_3)}" class="ifont-xing"
+                                           style="color:#FFD700"></i>
+                                    </i>
+                                    <i th:if="${m.score_3 < 5}">
+                                        <i th:each="i:${#numbers.sequence(m.score_3,4)}" class="ifont-star"
+                                           style="color:#DCDCDC"></i>
+                                    </i>
+                                </p>
+                            </td>
+                            <!-- 综合评分 -->
+                            <td th:text="${m.score}"></td>
+                            <!-- 反馈及建议 -->
+                            <td th:text="${m.content}"></td>
+                            <!-- 回复内容 -->
+                            <td th:id="'reply_'+${m.id}" th:text="${m.reply}"></td>
+                            <!-- 反馈类型 -->
+                            <td th:if="${m.is_public==true}">公开</td>
+                            <td th:if="${m.is_public==false}">不公开</td>
+                            <!-- 是否显示 -->
+                            <!-- <td th:text="${m.is_view}"></td> -->
+                            <td th:if="${m.is_view==true}">显示</td>
+                            <td th:if="${m.is_view==false}">不显示</td>
+                            <!-- 操作 -->
+                            <td>
+                                <a class="ml-5" style="color: rgb(14, 144, 210);"
+                                   th:if="${m.is_top==false &&  m.is_public==true}"
+                                   th:onclick="'javascript:top_feedback('+${m.id}+')'">
+                                    置顶
+                                </a>
+                                <i class="ml-5" style="font-style:normal"
+                                   th:if="${m.is_top==false && m.is_public==false}">
+                                    置顶
+                                </i>
+                                <i class="ml-5" style="font-style:normal"
+                                   th:if="${m.is_top==true}">
+                                    已置顶
+                                </i>
+                                <a class="ml-5" style="color: rgb(14, 144, 210);"
+                                   th:if="${m.is_view==false}" th:onclick="'javascript:show_feedback('+${m.id}+')'">
+                                    显示
+                                </a>
+                                <a class="ml-5" style="color: rgb(14, 144, 210);"
+                                   th:if="${m.is_view==true}" th:onclick="'javascript:display_feedback('+${m.id}+')'">
+                                    不显示
+                                </a>
+                                <a class="ml-5" style="color: rgb(14, 144, 210);"
+                                   th:onclick="'javascript:reply_dialog(\'回复\',\'/government/activity/reply/'+${m.id}+'\',\'800\',\'500\');'">回复</a>
+                            </td>
+                        </tr>
+                        </tbody>
+                    </table>
+                    <div th:replace="admin/common/page :: page"></div>
                 </div>
-            </div>
+            </form>
         </div>
     </div>
 </article>
+<script type="text/javascript" th:src="@{/js/common/page.js}"></script>
 <script th:inline="javascript">
+
+    $(function () {
+        $(".activity-box-list ul li").on("click", function () {
+            if ($(this).hasClass("active")) {
+                $(this).removeClass("active")
+            } else {
+                $(this).addClass("active").siblings().removeClass("active")
+            }
+        });
+    });
+
+    $("ul#feedback_type").on("click", "li", function () {
+        maxScore = $(this).children("input").eq(0).val();
+        minScore = $(this).children("input").eq(1).val();
+
+        $('input:radio[name="maxScore"]').removeAttr('checked');
+        $('input:radio[name="minScore"]').removeAttr('checked');
+
+        $(this).children("input").eq(0).attr('checked', true);
+        $(this).children("input").eq(1).attr('checked', true);
+
+        url = pagePath + "/government/activity/get/" + [[${activity_id}]] + "?minScore=" + minScore + "&maxScore=" + maxScore;
+        location.replace(url);
+    });
+
     // tab切换
-    tabChange(".tabBar", ".tabCon");
+    tabChange_custom(".tabBar", ".tabCon");
+
+    function tabChange_custom(tabMenu, tabContent) {
+
+        var tabIndex = 0;
+        if (sessionStorage.getItem("tabIndex") != undefined && sessionStorage.getItem("tabIndex") != null) {
+            tabIndex = sessionStorage.getItem("tabIndex")
+        }
+        var $tab = $(tabMenu);
+        $tab.find("span").eq(tabIndex).addClass("current");
+        $(tabContent).eq(tabIndex).show();
+        $tab.find("span").on("click", function () {
+            var index = $(this).index();
+            $(this).addClass("current").siblings().removeClass("current");
+            $(tabContent).eq(index).show().siblings().hide();
+        })
+    }
+
+    function setTabFlag(index) {
+        sessionStorage.setItem("tabIndex", index);
+    }
 
     function print(title, url, w, h) {
         var index = layer_show(title, pagePath + url, w, h);
@@ -317,6 +559,70 @@
         window.open(pagePath + "/government/activity/exportExcelSign?id=" + id);
     }
 
+    function reply_dialog(title, url, w, h) {
+        var index = layer_show(title, pagePath + url, w, h);
+    }
+
+    function show_feedback(feedback_id) {
+        $.ajax({
+            type: 'put',
+            url: pagePath + "/activity/comment/feedback",
+            dataType: "json",
+            data: {
+                id: feedback_id,
+                is_view: true
+            },
+            success: function (data) {
+                smileMessage('操作成功!')
+                setTime();
+            },
+            error: function () {
+                errorMessage('系统错误!');
+            }
+        });
+    }
+
+    function display_feedback(feedback_id) {
+        $.ajax({
+            type: 'put',
+            url: pagePath + "/activity/comment/feedback",
+            dataType: "json",
+            data: {
+                id: feedback_id,
+                is_view: false
+            },
+            success: function (data) {
+                smileMessage('操作成功!')
+                setTime();
+            },
+            error: function () {
+                errorMessage('系统错误!');
+            }
+        });
+    }
+
+    function top_feedback(feedback_id) {
+        layer.confirm('确定置顶此条反馈内容吗?', function () {
+            //此处请求后台程序,下方是成功后的前台处理……
+            $.ajax({
+                type: 'put',
+                url: pagePath + "/activity/comment/feedback",
+                dataType: "json",
+                data: {
+                    id: feedback_id,
+                    is_top: true
+                },
+                success: function (data) {
+                    smileMessage('操作成功!')
+                    setTime();
+                },
+                error: function () {
+                    errorMessage('系统错误!');
+                }
+            });
+        });
+    }
+
     /**
      * 取消
      */

+ 73 - 0
src/main/resources/templates/admin/government/activity_reply.html

@@ -0,0 +1,73 @@
+<!DOCTYPE HTML>
+<html xmlns:th="http://www.thymeleaf.org"
+      xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
+      layout:decorate="~{admin/common/common}">
+<head>
+    <title>回复</title>
+    <style>
+    </style>
+</head>
+
+<body layout:fragment="content">
+
+<article class="page-container">
+    <form class="form form-horizontal" id="form-activity-reply">
+        <input id="feedback_id" th:value="${feedback.id}" hidden>
+        <div class="row cl">
+            <div style="padding: 20px 95px 20px 95px;">
+                <span th:utext="${feedback.content}"></span>
+            </div>
+        </div>
+        <div class="row cl">
+            <div style="text-align: center;">
+                <textarea style="width: 600px; height: 200px;"
+                          id="reply" name="reply" th:utext="${feedback.reply}"></textarea>
+            </div>
+        </div>
+        <div class="row cl">
+            <div style="text-align: center">
+                <a onclick="replyMessage()" class="btn btn-primary radius">确定</a>
+                <a onclick="removeIframe();" class="btn btn-default radius" type="button">返回</a>
+            </div>
+        </div>
+    </form>
+</article>
+
+<script th:inline="javascript">
+
+    function replyMessage() {
+        $.ajax({
+            type: 'put',
+            url: pagePath + "/activity/comment/feedback",
+            dataType: "json",
+            data: {
+                id: function () {
+                    return $("#feedback_id").val();
+                },
+                reply: function () {
+                    return $("#reply").val();
+                }
+            },
+            success: function (data) {
+                parent.$("#reply_"+$("#feedback_id").val()).html($("#reply").val());
+                smileMessage('回复成功!')
+                setTime();
+                removeIframe()
+            },
+            error: function () {
+                errorMessage('系统错误!');
+            }
+        });
+    }
+
+    /**
+     * 取消
+     */
+    function removeIframe() {
+        var index = parent.layer.getFrameIndex(window.name);
+        parent.layer.close(index);
+    }
+
+</script>
+</body>
+</html>