Quellcode durchsuchen

LY 新员工培训

ly vor 2 Jahren
Ursprung
Commit
2e998df5a1

+ 16 - 2
master/src/main/java/com/ruoyi/project/training/newstaff/controller/TTnNewController.java

@@ -5,6 +5,7 @@ import java.util.List;
 import com.ruoyi.project.plant.domain.TStaffmgr;
 import com.ruoyi.project.plant.service.ITStaffmgrService;
 import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.training.newstaff.domain.TTnFirstplan;
 import com.ruoyi.project.training.newstaff.domain.TTnFirstplanTmpl;
 import com.ruoyi.project.training.newstaff.mapper.TTnFirstplanMapper;
 import com.ruoyi.project.training.newstaff.service.ITTnFirstplanTmplService;
@@ -44,8 +45,8 @@ public class TTnNewController extends BaseController
     private ITTnNewService tTnNewService;
     @Autowired
     private ITStaffmgrService tStaffmgrService;
-    @Autowired
-    private ITTnFirstplanTmplService tTnFirstplanTmplService;
+    @Resource
+    private TTnFirstplanMapper tTnFirstplanMapper;
 
 
     /**
@@ -57,6 +58,19 @@ public class TTnNewController extends BaseController
     {
         startPage();
         List<TTnNew> list = tTnNewService.selectTTnNewList(tTnNew);
+        for (TTnNew t: list
+             ) {
+            TTnFirstplan tTnFirstplan = new TTnFirstplan();
+            tTnFirstplan.setNewId(t.getNewId());
+            List<TTnFirstplan> list1 = tTnFirstplanMapper.selectTTnFirstplanList(tTnFirstplan);
+            tTnFirstplan.setPlanStatus(1l);
+            List<TTnFirstplan> list2 = tTnFirstplanMapper.selectTTnFirstplanList(tTnFirstplan);
+            if (list1.size() != 0) {
+                t.setPlanFinish( String.valueOf(list2.size()*100 / list1.size()) );
+            }else {
+                t.setPlanFinish("0");
+            }
+        }
         return getDataTable(list);
     }
 

+ 12 - 0
master/src/main/java/com/ruoyi/project/training/newstaff/domain/TTnFirstplan.java

@@ -61,6 +61,10 @@ public class TTnFirstplan extends BaseEntity
     @Excel(name = "考核情况")
     private String assess;
 
+    /** 培训状态 */
+    @Excel(name = "培训状态")
+    private Long planStatus;
+
     /** 删除状态 */
     private Long delFlag;
 
@@ -258,6 +262,14 @@ public class TTnFirstplan extends BaseEntity
         this.deptName = deptName;
     }
 
+    public Long getPlanStatus() {
+        return planStatus;
+    }
+
+    public void setPlanStatus(Long planStatus) {
+        this.planStatus = planStatus;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

+ 11 - 0
master/src/main/java/com/ruoyi/project/training/newstaff/domain/TTnNew.java

@@ -77,6 +77,9 @@ public class TTnNew extends BaseEntity
     @Excel(name = "培训类型 1-新员工 2-转岗")
     private Long planType;
 
+    /** 培训类型 1-新员工 2-转岗 */
+    private String planFinish;
+
     /** 备注 */
     @Excel(name = "备注")
     private String remarks;
@@ -253,6 +256,14 @@ public class TTnNew extends BaseEntity
         this.deptName = deptName;
     }
 
+    public String getPlanFinish() {
+        return planFinish;
+    }
+
+    public void setPlanFinish(String planFinish) {
+        this.planFinish = planFinish;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

+ 11 - 0
master/src/main/java/com/ruoyi/project/training/newstaff/domain/TTnSchoolplan.java

@@ -60,6 +60,9 @@ public class TTnSchoolplan extends BaseEntity
     /** 考核情况 */
     @Excel(name = "考核情况")
     private String assess;
+    /** 培训状态 */
+    @Excel(name = "培训状态")
+    private Long planStatus;
 
     /** 删除状态 */
     private Long delFlag;
@@ -263,6 +266,14 @@ public class TTnSchoolplan extends BaseEntity
         this.deptName = deptName;
     }
 
+    public Long getPlanStatus() {
+        return planStatus;
+    }
+
+    public void setPlanStatus(Long planStatus) {
+        this.planStatus = planStatus;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

+ 12 - 0
master/src/main/java/com/ruoyi/project/training/newstaff/domain/TTnTransferplan.java

@@ -61,6 +61,10 @@ public class TTnTransferplan extends BaseEntity
     @Excel(name = "考核情况")
     private String assess;
 
+    /** 培训状态 */
+    @Excel(name = "培训状态")
+    private Long planStatus;
+
     /** 删除状态 */
     private Long delFlag;
 
@@ -264,6 +268,14 @@ public class TTnTransferplan extends BaseEntity
         this.deptName = deptName;
     }
 
+    public Long getPlanStatus() {
+        return planStatus;
+    }
+
+    public void setPlanStatus(Long planStatus) {
+        this.planStatus = planStatus;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

+ 7 - 1
master/src/main/resources/mybatis/training/newstaff/TTnFirstplanMapper.xml

@@ -24,10 +24,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="deptId"    column="dept_id"    />
         <result property="remarks"    column="remarks"    />
         <result property="deptName" column="dept_name" />
+        <result property="planStatus"    column="plan_status"    />
+
     </resultMap>
 
     <sql id="selectTTnFirstplanVo">
-        select d.id, d.new_id, d.course_code, d.topic, d.content, d.course_day, d.course_hour, d.course_type, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks ,s.dept_name from t_tn_firstplan d
+        select d.id, d.new_id,d.plan_status, d.course_code, d.topic, d.content, d.course_day, d.course_hour, d.course_type, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks ,s.dept_name from t_tn_firstplan d
       left join sys_dept s on s.dept_id = d.dept_id
     </sql>
 
@@ -43,6 +45,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="courseType != null  and courseType != ''"> and course_type = #{courseType}</if>
             <if test="trainer != null  and trainer != ''"> and trainer = #{trainer}</if>
             <if test="courseDate != null "> and course_date = #{courseDate}</if>
+            <if test="planStatus != null "> and plan_status = #{planStatus}</if>
+
             and d.del_flag = 0
         </where>
         <!-- 数据范围过滤 -->
@@ -166,6 +170,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="updatedate != null">updatedate = #{updatedate},</if>
             <if test="deptId != null">dept_id = #{deptId},</if>
             <if test="remarks != null">remarks = #{remarks},</if>
+            <if test="planStatus != null">plan_status = #{planStatus},</if>
+
         </trim>
         where id = #{id}
     </update>

+ 8 - 1
master/src/main/resources/mybatis/training/newstaff/TTnSchoolplanMapper.xml

@@ -24,22 +24,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="deptId"    column="dept_id"    />
         <result property="remarks"    column="remarks"    />
         <result property="deptName" column="dept_name" />
+        <result property="planStatus"    column="plan_status"    />
+
     </resultMap>
 
     <sql id="selectTTnSchoolplanVo">
-        select d.id, d.new_id, d.course_code, d.topic, d.content, d.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks ,s.dept_name from t_tn_schoolplan d
+        select d.id, d.new_id,d.plan_status, d.course_code, d.topic, d.content, d.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks ,s.dept_name from t_tn_schoolplan d
       left join sys_dept s on s.dept_id = d.dept_id
     </sql>
 
     <select id="selectTTnSchoolplanList" parameterType="TTnSchoolplan" resultMap="TTnSchoolplanResult">
         <include refid="selectTTnSchoolplanVo"/>
         <where>
+            <if test="newId != null "> and new_id = #{newId}</if>
             <if test="courseCode != null  and courseCode != ''"> and course_code = #{courseCode}</if>
             <if test="topic != null  and topic != ''"> and topic = #{topic}</if>
             <if test="detailPlan != null  and detailPlan != ''"> and detail_plan = #{detailPlan}</if>
             <if test="trainer != null  and trainer != ''"> and trainer = #{trainer}</if>
             <if test="courseDate != null "> and course_date = #{courseDate}</if>
             <if test="assess != null  and assess != ''"> and assess = #{assess}</if>
+            <if test="planStatus != null "> and plan_status = #{planStatus}</if>
+
             and d.del_flag = 0
         </where>
         <!-- 数据范围过滤 -->
@@ -164,6 +169,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="updatedate != null">updatedate = #{updatedate},</if>
             <if test="deptId != null">dept_id = #{deptId},</if>
             <if test="remarks != null">remarks = #{remarks},</if>
+            <if test="planStatus != null">plan_status = #{planStatus},</if>
+
         </trim>
         where id = #{id}
     </update>

+ 7 - 1
master/src/main/resources/mybatis/training/newstaff/TTnTransferplanMapper.xml

@@ -24,10 +24,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="deptId"    column="dept_id"    />
         <result property="remarks"    column="remarks"    />
         <result property="deptName" column="dept_name" />
+        <result property="planStatus"    column="plan_status"    />
+
     </resultMap>
 
     <sql id="selectTTnTransferplanVo">
-        select d.id, d.new_id, d.course_code, d.topic, d.content, d.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks ,s.dept_name from t_tn_transferplan d
+        select d.id, d.new_id,d.plan_status, d.course_code, d.topic, d.content, d.course_day, d.course_hour, d.detail_plan, d.trainer, d.course_date, d.assess, d.del_flag, d.creater_code, d.createdate, d.updater_code, d.updatedate, d.dept_id, d.remarks ,s.dept_name from t_tn_transferplan d
       left join sys_dept s on s.dept_id = d.dept_id
     </sql>
 
@@ -36,6 +38,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <where>
             <if test="courseCode != null  and courseCode != ''"> and course_code like concat(concat('%', #{courseCode}), '%')</if>
             <if test="topic != null  and topic != ''"> and topic like concat(concat('%', #{topic}), '%')</if>
+            <if test="planStatus != null "> and plan_status = #{planStatus}</if>
+            <if test="newId != null "> and new_id = #{newId}</if>
             and d.del_flag = 0
         </where>
         <!-- 数据范围过滤 -->
@@ -160,6 +164,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="updatedate != null">updatedate = #{updatedate},</if>
             <if test="deptId != null">dept_id = #{deptId},</if>
             <if test="remarks != null">remarks = #{remarks},</if>
+            <if test="planStatus != null">plan_status = #{planStatus},</if>
+
         </trim>
         where id = #{id}
     </update>

+ 1 - 1
ui/src/views/byxhome.vue

@@ -32,7 +32,7 @@
       <el-col :xs="24" :sm="24" :lg="8">
         <div>
           <div class="card-head">
-            <span class="card-name">{{ $t('生日提醒') }}</span>
+            <span class="card-name">{{ $t('新员工培训') }}</span>
           </div>
         </div>
         <div class="chart-wrapper">

+ 20 - 78
ui/src/views/training/newstaff/firstplan/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="newId">
-        <el-input
-          v-model="queryParams.newId"
-          placeholder="请输入培训员工编号"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
       <el-form-item label="课程编号" prop="courseCode">
         <el-input
           v-model="queryParams.courseCode"
@@ -28,24 +19,6 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="培训天" prop="courseDay">
-        <el-input
-          v-model="queryParams.courseDay"
-          placeholder="请输入培训天"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="培训小时" prop="courseHour">
-        <el-input
-          v-model="queryParams.courseHour"
-          placeholder="请输入培训小时"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
       <el-form-item label="培训类型" prop="courseType">
         <el-input
           v-model="queryParams.courseType"
@@ -107,32 +80,12 @@
           @click="handleDelete"
           v-hasPermi="['newstaff:firstplan: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:firstplan: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:firstplan:export']"
-        >导出</el-button>
       </el-col>
 	  <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="唯一标识ID" align="center" prop="id" :show-overflow-tooltip="true"/>
-      <el-table-column label="培训员工编号" align="center" prop="newId" :show-overflow-tooltip="true"/>
       <el-table-column label="课程编号" align="center" prop="courseCode" :show-overflow-tooltip="true"/>
       <el-table-column label="培训主题" align="center" prop="topic" :show-overflow-tooltip="true"/>
       <el-table-column label="培训内容" align="center" prop="content" :show-overflow-tooltip="true"/>
@@ -146,7 +99,12 @@
         </template>
       </el-table-column>
       <el-table-column label="考核情况" align="center" prop="assess" :show-overflow-tooltip="true"/>
-      <el-table-column label="部门编号" align="center" prop="deptId" :show-overflow-tooltip="true"/>
+      <el-table-column label="培训状态" align="center" prop="planStatus" :formatter="planStatusFormat" >
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.planStatus == 1" size="small" type="success">已完成</el-tag>
+          <el-tag v-else-if="scope.row.planStatus == 0" size="small" type="info">未完成</el-tag>
+        </template>
+      </el-table-column>
       <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true"/>
       <el-table-column label="操作" align="center" fixed="right" width="120" class-name="small-padding fixed-width">
         <template slot-scope="scope">
@@ -179,9 +137,6 @@
     <!-- 添加或修改进组培训对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="培训员工编号" prop="newId">
-          <el-input v-model="form.newId" placeholder="请输入培训员工编号" />
-        </el-form-item>
         <el-form-item label="课程编号" prop="courseCode">
           <el-input v-model="form.courseCode" placeholder="请输入课程编号" />
         </el-form-item>
@@ -214,33 +169,15 @@
         <el-form-item label="考核情况" prop="assess">
           <el-input v-model="form.assess" placeholder="请输入考核情况" />
         </el-form-item>
-        <el-form-item label="删除状态" prop="delFlag">
-          <el-input v-model="form.delFlag" placeholder="请输入删除状态" />
-        </el-form-item>
-        <el-form-item label="创建人" prop="createrCode">
-          <el-input v-model="form.createrCode" placeholder="请输入创建人" />
-        </el-form-item>
-        <el-form-item label="创建时间" prop="createdate">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.createdate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择创建时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="修改人" prop="updaterCode">
-          <el-input v-model="form.updaterCode" placeholder="请输入修改人" />
-        </el-form-item>
-        <el-form-item label="修改时间" prop="updatedate">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.updatedate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择修改时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="部门编号" prop="deptId">
-          <el-input v-model="form.deptId" placeholder="请输入部门编号" />
+        <el-form-item label="培训状态">
+          <el-select v-model="form.planStatus" placeholder="请选择培训状态">
+            <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="remarks">
           <el-input v-model="form.remarks" placeholder="请输入备注" />
@@ -318,6 +255,8 @@ export default {
       // 部门树选项
       deptOptions: undefined,
       clientHeight:300,
+      // 培训状态字典
+      planStatusOptions: [],
       // 是否显示弹出层
       open: false,
         // 用户导入参数
@@ -368,6 +307,9 @@ export default {
           this.clientHeight = document.body.clientHeight -250
       })
     this.queryParams.newId = this.$route.params && this.$route.params.newId;
+    this.getDicts("training_newstaff_status").then(response => {
+      this.planStatusOptions = response.data;
+    });
     this.getList();
     this.getTreeselect();
   },

+ 19 - 82
ui/src/views/training/newstaff/schoolplan/index.vue

@@ -28,15 +28,6 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="讲师" prop="trainer">
-        <el-input
-          v-model="queryParams.trainer"
-          placeholder="请输入讲师"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
       <el-form-item label="培训日期" prop="courseDate">
         <el-date-picker clearable size="small" style="width: 200px"
           v-model="queryParams.courseDate"
@@ -45,15 +36,6 @@
           placeholder="选择培训日期">
         </el-date-picker>
       </el-form-item>
-      <el-form-item label="考核情况" prop="assess">
-        <el-input
-          v-model="queryParams.assess"
-          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>
@@ -90,57 +72,31 @@
           v-hasPermi="['newstaff:schoolplan: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:schoolplan: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:schoolplan:export']"
-        >导出</el-button>
-      </el-col>
+
+
 	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table v-loading="loading" :data="schoolplanList" @selection-change="handleSelectionChange" :height="clientHeight" border>
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="唯一标识ID" align="center" prop="id" :show-overflow-tooltip="true"/>
-      <el-table-column label="培训员工编号" align="center" prop="newId" :show-overflow-tooltip="true"/>
       <el-table-column label="课程编号" align="center" prop="courseCode" :show-overflow-tooltip="true"/>
       <el-table-column label="培训主题" align="center" prop="topic" :show-overflow-tooltip="true"/>
       <el-table-column label="培训内容" align="center" prop="content" :show-overflow-tooltip="true"/>
       <el-table-column label="培训天" align="center" prop="courseDay" :show-overflow-tooltip="true"/>
       <el-table-column label="培训小时" align="center" prop="courseHour" :show-overflow-tooltip="true"/>
       <el-table-column label="详细计划" align="center" prop="detailPlan" :show-overflow-tooltip="true"/>
-      <el-table-column label="讲师" align="center" prop="trainer" :show-overflow-tooltip="true"/>
       <el-table-column label="培训日期" align="center" prop="courseDate" width="100">
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.courseDate, '{y}-{m}-{d}') }}</span>
         </template>
       </el-table-column>
       <el-table-column label="考核情况" align="center" prop="assess" :show-overflow-tooltip="true"/>
-      <el-table-column label="创建人" align="center" prop="createrCode" :show-overflow-tooltip="true"/>
-      <el-table-column label="创建时间" align="center" prop="createdate" width="100">
+      <el-table-column label="培训状态" align="center" prop="planStatus" :formatter="planStatusFormat" >
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.createdate, '{y}-{m}-{d}') }}</span>
+          <el-tag v-if="scope.row.planStatus == 1" size="small" type="success">已完成</el-tag>
+          <el-tag v-else-if="scope.row.planStatus == 0" size="small" type="info">未完成</el-tag>
         </template>
       </el-table-column>
-      <el-table-column label="修改人" align="center" prop="updaterCode" :show-overflow-tooltip="true"/>
-      <el-table-column label="修改时间" align="center" prop="updatedate" width="100">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.updatedate, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="部门编号" align="center" prop="deptId" :show-overflow-tooltip="true"/>
       <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true"/>
       <el-table-column label="操作" align="center" fixed="right" width="120" class-name="small-padding fixed-width">
         <template slot-scope="scope">
@@ -173,9 +129,6 @@
     <!-- 添加或修改校招培训对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="培训员工编号" prop="newId">
-          <el-input v-model="form.newId" placeholder="请输入培训员工编号" />
-        </el-form-item>
         <el-form-item label="课程编号" prop="courseCode">
           <el-input v-model="form.courseCode" placeholder="请输入课程编号" />
         </el-form-item>
@@ -194,9 +147,6 @@
         <el-form-item label="详细计划" prop="detailPlan">
           <el-input v-model="form.detailPlan" placeholder="请输入详细计划" />
         </el-form-item>
-        <el-form-item label="讲师" prop="trainer">
-          <el-input v-model="form.trainer" placeholder="请输入讲师" />
-        </el-form-item>
         <el-form-item label="培训日期" prop="courseDate">
           <el-date-picker clearable size="small" style="width: 200px"
             v-model="form.courseDate"
@@ -208,33 +158,15 @@
         <el-form-item label="考核情况" prop="assess">
           <el-input v-model="form.assess" placeholder="请输入考核情况" />
         </el-form-item>
-        <el-form-item label="删除状态" prop="delFlag">
-          <el-input v-model="form.delFlag" placeholder="请输入删除状态" />
-        </el-form-item>
-        <el-form-item label="创建人" prop="createrCode">
-          <el-input v-model="form.createrCode" placeholder="请输入创建人" />
-        </el-form-item>
-        <el-form-item label="创建时间" prop="createdate">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.createdate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择创建时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="修改人" prop="updaterCode">
-          <el-input v-model="form.updaterCode" placeholder="请输入修改人" />
-        </el-form-item>
-        <el-form-item label="修改时间" prop="updatedate">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.updatedate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择修改时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="部门编号" prop="deptId">
-          <el-input v-model="form.deptId" placeholder="请输入部门编号" />
+        <el-form-item label="培训状态">
+          <el-select v-model="form.planStatus" placeholder="请选择培训状态">
+            <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="remarks">
           <el-input v-model="form.remarks" placeholder="请输入备注" />
@@ -312,6 +244,8 @@ export default {
       // 部门树选项
       deptOptions: undefined,
       clientHeight:300,
+      // 培训状态字典
+      planStatusOptions: [],
       // 是否显示弹出层
       open: false,
         // 用户导入参数
@@ -360,6 +294,9 @@ export default {
           this.clientHeight = document.body.clientHeight -250
       })
     this.queryParams.newId = this.$route.params && this.$route.params.newId;
+    this.getDicts("training_newstaff_status").then(response => {
+      this.planStatusOptions = response.data;
+    });
     this.getList();
     this.getTreeselect();
   },

+ 219 - 7
ui/src/views/training/newstaff/tnNew/index.vue

@@ -107,7 +107,17 @@
       <el-table-column type="selection" width="55" align="center" />
 <!--      <el-table-column label="培训员工编号" align="center" prop="staffId" :show-overflow-tooltip="true"/>-->
       <el-table-column label="新员工姓名" align="center" fixed="left" prop="staffName" :show-overflow-tooltip="true"/>
-      <el-table-column label="培训状态" align="center" prop="planStatus" :formatter="planStatusFormat" />
+      <el-table-column label="培训状态" align="center" prop="planStatus" :formatter="planStatusFormat" >
+      <template slot-scope="scope">
+        <el-tag v-if="scope.row.planStatus == 1" size="small" type="success">已完成</el-tag>
+        <el-tag v-else-if="scope.row.planStatus == 0" size="small" type="info">未完成</el-tag>
+      </template>
+      </el-table-column>
+      <el-table-column label="进度">
+        <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>
@@ -121,6 +131,16 @@
 <!--      <el-table-column label="导师员工编号" align="center" prop="mentorStaffId" :show-overflow-tooltip="true"/>-->
       <el-table-column label="导师号" align="center" prop="mentorStaffName" :show-overflow-tooltip="true"/>
       <el-table-column label="培训类型" align="center" prop="planType" :formatter="planTypeFormat" />
+      <el-table-column label="三级教育记录卡" align="center" prop="pipe">
+        <template slot-scope="scope">
+          <el-button  icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'training-three')" circle></el-button>
+        </template>
+      </el-table-column>
+      <el-table-column label="带徒协议" align="center" prop="pipe">
+        <template slot-scope="scope">
+          <el-button  icon="el-icon-folder" style="color:#6e96fa;" @click="handleDoc(scope.row , 'training-teacher')" circle></el-button>
+        </template>
+      </el-table-column>
       <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true"/>
       <el-table-column label="操作" align="center" fixed="right" width="120" class-name="small-padding fixed-width">
         <template slot-scope="scope">
@@ -152,9 +172,6 @@
     <!-- 添加或修改新员工培训对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="培训员工编号" prop="staffId">
-          <el-input v-model="form.staffId" placeholder="请输入培训员工编号" />
-        </el-form-item>
         <el-form-item label="培训员工" prop="mentorStaffId">
           <el-select v-model="form.staffId" filterable :placeholder="$t('请选择')+$t('培训员工')">
             <el-option
@@ -192,9 +209,6 @@
             placeholder="选择结束时间">
           </el-date-picker>
         </el-form-item>
-        <el-form-item label="导师员工编号" prop="mentorStaffId">
-          <el-input v-model="form.mentorStaffId" placeholder="请输入导师员工编号" />
-        </el-form-item>
         <el-form-item label="导师员工" prop="mentorStaffId">
           <el-select v-model="form.mentorStaffId" filterable :placeholder="$t('请选择')+$t('导师员工')">
             <el-option
@@ -257,6 +271,88 @@
               <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>
 
@@ -266,6 +362,7 @@ import { treeselect } from "@/api/system/dept";
 import { getToken } from "@/utils/auth";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import {allFileList, delCommonfile} from "@/api/common/commonfile";
 
 export default {
   name: "TnNew",
@@ -313,6 +410,41 @@ export default {
             // 上传的地址
             url: process.env.VUE_APP_BASE_API + "/newstaff/tnNew/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,
@@ -513,7 +645,87 @@ export default {
       // 提交上传文件
       submitFileForm() {
           this.$refs.upload.submit();
+      },
+    /** 报告附件按钮操作 */
+    handleDoc(row , fileType) {
+      var workType = "";
+      if (fileType === "byxworklicense-boiler"){
+        workType = this.$t('裂解(裂化)');
+      }else if (fileType === "byxworklicense-compression"){
+        workType = this.$t('压力容器');
+      }else if (fileType === "byxworklicense-separation"){
+        workType = this.$t('压力管道');
+      }else if (fileType === "byxworklicense-pguaeu"){
+        workType = '';
       }
+      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()
+      })
+    },
+    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>

+ 17 - 64
ui/src/views/training/newstaff/transferplan/index.vue

@@ -54,58 +54,30 @@
           @click="handleDelete"
           v-hasPermi="['newstaff:transferplan: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:transferplan: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:transferplan:export']"
-        >导出</el-button>
       </el-col>
 	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table v-loading="loading" :data="transferplanList" @selection-change="handleSelectionChange" :height="clientHeight" border>
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="唯一标识ID" align="center" prop="id" :show-overflow-tooltip="true"/>
-      <el-table-column label="培训员工编号" align="center" prop="newId" :show-overflow-tooltip="true"/>
       <el-table-column label="课程编号" align="center" prop="courseCode" :show-overflow-tooltip="true"/>
       <el-table-column label="培训主题" align="center" prop="topic" :show-overflow-tooltip="true"/>
       <el-table-column label="培训内容" align="center" prop="content" :show-overflow-tooltip="true"/>
       <el-table-column label="培训天" align="center" prop="courseDay" :show-overflow-tooltip="true"/>
       <el-table-column label="培训小时" align="center" prop="courseHour" :show-overflow-tooltip="true"/>
       <el-table-column label="详细计划" align="center" prop="detailPlan" :show-overflow-tooltip="true"/>
-      <el-table-column label="讲师" align="center" prop="trainer" :show-overflow-tooltip="true"/>
       <el-table-column label="培训日期" align="center" prop="courseDate" width="100">
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.courseDate, '{y}-{m}-{d}') }}</span>
         </template>
       </el-table-column>
       <el-table-column label="考核情况" align="center" prop="assess" :show-overflow-tooltip="true"/>
-      <el-table-column label="创建人" align="center" prop="createrCode" :show-overflow-tooltip="true"/>
-      <el-table-column label="创建时间" align="center" prop="createdate" width="100">
+      <el-table-column label="培训状态" align="center" prop="planStatus" :formatter="planStatusFormat" >
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.createdate, '{y}-{m}-{d}') }}</span>
+          <el-tag v-if="scope.row.planStatus == 1" size="small" type="success">已完成</el-tag>
+          <el-tag v-else-if="scope.row.planStatus == 0" size="small" type="info">未完成</el-tag>
         </template>
       </el-table-column>
-      <el-table-column label="修改人" align="center" prop="updaterCode" :show-overflow-tooltip="true"/>
-      <el-table-column label="修改时间" align="center" prop="updatedate" width="100">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.updatedate, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="部门编号" align="center" prop="deptId" :show-overflow-tooltip="true"/>
       <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true"/>
       <el-table-column label="操作" align="center" fixed="right" width="120" class-name="small-padding fixed-width">
         <template slot-scope="scope">
@@ -138,9 +110,6 @@
     <!-- 添加或修改转岗培训对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="培训员工编号" prop="newId">
-          <el-input v-model="form.newId" placeholder="请输入培训员工编号" />
-        </el-form-item>
         <el-form-item label="课程编号" prop="courseCode">
           <el-input v-model="form.courseCode" placeholder="请输入课程编号" />
         </el-form-item>
@@ -159,9 +128,6 @@
         <el-form-item label="详细计划" prop="detailPlan">
           <el-input v-model="form.detailPlan" placeholder="请输入详细计划" />
         </el-form-item>
-        <el-form-item label="讲师" prop="trainer">
-          <el-input v-model="form.trainer" placeholder="请输入讲师" />
-        </el-form-item>
         <el-form-item label="培训日期" prop="courseDate">
           <el-date-picker clearable size="small" style="width: 200px"
             v-model="form.courseDate"
@@ -173,33 +139,15 @@
         <el-form-item label="考核情况" prop="assess">
           <el-input v-model="form.assess" placeholder="请输入考核情况" />
         </el-form-item>
-        <el-form-item label="删除状态" prop="delFlag">
-          <el-input v-model="form.delFlag" placeholder="请输入删除状态" />
-        </el-form-item>
-        <el-form-item label="创建人" prop="createrCode">
-          <el-input v-model="form.createrCode" placeholder="请输入创建人" />
-        </el-form-item>
-        <el-form-item label="创建时间" prop="createdate">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.createdate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择创建时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="修改人" prop="updaterCode">
-          <el-input v-model="form.updaterCode" placeholder="请输入修改人" />
-        </el-form-item>
-        <el-form-item label="修改时间" prop="updatedate">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.updatedate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择修改时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="部门编号" prop="deptId">
-          <el-input v-model="form.deptId" placeholder="请输入部门编号" />
+        <el-form-item label="培训状态">
+          <el-select v-model="form.planStatus" placeholder="请选择培训状态">
+            <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="remarks">
           <el-input v-model="form.remarks" placeholder="请输入备注" />
@@ -277,6 +225,8 @@ export default {
       // 部门树选项
       deptOptions: undefined,
       clientHeight:300,
+      // 培训状态字典
+      planStatusOptions: [],
       // 是否显示弹出层
       open: false,
         // 用户导入参数
@@ -321,6 +271,9 @@ export default {
           this.clientHeight = document.body.clientHeight -250
       })
     this.queryParams.newId = this.$route.params && this.$route.params.newId;
+    this.getDicts("training_newstaff_status").then(response => {
+      this.planStatusOptions = response.data;
+    });
     this.getList();
     this.getTreeselect();
   },