--- frontend/src/components/RightsDashboard.test.tsx
+++ frontend/src/components/RightsDashboard.test.tsx
... | ... | @@ -33,6 +33,8 @@ |
| 33 | 33 |
it('기관 검색과 상태 필터가 동작한다', async () => {
|
| 34 | 34 |
render(<RightsDashboard mode="process" onOpenOrg={() => {}} />)
|
| 35 | 35 |
await screen.findByText('완료기관')
|
| 36 |
+ expect(screen.getByText('유형변경 건수')).toBeTruthy()
|
|
| 37 |
+ expect(screen.getByText('기존 유형과 최종 판정 유형이 다른 건')).toBeTruthy()
|
|
| 36 | 38 |
fireEvent.change(screen.getByLabelText('기관명 검색'), { target: { value: '대기' } })
|
| 37 | 39 |
expect(screen.queryByText('완료기관')).toBeNull()
|
| 38 | 40 |
expect(screen.getByText('대기기관')).toBeTruthy()
|
--- frontend/src/components/RightsDashboard.tsx
+++ frontend/src/components/RightsDashboard.tsx
... | ... | @@ -113,13 +113,14 @@ |
| 113 | 113 |
))} |
| 114 | 114 |
</section> |
| 115 | 115 |
|
| 116 |
- <section className="mt-3 grid gap-3 lg:grid-cols-[1.2fr_1fr_1fr]"> |
|
| 116 |
+ <section className={`mt-3 grid gap-3 ${isReview ? 'lg:grid-cols-[1.2fr_1fr_1fr]' : 'lg:grid-cols-[1.1fr_1fr_1fr_1fr]'}`}>
|
|
| 117 | 117 |
<article className="flex items-center gap-5 rounded-lg border border-gray-200 bg-white p-5 shadow-sm"> |
| 118 | 118 |
<ProgressRing done={done} total={total} color={accent} />
|
| 119 | 119 |
<div><p className="text-xs font-medium text-gray-500">전체 진행률</p><p className="mt-1 text-lg font-bold">{rate}%</p><p className="mt-2 text-xs text-gray-500">잔여 {format(remaining)}건</p></div>
|
| 120 | 120 |
</article> |
| 121 | 121 |
<article className="rounded-lg border border-gray-200 bg-white p-5 shadow-sm"><p className="text-xs font-medium text-gray-500">대상 기관</p><p className="mt-2 text-2xl font-bold tabular-nums">{orgsWithWork}</p><p className="mt-2 text-xs text-gray-500">{title} 자료가 등록된 기관</p></article>
|
| 122 | 122 |
<article className="rounded-lg border border-gray-200 bg-white p-5 shadow-sm"><p className="text-xs font-medium text-gray-500">진행 기관</p><p className="mt-2 text-2xl font-bold tabular-nums">{data.orgs.filter((row) => { const t=isReview?row.reviewTotal:row.processTotal; const d=isReview?row.reviewDone:row.processDone; return d>0&&d<t }).length}</p><p className="mt-2 text-xs text-gray-500">일부 처리가 완료된 기관</p></article>
|
| 123 |
+ {!isReview && <article className="rounded-lg border border-gray-200 bg-white p-5 shadow-sm"><p className="text-xs font-medium text-gray-500">유형변경 건수</p><p className="mt-2 text-2xl font-bold tabular-nums text-pink-600">{format(rights?.changedKoglCount ?? 0)}</p><p className="mt-2 text-xs text-gray-500">기존 유형과 최종 판정 유형이 다른 건</p><div className="mt-3 h-1 rounded-full bg-gray-200"><div className="h-full rounded-full bg-pink-500" style={{width:`${total ? Math.min((rights?.changedKoglCount ?? 0)/total*100,100) : 0}%`}} /></div></article>}
|
|
| 123 | 124 |
</section> |
| 124 | 125 |
|
| 125 | 126 |
{rights && (isReview ? (
|
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?