summaryrefslogtreecommitdiff
path: root/lib/avl/table/avl-detail-table.tsx
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-10-14 14:25:28 +0900
committerjoonhoekim <26rote@gmail.com>2025-10-14 14:25:28 +0900
commit40250c61031263606dd073ce7056a3e8e27f18d0 (patch)
tree0ea566507b3b341825e9825f9cee43f470957292 /lib/avl/table/avl-detail-table.tsx
parent6d3752d34dfdf2c3870b9f6ffe431cfa98e302c9 (diff)
(김준회) AVL 구매요구사항 수정
- AVL 상세 엑셀 익스포트 추가 - 레코드 이동 멀티선택 추가 - 최종확정처리 오류 수정 - 프로젝트 AVL에 H/T 구분 추가
Diffstat (limited to 'lib/avl/table/avl-detail-table.tsx')
-rw-r--r--lib/avl/table/avl-detail-table.tsx64
1 files changed, 45 insertions, 19 deletions
diff --git a/lib/avl/table/avl-detail-table.tsx b/lib/avl/table/avl-detail-table.tsx
index ca3ba7e7..407535db 100644
--- a/lib/avl/table/avl-detail-table.tsx
+++ b/lib/avl/table/avl-detail-table.tsx
@@ -10,6 +10,7 @@ import { toast } from "sonner"
import { columns } from "./columns-detail"
import type { AvlDetailItem } from "../types"
import { BackButton } from "@/components/ui/back-button"
+import { exportTableToExcel } from "@/lib/export_all"
interface AvlDetailTableProps {
data: AvlDetailItem[]
@@ -33,7 +34,42 @@ export function AvlDetailTable({
}: AvlDetailTableProps) {
- // 액션 핸들러
+ // 데이터 테이블 설정 (초기 meta는 없음)
+ const { table } = useDataTable({
+ data,
+ columns,
+ pageCount: pageCount ?? 1,
+ initialState: {
+ sorting: [{ id: "no", desc: false }],
+ pagination: {
+ pageIndex: 0,
+ pageSize: 10,
+ },
+ },
+ getRowId: (row) => String(row.id),
+ // meta는 useEffect에서 설정
+ // 정적 데이터이므로 무한 스크롤 설정하지 않음 (클라이언트 측 소팅 활성화)
+ infiniteScrollConfig: undefined,
+ })
+
+ // Excel export 핸들러
+ const handleExcelExport = React.useCallback(async () => {
+ try {
+ toast.info("엑셀 파일을 생성 중입니다...")
+ await exportTableToExcel(table, {
+ filename: `AVL_상세내역_${new Date().toISOString().split('T')[0]}`,
+ allPages: true,
+ excludeColumns: ["select", "actions"],
+ useGroupHeader: true,
+ })
+ toast.success("엑셀 파일이 다운로드되었습니다.")
+ } catch (error) {
+ console.error("Excel export error:", error)
+ toast.error("엑셀 파일 생성 중 오류가 발생했습니다.")
+ }
+ }, [table])
+
+ // 액션 핸들러 (table을 직접 사용하지 않는 액션들)
const handleAction = React.useCallback(async (action: string) => {
switch (action) {
case 'vendor-pool':
@@ -55,29 +91,15 @@ export function AvlDetailTable({
}
}, [])
-
// 테이블 메타 설정
const tableMeta = React.useMemo(() => ({
onAction: handleAction,
}), [handleAction])
- // 데이터 테이블 설정
- const { table } = useDataTable({
- data,
- columns,
- pageCount: pageCount ?? 1,
- initialState: {
- sorting: [{ id: "no", desc: false }],
- pagination: {
- pageIndex: 0,
- pageSize: 10,
- },
- },
- getRowId: (row) => String(row.id),
- meta: tableMeta,
- // 정적 데이터이므로 무한 스크롤 설정하지 않음 (클라이언트 측 소팅 활성화)
- infiniteScrollConfig: undefined,
- })
+ // table의 meta 설정
+ React.useEffect(() => {
+ table.options.meta = tableMeta
+ }, [table, tableMeta])
return (
<div className="space-y-4">
@@ -101,6 +123,10 @@ export function AvlDetailTable({
{/* 상단 버튼 영역 */}
<div className="flex items-center gap-2 ml-auto justify-end">
+ {/* Excel Export 버튼 */}
+ <Button variant="outline" size="sm" onClick={handleExcelExport}>
+ Excel Export
+ </Button>
{/* 단순 이동 버튼 */}
<Button variant="outline" size="sm" onClick={() => handleAction('vendor-pool')}>
Vendor Pool