Vue3+express实现动态编辑element-plus组件tag标签和select下拉框

news2025/1/11 5:56:12

需求是利用element-plusd的组件标签tag去实现增加部门的种类,效果图如下:
①在系统设置中添加/删减对应的部门
其他设置
②在部门下拉框中弹出自己设置的部门
下拉框
实现的思路是:通过系统设置中的部门设置增删部门,更新数据库中的部门设置字段,再通过获取数据库中的数据渲染至下拉框中

实现的难点在于:tag标签的数据类型是一个数组类型
例如:["总裁办","产品部","销售部","组织部"]

这里需要注意的是上传到数据库中,数组需为字符串形式

然后是下拉框的数据类型是数组包裹着对象,例如下面所示:

const options = [
  {
    value: 'Option1',
    label: 'Option1',
  },
  {
    value: 'Option2',
    label: 'Option2',
  },
]

所以需要把数组类型转换成这种数组包裹着对象的类型

首先是tag的标签部分的代码:
template部分

<div class="department-set">
	<span>部门设置</span>
	<!-- disable-transitions是否禁用渐变动画 -->
	<!-- closable是否可关闭 -->
	<!-- close关闭 Tag 时触发的事件 -->
	<el-tag v-for="tag in dynamicTags" :key="tag" class="mx-1" closable
		:disable-transitions="false" @close="handleClose(tag)">
		{{ tag }}
	</el-tag>
	el-input v-if="inputVisible" ref="InputRef" v-model="inputValue" class="ml-1 w-20"
		size="small" @keyup.enter="handleInputConfirm" @blur="handleInputConfirm" />
	<el-button v-else class="button-new-tag ml-1" size="small" @click="showInput">
		+ 添加部门组织
	</el-button>
</div>

script部分 (组合式setup Ts)

// 其他设置 部门标签
const inputValue = ref('')
// dynamicTags 即为tag中的数据
const dynamicTags = ref()
// element-plus中自带的
const inputVisible = ref(false)
// element-plus中自带的
const InputRef = ref<InstanceType<typeof ElInput>>()

// 删减部门
const handleClose = async (tag : string) => {
	// splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。
	// 第一个参数为位置,第二个为删除的个数
	// setdepartment为更新tag的接口
	// 因为dynamicTags里面的数据是代理的,所以传参的时候需要变为原始数据
	// JSON.stringify把参数变为字符串进行传参到接口
	dynamicTags.value.splice(dynamicTags.value.indexOf(tag), 1)
	const res = await setdepartment(JSON.stringify(toRaw(dynamicTags.value)))
	// res为后端设置的返回数据
	if (res == '设置成功') {
		ElMessage({
			message: '移除部门成功',
			type: 'success',
		})
	} else {
		ElMessage.error('移除部门失败,请检查网络是否通畅')
	}
}

// 显示输入内容 组件自带的参数
const showInput = () => {
inputVisible.value = true
	nextTick(() => {
		InputRef.value!.input!.focus()
	})
}

// 添加部门
const handleInputConfirm = async () => {
	if (inputValue.value) {
		dynamicTags.value.push(inputValue.value)
		// 再次提醒:从Reactive或Ref中得到原始数据
		// 把数组转换成json格式
		const res = await setdepartment(JSON.stringify(toRaw(dynamicTags.value)))
		if (res == '设置成功') {
			ElMessage({
				message: '添加部门成功',
				type: 'success',
			})
		}else {
			ElMessage.error('添加部门失败,请检查网络是否通畅')
		}
	}
	inputVisible.value = false
	inputValue.value = ''
}

然后是用户界面下拉框的实现逻辑:
template部分

<el-select v-model="department" 
class="m-2" 
clearable 
placeholder="选择部门进行筛选" 
@change='searchOfDepartment'
ar='clearSelect'>
<el-option
	 v-for="item in options"
	:key="item.value"
	:label="item.value"
	:value="item.value"
	/>
</el-select>

script部分 (组合式setup TS)

	// 部门数据
const options = ref([])
/ 选中的部门
const department = ref()
// 获取部门数据
const getdepartmentlist = async () => {
	const res = await getdepartment()
	const data = []
	// 把数组的每一项都取出来,变成一个单独的对象,再把这个对象push进新数组
// 不要把obj放在for循环外,不然输出的数组内容都是最后一个数据,初级知识这里不再叙述
	for(let i=0;i<res.length;i++){
		let obj = {
			value:res[i]
		}
		data.push(obj)
	}
	options.value = data
}
// 调用上面的函数
getdepartmentlist()

涉及的三个接口如下(前端部分):

// 用户所属部门设置
export const setdepartment = tags => {
	return instance({
		url: '/set/setDepartment',
		method: 'POST',
		data: {tags}
	})
}

// 获取所有部门
export const getdepartment = () => {
	return instance({
		url: '/set/getDepartment',
		method: 'POST',
	})
}

// 根据部门去筛选用户
export const searchofdepartment = (department) => {
	return instance({
		url: '/set/departmentUser',
		method: 'POST',
		data:{department}
	})
}

涉及的三个接口如下(后端部分):

// 用户所属部门设置
exports.setDepartment = (req, res) => {
	// res.send(req.body.tags)
	const userinfo = req.body
	const name = '部门设置'
	const sql = 'update setting set set_value = ? where set_name = ?'
	db.query(sql, [userinfo.tags, name], (err, result) => {
		if (err) return res.cc(err)
		res.send('设置成功')
	})
}

// 设置获取所有部门
exports.getDepartment = (req, res) => {
	const userinfo = req.body
	const name = '部门设置'
	const sql = 'select set_value from setting where set_name = ? '
	db.query(sql, name, (err, result) => {
		if (err) return res.cc(err)
		res.send(result[0].set_value)
	})
}

// 根据部门去筛选用户
exports.departmentUser = (req, res) => {
	const userinfo = req.body
	const identity = '用户'
	const sql = 'select * from users where department = ? and identity = ? '
	db.query(sql, [userinfo.department, identity], (err, result) => {
		if (err) return res.cc(err)
		res.send(result)
	})
}

数据库字段:
数据库

一个关键点是在设计数据库之处就需要把部门设置添加到set_namevalue中,后面需要更改的时候在接口中指定改部门设置即可

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

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

相关文章

【Vue2.0源码学习】虚拟DOM篇-Vue中的DOM-更新子节点

文章目录 1. 前言2. 更新子节点3. 创建子节点4. 删除子节点5. 更新子节点6. 移动子节点7. 回到源码8. 总结 1. 前言 在上一篇文章中&#xff0c;我们了解了Vue中的patch过程&#xff0c;即DOM-Diff算法。并且知道了在patch过程中基本会干三件事&#xff0c;分别是&#xff1a;…

小型流水线模型的制作

1. 功能说明 本文示例将实现R327a样机——一款5工序的小型流水线模型&#xff0c;包含铸锭送料、传送、搬运、模拟加工、码垛5个工序。 2. 结构说明 小型流水线主要是由铸锭送料结构、传送机构、搬运机构、模拟加工机构、码垛机构5部分组成。 3. 电子硬件 在这个示例中&#xf…

Qt文件系统源码分析—第七篇QFileSelector

深度 本文主要分析Windows平台&#xff0c;Mac、Linux暂不涉及 本文只分析到Win32 API/Windows Com组件/STL库函数层次&#xff0c;再下层代码不做探究 本文QT版本5.15.2 类关系图 QTemporaryFile继承QFile QFile、QSaveFile继承QFileDevice QFileDevice继承QIODevice Q…

【SpringMVC】| 一文带你搞定SpringMVC的@RequestMapping注解

目录 环境搭建 Request注解的功能 1. RequestMapping注解的位置 2、RequestMapping注解的【value】属性 3、RequestMapping注解的【method】属性 4、RequestMapping注解的【params】属性&#xff08;了解&#xff09; 5、RequestMapping注解的【headers】属性&#xff0…

Attention 和 Transformer

本文参考d2l&#xff0c;搭配知识点和代码&#xff0c;助力一口气搞懂Transformer&#xff0c;参考&#xff1a; chapter_attention-mechanisms-and-transformers https://d2l.ai/chapter_attention-mechanisms-and-transformers/index.html 目录如下&#xff1a; x.1 Queri…

项目复盘四步:怎么做才有成效?这些关键点不可忽略

在项目管理中&#xff0c;及时复盘是非常重要的&#xff0c;因为只有通过反思和分析&#xff0c;才能找到差距存在的原因。 复盘分析的第一步是回顾目标 因为目标是工作开展的关键。在执行项目的过程中&#xff0c;要始终朝着所设定的目标去努力实现。计划和现实会存在偏差&…

超详细Zookeeper+Kafka+ELK集群部署

一、Zookeeper 概述 1、Zookeeper 定义 Zookeeper是一个开源的分布式的&#xff0c;为分布式框架提供协调服务的Apache项目。 2、Zookeeper 工作机制 Zookeeper从设计模式角度来理解&#xff1a;是一个基于观察者模式设计的分布式服务管理框架&#xff0c;它负责存储和管理…

AutoCV第九课:ML基础

目录 矩阵运算前言1. 矩阵乘法和求导总结 矩阵运算 前言 手写AI推出的全新保姆级从零手写自动驾驶CV课程&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考。 本次课程主要学习矩阵运算的基础&#xff0c;考虑使用矩阵来表达多个线性回归模型。 课程大纲可看下面…

多元回归预测 | Matlab龙格算法(RUN)优化最小二乘支持向量机回归预测,RUN-LSSVM回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab龙格算法(RUN)优化最小二乘支持向量机回归预测,RUN-LSSVM回归预测,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %--…

注意力机制(一)SE模块(Squeeze-and-Excitation Networks)论文总结和代码实现

Squeeze-and-Excitation Networks&#xff08;压缩和激励网络&#xff09; 论文地址&#xff1a;Squeeze-and-Excitation Networks 论文中文版&#xff1a;Squeeze-and-Excitation Networks_中文版 代码地址&#xff1a;GitHub - hujie-frank/SENet: Squeeze-and-Excitation Ne…

git 文件恢复与项目还原:008

1. 【文件恢复】&#xff1a;将文件恢复到上一次提交的状态 注意&#xff1a;新建且没有提交的文件无法使用文件恢复 命令&#xff1a; git checkout -- 文件名假如我们的一开始是这样的&#xff0c;这是没有报错的状态文件 然后我添加了一段内容&#xff0c; 比如我添加这段内…

做外贸算运费的时候需不需要多算一些

看到一个网友在一篇文章下留言说&#xff1a;客户算运费的时候需不需要多算一些 听公司老员工说给客户算运费要多加20% 这样合适吗 我个人感觉有点离谱。 那我们就这个话题&#xff0c;谈一谈运费是否要多加一些呢&#xff1f;为什么要多加一些&#xff1f; 首先&#xff0c;要…

Zookeeper学习---3、服务器动态上下线监听案例、ZooKeeper 分布式锁案例、企业面试真题

1、服务器动态上下线监听案例 1、需求 某分布式系统中&#xff0c;主节点可以有多台&#xff0c;可以动态上下线&#xff0c;任意一台客户端都能实时感知到主节点服务器的上下线。 2、需求分析 3、具体实现 &#xff08;1&#xff09;先在集群上创建/servers 节点 &#xff…

软考A计划-试题模拟含答案解析-卷八

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

2023年上半年系统集成项目管理工程师下午真题及答案解析

试题一(18分) A公司跨国收购了B公司的主营业务&#xff0c;保留了B公司原有的人员组织结构和内部办公系统。为了解决B公司内部办公系统与A公司原有系统不兼容的问题&#xff0c;财务、人力和行政部门联合向公司高层申请尽快启动系统和业务的整合。 A公司领导指定HR总监王工担…

云容灾部署前的准备指南

据ITIC的研究表明&#xff0c;98%的千人规模企业每年都会遭遇停机危机&#xff0c;每停机一小时就会损失约700,000人民币。当灾难发生时&#xff0c;使用云容灾的企业可以通过云平台提供的资源和服务&#xff0c;快速帮助企业恢复业务。 HyperBDR云容灾&#xff0c;深度对接全…

Kibana:使用 Docker 安装 Kibana - 8.x

Kibana 的 Docker 镜像可从 Elastic Docker 注册中心获得。 基本映像是 ubuntu:20.04。www.docker.elastic.co 上提供了所有已发布的 Docker 图像和标签的列表。 源代码在 GitHub 中。 这些镜像包含免费和订阅功能。 开始 30 天试用以试用所有功能。 如果你还没有安装好自己的…

一文了解什么是ChatGPT

ChatGPT 是一种自然语言人工智能聊天机器人。在最基本的层面上&#xff0c;这意味着你可以问它任何问题&#xff0c;它会生成一个答案。 一、如何使用聊天 GPT 首先&#xff0c;转到chat.openai.com。如果这是您的第一次&#xff0c;您需要在开始之前使用 OpenAI 设置一个免费…

C919中有哪些项目是华为之作?

#C919# C919和华为都是我们国人的骄傲。那你知道在C919中有哪些项目是华为之作吗&#xff1f;C919与华为的合作主要涉及航空电子领域&#xff1a; 1.飞机高清视频传输系统&#xff1a;该系统使用华为的数字视频传输技术&#xff0c;可以将高清视频信号快速地传输到地面监控中心…

Gradio的web界面演示与交互机器学习模型,高级接口特征《6》

大多数模型都是黑盒&#xff0c;其内部逻辑对最终用户是隐藏的。为了鼓励透明度&#xff0c;我们通过简单地将Interface类中的interpretation关键字设置为default&#xff0c;使得向模型添加解释变得非常容易。这允许您的用户了解输入的哪些部分负责输出。 1、Interpret解释 …