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)

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

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(…

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

python基本语法与变量 python语句的缩进 Python代码块使用缩进对齐表示代码逻辑&#xff0c;Python每段代码块缩进的空白数量可以任意&#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 配置方式自定义登入页面效果展示实现过程 注册账号和基本配置 进入…

scroll-view在小程序页面里实现滚动,uniapp项目

要实现红框中的区域进行滚动,scroll-view必须写高 <template><!-- 合同-待确认 --><view class"viewport"><!-- 上 --><view class"top-box"><!-- tab --><view class"tabs"><textv-for"(ite…

Alibaba-> EasyExcel 整理3

1 导入依赖 <!-- easyExcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version >3.2.1</version><exclusions><exclusion><artifactId>poi-ooxml-schemas</art…

what is BERT?

BERT Introduction Paper 参考博客 9781838821593_ColorImages.pdf (packt-cdn.com) Bidirectional Encoder Representation from Transformer 来自Transformer的双向编码器表征 基于上下文&#xff08;context-based&#xff09;的嵌入模型。 那么基于上下文&#xff08;…

【MySQL性能优化】- MySQL结构与SQL执行过程

MySQL结构与SQL执行过程 &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 博客首页 怒放吧德德 To记录领地 &#x1f31d;分享学习心得&#xff0c;欢迎指正…

开源了一款Vue3 Ts Vite4 uni-app 驱动的跨端快速启动模板

一、开源项目简介 由 Vue3 & Ts & Vite4 & uni-app 驱动的跨端快速启动模板。推荐使用 VSCode 编辑器开发&#xff0c;集成了 Prettier ESLint StyleLint husky lint-staged commitlint UnoCSS Vue3 TypeScript Vite4 setup&#xff0c;开箱即用。 二、…

【计算机组成原理】程序的转换及机器级表示 常用计算机术语英文缩写汇总

编码 二进制编码的十进制数&#xff08;BCD&#xff09;&#xff1a;Binary Coded Decimal美国信息交换标准代码&#xff08;ASCII&#xff09;&#xff1a;American Standard Code for Information Interchange 数据的排列顺序 最低有效位&#xff08;LSB&#xff09;&…

全链路追踪关键技术-TraceId、SpanId生成规则

链路追踪的traceid原理梳理 如何追踪微服务调用&#xff1f; ● traceId&#xff0c;用于标识某一次具体的请求ID。当用户的请求进入系统后&#xff0c;会在RPC调用网络的第一层生成一个全局唯一的traceId&#xff0c;并且会随着每一层的RPC调用&#xff0c;不断往后传递&…