<!-- * @Author: colpu ycg520520@qq.com * @Date: 2024-07-29 19:04:06 * @LastEditors: colpu ycg520520@qq.com * @LastEditTime: 2024-07-30 12:40:44 * @FilePath: /xj_project_app_2024_2_18/components/cu-dialog.vue * @Description: --> <template> <uni-popup ref="popupDialog" type="dialog" @change="onChange" @maskClick="onClose" > <view class="colpu__popup-body" @tap.stop=""> <view class="colpu__popup-title" v-if="title" >{{ title }} <view class="colpu__popup-desc" v-if="desc">{{ desc }}</view> </view> <uni-icons type="closeempty" @click="popupDialog.close" class="colpu__popup-close" size="20" /> <slot></slot> </view> </uni-popup> </template> <script lang="ts" setup> import { ref } from "vue"; const popupDialog = ref(); const props = defineProps({ title: { type: String, default: "", }, desc: { type: String, default: "", }, }); const $emit = defineEmits({ close: null, confirm: null, }); const onChange = (evt: any) => { const { show, type } = evt; console.log("=======>", show, type); if (show) { $emit("open", evt); } else { $emit("close", evt); } }; const onClose = () => { $emit("close"); }; defineExpose({ open: () => { console.log("------open"); popupDialog.value.open(); }, close: () => { popupDialog.value.close(); }, }); </script> <style lang="scss" scoped> .colpu__popup-body { min-width: 640rpx; width: 90%; margin: 0 auto; box-sizing: border-box; position: relative; padding: 30rpx 20rpx; border-radius: 12rpx; background-color: #fff; } .colpu__popup-close { position: absolute; width: 40rpx; height: 40rpx; top: 24rpx; right: 20rpx; } .colpu__popup-title { margin: 0 20rpx; font-size: 36rpx; line-height: 40rpx; margin-bottom: 20rpx; text-align: center; } .colpu__popup-desc { margin: 0 20rpx; font-size: 28rpx; line-height: 40rpx; text-align: center; color: #999; } </style>