uniapp项目或者vue项目 封装弹框组件
baseDialog组件代码:
<template> <view class="base-dialog" v-if="show"> <view class="mask"></view> <view class="Popmenu" :style="{ width }"> <view class="header">{ { title }}</view> <view class="content"> <slot></slot> </view> <view v-if="cancelShow || confirmShow" class="btns"> <myButton :type=cancelType style="margin-right: 24rpx" v-if="cancelShow" @click.stop="cancel">{ { cancelText }}</myButton> <myButton :type=confirmType v-if="confirmShow" @click.stop="confirm">{ { confirmText }}</myButton> </view> </view> </view> </template> <script> import myButton from ../components/myButton.vue export default { props: { title: { type: String, default: }, show: { type: Boolean, default: false }, cancelText: { type: String, default: 取消 }, confirmText: { type: String, default: 确定 }, cancelShow: { type: Boolean, default: true }, confirmShow: { type: Boolean, default: true }, cancelDisabled: Boolean, confirmDisabled: Boolean, width: { type: [String | Number], default: 100% }, cancelType: String, confirmType: String }, components: { myButton }, computed: { _show: { get() { return this.show; }, set(v) { console.log(v) this.$emit(update:show, v); } } }, methods: { confirm() { if(this.confirmDisabled) return; this.$emit(confirm); this._show = false; }, cancel() { if(this.cancelDisabled) return; this.$emit(cancel); this._show = false; } } } </script> <style lang=scss> .base-dialog { position: fixed; width: 100%; height: 100%; left: 0; top: 0; z-index: 20; transition:opacity 1s linear; .mask{ background-color:rgba(0, 0, 0, 0.9); opacity: 0.5; position: absolute; width: 100%; height: 100%; left: 0; top:0; } .Popmenu { border-radius: 24rpx; padding: 40rpx; box-sizing: border-box; background: white; position: absolute; left: 50%; top: 45%; transform: translate(-50%, -50%); .header { text-align: center; margin-bottom: 24rpx; font-size: 40rpx; } .content { margin-bottom: 40rpx; } } .btns { display: flex; align-items: center; justify-content: center; } } </style>
在data定义弹框显示与隐藏 infoShow: false, // 榜单规则
引入组件: