XModal.vue 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. <script setup lang="ts">
  2. import { propTypes } from '@/utils/propTypes'
  3. const slots = useSlots()
  4. const props = defineProps({
  5. id: propTypes.string.def('model_1'),
  6. modelValue: propTypes.bool.def(false),
  7. fullscreen: propTypes.bool.def(false),
  8. loading: propTypes.bool.def(false),
  9. title: propTypes.string.def('弹窗'),
  10. width: propTypes.string.def('40%'),
  11. height: propTypes.string,
  12. minWidth: propTypes.string.def('460'),
  13. minHeight: propTypes.string.def('320'),
  14. showFooter: propTypes.bool.def(true),
  15. maskClosable: propTypes.bool.def(false),
  16. escClosable: propTypes.bool.def(false)
  17. })
  18. const getBindValue = computed(() => {
  19. const attrs = useAttrs()
  20. const obj = { ...attrs, ...props }
  21. return obj
  22. })
  23. </script>
  24. <template>
  25. <vxe-modal v-bind="getBindValue" destroy-on-close show-zoom resize transfer>
  26. <template v-if="slots.header" #header>
  27. <slot name="header"></slot>
  28. </template>
  29. <ElScrollbar>
  30. <template v-if="slots.default" #default>
  31. <slot name="default"></slot>
  32. </template>
  33. </ElScrollbar>
  34. <template v-if="slots.corner" #corner>
  35. <slot name="corner"></slot>
  36. </template>
  37. <template v-if="slots.footer" #footer>
  38. <slot name="footer"></slot>
  39. </template>
  40. </vxe-modal>
  41. </template>