首页 > 其他分享 >Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二

时间:2023-06-11 16:00:49浏览次数:54  
标签:wiki 10 -- Spring oss process cto image

接着上一次Spring Boot & Vue3 前后端分离 实战 wiki 知识库系统<七>--分类管理功能开发的分类功能继续完善。

分类编辑功能优化:

概述:

现在分类编辑时的界面长这样:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_vue3

很明显目前的父分类的展现形式不太人性,这里需要指定父分类的id才可以,对于用户来说这种交互是反人道的,用户怎么知道父分类在数据库中的id值呢?所以接下来咱们需要来优化一下它,其优化的效果如下:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_02

也就是新增/修改分类时,支持选中某一分类作为父分类,或无父分类。

说实话,对于小白来说,要实现这么一个效果,还是挺让人抓狂的,下面则来一点点攻克它。

实现:

1、先来挑选下拉框组件:

首先上Ant Design Vue上来挑选下拉框组件,如下:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_03

咱们将它集成到自己的页面中先来看一下效果:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_vue3_04

运行:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_vue3_05

2、修改下拉框数据

接下来咱们则来将下拉框展示所有的父分类,如下:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_vue3_06

此时运行:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_07

其中为了调试方便,将这个文本框先保留,能看出选择之后的父分类ID:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_08

此时咱们新建编辑看一下,是否好使:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_09

一切正常。

3、禁止父分类可以选择自己:

这里演示一个bug:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_10

发现木有,新建的“测试”这个父分类,在编辑时,还是选择它,再保存时就从列表中消失不见了,因为我们显示一级分类的id都是0,而“测试”这个分类在编辑时由于将父分类也选择成了自己了,那么很显然它的父分类id就变成了“测试”的id,而不是一个0,当然就显示不到这个列表上了。

所以需要规避这种情况,其思路也很简单,就是在父分类选择中,将自己这一项不让用户选既可,而让选项置灰也很简单:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_vue3_11

加一个属性既可,所以咱们需要做一个判断:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_12

此时再来看一下效果:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_13

最后咱们将测试的这个文本框给去掉:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_vue3_14

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_15

最终的效果:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_vue3_16

电子书管理增加分类选择:

概述:

对于电子书管理这个模块来说,也有分类的选择属性:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_17

所对应的数据库字段:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_vue3_18

那很明显目前的电子书新增时对于分类的选择是非常不人性的,需要让用户指定分类的id,所以接下来需要来优化电子书编辑时分类的选择。

实现:

1、上Ant Design Vue寻找分类选择组件:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_19

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_vue3_20

 而最终咱们要实现的效果如下:

 

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_21

 

接下来看一下它的实现代码:

<template>
  <a-cascader v-model:value="value" :options="options" placeholder="Please select" />
</template>

其中v-model:value中的值其实是选择的多个分类:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_22

也就是它里面是一个数组:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_23

而:options则是分类的树形菜单,这个在分类管理的树形显示中已经知道怎么将其转换成树形结构了。

2、查询所有分类:

为了能让分类可以让用户选择,很明显需要查询出所有的分类,并将数据以树形的结构组装起来,这块可以直接用分类管理的:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_24

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_vue3_25

3、显示所有分类:

接下来咱们就可以在编辑分类时显示级联效果,原来我们是把分类一和分类二都显示了,没有一个树形结构:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_26

现在很明显需要将这俩合二为一了,变成这样:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_27

此时就需要用到a-cascader,修改如下:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_vue3_28

那怎么修改呢?很明显这个分类这一列的样式应该需要定义一下,此时就需要用到<a-table>自定义渲染了,如下:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_29

接下来则需要来定义categoryIds这个响应式变量了:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_30

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_31

这个响应式的变量的含义有木有明白?它其实就是用来保存选择二级分类的两个分类id的,也就是这个级联控件选择之后,会将选择的两个分类的id存在categoryIds变量中,接下来在显示的时候,则需要将这个变量给分解开了,如下:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_vue3_32

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_33

接下来运行的效果如下:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_34

4、选择分类保存处理:

接下来处理一下编辑时分类保存的逻辑,现在点击编辑其显示效果是出来了:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_35

但是只是一个假像,没有处理保存的逻辑,下面来处理一下。

编辑分类回显:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_36

而categoryIds刚好是级联控件所使用的:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_37

 

保存分类数据:

接下来则来将选择的分类保存到数据库中,如下:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_38

好,接下来运行看一下效果:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_vue3_39

5、从数据库中读取选择的分类:

接下来还差最后一步,就是列表分类的显示处理了,目前我们的分类显示的是id:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_vue3_40

而处理它,其实就是根据id到分类列表中找到对应的分类名,如下:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_vue3_41

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_42

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_43

此时运行一下,你会发现结果有问题:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_vue3_44

原因是因为获取的这个方法有点问题,得改一下:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_vue3_45

再运行就正常显示了:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_46

首页显示分类菜单:

效果:

接下来则需要来完善一下首页的分类菜单了,也就是这块的东东:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_47

而最终的效果就是:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_48

实现:

1、加载分类数据,变成树形结构:

这块代码跟之前分类管理加载所有分类是一样的,如下:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_vue3_49

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_50

2、显示菜单:

接下来则循环树型分类数据,将分类菜单给展现出来,如下:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_51

对于这段代码是不是有点陌生了,你能理解它么?

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_52

不用理解,这其实就是Ant Design Vue中这个分类组件的模板代码,此时运行的效果:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_vue3_53

发现咋展不开呢?

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_vue3_54

将它去掉:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_55

点击分类菜单显示电子书:

接下来则需要来完成点击分类,查把该分类下所有的电子书给查出来了。

点击分类重新查询电子书:

1、菜单增加点击事件:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_56

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_57

运行看一下:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_58

其中可以发现,只有点击二级分类时才会进行打印,也符合常理。

2、根据二级分类来查询电子书:

在点击时我们先获取二级分类的id【由于我们点击只有响应二级分类,所以这里查询的话也只查二级分类了】,如下:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_vue3_59

这里在点击之后需要发起一下查询动作,所以我们可以将这一段代码封装一下:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_60

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_61

电子书后端接口增加分类参数:

1、EbookController:

接下来则需要回到后端进行电子书查询接口的修改了,先来找到列表查询接口:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_vue3_62

其中查询参数中目前只有:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_63

咱们则需要再加一个二级分类的id了:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_64

2、EbookService:

接下来则来到Service中增加对于这个参数的查询处理:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_65

这样对于电子书二级分类的查询接口就写好了。

运行:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_66

 

首页显示欢迎页面:

概述:

最后,咱们对于首页做一个小调整,就是进来时先显示欢迎页,也就是长这样:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_67

实现:

1、定义欢迎的内容区域:

对于右侧的内容我们是定义了一个列表标签:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_68

这里我们再来定义一个欢迎区域:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_69

2、左侧菜单增加一个欢迎项:

接下来左侧菜单新增一个欢迎项,用来回到首页,如下:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_70

其中要注意,这里的key我们定义死了,以便之后在进行点击事件的处理里使用。

3、点击分类时,则需要隐藏欢迎页:

先来定义一个响应式的变量用来控制这个欢迎的显示与隐藏:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_springboot_71

然后在点击分类时对该变量进行一下控制:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_vue3_72

此时咱们还需要在控件上使用该响应式的变量,如下:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_73

4、运行:

运行看一下效果:

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_74

总结:

其实也没啥可总结的,写这篇断断续续地耗时大约2个多月,也是因为工作上的烦心事比较多,思想变懒惰了,但是无论如何,不要忘了坚持就可以了,人的心情也是会随着四季的变化而变化,心情不好思想懒惰懒惰也是很有必要的,人生漫漫,学会享受各种变化,心灵鸡汤就不多说了,下篇继续~~




关注个人公众号,解锁完整文章

Spring Boot&Vue3前后端分离实战wiki知识库系统<八>--分类管理功能开发二_java后端_75




标签:wiki,10,--,Spring,oss,process,cto,image
From: https://blog.51cto.com/u_15456329/6458078

相关文章

  • 01-《程序员修炼之道——从小工到专家》读书笔记
     这本书描述了一些程序员编写大型项目时所应该遵循的最基本的原则和可以使用的最基本的工具。它没有描述某一种特定的语言、特定的算法,也没有推荐一种编程方法作为万灵药,而是介绍了实用主义的思想,并介绍了一整套方法论帮助程序员与团体避免错误、避免浪费无谓的时间,更有效地开发......
  • 谈感悟(1)
    ​记得看到一篇文章,说的是某明星不敢进入社交平台,说是消耗自己太多时间。想一想现在又多少人是一刷抖音就是一天的,有多少人一玩游戏就是一天的。记得之前听同事说他家的孩子每天都要刷抖音,不给看就不吃反,且脾气非常不好。其他的不说,成年人也是有很多沉迷于其中的。​当你自己干......
  • Laravel 框架使用外部的js、css等文件
    Laravel框架使用外部的js、css等文件阅读有道云笔记https://note.youdao.com/s/d1ZQ9AC8Laravel项目的web虚拟主机指定的目录(即网址的根目录),项目的入口文件笔系统的静态资源目录(css、img、js、uploads)后期使用的外部静态文件都需要放到Public目录下,图中所示,可以想像成views......
  • 十三周
    3、设计三个类,分别如下:(知识点:抽象类及抽象方法)[必做题]•3.1设计Shape表示图形类,有面积属性area、周长属性per,颜色属性color,有两个构造方法(一个是默认的、一个是为颜色赋值的),还有3个抽象方法,分别是:getArea计算面积、getPer计算周长、showAll输出所有信息,还有一个求颜色的方法getCo......
  • 02-《程序员修炼之道——从小工到专家》读书笔记
    复制别人的代码时,代码中可能包含了我们并不需要的段落,或者是出现了我们并不理解的逻辑,这会导致我们的代码不够清晰、不够简洁。另外,如果我们使用之前成功的代码来解决新问题,那么我们就会变成一个只能解决管理员问题,却不能写出优秀代码的程序员。最后,当我们不写注释时,这会让后来的......
  • 6/11 闲话
    学别人推个歌:逃避行——Imase歌词さよなら逃避行昨日の酔いも覚めない君と抜け出す街を行こう背負い込んだ重い過去も飲み込んだ思いすらも乗り越えた乗り越えた二人で錆びついたこの心も夢を見たあの気持ちと飛び込んだ飛び込んだ二人でさよなら......
  • 03-《程序员修炼之道——从小工到专家》阅读笔记
     重写、重做和重新架构代码合起来,称为重构。那么我们该在什么时候进行重构呢?当你遇到绊脚石——代码不再合适,你注意到有两样东西其实应该合并或是其他任何对你来说是“错误”的东西,那么你不要对改动犹豫不决,应该现在就做。但往往现实世界特别复杂,当你去找你的老板和客户,对他们说......
  • winform安全登录方式
    1.在配置文件中记录用户名以及密码,当然需要加密,每次通过解密加载用户信息(不算安全)2.把加密后的数据存储在注册表中,每次从注册表中加载解密3.客户端只保存以哦那个用户账户信息,然后登录成功后将数据存储在后端的webapi中,即服务器中,并辅以过期时间(至于是你的本地缓存还是分布式缓......
  • 打开Windows测试模式
    0概述为了在发布前测试Windows驱动,需要在本地计算机上做验证,就需要打开Windows“测试模式”,即TestMode。1步骤关闭“安全启动”,即secureboot;打开“测试模式”,即testmode;安装驱动1.1关闭“安全启动”(secureboot)首先查看计算机是否已开启secureboot,如果未开启,则直......
  • python: Decorators
      #装饰器defprintpy(func):definner_func():func()print("hellopython!GeovinDu")returninner_func#@装饰器@printpydefprinthello():print("helloworld!")#调用printhello()'''De......