商品增加库存功能,前端页面要求显示表单修改库存(二)

本文介绍了如何在电商项目中实现商品库存管理和规格编辑功能。前端通过深拷贝和循环遍历封装用户提交的库存数据,确保skuCode用于区分新增与原有库存。同时,后端在接收到数据后,判断用户是否更改规格,以正确更新库存。在保存商品sku数据时,直接关联产品与库存,避免重复操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该贴为学习记录贴,记录博主开发项目时遇到的各种问题和解决方法

需求:对商品购买增加库存功能,并且在编辑商品页面中,根据商品拥有的规格生成From表单,用户可在From表单中修改商品各个规格的库存。

在第一章中已经处理完数据库存储商品规格和库存、前端页面显示表单的问题。这一章解决用户修改了库存后传给后端保存进数据库的数据封装问题。

后端接收的数据VO:

@NoArgsConstructor
@EqualsAndHashCode(callSuper=false)
@Data
@ApiModel(value = "商品库存和规格VO类")
public class SchoolCommoditySkuSpecificationVO {

  @ApiModelProperty(value = "商品skuCode")
  private String skuCode;

  @ApiModelProperty(value = "商品规格列表")
  private List<SchoolCommodityVO> specifications;

  @ApiModelProperty(value = "商品库存数量")
  private Integer stockNum;
}

 前端封装schoolCommoditySkuSpecifications数据:

let list = utils.deepClone(this.packageData)
    let newlist = []
    for (let i = 0; i < list.length; i++) {
        let item = list[i]
            let num = Object.keys(item).length
            let KeyName = Object.keys(item)[num - 1]
            let skuCode = null
            let stock = null
            if (KeyName === 'skuCode') {
                skuCode = item[KeyName]
                    let stockKeyName = Object.keys(item)[num - 2]
                    stock = item[stockKeyName]
            } else if (KeyName === 'stock') {
                stock = item[KeyName]
            }
            let spItemList = []
            if (skuCode) {
                for (let j = 0; j < num - 2; j++) {
                    let keyName = Object.keys(item)[j]
                        spItemList.push(item[keyName])
                }
                const stockObject = Object.assign({}, {
                    skuCode: skuCode['value'],
                    stockNum: stock['value'],
                    specifications: spItemList
                })
                    newlist.push(stockObject)
            } else {
                for (let j = 0; j < num - 1; j++) {
                    let keyName = Object.keys(item)[j]
                        spItemList.push(item[keyName])
                }
                const stockObject = Object.assign({}, {
                    stockNum: stock['value'],
                    specifications: spItemList
                })
                    newlist.push(stockObject)
            }
    }
    this.dataForm = Object.assign(this.dataForm, {
    schoolCommoditySkuSpecifications: newlist
})

由于是新增的库存功能,所以在初始化的时候是无法从后端获取到的sku数据的。用户在编写表单内容点击提交后,通过循环遍历进行封装。并且封装的时候要判断有没有skuCode,skuCode在之后将用在后端来判断是新增sku还是原有的sku。

前端用户提交时必须确认用户是否对商品的规格进行增删,向用户确认是否要更改。因为商品购买后退款回滚库存是根据skuCode来进行操作,如果每次用户修改都直接新增数据更改skuCode那么会有库存回收和库存显示错误的问题。

后端接收到前端发送的商品信息后,在处理sku数据时必须判断用户是否要更改规格,不更改规格直接根据skuCode来重新编辑库存。

保存商品的sku数据时,由于sku和商品表是关联的,所以只需要product.setSku(sku)之后再productRepository.saveall(productList),就可以直接将sku数据保存在sku表中,不需要更新或生成sku数据后再save一遍sku表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值