4 files modified
3 files added
| | |
| | | }) |
| | | } |
| | | |
| | | export const edit = (row) => { |
| | | return request({ |
| | | url: '/evaluate/evaluateTask/update', |
| | | method: 'post', |
| | | data: row |
| | | }) |
| | | } |
| | | |
| | | // 获取类别 |
| | | export const getEcList = (current, size, evaluateTaskId) => { |
| | | return request({ |
| | |
| | | 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 |
| | | } |
| | | }) |
| | | } |
| | |
| | | <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> |
| | |
| | | return { |
| | | visible: false, |
| | | title: '添加个人评优任务', |
| | | isEdit: false, |
| | | addForm: {}, |
| | | }; |
| | | }, |
| | | }, |
| New file |
| | |
| | | <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> |
| New file |
| | |
| | | <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> |
| | |
| | | }).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(); |
| | | }) |
| | | }); |
| New file |
| | |
| | | <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> |
| | |
| | | <!-- <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> |
| | | |
| | |
| | | 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 { |
| | |
| | | }, |
| | | // 信息预览弹窗 |
| | | viewEvaluateParams: {}, |
| | | taskPublicParams: {} |
| | | taskPublicParams: {}, |
| | | votingParams: {}, |
| | | // 编辑 |
| | | editIndividualTaskParams: {}, |
| | | editSectionTaskParams: {}, |
| | | }; |
| | | }, |
| | | watch: { |
| | |
| | | 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, |