dialog-base.vue 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <template>
  2. <view v-if="visible" class="dialog-container uni-column">
  3. <view class="bg"></view>
  4. <view class="dialog-body">
  5. <view class="close-btn uni-column" @click="close">
  6. <image class="close-btn-icon" src="../../static/images/login-dialog-close-icon.png" mode="widthFix" />
  7. </view>
  8. <view class="dialog-title">
  9. <text class="label">{{props.title}}</text>
  10. </view>
  11. <slot></slot>
  12. <slot name='footer'></slot>
  13. </view>
  14. </view>
  15. </template>
  16. <script setup>
  17. import { ref } from 'vue'
  18. const visible = ref(false)
  19. const props = defineProps({
  20. title: {
  21. type: String,
  22. default: '对话框'
  23. }
  24. })
  25. const open = () => {
  26. visible.value = true
  27. }
  28. const close = () => {
  29. visible.value = false
  30. }
  31. /** 暴露给父组件的方法 */
  32. defineExpose({
  33. open,
  34. close
  35. })
  36. </script>
  37. <style lang="scss">
  38. .dialog-container {
  39. position: fixed;
  40. top: 0;
  41. right: 0;
  42. bottom: 0;
  43. left: 0;
  44. z-index: 1000;
  45. .bg {
  46. position: absolute;
  47. top: 0;
  48. right: 0;
  49. bottom: 0;
  50. left: 0;
  51. background-color: #333333;
  52. opacity: 0.3;
  53. z-index: 1001;
  54. }
  55. .dialog-body {
  56. border-radius: 18rpx;
  57. // position: absolute;
  58. // top: 400rpx;
  59. // right: 64rpx;
  60. // left: 64rpx;
  61. width: 70%;
  62. margin: auto auto;
  63. padding: 0 48rpx 48rpx 48rpx;
  64. background-color: #FFFFFF;
  65. z-index: 1002;
  66. .close-btn {
  67. position: absolute;
  68. right: 24rpx;
  69. top: 24rpx;
  70. width: 40rpx;
  71. height: 40rpx;
  72. z-index: 1003;
  73. .close-btn-icon {
  74. width: 40rpx;
  75. }
  76. }
  77. .dialog-title {
  78. align-items: center;
  79. margin-top: 40rpx;
  80. .label {
  81. font-weight: bold;
  82. font-size: 40rpx;
  83. }
  84. }
  85. }
  86. }
  87. </style>