GuLiMmo
2023-12-09 2324d4d572882e139360a8bafdc85b467d5469e9
评优任务、考核权重设置页面修改
7 files modified
364 ■■■■ changed files
src/option/assessmentTask/assessmentTask.js 30 ●●●●● patch | view | raw | blame | history
src/option/evaluate/evaluateTask.js 17 ●●●●● patch | view | raw | blame | history
src/views/assessment/assessmentTaskSetting.vue 10 ●●●●● patch | view | raw | blame | history
src/views/assessment/components/assessmentWeight.vue 48 ●●●● patch | view | raw | blame | history
src/views/employee/list.vue 52 ●●●● patch | view | raw | blame | history
src/views/evaluate/components/addDialog.vue 169 ●●●● patch | view | raw | blame | history
src/views/evaluate/evaluateTask.vue 38 ●●●●● patch | view | raw | blame | history
src/option/assessmentTask/assessmentTask.js
@@ -1,5 +1,5 @@
export default {
  height:'auto',
  height: 'auto',
  calcHeight: 30,
  tip: false,
  searchShow: true,
@@ -28,11 +28,25 @@
      label: "考核编号",
      prop: "assessmentNo",
      type: "input",
      rules: [
        {
          required: true,
          message: '请输入考核编号',
          trigger: 'blur',
        },
      ],
    },
    {
      label: "考核目的",
      prop: "assessmentPurpose",
      type: "input",
      rules: [
        {
          required: true,
          message: '请输入考核目的',
          trigger: 'blur',
        },
      ],
    },
    {
      label: "开始时间",
@@ -40,6 +54,13 @@
      type: "date",
      format: "YYYY-MM-DD HH:mm:ss",
      valueFormat: "YYYY-MM-DD HH:mm:ss",
      rules: [
        {
          required: true,
          message: '请选择开始时间',
          trigger: 'click',
        },
      ],
    },
    {
      label: "结束时间",
@@ -47,6 +68,13 @@
      type: "date",
      format: "YYYY-MM-DD HH:mm:ss",
      valueFormat: "YYYY-MM-DD HH:mm:ss",
      rules: [
        {
          required: true,
          message: '请选择结束时间',
          trigger: 'click',
        },
      ],
    },
    {
      label: "备注",
src/option/evaluate/evaluateTask.js
@@ -55,7 +55,22 @@
      prop: "candidateNum",
      type: "input",
      span: 24,
      minWidth: '100px'
      minWidth: '100px',
      // prop: {
      //   label: "title",
      // },
      formatter: (row, value) => {
        console.log(value);
        let num = 0
        if (value === void 0) {
          num = 0
        } else {
          value.forEach(item => {
            num += Number(item.val)
          })
        }
        return num + '人'
      }
    },
    {
      label: "候选人截止日期",
src/views/assessment/assessmentTaskSetting.vue
@@ -16,7 +16,7 @@
        </template>
    </basic-container>
</template>
<script>
import assessmentWeight from './components/assessmentWeight.vue'
import { getList } from '@/api/system/user.js'
@@ -24,7 +24,7 @@
export default {
    components: {
        assessmentWeight
    },
    },
    data() {
        return {
            isWeight: true,
@@ -59,7 +59,7 @@
                        label: "被考核人",
                        prop: "name",
                        type: "input",
                        search: true
                        search: true,
                    },
                    {
                        label: "工号",
@@ -123,7 +123,6 @@
            };
            getList(page.currentPage, page.pageSize, values).then(res => {
                console.log(res);
                const data = res.data.data;
                this.page.total = data.total;
                this.data = data.records;
@@ -133,6 +132,5 @@
    }
}
</script>
<style></style>
src/views/assessment/components/assessmentWeight.vue
@@ -55,27 +55,63 @@
                editBtn: false,
                delBtn: false,
                menuWidth: 200,
                labelWidth: 120,
                column: [
                    {
                        label: "考核人",
                        prop: "userName",
                        prop: "toUserName",
                        type: "select",
                        rules: [
                            {
                                required: true,
                                message: '请选择考核人',
                                trigger: 'click',
                            },
                        ],
                    },
                    {
                        label: "职务",
                        label: "被考核人",
                        prop: "userName",
                        type: "input",
                        value: this.params.name,
                        disabled: true,
                    },
                    {
                        label: "被考核人职务",
                        prop: "postName",
                        type: "input",
                        rules: [
                            {
                                required: true,
                                message: '请填写被考核人职务',
                                trigger: 'click',
                            },
                        ],
                    },
                    {
                        label: "权值",
                        prop: "weight",
                        type: "input",
                        rules: [
                            {
                                required: true,
                                message: '请填写权值',
                                trigger: 'click',
                            },
                        ],
                    },
                    {
                        label: "评分范围",
                        prop: "rangeVal",
                        type: "input",
                        placeholder: '评分范围(100分制)±N'
                        placeholder: '评分范围(100分制)±N',
                        rules: [
                            {
                                required: true,
                                message: '请填写评分范围',
                                trigger: 'click',
                            },
                        ],
                    }
                ]
            },
@@ -215,9 +251,9 @@
            const {
            } = this.query;
            let values = {
                toUserId: this.params.id
                // toUserId: this.params.id
                userId: this.params.id
            };
            getList(page.currentPage, page.pageSize, values).then(res => {
                console.log(res);
                const data = res.data.data;
@@ -238,6 +274,7 @@
.header {
    margin-bottom: 20px;
}
.info {
    display: flex;
    list-style-type: none;
@@ -247,6 +284,7 @@
    li {
        margin-right: 10px;
        &:first-child {
            margin-right: 30px;
        }
src/views/employee/list.vue
@@ -62,18 +62,40 @@
                        label: "工号",
                        prop: "code",
                        type: "input",
                        search: true
                        search: true,
                        rules: [
                            {
                                required: true,
                                message: '请输入工号',
                                trigger: 'click',
                            },
                        ],
                    },
                    {
                        label: "姓名",
                        prop: "name",
                        // prop: "name",
                        prop: 'realName',
                        type: "input",
                        search: true
                        search: true,
                        rules: [
                            {
                                required: true,
                                message: '请输入姓名',
                                trigger: 'click',
                            },
                        ],
                    },
                    {
                        label: "手机号",
                        prop: "phone",
                        type: "input"
                        type: "input",
                        rules: [
                            {
                                required: true,
                                message: '请输入手机号',
                                trigger: 'click',
                            },
                        ],
                    },
                    {
                        label: "部门",
@@ -82,7 +104,15 @@
                        dicData: [],
                        props: {
                            label: 'title',
                            value: 'id',
                        },
                        rules: [
                            {
                                required: true,
                                message: '请选择部门',
                                trigger: 'click',
                            },
                        ],
                    },
                    {
                        label: "职务",
@@ -91,7 +121,15 @@
                        dicData: [],
                        props: {
                            label: 'postName',
                            value: 'id',
                        },
                        rules: [
                            {
                                required: true,
                                message: '请选择职务',
                                trigger: 'click',
                            },
                        ],
                    },
                    {
                        label: "人员类型",
@@ -182,6 +220,7 @@
            row.account = row.phone
            row.realName = row.name
            row.userType = 2
            // 转换值
            add(row).then(() => {
                this.onLoad(this.page);
                this.$message({
@@ -297,10 +336,11 @@
            } = this.query;
            let values = {
                ...params,
                ...this.query
            };
            getList(page.currentPage, page.pageSize, values).then(res => {
                console.log(res.data.data.records);
                const data = res.data.data;
                this.page.total = data.total;
                this.data = data.records;
src/views/evaluate/components/addDialog.vue
@@ -1,42 +1,51 @@
<template>
    <el-dialog v-model="params.visible"  :title="params.title" width="600px" :destroy-on-close="true">
        <el-form :model="addForm" label-width="120px">
            <el-form-item label="任务名称:">
    <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="任务类别:">
            <el-form-item label="任务类别:" prop="taskType">
                <el-input v-model="addForm.taskType" placeholder="请输入任务类别"></el-input>
            </el-form-item>
            <el-form-item label="认定标准描述:">
            <el-form-item label="认定标准描述:" prop="remark">
                <el-input v-model="addForm.remark" placeholder="请输入任务名称"></el-input>
            </el-form-item>
            <el-form-item label="候选人数量:">
            <el-form-item label="候选人数量:" prop="candidateNum">
                <ul class="select-group">
                    <li>技术部:<el-select placeholder="请设置该部门的评选人数"></el-select></li>
                    <li>财务部:<el-select placeholder="请设置该部门的评选人数"></el-select></li>
                    <li>人事部:<el-select placeholder="请设置该部门的评选人数"></el-select></li>
                    <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" />
                        </el-form-item>
                    </li>
                </ul>
            </el-form-item>
            <el-form-item label="候选人截止日期:">
                <el-date-picker v-model="addForm.candidateCutoffTime" type="datetime" placeholder="请选择截止时间" style="width: 100%;" />
            <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="候选人截止日期:">
                <el-date-picker v-model="addForm.evaluateCutoffTime" type="datetime" placeholder="请选择截止时间" style="width: 100%;" />
            </el-form-item>
            <el-form-item label="评优数量:">
            <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>
        <template #footer>
            <span class="dialog-footer">
                <el-button @click="addParams.visible = false">取消</el-button>
                <el-button type="primary" @click="dialogVisible = false">确认</el-button>
                <el-button @click="params.visible = false">取消</el-button>
                <el-button type="primary" @click="params.isEdit ? handleEdit() : handleSubmit()">确认</el-button>
            </span>
        </template>
    </el-dialog>
</template>
<script>
import website from '@/config/website';
import { getDeptTree } from '@/api/system/dept';
import { add, update } from "@/api/evaluate/evaluateTask";
export default {
    props: {
        params: {
@@ -44,7 +53,8 @@
            default: () => {
                return {
                    visible: false,
                    title: '',
                    title: '新增',
                    isEdit: false,
                    addForm: {}
                };
            }
@@ -52,14 +62,14 @@
    },
    data() {
        return {
            title: '新增',
            depts: [],
            addForm: {
                id: "",
                tenantId: "",
                taskName: "",
                taskType: "",
                remark: "",
                candidateNum: "",
                candidateNum: [],
                candidateCutoffTime: "",
                candidateState: "",
                evaluateNum: "",
@@ -73,36 +83,131 @@
                status: "",
                isDeleted: ""
            },
            rules: {
                taskName: [
                    { required: true, message: '请输入任务名称', trigger: 'blur' },
                ],
                taskType: [
                    { required: true, message: '请输入任务类别', trigger: 'blur' },
                ],
                remark: [
                    { required: true, message: '请输入认定标准描述', trigger: 'blur' },
                ],
                candidateNum: [
                    { required: true, message: '请选择候选人截止日期', trigger: 'click' },
                ],
                candidateCutoffTime: [
                    { required: true, message: '请选择候选人截止日期', trigger: 'click' },
                ],
                evaluateNum: [
                    { required: true, message: 'Please input Activity name', trigger: 'click' },
                ],
                evaluateCutoffTime: [
                    { required: true, message: 'Please input Activity name', trigger: 'click' },
                ],
            }
        }
    },
    watch: {
        'params.addForm': {
            handler(val) {
                this.addForm = val;
                this.addForm = val
            },
            deep: true
        }
        },
        'params.visible': {
            handler(val) {
                val && this.initData(website.tenantId);
            },
            deep: true,
            immediate: true
        },
    },
    methods: {
        handleSubmit() {
            this.$refs.addFormRef.validate((valid) => {
                add(this.addForm).then(() => {
                    this.$message({
                        type: "success",
                        message: "操作成功!"
                    });
                    this.refreshTable()
                }, () => {
                    this.$message({
                        type: "error",
                        message: "操作失败!"
                    });
                });
            });
        },
        handleEdit() {
            this.$refs.addFormRef.validate((valid) => {
                update(this.addForm).then(() => {
                    this.$message({
                        type: "success",
                        message: "操作成功!"
                    });
                    this.refreshTable()
                }, error => {
                    this.$message({
                        type: "error",
                        message: error
                    });
                });
            })
        },
        refreshTable() {
            this.$emit('refreshTable', {
                pageSize: 10,
                currentPage: 1,
                total: 0
            })
            this.params.visible = false
        },
        initData(tenantId) {
            getDeptTree(tenantId).then(res => {
                const result = res.data.data;
                this.depts = []
                result.forEach(item => {
                    if (item.children) {
                        this.depts = result.concat(item.children)
                        delete item.children
                    }
                })
                if (this.params.isEdit) return
                this.addForm.candidateNum = []
                this.depts.forEach(dept => {
                    this.addForm.candidateNum.push({
                        deptId: dept.id,
                        val: 0
                    })
                })
            })
        }
    },
    mounted() {
        // this.initData(website.tenantId);
    }
}
</script>
<style scoped>
<style lang="scss" scoped>
.select-group {
    list-style: none;
    margin: 0;
    padding: 0;
    width: 100%;
}
.select-group li {
    margin-top: 15px;
}
.select-group li:first-child {
    margin-top: 0;
    li {
        margin-top: 20px;
        &:first-child {
            margin-top: 0;
        }
        .input-number {
            width: 100%;
        }
    }
}
</style>
src/views/evaluate/evaluateTask.vue
@@ -6,8 +6,8 @@
      @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
      @refresh-change="refreshChange" @on-load="onLoad">
      <template #menu-left>
        <el-button type="primary" icon="el-icon-plus" @click="addParams.visible = true">
          添加
        <el-button type="primary" icon="el-icon-plus" @click="handleAdd">
          新增
        </el-button>
        <el-button type="danger" icon="el-icon-delete" plain v-if="permission.evaluateTask_delete" @click="handleDelete">
          删除
@@ -43,7 +43,7 @@
      </template>
    </el-dialog>
    <!-- 新增编辑弹窗 -->
    <addDialog :params="addParams"/>
    <addDialog :params="addParams" @refreshTable="this.onLoad"/>
  </basic-container>
</template>
@@ -84,6 +84,7 @@
      },
      isAddDialogVisible: false,
      addParams: {},
      viewParams: {},
    };
  },
  computed: {
@@ -105,24 +106,33 @@
    }
  },
  methods: {
    handleAdd() {
      this.addParams = {
        visible: true,
        title: '添加',
        isEdit: false,
        addForm: {}
      }
    },
    rowSave(row, done, loading) {
      console.log(row);
      // add(row).then(() => {
      //   this.onLoad(this.page);
      //   this.$message({
      //     type: "success",
      //     message: "操作成功!"
      //   });
      //   done();
      // }, error => {
      //   loading();
      //   window.console.log(error);
      // });
      add(row).then(() => {
        this.onLoad(this.page);
        this.$message({
          type: "success",
          message: "操作成功!"
        });
        done();
      }, error => {
        loading();
        window.console.log(error);
      });
    },
    editDialog(row) {
      this.addParams = {
        visible: true,
        title: '编辑',
        isEdit: true,
        addForm: {
          ...row
        }