feat: 다중 도메인 UI 개선 및 컴포넌트 리팩토링

- 게시판, HR, 설정, 차량관리, 건설, 견적 등 전반적 UI 개선
- FormField, TabChip, Select 등 공통 컴포넌트 개선
- 가격배분 edit 페이지 제거 및 상세 페이지 통합
- 체크리스트, 근태, 급여, 권한 관리 등 폼 개선

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
유병철
2026-02-25 22:30:06 +09:00
parent 1675bcbedf
commit 8f9507a665
86 changed files with 856 additions and 685 deletions

View File

@@ -96,11 +96,11 @@ export function ProcessDetail({ process, onProcessUpdate }: ProcessDetailProps)
};
const handleAddStep = () => {
router.push(`/ko/master-data/process-management/${process.id}/steps/new`);
router.push(`/ko/master-data/process-management/${process.id}/steps/new?mode=new`);
};
const handleStepClick = (stepId: string) => {
router.push(`/ko/master-data/process-management/${process.id}/steps/${stepId}`);
router.push(`/ko/master-data/process-management/${process.id}/steps/${stepId}?mode=view`);
};
// ===== 드래그&드롭 (HTML5 네이티브) =====

View File

@@ -246,14 +246,14 @@ export function ProcessForm({ mode, initialData }: ProcessFormProps) {
// 단계 상세 이동
const handleStepClick = (stepId: string) => {
if (isEdit && initialData?.id) {
router.push(`/ko/master-data/process-management/${initialData.id}/steps/${stepId}`);
router.push(`/ko/master-data/process-management/${initialData.id}/steps/${stepId}?mode=view`);
}
};
// 단계 등록 이동
const handleAddStep = () => {
if (isEdit && initialData?.id) {
router.push(`/ko/master-data/process-management/${initialData.id}/steps/new`);
router.push(`/ko/master-data/process-management/${initialData.id}/steps/new?mode=new`);
} else {
toast.info('공정을 먼저 등록한 후 단계를 추가할 수 있습니다.');
}

View File

@@ -53,7 +53,7 @@ export function StepDetail({ step, processId }: StepDetailProps) {
};
const handleBack = () => {
router.push(`/ko/master-data/process-management/${processId}`);
router.push(`/ko/master-data/process-management/${processId}?mode=view`);
};
const handleDelete = async () => {
@@ -62,7 +62,7 @@ export function StepDetail({ step, processId }: StepDetailProps) {
const result = await deleteProcessStep(processId, step.id);
if (result.success) {
toast.success('단계가 삭제되었습니다.');
router.push(`/ko/master-data/process-management/${processId}`);
router.push(`/ko/master-data/process-management/${processId}?mode=view`);
} else {
toast.error(result.error || '삭제에 실패했습니다.');
}

View File

@@ -145,7 +145,7 @@ export function StepForm({ mode, processId, initialData }: StepFormProps) {
const result = await updateProcessStep(processId, initialData.id, stepData);
if (result.success) {
toast.success('단계가 수정되었습니다.');
router.push(`/ko/master-data/process-management/${processId}/steps/${initialData.id}`);
router.push(`/ko/master-data/process-management/${processId}/steps/${initialData.id}?mode=view`);
return { success: true };
} else {
toast.error(result.error || '수정에 실패했습니다.');
@@ -155,7 +155,7 @@ export function StepForm({ mode, processId, initialData }: StepFormProps) {
const result = await createProcessStep(processId, stepData);
if (result.success) {
toast.success('단계가 등록되었습니다.');
router.push(`/ko/master-data/process-management/${processId}`);
router.push(`/ko/master-data/process-management/${processId}?mode=view`);
return { success: true };
} else {
toast.error(result.error || '등록에 실패했습니다.');
@@ -171,7 +171,7 @@ export function StepForm({ mode, processId, initialData }: StepFormProps) {
};
const handleCancel = () => {
router.push(`/ko/master-data/process-management/${processId}`);
router.push(`/ko/master-data/process-management/${processId}?mode=view`);
};
const renderFormContent = useCallback(