现有需求,当点击颜色时进行校验,若蓝色6.0寸无库存时禁选。 先上效果截图:

当前规格组合中 蓝色6寸 和 黑色中6寸 的库存均为0.后台返回数据如下图:实现思路: 例如:当选择蓝色时,进行循环遍历组合。组合结果为: 蓝黑,蓝5.5寸,蓝6.0寸,再进行校验,拿出对应组合的库存,判断库存为0时禁选

第一步: 对当前显示在页面上的spu进行重新组合

    this.goodsInfo.skuSpec.forEach(it => { // 重新组合skuit.goodsSpecVals.forEach(i => {this.$set(i, 'children', [])this.goodsInfo.skuList.forEach(item => {if (item.skuName.includes(i.goodsSkuSpecValName)) {i.children.push(item.skuName)}})})})解析:sku组合中含有spu,就将将该条sku信息拼入spu对象里,键为children 如图:
复制代码

第二步: 此时已经循环展示在页面上了,要做的是点击进行处理, 此处it为当前的goodsSpecVals中的一项,index为skuSpec层中的索引,idx为当前goodsSpecVals的索引

chooseSku(it, index, idx) {if (it.stock === 0) return // 判断库存为0时返回// 选中的规格数组组成:[蓝色,5.5寸]if (this.selectArr[index] === it.goodsSkuSpecValName) {// 再次点击时取消选中this.$set(this.selectArr, index, '')this.formData.skuId = '' // 清空将要传给后台的skuId} else this.$set(this.selectArr, index, it.goodsSkuSpecValName)if (this.selectArr.length === this.goodsInfo.skuSpec.length) {// 选取了所有的规格时 拿去skuIdlet str = ''this.selectArr.forEach(item => {str += '_' + item})str = str.slice(1)// 所有规格都选了时,进行匹配skuId,此处数据用于传给后台this.goodsInfo.skuList.forEach(item => { // 匹配skuIdif (item.skuName === str) this.formData.skuId = item.id})}this.getData(this.selectArr, this.goodsInfo.skuSpec, this.goodsInfo.skuList) // 校验库存
}
复制代码

第三步: 进行循环判断哪些sku组合库存为空

getData(selectArr, skuSpec, skuList) {console.log(skuSpec)let checkLen = skuSpec.length - 1 // 3行规格 选2行时校验,2行规格,选1行时校验if (selectArr < checkLen) returnskuSpec.forEach((item, index) => {item.goodsSpecVals.forEach((it, idx) => {let c = this._deepCopy(selectArr)// 这里进行循环组合, 例如:红色_5.5寸,红色_6.0寸c[index] = it.goodsSkuSpecValName// 拿到我们想要的sku组合,例如:红色_5.5寸 let skuName = this.getCid(c, skuSpec, skuList)console.log(skuName, 'skuNameskuNameskuName')// 根据我们拿到的sku组合 红色_5.5寸进行查库存let stock = this.getStock(skuName, skuSpec, skuList)it.stock = stock})})
}
复制代码

第四步 拿出我们需要的组合类型

getCid(c, skuSpec, skuList) {// 首先进行判断,避免单纯的红色,蓝色也进行循环。if (c.length !== skuSpec.length) returnlet cStr = c.join('_')// 对后台传来的sku组合进行循环遍历,若匹配上,则返回这个组合的skuName,例如:红色_5.5寸 for (let i in skuList) {if (skuList[i].skuName === cStr) {return skuList[i].skuName}}
}
复制代码

第五步 根据我们拿到的组合进行查询库存

getStock(skuName, skuSpec, skuList) {console.log(skuName, 'skuName')if (!skuName) returnfor (let a in skuSpec) { // 我们拼接的数组,见第三张图for (let b in skuSpec[a].goodsSpecVals) {// 对每项Spu中children进行循环,若此children中包含skuName,则返回当前组合的库存到当前Spu中// 例如点击红色时,遍历匹配到红色_5.5寸,红色库存则为红色_5.5寸的库存 300,5.5寸此时库存也为300。以此类推可以得出6.0寸的库存。if (skuSpec[a].goodsSpecVals[b].children.indexOf(skuName) !== -1) {for (let i in skuList) {if (skuList[i].skuName === skuName) {console.log(skuList[i], 'skusku')return skuList[i].stock}}}}}console.log(skuSpec, 'skuSpecskuSpec')
}
复制代码

第六步 最后就比较简单了,在页面上我们循环判断下当前的库存是否为0就OK啦

文章的最后

初次写文章,请多多包涵,有不明白的欢迎留言指出(ps:掘金都是大神,不允许看不懂的情况,手动滑稽) 此方法完全还可以继续优化,也欢迎提出共同学习啊~ 如果有其他方法也欢迎分享

转载于:https://juejin.im/post/5c0e312ae51d4534655d937c

基于Vue的淘宝SKU组合算法相关推荐

  1. 基于Vue实现电商SKU组合算法问题

    这个相对来说比较麻烦,还涉及到了下面"属性图片"的循环,但关键点还是在SKU组合的代码上面 以下是基于element-ui和vue的精简版demo代码: html <div& ...

  2. [原] 淘宝SKU组合查询算法实现

    前端有多少事情可以做,能做到多好.一直在关注各大公司UED方面的知识,他们也代表了前端的力量,而且也很乐意和大家分享,把应用到项目的知识归类整理,再写成博客搬到网上来,充实这前端的内容,也是为想追寻和 ...

  3. 基于Vue的淘宝首页跳转商品搜索页的最佳实现方式总结(包括v-model组件间使用技巧总结)

    今天在练习淘宝项目的时候,做到一个最为常见的功能,就是从主页搜索框搜索内容,点击搜索后能跳转到详细商品页面,同时用户也能在该页面重新搜索,不必返回主页面再搜,大致意思看下图.其实这个功能很多都有,比如 ...

  4. B2B2C网上商城开发指南——基于SaaS和淘宝API开放平台

    B2B2C网上商城开发指南--基于SaaS和淘宝API开放平台邢波涛  郭  娟  著 ISBN 978-7-121-12983-4 2011年4月出版 定价:49.00元 16开 388 页 内 容 ...

  5. vue仿淘宝放大镜插件 vue-piczoom的使用问题

    vue仿淘宝放大镜插件 vue-piczoom npm install vue-piczoom--save //下载放大镜插件 使用的话就是直接引入 import picZoom from 'vue- ...

  6. 设置淘宝sku方法技巧 淘宝SKU如何设置

    淘宝sku是什么意思?相信商家们对宝贝的sku都很清楚,sku带来的产品的不同颜色.尺寸.但是设置sku并不是一件简单的事情哦,它对店铺的权重和转化都是有一定的联系的.那么sku应该如何正确的去设置呢 ...

  7. jquery特效-基于jQuery仿淘宝红色分类导航

    今天给大家分享一款基于jQuery仿淘宝红色分类导航.这款分类导航适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗.效果图如下: 实现的代码. ...

  8. 一款基于jQuery仿淘宝红色分类导航

    今天给大家分享一款基于jQuery仿淘宝红色分类导航.这款分类导航适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗.效果图如下: 在线预览    ...

  9. 一个基于codeigniter的淘宝客程序源码,适合学习参考,京东拼多多淘宝联盟api

    一个基于codeigniter的淘宝客程序源码,直接调用淘宝联盟api,效果图如下: 该源码需要的环境是php5.6,适合初学者开发学习之用. 下载资源地址分享, https://download.c ...

最新文章

  1. ArUco与AprilTag简介
  2. mvc4站点支持.html
  3. html怎样添加css样式,html添加css样式的方法
  4. 哈希表-拉链法及应用举例
  5. STM32工作笔记0083---UCOSIII中断和时间管理
  6. 随机数-random模块
  7. 300字简单区分线程问题
  8. 2021 年全国大学生电子设计竞赛实施过程说明
  9. 使用VC2005一些问题及解决方案(一)
  10. JAVA开发FPS透视_FPS 游戏实现D3D透视
  11. 沉睡者 - 抖音中视频计划横版16:9视频制作教程
  12. 关于TensorFlow、DeepDream从开始了解到放弃
  13. android仿微信录制短视频并播放视频
  14. SPI NAND flash 简介
  15. 游戏光枪坐标定位原理及算法
  16. Linux 网络分析工具 fping命令解析
  17. 文件操作之特殊文件操作
  18. Linux基础知识学习笔记-----crack_the_WiFi_secret
  19. Android 蓝牙源码学习笔记
  20. 核心价值八 追逐梦想

热门文章

  1. JD6606S有TID号的硬件PD协议芯片资料
  2. 今年slam方向的同学秋招进展如何?
  3. Linux开机后自动执行命令或脚本
  4. 元宇宙十问十答 || 第二问:元宇宙是否唯一?
  5. The authenticity of host ‘‘ can‘t be established.
  6. EDA课设(数字系统设计)--数字密码锁
  7. 牛是怎么死的?看懂了思想至少成熟30年
  8. 《FFmpeg+SDL的视频播放器的制作》学习记录(4):SDL播放视频
  9. XCP BASIC安装
  10. Linux命令操作之cat与cut