[new feature] Sku 支持隐藏售罄规格 (#2472)

* [new feature] Sku 支持隐藏售罄规格
This commit is contained in:
wny 2019-01-09 11:03:35 +08:00 committed by GitHub
parent 4f8a592836
commit d74147dad0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 77 additions and 15 deletions

View File

@ -53,7 +53,7 @@
> >
<div <div
v-if="hasSku" v-if="hasSku"
class="van-sku-group-container van-hairline--bottom" :class="skuGroupClass"
> >
<sku-row <sku-row
v-for="(skuTreeItem, index) in skuTree" v-for="(skuTreeItem, index) in skuTree"
@ -182,6 +182,10 @@ export default create({
type: Object, type: Object,
default: () => ({}) default: () => ({})
}, },
showSoldoutSku: {
type: Boolean,
default: true
},
showAddCartBtn: { showAddCartBtn: {
type: Boolean, type: Boolean,
default: true default: true
@ -246,6 +250,16 @@ export default create({
}, },
computed: { computed: {
skuGroupClass() {
return [
'van-sku-group-container',
'van-hairline--bottom',
{
'van-sku-group-container--hide-soldout': !this.showSoldoutSku
}
];
},
bodyStyle() { bodyStyle() {
if (this.$isServer) { if (this.$isServer) {
return; return;
@ -307,8 +321,9 @@ export default create({
} }
treeItem.v.forEach(vItem => { treeItem.v.forEach(vItem => {
if (vItem.imgUrl) { const img = vItem.imgUrl || vItem.img_url;
imageList.push(vItem.imgUrl); if (img) {
imageList.push(img);
} }
}); });
} }

View File

@ -54,14 +54,10 @@ export default create({
// skuImgskuTrees1sku // skuImgskuTrees1sku
const treeItem = this.sku.tree.filter(item => item.k_s === 's1')[0] || {}; const treeItem = this.sku.tree.filter(item => item.k_s === 's1')[0] || {};
if (!treeItem.v) { if (!treeItem.v) return;
return;
}
const matchedSku = treeItem.v.filter(skuValue => skuValue.id === id)[0]; const matchedSku = treeItem.v.filter(skuValue => skuValue.id === id)[0];
if (matchedSku && matchedSku.imgUrl) { if (matchedSku) return (matchedSku.imgUrl || matchedSku.img_url);
return matchedSku.imgUrl;
}
}, },
previewImage() { previewImage() {

View File

@ -15,6 +15,10 @@ export default {
name: '天蓝色', name: '天蓝色',
imgUrl: imgUrl:
'https://img.yzcdn.cn/upload_files/2017/02/21/FjKTOxjVgnUuPmHJRdunvYky9OHP.jpg!100x100.jpg' 'https://img.yzcdn.cn/upload_files/2017/02/21/FjKTOxjVgnUuPmHJRdunvYky9OHP.jpg!100x100.jpg'
},
{
id: '1215',
name: '白色'
} }
], ],
k_s: 's1', k_s: 's1',

View File

@ -1,5 +1,6 @@
<template> <template>
<demo-section> <demo-section>
<!-- 基础用法 -->
<demo-block :title="$t('basicUsage')"> <demo-block :title="$t('basicUsage')">
<div class="sku-container"> <div class="sku-container">
<van-sku <van-sku
@ -29,6 +30,7 @@
</div> </div>
</demo-block> </demo-block>
<!-- 自定义步进器 -->
<demo-block :title="$t('title2')"> <demo-block :title="$t('title2')">
<div class="sku-container"> <div class="sku-container">
<van-sku <van-sku
@ -55,6 +57,34 @@
</div> </div>
</demo-block> </demo-block>
<!-- 隐藏售罄sku -->
<demo-block :title="$t('hideSoldoutSku')">
<div class="sku-container">
<van-sku
hide-quota-text
v-model="showSoldout"
:sku="skuData.sku"
:goods="skuData.goods_info"
:goods-id="skuData.goods_id"
:hide-stock="skuData.sku.hide_stock"
:quota="skuData.quota"
:quota-used="skuData.quota_used"
:custom-stepper-config="customStepperConfig"
:message-config="messageConfig"
:show-soldout-sku="false"
@buy-clicked="onBuyClicked"
@add-cart="onAddCartClicked"
/>
<van-button
block
type="primary"
@click="showSoldout = true"
>
{{ $t('hideSoldoutSku') }}
</van-button>
</div>
</demo-block>
<demo-block :title="$t('advancedUsage')"> <demo-block :title="$t('advancedUsage')">
<div class="sku-container"> <div class="sku-container">
<van-sku <van-sku
@ -122,12 +152,14 @@ export default {
i18n: { i18n: {
'zh-CN': { 'zh-CN': {
title2: '自定义步进器相关配置', title2: '自定义步进器相关配置',
hideSoldoutSku: '隐藏售罄sku',
stepperTitle: '我要买', stepperTitle: '我要买',
button1: '积分兑换', button1: '积分兑换',
button2: '买买买' button2: '买买买'
}, },
'en-US': { 'en-US': {
title2: 'Custom Stepper Related Config', title2: 'Custom Stepper Related Config',
hideSoldoutSku: 'Hide Soldout Sku',
stepperTitle: 'Stepper title', stepperTitle: 'Stepper title',
button1: 'Button', button1: 'Button',
button2: 'Button' button2: 'Button'
@ -140,6 +172,7 @@ export default {
showBase: false, showBase: false,
showCustom: false, showCustom: false,
showStepper: false, showStepper: false,
showSoldout: false,
closeOnClickOverlay: true, closeOnClickOverlay: true,
initialSku: { initialSku: {
s1: '30349', s1: '30349',

View File

@ -19,11 +19,6 @@
} }
} }
&-group-container {
margin-left: 15px;
padding: 12px 0 2px;
}
/* sku header */ /* sku header */
&-header { &-header {
margin-left: 15px; margin-left: 15px;
@ -85,6 +80,17 @@
text-align: center; text-align: center;
} }
&-group-container {
margin-left: 15px;
padding: 12px 0 2px;
&--hide-soldout {
.van-sku-row__item--disabled {
display: none;
}
}
}
/* sku row */ /* sku row */
&-row { &-row {
margin: 0 15px 10px 0; margin: 0 15px 10px 0;

View File

@ -14,6 +14,12 @@ exports[`renders demo correctly 1`] = `
自定义步进器相关配置 自定义步进器相关配置
</span></button></div> </span></button></div>
</div> </div>
<div>
<div class="sku-container">
<!----> <button class="van-button van-button--primary van-button--normal van-button--block"><span class="van-button__text">
隐藏售罄sku
</span></button></div>
</div>
<div> <div>
<div class="sku-container"> <div class="sku-container">
<!----> <button class="van-button van-button--primary van-button--normal van-button--block"><span class="van-button__text"> <!----> <button class="van-button van-button--primary van-button--normal van-button--block"><span class="van-button__text">

View File

@ -102,6 +102,8 @@ Vue.use(Sku);
| custom-stepper-config | 步进器相关自定义配置 | `Object` | `{}` | - | | custom-stepper-config | 步进器相关自定义配置 | `Object` | `{}` | - |
| message-config | 留言相关配置 | `Object` | `{}` | - | | message-config | 留言相关配置 | `Object` | `{}` | - |
| get-container | 指定挂载的节点,可以传入选择器,<br>或一个返回节点的函数 | `String | () => HTMLElement` | - | - | | get-container | 指定挂载的节点,可以传入选择器,<br>或一个返回节点的函数 | `String | () => HTMLElement` | - | - |
| initial-sku | 默认选中的sku具体参考高级用法 | `Object` | `{}` | - |
| show-soldout-sku | 是否展示售罄的sku如果展示则为置灰不可选状态不展示则直接隐藏 | `Boolean` | `true` | - |
### Event ### Event