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];