下载文件1、弹窗组件

<template>
<view class="bombFrame" v-if="bshow" :class="show?'show':'hide'">
<view class="telate" :class="show?'bshow':'bhide'">
<view class="hint">
<view>{{title}}</view>
<view @touchstart.prevent="noClick">
<image src="./static/cha.svg" mode="" />
</view>
</view>
<view class="promptContent">
<view>
<image src="./static/gantan.svg" mode="" />
</view>
<view>{{content}}</view>
</view>
<view class="operate">
<view @touchstart.prevent="noClick">{{noBtnText}}</view>
<view @touchstart.prevent="yesClick">{{yesBtnText}}</view>
</view>
</view>
</view>
</template>
<script>
/**
*
*
* this.$Message({ content: "模式未保存,确定离开?" })
.then(() => {
console.log("yes");
})
.catch(() => {
console.log("cancel");
});
*
*
*/
export default {
props: {
title: {
type: String,
default: "提示",
},
yesBtnText: {
type: String,
default: "确定",
},
noBtnText: {
type: String,
default: "取消",
},
hasMark: {
type: Boolean,
default: true,
},
content: {
type: String,
default: "此操作将永久删除该文件, 是否继续?",
},
},
data() {
return {
promiseStatus: null,
show: false,
bshow: false,
};
},
methods: {
messag() {
let _this = this;
this.show = true;
this.bshow = true;
return new Promise(function (resolve, reject) {
_this.promiseStatus = { resolve, reject };
});
},
noClick() {
this.show = false;
setTimeout(() => {
this.bshow = false;
}, 500);
this.promiseStatus && this.promiseStatus.reject();
},
yesClick() {
this.show = false;
setTimeout(() => {
this.bshow = false;
}, 500);
this.promiseStatus && this.promiseStatus.resolve();
},
alertClick() {
this.show = false;
setTimeout(() => {
this.bshow = false;
}, 500);
this.promiseStatus && this.promiseStatus.resolve();
},
},
};
</script>
<style lang='scss'>
@keyframes move {
0% {
background: rgba(0, 0, 0, 0.5);
opacity: 1;
}
50% {
background: rgba(0, 0, 0, 0.2);
}
100% {
background: rgba(0, 0, 0, 0);
opacity: 0;
}
}
@keyframes move2 {
0% {
background: rgba(0, 0, 0, 0);
opacity: 0;
}
50% {
background: rgba(0, 0, 0, 0.2);
}
100% {
background: rgba(0, 0, 0, 0.5);
opacity: 1;
}
}
@keyframes move4 {
0% {
background: rgba(255, 255, 255, 1);
transform: translateY(0);
}
50% {
background: rgba(255, 255, 255, 0.5);
}
100% {
background: rgba(255, 255, 255, 0);
transform: translateY(-50rpx);
display: none !important;
}
}
@keyframes move3 {
0% {
background: rgba(255, 255, 255, 1);
transform: translateY(-50rpx);
}
100% {
background: rgba(255, 255, 255, 1);
transform: translateY(0);
}
}
.show {
-webkit-transition: -webkit-transform 1s;
transition: transform 1s;
animation: move2 0.5s; /*自定义动画名称*/
animation-fill-mode: forwards; /*动画执行完后的状态*/
}
.hide {
-webkit-transition: -webkit-transform 1s;
transition: transform 1s;
animation: move 0.5s; /*自定义动画名称*/
animation-fill-mode: forwards; /*动画执行完后的状态*/
}
.bshow {
-webkit-transition: -webkit-transform 1s;
transition: transform 1s;
animation: move3 0.5s; /*自定义动画名称*/
animation-fill-mode: forwards;
}
.bhide {
-webkit-transition: -webkit-transform 1s;
transition: transform 1s;
animation: move1 0.5s; /*自定义动画名称*/
animation-fill-mode: forwards; /*动画执行完后的状态*/
}
.bombFrame {
position: fixed;
z-index: 9900;
width: 100vw;
height: 100vh;
top: 0;
left: 0;
background: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
box-shadow: 0px 2px 9px 3px rgba(0, 0, 0, 0.5);
.telate {
background-color: #fff;
border-radius: 20rpx;
width: 700rpx;
padding: 30rpx;
box-sizing: border-box;
.hint {
display: flex;
align-items: center;
justify-content: space-between;
> view:nth-child(1) {
color: #303133;
font-size: 32rpx;
}
> view:nth-child(2) {
width: 50rpx;
height: 50rpx;
image {
width: 100%;
height: 100%;
}
}
}
.promptContent {
display: flex;
align-items: center;
margin-top: 30rpx;
> view:nth-child(1) {
width: 50rpx;
height: 50rpx;
image {
width: 100%;
height: 100%;
}
}
> view:nth-child(2) {
color: #606266;
font-size: 28rpx;
margin-left: 25rpx;
}
}
.operate {
display: flex;
justify-content: end;
margin-top: 30rpx;
> view:nth-child(1) {
padding: 15rpx 30rpx;
font-size: 24rpx;
border-radius: 6rpx;
background: #fff;
border: 1px solid #dcdfe6;
color: #606266;
}
> view:nth-child(2) {
padding: 15rpx 30rpx;
font-size: 24rpx;
margin-left: 20rpx;
border-radius: 6rpx;
background: #009788;
border: 1px solid #dcdfe6;
color: #ffffff;
}
}
}
}
</style>

2、往vue中挂载组件 (创建js)

import Vue from 'vue'
import messag from './index.vue'
const VueComponent = Vue.extend(messag);
const vm = new VueComponent().$mount();
let init = false;
let defaultOptions = {
yesBtnText: '确定',
noBtnText: '取消'
}; const message = function (options) {
Object.assign(vm, defaultOptions, options, {
type: 'confirm'
});
if (!init) {
document.body.appendChild(vm.$el);
init = true;
}
return vm.messag();
}; export default message;

3、应用全局组件
3.1 在main.js中引入全局

import Message from '@/components/message/index'
Vue.prototype.$Message = Message;
 
3.2 页面中使用组件
this.$Message({ content: "模式未保存,确定离开?" })
.then(() => {
console.log("yes");
}).catch(() => {
console.log("cancel");
});

vue封装全局确认弹窗的更多相关文章

  1. echars vue 封装全局组件 曲线 柱状图 同v-chars绿色系 配置样式

    Echars vue封装 ,曲线图 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...

  2. 用vue2.x注册一个全局的弹窗alert组件

    一.在实际的开发当中,弹窗是少不了的,默认系统的弹窗样式太丑,难以满足项目的实际需求,所以需要自己定义弹窗组件,把弹窗组价定义为全局的,这样减少每次使用的时候引入麻烦,节省开发时间.本文将分享如何定义 ...

  3. main.js中封装全局登录函数

    1. 在 main.js 中封装全局登录函数 通过 vue 对象的原型扩展,可以扩展一个函数,这样这个函数就可以在每一个界面通过类似指向对象的方式,去访问这个函数. 如下是 main.js 扩展的函数 ...

  4. Vue列表组件与弹窗组件示例

    列表组件 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <me ...

  5. 用vue2.x注册一个全局的弹窗alert组件、confirm组件

    一.在实际的开发当中,弹窗是少不了的,默认系统的弹窗样式太丑,难以满足项目的实际需求,所以需要自己定义弹窗组件,把弹窗组价定义为全局的,这样减少每次使用的时候引入麻烦,节省开发时间.本文将分享如何定义 ...

  6. [转]Vue项目全局配置微信分享思路详解

    这篇文章给大家介绍了vue项目全局配置微信分享思路讲解,使用vue作为框架,使用vux作为ui组件库,具体内容详情大家跟随脚本之家小编一起学习吧 这个项目为移动端项目,主要用于接入公众号服务.项目采用 ...

  7. 浅析vue封装自定义插件

    在使用vue的过程中,经常会用到Vue.use,但是大部分对它一知半解,不了解在调用的时候具体做了什么,因此,本文简要概述下在vue中,如何封装自定义插件. 在开始之前,先补充一句,其实利用vue封装 ...

  8. Vue 封装axios(四种请求)及相关介绍(十三)

    Vue 封装axios(四种请求)及相关介绍 首先axios是基于promise的http库 promise是什么? 1.主要用于异步计算 2.可以将异步操作队列化,按照期望的顺序执行,返回符合预期的 ...

  9. 11 vue 自定义全局方法

    //global.js// 定义vue 全局方   // 定义vue 全局方法 建议自定义的全局方法加_ 以示区分 export default {   install(Vue, options =  ...

  10. vue封装公用弹出框方法,实现点击出现操作弹出框

    vue封装公用弹出框方法,实现点击出现操作弹出框 如上图所示,这次要实现一个点击出现操作弹框的效果:并将这个功能封装成一个函数,便于在项目的多个地方使用. 具体思路是: 封装一个组件,组件保护一个插槽 ...

随机推荐

  1. Java基础学习笔记-数据类型、数制

    数据类型,跟JS感觉差异不是很大,但是有个String不是很一样的样子 数据类型分为 基本数据类型和复合数据类型 基本数据类型分为下面三种 数值类型 1.整数类型:byte,short,int,lon ...

  2. IntelliJ中高效重构的 10 个快捷方式

    前言 在日常的开发工作中,我们经常需要重构,重构可以让我们写出的代码更上一层楼.所以,我会借助IntelliJ提供的一些功能,帮助我高效进行重构.这里是我推荐10个快捷方式,也是我每天都在使用的,非常 ...

  3. 《HelloGitHub》第 82 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...

  4. drf入门规范、序列化器组件、视图组件、请求与响应

    DRF框架之入门规范 ​ 本篇文章会详细介绍web开发模式.API接口及其接口测试工具.restful规范.还有经常分不清又很重要的序列化与反序列化的部分,初级交接触APIView.Request类. ...

  5. python del 函数

    用法: -------del用于list列表操作,删除一个或者连续几个元素. # 定义一个list >>> a = [1,2,3,4]  >>> a [1,2,3, ...

  6. springboot返回数据null参数设为空字符串或空数组

    package com.ruoyi.framework.config.ResponseVoConfig.WebConfig; /** * @Classname MyJsonMapper * @Desc ...

  7. VS 管理控制台提示ScriptHalted

    一.结论 出现该问题是因为PowerShell 版本低的原因,按以下步骤操作即可 二.解决方案 1.下载最新PowerShell 安装程序包,根据系统找对应版本x86还是x64 https://www ...

  8. c++ 程序通用多线程单例设计 c++ web 框架设计经验谈

    设计 c++ web 框架时候,想要一个框架缓存类,很多通用缓存类是用字符保存,作为框架内置就不要序列和反序列了,因为框架内部使用. 想给自己的paozhu c++ web 框架添加缓存类,参考了sp ...

  9. K3S系列文章-使用AutoK3s在腾讯云上安装高可用K3S集群

    开篇 <K3s 系列文章> <Rancher 系列文章> 方案 在腾讯云上安装 K3S 后续会在这套 K3S 集群上安装 Rancher 方案目标 高可用 3 台master ...

  10. Hbase学习三:Hbase常用命令总结

    转载请注明出处: 1.Hbase连接 1.1.进入hbase命令行 hbase shell # 或 bin/hbase shell 1.2.查看帮助 help 1.3.查看所有表 list 2.表操作 ...