diff options
Diffstat (limited to 'app')
| -rw-r--r-- | app/[lng]/evcp/(evcp)/vendors/[id]/info/credit/page.tsx | 440 | ||||
| -rw-r--r-- | app/[lng]/evcp/(evcp)/vendors/[id]/info/layout.tsx | 4 |
2 files changed, 444 insertions, 0 deletions
diff --git a/app/[lng]/evcp/(evcp)/vendors/[id]/info/credit/page.tsx b/app/[lng]/evcp/(evcp)/vendors/[id]/info/credit/page.tsx new file mode 100644 index 00000000..e90969b5 --- /dev/null +++ b/app/[lng]/evcp/(evcp)/vendors/[id]/info/credit/page.tsx @@ -0,0 +1,440 @@ +'use client'; + +import { useState, useEffect } from 'react'; +import { useParams } from 'next/navigation'; +import { getCreditInfo } from '@/lib/oracle-db/nonsap/services/creditService'; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from '@/components/ui/table'; + +// 신용평가사 옵션 +const creditServices = [ + { code: 'I', name: '이크레더블' }, + { code: 'K', name: '한국기업데이터' }, + { code: 'N', name: '나이스디앤비' }, + { code: 'E', name: 'NICE신용평가사' } +]; + +interface CreditData { + // 기본 정보 + RESNO: string; + EENTNM: string; + OPEDT: string; + REPR_NM: string; + TYSCALE: string; + RELCMP: string; + ADR: string; + LISTYN: string; + GOODSNM: string; + TELNO: string; + FAXNO: string; + FSTRDRT: string; + + // 매출순위 + MO_1: string; + MO_4: string; + MO_2: string; + MO_5: string; + MO_3: string; + MO_6: string; + + // 매입순위 + MI_1: string; + MI_4: string; + MI_2: string; + MI_5: string; + MI_3: string; + MI_6: string; + + // 지분관계 + GIBUN_RL_1: string; + LSH_STK_RATE1: string; + GIBUN_RL_2: string; + LSH_STK_RATE2: string; + GIBUN_RL_3: string; + LSH_STK_RATE3: string; + + // 기타 정보 + HAPGYE: string; + NOTICE: string; + NOTICE_DT: string; + HPGBNCR_TY: string; + FCLOSDT: string; + LASTGRD: string; + DECISION: string; + FRISKRV: string; + EXPIRE_GB: string; + FWATCHD: string; + SUVDT: string; + ESETDTT: string; + + // 재무년월 + bs_dt0: string; + bs_dt1: string; + bs_dt2: string; + + // 재무현황 + bs59_0: string; // 총자산 + bs59_1: string; + bs59_2: string; + bs91_0: string; // 부채총계 + bs91_1: string; + bs91_2: string; + bs113_0: string; // 자본총계 + bs113_1: string; + bs113_2: string; + pl01_0: string; // 매출액 + pl01_1: string; + pl01_2: string; + pl27_0: string; // 영업이익 + pl27_1: string; + pl27_2: string; + pl71_0: string; // 당기순이익 + pl71_1: string; + pl71_2: string; + + // 재무비율 + TR0053: string; // 부채비율 + TR0052: string; + TR0051: string; + TR0513: string; // 차입금의존도 + TR0512: string; + TR0511: string; + TR0523: string; // 영업이익율 + TR0522: string; + TR0521: string; + TR0103: string; // 매출순이익율 + TR0102: string; + TR0101: string; + TR0223: string; // 매출액증가율 + TR0222: string; + TR0221: string; + TR0013: string; // 유동비율 + TR0012: string; + TR0011: string; +} + +export default function CreditInfoPage() { + const params = useParams(); + const vendorId = params?.id as string; + + const [selectedCreditService, setSelectedCreditService] = useState<string>('I'); + const [creditData, setCreditData] = useState<CreditData | null>(null); + const [loading, setLoading] = useState(false); + const [error, setError] = useState<string | null>(null); + + // 데이터 로딩 함수 + const loadCreditData = async (reno: string, creditGb: string) => { + setLoading(true); + setError(null); + + try { + const result = await getCreditInfo(reno, creditGb); + if (result && result.length > 0) { + setCreditData(result[0]); + } else { + setCreditData(null); + } + } catch (err) { + setError('데이터를 불러오는 중 오류가 발생했습니다.'); + console.error(err); + } finally { + setLoading(false); + } + }; + + // 신용평가사 선택 변경 + const handleCreditServiceChange = (code: string) => { + setSelectedCreditService(code); + if (vendorId) { + loadCreditData(vendorId, code); + } + }; + + // 초기 데이터 로딩 + useEffect(() => { + if (vendorId) { + loadCreditData(vendorId, selectedCreditService); + } + }, [vendorId]); + + return ( + <div className="p-6 bg-background"> + <div className="mb-6"> + <h2 className="text-xl font-bold mb-4">협력업체 신용정보</h2> + + {/* 신용평가사 선택 */} + <div className="mb-4"> + <span className="text-sm text-muted-foreground mr-4">평가업체의 기본 정보를 확인 및 관리하는 화면입니다.</span> + <div className="flex space-x-4 mt-2"> + {creditServices.map((service) => ( + <label key={service.code} className="flex items-center space-x-2 cursor-pointer"> + <input + type="checkbox" + checked={selectedCreditService === service.code} + onChange={() => handleCreditServiceChange(service.code)} + className="h-4 w-4 rounded border-border text-primary focus:ring-primary" + /> + <span className="text-sm text-foreground">{service.name}</span> + </label> + ))} + </div> + </div> + </div> + + {loading && ( + <div className="text-center py-8"> + <div className="inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-primary"></div> + <p className="mt-2 text-muted-foreground">데이터를 불러오는 중...</p> + </div> + )} + + {error && ( + <div className="bg-destructive/10 border border-destructive/20 rounded-md p-4 mb-4"> + <p className="text-destructive">{error}</p> + </div> + )} + + {creditData && ( + <div className="space-y-6"> + {/* 매출순위, 매입순위, 지분관계 */} + <div className="grid grid-cols-3 gap-4"> + {/* 매출순위 */} + <div className="border"> + <div className="bg-muted p-3 text-center font-semibold">매출순위</div> + <Table> + <TableBody> + <TableRow> + <TableCell className="text-center font-medium border-r">1</TableCell> + <TableCell className="border-r">{creditData.MO_1}</TableCell> + <TableCell className="text-right">{creditData.MO_4} %</TableCell> + </TableRow> + <TableRow> + <TableCell className="text-center font-medium border-r">2</TableCell> + <TableCell className="border-r">{creditData.MO_2}</TableCell> + <TableCell className="text-right">{creditData.MO_5} %</TableCell> + </TableRow> + <TableRow> + <TableCell className="text-center font-medium border-r">3</TableCell> + <TableCell className="border-r">{creditData.MO_3}</TableCell> + <TableCell className="text-right">{creditData.MO_6} %</TableCell> + </TableRow> + </TableBody> + </Table> + </div> + + {/* 매입순위 */} + <div className="border"> + <div className="bg-muted p-3 text-center font-semibold">매입순위</div> + <Table> + <TableBody> + <TableRow> + <TableCell className="text-center font-medium border-r">1</TableCell> + <TableCell className="border-r">{creditData.MI_1}</TableCell> + <TableCell className="text-right">{creditData.MI_4} %</TableCell> + </TableRow> + <TableRow> + <TableCell className="text-center font-medium border-r">2</TableCell> + <TableCell className="border-r">{creditData.MI_2}</TableCell> + <TableCell className="text-right">{creditData.MI_5} %</TableCell> + </TableRow> + <TableRow> + <TableCell className="text-center font-medium border-r">3</TableCell> + <TableCell className="border-r">{creditData.MI_3}</TableCell> + <TableCell className="text-right">{creditData.MI_6} %</TableCell> + </TableRow> + </TableBody> + </Table> + </div> + + {/* 지분관계 */} + <div className="border"> + <div className="bg-muted p-3 text-center font-semibold">지분관계</div> + <Table> + <TableBody> + <TableRow> + <TableCell className="text-center font-medium border-r">1</TableCell> + <TableCell className="border-r">{creditData.GIBUN_RL_1}</TableCell> + <TableCell className="text-right">{creditData.LSH_STK_RATE1} %</TableCell> + </TableRow> + <TableRow> + <TableCell className="text-center font-medium border-r">2</TableCell> + <TableCell className="border-r">{creditData.GIBUN_RL_2}</TableCell> + <TableCell className="text-right">{creditData.LSH_STK_RATE2} %</TableCell> + </TableRow> + <TableRow> + <TableCell className="text-center font-medium border-r">3</TableCell> + <TableCell className="border-r">{creditData.GIBUN_RL_3}</TableCell> + <TableCell className="text-right">{creditData.LSH_STK_RATE3} %</TableCell> + </TableRow> + </TableBody> + </Table> + </div> + </div> + + {/* 기본 정보 */} + <div className="grid grid-cols-3 gap-4"> + {/* 섹션1: 종업원 수, 신용등급, WATCH 등급 */} + <div className="border"> + <Table> + <TableBody> + <TableRow> + <TableCell className="bg-muted font-medium border-r">종업원 수</TableCell> + <TableCell>{creditData.HAPGYE}</TableCell> + </TableRow> + <TableRow> + <TableCell className="bg-muted font-medium border-r">신용등급</TableCell> + <TableCell className="bg-blue-100 dark:bg-blue-900/30 font-semibold">{creditData.LASTGRD}</TableCell> + </TableRow> + <TableRow> + <TableCell className="bg-muted font-medium border-r">WATCH등급</TableCell> + <TableCell>{creditData.FWATCHD}</TableCell> + </TableRow> + </TableBody> + </Table> + </div> + + {/* 섹션2: 기업회생/파산정보, 현금흐름등급, 평가기준일 */} + <div className="border"> + <Table> + <TableBody> + <TableRow> + <TableCell className="bg-muted font-medium border-r">기업회생/파산정보</TableCell> + <TableCell>{creditData.NOTICE || '없음'}</TableCell> + </TableRow> + <TableRow> + <TableCell className="bg-muted font-medium border-r">현금흐름등급</TableCell> + <TableCell className="bg-green-100 dark:bg-green-900/30 font-semibold">{creditData.DECISION}</TableCell> + </TableRow> + <TableRow> + <TableCell className="bg-muted font-medium border-r">평가기준일</TableCell> + <TableCell>{creditData.SUVDT}</TableCell> + </TableRow> + </TableBody> + </Table> + </div> + + {/* 섹션3: 휴/폐업 여부, RISK등급, 결산기준일 */} + <div className="border"> + <Table> + <TableBody> + <TableRow> + <TableCell className="bg-muted font-medium border-r">휴/폐업 여부</TableCell> + <TableCell>{creditData.HPGBNCR_TY || '정상'}</TableCell> + </TableRow> + <TableRow> + <TableCell className="bg-muted font-medium border-r">RISK등급</TableCell> + <TableCell>{creditData.FRISKRV}</TableCell> + </TableRow> + <TableRow> + <TableCell className="bg-muted font-medium border-r">결산기준일</TableCell> + <TableCell>{creditData.ESETDTT}</TableCell> + </TableRow> + </TableBody> + </Table> + </div> + </div> + + {/* 재무현황 */} + <div className="border"> + <div className="bg-muted p-3 text-center font-semibold">재무현황(3개년)</div> + <Table> + <TableHeader> + <TableRow> + <TableHead className="text-center border-r">구분</TableHead> + <TableHead className="text-center border-r">총자산<br/>(단위:백만원)</TableHead> + <TableHead className="text-center border-r">부채총계<br/>(단위:백만원)</TableHead> + <TableHead className="text-center border-r">자본총계<br/>(단위:백만원)</TableHead> + <TableHead className="text-center border-r">매출액<br/>(단위:백만원)</TableHead> + <TableHead className="text-center border-r">영업이익<br/>(단위:백만원)</TableHead> + <TableHead className="text-center">당기순이익<br/>(단위:백만원)</TableHead> + </TableRow> + </TableHeader> + <TableBody> + <TableRow> + <TableCell className="text-center font-medium border-r">{creditData.bs_dt0}</TableCell> + <TableCell className="text-right border-r">{creditData.bs59_0}</TableCell> + <TableCell className="text-right border-r">{creditData.bs91_0}</TableCell> + <TableCell className="text-right border-r">{creditData.bs113_0}</TableCell> + <TableCell className="text-right border-r">{creditData.pl01_0}</TableCell> + <TableCell className="text-right border-r">{creditData.pl27_0}</TableCell> + <TableCell className="text-right">{creditData.pl71_0}</TableCell> + </TableRow> + <TableRow> + <TableCell className="text-center font-medium border-r">{creditData.bs_dt1}</TableCell> + <TableCell className="text-right border-r">{creditData.bs59_1}</TableCell> + <TableCell className="text-right border-r">{creditData.bs91_1}</TableCell> + <TableCell className="text-right border-r">{creditData.bs113_1}</TableCell> + <TableCell className="text-right border-r">{creditData.pl01_1}</TableCell> + <TableCell className="text-right border-r">{creditData.pl27_1}</TableCell> + <TableCell className="text-right">{creditData.pl71_1}</TableCell> + </TableRow> + <TableRow> + <TableCell className="text-center font-medium border-r">{creditData.bs_dt2}</TableCell> + <TableCell className="text-right border-r">{creditData.bs59_2}</TableCell> + <TableCell className="text-right border-r">{creditData.bs91_2}</TableCell> + <TableCell className="text-right border-r">{creditData.bs113_2}</TableCell> + <TableCell className="text-right border-r">{creditData.pl01_2}</TableCell> + <TableCell className="text-right border-r">{creditData.pl27_2}</TableCell> + <TableCell className="text-right">{creditData.pl71_2}</TableCell> + </TableRow> + </TableBody> + </Table> + </div> + + {/* 재무비율 */} + <div className="border"> + <div className="bg-muted p-3 text-center font-semibold">재무비율(3개년)</div> + <Table> + <TableHeader> + <TableRow> + <TableHead className="text-center border-r">구분</TableHead> + <TableHead className="text-center border-r">부채비율</TableHead> + <TableHead className="text-center border-r">차입금의존도</TableHead> + <TableHead className="text-center border-r">영업이익율</TableHead> + <TableHead className="text-center border-r">순이익율</TableHead> + <TableHead className="text-center border-r">전년대비 매출액 증가율</TableHead> + <TableHead className="text-center">유동비율</TableHead> + </TableRow> + </TableHeader> + <TableBody> + <TableRow> + <TableCell className="text-center font-medium border-r">{creditData.bs_dt0}</TableCell> + <TableCell className="text-right border-r">{creditData.TR0053} %</TableCell> + <TableCell className="text-right border-r">{creditData.TR0513} %</TableCell> + <TableCell className="text-right border-r">{creditData.TR0523} %</TableCell> + <TableCell className="text-right border-r">{creditData.TR0103} %</TableCell> + <TableCell className="text-right border-r">{creditData.TR0223} %</TableCell> + <TableCell className="text-right">{creditData.TR0013} %</TableCell> + </TableRow> + <TableRow> + <TableCell className="text-center font-medium border-r">{creditData.bs_dt1}</TableCell> + <TableCell className="text-right border-r">{creditData.TR0052} %</TableCell> + <TableCell className="text-right border-r">{creditData.TR0512} %</TableCell> + <TableCell className="text-right border-r">{creditData.TR0522} %</TableCell> + <TableCell className="text-right border-r">{creditData.TR0102} %</TableCell> + <TableCell className="text-right border-r">{creditData.TR0222} %</TableCell> + <TableCell className="text-right">{creditData.TR0012} %</TableCell> + </TableRow> + <TableRow> + <TableCell className="text-center font-medium border-r">{creditData.bs_dt2}</TableCell> + <TableCell className="text-right border-r">{creditData.TR0051} %</TableCell> + <TableCell className="text-right border-r">{creditData.TR0511} %</TableCell> + <TableCell className="text-right border-r">{creditData.TR0521} %</TableCell> + <TableCell className="text-right border-r">{creditData.TR0101} %</TableCell> + <TableCell className="text-right border-r">{creditData.TR0221} %</TableCell> + <TableCell className="text-right">{creditData.TR0011} %</TableCell> + </TableRow> + </TableBody> + </Table> + </div> + </div> + )} + </div> + ); +} diff --git a/app/[lng]/evcp/(evcp)/vendors/[id]/info/layout.tsx b/app/[lng]/evcp/(evcp)/vendors/[id]/info/layout.tsx index 7826a7c0..50e2723e 100644 --- a/app/[lng]/evcp/(evcp)/vendors/[id]/info/layout.tsx +++ b/app/[lng]/evcp/(evcp)/vendors/[id]/info/layout.tsx @@ -39,6 +39,10 @@ export default async function SettingsLayout({ href: `/${lng}/evcp/vendors/${id}/info/basic`, }, { + title: "신용평가", + href: `/${lng}/evcp/vendors/${id}/info/credit`, + }, + { title: "공급품목(패키지)", href: `/${lng}/evcp/vendors/${id}/info/items`, }, |
