GuLiMmo
2023-12-22 d795a97527ef11b59b2157da4b17ec2a85cf6a13
部门页面修改
3 files modified
1 files added
310 ■■■■■ changed files
src/option/assessmentTask/assessmentTask.js 19 ●●●● patch | view | raw | blame | history
src/views/assessment/assessmentTaskSetting.vue 32 ●●●●● patch | view | raw | blame | history
src/views/assessment/components/assessmentWeight.vue 46 ●●●● patch | view | raw | blame | history
src/views/assessment/components/popoverTable.vue 213 ●●●●● patch | view | raw | blame | history
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,
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: {
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: {
src/views/assessment/components/popoverTable.vue
New file
@@ -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>