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/IndividualTaskPublic.vue |  204 +++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 172 insertions(+), 32 deletions(-)

diff --git a/src/views/evaluate/components/IndividualTaskPublic.vue b/src/views/evaluate/components/IndividualTaskPublic.vue
index e519611..d773b87 100644
--- a/src/views/evaluate/components/IndividualTaskPublic.vue
+++ b/src/views/evaluate/components/IndividualTaskPublic.vue
@@ -1,48 +1,64 @@
 <template>
-    <el-dialog v-model="params.visible" title="发布评优任务" width="50%" @open="openDialog" @close="dialogClose">
-        <div class="content">
+    <el-dialog v-model="params.visible" :title="`发布评优任务(${params.data?.taskName || ''})`" width="65%" @open="openDialog"
+        @close="dialogClose" destroy-on-close>
+        <div class="content" v-loading="isLoading" element-loading-text="数据加载中,请稍后。。。">
             <el-form :model="form" ref="formRef" :rules="rules" label-position="top">
-                <el-form-item label="任务类别" prop="taskType">
+                <el-form-item prop="categoryEntities">
+                    <template #label>
+                        评优奖项
+                        <el-button type="primary" icon="el-icon-view" text
+                            @click="viewCandidateResult">查看第一轮候选结果</el-button>
+                    </template>
                     <ul class="type-list">
                         <li class="type-item">
-                            <div class="title">类别</div>
+                            <div class="title">奖项</div>
                             <div class="introduction">认定标准</div>
                             <div class="number">名额</div>
                             <div class="tool">操作</div>
                         </li>
-                        <li class="type-item" v-for="(item, index) in form.taskType" :key="index">
-                            <div class="title">{{ item.title }}</div>
+                        <li class="type-item" v-for="(item, index) in form.categoryEntities" :key="index">
+                            <div class="title">{{ item.categoryName }}</div>
                             <el-tooltip effect="dark" placement="top">
                                 <template #content>
-                                    <p style="width: 500px;">{{ item.introduction }}</p>
+                                    <p style="max-width: 500px;">{{ item.standard }}</p>
                                 </template>
                                 <div class="introduction">
-                                    {{ item.introduction }}
+                                    {{ item.standard }}
                                 </div>
                             </el-tooltip>
 
-                            <div class="number">{{ item.number }}</div>
+                            <div class="number">{{ item.peopleNum }}</div>
                             <div class="tool">
-                               <el-button type="primary" icon="el-icon-plus" text>添加候选人</el-button>
+                                <el-button type="primary" icon="el-icon-plus" text
+                                    @click="addEcCandidateHandler(item)">添加候选人</el-button>
                             </div>
                         </li>
                     </ul>
                 </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="是否可以投选本部门成员" prop="isSelfDept">
+                    <el-radio-group v-model="form.isSelfDept">
+                        <el-radio :label="1" border>是</el-radio>
+                        <el-radio :label="0" border>否</el-radio>
+                    </el-radio-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="请选择任务开始时间"
+                    <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="请选择任务结束时间"
+                    <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>
@@ -50,17 +66,31 @@
         </div>
         <template #footer>
             <el-button @click="() => params.visible = false">取消</el-button>
-            <el-button type="primary">确定发布</el-button>
+            <el-button type="primary" @click="taskPublic" :loading="isLoading">确认发布</el-button>
         </template>
+        <!-- 查看第一轮候选结果 -->
+        <candidateResult :params="candidateResultParams" />
+        <!-- 添加评优种类候选人 -->
+        <addEcCandidate :params="addEcCandidateParams" />
+        <!-- 人员选择 -->
+        <selectionDialog :params="selectionParams" @addEvaluateParams="addEvaluateParams" />
     </el-dialog>
 </template>
 
 <script>
 import _ from 'lodash';
 import { getDict } from '@/api/dict'
-import { getEcList } from '@/api/evaluate/evaluateTask'
+import { update, getEcList, getEmployeeLevelList } from '@/api/evaluate/evaluateTask'
+import addEcCandidate from './addEcCandidate.vue';
+import candidateResult from './candidateResult.vue';
+import selectionDialog from './selectionDialog.vue';
 
 export default {
+    components: {
+        addEcCandidate,
+        candidateResult,
+        selectionDialog
+    },
     props: {
         params: {
             type: Object,
@@ -74,32 +104,59 @@
     },
     data() {
         return {
+            isLoading: true,
             employeeDict: [],
             form: {
-                taskType: [],
-                employees: [],
-                candidateCutoffTimeStart: '',
-                candidateCutoffTimeEnd: ''
+                categoryEntities: [],
+                pollingPersons: [],
+                isSelfDept: 1,
+                votePersonObjInfo: [],
+                evaluateCutoffTimeStart: '',
+                evaluateCutoffTimeEnd: ''
             },
             rules: {
-                taskType: [
+                categoryEntities: [
                     { required: true, message: '任务类别不可为空', trigger: 'click' },
                 ],
-                employees: [
+                pollingPersons: [
                     { required: true, message: '请选择评定人员', trigger: 'click' },
                 ],
-                candidateCutoffTimeStart: [
+                isSelfDept: [
+                    { required: true, message: '请选择是否可以自选', trigger: 'click' },
+                ],
+                evaluateCutoffTimeStart: [
                     { required: true, message: '请选择任务开始时间', trigger: 'click' },
                 ],
-                candidateCutoffTimeEnd: [
+                evaluateCutoffTimeEnd: [
                     { required: true, message: '请选择任务开始时间', trigger: 'click' },
                 ]
             },
             page: {
                 current: 1,
-                size: 10,
+                size: 100,
                 total: 0
-            }
+            },
+            addEcCandidateParams: {},
+            candidateResultParams: {},
+            selectionParams: {}
+        }
+    },
+    watch: {
+        'params.visible': {
+            handler(value) {
+                if (!value) return
+                console.log(this.params.data.pollingPersons);
+                const pollingPersons = this.params.data.pollingPersons
+                this.form.pollingPersons = pollingPersons !== "0" ? pollingPersons.split(',') : []
+                if (typeof this.params.data.votePersonObjInfo === 'object') {
+                    this.form.votePersonObjInfo = []
+                } else {
+                    this.form.votePersonObjInfo = JSON.parse(this.params.data.votePersonObjInfo) || []
+                }
+                this.form.evaluateCutoffTimeStart = this.params.data.evaluateCutoffTimeStart || ''
+                this.form.evaluateCutoffTimeEnd = this.params.data.evaluateCutoffTimeEnd || ''
+            },
+            deep: true
         }
     },
     methods: {
@@ -111,8 +168,10 @@
             const { id } = this.params.data
             const { current, size } = this.page
             getEcList(current, size, id).then(ecResult => {
-                const { code, data } = ecResult.data
-                console.log(data);
+                const { code, data: { records } } = ecResult.data
+                if (code !== 200) return this.$message.error('评优类别加载失败')
+                this.form.categoryEntities = records
+                this.isLoading = false
             })
         },
         initDict() {
@@ -123,6 +182,87 @@
                 }
                 this.employeeDict = data
             })
+        },
+        taskPublic() {
+            this.$refs.formRef.validate(valid => {
+                if (!valid) return
+                const data = _.cloneDeep(this.form)
+                const { id } = this.params.data
+                data.id = id
+                // data.candidateState = 2
+                // data.evaluateState = 1
+                data.pollingPersons = data.pollingPersons.join(',')
+                delete data.categoryEntities
+                update(data).then(res => {
+                    if (res.data.code !== 200) return
+                    this.params.visible = false
+                    this.$emit('refreshTable', { currentPage: 1, pageSize: 10 })
+                })
+            })
+        },
+        addEcCandidateHandler(row) {
+            this.addEcCandidateParams = {
+                visible: true,
+                data: row
+            }
+        },
+        viewCandidateResult() {
+            this.candidateResultParams = {
+                visible: true,
+                data: this.params.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)
+                }
+            }
         }
     }
 };
@@ -132,7 +272,7 @@
 $borderColor: var(--el-border-color);
 
 .content {
-    max-height: 400px;
+    max-height: 600px;
     overflow-y: auto;
 
     .time-span {

--
Gitblit v1.9.3