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.

214 lines
6.8 KiB

3 years ago
<template>
<div>
<el-drawer
3 years ago
size="800px"
3 years ago
title="执行统计"
:visible.sync="drawer"
direction="rtl">
3 years ago
<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;
}">全选</el-checkbox>
<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>
</el-checkbox-group>
</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"></el-progress>
</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;
}">全选</el-checkbox>
<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>
</el-checkbox-group>
</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"></el-progress>
</div>
</div>
</Card>
</template>
3 years ago
</div>
</el-drawer>
</div>
</template>
<script>
3 years ago
import { typeCarry } from "@/api/dashboard/notice"
3 years ago
export default {
3 years ago
props: {
departments: Array,
year: [Number,String]
},
3 years ago
data() {
return {
type: 1,//1科室2类型
3 years ago
drawer: false,
isIndeterminate: false,
checkAll: false,
departmentSelect: [],
isIndeterminate2: false,
checkAll2: false,
types: [],
typeSelect: [],
3 years ago
}
},
methods: {
show () {
this.drawer = true
},
hide () {
this.drawer = false
},
setType (type) {
this.type = type
}
},
3 years ago
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
}
}
3 years ago
}
</script>
<style scoped lang="scss">
3 years ago
.content {
padding: 0 20px;
.item {
display: flex;
padding: 10px 0;
&__title {
width: 200px;
font-weight: 600;
padding-right: 20px;
}
&__value {
flex: 1;
}
& + & {
margin-top: 20px;
}
}
}
::v-deep .el-checkbox {
display: block;
margin-bottom: 6px;
}
::v-deep .el-checkbox-group {
max-height: 300px;
overflow-y: scroll;
margin-left: 20px;
}
3 years ago
</style>