新增商品sku

1、需求:需要写一个新增商品的页面,主要难点就sku

2、思路:总体来说就是前端生成适合排版的sku属性数据,之后经过转换成符合接口的上传数据,刚开始转换的时候没有思路也是花了点时间,毕竟不设限制的sku可以有很多,层级也很深,所以主要用的是递归来处理

前端排版时的属性数据

复制代码
[
      {
        id: new Date().getTime(),
        name: "颜色",
        value: [
          {
            name: '黄色',
            id: new Date().getTime() * Math.random()
          }, {
            name: '红色',
            id: new Date().getTime() * Math.random()
          }]
      },
      {
        id: new Date().getTime() * Math.random(),
        name: "大小",
        value: [{
          name: '大',
          id: new Date().getTime() * Math.random()
        }, {
          name: '小',
          id: new Date().getTime() * Math.random()
        },]
      },
      {
        id: new Date().getTime() * Math.random(),
        name: "品质",
        value: [{
          name: '优',
          id: new Date().getTime() * Math.random()
        }, {
          name: '劣',
          id: new Date().getTime() * Math.random()
        },]
      },
    ]
复制代码

对应

接口上传时的数据

 对应

 3、实现

其中用中间体数据过渡了一下

 js

复制代码
  getSku() {
    try {
      const skuAttribute = this.data.skuAttribute//排版的属性数据
      let skuAddParams = this.data.form.skuAddParams
      let data = []//过渡用的数据
      let skuAllList = this.data.skuAllList
      if (skuAttribute.length == 0) {
        return
      }
      skuAttribute.map(e => {
        data.push(e.value.map(el => el.name))
      })
      if (data.length == 0) {
        return
      }
      console.log(data, 0, undefined, [])
      skuAllList = this.repeat(data, 0, undefined, [])//过渡用的数据
      skuAddParams = []
      skuAllList.map(e => {
        skuAddParams.push({
          "addInventory": 0,
          "baseSkuParams": e.map((el, i) => {
            return {
              "attributeName": skuAttribute[i].name,
              "specName": el
            }
          }),
          "channelAmount": 0,
          "goodsSkuId": 0,
          "goodsSkuImage": "",
          "inventory": '',
          "isChannel": 0,
          "originalPrice": '',
          "sellingPrice": '',
          "specCode": "",
          "vipPrice": ''
        })
      })
      this.setData({
        'form.skuAddParams': skuAddParams,//需要上传的数据
        skuAllList
      })
    } catch {
      console.log('GG')
    }
  },
  repeat(list, index, arr, all) {
    list[index].map((e, i) => {
      if (index == 0) {
        let arr = []
        arr.push(e)
        if (list.length !== 1) {
          this.repeat(list, index + 1, arr, all)
        } else {
          arr[index] = e
          all.push(JSON.parse(JSON.stringify(arr)))
        }
      } else if (index < list.length - 1) {
        arr[index] = e
        this.repeat(list, index + 1, arr, all)
      } else if (index == list.length - 1) {
        arr[index] = e
        all.push(JSON.parse(JSON.stringify(arr)))
      }
    })
    return all
  },
复制代码

 

posted @   Pavetr  阅读(151)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示