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 | 138 ++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 122 insertions(+), 16 deletions(-)
diff --git a/src/views/evaluate/components/IndividualTaskPublic.vue b/src/views/evaluate/components/IndividualTaskPublic.vue
index c796021..d773b87 100644
--- a/src/views/evaluate/components/IndividualTaskPublic.vue
+++ b/src/views/evaluate/components/IndividualTaskPublic.vue
@@ -1,15 +1,17 @@
<template>
- <el-dialog v-model="params.visible" :title="`发布评优任务(${params.data?.taskName || ''})`" 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 prop="categoryEntities">
<template #label>
- 评优类别
- <el-button type="primary" icon="el-icon-view" text>查看第一轮候选结果</el-button>
+ 评优奖项
+ <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>
@@ -27,17 +29,27 @@
<div class="number">{{ item.peopleNum }}</div>
<div class="tool">
- <el-button type="primary" icon="el-icon-plus" text @click="addEcCandidateHandler(item)">添加候选人</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="pollingPersons">
<el-checkbox-group v-model="form.pollingPersons">
- <el-checkbox v-for="item in employeeDict" :key="item.id" :label="item.dictKey">
+ <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="evaluateCutoffTimeStart">
@@ -54,21 +66,30 @@
</div>
<template #footer>
<el-button @click="() => params.visible = false">取消</el-button>
- <el-button type="primary" @click="taskPublic">确认发布</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 { update, 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
+ addEcCandidate,
+ candidateResult,
+ selectionDialog
},
props: {
params: {
@@ -83,10 +104,13 @@
},
data() {
return {
+ isLoading: true,
employeeDict: [],
form: {
categoryEntities: [],
pollingPersons: [],
+ isSelfDept: 1,
+ votePersonObjInfo: [],
evaluateCutoffTimeStart: '',
evaluateCutoffTimeEnd: ''
},
@@ -96,6 +120,9 @@
],
pollingPersons: [
{ required: true, message: '请选择评定人员', trigger: 'click' },
+ ],
+ isSelfDept: [
+ { required: true, message: '请选择是否可以自选', trigger: 'click' },
],
evaluateCutoffTimeStart: [
{ required: true, message: '请选择任务开始时间', trigger: 'click' },
@@ -109,7 +136,27 @@
size: 100,
total: 0
},
- addEcCandidateParams: {}
+ 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: {
@@ -124,6 +171,7 @@
const { code, data: { records } } = ecResult.data
if (code !== 200) return this.$message.error('评优类别加载失败')
this.form.categoryEntities = records
+ this.isLoading = false
})
},
initDict() {
@@ -141,14 +189,14 @@
const data = _.cloneDeep(this.form)
const { id } = this.params.data
data.id = id
- data.candidateState = 2
- data.evaluateState = 1
+ // 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 })
+ this.params.visible = false
+ this.$emit('refreshTable', { currentPage: 1, pageSize: 10 })
})
})
},
@@ -156,6 +204,64 @@
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)
+ }
}
}
}
@@ -166,7 +272,7 @@
$borderColor: var(--el-border-color);
.content {
- max-height: 400px;
+ max-height: 600px;
overflow-y: auto;
.time-span {
--
Gitblit v1.9.3