vue3 - 自定义弹框组件

在这里插入图片描述

写了一个弹框组件
<template><transition name="modal-fade"><div v-if="showFlag" class="myModal"><div class="content"><div class="topBox"><div class="leftTitle"><span>{{ title }}</span></div><div class="rightClose" @click="cancelModal"><CloseOutlined /></div></div><slot name="content"></slot></div></div></transition>
</template><script setup lang="ts">
import { ref, toRefs } from 'vue'const props = defineProps({title: {type: String,default: '',},
})const { title } = toRefs(props)// 是否开启弹框
let showFlag = ref(false)// 开启
const showModal = () => {showFlag.value = true
}// 关闭
const cancelModal = () => {showFlag.value = false
}defineExpose({showModal,cancelModal,
})
</script><style lang="less" scoped>
// 这个动画是,打开弹框时,有一个缓慢打开的效果
@keyframes fadeIn {from {opacity: 0;}to {opacity: 1;}
}// 打开弹框时给它一个上下抖动的效果
@keyframes shake {0% { transform: translateY(0); }25% { transform: translateY(-10px); }50% { transform: translateY(0); }75% { transform: translateY(10px); }100% { transform: translateY(0); }
}.myModal {position: fixed;top: 0;left: 0;width: 100%;height: 100%;background: rgba(0, 0, 0, 0.4);z-index: 100;animation: fadeIn 0.5s;// animation: fadeIn 0.5s, shake 0.5s;.content {position: absolute;left: 50%;top: 30%;transform: translate(-50%, -50%);background: #ffffff;width: 500px;padding: 10px;.topBox {display: flex;height: 30px;border-bottom: 1px solid #f0f0f0;padding: 0 10px 0 0;margin-bottom: 20px;cursor: pointer;.leftTitle {flex: 1;text-align: left;color: rgba(0, 0, 0, 0.8);font-weight: 600;font-size: 16px;}.rightClose {flex: 1;text-align: right;}}}
}// start - 效果为:关闭时,有一个缓慢消失的效果
.modal-fade-enter-active, .modal-fade-leave-active {transition: opacity 0.5s;
}
.modal-fade-enter, .modal-fade-leave-to {opacity: 0;
}
// end - 效果为:关闭时,有一个缓慢消失的效果
</style>
使用它
<template><MyModal ref="myModal" :title="title"><template #content><div style="display: grid; place-items: center"><a-form ref="loginForm" :model="formState" :label-col="labelCol" style="width: 360px"><a-form-item has-feedback name="userName"><a-input v-model:value="formState.phone" placeholder="请输入手机号" autocomplete="off"><template #prefix><UserOutlined style="color: rgba(0, 0, 0, 0.25)" /></template></a-input></a-form-item><a-form-item has-feedback name="code"><a-inputv-model:value="formState.code"placeholder="验证码"autocomplete="off"style="width: 240px"><template #prefix><MailOutlined style="color: rgba(0, 0, 0, 0.25)" /></template></a-input><a-button:disabled="myState.smsSendFlag"v-text="(!myState.smsSendFlag && '获取验证码') || `${myState.time} s`"@click="getSms"style="margin-left: 15px"type="primary"></a-button></a-form-item><a-form-item style="text-align: center"><a-button style="width: 360px" type="primary" block @click="handleSubmit">登录</a-button></a-form-item></a-form></div></template></MyModal>
</template><script setup lang="ts">
import { ref } from 'vue'import * as accountApi from '@/api/account'import MyModal from '@/components/MyModal/MyModal.vue'
import { message } from 'ant-design-vue'const myModal = ref()const showModal = () => {myModal.value?.showModal()
}defineExpose({showModal,
})let title = ref('x管家登陆')const myState = reactive({smsSendFlag: false,time: 60,
})let labelCol = { span: 4 }
interface formState {phone: string | numbercode: string | number
}
const formState = ref<formState>({phone: '',code: '',
})// 获取验证码
const getSms = async () => {let params = {phone: formState.value.phone,}if (params['phone'] == '') {message.error(`手机号不能为空~`)return}const hide = message.loading('验证码发送中..', 0)try {let { state, message: msg } = await accountApi.idleSendSms(params)if (state === 200) {myState.smsSendFlag = trueconst interval = setInterval(() => {if (myState.time-- <= 0) {myState.time = 60myState.smsSendFlag = falseclearInterval(interval)}}, 1000)} else {message.error(msg)}} catch (error) {message.error('网络请求连接失败~')}setTimeout(hide, 1)
}// 登录
const handleSubmit = async () => {let params = {phone: formState.value.phone,code: formState.value.code,}try {const { state, message: msg, token } = await accountApi.idleLogin(params)if (state === 200) {message.success('登录成功~')myModal.value?.cancelModal()} else {message.error(msg)}} catch (error) {message.error('网络请求发送失败~')}
}
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/620177.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线性代数——行列式按行(列)展开

目录 一、余子式&#xff1a;将行列式某元素所在行和列的元素全去掉 剩余部分所构成的行列式&#xff0c;称为该元素的余子式 二、代数余子式 三、行列式等于它的任一行&#xff08;列&#xff09;的各元素与对应代数余子式乘积之和 四、行列式某行元素&#xff08;列&…

单机物理机部署Datax

一、概述 DataX 是阿里巴巴开源的一个异构数据源离线同步工具&#xff0c;致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 源码地址&#xff1a;https://github.com/alibaba/DataX 为了解决异构数据…

什么是云服务器?云服务器的工作原理是介绍

阿里云服务器ECS英文全程Elastic Compute Service&#xff0c;云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务&#xff0c;阿里云提供多种云服务器ECS实例规格&#xff0c;如经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等&#xff0c;阿里云百科aliyunbai…

Linux shell jq工具操作文档(jq --help使用示例)

文章目录 jq工具介绍jq --help解读英文中文 使用示例1. 使用最简单的过滤器。将输入复制到输出&#xff0c;不做任何修改&#xff08;除了格式化&#xff09;2. 使用 -c 选项进行紧凑输出而非美化输出3. 使用 -n 选项以 null 作为单一输入值&#xff08;用于创建新json&#xf…

STL——stack容器和queue容器详解

目录 &#x1f4a1;stack &#x1f4a1;基本概念 常用接口 &#x1f4a1;queue &#x1f4a1;基本概念 &#x1f4a1;常用接口 &#x1f4a1;stack &#x1f4a1;基本概念 栈&#xff08;stack&#xff09;&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端…

OpenGL 网格拾取坐标(Qt)

文章目录 一、简介二、代码实现三、实现效果参考资料一、简介 有时候我们希望通过鼠标来拾取某个网格中的坐标,这就涉及到一个很有趣的场景:光线投射,也就是求取一条射线与网格的交点,这里如果我们采用普通遍历网格中的每个面片的方式,当网格的面片数据量很大时计算效率就…

Oracle VARCHAR和VARCHAR2区别

在Oracle数据库中&#xff0c;VARCHAR和VARCHAR2是两种不同的数据类型&#xff0c;它们的区别如下&#xff1a; 1.存储空间 VARCHAR和VARCHAR2在存储空间上有所不同。在Oracle 7及以下版本中&#xff0c;VARCHAR类型的长度是固定的&#xff0c;如果存储的数据长度小于定义的长…

pyside6 捕捉主窗口关闭后,进行释放相关的资源

import sys from PySide6 import QtGui from PySide6.QtWidgets import QWidget,QApplication,QMessageBoxclass Message(QWidget):def __init__(self):# 如果希望窗口内嵌于其他部件&#xff0c;可添加parent参数super(Message, self).__init__()# 调用初始化方法self.initUI(…

学习方法论:PQ4R 提升理解力

Learning Methodology: PQ4R for Enhanced Comprehension 学习方法论&#xff1a;PQ4R 提升理解力 The PQ4R method, devised by Thomas and Robinson, is an effective learning strategy that promotes better understanding and retention of information. It consists of…

Python基本语法与变量的相关介绍

python基本语法与变量 python语句的缩进 Python代码块使用缩进对齐表示代码逻辑&#xff0c;Python每段代码块缩进的空白数量可以任意&#xff0c;但要确保同段代码块语句必须包含相同的缩进空白数量。建议在代码块的每个缩进层次使用单个制表符或两个空格或四个空格 , 切记不…

Redis分布式锁的Java实现之道

摘要&#xff1a; 在当今的微服务架构中&#xff0c;分布式锁是一个非常重要的概念。它允许我们在多个服务之间同步操作&#xff0c;确保数据的一致性和完整性。而Redis作为一种高性能的内存数据存储系统&#xff0c;常常被用来实现分布式锁。 一、分布式锁的基本概念 在分布…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置软件触发模式(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPISDK设置硬件触发模式&#xff08;C&#xff09; Baumer工业相机Baumer工业相机NEOAPISDK和软触发模式的技术背景Baumer工业相机通过NEOAPI SDK设置软件触发模式功能1.引用合适的类文件2.通过NEOAPI SDK实现软件触发采集图像的功能 Bau…

jQuery选择器(二) 过滤选择器及可见性过滤选择器的使用

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍在 jQuery中过滤选择器及可见性过滤选择器的使用以及部分理论知识 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主收将持续更新学习记录获&#xff0c;友友们有任…

flutter使用get库管理路由,并设页面跳转动画和常见动画

get库还是非常强大的一个仓库&#xff0c;里面包含了非常常用的一些方法&#xff0c;比如路由管理&#xff0c;这是最常见和最常用的一个功能了&#xff0c;我们可以先配置一个路由对象&#xff0c;然后在里面配置路由列表&#xff0c;并且设置路由跳转方式。 第一种方式&…

教师资格证照片分辨率怎么调?教师资格证上传照片要求

最近教师资格证考试开始报名了&#xff0c;在报名之前需要准备好一些必备的材料&#xff0c;比如证件照片&#xff0c;报名考试平台一般都会对上传的证件照有具体的要求&#xff0c;比如考生本人近6个月以内的免冠正面证件照&#xff1b;照片格式及大小&#xff1a;JPG/JPEG格式…

Springboot读取配置文件

多种配置文件格式 springboot项目中不同配置文件的优先加载顺序 为&#xff1a;properties> yml >yaml>自定义核心类配置 自定义配置文件的加载 一般系统会加载默认的application.properties或者application.yml,但如果使用自定义配置文件&#xff0c;可使用下面方…

SpringSecurity入门demo(二)表单认证

上一篇博客集成 Spring Security&#xff0c;使用其默认生效的 HTTP 基本认证保护 URL 资源&#xff0c;下面使用表单认证来保护 URL 资源。 一、默认表单认证&#xff1a; 代码改动&#xff1a;自定义WebSecurityConfig配置类 package com.security.demo.config; import or…

Next.js 集成 Auth0 登入和自定义登入页面

Next.js 集成 Auth0 和自定义登入页面 注册账号和基本配置进入 auth0 官网注册账号并登入进入控制台后访问 Applications/Applications进入程序配置页面添加配置 在 Next.js 使用在项目中集成 通过 Auth0Lock 配置方式自定义登入页面效果展示实现过程 注册账号和基本配置 进入…

Pandas实战100例 | 案例 15: 移动平均 - 使用 `rolling` 方法

案例 15: 移动平均 - 使用 rolling 方法 知识点讲解 移动平均是时间序列数据分析中的一种基本技术&#xff0c;用于平滑时间序列中的短期波动并突出长期趋势。Pandas 的 rolling 方法提供了计算移动平均的简便方式。 计算移动平均: 使用 rolling 方法&#xff0c;你可以指定…

Java 数组常见的排序和查找算法

2、数组 2.1、常见的算法&#xff1a; 排序算法&#xff1a; 冒泡排序算法 选择排序算法 查找算法&#xff1a; 二分法查找2.2、算法实际上在 java 中已经封装好了。 排序可以调用方法。例如&#xff1a;java 中提供了一个数组工具类&#xff1a; java.util.Arrays Arrays 是一…