vue按钮弹框

 在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-treestyle="width: 100%;":props="props":load="loadNode"lazyshow-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-inputv-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 = 1interface 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 = falseif (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.mzph.cn/bicheng/52770.shtml

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

相关文章

如何使用Gogs搭建自己的git服务器

最近偶然发现一款轻量级的git服务器&#xff0c;以前一直用的svn server&#xff0c;最近想搞个git服务器&#xff0c; 用gitlab资源占用太多了&#xff0c;gogs是一款轻量级git服务器&#xff0c;非常适合个人使用。 项目地址&#xff1a;GitHub - gogs/gogs: Gogs is a painl…

图书项目要点

一、搭建项目 使用tarojs/cli进行搭建 taro init [项目名] 二、具体页面 页面声明&#xff1a; 在【app.config.ts】中对主页面进行声明&#xff1a;组件页面可以不用声明 pages: ["pages/index/index",pages/user/index,pages/book/index,], tabbar制作&…

三种tcp并发服务器实现程序

都需先进行tcp连接 1、多进程并发 2、多线程并发 3、IO多路复用并发 &#xff08;1&#xff09;select &#xff08;2&#xff09;epoll 注&#xff1a;select与epoll文件描述符限制的区别是指同时涌入的客户端数量&#xff0c;select最大只能有1024个&#xff0c;epoll可以超…

MSR810配置本地认证的有线802.1X认证

正文共&#xff1a;1567 字 15 图&#xff0c;预估阅读时间&#xff1a;2 分钟 IEEE 802.1X协议又称DOT1X协议&#xff0c;是一种基于端口的网络接入控制协议&#xff08;Port based network access control protocol&#xff09;&#xff0c;即在局域网接入设备的端口上对所接…

Django 第八课 -- 路由

目录 一. 前言 1.1. Django1.1.x 版本 1.2. Django 2.2.x 之后的版本 二. 正则路径中的分组 2.1. 正则路径中的无名分组 2.2. 正则路径中的有名分组 三. 反向解析 3.1. 普通路径 3.2. 正则路径&#xff08;无名分组&#xff09; 3.3. 正则路径&#xff08;有名分组&a…

代码随想录训练营 Day41打卡 动态规划 part08 121. 买卖股票的最佳时机 122. 买卖股票的最佳时机II 123. 买卖股票的最佳时机III

代码随想录训练营 Day41打卡 动态规划 part08 一、力扣121. 买卖股票的最佳时机 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计…

反事实推理(Counterfactual Reasoning):探索未知与决策的桥梁

反事实推理&#xff08;Counterfactual Reasoning&#xff09;&#xff1a;探索未知与决策的桥梁 反事实推理&#xff08;Counterfactual Reasoning&#xff09;是一种思维方式&#xff0c;它试图回答“如果……会怎样&#xff1f;”的问题。简单来说&#xff0c;反事实推理是…

中国料箱穿梭车玩家TOP榜单

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 料箱穿梭车前景 随着全球智慧物流建设的加速推进&#xff0c;智能仓储物流成为未来发展的重要趋势。在此背景下&#xff0c;料箱穿梭车作…

cuda,torch,paddle向下兼容

1、第一次配置yolov9模型时&#xff0c;使用的cuda的版本是11.6&#xff0c;torch和torchvision都是对应版本的 使用的tensorrt版本8.6&#xff0c;可以正常跑yolov9 其它不动&#xff0c;直接将cuda版本换为cuda11.7&#xff0c;依然可以正常运行 2、paddleseg paddle同样安…

carla unreal engine源码:如何创建radar可视化探测锥

文章目录 前言一、C实现方法1、DrawDebugCone函数2、carla工程修改3、make launch4、探测锥验证 二、蓝图实现方法1、创建并打开蓝图2、打开蓝图事件图表3、绘制蓝图事件4、编译再运行 前言 1、在自动驾驶仿真调试以及测试过程中&#xff0c;我们经常会用到雷达的探测锥&#…

OpenCV小练习:身份证号码识别

目标&#xff1a;针对一张身份证照片&#xff0c;把身份证号码识别出来&#xff08;转成数字或字符串&#xff09;。 实现思路&#xff1a;需要将目标拆分成两个子任务&#xff1a;(1) 把身份证号码区域从整张图片中检测/裁剪出来&#xff1b;(2) 将图片中的数字转化成文字。第…

快速学习go-zero

go的web框架有很多,目前go的社区大家对于框架的态度也不尽相同,有些轻量级的框架,但是也就代表整合第三方中间件就需要自己根据客户端进行封装,比如gingorm,也有些功能完全但是被认为丢失了go本身轻量设计的初衷, 比如goframe,而同样的微服务有很多框架,国内比较出门的就是go-z…

rockyliunx 救援模式下禁用docker

目录地址 /usr/lib/systemd/system/docker.service 进入系统界面&#xff1a; 选择系统 按E 按e出现 如下界面&#xff0c;找到 quite 后面添加 init/bin/bash 按 ctrl x 保存 后&#xff0c;到如下界面 加载文件系统为读写 输入命令 mount -o remount, rw / 修改docer.s…

docker的安装+docker镜像的基本操作

一&#xff0e;docker的介绍 1、Docker 是什么&#xff1f; Docker 是⼀个开源的应⽤容器引擎&#xff0c;可以实现虚拟化&#xff0c;完全采⽤“沙 盒”机制&#xff0c;容器之间不会存在任何接⼝。 Docker 通过 Linux Container&#xff08;容器&#xff09;技术将任意…

【线程池】

什么是线程池&#xff1f; 线程池是一个可以复用线程的技术。简单来说&#xff0c;线程池是一种基于池化技术的思想来管理线程的技术&#xff0c;旨在减少线程的创建和销毁次数&#xff0c;提高系统的响应速度和吞吐量。它预先创建了一定数量的线程&#xff0c;并将这些线程放…

Java中的定时器(Timer)

目录 一、什么是定时器? 二、标准库中的定时器 三、实现自定义定时器 一、什么是定时器? 定时器就像一个"闹钟"&#xff0c;当它到达设定的时间后&#xff0c;就会执行预定的代码。 例如&#xff0c;我们在TCP的超时重传机制中讲过&#xff0c;如果服务器在规定…

DNS劫持问题

目录 DNS劫持概述 定义 图示 ​编辑图示说明 DNS劫持的原理 1. DNS请求与响应过程 图示 ​编辑2. 劫持发生点 本地劫持 路由器劫持 中间人攻击 图示 ​编辑图示说明 DNS劫持的影响 1. 对个人用户的影响 图示 ​编辑图示说明 2. 对企业的影响 图示 ​编辑图示…

0828作业+梳理

一、作业 代码&#xff1a; #include <iostream>using namespace std;using datatype int; //类型重命名 #define MAX 2 //宏定义 //结构体定义 struct Sqlist { private:datatype *data; //顺序表数组int size 0; //数组大小int len 0; …

Ubuntu 16.04下Firefox版本更新

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; 在Ubuntu 16.04上更新Firefox的过程可能涉及多个步骤&#xff0c;具体取决于你的需求&#xff0c;比如是要安装一个稳定版本&#xff0c;还是需要使用最新的开发者版本或beta版本。下面我将详细介绍如何在Ub…