Browse Source

王子文 专项培养
1) 季度回顾前端页面

wangggziwen 3 years ago
parent
commit
5d40c213bf

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

@@ -26,6 +26,10 @@ public class TStQuestionAnswer extends BaseEntity
     @Excel(name = "问题id")
     private Long questionId;
 
+    /** 问题 */
+    @Excel(name = "问题")
+    private String question;
+
     /** 答案 */
     @Excel(name = "答案")
     private String answer;
@@ -53,6 +57,13 @@ public class TStQuestionAnswer extends BaseEntity
         this.questionId = questionId;
     }
 
+    public String getQuestion() {
+        return question;
+    }
+    public void setQuestion(String question) {
+        this.question = question;
+    }
+
     public Long getQuestionId()
     {
         return questionId;

+ 4 - 1
master/src/main/resources/mybatis/training/spec/TStQuestionAnswerMapper.xml

@@ -8,12 +8,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="id"    column="id"    />
         <result property="planId"    column="plan_id"    />
         <result property="questionId"    column="question_id"    />
+        <result property="question"    column="question"    />
         <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
+        select d.id, d.plan_id, d.question_id, d.answer, b.QUESTION
+        from t_st_question_answer d
+        inner join T_ST_QUESTION_BANK b on d.QUESTION_ID=b.ID
     </sql>
 
     <select id="selectTStQuestionAnswerList" parameterType="TStQuestionAnswer" resultMap="TStQuestionAnswerResult">

+ 545 - 0
ui/src/views/training/spec/seasonalfeedback/index.vue

@@ -0,0 +1,545 @@
+<template>
+  <div class="app-container">
+    <!-- 搜索栏 -->
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="学员姓名" prop="successorName">
+        <el-input
+          v-model="queryParams.successorName"
+          placeholder="请输入学员姓名"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="年" prop="feedbackYear">
+        <el-date-picker
+          v-model="queryParams.feedbackYear"
+          placeholder="请选择年"
+          clearable
+          type="year"
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="季度" prop="feedbackSeason">
+        <el-select 
+          v-model="queryParams.feedbackSeason" 
+          placeholder="请选择季度"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        >
+          <el-option
+            key="1"
+            label="第一季度"
+            value="1">
+          </el-option>
+          <el-option
+            key="2"
+            label="第二季度"
+            value="2">
+          </el-option>
+          <el-option
+            key="3"
+            label="第三季度"
+            value="3">
+          </el-option>
+          <el-option
+            key="4"
+            label="第四季度"
+            value="4">
+          </el-option>
+        </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-tabs type="border-card">
+      <el-tab-pane label="居海波">
+        <h3>学习内容</h3>
+        <el-table
+          :span-method="spanMethod"
+          v-loading="loading"
+          :data="dataList"
+          @selection-change="handleSelectionChange"
+          ref="feedbackListSeasonalTable"
+          border
+          :cell-style="tableCellStyle"
+        >
+          <el-table-column label="时间" align="center" :show-overflow-tooltip="true" width="180">
+            <template slot-scope="scope">
+              <span>{{scope.row.feedbackYear}}年{{scope.row.feedbackMonth}}月</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="培养内容" align="center" :show-overflow-tooltip="true" prop="plantName"/>
+          <el-table-column label="开始日期" align="center" :show-overflow-tooltip="true" width="150" prop="startDate"/>
+          <el-table-column label="结束日期" align="center" :show-overflow-tooltip="true" width="150" prop="endDate"/>
+          <el-table-column label="实际完成日期" align="center" :show-overflow-tooltip="true" width="150" prop="dateOfCompletion"/>
+          <el-table-column label="学习状态" align="center" :show-overflow-tooltip="true" width="120" prop="studyState"/>
+          <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width" width="300">
+            <template slot-scope="scope">
+              <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-document"
+                @click="handleDoc(scope.row)"
+                v-hasPermi="['spec:plan:edit']"
+              >学员附件</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>
+        <h3>汇报展示PPT</h3>
+        <div>
+          <!-- <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
+              style="display:inline-block;"
+          >
+            <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="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>
+        </div>
+        <h3 style="margin-bottom:0px;">培养结果调查问卷</h3>
+        <div>
+            <div style="display:inline-block;width:45%;padding-left:20px;">
+              <div class="question">
+                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-group>
+              </div>
+              <div class="question">
+                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-group>
+              </div>
+              <div class="question">
+                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-group>
+              </div>
+              <div class="question">
+                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="3">一般</el-radio>
+                  <el-radio label="4">合格</el-radio>
+                </el-radio-group>
+              </div>
+              <div class="question">
+                5、学员的汇报内容是否具有一定的意义,与学员的现阶段表现是否一致?
+              </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="3">一般</el-radio>
+                  <el-radio label="4">合格</el-radio>
+                </el-radio-group>
+              </div>
+            </div>
+            <div style="display:inline-block;width:45%;padding-left:20px;">
+              <div class="question">
+                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="3">一般</el-radio>
+                  <el-radio label="4">合格</el-radio>
+                </el-radio-group>
+              </div>
+              <div class="question">
+                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="3">一般</el-radio>
+                  <el-radio label="4">合格</el-radio>
+                </el-radio-group>
+              </div>
+              <div class="question">
+                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-group>
+              </div>
+              <div class="question">
+                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-group>
+              </div>
+              <div class="question">
+                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="3">一般</el-radio>
+                  <el-radio label="4">合格</el-radio>
+                </el-radio-group>
+              </div>
+            </div>
+        </div>
+        <h3 style="margin-top:0px;">导师反馈</h3>
+        <div>
+          <el-form>
+            <el-form-item>
+              <editor :min-height="192"/>
+            </el-form-item>
+          </el-form>
+        </div>
+        <!-- footer -->
+        <div style="text-align:center; margin:30px 0px;">
+          <el-button>保存</el-button>
+        </div>
+      </el-tab-pane>
+      <el-tab-pane label="朱晶">
+
+      </el-tab-pane>
+      <el-tab-pane label="张磊">
+
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+import { listFeedback } from "@/api/training/spec/feedback";
+import { getToken } from "@/utils/auth";
+import Treeselect from "@riophae/vue-treeselect";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import Editor from '@/components/Editor';
+
+export default {
+  name: "Feedback",
+  components: { Treeselect, Editor },
+  data() {
+    return {
+      dataList: [],
+      radio1: '',
+      radio2: '',
+      radio3: '',
+      radio4: '',
+      radio5: '',
+      radio6: '',
+      radio7: '',
+      radio8: '',
+      radio9: '',
+      radio10: '',
+      // 报告附件参数
+      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: 'plan'
+        },
+        pType: 'plan',
+        pId: null
+      },
+      // 标签页选中项
+      activeName: 'first',
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 专项培训反馈表格数据
+      feedbackList: [],
+      // 弹出层标题
+      title: "",
+      // 部门树选项
+      deptOptions: undefined,
+      clientHeight:300,
+      // 是否显示弹出层
+      open: false,
+        // 用户导入参数
+        upload: {
+            // 是否显示弹出层(用户导入)
+            open: false,
+            // 弹出层标题(用户导入)
+            title: "",
+            // 是否禁用上传
+            isUploading: false,
+            // 是否更新已经存在的用户数据
+            updateSupport: 0,
+            // 设置上传的请求头部
+            headers: { Authorization: "Bearer " + getToken() },
+            // 上传的地址
+            url: process.env.VUE_APP_BASE_API + "/spec/feedback/importData"
+        },
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        feedbackType: null,
+        mentorId: null,
+        successorId: null,
+        successorName: "李滕",
+        parentId: null,
+        planId: null,
+        feedbackYear: '2022',
+        feedbackSeason: '第一季度',
+        feedbackMonth: null,
+        successorFeedback: null,
+        mentorFeedback: null,
+        feedbackScore: null,
+        feedbackStatus: null,
+        meetingDate: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  watch: {
+  },
+  created() {
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = document.body.clientHeight -250
+    })
+    this.getList();
+
+    let data1 = { feedbackYear:"2022", feedbackMonth: "1", startDate:"2022-01-01", endDate:"2022-04-10", dateOfCompletion:"", studyState:"学习中", plantName:"英语学习(持续)" };
+    let data2 = { feedbackYear:"2022", feedbackMonth: "1", startDate:"2022-01-01", endDate:"2022-06-06", dateOfCompletion:"", studyState:"学习中", plantName:"C560系统学习" };
+    let data3 = { feedbackYear:"2022", feedbackMonth: "1", startDate:"2022-01-01", endDate:"2022-01-18", dateOfCompletion:"2022-02-01", studyState:"已完成", plantName:"C3加氢/V520、C530/540" };
+    let data4 = { feedbackYear:"2022", feedbackMonth: "2", startDate:"2022-01-01", endDate:"2022-04-10", dateOfCompletion:"", studyState:"学习中", plantName:"英语学习(持续)" };
+    let data5 = { feedbackYear:"2022", feedbackMonth: "2", startDate:"2022-01-01", endDate:"2022-06-06", dateOfCompletion:"", studyState:"学习中", plantName:"C560系统学习" };
+    let data6 = { feedbackYear:"2022", feedbackMonth: "2", startDate:"2022-02-01", endDate:"2022-02-11", dateOfCompletion:"2022-02-10", studyState:"已完成", plantName:"C430系统" };
+    let data7 = { feedbackYear:"2022", feedbackMonth: "2", startDate:"2022-02-01", endDate:"2022-02-04", dateOfCompletion:"2022-02-10", studyState:"已完成", plantName:"C440/K450" };
+    let data8 = { feedbackYear:"2022", feedbackMonth: "3", startDate:"2022-01-01", endDate:"2022-04-10", dateOfCompletion:"", studyState:"学习中", plantName:"英语学习(持续)" };
+    let data9 = { feedbackYear:"2022", feedbackMonth: "3", startDate:"2022-01-01", endDate:"2022-06-06", dateOfCompletion:"", studyState:"学习中", plantName:"C560系统学习" };
+
+    this.dataList.push(data1);
+    this.dataList.push(data2);
+    this.dataList.push(data3);
+    this.dataList.push(data4);
+    this.dataList.push(data5);
+    this.dataList.push(data6);
+    this.dataList.push(data7);
+    this.dataList.push(data8);
+    this.dataList.push(data9);
+  },
+  methods: {
+    // 合并单元格
+    spanMethod({ row, column, rowIndex, columnIndex }) {
+      
+    },
+    // 单元格样式
+    tableCellStyle (row, column, rowIndex, columnIndex) {
+      if (row.column.label === "实际完成日期" && row.row.dateOfCompletion > row.row.endDate) {
+        return "background: #FFEEEE"
+      }
+    },
+    /** 报告附件按钮操作 */
+    handleDoc(row) {
+      this.doc.id = row.id;
+      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.$nextTick(() => {
+        this.$refs.doc.clearFiles()
+      })
+    },
+    getFileList (){
+      allFileList(this.doc.queryParams).then(response => {
+        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()
+    },
+    /** 查询专项培训反馈列表 */
+    getList() {
+      this.loading = true;
+      listFeedback(this.queryParams).then(response => {
+        this.feedbackList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        feedbackType: null,
+        mentorId: null,
+        successorId: null,
+        successorName: null,
+        parentId: null,
+        planId: null,
+        feedbackYear: null,
+        feedbackSeason: null,
+        feedbackMonth: null,
+        successorFeedback: null,
+        mentorFeedback: null,
+        feedbackScore: null,
+        feedbackStatus: 0,
+        meetingDate: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+  }
+};
+</script>
+
+<style scoped>
+  .question,.answer{
+    margin: 30px 0px;
+  }
+  h3{
+    margin: 30px 0px;
+  }
+</style>