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 | | Name | Description | Attribute | Return value |
|------|------|------|------| |------|------|------|------|
| getSkuData | Get current skuData | - | skuData | | getSkuData | Get current skuData | - | skuData |
| resetSelectedSku | Reset selected sku to initial sku | - | - | 2.3.0 |
### Slots ### Slots

View File

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

View File

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

View File

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