Vue 自定义模态对话框弹窗

模态对话框弹窗效果:

 

父组件(应用页面)主要代码:

<template>
    <view class="app-container">
        <modal-dialog showText="确定要取消收藏吗?" :isShowDialog="isDialog" @cancel="isDialog = false" @confirm="confirmDelete"></modal-dialog>
    </view>
</template>

<script>
    import modalDialog from '@/components/modalDialog.vue';
    
    export default {
		components:{
			modalDialog
		},
		data() {
			return {
				isDialog: false,
			}
		},
        methods: {
            // 业务代码......
            this.isDialog = false;
        }
	}
</script>

子组件(自定义组件)代码:

<template>
	<view>
		<view class="global-mask" v-show="isShowDialog"></view>
		<view class="global-dialog" v-show="isShowDialog" style="top: 45%;">
			<view class="title">温馨提示</view>
			<view class="content">
				<view class="text">{{showText}}</view>
			</view>
			<view class="btn">
				<view class="left" @tap="cancel" v-if="isShowCancel">{{cancelText}}</view>
				<view class="right" @tap="confirm" v-if="isShowConfirm">{{confirmText}}</view>
			</view>
		</view>
	</view>
</template>

<script>
	export default {
		name: 'modalDialog',
		props: {
			showText: {
				type: String,
				default: '提示内容'
			},
			isShowDialog: {
				type: Boolean,
				default: false
			},
			isShowCancel: {
				type: Boolean,
				default: true
			},
			cancelText: {
				type: String,
				default: '取消'
			},
			isShowConfirm: {
				type: Boolean,
				default: true
			},
			confirmText: {
				type: String,
				default: '确定'
			}
		},
		data() {
			return {
				
			};
		},
		methods: {
			cancel() {
				this.$emit('cancel');
			},
			
			confirm() {
				this.$emit('confirm');
			}
		}
	}
</script>

<style lang="scss">
    .global-mask {
		position: fixed;
		top: 0;
		left: 0;
		z-index: 998;
		width: 100%;
		height: 100%;
		background: rgba($color: #000000, $alpha: 0.3);
	}
	.global-dialog {
		position: fixed;
		top: 500rpx;
		left: 60rpx;
        top: 45%;
		z-index: 999;
		width: 630rpx;
		background: #FFFFFF;
		border-radius: 15rpx;
		overflow: hidden;
		.title {
			font-size: 36rpx;
			font-weight: 500;
			text-align: center;
			line-height: 100rpx;
			padding-bottom: 10rpx;
		}
		.content {
			.text {
				font-size: 32rpx;
				text-align: center;
				padding-bottom: 40rpx;
			}
			.form {
				padding: 0 40rpx;
				.item {
					display: flex;
					align-items: center;
					justify-content: space-between;
					margin-bottom: 40rpx;
					input {
						width: 340rpx;
						height: 60rpx;
						border: 1px solid #eaeaea;
						border-radius: 10rpx;
						padding: 0 20rpx;
					}
				}
			}
		}
		.btn {
			border-top: 1px solid #eaeaea;
			display: flex;
			&> view {
				flex: 1;
				text-align: center;
				line-height: 100rpx;
				font-size: 32rpx;
				&.left {
					color: #666666;
				}
				&.right {
					color: #FFFFFF;
					background: #FF3F42;
				}
			}
		}
	}
</style>

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mossbaoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值