Files
income_payments_client/src/components/ProgressBar.vue
T

99 lines
2.3 KiB
Vue

<!--进度组件-->
<template>
<div>
<!-- 三项非全0-->
<div class="progress" v-if="(data.allPayment + data.partPayment + data.notPayment) !== 0">
<!-- 将全部付款和部分付款放入一个div中-->
<div class="full-and-partial"
:style="{width: (data.allPayment + data.partPayment)/(data.allPayment + data.partPayment + data.notPayment) * 100 + '%'}">
<!-- 全部付款-->
<div :style="{width: data.allPayment/(data.allPayment + data.partPayment) * 100 + '%'}"
class="progress-item pay-in-full" v-if="data.allPayment !== 0">
{{ data.allPayment }}
</div>
<!-- 部分付款-->
<div :style="{width: data.partPayment/(data.allPayment + data.partPayment) * 100 + '%'}"
class="progress-item partial-payment" v-if="data.partPayment !== 0">
{{ data.partPayment }}
</div>
</div>
<div :style="{width: data.notPayment/(data.allPayment + data.partPayment + data.notPayment) * 100 + '%'}"
class="progress-item non-payment" v-if="data.notPayment !== 0">
{{ data.notPayment }}
</div>
</div>
<!-- 三项均为0-->
<div class="progress progress-null" v-else>0</div>
</div>
</template>
<script>
export default {
name: 'ProgressBar',
props: {
/**
* 进度字段,
* {
* allPayment: 10, // 已付全款
* partPayment: 10, // 部分付款
* notPayment: 10, // 未付款
* }
*/
data: {
type: Object,
required: false,
default: () => {
return {}
}
}
}
}
</script>
<style scoped lang="less">
.progress {
border-radius: 10px;
background: #e8e8e8;
height: 20px;
width: 100%;
display: flex;
overflow: hidden;
&-null {
justify-content: center;
}
}
.no-display {
display: none;
}
.full-and-partial {
background: linear-gradient(0deg, #0075a9 0%, #008dcc 100%);
display: flex;
border-radius: 10px;
box-sizing: border-box;
}
.progress-item {
height: 20px;
border-radius: 10px;
color: white;
line-height: 20px;
text-align: center;
box-sizing: border-box;
}
.pay-in-full {
background: linear-gradient(0deg, #069f99 0%, #07b1aa 100%);
}
.partial-payment {
background: linear-gradient(0deg, #0075a9 0%, #008dcc 100%);
}
.non-payment {
color: #57635e;
background: #e8e8e8;
}
</style>