'=', ]; /** 推荐列表(默认按排序升序;keyword 按商品名模糊搜索) */ #[GetRoute(authorize: 'query')] public function query(Request $request): JsonResponse { $params = $request->all(); $pageSize = $params['pageSize'] ?? 10; $query = $this->buildSearch($params, HomeSpecialModel::query()->with('product')); $keyword = trim((string) ($params['keyword'] ?? '')); if ($keyword !== '') { $query->whereHas('product', static function ($q) use ($keyword) { $q->where('name', 'like', '%' . $keyword . '%'); }); } $data = $query->orderBy('sort') ->orderBy('id') ->paginate($pageSize) ->toArray(); return $this->success($data); } /** 批量添加推荐商品(已在推荐中的自动跳过) */ #[PostRoute('/batch', 'create')] public function batchAdd(SpecialBatchAddRequest $request): JsonResponse { $productIds = $request->validated()['product_ids']; $exists = HomeSpecialModel::whereIn('product_id', $productIds)->pluck('product_id')->all(); $newIds = array_values(array_diff($productIds, $exists)); foreach ($newIds as $productId) { HomeSpecialModel::create([ 'product_id' => $productId, 'sort' => 0, 'status' => HomeSpecialModel::STATUS_NORMAL, ]); } return $this->success([ 'added' => count($newIds), 'skipped' => count($productIds) - count($newIds), ]); } /** 编辑推荐(仅排序与状态) */ #[PutRoute(route: '/{id}', authorize: 'update', where: ['id' => '[0-9]+'])] public function update(int $id, SpecialFormRequest $request): JsonResponse { $model = HomeSpecialModel::find($id); if (empty($model)) { throw new RepositoryException('推荐不存在'); } $model->update($request->validated()); return $this->success(); } /** 删除推荐 */ #[DeleteRoute(route: '/{id}', authorize: 'delete', where: ['id' => '[0-9]+'])] public function delete(int $id): JsonResponse { $model = HomeSpecialModel::find($id); if (empty($model)) { throw new RepositoryException('推荐不存在'); } $model->delete(); return $this->success(); } /** 批量删除推荐 */ #[DeleteRoute('/batch', 'delete')] public function batchDelete(Request $request): JsonResponse { $data = $request->validate([ 'ids' => 'required|array|min:1', 'ids.*' => 'integer|distinct', ], [ 'ids.required' => '请选择要删除的推荐', 'ids.min' => '请选择要删除的推荐', 'ids.*.integer' => '推荐 ID 格式错误', 'ids.*.distinct' => '存在重复的推荐', ]); HomeSpecialModel::whereIn('id', $data['ids'])->delete(); return $this->success(); } }