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