Vue電商SKU組合算法問題


前段時間,公司要做“添加商品”業務模塊,這也算是電商業務里面的一個難點了。

令我印象最深的不是什么“組合商品”、“關聯商品”、“關聯單品”,而是商品SKU的組合問題。

這個問題特別有意思,當時雖然大體上組合成功,總是有些小bug解決不了,然后手上又有別的任務就沒仔細研究它。

后來過了一個月,空閑下來專門研究了下,終於把問題解決,有必要記錄下這次體驗。

 

先看下在業務中的效果(tips: 如看不清可放大瀏覽器)

這個相對來說比較麻煩,還涉及到了下面“屬性圖片”的循環,但關鍵點還是在SKU組合的代碼上面

 

以下是基於element-uivue的精簡版demo代碼:

html:

 1 <div>SKU組合demo</div>
 2 <div v-for="(v, i) in list" :key="i" class="mt-20">
 3   <b>{{ v.name }}:</b>
 4   <el-checkbox-group v-model="checkList[i].list">
 5     <el-checkbox v-for="(k, j) in v.list" :key="j" :label="k" />
 6   </el-checkbox-group>
 7 </div>
 8 <div class="mt-20">
 9   <el-button type="primary" @click="handleClick">確定</el-button>
10 </div>
11 <div class="mt-20">
12   <el-tag v-for="(item, index) in skuList" :key="index" style="margin:10px 10px;">{{ item }}</el-tag>
13 </div>

css:

.mt-20 {
  margin-top: 20px;
}

JS:

 1 <script>
 2 export default {
 3   data() {
 4     return {
 5       list: [
 6         { name: '尺碼', list: ['S', 'M', 'L', 'XL', 'XXL'] },
 7         { name: '顏色', list: ['紅色', '黃色', '藍色', '粉色', '紫色'] },
 8         { name: '圖案', list: ['貓咪', '人物', '飛機', '閃電', '字母'] }
 9       ],
10       checkList: [
11         { name: '尺碼', list: [] },
12         { name: '顏色', list: [] },
13         { name: '圖案', list: [] }
14       ],
15       skuArray: [],
16       skuList: []
17     }
18   },
19   methods: {
20     handleClick() {
21       // 先清空數據,保證連續點擊按鈕,數據不會重復
22       this.skuArray = []
23       this.skuList = []
24       // 將選中的規格組合成一個大數組 [[1, 2], [a, b]...]
25       this.checkList.forEach(element => {
26         element.list.length > 0 ? this.skuArray.push(element.list) : ''
27       })
28       // 勾選了規格,才調用方法
29       if (this.skuArray.length > 0) {
30         this.getSkuData([], 0, this.skuArray)
31       } else {
32         this.$message.error('請先勾選規格')
33       }
34     },
35     // 遞歸獲取每條SKU數據
36     getSkuData(skuArr = [], i, list) {
37       for (let j = 0; j < list[i].length; j++) {
38         if (i < list.length - 1) {
39           skuArr[i] = list[i][j]
40           this.getSkuData(skuArr, i + 1, list) // 遞歸循環
41         } else {
42           this.skuList.push([...skuArr, list[i][j]]) // 擴展運算符,連接兩個數組
43         }
44       }
45     }
46   }
47 }
48 </script>

效果如下:

 只要是做電商的小伙伴應該都會遇到這個SKU組合問題吧,希望能對大家有所幫助!

 

如有錯誤,請多指教,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM