middleground_H5/components/basePopup/index.vue

174 lines
4.1 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!--
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>