feat(Sku): add resetSelectedSku method (#5318)

This commit is contained in:
neverland 2019-12-19 17:50:20 +08:00 committed by GitHub
parent 80834d7400
commit 228b35af9b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 53 additions and 16 deletions

View File

@ -161,6 +161,7 @@ Use [ref](https://vuejs.org/v2/api/#ref) to get Sku instance and call instance m
| Name | Description | Attribute | Return value |
|------|------|------|------|
| getSkuData | Get current skuData | - | skuData |
| resetSelectedSku | Reset selected sku to initial sku | - | - | 2.3.0 |
### Slots

View File

@ -162,9 +162,10 @@ export default {
通过 [ref](https://cn.vuejs.org/v2/api/#ref) 可以获取到 Sku 实例并调用实例方法
| 方法名 | 说明 | 参数 | 返回值 |
|------|------|------|------|
| getSkuData | 获取当前 skuData | - | skuData |
| 方法名 | 说明 | 参数 | 返回值 | 版本 |
|------|------|------|------|------|
| getSkuData | 获取当前 skuData | - | skuData | - |
| resetSelectedSku | 重置选中规格到初始状态 | - | - | 2.3.0 |
### Slots

View File

@ -106,7 +106,7 @@ export default createComponent({
}
if (this.resetSelectedSkuOnHide) {
this.resetSelectedSku(this.skuTree);
this.resetSelectedSku();
}
}
},
@ -119,7 +119,7 @@ export default createComponent({
initialSku() {
this.resetStepper();
this.resetSelectedSku(this.skuTree);
this.resetSelectedSku();
},
},
@ -267,7 +267,7 @@ export default createComponent({
skuEventBus.$on('sku:buy', this.onBuy);
this.resetStepper();
this.resetSelectedSku(this.skuTree);
this.resetSelectedSku();
// 组件初始化后的钩子抛出skuEventBus
this.$emit('after-sku-create', skuEventBus);
@ -289,16 +289,17 @@ export default createComponent({
}
},
resetSelectedSku(skuTree) {
// @exposed-api
resetSelectedSku() {
this.selectedSku = {};
// 重置 selectedSku
skuTree.forEach(item => {
this.skuTree.forEach(item => {
this.selectedSku[item.k_s] = this.initialSku[item.k_s] || UNSELECTED_SKU_VALUE_ID;
});
// 只有一个 sku 规格值时默认选中
skuTree.forEach(item => {
this.skuTree.forEach(item => {
const key = item.k_s;
const valueId = item.v[0].id;
if (
@ -451,6 +452,7 @@ export default createComponent({
}
},
// @exposed-api
getSkuData() {
return {
goodsId: this.goodsId,

View File

@ -1,4 +1,4 @@
export default {
export const skuData = {
goods_id: '946755',
quota: 15,
quota_used: 0,
@ -181,3 +181,9 @@ export default {
]
}
};
export const initialSku = {
s1: '30349',
s2: '1193',
selectedNum: 3
};

View File

@ -150,7 +150,7 @@
</template>
<script>
import skuData from './data';
import { skuData, initialSku } from './data';
import { LIMIT_TYPE } from '../constants';
export default {
@ -173,17 +173,14 @@ export default {
data() {
this.skuData = skuData;
this.initialSku = initialSku;
return {
showBase: false,
showCustom: false,
showStepper: false,
showSoldout: false,
closeOnClickOverlay: true,
initialSku: {
s1: '30349',
s2: '1193',
selectedNum: 3
},
customSkuValidator: () => '请选择xxx',
customStepperConfig: {
quotaText: '单次限购100件',

View File

@ -0,0 +1,30 @@
import { mount } from '../../../test';
import Sku from '..';
import { skuData, initialSku } from '../demo/data';
test('resetSelectedSku method', () => {
skuData.sku.messages = [];
const wrapper = mount(Sku, {
propsData: {
value: true,
initialSku,
sku: skuData.sku,
quota: skuData.quota,
goods: skuData.goods_info,
goodsId: skuData.goods_id,
quotaUsed: skuData.quota_used,
hideStock: skuData.sku.hide_stock,
startSaleNum: skuData.start_sale_num
}
});
wrapper.find('.van-button--danger').trigger('click');
expect(wrapper.emitted('buy-clicked').length).toEqual(1);
wrapper.setProps({ initialSku: {} });
wrapper.vm.resetSelectedSku();
wrapper.find('.van-button--danger').trigger('click');
expect(wrapper.emitted('buy-clicked').length).toEqual(1);
});