Просмотр исходного кода

优化:订单详情页商品封面显示SKU图

萤火科技 4 лет назад
Родитель
Сommit
7cd07321fb

+ 15 - 1
app/api/controller/Goods.php

@@ -12,7 +12,9 @@ declare (strict_types=1);
 
 namespace app\api\controller;
 
-use app\api\model\Goods as GoodsModel;
+use think\response\Json;
+use app\api\model\{Goods as GoodsModel};
+use app\api\service\{Goods as GoodsService};
 
 /**
  * 商品控制器
@@ -81,4 +83,16 @@ class Goods extends Controller
         $specData = $model->getSpecData($goodsId);
         return $this->renderSuccess(compact('specData'));
     }
+
+    /**
+     * 获取商品的指定SKU信息
+     * @param int $goodsId 商品ID
+     * @param string $goodsSkuId 商品SKU标识
+     * @return Json
+     */
+    public function skuInfo(int $goodsId, string $goodsSkuId): Json
+    {
+        $skuInfo = GoodsService::getSkuInfo($goodsId, $goodsSkuId);
+        return $this->renderSuccess(compact('skuInfo'));
+    }
 }

+ 3 - 3
app/api/model/Goods.php

@@ -84,8 +84,8 @@ class Goods extends GoodsModel
         if ($list->isEmpty()) {
             return $list;
         }
-        // 隐藏冗余的字段
-        $list->hidden(array_merge($this->hidden, ['content', 'goods_images', 'images']));
+        // 隐藏冗余的属性
+        $list->hidden(static::getHidden(['content', 'goods_images', 'images']));
         // 整理列表数据并返回
         return $this->setGoodsListDataFromApi($list);
     }
@@ -108,7 +108,7 @@ class Goods extends GoodsModel
         $goodsInfo = $this->getGoodsMain($goodsId, $with, $verifyStatus);
         // 商品规格列表
         $goodsInfo['specList'] = GoodsSpecRelModel::getSpecList($goodsInfo['goods_id']);
-        return $goodsInfo->hidden(array_merge($this->hidden, ['images']));
+        return $goodsInfo->hidden(static::getHidden(['images']));
     }
 
     /**

+ 2 - 1
app/api/model/GoodsSku.php

@@ -34,7 +34,8 @@ class GoodsSku extends GoodsSkuModel
      * 隐藏字段
      * @var array
      */
-    protected $hidden = [
+    public $hidden = [
+        'image',
         'store_id',
         'create_time',
         'update_time'

+ 3 - 1
app/api/model/Order.php

@@ -133,10 +133,12 @@ class Order extends OrderModel
             throwError('未找到商品信息');
         }
         // 隐藏冗余的属性
-        $goodsList->hidden(array_merge($model->hidden, ['content', 'goods_images', 'images']));
+        $goodsList->hidden(GoodsModel::getHidden(['content', 'goods_images', 'images']));
         foreach ($goodsList as &$item) {
             // 商品sku信息
             $goodsInfo['skuInfo'] = GoodsModel::getSkuInfo($item, $goodsSkuId, false);
+            // 商品封面 (优先sku封面)
+            $item['goods_image'] = $item['skuInfo']['goods_image'] ?: $item['goods_image'];
             // 商品单价
             $item['goods_price'] = $item['skuInfo']['goods_price'];
             // 商品购买数量

+ 5 - 1
app/api/service/Cart.php

@@ -107,6 +107,8 @@ class Cart extends BaseService
         }
         // 获取当前选择的商品SKU信息
         $goodsInfo['skuInfo'] = GoodsModel::getSkuInfo($goodsInfo, $item['goods_sku_id'], $isGoodsGradeMoney);
+        // 商品封面 (优先sku封面)
+        $goodsInfo['goods_image'] = $goodsInfo['skuInfo']['goods_image'] ?: $goodsInfo['goods_image'];
         // 这里需要用到clone, 因对象是引用传递 后面的值会覆盖前面的
         return clone $goodsInfo;
     }
@@ -132,7 +134,9 @@ class Cart extends BaseService
     private function getGoodsListByIds(array $goodsIds, bool $isGoodsGradeMoney = true)
     {
         $model = new GoodsModel;
-        return $model->isGoodsGradeMoney($isGoodsGradeMoney)->getListByIdsFromApi($goodsIds);
+        return $model->isGoodsGradeMoney($isGoodsGradeMoney)
+            ->getListByIdsFromApi($goodsIds)
+            ->hidden(GoodsModel::getHidden(['goods_images']));
     }
 
     /**

+ 15 - 1
app/api/service/Goods.php

@@ -12,6 +12,7 @@ declare (strict_types = 1);
 
 namespace app\api\service;
 
+use app\api\model\GoodsSku as GoodsSkuModel;
 use app\common\service\Goods as GoodsService;
 
 /**
@@ -21,5 +22,18 @@ use app\common\service\Goods as GoodsService;
  */
 class Goods extends GoodsService
 {
-
+    /**
+     * 获取商品的指定的某个SKU信息
+     * @param int $goodsId
+     * @param string $goodsSkuId
+     * @return GoodsSkuModel|array|null
+     */
+    public static function getSkuInfo(int $goodsId, string $goodsSkuId)
+    {
+        $detail = GoodsSkuModel::detail($goodsId, $goodsSkuId);
+        if (!empty($detail['image'])) {
+            $detail['goods_image'] = $detail['image']['preview_url'];
+        }
+        return $detail;
+    }
 }

+ 1 - 2
app/common/model/GoodsSku.php

@@ -13,7 +13,6 @@ declare (strict_types=1);
 namespace app\common\model;
 
 use cores\BaseModel;
-
 use app\common\library\helper;
 
 /**
@@ -86,7 +85,7 @@ class GoodsSku extends BaseModel
      */
     public static function detail(int $goodsId, string $goodsSkuId)
     {
-        return static::get(['goods_id' => $goodsId, 'goods_sku_id' => $goodsSkuId]);
+        return static::get(['goods_id' => $goodsId, 'goods_sku_id' => $goodsSkuId], ['image']);
     }
 
     /**

+ 5 - 1
app/common/service/Goods.php

@@ -55,7 +55,11 @@ class Goods extends BaseService
      */
     public static function getSkuInfo(int $goodsId, string $goodsSkuId)
     {
-        return GoodsSkuModel::detail($goodsId, $goodsSkuId);
+        $detail = GoodsSkuModel::detail($goodsId, $goodsSkuId);
+        if (!empty($detail['image'])) {
+            $detail['goods_image'] = $detail['image']['preview_url'];
+        }
+        return $detail->hidden(['image']);
     }
 
     /**

+ 11 - 0
cores/BaseModel.php

@@ -284,4 +284,15 @@ abstract class BaseModel extends Model
         }
         return $fields;
     }
+
+    /**
+     * 获取隐藏的属性
+     * @param array $hidden
+     * @return array
+     */
+    public static function getHidden(array $hidden = []): array
+    {
+        $model = new static;
+        return array_merge($model->hidden, $hidden);
+    }
 }