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/evaluate/components/addSectionTask.vue |  165 +++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 136 insertions(+), 29 deletions(-)

diff --git a/src/views/evaluate/components/addSectionTask.vue b/src/views/evaluate/components/addSectionTask.vue
index 54669e0..398174d 100644
--- a/src/views/evaluate/components/addSectionTask.vue
+++ b/src/views/evaluate/components/addSectionTask.vue
@@ -1,32 +1,35 @@
 <template>
-    <el-dialog v-model="params.visible" :title="params.title" width="50%" @close="dialogClose">
+    <el-dialog v-model="params.visible" :title="params.title" width="50%" @open="openDialog" @close="dialogClose">
         <div class="content">
             <el-form :model="form" ref="formRef" :rules="rules" label-width="130px">
                 <el-form-item label="任务名称" prop="taskName">
                     <el-input v-model="form.taskName" placeholder="请输入任务名称"></el-input>
                 </el-form-item>
-                <el-form-item label="评优奖项" prop="awards">
-                    <el-input v-model="form.awards" placeholder="请输入评优奖项"></el-input>
+                <el-form-item label="评优奖项" prop="evaluateAwards">
+                    <el-input v-model="form.evaluateAwards" placeholder="请输入评优奖项"></el-input>
                 </el-form-item>
-                <el-form-item label="认定标准描述" prop="remark">
-                    <el-input v-model="form.remark" type="textarea" placeholder="请输入认定标准描述"></el-input>
+                <el-form-item label="认定标准描述" prop="identificationStandard">
+                    <el-input v-model="form.identificationStandard" type="textarea" placeholder="请输入认定标准描述"></el-input>
                 </el-form-item>
-                <el-form-item label="投票人员" prop="employees">
-                    <el-checkbox-group v-model="form.employees">
-                        <el-checkbox v-for="item in employeeDict" :key="item.id" :label="item.dictKey">
+                <el-form-item label="投票人员" prop="pollingPersons">
+                    <el-checkbox-group v-model="form.pollingPersons">
+                        <el-checkbox v-for="item in employeeDict" :key="item.id" :label="item.dictKey"
+                            @change="checkBoxChange($event, item)">
                             {{ item.dictValue }}
+                            <el-button type="primary" icon="el-icon-edit" text
+                                @click="selectionHandler(item)">设置人员</el-button>
                         </el-checkbox>
                     </el-checkbox-group>
                 </el-form-item>
                 <el-form-item label="投票时间" required>
-                    <el-form-item class="time-box" prop="candidateCutoffTimeStart">
-                        <el-date-picker v-model="form.candidateCutoffTimeStart" type="datetime" placeholder="请选择任务开始时间"
-                            style="width: 100%;" />
+                    <el-form-item class="time-box" prop="evaluateCutoffTimeStart">
+                        <el-date-picker v-model="form.evaluateCutoffTimeStart" type="datetime" placeholder="请选择任务开始时间"
+                            value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%;" />
                     </el-form-item>
                     <span class="time-span">至</span>
-                    <el-form-item class="time-box" prop="candidateCutoffTimeEnd">
-                        <el-date-picker v-model="form.candidateCutoffTimeEnd" type="datetime" placeholder="请选择任务结束时间"
-                            style="width: 100%;" />
+                    <el-form-item class="time-box" prop="evaluateCutoffTimeEnd">
+                        <el-date-picker v-model="form.evaluateCutoffTimeEnd" type="datetime" placeholder="请选择任务结束时间"
+                            value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%;" />
                     </el-form-item>
                 </el-form-item>
             </el-form>
@@ -35,14 +38,22 @@
             <el-button @click="() => params.visible = false">取消</el-button>
             <el-button type="primary" @click="submit">确定</el-button>
         </template>
+        <!-- 人员选择 -->
+        <selectionDialog :params="selectionParams" @addEvaluateParams="addEvaluateParams" />
     </el-dialog>
 </template>
 
 <script>
 import { getDict } from '@/api/dict'
+import { update, getEmployeeLevelList } from '@/api/evaluate/evaluateTask'
 import _ from 'lodash';
+import selectionDialog from './selectionDialog.vue';
 
 export default {
+    inject: ['type'],
+    components: {
+        selectionDialog
+    },
     props: {
         params: {
             type: Object,
@@ -60,42 +71,89 @@
         return {
             form: {
                 taskName: '',
-                awards: '',
-                remark: '',
-                employees: [],
-                candidateCutoffTimeStart: '',
-                candidateCutoffTimeEnd: ''
+                evaluateAwards: '',
+                identificationStandard: '',
+                pollingPersons: [],
+                votePersonObjInfo: [],
+                evaluateCutoffTimeStart: '',
+                evaluateCutoffTimeEnd: ''
             },
             rules: {
                 taskName: [
                     { required: true, message: '请输入任务名称', trigger: 'click' },
                 ],
-                awards: [
+                evaluateAwards: [
                     { required: true, message: '请输入评优奖项', trigger: 'click' },
                 ],
-                remark: [
+                identificationStandard: [
                     { required: true, message: '请输入认定标准', trigger: 'click' },
                 ],
-                employees: [
+                pollingPersons: [
                     { required: true, message: '请选择评定人员', trigger: 'click' },
                 ],
-                candidateCutoffTimeStart: [
+                evaluateCutoffTimeStart: [
                     { required: true, message: '请选择任务开始时间', trigger: 'click' },
+                    {
+                        validator: (rule, value, callback) => {
+                            if (value) {
+                                const startTime = new Date(value).getTime()
+                                const endTime = new Date(this.form.candidateCutoffTimeEnd).getTime()
+                                const nowTime = new Date().getTime()
+                                // if (nowTime > startTime) {
+                                //     callback(new Error('开始时间不能早于当前时间'))
+                                // } else
+                                if (startTime >= endTime) {
+                                    callback(new Error('结束时间不能早于等于开始时间'))
+                                } else {
+                                    callback()
+                                }
+                            }
+                        }, trigger: 'click'
+                    }
                 ],
-                candidateCutoffTimeEnd: [
+                evaluateCutoffTimeEnd: [
                     { required: true, message: '请选择任务开始时间', trigger: 'click' },
+                    {
+                        validator: (rule, value, callback) => {
+                            if (value) {
+                                const startTime = new Date(this.form.candidateCutoffTimeStart).getTime()
+                                const endTime = new Date(value).getTime()
+                                const nowTime = new Date().getTime()
+                                // if (nowTime > endTime) {
+                                //     callback(new Error('结束时间不能早于等于当前时间'))
+                                // } else 
+                                if (startTime >= endTime) {
+                                    callback(new Error('结束时间不能早于等于开始时间'))
+                                } else {
+                                    callback()
+                                }
+                            }
+                        }, trigger: 'click'
+                    }
                 ]
             },
-            employeeDict: []
+            employeeDict: [],
+            selectionParams: {}
         }
     },
     methods: {
         dialogClose() {
             this.$refs.formRef.resetFields()
         },
+        openDialog() {
+            this.initDict()
+        },
         submit() {
             this.$refs.formRef.validate(vaild => {
-                console.log(this.form);
+                if (!vaild) return
+                const data = _.cloneDeep(this.form)
+                data.pollingPersons = data.pollingPersons.join(',')
+                data.type = this.type()
+                update(data).then(res => {
+                    if (res.data.code !== 200) return
+                    this.params.visible = false
+                    this.$emit('refreshTable', { currentPage: 1, pageSize: 10 })
+                })
             })
         },
         initDict() {
@@ -106,10 +164,59 @@
                 }
                 this.employeeDict = data
             })
+        },
+        selectionHandler(row) {
+            const obj = this.form.votePersonObjInfo.find(item => item.employeeType === row.dictKey) || {}
+            this.selectionParams = {
+                visible: true,
+                data: row,
+                values: obj
+            }
+        },
+        checkBoxChange(e, { dictKey }) {
+            const index = this.form.votePersonObjInfo.findIndex(item => item.employeeType === dictKey)
+            if (!e) {
+                this.form.votePersonObjInfo.splice(index, 1)
+                return
+            }
+            getEmployeeLevelList(dictKey).then((res) => {
+                const { code, data } = res.data
+                if (code !== 200) return this.$message.error('当前级别人员加载失败,请重试!!')
+                const participateInList = data.map(item => {
+                    const { id, name, deptId, deptName, postId, postName } = item
+                    return { id, name, deptId, deptName, postId, postName }
+                })
+                const params = {
+                    employeeType: dictKey,
+                    participateIn: participateInList,
+                    notParticipateIn: []
+                }
+                if (index === -1) {
+                    this.form.votePersonObjInfo.push(params)
+                } else {
+                    this.form.votePersonObjInfo[index] = params
+                }
+            })
+        },
+        addEvaluateParams(params) {
+            const { participateIn, employeeType } = params
+            const index = this.form.votePersonObjInfo.findIndex(item => item.employeeType === employeeType)
+            const typeIndex = this.form.pollingPersons.findIndex(item => item === employeeType)
+
+            if (index === -1) {
+                if (participateIn.length > 0) {
+                    this.form.votePersonObjInfo.push(params)
+                    this.form.pollingPersons.push(params.employeeType)
+                }
+            } else {
+                if (participateIn.length > 0) {
+                    this.form.votePersonObjInfo[index] = params
+                } else {
+                    this.form.votePersonObjInfo.splice(index, 1)
+                    this.form.pollingPersons.splice(typeIndex, 1)
+                }
+            }
         }
-    },
-    mounted() {
-        this.initDict()
     }
 };
 </script>

--
Gitblit v1.9.3