81 lines
2.4 KiB
PHP
81 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Mini;
|
|
|
|
use App\Exceptions\RepositoryException;
|
|
use App\Models\ProductCategoryModel;
|
|
use App\Models\ProductModel;
|
|
use App\Models\ProductPriceModel;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
use Modules\AnnoRoute\Attribute\GetRoute;
|
|
use Modules\AnnoRoute\Attribute\RequestAttribute;
|
|
|
|
/**
|
|
* 小程序商品
|
|
*/
|
|
#[RequestAttribute('/mini', 'mini', authGuard: 'users')]
|
|
class ProductController extends BaseMiniController
|
|
{
|
|
/** 分类树(全部启用分类,含暂无商品的分类) */
|
|
#[GetRoute('/product/categories', authorize: true)]
|
|
public function categories(): JsonResponse
|
|
{
|
|
return $this->success(ProductCategoryModel::getTreeData(['*'], true));
|
|
}
|
|
|
|
/**
|
|
* 商品列表
|
|
*/
|
|
#[GetRoute('/product/list', authorize: false)]
|
|
public function products(Request $request): JsonResponse
|
|
{
|
|
$query = ProductModel::query()
|
|
->where('status', ProductModel::STATUS_ON)
|
|
->with('category:id,name');
|
|
|
|
$categoryId = (int) $request->input('category_id', 0);
|
|
if ($categoryId > 0) {
|
|
$query->where('category_id', $categoryId);
|
|
}
|
|
$keyword = trim((string) $request->input('keyword', ''));
|
|
if ($keyword !== '') {
|
|
$query->where(static function ($q) use ($keyword) {
|
|
$q->where('name', 'like', '%' . $keyword . '%');
|
|
});
|
|
}
|
|
|
|
$pageSize = (int) $request->input('pageSize', 10);
|
|
$data = $query->orderBy('sort')
|
|
->orderBy('id')
|
|
->paginate($pageSize)
|
|
->toArray();
|
|
|
|
foreach ($data['data'] as &$row) {
|
|
$row['price'] = null;
|
|
}
|
|
|
|
// 用户
|
|
$user = $this->optionalUser($request);
|
|
if (!$user) return $this->success($data);
|
|
// 门店
|
|
$store = $this->boundStore($user);
|
|
if(!$store) return $this->success($data);
|
|
|
|
if ($store->level_id > 0) {
|
|
foreach ($data['data'] as &$row) {
|
|
$model = ProductPriceModel::where('product_id', $row['id'])->where('level_id', $store->level_id)->first();
|
|
$price = ProductPriceModel::calcActualPrice(
|
|
$model->price_type,
|
|
$model->price,
|
|
$model->percent,
|
|
$row->cost_price,
|
|
);
|
|
$row['price'] = $price;
|
|
}
|
|
}
|
|
|
|
return $this->success($data);
|
|
}
|
|
}
|