feat: 단가관리 페이지 마이그레이션 및 HR 관리 기능 추가

## 단가관리 (Pricing Management)
- 단가 목록 페이지 (IntegratedListTemplateV2 공통 템플릿 적용)
- 단가 등록/수정 폼 (원가/마진 자동 계산)
- 이력 조회, 수정 이력, 최종 확정 다이얼로그
- 판매관리 > 단가관리 네비게이션 메뉴 추가

## HR 관리 (Human Resources)
- 사원관리 (목록, 등록, 수정, 상세, CSV 업로드)
- 부서관리 (트리 구조)
- 근태관리 (기본 구조)

## 품목관리 개선
- Radix UI Select controlled mode 버그 수정 (key prop 적용)
- DynamicItemForm 파일 업로드 지원
- 수정 페이지 데이터 로딩 개선

## 문서화
- 단가관리 마이그레이션 체크리스트
- HR 관리 구현 체크리스트
- Radix UI Select 버그 수정 가이드

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
byeongcheolryu
2025-12-06 11:36:38 +09:00
parent 751e65f59b
commit 48dbba0e5f
59 changed files with 9888 additions and 101 deletions

View File

@@ -277,13 +277,12 @@ export function IntegratedListTemplateV2<T = any>({
.
</div>
) : (
// 백엔드가 created_at ASC로 정렬해서 보내줌 (오래된 순)
(allData || data).map((item, index) => {
const itemId = getItemId(item);
const isSelected = selectedItems.has(itemId);
// 순 번호 계산: totalCount가 있으면 역순, 없으면 순차
const globalIndex = totalCount
? totalCount - index
: index + 1;
// 순 번호: 1번부터 시작
const globalIndex = index + 1;
return (
<div key={itemId}>
@@ -343,12 +342,11 @@ export function IntegratedListTemplateV2<T = any>({
</TableCell>
</TableRow>
) : (
// 백엔드가 created_at ASC로 정렬해서 보내줌 (오래된 순)
data.map((item, index) => {
const itemId = getItemId(item);
// 순 번호 계산: totalCount가 있으면 역순, 없으면 순차
const globalIndex = totalCount
? totalCount - (startIndex + index)
: startIndex + index;
// 순 번호: startIndex 기준으로 1부터 시작
const globalIndex = startIndex + index + 1;
return (
<Fragment key={itemId}>
{renderTableRow(item, index, globalIndex)}