vue实现查询搜索框下拉字典

字典表

在这里插入图片描述

前端页面显示

在这里插入图片描述

依据这个字典表实现动态查询

初始化数组

首先先在全局变量里定义一个数据存放查询出来的数据

data() {
    return {
      dicts: []
    };
  },

生命周期

查询的时候是声明周期开始的时候,原本增删改查页面在生命周期开始的时候就查询了页面的数据获得了列表值,此时在生命周期开始也要查询字典的数据值

activated() {
    this.getDataList();
    // 获取所有的"性别
    this.getDicts("sex");
  },

查询符合条件的字典数据项getDicts()

getDicts()方法在methods内写,类似于查询方法,先向后端发送一个请求,查询字典数据项,查到之后如果符合数据不为空不为null不是undefined类型且code恒等于0,就进行数据的查询放入上面定义的空数组,否则数组还是为空

getDicts(code) {
      this.$http({
        url: this.$http.adornUrl("/sys/dict/select"),
        method: "get",
        params: this.$http.adornParams({
          code: code,
        }),
      }).then(({ data }) => {
        if (data && data.code === 0) {
          this.dicts = data.list;
          })
        } else {
          this.dicts = [];
        }
        // this.dicts = data && data.code === 0 ? data.list : [];
      });
    },

这里code不定义值,可以在生命周期内写形参,让code和形参相等的时候查询到对应的数据库数据

下拉框

在表单选项内写下拉框组件el-select,和性别双向绑定,加上清除,可以点叉叉一键清除下拉框内数据,el-option内写法就是先遍历dicts数组,因为上面已经查询到数据了,v-for遍历查询item

  • key:相当于身份令牌,唯一的令牌,防止出错。这个key没有也行,但是保险起见最好加上。因为这个key作为 value 唯一标识的键名,绑定值为对象类型时必填。
  • label :这是给用户看的,当点击下拉菜单时,会出来选项,用户看到的选项就是这个
  • value :这是你点击某个label(option)之后,将对应的值给v-model绑定的值model

这里都写item.name是因为数据库内字典表的name是需要填入的值也是需要显示的值

<el-form-item>
        <el-select v-model="dataForm.sex" placeholder="请选择筛选条件" clearable>
          <el-option v-for="item in dicts" :key="item.name" :label="item.name" :value="item.name" ></el-option>
        </el-select>
      </el-form-item>

至此,前端已书写完毕,要接着写后端的查询方法

查询方法写在字典service层中

先写一个查询接口方法

写一个通用的接口,先在service层里写一个自定义根据传入的code查找方法,查找到的数据放入集合

List<SysDictEntity> select(String code);

在实现层实现接口方法

再在实现类中重写这个方法,创建一个高级查询对象,根据这个对象的查询条件,需要数据库字典表type字段值为2,code字段值是code的数据,最后在接口中调用service的方法并且传入code值放入list集合,返回响应前端
此时code值没有传入,不知道code值是什么,需要在前端启动的时候就传入
在方法内写一个根据code值发送请求查找数据
需要在前端启动的时候就传入,所以要在生命周期内调用,此时就可以传入相对应的形参

下面写一个伪代码,可根据伪代码进行相应书写

public 类型 方法名(){
创建一个wrapper对象
给这个对象加上查询条件,在条件里写对字段的限制
返回basemapper里的查询方法(17)用这个查询方法查询wrapper对象
}

对应写出来的代码如下

    @Override
    public List<SysDictEntity> select(String code) {
        QueryWrapper<SysDictEntity> sdeqw = new QueryWrapper<>();
        sdeqw.eq("type","2")
                //性别 男女保密
                //code和数据库内的值相等的
                .eq("code",code);
        return this.baseMapper.selectList(sdeqw);
    }

最后在controller层内写查询方法

    @GetMapping("/select")
    public R select(String code){
        List<SysDictEntity> list = sysDictService.select(code);
        return R.ok().put("list",list);
    }

至此,前后端的字典查询都写好啦

拓展:通常数据库内性别都是数字来表示的,如何根据数字在页面上显示字典项的汉字呢?

user表的sex字段值和dict表的value字段值相等且dict表的code字段值和user表的sex字段名相等的时候在前端页面展示sex字段值的地方要展示dict表value字段值对应的name字段值
在这里插入图片描述

此时有两种处理方法,一是在后端处理,查询的时候就进行集合一对一,二是在前端处理,数据传过来之后放进一个集合,最后一对一

后端处理:查询的时候就要显示 所以在分页查询内写

1.查询出code值为sex的数据放入list
2.dict中的name和value是一一对应关系,所以用map集合存放较好
3.遍历上面有数据的list集合,键为dict的value值,值是name,因为键找值快
4.由于是分页查询,在写这个性别处理的时候上面已经写好分页查询了,所以可以直接用page,获取记录,page.getRecords=分页查询结果集,遍历结果集对每一个元素先获取当前元素对象的sex字段值,再从map集合里找这个对应的值,最后将找到的值映射到当前对象的sex字段上

    @Override
    /*返回PageUtils工具类对象*/
    public PageUtils queryPage(Map<String, Object> params) {
        String username = (String) params.get("username");
        String sex = (String) params.get("sex");
        String start=(String) params.get("start");
        String end=(String) params.get("end");

        QueryWrapper<User> qw = new QueryWrapper<>();
        /*like-模糊查询*/
        qw.like(StringUtils.isNotBlank(username),"username",username)
                .eq(StringUtils.isNotBlank(sex),"sex",sex);
        if (StringUtils.isNotBlank(start) && StringUtils.isNotBlank(end)) {
            qw.between("birthday",start,end);
        }
        /*分页查询*/
        IPage<User> page=this.page(new Query<User>().getPage(params),qw);

        //1.查询出code值为sex的数据放入list
        List<SysDictEntity> list = sysDictService.select("sex");
        //2.dict中的name和value是一一对应关系,所以用map集合存放较好
        HashMap<String, String> sexMap = new HashMap<>();
        //3.遍历上面有数据的list集合,键为dict的value值,值是name,因为键找值快
        list.forEach(dict->{
            sexMap.put(dict.getValue(),dict.getName());
        });
        //4.由于是分页查询,在写这个性别处理的时候上面已经写好分页查询了,所以可以直接用page,获取记录,page.getRecords=分页查询结果集,遍历结果集对每一个元素
        page.getRecords().forEach(val->{
            // 先获取当前元素对象的sex字段值,再从map集合里找这个对应的值,最后将找到的值映射到当前对象的sex字段上
            val.setSex(sexMap.get(val.getSex()));
        });
        return new PageUtils(page);
    }

前端处理

1.同样要一个集合来存放一一对应关系数据,在全局变量内声明一个集合{}

  data() {
    return {
      sexMap:{}
    };
  },

2.获取字典数据之后dicts内有所有需要的性别数据了,遍历这个dicts数组,存放键值value和name

this.dicts.forEach(dict=>{
            this.$set(this.sexMap,dict.value,dict.name)
          })

3.在表单项数据内要获取一行的性别数据替换为集合内的name(value=sex),需要使用到插槽,在el-table-column中占一个位置,等待操作往里面填值,这里填的值就是集合中获取的name替换这一行插槽的性别数据
先在 el-table-column 中占一个位置,等待操作往里面填值

      <el-table-column
        prop="sex"
        header-align="center"
        align="center"
        label="性别"
      >
      <template slot-scope="scope">
        {{ sexMap[scope.row.sex] }}
      </template>
      </el-table-column>

4.由于数据库内sex由字符串改为了数字,所以需要在上面下拉框的value属性进行更改,此时value应该输入item.value

      <el-form-item>
        <el-select v-model="dataForm.sex" placeholder="请选择筛选条件" clearable>
          <el-option v-for="item in dicts" :key="item.name" :label="item.name" :value="item.value" ></el-option>
        </el-select>
      </el-form-item>

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IEEE| IceNet《IceNet for Interactive Contrast Enhancement》论文超详细解读(翻译+精读)

学习资料&#xff1a; 论文题目&#xff1a;《IceNet for Interactive Contrast Enhancement》&#xff08;用于交互式对比度增强的IceNet&#xff09;原文地址&#xff1a;export.arxiv.org/pdf/2109.05838v2.pdf 目录 ABSTRACT—摘要 翻译 精读 I. INTRODUCTION—简介 翻…

Thinkphp5.0.23远程代码执行漏洞复现

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将信息做其他用途&#xff0c;由Ta承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 1、漏洞介绍 使用Thinkphp5.x远程代码执行漏洞&#xf…

26元/月起!腾讯云自动搭建4核16G雾锁王国服务器

腾讯云无需任何配置自动搭建雾锁王国4-8人联机服务器&#xff0c;游戏24小时在线&#xff0c;4核16G服务器低至26元/月起&#xff0c;一键搭建自己的雾锁王国联机服务器&#xff01; 第一步&#xff1a;购买服务器 1、通过【腾讯云游戏服专属优惠】页面&#xff0c;选择“雾锁…

关于v8垃圾回收机制以及与其相关联的知识点--还没整理版本

对于值类型b来说&#xff0c;就直接释放了其占用的内存&#xff0c;对于引用类型obj来说&#xff0c;销毁的只是变量obj对堆内存地址 1001 的引用&#xff0c;obj的值 { c: 3 } 依然存在于堆内存中。那么堆内存中的变量如何进行回收呢&#xff1f; V8的垃圾回收策略主要是基于…

YOLOv5改进系列(29)——添加DilateFormer(MSDA)注意力机制(中科院一区顶刊|即插即用的多尺度全局注意力机制)

【YOLOv5改进系列】前期回顾&#xff1a; YOLOv5改进系列&#xff08;0&#xff09;——重要性能指标与训练结果评价及分析 YOLOv5改进系列&#xff08;1&#xff09;——添加SE注意力机制 YOLOv5改进系列&#xff08;2&#xff09;——添加CBAM注意力机制 YOLOv5改进系列&…

Duplicate entry ‘2020045-2-1‘ for key ‘index_uid‘ 解决方案

项目场景&#xff1a; 今天小编在工作中编写接口对数据库增加相同的非主键数据的时候&#xff0c;突然出现了这样的一个错误&#xff1a; 下面我来给大家解答这个错误的出现原因以及解决办法。 问题描述 Duplicate entry 2020045-2-1 for key index_uid 这个错误大概意思就是…

Vue3-Composition-API(二)

一、computed函数使用 1.computed 在前面我们讲解过计算属性computed&#xff1a;当我们的某些属性是依赖其他状态时&#xff0c;我们可以使用计算属性来处理 在前面的Options API中&#xff0c;我们是使用computed选项来完成的&#xff1b; 在Composition API中&#xff0c…

Spring实现事务(一)

Spring事务 .什么是事务事务的操作Spring中事务的实现准备工作创建表创建项目,引入Spring Web, Mybatis, mysql等依赖配置文件实体类 编程式事务(手动写代码操作事务)声明式事务(利用注解自动开启和提交事务) . 什么是事务 事务是⼀组操作的集合, 是⼀个不可分割的操作 在我们…

基于布谷鸟搜索的多目标优化matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 1. 布谷鸟搜索算法基础 2. 多目标优化问题 3. 基于布谷鸟搜索的多目标优化算法 4. 解的存储和选择策略 5.算法步骤 5.完整程序 1.程序功能描述 基于布谷鸟搜索的多目标优化&#xff0c;…

JavaScript基础(二)—— 运算符、表达式与语句(if、switch、循环)

学习目标&#xff1a; 掌握常见运算符&#xff0c;为程序“能思考”做准备 掌握分支语句&#xff0c;让程序具备判断能力 掌握循环语句&#xff0c;让程序具备重复执行能力 一、运算符 1. 赋值运算符 对变量进行赋值的运算符&#xff0c;能够使用赋值运算符简化代码。 …

【解决视网膜长尾数据】关系子集学习、射击法、加权知识蒸馏

长尾分布下的视网膜&#xff1a;关系子集学习、射击法、加权知识蒸馏 核心思想问题&#xff1a;类别分布的不平衡问题问题&#xff1a;共现标签问题&#xff1a;特定区域和特征的类别关联解法&#xff1a;划分子集解决样本不平衡问题解法&#xff1a;射击法解决共现标签问题解法…

【缓存周总结】Redis缓存的使用以及数据安全的处理

前言 Redis非关系型数据库已经是很常见的工具了&#xff0c;项目中用到的也很多&#xff0c;这篇文章系统的分析下使用过程中可能会遇到的问题 一、缓存 缓存是数据交换的缓冲区&#xff0c;是存贮数据的临时地方&#xff0c;一般读写性能较高。 我们项目中引用的Redis目的就是…

Unity - 调节camera物理相机参数(HDRP)

在 “Hierarchy” 右键 -> Volume -> Global Volume new 一个 profile, 设置Mode为Pysical Camera 再点击camera组件&#xff0c;这时候设置 ISO、Shutter Speed、Aperture等参数值还会有效。

深入了解如何对IPA包进行有效的混淆处理

1、安装混淆工具 首先电脑上要安装ipagurad工具&#xff0c;官网链接&#xff1a;IpaGuard官网--IOS 应用程序ipa文件混淆加密保护工具 2、生成混淆文件 由于混淆需要首先 打开要处理的IPA文件 第一项&#xff0c;填写我们需要重签名的 ipa 路径&#xff08;当前导入的路径跟导…

跟着pink老师前端入门教程-day16

二十七、CSS3进阶 1、CSS3 2D转换 转换&#xff08;transform&#xff09;是CSS3中具有颠覆性的特征之一&#xff0c;可以实现元素的位移、旋转、缩放等效果 转换&#xff08;transform&#xff09;可以简单理解为变形 移动&#xff1a;translate&#xff1b;旋转&#xff…

【LVGL源码移植】

LVGL源码移植 ■ LVGL源码移植一&#xff1a;下载LVGL源码二&#xff1a;修改LVGL文件夹1: 将这5个文件&#xff0c;复制到一个新的文件夹2: 简化文件&#xff0c;减少内存消耗&#xff08;去除不必要的文件&#xff09;3: 为了规范化&#xff0c;我们将下列文件进行重命名 三&…

nodejs+vue+ElementUi宠物领养救助网站0w6wc

宠物领养救助平台采用B/S架构&#xff0c;数据库是MySQL。网站的搭建与开发采用了先进的nodejs进行编写&#xff0c;使用了vue框架。该系统从两个对象&#xff1a;由管理员和用户来对系统进行设计构建。主要功能包括&#xff1a;个人信息修改&#xff0c;对用户、宠物类别、宠物…

七、并发工具(上)

一、自定义线程池 1&#xff09;背景&#xff1a; 在 QPS 量比较高的情况下&#xff0c;我们不可能说所有的访问都创建一个线程执行&#xff0c;这会导致内存占用过高&#xff0c;甚至有可能出现 out of memory另外也要考虑 cpu 核数&#xff0c;如果请求超过了cpu核数&#…

【多个SpringBoot模块项目如何变成聚合项目】

【前言】 项目虽然是Eureka、OpenFeign 进行服务注册和服务调用&#xff0c;但是每个模块都是一个单独的SpringBoot&#xff0c;启动每个模块都需要单独启动一个idea,觉得这个过于繁琐&#xff0c;现在想把项目变成一个聚合项目&#xff0c;只需要启动一个idea即可。 【过程】…

09. 异常处理

目录 1、前言 2、常见的异常 3、异常处理try...except...finally 4、异常信息解读 5、raise 6、自定义异常 7、小结 1、前言 在编程中&#xff0c;异常&#xff08;Exception&#xff09;是程序在运行期间检测到的错误或异常状况。当程序执行过程中发生了一些无法继续执…