blob: b5ee207d01a31b443329fa9ab3b30d0198e74504 [file] [log] [blame]
<template>
<div class="control-percent">
<el-radio-group v-model="mode" size="mini">
<el-radio-button label="absolute">{{$t('example.absoluteMode')}}</el-radio-button>
<el-radio-button label="percent">{{$t('example.percentMode')}}</el-radio-button>
</el-radio-group>
<!-- <el-switch v-model="absoluteMode" :active-text="$t('example.absoluteMode')"></el-switch> -->
<el-input-number
v-if="mode === 'absolute'"
controls-position="right"
v-model="absoluteValue"
size="mini"
:min="min == null ? -1e4 : +min"
:max="max == null ? 1e4 : +max"
:step="step == null ? 1 : +step"
@change="onValueChange"
>
</el-input-number>
<div v-else>
<el-slider
v-model="percentValue"
:min="0"
:max="100"
:step="1"
:format-tooltip="formatTooltip"
@change="onValueChange"
></el-slider>
<el-input-number
controls-position="right"
v-model="percentValue"
size="mini"
:min="0"
:max="100"
:step="1"
@change="onValueChange"
>
</el-input-number>
</div>
</div>
</template>
<script>
export default {
props: ['value', 'min', 'max', 'step'],
data() {
const isAbsolute = this.value.indexOf('%') < 0;
return {
percentValue: isAbsolute ? 50 : +this.value.replace('%', ''),
absoluteValue: isAbsolute ? +this.value : 0,
mode: isAbsolute ? 'absolute' : 'percent'
}
},
watch: {
value(val) {
if (this.mode === 'absolute') {
this.absoluteValue = + val;
}
else {
this.percentValue = +val.replace('%', '');
}
},
mode() {
// Emit after mode changed.
this.onValueChange();
}
},
methods: {
onValueChange() {
this.$emit('change', this.mode === 'absolute' ? this.absoluteValue : this.percentValue + '%');
},
formatTooltip(val) {
return val + '%';
}
}
}
</script>
<style lang="scss">
.control-percent {
&>div {
display: inline-block;
}
.el-slider {
width: 200px;
display: inline-block;
vertical-align: middle;
}
.el-input-number {
display: inline-block;
width: 90px;
margin-left: 10px;
}
.el-radio-group {
margin-right: 10px;
}
.el-radio-button--mini .el-radio-button__inner {
padding: 5px 4px;
font-size: 10px;
}
}
</style>