百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Ruoyi-Vue商城第四章商品分类-CRUD前后端分离源代码拆解

toyiye 2024-06-21 12:28 11 浏览 0 评论

上一篇文章已经介绍商品分类的数据模型和列表如何展示,本章节介绍CRUD的详细代码

1、操作界面

打开商品列表

在工作区分离列表右侧,点击编辑

修改成功后刷新商品分类列表

2、前端代码分析

2.1、新增/编辑按钮代码

顶部的增加,修改,删除封装在crudOperation组件

<crudOperation :permission="permission" />

  import crudOperation from '@crud/CRUD.operation'
  components: { Treeselect, crudOperation, rrOperation, udOperation, picUpload, MaterialList },

crudOperation组件代码路径如下:

<el-button
  v-if="crud.optShow.add"
  v-permission="permission.add"
  class="filter-item"
  size="mini"
  type="primary"
  icon="el-icon-plus"
  @click="crud.toAdd"
>
  新增
</el-button>

如上述第2行代码,判断是否显示

如上述第3行代码,判断登录用户是否有权限

如上述第8行代码,绑定点击事件crud.toAdd

上述的新增详细执行函数如下:

/**
 * 启动添加
 */
toAdd() {
  if (!(callVmHook(crud, CRUD.HOOK.beforeToAdd, crud.form) && callVmHook(crud, CRUD.HOOK.beforeToCU, crud.form))) {
    return
  }
  crud.status.add = CRUD.STATUS.PREPARED
  callVmHook(crud, CRUD.HOOK.afterToAdd, crud.form)
  callVmHook(crud, CRUD.HOOK.afterToCU, crud.form)
},

如上述代码第8行,将状态设置为CRUD.STATUS.PREPARED

<el-dialog append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="500px">

如上述编辑表单的对话框,:visible.sync="crud.status.cu > 0" 因为crud.status.cu被赋值为CRUD.STATUS.PREPARED,所以"crud.status.cu > 0"运算结果是true,编辑表单显示。

显示效果下图:


2.2、绑定确认事件,保存

// 新增与编辑前做的操作
[CRUD.HOOK.afterToCU](crud, form) {
  this.picArr = []
  if (form.pic && form.id) {
    this.picArr = form.pic.split(',')
  }

  // 获取所有部门
  crudDept.getCates({ isShow: true }).then(res => {
    this.depts = []
    const dept = { id: 0, label: '顶级类目', children: [] }
    dept.children = res.content
    this.depts.push(dept)
  })
},
// 提交前的验证
[CRUD.HOOK.afterValidateCU]() {
  return true
},

如上述代码,点击提交先执行第17行代码,验证表单参数是否满足要求。

验证通过过,继续执行,执行的函数如上述第2行代码。

上述代码是新增与编辑前做的操作,下面是将表单提交给后台接口,实现CRUD

/**
 * 提交新增/编辑
 */
submitCU() {
  if (!callVmHook(crud, CRUD.HOOK.beforeValidateCU)) {
    return
  }
  crud.findVM('form').$refs['form'].validate(valid => {
    if (!valid) {
      return
    }
    if (!callVmHook(crud, CRUD.HOOK.afterValidateCU)) {
      return
    }
    if (crud.status.add === CRUD.STATUS.PREPARED) {
      crud.doAdd()
    } else if (crud.status.edit === CRUD.STATUS.PREPARED) {
      crud.doEdit()
    }
  })

如上述第15,16行代码,执行增加操作,将表单数据提交给后台api

3、JAVA后台接口代码

接口路径如下截图

@ForbidSubmit
@Log("新增商品分类")
@ApiOperation(value = "新增商品分类")
@PostMapping(value = "/yxStoreCategory")
@CacheEvict(cacheNames = ShopConstants.YSHOP_REDIS_INDEX_KEY,allEntries = true)
@PreAuthorize("hasAnyRole('admin','YXSTORECATEGORY_ALL','YXSTORECATEGORY_CREATE')")
public ResponseEntity create(@Validated @RequestBody YxStoreCategory resources){
    if(resources.getPid() != null && resources.getPid() > 0 && StrUtil.isBlank(resources.getPic())) {
        throw new YshopException("子分类图片必传");
    }

    boolean checkResult = yxStoreCategoryService.checkCategory(resources.getPid());
    if(!checkResult) {
        throw new YshopException("分类最多能添加2级哦");
    }

    return new ResponseEntity<>(yxStoreCategoryService.save(resources),HttpStatus.CREATED);
}

@ForbidSubmit
@Log("修改商品分类")
@ApiOperation(value = "修改商品分类")
@CacheEvict(cacheNames = ShopConstants.YSHOP_REDIS_INDEX_KEY,allEntries = true)
@PutMapping(value = "/yxStoreCategory")
@PreAuthorize("hasAnyRole('admin','YXSTORECATEGORY_ALL','YXSTORECATEGORY_EDIT')")
public ResponseEntity update(@Validated @RequestBody YxStoreCategory resources){
    if(resources.getPid() != null && resources.getPid() > 0 && StrUtil.isBlank(resources.getPic())) {
        throw new YshopException("子分类图片必传");
    }

    if(resources.getId().equals(resources.getPid())){
        throw new YshopException("自己不能选择自己哦");
    }

    boolean checkResult = yxStoreCategoryService.checkCategory(resources.getPid());

    if(!checkResult) {
        throw new YshopException("分类最多能添加2级哦");
    }

    yxStoreCategoryService.saveOrUpdate(resources);
    return new ResponseEntity(HttpStatus.NO_CONTENT);
}

@ForbidSubmit
@Log("删除商品分类")
@ApiOperation(value = "删除商品分类")
@CacheEvict(cacheNames = ShopConstants.YSHOP_REDIS_INDEX_KEY,allEntries = true)
@DeleteMapping(value = "/yxStoreCategory/{id}")
@PreAuthorize("hasAnyRole('admin','YXSTORECATEGORY_ALL','YXSTORECATEGORY_DELETE')")
public ResponseEntity delete(@PathVariable String id){
    String[] ids = id.split(",");
    for (String newId: ids) {
        this.delCheck(Integer.valueOf(newId));
        yxStoreCategoryService.removeById(Integer.valueOf(newId));
    }
    return new ResponseEntity(HttpStatus.OK);
}

计划

1、ruoyi-flowable-plus工作流拆解

2、ruoyi-flowable-plus如何快速开发

3、电商项目源代码拆解

4、JEECG低代码开发平台

请关注我,本星球会持续推出更多的开源项目代码解析,如有更好的意见请留言回复或者私信。运行不起来可以联系我

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码