mx-popup-template.vue 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. <template>
  2. <uv-popup ref="popup" v-bind="props" :safe-area-inset-bottom="mode=='bottom'"
  3. @change="$emit('change',$event)" @mask-click="$emit('maskClick', $event)">
  4. <view :class="containerClass">
  5. <view class="mb-40 text-main text-xl text-center">{{ title }}</view>
  6. <view v-if="description" class="mb-30 text-content">{{ description }}</view>
  7. <scroll-view scroll-y style="max-height: 50vh">
  8. <slot>
  9. <uv-parse v-if="content" :content="content" container-style="color:var(--main-color)"/>
  10. </slot>
  11. </scroll-view>
  12. <mx-bottom-buttons :left="left" :right="right" :loading="loading" @left="$emit('left')"
  13. @right="$emit('right')" class="mt-40"/>
  14. </view>
  15. </uv-popup>
  16. </template>
  17. <script setup>
  18. import {ref} from 'vue'
  19. import {popupProps} from "@/uni_modules/uv-popup/components/uv-popup/uv-popup.vue";
  20. import {createPropDefine} from "@/utils";
  21. const props = defineProps({
  22. ...popupProps,
  23. mode: createPropDefine('center'),
  24. round: createPropDefine(16, [Number, String]),
  25. title: createPropDefine(''),
  26. description: createPropDefine(''),
  27. content: createPropDefine(''),
  28. // left/right 没有默认值,不会显示底部按钮
  29. left: createPropDefine('取消'),
  30. right: createPropDefine('保存'),
  31. loading: createPropDefine(false, Boolean),
  32. containerClass: createPropDefine('w-[80vw] px-30 py-40')
  33. })
  34. const emits = defineEmits(['change', 'maskClick', 'left', 'right'])
  35. const popup = ref(null)
  36. defineExpose({open: () => popup.value.open(), close: () => popup.value.close()})
  37. </script>
  38. <style scoped>
  39. </style>