当前位置:网站首页 > Vue.js开发 > 正文

vue3中,封装dialog组件,实现页面级一级弹框、二级弹框和三级弹框(三)——三级弹框

vue3中,封装dialog组件,实现页面级一级弹框、二级弹框和三级弹框(三)——三级弹框

采用element-plus中的dialog组件之嵌套的对话框

https://element-plus.gitee.io/zh-CN/component/dialog.html#%E5%B5%8C%E5%A5%97%E7%9A%84%E5%AF%B9%E8%AF%9D%E6%A1%86

效果

在这里插入图片描述

3-1一级弹框

在这里插入图片描述

3-2二级弹框

在这里插入图片描述

3-3三级弹框效果

在这里插入图片描述

代码

1、引用界面

bookNum.vue

<template> <div class="container-box"> <div style="color: #fff; font-size: 24px" @click="handleNum">点击显示弹框页面</div> <!-- 统计列表 --> <BookStatistics :show-dec="true" :is-show="showBookState" @is-close="handleCloseBookStatistics" ></BookStatistics> </div> </template> <script setup lang="ts" name="bookNum"> import { ref } from "vue"; import BookStatistics from "../components/bookStatistics.vue"; //弹框界面 const showBookState = ref(false); // 打开弹框 const handleNum = () => { showBookState.value = true; }; //关闭弹框 const handleCloseBookStatistics = () => { showBookState.value = false; }; </script> <style scoped lang="scss"> .container-box { max-height: 200px; min-height: 200px; } </style> 

2、弹框界面

bookStatistics.vue

<template> <div class="root-second-box" v-if="props.isShow"> <Handle @handle-close="handleClose"></Handle> <div class="table-model"> <span @click="details()" style="color: #fff">弹框1-查看分类详情</span> <!-- 弹框1 分类 --> <el-dialog v-model="dialogVisible" width="100%" :before-close="close" :show-close="false" :fullscreen="true"> <div class="handle-box"> <img src="@/assets/svg/close.svg" alt="" srcset="" @click="detailsClose" /> </div> <!-- 弹框2 分类 --> <span @click="detailed()" style="color: #fff">弹框2-查看明细详情</span> </el-dialog> <el-dialog v-model="dialogValue" width="100%" :before-close="close" :show-close="false" :fullscreen="true"> <div class="handle-box"> <img src="@/assets/svg/close.svg" alt="" srcset="" @click="detailedClose" /> </div> <!-- 弹框3 明细 --> <span>弹框3</span> </el-dialog> </div> </div> </template> <script setup lang="ts" name="historyAlarmList"> import Handle from "@/components/common/handle.vue"; import { onMounted, ref } from "vue"; const props = defineProps({ isShow: Boolean }); onMounted(() => { // dateTime = new Date(); }); // 二级弹框 const dialogVisible = ref(false); const details = (scope: any) => { console.log(scope); dialogVisible.value = true; }; const detailsClose = () => { dialogVisible.value = false; }; // 三级弹框 const dialogValue = ref(false); const detailed = (scope: any) => { console.log(scope); dialogValue.value = true; }; const detailedClose = () => { dialogValue.value = false; }; // 关闭页面 const emit = defineEmits(["isClose"]); const handleClose = (val: boolean) => { emit("isClose", val); }; </script> <style scoped lang="scss"> :deep(.el-dialog) { .el-dialog__header { display: none; } .dj-dialog-content { padding: 0; overflow: unset; } } :deep(.el-dialog.is-fullscreen) { background: linear-gradient(#, #), linear-gradient(#010a1a, #010a1a), linear-gradient(#000000, #000000), #030e1a; } .handle-box { display: flex; position: fixed; z-index: 100; right: 172px; top: 12px; > img { width: 40px; cursor: pointer; padding: 12px; } > img:hover { background-color: #2a2d36; } } </style> 

3、公共样式

3.1、定义样式

src\styles\common.scss

// 二级页面样式 .root-second-box { position: fixed; top: 0; left: 0; z-index: 3; display: flex; align-items: center; width: 100%; height: 100%; background: linear-gradient(#, #), linear-gradient(#010a1a, #010a1a), linear-gradient(#000000, #000000), #030e1a; } // 表格公用样式 .table-model { box-sizing: border-box; width: 100%; max-width: 100%; height: auto; min-height: 80%; max-height: 100%; padding: 0 120px; } 

3.2、引入样式

src\main.ts

// CSS common style sheet (CSS通用样式表) import "@/styles/common.scss"; 

4、关闭组件界面

@/components/common/handle.vue

<template> <!-- 关闭按钮界面 --> <div class="handle-box"> <!-- <div class="close-box"> --> <img src="@/assets/svg/close.svg" alt="" srcset="" @click="handleClose" /> </div> </template> <script setup lang="ts" name="handle"> const emit = defineEmits(["handleClose"]); const handleClose = () => { emit("handleClose", false); }; </script> <style scoped lang="scss"> @import "./index.scss"; </style> 

index.scss

.handle-box{ display: flex; position: fixed; z-index: 99; right: 36px; top: 12px; > img{ width: 40px; cursor: pointer; padding: 12px; } > img:hover{ background-color: #2A2D36; } } 
到此这篇vue3中,封装dialog组件,实现页面级一级弹框、二级弹框和三级弹框(三)——三级弹框的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • vue3中,封装tag标签列中,单击进行切换分类2024-12-01 14:36:08
  • vue3中,封装表格组件——包括表格模块、关闭按钮和分页组件 & vue3传值父子用法 & ts中interface和type的用法2024-12-01 14:36:08
  • vue3中,改造环形进度条Progress 组件——显示不同颜色2024-12-01 14:36:08
  • vue2中,开源vue关系图谱组件Relation-Graph的使用——relation-graph示例2024-12-01 14:36:08
  • vue3中,echarts使用(一)——柱状图和折线图的结合使用2024-12-01 14:36:08
  • vue3中,封装dialog组件,实现页面级一级弹框、二级弹框和三级弹框(二)——二级弹框2024-12-01 14:36:08
  • vue3中,封装dialog组件,实现页面级一级弹框、二级弹框和三级弹框(一)——一级弹框 & 封装关闭按钮 & 全局定义和引入公共样式 & 页面@import引入自定义样式2024-12-01 14:36:08
  • vue中使用图像编辑器tui-image-editor(三)——示例之详细注释和组件化.md2024-12-01 14:36:08
  • VUE中,el-select选择器多选下拉框实现全选功能和取消全选2024-12-01 14:36:08
  • vue自定义指令2024-12-01 14:36:08
  • 全屏图片