feat: [approvals] 결재선 템플릿 CRUD 기능 추가

- POST/PUT/DELETE /api/admin/approvals/lines 라우트 추가
- ApprovalApiController storeLine/updateLine/destroyLine 메서드
- ApprovalService createLine/updateLine/deleteLine + enrichLineSteps 헬퍼
- 기안함 화면에 결재선 관리 버튼 + 모달 UI (목록/편집 2-state)
This commit is contained in:
김보곤
2026-02-28 09:07:14 +09:00
parent 49951d70c0
commit 4856eedb09
4 changed files with 625 additions and 3 deletions

View File

@@ -367,6 +367,63 @@ public function lines(): JsonResponse
return response()->json(['success' => true, 'data' => $lines]);
}
/**
* 결재선 템플릿 생성
*/
public function storeLine(Request $request): JsonResponse
{
$request->validate([
'name' => 'required|string|max:100',
'steps' => 'required|array|min:1',
'steps.*.user_id' => 'required|exists:users,id',
'steps.*.step_type' => 'required|in:approval,agreement,reference',
'is_default' => 'boolean',
]);
$line = $this->service->createLine($request->all());
return response()->json([
'success' => true,
'message' => '결재선이 저장되었습니다.',
'data' => $line,
], 201);
}
/**
* 결재선 템플릿 수정
*/
public function updateLine(Request $request, int $id): JsonResponse
{
$request->validate([
'name' => 'required|string|max:100',
'steps' => 'required|array|min:1',
'steps.*.user_id' => 'required|exists:users,id',
'steps.*.step_type' => 'required|in:approval,agreement,reference',
'is_default' => 'boolean',
]);
$line = $this->service->updateLine($id, $request->all());
return response()->json([
'success' => true,
'message' => '결재선이 수정되었습니다.',
'data' => $line,
]);
}
/**
* 결재선 템플릿 삭제
*/
public function destroyLine(int $id): JsonResponse
{
$this->service->deleteLine($id);
return response()->json([
'success' => true,
'message' => '결재선이 삭제되었습니다.',
]);
}
/**
* 양식 목록
*/