This commit is contained in:
xiongchengqiang 2020-12-08 15:09:44 +08:00
parent 6224b59252
commit a8b089968b

View File

@ -1,545 +0,0 @@
<template>
<div class='table'>
{{scoreListForParams}}
<div v-if="obj.recortModelDtos.length !== 0" class="table-list commonFont">
<div class="table-header">
<div class="title table-left weidu">维度</div>
<div class="title table-header-flex name">名称</div>
<div class="title table-header-flex kaohe">考核标准</div>
<div class="title table-header-flex jieguo" >结果值</div>
<div class="title table-header-flex quanzhong" >权重({{Math.round((obj.weight * 100)*1000)/1000}}%)</div>
<template >
<!-- v-if="tableAuth.editScore" -->
<div class="title table-header-flex pingfen" v-for="k in obj.recortModelDtos[0].detailDtos[0].scoreDtos" >
<div class="pingfen-title">上级评分 - {{k.approvalName}} ( {{( Math.round((k.weight * 100) * 1000) / 1000 )}}%)</div>
<div class="pingfen-content">
<div class="pingfen-content-ping" >评分</div>
<div class="pingfen-content-defen" >得分</div>
<div class=" pingfen-content-shuoming" >评分说明</div>
</div>
</div>
</template>
</div>
<div class="table-weidu" v-for="(item,index) in obj.recortModelDtos" :key="index">
<!-- ((tableInfo.score || tableAuth.showScore) && tableAuth.editScore?obj.recortModelDtos:obj.recortModelDtos.slice(0,obj.recortModelDtos.length-1)) -->
<div class="weidu">
<div v-for="(name,indexname) in item.name" :key="indexname">
{{name}}
</div>
</div>
<div>
<div class="table-content" v-for="i in item.detailDtos">
<div class="name">
{{i.target}}
</div>
<div class="kaohe pre">
<pre>
{{i.keyResult}}
</pre>
</div>
<div class="jieguo pre">
<pre>
{{i.checkResult}}
</pre>
</div>
<div class="quanzhong">
{{( Math.round((i.checkWeight * 100) * 1000) / 1000 )}}%
</div>
<template >
<div v-for="dto in i.scoreDtos" class="pingfen table-content-pingfen">
<div class="pingfen-content-ping">
{{dto.acquireScore}}
</div>
<div class="pingfen-content-defen">
{{dto.acquireScore}}
</div>
<div class="pingfen-content-shuoming">
{{dto.scoreComment || '--'}}
</div>
</div>
</template>
</div>
<div class="table-content" v-if="item.detailDtos.length===0">
<div class="name">
--
</div>
<div class="kaohe">
--
</div>
<div class="jieguo">
--
</div>
<div class="quanzhong">
--
</div>
<template >
<div v-for="k in scoreListForParams" class="pingfen table-content-pingfen">
<div class="pingfen-content-ping">
{{k.Level}}
</div>
<div class="pingfen-content-defen">
{{k.Score}}
</div>
<div class="pingfen-content-shuoming">
22
</div>
</div>
</template>
</div>
</div>
</div>
</div>
<div v-else class='nojixiao'>
<img src="./imgs/nojixiao.png" alt="">
<div class="commonFont">
未制定绩效目标暂无数据
</div>
</div>
<div v-if="tableInfo.result || tableInfo.score" class="table-bottom">
<div class="table-bottom-content">
<el-button size='small' @click="handleCancelResult" plain>取消</el-button>
<el-button size='small' :loading='loadingZan' @click="handleSaveDetail()" plain>暂存</el-button>
<el-button size='small' :loading='loadingTi' @click="handleGetNext" type="primary" >{{tableInfo.result?'提交结果值':'提交评分'}}</el-button>
</div>
</div>
</div>
</template>
<script>
import { apiSaveDetail, apiGet375, apiSaveapproval } from '@/api/assessment'
export default {
name: 'columnsTbale',
props: {
obj: {
type: Object,
default: () => {
return {
recortModelDtos: []
}
}
},
tableInfo: {
type: Object,
default: () => {
return {
result: false,
score: false
}
}
},
tableAuth: {
type: Object,
default: () => {
return {}
}
}
},
data () {
return {
loadingTi: false,
loadingZan: false,
input: '',
scoreList: []
// score: {
// lastScore: '',
// scoreLevel: ''
// }
}
},
computed: {
scoreListForParams () {
return this.obj.recortModelDtos[0].detailDtos[0].scoreDtos.map((i, index) => {
let result = 0
this.obj.recortModelDtos.map(j => {
j.detailDtos.map(k => {
let str = k.scoreDtos[index].calculate.replace(/{\w+}/g, (l) => {
l = l.replace(/{|}/g, '')
return k[l]
})
result += eval(str)
})
})
const arr = this.scoreList.filter(i => i.minScore <= result && i.maxScore > result)
return {
Score: result.toFixed(3),
Level: arr.length > 0 ? arr[0].name : ''
}
})
},
score () {
const result = this.obj.recortModelDtos.reduce((result, i) => {
i.detailDtos.map(j => {
j.scoreDtos.map(k => {
const str = j.calculate.replace(/{\w+}/g, (i) => {
i = i.replace(/{|}/g, '')
return k[i]
})
let a = eval(str)
result += a
})
})
return result
}, 0)
const arr = this.scoreList.filter(i => i.minScore <= result && i.maxScore > result)
return {
lastScore: result.toFixed(3),
scoreLevel: arr.length > 0 ? arr[0].name : ''
}
}
},
mounted () {
this.handleGrt375()
},
methods: {
handleScore (item) {
return this.scoreList.filter(i => i.score === item).length > 0 ? this.scoreList.filter(i => i.score === item)[0].name : 0
},
async handleGetNext () {
this.loadingTi = true
let res1 = await apiSaveDetail(Object.assign({}, this.obj, this.score))
if (res1.code !== 200) {
this.$message.error(res1.msg)
this.loadingTi = false
return
}
const obj = {status: 1, menuName: this.tableInfo.result ? '提交了结果值' : '提交了评分'}
const params = Object.assign({}, {resultRecordId: this.$route.query.id || ''}, obj)
let res = await apiSaveapproval(params)
this.loadingTi = false
if (res.code !== 200) {
this.$message.error(res.msg)
return
}
this.$message({
message: res.msg,
type: 'success'
})
history.go(0)
},
handleCancelResult () {
this.$emit('update:tableInfo', Object.assign({}, this.tableInfo, {result: false, score: false}))
},
async handleGrt375 () {
let res = await apiGet375()
if (res.code !== 200) return
this.scoreList = res.data
},
async handleSaveDetail (params = Object.assign({}, this.obj, this.score)) {
this.loadingZan = true
let res = await apiSaveDetail(params)
this.loadingZan = false
if (res.code !== 200) {
this.$message.error(res.msg)
return
}
this.$message({
message: res.msg,
type: 'success'
})
}
}
}
</script>
<style lang='less' scoped>
.title{
background: #f5f5f5;
border-bottom: 1px solid @borderColor;
}
.jieguo{
padding:10px !important;
width: 300px ;
.center();
}
.name{
padding:10px !important;
width: 300px ;
.center();
}
.kaohe{
width: 300px ;
padding:10px !important;
display: block;
.center();
pre{
white-space:pre-line;
word-wrap: break-word;
word-break: break-all;
}
}
.weidu{
flex: none ;
width: 60px ;
.center();
flex-direction: column;
padding:10px !important;
border-left: 1px solid @borderColor;
border-right: 1px solid @borderColor;
border-bottom: 1px solid @borderColor;
>div{
text-align: center;
}
// .center();
}
.quanzhong{
width: 130px ;
.center();
}
.pingfen{
width: 500px;
display: flex;
padding: 0 !important;
border-right: 1px solid @borderColor !important;
flex-direction: column;
&-title{
padding:10px 0 !important;
text-align: center;
border-bottom: 1px solid @borderColor;
}
&-content{
flex: 1;
align-items: center;
display: flex;
align-items: center;
justify-content: space-between;
>div{
border-right: 1px solid @borderColor;
padding:10px 0 !important;
.center();
}
&-ping{
width: 180px;
height: 100%;
}
&-defen{
width: 60px;
height: 100%;
}
&-shuoming{
border-right: none !important;
flex: 1;
}
}
}
.defen{
width: 50px;
}
.shuoming{
width: 200px;
}
.nojixiao{
text-align: center;
}
.listNone{
height: 100px;
text-align: center;
line-height: 100px;
border-bottom: 1px solid @borderColor;
}
.table-list{
padding: 0 0 10px 0;
// border: 1px solid @borderColor;
// border-bottom: none;
overflow: auto;
}
.table-weidu{
display: flex;
}
.table-header{
display: flex;
flex-shrink: 0;
// justify-content: space-between;
// border: 1px solid @borderColor;
>div{
padding: 10px;
border-right: 1px solid @borderColor;
border-top: 1px solid @borderColor;
}
>div:last-child{
border-right: none;
}
&-flex{
flex-shrink: 0;
// flex: 1;
// .center();
}
}
// .table-content{
// display: flex;
// justify-content: space-between;
// >div{
// padding: 10px;
// border-right: 1px solid @borderColor;
// }
// >div:last-child{
// border-right: none;
// padding: 0px;
// }
// &-left{
// border-bottom: 1px solid @borderColor;
// display: flex;
// flex-direction: column;
// align-items: center;
// justify-content: center;
// >div{
// .center();
// }
// }
// &-right{
// flex:1;
// display: flex;
// flex-direction: column;
// // justify-content: space-between;
// // align-items: center;
// >div{
// flex: 1;
// border-bottom: 1px solid @borderColor;;
// }
// >div:last-child{
// // border-bottom: none;
// }
// &-item:hover{
// background: #f5f5f5;
// }
// &-item{
// >div{
// border-right: 1px solid @borderColor;
// padding: 10px;
// }
// >div:last-child{
// border-right: none;
// }
// // flex: 1;
// display: flex;
// >div{
// flex: 1;
// // .center();
// }
// }
// }
// }
.table-left{
width: 60px;
text-align: center;
}
.quanzhomng{
width: 100px !important;
text-align: center;
}
.table-content:hover{
background: rgb(247, 247, 247);
}
.table-content{
display: flex;
height: 100%;
>div{
flex-shrink: 0;
border-right: 1px solid @borderColor;
border-bottom: 1px solid @borderColor;
padding: 10px 0;
}
&-pingfen{
display: flex;
flex-direction: row;
align-items: center;
>div{
text-align: center;
border-right: 1px solid @borderColor;
.center();
}
}
}
.table{
position: relative;
&-bottoms{
width: 100%;
height: 60px;
z-index: 1000000;
bottom: 0;
left: 0;
background:transparent;
position: fixed;
display: flex;
// align-items: center;
justify-content: center;
&-contenct{
height: 40px;
display: flex;
background: #fff;
justify-content: space-between;
border-radius: 40px;
box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.12), 0 1px 6px 0 rgba(0, 0, 0, 0.12);
&-left{
line-height: 40px;
font-size: 14px;
padding: 0 16px;
i{
margin:0 6px;
font-weight: 800;
}
cursor: pointer;
color: @fontBlue;
}
&-center{
.center();
font-size: 14px;
padding: 0 10px;
}
&-right{
line-height: 40px;
font-size: 14px;
padding: 0 16px;
i{
margin:0 6px;
font-weight: 800;
}
cursor: pointer;
color: @fontBlue;
}
}
}
}
.table-bottom {
height: 60px;
position: fixed;
padding: 0 80px;
width: 100%;
background: #fff;
border-top: 1px solid @borderColor;
bottom: 0;
left: 0;
&-content{
width: 1360px;
margin: 0 auto;
height: 100%;
display: flex;
align-items: center;
justify-content: flex-end;
}
}
table{
margin-top: 15px;
width: 100%;
border:1px solid #e9eaec;
border-collapse:collapse
}
th{
background-color: #f8f8f9;
}
th,td{
padding: 5px;
border: 1px solid #e9eaec;
text-align: center;
vertical-align: top;
line-height: 30px;
}
td{
}
</style>