将添加功能的抽屉剥离,在父组件调用思路

news2024/12/23 9:31:07

一、新建组件

新建AddRoleEditerDrawer.vue
<template>

    <div>

        <el-drawer v-model="dialog" title="添加角色" :before-close="handleClose" direction="rtl" @colse="cancelForm"

            class="demo-drawer" modal-class="add-drawer">

            <div class="drawerContent">

                <!-- 表单 -->

                <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules">

                    <el-form-item prop="roleName" label="角色名:" :label-width="formLabelWidth">

                        <el-input v-model="ruleForm.roleName" autocomplete="off" />

                    </el-form-item>

                    <!-- 按钮 -->

                    <el-form-item :label-width="formLabelWidth">

                        <el-button @click="cancelForm">取消</el-button>

                        <el-button type="primary" :loading="loading" @click="submitFom(ruleFormRef)">

                            {{ loading ? '提交中 ...' : '提交' }}

                        </el-button>

                    </el-form-item>

                </el-form>

            </div>

        </el-drawer>

    </div>

</template>
1. 这里定义了抽屉的dialog,这个变量是控制抽屉打开和关闭的。
2. 定义了:before-close,这个参数控制抽屉关闭前的动作,一般是用来清空表单
3. 定义了@close,这个参数,在关闭时进行一些操作
4. 其他的是表单内容,可以自定义修改

二、添加ts

<script setup lang="ts">

import { reactive, ref } from 'vue'

import { ElDrawer, ElMessage, ElMessageBox } from 'element-plus'

import type { FormInstance, FormRules } from 'element-plus';

import { $updateRole, $addRole } from '../../api/role.ts'

import { useRoute } from 'vue-router';

const formLabelWidth = '80px'

  

const route = useRoute()

  

const ruleFormRef = ref<FormInstance>()

const ruleForm = ref({

    roleId: null,

    roleName: ''

})

const dialog = ref(false)

const loading = ref(false)

// 控制表单规则

const validRoleNames = (rule: any, value: any, callback: any) => {

    if (value === '') {

        // 清除定时器

        loading.value = false

        callback(new Error('角色名不能为空'))

    } else {

        callback()

    }

}

// 定义规则

const rules = ref<FormRules<typeof ruleForm>>({

    roleName: [{ validator: validRoleNames, trigger: 'blur' }]

})
  

// 清空表单

const resetForm = () => {

    ruleForm.value = {

        roleId: null,

        roleName: ''

    }

}

  

// 定义传入父组件对象,

const emit = defineEmits(['success'])

const submitFom = (FormEl?: FormInstance | undefined) => {

    loading.value = true

    // 提交添加角色,获取结果

    if (!FormEl) return true

        FormEl.validate(async (valid) => {

            if (valid) {

                let ret = await $addRole(ruleForm.value)

                if (ret.code == 200) {

                    ElMessage.success(ret.msg)

                    resetForm()

                    loading.value = false

                    dialog.value = false

                    emit('success', 'add')

                }

                else {

                    ElMessage.error(`code: ${ret.code}  信息:${ret.msg}`)

                }

            }

            else {

                return false

            }

        })

}

  
  

const handleClose = (done) => {

    if (loading.value) {

        return

    }

    ElMessageBox.confirm('您想要提交再关闭吗?')

        .then(() => {

            loading.value = true

            // 提交结果

            let ret = submitFom(ruleFormRef.value)

            if (ret) {

                loading.value = false

                done()

            }

        })

        .catch(() => {

            dialog.value = false

            ElMessage.error('用户取消提交')

            ruleForm.value = {

                roleId: null,

                roleName: ''

            }

            // catch error

        })

}

  



  

// 关闭抽屉

const cancelForm = () => {

    loading.value = false

    dialog.value = false

    resetForm()

    // clearTimeout(timer)

}

  

// 打开抽屉

const open = (obj: any) => {

    dialog.value = true

}

  

defineExpose({

    open

})

</script>

这里暴露了一个open方法,参数是obj,如果想从父组件传值过来,可以通过obj传,比如编辑表单,则需要传入对应的值,这里的obj就可以收到值,从而反应到表单中。如果不传值,就直接传个空对象即可

三、父组件设置

在合适的位置添加抽屉组件
<!-- 角色添加抽屉 -->

            <AddRoleEdiderDrawer ref="AddRoleRef" @success="onSuccess"></AddRoleEdiderDrawer>
这里设置了两个参数,一个是ref=AddRoleRef,这个值,可以获取暴露的方法open
这个success可以同步方法处理结果,比如子组件在提交的时候传来了emit('success', 'add'),此时就可以根据这个add的类型,更新分页器组件,如果增加了新页,就可以更新当前页。

1.打开抽屉操作
	// 定义子组件暴露出的方法对象

const AddRoleRef = ref()

// 打开抽屉

const handleAdd = () => {
	// 传入空值,则此时子组件的obj参数是空对象,可以通过判断来采取对应的操作
    AddRoleRef.value.open({})

}
2.处理添加页面后的分页操作
	// 处理添加和编辑后的页面刷新

const onSuccess = (type:any) => {

    if (type === 'add') {
		// 调用分页器暴露出来的方法,处理当前页面变化
        pageRef.value.handleChange()

    }

}

在这里插入图片描述

结果就是这样,当添加角色后,页面会发生对应的变化
在这里插入图片描述

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

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

相关文章

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达深度摄像机的仿真小车&#xff0c;并使用通过跨平台的方式进行ROS2和UE5仿真的通讯&#xff0c;达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础&#xff0c;Nav2相关的学习教程可以参考本人的其他博…

MQ-2烟雾传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.工作原理介绍 三、程序设计 main.c文件 mq2.h文件 mq2.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 MQ-2气体传感器是一种常用的气体传感器&#xff0c;用于检测空气中的烟雾浓度。工作原理是基于半导…

App Store最低版本要求汇总

1&#xff0c;自此日期起&#xff1a; 2024 年 4 月 29 日 自 2024 年 4 月 29 日起&#xff0c;上传到 App Store Connect 的 App 必须是使用 Xcode 15 为 iOS 17、iPadOS 17、Apple tvOS 17 或 watchOS 10 构建的 App。将 iOS App 提交至 App Store - Apple Developer 2&…

天然药物化学史话:“四大光谱”在天然产物结构鉴定中的应用-文献精读46

天然药物化学史话&#xff1a;“四大光谱”在天然产物结构鉴定中的应用&#xff0c;天然产物化学及其生物合成必备基础知识~ 摘要 天然产物化学研究在药物研发中起着非常重要的作用&#xff0c;结构研究又是天然产物化学研究中最重要的工作之一。在天然药物化学史话系列文章的…

Elasticsearch:无状态世界中的数据安全

作者&#xff1a;来自 Elastic Henning Andersen 在最近的博客文章中&#xff0c;我们宣布了支持 Elastic Cloud Serverless 产品的无状态架构。通过将持久性保证和复制卸载到对象存储&#xff08;例如 Amazon S3&#xff09;&#xff0c;我们获得了许多优势和简化。 从历史上…

科研绘图系列:R语言富集散点图(enrichment scatter plot)

介绍 富集通路散点图(Enrichment Pathway Scatter Plot)是一种数据可视化工具,用于展示基因集富集分析(Gene Set Enrichment Analysis, GSEA)的结果。 横坐标是对应基因名称,纵坐标是通路名称,图中的点表示该基因在某个通路下的qvalue,可以简单理解为不同环境下的贡献…

以后写代码都是AI自动写了,Cursor+Claude-3.5-Sonnet,Karpathy 点赞的 AI 代码神器。如何使用详细教程

Cursor 情况简介 AI 大神 Andrej Karpathy 都被震惊了&#xff01;他最近在试用 VS Code Cursor Claude Sonnet 3.5&#xff0c;结果发现这玩意儿比 GitHub Copilot 还好用&#xff01; Cursor 在短短时间内迅速成为程序员群体的顶流神器&#xff0c;其背后的原因在于其默认使…

AIGC批量处理文件系列:word、pdf文件改名

1.背景 大家应该也有遇到&#xff0c;自己电脑有很多文件命名不合理的文件&#xff0c;比如&#xff1a;文件1、想法3 &#xff0c;当你长时间再看到这个文件的时候&#xff0c;已经很难知道文件内容。 今天我们将借助AIGC的编码能力&#xff0c;帮我们生成一个批量改文件名的…

【H2O2|全栈】Markdown | Md 笔记到底如何使用?【前端 · HTML前置知识】

Markdown的一些杂谈 目录 Markdown的一些杂谈 前言 准备工作 认识.Md文件 为什么使用Md&#xff1f; 怎么使用Md&#xff1f; ​编辑 怎么看别人给我的Md文件&#xff1f; Md文件命令 切换模式 粗体、倾斜、下划线、删除线和荧光标记 分级标题 水平线 引用 无序…

哪种超声波清洗机效果好?较好的超声波眼镜清洗机品牌推荐

作为一名拥有20年戴镜经验的眼镜爱好者&#xff0c;我深深体会到眼镜清洁的挑战&#xff1a;微小缝隙里的污垢难以触及&#xff0c;频繁的脏污让我苦于找不到清洁时机&#xff0c;而用力不当的擦拭方法更是可能对眼镜特别是镜片造成伤害&#xff0c;这确实让人感到苦恼&#xf…

js 写个 最简单的 chrome 插件,修改网页背景颜色

起因(目的): 阅读电子书的时候&#xff0c; 网页背景太亮了&#xff0c;看久了眼睛难受。 最近看的书是: 金瓶梅 估计至少需要2个星期才能看完。 操作步骤: 新建一个 manifest.json 文件, 填入一些信息。 “manifest_version”: 3, # 2 已经被废弃了。新建图片文件夹&#x…

JVM - Java内存区域

文章目录 目录 文章目录 运行时数据区域 程序计数器 栈 Java虚拟机栈 本地方法栈 栈帧的组成 局部变量表 操作数栈 帧数据 堆 方法区 直接内存 总结 运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存区域划分为若干个不同的数据区域。这些区…

FPGA开发:初识FPGA × 开发环境

FPGA是什么&#xff1f; FPGA的全称是现场可编程门阵列&#xff08;Field Programmable Gate Array&#xff09;&#xff0c;一种以数字电路为主的集成芯片&#xff0c;属于可编程逻辑器件PLD的一种。简单来说&#xff0c;就是能用代码编程&#xff0c;直接修改FPGA芯片中数字…

Java+Selenium+ChromeDriver谷歌版环境搭建

1、创建测试项目 创建一个Maven项目即可 2、添加Selenium依赖 最好使用Selenium3版本 3、下载对应版本的ChromeDriver 找到自己浏览器对应的版本 下载ChromeDriver&#xff08;114版本以后的&#xff0c;114版之前的直接到官网下载&#xff09;下载地址 将下载好的驱动…

Windows下Python和PyCharm的应用(六)__应用Opencv的第一个程序(图片载入)

1、首先创建一个Pycharm工程 2、然后新建一个Python file 录入基本的内容&#xff1a; import cv2imgcv2.imread(pedal.jpg)#显示图片cv2.imshow(image,img)#等待按键cv2.waitKey(0)#结束显示&#xff0c;销毁窗口cv2.destroyAllWindows()#保存图片cv2.imwrite(example2.jpg,i…

解决 Ant Design Vue Upload 组件在苹果手机上只能拍照无法选择相册的问题

最近上线发现了这个问题&#xff0c;看别的文档改了很多属性也不行&#xff0c;发现element组件就可以&#xff0c;对比之后就知道问题所在。 原因&#xff1a; 默认情况下&#xff0c;iOS 设备会将 <input type"file"> 的 capture 属性设置为 true&#xff0…

三维激光扫描点云配准外业棋盘的布设与棋盘坐标测量

文章目录 一、棋盘标定板准备二、棋盘标定板布设三、棋盘标定板坐标测量一、棋盘标定板准备 三维激光扫描棋盘是用来校准和校正激光扫描仪的重要工具,主要用于提高扫描精度。棋盘标定板通常具有以下特点: 高对比度图案:通常是黑白相间的棋盘格,便于识别。已知尺寸:每个格…

【前端】animation动画以及利用vue制作简单的透明度改变动画,包含vue生命周期实现

一. 问题描述 想做一个文字透明度从1到0然后再从0到1的css动画。 二. 代码写法 2.1 animation写法 2.1.1 animation属性key 2.1.2 代码展示 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"…

芯片解决方案--SL8541e-OpenHarmony适配方案

摘要 本文描述8541E芯片适配OpenHarmony的整体方案。 本文描述的整体方案&#xff0c;不止适用于8541e&#xff0c;也适用于该芯片厂家的其他芯片&#xff0c;如7863、7885&#xff0c;少部分子系统会略有差异。 整体方案架构 整体方案架构如下图&#xff0c;遵循OpenHarmo…

4K4D: Real-Time 4D View Synthesis at 4K Resolution 学习笔记

本文是学习4K4D的笔记记录 Project Page&#xff1a;https://zju3dv.github.io/4k4d/ 文章目录 1 Pipeline1.1 特征向量的计算1.2 几何建模1.3 外观建模⭐1&#xff09; 球谐函数SH模型2&#xff09; 图像融合技术 1.4 可微分深度剥离渲染 2 Train&#xff08;loss&#xff09;…