<?php namespace app\api\controller; use app\api\model\GoodsComment; use app\api\model\GoodsSpec; use app\api\model\GoodsSpecRel; use app\common\controller\Api; use think\Db; /** * 商品页面 */ class Goods extends Api { protected $noNeedRight = ['*']; protected $noNeedLogin = ['*']; /** * @ApiTitle (商品详情) * @ApiMethod (POST) * @ApiParams (name=goods_id, type=integer, required=true, description="商品id") * @ApiReturn ({ 'code':'1', 'msg':'商品详情' 'data':{ "goods_id": 22,商品id "goods_name": "Mate 20 华为 HUAWEI ", "spec_type": "20", 10=单规格20=多规格 "brand": null, 品牌 "makefor": null, 进口国产 "packing": null, 包装方式 "keep": null, 保存条件 "number": null, 编号 "price_description": null, 价格说明 "sales_actual": 64, 销量 "price": "4499.00", 价格 "line_price": "0.00", 划线价 "images_text": [ 轮播图 ], "down_image_text": "底部图", "four_image_text": [ 四宫格图 ] } }) */ public function goodsDetail() { $goods_id = $this->request->post('goods_id'); $goodsmodel = new \app\api\model\Goods(); if (!is_numeric($goods_id)) { $this->error('商品id不合法'); } $goods = $goodsmodel::get($goods_id); $goods_spec = Db::name('litestore_goods_spec')->where('goods_id', $goods['goods_id'])->find(); $goods['price'] = $goods_spec['goods_price']; $goods['line_price'] = $goods_spec['line_price']; //判断是否打折 $goods['is_discount'] = 'is'; if (empty($goods_spec['discount']) || $goods_spec['discount'] == 10) { $goods['is_discount'] = 'no'; } $goods['discount'] = $goods_spec['discount'] . '折'; // 产地 $makerfor_list = ['1' => '国产', '2' => '进口']; $goods['makefor'] = isset($makerfor_list[$goods['makefor']]) ? $makerfor_list[$goods['makefor']] : '未知'; $this->success('商品详情', $goods); } /** * @ApiTitle (商品规格) * @ApiMethod (POST) * @ApiParams (name=goods_id, type=integer, required=true, description="商品id") * @ApiReturn ({ 'code':'1', 'msg':'返回成功' 'data':{ // 规格组合完毕的列表 "list": [ { "goods_spec_id": 103, // 规格列表id "goods_id": 22, "goods_no": "SNHW001", "goods_price": "4499.00", "line_price": "0.00", "stock_num": 941, // 库存 "goods_sales": 58, "goods_weight": 500, "spec_sku_id": "44_46", // 搜索字段 组合sku里面的id搜索 从小到大排序 "spec_image": "", "create_time": 1542784591, "update_time": 1543242861 } ], // 规格展示的列表 "sku": [ { "name": "颜色", "second": [ { "id": 44, "name": "亮黑色" } ] }, { "name": "内存", "second": [ { "id": 46, "name": "6GB+64GB" } ] } ] } }) */ public function goodsSku() { $goods_id = $this->request->param('goods_id'); $goodsspecrelmodel = new GoodsSpecRel(); $list = $goodsspecrelmodel ->where('goods_id', $goods_id) ->select(); $array = []; $goods = \app\api\model\Goods::get($goods_id); if ($goods['spec_type'] == 20) { foreach ($list as $key => $value) { if (!isset($array[$value['spec_id']])) { $array[$value['spec_id']]['name'] = Db::name('litestore_spec') ->where('id', $value['spec_id']) ->value('spec_name'); } $spec_value = Db::name('litestore_spec_value') ->where('id', $value['spec_value_id']) ->value('spec_value'); $array[$value['spec_id']]['second'][] = [ 'id' => $value['spec_value_id'], 'name' => $spec_value, ]; } $array = array_values($array); } $goods_spec = GoodsSpec::all(['goods_id' => $goods_id]); foreach ($goods_spec as &$value) { //规格下的购物车数量 if ($this->auth->isLogin()) { $number = Db::name('cart') ->where(['goods_id' => $value['goods_id'], 'sku_id' => $value['goods_spec_id'], 'user_id' => $this->auth->id]) ->value('number'); $value['cart_number'] = $number ?? 0; } else { $value['cart_number'] = 0; } //判断是否打折 $value['is_discount'] = 'is'; if (empty($value['discount']) || $value['discount'] == 10) { $value['is_discount'] = 'no'; } $value['discount'] = $value['discount'] . '折'; } $this->success('商品规格', ['list' => $goods_spec, 'sku' => $array]); } /** * @ApiTitle (商品详情页评价) * @ApiMethod (POST) * @ApiParams (name=goods_id, type=integer, required=true, description="商品id") * @ApiReturn ({ 'code':'1', 'msg':'商品详情页评价' 'data':{ "comment_number": 1, 评价数量 "comment": { "id": 1, "user_id": null, "goods_id": 22, "comment": "12121212", 评论内容 "images": "1asdasd", "score": null, "createtime": null, "status": "normal", "images_text": [ 评价图片数组 "http://temporaryfood.com1asdasd" ] } "user": { "id": 1, "nickname": "admin", "avatar_text": "用户头像", } } }) */ public function goodsDetailComment() { $goods_id = $this->request->post('goods_id'); if (!is_numeric($goods_id)) { $this->error('商品id不合法'); } $model = new GoodsComment(); $goods = []; $goods['comment_number'] = $model->where('goods_id', $goods_id)->where('status', 'normal')->count(); $table_name = $model->getTable(); $goods['comment'] = $model ->with(['user']) ->where($table_name . '.goods_id', $goods_id) ->where($table_name . '.status', 'normal') ->order($table_name . '.id', 'desc') ->find() ?? []; if ($goods['comment']) $goods['comment']->getRelation('user')->visible(['id', 'nickname']); $this->success('商品详情页评价', $goods); } /** * @ApiTitle (商品评价列表) * @ApiMethod (POST) * @ApiParams (name=goods_id, type=integer, required=true, description="商品id") * @ApiParams (name=page, type=integer, required=false, description="页数") * @ApiReturn ({ 'code':'1', 'msg':'返回成功' 'data':{ "total": 1, "per_page": 10, "current_page": 1, "last_page": 1, "data": [ { "id": 1, "user_id": 1, "goods_id": 22, "comment": "12121212", "images": "1asdasd", "score": null, "createtime": null, "status": "normal", "user": { "id": 1, "nickname": "admin", "avatar_text": "" }, "images_text": [ "http://temporaryfood.com1asdasd" ], "createtime_text": "" } ] } }) */ public function goodsComment() { $goods_id = $this->request->post('goods_id'); $page = $this->request->post('page'); $model = new \app\api\model\GoodsComment(); if (!is_numeric($goods_id)) { $this->error('商品id不合法'); } $lists = $model ->with(['user']) ->where('goods_id', $goods_id) ->order('id', 'desc') ->paginate(10, false, ['page' => $page]) ->each(function ($item, $key) { $item->getRelation('user')->visible(['id', 'nickname']); }); $this->success('商品规格', $lists); } }