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

知识库积分部分功能提交

徐滕 1 тиждень тому
батько
коміт
1417256198

+ 5 - 0
src/main/java/com/jeeplus/modules/WorkKnowledgeBase/dao/WorkKnowledgeBasePointRuleDao.java

@@ -26,4 +26,9 @@ public interface WorkKnowledgeBasePointRuleDao extends CrudDao<WorkKnowledgeBase
 
     /** 切换状态 */
     int updateStatus(@Param("id") String id, @Param("status") Integer status, @Param("updateBy") String updateBy);
+
+    /**
+     * 根据分类ID和规则类型查询积分规则
+     */
+    WorkKnowledgeBasePointRule findByCategoryIdAndRuleType(@Param("categoryId") String categoryId, @Param("ruleType") String ruleType);
 }

+ 11 - 0
src/main/java/com/jeeplus/modules/WorkKnowledgeBase/entity/WorkKnowledgeBaseAuditRecord.java

@@ -30,6 +30,9 @@ public class WorkKnowledgeBaseAuditRecord extends DataEntity<WorkKnowledgeBaseAu
     /** 审核人姓名(非数据库字段,通过audit_user_id关联sys_user查询) */
     private String auditUserName;
 
+    /** 评分分数(仅技术总结/培训心得分类需要) */
+    private Integer score;
+
     public String getFileId() {
         return fileId;
     }
@@ -78,4 +81,12 @@ public class WorkKnowledgeBaseAuditRecord extends DataEntity<WorkKnowledgeBaseAu
     public void setAuditUserName(String auditUserName) {
         this.auditUserName = auditUserName;
     }
+
+    public Integer getScore() {
+        return score;
+    }
+
+    public void setScore(Integer score) {
+        this.score = score;
+    }
 }

+ 10 - 0
src/main/java/com/jeeplus/modules/WorkKnowledgeBase/service/WorkKnowledgeBasePointRuleService.java

@@ -133,4 +133,14 @@ public class WorkKnowledgeBasePointRuleService extends CrudService<WorkKnowledge
         pointRuleDao.updateStatus(id, Integer.parseInt(status), updateBy);
         return null;
     }
+
+    /**
+     * 根据分类ID和规则类型查询积分规则
+     */
+    public WorkKnowledgeBasePointRule findByCategoryIdAndRuleType(String categoryId, String ruleType) {
+        if (StringUtils.isBlank(categoryId) || StringUtils.isBlank(ruleType)) {
+            return null;
+        }
+        return pointRuleDao.findByCategoryIdAndRuleType(categoryId, ruleType);
+    }
 }

+ 118 - 7
src/main/java/com/jeeplus/modules/WorkKnowledgeBase/service/WorkKnowledgeBaseShareService.java

@@ -88,6 +88,9 @@ public class WorkKnowledgeBaseShareService extends CrudService<WorkKnowledgeBase
     @Autowired
     private WorkKnowledgeExpertDao expertDao;
 
+    @Autowired
+    private com.jeeplus.modules.WorkKnowledgeBase.dao.WorkKnowledgePointCategoryDao categoryDao;
+
     /**
      * 根据文件id加载附件列表(编辑表单回显用)
      */
@@ -139,6 +142,19 @@ public class WorkKnowledgeBaseShareService extends CrudService<WorkKnowledgeBase
     }
 
     /**
+     * 根据分类名称查询分类列表
+     */
+    public List<com.jeeplus.modules.WorkKnowledgeBase.entity.WorkKnowledgePointCategory> findCategoriesByName(String categoryName) {
+        if (StringUtils.isBlank(categoryName)) {
+            return new ArrayList<>();
+        }
+        com.jeeplus.modules.WorkKnowledgeBase.entity.WorkKnowledgePointCategory query = 
+            new com.jeeplus.modules.WorkKnowledgeBase.entity.WorkKnowledgePointCategory();
+        query.setCategoryName(categoryName);
+        return categoryDao.findList(query);
+    }
+
+    /**
      * 动态列表分页查询(核心方法)
      * 使用 CASE WHEN + MAX + GROUP BY 行转列
      * 动态字段查询条件使用 EXISTS 子查询
@@ -345,7 +361,7 @@ public class WorkKnowledgeBaseShareService extends CrudService<WorkKnowledgeBase
      * 规则:本轮三人通过即成功(仅统计 audit_start_date 之后的记录,隔离历史数据)
      */
     @Transactional(readOnly = false)
-    public void auditPass(String fileId, String auditUserId, String auditOpinion) {
+    public void auditPass(String fileId, String auditUserId, String auditOpinion, Integer score) {
         WorkKnowledgeBaseShareInfo entity = dao.get(fileId);
         if (entity == null) {
             throw new RuntimeException("文件记录不存在");
@@ -362,12 +378,27 @@ public class WorkKnowledgeBaseShareService extends CrudService<WorkKnowledgeBase
         if (auditRecordDao.countByFileIdAndUserIdSinceTime(fileId, auditUserId, startTime) > 0) {
             throw new RuntimeException("您已审核过该文件,不可重复审核");
         }
+        
+        // 查询treeName,判断是否需要评分
+        boolean needsScore = false;
+        if (StringUtils.isNotBlank(entity.getTreeNodeId())) {
+            WorkKnowledgeBaseTreeInfo treeInfo = getTreeInfoById(entity.getTreeNodeId());
+            if (treeInfo != null && ("技术总结".equals(treeInfo.getTreeName()) || "培训心得".equals(treeInfo.getTreeName()))) {
+                needsScore = true;
+                // 验证评分必填
+                if (score == null) {
+                    throw new RuntimeException("请输入评分分数");
+                }
+            }
+        }
+        
         // 保存审核记录
         WorkKnowledgeBaseAuditRecord record = new WorkKnowledgeBaseAuditRecord();
         record.setFileId(fileId);
         record.setAuditUserId(auditUserId);
         record.setAuditResult(1); // 1:通过
         record.setAuditOpinion(auditOpinion);
+        record.setScore(score); // 设置评分分数
         record.setId(IdGen.uuid());
         record.setAuditTime(new java.util.Date());
         record.preInsert();
@@ -383,8 +414,14 @@ public class WorkKnowledgeBaseShareService extends CrudService<WorkKnowledgeBase
             entity.setAuditStatus(AUDIT_STATUS_PASSED);
             entity.preUpdate();
             dao.updateAuditStatus(entity);
-            // 本轮审核通过:为提交审核人及本轮三位审核人写入积分明细
-            grantPointsOnAuditPassed(entity, startTime);
+            // 本轮审核通过:根据分类类型执行不同的积分发放逻辑
+            if (needsScore) {
+                // 技术总结/培训心得:使用评分平均分
+                grantPointsWithScore(entity, startTime);
+            } else {
+                // 其他分类:使用固定积分值
+                grantPointsWithFixedValue(entity, startTime);
+            }
         } else {
             entity.setAuditStatus(AUDIT_STATUS_AUDITING);
             entity.preUpdate();
@@ -537,14 +574,88 @@ public class WorkKnowledgeBaseShareService extends CrudService<WorkKnowledgeBase
      * 本轮审核通过后发放积分:
      * 1、为提交审核人(submit_audit_user_id)发放创建积分(change_type=1)
      * 2、为本轮三位审核人(audit_time >= audit_start_date 且 audit_result=1)各发放审核积分(change_type=2)
+     * 3、如果是技术总结/培训心得分类,使用三人评分的平均值作为积分值
      * 积分值读取 work_knowledge_base_point_rule 中对应 status=1 的启用规则
      */
-    private void grantPointsOnAuditPassed(WorkKnowledgeBaseShareInfo entity, Date startTime) {
+    /**
+     * 技术总结/培训心得分类的积分发放逻辑:创建人获得平均分,审核人获得固定审核积分
+     */
+    private void grantPointsWithScore(WorkKnowledgeBaseShareInfo entity, Date startTime) {
+        if (entity == null) {
+            return;
+        }
+        String shareId = entity.getId();
+        
+        // 计算三人评分的平均分(仅用于创建人)
+        Integer averageScore = null;
+        List<WorkKnowledgeBaseAuditRecord> records = auditRecordDao.findByFileIdSinceTime(shareId, startTime);
+        if (records != null && !records.isEmpty()) {
+            int totalScore = 0;
+            int scoreCount = 0;
+            for (WorkKnowledgeBaseAuditRecord record : records) {
+                if (record.getAuditResult() != null && record.getAuditResult() == 1
+                        && record.getScore() != null) {
+                    totalScore += record.getScore();
+                    scoreCount++;
+                }
+            }
+            if (scoreCount > 0) {
+                averageScore = Math.round((float) totalScore / scoreCount);
+            }
+        }
+        
+        // 1、提交审核人获得创建积分(使用平均分)
+        String submitUserId = entity.getSubmitAuditUserId();
+        if (StringUtils.isNotBlank(submitUserId) && averageScore != null) {
+            insertPointDetail(submitUserId, shareId, POINT_CHANGE_CREATE, averageScore);
+        }
+        
+        // 2、查询该分类对应的审核积分规则(rule_type=2)
+        Integer auditPointValue = null;
+        if (StringUtils.isNotBlank(entity.getTreeNodeId())) {
+            WorkKnowledgeBaseTreeInfo treeInfo = getTreeInfoById(entity.getTreeNodeId());
+            if (treeInfo != null) {
+                // 根据treeName查询分类表获取categoryId
+                List<WorkKnowledgePointCategory> categories = findCategoriesByName(treeInfo.getTreeName());
+                if (categories != null && !categories.isEmpty()) {
+                    String categoryId = categories.get(0).getId();
+                    // 查询该分类下rule_type=2(审核积分)的规则
+                    WorkKnowledgeBasePointRule auditRule = pointRuleDao.findByCategoryIdAndRuleType(categoryId, "2");
+                    if (auditRule != null && StringUtils.isNotBlank(auditRule.getPointValue())) {
+                        try {
+                            auditPointValue = Integer.parseInt(auditRule.getPointValue());
+                        } catch (NumberFormatException e) {
+                            // 忽略无效值
+                        }
+                    }
+                }
+            }
+        }
+        
+        // 3、本轮三位审核人各获得审核积分(使用固定审核积分值)
+        if (records == null || records.isEmpty() || auditPointValue == null || auditPointValue <= 0) {
+            return;
+        }
+        Set<String> grantedUserIds = new HashSet<>();
+        for (WorkKnowledgeBaseAuditRecord record : records) {
+            if (record.getAuditResult() != null && record.getAuditResult() == 1
+                    && StringUtils.isNotBlank(record.getAuditUserId())
+                    && grantedUserIds.add(record.getAuditUserId())) {
+                insertPointDetail(record.getAuditUserId(), shareId, POINT_CHANGE_AUDIT, auditPointValue);
+            }
+        }
+    }
+    
+    /**
+     * 其他分类的积分发放逻辑:使用固定积分值
+     */
+    private void grantPointsWithFixedValue(WorkKnowledgeBaseShareInfo entity, Date startTime) {
         if (entity == null) {
             return;
         }
         String shareId = entity.getId();
-        // 1、提交审核人获得创建积分
+        
+        // 1、提交审核人获得创建积分(使用固定值)
         String submitUserId = entity.getSubmitAuditUserId();
         if (StringUtils.isNotBlank(submitUserId)) {
             WorkKnowledgeBasePointRule createRule = pointRuleDao.findByRuleType(POINT_RULE_CREATE);
@@ -552,7 +663,8 @@ public class WorkKnowledgeBaseShareService extends CrudService<WorkKnowledgeBase
                 insertPointDetail(submitUserId, shareId, POINT_CHANGE_CREATE, Integer.parseInt(createRule.getPointValue()));
             }
         }
-        // 2、本轮三位审核人各获得审核积分(仅统计 audit_result=1 且 audit_time >= startTime)
+        
+        // 2、本轮三位审核人各获得审核积分(使用固定值)
         WorkKnowledgeBasePointRule auditRule = pointRuleDao.findByRuleType(POINT_RULE_AUDIT);
         if (auditRule == null || auditRule.getPointValue() == null || Integer.parseInt(auditRule.getPointValue()) <= 0) {
             return;
@@ -563,7 +675,6 @@ public class WorkKnowledgeBaseShareService extends CrudService<WorkKnowledgeBase
         }
         Set<String> grantedUserIds = new HashSet<>();
         for (WorkKnowledgeBaseAuditRecord record : records) {
-            // 只给本轮审核通过的人加分,同一人只加一次
             if (record.getAuditResult() != null && record.getAuditResult() == 1
                     && StringUtils.isNotBlank(record.getAuditUserId())
                     && grantedUserIds.add(record.getAuditUserId())) {

+ 33 - 8
src/main/java/com/jeeplus/modules/WorkKnowledgeBase/web/WorkKnowledgeBaseShareController.java

@@ -6,11 +6,7 @@ import com.jeeplus.common.persistence.Page;
 import com.jeeplus.common.utils.StringUtils;
 import com.jeeplus.common.utils.excel.ImportExcel;
 import com.jeeplus.common.web.BaseController;
-import com.jeeplus.modules.WorkKnowledgeBase.entity.WorkKnowledgeBaseAuditRecord;
-import com.jeeplus.modules.WorkKnowledgeBase.entity.WorkKnowledgeBaseDynamicInfo;
-import com.jeeplus.modules.WorkKnowledgeBase.entity.WorkKnowledgeBaseDynamicValueInfo;
-import com.jeeplus.modules.WorkKnowledgeBase.entity.WorkKnowledgeBaseImportInfo;
-import com.jeeplus.modules.WorkKnowledgeBase.entity.WorkKnowledgeBaseShareInfo;
+import com.jeeplus.modules.WorkKnowledgeBase.entity.*;
 import com.jeeplus.modules.WorkKnowledgeBase.service.WorkKnowledgeBaseShareService;
 import com.jeeplus.modules.WorkKnowledgeBase.service.WorkKnowledgeExpertService;
 import com.jeeplus.modules.sys.utils.UserUtils;
@@ -44,6 +40,9 @@ public class WorkKnowledgeBaseShareController extends BaseController {
     @Autowired
     private WorkKnowledgeExpertService expertService;
 
+    @Autowired
+    private com.jeeplus.modules.WorkKnowledgeBase.service.WorkKnowledgeBasePointRuleService pointRuleService;
+
     @ModelAttribute
     public WorkKnowledgeBaseShareInfo get(@RequestParam(required = false) String id) {
         WorkKnowledgeBaseShareInfo entity = null;
@@ -117,7 +116,7 @@ public class WorkKnowledgeBaseShareController extends BaseController {
             Object treeNodeIdObj = map.get("treeNodeId");
             if (treeNodeIdObj != null) {
                 String tid = treeNodeIdObj.toString();
-                com.jeeplus.modules.WorkKnowledgeBase.entity.WorkKnowledgeBaseTreeInfo treeInfo =
+                WorkKnowledgeBaseTreeInfo treeInfo =
                         shareService.getTreeInfoById(tid);
                 if (treeInfo != null) {
                     map.put("treeName", treeInfo.getTreeName());
@@ -183,6 +182,31 @@ public class WorkKnowledgeBaseShareController extends BaseController {
         if (auditStatus != null && (auditStatus.equals("1") || auditStatus.equals("2") || auditStatus.equals("4") || auditStatus.equals("5"))) {
             model.addAttribute("auditRecords", shareService.findAuditRecordsByFileId(shareInfo.getId()));
         }
+
+        // 查询treeName,判断是否为需要评分的特殊分类
+        // 注意:必须使用文件本身的treeNodeId,而不是请求参数中的(可能是父节点或空)
+        WorkKnowledgeBaseShareInfo workKnowledgeBaseShareInfo = shareService.get(shareInfo.getId());
+        if (StringUtils.isNotBlank(workKnowledgeBaseShareInfo.getTreeNodeId())) {
+            WorkKnowledgeBaseTreeInfo treeInfo = shareService.getTreeInfoById(workKnowledgeBaseShareInfo.getTreeNodeId());
+            if (treeInfo != null) {
+                model.addAttribute("treeName", treeInfo.getTreeName());
+                
+                // 如果是技术总结或培训心得,查询对应的积分规则
+                if ("技术总结".equals(treeInfo.getTreeName()) || "培训心得".equals(treeInfo.getTreeName())) {
+                    // 根据treeName查询work_knowledge_point_category表获取categoryId
+                    List<WorkKnowledgePointCategory> categories = shareService.findCategoriesByName(treeInfo.getTreeName());
+                    if (categories != null && !categories.isEmpty()) {
+                        String categoryId = categories.get(0).getId();
+                        // 查询该分类下rule_type=2(创建积分)的规则
+                        WorkKnowledgeBasePointRule rule = pointRuleService.findByCategoryIdAndRuleType(categoryId, "1");
+                        if (rule != null) {
+                            model.addAttribute("pointRule", rule);
+                        }
+                    }
+                }
+            }
+        }
+
         return "modules/WorkKnowledgeBase/workKnowledgeBaseShareDetail";
     }
 
@@ -383,11 +407,12 @@ public class WorkKnowledgeBaseShareController extends BaseController {
     @RequestMapping(value = "auditPass")
     @ResponseBody
     public Map<String, Object> auditPass(@RequestParam String id,
-                                         @RequestParam(required = false) String auditOpinion) {
+                                         @RequestParam(required = false) String auditOpinion,
+                                         @RequestParam(required = false) Integer score) {
         Map<String, Object> result = new HashMap<>();
         try {
             String currentUserId = UserUtils.getUser().getId();
-            shareService.auditPass(id, currentUserId, auditOpinion);
+            shareService.auditPass(id, currentUserId, auditOpinion, score);
             result.put("success", true);
             result.put("message", "审核通过操作成功");
         } catch (Exception e) {

+ 5 - 3
src/main/resources/mappings/modules/WorkKnowledgeBase/WorkKnowledgeBaseAuditRecordDao.xml

@@ -9,6 +9,7 @@
         a.audit_result    AS "auditResult",
         a.audit_opinion   AS "auditOpinion",
         a.audit_time      AS "auditTime",
+        a.score           AS "score",
         a.create_date     AS "createDate",
         a.del_flag        AS "delFlag"
     </sql>
@@ -145,10 +146,10 @@
     <!-- 插入 -->
     <insert id="insert">
         INSERT INTO work_knowledge_base_audit_record (
-            id, file_id, audit_user_id, audit_result, audit_opinion, audit_time,
+            id, file_id, audit_user_id, audit_result, audit_opinion, audit_time, score,
             create_date, del_flag
         ) VALUES (
-            #{id}, #{fileId}, #{auditUserId}, #{auditResult}, #{auditOpinion}, #{auditTime},
+            #{id}, #{fileId}, #{auditUserId}, #{auditResult}, #{auditOpinion}, #{auditTime}, #{score},
             #{createDate}, #{delFlag}
         )
     </insert>
@@ -158,7 +159,8 @@
         UPDATE work_knowledge_base_audit_record SET
             audit_result  = #{auditResult},
             audit_opinion = #{auditOpinion},
-            audit_time    = #{auditTime}
+            audit_time    = #{auditTime},
+            score         = #{score}
         WHERE id = #{id}
     </update>
 

+ 10 - 0
src/main/resources/mappings/modules/WorkKnowledgeBase/WorkKnowledgeBasePointRuleDao.xml

@@ -162,4 +162,14 @@
         WHERE id = #{id}
     </update>
 
+    <select id="findByCategoryIdAndRuleType" resultType="com.jeeplus.modules.WorkKnowledgeBase.entity.WorkKnowledgeBasePointRule">
+        SELECT <include refid="pointRuleColumns"/>
+        FROM work_knowledge_base_point_rule a
+        WHERE a.category_id = #{categoryId}
+          AND a.rule_type = #{ruleType}
+          AND a.status = 1
+          AND a.del_flag = '0'
+        LIMIT 1
+    </select>
+
 </mapper>

+ 6 - 0
src/main/resources/mysqlDateBase/add_score_field.sql

@@ -0,0 +1,6 @@
+-- 为 work_knowledge_base_audit_record 表添加 score 字段(评分分数)
+-- 说明:仅技术总结/培训心得分类的审核记录需要填写评分
+ALTER TABLE work_knowledge_base_audit_record ADD COLUMN score INT(11) COMMENT '评分分数(仅技术总结/培训心得分类需要)';
+
+-- 注意:work_knowledge_base_point_detail 表不需要添加新字段
+-- 对于技术总结/培训心得分类,三人审核通过后的平均分将直接作为积分值保存到 point 字段中

+ 105 - 1
src/main/webapp/webpage/modules/WorkKnowledgeBase/workKnowledgeBaseShareDetail.jsp

@@ -20,6 +20,37 @@
                 if (!opinion || opinion.trim() === '') {
                     opinion = '同意';
                 }
+                
+                // 如果是技术总结或培训心得,需要验证评分
+                <c:if test="${treeName == '技术总结' || treeName == '培训心得'}">
+                    var scoreValue = $('#scoreValue').val();
+                    if (!scoreValue || scoreValue.trim() === '') {
+                        top.layer.msg('请输入评分分数', {icon: 2});
+                        return false;
+                    }
+                    var minScore = ${pointRule != null ? pointRule.pointMin : '0'};
+                    var maxScore = ${pointRule != null ? pointRule.pointMax : '0'};
+                    var scoreNum = parseInt(scoreValue);
+                    
+                    // 验证是否为正整数
+                    if (isNaN(scoreNum) || scoreNum <= 0) {
+                        top.layer.msg('评分分数必须为正整数', {icon: 2});
+                        return false;
+                    }
+                    
+                    // 验证是否在范围内
+                    if (scoreNum < minScore || scoreNum > maxScore) {
+                        top.layer.msg('评分分数必须在' + minScore + '-' + maxScore + '之间', {icon: 2});
+                        return false;
+                    }
+                    
+                    // 验证是否为整数(检查是否有小数点)
+                    if (scoreValue.indexOf('.') !== -1) {
+                        top.layer.msg('评分分数必须为整数,不能包含小数', {icon: 2});
+                        return false;
+                    }
+                </c:if>
+                
                 var url = '${ctx}/workKnowledgeBase/share/auditPass';
             } else {
                 // 驳回:审核意见为空时默认"驳回"
@@ -33,7 +64,13 @@
                 type: 'POST',
                 url: url,
                 async: false,
-                data: { id: '${entity.id}', auditOpinion: opinion },
+                data: { 
+                    id: '${entity.id}', 
+                    auditOpinion: opinion,
+                    <c:if test="${treeName == '技术总结' || treeName == '培训心得'}">
+                    score: $('#scoreValue').val()
+                    </c:if>
+                },
                 success: function(data) {
                     if (data.success) {
                         success = true;
@@ -94,6 +131,48 @@
                 });
             });
 
+            // 评分输入框实时验证
+            $('#scoreValue').on('input propertychange', function() {
+                var scoreValue = $(this).val().trim();
+                var minScore = ${pointRule != null ? pointRule.pointMin : '0'};
+                var maxScore = ${pointRule != null ? pointRule.pointMax : '0'};
+                var $tip = $('#scoreTip');
+                
+                if (!scoreValue) {
+                    $tip.html('评分范围:<span style="color:#999;">' + minScore + ' - ' + maxScore + '</span> 分(仅允许正整数)');
+                    return;
+                }
+                
+                var scoreNum = parseInt(scoreValue);
+                
+                // 检查是否包含小数点
+                if (scoreValue.indexOf('.') !== -1) {
+                    $tip.html('<span style="color:red;">✗ 不能输入小数,必须为整数</span>');
+                    return;
+                }
+                
+                // 检查是否为有效数字
+                if (isNaN(scoreNum)) {
+                    $tip.html('<span style="color:red;">✗ 请输入有效的数字</span>');
+                    return;
+                }
+                
+                // 检查是否为正数
+                if (scoreNum <= 0) {
+                    $tip.html('<span style="color:red;">✗ 必须为正整数(大于0)</span>');
+                    return;
+                }
+                
+                // 检查是否在范围内
+                if (scoreNum < minScore || scoreNum > maxScore) {
+                    $tip.html('<span style="color:red;"> 超出范围,应在 ' + minScore + '-' + maxScore + ' 之间</span>');
+                    return;
+                }
+                
+                // 验证通过
+                $tip.html('<span style="color:green;">✓ 符合要求</span>');
+            });
+
         });
     </script>
 </head>
@@ -264,12 +343,29 @@
         </c:if>
 
 
+
         <!-- 审核意见区域(审核中和未审核状态下,非创建人可见) -->
         <c:set var="auditStatusInt" value="${entity.auditStatus != null ? entity.auditStatus : 0}"/>
         <c:set var="isCreator" value="${entity.createBy != null && entity.createBy.id == fns:getUser().id}"/>
         <c:if test="${(auditStatusInt == 1 || auditStatusInt == 2) && !isCreator}">
             <div class="form-group layui-row">
                 <div class="form-group-label"><h2>审核意见</h2></div>
+                <!-- 如果是技术总结或培训心得,显示评分输入框 -->
+                <c:if test="${treeName == '技术总结' || treeName == '培训心得'}">
+                    <c:if test="${pointRule != null}">
+                        <div class="layui-item layui-col-sm12 lw6">
+                            <label class="layui-form-label"><span class="require-item">*</span>评分分数:</label>
+                            <div class="layui-input-block">
+                                <input type="number" id="scoreValue" class="form-control layui-input"
+                                       min="${pointRule.pointMin}" max="${pointRule.pointMax}" step="1"
+                                       placeholder="请输入${pointRule.pointMin}-${pointRule.pointMax}之间的正整数" />
+                                <div id="scoreTip" style="color:#999;font-size:12px;margin-top:5px;">
+                                    评分范围:<span style="color:#999;">${pointRule.pointMin} - ${pointRule.pointMax}</span> 分(仅允许正整数)
+                                </div>
+                            </div>
+                        </div>
+                    </c:if>
+                </c:if>
                 <div class="layui-item layui-col-sm12 lw6 with-textarea">
                     <label class="layui-form-label">审核意见:</label>
                     <div class="layui-input-block">
@@ -278,6 +374,8 @@
                     </div>
                 </div>
             </div>
+
+
         </c:if>
 
         <div class="form-group layui-row page-end"></div>
@@ -302,6 +400,9 @@
                         <th>审核人</th>
                         <th>审核时间</th>
                         <th>审核结果</th>
+                        <c:if test="${treeName == '技术总结' || treeName == '培训心得'}">
+                            <th>评分分数</th>
+                        </c:if>
                         <th>审核意见</th>
                     </tr>
                     </thead>
@@ -317,6 +418,9 @@
                                     <c:otherwise>-</c:otherwise>
                                 </c:choose>
                             </td>
+                            <c:if test="${treeName == '技术总结' || treeName == '培训心得'}">
+                                <td>${record.score != null ? record.score : '-'}</td>
+                            </c:if>
                             <td>${record.auditOpinion != null && record.auditOpinion != '' ? record.auditOpinion : '-'}</td>
                         </tr>
                     </c:forEach>