@ -2,23 +2,117 @@
< div >
< el -drawer
size = " 105 0px"
size = " 80 0px"
title = "执行统计"
: visible . sync = "drawer"
direction = "rtl" >
< div style = "padding: 0 10px;" >
{ { type } }
< div style = "padding: 0 20px;" >
< template v-if ="type === 1" >
< Card >
< el -checkbox :indeterminate ="isIndeterminate"
v - model = "checkAll"
@ change = " e => {
departmentSelect = e ? departments . map ( i => ( i . plan _department _id ) ) : [ ] ;
isIndeterminate = false ;
} " > 全选 < / e l - c h e c k b o x >
< el -checkbox -group v -model = " departmentSelect "
size = "small"
@ change = " e => {
let count = e . length ;
checkAll = count === departments . length ;
isIndeterminate = count > 0 && count < departments . length ;
} " >
< el -checkbox v-for ="item in departments" :label="item.plan_department_id" :key="item.plan_department_id" > {{ item.plan_department ? item.plan_department.name : item.plan_department_id }} < / el -checkbox >
< / e l - c h e c k b o x - g r o u p >
< / Card >
< Card style = "margin-top: 20px;" >
< div class = "content" >
< div class = "item" >
< p class = "item__title" > 年初预算合计金额 ( 元 ) < / p >
< div class = "item__value" > { { totalMoneyTotal1 . toFixed ( 2 ) } } < / div >
< / div >
< div class = "item" >
< p class = "item__title" > 调整后预算合计金额 ( 元 ) < / p >
< div class = "item__value" > { { totalMoneyTotal2 . toFixed ( 2 ) } } < / div >
< / div >
< div class = "item" >
< p class = "item__title" > 已使用 ( 元 ) < / p >
< div class = "item__value" > { { totalUseMoneyTotal . toFixed ( 2 ) } } < / div >
< / div >
< div class = "item" >
< p class = "item__title" > 执行情况 < / p >
< el -progress class = "item__value" :percentage ="totalPercent" > < / e l - p r o g r e s s >
< / div >
< / div >
< / Card >
< / template >
< template v-else >
< Card >
< el -checkbox :indeterminate ="isIndeterminate2"
v - model = "checkAll2"
@ change = " e => {
typeSelect = e ? types . map ( i => ( i . id ) ) : [ ] ;
isIndeterminate = false ;
} " > 全选 < / e l - c h e c k b o x >
< el -checkbox -group v -model = " typeSelect "
size = "small"
@ change = " e => {
let count = e . length ;
checkAll2 = count === types . length ;
isIndeterminate2 = count > 0 && count < types . length ;
} " >
< el -checkbox v-for ="item in types" :label="item.id" :key="item.id" > {{ item.name }} < / el -checkbox >
< / e l - c h e c k b o x - g r o u p >
< / Card >
< Card style = "margin-top: 20px;" >
< div class = "content" >
< div class = "item" >
< p class = "item__title" > 年初预算合计金额 ( 元 ) < / p >
< div class = "item__value" > { { totalMoneyTotal1Type . toFixed ( 2 ) } } < / div >
< / div >
< div class = "item" >
< p class = "item__title" > 调整后预算合计金额 ( 元 ) < / p >
< div class = "item__value" > { { totalMoneyTotal2Type . toFixed ( 2 ) } } < / div >
< / div >
< div class = "item" >
< p class = "item__title" > 已使用 ( 元 ) < / p >
< div class = "item__value" > { { totalUseMoneyTotalType . toFixed ( 2 ) } } < / div >
< / div >
< div class = "item" >
< p class = "item__title" > 执行情况 < / p >
< el -progress class = "item__value" :percentage ="totalPercent" > < / e l - p r o g r e s s >
< / div >
< / div >
< / Card >
< / template >
< / div >
< / e l - d r a w e r >
< / div >
< / template >
< script >
import { typeCarry } from "@/api/dashboard/notice"
export default {
props : {
departments : Array ,
year : [ Number , String ]
} ,
data ( ) {
return {
type : 1 , / / 1 科 室 2 类 型
drawer : false
drawer : false ,
isIndeterminate : false ,
checkAll : false ,
departmentSelect : [ ] ,
isIndeterminate2 : false ,
checkAll2 : false ,
types : [ ] ,
typeSelect : [ ] ,
}
} ,
methods : {
@ -29,13 +123,91 @@ export default {
this . drawer = false
} ,
setType ( type ) {
console . log ( type )
this . type = type
}
} ,
computed : { }
computed : {
selectedDepartments ( ) {
return this . departments . filter ( i => this . departmentSelect . find ( j => j === i . plan _department _id ) )
} ,
totalMoneyTotal1 ( ) {
return this . selectedDepartments . reduce ( ( pre , cur ) => ( pre + Number ( cur . money _total _1 || 0 ) ) , 0 ) || 0
} ,
totalMoneyTotal2 ( ) {
return this . selectedDepartments . reduce ( ( pre , cur ) => ( pre + Number ( cur . money _total _2 || 0 ) ) , 0 ) || 0
} ,
totalUseMoneyTotal ( ) {
return this . selectedDepartments . reduce ( ( pre , cur ) => ( pre + Number ( cur . use _money _total || 0 ) ) , 0 ) || 0
} ,
totalPercent ( ) {
if ( this . type === 1 ) {
return ( Number ( this . totalMoneyTotal2 !== 0 ) ? ( Math . round ( Number ( this . totalUseMoneyTotal ) / Number ( this . totalMoneyTotal2 ) * 10000 ) / 100 ) : ( Math . round ( Number ( this . totalUseMoneyTotal ) / Number ( this . totalMoneyTotal1 ) * 10000 ) / 100 ) ) || 0
} else {
return ( Number ( this . totalMoneyTotal2Type !== 0 ) ? ( Math . round ( Number ( this . totalUseMoneyTotalType ) / Number ( this . totalMoneyTotal2Type ) * 10000 ) / 100 ) : ( Math . round ( Number ( this . totalUseMoneyTotalType ) / Number ( this . totalMoneyTotal1Type ) * 10000 ) / 100 ) ) || 0
}
} ,
selectedTypes ( ) {
return this . types . filter ( i => this . typeSelect . find ( j => j === i . id ) )
} ,
totalMoneyTotal1Type ( ) {
return this . selectedTypes . reduce ( ( pre , cur ) => ( pre + Number ( cur . money _total || 0 ) ) , 0 ) || 0
} ,
totalMoneyTotal2Type ( ) {
return this . selectedTypes . reduce ( ( pre , cur ) => ( pre + Number ( cur . update _money || 0 ) ) , 0 ) || 0
} ,
totalUseMoneyTotalType ( ) {
return this . selectedTypes . reduce ( ( pre , cur ) => ( pre + Number ( cur . use _money _total || 0 ) ) , 0 ) || 0
} ,
} ,
watch : {
year : {
handler : function ( val ) {
typeCarry ( {
year : val
} ) . then ( res => {
this . types = res
console . log ( res )
} )
} ,
immediate : true
}
}
}
< / script >
< style scoped lang = "scss" >
. content {
padding : 0 20 px ;
. item {
display : flex ;
padding : 10 px 0 ;
& _ _title {
width : 200 px ;
font - weight : 600 ;
padding - right : 20 px ;
}
& _ _value {
flex : 1 ;
}
& + & {
margin - top : 20 px ;
}
}
}
: : v - deep . el - checkbox {
display : block ;
margin - bottom : 6 px ;
}
: : v - deep . el - checkbox - group {
max - height : 300 px ;
overflow - y : scroll ;
margin - left : 20 px ;
}
< / style >