Bladeren bron

王子文 专项培养
1) 新增培养计划时,去掉学习状态下拉,状态默认未开始
2) 结束学习时,加附件上传功能,提供学员上传反馈附件
3) 培养计划详细明细前端页面
4) 修改“专项培训学习状态”字典
5) 数据库题库表新增学员反馈的三个问题

wangggziwen 3 jaren geleden
bovenliggende
commit
80e663e82e

+ 113 - 0
master/src/main/java/com/ruoyi/project/training/spec/controller/TStQuestionAnswerController.java

@@ -0,0 +1,113 @@
+package com.ruoyi.project.training.spec.controller;
+
+import java.util.List;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.project.training.spec.domain.TStQuestionAnswer;
+import com.ruoyi.project.training.spec.service.ITStQuestionAnswerService;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.web.page.TableDataInfo;
+
+/**
+ * 专项培养反馈问题答案Controller
+ *
+ * @author ruoyi
+ * @date 2022-05-03
+ */
+@RestController
+@RequestMapping("/spec/answer")
+public class TStQuestionAnswerController extends BaseController
+{
+    @Autowired
+    private ITStQuestionAnswerService tStQuestionAnswerService;
+
+    /**
+     * 获取专项培养反馈问题答案详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('spec:answer:query')")
+    @GetMapping
+    public AjaxResult getInfo(TStQuestionAnswer tStQuestionAnswer)
+    {
+        return AjaxResult.success(tStQuestionAnswerService.selectTStQuestionAnswerByPlanIdAndQuestionId(tStQuestionAnswer));
+    }
+
+    /**
+     * 查询专项培养反馈问题答案列表
+     */
+    @PreAuthorize("@ss.hasPermi('spec:answer:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TStQuestionAnswer tStQuestionAnswer)
+    {
+        startPage();
+        List<TStQuestionAnswer> list = tStQuestionAnswerService.selectTStQuestionAnswerList(tStQuestionAnswer);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出专项培养反馈问题答案列表
+     */
+    @PreAuthorize("@ss.hasPermi('spec:answer:export')")
+    @Log(title = "专项培养反馈问题答案", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(TStQuestionAnswer tStQuestionAnswer)
+    {
+        List<TStQuestionAnswer> list = tStQuestionAnswerService.selectTStQuestionAnswerList(tStQuestionAnswer);
+        ExcelUtil<TStQuestionAnswer> util = new ExcelUtil<TStQuestionAnswer>(TStQuestionAnswer.class);
+        return util.exportExcel(list, "answer");
+    }
+
+    /**
+     * 获取专项培养反馈问题答案详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('spec:answer:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(tStQuestionAnswerService.selectTStQuestionAnswerById(id));
+    }
+
+    /**
+     * 新增专项培养反馈问题答案
+     */
+    @PreAuthorize("@ss.hasPermi('spec:answer:add')")
+    @Log(title = "专项培养反馈问题答案", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TStQuestionAnswer tStQuestionAnswer)
+    {
+        return toAjax(tStQuestionAnswerService.insertTStQuestionAnswer(tStQuestionAnswer));
+    }
+
+    /**
+     * 修改专项培养反馈问题答案
+     */
+    @PreAuthorize("@ss.hasPermi('spec:answer:edit')")
+    @Log(title = "专项培养反馈问题答案", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TStQuestionAnswer tStQuestionAnswer)
+    {
+        return toAjax(tStQuestionAnswerService.updateTStQuestionAnswer(tStQuestionAnswer));
+    }
+
+    /**
+     * 删除专项培养反馈问题答案
+     */
+    @PreAuthorize("@ss.hasPermi('spec:answer:remove')")
+    @Log(title = "专项培养反馈问题答案", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(tStQuestionAnswerService.deleteTStQuestionAnswerByIds(ids));
+    }
+}

+ 79 - 0
master/src/main/java/com/ruoyi/project/training/spec/domain/TStQuestionAnswer.java

@@ -0,0 +1,79 @@
+package com.ruoyi.project.training.spec.domain;
+
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.framework.web.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 专项培养反馈问题答案对象 t_st_question_answer
+ *
+ * @author ruoyi
+ * @date 2022-05-03
+ */
+public class TStQuestionAnswer extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    private Long id;
+
+    /** 培养计划id */
+    @Excel(name = "培养计划id")
+    private Long planId;
+
+    /** 问题id */
+    @Excel(name = "问题id")
+    private Long questionId;
+
+    /** 答案 */
+    @Excel(name = "答案")
+    private String answer;
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+    public void setPlanId(Long planId)
+    {
+        this.planId = planId;
+    }
+
+    public Long getPlanId()
+    {
+        return planId;
+    }
+    public void setQuestionId(Long questionId)
+    {
+        this.questionId = questionId;
+    }
+
+    public Long getQuestionId()
+    {
+        return questionId;
+    }
+    public void setAnswer(String answer)
+    {
+        this.answer = answer;
+    }
+
+    public String getAnswer()
+    {
+        return answer;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("planId", getPlanId())
+            .append("questionId", getQuestionId())
+            .append("answer", getAnswer())
+            .toString();
+    }
+}

+ 71 - 0
master/src/main/java/com/ruoyi/project/training/spec/mapper/TStQuestionAnswerMapper.java

@@ -0,0 +1,71 @@
+package com.ruoyi.project.training.spec.mapper;
+
+import java.util.List;
+import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
+import com.ruoyi.project.training.spec.domain.TStQuestionAnswer;
+
+/**
+ * 专项培养反馈问题答案Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2022-05-03
+ */
+public interface TStQuestionAnswerMapper
+{
+    /**
+     * 查询专项培养反馈问题答案
+     *
+     * @param tStQuestionAnswer 专项培养反馈问题答案
+     * @return 专项培养反馈问题答案
+     */
+    public TStQuestionAnswer selectTStQuestionAnswerByPlanIdAndQuestionId(TStQuestionAnswer tStQuestionAnswer);
+
+    /**
+     * 查询专项培养反馈问题答案
+     * 
+     * @param id 专项培养反馈问题答案ID
+     * @return 专项培养反馈问题答案
+     */
+    public TStQuestionAnswer selectTStQuestionAnswerById(Long id);
+
+    /**
+     * 查询专项培养反馈问题答案列表
+     * 
+     * @param tStQuestionAnswer 专项培养反馈问题答案
+     * @return 专项培养反馈问题答案集合
+     */
+    @DataScope(deptAlias = "d")
+    public List<TStQuestionAnswer> selectTStQuestionAnswerList(TStQuestionAnswer tStQuestionAnswer);
+
+    /**
+     * 新增专项培养反馈问题答案
+     * 
+     * @param tStQuestionAnswer 专项培养反馈问题答案
+     * @return 结果
+     */
+    public int insertTStQuestionAnswer(TStQuestionAnswer tStQuestionAnswer);
+
+    /**
+     * 修改专项培养反馈问题答案
+     * 
+     * @param tStQuestionAnswer 专项培养反馈问题答案
+     * @return 结果
+     */
+    public int updateTStQuestionAnswer(TStQuestionAnswer tStQuestionAnswer);
+
+    /**
+     * 删除专项培养反馈问题答案
+     * 
+     * @param id 专项培养反馈问题答案ID
+     * @return 结果
+     */
+    public int deleteTStQuestionAnswerById(Long id);
+
+    /**
+     * 批量删除专项培养反馈问题答案
+     * 
+     * @param ids 需要删除的数据ID
+     * @return 结果
+     */
+    public int deleteTStQuestionAnswerByIds(Long[] ids);
+}

+ 69 - 0
master/src/main/java/com/ruoyi/project/training/spec/service/ITStQuestionAnswerService.java

@@ -0,0 +1,69 @@
+package com.ruoyi.project.training.spec.service;
+
+import java.util.List;
+import com.ruoyi.project.training.spec.domain.TStQuestionAnswer;
+
+/**
+ * 专项培养反馈问题答案Service接口
+ * 
+ * @author ruoyi
+ * @date 2022-05-03
+ */
+public interface ITStQuestionAnswerService
+{
+    /**
+     * 查询专项培养反馈问题答案
+     *
+     * @param tStQuestionAnswer 专项培养反馈问题答案
+     * @return 专项培养反馈问题答案
+     */
+    public TStQuestionAnswer selectTStQuestionAnswerByPlanIdAndQuestionId(TStQuestionAnswer tStQuestionAnswer);
+
+    /**
+     * 查询专项培养反馈问题答案
+     * 
+     * @param id 专项培养反馈问题答案ID
+     * @return 专项培养反馈问题答案
+     */
+    public TStQuestionAnswer selectTStQuestionAnswerById(Long id);
+
+    /**
+     * 查询专项培养反馈问题答案列表
+     * 
+     * @param tStQuestionAnswer 专项培养反馈问题答案
+     * @return 专项培养反馈问题答案集合
+     */
+    public List<TStQuestionAnswer> selectTStQuestionAnswerList(TStQuestionAnswer tStQuestionAnswer);
+
+    /**
+     * 新增专项培养反馈问题答案
+     * 
+     * @param tStQuestionAnswer 专项培养反馈问题答案
+     * @return 结果
+     */
+    public int insertTStQuestionAnswer(TStQuestionAnswer tStQuestionAnswer);
+
+    /**
+     * 修改专项培养反馈问题答案
+     * 
+     * @param tStQuestionAnswer 专项培养反馈问题答案
+     * @return 结果
+     */
+    public int updateTStQuestionAnswer(TStQuestionAnswer tStQuestionAnswer);
+
+    /**
+     * 批量删除专项培养反馈问题答案
+     * 
+     * @param ids 需要删除的专项培养反馈问题答案ID
+     * @return 结果
+     */
+    public int deleteTStQuestionAnswerByIds(Long[] ids);
+
+    /**
+     * 删除专项培养反馈问题答案信息
+     * 
+     * @param id 专项培养反馈问题答案ID
+     * @return 结果
+     */
+    public int deleteTStQuestionAnswerById(Long id);
+}

+ 98 - 0
master/src/main/java/com/ruoyi/project/training/spec/service/impl/TStQuestionAnswerServiceImpl.java

@@ -0,0 +1,98 @@
+package com.ruoyi.project.training.spec.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.project.training.spec.mapper.TStQuestionAnswerMapper;
+import com.ruoyi.project.training.spec.domain.TStQuestionAnswer;
+import com.ruoyi.project.training.spec.service.ITStQuestionAnswerService;
+
+/**
+ * 专项培养反馈问题答案Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2022-05-03
+ */
+@Service
+public class TStQuestionAnswerServiceImpl implements ITStQuestionAnswerService
+{
+    @Autowired
+    private TStQuestionAnswerMapper tStQuestionAnswerMapper;
+
+    @Override
+    public TStQuestionAnswer selectTStQuestionAnswerByPlanIdAndQuestionId(TStQuestionAnswer tStQuestionAnswer) {
+        return tStQuestionAnswerMapper.selectTStQuestionAnswerByPlanIdAndQuestionId(tStQuestionAnswer);
+    }
+
+    /**
+     * 查询专项培养反馈问题答案
+     *
+     * @param id 专项培养反馈问题答案ID
+     * @return 专项培养反馈问题答案
+     */
+    @Override
+    public TStQuestionAnswer selectTStQuestionAnswerById(Long id)
+    {
+        return tStQuestionAnswerMapper.selectTStQuestionAnswerById(id);
+    }
+
+    /**
+     * 查询专项培养反馈问题答案列表
+     *
+     * @param tStQuestionAnswer 专项培养反馈问题答案
+     * @return 专项培养反馈问题答案
+     */
+    @Override
+    public List<TStQuestionAnswer> selectTStQuestionAnswerList(TStQuestionAnswer tStQuestionAnswer)
+    {
+        return tStQuestionAnswerMapper.selectTStQuestionAnswerList(tStQuestionAnswer);
+    }
+
+    /**
+     * 新增专项培养反馈问题答案
+     *
+     * @param tStQuestionAnswer 专项培养反馈问题答案
+     * @return 结果
+     */
+    @Override
+    public int insertTStQuestionAnswer(TStQuestionAnswer tStQuestionAnswer)
+    {
+        return tStQuestionAnswerMapper.insertTStQuestionAnswer(tStQuestionAnswer);
+    }
+
+    /**
+     * 修改专项培养反馈问题答案
+     *
+     * @param tStQuestionAnswer 专项培养反馈问题答案
+     * @return 结果
+     */
+    @Override
+    public int updateTStQuestionAnswer(TStQuestionAnswer tStQuestionAnswer)
+    {
+        return tStQuestionAnswerMapper.updateTStQuestionAnswer(tStQuestionAnswer);
+    }
+
+    /**
+     * 批量删除专项培养反馈问题答案
+     *
+     * @param ids 需要删除的专项培养反馈问题答案ID
+     * @return 结果
+     */
+    @Override
+    public int deleteTStQuestionAnswerByIds(Long[] ids)
+    {
+        return tStQuestionAnswerMapper.deleteTStQuestionAnswerByIds(ids);
+    }
+
+    /**
+     * 删除专项培养反馈问题答案信息
+     *
+     * @param id 专项培养反馈问题答案ID
+     * @return 结果
+     */
+    @Override
+    public int deleteTStQuestionAnswerById(Long id)
+    {
+        return tStQuestionAnswerMapper.deleteTStQuestionAnswerById(id);
+    }
+}

+ 81 - 0
master/src/main/resources/mybatis/training/spec/TStQuestionAnswerMapper.xml

@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.project.training.spec.mapper.TStQuestionAnswerMapper">
+    
+    <resultMap type="TStQuestionAnswer" id="TStQuestionAnswerResult">
+        <result property="id"    column="id"    />
+        <result property="planId"    column="plan_id"    />
+        <result property="questionId"    column="question_id"    />
+        <result property="answer"    column="answer"    />
+        <result property="deptName" column="dept_name" />
+    </resultMap>
+
+    <sql id="selectTStQuestionAnswerVo">
+        select d.id, d.plan_id, d.question_id, d.answer from t_st_question_answer d
+    </sql>
+
+    <select id="selectTStQuestionAnswerList" parameterType="TStQuestionAnswer" resultMap="TStQuestionAnswerResult">
+        <include refid="selectTStQuestionAnswerVo"/>
+        <where>  
+            <if test="planId != null "> and plan_id = #{planId}</if>
+            <if test="questionId != null "> and question_id = #{questionId}</if>
+            <if test="answer != null  and answer != ''"> and answer = #{answer}</if>
+            and d.del_flag = 0
+        </where>
+        <!-- 数据范围过滤 -->
+        ${params.dataScope}
+    </select>
+
+    <select id="selectTStQuestionAnswerByPlanIdAndQuestionId" parameterType="TStQuestionAnswer" resultMap="TStQuestionAnswerResult">
+        <include refid="selectTStQuestionAnswerVo"/>
+        where plan_id = #{planId} and question_id = #{questionId}
+    </select>
+    
+    <select id="selectTStQuestionAnswerById" parameterType="Long" resultMap="TStQuestionAnswerResult">
+        <include refid="selectTStQuestionAnswerVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTStQuestionAnswer" parameterType="TStQuestionAnswer">
+        <selectKey keyProperty="id" resultType="long" order="BEFORE">
+            SELECT seq_t_st_question_answer.NEXTVAL as id FROM DUAL
+        </selectKey>
+        insert into t_st_question_answer
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="planId != null">plan_id,</if>
+            <if test="questionId != null">question_id,</if>
+            <if test="answer != null">answer,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="planId != null">#{planId},</if>
+            <if test="questionId != null">#{questionId},</if>
+            <if test="answer != null">#{answer},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTStQuestionAnswer" parameterType="TStQuestionAnswer">
+        update t_st_question_answer
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="planId != null">plan_id = #{planId},</if>
+            <if test="questionId != null">question_id = #{questionId},</if>
+            <if test="answer != null">answer = #{answer},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <update id="deleteTStQuestionAnswerById" parameterType="Long">
+        update t_st_question_answer set del_flag = 2 where id = #{id}
+    </update>
+
+    <update id="deleteTStQuestionAnswerByIds" parameterType="String">
+        update t_st_question_answer set del_flag = 2 where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+    
+</mapper>

+ 62 - 0
ui/src/api/training/spec/answer.js

@@ -0,0 +1,62 @@
+import request from '@/utils/request'
+
+// 查询专项培养反馈问题答案详细
+export function getAnswerByPlanIdAndQuestionId(query) {
+  return request({
+    url: '/spec/answer/',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询专项培养反馈问题答案列表
+export function listAnswer(query) {
+  return request({
+    url: '/spec/answer/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询专项培养反馈问题答案详细
+export function getAnswer(id) {
+  return request({
+    url: '/spec/answer/' + id,
+    method: 'get'
+  })
+}
+
+// 新增专项培养反馈问题答案
+export function addAnswer(data) {
+  return request({
+    url: '/spec/answer',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改专项培养反馈问题答案
+export function updateAnswer(data) {
+  return request({
+    url: '/spec/answer',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除专项培养反馈问题答案
+export function delAnswer(id) {
+  return request({
+    url: '/spec/answer/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出专项培养反馈问题答案
+export function exportAnswer(query) {
+  return request({
+    url: '/spec/answer/export',
+    method: 'get',
+    params: query
+  })
+}

+ 217 - 376
ui/src/views/training/spec/myplan/index.vue

@@ -1,114 +1,5 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="课程内容" prop="plantName">
-        <el-input
-          v-model="queryParams.plantName"
-          placeholder="请输入课程内容"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </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 label="学时" prop="classHour">
-        <el-input
-          v-model="queryParams.classHour"
-          placeholder="请输入学时"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item> -->
-      <el-form-item label="学习状态" prop="studyState">
-        <el-select v-model="queryParams.studyState" placeholder="请选择学习状态" clearable size="small">
-          <el-option
-            v-for="dict in studyStateOptions"
-            :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>
-      </el-form-item>
-    </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="['spec:plan: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="['spec:plan: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="['spec:plan:remove']"
-        >删除</el-button>
-      </el-col>
-        <el-col :span="1.5">
-            <el-button
-                    type="info"
-                    icon="el-icon-upload2"
-                    size="mini"
-                    @click="handleImport"
-                    v-hasPermi="['spec:plan:edit']"
-            >导入</el-button>
-        </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['spec:plan:export']"
-        >导出</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          size="mini"
-          :disabled="multiple"
-          @click="addAprrove('')"
-        >{{ $t('提交申请') }}</el-button>
-      </el-col>
-	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
-    </el-row> -->
     <!-- 表格 -->
     <el-table v-loading="loading" :data="planList" @selection-change="handleSelectionChange" :height="clientHeight" border :cell-style="tableCellStyle">
       <el-table-column type="selection" width="55" align="center" />
@@ -132,37 +23,28 @@
       <el-table-column label="学习状态" align="center" prop="studyState" :formatter="studyStateFormat" width="120"/>
       <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-s-flag"
-            v-hasPermi="['spec:plan:edit']"
-            @click="handleStart(scope.row)"
-            v-if="scope.row.studyState == 0"
-          >开始</el-button>
           <el-button
             size="mini"
             type="text"
             icon="el-icon-circle-check"
             v-hasPermi="['spec:plan:edit']"
-            @click="handleEnd(scope.row)"
-            v-if="scope.row.studyState == 1"
-          >结束</el-button>
+            @click="handleFeedback(scope.row)"
+            v-if="scope.row.studyState == 0"
+          >反馈</el-button>
           <el-button
             size="mini"
             type="text"
-            icon="el-icon-view"
+            icon="el-icon-document"
+            @click="handleDoc(scope.row)"
             v-hasPermi="['spec:plan:edit']"
-            @click="handleDetail(scope.row)"
-            v-if="scope.row.studyState == 2 || scope.row.studyState == 3"
-          >详情</el-button>
+          >学员附件</el-button>
           <el-button
             size="mini"
             type="text"
             icon="el-icon-document"
             @click="handleDoc(scope.row)"
             v-hasPermi="['spec:plan:edit']"
-          >附件</el-button>
+          >学习资料</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -174,109 +56,8 @@
       :limit.sync="queryParams.pageSize"
       @pagination="getList"
     />
-    <!-- 添加或修改培训计划对话框 -->
-    <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" v-if="this.operation=='add'">
-          <el-select v-model="form.staffId" placeholder="请选择学员">
-            <el-option
-              v-for="successor in successorOptions"
-              :key="successor.key"
-              :label="successor.value"
-              :value="successor.key"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <!-- 修改对话框显示员工姓名 -->
-        <el-form-item label="员工" prop="staffName" v-if="this.operation=='modify'">
-          <el-input v-model="form.staffName" readonly />
-        </el-form-item>
-        <el-form-item label="课程内容" prop="plantName">
-          <el-input v-model="form.plantName" placeholder="请输入课程内容" />
-        </el-form-item>
-        <el-form-item label="部门编号" prop="deptId">
-          <el-input v-model="form.deptId" placeholder="请输入部门编号" />
-        </el-form-item>
-        <el-form-item label="开始日期" prop="startDate">
-          <el-date-picker clearable size="small" style="width: 200px"
-            v-model="form.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="form.endDate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择结束日期">
-          </el-date-picker>
-        </el-form-item>
-        <!-- <el-form-item label="学时" prop="classHour">
-          <el-input v-model="form.classHour" placeholder="请输入学时" />
-        </el-form-item> -->
-        <el-form-item label="具体内容">
-          <!-- <editor v-model="form.classContent" :min-height="192"/> -->
-          <el-input
-            type="textarea"
-            :rows="6"
-            placeholder="请输入内容"
-            v-model="form.classContent">
-          </el-input>
-        </el-form-item>
-        <el-form-item label="学习状态" prop="studyState" v-if="this.operation=='modify'">
-          <el-select v-model="form.studyState" placeholder="请选择学习状态">
-            <el-option
-              v-for="dict in studyStateOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-          <el-form-item label="归属部门" prop="deptId">
-              <treeselect v-model="form.deptId" :options="deptOptions" :show-count="true" 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 :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 v-dialogDrag :title="doc.title" :visible.sync="doc.open" width="700px" append-to-body>
+    <!-- 附件对话框 -->
+    <el-dialog v-dialogDrag :title="doc.title" :visible.sync="doc.open" width="800px" append-to-body>
       <el-upload
         ref="doc"
         :limit="50"
@@ -304,7 +85,7 @@
         </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" width="120" class-name="small-padding fixed-width">
+        <el-table-column :label="$t('操作')" align="center" width="180" class-name="small-padding fixed-width">
           <template slot-scope="scope">
             <el-button
               v-if="scope.row.fileName.endsWith('pdf')"
@@ -339,62 +120,107 @@
         <el-button @click="doc.open = false">{{ $t('返 回') }}</el-button>
       </div>
     </el-dialog>
-    <!-- 查看培训详情对话框 -->
-    <el-dialog v-dialogDrag :title="detail.title" :visible.sync="detail.open" width="700px" append-to-body>
-      <el-table :data="tableData" border style="width: 100%">
-        <el-table-column prop="id" label="编号" width="50"></el-table-column>
-        <el-table-column prop="question" label="问题" width="250"></el-table-column>
-        <el-table-column prop="answer" label="答案"></el-table-column>
-      </el-table>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="detail.open = false">{{ $t('返 回') }}</el-button>
-      </div>
-    </el-dialog>
     <!-- 反馈对话框 -->
-    <el-dialog v-dialogDrag :title="feedback.title" :visible.sync="feedback.open" width="400px" append-to-body>
-      <div>{{feedbackParams.question1}}</div>
-      <el-input v-model="feedbackParams.question1" type="hidden"></el-input>
-      <el-input v-model="feedbackParams.answer1" placeholder="请输入答案" type="textarea" rows="3"></el-input>
-      <div style="margin-top:20px;">{{feedbackParams.question2}}</div>
-      <el-input value="feedbackParams.question2" type="hidden"></el-input>
-      <el-input v-model="feedbackParams.answer2" placeholder="请输入答案" type="textarea" rows="3"></el-input>
-      <div style="margin-top:20px;">{{feedbackParams.question3}}</div>
-      <el-input value="feedbackParams.question3" type="hidden"></el-input>
-      <el-input v-model="feedbackParams.answer3" placeholder="请输入答案" type="textarea" rows="3"></el-input>
+    <el-dialog v-dialogDrag :title="feedbackDialog.title" :visible.sync="feedbackDialog.open" width="800px" 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" width="180" 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
+              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-form>
+        <el-form-item label="我学到了什么?">
+          <el-input v-model="feedbackParams.answer1" placeholder="请输入" type="textarea"></el-input>
+        </el-form-item>
+        <el-form-item label="理论学习和平时操作的不同之处?">
+          <el-input v-model="feedbackParams.answer2" placeholder="请输入" type="textarea"></el-input>
+        </el-form-item>
+        <el-form-item label="完成此课程后有什么更好的合理化建议?">
+          <el-input v-model="feedbackParams.answer3" placeholder="请输入" type="textarea"></el-input>
+        </el-form-item>
+      </el-form>
       <div slot="footer" class="dialog-footer">
-        <el-button @click="handleAddFeedback()">{{ $t('提 交') }}</el-button>
-        <el-button @click="feedback.open = false">{{ $t('返 回') }}</el-button>
+        <el-button @click="handleSubmitFeedback()">{{ $t('保 存') }}</el-button>
+        <el-button @click="feedbackDialog.open = false">{{ $t('返 回') }}</el-button>
       </div>
     </el-dialog>
   </div>
 </template>
 
 <script>
-import { getFeedback, addFeedback } from "@/api/training/spec/planfeedback";
-import { getPlan, delPlan, addPlan, updatePlan, updatePlan2,exportPlan, importTemplate, listPlanByStaffId } from "@/api/training/spec/plan";
-import { allFileList, delCommonfile } from "@/api/common/commonfile";
+import { 
+  updateAnswer,
+  addAnswer,
+  getAnswerByPlanIdAndQuestionId 
+} from "@/api/training/spec/answer";
+import { 
+  getPlan, 
+  delPlan, 
+  addPlan, 
+  updatePlan, 
+  exportPlan, 
+  importTemplate, 
+  listPlanByStaffId 
+} from "@/api/training/spec/plan";
+import { 
+  allFileList, 
+  delCommonfile 
+} from "@/api/common/commonfile";
 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";
 
 export default {
-  name: "Plan",
+  name: "MyPlan",
   components: { Treeselect },
   data() {
     return {
-      // 表格数据
-      tableData: [],
-      // 反馈对话框参数
-      feedbackParams: {
-        planId: 0,
-        question1: "我学到了什么?",
-        question2: "理论学习和平时操作的不同之处?",
-        question3: "完成此课程后有什么更好的合理化建议?",
-        answer1: "",
-        answer2: "",
-        answer3: ""
-      },
       // 遮罩层
       loading: true,
       // 选中数组
@@ -421,27 +247,6 @@ export default {
       open: false,
       // 学习状态字典
       studyStateOptions: [],
-      // 学员列表
-      successorOptions: [],
-      // 包含导师ID的查询对象
-      queryObject: {
-        mentorStaffId: "00427"
-      },
-      // 用户导入参数
-      upload: {
-          // 是否显示弹出层(用户导入)
-          open: false,
-          // 弹出层标题(用户导入)
-          title: "",
-          // 是否禁用上传
-          isUploading: false,
-          // 是否更新已经存在的用户数据
-          updateSupport: 0,
-          // 设置上传的请求头部
-          headers: { Authorization: "Bearer " + getToken() },
-          // 上传的地址
-          url: process.env.VUE_APP_BASE_API + "/spec/plan/importData"
-      },
       // 报告附件参数
       doc: {
         file: "",
@@ -467,25 +272,26 @@ export default {
         pType: 'plan',
         pId: null
       },
-      // 查看培训详情参数
-      detail: {
+      // 反馈对话框参数
+      feedbackDialog: {
         // 是否显示弹出层(报告附件)
         open: false,
         // 弹出层标题(报告附件)
         title: ""
       },
       // 反馈参数
-      feedback: {
-        // 是否显示弹出层(报告附件)
-        open: false,
-        // 弹出层标题(报告附件)
-        title: ""
+      feedbackParams: {
+        answer1: null,
+        answer2: null,
+        answer3: null
       },
+      // 计划id
+      planId: null,
       // 查询参数
       queryParams: {
         pageNum: 1,
         pageSize: 20,
-        staffId: "00431",
+        staffId: null,
         plantName: null,
         startDate: null,
         endDate: null,
@@ -508,18 +314,6 @@ export default {
           pageTotalNum: 1,
           loadedRatio: 0,
       },
-      // 开始参数
-      startParams: {
-        id: 0,
-        studyState: 1,
-        planId: null
-      },
-      // 结束参数
-      endParams: {
-        id: 0,
-        studyState: 3,
-        dateOfCompletion: null
-      },
     };
   },
   watch: {
@@ -540,93 +334,140 @@ export default {
     });
   },
   methods: {
-    // 单元格样式
-    tableCellStyle (row, column, rowIndex, columnIndex) {
+    /** 单元格样式 */
+    tableCellStyle(row, column, rowIndex, columnIndex) {
       if (row.column.label === "实际完成日期" && row.row.dateOfCompletion > row.row.endDate) {
         return "background: #FFEEEE"
       }
     },
-    /** 结束学习处理 */
-    handleEnd(row) {
-      this.handleFeedback(row);
-    },
-    /** 反馈处理 */
+
+    /** 反馈按钮处理 */
     handleFeedback(row) {
-      this.endParams.id = row.id;
-      this.feedback.id = row.id;
-      this.feedback.title = row.plantName + this.$t('反馈');
-      this.feedback.open = true;
-    },
-    /** 新增反馈处理 */
-    handleAddFeedback() {
-      this.feedbackParams.planId = this.endParams.id;
-      this.endParams.dateOfCompletion = new Date();
-      // 新增培训计划反馈
-      addFeedback(this.feedbackParams).then(response => {
-        this.feedback.open = false;
-        // 修改培训计划学习状态
-        updatePlan2(this.endParams).then(response => {
-          this.msgSuccess("已结束学习");
-          this.getList();
-        });
+      this.feedbackParams = {};
+
+      let feedback1 = {};
+      feedback1.planId = row.id;
+      feedback1.questionId = 1;
+
+      let feedback2 = {};
+      feedback2.planId = row.id;
+      feedback2.questionId = 2;
+
+      let feedback3 = {};
+      feedback3.planId = row.id;
+      feedback3.questionId = 3;
+
+      getAnswerByPlanIdAndQuestionId(feedback1).then(response => {
+        let data = response.data;
+        if (data != null) {
+          this.feedbackParams.answer1 = data.answer;
+        }
+        return getAnswerByPlanIdAndQuestionId(feedback2);
+      }).then(response => {
+        let data = response.data;
+        if (data != null) {
+          this.feedbackParams.answer2 = data.answer;
+        }
+        return getAnswerByPlanIdAndQuestionId(feedback3);
+      }).then(response => {
+        let data = response.data;
+        if (data != null) {
+          this.feedbackParams.answer3 = data.answer;
+        }
+        this.planId = row.id;
+        this.feedbackDialog.title = row.plantName + "学习心得";
+        this.feedbackDialog.open = true;
       });
     },
-    /** 开始学习 */
-    handleStart(row) {
-      this.startParams.id = row.id;
-      updatePlan2(this.startParams).then(response => {
-        this.msgSuccess("已开始学习");
-        this.getList();
+
+    /** 提交反馈处理 */
+    handleSubmitFeedback() {
+      // 打包数据
+      let feedback1 = {};
+      feedback1.planId = this.planId;
+      feedback1.questionId = 1;
+      feedback1.answer = this.feedbackParams.answer1;
+
+      let feedback2 = {};
+      feedback2.planId = this.planId;
+      feedback2.questionId = 2;
+      feedback2.answer = this.feedbackParams.answer2;
+
+      let feedback3 = {};
+      feedback3.planId = this.planId;
+      feedback3.questionId = 3;
+      feedback3.answer = this.feedbackParams.answer3;
+
+      // 保存数据
+      getAnswerByPlanIdAndQuestionId(feedback1).then(response => {
+        let data = response.data;
+        if (data != null) {
+          feedback1.id = data.id;
+          updateAnswer(feedback1);
+        } else {
+          addAnswer(feedback1);
+        }
       });
-    },
-    /** 查看培训详情处理 */
-    handleDetail(row) {
-      this.tableData = [];
-      this.detail.id = row.id;
-      this.detail.title = row.plantName + this.$t('详情');
-      this.detail.open = true;
-      getFeedback(row.id).then(response => {
-        let feedbackObject = response.data;
-        let data1 = { id: 1, question: feedbackObject.question1, answer: feedbackObject.answer1};
-        let data2 = { id: 2, question: feedbackObject.question2, answer: feedbackObject.answer2};
-        let data3 = { id: 3, question: feedbackObject.question3, answer: feedbackObject.answer3};
-        this.tableData.push(data1);
-        this.tableData.push(data2);
-        this.tableData.push(data3);
+
+      getAnswerByPlanIdAndQuestionId(feedback2).then(response => {
+        let data = response.data;
+        if (data != null) {
+          feedback2.id = data.id;
+          updateAnswer(feedback2);
+        } else {
+          addAnswer(feedback2);
+        }
+      });
+
+      getAnswerByPlanIdAndQuestionId(feedback3).then(response => {
+        let data = response.data;
+        if (data != null) {
+          feedback3.id = data.id;
+          updateAnswer(feedback3);
+        } else {
+          addAnswer(feedback3);
+        }
       });
+
+      // 隐藏对话框
+      this.feedbackDialog.open = false;
+
+      // 提示
+      this.msgSuccess("保存成功");
     },
+
     /** 文件下载处理 */
     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()
+      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(){
+    openPdf() {
       window.open(this.pdf.pdfUrl);//path是文件的全路径地址
     },
-    handleSee (row){
-      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
+    handleSee(row) {
+      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) {
       this.doc.id = row.id;
-      this.doc.title = row.plantName + this.$t('附件');
+      this.doc.title = row.plantName + this.$t('学习资料');
       this.doc.open = true;
-      this.doc.queryParams.pId = row.id
-      this.doc.pId = row.id
-      this.getFileList()
+      this.doc.queryParams.pId = row.id;
+      this.doc.pId = row.id;
+      this.getFileList();
       this.$nextTick(() => {
-        this.$refs.doc.clearFiles()
+        this.$refs.doc.clearFiles();
       })
     },
-    getFileList (){
+    getFileList() {
       allFileList(this.doc.queryParams).then(response => {
         this.doc.commonfileList = response;
       });
@@ -665,12 +506,12 @@ export default {
         this.loading = false;
       });
     },
-     /** 查询部门下拉树结构 */
-     getTreeselect() {
-          treeselect().then(response => {
-              this.deptOptions = response.data;
-          });
-     },
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
     /** 学习状态字典翻译 */
     studyStateFormat(row, column) {
       return this.selectDictLabel(this.studyStateOptions, row.studyState);

+ 76 - 99
ui/src/views/training/spec/plan/index.vue

@@ -1,5 +1,6 @@
 <template>
   <div class="app-container barchart">
+    <!-- 搜索栏 -->
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="课程内容" prop="plantName">
         <el-input
@@ -26,15 +27,6 @@
           placeholder="选择结束日期">
         </el-date-picker>
       </el-form-item>
-      <!-- <el-form-item label="学时" prop="classHour">
-        <el-input
-          v-model="queryParams.classHour"
-          placeholder="请输入学时"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        /> -->
-      </el-form-item>
       <el-form-item :label="$t('申请状态')" prop="approveStatus">
         <el-select v-model="queryParams.approveStatus" :placeholder="$t('请选择') + $t('申请状态')" clearable size="small">
           <el-option
@@ -45,16 +37,6 @@
           />
         </el-select>
       </el-form-item>
-      <el-form-item label="学习状态" prop="studyState">
-        <el-select v-model="queryParams.studyState" placeholder="请选择学习状态" clearable size="small">
-          <el-option
-            v-for="dict in studyStateOptions"
-            :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>
@@ -109,12 +91,12 @@
           v-hasPermi="['spec:plan:export']"
         >导出</el-button>
       </el-col>
-	  <!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> -->
+	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
     <!-- 表格 -->
     <el-table v-loading="loading" ref="planTable" :data="planList" @selection-change="handleSelectionChange" :height="clientHeight" border :cell-style="tableCellStyle">
       <el-table-column type="selection" width="55"   align="center" />
-      <el-table-column label="员工" fixed="left"align="center"   prop="staffName" :show-overflow-tooltip="true"/>
+      <el-table-column label="员工" fixed="left" align="center"   prop="staffName" :show-overflow-tooltip="true"/>
       <el-table-column label="课程内容" fixed="left" align="center" width="150"   prop="plantName" :show-overflow-tooltip="true"/>
       <el-table-column label="开始日期" width="90" fixed="left" align="center"   prop="startDate">
         <template slot-scope="scope">
@@ -131,14 +113,8 @@
           <span>{{ parseTime(scope.row.dateOfCompletion, '{y}-{m}-{d}') }}</span>
         </template>
       </el-table-column>
-      <!-- <el-table-column label="学时" align="center"   prop="classHour" :show-overflow-tooltip="true"/> -->
       <el-table-column label="具体内容" align="center" width="200"   prop="classContent" :show-overflow-tooltip="true"/>
-      <el-table-column label="学习状态" align="center"   prop="studyState" :formatter="studyStateFormat">
-        <!-- <template slot-scope="scope">
-          <span>{{scope.row.studyState}}</span>
-          <el-button icon="el-icon-view" style="color:#6e96fa" v-if="scope.row.studyState == 2" @click="handleFeedback(scope.row)"  circle></el-button>
-        </template> -->
-      </el-table-column>
+      <el-table-column label="学习状态" align="center"   prop="studyState" :formatter="studyStateFormat"/>
       <el-table-column :label="$t('申请状态')" align="center"   prop="approveStatus"
                         :show-overflow-tooltip="true">
         <template slot-scope="scope">
@@ -258,7 +234,7 @@
           </el-table-column>
         </el-table-column>
       </el-table-column>
-      <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width" width="250">
+      <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width" width="400">
         <template slot-scope="scope">
           <el-button
             size="mini"
@@ -266,16 +242,21 @@
             icon="el-icon-edit"
             @click="handleComment(scope.row)"
             v-hasPermi="['spec:plan:edit']"
-            v-if="scope.row.studyState == 3"
-          >评价</el-button>
+          >查看</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-document"
+            @click="handleDoc(scope.row)"
+            v-hasPermi="['spec:plan:edit']"
+          >学员附件</el-button>
           <el-button
             size="mini"
             type="text"
-            icon="el-icon-view"
+            icon="el-icon-document"
+            @click="handleDoc(scope.row)"
             v-hasPermi="['spec:plan:edit']"
-            @click="handleDetail(scope.row)"
-            v-if="scope.row.studyState == 2"
-          >详情</el-button>
+          >学习资料</el-button>
           <el-button
             v-if="scope.row.editFlag != 0"
             size="mini"
@@ -292,13 +273,6 @@
             @click="handleDelete(scope.row)"
             v-hasPermi="['spec:plan:remove']"
           >删除</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-document"
-            @click="handleDoc(scope.row)"
-            v-hasPermi="['spec:plan:edit']"
-          >附件</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -324,7 +298,6 @@
             ></el-option>
           </el-select>
         </el-form-item>
-
         <el-form-item label="课程内容" prop="plantName">
           <el-input v-model="form.plantName" placeholder="请输入课程内容" />
         </el-form-item>
@@ -344,9 +317,6 @@
             placeholder="选择结束日期">
           </el-date-picker>
         </el-form-item>
-        <!-- <el-form-item label="学时" prop="classHour">
-          <el-input v-model="form.classHour" placeholder="请输入学时" />
-        </el-form-item> -->
         <el-form-item label="具体内容">
           <el-input
             type="textarea"
@@ -355,16 +325,6 @@
             v-model="form.classContent">
           </el-input>
         </el-form-item>
-        <el-form-item label="学习状态" prop="studyState" v-if="this.operation=='modify'">
-          <el-select v-model="form.studyState" placeholder="请选择学习状态">
-            <el-option
-              v-for="dict in studyStateOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
@@ -401,7 +361,7 @@
             <el-button @click="upload.open = false">取 消</el-button>
         </div>
     </el-dialog>
-    <!-- 报告附件对话框 -->
+    <!-- 附件对话框 -->
     <el-dialog v-dialogDrag :title="doc.title" :visible.sync="doc.open" width="700px" append-to-body>
       <el-upload
         ref="doc"
@@ -466,46 +426,58 @@
       </div>
     </el-dialog>
     <!-- 评价对话框 -->
-    <el-dialog v-dialogDrag :title="comment.title" :visible.sync="comment.open" width="700px" append-to-body>
-      <h3 style="margin-bottom:20px;text-align:center;">学员反馈</h3>
-      <el-table :data="tableData" border style="width: 100%">
-        <el-table-column prop="id" label="编号" width="50"></el-table-column>
-        <el-table-column prop="question" label="问题" width="250"></el-table-column>
-        <el-table-column prop="answer" label="答案"></el-table-column>
-      </el-table>
-      <h3 style="margin-top:50px;margin-bottom:20px;text-align:center;">导师反馈</h3>
-      <el-form label-width="80px">
-        <!-- <el-form-item label="科目成绩">
-          <el-input v-model="commentParams.score" />
-        </el-form-item> -->
-        <el-form-item label="综合评价">
-          <el-input v-model="commentParams.overallComment" type="textarea" rows="6"/>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="handleAddComment()">{{ $t('提 交') }}</el-button>
-        <el-button @click="comment.open = false">{{ $t('返 回') }}</el-button>
-      </div>
-    </el-dialog>
-    <!-- 查看培训详情对话框 -->
-    <el-dialog v-dialogDrag :title="detail.title" :visible.sync="detail.open" width="700px" append-to-body>
-      <h3 style="margin-bottom:20px;text-align:center;">学员反馈</h3>
-      <el-table :data="tableData" border style="width: 100%">
-        <el-table-column prop="id" label="编号" width="50"></el-table-column>
-        <el-table-column prop="question" label="问题" width="250"></el-table-column>
-        <el-table-column prop="answer" label="答案"></el-table-column>
-      </el-table>
-      <h3 style="margin-top:50px;margin-bottom:20px;text-align:center;">导师反馈</h3>
-      <el-form label-width="80px">
-        <!-- <el-form-item label="科目成绩">
-          <el-input v-model="commentParams.score" readonly/>
-        </el-form-item> -->
-        <el-form-item label="综合评价">
-          <el-input v-model="commentParams.overallComment" type="textarea" rows="6" readonly/>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="detail.open = false">{{ $t('返 回') }}</el-button>
+    <el-dialog v-dialogDrag :title="comment.title" :visible.sync="comment.open" width="800px" append-to-body>
+      <div style="width:700px; margin:0px auto;">
+        <h3 style="margin-bottom:20px;text-align:center;">学习心得</h3>
+        <el-table :data="tableData" border style="width: 100%">
+          <el-table-column prop="id" label="编号" width="50"></el-table-column>
+          <el-table-column prop="question" label="问题" width="250"></el-table-column>
+          <el-table-column prop="answer" label="答案"></el-table-column>
+        </el-table>
+        <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" width="120" 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
+                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>
+        <h3 style="margin-top:30px;margin-bottom:20px;text-align:center;">导师反馈</h3>
+        <el-form>
+          <el-form-item>
+            <editor :min-height="192"/>
+          </el-form-item>
+        </el-form>
+        <div style="text-align:center;">
+          <el-button @click="handleAddComment()" type="success" size="medium" style="margin-right:25px;">{{ $t('通 过') }}</el-button>
+          <el-button @click="comment.open = false" type="danger" size="medium">{{ $t('驳 回') }}</el-button>
+        </div>
       </div>
     </el-dialog>
     <plan-approve v-if="planApproveVisible" ref="planApprove" @refreshDataList="getList"></plan-approve>
@@ -522,10 +494,15 @@ import PlanApprove from "./plan-approve"
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 import {getYearplan} from "@/api/training/spec/yearplan";
+import Editor from '@/components/Editor';
 
 export default {
   name: "MyPlan",
-  components: { Treeselect,PlanApprove },
+  components: {
+    Treeselect,
+    PlanApprove,
+    Editor
+  },
   data() {
     return {
       // 评论参数
@@ -787,7 +764,7 @@ export default {
     handleComment(row) {
       this.tableData = [];
       this.comment.id = row.id;
-      this.comment.title = row.plantName + this.$t('评价');
+      this.comment.title = row.staffName + " " + row.plantName + " " + this.$t('学习情况');
       this.comment.open = true;
       getFeedback(row.id).then(response => {
         let feedbackObject = response.data;