Authored by Rock Zhang

修改加价购商品详情的数据结构以适应js交互

Code Review By Rock Zhang
@@ -647,46 +647,57 @@ class CartModel @@ -647,46 +647,57 @@ class CartModel
647 if (isset($productData['goods_list'])) { 647 if (isset($productData['goods_list'])) {
648 $goodsList = $productData['goods_list']; 648 $goodsList = $productData['goods_list'];
649 649
  650 + $sizeName = '';
650 $colors = array(); 651 $colors = array();
  652 + $colorList = array();
651 $oneColor = array(); 653 $oneColor = array();
652 $sizes = array(); 654 $sizes = array();
653 $oneSize = array(); 655 $oneSize = array();
654 $sizeList = array(); 656 $sizeList = array();
  657 + $allSizeList = array(); // 所有尺码列表
655 $thumbImageList = array(); 658 $thumbImageList = array();
656 $colorNum = 0; 659 $colorNum = 0;
657 $totalStorageNum = 0; // 总库存数 660 $totalStorageNum = 0; // 总库存数
658 $colorStorageGroup = array(); // 颜色分组的库存总数集合, 多个之间用/分隔 661 $colorStorageGroup = array(); // 颜色分组的库存总数集合, 多个之间用/分隔
659 foreach ($goodsList as $val) { 662 foreach ($goodsList as $val) {
660 $colorNum = 0; 663 $colorNum = 0;
661 - $sizeStorageStr = ''; 664 + $sizeName = '';
662 665
  666 + // 商品的尺码列表
  667 + $colorStorageGroup[ $val['product_skc'] ] = array();
  668 + if (isset($val['size_list'])) {
663 // 尺码 669 // 尺码
664 foreach ($val['size_list'] as $one) { 670 foreach ($val['size_list'] as $one) {
  671 + $sizeName = $one['size_name'];
665 $oneSize = array(); 672 $oneSize = array();
  673 +
666 $oneSize['id'] = $one['size_id']; 674 $oneSize['id'] = $one['size_id'];
667 $oneSize['skuId'] = $one['product_sku']; 675 $oneSize['skuId'] = $one['product_sku'];
668 $oneSize['goodsId'] = $val['goods_id']; 676 $oneSize['goodsId'] = $val['goods_id'];
669 $oneSize['colorId'] = $val['color_id']; 677 $oneSize['colorId'] = $val['color_id'];
670 - $oneSize['name'] = $one['size_name']; 678 + $oneSize['name'] = $sizeName;
671 $oneSize['sizeNum'] = $one['storage_number']; 679 $oneSize['sizeNum'] = $one['storage_number'];
  680 + $sizeList[$val['product_skc']][] = $oneSize;
672 681
673 - $colorNum += $one['storage_number'];  
674 - $sizeStorageStr .= $one['storage_number'] . '/'; 682 + // 所有尺码列表,赋值用于前端展示默认尺码的时候 判断出没有库存则显示灰色
  683 + $allSizeList[$sizeName] = empty($allSizeList[$sizeName]['storage_number'])
  684 + ? array('storage' => $one['storage_number'], 'id' => $one['size_id'])
  685 + : $allSizeList[$sizeName];
675 686
676 - $sizeList[$val['product_skc']][] = $oneSize; 687 + $colorNum += intval($one['storage_number']);
677 688
678 $colorStorageGroup[$val['product_skc']][$one['size_name']] = $one['storage_number']; 689 $colorStorageGroup[$val['product_skc']][$one['size_name']] = $one['storage_number'];
679 } 690 }
680 691
681 - // 颜色 692 + // 颜色分组
682 $oneColor = array(); 693 $oneColor = array();
683 $oneColor['id'] = $val['color_id']; 694 $oneColor['id'] = $val['color_id'];
684 $oneColor['skcId'] = $val['product_skc']; 695 $oneColor['skcId'] = $val['product_skc'];
685 $oneColor['name'] = $val['color_name']; 696 $oneColor['name'] = $val['color_name'];
686 $oneColor['goodsName'] = $productData['product_name']; 697 $oneColor['goodsName'] = $productData['product_name'];
687 $oneColor['colorNum'] = $colorNum; 698 $oneColor['colorNum'] = $colorNum;
688 - $oneColor['sizeNumStr'] = rtrim($sizeStorageStr, '/');  
689 - $colors[] = $oneColor; 699 + $colorList[] = $oneColor;
  700 + }
690 701
691 // 缩略图 702 // 缩略图
692 foreach ($val['images_list'] as $image) { 703 foreach ($val['images_list'] as $image) {
@@ -699,25 +710,38 @@ class CartModel @@ -699,25 +710,38 @@ class CartModel
699 $totalStorageNum += $colorNum; 710 $totalStorageNum += $colorNum;
700 } 711 }
701 712
702 - // 遍历所有尺码,统计出该尺码的每个颜色的库存量,没有时添0,不能空着,因为JS中需要判断  
703 - foreach ($sizeList as $skc => $sizeArr) {  
704 - foreach ($sizeArr as $key => $value) {  
705 - $sizeStorageStr = '';  
706 - foreach ($colorStorageGroup as $colorArr) {  
707 - if (isset($colorArr[$value['name']])) {  
708 - $sizeStorageStr .= $colorArr[$value['name']] . '/';  
709 - } else {  
710 - $sizeStorageStr .= '0/';  
711 - }  
712 - }  
713 - $sizeList[$skc][$key]['colorNumStr'] = rtrim($sizeStorageStr, '/'); 713 + // 遍历所有尺码,构建颜色显示数据
  714 + $i = 1;
  715 + foreach ($allSizeList as $sizeName => $value) {
  716 + // 默认尺码
  717 + $sizes[0]['size'][] = array(
  718 + 'name' => $sizeName, // 尺码名称
  719 + 'sizeNum' => empty($value['storage']) ? false : true, // 是否有库存 (false:表示没有库存,true:表示有库存)
  720 + 'id' => $value['id'],
  721 + );
  722 +
  723 + // 各个颜色的尺码, 每行显示一个尺码对应的颜色
  724 + foreach ($colorList as $colorArr) {
  725 + $colorArr['colorNum'] = isset($colorStorageGroup[ $colorArr['skcId'] ][$sizeName]) ? $colorStorageGroup[ $colorArr['skcId'] ][$sizeName] : 0;
  726 + $colors[$i]['color'][] = $colorArr;
714 } 727 }
  728 + $colors[$i]['id'] = $value['id'];
  729 +
  730 + ++ $i;
715 } 731 }
716 732
717 - // 格式化尺码对应的各个颜色分组  
718 - foreach ($colors as $color) {  
719 - $sizes[]['size'] = $sizeList[$color['skcId']]; 733 + // 遍历所有颜色, 构建尺码显示数据
  734 + $i = 1;
  735 + foreach ($colorList as $value) {
  736 + // 各个尺码的颜色,每行显示一个颜色的对应尺码
  737 + $sizes[$i]['size'] = $sizeList[ $value['skcId'] ];
  738 + $sizes[$i]['colorId'] = $value['skcId'];
  739 + // 默认颜色
  740 + $colors[0]['color'][] = $value;
  741 +
  742 + ++ $i;
720 } 743 }
  744 + ksort($colors, SORT_NUMERIC);
721 745
722 $data['thumbs'] = $thumbImageList; 746 $data['thumbs'] = $thumbImageList;
723 $data['colors'] = $colors; 747 $data['colors'] = $colors;