feat(approvals): Approval Flow v2 프런트엔드 전면 개편

- 환경/라우터 모듈에 approval_flow_v2 토글을 추가하고 FeatureFlags 초기화를 연결 (.env*, lib/core/**)
- ApiClient 빌더·ApiRoutes 확장과 ApprovalRepositoryRemote 리팩터링으로 include·액션 시그니처를 정합화
- ApprovalFlow·ApprovalDraft 엔티티/레포/유즈케이스를 도입해 서버 초안과 단계 액션(승인·회수·재상신)을 지원
- Approval 컨트롤러·히스토리·템플릿 페이지와 공유 위젯을 재작성해 감사 로그·회수 UX·템플릿 CRUD를 반영
- Inbound/Outbound/Rental 컨트롤러·페이지에 결재 섹션을 삽입하고 대시보드 pending 카드 요약을 갱신
- SuperportDialog·FormField 등 공통 위젯을 보강하고 승인 위젯 가이드를 추가해 UI 가이드를 정리
- 결재/재고 테스트 픽스처와 단위·위젯·통합 테스트를 확장하고 flutter_test_config로 스테이징 호스트를 허용
- Approval Flow 레포트/플랜 문서를 업데이트하고 ApprovalFlow_System_Integration_and_ChangePlan.md를 추가
- 실행: flutter analyze, flutter test
This commit is contained in:
JiWoong Sul
2025-10-31 01:05:39 +09:00
parent 259b056072
commit d76f765814
133 changed files with 13878 additions and 947 deletions

View File

@@ -19,16 +19,22 @@ class SuperportFormField extends StatelessWidget {
/// 폼 필드 라벨 텍스트.
final String label;
/// 입력 영역으로 렌더링할 위젯.
final Widget child;
/// 필수 여부. true면 라벨 옆에 `*` 표시를 추가한다.
final bool required;
/// 보조 설명 문구. 에러가 없을 때만 출력된다.
final String? caption;
/// 에러 메시지. 존재하면 캡션 대신 우선적으로 노출된다.
final String? errorText;
/// 라벨 우측에 배치할 추가 위젯(예: 도움말 버튼).
final Widget? trailing;
/// 라벨과 본문 사이 간격.
final double spacing;
@@ -88,22 +94,31 @@ class SuperportTextInput extends StatelessWidget {
});
final TextEditingController? controller;
/// 입력 없을 때 보여줄 플레이스홀더 위젯.
final Widget? placeholder;
/// 입력 변경 콜백.
final ValueChanged<String>? onChanged;
/// 제출(Enter) 시 호출되는 콜백.
final ValueChanged<String>? onSubmitted;
/// 키보드 타입. 숫자/이메일 등으로 지정 가능.
final TextInputType? keyboardType;
/// 입력 활성 여부.
final bool enabled;
/// 읽기 전용 여부. true면 수정 불가.
final bool readOnly;
/// 최대 줄 수. 1보다 크면 멀티라인 입력을 지원한다.
final int maxLines;
/// 앞에 붙일 위젯 (아이콘 등).
final Widget? leading;
/// 뒤에 붙일 위젯 (버튼 등).
final Widget? trailing;
@@ -136,10 +151,13 @@ class SuperportSwitchField extends StatelessWidget {
/// 스위치 현재 상태.
final bool value;
/// 상태 변경 시 호출되는 콜백.
final ValueChanged<bool> onChanged;
/// 스위치 상단에 표시할 제목.
final String? label;
/// 보조 설명 문구.
final String? caption;