diff --git a/src/progress/index.js b/src/progress/index.js index f12ca19a9..2c5799310 100644 --- a/src/progress/index.js +++ b/src/progress/index.js @@ -1,3 +1,4 @@ +import { ref, watch, computed, nextTick, reactive, onMounted } from 'vue'; import { createNamespace, isDef, addUnit } from '../utils'; const [createComponent, bem] = createNamespace('progress'); @@ -22,63 +23,70 @@ export default createComponent({ }, }, - data() { - return { + setup(props) { + const rootRef = ref(null); + const pivotRef = ref(null); + + const state = reactive({ pivotWidth: 0, - progressWidth: 0, - }; - }, + rootWidth: 0, + }); - mounted() { - this.setWidth(); - }, - - watch: { - showPivot: 'setWidth', - pivotText: 'setWidth', - }, - - methods: { - setWidth() { - this.$nextTick(() => { - this.progressWidth = this.$el.offsetWidth; - this.pivotWidth = this.$refs.pivot ? this.$refs.pivot.offsetWidth : 0; - }); - }, - }, - - render() { - const { pivotText, percentage } = this; - const text = isDef(pivotText) ? pivotText : percentage + '%'; - const showPivot = this.showPivot && text; - const background = this.inactive ? '#cacaca' : this.color; - - const pivotStyle = { - color: this.textColor, - left: `${((this.progressWidth - this.pivotWidth) * percentage) / 100}px`, - background: this.pivotColor || background, - }; - - const portionStyle = { - background, - width: (this.progressWidth * percentage) / 100 + 'px', - }; - - const wrapperStyle = { - background: this.trackColor, - height: addUnit(this.strokeWidth), - }; - - return ( -