UNPKG

taro-ui-vue3

Version:

Taro UI Rewritten in Vue 3.0

78 lines (77 loc) 2.1 kB
import {h, defineComponent, toRefs, computed, mergeProps} from "vue"; import {Text, View} from "@tarojs/components"; const AtProgress = defineComponent({ name: "AtProgress", props: { color: { type: String, default: "" }, status: { type: String, validator: (val) => ["progress", "error", "success"].includes(val) }, percent: { type: Number, default: 0 }, strokeWidth: { type: Number, default: 10 }, isHidePercent: Boolean }, setup(props, {attrs, slots}) { const {percent} = toRefs(props); if (percent.value < 0) { percent.value = 0; } else if (percent.value > 100) { percent.value = 100; } const rootClass = computed(() => ({ "at-progress": true, [`at-progress--${props.status}`]: !!props.status })); const iconClass = computed(() => ({ "at-icon": true, "at-icon-close-circle": props.status === "error", "at-icon-check-circle": props.status === "success" })); const progressStyle = computed(() => ({ width: percent.value ? `${+percent.value}%` : "0%", height: props.strokeWidth && `${+props.strokeWidth}px`, backgroundColor: props.color })); return () => h(View, mergeProps(attrs, { class: rootClass.value }), { default: () => [ h(View, { class: "at-progress__outer" }, { default: () => [ h(View, { class: "at-progress__outer-inner" }, { default: () => [ h(View, { class: "at-progress__outer-inner-background", style: progressStyle.value }) ] }) ] }), !props.isHidePercent && h(View, { class: "at-progress__content" }, { default: () => !props.status || props.status === "progress" ? `${percent.value}%` : h(Text, {class: iconClass.value}) }) ] }); } }); var progress_default = AtProgress; export { progress_default as default };