feat: 메뉴 드래그 앤 드롭 정렬 기능 추가
- MenuService.reorderMenus() 메서드 추가 - MenuController.reorder() API 엔드포인트 추가 - POST /api/admin/menus/reorder 라우트 추가 - SortableJS 기반 드래그 앤 드롭 UI 구현 - 같은 부모 메뉴 내에서만 순서 변경 가능 (계층 구조 유지)
This commit is contained in:
@@ -293,4 +293,30 @@ public function toggleHidden(Request $request, int $id): JsonResponse
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 메뉴 순서 변경 (드래그앤드롭)
|
||||
*/
|
||||
public function reorder(Request $request): JsonResponse
|
||||
{
|
||||
$validated = $request->validate([
|
||||
'items' => 'required|array',
|
||||
'items.*.id' => 'required|integer',
|
||||
'items.*.sort_order' => 'required|integer',
|
||||
]);
|
||||
|
||||
try {
|
||||
$this->menuService->reorderMenus($validated['items']);
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'message' => '메뉴 순서가 변경되었습니다.',
|
||||
]);
|
||||
} catch (\Exception $e) {
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => '메뉴 순서 변경에 실패했습니다: '.$e->getMessage(),
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -321,4 +321,23 @@ public function toggleHidden(int $id): bool
|
||||
|
||||
return $menu->save();
|
||||
}
|
||||
|
||||
/**
|
||||
* 메뉴 순서 변경 (드래그앤드롭)
|
||||
* 같은 parent_id 내에서만 순서 변경
|
||||
*/
|
||||
public function reorderMenus(array $items): bool
|
||||
{
|
||||
return \DB::transaction(function () use ($items) {
|
||||
foreach ($items as $item) {
|
||||
Menu::where('id', $item['id'])
|
||||
->update([
|
||||
'sort_order' => $item['sort_order'],
|
||||
'updated_by' => auth()->id(),
|
||||
]);
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user