You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kaohe/ruoyi-ui/src/views/votepage.vue

352 lines
9.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="app-container">
<div class="title">{{ vote.pingceName }}</div>
<div class="title" style="font-size: 22px">{{ vote.voteTitle }}</div>
<div class="time">时间{{ vote.sTime }} - {{ vote.eTime }}</div>
<div class="time" v-if="vote.khitemTypeid===1 && vote.umax">评优最大值为 {{ vote.umax }}</div>
<div class="des">{{ vote.vDescription }}</div>
<el-row :gutter="10" class="tou_piao" v-if="vote.khitemTypeid===2||vote.khitemTypeid===3">
<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-for="item in voteList">
<div class="tou_piao_item">
<div>
{{ item.bkhdxName }}
<el-link type="primary" @click="goPage(item)" icon="el-icon-view"></el-link>
</div>
<div class="_desc">参与评分 {{ item.voteNum!==null?item.voteNum: ''}} 人 </div>
<div class="_desc">均值:{{ item.avgScore!==null?item.avgScore: '' }} </div>
<div>
<el-input-number v-model="item.score" :max="vote.maxNum"></el-input-number>
</div>
</div>
</el-col>
</el-row>
<el-row :gutter="10" class="tou_piao" v-if="vote.khitemTypeid===1">
<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" v-for="item in voteList">
<div class="tou_piao_item">
<div>
{{ item.bkhdxName }}
<el-link type="primary" @click="goPage(item)" icon="el-icon-view"></el-link>
</div>
<div class="_desc">参与评分 {{ item.voteNum!==null?item.voteNum: ''}} 人 </div>
<div class="_desc">均值:{{ item.avgScore!==null?item.avgScore: '' }} </div>
<div>
<el-radio-group v-model="item.option" size="mini">
<el-radio label="optionA">优秀</el-radio>
<el-radio label="optionB">合格</el-radio>
<el-radio label="optionC">基本合格</el-radio>
<el-radio label="optionD">不合格</el-radio>
</el-radio-group>
</div>
</div>
</el-col>
</el-row>
<div style="text-align: center; margin-top: 40px;">
<el-button type="primary" icon="el-icon-s-promotion" @click="VoteSubmit" v-hasPermi="['kaohe:vote_emp:edit']">提交评分</el-button>
</div>
<!-- 详情对话框 -->
<el-dialog :title="uploadFJ.title" :visible.sync="uploadFJ.open" width="800px" append-to-body>
<el-row :gutter="20" v-if="vote.bkhdxType==='0'">
<el-col :span="24">
<span>部门名称:</span><span>{{ detail.deptName }}</span>
</el-col>
</el-row>
<el-row :gutter="20" v-if="vote.bkhdxType==='1'">
<el-col :span="8">
<span>工号:</span><span>{{ detail.wordId }}</span>
</el-col>
<el-col :span="8">
<span>职工姓名:</span><span>{{ detail.empName }}</span>
</el-col>
<el-col :span="8">
<span>部门名称:</span><span>{{ detail.deptName }}</span>
</el-col>
</el-row>
<el-row class="mt20" :gutter="20" v-for="item in uploadFJ.docDiscripList">
<el-col :span="24">
<span>附件主题:</span><span>{{ item.title }}</span>
</el-col>
<el-col class="mt5" :span="24">
<span>附件简介</span><span>{{ item.docDiscrip }}</span>
</el-col>
</el-row>
<el-card style="margin-bottom: 10px;">
<div slot="header">
<span>附件</span>
</div>
<div v-for="(item,index) in uploadFJ.fileList" :key="item.url" class="yy_fj_list">
<a :href="item.url" :download="item.name" target="_blank">{{ item.name }}</a>
</div>
</el-card>
<div slot="footer" class="dialog-footer">
<el-button @click="uploadFJ.open = false">取 消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { getVote } from "@/api/kaohe/vote"
import { listVote_emp, VoteEmpSubmit } from "@/api/kaohe/vote_emp"
import { getEmployee } from "@/api/kaohe/employee";
import { getDept } from "@/api/system/dept"
export default {
name: "votepage",
data() {
return {
vote: {},
loading: null,
voteList: [],
// 附件详情参数
uploadFJ: {
// 是否显示弹出层
open: false,
// 标题
title: '',
// 附件上传
fileList: [],
// 附件上传
docDiscripList: []
},
// 修改内容行
detail: {},
}
},
created() {
this.getVote();
},
methods: {
getVote(){
this.loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
getVote(this.$route.query.id).then(response => {
this.vote = response.data;
this.getList();
})
},
/** 查询投票评测列表 */
getList() {
listVote_emp({
voteId: this.$route.query.id,
pageNum: 1,
pageSize: 10000000,
}).then(response => {
this.voteList = response.rows;
this.loading.close()
})
},
VoteSubmit(){
let voteEmpList = [];
let flag = true;
let bkhdxName = '';
let pyA = 0
if(this.vote.khitemTypeid===2 || this.vote.khitemTypeid===3){
this.voteList.forEach(item => {
voteEmpList.push({
id: item.id,
bkhdxName: item.bkhdxName,
score: item.score,
})
})
}
if(this.vote.khitemTypeid===1){
this.voteList.forEach(item => {
let obj = {
id: item.id,
bkhdxName: item.bkhdxName,
optionA: 0,
optionB: 0,
optionC: 0,
optionD: 0,
}
if(item.option){
obj[item.option] = 1;
}else {
flag = false;
bkhdxName += item.bkhdxName+''
}
if(item.option&&item.option==='optionA'){
pyA += 1;
}
voteEmpList.push(obj);
});
bkhdxName=bkhdxName.slice(0, -1);
}
if(pyA>this.vote.umax){
flag = false;
this.$alert(`评优数量不能超过评优最大值!`, `提示`, {
type: 'Danger'
})
}
if(flag){
if(new Date(this.vote.eTime) > (new Date())){
VoteEmpSubmit({
khitemTypeid : this.vote.khitemTypeid,
voteId : this.vote.id,
userId : this.$store.state.user.id,
userName : this.$store.state.user.name,
uid : 1,
voteEmpList: voteEmpList
}).then(response => {
this.$modal.msgSuccess("提交成功");
this.$router.go(-1)
});
}else {
this.$alert(`已超时,无法提交评分!`, `提示`, {
type: 'Danger'
})
}
}else if(bkhdxName){
this.$alert(`【${ bkhdxName }】未评分,请去评分!`, `提示`, {
type: 'Danger'
})
}
},
// 表单重置
reset() {
this.detail = {};
this.uploadFJ = {
// 是否显示弹出层
open: false,
// 附件上传
fileList: [],
// 附件上传
docDiscripList: []
};
},
goPage(row){
this.reset()
// 0 组织架构
if(this.vote.bkhdxType==='0'){
this.zzjgDetail(row)
}
// 1 职工
if(this.vote.bkhdxType==='1'){
this.zgDetail(row)
}
},
// 组织架构详情
zzjgDetail(row){
getDept(row.bkhdxId).then(response => {
this.detail = response.data;
if(this.detail.docs){
let arr = this.detail.docs.split(';');
arr.forEach( item => {
let arr1 = item.split(',');
this.uploadFJ.fileList.push({
name: arr1[0],
url: arr1[1]
});
})
}
if(this.detail.docDiscrip){
this.uploadFJ.docDiscripList = JSON.parse(this.detail.docDiscrip);
}else {
this.uploadFJ.docDiscripList=[{
title:'',
docDiscrip:'',
}]
}
this.uploadFJ.open = true;
this.uploadFJ.title = '组织架构详情';
})
},
// 职工详情
zgDetail(row){
getEmployee(row.bkhdxId).then(response => {
this.detail = response.data;
if(this.detail.docs){
let arr = this.detail.docs.split(';');
arr.forEach( item => {
let arr1 = item.split(',');
this.uploadFJ.fileList.push({
name: arr1[0],
url: arr1[1]
});
})
}
if(this.detail.docDiscrip){
this.uploadFJ.docDiscripList = JSON.parse(this.detail.docDiscrip);
}else {
this.uploadFJ.docDiscripList=[{
title:'',
docDiscrip:'',
}]
}
this.uploadFJ.open = true;
this.uploadFJ.title = '职工详情';
})
},
}
}
</script>
<style scoped lang="scss">
.app-container{
margin: 0 auto;
padding: 30px;
.title{
font-size: 24px;
text-align: center;
margin-bottom: 20px;
}
.des{
padding: 10px;
color: #666666;
}
.time{
padding: 5px;
color: #af5e5e;
}
.tou_piao{
font-size: 14px;
.tou_piao_item{
border: 1px solid #eee;
padding: 10px;
box-sizing: border-box;
margin-bottom: 10px;
._desc{
font-size: 12px;
color: #666666;
margin: 10px 0;
}
.el-radio{
margin-top: 10px;
}
}
}
}
.el-dialog__body{
padding: 20px;
.el-card{
margin-top: 10px;
}
.yy_fj_list {
height: 36px;
line-height: 36px;
border-bottom: 1px solid #39CCCC;
}
}
</style>