输入搜索、分组展示选项、下拉选取,全局跳转页,el-select 实现 —— 后端数据处理代码,抛砖引玉展思路

 详细前端代码写于上一篇:输入搜索、分组展示选项、下拉选取,el-select 实现:即输入关键字检索,返回分组选项,选取跳转到相应内容页 —— VUE项目-全局模糊检索

【效果图】:分组展示选项 =>【去界面操作体验】

【mybatis】:多数据表抓取数据

<select id="findNews" resultType="com.bootdo.search.vo.SearchDetail">SELECT      n.cid           AS srcId,pt.id           AS typeId,pt.type_key     AS typeKey,pt.page_type    AS pageType,pt.page_name    AS srcTypeName,n.title         AS srcName,n.summary       AS alias,pt.page_path    AS srcPathFROM a_news nLEFT JOIN a_product_type pt ON n.type_id = pt.idWHERE n.sys_id = #{sysId} AND n.is_enabled = 0 AND (n.title LIKE #{query} OR n.summary LIKE #{query} OR n.content LIKE #{query})LIMIT 20</select><select id="findProducts" resultType="com.bootdo.search.vo.SearchDetail">SELECT      pt.id            AS srcId,pt.page_type    AS pageType,pt.page_name    AS srcTypeName,pt.type_name     AS srcName,pt.type_key     AS alias,pt.page_path    AS srcPathFROM a_product_type ptWHERE  pt.sys_id = #{sysId} AND pt.is_deleted = 0 AND pt.type_name LIKE #{query}LIMIT 20</select><select id="findItemInfos" resultType="com.bootdo.search.vo.SearchDetail">SELECT      n.cid           AS srcId,pt.id           AS typeId,pt.type_key     AS typeKey,pt.page_type    AS pageType,pt.page_name    AS srcTypeName,pt.type_name    AS srcName,pt.type_name    AS alias,pt.page_path    AS srcPathFROM a_item_info nLEFT JOIN a_product_type pt ON n.type_id = pt.idWHERE n.sys_id = #{sysId} AND n.is_enabled = 0 AND n.content LIKE #{query}LIMIT 20</select>

【java】:各数据源进一步整理、合并、分组

    public List<SearchVO> search(Map<String, Object> params){Map<String, SearchDetail> map = new HashMap<>();List<SearchDetail> products = searchDao.findProducts(params);List<SearchDetail> itemInfos = searchDao.findItemInfos(params);List<SearchDetail> news = searchDao.findNews(params);for(SearchDetail sd : products){String srcPath = sd.getSrcPath()+"?typeKey="+sd.getAlias();sd.setSrcPath(srcPath);map.put(srcPath, sd);}for(SearchDetail sd : itemInfos){this.changePath(map, sd);}for(SearchDetail sd : news){this.changePath(map, sd);}return groupSearchDetailsByTypeName(map.values());}private void changePath(Map<String, SearchDetail> map, SearchDetail sd){String srcPath = sd.getSrcPath();if(StringUtils.equals(srcPath, "/n")){srcPath = srcPath+"/nId?showDetailNewId="+sd.getSrcId()+"&menuSearch=true";sd.setSrcPath(srcPath);}if(StringUtils.equals(srcPath, "/p")){srcPath = srcPath+"/pId?showDetailNewId="+sd.getSrcId()+"&menuSearch=true&typeId="+sd.getTypeId()+"&typeKey="+sd.getTypeKey();sd.setSrcPath(srcPath);}map.put(srcPath, sd);}private List<SearchVO> groupSearchDetailsByTypeName(Collection<SearchDetail> sds) {// 使用 Collectors.groupingBy 按 srcTypeName(即 label)分组Map<Integer, List<SearchDetail>> groupedByTypeName = sds.stream().collect(Collectors.groupingBy(SearchDetail::getPageType));// 将分组后的数据转换为 List<SearchVO>List<SearchVO> searchVOList = new ArrayList<>();for (Map.Entry<Integer, List<SearchDetail>> entry : groupedByTypeName.entrySet()) {SearchVO searchVO = new SearchVO();List<SearchDetail> value = entry.getValue();searchVO.setLabel(value.get(0).getSrcTypeName());searchVO.setOptions(value);searchVOList.add(searchVO);}return searchVOList;}

vue、js

<el-row :gutter="20" style="display: flex;  border-radius: 5px;" ><el-col style="margin-bottom: 7px;"><lilo-group-select @change="groupSelectChange" :multiple="false" :likeQuery="true" :searchApi="'/api/list/search'" clearable placeholder="请输入快速搜索" ></lilo-group-select></el-col>
</el-row>groupSelectChange(option) {console.log("下拉选项选中:"+JSON.stringify(option));if(option==''|| option.srcPath=='')return;// this.$router.push(option.srcPath);this.$router.push(option.srcPath).catch(err => {if (err.name !== 'NavigationDuplicated') {// 处理其他可能的错误console.error(err);}// 对于 NavigationDuplicated 错误,可以选择不做任何处理});
},

详细前端代码写于上一篇:输入搜索、分组展示选项、下拉选取,el-select 实现:即输入关键字检索,返回分组选项,选取跳转到相应内容页 —— VUE项目-全局模糊检索

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

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

相关文章

【SpringBoot】_统一功能处理:统一数据返回格式

目录 1. 对所有返回类型方法进行统一数据返回类型处理 2. 部分返回类型方法存在的问题 3. 对两种有误的方法进行处理 仍以图书管理系统为例。 创建Result对后端返回给前端的数据进行封装&#xff0c;增加业务状态码与错误信息&#xff0c;将原本的数据作为data部分&#xff…

智能交通系统(Intelligent Transportation Systems):智慧城市中的交通革新

智能交通系统&#xff08;Intelligent Transportation Systems, ITS&#xff09;是利用先进的信息技术、通信技术、传感技术、计算机技术以及自动化技术等&#xff0c;来提升交通系统效率和安全性的一种交通管理方式。ITS通过收集和分析交通数据&#xff0c;智能化地调度、控制…

Unity百游修炼(1)——FootBall详细制作全流程

一、引言 游玩测试&#xff1a; Football 游玩测试 1.项目背景与动机 背景&#xff1a;在学习 Unity 的过程中&#xff0c;希望通过实际项目来巩固所学知识&#xff0c;同时出于对休闲小游戏的喜爱&#xff0c;决定开发一款简单有趣的小游戏加深自己的所学知识点。 动机&#…

QQ登录测试用例报告

QQ登录测试用例思维导图 一、安全性测试用例 1. 加密传输与存储验证 测试场景&#xff1a;输入账号密码并提交登录请求。预期结果&#xff1a;账号密码通过加密传输&#xff08;如HTTPS&#xff09;与存储&#xff08;如哈希加盐&#xff09;&#xff0c;无明文暴露。 2. 二…

无人机实战系列(三)本地摄像头+远程GPU转换深度图

这篇文章将结合之前写的两篇文章 无人机实战系列&#xff08;一&#xff09;在局域网内传输数据 和 无人机实战系列&#xff08;二&#xff09;本地摄像头 Depth-Anything V2 实现了以下功能&#xff1a; 本地笔记本摄像头发布图像 远程GPU实时处理&#xff08;无回传&#…

读取罗克韦尔AllenBradley Micro-Logix1400 罗克韦尔 CIP PCCC通信协议

通信协议实例下载 <-----实例下载 MicroLogix 1400的通信能力 MicroLogix 1400支持多种通信协议&#xff0c;包括CIP&#xff08;通过EtherNet/IP实现&#xff09;、Modbus RTU/TCP、DF1等4812。其硬件集成以太网端口&#xff0c;便于通过EtherNet/IP进行CIP通信15。 CIP…

Python游戏编程之赛车游戏6-5

1 碰撞检测 在显示了玩家汽车和“敌人”汽车之后&#xff0c;接下来就要实现玩家与“敌人”的碰撞检测了。 代码如图1所示。 图1 碰撞检测代码 第72行代码通过pygame.sprite.spritecollideany()函数判断P1和enemies是否发生了碰撞&#xff0c;如果发生碰撞&#xff0c;该函数…

【QT 网络编程】HTTP协议(二)

文章目录 &#x1f31f;1.概述&#x1f31f;2.代码结构概览&#x1f31f;3.代码解析&#x1f338;Http_Api_Manager - API管理类&#x1f338;Http_Request_Manager- HTTP请求管理类&#x1f338;ThreadPool - 线程池&#x1f338;TestWindow- 测试类 &#x1f31f;4.运行效果&…

保姆级! 本地部署DeepSeek-R1大模型 安装Ollama Api 后,Postman本地调用 deepseek

要在Postman中访问Ollama API并调用DeepSeek模型,你需要遵循以下步骤。首先,确保你有一个有效的Ollama服务器实例运行中,并且DeepSeek模型已经被加载。 可以参考我的这篇博客 保姆级!使用Ollama本地部署DeepSeek-R1大模型 并java通过api 调用 具体的代码实现参考我这个博…

在PHP Web开发中,实现异步处理有几种常见方式的优缺点,以及最佳实践推荐方法

1. 消息队列 使用消息队列&#xff08;如RabbitMQ、Beanstalkd、Redis&#xff09;将任务放入队列&#xff0c;由后台进程异步处理。 优点&#xff1a; 任务持久化&#xff0c;系统崩溃后任务不丢失。 支持分布式处理&#xff0c;扩展性强。 实现步骤&#xff1a; 安装消息…

算法15--BFS

BFS 原理经典例题解决FloodFill 算法[733. 图像渲染](https://leetcode.cn/problems/flood-fill/description/)[200. 岛屿数量](https://leetcode.cn/problems/number-of-islands/description/)[695. 岛屿的最大面积](https://leetcode.cn/problems/max-area-of-island/descrip…

网络空间安全(2)应用程序安全

前言 应用程序安全&#xff08;Application Security&#xff0c;简称AppSec&#xff09;是一个综合性的概念&#xff0c;它涵盖了应用程序从开发到部署&#xff0c;再到后续维护的整个过程中的安全措施。 一、定义与重要性 定义&#xff1a;应用程序安全是指识别和修复应用程序…

Plantsimulation中机器人怎么通过阻塞角度设置旋转135°

创建一个这样的简单模型。 检查PickAndPlace的角度表。源位于180的角位置&#xff0c;而物料终结位于90的角位置。“返回默认位置”选项未被勾选。源每分钟生成一个零件。启动模拟时&#xff0c;Plant Simulation会选择两个位置之间的最短路径。示例中的机器人无法绕135的角位…

Fisher信息矩阵(Fisher Information Matrix, FIM)与自然梯度下降:机器学习中的优化利器

Fisher信息矩阵与自然梯度下降&#xff1a;机器学习中的优化利器 在机器学习尤其是深度学习中&#xff0c;优化模型参数是一个核心任务。我们通常依赖梯度下降&#xff08;Gradient Descent&#xff09;来调整参数&#xff0c;但普通的梯度下降有时会显得“笨拙”&#xff0c;…

Spring Boot集成Swagger API文档:傻瓜式零基础教程

Springfox Swagger 是一个用于构建基于 Spring Boot 的 RESTful API 文档的开源工具。它通过使用注解来描述 API 端点&#xff0c;自动生成易于阅读和理解的 API 文档。Springfox 通过在运行时检查应用程序&#xff0c;基于 Spring 配置、类结构和各种编译时 Java 注释来推断 A…

接口测试基础 --- 什么是接口测试及其测试流程?

接口测试是软件测试中的一个重要部分&#xff0c;它主要用于验证和评估不同软件组件之间的通信和交互。接口测试的目标是确保不同的系统、模块或组件能够相互连接并正常工作。 接口测试流程可以分为以下几个步骤&#xff1a; 1.需求分析&#xff1a;首先&#xff0c;需要仔细…

kafka-集群缩容

一. 简述&#xff1a; 当业务增加时&#xff0c;服务瓶颈&#xff0c;我们需要进行扩容。当业务量下降时&#xff0c;为成本考虑。自然也会涉及到缩容。假设集群有 15 台机器&#xff0c;预计缩到 10 台机器&#xff0c;那么需要做 5 次缩容操作&#xff0c;每次将一个节点下线…

Spring Boot 概要(官网文档解读)

Spring Boot 概述 Spring Boot 是一个高效构建 Spring 生产级应用的脚手架工具&#xff0c;它简化了基于 Spring 框架的开发过程。 Spring Boot 也是一个“构件组装门户”&#xff0c;何为构件组装门户呢&#xff1f;所谓的“构件组装门户”指的是一个对外提供的Web平台&#x…

Linux 命令大全完整版(12)

Linux 命令大全 5. 文件管理命令 ln(link) 功能说明&#xff1a;连接文件或目录。语  法&#xff1a;ln [-bdfinsv][-S <字尾备份字符串>][-V <备份方式>][--help][--version][源文件或目录][目标文件或目录] 或 ln [-bdfinsv][-S <字尾备份字符串>][-V…

遗传算法初探

组成要素 编码 分为二进制编码、实数编码和顺序编码 初始种群的产生 分为随机方法、基于反向学习优化的种群产生。 基于反向学习优化的种群其思想是先随机生成一个种群P(N)&#xff0c;然后按照反向学习方法生成新的种群OP(N),合并两个种群&#xff0c;得到一个新的种群S(N…