@@ -332,7 +371,7 @@ export default function AttendancePage() {
{!isInRange && distance !== null && (
-
출퇴근 가능 범위({SITE_LOCATION.radius}m) 밖에 있습니다.
+
출퇴근 가능 범위({siteLocation.radius}m) 밖에 있습니다.
)}
{attendanceStatus === 'checked-in' && (
diff --git a/src/app/[locale]/(protected)/hr/card-management/new/page.tsx b/src/app/[locale]/(protected)/hr/card-management/new/page.tsx
deleted file mode 100644
index 0a1cbb4b..00000000
--- a/src/app/[locale]/(protected)/hr/card-management/new/page.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-'use client';
-
-/**
- * 카드 등록 페이지 - IntegratedDetailTemplate 적용
- */
-
-import { IntegratedDetailTemplate } from '@/components/templates/IntegratedDetailTemplate';
-import { cardConfig } from '@/components/hr/CardManagement/cardConfig';
-import { createCard } from '@/components/hr/CardManagement/actions';
-import type { CardFormData } from '@/components/hr/CardManagement/types';
-
-export default function NewCardPage() {
- const handleSubmit = async (data: Record
) => {
- const result = await createCard(data as CardFormData);
- return { success: result.success, error: result.error };
- };
-
- return (
-
- );
-}
diff --git a/src/app/[locale]/(protected)/hr/card-management/page.tsx b/src/app/[locale]/(protected)/hr/card-management/page.tsx
index 288bf67d..ccc5c92c 100644
--- a/src/app/[locale]/(protected)/hr/card-management/page.tsx
+++ b/src/app/[locale]/(protected)/hr/card-management/page.tsx
@@ -1,7 +1,31 @@
'use client';
+import { useSearchParams } from 'next/navigation';
import { CardManagement } from '@/components/hr/CardManagement';
+import { IntegratedDetailTemplate } from '@/components/templates/IntegratedDetailTemplate';
+import { cardConfig } from '@/components/hr/CardManagement/cardConfig';
+import { createCard } from '@/components/hr/CardManagement/actions';
+import type { CardFormData } from '@/components/hr/CardManagement/types';
export default function CardManagementPage() {
+ const searchParams = useSearchParams();
+ const mode = searchParams.get('mode');
+
+ // mode=new일 때 등록 화면 표시
+ if (mode === 'new') {
+ const handleSubmit = async (data: Record) => {
+ const result = await createCard(data as CardFormData);
+ return { success: result.success, error: result.error };
+ };
+
+ return (
+
+ );
+ }
+
return ;
}
diff --git a/src/components/accounting/SalesManagement/SalesDetail.tsx b/src/components/accounting/SalesManagement/SalesDetail.tsx
index 35de1a54..9d127bec 100644
--- a/src/components/accounting/SalesManagement/SalesDetail.tsx
+++ b/src/components/accounting/SalesManagement/SalesDetail.tsx
@@ -557,7 +557,7 @@ export function SalesDetail({ mode, salesId }: SalesDetailProps) {
// ===== 동적 config =====
const dynamicConfig = {
...salesConfig,
- title: isNewMode ? '매출 상세_직접 등록' : '매출 상세',
+ title: isNewMode ? '매출' : '매출 상세',
actions: {
...salesConfig.actions,
submitLabel: isNewMode ? '등록' : '저장',
diff --git a/src/components/attendance/GoogleMap.tsx b/src/components/attendance/GoogleMap.tsx
index 64fc8149..d9670e91 100644
--- a/src/components/attendance/GoogleMap.tsx
+++ b/src/components/attendance/GoogleMap.tsx
@@ -131,10 +131,14 @@ export default function GoogleMap({ siteLocation, onDistanceChange }: GoogleMapP
useEffect(() => {
if (!isLoaded || !mapRef.current || !window.google) return;
- console.log('[GoogleMap] 지도 초기화 시작');
+ // 좌표 유효성 검사 - 우림블루나인비즈니스센터 기본값 (강서구 염창동)
+ const lat = typeof siteLocation.lat === 'number' && !isNaN(siteLocation.lat) ? siteLocation.lat : 37.5458;
+ const lng = typeof siteLocation.lng === 'number' && !isNaN(siteLocation.lng) ? siteLocation.lng : 126.8718;
+
+ console.log('[GoogleMap] 지도 초기화 시작, 좌표:', lat, lng);
const map = new window.google.maps.Map(mapRef.current, {
- center: { lat: siteLocation.lat, lng: siteLocation.lng },
+ center: { lat, lng },
zoom: 17,
disableDefaultUI: true,
zoomControl: true,
@@ -145,11 +149,14 @@ export default function GoogleMap({ siteLocation, onDistanceChange }: GoogleMapP
mapInstanceRef.current = map;
- // 100m 반경 원 그리기 (파란색)
+ // radius 유효성 검사
+ const radius = typeof siteLocation.radius === 'number' && siteLocation.radius > 0 ? siteLocation.radius : 100;
+
+ // 반경 원 그리기 (파란색)
const circle = new window.google.maps.Circle({
map: map,
- center: { lat: siteLocation.lat, lng: siteLocation.lng },
- radius: siteLocation.radius,
+ center: { lat, lng },
+ radius: radius,
strokeColor: '#3B82F6',
strokeOpacity: 0.8,
strokeWeight: 2,
@@ -162,7 +169,7 @@ export default function GoogleMap({ siteLocation, onDistanceChange }: GoogleMapP
// 현장 중심 마커 (파란색)
new window.google.maps.Marker({
map: map,
- position: { lat: siteLocation.lat, lng: siteLocation.lng },
+ position: { lat, lng },
icon: {
path: window.google.maps.SymbolPath.CIRCLE,
scale: 8,