결재 템플릿 단계 적용 구현
- ApprovalTemplate 엔티티·DTO·원격 리포지토리 추가 - ApprovalController에 템플릿 로딩/적용 상태와 assignSteps 호출 연동 - ApprovalPage 단계 탭에 템플릿 선택 UI 및 적용 확인 다이얼로그 구현 - 템플릿 적용 단위 테스트와 IMPLEMENTATION_TASKS 현황 갱신
This commit is contained in:
@@ -1,30 +1,71 @@
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:shadcn_ui/shadcn_ui.dart';
|
||||
|
||||
import '../../../../widgets/spec_page.dart';
|
||||
import '../../../../core/constants/app_sections.dart';
|
||||
import '../../../../widgets/app_layout.dart';
|
||||
import '../../../../widgets/components/coming_soon_card.dart';
|
||||
import '../../../../widgets/components/filter_bar.dart';
|
||||
|
||||
class ReportingPage extends StatelessWidget {
|
||||
const ReportingPage({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return const SpecPage(
|
||||
return AppLayout(
|
||||
title: '보고서',
|
||||
summary: '기간, 유형, 창고, 상태 조건으로 보고서를 조회하고 내보냅니다.',
|
||||
sections: [
|
||||
SpecSection(
|
||||
title: '조건 입력',
|
||||
items: [
|
||||
'기간 [Date Range]',
|
||||
'유형 [Dropdown]',
|
||||
'창고 [Dropdown]',
|
||||
'상태 [Dropdown]',
|
||||
],
|
||||
subtitle: '기간, 유형, 창고 조건을 선택해 통합 보고서를 내려받을 수 있도록 준비 중입니다.',
|
||||
breadcrumbs: const [
|
||||
AppBreadcrumbItem(label: '대시보드', path: dashboardRoutePath),
|
||||
AppBreadcrumbItem(label: '보고', path: '/reports'),
|
||||
AppBreadcrumbItem(label: '보고서'),
|
||||
],
|
||||
actions: [
|
||||
ShadButton(
|
||||
onPressed: null,
|
||||
leading: const Icon(LucideIcons.fileDown, size: 16),
|
||||
child: const Text('XLSX 다운로드'),
|
||||
),
|
||||
SpecSection(
|
||||
title: '출력 옵션',
|
||||
items: ['XLSX 다운로드 [Button]', 'PDF 다운로드 [Button]'],
|
||||
ShadButton.outline(
|
||||
onPressed: null,
|
||||
leading: const Icon(LucideIcons.fileText, size: 16),
|
||||
child: const Text('PDF 다운로드'),
|
||||
),
|
||||
],
|
||||
toolbar: FilterBar(
|
||||
children: [
|
||||
ShadButton.outline(
|
||||
onPressed: null,
|
||||
leading: const Icon(LucideIcons.calendar, size: 16),
|
||||
child: const Text('기간 선택 (준비중)'),
|
||||
),
|
||||
ShadButton.outline(
|
||||
onPressed: null,
|
||||
leading: const Icon(LucideIcons.layers, size: 16),
|
||||
child: const Text('유형 선택 (준비중)'),
|
||||
),
|
||||
ShadButton.outline(
|
||||
onPressed: null,
|
||||
leading: const Icon(LucideIcons.warehouse, size: 16),
|
||||
child: const Text('창고 선택 (준비중)'),
|
||||
),
|
||||
ShadButton.outline(
|
||||
onPressed: null,
|
||||
leading: const Icon(LucideIcons.badgeCheck, size: 16),
|
||||
child: const Text('상태 선택 (준비중)'),
|
||||
),
|
||||
const ShadBadge(
|
||||
child: Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 12, vertical: 6),
|
||||
child: Text('API 스펙 정리 후 필터가 활성화됩니다.'),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
child: const ComingSoonCard(
|
||||
title: '보고서 화면 구현 준비 중',
|
||||
description: '입·출고/결재 데이터를 조건별로 조회하고 다운로드할 수 있는 UI를 설계 중입니다.',
|
||||
items: ['조건별 보고서 템플릿 매핑', '다운로드 진행 상태 표시 및 실패 처리', '즐겨찾는 조건 저장/불러오기'],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user