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

对话框类别组件编写

形如如图所示的对话框的编写
在这里插入图片描述
在这里插入图片描述
一、基本组件的定义

<template><div><el-dialogclass="cust-dialog":title="title":model-value="show":show-close="showClose":top="top+'px'":width="width+'px'":close-on-click-modal="false":draggable="true"@close="close"><!-- :close-on-click-modal="false" 控制点击对话框外部的遮罩层是否关闭对话框。 --><!-- :draggable="true"  控制对话框是否可拖动。 --><!-- @close:这是 Vue.js 的事件监听语法,用于监听 close 事件。y一旦触发close事件,就执行父组件中的事件 --><!-- 主题内容 --><divclass="dialog-body":style="{'max-height':maxHeight+'px',padding:padding+'px'}"><slot></slot></div><div class="dialog-footer"><!-- 按钮部分 --><el-buttontype="primary"@click="close"v-if="showCancel">取消</el-button><el-button:type="btn.type || 'primary'"@click="btn.click"v-for="btn in buttons">{{ btn.text }}</el-button></div></el-dialog></div>
</template><script setup>
import { ref, reactive, getCurrentInstance, nextTick } from "vue";
const { proxy } = getCurrentInstance();
// 需要传的参数
const props = defineProps({// 标题title: {type: String,},// 是否展示对话框show: {type: Boolean,default: false,},// 控制是否显示关闭按钮(右上角的关闭 X 按钮)。如果设置为 true,showClose: {type: Boolean,default: true,},// 是否展示取消框showCancel: {type: Boolean,default: false,},// 距离顶部的距离top: {type: Number,default: 50,},// 对话框宽度width: {type: String,// 父组件宽度的30%default: "30%",},// 需要展示的按钮buttons: {type: Array,},// 内边距padding: {type: Number,default: 15,},
});
// 定义最大高度
const maxHeight = window.innerHeight - props.tops - 100;
const emit = defineEmits();
const close = () => {emit("close");
};
</script>

二、在父组件中引入

<Dialog:show="dialogConfig.show":title="dialogConfig.title":buttons="dialogConfig.buttons"width="400px":showCancel="true"@close="dialogConfig.show = false"></Dialog><script setup>
import Dialog from "./Dialog.vue"; // 引入 Dialog 组件
</script>

三、定义接口

const api={}

四、定义dialog配置

const dialogConfig = ref({show: false,title: "标题",buttons: [{type: "primary",text: "确定",click: (e) => {submitForm();},},],
});

五、定义提交表单方法

const 父组件调用表单的方法=(data)=>{dialogConfig.value.show=truenextTick(()=>{//重置表单数据formDataRef.value.resetFields()//给formData.value开辟一个新的内存地址,再把data的值push到formData.value中formData.value=Object.assign({},data)  })
}
const submitForm=()=>{数据验证.value.validate(async(valid)=>{if(!valid){return}let params={}Object.assign(params,formData.value)let result = await proxy.Request({url:api.,params:params,})if(!result){return;}dialogConfig.value.show=false//TODO})
}

submitForm 方法会首先进行表单验证 。 
 如果验证通过,表单数据 (formData.value) 会被提交到submitRequest 方法。
 submitRequest 方法模拟了一个 API 请求.

相关文章:

  • 【开源项目】Excel手撕AI算法深入理解(四):注意力机制(Self-Attention、Multi-head Attention)
  • HashMap中put方法的执行流程
  • IOS微信小程序无法显示背景图片
  • 音频识别优化(FFT)
  • 认识Vue
  • Java锁的分类与解析
  • QT6 源(34):随机数生成器类 QRandomGenerator 的源码阅读
  • 科学护理进行性核上性麻痹,缓解病痛提升生活质量
  • 用cython将python程序打包成C++动态库(windows+Vistual Studio2017平台)
  • Lombok @Builder 注解的进阶玩法:自定义 Getter/Setter 方法全攻略
  • 在没有第三方库的情况下使用 Python 自带函数解码
  • 3.串口通信之SPI
  • Java学习手册:Java内存模型
  • 22、字节与字符的概念以及二者有什么区别?
  • 【Python爬虫基础篇】--1.基础概念
  • MCP Server和Client的基本使用方法
  • halcon模板匹配(八)alignment_for_ocr_in_semiconductor
  • OCR:开启文档抽取的智能变革之门
  • 4.16 AT好题选做
  • 探索关系型数据库 MySQL
  • 央视曝光假进口保健品:警惕!保税仓发货不等于真进口
  • 魔都眼·上海车展⑥|周六客流超13.5万人次,创开展新高
  • 泽连斯基公布与特朗普会晤细节,强调实现全面、无条件停火
  • 持续更新丨伊朗港口爆炸事件已致561人受伤
  • 重新认识中国女性|婚姻,古代传统家庭再生产的根本之道
  • 湖南娄底市长曾超群,已任娄底市委书记