From 462b2f149d02b9e7ecca82922a68dfbba4b4baa5 Mon Sep 17 00:00:00 2001
From: GuLiMmo <2820890765@qq.com>
Date: Fri, 29 Dec 2023 17:19:15 +0800
Subject: [PATCH] 部门评优修改
---
src/views/evaluate/components/taskSetting.vue | 58 ++++++++++++++++++-
src/option/evaluate/evaluateTask.js | 8 +-
src/views/evaluate/components/selectAssessor.vue | 4
src/views/evaluate/components/addDialog.vue | 2
src/views/evaluate/components/addCandidate.vue | 53 ++++++++++++++---
src/views/evaluate/evaluateTask.vue | 16 +++++
src/views/evaluate/components/addAssessors.vue | 9 ++-
src/option/employee/list.js | 1
8 files changed, 127 insertions(+), 24 deletions(-)
diff --git a/src/option/employee/list.js b/src/option/employee/list.js
index 90c41ae..f33a4a3 100644
--- a/src/option/employee/list.js
+++ b/src/option/employee/list.js
@@ -55,6 +55,7 @@
label: '手机号',
prop: 'phone',
slot: true,
+ search: true,
display: false,
},
],
diff --git a/src/option/evaluate/evaluateTask.js b/src/option/evaluate/evaluateTask.js
index d94ac22..e0d57c7 100644
--- a/src/option/evaluate/evaluateTask.js
+++ b/src/option/evaluate/evaluateTask.js
@@ -98,10 +98,11 @@
minWidth: '100px'
},
{
- label: "第一轮结束时间",
+ label: "第一轮时间",
prop: "candidateCutoffTimeEnd",
type: "input",
- minWidth: '170px'
+ minWidth: '170px',
+ isSlot: true
},
{
label: "评优数量",
@@ -125,7 +126,8 @@
label: "第二轮结束时间",
prop: "evaluateCutoffTimeEnd",
type: "input",
- minWidth: '170px'
+ minWidth: '170px',
+ isSlot: true
},
{
label: "创建人",
diff --git a/src/views/evaluate/components/addAssessors.vue b/src/views/evaluate/components/addAssessors.vue
index eefb446..e2ac71b 100644
--- a/src/views/evaluate/components/addAssessors.vue
+++ b/src/views/evaluate/components/addAssessors.vue
@@ -3,9 +3,9 @@
<div class="tips">
<el-tag style="width: 100%;" size="large">当前评优任务:{{ tipInfo.evaluateTaskName }}</el-tag>
<div class="tags">
- <el-tag size="large" class="item">候选人姓名:{{ tipInfo.userName }}</el-tag>
- <el-tag size="large" class="item">候选人部门:{{ tipInfo.deptName }}</el-tag>
- <el-tag size="large" class="item">候选人职位:{{ tipInfo.postName }}</el-tag>
+ <el-tag size="large" class="item" v-if="!curType">候选人姓名:{{ tipInfo.userName }}</el-tag>
+ <el-tag size="large" class="item" >候选人部门:{{ tipInfo.deptName }}</el-tag>
+ <el-tag size="large" class="item" v-if="!curType">候选人职位:{{ tipInfo.postName }}</el-tag>
</div>
</div>
<avue-crud :data="table.data" :option="tableOption" v-model:page="table.page">
@@ -37,6 +37,9 @@
}
})
+const type = inject('type')
+const curType = computed(() => type())
+
const tableOption = markRaw({
height: '240',
calcHeight: 30,
diff --git a/src/views/evaluate/components/addCandidate.vue b/src/views/evaluate/components/addCandidate.vue
index 5825a94..257c017 100644
--- a/src/views/evaluate/components/addCandidate.vue
+++ b/src/views/evaluate/components/addCandidate.vue
@@ -1,16 +1,17 @@
<template>
- <el-dialog v-model="props.dialogParams.visible" title="添加候选人" @close="dialogClose">
+ <el-dialog v-model="props.dialogParams.visible" :title="`${curType ? '添加候选部门' : '添加候选人'}`" @close="dialogClose">
<div style="margin-bottom: 20px;" v-if="!form.deptId">
<el-alert title="请先选择部门信息" type="warning" />
</div>
<el-form :model="form" ref="formRef" :rules="rules" label-width="70px">
<el-row>
- <el-col :span="12">
+ <el-col :span="!curType ? 12 : 24">
<el-form-item label="部门" prop="deptId">
- <el-cascader v-model="form.deptId" :props="cascaderProps" placeholder="请选择部门" @change="deptChange" style="width: 100%;" />
+ <el-cascader v-model="form.deptId" :props="cascaderProps" placeholder="请选择部门" @change="deptChange"
+ style="width: 100%;" />
</el-form-item>
</el-col>
- <el-col :span="12">
+ <el-col :span="12" v-if="!curType">
<el-form-item label="候选人" prop="userId">
<el-select v-model="form.userId" placeholder="请选择候选人"
:disabled="userSelectOption.length > 0 ? false : true" @change="userSelectChange"
@@ -21,7 +22,7 @@
</el-select>
</el-form-item>
</el-col>
- <el-col :span="12">
+ <el-col :span="12" v-if="!curType">
<el-form-item label="职务">
<el-input v-model="form.postName" placeholder="请填写职务" disabled />
</el-form-item>
@@ -36,7 +37,7 @@
</template>
<script setup>
-import { computed, markRaw, reactive, ref, watch } from 'vue';
+import { computed, inject, markRaw, reactive, ref, watch } from 'vue';
import { getDeptLazyTree } from '@/api/system/dept.js'
import { getList } from '@/api/system/user.js'
import { addCandidate } from '@/api/evaluate/evaluateTask'
@@ -60,6 +61,9 @@
deptName: '',
postName: ''
})
+
+const type = inject('type')
+const curType = computed(() => type())
const rules = markRaw({
userId: [
@@ -88,8 +92,18 @@
postName: ''
})
+const requestSectionParams = reactive({
+ evaluateTaskId: '',
+ evaluateTaskName: '',
+ deptId: '',
+ deptName: ''
+})
+
// 当前部门
const currentDeptId = ref('')
+
+
+const deptList = ref([])
// options 数据
const userSelectOption = ref([])
@@ -144,12 +158,20 @@
})
}
+
// 选择部门改变
const deptChange = async (value) => {
const id = value[value.length - 1]
currentDeptId.value = id
- const userList = await initUserList(id)
- userSelectOption.value = userList
+ if (!curType) {
+ const userList = await initUserList(id)
+ userSelectOption.value = userList
+ } else {
+ const dept = deptList.value.find(item => item.id == id)
+ requestSectionParams.deptId = dept.value || ''
+ requestSectionParams.deptName = dept.title || ''
+ console.log(requestSectionParams);
+ }
}
// 级联配置
@@ -162,10 +184,12 @@
const level = node.level || 0
if (level == 0) {
const res = await initDept(level)
+ deptList.value = res
resovle(res)
} else {
const { value } = node
const res = await initDept(value)
+ deptList.value = res
resovle(res)
}
},
@@ -191,7 +215,8 @@
const submit = () => {
formRef.value.validate(valid => {
if (!valid) return ElMessage.error('添加候选人失败')
- addCandidate(requestParams).then(res => {
+ const params = curType? requestSectionParams : requestParams
+ addCandidate(params).then(res => {
ElMessage.success('添加候选人成功')
props.dialogParams.visible = false
emits('refresh')
@@ -208,8 +233,14 @@
watch(() => props.dialogParams.visible, (val) => {
if (!val) return
const { evaluateTaskId, evaluateTaskName } = props.dialogParams.taskParams
- requestParams.evaluateTaskName = evaluateTaskName
- requestParams.evaluateTaskId = evaluateTaskId
+ if (!curType) {
+ requestParams.evaluateTaskName = evaluateTaskName
+ requestParams.evaluateTaskId = evaluateTaskId
+ } else {
+ requestSectionParams.evaluateTaskName = evaluateTaskName
+ requestSectionParams.evaluateTaskId = evaluateTaskId
+ }
+
}, {
deep: true
})
diff --git a/src/views/evaluate/components/addDialog.vue b/src/views/evaluate/components/addDialog.vue
index 33dca40..eb830e9 100644
--- a/src/views/evaluate/components/addDialog.vue
+++ b/src/views/evaluate/components/addDialog.vue
@@ -128,9 +128,9 @@
},
handleSubmit() {
this.$refs.addFormRef.validate(valid => {
- this.params.type && (data.evaluateState = 1)
if (!valid) return
const data = _.cloneDeep(this.addForm)
+ this.params.type && (data.evaluateState = 1)
Object.keys(data).forEach(key => {
if (['candidateCutoffTime', 'evaluateCutoffTime'].includes(key)) {
const [start, end] = this.addForm[key]
diff --git a/src/views/evaluate/components/selectAssessor.vue b/src/views/evaluate/components/selectAssessor.vue
index 0167ba2..f2e0e2e 100644
--- a/src/views/evaluate/components/selectAssessor.vue
+++ b/src/views/evaluate/components/selectAssessor.vue
@@ -11,8 +11,8 @@
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="候选人" prop="userId">
- <el-select v-model="form.userId" placeholder="请选择候选人"
+ <el-form-item label="评定人" prop="userId">
+ <el-select v-model="form.userId" placeholder="请选择评选人"
:disabled="userSelectOption.length > 0 ? false : true" @change="userSelectChange"
style="width: 100%;">
<el-option v-for="item in userSelectOption" :label="item.name" :key="item.id"
diff --git a/src/views/evaluate/components/taskSetting.vue b/src/views/evaluate/components/taskSetting.vue
index c178dc4..ee062c9 100644
--- a/src/views/evaluate/components/taskSetting.vue
+++ b/src/views/evaluate/components/taskSetting.vue
@@ -1,9 +1,11 @@
<template>
- <el-dialog v-model="props.params.visible" :title="`${taskParams.evaluateTaskName}-候选人列表`" width="60%" destroy-on-close
+ <el-dialog v-model="props.params.visible" :title="`${taskParams.evaluateTaskName}-${curType ? '部门列表' : '候选人列表'}`" width="60%" destroy-on-close
align-center>
- <avue-crud :data="table.data" :option="candidatesOptions" v-model:page="table.page" @refresh-change="refreshChange">
+ <avue-crud :data="table.data" :option="option" v-model:page="table.page" @refresh-change="refreshChange">
<template #menu-left>
- <el-button type="primary" icon="el-icon-plus" @click="addCandidateDialog">新增候选人</el-button>
+ <el-button type="primary" icon="el-icon-plus" @click="addCandidateDialog">
+ {{ curType? '添加部门' : '添加候选人' }}
+ </el-button>
</template>
<template #menu="{ row }">
<el-button type="primary" icon="el-icon-plus" text plain @click="addAssessor(row)">添加评定人</el-button>
@@ -22,7 +24,7 @@
<script setup>
import addCandidate from './addCandidate.vue';
import addAssessors from './addAssessors.vue';
-import { markRaw, reactive, watch } from 'vue';
+import { computed, inject, markRaw, reactive, watch } from 'vue';
import { getCandidateList, removeCandidate } from '@/api/evaluate/evaluateTask'
import { ElMessage } from 'element-plus';
@@ -30,6 +32,8 @@
visible: false,
taskParams: {}
})
+
+const type = inject('type')
const props = defineProps({
params: {
@@ -99,6 +103,50 @@
]
})
+const setcionOptions = markRaw({
+ height: '400',
+ calcHeight: 30,
+ tip: false,
+ searchShow: true,
+ searchMenuSpan: 6,
+ border: true,
+ index: true,
+ viewBtn: false,
+ addBtn: false,
+ editBtn: false,
+ delBtn: false,
+ selection: false,
+ dialogClickModal: false,
+ menuFixed: 'right',
+ labelWidth: '70',
+ column: [
+ {
+ label: '任务id',
+ prop: 'evaluateTaskId',
+ type: 'input',
+ hide: true,
+ },
+ {
+ label: '任务名称',
+ prop: 'evaluateTaskName',
+ type: 'input'
+ },
+ {
+ label: '部门id',
+ prop: 'deptId',
+ type: 'input',
+ hide: true,
+ },
+ {
+ label: '部门名称',
+ prop: 'deptName',
+ type: 'input'
+ },
+ ]
+})
+
+const option = computed(() => type() ? setcionOptions : candidatesOptions)
+
const table = reactive({
data: [],
page: {
@@ -139,6 +187,8 @@
candidateInfo: {}
})
+const curType = computed(() => type())
+
const addAssessor = (row) => {
dialogAssessorParams.visible = true
dialogAssessorParams.taskInfo = taskParams
diff --git a/src/views/evaluate/evaluateTask.vue b/src/views/evaluate/evaluateTask.vue
index eefa465..232ec84 100644
--- a/src/views/evaluate/evaluateTask.vue
+++ b/src/views/evaluate/evaluateTask.vue
@@ -21,6 +21,16 @@
<!-- <el-button type="primary" text plain icon="el-icon-download">导出</el-button> -->
<el-button type="danger" text plain icon="el-icon-delete" @click="rowDel(row)">删除</el-button>
</template>
+ <template #candidateCutoffTimeEnd="{ row }">
+ {{ row.candidateCutoffTimeStart || '开始时间为完善' }}
+ <div style="text-align: center;">-</div>
+ {{ row.candidateCutoffTimeEnd || '结束时间为完善' }}
+ </template>
+ <template #evaluateCutoffTimeEnd="{ row }">
+ {{ row.evaluateCutoffTimeStart || '开始时间为完善' }}
+ <div style="text-align: center;">-</div>
+ {{ row.candidateCutoffTimeEnd || '结束时间为完善' }}
+ </template>
</avue-crud>
<!-- 新增编辑弹窗 -->
<add-dialog :params="addParams" @refreshTable="this.onLoad" />
@@ -312,10 +322,16 @@
taskSettingDialog(row) {
this.taskSettingParams = {
visible: true,
+ type: this.defaultTaskType,
task: row
}
}
},
+ provide() {
+ return {
+ type: () => this.defaultTaskType
+ }
+ }
};
</script>
--
Gitblit v1.9.3