GuLiMmo
2023-12-14 4c8e9a0c4dc32be637a244e8d97cdea709a2c08c
评优任务页面修改
7 files modified
297 ■■■■■ changed files
src/api/assessment/assessmentSet.js 28 ●●●●● patch | view | raw | blame | history
src/option/assessmentTask/assessmentTask.js 2 ●●●●● patch | view | raw | blame | history
src/option/evaluate/evaluateTask.js 17 ●●●● patch | view | raw | blame | history
src/views/assessment/assessmentTask.vue 8 ●●●●● patch | view | raw | blame | history
src/views/assessment/components/assessmentWeight.vue 43 ●●●●● patch | view | raw | blame | history
src/views/evaluate/components/addDialog.vue 170 ●●●●● patch | view | raw | blame | history
src/views/evaluate/evaluateTask.vue 29 ●●●● patch | view | raw | blame | history
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
  })
}
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: '人员考核任务',
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: "候选人截止日期",
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);
      },
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
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%;
        }
    }
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;