码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【20-业务开发-基础业务-商品模块-分类管理-前端展示后端具有层级关系的目录数据-商品系统三级分类的逻辑删除前后端代码实现】


    一.知识回顾

    【0.三高商城系统的专题专栏都帮你整理好了,请点击这里!】
    【1-系统架构演进过程】
    【2-微服务系统架构需求】
    【3-高性能、高并发、高可用的三高商城系统项目介绍】
    【4-Linux云服务器上安装Docker】
    【5-Docker安装部署MySQL和Redis服务】
    【6-Git安装与配置过程、Gitee码云上创建项目、IDEA关联克隆的项目】
    【7-创建商城系统的子模块并将修改后的信息使用Git提交到Gitee上】
    【8-数据库表结构的创建&后台管理系统的搭建】
    【9-前端项目的搭建部署、Node安装、VSCode安装】
    【10-Node的安装以及全局环境变量的相关配置&解决启动报错的问题(1.Error: Cannot find module ‘fs/promises)(2.npm安装node-sass报错)】
    【11-导入人人generator项目并自动生成相关的文件&商品子模块的调试&公共模块common子模块的抽离与实现&Lombok插件的安装】
    【12-商品子模块整合MyBatisPlus技术&其它模块通过generator的自动生成与补充完善】
    【13-项目中微服务组件的学习-SpringCloudAlibaba微服务生态体系的学习&SpringCloudAlibaba的依赖管理&项目中SpringBoot和SpringCloud版本的统一】
    【14-微服务的注册中心与配置中心Nacos&Windows操作系统上安装Nacos和Linux操作系统上用Docker中安装Nacos&每个子项目模块使用Nacos进行服务注册与发现】
    【15-项目中服务的远程调用之OpenFeign&订单模块与商品模块集成使用OpenFeign的案例】
    【16-配置中心之Nacos的基本使用&Nacos服务之命令空间、Nacos服务之配置组、Nacos服务之配置拆分】
    【17-微服务网关之Spring Cloud Gateway&Spring Cloud Gateway网关服务搭建】
    【18-业务开发-基础业务-商品模块-分类管理-前后端管理系统的启动-为分类管理表增加数据-Json插件的下载-返回具有层级目录、父子关系结构的数据】
    【19-业务开发-基础业务-商品模块-分类管理-管理系统新建菜单-后端项目renren注册到Nacos注册中心和配置中心去-项目gateway网关模块的搭建-浏览器的同源策略与解决跨域问题实操案例】

    二.前端展示后端具有层级关系的目录数据

    首先需要在Gateway中配置商品服务的路由信息,同时要注意配置规则的先后顺序

    在这里插入图片描述

    然后服务端响应的数据的字段要在Vue文件中显示的对应,才能正确的显示

    在这里插入图片描述

    启动前端项目

    npm run dev
    
    • 1

    启动后端项目:
    依次启动后端管理模块–》网关模块–》商品模块

    启动成功后先去nacos中查看服务是否注册成功
    在这里插入图片描述

    然后进行访问测试

    在这里插入图片描述

    三.商品系统三级分类的删除类别

    3.1 删除类别的前端实现

    product目录下category.vue中前端代码相关的实现

    <template>
        <div>
          <el-tree :data="data" :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="data.catLevel <= 2" type="text" size="mini" @click="() => append(data)">
                  添加
                el-button>
                <el-button v-if="data.childrens.length == 0" type="text" size="mini" @click="() => remove(node, data)">
                  删除
                el-button>
              span>
            span>
          el-tree>
        div>
    template>
      
    <script>
    /* eslint-disable */
        export default {
            data() {
                return {
                data: [],
                defaultProps: {
                    children: "childrens",
                    label: "name",
                },
                };
            },
            methods: {
                getCategory() {
                this.$http({
                    url: this.$http.adornUrl("/product/category/listTree"),
                    method: "get",
                }).then(({ data }) => {
                    console.log("成功获取的类别数据:", data.data);
                    this.data = data.data;
                });
                },append(data) {
                    console.log("添加",data)
                },
                remove(node, data) {
                    console.log("删除",data,node)
                }
            },
            created() {
                this.getCategory();
            },
        };
    script>
    
    <style>
    style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    结果展示:
    在这里插入图片描述

    3.2 逻辑删除类别的后端实现

    在实际开发中针对数据删除这块我们一般都会采用逻辑删除的方法来操作。在本项目中我们可以通过mybatis-Puls中提供的逻辑删除方式来实现。

    Mybatis-plus的逻辑实现
    官方指导方法:
    在这里插入图片描述

    具体实操:
    首先配置全局的逻辑删除逻辑
    在这里插入图片描述

    然后在entity的字段中显示的标明:

    在这里插入图片描述

    controller层定义访问接口
    在这里插入图片描述

    service逻辑层实现相关的接口

    在这里插入图片描述

    然后我们就可以在service实现类中继续使用delete相关的方法来操作了

        /**
         * 逻辑批量删除操作
         * @param ids
         */
        @Override
        public void removeCategoryByIds(List<Long> ids) {
            // TODO  1.检查类别数据是否在其他业务中使用
    
            // 2.批量逻辑删除操作
            baseMapper.deleteBatchIds(ids);
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述
    重新启动我们的mall-produce服务,并查看一下数据库最后第999和1000条数据状态,此时都是1,没有删除状态。
    在这里插入图片描述

    接下来通过postman测试

    在这里插入图片描述

    然后在数据库中反应的效果

    在这里插入图片描述

    3.3 前后端代码的串联实现

    修改前端代码,首先需要通过ajax异步的来提交post请求到后端服务

    <template>
        <div>
            <el-tree :data="data" :props="defaultProps" :expand-on-click-node="false"  show-checkbox node-key="catId" :default-expanded-keys=expandKeys>
                <span class="custom-tree-node" slot-scope="{ node, data }">
                    <span>{{ node.label }}</span>
                    <span>
                        <el-button v-if="data.catLevel <= 2" type="text" size="mini" @click="() => append(data)">
                            添加
                        </el-button>
                        <el-button v-if="data.childrens.length == 0" type="text" size="mini"
                            @click="() => remove(node, data)">
                            删除
                        </el-button>
                    </span>
                </span>
            </el-tree>
        </div>
    </template>
      
    <script>
    /* eslint-disable */
    export default {
        data() {
            return {
                data: [],
                expandKeys:[],
                defaultProps: {
                    children: "childrens",
                    label: "name",
                },
            };
        },
        methods: {
            getCategory() {
                this.$http({
                    url: this.$http.adornUrl("/product/category/listTree"),
                    method: "get",
                }).then(({ data }) => {
                    console.log("成功获取的类别数据:", data.data);
                    this.data = data.data;
                });
            }, append(data) {
                console.log("添加", data)
            },
            remove(node, data) {
                this.$confirm(`是否确认删除【${data.name}】记录?`, "提示", {
                    confirmButtonText: "确定",
                    cancelButtonText: "取消",
                    type: "warning",
                })
                    .then(() => {
                        // 传递的数据
                        let ids = [data.catId];
                        // 把删除的请求提交到后台服务
                        this.$http({
                            url: this.$http.adornUrl("/product/category/delete"),
                            method: "post",
                            data: this.$http.adornData(ids, false),
                        }).then(({ data }) => {
                            if (data && data.code === 0) {
                                this.$message({
                                    message: "操作成功",
                                    type: "success",
                                });
                                // 重新加载所有的菜单数据
                                this.getCategory();
                                // 设置默认展开的父节点信息
                                this.expandKeys = [node.parent.data.catId]
                            } else {
                                this.$message.error(data.msg);
                            }
                        });
                    })
                    .catch(() => {
                        this.$message({
                            type: "info",
                            message: "已取消删除",
                        });
                    });
                console.log("删除", data, node);
            }
        },
        created() {
            this.getCategory();
        },
    };
    </script>
    
    <style>
    
    </style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91

    测试删除数据和取消删除是否成功:

    删除数据弹出是否删除
    在这里插入图片描述

    删除成功
    在这里插入图片描述

    取消删除
    在这里插入图片描述

    最后删除成功数据后Tree数据刷新及对应的Tree的默认展示父节点信息

    在这里插入图片描述
    绑定的属性
    在这里插入图片描述
    设置属性的值
    在这里插入图片描述

    好了,关于【20-业务开发-基础业务-商品模块-分类管理-前端展示后端具有层级关系的目录数据-商品系统三级分类的逻辑删除前后端代码实现】就先学习到这里,更多内容持续创作学习中!敬请期待。

  • 相关阅读:
    [第二十二篇]——Docker 安装 MongoDB
    【ARM Cortex-M 系列 4 番外篇 -- 常用 benchmark 介绍】
    网络安全“三保一评”深度解析
    【无标题】
    Spring Bean 的作用域(Bean Scope)
    Python面向对象特性——多继承【Python中的mro方法搜索顺序、新式类和旧式(经典)类)】
    力扣(350.121)补9.3
    TSINGSEE视频AI智能分析技术:水泥厂安全生产智能监管解决方案
    网络安全(黑客)自学
    STM32HAL库-IWDG篇
  • 原文地址:https://blog.csdn.net/Coder_ljw/article/details/127938777
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号