elementui在任意页面点击消息,弹出消息对应页面处理弹窗

server/2024/12/23 23:31:49/

需求:在系统的任意页面点击消息都能弹出对应页面中的操作弹窗

思路:

1、创建一个全局组件,这个组件要能在任何地方都被打开(所以放在了app.vue页面)

2、使用component 组件找到要打开的页面路径

3、在被打开的页面中创建方法并暴露出去,使第二步找到组件后能调用方法打开相应的弹窗

        3.1、打开页面后要将页面中所有html都隐藏只保留弹窗

 不足:这样会导致一个问题就是再打开的时候其实是两个页面,性能相对不好,并且也会加载被打开页面中的所有方法,这样浪费性能但是代码上统一性,而且也不会出现部分组件弹窗依赖接口太多需要一个一个写进去的问题

封装全局显示组件:

javascript"><template><component v-if="dynamicComponent"ref="dynamicComponentRef":parentObj="parentObj":is="dynamicComponent.default"></component>
</template>
<script setup lang="ts">
const dynamicComponentRef: any = ref<HTMLElement | null>(null);
const dynamicComponent = ref<null | any>(null);
const parentObj = ref<msgUrlParams>();
// 预加载所有文件并映射地址
const modules = import.meta.glob('./views/**/*.vue');
const loadComponent = async (configObj: msgUrlParams) => {parentObj.value = configObj;try {dynamicComponent.value = await load(configObj.url);await nextTick();// 调用找到的组件的eventStack方法dynamicComponentRef.value?.eventStack(configObj);} catch (error) {console.error('加载组件失败:', error);dynamicComponent.value = null;}
};
const load = async (componentPath: string) => {try {// 使用 import.meta.glob 加载组件const path = componentPath.replace(/\.vue$/, '');const componentLoader = modules[`./views/${path}.vue`];if (!componentLoader) throw new Error(`Component not found: ${path}`);const module = await componentLoader();return module;} catch (error) {console.error('加载组件失败:', error);return null;}
};
defineExpose({loadComponent
});
</script>

在app.vue页面引入这个组件:

javascript"><HandleDialog ref="dialogRef"style="position: absolute;bottom:0 ;padding: 0;" />// 消息弹窗
const dialogRef: any = ref<HTMLElement | null>(null);
const loadComponent = async (configObj: msgUrlParams) => {dialogRef.value.loadComponent(configObj);
};// 将app.vue的方法注入到全局使得全局组件都能调用
provide('loadComponent', loadComponent);

调用:(如消息中心页面,首页的消息推送地方)

javascript">// 消息弹窗Url参数
interface msgUrlParams {eventId: string,//消息事件idurl: string,//跳转urleventType: number,// '0:view'|'1:audit' | 'edit' | 'add' , // 事件类型eventParams: any,// 其他信息}
// 引入app的依赖
const loadComponent = inject('loadComponent') as any;
// 点击事件
const click(item:msgUrlParams)=>{const obj = {eventId: item.dataId, // 页面中弹窗数据的idurl: item.msgLink, // 页面的路径eventType: item.msgState, // 处理状态};loadComponent(obj);
}

被调用的组件增加方法:

javascript">const isShowList = ref<boolean>(true);// 是否显示背景(把页面中的背景全部隐藏掉,这样加载这个组件的时候就会只显示弹窗了)
const eventStack = async (parentObj: msgUrlParams) => {isShowList.value = false;// 根据传入的操作事件 id 获取到操作事件的详情const res = await getMaint(parentObj.eventId);// 根据状态判断是调用哪个弹窗的方法if (parentObj.eventType == 1) {handleFlowCheck(res.data);} else if (parentObj.eventType == 0) {printView(res.data);} else if (parentObj.eventType == 2) {handleAdd();}
};

记得要把页面给隐藏了,弹窗还是能正常弹出


http://www.ppmy.cn/server/152608.html

相关文章

大数据新视界 -- Hive 数据仓库:架构深度剖析与核心组件详解(上)(1 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

ExcelVBA编程输出ColorIndex与对应颜色色谱

标题 ExcelVBA编程输出ColorIndex与对应颜色色谱 正文 解决问题编程输出ColorIndex与对应色谱共56&#xff0c;打算分4纵列输出&#xff0c;标题是ColorIndex,Color,Name 1. 解释VBA中的ColorIndex属性 在VBA&#xff08;Visual Basic for Applications&#xff09;中&#xff…

虚拟机VMware的安装问题ip错误,虚拟网卡

要么没有虚拟网卡、有网卡远程连不上等 一般出现在win11 家庭版 1、是否IP错误 ip addr 2、 重置虚拟网卡 3、查看是否有虚拟网卡 4、如果以上检查都解决不了问题 如果你之前有vmware 后来卸载了&#xff0c;又重新安装&#xff0c;一般都会有问题 卸载重装vmware: 第一…

【Java计算机毕业设计】基于Springboot小药店销售管理系统【源代码+数据库+LW文档+开题报告+答辩稿+部署教程+代码讲解】

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统&#xff1a;Window操作系统 2、开发工具&#xff1a;IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

deepin 安装 habse

deepin 安装 habse 创建软件目录 mkdir -p /home/lhz/opt cd /home/lhz/opt下载软件 wget https://dlcdn.apache.org/hbase/2.6.1/hbase-2.6.1-hadoop3-bin.tar.gz解压 hbase tar -zxvf hbase-2.6.1-hadoop3-bin.tar.gz修改 hbase 目录名称 mv hbase-2.6.1-hadoop3 hbase-…

通过Canvas获得视频某一帧

原生js的video标签并没有直接获得某一个时间视频内容的功能&#xff0c;但我们可以结合画布canvas来提取视频内容。这样也能用于获得视频封面等等功能 <template><div><!-- 视频文件上传输入框 --><video ref"videoEle" src"视频链接"…

基于koa服务端脚手架搭建(文件加载器) --【elpis全栈项目笔记】

基于koa服务端脚手架(文件加载器) --【elpis-core】 前言&#xff1a; elpis-core 是一个项目文件加载器。基于一定的约定&#xff0c;将功能不同的代码分类放置到不同的目录下管理。适用于项目代码规范化、减少维护成本、沟通成本&#xff0c;易于扩展。&#xff08;简易版的 …

PHP医院安全(不良)事件管理系统源码,通过运用RCA分析工具,借助柏拉图、鱼骨图等分析工具,分析问题产生的根本原因

医院安全&#xff08;不良&#xff09;事件管理系统采用无责的、自愿的填报不良事件方式&#xff0c;有效地减轻医护人员的思想压力&#xff0c;实现以事件为主要对象&#xff0c;可以自动、及时、实际地反应医院的安全、不良、近失事件的情况&#xff0c;更好地掌握不良事件的…