element树形组件使用之数据授权

news2025/2/23 12:50:33

<template>
	<div>
		<el-card class="tree-card">
			<p class="title">数据授权</p>
			<div class="box">
				<div class="tree">
					<div class="member">选择授权人员</div>
					<div class="search">
						<div class="input">
							<el-input
								placeholder="请输入人员名称进行搜索"
								prefix-icon="el-icon-search"
								v-model="input2"
							>
							</el-input>
						</div>
						<div class="search-btn">
							<el-button type="primary" @click="handleSearch">搜索</el-button>
						</div>
					</div>
					<div class="function">
						<p>功能权限</p>
					</div>
					<el-tree :data="filteredData" node-key="id">
						<span class="custom-tree-node" slot-scope="{ node, data }">
							<span>{{ node.label }}</span>
							<span>
								<el-checkbox
									v-model="data.preview"
									@change="printNodeProperties(node, data, 'preview')"
									>预览</el-checkbox
								>
								<el-checkbox
									v-model="data.download"
									@change="printNodeProperties(node, data, 'download')"
									>下载</el-checkbox
								>
							</span>
						</span>
					</el-tree>
				</div>
				<div class="databox">
					<div class="data">选择授权数据</div>
					<div class="search">
						<div class="input">
							<el-input
								placeholder="请输入文件名称进行搜索"
								prefix-icon="el-icon-search"
								v-model="input"
							>
							</el-input>
						</div>
						<div class="search-btn">
							<el-button type="primary" @click="handleSearch1">搜索</el-button>
						</div>
					</div>
					<div class="drprojectTable">
						<el-table
							ref="table"
							:data="filteredTableData"
							row-key="id"
							class="drline"
							:header-cell-style="rowClass"
							style="width: 100%"
							@selection-change="handleSelectionChange"
						>
							<el-table-column type="selection"> </el-table-column>
							<el-table-column label="序号" type="index" prop="id">
							</el-table-column>
							<el-table-column prop="name" label="文件名称"> </el-table-column>

							<el-table-column prop="organize" label="所属组织">
							</el-table-column>
							<el-table-column prop="filetype" label="文件格式类型">
							</el-table-column>
						</el-table>
						<!-- 分页组件 -->
						<div class="drblock">
							<el-pagination
								:current-page="currentPage"
								:background="true"
								:page-sizes="[10, 20]"
								:page-size="pageSize"
								layout=" prev, pager, next,sizes, jumper"
								:total="total"
							>
							</el-pagination>
						</div>
					</div>
				</div>
			</div>
			<div class="button">
				<el-button>取消</el-button>
				<el-button type="primary" style="margin-left: 3vw">确定</el-button>
			</div>
		</el-card>
	</div>
</template>

<script>
let id = 1000

export default {
	name: 'OrganizeMaintain',
	data() {
		const data = []

		return {
			data: JSON.parse(JSON.stringify(data)),
			data: JSON.parse(JSON.stringify(data)),
			checkAll: false,
			checkedCities: [],
			tableData: [],
			multipleSelection: [],
			input2: '', // 用于存储搜索关键字
			filteredData: [], // 用于存储过滤后的数据
			filteredTableData: [],
			input: '',
			checked: '',
			nodesWithPreview: [], // 存储具有 preview 为 true 的节点
			nodesWithDownload: [], // 存储具有 download 为 true 的节点
			selectedNodes: [], // 用于存储所有preview被选中的节点
			selectedNodes1: [], // 用于存储所有download被选中的节点
		}
	},

	methods: {
		handleSearch1() {
			const searchText = this.input.trim().toLowerCase()
			console.log(searchText)
			if (searchText === '') {
				// 如果搜索关键字为空,则显示全部数据
				console.log(this.tableData)
				this.filteredTableData = this.tableData
			} else {
				// 根据搜索关键字筛选数据
				this.filteredTableData = this.tableData.filter((row) => {
					return row.name.toLowerCase().includes(searchText)
				})
			}
		},
		rowClass({}) {
			return 'background:#F0F0F0'
		},
		handleSelectionChange(selection) {
			// `selection`参数是选中的行数据数组
			console.log(selection)

			// 如果你需要获取所有选中行的特定属性,可以使用map函数
			const selectedIds = selection.map((row) => row.id)
			console.log(selectedIds)
		},
		collectPreviewNodes(node) {
			if (node.preview) {
				this.selectedNodes.push(node)
			}
			if (node.children && node.children.length > 0) {
				node.children.forEach((childNode) => {
					this.collectPreviewNodes(childNode)
				})
			}
		},
		collectDownloadNodes(node) {
			if (node.download) {
				this.selectedNodes1.push(node)
			}
			if (node.children && node.children.length > 0) {
				node.children.forEach((childNode) => {
					this.collectDownloadNodes(childNode)
				})
			}
		},
		printNodeProperties(node, data, type) {
			if (type === 'preview') {
				this.selectedNodes = [] // 清空之前收集的节点
				this.filteredData.forEach((rootNode) => {
					this.collectPreviewNodes(rootNode) // 递归收集节点
				})
				// 所有具有预览功能的节点
				console.log('具有 preview 为 true 的节点:', this.selectedNodes)
				const preview = this.selectedNodes.map((item) => item.id)
				console.log(preview)
			} else if (type === 'download') {
				this.selectedNodes1 = [] // 清空之前收集的节点
				this.filteredData.forEach((rootNode) => {
					this.collectDownloadNodes(rootNode) // 递归收集节点
				})
				// 所有具有下载功能的节点
				console.log('具有 download 为 true 的节点:', this.selectedNodes1)
				const download = this.selectedNodes1.map((item) => item.id)
				console.log(download)
			}
		},
		collectNodes(type) {
			if (type === 'preview') {
				this.nodesWithPreview = this.filteredData.filter((node) => node.preview)
				console.log('具有 preview 为 true 的节点:', this.nodesWithPreview)
			} else if (type === 'download') {
				this.nodesWithDownload = this.filteredData.filter(
					(node) => node.download
				)
				console.log('具有 download 为 true 的节点:', this.nodesWithDownload)
			}
		},
	},
	created() {
		this.filteredData = this.data
		this.filteredTableData = this.tableData
	},
}
</script>

<style scoped lang="scss">
.custom-tree-node {
	flex: 1;
	display: flex;
	align-items: center;
	justify-content: space-between;
	font-size: 14px;
	padding-right: 8px;
}
.tree-card {
	overflow-y: auto; /* 开启滚动显示溢出内容 */
	width: 100%;
	height: 88vh;
	.title {
		height: 40px;
		line-height: 40px;
		font-size: 22px;
		font-weight: bold;
	}
	.box {
		display: flex;
		margin-top: -6vh;
		.tree {
			width: 45%;
			margin-right: 5%;
			height: 77vh;
			overflow-y: auto;
			.search {
				display: flex;
				margin-top: -11vh;
				.input {
					width: 30vw;
					margin-right: 3vw;
				}
			}
			.function {
				margin-left: 29vw;
				margin-top: -8vh;
				p {
					height: 22px;
					line-height: 22px;
					margin-top: 5vh;
					margin-bottom: 1vh;
				}
			}
		}
		.databox {
			width: 50%;
			height: 77vh;
			overflow-y: auto;
			.search {
				display: flex;
				margin-top: -11vh;

				.input {
					width: 30vw;
					margin-right: 4vw;
					margin-left: 1vw;
				}
			}
			.checkbox {
				display: flex;
				margin-top: 2vh;
			}
			.drprojectTable {
				width: 95%;
				margin-left: 2%;
				margin-top: -5vh;
				::v-deep .el-table thead {
					line-height: 22px;
				}
				.drblock {
					margin-top: 35px;
					height: 60px;
					margin-bottom: 0px;
					text-align: right;
				}
				.drline {
					line-height: 35px;
				}
				.sort {
					display: inline-flex;
					flex-direction: column;
					align-items: center;
					height: 34px;
					width: 24px;
					vertical-align: middle;
					cursor: pointer;
					overflow: initial;
					position: relative;
					.sort-cart {
						width: 0;
						height: 0;
						border: 5px solid transparent;
						position: absolute;
						left: 7px;
						.ascending {
							border-bottom-color: #c0c4cc;
							top: 5px;
						}
						.descendign {
							border-top-color: #c0c4cc;
							bottom: 7px;
						}
					}
				}
				.sort:hover {
					cursor: pointer;
				}
				.label {
					display: flex;
					margin-left: 15px;
				}
			}
		}
	}
	.button {
		// margin-top: 13vh;
		height: 40px;
		line-height: 40px;
		display: flex;
		align-items: center;
		justify-content: center;
	}
}

.list-card {
	overflow-y: auto; /* 开启滚动显示溢出内容 */
	width: 98%;
	height: 88vh;
	.checkbox {
		display: flex;
		margin-top: 2vh;
	}
}
</style>

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

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

相关文章

电压放大电路的作用有哪些(电压放大器)

电压放大电路是电子电路中常见且重要的组件&#xff0c;其主要作用是将输入信号的电压放大到所需的输出电压级别&#xff0c;并保持输入信号的形状和准确度。电压放大电路广泛应用于各种电子设备和系统中&#xff0c;具有以下几个重要的作用&#xff1a; 信号放大&#xff1a;电…

算法通关村第14关【白银】| 堆的经典问题

1.数组中的第k个最大元素 思路&#xff1a; 最直观的就是选择法&#xff0c;遍历一k次找到第k大的数之前使用快速排序的思想每次找出一个位置&#xff0c;会超时这里使用堆&#xff08;优先队列&#xff09;&#xff0c;找最大用小堆&#xff0c;找最小用大堆。 例如找第k大的…

Mysql——压缩包方式安装教程

一.Mysql压缩包下载方式 zip版&#xff08;5.7及8.0&#xff09;的下载需到官方网站下载&#xff0c;不同版本对应能安装在不同的操作系统下&#xff0c;本次介绍的是mysql-8.0.30-winx64在win10下的安装方式。 下载网址&#xff1a;MySQL :: Download MySQL Community Server …

java版网页代码生成器系统myeclipse定制开发mysql数据库网页模式java编程jdbc生成无框架java web网页

一、源码特点 java版网页代码生成器系统是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&#xff0c;使…

D. Boris and His Amazing Haircut

Problem - D - Codeforces 问题描述&#xff1a;剪发&#xff0c;将数组a减为数组b&#xff0c;有m个剪刀&#xff0c;每个剪刀只可以用一次且可以在任意区间内剪发&#xff0c;将长度大于mi的减为mi。现在有m数组&#xff0c;数组元素是第i个剪刀可以剪到mi&#xff0c;问能否…

app发布动态解决图片适配问题(等比展示)

#前言 最近在用uni-app写一个移动端的小项目&#xff0c;基本上就是登陆注册、发表动态等&#xff0c;但是发表动态一个最大的问题就是图片的展示问题&#xff0c;因为每个人上传的图片大小是不一样的。 1.如果按照一定的尺寸固定图片宽高&#xff0c;那如果图片规格不符合要求…

第一章:最新版零基础学习 PYTHON 教程(第六节 - Python 中的命名空间和作用域)

什么是命名空间&#xff1a; 命名空间是一个为 Python 中的每个对象都有唯一名称的系统。对象可能是变量或方法。Python 本身以 Python 字典的形式维护一个命名空间。让我们看一个例子&#xff0c;计算机中的目录文件系统结构。不用说&#xff0c;可以有多个目录&#xff0c;每…

关于Allegro17.4 3d模型大小不匹配问题解决

文章目录 问题概述问题原因解决办法 问题概述 Allegro 17.4版本采用 3D Canvas 工具进行3D模型的映射&#xff0c;映射后&#xff0c;无需保存任何映射文件&#xff0c;只要指定好step文件路径&#xff0c;即可将模型映射信息保存在pcb封装文件中&#xff0c;方便快捷。映射流…

idea集成tomcat(Smart Tomcate插件安装)

当我们在 tomcat 上部署好一个 webapp 后&#xff0c;如果我们要修改代码&#xff0c;就需要重新进行打包和部署&#xff0c;但往往在工作中是需要频繁修改代码&#xff0c;然后再查看成果的&#xff0c;就需要反复的进行打包和部署的过程&#xff0c;这是很麻烦的 通过 Smart …

WebGIS开发教程:Openlayers常见功能实现

Openlayers的核心 Openlayers如何实现交互式绘制 创建矢量图层和矢量数据源 - 创建画布 创建画笔 激活画笔 如何加载天地图,设置中心点和显示级别 const TianDiMap_cva new ol.layer.Tile({ title:"天地图矢量注记图层", source:new ol.source.XYZ({ url:htt…

企业诊断屋:二手车交易平台 APP 如何用 AB 测试赋能业务

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 2023年汽车行业新车市场低靡&#xff0c;由新车降价引发的车辆价格波动很快传导到二手车市场&#xff0c;二手车的交易也受到了冲击&#xff0c;收车验车更加谨慎&a…

IT行业未来三年最靠谱的职业方向选择,一定要看完!

近些年“互联网”模式不断发展&#xff0c;以信息化带动传统产业的升级中&#xff0c;社会对IT互联网人才的需求量也在不断增加。随着AI、大数据、人工智能、云计算的兴起&#xff0c;也为对新兴事物充满兴趣热爱和探索的年轻人带来了更多的就业机会&#xff0c;在很大程度上激…

【python】系列之item.taobao 获取商品详情API接口调用

item.taobao 获取商品详情API接口调用 API从技术角度来说就是应用程序编程接口。通过API我们可以直接获取一些我们需要的数据结果&#xff0c;而不需要自己编写相应的程序&#xff0c;有点类似模块化调用函数&#xff0c;大大加快了我们编程的速度。当然这个数据传输是需要网络…

【Graph Net学习】DeepWalk/Node2Vec实现Graph Embedding

一、简介 本文主要通过代码实战介绍基础的两种图嵌入方式DeepWalk、Node2Vec。 DeepWalk&#xff08;KDD 2014&#xff09;&#xff1a;首个影响至今的图的Embedding算法&#xff0c;DeepWalk算法是一种用于学习节点表示的方法&#xff0c;常用于网络图中的节点的嵌入表示。 模…

桌面版Teams,打开后一直卡在“正在加载Microsoft Teams”界面

清除Teams缓存的解决办法&#xff1a; 1.完全退出Teams桌面客户端。您可以通过右击桌面右下角的Teams图标并选择“退出”&#xff1b;或在任务管理器中完全结束Teams进程。 2.请至文件浏览器&#xff0c;并输入%appdata%\Microsoft\teams&#xff1b;或前往System (C:) > Us…

解锁前端Vue3宝藏级资料 第五章 Vue 组件应用 2 ( Emit )

本章带领大家理解组件、props、emits、slots、providers/injects&#xff0c;Vue 插件 等Vue组件使用的基础知识。 第一章 Vue3项目创建 1 Vue CLI 创建vue项目 第一章 Vue3项目创建 2 使用 Webpack 5 搭建 vue项目 第一章 Vue3项目创建 3 Vite 创建 vue项目 第二章 Vue3 基础语…

Denoising diffusion implicit models 阅读笔记

Denoising diffusion probabilistic models (DDPMs)从马尔科夫链中采样生成样本&#xff0c;需要迭代多次&#xff0c;速度较慢。Denoising diffusion implicit models (DDIMs)的提出是为了加速采样过程&#xff0c;减少迭代的次数&#xff0c;并且要求DDIM可以复用DDPM训练的网…

浅谈xss

XSS 简介 XSS,全称Cross Site Scripting,即跨站脚本攻击,是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。需要强调的是,XSS不仅…

vue项目嵌套安卓壳子打包apk

1.确保你的项目可以正常运行 2.vue.config.js publicPath 添加一个 publicPath:./, 3.需要下载一个HBuilder X编辑器 下载地址&#xff1a;HBuilderX-高效极客技巧 4.新建一个项目 选择5App 创建完成之后删除掉红框内的文件 只保留一个manifest.json 5.把自己要变成ap…

iTOP-RK3588开发板更新RKNN模型

RKNN 是 Rockchip NPU 平台(也就是开发板)使用的模型类型&#xff0c;是以.rknn 结尾的模型文件。 RKNN SDK 提 供 的 demo 程 序 中 默 认 自 带 了 RKNN 模 型 &#xff0c; 在 RKNN SDK 的 examples/rknn_yolov5_demo/model/RK3588/目录下&#xff0c;如下图所示&#xff…