前端开发Vue3.0 标签setup语法『UI组件库』之『模态框』【业务提升必备】

封装模态框需要定义的参数
title //弹窗标题
show // 是否显示弹窗
width // 弹窗宽度
height // 弹窗高度
borderRadius // 弹窗圆角
headerColor // 弹窗顶部颜色
contentText // 内容文本
contentTextCorder //内容文本颜色
position // 标题的位置
btnGroupShow // 按钮的显示隐藏
confirmText // 确认按钮的文本
cancelText // 取消按钮的文本
封装模态框需要定义的方法
const cancelHandler = () => {
// 关闭弹窗的方法
}const confirmHandler = () => {
// 弹窗点击确认的方法
}
在components文件新建一个modal-dialog.vue文件
1、defineProps 在Vue 3中,defineProps 是一个用于定义传入组件的 Props 的函数。它通常用在组合式 API 或 Composition API 中。
2、defineEmits 的用法 defineEmits的用法是在子组件中定义接收父组件传过来的方法
<template><div class="modal-box" v-if="show"><div class="dialog-box" :style="{'background-color':props.contentTextCorder,'border-radius':props.borderRadius + 'px','text-align': props.position,'width':props.width + 'px','height':props.height + 'px'}"><header:style="{'background-color':headerColor,'border-top-left-radius':props.borderRadius + 'px','border-top-right-radius':props.borderRadius + 'px',}"><text>{{props.title}}</text></header><div class="icon" @click="cancelHandler">X</div><div class="content"><p v-if="props.contentText" :style="{'color':props.contentTextCorder}">{{props.contentText}}</p><slot name="content"></slot></div><footer><div class="btn-box"><button v-if="props.btnGroupShow" class="boom" @click="cancelHandler">{{props.cancelText }}</button><button v-if="props.btnGroupShow" class="boom" @click="confirmHandler">{{props.confirmText }}</button></div></footer></div></div>
</template><script setup>
import {defineProps,defineEmits} from "vue";
const emit = defineEmits(['confirm','close'])
const props = defineProps({//弹窗标题title:{type:String,default:'弹窗标题'},// 是否显示弹窗show:{type:Boolean,default:false},// 弹窗宽度width:{type:Number,default:500},// 弹窗高度height:{type:Number,default:200},// 弹窗圆角borderRadius:{type:Number,default:20},// 弹窗顶部颜色headerColor:{type:String,default:'blue'},// 内容文本contentText:{type:String,default:null},contentTextCorder:{type:String,default:'#fff'},position:{type:String,default:'center'},btnGroupShow:{type:Boolean,default:true},confirmText:{type:String,default:'是'},cancelText:{type:String,default:'否'}
})const cancelHandler = () => {emit('close')
}const confirmHandler = () => {emit('confirm')
}</script><style scoped>.modal-box{width: 100%;height: 100%;position: fixed;left: 0;top: 0;background-color: rgb(0,0,0,0.4);
}
.modal-box .dialog-box{background-color: #fff !important ;position: relative;left: 50%;top: 20%;transform: translate(-50%,-20%);
}
.icon{position: absolute;top: 10px;right: 15px;background-color: #ec6a5d;border-radius: 50%;width: 20px;height: 20px;text-align: center;color: #464444;font-size: 10px;line-height: 20px;
}
.icon:hover{cursor: pointer;
}
header{width: 100%;height: 40px;line-height: 40px;padding:0 10px 0 10px;box-sizing: border-box;
}
footer{width: 100%;height: 40px;position: absolute;left: 0;bottom: 0;display: flex;justify-content: flex-end;border-top: 1px solid #ccc;
}
footer .btn-box {width: 25%;height: 40px;display: flex;align-items: center;justify-content: space-around;
}
footer .btn-box button {height: 26px;
}
.content{width: 100%;padding:0 10px 0 10px;box-sizing: border-box;
}
button{border: 0;border-radius: 5%;cursor: pointer;
}.boom {background-color: #16a085;color: #fff;position: relative;z-index: 1;
}.boom::before {content: "";position: absolute;z-index: -1;top: 0;left: 0;bottom: 0;right: 0;border: 2px solid #16a085;border-radius: 20px;transform-origin: center;
}.boom:hover::before {transform: scale(1.25);transition: all ease-out .5s;border: 1px solid #96f3e0;opacity: 0;
}</style>
index.vue主组件
<template><div><ul><li>3243243242343243243242</li><li>3243243242343243243242</li><li>3243243242343243243242</li></ul><button @click="openDialog">打开弹窗</button><modal-dialog:title="title":show="isShow":width="500":height="200":borderRadius="10"headerColor="skyblue"contentText="This is a super modal this is a super madel"contentTextCorder="red"position="left":btnGroupShow="true"confirmText="确定"cancelText="取消"@confirm="modalConfirm"@close="modalClose"><template v-slot:content><h3>我是具名插槽</h3></template></modal-dialog></div>
</template><script setup>
// 引入组件不用注册
import modalDialog from './components/modal-dialog.vue'import {ref} from 'vue'
const title = ref('我是弹窗')
const isShow = ref(false)// 弹窗的确认事件const modalConfirm = () => {isShow.value = false
}// 弹窗的关闭事件const modalClose = () => {isShow.value = false
}const openDialog = () => {isShow.value = true
}</script><style>
a{color: skyblue;
}
</style>
相关文章:
前端开发Vue3.0 标签setup语法『UI组件库』之『模态框』【业务提升必备】
封装模态框需要定义的参数 title //弹窗标题 show // 是否显示弹窗 width // 弹窗宽度 height // 弹窗高度 borderRadius // 弹窗圆角 headerColor // 弹窗顶部颜色 contentText // 内容文本 contentTextCorder //内容文本颜色 position // 标题的位置 …...
在CSDN学Golang云原生(Kubernetes二开)
一,通过client-go管理集群资源 Kubernetes提供了client-go库,该库可以让开发人员使用Golang编写的应用程序与Kubernetes API进行交互。通过client-go,你可以创建、更新和删除Kubernetes资源,并查询集群状态等信息。 以下是一个示…...
chatglm-6b量化推理指标记录
chatglm量化推理指标对比,单卡显存32G, 保持batchsize为64不变。通过不同的量化可以节省显存进而提升提升batch size,加快全量数据的推理速度。当然通过量化可以降低大模型的显存使用门槛。...
Android kotlin系列讲解之最佳的UI体验 - Material Design 实战
目录 一、什么是Material Design二、Toolbar三、滑动菜单1、DrawerLayout2、NavigationView 四、悬浮按钮和可交互提示1、FloatingActionButton2、Snackbar3、CoordinatorLayout 五、卡片式布局1、MaterialCardView2、AppBarLayout 六、可折叠式标题栏1、CollapsingToolbarLayo…...
链表基础知识
一、什么是链表 链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 链表的结构是多式多样的,当时通常用的也就是两种: (1)第一种是无头非循环单向…...
process.env.npm_config_argv的值3个参数remain、cooked、original什么含义
在使用Webpack进行打包时,判断process.env.npm_config_argv的值通常是为了根据命令行参数来决定打包的行为。process.env.npm_config_argv是一个环境变量,保存了当前运行的npm命令和其参数。 具体而言,process.env.npm_config_argv的值是一个…...
【飞书】飞书导出md文档 | 飞书markdown文档导出 | 解决飞书只能导出pdf word
一、飞书导出markdown github地址:https://github.com/Wsine/feishu2md 这是一个下载飞书文档为 Markdown 文件的工具,使用 Go 语言实现。 请看这里:招募有需求和有兴趣的开发者,共同探讨开发维护,有兴趣请联系。 二、…...
零信任网络架构与实现技术的研究与思考
目前,国外已有较多有关零信任网络的研究与实践,包括谷歌的 BeyondCorp、BeyondProd,软件定义边界(Software Defined Perimeter,SDP) 及盖特提出的“持续自适应风险与信任评估”等。国内也有不少安全厂商积极…...
Unity 性能优化二:内存问题
目录 策略导致的内存问题 GFX内存 纹理资源 压缩格式 Mipmap 网格资源 Read/Write 顶点数据 骨骼 静态合批 Shader资源 Reserved Memory RenderTexture 动画资源 音频资源 字体资源 粒子系统资源 Mono堆内存 策略导致的内存问题 1. Assetbundle 打包的时候…...
JavaScript与TypeScript的区别
JavaScript和TypeScript是两种不同的编程语言,在一些方面有一些区别。 1. 类型系统:JavaScript是一种动态类型语言,变量的类型是在运行时确定的,并且可以随时更改。而TypeScript引入了静态类型系统,可以在编译时检查代…...
【NetCore】05-使用Autofac增强容器能力
文章目录 1.什么情况下需要引入第三方容器组件2.如何集成Autoface 1.什么情况下需要引入第三方容器组件 基于名称的注入属性注入子容器基于动态代理的AOP 核心扩展点:IServiceProviderFactory 第三方注入容器均使用这个类作为扩展点,将其注入到框架中…...
sparksql参数
Spark参数场景配置 参数类型 参数 参数说明 平台默认值 场景与建议 资源申请 spark.executor.memory Executor Java进程的堆内存大小 即Executor Java进程的Xmx值 2g 默认设置,或者同时等比例增大,最高不超过默认值的3倍,超过的单独拿出来看下 (注意作业是否数据倾斜&…...
STM32读写内部Flash
参考:https://blog.csdn.net/Caramel_biscuit/article/details/131925715 参考:https://blog.csdn.net/qq_36075612/article/details/124087574?spm1001.2014.3001.5502 目录 内存映射内部Flash的构成对内部Flash的写入过程查看工程内存的分布ROM加载空…...
golang文件锁,目录锁,syscall包的使用
先说结论 1. golang提供了syscall包来实现文件/目录的加锁,解锁 2. syscall包属于文件锁,是比较底层的技术,并不能在所有操作系统上完全实现,linux上实现了,windows下面就没有 3. 加锁时调用syscall.Flock(fd&#…...
数据库数据恢复-Syabse数据库存储页底层数据杂乱的数据恢复案例
数据库恢复环境: Sybase版本:SQL Anywhere 8.0。 数据库故障: 数据库所在的设备意外断电后,数据库无法启动。 错误提示: 使用Sybase Central连接后报错: 数据库故障分析: 经过北亚企安数据恢复…...
移远通信推出新一代高算力智能模组SG885G-WF,为工业和消费级IoT应用带来全新性能标杆
2023年7月24日,全球领先的物联网整体解决方案供应商移远通信宣布,正式推出其新一代旗舰级安卓智能模组SG885G-WF。该智能模组具有高达48 TOPS 的AI综合算力、强大性能及丰富的多媒体功能,非常适用于需要高处理能力和多媒体功能的工业和消费者…...
微信小程序开发,小程序类目符合,线上版本无权限申请wx.getLocation接口
我开发 的小程序类目符合wx.getLocation接口的申请标准 但是却还是显示无权限申请 后来研究好久才发现,小程序需要在发布线上版本时提交用户隐私保护指引 如未设置也可以在 设置-服务内容声明-用户隐私保护指引-声明处理用户信息项并补充填写后提交用户隐私协议审核…...
vue2企业级项目(五)
vue2企业级项目(五) 页面适配、主题切换 1、适配 项目下载插件 npm install --save-dev style-resources-loader vue-cli-plugin-style-resources-loader修改vue.config.js部分内容 const path require("path");module.exports {pluginOpt…...
【HTML5】拖放详解及实现案例
文章目录 效果预览代码实现 效果预览 代码实现 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>一颗不甘坠落的流星</title><style>#div1,#div2 {float: left;width: 100px;height: 27px;margin: 10px;paddin…...
Codeforces Round 888 (Div. 3)(视频讲解全部题目)
[TOC](Codeforces Round 888 (Div. 3)(视频讲解全部题目)) Codeforces Round 888 (Div. 3)(A–G)全部题目详解 A Escalator Conversations #include<bits/stdc.h> #define endl \n #define INF 0x3f3f3f3f using namesp…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
