Kaynağa Gözat

-导师带徒添加讲师逻辑

jiangbiao 1 yıl önce
ebeveyn
işleme
b24f590df7

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

@@ -65,6 +65,12 @@ public class TTsFirstplanController extends BaseController {
         return AjaxResult.success(tTsFirstplanService.selectTTsFirstplanList(tTsFirstplan));
     }
 
+    @GetMapping("/listAllByTrainer")
+    public AjaxResult listAllByTrainer(TTsFirstplan tTsFirstplan) {
+        tTsFirstplan.setTrainer(getNickName());
+        return AjaxResult.success(tTsFirstplanService.selectTTsFirstplanList(tTsFirstplan));
+    }
+
     /**
      * 导出进组培训列表
      */
@@ -136,6 +142,7 @@ public class TTsFirstplanController extends BaseController {
             if (StringUtils.isEmpty(firstplan.getTrainer()) || !firstplan.getTrainer().trim().equals(getNickName())) {
                 return AjaxResult.error("仅讲师可评估成绩!");
             }
+            tTsFirstplan.setNickName(getNickName());
         }
         tTsFirstplan.setUserId(getUserId());
         tTsFirstplan.setNickName(getNickName());

+ 1 - 1
master/src/main/java/com/ruoyi/project/training/bccnew/controller/TTsFirstplanTmplController.java

@@ -161,7 +161,7 @@ public class TTsFirstplanTmplController extends BaseController {
                     } else if (j == 4) {
                         entity.setCourseHour(Double.valueOf(cellValue));
                     } else if (j == 5) {
-                        entity.setTrainer(cellValue);
+                        entity.setTrainer(cellValue.replaceAll(" ",""));
                     } else if (j == 6) {
                         entity.setExamType(cellValue);
                     } else if (j == 7) {

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

@@ -87,12 +87,15 @@ public class TTsFirstplanServiceImpl implements ITTsFirstplanService {
         TTsFirstplan firstplan = tTsFirstplanMapper.selectTTsFirstplanById(tTsFirstplan.getId());
         if ("合格".equals(tTsFirstplan.getScore1())) {
             tTsFirstplan.setPlanStatus(5L);
+            tTsFirstplan.setTrainerConfirm(tTsFirstplan.getNickName());
         }
         if (("不合格".equals(tTsFirstplan.getScore1())||"不合格".equals(firstplan.getScore1())) && "合格".equals(tTsFirstplan.getScore2())) {
             tTsFirstplan.setPlanStatus(5L);
+            tTsFirstplan.setTrainerConfirm(tTsFirstplan.getNickName());
         }
         if (("不合格".equals(tTsFirstplan.getScore1())||"不合格".equals(firstplan.getScore1()))&& "不合格".equals(tTsFirstplan.getScore2())) {
             tTsFirstplan.setPlanStatus(4L);
+            tTsFirstplan.setTrainerConfirm(tTsFirstplan.getNickName());
         }
         tTsFirstplanMapper.updateTTsFirstplan(tTsFirstplan);
         if (tTsFirstplan.getPlanStatus() != null) {

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

@@ -403,23 +403,25 @@ public class TElPaperServiceImpl implements ITElPaperService {
                     tTsFirstplan.setExamId(paper.getExamId());
                     tTsFirstplan.setNewId(tTsNews.get(0).getNewId());
                     for (TTsFirstplan tsFirstplan : tsFirstplanService.selectTTsFirstplanList(tTsFirstplan)) {
-                        if (paper.getUserScore() >= 80) {
-                            if (StringUtils.isEmpty(tsFirstplan.getScore1())) {
-                                tsFirstplan.setScore1("合格");
-                            } else if (StringUtils.isEmpty(tsFirstplan.getScore2())) {
-                                tsFirstplan.setScore2("合格");
-                            }
-                            tsFirstplan.setPlanStatus(5L);
-                        } else {
-                            if (StringUtils.isEmpty(tsFirstplan.getScore1())) {
-                                tsFirstplan.setScore1("不合格");
-                            }else if (tsFirstplan.getScore1().equals("不合格") && StringUtils.isEmpty(tsFirstplan.getScore2())) {
-                                tsFirstplan.setScore2("不合格");
+                        if (tsFirstplan.getExamType().equals("线上考试")) {
+                            if (paper.getUserScore() >= 80) {
+                                if (StringUtils.isEmpty(tsFirstplan.getScore1())) {
+                                    tsFirstplan.setScore1("合格");
+                                } else if (StringUtils.isEmpty(tsFirstplan.getScore2())) {
+                                    tsFirstplan.setScore2("合格");
+                                }
+                                tsFirstplan.setPlanStatus(5L);
+                            } else {
+                                if (StringUtils.isEmpty(tsFirstplan.getScore1())) {
+                                    tsFirstplan.setScore1("不合格");
+                                }else if (tsFirstplan.getScore1().equals("不合格") && StringUtils.isEmpty(tsFirstplan.getScore2())) {
+                                    tsFirstplan.setScore2("不合格");
+                                }
                             }
+                            tsFirstplan.setUserId(user.getUserId());
+                            tsFirstplan.setNickName(user.getNickName());
+                            tTsFirstplanService.updateTTsFirstplan(tsFirstplan);
                         }
-                        tsFirstplan.setUserId(user.getUserId());
-                        tsFirstplan.setNickName(user.getNickName());
-                        tTsFirstplanService.updateTTsFirstplan(tsFirstplan);
                     }
                 }
             }, "导师带徒-装置级培训考试成绩").start();

+ 7 - 0
ui/src/api/training/bccnew/firstplan.js

@@ -7,6 +7,13 @@ export function listFirstplan(query) {
     method: 'get',
     params: query
   })
+}// 查询进组培训列表
+export function listAllFirstplanByTrainer(query) {
+  return request({
+    url: '/bccnew/firstplan/listAllByTrainer',
+    method: 'get',
+    params: query
+  })
 }
 
 // 查询进组培训详细

+ 5 - 0
ui/src/router/index.js

@@ -354,6 +354,11 @@ export const constantRoutes = [
         component: (resolve) => require(['@/views/training/bccnew/tsnew/trainingPlan_student.vue'], resolve),
         name: 'trainingPlans',
         meta: { title: '导师带徒培训计划' }
+      },{
+        path: 'firstPlan_t/:newId(\\d+)',
+        component: (resolve) => require(['@/views/training/bccnew/firstplan/index_t.vue'], resolve),
+        name: 'firstPlanT',
+        meta: { title: '导师带徒装置级培训计划' }
       },
     ]
   },

+ 11 - 4
ui/src/views/training/bccnew/firstPlanTmpl/index.vue

@@ -152,19 +152,23 @@
           <el-input v-model="form.materialVer" placeholder="请输入材料版本"/>
         </el-form-item>
         <el-form-item label="培训时长h" prop="courseHour">
-          <el-input-number v-model="form.courseHour" placeholder="请输入培训时长h"/>
+          <el-input-number min="0" max="6" v-model="form.courseHour" placeholder="请输入培训时长h" @change="changeNeedTimer"/>
         </el-form-item>
         <el-form-item label="讲师" prop="trainer">
           <el-input v-model="form.trainer" placeholder="请输入讲师"/>
         </el-form-item>
         <el-form-item label="考试评估方式" prop="examType">
-          <el-input v-model="form.examType" placeholder="请输入考试评估方式"/>
+<!--          <el-input v-model="form.examType" placeholder="请输入考试评估方式"/>-->
+          <el-select v-model="form.examType" placeholder="请输入考试评估方式" clearable>
+            <el-option value="线上考试" label="线上考试"/>
+            <el-option value="线下考试" label="线下考试"/>
+          </el-select>
         </el-form-item>
         <el-form-item label="应学习时长(分)" prop="timerNeed">
-          <el-input-number v-model="form.timerNeed" placeholder="请输入应学习时长" />
+          <el-input-number min="0" v-model="form.timerNeed" placeholder="请输入应学习时长" disabled/>
         </el-form-item>
         <el-form-item label="培训排序" prop="sortTmpl">
-          <el-input-number v-model="form.sortTmpl" placeholder="请输入培训排序" />
+          <el-input-number min="0" 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-option
@@ -444,6 +448,9 @@ export default {
     });
   },
   methods: {
+    changeNeedTimer(val){
+      this.form.timerNeed=val*60
+    },
     uploadFile(row) {
       this.doc.file = null;
       this.doc.commonfileList = [];

+ 755 - 0
ui/src/views/training/bccnew/firstplan/index_t.vue

@@ -0,0 +1,755 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="课程编号" prop="courseCode">
+        <el-input
+          v-model="queryParams.courseCode"
+          placeholder="请输入课程编号"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="培训主题" prop="topic">
+        <el-input
+          v-model="queryParams.topic"
+          placeholder="请输入培训主题"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <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"/>
+      <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"/>
+      <el-table-column label="培训时长h" align="center" prop="courseHour" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="讲师" align="center" prop="trainer" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="培训日期" align="center" prop="courseDate" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.courseDate, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="讲师签名" align="center" prop="trainerConfirm" :show-overflow-tooltip="true" width="180">
+        <template slot-scope="scope">
+          <el-button
+            v-if="scope.row.trainerConfirm==null&&(scope.row.planStatus==3||scope.row.planStatus==4||scope.row.planStatus==5)"
+            type="text" @click="sign(scope.row)">
+            签名
+          </el-button>
+          <span v-else>{{ scope.row.trainerConfirm }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="考试评估方式" align="center" prop="examType" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="评估结果" align="center" prop="assess" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="学员签名" align="center" prop="studentConfirm" :show-overflow-tooltip="true" width="180"/>
+      <el-table-column label="培训状态" align="center" prop="planStatus" :show-overflow-tooltip="true" width="180">
+        <template slot-scope="scope">
+          <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" prop="score1" :show-overflow-tooltip="true" width="200">
+        <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-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>
+        </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.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" :show-overflow-tooltip="true" width="80">
+        <template slot-scope="scope">
+          <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="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">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-folder"
+            @click="openFileDialog(scope.row)"
+          >学习资料
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 用户导入对话框 -->
+    <el-dialog :close-on-click-modal="false" :title="upload.title" :visible.sync="upload.open" width="400px"
+               append-to-body>
+      <el-upload
+        ref="upload"
+        :limit="1"
+        accept=".xlsx, .xls"
+        :headers="upload.headers"
+        :action="upload.url + '?updateSupport=' + upload.updateSupport"
+        :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress"
+        :on-success="handleFileSuccess"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">
+          将文件拖到此处,或
+          <em>点击上传</em>
+        </div>
+        <div class="el-upload__tip" slot="tip">
+          <el-checkbox v-model="upload.updateSupport"/>
+          是否更新已经存在的用户数据
+          <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
+        </div>
+        <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :close-on-click-modal="false" :visible.sync="file.open" width="30%" append-to-body>
+      <el-descriptions class="margin-top" title="学习资料" :column="1" size="medium" border>
+        <el-descriptions-item label-style="width:180px">
+          <template slot="label">
+            <i class="el-icon-user"></i>
+            资料名
+          </template>
+          {{ file.data.fileName }}
+        </el-descriptions-item>
+        <el-descriptions-item label-style="width:180px">
+          <template slot="label">
+            <i class="el-icon-mobile-phone"></i>
+            学习进度
+          </template>
+          <el-progress :text-inside="true" :stroke-width="20" :percentage="getCountTime()"
+                       status="success"></el-progress>
+        </el-descriptions-item>
+        <el-descriptions-item label-style="width:180px">
+          <template slot="label">
+            <i class="el-icon-mobile-phone"></i>
+            应学习时长(分)
+          </template>
+          {{ file.data.timerNeed }}
+        </el-descriptions-item>
+        <el-descriptions-item label-style="width:180px">
+          <template slot="label">
+            <i class="el-icon-mobile-phone"></i>
+            已学习时长(分)
+          </template>
+          {{ file.data.timer }}
+        </el-descriptions-item>
+      </el-descriptions>
+      <el-button
+        class="mt10"
+        type="primary"
+        icon="el-icon-video-play"
+        @click="handleStudy(file.data)"
+      >查看附件
+      </el-button>
+    </el-dialog>
+
+    <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">
+      <div style="margin-top: -30px">
+        <iframe id="iFrame" class="iframe-html" :src="pdf.pdfUrl" frameborder="0" width="100%" height="700px"
+                v-if="ppt"></iframe>
+      </div>
+    </el-dialog>
+
+
+    <!-- 报告附件对话框 -->
+    <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">
+            <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('上传人')" 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">
+          <template slot-scope="scope">
+            <span>{{ parseTime(scope.row.createdate, '{y}-{m}-{d}') }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column :label="$t('操作')" align="center" width="220" class-name="small-padding fixed-width">
+          <template slot-scope="scope">
+            <el-button
+              v-if="scope.row.fileName!=null&&scope.row.fileName.endsWith('pdf')"
+              size="mini"
+              type="text"
+              icon="el-icon-view"
+              @click="handleSee(scope.row)"
+            >{{ $t('预览') }}
+            </el-button>
+            <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-download"
+              @click="handleDownload(scope.row)"
+            >{{ $t('下载') }}
+            </el-button>
+            <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-delete"
+              @click="handleDeleteDoc(scope.row)"
+            >{{ $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>
+        <div style="margin-top: -60px;float: right;margin-right: 40px;">
+          <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>
+      </el-dialog>
+
+      <div slot="footer" class="dialog-footer">
+        <!--        <el-button type="primary" @click="submitFileForm">{{ $t('确 定') }}</el-button>-->
+        <el-button @click="doc.open = false">{{ $t('返 回') }}</el-button>
+      </div>
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+import {
+  addFirstplan,
+  delFirstplan,
+  exportFirstplan,
+  getFirstplan,
+  importTemplate, listAllFirstplanByTrainer,
+  listFirstplan,
+  updateFirstLearnTime,
+  updateFirstplan
+} from "@/api/training/bccnew/firstplan";
+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 {listExam} from "@/api/training/elearn/exam";
+import {allFileList, delCommonfile} from "@/api/common/commonfile";
+import {getStaffId} from "@/api/plant/staffmgr";
+
+var timer = null;
+export default {
+  name: "Firstplan-t-Bccnew",
+  components: {Treeselect},
+  data() {
+    return {
+      staffId: null,
+      file: {
+        open: false,
+        data: {}
+      },
+      ppt: false,
+      examOptions: [],
+      pdf: {
+        title: '',
+        pdfUrl: '',
+        numPages: null,
+        open: false,
+        pageNum: 1,
+        pageTotalNum: 1,
+        loadedRatio: 0,
+        loadingFlash: false,
+      },
+      // 报告附件参数
+      doc: {
+        file: "",
+        // 是否显示弹出层(报告附件)
+        open: false,
+        // 弹出层标题(报告附件)
+        title: "附件",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 报告附件上传位置编号
+        ids: 0,
+        // 设置上传的请求头部
+        headers: {Authorization: "Bearer " + getToken()},
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/common/commonfile/uploadFile",
+        commonfileList: null,
+        queryParams: {
+          pId: null,
+          pType: 'trainingFirst'
+        },
+        pType: 'trainingFirst',
+        pId: null,
+        form: {}
+      },
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: false,
+      // 总条数
+      total: 0,
+      // 进组培训表格数据
+      firstplanList: [],
+      // 培训状态字典
+      planStatusOptions: [],
+      // 弹出层标题
+      title: "",
+      // 部门树选项
+      deptOptions: undefined,
+      clientHeight: 300,
+      // 是否显示弹出层
+      open: false,
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: {Authorization: "Bearer " + getToken()},
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/bccnew/firstplan/importData"
+      },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 20,
+        newId: null,
+        courseCode: null,
+        topic: null,
+        content: null,
+        courseDay: null,
+        courseHour: null,
+        courseType: null,
+        trainer: null,
+        courseDate: null,
+        assess: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null,
+        remarks: null,
+        planStatus: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {},
+      newId: null,
+    };
+  },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
+  created() {
+    this.newId = this.$route.params && this.$route.params.newId;
+    listExam({pageNum: 1, pageSize: 1000, examType: 3}).then(response => {
+      this.examOptions = response.rows;
+    });
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = document.body.clientHeight - 250
+    })
+    this.getList();
+    this.getTreeselect();
+    this.getDicts("training_bccnew_status").then(response => {
+      this.planStatusOptions = response.data;
+    });
+    this.getStaffId();
+  },
+  methods: {
+    getStaffId() {
+      getStaffId().then(res => {
+        this.staffId = res.data;
+      })
+    },
+    sign(row) {
+      this.$confirm('签名即代表您已确认该学员此项课程的成绩', "注意", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return updateFirstplan({
+          id: row.id,
+          trainerConfirm: "1",
+          newId: row.newId
+        });
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("签名成功");
+      })
+    },
+    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.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
+    },
+    handleDoc(row, fileType) {
+      this.doc.pType = fileType
+      this.doc.queryParams.pType = fileType
+      this.doc.id = row.id;
+      this.doc.title = this.$t('附件');
+      this.doc.open = true;
+      this.doc.queryParams.pId = row.id
+      this.doc.pId = row.id
+      this.getFileList()
+      this.$nextTick(() => {
+        this.$refs.doc.clearFiles()
+      })
+    },
+    handleClose() {
+      window.clearInterval(timer);
+      this.getList();
+    },
+    handleStudy(row) {
+      //office预览
+      this.pdf.loadingFlash = true
+      this.pdf.open = true
+      this.pdf.title = row.fileName
+      this.pdf.pdfUrl = ""
+      this.ppt = true
+      //如果是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
+      }
+      let _this = this;
+      timer = window.setInterval(function () {
+        updateFirstLearnTime(row).then(res => {
+        })
+      }, 60000);
+    },
+    getCountTime() {
+      if (this.file.data.timerNeed === 0)
+        return 0;
+      return parseInt((this.file.data.timer / this.file.data.timerNeed * 100).toFixed(2))
+    },
+    openFileDialog(row) {
+      this.file.open = true;
+      this.file.data = row
+      console.log(row)
+      if (row.timer === '' || row.timer == null) {
+        this.file.data.timer = 0
+      }
+      if (row.timerNeed === '' || row.timerNeed == null) {
+        this.file.data.timerNeed = 0
+      }
+      console.log(this.file.data)
+    },
+    /** 查询进组培训列表 */
+    getList() {
+      this.loading = true;
+      this.queryParams.newId=this.newId;
+      listAllFirstplanByTrainer(this.queryParams).then(response => {
+        this.firstplanList = response.data;
+        this.total = 0;
+        this.loading = false;
+      });
+    },
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        newId: null,
+        courseCode: null,
+        topic: null,
+        content: null,
+        courseDay: null,
+        courseHour: null,
+        courseType: null,
+        trainer: null,
+        courseDate: null,
+        assess: null,
+        delFlag: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null,
+        remarks: null,
+        planStatus: 0
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length !== 1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加装置级培训";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getFirstplan(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        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 => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateFirstplan(this.form).then(response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addFirstplan(this.form).then(response => {
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return delFirstplan(ids);
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("删除成功");
+      })
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有装置级培训数据项?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return exportFirstplan(queryParams);
+      }).then(response => {
+        this.download(response.msg);
+      })
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "用户导入";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      importTemplate().then(response => {
+        this.download(response.msg);
+      });
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert(response.msg, "导入结果", {dangerouslyUseHTMLString: true});
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    },
+    getFileList() {
+      allFileList(this.doc.queryParams).then(response => {
+        response.forEach(element => {
+          element["isEdit"] = false
+        });
+        response.forEach(element => {
+          element["isAdd"] = false
+        });
+        this.doc.commonfileList = response;
+      });
+    },
+    //附件上传中处理
+    handleFileDocProgress(event, file, fileList) {
+      this.doc.file = file;
+      this.doc.isUploading = true;
+    },
+    //附件上传成功处理
+    handleFileDocSuccess(response, file, fileList) {
+      this.doc.isUploading = false;
+      this.$alert(response.msg, this.$t('导入结果'), {dangerouslyUseHTMLString: true});
+      this.getFileList()
+    },
+    // 文件下载处理
+    handleDownload(row) {
+      var name = row.fileName;
+      var url = row.fileUrl;
+      var suffix = url.substring(url.lastIndexOf("."), url.length);
+      const a = document.createElement('a')
+      a.setAttribute('download', name)
+      a.setAttribute('target', '_blank')
+      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>

+ 5 - 65
ui/src/views/training/bccnew/tsnew/index.vue

@@ -1,15 +1,6 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="年度培训标题" prop="name">
-        <el-input
-          v-model="queryParams.name"
-          placeholder="请输入年度培训标题"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
       <el-form-item label="培训状态" prop="planStatus">
         <el-select v-model="queryParams.planStatus" placeholder="请选择培训状态" clearable size="small">
           <el-option
@@ -36,16 +27,6 @@
                         placeholder="选择结束时间">
         </el-date-picker>
       </el-form-item>
-      <el-form-item label="培训类型 " prop="planType">
-        <el-select v-model="queryParams.planType" placeholder="请选择培训类型" clearable size="small">
-          <el-option
-            v-for="dict in planTypeOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
-        </el-select>
-      </el-form-item>
       <el-form-item>
         <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -59,7 +40,7 @@
           icon="el-icon-plus"
           size="mini"
           @click="handleAdd"
-          v-hasPermi="['newstaff:tnNew:add']"
+          v-hasPermi="['tsnew:tsnew:add']"
         >新增
         </el-button>
       </el-col>
@@ -70,7 +51,7 @@
           size="mini"
           :disabled="single"
           @click="handleUpdate"
-          v-hasPermi="['newstaff:tnNew:edit']"
+          v-hasPermi="['tsnew:tsnew:edit']"
         >修改
         </el-button>
       </el-col>
@@ -81,26 +62,17 @@
           size="mini"
           :disabled="multiple"
           @click="handleDelete"
-          v-hasPermi="['newstaff:tnNew:remove']"
+          v-hasPermi="['tsnew:tsnew:remove']"
         >删除
         </el-button>
       </el-col>
-      <!--        <el-col :span="1.5">-->
-      <!--            <el-button-->
-      <!--                    type="info"-->
-      <!--                    icon="el-icon-upload2"-->
-      <!--                    size="mini"-->
-      <!--                    @click="handleImport"-->
-      <!--                    v-hasPermi="['newstaff:tnNew:edit']"-->
-      <!--            >导入</el-button>-->
-      <!--        </el-col>-->
       <el-col :span="1.5">
         <el-button
           type="warning"
           icon="el-icon-download"
           size="mini"
           @click="handleExport"
-          v-hasPermi="['newstaff:tnNew:export']"
+          v-hasPermi="['tsnew:tsnew:export']"
         >导出
         </el-button>
       </el-col>
@@ -199,41 +171,9 @@
             type="text"
             icon="el-icon-edit"
             @click="handleUpdate(scope.row)"
-            v-hasPermi="['newstaff:tnNew:edit']"
+            v-hasPermi="['tsnew:tsnew:edit']"
           >修改
           </el-button>
-          <!--          <el-dropdown  size="mini">-->
-          <!--            <span class="el-dropdown-link">-->
-          <!--              <el-button-->
-          <!--                type="text"-->
-          <!--                size="mini"-->
-          <!--                icon="el-icon-download"-->
-          <!--              >下载<i class="el-icon-arrow-down"></i></el-button>-->
-          <!--            </span>-->
-          <!--            <el-dropdown-menu slot="dropdown">-->
-          <!--              <el-dropdown-item>-->
-          <!--                <el-button-->
-          <!--                  size="mini"-->
-          <!--                  type="text"-->
-          <!--                  @click="handleDownloadWord(scope.row, 'mentorAgreement')"-->
-          <!--                >师徒协议</el-button>-->
-          <!--              </el-dropdown-item>-->
-          <!--              <el-dropdown-item>-->
-          <!--                <el-button-->
-          <!--                  size="mini"-->
-          <!--                  type="text"-->
-          <!--                  @click="handleDownloadWord(scope.row, 'targetPlan')"-->
-          <!--                >导师带徒目标及计划</el-button>-->
-          <!--              </el-dropdown-item>-->
-          <!--              <el-dropdown-item>-->
-          <!--                <el-button-->
-          <!--                  size="mini"-->
-          <!--                  type="text"-->
-          <!--                  @click="handleDownloadWord(scope.row, 'appraisalForm')"-->
-          <!--                >导师带徒考评表</el-button>-->
-          <!--              </el-dropdown-item>-->
-          <!--            </el-dropdown-menu>-->
-          <!--          </el-dropdown>-->
         </template>
       </el-table-column>
     </el-table>

+ 1 - 188
ui/src/views/training/bccnew/tsnew/index_s.vue

@@ -1,15 +1,6 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="年度培训标题" prop="name">
-        <el-input
-          v-model="queryParams.name"
-          placeholder="请输入年度培训标题"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
       <el-form-item label="培训状态" prop="planStatus">
         <el-select v-model="queryParams.planStatus" placeholder="请选择培训状态" clearable size="small">
           <el-option
@@ -36,16 +27,6 @@
                         placeholder="选择结束时间">
         </el-date-picker>
       </el-form-item>
-      <el-form-item label="培训类型 " prop="planType">
-        <el-select v-model="queryParams.planType" placeholder="请选择培训类型" clearable size="small">
-          <el-option
-            v-for="dict in planTypeOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
-        </el-select>
-      </el-form-item>
       <el-form-item>
         <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -53,51 +34,13 @@
     </el-form>
 
     <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['newstaff:tnNew:add']"
-        >新增</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['newstaff:tnNew:edit']"
-        >修改</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['newstaff:tnNew:remove']"
-        >删除</el-button>
-      </el-col>
-      <!--        <el-col :span="1.5">-->
-      <!--            <el-button-->
-      <!--                    type="info"-->
-      <!--                    icon="el-icon-upload2"-->
-      <!--                    size="mini"-->
-      <!--                    @click="handleImport"-->
-      <!--                    v-hasPermi="['newstaff:tnNew:edit']"-->
-      <!--            >导入</el-button>-->
-      <!--        </el-col>-->
       <el-col :span="1.5">
         <el-button
           type="warning"
           icon="el-icon-download"
           size="mini"
           @click="handleExport"
-          v-hasPermi="['newstaff:tnNew:export']"
+          v-hasPermi="['tsnew:tsnew:export']"
         >导出</el-button>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
@@ -147,7 +90,6 @@
           <el-button  icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'tsNew-three')" circle></el-button>
         </template>
       </el-table-column>
-
       <el-table-column label="上岗能力评测表" align="center" prop="firstplan-score" width="80">
         <template slot-scope="scope">
           <el-button  icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'tsNew-firstplan-score')" circle></el-button>
@@ -182,45 +124,6 @@
             icon="el-icon-view"
             @click="planList(scope.row)"
           >培训计划</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['newstaff:tnNew:edit']"
-          >修改 </el-button>
-          <!--          <el-dropdown  size="mini">-->
-          <!--            <span class="el-dropdown-link">-->
-          <!--              <el-button-->
-          <!--                type="text"-->
-          <!--                size="mini"-->
-          <!--                icon="el-icon-download"-->
-          <!--              >下载<i class="el-icon-arrow-down"></i></el-button>-->
-          <!--            </span>-->
-          <!--            <el-dropdown-menu slot="dropdown">-->
-          <!--              <el-dropdown-item>-->
-          <!--                <el-button-->
-          <!--                  size="mini"-->
-          <!--                  type="text"-->
-          <!--                  @click="handleDownloadWord(scope.row, 'mentorAgreement')"-->
-          <!--                >师徒协议</el-button>-->
-          <!--              </el-dropdown-item>-->
-          <!--              <el-dropdown-item>-->
-          <!--                <el-button-->
-          <!--                  size="mini"-->
-          <!--                  type="text"-->
-          <!--                  @click="handleDownloadWord(scope.row, 'targetPlan')"-->
-          <!--                >导师带徒目标及计划</el-button>-->
-          <!--              </el-dropdown-item>-->
-          <!--              <el-dropdown-item>-->
-          <!--                <el-button-->
-          <!--                  size="mini"-->
-          <!--                  type="text"-->
-          <!--                  @click="handleDownloadWord(scope.row, 'appraisalForm')"-->
-          <!--                >导师带徒考评表</el-button>-->
-          <!--              </el-dropdown-item>-->
-          <!--            </el-dropdown-menu>-->
-          <!--          </el-dropdown>-->
         </template>
       </el-table-column>
     </el-table>
@@ -233,82 +136,6 @@
       @pagination="getList"
     />
 
-    <!-- 添加或修改新员工培训对话框 -->
-    <el-dialog  :close-on-click-modal="false" :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="staffId">
-          <el-select v-model="form.staffId" filterable :placeholder="$t('请选择')+$t('培训员工')" :disabled="isEdit">
-            <el-option
-              v-for="item in userOption"
-              :key="item.staffid"
-              :label="item.name +'  '+ item.deptName"
-              :value="item.staffid"
-              :disabled="item.disabled">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="培训状态"  prop="planStatus">
-          <el-select v-model="form.planStatus" placeholder="请选择培训状态" disabled>
-            <el-option
-              v-for="dict in planStatusOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="parseInt(dict.dictValue)"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="培训时间" prop="trainingDate">
-          <el-date-picker
-            v-model="form.trainingDate"
-            type="daterange"
-            :picker-options="pickerOptions"
-            value-format="yyyy-MM-dd"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-            align="right">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="导师员工" prop="mentorStaffId">
-          <el-select v-model="form.mentorStaffId" filterable :placeholder="$t('请选择')+$t('导师员工')">
-            <el-option
-              v-for="item in userOption"
-              :key="item.staffid"
-              :label="item.name +'  '+ item.deptName"
-              :value="item.staffid"
-              :disabled="item.disabled">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="岗位" prop="planType">
-          <el-radio-group v-model="form.planType">
-            <el-radio
-              key="1"
-              :label="1"
-            >裂解</el-radio>
-            <el-radio
-              key="2"
-              :label="2"
-            >压缩</el-radio>
-            <el-radio
-              key="3"
-              :label="3"
-            >分离</el-radio>
-            <el-radio
-              key="4"
-              :label="4"
-            >芳烃</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="备注" prop="remarks">
-          <el-input v-model="form.remarks" placeholder="请输入备注" />
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">确 定</el-button>
-        <el-button @click="cancel">取 消</el-button>
-      </div>
-    </el-dialog>
     <!-- 用户导入对话框 -->
     <el-dialog  :close-on-click-modal="false" :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
       <el-upload
@@ -368,18 +195,6 @@
         </el-table-column>
         <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="pDate"  width="150">-->
-        <!--          <template slot-scope="scope">-->
-        <!--            <el-date-picker-->
-        <!--              v-if="scope.row.isEdit"-->
-        <!--              v-model="scope.row.pDate"-->
-        <!--              type="date"-->
-        <!--              value-format="yyyy-MM-dd"-->
-        <!--              placeholder="日期">-->
-        <!--            </el-date-picker>-->
-        <!--            <span v-else>{{ parseTime(scope.row.pDate, '{y}-{m}-{d}') }}</span>-->
-        <!--          </template>-->
-        <!--        </el-table-column>-->
         <el-table-column :label="$t('操作')" align="center" width="220" class-name="small-padding fixed-width">
           <template slot-scope="scope">
             <el-button
@@ -391,7 +206,6 @@
             >{{ $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"
@@ -417,7 +231,6 @@
       </el-dialog>
 
       <div slot="footer" class="dialog-footer">
-        <!--        <el-button type="primary" @click="submitFileForm">{{ $t('确 定') }}</el-button>-->
         <el-button @click="doc.open = false">{{ $t('返 回') }}</el-button>
       </div>
     </el-dialog>

+ 800 - 0
ui/src/views/training/bccnew/tsnew/index_t.vue

@@ -0,0 +1,800 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="培训状态" prop="planStatus">
+        <el-select v-model="queryParams.planStatus" placeholder="请选择培训状态" clearable size="small">
+          <el-option
+            v-for="dict in planStatusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="开始时间" prop="startdate">
+        <el-date-picker clearable size="small" style="width: 200px"
+                        v-model="queryParams.startdate"
+                        type="date"
+                        value-format="yyyy-MM-dd"
+                        placeholder="选择开始时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="结束时间" prop="enddate">
+        <el-date-picker clearable size="small" style="width: 200px"
+                        v-model="queryParams.enddate"
+                        type="date"
+                        value-format="yyyy-MM-dd"
+                        placeholder="选择结束时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['tsnew:tsnew:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="tnNewList" @selection-change="handleSelectionChange" :height="clientHeight" border>
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="新员工" align="center" prop="staffName" width="100" />
+      <el-table-column label="培训状态" align="center" prop="planStatus" width="120" :formatter="planStatusFormat" >
+        <template slot-scope="scope">
+          <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">
+        <template slot-scope="scope">
+          <el-progress :percentage="scope.row.planFinish"></el-progress>
+        </template>
+      </el-table-column>
+      <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="mentorStaffName" width="100" />
+      <el-table-column label="岗位" align="center" prop="planType" width="100">
+        <template slot-scope="scope">
+          <span v-if="scope.row.planType == 1" size="small" type="success">裂解</span>
+          <span v-else-if="scope.row.planType == 2" size="small" type="success">压缩</span>
+          <span v-else-if="scope.row.planType == 3" size="small" type="success">分离</span>
+          <span v-else-if="scope.row.planType == 4" size="small" type="success">芳烃</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="三级教育记录卡" align="center" prop="three" width="80">
+        <template slot-scope="scope">
+          <el-button  icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'tsNew-three')" circle></el-button>
+        </template>
+      </el-table-column>
+
+      <el-table-column label="上岗能力评测表" align="center" prop="firstplan-score" width="80">
+        <template slot-scope="scope">
+          <el-button  icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'tsNew-firstplan-score')" circle></el-button>
+        </template>
+      </el-table-column>
+      <el-table-column label="导师提名表" align="center" prop="agreement" width="80">
+        <template slot-scope="scope">
+          <el-button  icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'tsNew-teacher-order')" circle></el-button>
+        </template>
+      </el-table-column>
+      <el-table-column label="带徒协议" align="center" prop="agreement" width="80">
+        <template slot-scope="scope">
+          <el-button  icon="el-icon-folder" style="color:#6e96fa;" @click="handleDownloadWord(scope.row, 'mentorAgreement')" circle></el-button>
+        </template>
+      </el-table-column>
+      <el-table-column label="带徒目标" align="center" prop="target" width="80">
+        <template slot-scope="scope">
+          <el-button  icon="el-icon-folder" style="color:#6e96fa;" @click="handleDownloadWord(scope.row, 'targetPlan')" circle></el-button>
+        </template>
+      </el-table-column>
+      <el-table-column label="培训考评" align="center" prop="tnNew-score" width="80">
+        <template slot-scope="scope">
+          <el-button  icon="el-icon-folder" style="color:#6e96fa;" @click="handleDownloadWord(scope.row, 'appraisalForm')" circle></el-button>
+        </template>
+      </el-table-column>
+      <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true" width="100"/>
+      <el-table-column label="操作" align="center" fixed="right"  class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-view"
+            @click="planList(scope.row)"
+          >装置级培训计划</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改新员工培训对话框 -->
+    <el-dialog  :close-on-click-modal="false" :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="staffId">
+          <el-select v-model="form.staffId" filterable :placeholder="$t('请选择')+$t('培训员工')" :disabled="isEdit">
+            <el-option
+              v-for="item in userOption"
+              :key="item.staffid"
+              :label="item.name +'  '+ item.deptName"
+              :value="item.staffid"
+              :disabled="item.disabled">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="培训状态"  prop="planStatus">
+          <el-select v-model="form.planStatus" placeholder="请选择培训状态" disabled>
+            <el-option
+              v-for="dict in planStatusOptions"
+              :key="dict.dictValue"
+              :label="dict.dictLabel"
+              :value="parseInt(dict.dictValue)"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="培训时间" prop="trainingDate">
+          <el-date-picker
+            v-model="form.trainingDate"
+            type="daterange"
+            :picker-options="pickerOptions"
+            value-format="yyyy-MM-dd"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            align="right">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="导师员工" prop="mentorStaffId">
+          <el-select v-model="form.mentorStaffId" filterable :placeholder="$t('请选择')+$t('导师员工')">
+            <el-option
+              v-for="item in userOption"
+              :key="item.staffid"
+              :label="item.name +'  '+ item.deptName"
+              :value="item.staffid"
+              :disabled="item.disabled">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="岗位" prop="planType">
+          <el-radio-group v-model="form.planType">
+            <el-radio
+              key="1"
+              :label="1"
+            >裂解</el-radio>
+            <el-radio
+              key="2"
+              :label="2"
+            >压缩</el-radio>
+            <el-radio
+              key="3"
+              :label="3"
+            >分离</el-radio>
+            <el-radio
+              key="4"
+              :label="4"
+            >芳烃</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remarks">
+          <el-input v-model="form.remarks" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+    <!-- 用户导入对话框 -->
+    <el-dialog  :close-on-click-modal="false" :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
+      <el-upload
+        ref="upload"
+        :limit="1"
+        accept=".xlsx, .xls"
+        :headers="upload.headers"
+        :action="upload.url + '?updateSupport=' + upload.updateSupport"
+        :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress"
+        :on-success="handleFileSuccess"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">
+          将文件拖到此处,或
+          <em>点击上传</em>
+        </div>
+        <div class="el-upload__tip" slot="tip">
+          <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据
+          <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
+        </div>
+        <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
+    <!-- 报告附件对话框 -->
+    <el-dialog  :close-on-click-modal="false" v-dialogDrag :title="doc.title" :visible.sync="doc.open" width="1000px" append-to-body >
+      <el-upload v-hasPermi="['training:trainingrecords:file']"
+                 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">
+            <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('上传人')" align="center" prop="creator" :show-overflow-tooltip="true" width="120"/>
+        <!--        <el-table-column :label="$t('培训日期')" align="center" prop="pDate"  width="150">-->
+        <!--          <template slot-scope="scope">-->
+        <!--            <el-date-picker-->
+        <!--              v-if="scope.row.isEdit"-->
+        <!--              v-model="scope.row.pDate"-->
+        <!--              type="date"-->
+        <!--              value-format="yyyy-MM-dd"-->
+        <!--              placeholder="日期">-->
+        <!--            </el-date-picker>-->
+        <!--            <span v-else>{{ parseTime(scope.row.pDate, '{y}-{m}-{d}') }}</span>-->
+        <!--          </template>-->
+        <!--        </el-table-column>-->
+        <el-table-column :label="$t('操作')" align="center" width="220" class-name="small-padding fixed-width">
+          <template slot-scope="scope">
+            <el-button
+              v-if="scope.row.fileName.endsWith('pdf')"
+              size="mini"
+              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>-->
+            <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-download"
+              @click="handleDownload(scope.row)"
+            >{{ $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>
+          </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>
+        <div style="margin-top: -60px;float: right;margin-right: 40px;">
+          <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>
+      </el-dialog>
+
+      <div slot="footer" class="dialog-footer">
+        <!--        <el-button type="primary" @click="submitFileForm">{{ $t('确 定') }}</el-button>-->
+        <el-button @click="doc.open = false">{{ $t('返 回') }}</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  addTsnew,
+  delTsnew,
+  exportTsnew,
+  genAppraisalFormWord,
+  getTsnew,
+  importTemplate,
+  listTsnew,
+  updateTsnew
+} from "@/api/training/bccnew/tsnew";
+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 {listStaff} from "@/api/training/newstaff/tnNew";
+import {allFileList, delCommonfile} from "@/api/common/commonfile";
+import { Loading } from 'element-ui';
+import {date} from "mockjs/src/mock/random/date";
+import {listUserNoPage} from "@/api/system/user";
+import {listStaffmgrByDeptAndTeam} from "@/api/plant/staffmgr";
+
+export default {
+  name: "Tsnew",
+  components: { Treeselect },
+  data() {
+    return {
+      pickerOptions: {
+        shortcuts: [{
+          text: '最近一个月',
+          onClick(picker) {
+            const end = new Date();
+            const start = new Date();
+            end.setTime(start.getTime() + 3600 * 1000 * 24 * 30);
+            picker.$emit('pick', [start, end]);
+          }
+        }, {
+          text: '最近三个月',
+          onClick(picker) {
+            const end = new Date();
+            const start = new Date();
+            end.setTime(start.getTime() + 3600 * 1000 * 24 * 90);
+            picker.$emit('pick', [start, end]);
+          }
+        },{
+          text: '最近一年',
+          onClick(picker) {
+            const end = new Date();
+            const start = new Date();
+            end.setTime(start.getTime() + 3600 * 1000 * 24 * 365);
+            picker.$emit('pick', [start, end]);
+          }
+        }, ]
+      },
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: false,
+      // 总条数
+      total: 0,
+      // 新员工培训表格数据
+      tnNewList: [],
+      // 弹出层标题
+      title: "",
+      // 部门树选项
+      deptOptions: undefined,
+      clientHeight:300,
+      // 培训状态字典
+      planStatusOptions: [],
+      // 培训类型 1-新员工 2-转岗字典
+      planTypeOptions: [],
+      userOption:[],
+      // 是否显示弹出层
+      open: false,
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/newstaff/tsNew/importData"
+      },
+      // 报告附件参数
+      doc: {
+        file: "",
+        // 是否显示弹出层(报告附件)
+        open: false,
+        // 弹出层标题(报告附件)
+        title: "附件",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 报告附件上传位置编号
+        ids: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/common/commonfile/uploadFile",
+        commonfileList: null,
+        queryParams: {
+          pId: null,
+          pType: 'traning'
+        },
+        pType: 'traning',
+        pId: null,
+        form: {}
+      },
+      pdf : {
+        title: '',
+        pdfUrl: '',
+        numPages: null,
+        open: false,
+        pageNum: 1,
+        pageTotalNum: 1,
+        loadedRatio: 0,
+      },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 20,
+        name: null,
+        planStatus: null,
+        startdate: null,
+        enddate: null,
+        planType: null,
+      },
+      isEdit:false,
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        mentorStaffId: [
+          { required: true, message: this.$t('导师') + this.$t('不能为空'), trigger: "change" }
+        ],
+        staffId: [
+          { required: true, message: this.$t('培训员工') + this.$t('不能为空'), trigger: "change" }
+        ],
+        trainingDate: [
+          { required: true, message: this.$t('培训时间') + this.$t('不能为空'), trigger: "blur" }
+        ],
+        planType: [
+          { required: true, message: this.$t('岗位') + this.$t('不能为空'), trigger: "change" }
+        ],
+      }
+    };
+  },
+  watch: {
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
+  created() {
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = document.body.clientHeight -250
+    })
+    this.getList();
+    this.getTreeselect();
+    this.getDicts("training_bccnew_status").then(response => {
+      this.planStatusOptions = response.data;
+    });
+    this.getDicts("training_newstaff_type").then(response => {
+      this.planTypeOptions = response.data;
+    });
+  },
+  methods: {
+    // 文件下载处理
+    handleDownloadWord(row, type) {
+      let name;
+      let url;
+      console.log(row)
+      if (type == 'mentorAgreement') {
+        name = row.mentorAgreementWordPath;
+        url = row.mentorAgreementWordPath;
+        const a = document.createElement('a')
+        a.setAttribute('download', name)
+        a.setAttribute('target', '_blank')
+        a.setAttribute('href', process.env.VUE_APP_BASE_API + url)
+        a.click()
+      } else if (type == 'targetPlan') {
+        name = row.targetPlanWordPath;
+        url = row.targetPlanWordPath;
+        const a = document.createElement('a')
+        a.setAttribute('download', name)
+        a.setAttribute('target', '_blank')
+        a.setAttribute('href', process.env.VUE_APP_BASE_API + url)
+        a.click()
+      } else if (type == 'appraisalForm') {
+        genAppraisalFormWord(row.newId).then(res=>{
+          name = res.msg;
+          url = res.msg;
+          console.log(url)
+          const a = document.createElement('a')
+          a.setAttribute('download', name)
+          a.setAttribute('target', '_blank')
+          a.setAttribute('href', process.env.VUE_APP_BASE_API + url)
+          a.click()
+        })
+      }
+    },
+    /** 查询新员工培训列表 */
+    getList() {
+      this.loading = true;
+      listTsnew(this.queryParams).then(response => {
+        this.tnNewList = response.rows;
+        for (const item of this.tnNewList) {
+          item.planFinish=parseInt(item.planFinish)
+        }
+        this.total = response.total;
+        this.loading = false;
+        console.log(this.tnNewList)
+      });
+
+    },
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
+    // 培训状态字典翻译
+    planStatusFormat(row, column) {
+      return this.selectDictLabel(this.planStatusOptions, row.planStatus);
+    },
+    // 培训类型 1-新员工 2-转岗字典翻译
+    planTypeFormat(row, column) {
+      return this.selectDictLabel(this.planTypeOptions, row.planType);
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        trainingDate: null,
+        newId: null,
+        staffId: null,
+        name: null,
+        delFlag: null,
+        createrCode: null,
+        createdate: null,
+        updaterCode: null,
+        updatedate: null,
+        deptId: null,
+        planStatus: 0,
+        planYear: null,
+        startdate: null,
+        enddate: null,
+        mentorStaffId: null,
+        planType: null,
+        remarks: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.newId)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    planList(row){
+      const newId = row.newId
+      this.$router.push("/training/bccnew/firstPlan_t/" + newId);
+    },
+    /** 新增按钮操作 */
+    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 => {
+        response.data.trainingDate=[];
+        response.data.trainingDate[0]=new Date( response.data.startdate);
+        response.data.trainingDate[1]=new Date( response.data.enddate);
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改新员工培训";
+        console.log(this.form)
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          let options={
+            text:'正在添加新员工导师带徒培训'
+          }
+          let loadingInstance = Loading.service(options);
+          this.form.startdate=this.form.trainingDate[0];
+          this.form.enddate=this.form.trainingDate[1];
+          if (this.form.newId != null) {
+            updateTsnew(this.form).then(response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+              this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
+                loadingInstance.close();
+              });
+            });
+          } else {
+            addTsnew(this.form).then(response => {
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+              this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
+                loadingInstance.close();
+              });
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const newIds = row.newId || this.ids;
+      this.$confirm('是否确认删除?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function() {
+        return delTsnew(newIds);
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("删除成功");
+      })
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有新员工培训数据项?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function() {
+        return exportTsnew(queryParams);
+      }).then(response => {
+        this.download(response.msg);
+      })
+    },
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "用户导入";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      importTemplate().then(response => {
+        this.download(response.msg);
+      });
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    },
+    /** 报告附件按钮操作 */
+    handleDoc(row , fileType) {
+      this.doc.pType = fileType
+      this.doc.queryParams.pType = fileType
+      this.doc.id = row.id;
+      this.doc.title = this.$t('附件') ;
+      this.doc.open = true;
+      this.doc.queryParams.pId = row.newId
+      this.doc.pId = row.newId
+      this.getFileList()
+      this.$nextTick(() => {
+        this.$refs.doc.clearFiles()
+      })
+    },
+    getFileList (){
+      allFileList(this.doc.queryParams).then(response => {
+        response.forEach(element => {
+          element["isEdit"] = false
+        });
+        response.forEach(element => {
+          element["isAdd"] = false
+        });
+        this.doc.commonfileList = response;
+      });
+    },
+    //附件上传中处理
+    handleFileDocProgress(event, file, fileList) {
+      this.doc.file = file;
+      this.doc.isUploading = true;
+    },
+    //附件上传成功处理
+    handleFileDocSuccess(response, file, fileList) {
+      this.doc.isUploading = false;
+      this.$alert(response.msg, this.$t('导入结果'), { dangerouslyUseHTMLString: true });
+      this.getFileList()
+    },
+    // 文件下载处理
+    handleDownload(row) {
+      var name = row.fileName;
+      var url = row.fileUrl;
+      var suffix = url.substring(url.lastIndexOf("."), url.length);
+      const a = document.createElement('a')
+      a.setAttribute('download', name)
+      a.setAttribute('target', '_blank')
+      a.setAttribute('href', process.env.VUE_APP_BASE_API + url)
+      a.click()
+    },
+    openPdf(){
+      window.open(this.pdf.pdfUrl);//path是文件的全路径地址
+    },
+    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.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
+    },
+    /** 删除按钮操作 */
+    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('删除成功'));
+      })
+    },
+  }
+};
+</script>