summaryrefslogtreecommitdiff
path: root/lib/vendor-document-list/plant
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-08-14 11:54:47 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-08-14 11:54:47 +0000
commit969c25b56f6d29d7ffa4bc2ce04c5fb4e5846b34 (patch)
tree551d335e850e6163792ded0e7a75fa41d96d612a /lib/vendor-document-list/plant
parentdd20ba9785cdbd3d61f6b014d003d3bd9646ad13 (diff)
(대표님) 정규벤더등록, 벤더문서관리, 벤더데이터입력, 첨부파일관리
Diffstat (limited to 'lib/vendor-document-list/plant')
-rw-r--r--lib/vendor-document-list/plant/document-stages-table.tsx39
1 files changed, 23 insertions, 16 deletions
diff --git a/lib/vendor-document-list/plant/document-stages-table.tsx b/lib/vendor-document-list/plant/document-stages-table.tsx
index f843862d..ccf35f4b 100644
--- a/lib/vendor-document-list/plant/document-stages-table.tsx
+++ b/lib/vendor-document-list/plant/document-stages-table.tsx
@@ -22,6 +22,8 @@ import {
Plus,
FileSpreadsheet
} from "lucide-react"
+import { useTranslation } from "@/i18n/client"
+import { useParams } from "next/navigation"
import { getDocumentStagesColumns } from "./document-stages-columns"
import { ExpandableDataTable } from "@/components/data-table/expandable-data-table"
import { toast } from "sonner"
@@ -45,6 +47,11 @@ export function DocumentStagesTable({
projectType,
}: DocumentStagesTableProps) {
const [{ data, pageCount, total }] = React.use(promises)
+
+ // URL에서 언어 파라미터 가져오기
+ const params = useParams()
+ const lng = (params?.lng as string) || 'ko'
+ const { t } = useTranslation(lng, 'document')
// 상태 관리
@@ -160,13 +167,13 @@ export function DocumentStagesTable({
.filter(Boolean)
if (stageIds.length > 0) {
- toast.success(`${stageIds.length}개 스테이지가 완료 처리되었습니다.`)
+ toast.success(t('documentList.messages.stageCompletionSuccess', { count: stageIds.length }))
}
} else if (action === 'bulk_assign') {
- toast.info("일괄 담당자 지정 기능은 준비 중입니다.")
+ toast.info(t('documentList.messages.bulkAssignPending'))
}
} catch (error) {
- toast.error("일괄 작업 중 오류가 발생했습니다.")
+ toast.error(t('documentList.messages.bulkActionError'))
}
}
@@ -260,47 +267,47 @@ export function DocumentStagesTable({
<div className="grid grid-cols-2 md:grid-cols-4 gap-4">
<Card className="cursor-pointer hover:shadow-md transition-shadow" onClick={() => setQuickFilter('all')}>
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
- <CardTitle className="text-sm font-medium">전체 문서</CardTitle>
+ <CardTitle className="text-sm font-medium">{t('documentList.dashboard.totalDocuments')}</CardTitle>
<TrendingUp className="h-4 w-4 text-muted-foreground" />
</CardHeader>
<CardContent>
<div className="text-2xl font-bold">{stats.total}</div>
<p className="text-xs text-muted-foreground">
- 총 {total}개 문서
+ {t('documentList.dashboard.totalDocumentCount', { total })}
</p>
</CardContent>
</Card>
<Card className="cursor-pointer hover:shadow-md transition-shadow" onClick={() => setQuickFilter('overdue')}>
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
- <CardTitle className="text-sm font-medium">지연 문서</CardTitle>
+ <CardTitle className="text-sm font-medium">{t('documentList.dashboard.overdueDocuments')}</CardTitle>
<AlertTriangle className="h-4 w-4 text-red-500" />
</CardHeader>
<CardContent>
<div className="text-2xl font-bold text-red-600">{stats.overdue}</div>
- <p className="text-xs text-muted-foreground">즉시 확인 필요</p>
+ <p className="text-xs text-muted-foreground">{t('documentList.dashboard.checkImmediately')}</p>
</CardContent>
</Card>
<Card className="cursor-pointer hover:shadow-md transition-shadow" onClick={() => setQuickFilter('due_soon')}>
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
- <CardTitle className="text-sm font-medium">마감 임박</CardTitle>
+ <CardTitle className="text-sm font-medium">{t('documentList.dashboard.dueSoonDocuments')}</CardTitle>
<Clock className="h-4 w-4 text-orange-500" />
</CardHeader>
<CardContent>
<div className="text-2xl font-bold text-orange-600">{stats.dueSoon}</div>
- <p className="text-xs text-muted-foreground">3일 이내 마감</p>
+ <p className="text-xs text-muted-foreground">{t('documentList.dashboard.dueInDays')}</p>
</CardContent>
</Card>
<Card>
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
- <CardTitle className="text-sm font-medium">평균 진행률</CardTitle>
+ <CardTitle className="text-sm font-medium">{t('documentList.dashboard.averageProgress')}</CardTitle>
<Target className="h-4 w-4 text-green-500" />
</CardHeader>
<CardContent>
<div className="text-2xl font-bold text-green-600">{stats.avgProgress}%</div>
- <p className="text-xs text-muted-foreground">전체 프로젝트 진행도</p>
+ <p className="text-xs text-muted-foreground">{t('documentList.dashboard.overallProgress')}</p>
</CardContent>
</Card>
</div>
@@ -312,7 +319,7 @@ export function DocumentStagesTable({
className="cursor-pointer hover:bg-primary hover:text-primary-foreground whitespace-nowrap"
onClick={() => setQuickFilter('all')}
>
- 전체 ({stats.total})
+ {t('documentList.quickFilters.all')} ({stats.total})
</Badge>
<Badge
variant={quickFilter === 'overdue' ? 'destructive' : 'outline'}
@@ -320,7 +327,7 @@ export function DocumentStagesTable({
onClick={() => setQuickFilter('overdue')}
>
<AlertTriangle className="w-3 h-3 mr-1" />
- 지연 ({stats.overdue})
+ {t('documentList.quickFilters.overdue')} ({stats.overdue})
</Badge>
<Badge
variant={quickFilter === 'due_soon' ? 'default' : 'outline'}
@@ -328,7 +335,7 @@ export function DocumentStagesTable({
onClick={() => setQuickFilter('due_soon')}
>
<Clock className="w-3 h-3 mr-1" />
- 마감임박 ({stats.dueSoon})
+ {t('documentList.quickFilters.dueSoon')} ({stats.dueSoon})
</Badge>
<Badge
variant={quickFilter === 'in_progress' ? 'default' : 'outline'}
@@ -336,7 +343,7 @@ export function DocumentStagesTable({
onClick={() => setQuickFilter('in_progress')}
>
<Users className="w-3 h-3 mr-1" />
- 진행중 ({stats.inProgress})
+ {t('documentList.quickFilters.inProgress')} ({stats.inProgress})
</Badge>
<Badge
variant={quickFilter === 'high_priority' ? 'destructive' : 'outline'}
@@ -344,7 +351,7 @@ export function DocumentStagesTable({
onClick={() => setQuickFilter('high_priority')}
>
<Target className="w-3 h-3 mr-1" />
- 높은우선순위 ({stats.highPriority})
+ {t('documentList.quickFilters.highPriority')} ({stats.highPriority})
</Badge>
</div>