From cb2a139d5be99339a5e3f00bdf812793b12b29a4 Mon Sep 17 00:00:00 2001
From: GuLiMmo <2820890765@qq.com>
Date: Thu, 28 Dec 2023 19:39:24 +0800
Subject: [PATCH] 考核任务、评优任务页面更新

---
 src/views/evaluate/components/addDialog.vue |  175 +++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 119 insertions(+), 56 deletions(-)

diff --git a/src/views/evaluate/components/addDialog.vue b/src/views/evaluate/components/addDialog.vue
index b541c94..f60bc69 100644
--- a/src/views/evaluate/components/addDialog.vue
+++ b/src/views/evaluate/components/addDialog.vue
@@ -1,7 +1,7 @@
 <template>
-    <el-dialog v-model="params.visible" :rules="rules" :title="params.title" width="60%" destroy-on-close>
+    <el-dialog v-model="params.visible" :title="params.title" width="70%" destroy-on-close @close="dialogClose">
         <div class="content">
-            <el-form :model="addForm" label-width="130px" :rules="rules" ref="addFormRef">
+            <el-form :model="addForm" label-width="170px" :rules="rules" ref="addFormRef">
                 <el-form-item label="任务名称:" prop="taskName">
                     <el-input v-model="addForm.taskName" placeholder="请输入任务名称"></el-input>
                 </el-form-item>
@@ -9,50 +9,65 @@
                     <el-input v-model="addForm.taskType" placeholder="请输入任务类别"></el-input>
                 </el-form-item>
                 <el-form-item label="认定标准描述:" prop="remark">
-                    <el-input v-model="addForm.remark" placeholder="请输入认定标准描述"></el-input>
+                    <el-input type="textarea" v-model="addForm.remark" placeholder="请输入认定标准描述"></el-input>
                 </el-form-item>
-                <!-- <el-form-item label="评优类型:" prop="type">
-                    <el-select disabled v-model="addForm.type" placeholder="请选择评优类型" style="width: 100%;">
-                        <el-option label="个人评优" value="0" />
-                        <el-option label="部门评优" value="1" />
-                    </el-select>
-                </el-form-item> -->
                 <el-form-item :label="params.type ? '评定人:' : '候选部门:'" prop="candidateNum">
-                    <el-select v-model="selectGroup" value-key="deptId" multiple style="width: 100%;" placeholder="请选择候选部门">
+                    <el-select :disabled="!addForm.taskName" v-model="selectGroup" value-key="deptId" multiple style="width: 100%;" placeholder="请选择候选部门"
+                        collapse-tags collapse-tags-tooltip :max-collapse-tags="4">
                         <el-option v-for="dept in depts" :key="dept.deptId"
                             :label="dept.employees.length === 0 ? (dept.deptName + '(当前部门下员工人数为0)') : dept.deptName"
                             :value="dept" :disabled="dept.employees.length === 0"></el-option>
                     </el-select>
                     <div class="select-list">
-                        <el-form-item v-for="content in selectGroup" :key="content.deptId" :label="content.deptName"
-                            class="select-item">
-                            <span v-if="!params.type">
-                                <el-input-number min="0" :max="content.employees.length || Infinity" v-model="content.val"
-                                    controls-position="right" placeholder="请输入候选人数量" class="select-num"></el-input-number>
-                            </span>
-                            <el-select v-model="content.users" value-key="id" multiple
-                                :placeholder="params.type ? '请选择评定人' : '请输入候选人'">
-                                <div class="allSelected">
-                                    <el-checkbox @change="handleEmployeeChange($event, content)">全选</el-checkbox>
-                                </div>
-                                <el-option v-for="employee in content.employees" :key="employee.id" :label="employee.name"
-                                    :value="employee"></el-option>
-                            </el-select>
-                        </el-form-item>
+                        <div v-if="!addForm.taskName">
+                            <el-alert title="请先填写任务名称" type="warning" style="margin-top: 15px;" />
+                        </div>
+                        <div v-else>
+                            <el-form-item label-width="130px" v-for="content in selectGroup" :key="content.deptId"
+                                :label="content.deptName" required class="select-item">
+                                <span v-if="!params.type">
+                                    <el-input-number min="0" :max="content.employees.length || Infinity"
+                                        v-model="content.val" controls-position="right" placeholder="请输入候选人数量"
+                                        class="select-num"></el-input-number>
+                                </span>
+                                <el-select v-model="content.users" value-key="id" multiple collapse-tags
+                                    collapse-tags-tooltip :max-collapse-tags="4"
+                                    :placeholder="params.type ? '请选择评定人' : '请选择候选人'">
+                                    <div class="allSelected">
+                                        <el-checkbox @change="handleEmployeeChange($event, content)">全选</el-checkbox>
+                                    </div>
+                                    <el-option v-for="employee in content.employees" :key="employee.id"
+                                        :label="employee.name" :value="employee"></el-option>
+                                </el-select>
+                                <el-button type="primary" @click="assessorDialog(content)"
+                                    v-if="!params.type">设置评选人</el-button>
+                            </el-form-item>
+                        </div>
+
                     </div>
                 </el-form-item>
-                <el-form-item label="候选人截止日期:" prop="candidateCutoffTime" v-if="!params.type">
-                    <el-date-picker v-model="addForm.candidateCutoffTime" type="datetime" placeholder="请选择截止时间"
-                        format="YYYY-MM-DD HH:mm:ss" valueFormat="YYYY-MM-DD HH:mm:ss" style="width: 100%;" />
+                <el-form-item :label="`${params.type ? '评优截止日期' : '第一次评优截止日期'}`" prop="candidateCutoffTime">
+                    <el-date-picker v-model="addForm.candidateCutoffTime" type="datetimerange" placeholder="请选择截止时间"
+                        start-placeholder="请选择开始时间" end-placeholder="请选择结束时间" format="YYYY-MM-DD HH:mm:ss"
+                        valueFormat="YYYY-MM-DD HH:mm:ss" style="width: 100%;" />
                 </el-form-item>
                 <el-form-item label="评优数量:" prop="evaluateNum">
-                    <el-input-number min="0" :max="(params.type? false : maxEvaluateNum) || Infinity" v-model="addForm.evaluateNum"
-                        controls-position="right" :placeholder="`请输入评优数量${ params.type? '' : '(最多可选' + maxEvaluateNum + '人)' }`"
+                    <el-input-number min="0" :max="(params.type ? false : maxEvaluateNum) || Infinity"
+                        v-model="addForm.evaluateNum" controls-position="right"
+                        :placeholder="`请输入评优数量${params.type ? '' : '(最多可选' + maxEvaluateNum + '人)'}`"
                         class="evaluateNum-input"></el-input-number>
                 </el-form-item>
-                <el-form-item label="评优截止日期:" prop="evaluateCutoffTime" v-if="params.type">
-                    <el-date-picker v-model="addForm.evaluateCutoffTime" type="datetime" placeholder="请选择截止时间"
-                        format="YYYY-MM-DD HH:mm:ss" valueFormat="YYYY-MM-DD HH:mm:ss" style="width: 100%;" />
+                <el-form-item label="是否需要进行二次评优:" prop="isAgain" v-if="!params.type">
+                    <el-radio-group v-model="addForm.isAgain">
+                        <el-radio :label='1'>是</el-radio>
+                        <el-radio :label='0'>否</el-radio>
+                    </el-radio-group>
+                </el-form-item>
+                <el-form-item :label="`${params.type ? '评优截止日期:' : '第二次评优截止日期:'}`" prop="evaluateCutoffTime"
+                    v-if="addForm.isAgain">
+                    <el-date-picker v-model="addForm.evaluateCutoffTime" type="datetimerange" start-placeholder="请选择开始时间"
+                        end-placeholder="请选择结束时间" format="YYYY-MM-DD HH:mm:ss" valueFormat="YYYY-MM-DD HH:mm:ss"
+                        style="width: 100%;" />
                 </el-form-item>
             </el-form>
         </div>
@@ -63,6 +78,7 @@
             </span>
         </template>
     </el-dialog>
+    <set-assessor :params="assessorDialogParams"></set-assessor>
 </template>
 
 <script>
@@ -71,8 +87,12 @@
 import { add, update } from '@/api/evaluate/evaluateTask';
 import { getList } from '@/api/system/user.js';
 import _ from 'lodash';
+import setAssessor from './setAssessor.vue';
 
 export default {
+    components: {
+        setAssessor
+    },
     props: {
         params: {
             type: Object,
@@ -82,6 +102,7 @@
                     title: '新增',
                     isEdit: false,
                     type: 0,
+                    taskData: {},
                     addForm: {},
                 };
             },
@@ -98,12 +119,17 @@
                 taskType: '',
                 remark: '',
                 type: '',
-                candidateNum: [],
+                candidateNum: 0,
                 candidateCutoffTime: '',
+                candidateCutoffTimeStart: '',
+                candidateCutoffTimeEnd: '',
+                evaluateCutoffTimeStart: '',
+                evaluateCutoffTimeEnd: '',
                 candidateState: '',
                 evaluateNum: '',
                 evaluateCutoffTime: '',
                 evaluateState: '',
+                isAgain: null,
                 createUser: '',
                 createDept: '',
                 createTime: '',
@@ -134,11 +160,18 @@
                 evaluateNum: [
                     { required: true, message: '请输入评优数量', trigger: 'click' }
                 ],
+                isAgain: [
+                    { required: true, message: '请选择是否进行二次评优', trigger: 'click' }
+                ],
                 evaluateCutoffTime: [
                     { required: true, message: '请选择评优截止时间', trigger: 'click' },
                 ],
             },
             maxEvaluateNum: 0,
+            assessorDialogParams: {
+                visible: false,
+                data: []
+            }
         };
     },
     watch: {
@@ -157,27 +190,27 @@
         },
         selectGroup: {
             handler(val) {
-                this.addForm.candidateNum = [];
-                this.maxEvaluateNum = 0;
+                // this.addForm.candidateNum = 0;
+                // this.addForm.candidateEntities = []
                 val.forEach(item => {
-                    const users = [];
-                    item.users.forEach(user => {
-                        users.push({
-                            id: user.id,
-                            name: user.name,
-                        });
-                    });
-                    if (!this.params.type) {
-                        this.maxEvaluateNum += (item.val * 1);
-                    } else {
-                        this.maxEvaluateNum += item.users.length;
-                    }
-                    this.addForm.candidateNum.push({
-                        deptId: item.deptId,
-                        deptName: item.deptName,
-                        val: this.params.type ? item.users.length : item.val,
-                        users,
-                    });
+                    //     const candidates = []
+                    //     item.users.forEach(user => {
+                    //         users.push({
+                    //             id: user.id,
+                    //             name: user.name,
+                    //         });
+                    //     });
+                    // if (!this.params.type) {
+                    //     this.maxEvaluateNum += (item.val * 1);
+                    // } else {
+                    //     this.maxEvaluateNum += item.users.length;
+                    // }
+                    // this.addForm.candidateNum.push({
+                    //     deptId: item.deptId,
+                    //     deptName: item.deptName,
+                    //     val: this.params.type ? item.users.length : item.val,
+                    //     users,
+                    // });
                 });
             },
             deep: true,
@@ -195,13 +228,25 @@
             if (isExist) {
                 this.$message.warning(`${isExist.deptName}候选人人数不可为空或者0`)
             } else {
+                Object.keys(this.addForm).forEach(key => {
+                    if (['evaluateCutoffTime', 'candidateCutoffTime'].includes(key)) {
+                        const [start, end] = this.addForm[key]
+                        if (key === 'candidateCutoffTime') {
+                            this.addForm.candidateCutoffTimeStart = start
+                            this.addForm.candidateCutoffTimeEnd = end
+                        } else if (this.addForm.isAgain) {
+                            this.addForm.evaluateCutoffTimeStart = start
+                            this.addForm.evaluateCutoffTimeEnd = end
+                        }
+                    }
+                })
                 this.params.isEdit ? this.handleEdit() : this.handleSubmit()
             }
         },
         handleSubmit() {
             this.$refs.addFormRef.validate(valid => {
                 this.params.type && (this.addForm.evaluateState = 1)
-                add(this.addForm).then(
+                valid && add(this.addForm).then(
                     () => {
                         this.$message({
                             type: 'success',
@@ -220,7 +265,7 @@
         },
         handleEdit() {
             this.$refs.addFormRef.validate(valid => {
-                update(this.addForm).then(
+                valid && update(this.addForm).then(
                     () => {
                         this.$message({
                             type: 'success',
@@ -292,6 +337,7 @@
             defaultUsers.length > 0 && update(this.addForm)
         },
         handleEmployeeChange(val, content) {
+            console.log(this.params);
             if (val) {
                 content.users = []
                 content.employees.forEach(item => {
@@ -302,6 +348,19 @@
                 })
             } else {
                 content.users = []
+            }
+        },
+        dialogClose() {
+            this.selectGroup = []
+            this.$refs.addFormRef.resetFields()
+        },
+        assessorDialog(value) {
+            if (value.users.length == 0) {
+                return this.$message.warning('请选择候选人')
+            }
+            this.assessorDialogParams = {
+                visible: true,
+                data: value
             }
         }
     },
@@ -329,6 +388,10 @@
                 flex: 5;
                 margin-left: 10px;
             }
+
+            .el-button {
+                margin-left: 10px;
+            }
         }
     }
 

--
Gitblit v1.9.3