From d13cebe7fbadd396e91a989af331df8a8e7b40f8 Mon Sep 17 00:00:00 2001
From: xieb <vip_xiaobin810@163.com>
Date: Tue, 21 Jan 2025 11:40:42 +0800
Subject: [PATCH] 考核结果查看详情

---
 src/views/assessment/assessmentTask.vue |  330 ++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 220 insertions(+), 110 deletions(-)

diff --git a/src/views/assessment/assessmentTask.vue b/src/views/assessment/assessmentTask.vue
index d368871..77f069f 100644
--- a/src/views/assessment/assessmentTask.vue
+++ b/src/views/assessment/assessmentTask.vue
@@ -1,56 +1,115 @@
 <template>
   <basic-container>
-    <template v-if="isResult">
+    <template v-if="curIndex === 0">
       <avue-tabs ref="tabs" :option="taskTypeList" @change="tabChange"></avue-tabs>
-      <avue-crud :option="option" v-model:search="search" v-model:page="page" v-model="form" :table-loading="loading"
-        :data="data" :permission="permissionList" :before-open="beforeOpen" ref="crud" @row-update="rowUpdate"
-        @row-save="rowSave" @row-del="rowDel" @search-change="searchChange" @search-reset="searchReset"
-        @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
-        @refresh-change="refreshChange" @on-load="onLoad">
+      <avue-crud
+        :option="option"
+        v-model:search="search"
+        v-model:page="page"
+        v-model="form"
+        :table-loading="loading"
+        :data="data"
+        :permission="permissionList"
+        :before-open="beforeOpen"
+        ref="crud"
+        @row-update="rowUpdate"
+        @row-save="rowSave"
+        @row-del="rowDel"
+        @search-change="searchChange"
+        @search-reset="searchReset"
+        @selection-change="selectionChange"
+        @current-change="currentChange"
+        @size-change="sizeChange"
+        @refresh-change="refreshChange"
+        @on-load="onLoad"
+      >
         <template #isAssessmentOk="{ row }">
-          <el-tag :type="row.isAssessmentOk ? 'success' : ''" effect="dark">{{ row.isAssessmentOk ? '已完成' : '进行中' }}</el-tag>
+          <el-tag :type="setTaskState(row.isAssessmentOk).type" effect="dark">
+            {{ setTaskState(row.isAssessmentOk).text }}
+          </el-tag>
         </template>
         <template #menu-left>
-          <el-button type="danger" icon="el-icon-delete" plain v-if="permission.assessmentTask_delete"
-            @click="handleDelete">
+          <el-button
+            type="danger"
+            icon="el-icon-delete"
+            plain
+            v-if="permission.assessmentTask_delete"
+            @click="handleDelete"
+          >
             删除
           </el-button>
           <!-- <el-button type="warning" plain icon="el-icon-download" @click="handleExport">
-            导出
-          </el-button> -->
+                      导出
+                    </el-button> -->
         </template>
-        <template #menu="{ row }">
-          <el-button type="primary" icon="el-icon-plus" size="small" @click="handleTaskResult(row)">
+        <template #menu="{ row, index, size }">
+          <el-button type="primary" icon="el-icon-setting" text @click="handleTaskSetting(row)">
+            考核设置
+          </el-button>
+          <el-button type="primary" icon="el-icon-view" text @click="handleAssessorDetails(row)">
             考核结果
+          </el-button>
+          <el-button type="primary" icon="el-icon-view" text @click="handleAssessorList(row)">
+            考核详情
+          </el-button>
+          <el-button
+            type="success"
+            icon="el-icon-edit"
+            text
+            v-if="row.isAssessmentOk === -1"
+            @click="$refs.crud.rowEdit(row, index)"
+          >
+            编辑
+          </el-button>
+          <!-- <el-button type="primary" icon="el-icon-view" text @click="handleTaskResult(row)">
+                      考核结果
+                    </el-button> -->
+          <el-button type="danger" icon="el-icon-delete" text @click="rowDel(row)">
+            删除
           </el-button>
         </template>
       </avue-crud>
     </template>
-    <template v-else>
-      <taskResult :params="resultParams" @changeIs="changeIs" />
+    <template v-else-if="curIndex === 1">
+      <assessmentTaskSetting :params="resultParams" @changeIs="changeIs" />
     </template>
+    <!-- <template v-else>
+          <taskResult :params="resultParams" @changeIs="changeIs" />
+        </template> -->
+    <!-- 考核结果详情 -->
+    <assessorDetails :params="detailsParams" />
+    <!-- 考核人员详情 -->
+    <assessorDialog :params="assessorDialogParams" />
   </basic-container>
 </template>
 
 <script>
-import { getList, getDetail, add, update, remove } from "@/api/assessment/assessmentTask";
-import option from "@/option/assessmentTask/assessmentTask";
-import { mapGetters } from "vuex";
-import { exportBlob } from "@/api/common";
+import { getList, getDetail, add, update, remove } from '@/api/assessment/assessmentTask';
+import option from '@/option/assessmentTask/assessmentTask';
+import { mapGetters } from 'vuex';
+import { exportBlob } from '@/api/common';
 import { getToken } from '@/utils/auth';
-import { downloadXls } from "@/utils/util";
-import { dateNow } from "@/utils/date";
+import { downloadXls } from '@/utils/util';
+import { dateNow } from '@/utils/date';
 import NProgress from 'nprogress';
 import 'nprogress/nprogress.css';
-import taskResult from './components/taskResult.vue'
+import taskResult from './components/taskResult.vue';
+import addTaskDialog from './components/addTaskDialog.vue';
+import assessmentTaskSetting from './components/assessmentTaskSetting.vue';
+import assessorDetails from './components/assessorDetails.vue';
+import assessorDialog from './components/assessorDialog.vue';
 
 export default {
   components: {
-    taskResult
+    taskResult,
+    addTaskDialog,
+    assessmentTaskSetting,
+    assessorDetails,
+    assessorDialog,
   },
   data() {
     return {
-      isResult: true,
+      curIndex: 0,
       form: {},
       query: {},
       search: {},
@@ -58,7 +117,7 @@
       page: {
         pageSize: 10,
         currentPage: 1,
-        total: 0
+        total: 0,
       },
       selectionList: [],
       option: option,
@@ -70,46 +129,49 @@
         column: [
           {
             label: '个人考核任务',
-            prop: 0
+            prop: 0,
           },
           {
             label: '部门考核任务',
-            prop: 1
-          }
-        ]
-      }
+            prop: 1,
+          },
+        ],
+      },
+      detailsParams: {},
+      assessorDialogParams: {},
     };
   },
   watch: {
+    
     defaultTaskType: {
       handler(n) {
-        this.query = {}
-        this.query['type'] = n
+        this.query = {};
+        this.query['type'] = n;
         let params = {
-          type: n
-        }
+          type: n,
+        };
         // 设置默认值
-        const column = this.option.column
+        const column = this.option.column;
         column.some(item => {
           if (item.prop === 'type') {
-            item.value = n
-            return true
+            item.value = n;
+            return true;
           }
-        })
+        });
         this.page.currentPage = 1;
         this.onLoad(this.page, params);
       },
       immediate: true,
-    }
+    },
   },
   computed: {
-    ...mapGetters(["permission"]),
+    ...mapGetters(['permission']),
     permissionList() {
       return {
         addBtn: this.validData(this.permission.assessmentTask_add, false),
         viewBtn: this.validData(this.permission.assessmentTask_view, false),
         delBtn: this.validData(this.permission.assessmentTask_delete, false),
-        editBtn: this.validData(this.permission.assessmentTask_edit, false)
+        editBtn: this.validData(this.permission.assessmentTask_edit, false),
       };
     },
     ids() {
@@ -117,60 +179,76 @@
       this.selectionList.forEach(ele => {
         ids.push(ele.id);
       });
-      return ids.join(",");
-    }
+      return ids.join(',');
+    },
+  },
+  provide() {
+    return {
+      type: () => this.defaultTaskType,
+    };
   },
   methods: {
-    handleTaskResult(row) {
-      this.isResult = false;
-      this.resultParams = row
-      this.resultParams.type = this.defaultTaskType
+    handleTaskSetting(row) {
+      this.curIndex = 1;
+      this.resultParams = row;
+      this.resultParams.type = this.defaultTaskType;
     },
-    changeIs(is) {
-      this.isResult = is
+    // handleTaskResult(row) {
+    //   this.curIndex = 2;
+    //   this.resultParams = row
+    //   this.resultParams.type = this.defaultTaskType
+    // },
+    changeIs(num) {
+      this.curIndex = num;
       this.$nextTick(() => {
-        this.$refs.tabs.active = this.defaultTaskType.toString()
-      })
+        this.$refs.tabs.active = this.defaultTaskType.toString();
+      });
     },
     rowSave(row, done, loading) {
-      const {startTime, endTime} = row
-      const startDate = new Date(startTime).getTime()
-      const endDate = new Date(endTime).getTime()
+      const { startTime, endTime } = row;
+      const startDate = new Date(startTime).getTime();
+      const endDate = new Date(endTime).getTime();
       if (startDate >= endDate) {
-        this.$message.warning('结束时间不可小于或等于开始时间')
-        loading()
-        return
-      }
-      add(row).then(() => {
-        this.onLoad(this.page);
-        this.$message({
-          type: "success",
-          message: "操作成功!"
-        });
-        done();
-      }, error => {
+        this.$message.warning('结束时间不可小于或等于开始时间');
         loading();
-        window.console.log(error);
-      });
+        return;
+      }
+      add(row).then(
+        () => {
+          this.onLoad(this.page);
+          this.$message({
+            type: 'success',
+            message: '操作成功!',
+          });
+          done();
+        },
+        error => {
+          loading();
+          window.console.log(error);
+        }
+      );
     },
     rowUpdate(row, index, done, loading) {
-      update(row).then(() => {
-        this.onLoad(this.page);
-        this.$message({
-          type: "success",
-          message: "操作成功!"
-        });
-        done();
-      }, error => {
-        loading();
-        console.log(error);
-      });
+      update(row).then(
+        () => {
+          this.onLoad(this.page);
+          this.$message({
+            type: 'success',
+            message: '操作成功!',
+          });
+          done();
+        },
+        error => {
+          loading();
+          console.log(error);
+        }
+      );
     },
     rowDel(row) {
-      this.$confirm("确定将选择数据删除?", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning"
+      this.$confirm('确定将选择数据删除?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning',
       })
         .then(() => {
           return remove(row.id);
@@ -178,20 +256,20 @@
         .then(() => {
           this.onLoad(this.page);
           this.$message({
-            type: "success",
-            message: "操作成功!"
+            type: 'success',
+            message: '操作成功!',
           });
         });
     },
     handleDelete() {
       if (this.selectionList.length === 0) {
-        this.$message.warning("请选择至少一条数据");
+        this.$message.warning('请选择至少一条数据');
         return;
       }
-      this.$confirm("确定将选择数据删除?", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning"
+      this.$confirm('确定将选择数据删除?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning',
       })
         .then(() => {
           return remove(this.ids);
@@ -199,36 +277,37 @@
         .then(() => {
           this.onLoad(this.page);
           this.$message({
-            type: "success",
-            message: "操作成功!"
+            type: 'success',
+            message: '操作成功!',
           });
           this.$refs.crud.toggleSelection();
         });
     },
     handleExport() {
-      let downloadUrl = `/assessmentTask/assessmentTask/export-assessmentTask?${this.website.tokenHeader}=${getToken()}`;
-      const {
-      } = this.query;
+      let downloadUrl = `/assessmentTask/assessmentTask/export-assessmentTask?${
+        this.website.tokenHeader
+      }=${getToken()}`;
+      const {} = this.query;
       let values = {
-        ...this.query
+        ...this.query,
       };
-      this.$confirm("是否导出数据?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning"
+      this.$confirm('是否导出数据?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning',
       }).then(() => {
         NProgress.start();
         exportBlob(downloadUrl, values).then(res => {
           downloadXls(res.data, `考核任务表${dateNow()}.xlsx`);
           NProgress.done();
-        })
+        });
       });
     },
     beforeOpen(done, type) {
       if (type === 'add') {
-        this.form.assessmentNo = new Date().getFullYear() + '-' + (Number(this.page.total) + 1)
+        this.form.assessmentNo = new Date().getFullYear() + '-' + (Number(this.page.total) + 1);
       }
-      if (["edit", "view"].includes(type)) {
+      if (['edit', 'view'].includes(type)) {
         getDetail(this.form.id).then(res => {
           this.form = res.data.data;
         });
@@ -240,7 +319,7 @@
       this.onLoad(this.page, { type: this.defaultTaskType });
     },
     searchChange(params, done) {
-      params.type = this.defaultTaskType
+      params.type = this.defaultTaskType;
       this.query = params;
       this.page.currentPage = 1;
       this.onLoad(this.page, params);
@@ -265,12 +344,11 @@
     onLoad(page, params = {}) {
       this.loading = true;
 
-      const {
-      } = this.query;
+      const {} = this.query;
 
       let values = {
         ...this.query,
-        ...params
+        ...params,
       };
 
       getList(page.currentPage, page.pageSize, values).then(res => {
@@ -282,9 +360,41 @@
       });
     },
     tabChange(value) {
-      this.defaultTaskType = value.prop
-    }
-  }
+      this.defaultTaskType = value.prop;
+    },
+    setTaskState(state) {
+      const status = {
+        '-1': {
+          text: '未开始',
+          type: 'warning',
+        },
+        0: {
+          text: '进行中',
+          type: '',
+        },
+        1: {
+          text: '已完成',
+          type: 'success',
+        },
+      };
+      return status[state];
+    },
+    handleAssessorDetails(row) {
+      this.detailsParams = {
+        visible: true,
+        data: row,
+      };
+    },
+    handleAssessorList(row) {
+      this.assessorDialogParams = {
+        visible: true,
+        data: row,
+      };
+    },
+    handleTemplate() {
+      // 本地资源
+    },
+  },
 };
 </script>
 

--
Gitblit v1.9.3