You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

167 lines
3.7 KiB

4 years ago
<template>
<view class="mask" v-if="showClone" @tap="clickMask">
<view class="modal-content">
<scroll-view scroll-y class="main-content">
<view class="title" v-if="title">{{ title }}</view>
<slot></slot>
</scroll-view>
<view v-if="showCancel" class="modal-btn-wrapper">
<button class="cancel-btn" style="color: rgba(7, 17, 27, 0.6)" @tap="cancel">{{ cancelButtonText }}</button>
<button class="confirm-btn" style="color: #13b5f5" :open-type="confirmButtonOpenType" @getphonenumber="onGetPhoneNumber" @tap="confirm">
{{ confirmButtonText }}
</button>
</view>
<view v-else class="modal-btn-wrapper">
<button class="confirm-btn" style="color: #13b5f5" @tap="confirm">{{ confirmButtonText }}</button>
</view>
</view>
</view>
</template>
<script>
/**
* 自定义modal浮层
* 使用方法
* <modal show="{{showModal}}" height='60%' bindcancel="modalCancel" bindconfirm='modalConfirm'>
<view>你自己需要展示的内容</view>
</modal>
属性说明
show 控制modal显示与隐藏
heightmodal的高度
bindcancel点击取消按钮的回调函数
bindconfirm点击确定按钮的回调函数
使用模块
场馆 -> 发布 -> 选择使用物品
*/
export default {
name:'modal',
data() {
return {};
},
/**
* 组件的属性列表
*/
props: {
//是否显示modal
show: {
type: Boolean,
default: false
},
title: {
type: String,
default: null
},
cancelButtonText: {
type: String,
default: '取消'
},
confirmButtonText: {
type: String,
default: '确定'
},
showCancel: {
type: Boolean,
default: false
},
confirmButtonOpenType: String
},
/**
* 组件的方法列表
*/
methods: {
clickMask() {
// this.setData({show: false})
},
cancel() {
this.setData({
showClone: false
});
this.$emit('cancel');
},
onGetPhoneNumber: function (event) {
this.$emit('getphonenumber', {
detail: event.detail
});
},
confirm() {
this.setData({
showClone: false
});
this.$emit('confirm');
}
},
watch: {
show: {
handler: function (newVal, oldVal) {
this.showClone = newVal;
},
immediate: true
}
}
};
</script>
<style>
.mask {
position: fixed;
left: 0;
right: 0;
top: 0;
bottom: 0;
display: flex;
justify-content: center;
align-items: center;
background-color: rgba(0, 0, 0, 0.4);
z-index: 2229999;
}
.title {
margin: 40rpx 0 20rpx 0;
text-align: center;
font-size: 16px;
font-weight: 500;
color: #3a3a3a;
}
.modal-content {
display: flex;
flex-direction: column;
width: 90%;
/* height: 80%; */
background-color: #fff;
border-radius: 10rpx;
position: fixed;
}
.modal-btn-wrapper {
display: flex;
flex-direction: row;
height: 100rpx;
line-height: 100rpx;
border-top: 2rpx solid rgba(7, 17, 27, 0.1);
}
.cancel-btn,
.confirm-btn {
flex: 1;
height: 100rpx;
line-height: 100rpx;
text-align: center;
font-size: 32rpx;
background: #fff;
}
.cancel-btn {
border-right: 2rpx solid rgba(7, 17, 27, 0.1);
}
.main-content {
flex: 1;
height: 100%;
overflow-y: hidden;
}
</style>