字典如何与选择器一起使用

背景:开发过程中会遇到某些字段需要做成下拉框。如下图:

 组件 | Element里有select选择器这个组件可以实现下拉框的效果

我们可能会想到创一个辅助表来存储这些下拉数据像这样

这样虽然能实现,但是在实际开发中是不合理的,如果有多的表的多个字段都需要用到下拉框,就需要创建很多的辅助表。并且下拉框都有一个特点,就是键值对的存在。我们就引入了字典

这是一个字典,里面有字典名称、字典项、字典值,可以实现动态选择,且多个表多个字段需要用到的数据都可以在字典里先添加一个字典名称,再添加对应的字典项和字典值(key-value)。

具体字段设计如下:

后端字典这个类里有三个重要的接口

1.获取某个字典内所有的字典项,提供给前端的select组件使用

/*** 获取某个字典内所有的字典项,提供给前端的select组件使用*/@GetMapping("/getDictValues/{code}")public R getDictValues(@PathVariable("code") String code){QueryWrapper<SysDictEntity> queryWrapper = new QueryWrapper<>();queryWrapper.eq("type", 2);queryWrapper.eq("code", code);queryWrapper.orderByAsc("sort");List<SysDictEntity> list = sysDictService.list(queryWrapper);
//        System.out.println(list);List<Map<String,String>> returnMap = new ArrayList<>();list.forEach(x->{Map<String,String> newMap = new HashMap<>();newMap.put("value", x.getValue());newMap.put("label", x.getName());returnMap.add(newMap);});return R.ok().put("dict", returnMap);}

前端调用这个接口拿到某个字典里的所有字典项以汽车品牌为例展示

 <el-form-item label="品牌" prop="brand"><el-selectv-model="dataForm.brand"placeholder="请选择品牌":disabled="dataForm.id !== 0" ><!--  :value=""是传给这个表单项prop="brand"的值 --><el-optionv-for="item in options":key="item.value"clearable:label="item.label":value="item.value"></el-option></el-select></el-form-item>
this.$http({url: this.$http.adornUrl('/sys/dict/getDictValues/brand'),method: 'get',params: this.$http.adornParams()}).then(({data}) => {//console.log(data);if (data && data.code === 0) {this.options = data.dict}})

就完成了字典以select的绑定,但是有一个问题,  选择器:value的值传给这个表单项prop="brand"的值,brand拿到的是key值。(下表value对应map集合里的key、lable对应value)

 

 所以我们的展示页面品牌这列展示的都是数字,如何展示对应的lable呢?这就用到了字典里的第二个接口。

2.传入code值,获取这个字典中所有的字典项,并且以map集合的方式传回,前端table组件展示使用。

/*** 传入code值,获取这个字典中所有的字典项,并且以map集合的方式传回,前端table组件展示使用* @param code* @return*/@GetMapping("/getAllDictValues/{code}")public R getAllDictValues(@PathVariable("code") String code){QueryWrapper<SysDictEntity> queryWrapper = new QueryWrapper<>();queryWrapper.eq("type", 2);queryWrapper.eq("code", code);queryWrapper.orderByAsc("sort");List<SysDictEntity> list = sysDictService.list(queryWrapper);Map<String,String> returnMap = new HashMap<>();list.forEach(x->{returnMap.put(x.getValue(), x.getName());});return R.ok().put("dict", returnMap);}

 展示页面通过传入code值,获取这个字典中所有的字典项,并且以map集合的方式传回,这个接口,将接收到的数据 data.dict赋值给this.carBrandAll ,carBrandAll定义的一个全局对象。

 //获取所有品牌getCarBrand() {this.$http({url: this.$http.adornUrl('/sys/dict/getAllDictValues/brand'),method: 'get',params: this.$http.adornParams()}).then(({data}) => {if (data && data.code === 0) {this.carBrandAll = data.dict}})},

表单项通过插槽拿到对应brand的值(key)到carBrandAll对象里找到对应的 lable(value)l实现页面展示值

<el-table-columnprop="brand"header-align="center"align="center"width="80"label="品牌"><template slot-scope="scope"><span>{{ carBrandAll[scope.row.brand] }}</span></template></el-table-column>

3.传入code,value值,获取这个字典中对应的字典name值(在这里和选择器一起使用过程中没用到,就不过多讲。)

/*** 传入code,value值,获取这个字典中对应的字典name值* @return*/@GetMapping("/getAllDictNameByValue")public R getAllDictNameByValue(@RequestParam Map<String, Object> params){String code = (String)params.get("code");String value = (String)params.get("value");if (StringUtils.isNotBlank(code) &&StringUtils.isNotBlank( value) ) {QueryWrapper<SysDictEntity> queryWrapper = new QueryWrapper<>();queryWrapper.eq("type", 2);queryWrapper.eq("code", code);queryWrapper.eq("value", value);queryWrapper.last("limit 1");SysDictEntity sysDict = sysDictService.getOne(queryWrapper);return R.ok().put("name", sysDict.getName());}return R.error();}

总结:字典不光可以和选择器一起使用,单选框、多选框这些都可以看作key-value的形式,下次在讲解字典和其他组件使用。 

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

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

相关文章

个税自然人扣缴客户端数据的备份与恢复(在那个文件夹)

一&#xff0c;软件能够正常打开&#xff0c;软件中的备份与恢复功能 1&#xff0c;备份 您按照下面的方法备份一下哦~ 进入要备份的自然人软件&#xff0c;点击左侧系统设置→→系统管理→→备份恢复&#xff1b; 在备份设置里&#xff0c;点击“备份到选择路径”&#xff0c;…

WebGL编程指南 - 颜色与纹理续

设置纹理坐标&#xff08;initVertexBuffers()&#xff09; 从缓冲区到 attribute 变量的流程&#xff1a; // 顶点坐标 function initVertexBuffers(gl) {// 数据准备let verticesTexCoords new Float32Array([// 顶点坐标&#xff0c;纹理坐标-0.5, 0.5, 0.0, 1.0, -0.5, …

图像异常检测评估指标-分类性能

图像异常检测评估指标-分类性能 1. 混淆矩阵 混淆矩阵包括4个用于衡量分类算法性能的基本数值 四个字母代表的含义是&#xff1a;P&#xff08;Positive&#xff09;代表算法将样本预测为正类&#xff0c;N&#xff08;Negative&#xff09;代表算法将样本预测为负类&#xf…

ST7789读取ID错误新思路(以STC32G为例)

1.前言 前两天刚把ST7789写入搞定&#xff0c;这两天想折腾一下读取。最开始是读ID&#xff0c;先是用厂家送的程序&#xff0c;程序里面用的是模拟I8080协议&#xff0c;一切正常。后来我用STC32G的内置LCM模块&#xff0c;发现读取不出来。更神奇的是ID读不出来&#xff0c;…

[项目详解][boost搜索引擎#2] 建立index | 安装分词工具cppjieba | 实现倒排索引

目录 编写建立索引的模块 Index 1. 设计节点 2.基本结构 3.(难点) 构建索引 1. 构建正排索引&#xff08;BuildForwardIndex&#xff09; 2.❗构建倒排索引 3.1 cppjieba分词工具的安装和使用 3.2 引入cppjieba到项目中 倒排索引代码 本篇文章&#xff0c;我们将继续项…

【C++指南】类和对象(四):类的默认成员函数——全面剖析 : 拷贝构造函数

引言 拷贝构造函数是C中一个重要的特性&#xff0c;它允许一个对象通过另一个已创建好的同类型对象来初始化。 了解拷贝构造函数的概念、作用、特点、规则、默认行为以及如何自定义实现&#xff0c;对于编写健壮和高效的C程序至关重要。 C类和对象系列文章&#xff0c;可点击下…

GitLab+Jenkins 实现 Webhook 自动化触发构建

在持续集成和持续部署&#xff08;CI/CD&#xff09;过程中&#xff0c;如何实现代码提交后自动触发构建&#xff1f;今天&#xff0c;我们将通过GitLab与Jenkins的集成&#xff0c;利用Webhook实现自动化触发构建&#xff0c;为你的开发流程注入高效能量&#xff01; 在每次代…

Java 多线程(六)—— 线程池 和 工厂模式

线程池 随着现代计算机的发展&#xff0c;任务越来越多&#xff0c;线程创建也逐渐增加&#xff0c;每次让操作系统创建线程这个开销就有点大&#xff0c;因此&#xff0c;我们诞生了线程池的概念&#xff0c;线程池里面有很多线程&#xff0c;这些线程可以被用户去调用执行任…

Java最全面试题->Java基础面试题->JavaSE面试题->异常面试题

文章目录 异常1.说一下Java中的异常体系&#xff1f;2.Error和Exception的区别3.写出你最常见的 5 个 RuntimeException&#xff1f;4.如何处理异常?5.try()里面有⼀个return语句&#xff0c; 那么后面的finally{}里面的代码会不会被执行&#xff1f;什么时候执行&#xff0c;…

C++ 进阶:类相关特性的深入探讨

⭐在对C 中类的6个默认成员函数有了初步了解之后&#xff0c;现在我们进行对类相关特性的深入探讨&#xff01; &#x1f525;&#x1f525;&#x1f525;【C】类的默认成员函数&#xff1a;深入剖析与应用&#xff08;上&#xff09; 【C】类的默认成员函数&#xff1a;深入剖…

初阶数据结构【3】--单链表(比顺序表还好的一种数据结构!!!)

本章概述 前情回顾单链表实现单链表彩蛋时刻&#xff01;&#xff01;&#xff01; 前情回顾 咱们在上一章博客点击&#xff1a;《顺序表》的末尾&#xff0c;提出了一个问题&#xff0c;讲出了顺序表的缺点——有点浪费空间。所以&#xff0c;为了解决这个问题&#xff0c;我…

TypeScript 出现过的问题

不能将类型“unknown”分配给类型“string”。 不能直接将类型“unknown”分配给类型“string” /**** 【1 - 问题】会画红波浪线 ****/ window.document.title to?.meta?.title || /**** 【2 - 解决】解决红波浪线 ****/ const title: unknown to?.meta?.title || if …

QML 基本动画

在介绍完 QML 动画框架之后,现在我们来看看具体的动画及其用法。先从最常用的基本动画入手,这些动画包括:PropertyAnimation、ColorAnimation、Vector3dAnimation 和 PathAnimation 等,它们不仅能够帮助我们轻松地为应用程序添加动态效果,还能显著提升用户体验,使得界面更…

vue3 解决背景图与窗口留有间隙的问题

需要实现一个登录界面&#xff0c;login.vue的代码如下&#xff1a; <script> import { ref } from vue;export default {setup() {return {};}, }; </script><template><div id"login-container" class"login-container"><di…

中国古代数学的杰出研究成果之一 - 杨辉三角 - 怎么用go、C++进行编程解决

杨辉三角&#xff0c;又称帕斯卡三角形&#xff08;Pascals Triangle&#xff09;&#xff0c;是组合数学中的一个重要概念。它是一个三角形数组&#xff0c;其中每个数字是它上方左上方和右上方的数字之和。杨辉三角的每一行都代表了二项式展开式的系数&#xff0c;因此在数学…

利用 OBS 推送 WEBRTC 流到 smart rtmpd

webrtc whip 推流 & whep 拉流简介 RFC 定义 通用的 webrtc 对于 SDP 协议的交换已经有对应的 RFC 草案出炉了。这就是 WHIP( push stream ) & WHEP ( pull stream ) . WHIP RFC Link: https://www.ietf.org/archive/id/draft-ietf-wish-whip-01.html WHEP RFC Link:…

ubuntu 开启haproxy UI

一、修改haproxy.cfg nano /etc/haproxy/haproxy.cfg 添加一段 listen statsbind *:8080stats enablestats uri /uistats refresh 10sstats auth admin:123456stats admin if TRUE 重启 sudo systemctl restart haproxy 浏览器访问&#xff1a; http://192.168.31.182:80…

搜维尔科技:SenseGlove触觉反馈数据手套的用途和作用

无论是VR培训、遥控机器人、研究还是营销&#xff0c;我们的VR触觉手套都能让虚拟世界更具沉浸感和吸引力。借助我们的硬件和直观的软件开发工具&#xff0c;研究人员和开发人员可以创建真正的触觉交互。 VR培训 使用 SenseGlove进行虚拟现实训练可产生与现实训练类似的效果&a…

MySQL-CRUD-基础-(详解) ┗( ▔, ▔ )┛

目录 ❄️一、新增&#xff08;Create&#xff09;&#xff1a; ☑ 1、单行数据 全列插入&#xff1a; ☑ 2、指定列插入&#xff1a; ☑ 3、多行插入&#xff1a; ❄️二、查询&#xff08;Retrieve&#xff09;&#xff1a; ☑ 1、全列查询&#xff1a; ☑ 2、指定列查询&a…

【数据结构与算法】走进数据结构的“时间胶囊”——栈

大家好&#xff0c;我是小卡皮巴拉 文章目录 目录 引言 一.栈的基本概念 1.1 定义 1.2 特性 1.3 基本操作 二.栈的实现方式 2.1 顺序栈 2.2 链栈 三.顺序栈的实现 定义顺序栈的结构 初始化 入栈 检查栈是否为空 出栈 销毁 四.链栈的实现 定义链栈的结构 初始…