Vue自行封装常用组件-弹出框

<template>
<div>
<popUpBox ref="modal" @on-confirm="confirm">
<div slot="modal__bd">
<div class="modal_form">
<p class="txetTitle">待付款订单</p>
</div>
<p class="textFelid">您好,查看您有一笔待支付订单,可直接支付,点击下方“确认”可直接支付。</p>
</div>
</popUpBox>
</div>
</template> <script>
import popUpBox from "./box.vue"; export default {
data() {
return { };
},
components:{
//注册组件
popUpBox
},
created(){ //调用弹出层组件
this.geAlert(0) },
methods: {
geAlert(type) {
if (type === 1) this.$refs.modal.opens("alert", "南山下");
else if (type === 2)
this.$refs.modal.opens("alert", "Yan", "2407488005@qq.com");
else {
this.$refs.modal.opens("alert");
this.$refs.modal.setMaskClass("maskBack");
}
}
}
};
</script> <style lang="less" scoped>
.textFelid {
font-size: 0.6rem;
color: #000;
text-align: left;
}
.txetTitle {
font-size: 0.6rem;
color: #000;
}
.modal__bd {
padding: 0 1.6em 0.8em;
word-wrap: break-word;
word-break: break-all;
color: #999;
}
.modal__hd_text {
padding: 1.3em 1.6em 0.5em;
}
.modal__bd_text {
font-size: 0.3rem;
line-height: 1rem;
}
.modal__bd {
padding: 0 1.6em 0.8em;
word-wrap: break-word;
word-break: break-all;
color: #999;
}
</style>
box.vue
<template>
<div>
<div id="modal" v-show="showModal">
<div class="modal-mask" :class="maskBack"></div>
<div class="modal-body">
<div class="modal__hd">
<h3 class="modal__hd_text" v-if="title">{{title}}</h3>
<slot v-else name="modal__hd"></slot>
</div>
<div class="modal__bd">
<p class="modal__bd_text" v-if="msg&&type === 'alert'">{{msg}}</p>
<div v-else-if="msg&&type === 'confirm'" class="input_box">
<input type="text" :placeholder="msg" name="userid" ref="modalval" />
</div>
<slot v-else name="modal__bd"></slot>
</div>
<div v-if="type === 'confirm'" class="modal__ft flex">
<button class="btn modal__btn modal__btn_primary" @click="confirm()">支付</button>
<button class="btn modal__btn modal__btn_default" @click="closes();geAlert(0)">申请退款</button>
</div>
<div v-else-if="type === 'alert'" class="modal__ft">
<div class="btna modal__btn modal__btn_default" @click="queren()">确认</div>
<div class="btna border_right modal__btn modal__btn_default" @click="quxiao()">取消</div>
</div>
</div>
</div>
</div>
</template> <script>
export default {
data() {
return {};
},
methods: {
closes() {
this.showModal = false;
this.type = "alert";
this.title = "add";
this.msg = "";
this.maskBack = "";
},
opens(type, title, msg) {
this.showModal = true;
this.type = type;
this.title = title;
this.msg = msg;
this.$emit("oper");
},
confirm() {
this.$emit("on-confirm");
this.closes();
},
getVal() {
if (this.$refs.modalval) {
return this.$refs.modalval.value;
}
},
setMaskClass(back) {
this.maskBack = back || "maskBackNo";
}
}
};
</script> <style lang="less" scoped>
.modal-mask {
position: fixed;
z-index: 1000;
top: 0;
right: 0;
left: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.6);
}
.maskBackNo {
background: inherit;
}
.modal-body {
position: fixed;
z-index: 1000;
width: 12rem;
top: 10rem;
height: 7.3rem;
left: 50%;
transform: translate(-50%, -50%);
background-color: #fff;
text-align: center;
border-radius: 0.5rem;
overflow: hidden;
}
.modal__bd {
padding: 0 1.6em 0.8em;
word-wrap: break-word;
word-break: break-all;
color: #999;
}
.modal__hd_text {
padding: 1.3em 1.6em 0.5em;
}
.modal__bd_text {
font-size: 0.3rem;
line-height: 1rem;
} .input_box input {
height: 0.6rem;
border: 1px solid #d9d9d9;
border-radius: .1rem;
padding: 0 0.3rem;
width: 70%;
} .modal__ft {
position: fixed;
left: 0;
bottom: 0;
line-height: 0.8rem;
font-size: 0.35rem;
width: 100%;
}
.modal__ft:after {
content: " ";
position: absolute;
left: 0;
top: 0;
right: 0;
height: 1px;
border-top: 1px solid #ccc;
color: #d5d5d6;
transform-origin: 0 0; transform: scaleY(0.5);
}
.modal__btn {
position: relative;
/* display: block; */
font-size: .3rem;
color: #fff;
width: 50%;
height: 1.7rem;
/* border-radius: 1rem; */
/* margin: 0 auto; */
line-height: 1.7rem;
}
.border_right{
border-right: 1px solid #e5e5e5;
box-sizing: border-box;
}
.modal__btn_primary,
.modal__btn_alert {
background-color: #fff; /* color: #fa0; */
font-size: .6rem;
width: 50%;
}
.modal__btn_default {
color: #ffaa00;
font-size: 0.6rem;
float: right;
}
.modal__btn_alert {
width: 100%;
height: 1rem;
}
.modal__btn:after {
content: " ";
width: 200%;
height: 200%;
position: absolute;
top: 0;
left: 0;
-webkit-transform: scale(0.5);
transform: scale(0.5);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
box-sizing: border-box;
border-radius: .2rem;
}
</style>
Vue自行封装常用组件-弹出框的更多相关文章
- Vue自行封装常用组件-文本提示
使用方法:1.在父组件中引入"toast.vue" //import toast from "./toast"; 2.在父组件中注册 toast //compo ...
- Vue自行封装常用组件-倒计时
倒计时组件,比较复杂一点,大神勿调侃,精确到毫秒,因为项目中多次出现倒计时,所以拿出来分享下 使用方法:1.在父组件中引入"uni-countdown" //import uniC ...
- 基于Vue.js PC桌面端弹出框组件|vue自定义弹层组件|vue模态框
vue.js构建的轻量级PC网页端交互式弹层组件VLayer. 前段时间有分享过一个vue移动端弹窗组件,今天给大家分享一个最近开发的vue pc端弹出层组件. VLayer 一款集Alert.Dia ...
- vue之element-ui设置全局弹出框
这样的需求,在主要功能完成后,需要进行交互效果的完善,需要给请求api的时候添加一个加载中的一个弹出框.但是每个页面每个页面过的话,会很费时间和精力,这里我们可以采用element-ui中的服务式弹出 ...
- vue在element-ui的dialog弹出框中加入百度地图
参考:https://blog.csdn.net/u012724595/article/details/82703579 <!-- gps弹窗 --> <el-dialog v-di ...
- JavaScript封装一个MyAlert弹出框
平时我们想要显示一些提示信息时会用到alert方法,alert是全局的一个方法,会短暂的中断程序,我们主要用来显示提示客户信息.但是这个方法有一定的局限性,而且本身样式也不够美观.于是我封装了一个实用 ...
- elementUI vue this.$confirm 和el-dialog 弹出框 移动
调试了好久, 还能凑合用, 请直接看DOME 示例,复制就能用: <!DOCTYPE html> <html lang="zh"> <head> ...
- 尝试用React写几个通用组件 - 带搜索功能的下拉列表,开关切换按钮,弹出框
尝试用React写几个通用组件 - 带搜索功能的下拉列表,开关切换按钮,弹出框 近期正在逐步摸索学习React的用法,尝试着写几个通用型的组件,整体项目还是根据webpack+react+css-me ...
- [ vue ] Quasar封装q-dialog组件,在外层实现弹出框的开启和关闭
场景描述: 见:https://www.cnblogs.com/remly/p/12981582.html 具体实现: <!-- 父组件 --> <template> < ...
随机推荐
- mariadb数据库(4)集群
[主从架构]确保主从的两个数据库一致. um配置 [mariadb] name=MariaDB baseurl=http://mirrors.ustc.edu.cn/mariadb/yum/10.3/ ...
- 內部作业 OH01 0001710000 无价格可确定
在CO15报工时,提示:“內部作業 OH01 0001710000 無價格可確定” 出现以上错误信息,表示没有在KP26维护价格, 只需要进入KP26维护成本中心和作业类型的价格即可, 具体操作如下图 ...
- Python之Numpy:线性代数/矩阵运算
当你知道工具的用处,理论与工具如何结合的时候,通常会加速咱们对两者的学习效率. 零 numpy 那么,Numpy是什么? NumPy(Numerical Python) 是 Python 语言的一个扩 ...
- 引入easyui的404问题
直接在webapp创建css文件夹添加easyui 引入: <link rel="stylesheet" type="text/css" href=&qu ...
- Java工程师研发面经大合集
百度研发面经整合版 软件研发工程师 基础研发工程师 百度智能云 百度核心搜索部 百度今年的提前批有点奇怪,好像都不走流程,牛客上好几个百度内推的帖子,我投了几个,基本上都是百度智能云的,当然也有其他部 ...
- idea、eclipse常用快捷键
idea常用快捷键 Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Shift+Click,可以 ...
- NOIp2016 D2T3 愤怒的小鸟【搜索】(网上题解正解是状压)
题目传送门 没啥别的想法,感觉就是搜索,经过原点的抛物线已知两个点就可以求出解析式,在还没有被打下来的两个猪之间随意配对,确定解析式之后标记在这个抛物线下被打下来的猪. 猪也可以单独用一个抛物线打下来 ...
- Spring Cloud Feign原理及性能
什么是Feign? Feign 的英文表意为“假装,伪装,变形”, 是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,而不用像Java中通过封装HTTP请求报文的方式直 ...
- Xshell的使用以及常用命令
工具/原料 Xshell 方法/步骤 打开软件,点击新建,在主机哪里写入要访问的ip地址,名称随意 点击文件之后,再点击打开: 就可以看到刚才新建的会话了: 点击连接,就会显示下面的画面,输入用户名, ...
- Flume下载安装
下载 可以apache官网下载flume的安装包 下载时注意,flume具有两个版本,0.9.x和1.x,两个版本并不兼容,我们用最新的1.x版本,也叫flume-ng版本. 安装 解压到指定目录即可 ...