Files
sam-docs/frontend/api-specs/receiving-create-ux-20260318.md

5.2 KiB

입고등록 UX 개선 요청

작성일: 2026-03-18 상태: API 수정 완료, React 구현 요청


1. 개요

입고관리 입고입력(등록) 페이지에서 4가지 UX 이슈를 개선한다. API 측 rendered_html 크기 제한(500KB)은 반영 완료. React 측 수정 사항을 정리한다.


2. 수정 항목

2.1 작성자 기본값 — 세션 사용자 이름

현상: 입고 등록 시 작성자 필드가 빈 값(-) 기대: 현재 로그인한 사용자의 이름이 기본값으로 표시

수정 위치: ReceivingDetail.tsxINITIAL_FORM_DATA

// 변경 전 (정적 초기값)
const INITIAL_FORM_DATA = { createdBy: '' };

// 변경 후 (동적 함수로 전환)
function createInitialFormData() {
  return {
    createdBy: getLoggedInUserName(), // localStorage 'user'.name
    receivingDate: getTodayString(),   // YYYY-MM-DD
  };
}

// useState 호출도 변경
const [formData, setFormData] = useState(createInitialFormData);

getLoggedInUserName() 함수는 이미 같은 파일에 정의되어 있음 (104~121행)


2.2 입고일 기본값 — 오늘 날짜

현상: 입고일 필드가 빈 값 → 매번 날짜 수동 선택 필요 기대: 오늘 날짜가 기본값으로 설정

수정: 위 2.1과 동일한 createInitialFormData() 함수에서 getTodayString() 사용

getTodayString은 이미 import되어 있음 (@/lib/utils/date)


2.3 등록 완료 후 상세 페이지로 바로 이동

현상: 등록 성공 → 목록으로 이동 → 사용자가 다시 상세 진입 (불필요한 단계) 기대: 등록 성공 → 생성된 입고의 상세 페이지로 바로 이동

수정 위치: ReceivingDetail.tsxhandleSave() 함수

// 변경 전
router.push('/ko/material/receiving-management');

// 변경 후
const newId = result.data?.id;
if (newId) {
  router.push(`/ko/material/receiving-management/${newId}?mode=view`);
} else {
  router.push('/ko/material/receiving-management');
}

API POST /api/v1/receivings 응답에 id 필드가 이미 포함되어 있으므로 API 수정 불필요


2.4 수입검사 저장 시 413 에러 방지

현상: 수입검사 완료 저장 시 rendered_html(성적서 HTML 스냅샷)이 서버 요청 본문 크기 제한 초과 → 413 에러 원인: captureRenderedHtml()이 인라인 스타일/이미지 포함 HTML 생성 → 크기 급증

API 수정 (완료): UpsertRequest.phprendered_html max:512000 검증 추가

React 수정 요청: ImportInspectionInputModal.tsxhandleSave() 함수

// 저장 API 호출 직전에 크기 체크 추가
const MAX_HTML_SIZE = 500 * 1024; // 500KB
const safeHtml = renderedHtml && renderedHtml.length <= MAX_HTML_SIZE
  ? renderedHtml : undefined;

rendered_html은 MNG 출력용 스냅샷으로, 없어도 검사 데이터 저장에 영향 없음


2.5 Dialog 접근성 경고 수정

현상: 콘솔에 Warning: Missing Description or aria-describedby for DialogContent 반복 (5건) 원인: Radix UI Dialog에서 DialogDescription 미포함

수정 대상 파일 (4개):

파일 추가 내용
ImportInspectionInputModal.tsx DialogHeader 안에 <VisuallyHidden><DialogDescription>수입검사 항목 입력</DialogDescription></VisuallyHidden>
ReceivingProcessDialog.tsx <VisuallyHidden><DialogDescription>입고 처리 정보 입력</DialogDescription></VisuallyHidden>
InventoryAdjustmentDialog.tsx <VisuallyHidden><DialogDescription>재고 수량 조정</DialogDescription></VisuallyHidden>
SuccessDialog.tsx <VisuallyHidden><DialogTitle>처리 완료</DialogTitle> + <DialogDescription>처리 결과 안내</DialogDescription></VisuallyHidden>

import 추가:

import { Dialog, DialogContent, DialogHeader, DialogTitle,
  VisuallyHidden, DialogDescription } from '@/components/ui/dialog';

3. 영향받는 파일 목록

react/src/components/material/ReceivingManagement/
├── ReceivingDetail.tsx              ← 2.1, 2.2, 2.3
├── ImportInspectionInputModal.tsx   ← 2.4, 2.5
├── ReceivingProcessDialog.tsx       ← 2.5
├── InventoryAdjustmentDialog.tsx    ← 2.5
└── SuccessDialog.tsx                ← 2.5

4. API 변경사항 (반영 완료)

파일 변경
api/app/Http/Requests/Document/UpsertRequest.php rendered_html 검증 max:512000 추가

5. 테스트 체크리스트

  • 입고 등록 진입 시 작성자 = 로그인 사용자 이름
  • 입고 등록 진입 시 입고일 = 오늘 날짜
  • 등록 완료 후 상세 페이지로 이동 (목록 경유하지 않음)
  • 수입검사 저장 시 413 에러 미발생
  • 수입검사 저장 후 데이터 정상 반영
  • Dialog 경고 콘솔에서 사라짐 확인

관련 문서

문서 설명
stock-receiving-changes-20260317.md 입고관리 API 스펙
receiving-item-search-fix-20260318.md 입고등록 품목검색 수정

최종 업데이트: 2026-03-18