ly 3 rokov pred
rodič
commit
f961d5ff70

+ 11 - 0
master/src/main/java/com/ruoyi/project/approve/damain/DevTask.java

@@ -34,6 +34,9 @@ public class DevTask {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date taskEndTime;
 
+    /** 隐患申请对象 */
+    private Object approveObj;
+
     /** 流程ID */
     private String processId;
 
@@ -234,6 +237,14 @@ public class DevTask {
 
     public String getAfterFilename() { return afterFilename; }
 
+    public Object getApproveObj() {
+        return approveObj;
+    }
+
+    public void setApproveObj(Object approveObj) {
+        this.approveObj = approveObj;
+    }
+
     @Override
     public String toString() {
         return "DevTask{" +

+ 8 - 0
master/src/main/java/com/ruoyi/project/ehs/controller/TApproveDangerController.java

@@ -26,6 +26,8 @@ import com.ruoyi.project.system.domain.SysDept;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.domain.SysUserRole;
 import com.ruoyi.project.system.service.ISysUserService;
+import com.ruoyi.project.training.spec.domain.TStApprove;
+import com.ruoyi.project.training.spec.service.ITStApproveService;
 import org.activiti.bpmn.model.BpmnModel;
 import org.activiti.bpmn.model.FlowNode;
 import org.activiti.bpmn.model.Process;
@@ -92,6 +94,8 @@ public class TApproveDangerController extends BaseController
     @Autowired
     private ITApproveSpecModifyService tApproveSpecModifyService;
     @Autowired
+    private ITStApproveService tStApproveService;
+    @Autowired
     private RepositoryService repositoryService;
     /**
      * 任务申请
@@ -313,6 +317,10 @@ public class TApproveDangerController extends BaseController
                     TApproveSpecModify approve = tApproveSpecModifyService.selectTApproveSpecModifyById(Long.parseLong(pi.getBusinessKey()));
                     logger.info("设备修改/删除审核" +JSON.toJSONString(approve));
                     devTask.setApproveSpecModify(approve);
+                }else if (pi.getProcessDefinitionName().equals("专项培训计划审核")) {
+                    TStApprove approve = tStApproveService.selectTStApproveById(Long.parseLong(pi.getBusinessKey()));
+                    logger.info("设备修改/删除审核" +JSON.toJSONString(approve));
+                    devTask.setApproveObj(approve);
                 }
                 list.add(devTask);
             }

+ 81 - 8
master/src/main/java/com/ruoyi/project/training/spec/controller/TStApproveController.java

@@ -1,18 +1,19 @@
 package com.ruoyi.project.training.spec.controller;
 
 import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 import com.alibaba.fastjson.JSON;
+import com.ruoyi.project.approve.damain.DevTask;
 import com.ruoyi.project.listener.monthSemsApprove.*;
-import org.activiti.engine.HistoryService;
-import org.activiti.engine.RuntimeService;
-import org.activiti.engine.TaskService;
+import com.ruoyi.project.sems.domain.*;
+import com.ruoyi.project.sems.his.domain.*;
+import com.ruoyi.project.training.spec.domain.TStPlan;
+import com.ruoyi.project.training.spec.service.ITStPlanService;
+import org.activiti.engine.*;
 import org.activiti.engine.impl.identity.Authentication;
 import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Task;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -50,7 +51,8 @@ public class TStApproveController extends BaseController
     private HistoryService historyService;
     @Autowired
     private TaskService taskService;
-
+    @Autowired
+    private ITStPlanService tStPlanService;
     /**
      * 查询专项培训计划申请列表
      */
@@ -62,6 +64,21 @@ public class TStApproveController extends BaseController
         return getDataTable(list);
     }
 
+    @GetMapping(value = "info/{id}")
+    public AjaxResult info(@PathVariable("id") Long id)
+    {
+        TStApprove tStApprove = tStApproveService.selectTStApproveById(id);
+        String[] ids = tStApprove.getPlanId().split(",");
+        List<TStPlan> planList = new ArrayList<TStPlan>();
+        for (String i : ids
+        ) {
+            TStPlan tStPlan = tStPlanService.selectTStPlanById(Long.parseLong(i));
+            planList.add(tStPlan);
+        }
+        tStApprove.setPlanList(planList);
+        return AjaxResult.success(tStApprove);
+    }
+
 
     /**
      * 新增专项培训计划申请
@@ -105,6 +122,62 @@ public class TStApproveController extends BaseController
         return AjaxResult.success();
     }
 
+    /**
+     * 审核处理
+     */
+    @Log(title = "专项培训计划申请审核处理", businessType = BusinessType.UPDATE)
+    @PutMapping("/handle")
+    public AjaxResult handle(@RequestBody DevTask devTask) {
+        //流程审批意见
+        String symbol= "";
+        if (devTask.getComment() != "") {
+            symbol = ",";
+        }
+        //使用任务服务完成任务(提交任务)
+        String taskId = devTask.getTaskId();
+        // 使用任务id,获取任务对象,获取流程实例id
+        Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
+        //利用任务对象,获取流程实例id
+        String processInstancesId = task.getProcessInstanceId();
+        TStApprove tStApprove = tStApproveService.selectTStApproveById(Long.parseLong(devTask.getBusinessKey()));
+        if (devTask.getCondition().equals("1")) {
+            devTask.setComment("通过" + symbol + devTask.getComment());
+            String[] ids;
+            ids = tStApprove.getPlanId().split(",");
+            for (String i : ids
+            ) {
+                TStPlan t = tStPlanService.selectTStPlanById(Long.parseLong(i));
+                t.setApproveStatus(1l);
+                tStPlanService.updateTStPlan(t);
+            }
+            }
+        else if (devTask.getCondition().equals("0")) {
+            devTask.setComment("未通过" + symbol + devTask.getComment());
+            String[] ids;
+            ids = tStApprove.getPlanId().split(",");
+            for (String i : ids
+            ) {
+                TStPlan t = tStPlanService.selectTStPlanById(Long.parseLong(i));
+                t.setApproveStatus(2l);
+                tStPlanService.updateTStPlan(t);
+            }
+        }
+        System.out.println(processInstancesId);
+        Map<String, Object> param = new HashMap<>();
+        param.put("condition", devTask.getCondition());
+        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
+        TaskService taskService = processEngine.getTaskService();
+        //认领任务
+        processEngine.getTaskService()//
+                .claim(taskId, getUserId().toString());
+//        Authentication.setAuthenticatedUserId("cmc"); // 添加批注时候的审核人
+        taskService.addComment(taskId, processInstancesId, devTask.getComment());
+        //业务监听处理
+//        tApproveService.handleApprove(task ,devTask);
+        taskService.complete(taskId, param);
+        return AjaxResult.success();
+    }
+
     /**
      * 修改专项培训计划申请
      */

+ 13 - 0
master/src/main/java/com/ruoyi/project/training/spec/domain/TStApprove.java

@@ -1,6 +1,8 @@
 package com.ruoyi.project.training.spec.domain;
 
 import java.util.Date;
+import java.util.List;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import com.ruoyi.framework.web.domain.BaseEntity;
@@ -28,6 +30,9 @@ public class TStApprove extends BaseEntity
     @Excel(name = "计划ids")
     private String planId;
 
+    /** 计划 */
+    private List<TStPlan> planList;
+
     /** 审批类型 */
     @Excel(name = "审批类型")
     private Long approveType;
@@ -184,6 +189,14 @@ public class TStApprove extends BaseEntity
         return deptId;
     }
 
+    public List<TStPlan> getPlanList() {
+        return planList;
+    }
+
+    public void setPlanList(List<TStPlan> planList) {
+        this.planList = planList;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

+ 5 - 1
master/src/main/resources/mybatis/training/spec/TStPlanMapper.xml

@@ -24,6 +24,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="deptName" column="dept_name" />
         <result property="score" column="score" />
         <result property="overallComment" column="overall_comment" />
+        <result property="approveStatus" column="APPROVE_STATUS" />
     </resultMap>
 
     <sql id="selectTStPlanVo">
@@ -31,7 +32,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <!-- 王子文 2022年4月19日 10点28分 -->
         <!-- 添加 表连接 sys_user u -->
         <!-- 添加 结果字段 u.nick_name -->
-        select d.id, d.staff_id, u.nick_name, d.plant_name, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.start_date, d.end_date, d.class_hour, d.class_content, d.study_state ,s.dept_name from t_st_plan d
+        select d.id, d.staff_id,d.APPROVE_STATUS, u.nick_name, d.plant_name, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.start_date, d.end_date, d.class_hour, d.class_content, d.study_state ,s.dept_name from t_st_plan d
         left join sys_dept s on s.dept_id = d.dept_id
         left join sys_user u on d.staff_id = u.staffid
     </sql>
@@ -88,6 +89,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="classHour != null">class_hour,</if>
             <if test="classContent != null">class_content,</if>
             <if test="studyState != null">study_state,</if>
+            <if test="approveStatus != null">APPROVE_STATUS,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">#{id},</if>
@@ -104,6 +106,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="classHour != null">#{classHour},</if>
             <if test="classContent != null">#{classContent},</if>
             <if test="studyState != null">#{studyState},</if>
+            <if test="approveStatus != null">#{approveStatus},</if>
          </trim>
     </insert>
 
@@ -125,6 +128,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="studyState != null">study_state = #{studyState},</if>
             <if test="score != null">score = #{score},</if>
             <if test="overallComment != null">overall_comment = #{overallComment},</if>
+            <if test="approveStatus != null">approve_status = #{approveStatus},</if>
         </trim>
         where id = #{id}
     </update>

+ 17 - 2
ui/src/api/training/spec/stapprove.js

@@ -17,7 +17,15 @@ export function getStapprove(id) {
   })
 }
 
-// 月检申请
+// 查询专项培训计划申请详细
+export function getStapproveInfo(id) {
+  return request({
+    url: '/spec/stapprove/info/' + id,
+    method: 'get'
+  })
+}
+
+// 申请
 export function addStPlanApprove(data) {
   return request({
     url: '/spec/stapprove/addStPlanApprove',
@@ -25,7 +33,14 @@ export function addStPlanApprove(data) {
     data: data
   })
 }
-
+// 处理申请
+export function handleApprove(data) {
+  return request({
+    url: '/spec/stapprove/handle',
+    method: 'put',
+    data: data
+  })
+}
 
 // 新增专项培训计划申请
 export function addStapprove(data) {

+ 10 - 0
ui/src/views/approve/pending/index.vue

@@ -113,6 +113,7 @@
 
     <add-or-update v-if="specDealVisible" ref="specDeal" @refreshDataList="getList"></add-or-update>
     <spec-modify v-if="specModifyDealVisible" ref="specModifyDeal" @refreshDataList="getList"></spec-modify>
+    <spec-training-plan v-if="specTrainingPlanDealVisible" ref="specTrainingPlanDeal" @refreshDataList="getList"></spec-training-plan>
     <process-img v-if="processImgVisible" ref="processImg" @refreshDataList="getList"></process-img>
   </div>
 </template>
@@ -121,6 +122,7 @@
   import {getPendinglist, handleApprovedanger} from "@/api/ehs/approvedanger";
   import AddOrUpdate from './spec-detail';
   import SpecModify from './specModify-deal';
+  import SpecTrainingPlan from './specTrainingPlan-deal';
   import Accident from '../approveaccidentDetail/index';
   import ProcessImg from '../processImg/index';
   import {treeselect} from "@/api/system/dept";
@@ -135,6 +137,7 @@
       AddOrUpdate,
       SpecModify,
       Accident,
+      SpecTrainingPlan,
       ProcessImg
     },
     data() {
@@ -146,6 +149,7 @@
         processImgVisible: false,
         specDealVisible: false,
         specModifyDealVisible: false,
+        specTrainingPlanDealVisible: false,
         // 选中数组
         ids: [],
         // 非单个禁用
@@ -329,6 +333,12 @@
             console.log(row.taskName)
             this.$refs.specModifyDeal.init(row.approveSpecModify.id, row.taskId, row.processId,row.taskName)
           })
+        }else if (row.processName == "专项培训计划审核"){
+          this.specTrainingPlanDealVisible = true
+          this.$nextTick(() => {
+            console.log(row.taskName)
+            this.$refs.specTrainingPlanDeal.init(row.approveObj.id, row.taskId, row.processId,row.taskName)
+          })
         }else {
           this.approveInfo = row;
           this.infoTaskName = row.taskName;

+ 247 - 0
ui/src/views/approve/pending/specTrainingPlan-deal.vue

@@ -0,0 +1,247 @@
+<template>
+  <el-dialog
+    :title="!this.taskForm.taskId == '' ? $t('处理') : $t('详情')"
+    :close-on-click-modal="false"
+    :visible.sync="visible">
+    <el-form :model="taskForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="" label-width="80px">
+      <el-form-item label="申请列表">
+        <el-table
+          :data="planList"
+          border
+          style="width: 100%">
+          <el-table-column label="培训员工编号" align="center" prop="staffId" :show-overflow-tooltip="true"/>
+          <el-table-column label="培训内容" align="center" prop="plantName" :show-overflow-tooltip="true"/>
+          <el-table-column label="开始日期" align="center" prop="startDate" width="100">
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.startDate, '{y}-{m}-{d}') }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="结束日期" align="center" prop="endDate" width="100">
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.endDate, '{y}-{m}-{d}') }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="学时" align="center" prop="classHour" :show-overflow-tooltip="true"/>
+          <el-table-column label="具体内容" align="center" prop="classContent" :show-overflow-tooltip="true"/>
+        </el-table>
+      </el-form-item>
+      <el-row>
+
+      </el-row>
+      <el-form-item :label="$t('申请时间')" prop="creattime">
+        <el-input v-model="dataForm.creattime" disabled></el-input>
+      </el-form-item>
+    </el-form>
+    <form ref="downloadForm" :action="downloadAction" target="FORMSUBMIT">
+      <input name="approveId" v-model="dataForm.id"  hidden  />
+      <input name="processId" v-model="dataForm.processId"  hidden  />
+    </form>
+    <span slot="footer" class="dialog-footer">
+      <el-button v-if="this.taskForm.taskId == ''" @click="visible = false">{{$t('message.return')}}</el-button>
+      <el-button v-if="!this.taskForm.taskId == ''" type="primary" @click="dataFormSubmit(1)" :disabled="submitDisabled">{{$t('批准')}}</el-button>
+      <el-button v-if="!this.taskForm.taskId == ''" type="danger" @click="dataFormSubmit(0)" :disabled="submitDisabled">{{$t('拒绝')}}</el-button>
+    </span>
+
+  </el-dialog>
+</template>
+
+<script>
+  import {getToken} from "@/utils/auth";
+
+  import {getStapproveInfo, handleApprove} from "@/api/training/spec/stapprove";
+  import {getHistorylist} from "@/api/ehs/approvedanger";
+
+  export default {
+  name: "spec-training-plan",
+  components: {},
+  data() {
+    return {
+      loading: true,
+      // 总条数
+      total: 0,
+      approvedangerList: [],
+      recordVisible: false,
+      // 遮罩层
+      historyLoading: false,
+      //流转列表
+      historyList: [],
+      visible: false,
+      planList: [],
+      dataList: [],
+      fileTips: '',
+      showDelay: false,
+      submitDisabled: false,
+      dataListLoading:true,
+      taskName: '',
+      dataForm: {
+        id: 0,
+        userId: '',
+        devId: '',
+        devType: '',
+        approveType: '',
+        content: '',
+        fileUrls: '',
+        reUrls: '',
+        status: '',
+        creattime: '',
+        plantCode: '',
+        unit: '',
+        devname: '',
+        devno: '',
+        files: [],
+        delayDate: '',
+        delayReason: '',
+        delayMeasure: '',
+        delayNotice: ''
+      },
+      taskForm: {
+        comment: '',
+        taskId: '',
+        files: '',
+        govDate: '',
+        govFileList: []
+      },
+      // 查询参数
+      queryParams: {
+        processId: null,
+      },
+      doc: {
+        file: "",
+        // 是否显示弹出层(报告附件)
+        open: false,
+        // 弹出层标题(报告附件)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 报告附件上传位置编号
+        ids: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/sems/specfile/uploadFile",
+        commonfileList: null,
+        pType: 'traning',
+        pId: null
+      },
+      dataRule: {
+        approveType: [
+          { required: true, message: this.$t('approveType') + this.$t('notEmpty'), trigger: 'blur' }
+        ],
+        content: [
+          { required: true, message: this.$t('content') + this.$t('notEmpty'), trigger: 'blur' }
+        ]
+      },
+      downloadAction: process.env.VUE_APP_BASE_API +'/sems/approve/exportPDF',
+      approveOption: [],
+      devTypeOption: [],
+      belong: '',
+      fileList: [],
+    };
+  },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
+  created() {
+
+  },
+  methods: {
+    init (id, taskId, processId,taskName) {
+      this.dataForm.processId = processId
+      this.taskName = taskName
+      this.taskForm.taskId = taskId
+      this.dataForm.id = id || 0
+      this.visible = true
+      this.queryParams.processId = processId;
+      getHistorylist(this.queryParams).then(response => {
+        this.historyList = response.rows;
+        this.historyLoading = false
+      });
+      getStapproveInfo(id).then(response => {
+        this.taskForm.businessKey = response.data.id
+        this.dataForm.creattime = response.data.creattime
+        this.planList = response.data.planList
+      });
+
+    },
+
+    // 取消按钮
+    cancel() {
+      this.visible = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        userId: null,
+        devId: null,
+        devType: null,
+        approveType: null,
+        content: null,
+        fileUrls: null,
+        reUrls: null,
+        status: 0,
+        creattime: null,
+        endtime: null,
+        processId: null,
+        govDate: null,
+        delayDate: null,
+        delayReason: null,
+        delayMeasure: null,
+        delayNotice: null,
+        apNo: null,
+        checkDate: null,
+        reportId: null,
+        monthId: null,
+        delFlag: null,
+        deptId: null
+      };
+      this.resetForm("form");
+    },
+
+    /** 提交按钮 */
+    // 表单提交
+    dataFormSubmit (val) {
+      this.submitDisabled = true
+      console.log(this.taskForm.govFileList)
+      this.dataForm.files = []
+      if (this.taskForm.govFileList.length > 0) {
+        for (let i = 0; i < this.taskForm.govFileList.length; i++) {
+          let obj = {}
+          obj.fileName = this.taskForm.govFileList[i].response.fileName
+          obj.fileUrl = this.taskForm.govFileList[i].response.url
+          this.dataForm.files.push(obj)
+        }
+      }
+      this.taskForm.condition = val
+      this.taskForm.govFiles = this.dataForm.files
+      handleApprove(this.taskForm).then(response => {
+        this.submitDisabled = false
+        this.msgSuccess(this.$t('处理成功'));
+        this.visible = false;
+        this.$emit('refreshDataList')
+      });
+      this.$nextTick(function () {
+        this.comment = ''
+      })
+    },
+    recordHandle(devList,dataForm){
+      this.recordVisible = true
+      this.$nextTick(() => {
+        this.$refs.recordDeal.init(devList,dataForm);
+      })
+    },
+}
+}
+
+
+</script>
+
+<style scoped>
+
+</style>

+ 30 - 10
ui/src/views/training/spec/plan/index.vue

@@ -35,6 +35,16 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
+      <el-form-item :label="$t('申请状态')" prop="approveStatus">
+        <el-select v-model="queryParams.approveStatus" :placeholder="$t('请选择') + $t('申请状态')" clearable size="small">
+          <el-option
+            v-for="dict in approveStatusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </el-select>
+      </el-form-item>
       <el-form-item label="学习状态" prop="studyState">
         <el-select v-model="queryParams.studyState" placeholder="请选择学习状态" clearable size="small">
           <el-option
@@ -111,27 +121,29 @@
     </el-row>
     <!-- 表格 -->
     <el-table v-loading="loading" :data="planList" @selection-change="handleSelectionChange" :height="clientHeight" border>
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="培训员工" align="center" prop="staffName" :show-overflow-tooltip="true"/>
-      <el-table-column label="培训内容" align="center" prop="plantName" :show-overflow-tooltip="true"/>
-      <el-table-column label="开始日期" align="center" prop="startDate" width="100">
+      <el-table-column type="selection" width="55" fixed="left" align="center" />
+      <el-table-column label="培训员工" align="center" fixed="left" prop="staffName" :show-overflow-tooltip="true"/>
+      <el-table-column label="培训内容" align="center" fixed="left" prop="plantName" :show-overflow-tooltip="true"/>
+      <el-table-column label="开始日期" align="center" fixed="left" prop="startDate" width="100">
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.startDate, '{y}-{m}-{d}') }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="结束日期" align="center" prop="endDate" width="100">
+      <el-table-column label="结束日期" align="center" fixed="left" prop="endDate" width="100">
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.endDate, '{y}-{m}-{d}') }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="学时" align="center" prop="classHour" :show-overflow-tooltip="true"/>
-      <el-table-column label="具体内容" align="center" prop="classContent" :show-overflow-tooltip="true"/>
-      <el-table-column label="学习状态" align="center" prop="studyState" :formatter="studyStateFormat">
+      <el-table-column label="学时" align="center" fixed="left" prop="classHour" :show-overflow-tooltip="true"/>
+      <el-table-column label="具体内容" align="center" fixed="left" prop="classContent" :show-overflow-tooltip="true"/>
+      <el-table-column label="学习状态" align="center" fixed="left" prop="studyState" :formatter="studyStateFormat">
         <!-- <template slot-scope="scope">
           <span>{{scope.row.studyState}}</span>
           <el-button icon="el-icon-view" style="color:#6e96fa" v-if="scope.row.studyState == 2" @click="handleFeedback(scope.row)"  circle></el-button>
         </template> -->
       </el-table-column>
+      <el-table-column :label="$t('申请状态')" align="center" fixed="left" prop="approveStatus"
+                       :formatter="approveStatusFormat" :show-overflow-tooltip="true"/>
       <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
@@ -386,7 +398,7 @@
     </el-dialog>
     <!-- 查看培训详情对话框 -->
     <el-dialog v-dialogDrag :title="detail.title" :visible.sync="detail.open" width="700px" append-to-body>
-      
+
       <div slot="footer" class="dialog-footer">
         <el-button @click="detail.open = false">{{ $t('返 回') }}</el-button>
       </div>
@@ -458,6 +470,7 @@ export default {
       open: false,
       // 学习状态字典
       studyStateOptions: [],
+      approveStatusOptions: [],
       // 学员列表
       successorOptions: [],
       // 包含导师ID的查询对象
@@ -548,6 +561,9 @@ export default {
     this.getDicts("st_study_state").then(response => {
       this.studyStateOptions = response.data;
     });
+    this.getDicts("spec_training_approve_status").then(response => {
+      this.approveStatusOptions = response.data;
+    });
     this.getSuccessorOptions();
   },
   methods: {
@@ -673,6 +689,10 @@ export default {
     studyStateFormat(row, column) {
       return this.selectDictLabel(this.studyStateOptions, row.studyState);
     },
+    // 申请状态字典翻译
+    approveStatusFormat(row, column) {
+      return this.selectDictLabel(this.approveStatusOptions, row.approveStatus);
+    },
     /** 取消按钮 */
     cancel() {
       this.open = false;
@@ -820,4 +840,4 @@ export default {
     },
   }
 };
-</script>
+</script>