GuLiMmo
2024-01-12 61bece6b76109a3b90a720973e20c3a9f7dfa576
更新
4 files modified
3 files added
836 ■■■■■ changed files
src/api/evaluate/evaluateTask.js 54 ●●●●● patch | view | raw | blame | history
src/views/evaluate/components/addIndividualTask.vue 4 ●●● patch | view | raw | blame | history
src/views/evaluate/components/editIndividualTask.vue 314 ●●●●● patch | view | raw | blame | history
src/views/evaluate/components/editSectionTask.vue 187 ●●●●● patch | view | raw | blame | history
src/views/evaluate/components/secondRoundResult.vue 3 ●●●● patch | view | raw | blame | history
src/views/evaluate/components/votingDetails.vue 225 ●●●●● patch | view | raw | blame | history
src/views/evaluate/evaluateTask.vue 49 ●●●● patch | view | raw | blame | history
src/api/evaluate/evaluateTask.js
@@ -49,6 +49,14 @@
  })
}
export const edit = (row) => {
  return request({
    url: '/evaluate/evaluateTask/update',
    method: 'post',
    data: row
  })
}
// 获取类别
export const getEcList = (current, size, evaluateTaskId) => {
  return request({
@@ -140,4 +148,50 @@
      size
    }
  })
}
// 第一轮投票人数查询
export const getFirstRoundResult = (current, size, params) => {
  return request({
    url: `/evaluate/evaluateTaskReferrer/referrerList`,
    method: 'get',
    params: {
      ...params,
      current,
      size
    }
  })
}
// 第二轮投票人数查询
export const getSecondRoundResult = (current, size, params) => {
  return request({
    url: `/api/evaluate/evaluateCandidateResult/resultList`,
    method: 'get',
    params: {
      ...params,
      current,
      size
    }
  })
}
export const votingBack = (ids) => {
  return request({
    url: `/evaluate/evaluateTaskReferrer/remove`,
    method: 'post',
    params: {
      ids
    }
  })
}
export const votingSectionBack = (ids) => {
  return request({
    url: `/evaluate/evaluateCandidateResult/remove`,
    method: 'post',
    params: {
      ids
    }
  })
}
src/views/evaluate/components/addIndividualTask.vue
@@ -60,7 +60,7 @@
                        <el-input type="textarea" v-model="taskTypeForm.standard" placeholder="请输入认定标准"></el-input>
                    </el-form-item>
                    <el-form-item label="名额" prop="peopleNum">
                        <el-input-number :min="0" v-model="taskTypeForm.peopleNum" placeholder="请输入名额数量" controls-position="right" style="width: 100%;"></el-input-number>
                        <el-input-number :min="1" v-model="taskTypeForm.peopleNum" placeholder="请输入名额数量" controls-position="right" style="width: 100%;"></el-input-number>
                    </el-form-item>
                </el-form>
                <template #footer>
@@ -89,8 +89,6 @@
                return {
                    visible: false,
                    title: '添加个人评优任务',
                    isEdit: false,
                    addForm: {},
                };
            },
        },
src/views/evaluate/components/editIndividualTask.vue
New file
@@ -0,0 +1,314 @@
<template>
    <el-dialog v-model="params.visible" :title="params.title || '编辑个人评优任务'" width="50%" @open="dialogOpen"
        @close="dialogClose">
        <div class="content">
            <el-form :model="form" ref="formRef" :rules="rules" label-position="top">
                <el-form-item label="任务名称" prop="taskName">
                    <el-input v-model="form.taskName" placeholder="请输入任务名称"></el-input>
                </el-form-item>
                <el-form-item label="评优类别" prop="categoryEntities">
                    <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.categoryEntities" :key="index">
                            <div class="title">{{ item.categoryName }}</div>
                            <el-tooltip effect="dark" placement="top">
                                <template #content>
                                    <p style="max-width: 500px;">{{ item.standard }}</p>
                                </template>
                                <div class="introduction">
                                    {{ item.standard }}
                                </div>
                            </el-tooltip>
                            <div class="number">{{ item.peopleNum }}</div>
                            <div class="tool">
                                <el-popconfirm title="是否确认删除当前评优类别?" @confirm="deleteTaskType(index)">
                                    <template #reference>
                                        <el-button type="danger" icon="el-icon-delete" text></el-button>
                                    </template>
                                </el-popconfirm>
                            </div>
                        </li>
                        <li class="add-button">
                            <el-button type="primary" text icon="el-icon-plus" @click="addTaskType">添加类别</el-button>
                        </li>
                    </ul>
                </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>
            <!-- 添加类别弹窗 -->
            <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="categoryName">
                        <el-input v-model="taskTypeForm.categoryName" placeholder="请输入类别名称"></el-input>
                    </el-form-item>
                    <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="peopleNum">
                        <el-input-number :min="1" v-model="taskTypeForm.peopleNum" placeholder="请输入名额数量"
                            controls-position="right" style="width: 100%;"></el-input-number>
                    </el-form-item>
                </el-form>
                <template #footer>
                    <el-button @click="innerVisible = false">取消</el-button>
                    <el-button type="primary" @click="addTaskTypeRow">确定</el-button>
                </template>
            </el-dialog>
        </div>
        <template #footer>
            <el-button @click="() => params.visible = false">取消</el-button>
            <el-button type="primary" @click="addEvaluateTask">确定更新当前任务</el-button>
        </template>
    </el-dialog>
</template>
<script>
import _ from 'lodash';
import { getEcList, edit } from '@/api/evaluate/evaluateTask'
export default {
    inject: ['type'],
    props: {
        params: {
            type: Object,
            default: () => {
                return {
                    visible: false,
                    title: '编辑个人评优任务',
                    data: {}
                };
            },
        },
    },
    data() {
        return {
            form: {
                taskName: '',
                categoryEntities: [],
                candidateCutoffTimeStart: '',
                candidateCutoffTimeEnd: ''
            },
            pageParams: {
                size: 10,
                current: 1,
                total: 0,
            },
            taskTypeForm: {
                categoryName: '',
                standard: '',
                peopleNum: ''
            },
            rules: {
                taskName: [
                    { required: true, message: '请输入任务名称', trigger: 'click' },
                ],
                categoryEntities: [
                    { required: true, message: '任务类别不可为空', trigger: 'click' },
                ],
                candidateCutoffTimeStart: [
                    { required: true, message: '请选择任务开始时间', trigger: 'click' },
                    {
                        validator: (rule, value, callback) => {
                            if (value) {
                                const startTime = new Date(value).getTime()
                                const endTime = new Date(this.form.candidateCutoffTimeEnd).getTime()
                                const nowTime = new Date().getTime() - (24 * 60 * 60 * 1000)
                                if (nowTime > startTime) {
                                    callback(new Error('开始时间不能早于当日时间'))
                                } else if (startTime >= endTime) {
                                    callback(new Error('结束时间不能早于等于开始时间'))
                                } else {
                                    callback()
                                }
                            }
                        }, trigger: 'click'
                    }
                ],
                candidateCutoffTimeEnd: [
                    { required: true, message: '请选择任务开始时间', trigger: 'click' },
                    {
                        validator: (rule, value, callback) => {
                            if (value) {
                                const startTime = new Date(this.form.candidateCutoffTimeStart).getTime()
                                const endTime = new Date(value).getTime()
                                const nowTime = new Date().getTime()
                                // if (nowTime > endTime) {
                                //     callback(new Error('结束时间不能早于等于当前时间'))
                                // } else
                                if (startTime >= endTime) {
                                    callback(new Error('结束时间不能早于等于开始时间'))
                                } else {
                                    callback()
                                }
                            }
                        }, trigger: 'click'
                    }
                ]
            },
            taskTypeRules: {
                categoryName: [
                    { required: true, message: '请输入类别', trigger: 'click' }
                ],
                standard: [
                    { required: true, message: '请输入认定标准', trigger: 'click' }
                ],
                peopleNum: [
                    { required: true, message: '请输入名额', trigger: 'click' }
                ]
            },
            innerVisible: false
        }
    },
    methods: {
        dialogClose() {
            this.$refs.formRef.resetFields()
        },
        innerDialogClose() {
            this.$refs.taskTypeFormRef.resetFields()
        },
        deleteTaskType(index) {
            try {
                this.form.categoryEntities.splice(index, 1)
                this.$message.success('删除当前评优类别成功')
            } catch (error) {
                this.$message.error('删除当前评优类别失败')
            }
        },
        addTaskType() {
            this.innerVisible = true;
        },
        addTaskTypeRow() {
            this.$refs.taskTypeFormRef.validate(vaild => {
                if (!vaild) return
                const curValue = _.cloneDeep(this.taskTypeForm)
                this.form.categoryEntities.push(curValue)
                this.innerVisible = false
            })
        },
        addEvaluateTask() {
            this.$refs.formRef.validate(valid => {
                if (!valid) return
                edit(this.form).then(res => {
                    if (res.data.code !== 200) return
                    this.$emit('refreshTable', { currentPage: 1, pageSize: 10 })
                    this.$message.success('更新当前任务信息成功')
                    this.params.visible = false
                })
            })
        },
        dialogOpen() {
            const { id, taskName, candidateCutoffTimeStart, candidateCutoffTimeEnd } = this.params.data
            const { current, size } = this.pageParams
            getEcList(current, size, id).then(ecResult => {
                const data = ecResult.data.data
                if (ecResult.data.code !== 200) return this.$message.error('数据初始化失败,请重试!')
                this.pageParams.total = data.total
                data.records.forEach(item => {
                    const { categoryName, standard, peopleNum } = item
                    this.form.categoryEntities.push({
                        categoryName,
                        standard,
                        peopleNum
                    })
                })
                this.form.id = id
                this.form.taskName = taskName
                this.form.candidateCutoffTimeStart = candidateCutoffTimeStart
                this.form.candidateCutoffTimeEnd = candidateCutoffTimeEnd
            })
        }
    }
};
</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: 6;
                flex-shrink: 0;
                border: {
                    right: 1px solid $borderColor;
                    left: 1px solid $borderColor;
                }
            }
            .number {
                flex: 1;
            }
            .tool {
                flex: 1;
                border-left: 1px solid $borderColor;
            }
            &:last-child {
                div {
                    border-bottom: 0;
                }
            }
        }
        .add-button {
            display: flex;
            justify-content: center;
        }
    }
}
</style>
src/views/evaluate/components/editSectionTask.vue
New file
@@ -0,0 +1,187 @@
<template>
    <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">
                    <el-input v-model="form.taskName" placeholder="请输入任务名称"></el-input>
                </el-form-item>
                <el-form-item label="评优奖项" prop="evaluateAwards">
                    <el-input v-model="form.evaluateAwards" placeholder="请输入评优奖项"></el-input>
                </el-form-item>
                <el-form-item label="认定标准描述" prop="identificationStandard">
                    <el-input v-model="form.identificationStandard" type="textarea" placeholder="请输入认定标准描述"></el-input>
                </el-form-item>
                <el-form-item label="投票人员" prop="pollingPersons">
                    <el-checkbox-group v-model="form.pollingPersons">
                        <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="evaluateCutoffTimeStart">
                        <el-date-picker v-model="form.evaluateCutoffTimeStart" 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="evaluateCutoffTimeEnd">
                        <el-date-picker v-model="form.evaluateCutoffTimeEnd" 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" @click="submit">确定</el-button>
        </template>
    </el-dialog>
</template>
<script>
import { getDict } from '@/api/dict'
import { update } from '@/api/evaluate/evaluateTask'
import _ from 'lodash';
export default {
    inject: ['type'],
    props: {
        params: {
            type: Object,
            default: () => {
                return {
                    visible: false,
                    title: '新增部门评优任务',
                    data: {}
                };
            },
        },
    },
    data() {
        return {
            form: {
                id: '',
                taskName: '',
                evaluateAwards: '',
                identificationStandard: '',
                pollingPersons: [],
                evaluateCutoffTimeStart: '',
                evaluateCutoffTimeEnd: ''
            },
            rules: {
                taskName: [
                    { required: true, message: '请输入任务名称', trigger: 'click' },
                ],
                evaluateAwards: [
                    { required: true, message: '请输入评优奖项', trigger: 'click' },
                ],
                identificationStandard: [
                    { required: true, message: '请输入认定标准', trigger: 'click' },
                ],
                pollingPersons: [
                    { required: true, message: '请选择评定人员', trigger: 'click' },
                ],
                evaluateCutoffTimeStart: [
                    { required: true, message: '请选择任务开始时间', trigger: 'click' },
                    {
                        validator: (rule, value, callback) => {
                            if (value) {
                                const startTime = new Date(value).getTime()
                                const endTime = new Date(this.form.candidateCutoffTimeEnd).getTime()
                                const nowTime = new Date().getTime()
                                // if (nowTime > startTime) {
                                //     callback(new Error('开始时间不能早于当前时间'))
                                // } else
                                if (startTime >= endTime) {
                                    callback(new Error('结束时间不能早于等于开始时间'))
                                } else {
                                    callback()
                                }
                            }
                        }, trigger: 'click'
                    }
                ],
                evaluateCutoffTimeEnd: [
                    { required: true, message: '请选择任务开始时间', trigger: 'click' },
                    {
                        validator: (rule, value, callback) => {
                            if (value) {
                                const startTime = new Date(this.form.candidateCutoffTimeStart).getTime()
                                const endTime = new Date(value).getTime()
                                const nowTime = new Date().getTime() - (24 * 60 * 60 * 1000)
                                if (nowTime > startTime) {
                                    callback(new Error('开始时间不能早于当日时间'))
                                } else if (startTime >= endTime) {
                                    callback(new Error('结束时间不能早于等于开始时间'))
                                } else {
                                    callback()
                                }
                            }
                        }, trigger: 'click'
                    }
                ]
            },
            employeeDict: []
        }
    },
    methods: {
        dialogClose() {
            this.$refs.formRef.resetFields()
        },
        openDialog() {
            this.initDict()
            const { id, taskName, evaluateAwards, identificationStandard, pollingPersons, evaluateCutoffTimeStart, evaluateCutoffTimeEnd } = this.params.data
            this.form = {
                id,
                taskName,
                evaluateAwards,
                identificationStandard,
                pollingPersons: pollingPersons.split(','),
                evaluateCutoffTimeStart,
                evaluateCutoffTimeEnd
            }
        },
        submit() {
            this.$refs.formRef.validate(vaild => {
                if (!vaild) return
                const data = _.cloneDeep(this.form)
                data.pollingPersons = data.pollingPersons.join(',')
                data.type = this.type()
                update(data).then(res => {
                    if (res.data.code !== 200) return
                    this.$message.success('更新当前任务成功')
                    this.params.visible = false
                    this.$emit('refreshTable', { currentPage: 1, pageSize: 10 })
                })
            })
        },
        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);
    }
}
</style>
src/views/evaluate/components/secondRoundResult.vue
@@ -207,8 +207,9 @@
            }).then(() => {
                NProgress.start();
                const url = this.type() ? sectionDownloadUrl : downloadUrl;
                const typeName = this.type() ? '部门' : '个人'
                exportBlob(url, {}).then(res => {
                    downloadXls(res.data, `最终评优结果(${dateNow()}).xlsx`);
                    downloadXls(res.data, `${typeName}最终评优结果(${dateNow()}).xlsx`);
                    NProgress.done();
                })
            });
src/views/evaluate/components/votingDetails.vue
New file
@@ -0,0 +1,225 @@
<template>
    <el-dialog v-model="params.visible" :title="params.data?.taskName || '投票详情'" width="60%" destroy-on-close
        @open="dialogOpen">
        <avue-crud :option="option" :table-loading="loading" :data="data" v-model:page="page" @search-change="searchChange"
            @search-reset="searchReset" @current-change="currentChange" @size-change="sizeChange"
            @refresh-change="refreshChange" @on-load="onLoad">
            <template #menu-left>
                <el-radio-group v-model="selectedRoundValue" @change="selectedChange">
                    <el-radio-button :label="0" v-if="!type()">第一轮投票详情</el-radio-button>
                    <el-radio-button :label="1">最终评优结果投票详情</el-radio-button>
                </el-radio-group>
            </template>
            <template #menu="{ row }">
                <el-button type="warning" icon="el-icon-info-filled" text @click="sendBack(row)">驳回</el-button>
            </template>
        </avue-crud>
    </el-dialog>
</template>
<script>
import { getFirstRoundResult, getSecondRoundResult, votingBack, votingSectionBack } from '@/api/evaluate/evaluateTask'
export default {
    inject: ['type'],
    props: {
        params: {
            type: Object,
            default: () => {
                return {
                    visible: false,
                    data: {}
                }
            }
        }
    },
    data() {
        return {
            loading: true,
            query: {},
            data: [],
            page: {
                pageSize: 10,
                currentPage: 1,
                total: 0
            },
            selectedRoundValue: 0,
            option: {},
            defaultOption: {
                height: '400',
                calcHeight: 30,
                tip: false,
                searchShow: true,
                searchMenuSpan: 6,
                border: true,
                index: true,
                viewBtn: false,
                addBtn: false,
                editBtn: false,
                delBtn: false,
                viewBtn: false,
                menuWidth: 150,
                dialogClickModal: false,
                column: [
                    {
                        label: '投票人姓名',
                        prop: 'voteUserName',
                        type: 'input',
                        searchLabelWidth: 100,
                        search: true
                    },
                    {
                        label: '投票人职位',
                        prop: 'votePostName',
                        type: 'input',
                    },
                    {
                        label: '投票人部门',
                        prop: 'voteDeptName',
                        type: 'input',
                    },
                    {
                        label: '被投人',
                        prop: 'userName',
                        type: 'input',
                        search: true
                    },
                    {
                        label: '推荐理由',
                        prop: 'remark',
                        type: 'input',
                        overHidden: true,
                    }
                ]
            },
            sectionOption: {
                height: '400',
                calcHeight: 30,
                tip: false,
                searchShow: true,
                searchMenuSpan: 6,
                border: true,
                index: true,
                viewBtn: false,
                addBtn: false,
                editBtn: false,
                delBtn: false,
                viewBtn: false,
                menuWidth: 150,
                dialogClickModal: false,
                column: [
                    {
                        label: '投票人姓名',
                        prop: 'voteUserName',
                        type: 'input',
                        searchLabelWidth: 100,
                        search: true
                    },
                    {
                        label: '投票人职位',
                        prop: 'votePostName',
                        type: 'input',
                    },
                    {
                        label: '投票人部门',
                        prop: 'voteDeptName',
                        type: 'input',
                    },
                    {
                        label: '推荐部门',
                        prop: 'deptName',
                        type: 'input',
                        search: true
                    },
                    {
                        label: '推荐理由',
                        prop: 'remark',
                        type: 'input',
                        overHidden: true,
                    }
                ]
            }
        }
    },
    methods: {
        searchReset() {
            this.query = {};
            this.onLoad(this.page, { type: this.defaultTaskType });
        },
        searchChange(params, done) {
            this.query = {
                ...params,
            };
            this.page.currentPage = 1;
            this.onLoad(this.page, params);
            done();
        },
        currentChange(currentPage) {
            this.page.currentPage = currentPage;
        },
        sizeChange(pageSize) {
            this.page.pageSize = pageSize;
        },
        refreshChange() {
            this.onLoad(this.page, this.query);
        },
        onLoad(page, params = {}) {
            this.loading = true;
            const { id } = this.params.data
            const {
            } = this.query;
            let values = {
                ...this.query,
                ...params,
                evaluateTaskId: id
            };
            !this.selectedRoundValue && getFirstRoundResult(page.currentPage, page.pageSize, values).then(res => {
                const data = res.data.data;
                this.data = data.records || [];
                this.page.total = data.total
                this.loading = false;
            });
            this.selectedRoundValue && getSecondRoundResult(page.currentPage, page.pageSize, values).then(res => {
                const data = res.data.data;
                this.data = data.records || [];
                this.page.total = data.total
                this.loading = false;
            });
        },
        sendBack(row) {
            this.$confirm('是否驳回当前投票记录?', {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning',
            }).then(() => {
                const { id } = row
                const request = !this.selectedRoundValue ? votingBack(id) : votingSectionBack(id);
                request.then(res => {
                    this.onLoad(this.page);
                    this.$message.success('驳回当前投票数据成功')
                }, error => {
                    this.$message.error(error)
                })
            })
        },
        selectedChange(value) {
            this.onLoad(this.page);
        },
    },
    watch: {
        'params.visible': {
            handler() {
                this.selectedRoundValue = this.type()
                this.option = this.type() ? this.sectionOption : this.defaultOption
            },
            deep: true
        }
    }
}
</script>
<style></style>
src/views/evaluate/evaluateTask.vue
@@ -27,19 +27,28 @@
        <!-- <el-button type="warning" plain icon="el-icon-download" @click="handleExport">导出</el-button> -->
      </template>
      <template #menu="{ size, row, index }">
        <el-button type="primary" text plain icon="el-icon-view" @click="viewHandlerClick(row)">详情</el-button>
        <el-button type="primary" text plain icon="el-icon-position" v-if="!row.type && row.candidateState === 2 && !row.evaluateState"
          @click="taskPublicDialog(row)">发布</el-button>
        <el-button type="primary" text plain icon="el-icon-view" @click="viewHandlerClick(row)">结果详情</el-button>
        <el-button type="primary" text plain icon="el-icon-view"
          @click="viewVotingDetailsHandlerClick(row)">投票详情</el-button>
        <el-button type="primary" text plain icon="el-icon-position"
          v-if="!row.type && row.candidateState === 2 && !row.evaluateState" @click="taskPublicDialog(row)">发布</el-button>
        <el-button type="success" v-if="row.candidateState === 0" text plain icon="el-icon-edit"
          @click="editTaskDialog(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" />
    <!-- 编辑任务 -->
    <editIndividualTask :params="editIndividualTaskParams" @refreshTable="this.onLoad" />
    <editSectionTask :params="editSectionTaskParams" @refreshTable="this.onLoad" />
    <!-- 发布 -->
    <individualTaskPublic :params="taskPublicParams" @refreshTable="this.onLoad" />
    <!-- 预览 -->
    <viewEvaluate :params="viewEvaluateParams" />
    <!-- 投票详情 -->
    <votingDetails :params="votingParams" />
  </basic-container>
</template>
@@ -57,13 +66,19 @@
import addSectionTask from './components/addSectionTask.vue';
import viewEvaluate from './components/viewEvaluateDetail.vue';
import individualTaskPublic from './components/IndividualTaskPublic.vue';
import votingDetails from './components/votingDetails.vue';
import editIndividualTask from './components/editIndividualTask.vue'
import editSectionTask from './components/editSectionTask.vue'
export default {
  components: {
    addIndividualTask,
    addSectionTask,
    individualTaskPublic,
    viewEvaluate
    viewEvaluate,
    votingDetails,
    editIndividualTask,
    editSectionTask
  },
  data() {
    return {
@@ -99,7 +114,11 @@
      },
      // 信息预览弹窗
      viewEvaluateParams: {},
      taskPublicParams: {}
      taskPublicParams: {},
      votingParams: {},
      // 编辑
      editIndividualTaskParams: {},
      editSectionTaskParams: {},
    };
  },
  watch: {
@@ -172,6 +191,26 @@
        data: row
      }
    },
    viewVotingDetailsHandlerClick(row) {
      this.votingParams = {
        visible: true,
        data: row
      }
    },
    editTaskDialog(row) {
      if (!this.defaultTaskType) {
        this.editIndividualTaskParams = {
          visible: true,
          data: row
        }
      } else {
        this.editSectionTaskParams = {
          visible: true,
          data: row
        }
      }
    },
    taskPublicDialog(row) {
      this.taskPublicParams = {
        visible: true,