From 1e89567955efda9eef71adc8dc02f7508374c5b0 Mon Sep 17 00:00:00 2001
From: GuLiMmo <2820890765@qq.com>
Date: Sat, 23 Dec 2023 14:24:21 +0800
Subject: [PATCH] 新增候选人弹窗修改

---
 src/views/evaluate/components/addCandidate.vue |  206 +++++++++++++++++++++++++--------------------------
 1 files changed, 101 insertions(+), 105 deletions(-)

diff --git a/src/views/evaluate/components/addCandidate.vue b/src/views/evaluate/components/addCandidate.vue
index 3da0380..50810bc 100644
--- a/src/views/evaluate/components/addCandidate.vue
+++ b/src/views/evaluate/components/addCandidate.vue
@@ -1,27 +1,30 @@
 <template>
     <el-dialog v-model="params.visible" title="新增候选人" width="60%" destroy-on-close>
-        <div class="table-box">
-            <avue-crud v-model="form" :option="option" :data="data" @row-save="rowSave">
-                <template #menu="{ row }">
-                    <el-popconfirm title="是否确认删除当前候选人?" @confirm="rowDel(row)">
-                        <template #reference>
-                            <el-button text plan type="primary" icon="el-icon-delete">删除</el-button>
-                        </template>
-                    </el-popconfirm>
-                </template>
-            </avue-crud>
-        </div>
+        <avue-crud v-model="form" :option="option" :data="data" v-model:page="table.page" :table-loading="table.loading"
+            @row-save="rowSave" @selection-change="selectionChange" @on-load="onLoad">
+            <template #menu="{ row }">
+                <el-popconfirm title="是否确认删除当前候选人?" @confirm="rowDel(row)">
+                    <template #reference>
+                        <el-button text plan type="primary" icon="el-icon-delete">删除</el-button>
+                    </template>
+                </el-popconfirm>
+            </template>
+        </avue-crud>
     </el-dialog>
 </template>
 
 <script setup>
-import { getCurrentInstance, reactive, ref, watch } from 'vue';
+import { computed, getCurrentInstance, reactive, ref, watch } from 'vue';
 import _ from 'lodash'
 import { ElMessage } from 'element-plus'
 import {
     getList
 } from '@/api/system/user';
-import { update } from '@/api/evaluate/evaluateTask';
+import {
+    getCandidateList,
+    addCandidate,
+    removeCandidate
+} from '@/api/evaluate/evaluateTask'
 
 const config = getCurrentInstance().appContext.config.globalProperties
 
@@ -39,7 +42,16 @@
 const $emit = defineEmits(['refreshTable'])
 
 const data = ref([])
-const form = ref({})
+const form = ref()
+const table = reactive({
+    loading: false,
+    page: {
+        pageSize: 10,
+        currentPage: 1,
+        total: 0,
+    },
+    selectionList: [],
+})
 
 const option = reactive({
     height: '300',
@@ -52,14 +64,15 @@
     addBtn: true,
     editBtn: false,
     delBtn: false,
-    selection: true,
+    selection: false,
     refreshBtn: false,
     dialogClickModal: false,
     menuFixed: 'right',
+    labelWidth: 100,
     column: [
         {
             label: '候选人姓名',
-            prop: 'name',
+            prop: 'userId',
             type: 'select',
             dicData: [],
             props: {
@@ -68,17 +81,31 @@
             },
             control: (val, row) => {
                 const { findObject } = config
-                const { dicData } = findObject(option.column, 'name')
-                const data = dicData.find(item => item.id === val)
-                row.deptName = data.deptName || ''
-                row.deptId = data.deptId || ''
-                form.value = row
-            }
+                const column = findObject(option.column, 'userId') || []
+                const params = column.dicData.find(item => item.id === val)
+                if (!params) return
+                row.deptName = params.deptName
+                row.postName = params.postName
+                row.userName = params.name
+            },
+            rules: [
+                {
+                    required: true,
+                    message: '请选择候选人',
+                    trigger: 'blur',
+                },
+            ]
         },
         {
             label: '部门',
             prop: 'deptName',
-            type: 'select',
+            type: 'input',
+            disabled: true,
+        },
+        {
+            label: '部门',
+            prop: 'postName',
+            type: 'input',
             disabled: true,
         }
     ]
@@ -86,90 +113,56 @@
 
 
 const initData = () => {
-    const { candidateNum } = _.cloneDeep($props.params.data)
-    const userList = []
-    candidateNum.forEach(item => {
-        const { deptName, deptId, users } = item
-        users.forEach(user => {
-            user.deptName = deptName
-            user.deptId = deptId
-            userList.push(user)
-        })
-    })
-    data.value = userList
-
     const { findObject } = config
-    const column = findObject(option.column, 'name');
+    const column = findObject(option.column, 'userId');
     getList(1, 999999, {}).then(res => {
         column.dicData = res.data.data.records
     })
 }
 
-const rowSave = (row, done) => {
-    const { findObject } = config
-    const column = findObject(option.column, 'name');
-    const params = $props.params.data
-    const info = params.candidateNum.find(item => item.deptId === row.deptId)
-    const { name } = column.dicData.find(item => item.id === row.name)
-    const is = data.value.find(item => item.id === row.name)
-    if (is) {
-        ElMessage.warning('当前候选人已存在')
-        done()
-    } else {
-        const user = {
-            id: row.name,
-            name
-        }
-        info.users.push(user)
-        update(params).then(
-            () => {
-                ElMessage({
-                    type: 'success',
-                    message: '操作成功!',
-                });
-                initData()
-                $emit('refreshTable', '')
-                done()
-            },
-            error => {
-                ElMessage({
-                    type: 'error',
-                    message: error,
-                });
-            }
-        );
-
-    }
+const rowSave = (row, done, loading) => {
+    const { data: { id, taskName } } = $props.params
+    addCandidate({
+        evaluateTaskId: id,
+        evaluateTaskName: taskName,
+        ...row
+    }).then(res => {
+        ElMessage.success('新增候选人成功');
+        onLoad(table.page);
+        done();
+    }, error => {
+        loading();
+        console.log(error);
+    })
 }
 
-const rowDel = (row) => {
-    const { $index, id, deptId } = row
-    const params = $props.params.data
-    const info = params.candidateNum.find(item => item.deptId === deptId)
-    const index = info.users.findIndex(item => item.id === id)
-    info.users.splice(index, 1)
-    // if (info.val === 0) {
-        
-    // }
-    // if (info.val > info.users.length) {
-    //     info.val = info.users.length
-    // }
-    // update(params).then(
-    //     () => {
-    //         ElMessage({
-    //             type: 'success',
-    //             message: '操作成功!',
-    //         });
-    //         initData()
-    //         $emit('refreshTable', '')
-    //     },
-    //     error => {
-    //         ElMessage({
-    //             type: 'error',
-    //             message: error,
-    //         });
-    //     }
-    // );
+const rowDel = ({ id }) => {
+    removeCandidate(id).then(res => {
+        ElMessage.success('删除当前候选人成功');
+        onLoad(table.page);
+    }, error => {
+        ElMessage.error(error);
+        console.log(error);
+    })
+}
+
+const selectionChange = (list) => {
+    table.selectionList = list;
+}
+
+const onLoad = (page, params = {}) => {
+    table.loading = true;
+
+    let values = {
+        evaluateTaskId: $props.params.data.id,
+        ...params
+    };
+    getCandidateList(page.currentPage, page.pageSize, values).then(res => {
+        const candidateRes = res.data.data;
+        table.page.total = candidateRes.total;
+        data.value = candidateRes.records;
+        table.loading = false;
+    });
 }
 
 watch(() => $props.params.visible, (val) => {
@@ -178,11 +171,14 @@
     deep: true,
     immediate: true
 })
+
+const ids = computed(() => {
+    let ids = [];
+    table.selectionList.forEach(ele => {
+        ids.push(ele.id);
+    });
+    return ids.join(',');
+})
 </script>
 
-<style lang="scss" scoped>
-.table-box {
-    height: 400px;
-    overflow-x: auto;
-}
-</style>
\ No newline at end of file
+<style lang="scss" scoped></style>
\ No newline at end of file

--
Gitblit v1.9.3