174 lines
4.1 KiB
Vue
174 lines
4.1 KiB
Vue
<!--
|
||
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> |