mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-26 03:16:35 +08:00
[Improvement] Sku: add getSkuData method (#585)
This commit is contained in:
parent
094cc97834
commit
7f055a4d2d
@ -13,8 +13,8 @@
|
|||||||
:reset-stepper-on-hide="true"
|
:reset-stepper-on-hide="true"
|
||||||
:reset-selected-sku-on-hide="true"
|
:reset-selected-sku-on-hide="true"
|
||||||
:disable-stepper-input="true"
|
:disable-stepper-input="true"
|
||||||
@buy-clicked="handleBuyClicked"
|
@buy-clicked="onBuyClicked"
|
||||||
@add-cart="handleAddCartClicked"
|
@add-cart="onAddCartClicked"
|
||||||
/>
|
/>
|
||||||
<van-button type="primary" @click="showBase = true" block>{{ $t('basicUsage') }}</van-button>
|
<van-button type="primary" @click="showBase = true" block>{{ $t('basicUsage') }}</van-button>
|
||||||
</div>
|
</div>
|
||||||
@ -23,7 +23,7 @@
|
|||||||
<demo-block :title="$t('advancedUsage')">
|
<demo-block :title="$t('advancedUsage')">
|
||||||
<div class="sku-container">
|
<div class="sku-container">
|
||||||
<van-sku
|
<van-sku
|
||||||
v-model="showCustomAction"
|
v-model="showCustom"
|
||||||
:stepper-title="$t('stepperTitle')"
|
:stepper-title="$t('stepperTitle')"
|
||||||
:sku="$t('sku').sku"
|
:sku="$t('sku').sku"
|
||||||
:goods="$t('sku').goods_info"
|
:goods="$t('sku').goods_info"
|
||||||
@ -34,18 +34,17 @@
|
|||||||
:quota-used="$t('sku').quota_used"
|
:quota-used="$t('sku').quota_used"
|
||||||
:reset-stepper-on-hide="true"
|
:reset-stepper-on-hide="true"
|
||||||
:initial-sku="initialSku"
|
:initial-sku="initialSku"
|
||||||
@buy-clicked="handleBuyClicked"
|
@buy-clicked="onBuyClicked"
|
||||||
@add-cart="handleAddCartClicked"
|
@add-cart="onAddCartClicked"
|
||||||
>
|
>
|
||||||
<template slot="sku-messages" />
|
|
||||||
<template slot="sku-actions" slot-scope="props">
|
<template slot="sku-actions" slot-scope="props">
|
||||||
<div class="van-sku-actions">
|
<div class="van-sku-actions">
|
||||||
<van-button bottom-action @click="handlePointClicked">{{ $t('button1') }}</van-button>
|
<van-button bottom-action @click="onPointClicked">{{ $t('button1') }}</van-button>
|
||||||
<van-button type="primary" bottom-action @click="props.skuEventBus.$emit('sku:buy')">{{ $t('button2') }}</van-button>
|
<van-button type="primary" bottom-action @click="props.skuEventBus.$emit('sku:buy')">{{ $t('button2') }}</van-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</van-sku>
|
</van-sku>
|
||||||
<van-button type="primary" @click="showCustomAction = true" block>{{ $t('advancedUsage') }}</van-button>
|
<van-button type="primary" @click="showCustom = true" block>{{ $t('advancedUsage') }}</van-button>
|
||||||
</div>
|
</div>
|
||||||
</demo-block>
|
</demo-block>
|
||||||
</demo-section>
|
</demo-section>
|
||||||
@ -73,7 +72,7 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
showBase: false,
|
showBase: false,
|
||||||
showCustomAction: false,
|
showCustom: false,
|
||||||
initialSku: {
|
initialSku: {
|
||||||
s1: '30349',
|
s1: '30349',
|
||||||
s2: '1193'
|
s2: '1193'
|
||||||
@ -82,13 +81,15 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
handleBuyClicked(data) {
|
onBuyClicked(data) {
|
||||||
Toast(JSON.stringify(data));
|
Toast(JSON.stringify(data));
|
||||||
},
|
},
|
||||||
handleAddCartClicked(data) {
|
|
||||||
|
onAddCartClicked(data) {
|
||||||
Toast(JSON.stringify(data));
|
Toast(JSON.stringify(data));
|
||||||
},
|
},
|
||||||
handlePointClicked() {
|
|
||||||
|
onPointClicked() {
|
||||||
Toast('积分兑换');
|
Toast('积分兑换');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,8 +22,8 @@ Vue.use(Sku);
|
|||||||
:reset-stepper-on-hide="resetStepperOnHide"
|
:reset-stepper-on-hide="resetStepperOnHide"
|
||||||
:reset-selected-sku-on-hide="resetSelectedSkuOnHide"
|
:reset-selected-sku-on-hide="resetSelectedSkuOnHide"
|
||||||
:disable-stepper-input="disableStepperInput"
|
:disable-stepper-input="disableStepperInput"
|
||||||
@buy-clicked="handleBuyClicked"
|
@buy-clicked="onBuyClicked"
|
||||||
@add-cart="handleAddCartClicked"
|
@add-cart="onAddCartClicked"
|
||||||
/>
|
/>
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -42,15 +42,13 @@ Vue.use(Sku);
|
|||||||
:quota-used="quotaUsed"
|
:quota-used="quotaUsed"
|
||||||
:reset-stepper-on-hide="true"
|
:reset-stepper-on-hide="true"
|
||||||
:initial-sku="initialSku"
|
:initial-sku="initialSku"
|
||||||
@buy-clicked="handleBuyClicked"
|
@buy-clicked="onBuyClicked"
|
||||||
@add-cart="handleAddCartClicked"
|
@add-cart="onAddCartClicked"
|
||||||
>
|
>
|
||||||
<!-- hide sku messages -->
|
|
||||||
<template slot="sku-messages"></template>
|
|
||||||
<!-- custom sku actions -->
|
<!-- custom sku actions -->
|
||||||
<template slot="sku-actions" slot-scope="props">
|
<template slot="sku-actions" slot-scope="props">
|
||||||
<div class="van-sku-actions">
|
<div class="van-sku-actions">
|
||||||
<van-button bottom-action @click="handlePointClicked">Button</van-button>
|
<van-button bottom-action @click="onPointClicked">Button</van-button>
|
||||||
<!-- trigger sku inner event -->
|
<!-- trigger sku inner event -->
|
||||||
<van-button type="primary" bottom-action @click="props.skuEventBus.$emit('sku:buy')">Button</van-button>
|
<van-button type="primary" bottom-action @click="props.skuEventBus.$emit('sku:buy')">Button</van-button>
|
||||||
</div>
|
</div>
|
||||||
@ -82,6 +80,12 @@ Vue.use(Sku);
|
|||||||
| add-cart | Triggered when click cart button | data: Object |
|
| add-cart | Triggered when click cart button | data: Object |
|
||||||
| buy-clicked | Triggered when click buy button | data: Object |
|
| buy-clicked | Triggered when click buy button | data: Object |
|
||||||
|
|
||||||
|
### Methods
|
||||||
|
|
||||||
|
| Method | Description |
|
||||||
|
|-----------|-----------|
|
||||||
|
| getSkuData() | Get current sku data |
|
||||||
|
|
||||||
### Slot
|
### Slot
|
||||||
|
|
||||||
| Name | Description |
|
| Name | Description |
|
||||||
|
@ -22,8 +22,8 @@ Vue.use(Sku);
|
|||||||
:reset-stepper-on-hide="resetStepperOnHide"
|
:reset-stepper-on-hide="resetStepperOnHide"
|
||||||
:reset-selected-sku-on-hide="resetSelectedSkuOnHide"
|
:reset-selected-sku-on-hide="resetSelectedSkuOnHide"
|
||||||
:disable-stepper-input="disableStepperInput"
|
:disable-stepper-input="disableStepperInput"
|
||||||
@buy-clicked="handleBuyClicked"
|
@buy-clicked="onBuyClicked"
|
||||||
@add-cart="handleAddCartClicked"
|
@add-cart="onAddCartClicked"
|
||||||
/>
|
/>
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -42,16 +42,14 @@ Vue.use(Sku);
|
|||||||
:quota-used="quotaUsed"
|
:quota-used="quotaUsed"
|
||||||
:reset-stepper-on-hide="true"
|
:reset-stepper-on-hide="true"
|
||||||
:initial-sku="initialSku"
|
:initial-sku="initialSku"
|
||||||
@buy-clicked="handleBuyClicked"
|
@buy-clicked="onBuyClicked"
|
||||||
@add-cart="handleAddCartClicked"
|
@add-cart="onAddCartClicked"
|
||||||
>
|
>
|
||||||
<!-- 隐藏 sku messages -->
|
|
||||||
<template slot="sku-messages"></template>
|
|
||||||
<!-- 自定义 sku actions -->
|
<!-- 自定义 sku actions -->
|
||||||
<template slot="sku-actions" slot-scope="props">
|
<template slot="sku-actions" slot-scope="props">
|
||||||
<div class="van-sku-actions">
|
<div class="van-sku-actions">
|
||||||
<van-button bottom-action @click="handlePointClicked">积分兑换</van-button>
|
<van-button bottom-action @click="onPointClicked">积分兑换</van-button>
|
||||||
<!-- 直接触发 sku 内部事件,通过内部事件执行 handleBuyClicked 回调 -->
|
<!-- 直接触发 sku 内部事件,通过内部事件执行 onBuyClicked 回调 -->
|
||||||
<van-button type="primary" bottom-action @click="props.skuEventBus.$emit('sku:buy')">买买买</van-button>
|
<van-button type="primary" bottom-action @click="props.skuEventBus.$emit('sku:buy')">买买买</van-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -83,6 +81,11 @@ Vue.use(Sku);
|
|||||||
| add-cart | 点击添加购物车回调 | skuData: Object |
|
| add-cart | 点击添加购物车回调 | skuData: Object |
|
||||||
| buy-clicked | 点击购买回调 | skuData: Object |
|
| buy-clicked | 点击购买回调 | skuData: Object |
|
||||||
|
|
||||||
|
### 方法
|
||||||
|
|
||||||
|
| 函数 | 说明 |
|
||||||
|
|-----------|-----------|
|
||||||
|
| getSkuData() | 获取当前 skuData |
|
||||||
|
|
||||||
### Slot
|
### Slot
|
||||||
Sku 组件默认划分好了若干区块,这些区块都定义成了 slot,可以按需进行替换。区块顺序见下表:
|
Sku 组件默认划分好了若干区块,这些区块都定义成了 slot,可以按需进行替换。区块顺序见下表:
|
||||||
|
@ -251,12 +251,12 @@ export default create({
|
|||||||
const skuEventBus = new Vue();
|
const skuEventBus = new Vue();
|
||||||
this.skuEventBus = skuEventBus;
|
this.skuEventBus = skuEventBus;
|
||||||
|
|
||||||
skuEventBus.$on('sku:close', this.handleCloseClicked);
|
skuEventBus.$on('sku:close', this.onCloseClicked);
|
||||||
skuEventBus.$on('sku:select', this.handleSkuSelected);
|
skuEventBus.$on('sku:select', this.onSkuSelected);
|
||||||
skuEventBus.$on('sku:numChange', this.handleNumChange);
|
skuEventBus.$on('sku:numChange', this.onNumChange);
|
||||||
skuEventBus.$on('sku:overLimit', this.handleOverLimit);
|
skuEventBus.$on('sku:overLimit', this.onOverLimit);
|
||||||
skuEventBus.$on('sku:addCart', this.handleAddCartClicked);
|
skuEventBus.$on('sku:addCart', this.onAddCartClicked);
|
||||||
skuEventBus.$on('sku:buy', this.handleBuyClicked);
|
skuEventBus.$on('sku:buy', this.onBuyClicked);
|
||||||
|
|
||||||
this.resetSelectedSku(this.skuTree);
|
this.resetSelectedSku(this.skuTree);
|
||||||
// 组件初始化后的钩子,抛出skuEventBus
|
// 组件初始化后的钩子,抛出skuEventBus
|
||||||
@ -306,11 +306,11 @@ export default create({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
handleCloseClicked() {
|
onCloseClicked() {
|
||||||
this.show = false;
|
this.show = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
handleSkuSelected(skuValue) {
|
onSkuSelected(skuValue) {
|
||||||
// 点击已选中的sku时则取消选中
|
// 点击已选中的sku时则取消选中
|
||||||
this.selectedSku =
|
this.selectedSku =
|
||||||
this.selectedSku[skuValue.skuKeyStr] === skuValue.id
|
this.selectedSku[skuValue.skuKeyStr] === skuValue.id
|
||||||
@ -324,11 +324,11 @@ export default create({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
handleNumChange(num) {
|
onNumChange(num) {
|
||||||
this.selectedNum = num;
|
this.selectedNum = num;
|
||||||
},
|
},
|
||||||
|
|
||||||
handleOverLimit({ action, limitType, quota, quotaUsed }) {
|
onOverLimit({ action, limitType, quota, quotaUsed }) {
|
||||||
if (action === 'minus') {
|
if (action === 'minus') {
|
||||||
Toast(this.$t('least'));
|
Toast(this.$t('least'));
|
||||||
} else if (action === 'plus') {
|
} else if (action === 'plus') {
|
||||||
@ -342,27 +342,31 @@ export default create({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
handleAddCartClicked() {
|
onAddCartClicked() {
|
||||||
this.handleBuyOrAddCart('add-cart');
|
this.onBuyOrAddCart('add-cart');
|
||||||
},
|
},
|
||||||
|
|
||||||
handleBuyClicked() {
|
onBuyClicked() {
|
||||||
this.handleBuyOrAddCart('buy-clicked');
|
this.onBuyOrAddCart('buy-clicked');
|
||||||
},
|
},
|
||||||
|
|
||||||
handleBuyOrAddCart(type) {
|
onBuyOrAddCart(type) {
|
||||||
const error = this.validateSku();
|
const error = this.validateSku();
|
||||||
if (error) {
|
if (error) {
|
||||||
Toast(error);
|
Toast(error);
|
||||||
return;
|
} else {
|
||||||
|
this.$emit(type, this.getSkuData());
|
||||||
}
|
}
|
||||||
this.$emit(type, {
|
},
|
||||||
|
|
||||||
|
getSkuData() {
|
||||||
|
return {
|
||||||
goodsId: this.goodsId,
|
goodsId: this.goodsId,
|
||||||
selectedNum: this.selectedNum,
|
selectedNum: this.selectedNum,
|
||||||
selectedSkuComb: this.selectedSkuComb,
|
selectedSkuComb: this.selectedSkuComb,
|
||||||
messages: this.getSkuMessages(),
|
messages: this.getSkuMessages(),
|
||||||
cartMessages: this.getSkuCartMessages()
|
cartMessages: this.getSkuCartMessages()
|
||||||
});
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user