GuLiMmo
2024-01-05 594db4f5274caf8c6d89bdd91c871b5c0e0c5a8e
更新
5 files modified
344 ■■■■ changed files
src/api/evaluate/evaluateTask.js 57 ●●●● patch | view | raw | blame | history
src/option/evaluate/evaluateTask.js 178 ●●●●● patch | view | raw | blame | history
src/views/evaluate/components/IndividualTaskPublic.vue 14 ●●●●● patch | view | raw | blame | history
src/views/evaluate/components/addIndividualTask.vue 63 ●●●●● patch | view | raw | blame | history
src/views/evaluate/evaluateTask.vue 32 ●●●●● patch | view | raw | blame | history
src/api/evaluate/evaluateTask.js
@@ -34,8 +34,8 @@
export const add = (row) => {
  return request({
    url: '/evaluate/evaluateTask/submit',
    // url: '/evaluate/evaluateTask/sava',
    // url: '/evaluate/evaluateTask/submit',
    url: '/evaluate/evaluateTask/save',
    method: 'post',
    data: row
  })
@@ -49,62 +49,17 @@
  })
}
// 获取候选人列表
export const getCandidateList = (current, size, params) => {
export const getEcList = (current, size, evaluateTaskId ) => {
  return request({
    url: '/evaluate/evaluateCandidate/list',
    url: '/evaluate/evaluateTaskCategory/list',
    method: 'get',
    params: {
      ...params,
      current,
      current,
      size,
      evaluateTaskId
    }
  })
}
// 添加候选人
export const addCandidate = (data) => {
  return request({
    url: '/evaluate/evaluateCandidate/submit',
    method: 'post',
    data
  })
}
// 删除候选人
export const removeCandidate = (ids) => {
  return request({
    url: '/evaluate/evaluateCandidate/remove',
    method: 'post',
    params: {
      ids,
    }
  })
}
// 获取单个候选人的评定人
export const getAssessorList = (current, size, evaluateCandidateId) => {
  return request({
    url: '/evaluate/evaluateCandidateAssessor/list',
    method: 'get',
    params: {
      current,
      size,
      evaluateCandidateId
    }
  })
}
// 添加评定人
export const addAssessorSubmit = (data) => {
  return request({
    url: '/evaluate/evaluateCandidateAssessor/submit',
    method: 'post',
    data
  })
}
// 获取最终结果
//  url: '/evaluate/evaluateCandidate/page',
src/option/evaluate/evaluateTask.js
@@ -47,43 +47,13 @@
      minWidth: '120px'
    },
    {
      label: "任务类别",
      prop: "taskType",
      type: "input",
      minWidth: '100px'
    },
    {
      label: "认定标准描述",
      prop: "remark",
      type: "input",
      hide: true,
    },
    {
      label: "候选人数量",
      prop: "candidateNum",
      type: "textarea",
      span: 24,
      minWidth: '100px',
      // prop: {
      //   label: "title",
      // },
      formatter: (row, value) => {
       return value
      },
    },
    {
      label: "类型",
      label: "任务类型",
      prop: 'type',
      type: 'select',
      hide: true,
      dicData: [{
        label: '个人评优',
        value: 0,
      },
      {
        label: '部门评优',
        value: 1,
      }]
      type: 'input',
      minWidth: '120px',
      formatter: (row, value) => {
        return value ? '部门评优' : '员工评优'
      }
    },
    {
      label: "第一轮状态",
@@ -103,12 +73,6 @@
      type: "input",
      minWidth: '170px',
      isSlot: true
    },
    {
      label: "评优数量",
      prop: "evaluateNum",
      type: "input",
      minWidth: '100px'
    },
    {
      label: "第二轮状态",
@@ -213,24 +177,6 @@
  labelWidth: '120',
  column: [
    {
      label: "主键",
      prop: "id",
      type: "input",
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      hide: true,
    },
    {
      label: "租户ID",
      prop: "tenantId",
      type: "input",
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      hide: true,
    },
    {
      label: "任务名称",
      prop: "taskName",
      type: "input",
@@ -238,48 +184,13 @@
      minWidth: '120px'
    },
    {
      label: "任务类别",
      prop: "taskType",
      type: "input",
      minWidth: '100px'
    },
    {
      label: "认定标准描述",
      prop: "remark",
      type: "input",
      hide: true,
    },
    {
      label: "评定人数量",
      prop: "candidateNum",
      type: "textarea",
      span: 24,
      minWidth: '100px',
      slot: 'true',
      formatter: (row, value) => {
        return 0
      },
    },
    {
      label: "类型",
      label: "任务类型",
      prop: 'type',
      type: 'select',
      hide: true,
      dicData: [{
        label: '个人评优',
        value: 0,
      },
      {
        label: '部门评优',
        value: 1,
      }]
    },
    {
      label: "评优数量",
      prop: "evaluateNum",
      type: "input",
      minWidth: '100px'
      type: 'input',
      minWidth: '120px',
      formatter: (row, value) => {
        return value ? '部门评优' : '员工评优'
      }
    },
    {
      label: "评选状态",
@@ -297,69 +208,6 @@
      label: "截止时间",
      prop: "candidateCutoffTimeEnd",
      minWidth: '200px'
    },
    {
      label: "创建人",
      prop: "createUser",
      type: "input",
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      hide: true,
    },
    {
      label: "创建部门",
      prop: "createDept",
      type: "input",
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      hide: true,
    },
    {
      label: "创建时间",
      prop: "createTime",
      type: "input",
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      hide: true,
    },
    {
      label: "修改人",
      prop: "updateUser",
      type: "input",
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      hide: true,
    },
    {
      label: "修改时间",
      prop: "updateTime",
      type: "input",
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      hide: true,
    },
    {
      label: "状态",
      prop: "status",
      type: "input",
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      hide: true,
    },
    {
      label: "是否已删除",
      prop: "isDeleted",
      type: "input",
      addDisplay: false,
      editDisplay: false,
      viewDisplay: false,
      hide: true,
    },
    }
  ]
}
src/views/evaluate/components/IndividualTaskPublic.vue
@@ -1,5 +1,5 @@
<template>
    <el-dialog v-model="params.visible" title="评优任务发布" width="50%" @open="openDialog" @close="dialogClose">
    <el-dialog v-model="params.visible" title="发布评优任务" width="50%" @open="openDialog" @close="dialogClose">
        <div class="content">
            <el-form :model="form" ref="formRef" :rules="rules" label-position="top">
                <el-form-item label="任务类别" prop="taskType">
@@ -58,6 +58,7 @@
<script>
import _ from 'lodash';
import { getDict } from '@/api/dict'
import { getEcList } from '@/api/evaluate/evaluateTask'
export default {
    props: {
@@ -93,6 +94,11 @@
                candidateCutoffTimeEnd: [
                    { required: true, message: '请选择任务开始时间', trigger: 'click' },
                ]
            },
            page: {
                current: 1,
                size: 10,
                total: 0
            }
        }
    },
@@ -102,6 +108,12 @@
        },
        openDialog() {
            this.initDict()
            const { id } = this.params.data
            const { current, size } = this.page
            getEcList(current, size, id).then(ecResult => {
                const { code, data } = ecResult.data
                console.log(data);
            })
        },
        initDict() {
            getDict('employee_type').then(res => {
src/views/evaluate/components/addIndividualTask.vue
@@ -5,7 +5,7 @@
                <el-form-item label="任务名称" prop="taskName">
                    <el-input v-model="form.taskName" placeholder="请输入任务名称"></el-input>
                </el-form-item>
                <el-form-item label="任务类别" prop="taskType">
                <el-form-item label="任务类别" prop="categoryEntities">
                    <ul class="type-list">
                        <li class="type-item">
                            <div class="title">类别</div>
@@ -13,18 +13,18 @@
                            <div class="number">名额</div>
                            <div class="tool">操作</div>
                        </li>
                        <li class="type-item" v-for="(item, index) in form.taskType" :key="index">
                            <div class="title">{{ item.title }}</div>
                        <li class="type-item" v-for="(item, index) in form.categoryEntities" :key="index">
                            <div class="title">{{ item.categoryName }}</div>
                            <el-tooltip effect="dark" placement="top">
                                <template #content>
                                    <p style="width: 500px;">{{ item.introduction }}</p>
                                    <p style="max-width: 500px;">{{ item.standard }}</p>
                                </template>
                                <div class="introduction">
                                    {{ item.introduction }}
                                    {{ item.standard }}
                                </div>
                            </el-tooltip>
                            <div class="number">{{ item.number }}</div>
                            <div class="number">{{ item.peopleNum }}</div>
                            <div class="tool">
                                <el-popconfirm title="是否确认删除当前评优类别?" @confirm="deleteTaskType(index)">
                                    <template #reference>
@@ -53,14 +53,14 @@
            <!-- 添加类别弹窗 -->
            <el-dialog v-model="innerVisible" width="40%" title="添加评优类别" append-to-body @close="innerDialogClose">
                <el-form :model="taskTypeForm" :rules="taskTypeRules" ref="taskTypeFormRef" label-width="80px">
                    <el-form-item label="类别" prop="title">
                        <el-input v-model="taskTypeForm.title" placeholder="请输入类别名称"></el-input>
                    <el-form-item label="类别" prop="categoryName">
                        <el-input v-model="taskTypeForm.categoryName" placeholder="请输入类别名称"></el-input>
                    </el-form-item>
                    <el-form-item label="认定标准" prop="introduction">
                        <el-input type="textarea" v-model="taskTypeForm.introduction" placeholder="请输入认定标准"></el-input>
                    <el-form-item label="认定标准" prop="standard">
                        <el-input type="textarea" v-model="taskTypeForm.standard" placeholder="请输入认定标准"></el-input>
                    </el-form-item>
                    <el-form-item label="名额" prop="number">
                        <el-input v-model="taskTypeForm.number" placeholder="请输入名额数量"></el-input>
                    <el-form-item label="名额" prop="peopleNum">
                        <el-input v-model="taskTypeForm.peopleNum" placeholder="请输入名额数量"></el-input>
                    </el-form-item>
                </el-form>
                <template #footer>
@@ -71,15 +71,17 @@
        </div>
        <template #footer>
            <el-button @click="() => params.visible = false">取消</el-button>
            <el-button type="primary">确定</el-button>
            <el-button type="primary" @click="addEvaluateTask">确定</el-button>
        </template>
    </el-dialog>
</template>
<script>
import _ from 'lodash';
import { add } from '@/api/evaluate/evaluateTask'
export default {
    inject: ['type'],
    props: {
        params: {
            type: Object,
@@ -97,20 +99,20 @@
        return {
            form: {
                taskName: '',
                taskType: [],
                categoryEntities: [],
                candidateCutoffTimeStart: '',
                candidateCutoffTimeEnd: ''
            },
            taskTypeForm: {
                title: '',
                introduction: '',
                number: ''
                categoryName: '',
                standard: '',
                peopleNum: ''
            },
            rules: {
                taskName: [
                    { required: true, message: '请输入任务名称', trigger: 'click' },
                ],
                taskType: [
                categoryEntities: [
                    { required: true, message: '任务类别不可为空', trigger: 'click' },
                ],
                candidateCutoffTimeStart: [
@@ -121,13 +123,13 @@
                ]
            },
            taskTypeRules: {
                title: [
                categoryName: [
                    { required: true, message: '请输入类别', trigger: 'click' }
                ],
                introduction: [
                standard: [
                    { required: true, message: '请输入认定标准', trigger: 'click' }
                ],
                number: [
                peopleNum: [
                    { required: true, message: '请输入名额', trigger: 'click' }
                ]
            },
@@ -143,7 +145,7 @@
        },
        deleteTaskType(index) {
            try {
                this.form.taskType.splice(index, 1)
                this.form.categoryEntities.splice(index, 1)
                this.$message.success('删除当前评优类别成功')
            } catch (error) {
                this.$message.error('删除当前评优类别失败')
@@ -156,9 +158,24 @@
            this.$refs.taskTypeFormRef.validate(vaild => {
                if (!vaild) return
                const curValue = _.cloneDeep(this.taskTypeForm)
                this.form.taskType.push(curValue)
                console.log(curValue);
                this.form.categoryEntities.push(curValue)
                console.log(this.form.categoryEntities);
                this.innerVisible = false
            })
        },
        addEvaluateTask() {
            this.$refs.formRef.validate(valid => {
                if (!valid) return
                const data = {
                   ..._.cloneDeep(this.form),
                   type: this.type()
                }
                add(this.form).then(res => {
                    // if ()
                    console.log(res);
                })
            })
        }
    }
};
src/views/evaluate/evaluateTask.vue
@@ -7,14 +7,18 @@
      @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
      @refresh-change="refreshChange" @on-load="onLoad">
      <template #candidateCutoffTimeEnd="{ row }">
        {{ row.candidateCutoffTimeStart}}
        <div style="text-align: center;">-</div>
        {{ row.candidateCutoffTimeEnd}}
        <div class="time-box">
          {{ row.candidateCutoffTimeStart }}
          <div>-</div>
          {{ row.candidateCutoffTimeEnd }}
        </div>
      </template>
      <template #evaluateCutoffTimeEnd="{ row }">
        {{ row.evaluateCutoffTimeStart}}
        <div style="text-align: center;">-</div>
        {{ row.candidateCutoffTimeEnd}}
        <div class="time-box">
          {{ row.evaluateCutoffTimeStart }}
          <div>-</div>
          {{ row.evaluateCutoffTimeEnd }}
        </div>
      </template>
      <template #menu-left>
        <el-button type="primary" icon="el-icon-plus" @click="handleAdd">新增评优任务</el-button>
@@ -24,7 +28,8 @@
      </template>
      <template #menu="{ size, row, index }">
        <el-button type="primary" text plain icon="el-icon-view" @click="viewDateilDialog(row)">详情</el-button>
        <el-button type="primary" text plain icon="el-icon-send" @click="taskPublicDialog(row)">发布</el-button>
        <el-button type="primary" v-if="!row.type" text plain icon="el-icon-position"
          @click="taskPublicDialog(row)">发布</el-button>
        <el-button type="danger" text plain icon="el-icon-delete" @click="rowDel(row)">删除</el-button>
      </template>
    </avue-crud>
@@ -108,7 +113,7 @@
        // 更改option
        !n ? (this.option = option) : (this.option = sectionOption)
        this.page.currentPage = 1;
        // this.onLoad(this.page, params);
        this.onLoad(this.page, params);
      },
      immediate: true,
    },
@@ -169,6 +174,7 @@
      }
    },
    taskPublicDialog(row) {
      console.log(row);
      this.taskPublicParams = {
        visible: true,
        data: row
@@ -301,8 +307,7 @@
      let values = {
        ...this.query,
        ...params,
        taskName_like: taskName,
        ...params
      };
      getList(page.currentPage, page.pageSize, values).then(res => {
        const data = res.data.data;
@@ -324,4 +329,9 @@
};
</script>
<style></style>
<style lang="scss" scoped>
.time-box {
  display: inline-block;
  text-align: center;
}
</style>