kphcdr 1 ano atrás
pai
commit
30268592e0

+ 7 - 0
app/Modules/Mini/Controllers/PageController.php

@@ -61,6 +61,8 @@ class PageController extends BaseController
         $params = $this->valid([
             "id" => "required",
             "page_size" => "int",
+            "keyword" => "",
+            "attrs" => "",
         ]);
 
         return $this->ok($this->service->categoryGoods($params));
@@ -75,6 +77,11 @@ class PageController extends BaseController
 
     public function search()
     {
+        $params = $this->valid([
+            "keyword" => "",
+            "attrs" => "",
+        ]);
+        return $this->ok($this->service->search($params));
         return $this->ok([
             "total" => 1,
             "page_total" => 1,

+ 40 - 1
app/Modules/Mini/Services/PageService.php

@@ -101,8 +101,34 @@ class PageService extends BaseService
         $cidArr = $this->childCategoryIdArr($id);
 
         $gidArr = GoodsCategoryMap::where("category_id", $cidArr)->get(['goods_id'])->pluck("goods_id")->unique()->toArray();
+        if ($attrs = Arr::get($params, "attr", [])) {
 
-        $p = Goods::where("status", Goods::STATUS_OK)->orderByDesc("weight")->whereIn("id", $gidArr)->paginate($pageSize);
+        }
+        $p = Goods::where("status", Goods::STATUS_OK)->when($params['keyword'], function (Builder $query) use ($params) {
+            $query->where("name", "like", "%" . $params['keyword'] . "%");
+        })->orderByDesc("weight")->whereIn("id", $gidArr)->paginate($pageSize);
+
+        return [
+            "total" => $p->total(),
+            "page_total" => $p->lastPage(),
+            "list" => array_map(function (Goods $model) {
+                return [
+                    "id" => $model->id,
+                    "name" => $model->name,
+                    "thumb" => $model->thumb,
+                    "weight" => $model->weight,
+                ];
+            }, $p->items()),
+        ];
+
+    }
+
+    public function search($params)
+    {
+        $pageSize = Arr::get($params, "page_size", 10);
+        $p = Goods::where("status", Goods::STATUS_OK)->when($params['keyword'], function (Builder $query) use ($params) {
+            $query->where("name", "like", "%" . $params['keyword'] . "%");
+        })->orderByDesc("weight")->paginate($pageSize);
 
         return [
             "total" => $p->total(),
@@ -115,7 +141,20 @@ class PageService extends BaseService
                     "weight" => $model->weight,
                 ];
             }, $p->items()),
+            "category" => $this->searchCategory($params['keyword']),
         ];
+    }
+
+    private function searchCategory($keyword)
+    {
+        $c = Category::where("name", "like", "%$keyword%")->get();
 
+        return $c->map(function (Category $model) {
+            return [
+                "id" => $model->id,
+                "thumb" => $model->thumb,
+                "name" => $model->name,
+            ];
+        });
     }
 }