Browse Source

导师带徒 关联考试 关联审批流
app:审批流列表添加筛选条件

jiangbiao 11 months ago
parent
commit
a867432148

+ 21 - 7
master/src/main/java/com/ruoyi/project/ehs/controller/TApproveDangerController.java

@@ -487,14 +487,28 @@ public class TApproveDangerController extends BaseController {
     @GetMapping("/doneTaskList")
     public TableDataInfo doneTaskList(@RequestParam Map<String, Object> params) {
         ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
-        List<HistoricTaskInstance> taskList = historyService.createHistoricTaskInstanceQuery()
-                .taskAssignee(getUserId().toString())
-                .finished().orderByHistoricTaskInstanceEndTime().desc()
-                .listPage(PageUtils.getStart(params), Integer.parseInt((String) params.get("pageSize")));
+        List<HistoricTaskInstance> taskList;
         //分页数据
-        Long count = historyService.createHistoricTaskInstanceQuery()
-                .taskAssignee(getUserId().toString())
-                .finished().count();
+        Long count;
+        if (StringUtils.isEmpty(params.getOrDefault("definitionKey", "").toString())) {
+            taskList = historyService.createHistoricTaskInstanceQuery()
+                    .taskAssignee(getUserId().toString())
+                    .finished().orderByHistoricTaskInstanceEndTime().desc()
+                    .listPage(PageUtils.getStart(params), Integer.parseInt((String) params.get("pageSize")));
+            count = historyService.createHistoricTaskInstanceQuery()
+                    .taskAssignee(getUserId().toString())
+                    .finished().count();
+        } else {
+            taskList = historyService.createHistoricTaskInstanceQuery()
+                    .taskAssignee(getUserId().toString())
+                    .processDefinitionKeyIn(JSON.parseArray(params.get("definitionKey").toString(), String.class))
+                    .finished().orderByHistoricTaskInstanceEndTime().desc()
+                    .listPage(PageUtils.getStart(params), Integer.parseInt((String) params.get("pageSize")));
+            count = historyService.createHistoricTaskInstanceQuery()
+                    .taskAssignee(getUserId().toString())
+                    .processDefinitionKeyIn(JSON.parseArray(params.get("definitionKey").toString(), String.class))
+                    .finished().count();
+        }
         logger.info(JSON.toJSONString(taskList));
         List<DevProcess> list = new ArrayList<>();
         if (taskList.size() > 0) {

+ 7 - 7
master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsFirstplanController.java

@@ -104,15 +104,15 @@ public class TTsFirstplanController extends BaseController {
         TTsNew tTsNew = tTsNewService.selectTTsNewById(tTsFirstplan.getNewId());
         SysUser sysUser = sysUserService.selectUserByStaffId(tTsNew.getStaffId());
         if (userId.equals(sysUser.getUserId())) {
-            TTsFirstplan plan = new TTsFirstplan();
-            plan.setId(tTsFirstplan.getId());
-            long timer = tTsFirstplan.getTimer() == null ? 0 : tTsFirstplan.getTimer();
-            plan.setTimer(timer + 1);
             TTsFirstplan need = tTsFirstplanService.selectTTsFirstplanById(tTsFirstplan.getId());
-            if (need.getTimerNeed() != null && need.getTimerNeed().equals(timer + 1)) {
-                plan.setPlanStatus(2L);
+            long timer = need.getTimer() == null ? 0 : need.getTimer();
+            need.setTimer(timer + 1);
+            if (need.getTimerNeed()==null)
+                need.setTimerNeed(0L);
+            if (need.getTimerNeed() != null && need.getTimerNeed()<=timer + 1) {
+                need.setPlanStatus(2L);
             }
-            return toAjax(tTsFirstplanService.updateTTsFirstplan(plan));
+            return toAjax(tTsFirstplanService.updateTTsFirstplan(need));
         }
         return AjaxResult.error("当前登录用户非学习用户!");
     }

+ 7 - 7
master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsFlplanController.java

@@ -87,15 +87,15 @@ public class TTsFlplanController extends BaseController {
         TTsNew tTsNew = tTsNewService.selectTTsNewById(tTsFlplan.getNewId());
         SysUser sysUser = sysUserService.selectUserByStaffId(tTsNew.getStaffId());
         if (userId.equals(sysUser.getUserId())) {
-            TTsFlplan plan = new TTsFlplan();
-            plan.setId(tTsFlplan.getId());
-            long timer = tTsFlplan.getTimer() == null ? 0 : tTsFlplan.getTimer();
-            plan.setTimer(timer + 1);
             TTsFlplan need = tTsFlplanService.selectTTsFlplanById(tTsFlplan.getId());
-            if (need.getTimerNeed() != null && need.getTimerNeed().equals(timer + 1)) {
-                plan.setPlanStatus(2L);
+            long timer = need.getTimer() == null ? 0 : need.getTimer();
+            need.setTimer(timer + 1);
+            if (need.getTimerNeed()==null)
+                need.setTimerNeed(0L);
+            if (need.getTimerNeed() != null && need.getTimerNeed()<=timer + 1) {
+                need.setPlanStatus(2L);
             }
-            return toAjax(tTsFlplanService.updateTTsFlplan(plan));
+            return toAjax(tTsFlplanService.updateTTsFlplan(need));
         }
         return AjaxResult.error("当前登录用户非学习用户!");
     }

+ 8 - 7
master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsFtplanController.java

@@ -8,6 +8,7 @@ import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.framework.web.page.TableDataInfo;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.service.ISysUserService;
+import com.ruoyi.project.training.bccnew.domain.TTsFlplan;
 import com.ruoyi.project.training.bccnew.domain.TTsFtplan;
 import com.ruoyi.project.training.bccnew.domain.TTsNew;
 import com.ruoyi.project.training.bccnew.service.ITTsApproveService;
@@ -86,15 +87,15 @@ public class TTsFtplanController extends BaseController {
         TTsNew tTsNew = tTsNewService.selectTTsNewById(tTsFtplan.getNewId());
         SysUser sysUser = sysUserService.selectUserByStaffId(tTsNew.getStaffId());
         if (userId.equals(sysUser.getUserId())) {
-            TTsFtplan plan = new TTsFtplan();
-            plan.setId(tTsFtplan.getId());
-            long timer = tTsFtplan.getTimer() == null ? 0 : tTsFtplan.getTimer();
-            plan.setTimer(timer + 1);
             TTsFtplan need = tTsFtplanService.selectTTsFtplanById(tTsFtplan.getId());
-            if (need.getTimerNeed() != null && need.getTimerNeed().equals(timer + 1)) {
-                plan.setPlanStatus(2L);
+            long timer = need.getTimer() == null ? 0 : need.getTimer();
+            need.setTimer(timer + 1);
+            if (need.getTimerNeed()==null)
+                need.setTimerNeed(0L);
+            if (need.getTimerNeed() != null && need.getTimerNeed()<=timer + 1) {
+                need.setPlanStatus(2L);
             }
-            return toAjax(tTsFtplanService.updateTTsFtplan(plan));
+            return toAjax(tTsFtplanService.updateTTsFtplan(need));
         }
         return AjaxResult.error("当前登录用户非学习用户!");
     }

+ 8 - 7
master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsLjplanController.java

@@ -8,6 +8,7 @@ import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.framework.web.page.TableDataInfo;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.service.ISysUserService;
+import com.ruoyi.project.training.bccnew.domain.TTsFlplan;
 import com.ruoyi.project.training.bccnew.domain.TTsLjplan;
 import com.ruoyi.project.training.bccnew.domain.TTsNew;
 import com.ruoyi.project.training.bccnew.service.ITTsApproveService;
@@ -89,15 +90,15 @@ public class TTsLjplanController extends BaseController {
         TTsNew tTsNew = tTsNewService.selectTTsNewById(tTsLjplan.getNewId());
         SysUser sysUser = sysUserService.selectUserByStaffId(tTsNew.getStaffId());
         if (userId.equals(sysUser.getUserId())) {
-            TTsLjplan plan = new TTsLjplan();
-            plan.setId(tTsLjplan.getId());
-            long timer = tTsLjplan.getTimer() == null ? 0 : tTsLjplan.getTimer();
-            plan.setTimer(timer + 1);
             TTsLjplan need = tTsLjplanService.selectTTsLjplanById(tTsLjplan.getId());
-            if (need.getTimerNeed() != null && need.getTimerNeed().equals(timer + 1)) {
-                plan.setPlanStatus(2L);
+            long timer = need.getTimer() == null ? 0 : need.getTimer();
+            need.setTimer(timer + 1);
+            if (need.getTimerNeed()==null)
+                need.setTimerNeed(0L);
+            if (need.getTimerNeed() != null && need.getTimerNeed()<=timer + 1) {
+                need.setPlanStatus(2L);
             }
-            return toAjax(tTsLjplanService.updateTTsLjplan(plan));
+            return toAjax(tTsLjplanService.updateTTsLjplan(need));
         }
         return AjaxResult.error("当前登录用户非学习用户!");
     }

+ 8 - 7
master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsYsplanController.java

@@ -8,6 +8,7 @@ import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.framework.web.page.TableDataInfo;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.service.ISysUserService;
+import com.ruoyi.project.training.bccnew.domain.TTsFlplan;
 import com.ruoyi.project.training.bccnew.domain.TTsNew;
 import com.ruoyi.project.training.bccnew.domain.TTsYsplan;
 import com.ruoyi.project.training.bccnew.service.ITTsApproveService;
@@ -87,15 +88,15 @@ public class TTsYsplanController extends BaseController {
         TTsNew tTsNew = tTsNewService.selectTTsNewById(tTsYsplan.getNewId());
         SysUser sysUser = sysUserService.selectUserByStaffId(tTsNew.getStaffId());
         if (userId.equals(sysUser.getUserId())) {
-            TTsYsplan plan = new TTsYsplan();
-            plan.setId(tTsYsplan.getId());
-            long timer = tTsYsplan.getTimer() == null ? 0 : tTsYsplan.getTimer();
-            plan.setTimer(timer + 1);
             TTsYsplan need = tTsYsplanService.selectTTsYsplanById(tTsYsplan.getId());
-            if (need.getTimerNeed() != null && need.getTimerNeed().equals(timer + 1)) {
-                plan.setPlanStatus(2L);
+            long timer = need.getTimer() == null ? 0 : need.getTimer();
+            need.setTimer(timer + 1);
+            if (need.getTimerNeed()==null)
+                need.setTimerNeed(0L);
+            if (need.getTimerNeed() != null && need.getTimerNeed()<=timer + 1) {
+                need.setPlanStatus(2L);
             }
-            return toAjax(tTsYsplanService.updateTTsYsplan(plan));
+            return toAjax(tTsYsplanService.updateTTsYsplan(need));
         }
         return AjaxResult.error("当前登录用户非学习用户!");
     }

+ 17 - 28
master/src/main/java/com/ruoyi/project/training/bccnew/service/impl/TTsFirstplanServiceImpl.java

@@ -1,9 +1,9 @@
 package com.ruoyi.project.training.bccnew.service.impl;
 
-import com.ruoyi.project.training.bccnew.domain.*;
+import com.ruoyi.project.training.bccnew.domain.TTsFirstplan;
+import com.ruoyi.project.training.bccnew.domain.TTsNew;
 import com.ruoyi.project.training.bccnew.mapper.TTsFirstplanMapper;
 import com.ruoyi.project.training.bccnew.service.*;
-import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -84,39 +84,28 @@ public class TTsFirstplanServiceImpl implements ITTsFirstplanService {
      */
     @Override
     public int updateTTsFirstplan(TTsFirstplan tTsFirstplan) {
-        if ("".equals(tTsFirstplan.getScore1())) {
+        if ("合格".equals(tTsFirstplan.getScore1())) {
             tTsFirstplan.setPlanStatus(5L);
         }
-        if ("满意".equals(tTsFirstplan.getScore1()) && "好".equals(tTsFirstplan.getScore2())) {
+        if ("不合格".equals(tTsFirstplan.getScore1()) && "合格".equals(tTsFirstplan.getScore2())) {
             tTsFirstplan.setPlanStatus(5L);
         }
-        if ("满意".equals(tTsFirstplan.getScore1()) && "满意".equals(tTsFirstplan.getScore2()) && "好".equals(tTsFirstplan.getScore3())) {
-            tTsFirstplan.setPlanStatus(5L);
-        }
-        if ("满意".equals(tTsFirstplan.getScore1()) && "差".equals(tTsFirstplan.getScore2()) && "好".equals(tTsFirstplan.getScore2())) {
-            tTsFirstplan.setPlanStatus(5L);
-        }
-        if ("差".equals(tTsFirstplan.getScore1()) && "好".equals(tTsFirstplan.getScore2())) {
-            tTsFirstplan.setPlanStatus(5L);
-        }
-        if ("差".equals(tTsFirstplan.getScore1()) && "满意".equals(tTsFirstplan.getScore2())) {
-            tTsFirstplan.setPlanStatus(4L);
-        }
-        if ("差".equals(tTsFirstplan.getScore1()) && "差".equals(tTsFirstplan.getScore2())) {
+        if ("不合格".equals(tTsFirstplan.getScore1()) && "不合格".equals(tTsFirstplan.getScore2())) {
             tTsFirstplan.setPlanStatus(4L);
         }
         tTsFirstplanMapper.updateTTsFirstplan(tTsFirstplan);
-        if (tTsFirstplan.getPlanStatus() == 5) {
-            TTsNew tTsNew = new TTsNew();
-            tTsNew.setPlanStatus(5L);
-            tTsNew.setNewId(tTsFirstplan.getNewId());
-            tTsNewService.updateTTsNew(tTsNew, tTsFirstplan.getUserId(),tTsFirstplan.getNickName());
-        }
-        else if (tTsFirstplan.getPlanStatus() == 4) {
-            TTsNew tTsNew = new TTsNew();
-            tTsNew.setPlanStatus(4L);
-            tTsNew.setNewId(tTsFirstplan.getNewId());
-            tTsNewService.updateTTsNew(tTsNew, tTsFirstplan.getUserId(), tTsFirstplan.getNickName());
+        if (tTsFirstplan.getPlanStatus() != null) {
+            if (tTsFirstplan.getPlanStatus() == 5) {
+                TTsNew tTsNew = new TTsNew();
+                tTsNew.setPlanStatus(5L);
+                tTsNew.setNewId(tTsFirstplan.getNewId());
+                tTsNewService.updateTTsNew(tTsNew, tTsFirstplan.getUserId(), tTsFirstplan.getNickName());
+            } else if (tTsFirstplan.getPlanStatus() == 4) {
+                TTsNew tTsNew = new TTsNew();
+                tTsNew.setPlanStatus(4L);
+                tTsNew.setNewId(tTsFirstplan.getNewId());
+                tTsNewService.updateTTsNew(tTsNew, tTsFirstplan.getUserId(), tTsFirstplan.getNickName());
+            }
         }
         return 1;
     }

+ 10 - 5
master/src/main/java/com/ruoyi/project/training/bccnew/service/impl/TTsNewServiceImpl.java

@@ -129,6 +129,7 @@ public class TTsNewServiceImpl implements ITTsNewService {
                 entity.setTimerNeed(item.getTimerNeed());
                 entity.setTimer(0L);
                 entity.setSortTmpl(item.getSortTmpl());
+                entity.setPlanStatus(0L);
                 tTsLjplanMapper.insertTTsLjplan(entity);
             }
         } else if (tTsNew.getPlanType() == 2) {
@@ -149,6 +150,7 @@ public class TTsNewServiceImpl implements ITTsNewService {
                 entity.setTimerNeed(item.getTimerNeed());
                 entity.setTimer(0L);
                 entity.setSortTmpl(item.getSortTmpl());
+                entity.setPlanStatus(0L);
                 tTsYsplanMapper.insertTTsYsplan(entity);
             }
         } else if (tTsNew.getPlanType() == 3) {
@@ -169,6 +171,7 @@ public class TTsNewServiceImpl implements ITTsNewService {
                 entity.setTimerNeed(item.getTimerNeed());
                 entity.setTimer(0L);
                 entity.setSortTmpl(item.getSortTmpl());
+                entity.setPlanStatus(0L);
                 tTsFlplanMapper.insertTTsFlplan(entity);
             }
         } else if (tTsNew.getPlanType() == 4) {
@@ -189,6 +192,7 @@ public class TTsNewServiceImpl implements ITTsNewService {
                 entity.setTimerNeed(item.getTimerNeed());
                 entity.setTimer(0L);
                 entity.setSortTmpl(item.getSortTmpl());
+                entity.setPlanStatus(0L);
                 tTsFtplanMapper.insertTTsFtplan(entity);
             }
         }
@@ -203,6 +207,7 @@ public class TTsNewServiceImpl implements ITTsNewService {
      */
     @Override
     public int updateTTsNew(TTsNew tTsNew, Long userId, String nickName) {
+        tTsNewMapper.updateTTsNew(tTsNew);
         TTsNew tsNew = tTsNewMapper.selectTTsNewById(tTsNew.getNewId());
         if (tTsNew.getPlanStatus() == 1) {
             TTsFirstplan tTsFirstplan = new TTsFirstplan();
@@ -284,7 +289,7 @@ public class TTsNewServiceImpl implements ITTsNewService {
             TTsFirstplan tTsFirstplan = new TTsFirstplan();
             tTsFirstplan.setNewId(tTsNew.getNewId());
             for (TTsFirstplan tsFirstplan : tTsFirstplanMapper.selectTTsFirstplanListByNewId(tTsFirstplan)) {
-                if (tsFirstplan.getPlanStatus() == null) {
+                if (tsFirstplan.getPlanStatus() == null || tsFirstplan.getPlanStatus() == 0) {
                     tsFirstplan.setPlanStatus(4L);
                     tTsFirstplanMapper.updateTTsFirstplan(tsFirstplan);
                 }
@@ -293,7 +298,7 @@ public class TTsNewServiceImpl implements ITTsNewService {
                 TTsLjplan entity = new TTsLjplan();
                 entity.setNewId(tTsNew.getNewId());
                 for (TTsLjplan item : tTsLjplanMapper.selectTTsLjplanListByNewId(entity)) {
-                    if (item.getPlanStatus() == null) {
+                    if (item.getPlanStatus() == null || item.getPlanStatus() == 0) {
                         item.setPlanStatus(4L);
                         tTsLjplanMapper.updateTTsLjplan(item);
                     }
@@ -302,7 +307,7 @@ public class TTsNewServiceImpl implements ITTsNewService {
                 TTsYsplan entity = new TTsYsplan();
                 entity.setNewId(tTsNew.getNewId());
                 for (TTsYsplan item : tTsYsplanMapper.selectTTsYsplanListByNewId(entity)) {
-                    if (item.getPlanStatus() == null) {
+                    if (item.getPlanStatus() == null || item.getPlanStatus() == 0) {
                         item.setPlanStatus(4L);
                         tTsYsplanMapper.updateTTsYsplan(item);
                     }
@@ -311,7 +316,7 @@ public class TTsNewServiceImpl implements ITTsNewService {
                 TTsFlplan entity = new TTsFlplan();
                 entity.setNewId(tTsNew.getNewId());
                 for (TTsFlplan item : tTsFlplanMapper.selectTTsFlplanListByNewId(entity)) {
-                    if (item.getPlanStatus() == null) {
+                    if (item.getPlanStatus() == null || item.getPlanStatus() == 0) {
                         item.setPlanStatus(4L);
                         tTsFlplanMapper.updateTTsFlplan(item);
                     }
@@ -320,7 +325,7 @@ public class TTsNewServiceImpl implements ITTsNewService {
                 TTsFtplan entity = new TTsFtplan();
                 entity.setNewId(tTsNew.getNewId());
                 for (TTsFtplan item : tTsFtplanMapper.selectTTsFtplanListByNewId(entity)) {
-                    if (item.getPlanStatus() == null) {
+                    if (item.getPlanStatus() == null || item.getPlanStatus() == 0) {
                         item.setPlanStatus(4L);
                         tTsFtplanMapper.updateTTsFtplan(item);
                     }

+ 5 - 17
master/src/main/java/com/ruoyi/project/training/elearn/service/impl/TElPaperServiceImpl.java

@@ -359,28 +359,16 @@ public class TElPaperServiceImpl implements ITElPaperService {
                 for (TTsFirstplan tsFirstplan : tsFirstplanService.selectTTsFirstplanList(tTsFirstplan)) {
                     if (paper.getUserScore() >= 80) {
                         if (StringUtils.isEmpty(tsFirstplan.getScore1())) {
-                            tsFirstplan.setScore1("");
+                            tsFirstplan.setScore1("合格");
                         } else if (StringUtils.isEmpty(tsFirstplan.getScore2())) {
-                            tsFirstplan.setScore2("好");
-                        } else  if (!"差".equals(tsFirstplan.getScore1())) {
-                            tsFirstplan.setScore3("好");
+                            tsFirstplan.setScore2("合格");
                         }
                         tsFirstplan.setPlanStatus(5L);
-                    } else if (paper.getUserScore() >= 60) {
-                        if (StringUtils.isEmpty(tsFirstplan.getScore1())) {
-                            tsFirstplan.setScore1("满意");
-                        } else if (tsFirstplan.getScore1().equals("满意") && StringUtils.isEmpty(tsFirstplan.getScore2())) {
-                            tsFirstplan.setScore2("满意");
-                        } else if (tsFirstplan.getScore1().equals("差") && StringUtils.isEmpty(tsFirstplan.getScore2())) {
-                            tsFirstplan.setScore2("满意");
-                        }
                     } else {
                         if (StringUtils.isEmpty(tsFirstplan.getScore1())) {
-                            tsFirstplan.setScore1("差");
-                        }else if (tsFirstplan.getScore1().equals("满意") && StringUtils.isEmpty(tsFirstplan.getScore2())) {
-                            tsFirstplan.setScore2("差");
-                        } else if (tsFirstplan.getScore1().equals("差") && StringUtils.isEmpty(tsFirstplan.getScore2())) {
-                            tsFirstplan.setScore2("差");
+                            tsFirstplan.setScore1("不合格");
+                        }else if (tsFirstplan.getScore1().equals("不合格") && StringUtils.isEmpty(tsFirstplan.getScore2())) {
+                            tsFirstplan.setScore2("不合格");
                         }
                     }
                     tsFirstplan.setUserId(user.getUserId());

+ 41 - 4
ui/src/views/approve/approveDetail/dsdtTraining-detail.vue

@@ -8,8 +8,12 @@
       <el-descriptions-item label="员工姓名" :label-style="labelStyle">{{ this.dataForm.tTsNew.staffName }}
       </el-descriptions-item>
       <el-descriptions-item label="培训状态" :label-style="labelStyle">
-        <el-tag v-if="dataForm.tTsNew.planStatus == 1" size="small" type="success">已完成</el-tag>
-        <el-tag v-else-if="dataForm.tTsNew.planStatus == 0" size="small" type="info">未完成</el-tag>
+        <el-tag v-if="this.dataForm.tTsNew.planStatus == 2" size="small" type="warning">待考试</el-tag>
+        <el-tag v-if="this.dataForm.tTsNew.planStatus == 3" size="small" type="success">已完成</el-tag>
+        <el-tag v-if="this.dataForm.tTsNew.planStatus == 1" size="small" type="danger">已中止</el-tag>
+        <el-tag v-else-if="this.dataForm.tTsNew.planStatus == 0" size="small" type="info">未完成</el-tag>
+        <el-tag v-else-if="this.dataForm.tTsNew.planStatus == 4" size="small" type="danger">已中止待审批</el-tag>
+        <el-tag v-else-if="this.dataForm.tTsNew.planStatus == 5" size="small" type="success">已完成待审批</el-tag>
       </el-descriptions-item>
       <el-descriptions-item label="开始时间">
         <template>
@@ -108,7 +112,17 @@ export default {
         approverName: null,
         applicantName: null,
         apNo: null,
-        processId: null
+        processId: null,
+        tTsNew:{
+          mentorComments: null,
+          remarks: null,
+          planType: null,
+          mentorStaffName: null,
+          enddate: null,
+          startdate: null,
+          planStatus: null,
+          staffName: null,
+        }
       },
       form: {},
       rules: {},
@@ -120,7 +134,30 @@ export default {
       this.submitDisabled = false;
       this.reset();
       this.devList = [];
-      this.dataForm = {};
+      this.dataForm = {
+        id: null,
+        applicant: null,
+        applicationTime: null,
+        approver: null,
+        approveTime: null,
+        remarks: null,
+        status: 0,
+        delFlag: null,
+        approverName: null,
+        applicantName: null,
+        apNo: null,
+        processId: null,
+        tTsNew:{
+          mentorComments: null,
+          remarks: null,
+          planType: null,
+          mentorStaffName: null,
+          enddate: null,
+          startdate: null,
+          planStatus: null,
+          staffName: null,
+        }
+      };
       this.visible = true;
       this.taskName = taskName;
       this.taskForm.taskId = taskId;

+ 115 - 51
ui/src/views/training/bccnew/firstplan/index.vue

@@ -64,7 +64,8 @@
     <el-table v-loading="loading" :data="firstplanList" @selection-change="handleSelectionChange" :height="clientHeight"
               border>
       <el-table-column type="selection" width="55" align="center"/>
-      <el-table-column label="计划培训日期" align="center" prop="trainingPlanDate" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="计划培训日期" align="center" prop="trainingPlanDate" :show-overflow-tooltip="true"
+                       width="180"/>
       <el-table-column label="课程编号" align="center" prop="courseCode" :show-overflow-tooltip="true" width="180"/>
       <el-table-column label="培训主题" align="center" prop="topic" :show-overflow-tooltip="true" width="180"/>
       <el-table-column label="材料版本" align="center" prop="materialVer" :show-overflow-tooltip="true" width="180"/>
@@ -89,24 +90,48 @@
           <el-tag v-else-if="scope.row.planStatus == 5" size="small" type="success">已完成待审批</el-tag>
         </template>
       </el-table-column>
-      <el-table-column label="第一次成绩" align="center" prop="score1" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="第一次成绩" align="center" prop="score1" :show-overflow-tooltip="true" width="200">
+        <template slot-scope="scope">
+          <div v-if="scope.row.score1 == null">
+            <el-select v-model="scope.row.score1Tmp&&scope.row.planStatus==2" style="width: 130px" placeholder="请选择成绩">
+              <el-option value="合格" label="合格" key="合格"/>
+              <el-option value="不合格" label="不合格" key="不合格"/>
+            </el-select>
+            <el-button type="text" @click="saveScore(scope.row)" class="ml5">保存</el-button>
+          </div>
+          <span v-else>{{ scope.row.score1 }}</span>
+        </template>
+      </el-table-column>
       <el-table-column label="附件" align="center" :show-overflow-tooltip="true" width="80">
         <template slot-scope="scope">
-          <el-button  icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'tsNew-zhuangzhi1')" circle></el-button>
+          <el-button icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'tsNew-zhuangzhi1')"
+                     circle></el-button>
         </template>
       </el-table-column>
-      <el-table-column label="第二次成绩" align="center" prop="score2" :show-overflow-tooltip="true" width="180"/>
-      <el-table-column label="附件" align="center"  :show-overflow-tooltip="true" width="80">
+      <el-table-column label="第二次成绩" align="center" prop="score2" :show-overflow-tooltip="true" width="180">
         <template slot-scope="scope">
-          <el-button  icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'tsNew-zhuangzhi2')" circle></el-button>
+          <div v-if="scope.row.score2 == null&&scope.row.score1 == '不合格'&&scope.row.planStatus==2">
+            <el-select v-model="scope.row.score2Tmp" style="width: 130px" placeholder="请选择成绩">
+              <el-option value="合格" label="合格" key="合格"/>
+              <el-option value="不合格" label="不合格" key="不合格"/>
+            </el-select>
+            <el-button type="text" @click="saveScore(scope.row)" class="ml5">保存</el-button>
+          </div>
+          <span v-else>{{ scope.row.score2 }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="第三次成绩" align="center" prop="score3" :show-overflow-tooltip="true" width="180"/>
-      <el-table-column label="附件" align="center"  :show-overflow-tooltip="true" width="80">
+      <el-table-column label="附件" align="center" :show-overflow-tooltip="true" width="80">
         <template slot-scope="scope">
-          <el-button  icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'tsNew-zhuangzhi3')" circle></el-button>
+          <el-button icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'tsNew-zhuangzhi2')"
+                     circle></el-button>
         </template>
       </el-table-column>
+      <!--      <el-table-column label="第三次成绩" align="center" prop="score3" :show-overflow-tooltip="true" width="180"/>-->
+      <!--      <el-table-column label="附件" align="center"  :show-overflow-tooltip="true" width="80">-->
+      <!--        <template slot-scope="scope">-->
+      <!--          <el-button  icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'tsNew-zhuangzhi3')" circle></el-button>-->
+      <!--        </template>-->
+      <!--      </el-table-column>-->
       <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true" width="180"/>
       <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width" width="230">
         <template slot-scope="scope">
@@ -165,15 +190,15 @@
         <el-form-item label="材料版本">
           <el-input v-model="form.materialVer" placeholder="请输入材料版本"/>
         </el-form-item>
-<!--        <el-form-item label="培训天" prop="courseDay">-->
-<!--          <el-input v-model="form.courseDay" placeholder="请输入培训天"/>-->
-<!--        </el-form-item>-->
+        <!--        <el-form-item label="培训天" prop="courseDay">-->
+        <!--          <el-input v-model="form.courseDay" placeholder="请输入培训天"/>-->
+        <!--        </el-form-item>-->
         <el-form-item label="培训时长h" prop="courseHour">
           <el-input-number v-model="form.courseHour" placeholder="请输入培训时长h"/>
         </el-form-item>
-<!--        <el-form-item label="培训类型" prop="courseType">-->
-<!--          <el-input v-model="form.courseType" placeholder="请输入培训类型"/>-->
-<!--        </el-form-item>-->
+        <!--        <el-form-item label="培训类型" prop="courseType">-->
+        <!--          <el-input v-model="form.courseType" placeholder="请输入培训类型"/>-->
+        <!--        </el-form-item>-->
         <el-form-item label="讲师" prop="trainer">
           <el-input v-model="form.trainer" placeholder="请输入讲师"/>
         </el-form-item>
@@ -202,10 +227,10 @@
           </el-select>
         </el-form-item>
         <el-form-item label="培训排序" prop="sortTmpl">
-          <el-input-number v-model="form.sortTmpl" placeholder="请输入培训排序" />
+          <el-input-number v-model="form.sortTmpl" placeholder="请输入培训排序"/>
         </el-form-item>
         <el-form-item label="培训考试" prop="examId">
-          <el-select v-model="form.examId" filterable  :placeholder="$t('请选择') + $t('培训考试')">
+          <el-select v-model="form.examId" filterable :placeholder="$t('请选择') + $t('培训考试')">
             <el-option
               v-for="dict in examOptions"
               :key="dict.examId"
@@ -214,15 +239,15 @@
             </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="第一次成绩" prop="score1">
-          <el-input v-model="form.score1" placeholder="请输入第一次成绩"/>
-        </el-form-item>
-        <el-form-item label="第二次成绩" prop="score2">
-          <el-input v-model="form.score2" placeholder="请输入第二次成绩"/>
-        </el-form-item>
-        <el-form-item label="第三次成绩" prop="score3">
-          <el-input v-model="form.score3" placeholder="请输入第三次成绩"/>
-        </el-form-item>
+        <!--        <el-form-item label="第一次成绩" prop="score1">-->
+        <!--          <el-input v-model="form.score1" placeholder="请输入第一次成绩"/>-->
+        <!--        </el-form-item>-->
+        <!--        <el-form-item label="第二次成绩" prop="score2">-->
+        <!--          <el-input v-model="form.score2" placeholder="请输入第二次成绩"/>-->
+        <!--        </el-form-item>-->
+        <!--        <el-form-item label="第三次成绩" prop="score3">-->
+        <!--          <el-input v-model="form.score3" placeholder="请输入第三次成绩"/>-->
+        <!--        </el-form-item>-->
         <el-form-item label="备注" prop="remarks">
           <el-input v-model="form.remarks" placeholder="请输入备注"/>
         </el-form-item>
@@ -305,7 +330,7 @@
       </el-button>
     </el-dialog>
 
-    <el-dialog :close-on-click-modal="false"  element-loading-background="rgba(0,0,0,0.2)"
+    <el-dialog :close-on-click-modal="false" element-loading-background="rgba(0,0,0,0.2)"
                v-dialogDrag :title="pdf.title"
                :visible.sync="pdf.open" width="1300px" height="800px" :center="true" append-to-body
                @close="handleClose">
@@ -317,7 +342,8 @@
 
 
     <!-- 报告附件对话框 -->
-    <el-dialog  :close-on-click-modal="false" v-dialogDrag :title="doc.title" :visible.sync="doc.open" width="1000px" append-to-body >
+    <el-dialog :close-on-click-modal="false" v-dialogDrag :title="doc.title" :visible.sync="doc.open" width="1000px"
+               append-to-body>
       <el-upload
         ref="doc"
         :limit="50"
@@ -338,14 +364,16 @@
       <el-table :data="doc.commonfileList" border>
         <el-table-column :label="$t('文件名')" align="center" prop="fileName" :show-overflow-tooltip="true">
           <template slot-scope="scope">
-            <a  class="link-type"  @click="handleDownload(scope.row)">
+            <a class="link-type" @click="handleDownload(scope.row)">
               <span>{{ scope.row.fileName }}</span>
             </a>
           </template>
         </el-table-column>
-        <el-table-column :label="$t('大小(Kb)')" align="center" prop="fileSize" :show-overflow-tooltip="true" width="80" />
+        <el-table-column :label="$t('大小(Kb)')" align="center" prop="fileSize" :show-overflow-tooltip="true"
+                         width="80"/>
         <el-table-column :label="$t('上传人')" align="center" prop="creator" :show-overflow-tooltip="true" width="120"/>
-        <el-table-column :label="$t('上传日期')" align="center" prop="createdate" :show-overflow-tooltip="true" width="120">
+        <el-table-column :label="$t('上传日期')" align="center" prop="createdate" :show-overflow-tooltip="true"
+                         width="120">
           <template slot-scope="scope">
             <span>{{ parseTime(scope.row.createdate, '{y}-{m}-{d}') }}</span>
           </template>
@@ -358,29 +386,30 @@
               type="text"
               icon="el-icon-view"
               @click="handleSee(scope.row)"
-            >{{ $t('预览') }}</el-button>
-            <el-button v-hasPermi="['training:trainingrecords:file']"  type="text" size="small" v-if="scope.row.isEdit" @click="save(scope.row)">保存</el-button>
-            <el-button type="text" size="small" v-if="scope.row.isEdit" @click="cancelFile(scope.row, scope.$index)">取消</el-button>
-            <!--            <el-button v-hasPermi="['training:trainingrecords:file']" v-if="!scope.row.isEdit" @click="edit(scope.row)" icon="el-icon-edit" type="text" size="mini">编辑</el-button>-->
+            >{{ $t('预览') }}
+            </el-button>
             <el-button
               size="mini"
               type="text"
               icon="el-icon-download"
               @click="handleDownload(scope.row)"
-            >{{ $t('下载') }}</el-button>
+            >{{ $t('下载') }}
+            </el-button>
             <el-button
               size="mini"
               type="text"
               icon="el-icon-delete"
               @click="handleDeleteDoc(scope.row)"
-              v-hasPermi="['training:trainingrecords:file']"
-            >{{ $t('删除') }}</el-button>
+            >{{ $t('删除') }}
+            </el-button>
           </template>
         </el-table-column>
       </el-table>
-      <el-dialog  :close-on-click-modal="false" v-dialogDrag :title="pdf.title" :visible.sync="pdf.open" width="1300px" append-to-body>
+      <el-dialog :close-on-click-modal="false" v-dialogDrag :title="pdf.title" :visible.sync="pdf.open" width="1300px"
+                 append-to-body>
         <div style="margin-top: -60px;float: right;margin-right: 40px;">
-          <el-button size="mini" type="text" @click="openPdf">{{$t('新页面打开PDF')}}</el-button></div>
+          <el-button size="mini" type="text" @click="openPdf">{{ $t('新页面打开PDF') }}</el-button>
+        </div>
         <div style="margin-top: -30px">
           <iframe :src="pdf.pdfUrl" frameborder="0" width="100%" height="700px"></iframe>
         </div>
@@ -411,7 +440,7 @@ import {getToken} from "@/utils/auth";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 import {listExam} from "@/api/training/elearn/exam";
-import {allFileList} from "@/api/common/commonfile";
+import {allFileList, delCommonfile} from "@/api/common/commonfile";
 
 var timer = null;
 export default {
@@ -456,7 +485,7 @@ export default {
         // 报告附件上传位置编号
         ids: 0,
         // 设置上传的请求头部
-        headers: { Authorization: "Bearer " + getToken() },
+        headers: {Authorization: "Bearer " + getToken()},
         // 上传的地址
         url: process.env.VUE_APP_BASE_API + "/common/commonfile/uploadFile",
         commonfileList: null,
@@ -541,7 +570,7 @@ export default {
     }
   },
   created() {
-    listExam({ pageNum: 1, pageSize: 1000,  examType: 2 }).then(response => {
+    listExam({pageNum: 1, pageSize: 1000, examType: 2}).then(response => {
       this.examOptions = response.rows;
     });
     //设置表格高度对应屏幕高度
@@ -555,17 +584,17 @@ export default {
     });
   },
   methods: {
-    handleSee (row){
+    handleSee(row) {
       // window.open(process.env.VUE_APP_BASE_API +'/pdf/web/viewer.html?file=' + process.env.VUE_APP_BASE_API + row.fileUrl);//path是文件的全路径地址
-      this.pdf.open =true
+      this.pdf.open = true
       this.pdf.title = row.fileName
-      this.pdf.pdfUrl = process.env.VUE_APP_BASE_API +'/pdf/web/viewer.html?file=' + process.env.VUE_APP_BASE_API + row.fileUrl
+      this.pdf.pdfUrl = process.env.VUE_APP_BASE_API + '/pdf/web/viewer.html?file=' + process.env.VUE_APP_BASE_API + row.fileUrl
     },
-    handleDoc(row , fileType) {
+    handleDoc(row, fileType) {
       this.doc.pType = fileType
       this.doc.queryParams.pType = fileType
       this.doc.id = row.id;
-      this.doc.title = this.$t('附件') ;
+      this.doc.title = this.$t('附件');
       this.doc.open = true;
       this.doc.queryParams.pId = row.id
       this.doc.pId = row.id
@@ -586,7 +615,7 @@ export default {
       this.pdf.pdfUrl = ""
       this.ppt = true
       //如果是PDF等直接可以打开的就不调接口,否则调用接口
-      if (row.fileName!=null && row.fileName.endsWith('pdf')) {
+      if (row.fileName != null && row.fileName.endsWith('pdf')) {
         this.pdf.pdfUrl = process.env.VUE_APP_BASE_API + '/pdf/web/viewer.html?file=' + process.env.VUE_APP_BASE_API + row.fileUrl
         this.loadingFlash = false
       }
@@ -690,6 +719,23 @@ export default {
         this.title = "修改进组培训";
       });
     },
+    saveScore(row) {
+      this.$confirm('成绩保存后不可修改!请确认成绩为' + ((row.score1Tmp ? row.score1Tmp : row.score2Tmp)==undefined?"":(row.score1Tmp ? row.score1Tmp : row.score2Tmp)), "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return updateFirstplan({
+          id: row.id,
+          score1: row.score1Tmp ? row.score1Tmp : row.score1,
+          score2: row.score2Tmp,
+          newId: row.newId
+        });
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("修改成功");
+      })
+    },
     /** 提交按钮 */
     submitForm() {
       this.$refs["form"].validate(valid => {
@@ -763,7 +809,8 @@ export default {
     // 提交上传文件
     submitFileForm() {
       this.$refs.upload.submit();
-    },getFileList (){
+    },
+    getFileList() {
       allFileList(this.doc.queryParams).then(response => {
         response.forEach(element => {
           element["isEdit"] = false
@@ -782,7 +829,7 @@ export default {
     //附件上传成功处理
     handleFileDocSuccess(response, file, fileList) {
       this.doc.isUploading = false;
-      this.$alert(response.msg, this.$t('导入结果'), { dangerouslyUseHTMLString: true });
+      this.$alert(response.msg, this.$t('导入结果'), {dangerouslyUseHTMLString: true});
       this.getFileList()
     },
     // 文件下载处理
@@ -796,6 +843,23 @@ export default {
       a.setAttribute('href', process.env.VUE_APP_BASE_API + url)
       a.click()
     },
+    /** 删除按钮操作 */
+    handleDeleteDoc(row) {
+      const ids = row.id || this.ids;
+      this.$confirm(this.$t('是否确认删除?'), this.$t('警告'), {
+        confirmButtonText: this.$t('确定'),
+        cancelButtonText: this.$t('取消'),
+        type: "warning"
+      }).then(function () {
+        return delCommonfile(ids);
+      }).then(() => {
+        this.getFileList()
+        this.msgSuccess(this.$t('删除成功'));
+      })
+    },
+    openPdf() {
+      window.open(this.pdf.pdfUrl);//path是文件的全路径地址
+    },
   }
 };
 </script>

+ 58 - 20
ui/src/views/training/bccnew/firstplan/index_student.vue

@@ -24,7 +24,9 @@
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
       </el-form-item>
     </el-form>
-
+    <el-row>
+    <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
     <el-table v-loading="loading" :data="firstplanList" @selection-change="handleSelectionChange" :height="clientHeight"
               border>
       <el-table-column type="selection" width="55" align="center"/>
@@ -65,12 +67,12 @@
           <el-button  icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'tsNew-zhuangzhi2')" circle></el-button>
         </template>
       </el-table-column>
-      <el-table-column label="第三次成绩" align="center" prop="score3" :show-overflow-tooltip="true" width="180"/>
-      <el-table-column label="附件" align="center"  :show-overflow-tooltip="true" width="80">
-        <template slot-scope="scope">
-          <el-button  icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'tsNew-zhuangzhi3')" circle></el-button>
-        </template>
-      </el-table-column>
+<!--      <el-table-column label="第三次成绩" align="center" prop="score3" :show-overflow-tooltip="true" width="180"/>-->
+<!--      <el-table-column label="附件" align="center"  :show-overflow-tooltip="true" width="80">-->
+<!--        <template slot-scope="scope">-->
+<!--          <el-button  icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'tsNew-zhuangzhi3')" circle></el-button>-->
+<!--        </template>-->
+<!--      </el-table-column>-->
       <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true" width="180"/>
       <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width"  width="230">
         <template slot-scope="scope">
@@ -242,6 +244,23 @@
 
     <!-- 报告附件对话框 -->
     <el-dialog  :close-on-click-modal="false" v-dialogDrag :title="doc.title" :visible.sync="doc.open" width="1000px" append-to-body >
+      <el-upload
+        ref="doc"
+        :limit="50"
+        :headers="doc.headers"
+        :action="doc.url + '?pType=' + doc.pType + '&pId=' + doc.pId"
+        :disabled="doc.isUploading"
+        :on-progress="handleFileDocProgress"
+        :on-success="handleFileDocSuccess"
+        :auto-upload="true"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">
+          {{ $t('将文件拖到此处,或') }}
+          <em>{{ $t('点击上传') }}</em>
+        </div>
+      </el-upload>
       <el-table :data="doc.commonfileList" border>
         <el-table-column :label="$t('文件名')" align="center" prop="fileName" :show-overflow-tooltip="true">
           <template slot-scope="scope">
@@ -308,6 +327,7 @@ import {treeselect} from "@/api/system/dept";
 import {getToken} from "@/utils/auth";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import {allFileList, delCommonfile} from "@/api/common/commonfile";
 
 var timer = null;
 export default {
@@ -488,6 +508,9 @@ export default {
       let _this = this;
       timer = window.setInterval(function () {
         updateFirstLearnTime(row).then(res => {
+          getFirstplan(row.id).then(res => {
+            this.file.data.timer = res.data.timer
+          })
         })
       }, 60000);
     },
@@ -497,18 +520,19 @@ export default {
       return parseInt((this.file.data.timer / this.file.data.timerNeed * 100).toFixed(2))
     },
     openFileDialog(row) {
-        for (let i=0;i<=this.firstplanList;i++) {
-          if (i===0){
-            continue;
-          }
-          let item = this.dsdtList[i];
-          if (item.id===row.id){
-            if (this.firstplanList[i-1].planStatus!==3){
-              this.$alert('您必须完成上一项考试才可学习当前资料!', "注意", { dangerouslyUseHTMLString: true });
-              return;
-            }
+      for (let i=0;i<this.firstplanList.length;i++) {
+        if (i===0){
+          continue;
+        }
+        let item = this.firstplanList[i];
+        console.log(item.id)
+        if (item.id===row.id){
+          if (this.firstplanList[i-1].planStatus!==5){
+            this.$alert('您必须完成上一项考试才可学习当前资料!', "注意", { dangerouslyUseHTMLString: true });
+            return;
           }
         }
+      }
       this.file.open = true;
       this.file.data = row
       console.log(row)
@@ -668,9 +692,6 @@ export default {
       this.getList();
     },
     // 提交上传文件
-    submitFileForm() {
-      this.$refs.upload.submit();
-    },// 提交上传文件
     submitFileForm() {
       this.$refs.upload.submit();
     },getFileList (){
@@ -706,6 +727,23 @@ export default {
       a.setAttribute('href', process.env.VUE_APP_BASE_API + url)
       a.click()
     },
+    /** 删除按钮操作 */
+    handleDeleteDoc(row) {
+      const ids = row.id || this.ids;
+      this.$confirm(this.$t('是否确认删除?'), this.$t('警告'), {
+        confirmButtonText: this.$t('确定'),
+        cancelButtonText: this.$t('取消'),
+        type: "warning"
+      }).then(function() {
+        return delCommonfile(ids);
+      }).then(() => {
+        this.getFileList()
+        this.msgSuccess(this.$t('删除成功'));
+      })
+    },
+    openPdf(){
+      window.open(this.pdf.pdfUrl);//path是文件的全路径地址
+    },
   }
 };
 </script>

+ 10 - 3
ui/src/views/training/bccnew/tsnew/index.vue

@@ -107,10 +107,14 @@
       <el-table-column type="selection" width="55" align="center" />
       <!--      <el-table-column label="培训员工编号" align="center" prop="staffId" :show-overflow-tooltip="true"/>-->
       <el-table-column label="新员工" align="center" prop="staffName" width="100" />
-      <el-table-column label="培训状态" align="center" prop="planStatus" width="100" :formatter="planStatusFormat" >
+      <el-table-column label="培训状态" align="center" prop="planStatus" width="120" :formatter="planStatusFormat" >
         <template slot-scope="scope">
-          <el-tag v-if="scope.row.planStatus == 1" size="small" type="success">已完成</el-tag>
+          <el-tag v-if="scope.row.planStatus == 2" size="small" type="warning">待考试</el-tag>
+          <el-tag v-if="scope.row.planStatus == 3" size="small" type="success">已完成</el-tag>
+          <el-tag v-if="scope.row.planStatus == 1" size="small" type="danger">已中止</el-tag>
           <el-tag v-else-if="scope.row.planStatus == 0" size="small" type="info">未完成</el-tag>
+          <el-tag v-else-if="scope.row.planStatus == 4" size="small" type="danger">已中止待审批</el-tag>
+          <el-tag v-else-if="scope.row.planStatus == 5" size="small" type="success">已完成待审批</el-tag>
         </template>
       </el-table-column>
       <el-table-column label="进度" align="center" width="160">
@@ -233,7 +237,7 @@
     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="培训员工" prop="mentorStaffId">
-          <el-select v-model="form.staffId" filterable :placeholder="$t('请选择')+$t('培训员工')">
+          <el-select v-model="form.staffId" filterable :placeholder="$t('请选择')+$t('培训员工')" :disabled="isEdit">
             <el-option
               v-for="item in userOption"
               :key="item.staffid"
@@ -532,6 +536,7 @@ export default {
         enddate: null,
         planType: null,
       },
+      isEdit:false,
       // 表单参数
       form: {},
       // 表单校验
@@ -661,12 +666,14 @@ export default {
     },
     /** 新增按钮操作 */
     handleAdd() {
+      this.isEdit=false;
       this.reset();
       this.open = true;
       this.title = "添加新员工培训";
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
+      this.isEdit=true;
       this.reset();
       const newId = row.newId || this.ids
       getTsnew(newId).then(response => {

+ 6 - 2
ui/src/views/training/bccnew/tsnew/index_s.vue

@@ -58,10 +58,14 @@
       <el-table-column type="selection" width="55" align="center"/>
       <!--      <el-table-column label="培训员工编号" align="center" prop="staffId" :show-overflow-tooltip="true"/>-->
       <el-table-column label="新员工" align="center" prop="staffName" width="100"/>
-      <el-table-column label="培训状态" align="center" prop="planStatus" width="100" :formatter="planStatusFormat">
+      <el-table-column label="培训状态" align="center" prop="planStatus" width="120" :formatter="planStatusFormat">
         <template slot-scope="scope">
-          <el-tag v-if="scope.row.planStatus == 1" size="small" type="success">已完成</el-tag>
+          <el-tag v-if="scope.row.planStatus == 2" size="small" type="warning">待考试</el-tag>
+          <el-tag v-if="scope.row.planStatus == 3" size="small" type="success">已完成</el-tag>
+          <el-tag v-if="scope.row.planStatus == 1" size="small" type="danger">已中止</el-tag>
           <el-tag v-else-if="scope.row.planStatus == 0" size="small" type="info">未完成</el-tag>
+          <el-tag v-else-if="scope.row.planStatus == 4" size="small" type="danger">已中止待审批</el-tag>
+          <el-tag v-else-if="scope.row.planStatus == 5" size="small" type="success">已完成待审批</el-tag>
         </template>
       </el-table-column>
       <el-table-column label="进度" align="center" width="160">

+ 179 - 51
ui/src/views/training/bccnew/tsnew/score.vue

@@ -60,22 +60,63 @@
           <el-tag v-else-if="scope.row.planStatus == 5" size="small" type="success">已完成待审批</el-tag>
         </template>
       </el-table-column>
-      <el-table-column label="第一次成绩" align="center" prop="score1" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="第一次成绩" align="center" prop="score1" :show-overflow-tooltip="true" width="180">
+        <template slot-scope="scope">
+          <div v-if="scope.row.score1 == null&&scope.row.planStatus==2">
+            <el-select v-model="scope.row.score1Tmp" style="width: 130px" placeholder="请选择成绩">
+              <el-option value="好" label="好" key="好"/>
+              <el-option value="满意" label="满意" key="满意"/>
+              <el-option value="差" label="差" key="差"/>
+            </el-select>
+            <el-button type="text" @click="saveScore(scope.row)" class="ml5">保存</el-button>
+          </div>
+          <span v-else>{{ scope.row.score1 }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="附件" align="center" :show-overflow-tooltip="true" width="80">
+        <template slot-scope="scope">
+          <el-button icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'tsNew-score1')"
+                     circle></el-button>
+        </template>
+      </el-table-column>
+      <el-table-column label="第二次成绩" align="center" prop="score2" :show-overflow-tooltip="true" width="180">
+        <template slot-scope="scope">
+          <div
+            v-if="scope.row.score2 == null&&scope.row.planStatus==2&&(scope.row.score1 == '满意'||scope.row.score1 == '差')">
+            <el-select v-model="scope.row.score2Tmp" style="width: 130px" placeholder="请选择成绩">
+              <el-option value="好" label="好" key="好"/>
+              <el-option value="满意" label="满意" key="满意"/>
+              <el-option value="差" label="差" key="差"/>
+            </el-select>
+            <el-button type="text" @click="saveScore(scope.row)" class="ml5">保存</el-button>
+          </div>
+          <span v-else>{{ scope.row.score2 }}</span>
+        </template>
+      </el-table-column>
       <el-table-column label="附件" align="center" :show-overflow-tooltip="true" width="80">
         <template slot-scope="scope">
-          <el-button  icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'tsNew-score1')" circle></el-button>
+          <el-button icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'tsNew-score2')"
+                     circle></el-button>
         </template>
       </el-table-column>
-      <el-table-column label="第二次成绩" align="center" prop="score2" :show-overflow-tooltip="true" width="180"/>
-      <el-table-column label="附件" align="center"  :show-overflow-tooltip="true" width="80">
+      <el-table-column label="第三次成绩" align="center" prop="score3" :show-overflow-tooltip="true" width="180">
         <template slot-scope="scope">
-          <el-button  icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'tsNew-score2')" circle></el-button>
+          <div
+            v-if="scope.row.score3 == null&&scope.row.planStatus==2&&((scope.row.score1 == '满意'||scope.row.score1 == '差')&&(scope.row.score2 == '满意'||scope.row.score2 == '差'))">
+            <el-select v-model="scope.row.score3Tmp" style="width: 130px" placeholder="请选择成绩">
+              <el-option value="好" label="好" key="好"/>
+              <el-option value="满意" label="满意" key="满意"/>
+              <el-option value="差" label="差" key="差"/>
+            </el-select>
+            <el-button type="text" @click="saveScore(scope.row)" class="ml5">保存</el-button>
+          </div>
+          <span v-else>{{ scope.row.score3 }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="第三次成绩" align="center" prop="score3" :show-overflow-tooltip="true" width="180"/>
-      <el-table-column label="附件" align="center"  :show-overflow-tooltip="true" width="80">
+      <el-table-column label="附件" align="center" :show-overflow-tooltip="true" width="80">
         <template slot-scope="scope">
-          <el-button  icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'tsNew-score3')" circle></el-button>
+          <el-button icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'tsNew-score3')"
+                     circle></el-button>
         </template>
       </el-table-column>
       <el-table-column label="计划培训开始时间" prop="planStartData" width="180" align="center">
@@ -198,7 +239,7 @@
           </el-date-picker>
         </el-form-item>
         <el-form-item label="培训排序" prop="sortTmpl">
-          <el-input-number v-model="form.sortTmpl" placeholder="请输入培训排序" />
+          <el-input-number v-model="form.sortTmpl" placeholder="请输入培训排序"/>
         </el-form-item>
         <el-form-item label="备注" prop="remarks">
           <el-input v-model="form.remarks" placeholder="请输入备注"/>
@@ -251,7 +292,7 @@
       </el-button>
     </el-dialog>
 
-    <el-dialog :close-on-click-modal="false"  element-loading-background="rgba(0,0,0,0.2)"
+    <el-dialog :close-on-click-modal="false" element-loading-background="rgba(0,0,0,0.2)"
                v-dialogDrag :title="pdf.title"
                :visible.sync="pdf.open" width="1300px" height="800px" :center="true" append-to-body
                @close="handleClose">
@@ -263,17 +304,18 @@
 
 
     <!-- 报告附件对话框 -->
-    <el-dialog  :close-on-click-modal="false" v-dialogDrag :title="doc.title" :visible.sync="doc.open" width="1000px" append-to-body >
+    <el-dialog :close-on-click-modal="false" v-dialogDrag :title="doc.title" :visible.sync="doc.open" width="1000px"
+               append-to-body>
       <el-upload
-                 ref="doc"
-                 :limit="50"
-                 :headers="doc.headers"
-                 :action="doc.url + '?pType=' + doc.pType + '&pId=' + doc.pId"
-                 :disabled="doc.isUploading"
-                 :on-progress="handleFileDocProgress"
-                 :on-success="handleFileDocSuccess"
-                 :auto-upload="true"
-                 drag
+        ref="doc"
+        :limit="50"
+        :headers="doc.headers"
+        :action="doc.url + '?pType=' + doc.pType + '&pId=' + doc.pId"
+        :disabled="doc.isUploading"
+        :on-progress="handleFileDocProgress"
+        :on-success="handleFileDocSuccess"
+        :auto-upload="true"
+        drag
       >
         <i class="el-icon-upload"></i>
         <div class="el-upload__text">
@@ -284,14 +326,16 @@
       <el-table :data="doc.commonfileList" border>
         <el-table-column :label="$t('文件名')" align="center" prop="fileName" :show-overflow-tooltip="true">
           <template slot-scope="scope">
-            <a  class="link-type"  @click="handleDownload(scope.row)">
+            <a class="link-type" @click="handleDownload(scope.row)">
               <span>{{ scope.row.fileName }}</span>
             </a>
           </template>
         </el-table-column>
-        <el-table-column :label="$t('大小(Kb)')" align="center" prop="fileSize" :show-overflow-tooltip="true" width="80" />
+        <el-table-column :label="$t('大小(Kb)')" align="center" prop="fileSize" :show-overflow-tooltip="true"
+                         width="80"/>
         <el-table-column :label="$t('上传人')" align="center" prop="creator" :show-overflow-tooltip="true" width="120"/>
-        <el-table-column :label="$t('上传日期')" align="center" prop="createdate" :show-overflow-tooltip="true" width="120">
+        <el-table-column :label="$t('上传日期')" align="center" prop="createdate" :show-overflow-tooltip="true"
+                         width="120">
           <template slot-scope="scope">
             <span>{{ parseTime(scope.row.createdate, '{y}-{m}-{d}') }}</span>
           </template>
@@ -316,29 +360,38 @@
               type="text"
               icon="el-icon-view"
               @click="handleSee(scope.row)"
-            >{{ $t('预览') }}</el-button>
-            <el-button v-hasPermi="['training:trainingrecords:file']"  type="text" size="small" v-if="scope.row.isEdit" @click="save(scope.row)">保存</el-button>
-            <el-button type="text" size="small" v-if="scope.row.isEdit" @click="cancelFile(scope.row, scope.$index)">取消</el-button>
+            >{{ $t('预览') }}
+            </el-button>
+            <el-button v-hasPermi="['training:trainingrecords:file']" type="text" size="small" v-if="scope.row.isEdit"
+                       @click="save(scope.row)">保存
+            </el-button>
+            <el-button type="text" size="small" v-if="scope.row.isEdit" @click="cancelFile(scope.row, scope.$index)">
+              取消
+            </el-button>
             <!--            <el-button v-hasPermi="['training:trainingrecords:file']" v-if="!scope.row.isEdit" @click="edit(scope.row)" icon="el-icon-edit" type="text" size="mini">编辑</el-button>-->
             <el-button
               size="mini"
               type="text"
               icon="el-icon-download"
               @click="handleDownload(scope.row)"
-            >{{ $t('下载') }}</el-button>
+            >{{ $t('下载') }}
+            </el-button>
             <el-button
               size="mini"
               type="text"
               icon="el-icon-delete"
               @click="handleDeleteDoc(scope.row)"
               v-hasPermi="['training:trainingrecords:file']"
-            >{{ $t('删除') }}</el-button>
+            >{{ $t('删除') }}
+            </el-button>
           </template>
         </el-table-column>
       </el-table>
-      <el-dialog  :close-on-click-modal="false" v-dialogDrag :title="pdf.title" :visible.sync="pdf.open" width="1300px" append-to-body>
+      <el-dialog :close-on-click-modal="false" v-dialogDrag :title="pdf.title" :visible.sync="pdf.open" width="1300px"
+                 append-to-body>
         <div style="margin-top: -60px;float: right;margin-right: 40px;">
-          <el-button size="mini" type="text" @click="openPdf">{{$t('新页面打开PDF')}}</el-button></div>
+          <el-button size="mini" type="text" @click="openPdf">{{ $t('新页面打开PDF') }}</el-button>
+        </div>
         <div style="margin-top: -30px">
           <iframe :src="pdf.pdfUrl" frameborder="0" width="100%" height="700px"></iframe>
         </div>
@@ -365,21 +418,24 @@ import {
   addYsplandsdt,
   delYsplandsdt,
   getYsplandsdt,
-  listYsplandsdt, updateYsLearnTime,
+  listYsplandsdt,
+  updateYsLearnTime,
   updateYsplandsdt
 } from "@/api/training/bccnew/ysplandsdt";
 import {
   addFlplandsdt,
   delFlplandsdt,
   getFlplandsdt,
-  listFlplandsdt, updateFlLearnTime,
+  listFlplandsdt,
+  updateFlLearnTime,
   updateFlplandsdt
 } from "@/api/training/bccnew/flplandsdt";
 import {
   addFtplandsdt,
   delFtplandsdt,
   getFtplandsdt,
-  listFtplandsdt, updateFtLearnTime,
+  listFtplandsdt,
+  updateFtLearnTime,
   updateFtplandsdt
 } from "@/api/training/bccnew/ftplandsdt";
 import {treeselect} from "@/api/system/dept";
@@ -389,7 +445,7 @@ import {allFileList, delCommonfile} from "@/api/common/commonfile";
 
 var timer = null;
 export default {
-  name:"score",
+  name: "score",
   props: {
     newId: {},
     planType: {}
@@ -416,7 +472,7 @@ export default {
         // 报告附件上传位置编号
         ids: 0,
         // 设置上传的请求头部
-        headers: { Authorization: "Bearer " + getToken() },
+        headers: {Authorization: "Bearer " + getToken()},
         // 上传的地址
         url: process.env.VUE_APP_BASE_API + "/common/commonfile/uploadFile",
         commonfileList: null,
@@ -428,7 +484,7 @@ export default {
         pId: null,
         form: {}
       },
-      pdf : {
+      pdf: {
         title: '',
         pdfUrl: '',
         numPages: null,
@@ -488,6 +544,78 @@ export default {
     });
   },
   methods: {
+    saveScore(row) {
+
+      if (this.planType === 1) {
+        this.$confirm('成绩保存后不可修改!请确认成绩为' + ((row.score1Tmp ? row.score1Tmp : row.score2Tmp ? row.score2Tmp : row.score3Tmp) === undefined ? "" : (row.score1Tmp ? row.score1Tmp : row.score2Tmp ? row.score2Tmp : row.score3Tmp)), "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function () {
+          return updateLjplandsdt({
+            id: row.id,
+            score1: row.score1Tmp ? row.score1Tmp : row.score1,
+            score2: row.score2Tmp ? row.score2Tmp : row.score2,
+            score3: row.score3Tmp,
+            newId: row.newId
+          });
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("修改成功");
+        })
+      } else if (this.planType === 2) {
+        this.$confirm('成绩保存后不可修改!请确认成绩为' + ((row.score1Tmp ? row.score1Tmp : row.score2Tmp ? row.score2Tmp : row.score3Tmp) === undefined ? "" : (row.score1Tmp ? row.score1Tmp : row.score2Tmp ? row.score2Tmp : row.score3Tmp)), "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function () {
+          return updateYsplandsdt({
+            id: row.id,
+            score1: row.score1Tmp ? row.score1Tmp : row.score1,
+            score2: row.score2Tmp ? row.score2Tmp : row.score2,
+            score3: row.score3Tmp,
+            newId: row.newId
+          });
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("修改成功");
+        })
+      } else if (this.planType === 3) {
+        this.$confirm('成绩保存后不可修改!请确认成绩为' + ((row.score1Tmp ? row.score1Tmp : row.score2Tmp ? row.score2Tmp : row.score3Tmp) === undefined ? "" : (row.score1Tmp ? row.score1Tmp : row.score2Tmp ? row.score2Tmp : row.score3Tmp)), "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function () {
+          return updateFlplandsdt({
+            id: row.id,
+            score1: row.score1Tmp ? row.score1Tmp : row.score1,
+            score2: row.score2Tmp ? row.score2Tmp : row.score2,
+            score3: row.score3Tmp,
+            newId: row.newId
+          });
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("修改成功");
+        })
+      } else if (this.planType === 4) {
+        this.$confirm('成绩保存后不可修改!请确认成绩为' + ((row.score1Tmp ? row.score1Tmp : row.score2Tmp ? row.score2Tmp : row.score3Tmp) === undefined ? "" : (row.score1Tmp ? row.score1Tmp : row.score2Tmp ? row.score2Tmp : row.score3Tmp)), "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function () {
+          return updateFtplandsdt({
+            id: row.id,
+            score1: row.score1Tmp ? row.score1Tmp : row.score1,
+            score2: row.score2Tmp ? row.score2Tmp : row.score2,
+            score3: row.score3Tmp,
+            newId: row.newId
+          });
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("修改成功");
+        })
+      }
+    },
     // 文件上传中处理
     handleFileUploadProgress(event, file, fileList) {
       this.upload.isUploading = true;
@@ -497,7 +625,7 @@ export default {
       this.upload.open = false;
       this.upload.isUploading = false;
       this.$refs.upload.clearFiles();
-      this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
+      this.$alert(response.msg, "导入结果", {dangerouslyUseHTMLString: true});
       this.getList();
     },
     // 提交上传文件
@@ -505,20 +633,20 @@ export default {
       this.$refs.upload.submit();
     },
     /** 报告附件按钮操作 */
-    handleDoc(row , fileType) {
+    handleDoc(row, fileType) {
       if (this.planType === 1) {
-        fileType+='lj';
+        fileType += 'lj';
       } else if (this.planType === 2) {
-        fileType+='ys';
+        fileType += 'ys';
       } else if (this.planType === 3) {
-        fileType+='fl';
+        fileType += 'fl';
       } else if (this.planType === 4) {
-        fileType+='ft';
+        fileType += 'ft';
       }
       this.doc.pType = fileType
       this.doc.queryParams.pType = fileType
       this.doc.id = row.id;
-      this.doc.title = this.$t('附件') ;
+      this.doc.title = this.$t('附件');
       this.doc.open = true;
       this.doc.queryParams.pId = row.id
       this.doc.pId = row.id
@@ -527,7 +655,7 @@ export default {
         this.$refs.doc.clearFiles()
       })
     },
-    getFileList (){
+    getFileList() {
       allFileList(this.doc.queryParams).then(response => {
         response.forEach(element => {
           element["isEdit"] = false
@@ -546,7 +674,7 @@ export default {
     //附件上传成功处理
     handleFileDocSuccess(response, file, fileList) {
       this.doc.isUploading = false;
-      this.$alert(response.msg, this.$t('导入结果'), { dangerouslyUseHTMLString: true });
+      this.$alert(response.msg, this.$t('导入结果'), {dangerouslyUseHTMLString: true});
       this.getFileList()
     },
     // 文件下载处理
@@ -560,14 +688,14 @@ export default {
       a.setAttribute('href', process.env.VUE_APP_BASE_API + url)
       a.click()
     },
-    openPdf(){
+    openPdf() {
       window.open(this.pdf.pdfUrl);//path是文件的全路径地址
     },
-    handleSee (row){
+    handleSee(row) {
       // window.open(process.env.VUE_APP_BASE_API +'/pdf/web/viewer.html?file=' + process.env.VUE_APP_BASE_API + row.fileUrl);//path是文件的全路径地址
-      this.pdf.open =true
+      this.pdf.open = true
       this.pdf.title = row.fileName
-      this.pdf.pdfUrl = process.env.VUE_APP_BASE_API +'/pdf/web/viewer.html?file=' + process.env.VUE_APP_BASE_API + row.fileUrl
+      this.pdf.pdfUrl = process.env.VUE_APP_BASE_API + '/pdf/web/viewer.html?file=' + process.env.VUE_APP_BASE_API + row.fileUrl
     },
     /** 删除按钮操作 */
     handleDeleteDoc(row) {
@@ -576,7 +704,7 @@ export default {
         confirmButtonText: this.$t('确定'),
         cancelButtonText: this.$t('取消'),
         type: "warning"
-      }).then(function() {
+      }).then(function () {
         return delCommonfile(ids);
       }).then(() => {
         this.getFileList()
@@ -594,7 +722,7 @@ export default {
       this.pdf.pdfUrl = ""
       this.ppt = true
       //如果是PDF等直接可以打开的就不调接口,否则调用接口
-      if (row.fileName!=null&&row.fileName.endsWith('pdf')) {
+      if (row.fileName != null && row.fileName.endsWith('pdf')) {
         this.pdf.pdfUrl = process.env.VUE_APP_BASE_API + '/pdf/web/viewer.html?file=' + process.env.VUE_APP_BASE_API + row.fileUrl
 
       }