移除分类图片

This commit is contained in:
liu
2026-08-14 16:31:18 +08:00
parent f0927e57e9
commit 969eabcd11
11 changed files with 288 additions and 130 deletions
@@ -7,15 +7,12 @@ use App\Http\Requests\Product\ProductCategoryFormRequest;
use App\Models\ProductCategoryModel;
use App\Models\ProductModel;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Modules\AnnoRoute\Attribute\DeleteRoute;
use Modules\AnnoRoute\Attribute\GetRoute;
use Modules\AnnoRoute\Attribute\PostRoute;
use Modules\AnnoRoute\Attribute\PutRoute;
use Modules\AnnoRoute\Attribute\RequestAttribute;
use Modules\Common\Http\Controllers\BaseController;
use Modules\SystemTool\Services\SysFileService;
/**
* 商品分类管理(多级分类:蔬菜/水果/其他)
@@ -37,34 +34,17 @@ class ProductCategoryController extends BaseController
return $this->success(ProductCategoryModel::getTreeData(['id', 'name', 'parent_id'], true));
}
/** 上传商品分类图片文件 */
#[PostRoute('/upload', 'create')]
public function uploadImage(Request $request, SysFileService $service): JsonResponse
{
$data = $request->validate(['file' => 'required|file']);
$result = $service->upload(
$data['file'],
9,
20,
Auth::id()
);
return $this->success($result);
}
/** 创建分类 */
#[PostRoute(authorize: 'create')]
public function create(ProductCategoryFormRequest $request): JsonResponse
{
$validated = $request->validated();
$parentId = (int) $validated['parent_id'];
if ($parentId > 0 && ! ProductCategoryModel::whereKey($parentId)->exists()) {
throw new RepositoryException('父级分类不存在');
}
$this->assertParentIsTopLevel((int) $validated['parent_id']);
ProductCategoryModel::create($validated);
return $this->success();
}
/** 编辑分类(防自引用成环) */
/** 编辑分类(防自引用成环;分类最多二级 */
#[PutRoute(route: '/{id}', authorize: 'update', where: ['id' => '[0-9]+'])]
public function update(int $id, ProductCategoryFormRequest $request): JsonResponse
{
@@ -73,7 +53,12 @@ class ProductCategoryController extends BaseController
throw new RepositoryException('分类不存在');
}
$validated = $request->validated();
$this->assertNoCycle($id, (int) $validated['parent_id']);
$parentId = (int) $validated['parent_id'];
$this->assertNoCycle($id, $parentId);
$this->assertParentIsTopLevel($parentId);
if ($parentId > 0 && ProductCategoryModel::where('parent_id', $id)->exists()) {
throw new RepositoryException('该分类下存在子分类,不能调整为子分类');
}
$model->update($validated);
return $this->success();
}
@@ -96,6 +81,23 @@ class ProductCategoryController extends BaseController
return $this->success();
}
/**
* 校验父级分类:存在且必须为顶级分类(分类最多二级)
*/
private function assertParentIsTopLevel(int $parentId): void
{
if ($parentId === 0) {
return;
}
$parent = ProductCategoryModel::whereKey($parentId)->first(['id', 'parent_id']);
if ($parent === null) {
throw new RepositoryException('父级分类不存在');
}
if ((int) $parent->parent_id !== 0) {
throw new RepositoryException('最多支持二级分类,不能选择子分类作为上级');
}
}
/**
* 沿父链向上检查,防止 parent_id 指向自身或子孙分类形成环
*/