文章目录
-
- 1.逻辑删除家居分类
-
-
- 1.将之前的docker数据库换成云数据库
- 2.树形控件增加添加和删除按钮
-
- 1.找到控件
- [2.粘贴四个属性到<el-tree 属性>](#2.粘贴四个属性到<el-tree 属性>)
- 3.粘贴两个span到<el-tree>标签里
- 4.代码
- 5.效果
- 6.方法区新增两个方法处理添加和删除分类
- 7.输出查看一下信息
- 8.要求节点等级小于等于2允许有Add,没有子节点允许Delete
- 3.MyBatis-Plus逻辑删除
-
- 1.官方文档
- 2.具体介绍
- 3.配置方式
-
- 1.在application.yml的db-config下添加logic的三句话,逻辑已删除值为0,未删除值为1
- [2.com/sun/sunliving/commodity/entity/CategoryEntity.java 给相应字段添加 @TableLogic 注解](#2.com/sun/sunliving/commodity/entity/CategoryEntity.java 给相应字段添加 @TableLogic 注解)
- [3.如果没有在application.yml中配置逻辑删除的值,还可以直接在@TableLogic 注解中指定](#3.如果没有在application.yml中配置逻辑删除的值,还可以直接在@TableLogic 注解中指定)
- 4.postman测试逻辑删除
-
- [1.发送请求 http://localhost:9091/commodity/category/delete](#1.发送请求 http://localhost:9091/commodity/category/delete)
- 2.查看表字段
- [3.使用MyBatis-Plus再查询一下 ,发现确实不会再被查到了 http://localhost:9091/commodity/category/list](#3.使用MyBatis-Plus再查询一下 ,发现确实不会再被查到了 http://localhost:9091/commodity/category/list)
- 5.点击超链接完成删除
- 6.删除前弹出提示框
- 7.删除后弹出操作成功
- 3.树形控件展开设置
-
- 2.添加子分类信息到数据库
-
-
- 1.前端添加对话框控件
-
- 1.查找控件
- 2.部署控件
-
- [1.将选中的部分粘贴到 category.vue的el-tree标签后](#1.将选中的部分粘贴到 category.vue的el-tree标签后)
- 2.使用div将两个控件包起来否则会有编译错误
- 3.前端测试访问
- 3.基础代码
- 4.初始化对话框
- 5.发送请求,将数据保存到数据库
-
- 1.打开注释,显示对话框
- [2.编写 addCategory方法](#2.编写 addCategory方法)
- 3.测试
- 6.注意事项
-
- 1.如果添加中文乱码,就在数据库的请求地址中加一段
- 2.ESLint检测介绍
- [3.注释掉 build/webpack.base.conf.js 中的一段代码然后重启](#3.注释掉 build/webpack.base.conf.js 中的一段代码然后重启)
-
- 3.修改分类信息
- 4.批量逻辑删除家居分类
-
-
- 1.获取批量选择的id
-
- 1.问AI
- [2.el-tree 增加属性 ref="treeRef"](#2.el-tree 增加属性 ref="treeRef")
- 3.添加批量删除按钮
- 4.编写handleBatchDelete方法,获取所有选中的id
- 5.浏览器测试
- 2.批量从数据库删除
-
1.逻辑删除家居分类
1.将之前的docker数据库换成云数据库
2.树形控件增加添加和删除按钮
1.找到控件
![](https://file.jishuzhan.net/article/1790155979103408129/f7e288ff7aa9b21f6652b2863abe01a0.webp)
2.粘贴四个属性到<el-tree 属性>
![](https://file.jishuzhan.net/article/1790155979103408129/254ef1c8f9e3b7d1aa6ebf966f293af8.webp)
3.粘贴两个span到标签里
![](https://file.jishuzhan.net/article/1790155979103408129/c660f7ef3d252c38866108ecb3db2589.webp)
4.代码
vue
<template>
<el-tree :data="data"
:props="defaultProps"
show-checkbox
node-key="id"
:expand-on-click-node="false">
<span class="custom-tree-node" slot-scope="{ node, data }">
<span>{{ node.label }}</span>
<span>
<el-button
type="text"
size="mini"
@click="() => add(node, data)">
Add
</el-button>
<el-button
type="text"
size="mini"
@click="() => remove(node, data)">
Delete
</el-button>
</span>
</span>
</el-tree>
</template>
5.效果
![](https://file.jishuzhan.net/article/1790155979103408129/6be20eed123292a8fdabbcf046e24fdf.webp)
6.方法区新增两个方法处理添加和删除分类
![](https://file.jishuzhan.net/article/1790155979103408129/6cee99effc61cb85085c0a3248d0919b.webp)
7.输出查看一下信息
![](https://file.jishuzhan.net/article/1790155979103408129/6cc54a228ac4595779ecb9438f25f06b.webp)
8.要求节点等级小于等于2允许有Add,没有子节点允许Delete
![](https://file.jishuzhan.net/article/1790155979103408129/e633f6efc1c14b5289adfadd9507cc2f.webp)
![](https://file.jishuzhan.net/article/1790155979103408129/bfb88d274ebc84418a2572aacdf359cc.webp)
3.MyBatis-Plus逻辑删除
1.官方文档
https://baomidou.com/pages/6b03c5/#步骤-1-配置com-baomidou-mybatisplus-core-config-globalconfig-dbconfig
2.具体介绍
![](https://file.jishuzhan.net/article/1790155979103408129/7b233b3e7172a8a31fad07daa90adf4c.webp)
3.配置方式
1.在application.yml的db-config下添加logic的三句话,逻辑已删除值为0,未删除值为1
yaml
mybatis-plus:
mapper-locations: classpath:/mapper/**/*.xml # 这个表示扫描mapper文件夹下的所有xml文件,即使是子文件夹下的也会扫描
global-config:
db-config:
logic-delete-field: flag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
logic-delete-value: 0 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 1 # 逻辑未删除值(默认为 0)
id-type: auto # 主键策略自增,就是不给主键赋值也会自动增长,配置entity的注解@TableId使用
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 控制台打印sql语句,生产环境中可以去掉
2.com/sun/sunliving/commodity/entity/CategoryEntity.java 给相应字段添加 @TableLogic 注解
![](https://file.jishuzhan.net/article/1790155979103408129/e27c67cbb3bc71a1b68fc6814bf300e1.webp)
3.如果没有在application.yml中配置逻辑删除的值,还可以直接在@TableLogic 注解中指定
![](https://file.jishuzhan.net/article/1790155979103408129/08a35cc16d668de71e8235f50d00622c.webp)
4.postman测试逻辑删除
1.发送请求 http://localhost:9091/commodity/category/delete
![](https://file.jishuzhan.net/article/1790155979103408129/c9e35cca58ed01a30fc4f876e12cdc59.webp)
2.查看表字段
![](https://file.jishuzhan.net/article/1790155979103408129/9e8216e63e3bf31a1d767e2be0756f15.webp)
3.使用MyBatis-Plus再查询一下 ,发现确实不会再被查到了 http://localhost:9091/commodity/category/list
![](https://file.jishuzhan.net/article/1790155979103408129/e2ffa6aa816d62be942c3b8be78893b9.webp)
5.点击超链接完成删除
1.点击删除查看返回信息
![](https://file.jishuzhan.net/article/1790155979103408129/910e437c88118e13d317cb9f7f49fb0f.webp)
2.输出查看id
![](https://file.jishuzhan.net/article/1790155979103408129/aff53b0464a08b35897055bd39a61057.webp)
![](https://file.jishuzhan.net/article/1790155979103408129/7b4891f6713ee412bb8dee3ff3a8553f.webp)
3.代码实现
js
// 删除分类
remove(node, data){
// 获取要删除的id
var ids = [data.id]
// 发送请求
this.$http({
url: process.env.BASEPATH + '/commodity/category/delete',
method: 'post',
data: this.$http.adornData(ids, false)
}).then(({data}) => { // 解构了data
this.getCategories() // 重新获取分类列表
})
}
4.删除两个灯具测试
![](https://file.jishuzhan.net/article/1790155979103408129/d708b8764e437afa742b9f0c0f84ccf9.webp)
5.数据库信息
![](https://file.jishuzhan.net/article/1790155979103408129/133efd511dfd98e7eb85859c03375d41.webp)
6.删除前弹出提示框
1.完整代码
js
// 删除分类
remove(node, data){
// 获取要删除的id
var ids = [data.id]
// 弹出确认框
this.$confirm(`确定对【${data.name}】进行删除操作?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then( () => {
// 发送请求
this.$http({
url: process.env.BASEPATH + '/commodity/category/delete',
method: 'post',
data: this.$http.adornData(ids, false)
}).then(({data}) => { // 解构了data
this.getCategories() // 重新获取分类列表
})
}).catch(() => {})
}
2.删除测试
![](https://file.jishuzhan.net/article/1790155979103408129/c6987e88ae592eba2752d8c05c873b4c.webp)
![](https://file.jishuzhan.net/article/1790155979103408129/ce9e2d84e57c5f018e8c725001969795.webp)
![](https://file.jishuzhan.net/article/1790155979103408129/b303710dddb5289902bc2f0e8b38d5de.webp)
![](https://file.jishuzhan.net/article/1790155979103408129/1087e51ebdca742644323355b5ef1ac9.webp)
7.删除后弹出操作成功
1.添加代码
js
// 添加成功提示
this.$message({
message: '操作成功',
type: 'success'
})
![](https://file.jishuzhan.net/article/1790155979103408129/712305fe13c611b7b9bc9f2a04c4a290.webp)
2.删除测试
![](https://file.jishuzhan.net/article/1790155979103408129/4a95cb42e630e6e85e553d1903d2476c.webp)
3.树形控件展开设置
1.设置默认全部展开
![](https://file.jishuzhan.net/article/1790155979103408129/c597d113da0dc00b31d58e6981880afd.webp)
![](https://file.jishuzhan.net/article/1790155979103408129/a32fdceb6a6472e70be55c80d5a3fe4a.webp)
2.设置删除分类之后保持原来状态
- 设置属性
![](https://file.jishuzhan.net/article/1790155979103408129/6a5805c17e25ff33ad6a6e1c250feb72.webp)
- 设置数据池
![](https://file.jishuzhan.net/article/1790155979103408129/932e8c787092123c6821e99f94b59319.webp)
- 在获取分类列表之后展开父节点
![](https://file.jishuzhan.net/article/1790155979103408129/ed98fcedbbf7f2820da50c01cda8ebf4.webp)
![](https://file.jishuzhan.net/article/1790155979103408129/93fd5ed339fd2a01e95ebd2b0e54efbe.webp)
2.添加子分类信息到数据库
1.前端添加对话框控件
1.查找控件
1.官网
https://element.eleme.cn/#/zh-CN/component/dialog
2.具体控件
![](https://file.jishuzhan.net/article/1790155979103408129/9aec7e9251fdc9a3eb125753e02acb4d.webp)
2.部署控件
1.将选中的部分粘贴到 category.vue的el-tree标签后
![](https://file.jishuzhan.net/article/1790155979103408129/0f21db8504cf8876c4b0dfd95a1875e0.webp)
![](https://file.jishuzhan.net/article/1790155979103408129/c7108dcecd8723467721a00f142c82ca.webp)
2.使用div将两个控件包起来否则会有编译错误
![](https://file.jishuzhan.net/article/1790155979103408129/fabed1681f6caf5a5752eeef11ccc6b2.webp)
3.前端测试访问
![](https://file.jishuzhan.net/article/1790155979103408129/9569258e66334a2d81baf6b1f43e4706.webp)
3.基础代码
1.对话框控件
vue
<!-- dialogVisible 表示是否显示对话框-->
<el-dialog title="收货地址" :visible.sync="dialogVisible">
<!-- categorydao 是表单的数据 -->
<el-form :model="category">
<el-form-item label="分类名">
<el-input v-model="category.name" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="addCategory">确 定</el-button>
</div>
</el-dialog>
2.数据池 category 表示表单数据 dialogVisible 表示是否显示弹窗
![](https://file.jishuzhan.net/article/1790155979103408129/365bd8b6631935266948790397fb719c.webp)
3.方法池 add 显示对话框 addCategory 点击确定后触发这个方法
js
// 添加分类信息到数据库,点击确定按钮时触发
addCategory() {
alert("addCategory")
this.dialogVisible = false
},
// 添加分类
add(data) {
console.log("data", data) // data是当前节点的数据
this.dialogVisible = true // 显示添加对话框
}
4.测试
![](https://file.jishuzhan.net/article/1790155979103408129/965cac81be0f7ba80d4c1b07108c6a75.webp)
![](https://file.jishuzhan.net/article/1790155979103408129/ccaa24569c9714c65403c5a993fb6ec6.webp)
4.初始化对话框
1.数据池声明对话框数据
js
category : { // 表单数据
id: null,
name: '',
parentId: 0,
catLevel: 0,
isShow: 1,
sort: 0,
icon: '',
proUnit: '',
proCount: 0
}
2.方法池设置在弹出对话框之前给对话框赋默认值
js
// 添加分类
add(data) {
console.log("data", data) // data是当前节点的数据
// 设置对话框初始数据
this.category = {
id: null,
name: '',
parentId: data.id, // 父层级id
catLevel: data.catLevel + 1, // 父层级的级别 + 1
isShow: 1,
sort: 0,
icon: '',
proUnit: '',
proCount: 0
}
// this.dialogVisible = true // 显示添加对话框
// 输出查看
console.log("this.category", this.category)
}
3.测试
![](https://file.jishuzhan.net/article/1790155979103408129/d7a982f439367e7d025fc09c797fafa5.webp)
5.发送请求,将数据保存到数据库
1.打开注释,显示对话框
![](https://file.jishuzhan.net/article/1790155979103408129/287bb550f81c1b5ade94c7072fe89634.webp)
2.编写 addCategory方法
js
// 添加分类信息到数据库,点击确定按钮时触发
addCategory() {
// 获取表单数据
var category = this.category
// 发送请求
this.$http({
url: process.env.BASEPATH + '/commodity/category/save',
method: 'post',
data: this.$http.adornData(category, false)
}).then(({data}) => { // 解构了data
// 添加成功提示
this.$message({
message: '添加成功',
type: 'success'
})
// 关闭对话框
this.dialogVisible = false
// 刷新分类列表
this.getCategories() // 重新获取分类列表
// 设置需要展开的菜单
this.expandedkeys = [this.category.parentId]
})
}
3.测试
![](https://file.jishuzhan.net/article/1790155979103408129/f8a3c6b26ae4b3dd83ed308cdb1d630a.webp)
![](https://file.jishuzhan.net/article/1790155979103408129/db587a3c50c0c0abe3fcbe5cdf6c6b14.webp)
6.注意事项
1.如果添加中文乱码,就在数据库的请求地址中加一段
![](https://file.jishuzhan.net/article/1790155979103408129/e5509608920a0d6e7aaf50db5b947dd1.webp)
2.ESLint检测介绍
![](https://file.jishuzhan.net/article/1790155979103408129/34b4f529f0f3c0b2341585708551f58c.webp)
![](https://file.jishuzhan.net/article/1790155979103408129/10e25bee4f153bd98de1b1a84a4b474d.webp)
3.注释掉 build/webpack.base.conf.js 中的一段代码然后重启
![](https://file.jishuzhan.net/article/1790155979103408129/6e3b9f22bd8e389208e11cb62b770fd9.webp)
![](https://file.jishuzhan.net/article/1790155979103408129/ef1bac4e02205ee1a5a1cbed7eac76a1.webp)
3.修改分类信息
1.回显分类信息
1.新增编辑按钮
![](https://file.jishuzhan.net/article/1790155979103408129/8ccee3f593742514997a3409f70e45d8.webp)
2.方法池编写edit方法,点击编辑按钮就回显表单
js
// 编辑分类
edit(data) {
// 将当前节点的数据赋值给表单
this.category = data
// 显示对话框
this.dialogVisible = true
}
3.测试
![](https://file.jishuzhan.net/article/1790155979103408129/4b099b470e03ca8ffd7a233419543427.webp)
2.向后端发送请求,入库
1.增加标志位,判断是修改还是删除
1.数据池增加标志位
![](https://file.jishuzhan.net/article/1790155979103408129/c22c05e2271957cc96526ea530f3acef.webp)
2.编辑和修改分类时设置标志位
![](https://file.jishuzhan.net/article/1790155979103408129/6892f35970a521198e154797c7be9d6e.webp)
![](https://file.jishuzhan.net/article/1790155979103408129/8366f0caf13bc8c2a2e5773d30829e40.webp)
2.修改addCategory方法,完成修改入库操作
js
if (this.dialogType == '修改') {
// 发送请求入库
this.$http({
url: process.env.BASEPATH + '/commodity/category/update',
method: 'post',
data: this.$http.adornData(category, false)
}).then(({data}) => { // 解构了data
// 添加成功提示
this.$message({
message: '修改成功',
type: 'success'
})
// 关闭对话框
this.dialogVisible = false
// 刷新分类列表
this.getCategories() // 重新获取分类列表
// 设置需要展开的菜单
this.expandedkeys = [this.category.parentId]
})
}
![](https://file.jishuzhan.net/article/1790155979103408129/f0921cc24dd5e793e8977a481569ba49.webp)
3.测试
![](https://file.jishuzhan.net/article/1790155979103408129/5115994e644331f7e43a5b60fe19b6de.webp)
![](https://file.jishuzhan.net/article/1790155979103408129/39a05977fa97edb31e81c69ddc5469b0.webp)
4.批量逻辑删除家居分类
1.获取批量选择的id
1.问AI
![](https://file.jishuzhan.net/article/1790155979103408129/83e0ee3b77e6c4f3e82280063f983249.webp)
2.el-tree 增加属性 ref="treeRef"
![](https://file.jishuzhan.net/article/1790155979103408129/7bf9b296e24319aa652b0d69cdf6f78c.webp)
3.添加批量删除按钮
vue
<!-- 批量删除按钮 -->
<el-button
type="danger"
size="mini"
icon="el-icon-delete"
@click="handleBatchDelete"
>
批量删除
</el-button>
![](https://file.jishuzhan.net/article/1790155979103408129/562a3b2be13b9034fb986739e0157cfd.webp)
4.编写handleBatchDelete方法,获取所有选中的id
js
// 处理批量删除操作
handleBatchDelete() {
// 获取id
const selectedIds = this.$refs.treeRef.getCheckedKeys();
console.log('Selected node IDs:', selectedIds);
}
5.浏览器测试
![](https://file.jishuzhan.net/article/1790155979103408129/15ad3666cae336aa8d1c3950facd2572.webp)
![](https://file.jishuzhan.net/article/1790155979103408129/3edad4a5ace55b33bcf01cf12f5f6fb5.webp)
2.批量从数据库删除
1.修改 handleBatchDelete 方法
js
// 处理批量删除操作
handleBatchDelete() {
// 获取id
const selectedIds = this.$refs.treeRef.getCheckedKeys();
// 发送请求,批量删除
this.$http({
url: process.env.BASEPATH + '/commodity/category/delete',
method: 'post',
data: selectedIds
}).then(({data}) => { // 解构了data
// 添加成功提示
this.$message({
message: '批量删除成功',
type: 'success'
})
// 刷新分类列表
this.getCategories() // 重新获取分类列表
})
}
2.测试
1.点击批量删除
![](https://file.jishuzhan.net/article/1790155979103408129/7d55e45688679f2878c45206fbb56a3b.webp)
2.删除成功
![](https://file.jishuzhan.net/article/1790155979103408129/78309c221070f3ffa3389b01fb133889.webp)
3.数据库信息
![](https://file.jishuzhan.net/article/1790155979103408129/8b1627692b3f434cab8b0271f75ee311.webp)