自定义element-plus的弹框样式

news2025/2/24 23:06:13

项目中弹框使用频繁,需要统一样式风格,此组件可以自定义弹框的头部样式和内容

一、文件结构如下:
 

 

 二、自定义myDialog组件

需求:

1.自定义弹框头部背景样式和文字

2.自定义弹框内容

3.基本业务流程框架

components/myDialog/index.vue完整代码:

<template>
	<div class="system-user-dialog-container">
		<el-dialog center align-center v-model="state.isShow" width="769px" @close="dialogRefresh">
			<template #header="{ titleClass }">
				<div :class="titleClass">{{ state.title }}</div>
			</template>
			<el-form ref="formRef" :rules="state.rules" :model="state.formData" size="default" label-width="100px">
				<slot name="formPart">
					<div>表单内容</div>
				</slot>
			</el-form>
			<template #footer>
				<span class="dialog-footer">
					<el-button @click="onCancel" size="default">取 消</el-button>
					<el-button type="primary" @click="onSubmit(formRef)" size="default">确认</el-button>
				</span>
			</template>
		</el-dialog>
	</div>
</template>

<script setup lang="ts" name="myDialog">
import { ElMessage, FormInstance } from 'element-plus';
import { reactive, ref } from 'vue';

// 定义变量内容
const formRef = ref();

// 定义子组件向父组件传值/事件
const emit = defineEmits(['doSend']);

const state: any = reactive({
	isShow: false,
	formData: [],
	title: '',
	rules: {},
});

// 取消
const onCancel = () => {
	state.isShow = false;
};

// 提交
const onSubmit = async (formEl: FormInstance | undefined) => {
	if (!formEl) return;
	//表格验证
	await formEl.validate(async (valid: any, fields: any) => {
		if (valid) {
			emit('doSend');
		} else {
			ElMessage.warning('表格项验证失败,请检查');
			console.log('表格项验证失败!', fields);
		}
	});
	onCancel();
};

const dialogRefresh = () => {
	// 清除校验规则
	formRef.value?.resetFields();
	// 重置表单内容
	state.formData = [];
};

/*
 *   formData:表单数据
 *   title:标题
 *   rules:表单校验规则
 */
const openDialog = (formData: object, title: string, rules: object) => {
	state.isShow = true;
	state.formData = formData;
	state.title = title;
	state.rules = rules;
};

// 暴露变量
defineExpose({
	openDialog,
});
</script>
<style scoped lang="scss">
:deep .el-dialog__header {
	width: 100%;
	height: 60px;
	background-color: #5e8dff;
}

:deep .el-dialog__header .el-dialog__title {
	font-size: 20px;
	color: #fff;
}

:deep .el-dialog__header .el-dialog__close {
	color: #fff;
}
</style>

三、使用组件

实现方法:

1.通过插槽自定义弹框中的表单内容

2.父子组件传值

3.ref直接获取dom

 dialogDemo/dialog.vue完整代码:

<template>
	<div class="system-dic-dialog-container">
		<myDialog ref="myDialogRef" @doSend="handleOperate">
			<template #formPart>
				<div>自定义表单内容</div>
			</template>
		</myDialog>
	</div>
</template>

<script setup lang="ts" name="systemDicDialog">
import myDialog from '/@/components/myDialog/index.vue';
import { reactive, ref } from 'vue';

// 定义子组件向父组件传值/事件
const emit = defineEmits(['refresh']);

// 定义变量内容
const myDialogRef = ref();
const state = reactive({
	data: [],
	title: '',
	isAdd: false,
	rules: {
		// area: [{ required: true, message: '请选择区域', trigger: 'blur' }],
		// alarmValueName: [{ required: true, message: '请输入告警值名称', trigger: 'blur' }],
		// alarmValue: [{ required: true, message: '请输入告警值', trigger: 'blur' }],
		// alarmValueUnit: [{ required: true, message: '请选择告警值单位', trigger: 'blur' }],
		// alarmText: [{ required: true, message: '请输入告警提示语', trigger: 'blur' }],
	},

	dialog: {
		isShowDialog: false,
		type: '',
		title: '',
		submitTxt: '',
	},
});

const openDialog = (row: any) => {
	console.log(row, 'row');
	console.log(state.data, 'data');
	if (row) {
		state.title = '修改';
		state.isAdd = false;
	} else {
		state.title = '新增';
		state.isAdd = true;
	}
	myDialogRef.value.openDialog(state.data, state.title, state.rules);
};

// 发请求
const handleOperate = () => {
	console.log('校验成功');
	state.isAdd ? doAdd() : doEdit();
};

// 添加
const doAdd = () => {
	console.log('doAdd');
	clearFormData();
	emit('refresh');
};
// 修改
const doEdit = () => {
	console.log('doEdit');
	clearFormData();
	emit('refresh');
};

// 清空表单信息
const clearFormData = () => {
	state.data = [];
};

// 暴露变量
defineExpose({
	openDialog,
});
</script>

添加或编辑成功后,刷新页面

  dialogDemo/index.vue完整代码:

<template>
	<div class="notice-bar-container layout-pd">
		<el-button type="success" @click="handleOpenDialog">点我打开弹框</el-button>
		<openDialog ref="openDialogRef" @refresh="handleRefresh"></openDialog>
	</div>
</template>
<script setup lang="ts" name="makeDialogDemo">
import openDialog from './dialog.vue';
import { ref } from 'vue';

const openDialogRef = ref();

const handleOpenDialog = () => {
	openDialogRef.value.openDialog();
};

// 刷新页面
const handleRefresh = () => {};
</script>
<style lang="scss" scoped></style>

 

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

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

相关文章

Kubernetes(K8s)入门

一、Kubernetes是什么 Kubernetes是什么? 首先&#xff0c;它是一个全新的基于容器技术的分布式架构领先方案。这个方案虽然还很新&#xff0c;但它是谷歌十几年以来大规模应用容器技术的经验积累和升华的一个重要成果。确切地说&#xff0c;Kubernetes是谷歌严格保密十几年的…

hutool 导出复杂表头excel

假如已这样的表头导出数据 1.把包含表头的excel添加到项目资源目录 2.编写代码读取表头所在sheet,并且加入需导出的数据 /*** 导出excel*/public static void downloadExcel(List<List<Object>> list, HttpServletResponse response) throws IOException {/*Strin…

应用案例|基于三维机器视觉的机器人纸箱拆码垛应用解决方案

Part.1 项目背景 在现代物流和制造行业中&#xff0c;纸箱的拆码垛操作是一项重要且频繁的任务。传统的纸箱拆码垛工作通常由人工完成&#xff0c;这种方式存在劳动强度大、生产效率低以及人为操作容易导致错误等问题&#xff0c;严重影响物料的安全运输和质量。为了满足物流行…

无涯教程-Perl - lock函数

描述 此函数将咨询锁放在共享变量或THING中包含的引用对象上,直到该锁超出范围。 lock()是一个"弱关键字":这意味着,如果您在调用该函数之前已通过该名称定义了该函数,则将改为调用该函数。 语法 以下是此函数的简单语法- lock THING返回值 此函数不返回任何值…

操作系统搭建相关知识

系统篇 systemctl命令 常用于重启系统的每个服务&#xff0c;例如重启系统的网络&#xff0c;使用restart参数!!! 网络篇 ifconfig命令 注意&#xff1a;如果有过多块网卡&#xff0c;例如&#xff1a;eth0和eth1网卡&#xff0c;一般查看那个参数上面带有RUNNING和UP网卡开…

字节跳动推出公共DNS服务,将支持 DoH/DoT/DoQ 等协议

近日&#xff0c;字节跳动旗下的火山引擎正式上线 TrafficRoute 解析调度套件&#xff0c;其实质就是一套“公共 DNS”服务&#xff0c;目前仅支持免费版。该 DNS 后续将提供 DoH、DoT 和 DoQ 加密 DNS 查询协议。 火山引擎公共解析&#xff08;PublicDNS&#xff09;产品介绍&…

Unity UI.Image 六边形+流光 Shader

效果图 参考代码 Shader"Custom/HexFlowImage" {Properties{[PerRendererData] _MainTex ("Sprite Texture", 2D) "white" {}_Color ("Tint", Color) (1,1,1,1)_StencilComp ("Stencil Comparison", Float) 8_Stencil (…

Ebay跨境电商静电空气净化器亚马逊UL867测试标准

“室内空气净化装置”是一种耗能产品&#xff0c;用于减少密闭空间内的空气污染物浓度&#xff0c;包括 但不限于过敏原、微生物&#xff08;如细菌、真菌、病毒及其他微生物&#xff09;、尘埃、颗粒、烟气、 雾气、气体或蒸汽以及有味化学物质等。此类产品包括但不限于&#…

绕过 open_basedir

在ctfshow 72遇到的 open_basedir 所以进行学习 https://www.cnblogs.com/hookjoy/p/12846164.html#:~:text%E5%8F%AA%E6%98%AF%E7%94%A8glob%3A,%E8%83%BD%E8%AF%BB%E5%8F%96%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9%E3%80%82 上面是师傅的文章 我就跟着复现一下 0x01 首先了解…

快速开通注册企业邮箱,仅需一分钟完成!

企业邮箱是一种由企业或组织提供的电子邮件服务&#xff0c;其专业性、安全性和个性化程度都远高于普通个人邮箱。那么对于一个企业而言&#xff0c;如何开通注册一个企业邮箱呢&#xff1f;本文将为大家分享相关的知识和步骤&#xff0c;帮助企业快速开通注册自己的企业邮箱。…

SQL Server Reporting Services 报错:报表服务器无法访问服务帐户的私钥

解决这个问题&#xff0c;有小伙伴提到可以使用命令 exec DeleteEncryptedContent 但这对这边的环境时行不通的&#xff0c;我在【服务账户】的配置和【数据库】的配置中到使用了域账户&#xff0c;试了几次都不行。改成使用内置账户就好了。具体原因还没扒拉&#xff08;欢迎…

C++初阶语法——类型指示符auto和空指针nullptr

前言&#xff1a;本篇文章的重点 1.C中的类型指示符auto 2.借由auto实现的范围for 3.C为什么要创建nullptr而不是用原本的NULL。 目录 一.auto1.auto的含义及使用2.auto使用注意事项3.范围for&#xff08;重头戏&#xff09;范围for注意事项 二.nullptr 一.auto 1.auto的含义及…

项目经理必备:常用的项目管理系统推荐!

当我们成为项目负责人时&#xff0c;找到合适的工具来管理跟进项目&#xff0c;就成为了迫切需要解决的问题。一款优秀的工具&#xff0c;在项目的管理跟进中&#xff0c;起着极为重要的作用&#xff0c;一般可以付费购买专门的项目管理软件。 1.可快速切换查看不同角度的项目信…

nacos安装与启动相关问题(启动闪退和显示此站点的连接不安全)

问题&#xff1a;启动闪退 尝试&#xff1a; 使用记事本打开cmd文件&#xff0c;在文件结尾处新增两行 pause endlocal 如果还有问题&#xff1a;ERROR Nacos failed to start, please see D:\dev\nacos\logs\nacos.log for more details 尝试&#xff1a; 在nacos的bin目…

百度刘林:渗透深层企业经营 AIGC将为千行百业带来变革机会

近年来人工智能领域迅猛发展&#xff0c;随着AIGC概念的走红&#xff0c;生成式大模型技术领域硕果累累&#xff0c;尤其在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;生成式AI的大语言模型实现了理解人类意图的技术跨越。 值此行业变革的关键节点&#xff0c;深…

css3 瀑布流布局遇见截断下一列展示后半截现象

css3 瀑布流布局遇见截断下一列展示后半截现象 注&#xff1a;css3实现瀑布流布局简直不要太香&#xff5e;&#xff5e;&#xff5e;&#xff5e;&#xff5e; 场景-在uniapp项目中 当瀑布流布局column-grap:10px 相邻两列之间的间隙为10px&#xff0c;column-count:2,2列展…

mysql数据库修改权限

1、找到mysql数据库下面的user表&#xff0c;将Host改为“ % ” 2、新建查询输入“FLUSH PRIVILEGES”语句&#xff0c;运行&#xff0c;更新权限

重磅!法大大上榜《可信企业级SaaS产品能力生态目录(2023)》

近日&#xff0c;中国信息通信研究院&#xff08;以下简称“中国信通院”&#xff09;正式公布了《可信企业级SaaS产品能力生态目录&#xff08;2023&#xff09;》&#xff0c;法大大作为电子签行业领军企业荣誉上榜。 据悉&#xff0c;该目录的编制是中国信通院为了解决我国当…

深兰科技熊猫汽车牵手首恒出行,人工智能技术提升商用车运营服务

8月8日&#xff0c;深兰科技集团旗下熊猫新能源汽车(上海)有限公司(下称熊猫新能源汽车)与河南首恒出行服务有限公司(下称首恒出行)在深兰科技总部举行签约仪式&#xff0c;首恒出行将向熊猫新能源汽车年定向采购10000台商用车&#xff0c;双方将在汽车后市场领域进行技术合作。…

有人真的会去分析代码吗

很早之前使用 webpack 的时候&#xff0c;也有类似的插件&#xff0c;分析打包出来之后的代码&#xff0c;分别是哪些模块比较庞大&#xff0c;针对打包的内容进行优化。说实话&#xff0c;知道归知道&#xff0c;但是没有哪个项目使用分析过。最近刚好看见了两个插件&#xff…