当前位置: 首页 > news >正文

Vue3 + TS + Element-Plus 封装的 Dialog 弹窗组件

弹窗组件中自定义了header 增加了全屏,svg-icon 没有的话可能会报错,换成自己的图标就可以

<template><el-dialog:dialogHeight="dialogHeight":title="dialogTitle"class="dialog min-w-70"v-model="dialogVisible"append-to-body:modal="dialogModal":fullscreen="fullscreen":close-on-click-modal="dialogClickModalClose":draggable="dialogDraggable":show-close="false":width="dialogWidth":align-center="dialogAlignCenter":center="dialogContentCenter"@open="open"@close="close"><template #header><div class="flex justify-between items-content"><div class="titleClass">{{ dialogTitle }}</div><div class="icon-content"><!-- <el-icon class="single-uploader__icon text-[12px]"><i-ep-minus v-if="fullscreen" /><i-ep-plus v-else /></el-icon>--><div :title="!fullscreen ? '全屏' : '还原'"><svg-iconclass="icon-item-content"v-if="showExpand"@click="zoom":icon-class="fullscreen ? 'fullscreen-exit' : 'fullscreen'"/></div><div title="关闭"><el-iconv-if="showClose"@click="close"title="关闭"class="single-uploader__icon icon-item-content"><i-ep-close /></el-icon></div></div></div></template><div :style="{ height: dialogBodyHeight }" class="overflow-auto"><slot></slot></div><template #footer v-if="dialogFooterBtn"><el-button type="primary" @click="SaveSubmit">确 定</el-button><el-button @click="CloseSubmit">取 消</el-button></template></el-dialog>
</template>
<script setup lang="ts">
// 【接口】接受传参字段
interface IProps {// 是否显示 Dialogvisible: boolean;// 对话框的标题dialogTitle?: string;// 内容区域高度dialogHeight?: string;// 对话框的宽度dialogWidth?: string;// 是否需要遮罩层dialogModal?: boolean;// 是否水平垂直对齐对话框dialogAlignCenter?: boolean;// 是否让 Dialog 的 header 和 footer 部分居中排列dialogContentCenter?: boolean;// 是否可以通过点击 modal 关闭 DialogdialogClickModalClose?: boolean;// 为 Dialog 启用可拖拽功能dialogDraggable?: boolean;// 是否显示底部按钮dialogFooterBtn?: boolean;// 是否显示全屏按钮showExpand?: boolean;// 是否显示关闭按钮showClose?: boolean;
}// 初始化默认参数
const props = withDefaults(defineProps<IProps>(), {dialogTitle: "默认标题",dialogWidth: "40%",dialogHeight: "auto",dialogModal: true,dialogAlignCenter: false,dialogContentCenter: false,dialogClickModalClose: false,dialogDraggable: false,dialogFooterBtn: true,showExpand: false,showClose: true,
});const emit = defineEmits(["save","cancellation","open","close","zoom","update:visible",
]);const dialogVisible = useVModel(props, "visible", emit);
let fullscreen = ref(false);
const dialogBodyHeight = ref<string | number>(); // 初始值为字符串类型// watch监听
watch([() => props.visible, () => props.dialogHeight, () => props.dialogFooterBtn],() => {nextTick(() => {menuDialogZoom();});},{ deep: true, immediate: true }
);// 保存提交回调函数
const SaveSubmit = () => {emit("save"); //emit方法供父级组件调用
};// 取消保存回调函数
const CloseSubmit = () => {emit("cancellation"); //emit方法供父级组件调用
};// 打开事件回调函数
const open = () => {emit("open"); //emit方法供父级组件调用
};// 关闭事件回调函数(当显示头部关闭按钮时需调用该回调函数方法 -> dialogShowClose = true 反之)
const close = () => {emit("close"); //emit方法供父级组件调用
};// 缩放弹窗
const zoom = () => {fullscreen.value = !fullscreen.value;menuDialogZoom();console.log(fullscreen.value);emit("zoom", fullscreen.value); //emit方法供父级组件调用
};/* 分配权限缩放弹窗 */
const menuDialogZoom = () => {if (props.visible && fullscreen.value && props.dialogFooterBtn) {dialogBodyHeight.value = "calc(100vh - 120px)";} else if (props.visible && fullscreen.value && !props.dialogFooterBtn) {dialogBodyHeight.value = "calc(100vh - 80px)";} else {dialogBodyHeight.value = props.dialogHeight;}
};
</script>
<style scoped>
.titleClass {font-weight: bold;
}.icon-content {display: flex;align-items: center;
}.icon-item-content {display: flex;align-items: center;justify-content: center;color: #909399;
}.icon-item-content:nth-child(1) {margin-right: 10px;
}.icon-item-content:hover {color: #1f6feb;cursor: pointer;
}.single-uploader__icon {font-size: 18px;
}
</style>

使用案例

<DialogdialogHeight="350px"v-model:visible="menuDialogVisible":dialogTitle="'【' + checkedRole.name + '】权限分配'":dialogDraggable="true"dialogWidth="30%"@close="menuDialogVisible = false"@save="handleRoleMenuSubmit"@cancellation="menuDialogVisible = false"
>内容区域
</Dialog>

弹窗相关数据

let menuDialogVisible = ref(false);

相关文章:

Vue3 + TS + Element-Plus 封装的 Dialog 弹窗组件

弹窗组件中自定义了header 增加了全屏&#xff0c;svg-icon 没有的话可能会报错&#xff0c;换成自己的图标就可以 <template><el-dialog:dialogHeight"dialogHeight":title"dialogTitle"class"dialog min-w-70"v-model"dialogVi…...

大数据技术概述_4.大数据的应用领域

1.制造业的应用 制造业目前正在向信息化和自动化的方向发展。在产品的设计、生产和销售中&#xff0c;越来越多的企业使用计算机辅助设计&#xff08;CAD&#xff09;、计算机辅助制造&#xff08;CAM&#xff09;等软件&#xff0c;数控机床、传感器等设备&#xff0c;物料需求…...

ABB RobotStudio学习记录(一)新建工作站

RobotStudio新建工作站 最近遇到 虚拟示教器和 Rapid 代码不能控制 视图中机械臂的问题&#xff0c;其实是由于机械臂和工作站不匹配。以下是解决方法。 名称版本Robot Studio6.08 新建一个”空工作站“&#xff1b; 在目标位置新建一个目标文件夹 C:\solution\test&#xff0…...

雷达通信一体化(含WCSP2023会议论文集学习)

雷达通信一体化&#xff0c;又称雷达通信融合&#xff08;RADCOM&#xff09;&#xff0c;是一种新兴的技术&#xff0c;它将雷达&#xff08;通常用于探测和跟踪目标&#xff09;和无线通信&#xff08;用于传输信息&#xff09;的功能结合在一起。这种融合技术的主要目标是提…...

特斯拉擎天柱机器人:工厂自动化的未来

随着技术的进步&#xff0c;工业自动化已经逐步进入了一个新的纪元。特斯拉最近公布的擎天柱机器人Optimus的演示&#xff0c;不仅仅展示了一个高科技机器人的能力&#xff0c;更是向我们揭示了未来工厂的可能性。 特斯拉擎天柱机器人的功能展示 马斯克在最新的演示中向我们展…...

【管理咨询宝藏93】大型制造集团数字化转型设计方案

【管理咨询宝藏93】大型制造集团数字化转型设计方案 【格式】PDF版本 【关键词】国际咨询公司、制造型企业转型、数字化转型 【核心观点】 - 235页大型制造型集团数字化转型方案设计&#xff01;细节非常详尽&#xff0c;图表丰富&#xff01; - 系统架构必须采用成熟、具有国…...

【数学建模】天然肠衣搭配问题

2011高教社杯全国大学生数学建模竞赛D题 天然肠衣&#xff08;以下简称肠衣&#xff09;制作加工是我国的一个传统产业&#xff0c;出口量占世界首位。肠衣经过清洗整理后被分割成长度不等的小段&#xff08;原料&#xff09;&#xff0c;进入组装工序。传统的生产方式依靠人工…...

Dockerfile实践java项目

目的&#xff1a;用java项目测试dockerfil部署&#xff08;前提是安装好了docker&#xff09; 部署准备文件如下 1. java项目 java项目demo地址 https://gitee.com/xiaoqu_12/dockerfileDemo.git 或者百度网盘直接下载打包好的jar包 链接&#xff1a;https://pan.baidu.com/s/…...

【管理咨询宝藏96】企业数字化转型的中台战略培训方案

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏96】企业数字化转型的中台战略培训方案 【格式】PDF版本 【关键词】SRM采购、制造型企业转型、数字化转型 【核心观点】 - 数字化转型是指&…...

【webrtc】MessageHandler 3: 基于线程的消息处理:以sctp测试为例

消息处理可以用于模拟发包处理G:\CDN\rtcCli\m98\src\net\dcsctp\socket\dcsctp_socket_network_test.cc 这个实现中,onMessage还是仅对了一种消息进行处理,就是接收则模式下,打印带宽。当然,可能程序有多个消息,分别在不同的onmessage中执行?SctpActor:以一个恒定的速率…...

redisson 使用脚本实现将一个队列的元素弹出并推入另一个队列的原子操作

脚本逻辑&#xff1a; 从队列1弹出元素如果存在值则推入队列2否则返回null RScript script redissonClient.getScript(); final String scriptText """local value redis.call(lpop, KEYS[1]);if value thenredis.call(rpush, KEYS[2], value);return valu…...

基于Springboot的校园新闻管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的校园新闻管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…...

Windows环境下基于CMake构建Lua

Windows环境下基于CMake构建Lua 环境&#xff01;&#xff01;&#xff01;注意&#xff1a; lua-5.4.6.tar.gz压缩包中&#xff0c;并未提供luac.c文件&#xff0c;无法构建luac.exe&#xff0c;可以从lua-5.4.5.tar.gz压缩包中拷贝使用 一、搭建基于CMake构建的Lua环境二、构…...

LLM⊗KG范式下的知识图谱问答实现框架思想阅读

分享一张有趣的图&#xff0c;意思是在分类场景下&#xff0c;使用大模型和fasttext的效果&#xff0c;评论也很逗。 这其实背后的逻辑是&#xff0c;在类别众多的分类场景下&#xff0c;尤其是在标注数据量不缺的情况下&#xff0c;大模型的收益是否能够比有监督模型的收益更多…...

ue引擎游戏开发笔记(35)——为射击添加轨道,并显示落点

1.需求分析&#xff1a; 我们只添加了开枪特效&#xff0c;事实上并没有实际的效果产生例如弹痕&#xff0c;落点等等。所以逐步实现射击的完整化&#xff0c;先从实现落点开始。 2.操作实现&#xff1a; 1.思路&#xff1a;可以这样理解&#xff0c;每次射击的过程是一次由摄…...

路由策略与路由控制

1.路由控制工具 匹配工具1&#xff1a;访问控制列表 &#xff08;1&#xff09;通配符 当进行IP地址匹配的时候&#xff0c;后面会跟着32位掩码位&#xff0c;这32位称为通配符。 通配符&#xff0c;也是点分十进制格式&#xff0c;换算成二进制后&#xff0c;“0”表示“匹配…...

JAVA版本的ATM编程问题记录

前段时间用C语言写了个银行ATM系统&#xff0c;还写了一篇文章记录了一些&#xff0c;C语言的ATM文章。后来又用IDEA写了一个JAVA版本的银行ATM。有人就会问为啥浪费这个时间写ATM呢&#xff1f;&#x1f9d0;其实是我本科代码没学好&#xff0c;所以现在想利用比较熟悉的ATM系…...

C#winfrom三层架构实现简单课程管理系统管理系统,三层架构实现增删改查

1. 项目展示 1.1登录展示 1.2添加课程信息展示 1.3课程信息管理-查询-修改-删除 1.4修改登录密码 2.项目功能介绍&#xff08;图&#xff09; 3.数据库设计 3.1 教师表设计 3.2 课程分类表 3.3 课程信息表 4. 创建样式界面 winfrom 超详细UI创建过程 实现双色球选号器UI界面…...

AI技术赋能下的视频监控方案是如何解决新能源汽车充电难问题的?

一、方案背景 刚刚结束的第十八届北京车展异常火爆&#xff0c;其中一组与汽车有关的数字让人格外关注。根据乘联会2024年4月19日公布的最新数据&#xff0c;全国乘用车市场零售达到51.6万辆&#xff0c;其中新能源车的销量约为26万辆&#xff0c;市场渗透率达到50.39%。 这意味…...

长难句打卡5.6

For H&M to offer a $5.95 knit miniskirt in all its 2,300-plus stores around the world, it must rely on low-wage overseas labor, order in volumes that strain natural resources, and use massive amounts of harmful chemicals. 翻译:H&M若要在其全球总共2…...

Windows 11下用VSCode+CMake+MinGW编译OpenCV 4.8.0,保姆级避坑指南

Windows 11下用VSCodeCMakeMinGW编译OpenCV 4.8.0全流程实战 最近在Windows 11上配置OpenCV开发环境时&#xff0c;发现很多教程都存在版本过时或Win11特有兼容性问题。本文将分享一套经过验证的最新工具链组合&#xff1a;VSCode 1.85CMake 3.28MinGW-w64 12.2OpenCV 4.8.0。不…...

Quartus中生成与烧录FPGA板载Flash的jic文件全流程解析

1. 为什么需要jic文件&#xff1f; 刚接触FPGA开发的朋友可能会疑惑&#xff1a;为什么编译生成的sof文件不能直接烧录到Flash&#xff1f;这个问题要从FPGA的特性说起。FPGA芯片内部是基于SRAM结构的&#xff0c;这意味着每次断电后配置数据都会丢失。想象一下你正在用电脑写文…...

深入TC397与TLF35584的SPI通信:从寄存器操作到汽车ECU低功耗状态管理实战

深入TC397与TLF35584的SPI通信&#xff1a;从寄存器操作到汽车ECU低功耗状态管理实战 在汽车电子领域&#xff0c;电源管理芯片的选择与配置直接关系到整车电子控制单元&#xff08;ECU&#xff09;的可靠性与能耗表现。英飞凌的TLF35584作为一款高集成度电源管理IC&#xff0c…...

Presto函数实战指南:从基础到高阶应用

1. Presto函数入门&#xff1a;从零开始掌握基础操作 第一次接触Presto函数时&#xff0c;我完全被它丰富的功能震撼到了。记得当时我需要快速分析一个包含数百万条记录的日志表&#xff0c;传统方法需要写复杂的MapReduce作业&#xff0c;而Presto仅用几行SQL函数就搞定了。下…...

爱毕业aibye精选6大AI论文平台榜单:助力高效写作与智能降重,科研工作者的得力助手!

工具名称 核心功能 特色优势 Aibiye 论文生成降AI率 全学科覆盖、仿写优化、自动图表生成 Aicheck AI检测文献综述辅助 精准查新、3分钟高效成文 GPT学术版 润色/翻译/代码解释 多模型协同、PDF深度解析 摆平论文 大纲生成降重改写 三步出稿、本硕博通用 QuillB…...

如何使用Rainmeter监控PCIe设备延迟:完整响应时间检测指南

如何使用Rainmeter监控PCIe设备延迟&#xff1a;完整响应时间检测指南 【免费下载链接】rainmeter Desktop customization tool for Windows 项目地址: https://gitcode.com/gh_mirrors/ra/rainmeter Rainmeter是一款强大的Windows桌面自定义工具&#xff0c;不仅能美化…...

二次开发入门:修改nanobot镜像适配我的OpenClaw需求

二次开发入门&#xff1a;修改nanobot镜像适配我的OpenClaw需求 1. 为什么需要定制nanobot镜像 第一次接触OpenClaw时&#xff0c;我直接使用了官方提供的标准镜像。但在实际使用中&#xff0c;发现几个痛点&#xff1a;默认的chainlit界面过于简单&#xff0c;无法展示我需要…...

智能家居控制中心:OpenClaw桥接Qwen3-32B-Chat与HomeAssistant

智能家居控制中心&#xff1a;OpenClaw桥接Qwen3-32B-Chat与HomeAssistant 1. 为什么需要AI驱动的家居控制中心 去年冬天的一个深夜&#xff0c;我被空调异常制热的噪音惊醒。摸黑在手机APP上反复调整参数无果后&#xff0c;突然意识到&#xff1a;如果有个能理解自然语言的智…...

【2026最新】AI产品经理学习路径全解析:顺序错了,努力全白费!

导语 为什么90%的人学不好AI产品经理&#xff1f; 在2025年这个AI爆发的时代&#xff0c;AI产品经理已成为最炙手可热的职业之一。然而&#xff0c;许多“转行者”却在学习过程中频频踩坑&#xff1a; 学了3个月Python却连模型调参都不会&#xff1f;看懂了Prompt Engineeri…...

清单来了:2026最新AI论文网站测评与推荐

2026年真正好用的AI论文网站&#xff0c;核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…...