refactor(Sku): simplify SkuRow props

This commit is contained in:
chenjiahan 2020-06-25 17:13:18 +08:00 committed by neverland
parent ada23d9ebe
commit f555ebb030
2 changed files with 29 additions and 32 deletions

View File

@ -678,11 +678,7 @@ export default createComponent({
(this.hasSkuOrAttr && ( (this.hasSkuOrAttr && (
<div class={this.skuGroupClass}> <div class={this.skuGroupClass}>
{this.skuTree.map((skuTreeItem) => ( {this.skuTree.map((skuTreeItem) => (
<SkuRow <SkuRow item={skuTreeItem}>
skuRow={skuTreeItem}
largeImageMode={skuTreeItem.largeImageMode}
hasScrollTab={skuTreeItem.v.length > 6}
>
{skuTreeItem.v.map((skuValue, itemIndex) => ( {skuTreeItem.v.map((skuValue, itemIndex) => (
<template <template
slot={ slot={
@ -707,7 +703,7 @@ export default createComponent({
</SkuRow> </SkuRow>
))} ))}
{this.propList.map((skuTreeItem) => ( {this.propList.map((skuTreeItem) => (
<SkuRow skuRow={skuTreeItem}> <SkuRow item={skuTreeItem}>
{skuTreeItem.v.map((skuValue) => ( {skuTreeItem.v.map((skuValue) => (
<SkuRowPropItem <SkuRowPropItem
skuValue={skuValue} skuValue={skuValue}

View File

@ -8,28 +8,20 @@ const [createComponent, bem, t] = createNamespace('sku-row');
export default createComponent({ export default createComponent({
mixins: [ mixins: [
BindEventMixin(function (bind) { BindEventMixin(function (bind) {
if (!(this.largeImageMode && this.hasScrollTab)) { if (this.scrollable) {
return false;
}
if (!this.scrollCon) { if (!this.scrollCon) {
this.scrollCon = this.$refs.skuContent; this.scrollCon = this.$refs.skuContent;
} }
bind(this.scrollCon, 'scroll', this.onScroll); bind(this.scrollCon, 'scroll', this.onScroll);
}
}), }),
], ],
props: { props: {
skuRow: Object, item: Object,
largeImageMode: {
type: Boolean,
default: false,
},
hasScrollTab: {
type: Boolean,
default: false,
},
}, },
data() { data() {
return { return {
present: 0, present: 0,
@ -38,17 +30,21 @@ export default createComponent({
scrollLeft: 0, scrollLeft: 0,
}; };
}, },
computed: { computed: {
scrollable() {
return this.item.largeImageMode && this.item.v.length > 6;
},
scrollStyle() { scrollStyle() {
if (!(this.largeImageMode && this.hasScrollTab)) { if (this.scrollable) {
return false;
}
this.tranX = this.present * 20;
return { return {
transform: `translate3d(${this.tranX}px, 0, 0)`, transform: `translate3d(${this.present * 20}px, 0, 0)`,
}; };
}
}, },
}, },
methods: { methods: {
onScroll() { onScroll() {
this.$nextTick(() => { this.$nextTick(() => {
@ -59,11 +55,15 @@ export default createComponent({
}); });
}, },
}, },
render() { render() {
const { skuRow, largeImageMode, hasScrollTab } = this; const { item, scrollable } = this;
const multipleNode = skuRow.is_multiple && ( const { largeImageMode } = item;
const multipleNode = item.is_multiple && (
<span class={bem('title-multiple')}>{t('multiple')}</span> <span class={bem('title-multiple')}>{t('multiple')}</span>
); );
const SkuScroll = ( const SkuScroll = (
<div class={bem('scroll')}> <div class={bem('scroll')}>
<div class={bem('scroll__content')} ref="skuScroll"> <div class={bem('scroll__content')} ref="skuScroll">
@ -85,14 +85,15 @@ export default createComponent({
</div> </div>
</div> </div>
); );
return ( return (
<div class={[bem(), BORDER_BOTTOM, largeImageMode && bem('picture')]}> <div class={[bem(), BORDER_BOTTOM, largeImageMode && bem('picture')]}>
<div class={bem('title')}> <div class={bem('title')}>
{skuRow.k} {item.k}
{multipleNode} {multipleNode}
</div> </div>
{largeImageMode ? SkuContent : this.slots()} {largeImageMode ? SkuContent : this.slots()}
{largeImageMode && hasScrollTab && SkuScroll} {largeImageMode && scrollable && SkuScroll}
</div> </div>
); );
}, },