GuLiMmo
2023-12-20 d058cd91a5864b15adbf260b28a89a973eaba99b
考核权重设置,评优任务、员工信息页面更新
4 files modified
1 files added
229 ■■■■■ changed files
src/views/assessment/components/assessmentWeight.vue 7 ●●●●● patch | view | raw | blame | history
src/views/employee/list.vue 4 ●●●● patch | view | raw | blame | history
src/views/evaluate/components/addCandidate.vue 185 ●●●●● patch | view | raw | blame | history
src/views/evaluate/components/addDialog.vue 16 ●●●●● patch | view | raw | blame | history
src/views/evaluate/evaluateTask.vue 17 ●●●●● patch | view | raw | blame | history
src/views/assessment/components/assessmentWeight.vue
@@ -193,7 +193,6 @@
            });
        },
        rowUpdate(row, index, done, loading) {
            console.log(row);
            (this.params.isDept ? updateDept(row) : update(row)).then(() => {
                this.onLoad(this.page);
                this.$message({
@@ -270,9 +269,9 @@
                (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;
                // });
                if (type === "edit") {
                    this.weightRange += this.form.weight
                }
            }
            done();
        },
src/views/employee/list.vue
@@ -304,9 +304,9 @@
  },
  mounted() {
    // 非租户模式默认加载管理组数据
    if (!website.tenantMode) {
    // if (!website.tenantMode) {
      this.initData(website.tenantId);
    }
    // }
  },
  methods: {
    nodeClick(data) {
src/views/evaluate/components/addCandidate.vue
New file
@@ -0,0 +1,185 @@
<template>
    <el-dialog v-model="params.visible" title="新增候选人" width="60%" destroy-on-close>
        <div class="table-box">
            <avue-crud v-model="form" :option="option" :data="data" @row-save="rowSave">
                <template #menu="{ row }">
                    <el-popconfirm title="是否确认删除当前候选人?" @confirm="rowDel(row)">
                        <template #reference>
                            <el-button text plan type="primary" icon="el-icon-delete">删除</el-button>
                        </template>
                    </el-popconfirm>
                </template>
            </avue-crud>
        </div>
    </el-dialog>
</template>
<script setup>
import { getCurrentInstance, reactive, ref, watch } from 'vue';
import _ from 'lodash'
import { ElMessage } from 'element-plus'
import {
    getList
} from '@/api/system/user';
import { update } from '@/api/evaluate/evaluateTask';
const config = getCurrentInstance().appContext.config.globalProperties
const $props = defineProps({
    params: {
        type: Object,
        default: () => ({
            visible: false,
            type: 0,
            data: {},
        }),
    }
})
const $emit = defineEmits(['refreshTable'])
const data = ref([])
const form = ref({})
const option = reactive({
    height: '300',
    tip: false,
    searchShow: true,
    searchMenuSpan: 6,
    border: true,
    index: true,
    viewBtn: false,
    addBtn: true,
    editBtn: false,
    delBtn: false,
    selection: true,
    refreshBtn: false,
    dialogClickModal: false,
    menuFixed: 'right',
    column: [
        {
            label: '候选人姓名',
            prop: 'name',
            type: 'select',
            dicData: [],
            props: {
                label: 'name',
                value: 'id'
            },
            control: (val, row) => {
                const { findObject } = config
                const { dicData } = findObject(option.column, 'name')
                const data = dicData.find(item => item.id === val)
                row.deptName = data.deptName || ''
                row.deptId = data.deptId || ''
                form.value = row
            }
        },
        {
            label: '部门',
            prop: 'deptName',
            type: 'select',
            disabled: true,
        }
    ]
})
const initData = () => {
    const { candidateNum } = _.cloneDeep($props.params.data)
    const userList = []
    candidateNum.forEach(item => {
        const { deptName, deptId, users } = item
        users.forEach(user => {
            user.deptName = deptName
            user.deptId = deptId
            userList.push(user)
        })
    })
    data.value = userList
    const { findObject } = config
    const column = findObject(option.column, 'name');
    getList(1, 999999, {}).then(res => {
        column.dicData = res.data.data.records
    })
}
const rowSave = (row, done) => {
    const { findObject } = config
    const column = findObject(option.column, 'name');
    const params = $props.params.data
    const info = params.candidateNum.find(item => item.deptId === row.deptId)
    const { name } = column.dicData.find(item => item.id === row.name)
    const is = data.value.find(item => item.id === row.name)
    if (is) {
        ElMessage.warning('当前候选人已存在')
        done()
    } else {
        const user = {
            id: row.name,
            name
        }
        info.users.push(user)
        update(params).then(
            () => {
                ElMessage({
                    type: 'success',
                    message: '操作成功!',
                });
                initData()
                $emit('refreshTable', '')
                done()
            },
            error => {
                ElMessage({
                    type: 'error',
                    message: error,
                });
            }
        );
    }
}
const rowDel = (row) => {
    const { $index, id, deptId } = row
    const params = $props.params.data
    const info = params.candidateNum.find(item => item.deptId === deptId)
    const index = info.users.find(item => item.id === id)
    info.users.splice(index, 1)
    if (info.val > info.users.length) {
        info.val = info.users.length
    }
    update(params).then(
        () => {
            ElMessage({
                type: 'success',
                message: '操作成功!',
            });
            initData()
            $emit('refreshTable', '')
        },
        error => {
            ElMessage({
                type: 'error',
                message: error,
            });
        }
    );
}
watch(() => $props.params.visible, (val) => {
    val && initData();
}, {
    deep: true,
    immediate: true
})
</script>
<style lang="scss" scoped>
.table-box {
    height: 400px;
    overflow-x: auto;
}
</style>
src/views/evaluate/components/addDialog.vue
@@ -9,7 +9,7 @@
                    <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-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%;">
@@ -231,18 +231,22 @@
            // 读取部门列表
            getDeptTree(tenantId)
                .then(res => {
                    const result = _.cloneDeep(res.data.data);
                    let deptList = [];
                    result.forEach(item => {
                    _.cloneDeep(res.data.data).forEach(item => {
                        deptList.push(item);
                        if (item.children) {
                            deptList = result.concat(item.children);
                            item.children.forEach(ic => {
                                ic.title = item.title +'/'+ ic.title;
                            })
                            deptList = deptList.concat(item.children);
                            delete item.children;
                        }
                    });
                    return deptList;
                    return {
                        deptList,
                    };
                })
                .then(deptList => {
                .then(({ deptList }) => {
                    const depts_list = _.cloneDeep(deptList);
                    this.depts = [];
                    depts_list.forEach(dept => {
src/views/evaluate/evaluateTask.vue
@@ -15,6 +15,7 @@
      <template #menu="{ size, row, index }">
        <el-button type="primary" text plain icon="el-icon-edit" @click="editDialog(row)">编辑</el-button>
        <el-button type="primary" text plain icon="el-icon-position" @click="publicTimeBtn(row)" v-if="row.status === 2">发布</el-button>
        <el-button type="primary" v-if="row.type === 0" text plain icon="el-icon-plus" @click="addCandidateHandle(row)">新增候选人</el-button>
        <el-button type="primary" text plain icon="el-icon-download">导出</el-button>
      </template>
    </avue-crud>
@@ -35,6 +36,8 @@
    </el-dialog>
    <!-- 新增编辑弹窗 -->
    <addDialog :params="addParams" @refreshTable="this.onLoad" />
    <!-- 新增候选人 -->
    <addCandidate :params="addCandidateParams" @refreshTable="this.onLoad"  />
  </basic-container>
</template>
@@ -49,11 +52,13 @@
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
import addDialog from './components/addDialog.vue';
import addCandidate from './components/addCandidate.vue';
import { getDeptTree } from '@/api/system/dept';
export default {
  components: {
    addDialog,
    addCandidate
  },
  data() {
    return {
@@ -93,6 +98,8 @@
          },
        ],
      },
      // 新增候选人params
      addCandidateParams: {},
    };
  },
  watch: {
@@ -310,6 +317,7 @@
        const result = deptResult.data.data;
        let deptList = [];
        result.forEach(dept => {
          console.log(dept);
          if (dept.children) {
            deptList = result.concat(dept.children);
            delete dept.children;
@@ -347,6 +355,15 @@
      );
      this.dialogVisible = false;
    },
    addCandidateHandle(row) {
      this.addCandidateParams = {
        visible: true,
        type: 0,
        data: {
          ...row
        }
      }
    },
    tabChange(value) {
      this.defaultTaskType = value.prop;
    },