middleground_H5/components/basePopup/index.vue

174 lines
4.1 KiB
Vue
Raw Permalink Normal View History

2024-09-20 15:55:17 +08:00
<!--
desc: 弹窗组件
date: 20230719
参数说明
isShowPopup是否打开弹窗布尔类型
isOverlay: 是否显示遮罩
mode: 弹出方向 String类型 默认bottom 可选值 top / right / bottom / center
duration: 遮罩打开或收起的动画过渡时间单位ms
closeable: 是否显示关闭图标
overlayOpacity:遮罩透明度0-1之间勿与overlayStyle共用
closeOnClickOverlay: 点击遮罩是否关闭
safeAreaInsetTop:是否留出顶部安全距离状态栏高度默认false
closeIconPos自定义关闭图标位置top-left为左上角top-right为右上角bottom-left为左下角bottom-right为右下角
round: 设置圆角值仅对mode = top | bottom | center有效
bgColor:背景色一般用于特殊弹窗内容场景设置为transparent可去除默认的白色背景
zoom:当mode=center时 是否开启缩放
-->
<template>
<view>
<u-popup
:show="isShowPopup"
:overlay="isOverlay"
:mode="mode"
:duration="duration"
:closeable="closeable"
:overlayOpacity="overlayOpacity"
:closeOnClickOverlay="closeOnClickOverlay"
:overlayStyle="{ 'touch-action': 'none' }"
:safeAreaInsetTop="safeAreaInsetTop"
:closeIconPos="closeIconPos"
:round="round"
bgColor="bgColor"
:zoom="zoom"
@close="handleCloseClick"
@open="handlerPopupOpen"
>
<view class="buttom" v-if="buttomBtn">
<text @click="handleCloseClick" v-if="showCancle">取消</text>
<text class="title" v-if="showtitle">{{ title }}</text>
<text @click="handleConfirmClick" v-if="showSubmitBtn">确定</text>
<slot name="btn" style="width:100%;"></slot>
</view>
<view class="scrool" :style="{ height: popuoHeight }">
<slot></slot>
</view>
</u-popup>
</view>
</template>
<script>
export default {
props: {
isOverlay: {
type: Boolean,
default: true,
},
mode: {
type: String,
default: "bottom",
},
popuoHeight: {
type: String,
default: "800rpx",
},
duration: {
type: [Number, String],
default: 300,
},
closeable: {
type: Boolean,
default: false,
},
overlayOpacity: {
type: [Number, String],
default: 0.5,
},
closeOnClickOverlay: {
type: Boolean,
default: true,
},
showSubmitBtn: {
type: Boolean,
default: true,
},
showCancle: {
type: Boolean,
default: true,
},
showtitle: {
type: Boolean,
default: true,
},
buttomBtn: {
type: Boolean,
default: true,
},
safeAreaInsetTop: {
type: Boolean,
default: false,
},
closeIconPos: {
type: String,
default: "top-right",
},
title: {
type: String,
default: "",
},
round: {
type: [Number, String],
default: 0,
},
bgColor: {
type: String,
default: "",
},
zoom: {
type: Boolean,
default: true,
},
},
data() {
return {
isShowPopup: false,
};
},
methods: {
// 弹窗关闭时触发的方法
handlerPopupClose() {
this.isShowPopup = false;
},
// 弹窗打卡触发的方法
handlerPopupOpen() {
// this.isShowPopup = true
},
handleConfirmClick() {
this.$emit("handleConfirmClick");
},
handleCloseClick() {
this.isShowPopup = false;
this.$emit("handleCloseClick");
},
},
};
</script>
<style scoped lang="scss">
.buttom {
display: flex;
justify-content: space-between;
border-bottom: 1px solid #f2f3f4;
width: 100%;
view{
width: 100%;
}
text {
padding: 20rpx 40rpx;
font-size: 28rpx;
}
text:last-child {
color: #3c9cff;
}
}
.scrool {
overflow-y: scroll; // 超出滚动
overscroll-behavior: none; // 禁止滚动溢出
}
.title {
font-weight: bold;
}
</style>