毕设-仿谷粒商城项目(13周周日)

查询所有商品分类-树形结构

   /**
     * 查出所有分类以及子分类,以树形结构组装起来
     */
    @RequestMapping("/list/tree")
    @Override
    public List<CategoryEntity> listithTree() {
        //1.查出分类
        List<CategoryEntity> entities = baseMapper.selectList(null);
        //2.组成父子结构
        //entities.stream().filter(()->{})
        List<CategoryEntity> level1Menus = entities.stream().filter((categoryEntity) -> {
            return categoryEntity.getParentCid() == 0;//找到所有的一级分类【parentId】
        }).map((menu)->{
            menu.setChildren(getChildrens(menu,entities));
            return menu;//递归返回一级分类下的所有
        }).sorted((menu1,menu2)->{
            return (menu1.getSort()==null?0:menu1.getSort()-(menu2.getSort()==null?0:menu2.getSort()));//菜单排序,给空赋值0
        }).collect(Collectors.toList());
        return level1Menus;
    }

    /**
     * 递归返回指定一级分类下的所有子菜单
     * @param root 一级分类
     * @param all 所有菜单
     * @return 子菜单合集
     */
    private List<CategoryEntity> getChildrens(CategoryEntity root,List<CategoryEntity> all){
        List<CategoryEntity> children = all.stream().filter((categoryEntity) -> {
            return categoryEntity.getParentCid() == root.getCatId();//当前菜单是他的子菜单
        }).map((categoryEntity) -> {
            categoryEntity.setChildren(getChildrens(categoryEntity, all));//递归调用,找出子菜单的子菜单
            return categoryEntity;
        }).sorted((menu1,menu2)->{
            return (menu1.getSort()==null?0:menu1.getSort()-(menu2.getSort()==null?0:menu2.getSort()));//菜单排序,给空赋值0
        }).collect(Collectors.toList());
        return children;
    }

修改前端遗留bug:【renren-fast-vue】安装npm时候出现问题

以为是node版本太低,只要在powershell里切换就可以。结果出现新的问题【淘宝镜像过期】

解决方法:【在settings.txt中替换新的镜像】

成功解决

出现新bug

原因:因为之前版本npm的命令一般是XXX -g,但是随着版本更替,这个老方法被弃用了,--global--local被弃用删除,要求改为使用--location=global

node版本太高出现报错

最终只能选择低版本node

前后端联调成功:【曾出现bug:没有验证码-原因:虚拟机没有启动,缺少数据库


前端请求:

角色管理:sys-role                         前端路径:src\views\modules\sys\role.vue

分类维护:路径url:product/category        网页请求:product-category

偶遇bug:'parent.relativePath' of POM io.renren:renren-fast:3.0.0 (D:\LiaoningUniversityofTechnology\2025\code\liyumall\renren-fast\pom.xml) points at com.lnut.liyumall:liyumall instead of org.springframework.boot:spring-boot-starter-parent, please verify your project structure

解决办法:

<parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>2.6.6</version>
       <relativePath/>
</parent>

把renren-fast注册到nacos上,出现新bug:

解决办法:新版的人人fast降低springboot 版本,CorsConfig类改下.allowedOrigins("*")

不要引入公共commom模块,直接引入<artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>

网关重写路径:

修复之前的gateway项目bug【网关失效,无法拦截和断言】

原因【gateway项目依赖有问题,导入了谷粒商城的gateway的pom文件后就成功了】

网关重写业务逻辑:

gateway网关将前端传来的请求进行过滤和断言,修改后发送到renren-fast模块,调用出验证码,最后返回给前端页面。

spring:
  cloud:
    gateway:
      routes:
        - id: admin_route
          uri: lb://renren-fast
          predicates:
            - Path=/api/**
          filters:
            - RewritePath=/api/(?<segment>.*),/renren-fast/$\{segment}
#前端->gateway->renrenfast
#http://localhost:88/api/captcha:jpg -> http://localhost:8080/renren-fast/captcha:jpg

跨域问题:浏览器不能执行其他网站的脚本,是浏览器对javascript施加的安全限制。

同源策略:协议,域名,端口任一不相同,都会产生跨域问题。

解决方法一:【使用nginx部署为同一域】,很少用

解决方法二:【常用方式】

 第一步:在gateway项目中配置

@Configuration
public class liyumallCorsConfiguration {

    @Bean
    public CorsWebFilter corsWebFilter(){
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();

        //1.配置跨域
        corsConfiguration.addAllowedHeader("*");//跨域请求暴露的手段
        corsConfiguration.addAllowedMethod("*");//支持哪些方法跨域
        corsConfiguration.addAllowedOrigin("*");//支持哪些来源的请求跨域
        corsConfiguration.setAllowCredentials(true);//跨域请求包含cookie

        source.registerCorsConfiguration("/**",corsConfiguration);
        return new CorsWebFilter(source);
    }
}

 第二步:将renren-fast中的跨域配置注释

结果:成功登录人人快速开发平台,并且成功发送两次请求【预检请求和真实请求】

 查询-树形展示三级分类数据

1.将product模块注册到nacos当中

#配置中心文件

cloud:
  nacos:
    discovery:
      server-addr: 127.0.0.1:8848

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=6b0f61b9-1001-46b3-83f9-f012671f1d58
spring.application.name=liyumall-product

2.在gateway模块中的网关配置,把product请求转发到product模块当中

- id: product_route
  uri: lb://liyumall-product
  predicates:
    - Path=/api/product/**
  filters:
    - RewritePath=/api/(?<segment>.*),/$\{segment}

3.在前端代码中展现响应的数据

methods: {
      handleNodeClick(data) {
        console.log(data);
      },
      getMenus(){
        this.$http({
        //向product模块的树状分类方法发送请求
          url: this.$http.adornUrl('/product/category/list/tree'),
          method: 'get',
        }).then(({data}) => {
          console.log("成功获取到菜单数据...",data)
          this.menus=data.page
        })
      }
    },

需要对照控制台中的属性来获取,可能是data也可能是page

完成:

三级分类:删除功能

逻辑删除:不是物理删除,而是不显示。【开发中要给实体类预留显示属性】

* 逻辑删除功能
* 1。配置全局的逻辑删除规则【可省略】
* 2。配置逻辑删除的组件bean【可省略】
* 3.给实体bean加上逻辑删除注解TableLogic
/**
 * 是否显示[0-不显示,1显示]
 */
@TableLogic(value = "1",delval = "0")
private Integer showStatus;

删除和新增功能主要编写前端代码,直接调用后端接口,这里省略前端代码记录。。。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值