mx-bottom-buttons.vue 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. <template>
  2. <view v-if="left||right" class="fx-row gap-30" :class="containerClass">
  3. <uv-button v-if="left" :text="left" :type="leftType" :icon="leftIcon" :icon-color="leftType" plain
  4. v-bind="buttonStyle" @click="$emit('left')"/>
  5. <uv-button v-if="right" :text="right" :type="rightType" :icon="rightIcon" icon-color="white"
  6. :loading="loading" v-bind="buttonStyle" @click="$emit('right')"/>
  7. </view>
  8. </template>
  9. <script setup>
  10. import {computed} from 'vue';
  11. import {createPropDefine} from "@/utils";
  12. const props = defineProps({
  13. // left 和 right 必须提供值才会显示
  14. left: createPropDefine('取消'),
  15. leftIcon: createPropDefine(undefined),
  16. right: createPropDefine('保存'),
  17. rightIcon: createPropDefine(undefined),
  18. leftType: createPropDefine('error'),
  19. rightType: createPropDefine('primary'),
  20. loading: createPropDefine(false, Boolean)
  21. })
  22. defineEmits(['left', 'right'])
  23. const single = computed(() => !props.left || !props.right)
  24. const buttonStyle = computed(() => ({
  25. customStyle: {
  26. height: '44px',
  27. },
  28. shape: 'circle',
  29. class: single.value ? '!w-1/2' : '!flex-1'
  30. }))
  31. const containerClass = computed(() => single.value ? 'fx-cen-cen' : 'fx-bet-cen')
  32. </script>
  33. <style scoped>
  34. </style>