From 485452cc976f6f89281a0dfab3d2a544c7dd07ce Mon Sep 17 00:00:00 2001 From: niunai <colonD.wny@gmail.com> Date: Sat, 16 Sep 2017 21:46:39 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=8E=BB=E9=99=A4=E5=A4=A7=E9=83=A8?= =?UTF-8?q?=E5=88=86lodash=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/sku/components/SkuMessages.vue | 3 +-- packages/sku/components/SkuRow.vue | 20 +------------------- packages/sku/components/SkuRowItem.vue | 15 +++++---------- packages/sku/containers/SkuContainer.vue | 18 +++++++++++++----- packages/sku/utils/skuHelper.js | 22 +++++----------------- 5 files changed, 25 insertions(+), 53 deletions(-) diff --git a/packages/sku/components/SkuMessages.vue b/packages/sku/components/SkuMessages.vue index d4f2f17d7..8a8418382 100644 --- a/packages/sku/components/SkuMessages.vue +++ b/packages/sku/components/SkuMessages.vue @@ -23,7 +23,6 @@ </template> <script> -import isEmpty from 'lodash/isEmpty'; import Field from '../../field'; import CellGroup from '../../cell-group'; import validateEmail from 'zan-utils/validate/email'; @@ -117,7 +116,7 @@ export default { const value = values[i]; const message = this.internalMessages[i]; - if (isEmpty(value)) { + if (value === '') { // 必填字段的校验 if (message.required == '1') { // eslint-disable-line if (message.type === 'image') { diff --git a/packages/sku/components/SkuRow.vue b/packages/sku/components/SkuRow.vue index f81905f5d..5556d4121 100644 --- a/packages/sku/components/SkuRow.vue +++ b/packages/sku/components/SkuRow.vue @@ -2,33 +2,15 @@ <div class="van-sku-row"> <div class="van-sku-row__title">{{ skuRow.k }}:</div> <div class="van-sku-row__items"> - <slot name="sku-row-items"> - <van-sku-row-item - v-for="(skuValue, index) in skuRow.v" - :key="index" - :skuKeyStr="skuRow.k_s" - :skuValue="skuValue" - :skuEventBus="$attrs.skuEventBus" - :selectedSku="$attrs.selectedSku" - :skuList="$attrs.skuList"> - </van-sku-row-item> - </slot> + <slot></slot> </div> </div> </template> <script> -import SkuRowItem from './SkuRowItem'; - export default { name: 'van-sku-row', - inheritAttrs: false, - - components: { - [SkuRowItem.name]: SkuRowItem - }, - props: { skuRow: Object } diff --git a/packages/sku/components/SkuRowItem.vue b/packages/sku/components/SkuRowItem.vue index a3cdd608b..7f57322c1 100644 --- a/packages/sku/components/SkuRowItem.vue +++ b/packages/sku/components/SkuRowItem.vue @@ -8,11 +8,6 @@ </template> <script> -import assign from 'lodash/assign'; -import filter from 'lodash/filter'; -import keys from 'lodash/keys'; -import every from 'lodash/every'; - export default { name: 'van-sku-row-item', @@ -29,12 +24,12 @@ export default { return this.skuValue.id === this.selectedSku[this.skuKeyStr]; }, isChoosable() { - const matchedSku = assign({}, this.selectedSku, { + const matchedSku = Object.assign({}, this.selectedSku, { [this.skuKeyStr]: this.skuValue.id }); - const skusToCheck = filter(keys(matchedSku), skuKey => matchedSku[skuKey] !== ''); - const filteredSku = filter(this.skuList, sku => { - return every(skusToCheck, function(skuKey) { + const skusToCheck = Object.keys(matchedSku).filter(skuKey => matchedSku[skuKey] !== ''); + const filteredSku = this.skuList.filter(sku => { + return skusToCheck.every(skuKey => { // 后端给的skuValue.id有时候是数字有时候是字符串,全等会匹配不上 return matchedSku[skuKey] == sku[skuKey]; // eslint-disable-line }); @@ -47,7 +42,7 @@ export default { methods: { onSkuSelected() { - this.skuEventBus.$emit('sku:select', assign({}, this.skuValue, { skuKeyStr: this.skuKeyStr })); + this.skuEventBus.$emit('sku:select', Object.assign({}, this.skuValue, { skuKeyStr: this.skuKeyStr })); } } }; diff --git a/packages/sku/containers/SkuContainer.vue b/packages/sku/containers/SkuContainer.vue index 3ea04a934..115ee3323 100644 --- a/packages/sku/containers/SkuContainer.vue +++ b/packages/sku/containers/SkuContainer.vue @@ -14,15 +14,21 @@ <div class="van-sku-body scroller" :style="bodyStyle"> <slot name="sku-group" :selectedSku="selectedSku"> <div v-if="hasSku" class="van-sku-group-container"> - <div v-for="(skutreeItem, index) in skuTree" + <div v-for="(skuTreeItem, index) in skuTree" class="van-sku-row-group" :key="index"> <van-sku-row - v-bind="$attrs" :skuEventBus="skuEventBus" - :skuRow="skutreeItem" - :skuList="sku.list" - :selectedSku="selectedSku"> + :skuRow="skuTreeItem"> + <van-sku-row-item + v-for="(skuValue, index) in skuTreeItem.v" + :key="index" + :skuKeyStr="skuTreeItem.k_s" + :skuValue="skuValue" + :skuEventBus="skuEventBus" + :selectedSku="selectedSku" + :skuList="sku.list"> + </van-sku-row-item> </van-sku-row> </div> </div> @@ -67,6 +73,7 @@ import Popup from '../../popup'; import Toast from '../../toast'; import SkuHeader from '../components/SkuHeader'; import SkuRow from '../components/SkuRow'; +import SkuRowItem from '../components/SkuRowItem'; import SkuStepper from '../components/SkuStepper'; import SkuMessages from '../components/SkuMessages'; import SkuActions from '../components/SkuActions'; @@ -82,6 +89,7 @@ export default { [Popup.name]: Popup, [SkuHeader.name]: SkuHeader, [SkuRow.name]: SkuRow, + [SkuRowItem.name]: SkuRowItem, [SkuStepper.name]: SkuStepper, [SkuMessages.name]: SkuMessages, [SkuActions.name]: SkuActions diff --git a/packages/sku/utils/skuHelper.js b/packages/sku/utils/skuHelper.js index b354c295b..9b02942e0 100644 --- a/packages/sku/utils/skuHelper.js +++ b/packages/sku/utils/skuHelper.js @@ -1,10 +1,4 @@ -import isArray from 'lodash/isArray'; -import keys from 'lodash/keys'; -import filter from 'lodash/filter'; import find from 'lodash/find'; -import isObject from 'lodash/isObject'; -import every from 'lodash/every'; - /* normalize sku tree @@ -49,21 +43,15 @@ export const normalizeSkuTree = (skuTree) => { // 判断是否所有的sku都已经选中 export const isAllSelected = (skuTree, selectedSku) => { - if (!isArray(skuTree)) { - throw new Error('skuTree must be array'); - } - if (!isObject(selectedSku)) { - throw new Error('selectedSku must be object'); - } - - const selected = filter(keys(selectedSku), skuKeyStr => selectedSku[skuKeyStr] !== ''); + // 筛选selectedSku对象中key值不为空的值 + const selected = Object.keys(selectedSku).filter(skuKeyStr => selectedSku[skuKeyStr] !== ''); return skuTree.length === selected.length; }; // 根据已选择的sku获取skuComb export const getSkuComb = (skuList, selectedSku) => { - const skuComb = find(skuList, (skuComb) => { - return every(keys(selectedSku), skuKeyStr => { + const skuComb = find(skuList, skuComb => { + return Object.keys(selectedSku).every(skuKeyStr => { // 后端给的key有时数字有时字符串,需要兼容=。= return skuComb[skuKeyStr] == selectedSku[skuKeyStr]; // eslint-disable-line }); @@ -74,7 +62,7 @@ export const getSkuComb = (skuList, selectedSku) => { // 获取已选择的sku名称 export const getSelectedSkuValues = (skuTree, selectedSku) => { const normalizedTree = normalizeSkuTree(skuTree); - return keys(selectedSku).reduce((selectedValues, skuKeyStr) => { + return Object.keys(selectedSku).reduce((selectedValues, skuKeyStr) => { const skuValues = normalizedTree[skuKeyStr]; const skuValueId = selectedSku[skuKeyStr];