From d795a97527ef11b59b2157da4b17ec2a85cf6a13 Mon Sep 17 00:00:00 2001
From: GuLiMmo <2820890765@qq.com>
Date: Fri, 22 Dec 2023 17:40:48 +0800
Subject: [PATCH] 部门页面修改

---
 src/views/assessment/components/assessmentWeight.vue |   46 +++---
 src/option/assessmentTask/assessmentTask.js          |   19 ++
 src/views/assessment/components/popoverTable.vue     |  213 +++++++++++++++++++++++++++++++++++
 src/views/assessment/assessmentTaskSetting.vue       |   32 +++++
 4 files changed, 283 insertions(+), 27 deletions(-)

diff --git a/src/option/assessmentTask/assessmentTask.js b/src/option/assessmentTask/assessmentTask.js
index db0d078..6af1245 100644
--- a/src/option/assessmentTask/assessmentTask.js
+++ b/src/option/assessmentTask/assessmentTask.js
@@ -39,9 +39,24 @@
       ],
     },
     {
-      label: "考核目的",
+      // label: "考核目的",
+      label: "考核种类",
       prop: "assessmentPurpose",
-      type: "input",
+      type: "select",
+      dicData: [
+        {
+          label: '月度考核',
+          value: '月度考核'
+        },
+        {
+          label: '季度考核',
+          value: '季度考核'
+        },
+        {
+          label: '年度考核',
+          value: '年度考核'
+        }
+      ],
       rules: [
         {
           required: true,
diff --git a/src/views/assessment/assessmentTaskSetting.vue b/src/views/assessment/assessmentTaskSetting.vue
index d97d5f5..758710e 100644
--- a/src/views/assessment/assessmentTaskSetting.vue
+++ b/src/views/assessment/assessmentTaskSetting.vue
@@ -8,8 +8,15 @@
                 @tree-load="treeLoad" @on-load="onLoad">
                 <template #menu="{ size, row, index }">
                     <el-button type="primary" size="small" @click="handleWeight(row)">
-                        考核权重
+                        添加考核人
                     </el-button>
+                </template>
+                <template #assessmentPerson="{ row }">
+                    <popoverTable :params="{...row, type: defaultTaskType}">
+                        <template #content>
+                            xxxx
+                        </template>
+                    </popoverTable>
                 </template>
                 <template #deptCategory="{ row }">
                     <el-tag>{{ row.deptCategoryName }}</el-tag>
@@ -24,13 +31,15 @@
 
 <script>
 import assessmentWeight from './components/assessmentWeight.vue'
+import popoverTable from '@/views/assessment/components/popoverTable.vue'
 import { getList } from '@/api/system/user.js'
 import { getLazyList } from '@/api/system/dept';
 import _ from 'lodash'
 
 export default {
     components: {
-        assessmentWeight
+        assessmentWeight,
+        popoverTable,
     },
     data() {
         return {
@@ -53,6 +62,7 @@
                 editBtn: false,
                 delBtn: false,
                 menuWidth: 200,
+                menuFixed: 'right',
                 column: [
                     {
                         label: "主键",
@@ -69,17 +79,20 @@
                         // prop: "userName",
                         type: "input",
                         search: true,
+                        minWidth: 70
                     },
                     {
                         label: "工号",
                         prop: 'code',
                         type: "input",
+                        minWidth: 70
                     },
                     {
                         label: "部门",
                         prop: "deptName",
                         type: "tree",
                         search: true,
+                        minWidth: 120,
                         dicUrl: `/blade-system/dept/tree?tenantId=${this.website.tenantId}`,
                         dicFormatter: (res) => {
                             this.selectGroup.depts = res.data
@@ -95,6 +108,7 @@
                         prop: "postName",
                         type: "select",
                         search: true,
+                        minWidth: 100,
                         dicUrl: `/blade-system/post/select?tenantId=${this.website.tenantId}`,
                         dicFormatter: (res) => {
                             this.selectGroup.posts = res.data
@@ -109,16 +123,25 @@
                         label: "人员类型",
                         prop: "personnelType",
                         type: "input",
+                        minWidth: 70
                     },
                     {
                         label: "合伙类型",
                         prop: "partnerType",
                         type: "input",
+                        minWidth: 70
                     },
                     {
                         label: "联系方式",
                         prop: "phone",
                         type: "input",
+                        minWidth: 150,
+                    },
+                    {
+                        label: "考核人",
+                        minWidth: 120,
+                        prop: "assessmentPerson",
+                        slot: true,
                     },
                 ]
             },
@@ -160,6 +183,11 @@
                         prop: 'deptCategory',
                         slot: true,
                     },
+                    {
+                        label: '考核人',
+                        prop: 'assessmentPerson',
+                        slot: true
+                    }
                 ],
             },
             page: {
diff --git a/src/views/assessment/components/assessmentWeight.vue b/src/views/assessment/components/assessmentWeight.vue
index 969a338..984f414 100644
--- a/src/views/assessment/components/assessmentWeight.vue
+++ b/src/views/assessment/components/assessmentWeight.vue
@@ -135,29 +135,29 @@
                             },
                         ],
                     },
-                    {
-                        label: "评分范围",
-                        prop: "rangeVal",
-                        type: "input",
-                        placeholder: '评分范围(100分制)±N',
-                        rules: [
-                            {
-                                validator: (rule, value, callback) => {
-                                    if (value === '') {
-                                        callback(new Error('请填写评分范围'))
-                                    } else {
-                                        if (value > 100) {
-                                            callback(new Error('输入的请填写评分范围不可超过100'))
-                                        } else {
-                                            callback()
-                                        }
-                                    }
-                                },
-                                required: true,
-                                trigger: 'click',
-                            },
-                        ],
-                    }
+                    // {
+                    //     label: "评分范围",
+                    //     prop: "rangeVal",
+                    //     type: "input",
+                    //     placeholder: '评分范围(100分制)±N',
+                    //     rules: [
+                    //         {
+                    //             validator: (rule, value, callback) => {
+                    //                 if (value === '') {
+                    //                     callback(new Error('请填写评分范围'))
+                    //                 } else {
+                    //                     if (value > 100) {
+                    //                         callback(new Error('输入的请填写评分范围不可超过100'))
+                    //                     } else {
+                    //                         callback()
+                    //                     }
+                    //                 }
+                    //             },
+                    //             required: true,
+                    //             trigger: 'click',
+                    //         },
+                    //     ],
+                    // }
                 ]
             },
             page: {
diff --git a/src/views/assessment/components/popoverTable.vue b/src/views/assessment/components/popoverTable.vue
new file mode 100644
index 0000000..845571f
--- /dev/null
+++ b/src/views/assessment/components/popoverTable.vue
@@ -0,0 +1,213 @@
+<template>
+    <el-popover placement="top-end" :title="!params.type ? '个人考核权重' : '部门考核权重'" :width="700" height="400" @show="popoverShow" @hide="popoverHide" trigger="hover">
+        <template v-if="visible">
+            <avue-crud :option="option" v-model:defaults="defaults" v-model:search="search" v-model:page="page"
+                v-model="form" :table-loading="loading" :data="data" ref="crud" @selection-change="selectionChange"
+                @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
+            </avue-crud>
+        </template>
+        <template #reference>
+            <slot name="content"></slot>
+        </template>
+    </el-popover>
+</template>
+  
+<script>
+import { getList, getDeptList } from '@/api/assessment/assessmentSet'
+
+export default {
+    props: {
+        params: {
+            type: Object,
+            default() {
+                return {}
+            }
+        }
+    },
+    data() {
+        return {
+            defaults: {},
+            form: {},
+            query: {},
+            search: {},
+            loading: true,
+            data: [],
+            option: {
+                height: '300',
+                calcHeight: 32,
+                tip: true,
+                searchMenuSpan: 6,
+                border: true,
+                index: true,
+                addBtn: false,
+                viewBtn: true,
+                editBtn: true,
+                delBtn: true,
+                header: false,
+                menu: false,
+                menuBtn: false,
+                column: [
+                    {
+                        label: "考核人",
+                        prop: "toUserName",
+                        type: "select",
+                        rules: [
+                            {
+                                required: true,
+                                message: '请选择考核人',
+                                trigger: 'click',
+                            },
+                        ],
+                        dicUrl: '/blade-system/user/page?current=1&size=999999999',
+                        dicFormatter: (res) => {
+                            this.selectList = res.data.records
+                            return res.data.records
+                        },
+                        props: {
+                            label: 'name',
+                            value: 'name'
+                        },
+                        control: (val, form) => {
+                            const toUser = this.selectList.find(option => val === option.name)
+                            form.toPostName = toUser?.postName || ''
+                            form.toDeptName = toUser?.deptName || ''
+                        }
+                    },
+                    {
+                        label: "考核人部门",
+                        prop: "toDeptName",
+                        type: "input",
+                        disabled: true,
+                        // hide: true,
+                        rules: [
+                            {
+                                required: true,
+                                message: '请填写考核人部门',
+                                trigger: 'click',
+                            },
+                        ],
+                    },
+                    {
+                        label: "考核人职务",
+                        prop: "toPostName",
+                        type: "input",
+                        disabled: true,
+                        // hide: true,
+                        rules: [
+                            {
+                                required: true,
+                                message: '请填写被考核人职务',
+                                trigger: 'click',
+                            },
+                        ],
+                    },
+                    {
+                        label: "权值",
+                        prop: "weight",
+                        type: "input",
+                        rules: [
+                            {
+                                validator: (rule, value, callback) => {
+                                    if (value === '') {
+                                        callback(new Error('请输入权值'))
+                                    } else {
+                                        if (value > this.weightRange) {
+                                            callback(new Error('输入的权值不可超过' + this.weightRange))
+                                        } else {
+                                            callback()
+                                        }
+                                    }
+                                },
+                                required: true,
+                                trigger: 'click',
+                            },
+                        ],
+                    },
+                    {
+                        label: "评分范围",
+                        prop: "rangeVal",
+                        type: "input",
+                        placeholder: '评分范围(100分制)±N',
+                        rules: [
+                            {
+                                validator: (rule, value, callback) => {
+                                    if (value === '') {
+                                        callback(new Error('请填写评分范围'))
+                                    } else {
+                                        if (value > 100) {
+                                            callback(new Error('输入的请填写评分范围不可超过100'))
+                                        } else {
+                                            callback()
+                                        }
+                                    }
+                                },
+                                required: true,
+                                trigger: 'click',
+                            },
+                        ],
+                    }
+                ]
+            },
+            page: {
+                pageSize: 10,
+                currentPage: 1,
+                total: 0,
+            },
+            visible: false
+        }
+    },
+    watch: {
+    },
+    methods: {
+        selectionChange(list) {
+            this.selectionList = list;
+        },
+        selectionClear() {
+            this.selectionList = [];
+            // this.$refs.crud.toggleSelection();
+        },
+        currentChange(currentPage) {
+            this.page.currentPage = currentPage;
+        },
+        sizeChange(pageSize) {
+            this.page.pageSize = pageSize;
+        },
+        refreshChange() {
+            this.onLoad(this.page, this.query);
+        },
+        onLoad(page, params = {}) {
+            this.loading = true;
+
+            const {
+            } = this.query;
+
+            let values = {
+                // toUserId: this.params.id
+                // userId: this.params.id
+            };
+            this.params.isDept && Object.assign(values, {
+                deptId: this.params.id
+            });
+            !this.params.isDept && Object.assign(values, {
+                userId: this.params.id
+            });
+            (this.params.isDept ? getDeptList(page.currentPage, page.pageSize, values) : getList(page.currentPage, page.pageSize, values)).then(res => {
+                const data = res.data.data;
+                this.page.total = data.total;
+                this.data = data.records;
+                this.loading = false;
+                this.selectionClear();
+            });
+        },
+        popoverShow() {
+            this.visible = true;
+        },
+        popoverHide() {
+            this.visible = false;
+        }
+    },
+}
+</script>
+  
+<style lang="scss" scoped></style>
+  
\ No newline at end of file

--
Gitblit v1.9.3