<template>
|
|
<view class="progress__view">
|
|
<view class="mark" :style="{ marginLeft: `${percentage}%` }">{{ current }}</view>
|
|
<view class="progress">
|
|
<view class="progress-active" :style="{ width: `${percentage}%` }">
|
|
<view class="progress-active-dot"></view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
props: {
|
|
current: {
|
|
type: Number,
|
|
default: 0,
|
|
},
|
|
total: {
|
|
type: Number,
|
|
default: 100,
|
|
}
|
|
},
|
|
computed: {
|
|
percentage() {
|
|
return Math.floor(this.current / this.total * 100)
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
$progress-height: 14rpx;
|
|
|
|
.progress__view {
|
|
width: 100%;
|
|
font-size: 0;
|
|
}
|
|
|
|
.mark {
|
|
background-color: $uni-color-light;
|
|
color: $uni-text-color-inverse;
|
|
font-size: 18rpx;
|
|
padding: 0 10rpx;
|
|
display: inline-block;
|
|
border-radius: 5rpx;
|
|
|
|
transform: translateX(calc(-50% - #{$progress-height} / 2 ));
|
|
position: relative;
|
|
margin-bottom: 8rpx;
|
|
|
|
&:after {
|
|
content: ' ';
|
|
position: absolute;
|
|
top: 100%;
|
|
left: 50%;
|
|
transform: translateX(-50%);
|
|
width: 0;
|
|
height: 0;
|
|
border: 4rpx solid transparent;
|
|
border-top-color: $uni-color-light;
|
|
}
|
|
}
|
|
|
|
.progress {
|
|
width: 100%;
|
|
height: $progress-height;
|
|
border-radius: 7rpx;
|
|
|
|
background-color: #CEE2AA;
|
|
|
|
&-active {
|
|
background-color: $uni-color-light;
|
|
height: 100%;
|
|
border-radius: 7rpx;
|
|
|
|
position: relative;
|
|
|
|
&-dot {
|
|
position: absolute;
|
|
top: 0;
|
|
right: 0;
|
|
width: $progress-height;
|
|
height: $progress-height;
|
|
background-color: $uni-fg-color;
|
|
border-radius: 50%;
|
|
}
|
|
}
|
|
}
|
|
</style>
|