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

Ruoyi-Vue商城第七章商品规格CRUD源代码拆解

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

上一章节已经讲解列表,本章节讲解如何新增,修改,删除功能

章节目录

1、操作界面

2、数据库记录

3、前端代码拆解

4、后端代码拆解

一、操作界面

左侧菜单栏->商品规格->新增

新增页面


填写标题名称,点击添加新规格,界面新增一行输入框,规格和规格值

输入规格和规格值点击右侧的确认


上面已经显示颜色的规格,并有一个规格值是红色,如果是多个规格,假设还需要增加白色,那么在左边的空格输入白色,点击添加

除了颜色的规格之外,可能还有尺寸等规格,那么需要在下面点击添加新的规格

设置完,点击确定,返回列表,可以看到新的规格值

二、数据库记录

三、前端编辑代码

顶部新增按钮代码:

<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>

如下是新增页面代码,代码文件名称是from.vue

四、添加规格页面实现逻辑

4.1、添加规格值按钮功能

点击上图添加规格,显示下图规格和规格值的输入框

下面是界面代码片段

 <el-col :span="24" v-if="isBtn" class="mt10">
    <el-col :span="9" class="mr15">
      <el-form-item label="规格:">
        <el-input placeholder="请输入规格" v-model="attrsName"/>
      </el-form-item>
    </el-col>
    <el-col :span="9" class="mr20">
      <el-form-item label="规格值:">
        <el-input v-model="attrsVal" placeholder="请输入规格值"/>
      </el-form-item>
    </el-col>
    <el-col :span="2">
      <el-button type="primary" @click="createAttrName">确定</el-button>
    </el-col>
    <el-col :span="2">
      <el-button @click="offAttrName">取消</el-button>
    </el-col>
  </el-col>
</el-row>
<el-button type="primary" icon="md-add" @click="addBtn" v-if="!isBtn" class="ml95 mt10">添加新规格</el-button>

点击事件@click="addBtn",执行的逻辑是this.isBtn = true;

如上述第1行代码,v-if="isBtn",isBtn设置为true,那么显示规格和规格值的输入框

如上述第20行代码 v-if="!isBtn",如果isBtn设置为true,那么按钮隐藏。

如上述第13行代码,用户输入规格和规格值后点击确定,该按钮绑定了@click="createAttrName"处理事件,如下是事件代码片段

// 添加规则名称
createAttrName () {
  if (this.attrsName && this.attrsVal) {
    let data = {
      value: this.attrsName,
      detail: [
        this.attrsVal
      ]
    };
    this.formData.ruleValue.push(data);
    var hash = {};
    this.formData.ruleValue = this.formData.ruleValue.reduce(function (item, next) {
      /* eslint-disable */
      hash[next.value] ? '' : hash[next.value] = true && item.push(next);
      return item
    }, [])
    this.attrsName = '';
    this.attrsVal = '';
    this.isBtn = false;
  } else {
    return this.$message.warning('请添加规格名称!');
  }
},

如上述第4行代码,初始化一个变量data,data是一个json数据格式,里面有两个值,一个是value,一个是detail,其中detail是一个数组类型。

数据封装后的效果是:[{"value": "颜色", "detail": ["红色"]}]

如上述第10行代码,将规格数据push插入this.formData.ruleValue变量。

如上述第12行代码,this.formData.ruleValue.reduce:是循环变量ruleValue,目的是将规格去重。

4.2、已经添加规格和规格值的显示代码

<el-col :span="23" class="noForm" v-for="(item, index) in formData.ruleValue" :key="index">
  <el-form-item label=" ">
    <div class="acea-row row-middle"><span class="mr5">{{item.value}}</span>
      <i class="el-icon-circle-close"  @click="handleRemove(index)"></i>
    </div>
    <div class="rulesBox">
      <el-tag   class="mb5" style="margin: 2px 4px 2px 0;" closable
      v-for="(j, indexn) in item.detail" :key="indexn"
      :name="j" @close="handleRemove2(item.detail,indexn)">{{j}}
      </el-tag>
      <el-input placeholder="请输入属性名称" v-model="item.detail.attrsVal"
                style="width: 170px">
        <el-button slot="append" type="primary" @click="createAttr(item.detail.attrsVal,index)">添加</el-button>
      </el-input>
    </div>
  </el-form-item>
</el-col>

如上述第一行代码,循环formData.ruleValue的值进行显示已经配置的规格和规格值,该值是从3.1设置获取,实现的效果图如下:

如上述第13行代码,添加规格值

// 添加属性
createAttr (num, idx) {
  if (num) {
    this.formData.ruleValue[idx].detail.push(num);
    var hash = {};
    this.formData.ruleValue[idx].detail = this.formData.ruleValue[idx].detail.reduce(function (item, next) {
      hash[next] ? '' : hash[next] = true && item.push(next);
      return item
    }, [])
  } else {
    return this.$message.warning('请添加属性!');
  }
}

如上述第4行代码,this.formData.ruleValue[idx].detail.push(num); 先找到idx的detail对象,并将num的数据插入detail对象中

原[{"value": "颜色", "detail": ["红色"]}]插入后数据变更为[{"value": "颜色", "detail": ["红色","白色"]}]

如上述第6行代码,删除重复规格值。

五、后端代码


@ForbidSubmit
@PostMapping("/save/{id}")
@Log("新增/修改sku规则")
@ApiOperation("新增/修改sku规则")
@PreAuthorize("hasAnyRole('admin','yxStoreProductRule:add','yxStoreProductRule:edit')")
public ResponseEntity<Object> create(@Validated @RequestBody YxStoreProductRule resources,@PathVariable Integer id){
    if(id != null && id > 0){
        resources.setId(id);
        yxStoreProductRuleService.updateById(resources);
    }else{
        yxStoreProductRuleService.save(resources);
    }

    return new ResponseEntity<>(HttpStatus.CREATED);
}


@ForbidSubmit
@Log("删除sku规则")
@ApiOperation("删除sku规则")
@PreAuthorize("@el.check('admin','yxStoreProductRule:del')")
@DeleteMapping
public ResponseEntity<Object> deleteAll(@RequestBody Integer[] ids) {
    yxStoreProductRuleService.removeByIds(new ArrayList<>(Arrays.asList(ids)));
    return new ResponseEntity<>(HttpStatus.OK);
}

如上述代码是增加/修改/删除的接口代码。

如上述第5,21行代码,验证权限,有权限则继续执行,没有权限则拒绝

如上述第7行代码,判断前端送过来的接口数据是否有id,如果有id,则是更新数据库,如果没有id,则新增数据库。

如上述第9行代码,更新数据库

如上述第11行代码,插入数据库

如上述第14行代码,返回统一封装的数据格式

如上述第24行代码,批量删除数据库

计划

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)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码