使用APICloud AVM框架封装SKU(商品规格选择)组件

132 阅读2分钟

本文介绍使用APICloud AVM框架封装SKU(商品规格选择)组件,该SKU组件可实现商品图片与颜色属性进行联动,通过颜色、版本来控制价格,总价通过购买数量与所选商品价格进行自动计算;可进行缺货设定。

\

上述功能点是通过商品数据结构和代码逻辑进行配合来实现的。

\

商品数据结构如下:

\

goodsList:[

{id:'100016015112',

image:'m.360buyimg.com/mobilecms/s…',

color:'亮黑色',

status:true,

guige:[

{label:'8G+128G',price:'3999',status:false},

{label:'8G+256G',price:'5999',status:true},

{label:'16G+512G',price:'6999',status:true},

{label:'16G+1024G',price:'9999',status:false}

]},

{id:'100016015113',

image:'img14.360buyimg.com/n4/jfs/t1/2…',

color:'釉白色',

status:true,

guige:[

{label:'8G+128G',price:'3799',status:true},

{label:'8G+256G',price:'5799',status:true},

{label:'16G+512G',price:'6799',status:true},

{label:'16G+1024G',price:'9799',status:false}

]},

{id:'100016015132',

image:'img14.360buyimg.com/n4/jfs/t1/2…',

color:'秘银色',

status:true,

                guige:[

{label:'8G+128G',price:'3599',status:true},

{label:'8G+256G',price:'5599',status:true},

{label:'16G+512G',price:'6599',status:true},

{label:'16G+1024G',price:'9599',status:false}

]},

{id:'200016015117',

image:'img14.360buyimg.com/n4/jfs/t1/2…',

color:'夏日胡杨',

                status:false,

guige:[

{label:'8G+128G',price:'3899',status:false},

{label:'8G+256G',price:'5899',status:false},

{label:'16G+512G',price:'6899',status:false},

{label:'16G+1024G',price:'9899',status:false}

]},

{id:'100013415456',

image:'img14.360buyimg.com/n4/jfs/t1/1…',

color:'冬日暖阳',

status:true,

                guige:[

{label:'8G+128G',price:'3199',status:true},

{label:'8G+256G',price:'5199',status:true},

{label:'16G+512G',price:'6199',status:true},

{label:'16G+1024G',price:'9199',status:false}

]}

]

每个商品的版本有多条数据,每条数据都对应不同的价格,同时会有字段标识是否有货。

\

每一个商品也会有字段标识是否有货。

\

当切换商品属性时,需要通过函数进行判断,以保证在商品缺货的情况下,不能被选中。

\

setGoods(e){

// console.log(JSON.stringify(e));

let item = e.currentTarget.dataset.item;

if(item.status){

this.data.selectGoods = item;

this.data.guigeList = item.guige;

for (let index = 0; index <  item.guige.length; index++) {

const element = item.guige[index];

             //保证默认选中的商品是有货的

if(element.status){

this.data.selectGuige = element;

break;

}

}

}

},

组件文件

easy-sku.stml

\

.easy-sku_container { position: absolute; height: 100%; width: 100%; background-color: rgba(0,0,0,0.1); } .easy-sku_box{ align-items: center; justify-content: space-between; position: absolute; bottom: 0; width: 100%; height: 70%; background-color: #ffffff; border-top-left-radius: 30px; border-top-right-radius: 30px; padding: 15px; } .easy-sku_base{ width: 100%; padding: 15px; } .easy-sku_base-pic{ width: 80px; height: 80px; } .easy-sku_base{ flex-flow: row nowrap; justify-content: space-between; align-items: flex-end; } .easy-sku_base-info{ flex: 1; padding-left: 10px; } .easy-sku_base-info-price{ color: #fa2c19; font-size: 16px; } .easy-sku_base-info-num{ color: #666666; font-size: 12px; } .easy-sku_close-box{ height: 100%; } .easy-sku_close-ico{ width: 20px; } .easy-sku_scroll-box{ width: 100%; flex: 1; } .easy-sku_guige-box{ width: 100%; } .easy-sku_guige-title{ padding: 10px 0; } .easy-sku_guige-title-label{ font-size: 16px; font-weight: bolder; } .easy-sku_guige-item-box{ flex-flow: row wrap; justify-content: flex-start; align-items: center; } .easy-sku_guige-item--default{ background-color: #f2f2f2; border: 0.5px solid #f2f2f2; border-radius: 18px; padding: 8px 18px; margin-right: 10px; margin-bottom: 10px; } .easy-sku_guige-item-label--default{ font-size: 14px; color: #333333; } .easy-sku_guige-item--select{ background-color: #fee0dd; border: 0.5px solid #fa2c19; border-radius: 18px; padding: 8px 18px; margin-right: 10px; margin-bottom: 10px; } .easy-sku_guige-item-label-select{ font-size: 14px; color: #fa2c19; } .easy-sku_guige-item-label-disable{ font-size: 14px; color: #b5b5b5; /* text-decoration: line-through; */ } .easy-sku_count-box{ width: 100%; flex-flow: row nowrap; justify-content: space-between; align-items: center; margin-top: 10px; } .easy-sku_count-result-tool{ flex-flow: row nowrap; justify-content: space-between; align-items: center; } .easy-sku_count-result-item{ font-size: 25px; padding: 0 5px; color: #333333; } .easy-sku_count-result-item--disable{ font-size: 25px; padding: 0 5px; color: #b5b5b5; } .easy-sku_count-result-input{ background-color: #f0f0f0; border: 0; height: 18px; width: 40px; text-align: center; border-radius: 5px; } .easy-sku_count-label{ font-size: 16px; color: #333333; } .easy-sku_bottom{ width: 100%; } .easy-sku_btn{ background-color: #fa2c19; border-radius: 21px; font-size: 15px; color: #fff; padding: 10px; }

\

示例文件

demo-easy-sku.stml

\

.page { height: 100%; background-color: #f6f6f6; } .item{ background-color: #ffffff; margin: 15px; padding: 15px; border-radius: 5px; }

\

点击立即使用AVM框架