谷粒商城【成神路】-【3】——三级分类

目录

🍿1.查询三级分类

🧂2.前端页面搭建 

🍟3.添加网关

🍳4.解决跨域 

🧇5.显示分类 

🥞6.显示复选框 


1.查询三级分类

1.controller

直接调用service层的接口

 @RequestMapping("/list/tree")public R list(){List<CategoryEntity> entityList=categoryService.listWithTree();return R.ok().put("data",entityList);}

2.service

  • 1.查询所有分类
  • 2.找到所有的一级分类
  • 3.在一级分类下递归子菜单
 //查出所有分类@Overridepublic List<CategoryEntity> listWithTree() {//1.查出所有分类List<CategoryEntity> entities = baseMapper.selectList(null);//2.组装成父子结构//2.1---找到所有的一级分类List<CategoryEntity> level1Menus = entities.stream().filter((categoryEntity) -> {return categoryEntity.getParentCid() == 0;}).map((menu) -> {menu.setChildren(getChildren(menu, entities));return menu;}).sorted((menu1, menu2) -> {return menu1.getSort() - menu2.getSort();}).collect(Collectors.toList());return level1Menus;}//递归查找所有菜单的子菜单private List<CategoryEntity> getChildren(CategoryEntity root, List<CategoryEntity> all) {List<CategoryEntity> children = all.stream().filter(categoryEntity -> {return categoryEntity.getParentCid() == root.getCatId();}).map((categoryEntity -> {//递归找到子菜单categoryEntity.setChildren(getChildren(categoryEntity, all));return categoryEntity;})).sorted((menu1,menu2)->{//2.排序return (menu1.getSort()==null?0:menu1.getSort())-(menu2.getSort()==null?0:menu2.getSort());}).collect(Collectors.toList());return children;}

2.前端页面搭建 

  • 1.启动renren-fast的前后端,并新建目录

  • 2.在renren-fast-vue.src.modules下新建目录product,并在目录下创建category.vue 

根据在目录下新增菜单的URI进行创建

 编写建category.vue 

<template><el-tree:data="data":props="defaultProps"@node-click="handleNodeClick"></el-tree>
</template>
<script>
export default {data () {return {data: [],defaultProps: {children: 'children',label: 'label'}}},methods: {handleNodeClick (data) {console.log(data)},getMenus () {this.$http({url: this.$http.adornUrl('/product/category/list/tree'),method: 'get'}).then((data) => {console.log('获取成功菜单数据', data)})}},created () {this.getMenus()}
}
</script>
  • 3.更改访问地址

访问地址路由到网关

3.添加网关

  • 1.将renren-fast项目添加到注册中心
  • 注意:
  • 1.springboot的版本号以及cloud的版本号
  • 2.服务名称
  • 3.nacos注册地址

  • 2.添加网关配置 

  • 3.实测

发现访问地址已经路由到网关

4.解决跨域 

  • 1.添加跨域配置

在网关层添加跨域配置

小张发现直接运行不添加网关也能进入~不知阁下可否~~~

@Configuration
public class GulimallCorsConfiguration {@Beanpublic CorsWebFilter corsWebFilter() {UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();CorsConfiguration corsConfiguration = new CorsConfiguration();//1.配置跨域corsConfiguration.addAllowedHeader("*");corsConfiguration.addAllowedMethod("*");corsConfiguration.addAllowedOrigin("*");corsConfiguration.setAllowCredentials(true);//是否允许cookieurlBasedCorsConfigurationSource.registerCorsConfiguration("/**",corsConfiguration);return new CorsWebFilter(urlBasedCorsConfigurationSource);}
}
  • 2.去除renren-fast的跨域配置 

前面配置了自己的网关,将renren-fast自带的网关删除调,否则报错

5.显示分类 

  • 1.在将product添加到网关

注意路由的格式

spring:cloud:gateway:routes:#product三级分类- id: product_routeuri: lb://gulimall-productpredicates:- Path=/api/product/**filters:- RewritePath=/api/(?<segment>.*),/$\{segment}#全部- id: admin_routeuri: lb://renren-fastpredicates:- Path=/api/**filters:- RewritePath=/api/(?<segment>.*),/renren-fast/$\{segment}

注意:先后让精确的路由放到最上面

  •  2.配置前端vue
<template><el-tree:data="menus":props="defaultProps"@node-click="handleNodeClick"></el-tree>
</template>
<script>
export default {data () {return {menus: [],defaultProps: {children: 'children',label: 'name'}}},methods: {handleNodeClick (data) {console.log(data)},getMenus () {this.$http({url: this.$http.adornUrl('/product/category/list/tree'),method: 'get'}).then(({data}) => {console.log('获取成功菜单数据', data.data)this.menus = data.data})}},created () {this.getMenus()}
}
</script>

6.显示复选框 

显示复选框以及,删除和显示按钮

让后端看前端,我看到的他们的神奇

<template><el-tree :data="menus" :props="defaultProps"  :expand-on-click-node="false" show-checkbox node-key="catId"><span class="custom-tree-node" slot-scope="{ node, data }"><span>{{ node.label }}</span><span><el-button v-if="node.level <=2" type="text" size="mini" @click="() => append(data)">Append</el-button><el-button v-if="node.childNodes.length==0" type="text" size="mini" @click="() => remove(node, data)">Delete</el-button></span></span></el-tree>
</template>
<script>
export default {data () {return {menus: [],defaultProps: {children: 'children',label: 'name'}}},methods: {handleNodeClick (data) {console.log(data)},getMenus () {this.$http({url: this.$http.adornUrl('/product/category/list/tree'),method: 'get'}).then(({ data }) => {console.log('获取成功菜单数据', data.data)this.menus = data.data})},append (data) {console.log('append', data)},remove (node, data) {console.log('remove', node, data)}},created () {this.getMenus()}
}
</script>

 

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

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

相关文章

代码重构的五大心法

背景介绍 最近在团队工作中花了不少心思主导建设了测试平台&#xff0c;前期的建设思路是能用就行&#xff0c;随着建设的深入&#xff0c;逐渐需要学习下代码架构设计方面的内容了。于是参加了公司组织的代码重构与模式的培训&#xff0c;通过培训&#xff0c;感觉收获颇丰&a…

Java设计模式-组合模式(13)

大家好,我是馆长!今天开始我们讲的是结构型模式中的组合模式。老规矩,讲解之前再次熟悉下结构型模式包含:代理模式、适配器模式、桥接模式、装饰器模式、外观模式、享元模式、组合模式,共7种设计模式。 组合模式(Composite Pattern) 定义 组合(Composite)模式:又叫…

【Android 字节码插桩】Gradle插件基础 Transform API的使用

前言 啪~我给大家开个会&#xff08;手机扔桌子上&#xff09; 什么叫做 客户无感的数据脱敏&#xff01;&#xff1f; 师爷给翻译翻译什么叫做客户无感的数据脱敏&#xff1f; 什么特么的叫做客户无感数据脱敏&#xff1f; 举个栗子~ 客户端Sdk新升级了一个版本&#xff0c;增…

uniapp+微信小程序+nodejs问题记录

一、前言 通过uniapp进行微信小程序调试。服务端使用NodeJs。 二、报错统计 1、本地调试时微信小程序报错&#xff1a;request:Cannot send network request to localhost 解决方法&#xff1a; 【微信小程序开发平台】-【本地设置】-勾选“不校验合法域名、web-view、TLS版本…

猫什么时候发腮?性价比高的发腮主食冻干推荐

猫什么时候发腮&#xff1f;发腮是猫咪成长过程中一个重要的体征&#xff0c;也是猫父母们非常关心的问题。想要让猫咪拥有可爱的肉嘟嘟脸型&#xff0c;主人需要在适龄的年龄段加强营养补给&#xff0c;不要错失最佳发腮期。猫什么时候发腮呢&#xff1f;应该怎样喂养才能让猫…

关于谷歌新版调试用具(Chrome Dev Tool ),网络选项(chrome-network)默认开启下拉模式的设置

今天在使用谷歌浏览器进行调试的时候&#xff0c;打开调试工具网络选项发现过滤不同模式的选项卡不见了&#xff0c;转而变成一个下拉式选项&#xff0c;如下图 这样一来使得切换不同类型查看的时候变得非常不方便&#xff0c;然后网上查了一下发现这个功能谷歌在很早版本就已…

Modelsim10.4安装

简介&#xff08;了解&#xff0c;可跳过&#xff09; modelsim是Mentor公司开发的优秀的HDL语言仿真软件。 它能提供友好的仿真环境&#xff0c;采用单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术和单一内核仿真技术&#xff0c;编译仿真速…

【ARM Trace32(劳特巴赫) 使用介绍 3.1 -- 不 attach core 直接访问 memory】

文章目录 背景介绍背景介绍 在使用 trace32 时在有些场景需要不 attach core 然后去读写 memory,比如在某些情况下 core 已经挂死连接不上了,这个时候需要dump内存,这个时候需要怎做呢? print "test for memory access directly";SYStem.OPTION WAITRESET OF…

Python实现免费压缩解压---tarfile模块详解

文章目录 tarfile 压缩模块tarfile的语法格式&#xff08;1&#xff09;打开/创建压缩包&#xff08;2&#xff09;压缩文件&#xff08;3&#xff09;解压文件&#xff08;4&#xff09;追加文件&#xff08;5&#xff09;查看压缩包中的内容 使用with进行改造 tarfile 压缩模…

SmartX 在保险(2023):服务 40+ 客户,聚焦信创转型与高性能数据库场景

更新内容&#xff1a; 更新 SmartX 超融合在保险行业的覆盖范围与部署规模。更新保险客户超融合应用情况。新增 Nutanix 国产化替代、高性能数据库构建与验证、企业云原生转型等场景实践。更多超融合金融核心生产业务场景实践&#xff0c;欢迎阅读文末电子书。 近两年来&…

稀疏场景高性能训练方案演变|京东广告算法架构体系最佳实践

近年来&#xff0c;推荐场域为提升模型的表达能力和计算能力&#xff0c;模型规模和计算复杂度大幅增加&#xff0c;同时&#xff0c;高规格硬件资源为模型迭代、算法优化带来了更大的机遇和挑战。为了应对模型规模和算力升级带来的存储、IO和计算挑战&#xff0c;京东零售广告…

网络服务第四次项目(配置dns服务的正反向解析)

目录 实验要求 实验步骤 一、基础配置 1.1、服务端配置静态IP 1.2、客户端配置静态IP 二、配置dns服务的正向解析 2.1、服务端编辑主配置文件named.conf 2.2、服务端编辑主配置文件named.rfc1912.zones 2.3&#xff0c;服务端编辑数据配置文件&#xff0c;使用拷贝…