From 4c8e9a0c4dc32be637a244e8d97cdea709a2c08c Mon Sep 17 00:00:00 2001
From: GuLiMmo <2820890765@qq.com>
Date: Thu, 14 Dec 2023 17:12:24 +0800
Subject: [PATCH] 评优任务页面修改

---
 src/option/evaluate/evaluateTask.js                  |   17 +++
 src/views/assessment/components/assessmentWeight.vue |   43 ++++---
 src/api/assessment/assessmentSet.js                  |   28 +++++
 src/option/assessmentTask/assessmentTask.js          |    2 
 src/views/evaluate/components/addDialog.vue          |  170 ++++++++++++++++++++++------------
 src/views/evaluate/evaluateTask.vue                  |   29 ++---
 src/views/assessment/assessmentTask.vue              |    8 +
 7 files changed, 201 insertions(+), 96 deletions(-)

diff --git a/src/api/assessment/assessmentSet.js b/src/api/assessment/assessmentSet.js
index 5a568af..cb0d222 100644
--- a/src/api/assessment/assessmentSet.js
+++ b/src/api/assessment/assessmentSet.js
@@ -35,9 +35,29 @@
   })
 }
 
+export const getDeptDetail = (id) => {
+  return request({
+    url: '/assessment/assessmentSetDept/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
 export const remove = (ids) => {
   return request({
     url: '/assessment/assessmentSet/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const removeDept = (ids) => {
+  return request({
+    url: '/assessment/assessmentSetDept/remove',
     method: 'post',
     params: {
       ids,
@@ -69,3 +89,11 @@
   })
 }
 
+export const updateDept = (row) => {
+  return request({
+    url: '/assessment/assessmentSetDept/submit',
+    method: 'post',
+    data: row
+  })
+}
+
diff --git a/src/option/assessmentTask/assessmentTask.js b/src/option/assessmentTask/assessmentTask.js
index 6d9fc3d..7988b33 100644
--- a/src/option/assessmentTask/assessmentTask.js
+++ b/src/option/assessmentTask/assessmentTask.js
@@ -53,9 +53,11 @@
       label: "考核类型",
       prop: "type",
       type: "select",
+      disabled: true,
       formatter: (res) => {
         return res.type === 0? '个人考核' : '部门考核';
       },
+      value: 0,
       dicData: [
         {
           label: '人员考核任务',
diff --git a/src/option/evaluate/evaluateTask.js b/src/option/evaluate/evaluateTask.js
index c406616..56ffc56 100644
--- a/src/option/evaluate/evaluateTask.js
+++ b/src/option/evaluate/evaluateTask.js
@@ -5,7 +5,7 @@
 }
 
 export default {
-  height:'auto',
+  height: 'auto',
   calcHeight: 30,
   tip: false,
   searchShow: true,
@@ -76,7 +76,20 @@
         }
         return num + '人'
       },
-      
+    },
+    {
+      label: "类型",
+      prop: 'type',
+      type: 'select',
+      hide: true,
+      dicData: [{
+        label: '个人评优',
+        value: 0,
+      },
+      {
+        label: '部门评优',
+        value: 1,
+      }]
     },
     {
       label: "候选人截止日期",
diff --git a/src/views/assessment/assessmentTask.vue b/src/views/assessment/assessmentTask.vue
index a57bc29..15d01af 100644
--- a/src/views/assessment/assessmentTask.vue
+++ b/src/views/assessment/assessmentTask.vue
@@ -85,6 +85,14 @@
         let params = {
           type: n
         }
+        // 设置默认值
+        const column = this.option.column
+        column.some(item => {
+          if (item.prop === 'type') {
+            item.value = n
+            return true
+          }
+        })
         this.page.currentPage = 1;
         this.onLoad(this.page, params);
       },
diff --git a/src/views/assessment/components/assessmentWeight.vue b/src/views/assessment/components/assessmentWeight.vue
index 87c07a6..be220b3 100644
--- a/src/views/assessment/components/assessmentWeight.vue
+++ b/src/views/assessment/components/assessmentWeight.vue
@@ -5,7 +5,7 @@
                 <ul class="info">
                     <li>考核权重</li>
                     <li v-if="!params.isDept">
-                        <el-tag size="large">被考核人:{{ params.name}}</el-tag>
+                        <el-tag size="large">被考核人:{{ params.name }}</el-tag>
                     </li>
                     <li>
                         <el-tag size="large">部门:{{ params.deptName }}</el-tag>
@@ -25,7 +25,7 @@
 </template>
   
 <script>
-import { getList, getDeptList, getDetail, remove, add, addDept, update } from '@/api/assessment/assessmentSet'
+import { getList, getDeptList, getDetail, getDeptDetail, remove, removeDept, add, addDept, update, updateDept } from '@/api/assessment/assessmentSet'
 
 export default {
     props: {
@@ -52,7 +52,7 @@
                 index: true,
                 addBtn: true,
                 viewBtn: true,
-                editBtn: false,
+                editBtn: true,
                 delBtn: true,
                 menuWidth: 200,
                 labelWidth: 120,
@@ -184,21 +184,21 @@
             !this.params.isDept ? row.userId = this.params.id : row.deptId = this.params.id
             const toUser = this.selectList.find(option => row.toUserName === option.name)
             row.toUserId = toUser.id
-            console.log(row);
-            (this.params.isDept ? addDept(row) : add(row)).then(() => {
-                this.onLoad(this.page);
-                this.$message({
-                    type: "success",
-                    message: "操作成功!"
+                (this.params.isDept ? addDept(row) : add(row)).then(() => {
+                    this.onLoad(this.page);
+                    this.$message({
+                        type: "success",
+                        message: "操作成功!"
+                    });
+                    done();
+                }, error => {
+                    loading();
+                    window.console.log(error);
                 });
-                done();
-            }, error => {
-                loading();
-                window.console.log(error);
-            });
         },
         rowUpdate(row, index, done, loading) {
-            update(row).then(() => {
+            console.log(row);
+            (this.params.isDept ? updateDept(row) : update(row)).then(() => {
                 this.onLoad(this.page);
                 this.$message({
                     type: "success",
@@ -217,7 +217,8 @@
                 type: "warning"
             })
                 .then(() => {
-                    return remove(row.id);
+                    // return remove(row.id);
+                    return (this.params.isDept ? removeDept(row.id) : remove(row.id))
                 })
                 .then(() => {
                     this.onLoad(this.page);
@@ -238,7 +239,8 @@
                 type: "warning"
             })
                 .then(() => {
-                    return remove(this.ids);
+                    // return remove(this.ids);
+                    return (this.params.isDept ? removeDept(this.ids) : remove(this.ids))
                 })
                 .then(() => {
                     this.onLoad(this.page);
@@ -269,9 +271,12 @@
         },
         beforeOpen(done, type) {
             if (["edit", "view"].includes(type)) {
-                getDetail(this.form.id).then(res => {
+                (this.params.isDept ? getDeptDetail(this.form.id) : getDetail(this.form.id)).then(res => {
                     this.form = res.data.data;
                 });
+                // getDetail(this.form.id).then(res => {
+                //     this.form = res.data.data;
+                // });
             }
             done();
         },
@@ -306,7 +311,7 @@
 
             const {
             } = this.query;
-            
+
             let values = {
                 // toUserId: this.params.id
                 // userId: this.params.id
diff --git a/src/views/evaluate/components/addDialog.vue b/src/views/evaluate/components/addDialog.vue
index 962129f..670b741 100644
--- a/src/views/evaluate/components/addDialog.vue
+++ b/src/views/evaluate/components/addDialog.vue
@@ -1,37 +1,51 @@
 <template>
     <el-dialog v-model="params.visible" :title="params.title" width="600px" destroyOnClose>
-        <el-form :model="addForm" label-width="130px" :rules="rules" ref="addFormRef">
-            <el-form-item label="任务名称:" prop="taskName">
-                <el-input v-model="addForm.taskName" placeholder="请输入任务名称"></el-input>
-            </el-form-item>
-            <el-form-item label="任务类别:" prop="taskType">
-                <el-input v-model="addForm.taskType" placeholder="请输入任务类别"></el-input>
-            </el-form-item>
-            <el-form-item label="认定标准描述:" prop="remark">
-                <el-input v-model="addForm.remark" placeholder="请输入任务名称"></el-input>
-            </el-form-item>
-            <el-form-item label="候选人数量:" prop="candidateNum">
-                <ul class="select-group">
-                    <li v-for="(dept, index) in depts" :key="dept.id">
-                        <el-form-item :label="`${dept.title}:`">
-                            <el-input-number v-model="addForm.candidateNum[index].val" placeholder="请输入当前部门评优人数"
-                                controls-position="right" class="input-number" />
+        <div class="content">
+            <el-form :model="addForm" label-width="130px" :rules="rules" ref="addFormRef">
+                <el-form-item label="任务名称:" prop="taskName">
+                    <el-input v-model="addForm.taskName" placeholder="请输入任务名称"></el-input>
+                </el-form-item>
+                <el-form-item label="任务类别:" prop="taskType">
+                    <el-input v-model="addForm.taskType" placeholder="请输入任务类别"></el-input>
+                </el-form-item>
+                <el-form-item label="认定标准描述:" prop="remark">
+                    <el-input v-model="addForm.remark" placeholder="请输入任务名称"></el-input>
+                </el-form-item>
+                <el-form-item label="评优类型:" prop="type">
+                    <el-select disabled v-model="addForm.type" placeholder="请选择评优类型" style="width: 100%;">
+                        <el-option label="个人评优" value="0" />
+                        <el-option label="部门评优" value="1" />
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="候选人数量:" prop="candidateNum">
+                    <el-select v-model="selectGroup" value-key="deptId" multiple style="width: 100%;">
+                        <el-option v-for="dept in depts" :key="dept.deptId" :label="dept.deptName" :value="dept">
+                        </el-option>
+                    </el-select>
+                    <div class="select-list">
+                        <el-form-item v-for="content in selectGroup" :key="content.deptId" :label="content.deptName"
+                            class="select-item">
+                            <el-select v-model="content.users" value-key="id" multiple>
+                                <el-option v-for="employee in content.employees" :key="employee.id" :label="employee.name"
+                                    :value="employee">
+                                </el-option>
+                            </el-select>
                         </el-form-item>
-                    </li>
-                </ul>
-            </el-form-item>
-            <el-form-item label="候选人截止日期:" prop="candidateCutoffTime">
-                <el-date-picker v-model="addForm.candidateCutoffTime" type="datetime" placeholder="请选择截止时间"
-                    format="YYYY-MM-DD HH:mm:ss" valueFormat="YYYY-MM-DD HH:mm:ss" style="width: 100%;" />
-            </el-form-item>
-            <el-form-item label="评优数量:" prop="evaluateNum">
-                <el-input v-model="addForm.evaluateNum" placeholder="请输入评优数量"></el-input>
-            </el-form-item>
-            <el-form-item label="候选人截止日期:" prop="evaluateCutoffTime">
-                <el-date-picker v-model="addForm.evaluateCutoffTime" type="datetime" placeholder="请选择截止时间"
-                    format="YYYY-MM-DD HH:mm:ss" valueFormat="YYYY-MM-DD HH:mm:ss" style="width: 100%;" />
-            </el-form-item>
-        </el-form>
+                    </div>
+                </el-form-item>
+                <el-form-item label="候选人截止日期:" prop="candidateCutoffTime">
+                    <el-date-picker v-model="addForm.candidateCutoffTime" type="datetime" placeholder="请选择截止时间"
+                        format="YYYY-MM-DD HH:mm:ss" valueFormat="YYYY-MM-DD HH:mm:ss" style="width: 100%;" />
+                </el-form-item>
+                <el-form-item label="评优数量:" prop="evaluateNum">
+                    <el-input v-model="addForm.evaluateNum" placeholder="请输入评优数量"></el-input>
+                </el-form-item>
+                <el-form-item label="评优截止日期:" prop="evaluateCutoffTime">
+                    <el-date-picker v-model="addForm.evaluateCutoffTime" type="datetime" placeholder="请选择截止时间"
+                        format="YYYY-MM-DD HH:mm:ss" valueFormat="YYYY-MM-DD HH:mm:ss" style="width: 100%;" />
+                </el-form-item>
+            </el-form>
+        </div>
         <template #footer>
             <span class="dialog-footer">
                 <el-button @click="params.visible = false">取消</el-button>
@@ -45,6 +59,8 @@
 import website from '@/config/website';
 import { getDeptTree } from '@/api/system/dept';
 import { add, update } from "@/api/evaluate/evaluateTask";
+import { getList } from '@/api/system/user.js'
+import _ from 'lodash';
 
 export default {
     props: {
@@ -55,6 +71,7 @@
                     visible: false,
                     title: '新增',
                     isEdit: false,
+                    type: 0,
                     addForm: {}
                 };
             }
@@ -63,12 +80,14 @@
     data() {
         return {
             depts: [],
+            selectGroup: [],
             addForm: {
                 id: "",
                 tenantId: "",
                 taskName: "",
                 taskType: "",
                 remark: "",
+                type: "",
                 candidateNum: [],
                 candidateCutoffTime: "",
                 candidateState: "",
@@ -93,6 +112,9 @@
                 remark: [
                     { required: true, message: '请输入认定标准描述', trigger: 'blur' },
                 ],
+                type: [
+                    { required: true, message: '请选择评优类型', trigger: 'blur' },
+                ],
                 candidateNum: [
                     { required: true, message: '请选择候选人截止日期', trigger: 'click' },
                 ],
@@ -109,19 +131,43 @@
         }
     },
     watch: {
-        'params.addForm': {
-            handler(val) {
-                this.addForm = val
-            },
-            deep: true
-        },
         'params.visible': {
             handler(val) {
                 val && this.initData(website.tenantId);
+                this.addForm.type = this.params.type + ''
+                if (this.params.isEdit) {
+                    this.addForm = this.params.addForm
+                    this.addForm.type = this.params.type + ''
+                }
             },
             deep: true,
             immediate: true
         },
+        // 拦截candidateNum
+        'selectGroup': {
+            handler(val) {
+                this.addForm.candidateNum = []
+                let evaluateNums = 0
+                val.forEach(item => {
+                    const users = []
+                    evaluateNums += item.selected?.length
+                    item.selected.forEach(user => {
+                        users.push({
+                            id: user.id,
+                            name: user.name
+                        })
+                    })
+                    this.addForm.candidateNum.push({
+                        deptId: item.deptId,
+                        deptName: item.deptName,
+                        val: item.selected.length,
+                        users
+                    })
+                })
+                this.addForm.evaluateNum = evaluateNums + ''
+            },
+            deep: true
+        }
     },
     methods: {
         handleSubmit() {
@@ -165,23 +211,30 @@
             this.params.visible = false
         },
         initData(tenantId) {
+            // 读取部门列表
             getDeptTree(tenantId).then(res => {
-                const result = res.data.data;
-                this.depts = []
+                const result = _.cloneDeep(res.data.data);
+                let deptList = []
                 result.forEach(item => {
+                    deptList.push(item)
                     if (item.children) {
-                        this.depts = result.concat(item.children)
+                        deptList = result.concat(item.children)
                         delete item.children
-                    } else {
-                        this.depts.push(item)
                     }
                 })
-                if (this.params.isEdit) return
-                this.addForm.candidateNum = []
-                this.depts.forEach(dept => {
-                    this.addForm.candidateNum.push({
-                        deptId: dept.id,
-                        val: 0
+                return deptList
+            }).then(deptList => {
+                const depts_list = _.cloneDeep(deptList)
+                this.depts = []
+                depts_list.forEach(dept => {
+                    getList(1, 99999, {}, dept.id).then(employeeRes => {
+                        const { records } = employeeRes.data.data
+                        this.depts.push({
+                            deptId: dept.id,
+                            deptName: dept.title,
+                            users: [],
+                            employees: records
+                        })
                     })
                 })
             })
@@ -194,20 +247,17 @@
 </script>
 
 <style lang="scss" scoped>
-.select-group {
-    list-style: none;
-    margin: 0;
-    padding: 0;
+.content {
+    height: 400px;
+    overflow: auto;
+}
+.select-list {
     width: 100%;
+    .select-item {
+        width: 100%;
+        margin-top: 15px;
 
-    li {
-        margin-top: 20px;
-
-        &:first-child {
-            margin-top: 0;
-        }
-
-        .input-number {
+        .el-select {
             width: 100%;
         }
     }
diff --git a/src/views/evaluate/evaluateTask.vue b/src/views/evaluate/evaluateTask.vue
index e0f7ad6..15e5d19 100644
--- a/src/views/evaluate/evaluateTask.vue
+++ b/src/views/evaluate/evaluateTask.vue
@@ -107,18 +107,18 @@
     };
   },
   watch: {
-    // defaultTaskType: {
-    //   handler(n) {
-    //     this.query = {}
-    //     this.query['type'] = n
-    //     let params = {
-    //       type: n
-    //     }
-    //     this.page.currentPage = 1;
-    //     this.onLoad(this.page, params);
-    //   },
-    //   immediate: true,
-    // }
+    defaultTaskType: {
+      handler(n) {
+        this.query = {}
+        this.query['type'] = n
+        let params = {
+          type: n
+        }
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+      },
+      immediate: true,
+    }
   },
   computed: {
     ...mapGetters(["permission"]),
@@ -144,11 +144,11 @@
         visible: true,
         title: '添加',
         isEdit: false,
+        type: this.defaultTaskType,
         addForm: {}
       }
     },
     rowSave(row, done, loading) {
-      console.log(row);
       add(row).then(() => {
         this.onLoad(this.page);
         this.$message({
@@ -166,6 +166,7 @@
         visible: true,
         title: '编辑',
         isEdit: true,
+        type: this.defaultTaskType,
         addForm: {
           ...row
         }
@@ -299,8 +300,6 @@
         ...params,
         taskName_like: taskName,
       };
-      console.log(values);
-
       getList(page.currentPage, page.pageSize, values).then(res => {
         const data = res.data.data;
         this.page.total = data.total;

--
Gitblit v1.9.3