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.
121 lines
2.1 KiB
121 lines
2.1 KiB
11 months ago
|
<template>
|
||
|
<div class="electric-panel" :class="bgClass">
|
||
|
<div class="panel" :style="{transform: `rotate(${rotate}deg)`}">
|
||
|
<div class="remainder" :style="{width: quantity +'%'}" />
|
||
|
</div>
|
||
|
<div v-show="showText" :style="{marginLeft: (parseFloat(rotate)? 0 : '10') + 'px'}"
|
||
|
class="text">{{ quantity }}%</div>
|
||
|
</div>
|
||
|
|
||
|
</template>
|
||
|
|
||
|
<script>
|
||
|
/**
|
||
|
* 电池电量Icon
|
||
|
*/
|
||
|
export default {
|
||
|
name: 'ElectricQuantity',
|
||
|
props: {
|
||
|
quantity: {
|
||
|
type: Number,
|
||
|
default: 0
|
||
|
},
|
||
|
showText: {
|
||
|
type: Boolean,
|
||
|
default: true
|
||
|
},
|
||
|
rotate: {
|
||
|
type: String,
|
||
|
default: '0'
|
||
|
}
|
||
|
},
|
||
|
computed: {
|
||
|
bgClass() {
|
||
|
if (this.quantity >= 30) {
|
||
|
return 'success'
|
||
|
} else if (this.quantity >= 15) {
|
||
|
return 'warning'
|
||
|
} else if (this.quantity >= 1) {
|
||
|
return 'danger'
|
||
|
} else {
|
||
|
return 'danger'
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</script>
|
||
|
|
||
|
<style lang="scss" scoped>
|
||
|
$color-success: chartreuse;
|
||
|
$color-warning: orange;
|
||
|
$color-danger: red;
|
||
|
@mixin panel($color) {
|
||
|
.panel {
|
||
|
border-color: #{$color};
|
||
|
&:before {
|
||
|
background: #{$color};
|
||
|
}
|
||
|
.remainder {
|
||
|
background: #{$color};
|
||
|
}
|
||
|
}
|
||
|
.text {
|
||
|
color: #{$color};
|
||
|
}
|
||
|
}
|
||
|
.electric-panel {
|
||
|
display: flex;
|
||
|
justify-content: center;
|
||
|
align-items: center;
|
||
|
|
||
|
.panel {
|
||
|
box-sizing: border-box;
|
||
|
width: 30px;
|
||
|
height: 14px;
|
||
|
position: relative;
|
||
|
border: 2px solid #ccc;
|
||
|
padding: 1px;
|
||
|
border-radius: 3px;
|
||
|
|
||
|
&::before {
|
||
|
content: '';
|
||
|
border-radius: 0 1px 1px 0;
|
||
|
height: 6px;
|
||
|
background: #ccc;
|
||
|
width: 4px;
|
||
|
position: absolute;
|
||
|
top: 50%;
|
||
|
right: -4px;
|
||
|
transform: translateY(-50%);
|
||
|
}
|
||
|
|
||
|
.remainder {
|
||
|
border-radius: 1px;
|
||
|
position: relative;
|
||
|
height: 100%;
|
||
|
width: 0%;
|
||
|
left: 0;
|
||
|
top: 0;
|
||
|
background: #fff;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.text {
|
||
|
text-align: left;
|
||
|
width: 42px;
|
||
|
}
|
||
|
|
||
|
&.success {
|
||
|
@include panel($color-success);
|
||
|
}
|
||
|
|
||
|
&.warning {
|
||
|
@include panel($color-warning);
|
||
|
}
|
||
|
|
||
|
&.danger {
|
||
|
@include panel($color-danger);
|
||
|
}
|
||
|
}
|
||
|
</style>
|