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

385 lines
11 KiB

<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="time" v-if="vote.khitemTypeid!==1 && vote.maxNum"> {{ vote.maxNum }}</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" v-hasPermi="['system:dept:query','kaohe:employee:query']"></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"></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" v-hasPermi="['system:dept:query','kaohe:employee:query']"></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 class="my_dialog">
<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 :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
<span>工号</span><span>{{ detail.wordId }}</span>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
<span>职工姓名</span><span>{{ detail.empName }}</span>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="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){
let VoteList = this.voteList;
for (let i = 0; i < VoteList.length; i++) {
if(VoteList[i].score===null||VoteList[i].score===undefined){
flag = false;
this.$alert(`${ VoteList[i].bkhdxName }】未评分,请去评分!`, `提示`, {
type: 'Danger'
})
break;
}else if(VoteList[i].score > this.vote.maxNum){
flag = false;
this.$alert(`${ VoteList[i].bkhdxName }】评分值不能超过评分最大值${this.vote.maxNum},请重新去评分!`, `提示`, {
type: 'Danger'
})
break;
}else {
voteEmpList.push({
id: VoteList[i].id,
bkhdxName: VoteList[i].bkhdxName,
score: VoteList[i].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(this.vote.umax && pyA>this.vote.umax){
flag = false;
this.$alert(`评优数量不能超过评优最大值!`, `提示`, {
type: 'Danger'
})
}
if(flag){
if(new Date(this.vote.eTime) > (new Date())){
this.$confirm('是否确认提交评分?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
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)
});
}).catch(() => {
this.$message({
type: 'info',
message: '已取消提交操作'
});
});
}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;
}
}
@media (max-width: 757px){
::v-deep.my_dialog .el-dialog{
width: 95% !important;
}
}
</style>