From f555ebb030b0ffc64fdd2b0c4b8c06c3fd342a96 Mon Sep 17 00:00:00 2001 From: chenjiahan <chenjiahan@youzan.com> Date: Thu, 25 Jun 2020 17:13:18 +0800 Subject: [PATCH] refactor(Sku): simplify SkuRow props --- src/sku/Sku.js | 8 ++---- src/sku/components/SkuRow.js | 53 ++++++++++++++++++------------------ 2 files changed, 29 insertions(+), 32 deletions(-) diff --git a/src/sku/Sku.js b/src/sku/Sku.js index 65f149bca..15e22eea0 100644 --- a/src/sku/Sku.js +++ b/src/sku/Sku.js @@ -678,11 +678,7 @@ export default createComponent({ (this.hasSkuOrAttr && ( <div class={this.skuGroupClass}> {this.skuTree.map((skuTreeItem) => ( - <SkuRow - skuRow={skuTreeItem} - largeImageMode={skuTreeItem.largeImageMode} - hasScrollTab={skuTreeItem.v.length > 6} - > + <SkuRow item={skuTreeItem}> {skuTreeItem.v.map((skuValue, itemIndex) => ( <template slot={ @@ -707,7 +703,7 @@ export default createComponent({ </SkuRow> ))} {this.propList.map((skuTreeItem) => ( - <SkuRow skuRow={skuTreeItem}> + <SkuRow item={skuTreeItem}> {skuTreeItem.v.map((skuValue) => ( <SkuRowPropItem skuValue={skuValue} diff --git a/src/sku/components/SkuRow.js b/src/sku/components/SkuRow.js index c4f1be592..c1843a305 100644 --- a/src/sku/components/SkuRow.js +++ b/src/sku/components/SkuRow.js @@ -8,28 +8,20 @@ const [createComponent, bem, t] = createNamespace('sku-row'); export default createComponent({ mixins: [ BindEventMixin(function (bind) { - if (!(this.largeImageMode && this.hasScrollTab)) { - return false; - } + if (this.scrollable) { + if (!this.scrollCon) { + this.scrollCon = this.$refs.skuContent; + } - if (!this.scrollCon) { - this.scrollCon = this.$refs.skuContent; + bind(this.scrollCon, 'scroll', this.onScroll); } - - bind(this.scrollCon, 'scroll', this.onScroll); }), ], + props: { - skuRow: Object, - largeImageMode: { - type: Boolean, - default: false, - }, - hasScrollTab: { - type: Boolean, - default: false, - }, + item: Object, }, + data() { return { present: 0, @@ -38,17 +30,21 @@ export default createComponent({ scrollLeft: 0, }; }, + computed: { + scrollable() { + return this.item.largeImageMode && this.item.v.length > 6; + }, + scrollStyle() { - if (!(this.largeImageMode && this.hasScrollTab)) { - return false; + if (this.scrollable) { + return { + transform: `translate3d(${this.present * 20}px, 0, 0)`, + }; } - this.tranX = this.present * 20; - return { - transform: `translate3d(${this.tranX}px, 0, 0)`, - }; }, }, + methods: { onScroll() { this.$nextTick(() => { @@ -59,11 +55,15 @@ export default createComponent({ }); }, }, + render() { - const { skuRow, largeImageMode, hasScrollTab } = this; - const multipleNode = skuRow.is_multiple && ( + const { item, scrollable } = this; + const { largeImageMode } = item; + + const multipleNode = item.is_multiple && ( <span class={bem('title-multiple')}>({t('multiple')})</span> ); + const SkuScroll = ( <div class={bem('scroll')}> <div class={bem('scroll__content')} ref="skuScroll"> @@ -85,14 +85,15 @@ export default createComponent({ </div> </div> ); + return ( <div class={[bem(), BORDER_BOTTOM, largeImageMode && bem('picture')]}> <div class={bem('title')}> - {skuRow.k} + {item.k} {multipleNode} </div> {largeImageMode ? SkuContent : this.slots()} - {largeImageMode && hasScrollTab && SkuScroll} + {largeImageMode && scrollable && SkuScroll} </div> ); },