Pārlūkot izejas kodu

王子文 专项培养 季度回顾
1) 汇报展示PPT新增、删除、查询、下载
2) 更新上周五会议确定的一版问卷调查内容
3) 季度回顾新增面试会议时间
4) 查询培养计划详情(包含学员三个问题、反馈附件、导师反馈)
5) 导师反馈内容保存、查询

wangggziwen 3 gadi atpakaļ
vecāks
revīzija
162f6c0f94

+ 11 - 0
master/src/main/java/com/ruoyi/project/training/spec/domain/TStFeedback.java

@@ -32,6 +32,10 @@ public class TStFeedback extends BaseEntity
     @Excel(name = "学员ID")
     private String successorId;
 
+    /** 学员姓名 */
+    @Excel(name = "学员姓名")
+    private String successorName;
+
     /** 受邀导师父级主键ID */
     @Excel(name = "受邀导师父级主键ID")
     private Long parentId;
@@ -73,6 +77,13 @@ public class TStFeedback extends BaseEntity
     @Excel(name = "面试会议日期", width = 30, dateFormat = "yyyy-MM-dd")
     private Date meetingDate;
 
+    public String getSuccessorName() {
+        return successorName;
+    }
+    public void setSuccessorName(String successorName) {
+        this.successorName = successorName;
+    }
+
     public void setId(Long id)
     {
         this.id = id;

+ 6 - 1
master/src/main/resources/mybatis/training/spec/TStFeedbackMapper.xml

@@ -9,6 +9,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="feedbackType"    column="feedback_type"    />
         <result property="mentorId"    column="mentor_id"    />
         <result property="successorId"    column="successor_id"    />
+        <result property="successorName"    column="nick_name"    />
         <result property="parentId"    column="parent_id"    />
         <result property="planId"    column="plan_id"    />
         <result property="feedbackYear"    column="feedback_year"    />
@@ -28,6 +29,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             d.feedback_type,
             d.mentor_id,
             d.successor_id,
+            u.nick_name,
             d.parent_id,
             d.plan_id,
             d.feedback_year,
@@ -40,13 +42,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             d.meeting_date
         from
             t_st_feedback d
+        left join sys_user u on d.successor_id = u.staffid
     </sql>
 
     <select id="selectInvitedSuccessorList" parameterType="TStFeedback" resultMap="TStFeedbackResult">
         <include refid="selectTStFeedbackVo"/>
         <where>
             <if test="mentorId != null  and mentorId != ''"> and mentor_id = #{mentorId}</if>
-            and planId != null
+            and parent_id is not null
         </where>
     </select>
 
@@ -87,6 +90,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="feedbackScore != null  and feedbackScore != ''"> and feedback_score = #{feedbackScore}</if>
             <if test="feedbackStatus != null "> and feedback_status = #{feedbackStatus}</if>
             <if test="meetingDate != null "> and meeting_date = #{meetingDate}</if>
+            <if test="parentId != null and parentId !=''"> and parent_id = #{parentId} </if>
+            <if test="parentId == null or parentId == ''"> and parent_id is null </if>
         </where>
     </select>
 

+ 503 - 123
ui/src/views/training/spec/seasonalfeedback/index.vue

@@ -1,13 +1,27 @@
 <template>
   <div class="app-container">
     <!-- 搜索栏 -->
-    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch">
-      <el-form-item label="其他导师">
-        <el-select 
+    <el-form :inline="true">
+      <el-form-item label="会议日期">
+        <el-date-picker
+          size="small"
+          v-model="meetingDate"
+          align="right"
+          type="date"
+          placeholder="选择会议日期"
+          :picker-options="pickerOptions"
+          style="width:200px"
+        >
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="参会导师">
+        <el-select
+          size="small"
           v-model="mentorOptionsArray"
           multiple 
           placeholder="请选择导师" 
           prop="mentorId"
+          style="width:200px"
         >
           <el-option
             v-for="mentor in this.mentorOptions"
@@ -27,11 +41,15 @@
           邀请
         </el-button>
       </el-form-item>
+    </el-form>
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch">
       <el-form-item label="学员" prop="successorId">
-        <el-select 
+        <el-select
+          size="small"
           v-model="queryParams.successorId" 
           placeholder="请选择学员"
           @change="someMethod()"
+          style="width:200px"
         >
           <el-option
             v-for="successor in this.successorOptions"
@@ -49,10 +67,18 @@
           type="year"
           size="small"
           @keyup.enter.native="handleQuery"
+          style="width:200px"
         />
       </el-form-item>
       <el-form-item label="季度" prop="feedbackSason">
-        <el-select v-model="queryParams.feedbackSeason" placeholder="请选择季度" clearable size="small" @keyup.enter.native="handleQuery" >
+        <el-select 
+          v-model="queryParams.feedbackSeason" 
+          placeholder="请选择季度" 
+          clearable 
+          size="small" 
+          @keyup.enter.native="handleQuery" 
+          style="width:200px"
+        >
           <el-option label="第一季度" value="1"></el-option>
           <el-option label="第二季度" value="2"></el-option>
           <el-option label="第三季度" value="3"></el-option>
@@ -66,7 +92,7 @@
     </el-form>
     <!-- 标签页 -->
     <el-tabs type="border-card" @tab-click="handleTabClick" v-model="activeName">
-      <el-tab-pane label="居海波" name="1">
+      <el-tab-pane label="居海波" name="20255">
         <!-- 培养计划总表 -->
         <el-table
           v-loading="loading"
@@ -74,13 +100,14 @@
           @selection-change="handleSelectionChange"
           ref="feedbackListSeasonalTable"
           border
+          :cell-style="tableCellStyle"
         >
-          <el-table-column label="培养内容" align="center" :show-overflow-tooltip="true" prop="plantName"/>
-          <el-table-column label="开始日期" align="center" :show-overflow-tooltip="true" prop="startDate" width="150"/>
-          <el-table-column label="结束日期" align="center" :show-overflow-tooltip="true" prop="endDate" width="150"/>
-          <el-table-column label="实际完成日期" align="center" :show-overflow-tooltip="true" prop="dateOfCompletion" width="150"/>
-          <el-table-column label="学习状态" align="center" :show-overflow-tooltip="true" prop="studyState" width="150"/>
-          <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width" width="400">
+          <el-table-column label="培养内容" align="center" prop="plantName" width="600px"/>
+          <el-table-column label="开始日期" align="center" prop="startDate"/>
+          <el-table-column label="结束日期" align="center" prop="endDate"/>
+          <el-table-column label="实际完成日期" align="center" prop="dateOfCompletion"/>
+          <el-table-column label="学习状态" align="center" prop="studyState" :formatter="studyStateFormat"/>
+          <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
             <template slot-scope="scope">
               <el-button
                 size="mini"
@@ -88,32 +115,18 @@
                 icon="el-icon-chat-dot-round"
                 v-hasPermi="['spec:plan:edit']"
                 @click="handleFeedback(scope.row)"
-              >学员心得</el-button>
-              <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-chat-dot-round"
-                v-hasPermi="['spec:plan:edit']"
-                @click="handleFeedback(scope.row)"
-              >学员附件</el-button>
-              <el-button
-                size="mini"
-                type="text"
-                icon="el-icon-chat-dot-round"
-                v-hasPermi="['spec:plan:edit']"
-                @click="handleFeedback(scope.row)"
-              >学习资料</el-button>
+              >详情</el-button>
             </template>
           </el-table-column>
         </el-table>
         <!-- 汇报附件 -->
-        <!-- <div>
+        <div>
           <h3>汇报展示PPT</h3>
           <el-upload
               ref="doc"
               :headers="doc.headers"
               class="upload-demo"
-              action="doc.url + '?pType=' + doc.pType + '&pId=' + doc.pId"
+              :action="doc.url + '?pType=' + doc.pType + '&pId=' + doc.pId"
               :disabled="doc.isUploading"
               :on-progress="handleFileDocProgress"
               :on-success="handleFileDocSuccess"
@@ -122,7 +135,7 @@
               :limit="3">
               <el-button size="small" type="primary" style="margin-bottom:10px;">点击上传</el-button>
             </el-upload>
-          <el-table :data="doc.commonfileList" border style="width:50%;">
+          <el-table :data="doc.commonfileList" border style="width:600px;">
             <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)">
@@ -154,144 +167,234 @@
               </template>
             </el-table-column>
           </el-table>
-        </div> -->
-        <!-- 10个问题 -->
-        <!-- <div>
+        </div>
+        <!-- 问卷 -->
+        <div>
           <div style="display:inline-block;width:40%;">
             <h3 style="margin-bottom:0px;">学员表现</h3>
             <div class="question">
-              1、学员的现场表现、语言表达、汇报逻辑如何?
+              1.	学员的现场汇报精神面貌如何?
             </div>
             <div class="answer">
               <el-radio-group v-model="radio1" size="small">
                 <el-radio label="1">优秀</el-radio>
                 <el-radio label="2">良好</el-radio>
                 <el-radio label="3">一般</el-radio>
-                <el-radio label="4">合格</el-radio>
+                <el-radio label="4">基本合格</el-radio>
               </el-radio-group>
             </div>
-            <h3 style="margin-bottom:0px;">汇报材料及内容</h3>
             <div class="question">
-              2、汇报材料准备是否充足,汇报材料是否紧贴课题内容
+              2.	学员的现场汇报语言表达如何
             </div>
             <div class="answer">
               <el-radio-group v-model="radio2" size="small">
                 <el-radio label="1">优秀</el-radio>
                 <el-radio label="2">良好</el-radio>
                 <el-radio label="3">一般</el-radio>
-                <el-radio label="4">合格</el-radio>
+                <el-radio label="4">基本合格</el-radio>
               </el-radio-group>
             </div>
             <div class="question">
-              3、学员汇报内容中是否存在明显的不足点
+              3.	学员的现场汇报逻辑思维如何
             </div>
             <div class="answer">
               <el-radio-group v-model="radio3" size="small">
-                <el-radio label="1">内容出色</el-radio>
-                <el-radio label="2">内容完善</el-radio>
-                <el-radio label="3">基本完善</el-radio>
-                <el-radio label="4">合格</el-radio>
+                <el-radio label="1">优秀</el-radio>
+                <el-radio label="2">良好</el-radio>
+                <el-radio label="3">一般</el-radio>
+                <el-radio label="4">基本合格</el-radio>
               </el-radio-group>
             </div>
+            <h3 style="margin-bottom:0px;">汇报材料及内容</h3>
             <div class="question">
-              4、学员汇报内容是否符合学习材料(SOP或者程序)的要求
+              4.	汇报材料准备是否充分,汇报材料是否紧贴本季学习内容
             </div>
             <div class="answer">
               <el-radio-group v-model="radio4" size="small">
-                <el-radio label="1">完全符合</el-radio>
-                <el-radio label="2">基本符合</el-radio>
+                <el-radio label="1">充分</el-radio>
+                <el-radio label="2">比较充分</el-radio>
                 <el-radio label="3">一般</el-radio>
-                <el-radio label="4">合格</el-radio>
+                <el-radio label="4">基本合格</el-radio>
               </el-radio-group>
             </div>
             <div class="question">
-              5、学员对本季度的学习过程、学习目标及学习结果的阐述是否具体、完整、正确
+              5.	汇报内容是否符合学习材料(SOP或者程序)的要求
             </div>
             <div class="answer">
               <el-radio-group v-model="radio5" size="small">
-                <el-radio label="1">完整流畅</el-radio>
-                <el-radio label="2">阐述清晰</el-radio>
+                <el-radio label="1">完全符合</el-radio>
+                <el-radio label="2">基本符合</el-radio>
                 <el-radio label="3">一般</el-radio>
-                <el-radio label="4">合格</el-radio>
+                <el-radio label="4">基本合格</el-radio>
               </el-radio-group>
             </div>
-          </div>
-          <div style="display:inline-block;width:40%;">
             <div class="question">
-              6、学员的汇报内容是否具有一定的意义,与学员的现阶段表现是否一致
+              6.	学员对本季的学习内容、学习目标及学习结果的阐述是否具体、完整、准确?
             </div>
             <div class="answer">
               <el-radio-group v-model="radio6" size="small">
-                <el-radio label="1">内容积极,表现高度一致</el-radio>
-                <el-radio label="2">内容充分,表现良好</el-radio>
+                <el-radio label="1">非常全面</el-radio>
+                <el-radio label="2">全面</el-radio>
                 <el-radio label="3">一般</el-radio>
-                <el-radio label="4">合格</el-radio>
+                <el-radio label="4">基本合格</el-radio>
               </el-radio-group>
             </div>
             <div class="question">
-              7、学员汇报内容是否对装置后期的管理或者生产起到一定的启发作用
+              7.	学员本季汇报内容较上次是否有所提升
             </div>
             <div class="answer">
               <el-radio-group v-model="radio7" size="small">
-                <el-radio label="1">优秀</el-radio>
-                <el-radio label="2">良好</el-radio>
+                <el-radio label="1">进步明显</el-radio>
+                <el-radio label="2">略有提升</el-radio>
                 <el-radio label="3">一般</el-radio>
-                <el-radio label="4">合格</el-radio>
+                <el-radio label="4">基本合格</el-radio>
               </el-radio-group>
             </div>
+          </div>
+          <div style="display:inline-block;width:40%;">
             <div class="question">
-              8、学员在实际工作中是否运用到培训所学内容?
+              8.	汇报内容针对本季学习范围是否存在明显的汇报漏项或者不足
             </div>
             <div class="answer">
               <el-radio-group v-model="radio8" size="small">
-                <el-radio label="1">灵活运用</el-radio>
-                <el-radio label="2">基本运用</el-radio>
-                <el-radio label="3">初步尝试</el-radio>
-                <el-radio label="4">合格</el-radio>
+                <el-radio label="1">完全不存在</el-radio>
+                <el-radio label="2">基本不存在</el-radio>
+                <el-radio label="3">无明显存在</el-radio>
+                <el-radio label="4">存在</el-radio>
               </el-radio-group>
             </div>
             <div class="question">
-              9、学员的汇报内容对于装置及公司的人才培养计划是否能起到帮助
+              9.	学员的本季汇报内容是否结合岗位工作实际
             </div>
             <div class="answer">
               <el-radio-group v-model="radio9" size="small">
-                <el-radio label="1">大有裨益</el-radio>
-                <el-radio label="2">推进作用</el-radio>
-                <el-radio label="3">参考意义</el-radio>
-                <el-radio label="4">合格</el-radio>
+                <el-radio label="1">紧密结合</el-radio>
+                <el-radio label="2">结合</el-radio>
+                <el-radio label="3">一般</el-radio>
+                <el-radio label="4">基本合格</el-radio>
               </el-radio-group>
             </div>
             <div class="question">
-              10、学员本次汇报相较于上次是否有提升
+              10.	学员在实际工作中是否能够学有所用
             </div>
             <div class="answer">
               <el-radio-group v-model="radio10" size="small">
-                <el-radio label="1">进步明显</el-radio>
-                <el-radio label="2">略有进步</el-radio>
+                <el-radio label="1">灵活运用</el-radio>
+                <el-radio label="2">基本运用</el-radio>
+                <el-radio label="3">尝试运用</el-radio>
+                <el-radio label="4">基本合格</el-radio>
+              </el-radio-group>
+            </div>
+            <div class="question">
+              11.	汇报内容对目标岗位建设是否能起到启发促进作用?
+            </div>
+            <div class="answer">
+              <el-radio-group v-model="radio11" size="small">
+                <el-radio label="1">极有建设性</el-radio>
+                <el-radio label="2">建设性</el-radio>
+                <el-radio label="3">一般</el-radio>
+                <el-radio label="4">基本合格</el-radio>
+              </el-radio-group>
+            </div>
+            <div class="question">
+              12.	汇报内容对于装置及公司的人才培养计划是否能起到建设性促进作用?
+            </div>
+            <div class="answer">
+              <el-radio-group v-model="radio12" size="small">
+                <el-radio label="1">极有建设性</el-radio>
+                <el-radio label="2">建设性</el-radio>
                 <el-radio label="3">一般</el-radio>
-                <el-radio label="4">合格</el-radio>
+                <el-radio label="4">基本合格</el-radio>
+              </el-radio-group>
+            </div>
+            <div class="question">
+              13.	汇报内容是否有对装置生产、管理、建设提出合理化建议?
+            </div>
+            <div class="answer">
+              <el-radio-group v-model="radio13" size="small">
+                <el-radio label="1">有可采用的合理化建议</el-radio>
+                <el-radio label="2">有可行性合理化建议</el-radio>
+                <el-radio label="3">有合理化建议</el-radio>
+                <el-radio label="4">无</el-radio>
+              </el-radio-group>
+            </div>
+            <div class="question">
+              14.	汇报内容是否对下期培训提出新的培训需求?
+            </div>
+            <div class="answer">
+              <el-radio-group v-model="radio14" size="small">
+                <el-radio label="1">有计划外需求</el-radio>
+                <el-radio label="2">有计划内需求</el-radio>
+                <el-radio label="3">有需求</el-radio>
+                <el-radio label="4">无具体需求</el-radio>
               </el-radio-group>
             </div>
           </div>
-        </div> -->
+        </div>
         <!-- 导师反馈 -->
-        <!-- <div>
+        <div>
           <h3 style="margin-top:0px;">导师反馈</h3>
-          <editor :min-height="300"/>
-        </div> -->
+          <editor :min-height="300" v-model="mentorFeedback"/>
+        </div>
         <!-- 保存按钮 -->
-        <!-- <div style="text-align:center;margin: 20px auto;">
-          <el-button size="medium" type="success">保存</el-button>
-        </div> -->
+        <div style="text-align:center;margin: 20px auto;">
+          <el-button size="medium" type="success" @click="handleSave">保存</el-button>
+        </div>
       </el-tab-pane>
-      <el-tab-pane label="潘传安" name="2"></el-tab-pane>
-      <el-tab-pane label="朱晶" name="3"></el-tab-pane>
     </el-tabs>
+    <!-- 详情对话框 -->
+    <el-dialog v-dialogDrag :title="feedbackDialog.title" :visible.sync="feedbackDialog.open" width="800px" append-to-body>
+      <div style="width:700px; margin:0px auto;">
+        <h3 style="margin-bottom:20px;">学员心得</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="docFeedback.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>
+            </template>
+          </el-table-column>
+        </el-table>
+        <el-form v-if="detailFeedback != null">
+          <h3 style="margin-top:30px;margin-bottom:20px;">导师反馈</h3>
+          <el-form-item>
+            <p v-html="detailFeedback" style="border:1px solid #DFE6EC;"/>
+          </el-form-item>
+        </el-form>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-import { addFeedback, getFeedbackByParams, listInvitedSuccessor } from "@/api/training/spec/feedback";
+import { getFeedbackByPlanId } from "@/api/training/spec/feedback";
+import { getAnswerByPlanIdAndQuestionId } from "@/api/training/spec/answer";
+import { allFileList, delCommonfile } from "@/api/common/commonfile";
+import { addFeedback, getFeedbackByParams, listInvitedSuccessor, updateFeedback } from "@/api/training/spec/feedback";
 import { listMentors } from "@/api/training/spec/successor";
 import { listSuccessorsByMentorId, listPlanSeasonal } from "@/api/training/spec/plan";
 import { getToken } from "@/utils/auth";
@@ -304,10 +407,69 @@ export default {
   components: { Treeselect, Editor },
   data() {
     return {
-      // tableData: [],
-
-
-
+      // 详情对话框表格数据
+      tableData: [],
+      // 反馈id
+      feedbackId: null,
+      // 会议日期快选项
+      pickerOptions: {
+        shortcuts: [{
+          text: '今天',
+          onClick(picker) {
+            picker.$emit('pick', new Date());
+          }
+        }, {
+          text: '昨天',
+          onClick(picker) {
+            const date = new Date();
+            date.setTime(date.getTime() - 3600 * 1000 * 24);
+            picker.$emit('pick', date);
+          }
+        }, {
+          text: '一周前',
+          onClick(picker) {
+            const date = new Date();
+            date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
+            picker.$emit('pick', date);
+          }
+        }, {
+          text: '一周后',
+          onClick(picker) {
+            const date = new Date();
+            date.setTime(date.getTime() + 3600 * 1000 * 24 * 7);
+            picker.$emit('pick', date);
+          }
+        }]
+      },
+      // 会议日期
+      meetingDate: null,
+      // 学习状态字典
+      studyStateOptions: [],
+      // 汇报展示附件参数
+      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: 'docSeasonal'
+        },
+        pType: 'docSeasonal',
+        pId: null
+      },
       // 培养计划总表数据
       dataList: [],
       // 首选标签页
@@ -323,7 +485,8 @@ export default {
         mentorStaffId: ""
       },
       // 导师反馈内容
-      mentorFeedback: null,
+      mentorFeedback: null, // 季度反馈内容
+      detailFeedback: null, // 计划详情反馈内容
       // 反馈对话框参数
       feedbackDialog: {
         id: 0,
@@ -343,8 +506,12 @@ export default {
       radio8: '',
       radio9: '',
       radio10: '',
+      radio11: '',
+      radio12: '',
+      radio13: '',
+      radio14: '',
       // 报告附件参数
-      doc: {
+      doc: {  // 季度汇报附件
         file: "",
         // 是否显示弹出层(报告附件)
         open: false,
@@ -368,6 +535,30 @@ export default {
         pType: 'plan',
         pId: null
       },
+      docFeedback: {  // 反馈附件
+        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: 'docFeedback'
+        },
+        pType: 'docFeedback',
+        pId: null
+      },
       // 标签页选中项
       activeName: 'zhu',
       // 遮罩层
@@ -439,40 +630,212 @@ export default {
     this.$nextTick(() => {
       this.clientHeight = document.body.clientHeight -250
     })
-    // 获取学员下拉列表
-    this.getSuccessorOptions();
-    // 获取导师下拉列表
-    this.getMentorOptions();
-    // 获取当前日期
-    let date = new Date();
-    // 搜索条件默认为当年、当季度
-    this.queryParams.feedbackYear = date.getFullYear().toString();
-    this.queryParams.feedbackSeason = ( ( date.getMonth() + 2 ) / 3 ).toString();
-    // 设置首选标签页name为当前登录用户id
-    this.activeName = "1";
+    // 获取学习状态字典
+    this.getDicts("st_study_state").then(response => {
+      this.studyStateOptions = response.data;
+    });
+    // 初始化页面
+    this.initPage();
   },
   methods: {
+    /** 保存按钮处理 */
+    handleSave() {
+      // 判断当前登录用户是否是该学员导师
+
+      if (true) {
+        // 新增问卷内容
+
+        let feedback = {};
+        feedback.id = this.feedbackId;
+        feedback.mentorFeedback = this.mentorFeedback;
+        // 修改导师反馈内容
+        updateFeedback(feedback).then(response => {
+          this.msgSuccess("保存成功");
+        });
+      } else {
+
+      }
+    },
+    /** 培养计划详情处理 */
+    handleFeedback(row) {
+      // 加载反馈附件
+      this.docFeedback.id = row.id;
+      this.docFeedback.queryParams.pId = row.id
+      this.docFeedback.pId = row.id
+      this.getFileListFeedback();
+      // 清空导师反馈内容
+      this.detailFeedback = null;
+      // 清空表格数据
+      this.tableData = [];
+      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;
+      let answerObj1 = {};
+      let answerObj2 = {};
+      let answerObj3 = {};
+      // 获取问题和答案
+      getAnswerByPlanIdAndQuestionId(feedback1).then(response => {
+        let data = response.data;
+        if (data != null) {
+          answerObj1 = { id: 1, question: data.question, answer: data.answer};
+        }
+        return getAnswerByPlanIdAndQuestionId(feedback2);
+      }).then(response => {
+        let data = response.data;
+        if (data != null) {
+          answerObj2 = { id: 2, question: data.question, answer: data.answer};
+        }
+        return getAnswerByPlanIdAndQuestionId(feedback3);
+      }).then(response => {
+        let data = response.data;
+        if (data != null) {
+          answerObj3 = { id: 3, question: data.question, answer: data.answer};
+          this.tableData.push(answerObj1);
+          this.tableData.push(answerObj2);
+          this.tableData.push(answerObj3);
+        }
+        // 获取导师反馈内容
+        return getFeedbackByPlanId(row.id);
+      }).then(response => {
+        if (response.data != null) {
+          let data = response.data;
+          this.detailFeedback = data.mentorFeedback;
+        }
+        this.feedbackDialog.title = row.staffName + row.plantName + "学习情况详情";
+        this.feedbackDialog.planId = row.id;
+        this.feedbackDialog.studyState = row.studyState;
+        this.feedbackDialog.open = true;
+      });
+    },
+    /** 单元格样式 */
+    tableCellStyle(row, column, rowIndex, columnIndex) {
+      if (row.column.label === "实际完成日期" && row.row.dateOfCompletion > row.row.endDate) {
+        return "background: #FFEEEE"
+      }
+    },
+    /** 学习状态字典翻译 */
+    studyStateFormat(row, column) {
+      return this.selectDictLabel(this.studyStateOptions, row.studyState);
+    },
+    /** 文件下载处理 */
+    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) {
+      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;
+    },
+    /** 汇报附件参数初始化 */
+    initFileList(id) {
+      this.doc.queryParams.pId = id
+      this.doc.pId = id
+      this.getFileList()
+      this.$nextTick(() => {
+        this.$refs.doc.clearFiles()
+      })
+    },
+    getFileList() {
+      allFileList(this.doc.queryParams).then(response => {
+        this.doc.commonfileList = response;
+      });
+    },
+    getFileListFeedback() {
+      allFileList(this.docFeedback.queryParams).then(response => {
+        this.docFeedback.commonfileList = response;
+      });
+    },
+    /** 附件上传中处理 */
+    handleFileDocProgress(event, file, fileList) {
+      this.doc.file = file;
+      this.doc.isUploading = true;
+    },
+    handleFileDocProgressFeedback(event, file, fileList) {
+      this.docFeedback.file = file;
+      this.docFeedback.isUploading = true;
+    },
+    /** 附件上传成功处理 */
+    handleFileDocSuccess(response, file, fileList) {
+      this.doc.isUploading = false;
+      this.$alert(response.msg, this.$t('导入结果'), { dangerouslyUseHTMLString: true });
+      this.getFileList()
+    },
+    handleFileDocSuccessFeedback(response, file, fileList) {
+      this.docMentorFeedback.isUploading = false;
+      this.$alert(response.msg, this.$t('导入结果'), { dangerouslyUseHTMLString: true });
+      this.getFileListFeedback()
+    },
+    /** 删除按钮操作 */
+    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('删除成功'));
+      })
+    },
+    /** 初始化页面 */
+    initPage() {
+      // 获取当前日期
+      let date = new Date();
+      // 搜索条件默认为当年、当季度
+      this.queryParams.feedbackYear = date.getFullYear().toString();
+      this.queryParams.feedbackSeason = ( ( date.getMonth() + 2 ) / 3 ).toString();
+      // 获取学员下拉列表
+      this.getSuccessorOptions();
+      // 获取导师下拉列表
+      this.getMentorOptions();
+      // 设置首选标签页name为当前登录用户id
+      this.activeName = "20255";
+    },
     /** 邀请导师 */
     handleInvite() {
+      let updateParams = {};
+      updateParams.id = this.feedbackId;
+      updateParams.meetingDate = this.meetingDate;
+      // 修改会议日期
+      updateFeedback(updateParams);
       for (let i = 0; i < this.mentorOptionsArray.length; i++) {
-        let getParams = {};
-        getParams.successorId = this.queryParams.successorId;
-        getParams.feedbackYear = this.queryParams.feedbackYear;
-        getParams.feedbackSeason = this.queryParams.feedbackSeason;
-        // 获取当前学员当年当季度反馈id
-        getFeedbackByParams(getParams).then(response => {
-          let addParams = {};
-          addParams.parentId = response.data.id;  // 设置父级id
-          addParams.feedbackYear = this.queryParams.feedbackYear;
-          addParams.feedbackSeason = this.queryParams.feedbackSeason;
-          addParams.feedbackType = 3;
-          addParams.mentorId = this.mentorOptionsArray[i];
-          addParams.successorId = this.queryParams.successorId;
-          return addFeedback(addParams);
-          // 发送邮件提醒受邀导师
-
+        let feedback = {};
+        feedback.parentId = this.feedbackId;  // 设置父级id
+        feedback.feedbackYear = this.queryParams.feedbackYear;
+        feedback.feedbackSeason = this.queryParams.feedbackSeason;
+        feedback.feedbackType = 3;
+        feedback.mentorId = this.mentorOptionsArray[i];
+        feedback.successorId = this.queryParams.successorId;
+        getFeedbackByParams(feedback).then(response => {
+          let data = response.data;
+          if (data == null) {
+            // 新增受邀导师反馈记录
+            addFeedback(feedback);
+          }
         });
+        // 发送邮件提醒受邀导师
+
       }
+      // 刷新标签列表
+
       this.msgSuccess("邀请成功,邮件已发送");
     },
     /** 标签页切换事件 */
@@ -500,14 +863,27 @@ export default {
           if (i == 0) {
             // 默认选中列表中第一个学员
             this.queryParams.successorId = successorList[i].staffId;
+            // 获取计划列表
+            this.getList();
           }
           let successor = {};
           successor.key = successorList[i].staffId;
           successor.value = successorList[i].staffName;
           this.successorOptions.push(successor);
         }
-        // 获取计划列表
-        this.getList();
+        let getParams = {};
+        getParams.successorId = this.queryParams.successorId;
+        getParams.feedbackYear = this.queryParams.feedbackYear;
+        getParams.feedbackSeason = this.queryParams.feedbackSeason;
+        // 获取当前学员当年当季度反馈id
+        getFeedbackByParams(getParams).then(response => {
+          let data = response.data;
+          this.feedbackId = data.id;
+          this.meetingDate = data.meetingDate;
+          this.mentorFeedback = data.mentorFeedback;
+          // 初始化汇报附件
+          this.initFileList(data.id);
+        });
         // 获取作为受邀导师的学员列表
         return listInvitedSuccessor(null);
       }).then(response => {
@@ -576,11 +952,15 @@ export default {
 </script>
 
 <style scoped>
-  .question,.answer{
-    margin: 30px 0px;
+  .question{
+    margin: 20px 0px;
     padding-left: 20px;
   }
+  .answer{
+    padding-bottom: 10px;
+    padding-left: 40px;
+  }
   h3{
-    margin: 30px 0px;
+    margin: 20px 0px;
   }
 </style>