vue按钮弹框

news2024/9/24 17:10:19

 在Vue中实现按钮点击后弹出对话框(弹框)的功能,通常可以使用一些Vue的UI组件库,如Element UI、Vuetify、BootstrapVue等,这些库提供了丰富的组件,包括对话框(Dialog)、模态框(Modal)等,可以很方便地实现这个功能。但如果你不想使用任何UI库,也可以自己手写一个简单的弹框组件。

<template>
	<el-button type="primary" plain @click="dialogFormVisible = true">新建专辑
	</el-button>
	<el-dialog v-model="dialogFormVisible" title="新建专辑" class="el-dialog__header" style="z-index: 2065;">
		<el-form :model="form">
			<el-form-item label="名称" :label-width="formLabelWidth" style=" width: 460px;margin-top: 20px;" >
				<el-input v-model="form.name" autocomplete="off" />
			</el-form-item>
			<el-form-item label="创建人" :label-width="formLabelWidth" style=" width: 460px">
				<el-select v-model="form.region">
					<el-option label="不限" value="不限" />
				</el-select>
			</el-form-item>
			<el-form-item label="创建人" :label-width="formLabelWidth" style=" width: 460px">
				<el-select v-model="form.region">
					<el-option label="不限" value="不限" />
				</el-select>
			</el-form-item>
			<el-form-item label="权限" :label-width="formLabelWidth">
				<el-radio-button label="left">所有人可见</el-radio-button>
				<el-radio-button label="right">指定人员可见</el-radio-button>
				<el-radio-button label="top">项目人员可见</el-radio-button>
			</el-form-item>
			<div class="mt16">
				<el-form-item :label-width="formLabelWidth" style=" width: 550px">
					<el-input v-model="input" placeholder="请输入内容" :suffix-icon="Search"></el-input>
				</el-form-item>
				<div class="cascader-container left" style="margin-left: 140px;">
					<div class="cascader-title">
						<div class="tab-label "  :class="!showUser ?'action':''">部门</div>
						<div class="tab-label "  :class="showUser ?'action':''">人员</div>
<!--						<el-tabs v-model="activeName" @tab-click="handleClick">-->
<!--							<el-tab-pane label="部门" name="first" class="tab-label ">-->
<!--								1-->
<!--							</el-tab-pane>-->
<!--							<el-tab-pane label="人员" name="second" class="tab-label ">人员</el-tab-pane>-->
<!--						</el-tabs>-->

					</div>
					<div class="cascader-list">
						<div class="cascader-list member-parent">
							<div class="member-left" >
								<el-tree
									style="width: 100%;"
									:props="props"
									:load="loadNode"
									lazy
									show-checkbox
									@check-change="handleCheckChange"
								/>
							</div>
							<div class="member-right" >
								<el-checkbox v-model="checked1" label="公司" size="large" class="member-right-text"/>
							</div>
						</div>
					</div>
				</div>
				<div class="cascader-container right">
					<div class="cascader-title">
						<span>已选可见人员(0)</span>
					</div>
					<div class="cascader-list"></div>
				</div>
			</div>

<!--			<el-form-item :label-width="formLabelWidth">-->
<!--				<el-transfer-->
<!--					filterable-->
<!--					:filter-method="filterMethod"-->
<!--					filter-placeholder="请输入城市拼音"-->
<!--					v-model="value"-->
<!--					:data="data">-->
<!--				</el-transfer>-->
<!--			</el-form-item>-->
			<el-form-item label="备注(非必填)" :label-width="formLabelWidth" style="margin-top: 20px;">
				<el-input
					v-model="textarea"
					style="width: 360px; height: 64px;"
					type="textarea"
					placeholder="请输入一个备注"
				/>
			</el-form-item>

		</el-form>
		<template #footer>
			<div class="dialog__footer">
				<el-button @click="dialogFormVisible = false">取消</el-button>
				<el-button type="primary" @click="dialogFormVisible = false">
					保存
				</el-button>
			</div>
		</template>
	</el-dialog>
</template>

<script lang="ts" setup>
import { reactive, ref } from "vue";
import { Search } from "@element-plus/icons-vue";
import type Node from 'element-plus/es/components/tree/src/model/node'
const dialogFormVisible = ref(false);
const formLabelWidth = "140px";
const textarea = ref("");
const form = reactive({
	name: "",
	region: "",
	date1: "",
	date2: "",
	delivery: false,
	type: [],
	resource: "",
	desc: ""
});

const showUser = ref(false)

let count = 1

interface Tree {
	name: string
}

const props = {
	label: 'name',
	children: 'zones',
}

const handleCheckChange = (
	data: Tree,
	checked: boolean,
	indeterminate: boolean
) => {
	console.log(data, checked, indeterminate)
}

const loadNode = (node: Node, resolve: (data: Tree[]) => void) => {
	if (node.level === 0) {
		return resolve([{ name: '全选' }, { name: '全选' }])
	}
	if (node.level > 3) return resolve([])

	let hasChild = false
	if (node.data.name === 'region1') {
		hasChild = true
	} else if (node.data.name === 'region2') {
		hasChild = false
	} else {
		hasChild = Math.random() > 0.5
	}

	setTimeout(() => {
		let data: Tree[] = []
		if (hasChild) {
			data = [
				{
					name: `zone${count++}`,
				},
				{
					name: `zone${count++}`,
				},
			]
		} else {
			data = []
		}

		resolve(data)
	}, 500)
}
</script>
<style>
.cl-dialog--large.el-dialog .el-dialog__header {
	padding: 16px 32px;
	border-bottom: 1px solid #e8eaec;
}

.el-dialog .el-dialog__header {
	box-sizing: content-box;
	height: 18px;
	padding: 24px 32px 14px;
	font-size: 18px;
	font-weight: 700;
	line-height: 18px;
	border-bottom: 1px solid #e8eaec;
}

.el-dialog__header {
	padding: 20px 20px 10px;
}

.cl-dialog--large.el-dialog .el-dialog__header {
	padding: 16px 32px;
	border-bottom: 1px solid #e8eaec;
}

.el-dialog .el-dialog__header {
	box-sizing: content-box;
	height: 18px;
	padding: 24px 32px 14px;
	font-size: 18px;
	font-weight: 700;
	line-height: 18px;
	border-bottom: 1px solid #e8eaec;
}

.el-dialog__header {
	padding: 20px 20px 10px;
}
.mt16 {
	margin-top: 16px;
}
.cascader-container.right {
	width: 200px;
}
.cascader-container.left {
	width: 400px;
	margin-right: 16px;
}
.cascader-container {
	display: inline-block;
	vertical-align: top;
	background-color: #fff;
	border: 1px solid #dee4f5;
}
.cascader-title {
	height: 40px;
	padding: 0 12px;
	font-size: 14px;
	line-height: 40px;
	color: #333;
	background-color: #fafafa;
	border-bottom: 1px solid #dee4f5;
}
.cascader-list {
	width: 100%;
	height: 236px;
	overflow: auto;
	font-size: 14px;
}

.tab-label{
	display: inline-block;
	margin: 10px;
	height: 40px;
	line-height: 20px;
}
.action{
	color:blue;
	height: 20px;
	border-bottom:1px solid blue
}
.member-parent .member-left {
	box-sizing: border-box;
	width: 200px;
	height: 100%;
	padding-top: 8px;
	padding-right: 10px;
	padding-left: 10px;
	overflow: auto;
}
.member-parent .member-right {
	flex: 1;
	height: 100%;
	width: 200px;
	padding-top: 8px;
	padding-right: 10px;
	padding-left: 10px;
	overflow: auto;
	border-left: 1px solid #dee4f5;
}
.member-parent{
	overflow:hidden;
	height: 100%;
	width: 100%;
}
.member-right-text{
	margin-left: 25px;
	width: 100px;
	float:left;
	padding: 15px;
	box-sizing: border-box;
	overflow: auto;
	height: 100%;
}
.cascader-list {
	display: flex;
	overflow: hidden; /* 隐藏溢出内容 */
}

.member-parent {
	display: flex;
	width: 100%;
}

.member-left {
	flex: 1;
	overflow-y: hidden; /* 隐藏左侧元素的垂直滚动条 */
}

.member-right {
	margin-left: 10px; /* 调整右侧元素与左侧元素之间的间距 */
}


</style>

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

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

相关文章

一般中小型企业网站用哪种类型的SSL证书?

对于一般中小型企业网站&#xff0c;常用的SSL证书类型主要包括域名验证型SSL证书&#xff08;DV SSL证书&#xff09;和组织验证型SSL证书&#xff08;OV SSL证书&#xff09;。 域名验证型SSL证书&#xff08;DV SSL证书&#xff09; 特点&#xff1a; 验证简单&#xff1…

android 将新建的底部导航的demo,修改首页默认显示的字符串为helloworld。

1、先上个图&#xff0c;demo建好了以后&#xff0c;默认显示一个字符串&#xff1a; 2、这个demo的结构&#xff1a; activity_main.xml中用navGraph与其关联。 3、增加方法&#xff0c;给text赋值&#xff1a; package com.example.helloworld.ui.homeimport androidx.lifec…

三级_网络技术_53_应用题

一、 请根据下图所示网络结构回答下列问题。 1.设备1应选用__________网络设备。 2.若对整个网络实施保护&#xff0c;防火墙应加在图中位置1~3的__________位置上。 3.如果采用了入侵检测设备对进出网络的流量进行检测&#xff0c;并且探测器是在交换机1上通过端口镜像方式…

Launcher3 长按Hotseat图标,显示删除角标(红底白杠杠用于删除图标或者显示应用未读消息数量)

基于Android 13,Launcher3实现需求&#xff1a; 1. 长按Hotseat的图标显示红色删除角标 2. 点击角标&#xff0c;删除图标并保存到Database 3.点击其他地方&#xff0c;取消编辑hotseat图标模式 实现效果&#xff1a; 实现原理&#xff1a; 图标是由BubbleTextView来是实现…

剑侠情缘c#版(游戏源码+资源+工具+程序),百度云盘下载,大小1.68G

剑侠情缘c#版&#xff08;游戏源码资源工具程序&#xff09;&#xff0c;c#开发的&#xff0c;喜欢研究游戏的可以下载看看。亲测可进游戏。 剑侠情缘c#版&#xff08;游戏源码资源工具程序&#xff09;下载地址&#xff1a; 通过网盘分享的文件&#xff1a;【游戏】剑侠情缘c#…

jmeter如何把一个请求的响应中部分字段提取出来便于下个请求用

jmeter如何把一个请求的响应中部分字段提取出来便于下个请求用&#xff0c;可以通过json提取器提取&#xff0c;如果提取多个&#xff0c;就设置多个json提取。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/dd5afb1fca3f4e31b636e17e11e8dfc3.png

2.10鼠标事件

目录 实验原理 实验代码 运行结果 文章参考 实验原理 在 OpenCV 中存在鼠标的操作&#xff0c;比如左键单击、双击等。对于 OpenCV 来讲&#xff0c;用户的鼠标操作被认为发生了一个鼠标事件&#xff0c;需要对这个鼠标事件进行处理&#xff0c;这就是事件的响应。下面我们…

手机ip频繁跳动的原因是什么?手机ip地址老是变怎么解决

在当今数字化时代&#xff0c;‌手机已成为我们生活中不可或缺的一部分。‌然而&#xff0c;‌有些用户可能会遇到手机IP地址频繁变动的问题&#xff0c;‌这不仅可能影响网络连接的稳定性&#xff0c;‌还可能对特定的在线活动造成困扰。‌本文将深入探讨手机IP频繁跳动的原因…

传输大咖36 | 镭速轻松解决医疗卫生行业跨网文件传输难题

在医疗领域&#xff0c;医疗数据的关键性显而易见。病历详尽记载与医学影像数据等&#xff0c;均为确保精确诊断与治疗成效的基石。但是&#xff0c;医疗数据量的迅猛增长使得传统文件传输方法的不足之处日益凸显&#xff0c;难以跟上现代医学的步伐。特别是在跨网文件交换这一…

SSM框架之Mybatis

前言 什么是框架&#xff1f; 框架就是对技术的封装&#xff0c;将基础的技术进行封装&#xff0c;便于程序员使用&#xff0c;提高开发效率 ssm框架是什么&#xff1f; ssm包括spring、springMvc、Mybatis&#xff0c;是后端企业级开发时会使用到的框架组合&#xff0c;在…

无人机搭载高压喷水清洗绝缘子技术详解

随着电力行业的快速发展&#xff0c;高压输电线路作为电力传输的“大动脉”&#xff0c;其安全稳定运行至关重要。绝缘子作为输电线路中的重要组件&#xff0c;长期暴露于自然环境中&#xff0c;易受尘埃、鸟粪、盐雾等污染物附着&#xff0c;导致绝缘性能下降&#xff0c;甚至…

Visual Basic 6.0教程/Visual Basic从入门到实践/Visual Basic学习视频教程

Visual Basic 6.0教程/Visual Basic从入门到实践/Visual Basic学习视频教程 李天生VB从入门到精通 第一章 VisualBasic6基本介绍 第二章 VisualBasic6的数据类型与运算符表达式 第三章 VisualBasic6的内部函数 第四章 VisualBasic6的基本语句 第五章 VisualBasic6的数组 第六章…

AMC8美国数学竞赛备考:吃透625道真题和知识点(持续)

距离接下来最近的2025年AMC8美国数学竞赛还有几个月的时间&#xff0c;实践证明&#xff0c;做真题&#xff0c;吃透真题和背后的知识点是备考AMC8有效的方法之一。 2000-2024年AMC8真题和解析&#xff1a;2023年第13题 这道题的考点是分数。 题意的重点是均匀分布&#xff0c…

OpenCV绘图函数(5)绘制标记函数drawMarker()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::drawMarker 函数在 OpenCV 中用于在一个给定的位置上绘制标记。目前支持几种不同的标记类型&#xff0c;具体信息可以参考 MarkerTypes 函数…

这样图解Transformer应该没人看不懂了吧——多头注意力机制详解

这是关于Transformer系列文章的第三篇部分&#xff0c;我们将用自上而下的方式深入探讨Transformer的功能。 在前两篇文章中&#xff0c;我们已经了解了Transformer是什么、它的架构以及工作原理。 没看过的同学可以点击图片进行查看 Transformer图解1—基础与架构 Transform…

ITopologicalOperator.Intersect 直接崩软件,也不报错的解决方案

1、问题描述&#xff1a; 说多崩溃就有多崩溃&#xff0c;执行到下面这个相交分析的时候&#xff0c;就一直崩软件&#xff0c;用catch也catch不到东西&#xff0c;相同的数据放到另外一个工程中的时候&#xff0c;又是正常的&#xff0c;一直找不到原因。 2、终级方案 最终…

LLM - 自定义图像数据集 使用 LoRA 微调 图像生成 Flux 模型

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/141638928 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 在 Dif…

假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的置空队列、判断队列是否为空、入队和出队等算法。

typedef int Datatype; typedef struct queue {Datatype data;struct queue* next; }queue; //队列 typedef struct {queue* rear; }LinkQueue; //初始化 void queueinit(LinkQueue* ps) {ps->rear (queue*)malloc(sizeof(queue));if (ps->rear NULL){perror("err…

家里养宠物空气净化器有用吗,应该怎么挑选宠物空气净化器

养猫&#xff0c;无疑给了我们很多陪伴和乐趣&#xff0c;为我们的生活添上了无数温馨的色彩。然而&#xff0c;在这份甜蜜的负担中&#xff0c;猫毛的问题确实成为了不少铲屎官们共同的“小烦恼”。这些浮毛总能在你最不经意的时候&#xff0c;悄悄占领家中的每一个角落。每天…

不仅仅是文化:解决常见安全问题根源

今年&#xff0c;GitLab对DevSecOps专业人士的年度调查发现了一些与组织文化相关的问题&#xff0c;这些问题可能会阻碍工程团队和安全团队之间的更深层次协调。 大多数(58%)的安全受访者表示&#xff0c;他们很难让开发部门优先修复漏洞&#xff0c;52%的人表示&#xff0c;繁…