diff options
| author | joonhoekim <26rote@gmail.com> | 2025-10-14 14:25:28 +0900 |
|---|---|---|
| committer | joonhoekim <26rote@gmail.com> | 2025-10-14 14:25:28 +0900 |
| commit | 40250c61031263606dd073ce7056a3e8e27f18d0 (patch) | |
| tree | 0ea566507b3b341825e9825f9cee43f470957292 /lib/avl/table/standard-avl-table.tsx | |
| parent | 6d3752d34dfdf2c3870b9f6ffe431cfa98e302c9 (diff) | |
(김준회) AVL 구매요구사항 수정
- AVL 상세 엑셀 익스포트 추가
- 레코드 이동 멀티선택 추가
- 최종확정처리 오류 수정
- 프로젝트 AVL에 H/T 구분 추가
Diffstat (limited to 'lib/avl/table/standard-avl-table.tsx')
| -rw-r--r-- | lib/avl/table/standard-avl-table.tsx | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/lib/avl/table/standard-avl-table.tsx b/lib/avl/table/standard-avl-table.tsx index 06fa6931..c638bd7f 100644 --- a/lib/avl/table/standard-avl-table.tsx +++ b/lib/avl/table/standard-avl-table.tsx @@ -27,7 +27,7 @@ import { Search } from "lucide-react" import { toast } from "sonner" import { standardAvlColumns } from "./standard-avl-table-columns" import { AvlVendorAddAndModifyDialog } from "./avl-vendor-add-and-modify-dialog" -import { createAvlVendorInfo, updateAvlVendorInfo, deleteAvlVendorInfo, finalizeStandardAvl } from "../service" +import { createAvlVendorInfo, updateAvlVendorInfo, deleteAvlVendorInfo, finalizeStandardAvl, getStandardAvlVendorInfoCount } from "../service" import { AvlVendorInfoInput } from "../types" import { useSession } from "next-auth/react" import { ShipTypeSelector, ShipTypeItem } from "@/components/common/ship-type" @@ -341,6 +341,7 @@ export const StandardAvlTable = forwardRef<StandardAvlTableRef, StandardAvlTable // 최종 확정 다이얼로그 상태 const [isConfirmDialogOpen, setIsConfirmDialogOpen] = React.useState(false) + const [totalVendorInfoCount, setTotalVendorInfoCount] = React.useState<number>(0) // 최종 확정 핸들러 (표준 AVL) const handleFinalizeStandardAvl = React.useCallback(async () => { @@ -350,22 +351,31 @@ export const StandardAvlTable = forwardRef<StandardAvlTableRef, StandardAvlTable return } - if (data.length === 0) { + // 2. 실제 확정될 레코드 건수 조회 + const standardAvlInfo = { + constructionSector: searchConstructionSector, + shipType: selectedShipType?.CD || "", + avlKind: searchAvlKind, + htDivision: searchHtDivision + } + + const count = await getStandardAvlVendorInfoCount(standardAvlInfo) + + if (count === 0) { toast.error("확정할 표준 AVL 벤더 정보가 없습니다.") return } - // 2. 확인 다이얼로그 열기 + setTotalVendorInfoCount(count) + + // 3. 확인 다이얼로그 열기 setIsConfirmDialogOpen(true) - }, [isAllSearchConditionsSelected, data.length]) + }, [isAllSearchConditionsSelected, searchConstructionSector, selectedShipType, searchAvlKind, searchHtDivision]) // 실제 최종 확정 실행 함수 const executeFinalizeStandardAvl = React.useCallback(async () => { try { - // 3. 현재 데이터의 모든 ID 수집 (전체 레코드 기준) - const avlVendorInfoIds = data.map(item => item.id) - - // 4. 최종 확정 실행 + // 최종 확정 실행 (서버에서 DB의 모든 레코드를 조회하여 확정) const standardAvlInfo = { constructionSector: searchConstructionSector, shipType: selectedShipType?.CD || "", @@ -375,17 +385,16 @@ export const StandardAvlTable = forwardRef<StandardAvlTableRef, StandardAvlTable const result = await finalizeStandardAvl( standardAvlInfo, - avlVendorInfoIds, sessionData?.user?.name || "" ) if (result.success) { toast.success(result.message) - // 5. 데이터 새로고침 + // 데이터 새로고침 loadData({}) - // 6. 선택 해제 + // 선택 해제 table.toggleAllPageRowsSelected(false) } else { toast.error(result.message) @@ -396,7 +405,7 @@ export const StandardAvlTable = forwardRef<StandardAvlTableRef, StandardAvlTable } finally { setIsConfirmDialogOpen(false) } - }, [searchConstructionSector, selectedShipType, searchAvlKind, searchHtDivision, data, table, loadData, sessionData?.user?.name]) + }, [searchConstructionSector, selectedShipType, searchAvlKind, searchHtDivision, table, loadData, sessionData?.user?.name]) // 초기 데이터 로드 (검색 조건이 모두 입력되었을 때만) React.useEffect(() => { @@ -626,10 +635,9 @@ export const StandardAvlTable = forwardRef<StandardAvlTableRef, StandardAvlTable <div>• 선종: {selectedShipType?.CD || ""}</div> <div>• AVL종류: {searchAvlKind}</div> <div>• H/T 구분: {searchHtDivision}</div> - <div>• 벤더 정보: {data.length}개 (전체 레코드)</div> - {/* <div className="text-amber-600 font-medium mt-4"> - ⚠️ 확정 후 내용 수정을 필요로 하는 경우 동일 건을 다시 최종확정해 revision 처리로 수정해야 합니다. - </div> */} + <div className="font-semibold text-primary mt-4"> + • 확정될 벤더 정보: {totalVendorInfoCount}개 + </div> </div> <DialogFooter> <Button variant="outline" onClick={() => setIsConfirmDialogOpen(false)}> |
