GuLiMmo
2024-01-04 42dfeb9667d4f367f1bd8cc1e01e00f3173c8418
新增弹窗
2 files modified
1 files added
220 ■■■■■ changed files
src/views/evaluate/components/IndividualTaskPublic.vue 188 ●●●●● patch | view | raw | blame | history
src/views/evaluate/components/addSectionTask.vue 8 ●●●● patch | view | raw | blame | history
src/views/evaluate/evaluateTask.vue 24 ●●●● patch | view | raw | blame | history
src/views/evaluate/components/IndividualTaskPublic.vue
New file
@@ -0,0 +1,188 @@
<template>
    <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">
                    <ul class="type-list">
                        <li class="type-item">
                            <div class="title">类别</div>
                            <div class="introduction">认定标准</div>
                            <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>
                            <el-tooltip effect="dark" placement="top">
                                <template #content>
                                    <p style="width: 500px;">{{ item.introduction }}</p>
                                </template>
                                <div class="introduction">
                                    {{ item.introduction }}
                                </div>
                            </el-tooltip>
                            <div class="number">{{ item.number }}</div>
                            <div class="tool">
                               <el-button type="primary" icon="el-icon-plus" text>添加候选人</el-button>
                            </div>
                        </li>
                    </ul>
                </el-form-item>
                <el-form-item label="投票人员" prop="employees">
                    <el-checkbox-group v-model="form.employees">
                        <el-checkbox v-for="item in employeeDict" :key="item.id" :label="item.dictKey">
                            {{ item.dictValue }}
                        </el-checkbox>
                    </el-checkbox-group>
                </el-form-item>
                <el-form-item label="第二轮任务结束时间" required>
                    <el-form-item class="time-box" prop="candidateCutoffTimeStart">
                        <el-date-picker v-model="form.candidateCutoffTimeStart" type="datetime" placeholder="请选择任务开始时间"
                            value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%;" />
                    </el-form-item>
                    <span class="time-span">至</span>
                    <el-form-item class="time-box" prop="candidateCutoffTimeEnd">
                        <el-date-picker v-model="form.candidateCutoffTimeEnd" type="datetime" placeholder="请选择任务结束时间"
                            value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%;" />
                    </el-form-item>
                </el-form-item>
            </el-form>
        </div>
        <template #footer>
            <el-button @click="() => params.visible = false">取消</el-button>
            <el-button type="primary">确定发布</el-button>
        </template>
    </el-dialog>
</template>
<script>
import _ from 'lodash';
import { getDict } from '@/api/dict'
export default {
    props: {
        params: {
            type: Object,
            default: () => {
                return {
                    visible: false,
                    data: {}
                };
            },
        },
    },
    data() {
        return {
            employeeDict: [],
            form: {
                taskType: [],
                employees: [],
                candidateCutoffTimeStart: '',
                candidateCutoffTimeEnd: ''
            },
            rules: {
                taskType: [
                    { required: true, message: '任务类别不可为空', trigger: 'click' },
                ],
                employees: [
                    { required: true, message: '请选择评定人员', trigger: 'click' },
                ],
                candidateCutoffTimeStart: [
                    { required: true, message: '请选择任务开始时间', trigger: 'click' },
                ],
                candidateCutoffTimeEnd: [
                    { required: true, message: '请选择任务开始时间', trigger: 'click' },
                ]
            }
        }
    },
    methods: {
        dialogClose() {
            this.$refs.formRef.resetFields()
        },
        openDialog() {
            this.initDict()
        },
        initDict() {
            getDict('employee_type').then(res => {
                const { code, data } = res.data
                if (code !== 200) {
                    return this.$message.error('人员类型字典加载失败')
                }
                this.employeeDict = data
            })
        }
    }
};
</script>
<style lang="scss" scoped>
$borderColor: var(--el-border-color);
.content {
    max-height: 400px;
    overflow-y: auto;
    .time-span {
        margin: 0 10px;
    }
    .time-box {
        width: calc(100% / 2 - 20px);
    }
    .type-list {
        margin: 0;
        padding: 0;
        list-style-type: none;
        width: 100%;
        border: 1px solid $borderColor;
        border-radius: var(--el-border-radius-base);
        box-sizing: border-box;
        .type-item {
            display: flex;
            height: 40px;
            line-height: 40px;
            text-align: center;
            div {
                border-bottom: 1px solid $borderColor;
                flex-shrink: 0;
                white-space: nowrap;
                overflow: hidden;
                text-overflow: ellipsis;
            }
            .title {
                flex: 2;
            }
            .introduction {
                flex: 5;
                flex-shrink: 0;
                border: {
                    right: 1px solid $borderColor;
                    left: 1px solid $borderColor;
                }
            }
            .number {
                flex: 1;
            }
            .tool {
                flex: 2;
                border-left: 1px solid $borderColor;
            }
            &:last-child {
                div {
                    border-bottom: 0;
                }
            }
        }
    }
}
</style>
src/views/evaluate/components/addSectionTask.vue
@@ -1,5 +1,5 @@
<template>
    <el-dialog v-model="params.visible" :title="params.title" width="50%" @close="dialogClose">
    <el-dialog v-model="params.visible" :title="params.title" width="50%" @open="openDialog" @close="dialogClose">
        <div class="content">
            <el-form :model="form" ref="formRef" :rules="rules" label-width="130px">
                <el-form-item label="任务名称" prop="taskName">
@@ -93,6 +93,9 @@
        dialogClose() {
            this.$refs.formRef.resetFields()
        },
        openDialog() {
            this.initDict()
        },
        submit() {
            this.$refs.formRef.validate(vaild => {
                console.log(this.form);
@@ -107,9 +110,6 @@
                this.employeeDict = data
            })
        }
    },
    mounted() {
        this.initDict()
    }
};
</script>
src/views/evaluate/evaluateTask.vue
@@ -5,17 +5,16 @@
      :data="data" :permission="permissionList" :before-open="beforeOpen" ref="crud" @row-update="rowUpdate"
      @row-save="rowSave" @row-del="rowDel" @search-change="searchChange" @search-reset="searchReset"
      @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
      @refresh-change="refreshChange" >
      <!-- @on-load="onLoad" -->
      @refresh-change="refreshChange" @on-load="onLoad">
      <template #candidateCutoffTimeEnd="{ row }">
        {{ row.candidateCutoffTimeStart || '开始时间未完善' }}
        {{ row.candidateCutoffTimeStart}}
        <div style="text-align: center;">-</div>
        {{ row.candidateCutoffTimeEnd || '结束时间未完善' }}
        {{ row.candidateCutoffTimeEnd}}
      </template>
      <template #evaluateCutoffTimeEnd="{ row }">
        {{ row.evaluateCutoffTimeStart || '开始时间未完善' }}
        {{ row.evaluateCutoffTimeStart}}
        <div style="text-align: center;">-</div>
        {{ row.candidateCutoffTimeEnd || '结束时间未完善' }}
        {{ row.candidateCutoffTimeEnd}}
      </template>
      <template #menu-left>
        <el-button type="primary" icon="el-icon-plus" @click="handleAdd">新增评优任务</el-button>
@@ -25,12 +24,15 @@
      </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="danger" text plain icon="el-icon-delete" @click="rowDel(row)">删除</el-button>
      </template>
    </avue-crud>
    <!-- 新增个人评优任务弹窗 -->
    <addIndividualTask :params="addIndividualParams" @refreshTable="this.onLoad" />
    <addSectionTask :params="addSectionParams" @refreshTable="this.onLoad" />
    <!-- 发布 -->
    <individualTaskPublic :params="taskPublicParams" @refreshTable="this.onLoad" />
    <!-- 预览 -->
    <viewEvaluateDetail :params="viewEvaluateDetailParams" />
  </basic-container>
@@ -49,11 +51,13 @@
import addIndividualTask from './components/addIndividualTask.vue';
import addSectionTask from './components/addSectionTask.vue';
import viewEvaluateDetail from './components/viewEvaluateDetail.vue';
import individualTaskPublic from './components/IndividualTaskPublic.vue';
export default {
  components: {
    addIndividualTask,
    addSectionTask,
    individualTaskPublic,
    viewEvaluateDetail
  },
  data() {
@@ -74,7 +78,6 @@
      addIndividualParams: {},
      addSectionParams: {},
      viewParams: {},
      depts: [],
      // 考核结果参数
      defaultTaskType: 0,
      taskTypeList: {
@@ -91,6 +94,7 @@
      },
      // 信息预览弹窗
      viewEvaluateDetailParams: {},
      taskPublicParams: {}
    };
  },
  watch: {
@@ -164,6 +168,12 @@
        data: row
      }
    },
    taskPublicDialog(row) {
      this.taskPublicParams = {
        visible: true,
        data: row
      }
    },
    rowUpdate(row, index, done, loading) {
      update(row).then(
        () => {