diff --git a/src/renderer/src/components/CleanerOperationHistoryModal.tsx b/src/renderer/src/components/CleanerOperationHistoryModal.tsx index 55bcf2c..ed35f31 100644 --- a/src/renderer/src/components/CleanerOperationHistoryModal.tsx +++ b/src/renderer/src/components/CleanerOperationHistoryModal.tsx @@ -8,6 +8,8 @@ import React, { useState, useEffect, useCallback, useTransition } from 'react' import { Modal } from './ui/Modal' +import { ConfirmDialog } from './ui/ConfirmDialog' +import { useConfirmDialog } from './ui/useConfirmDialog' import { useLogger } from '../hooks/useLogger' import { RefreshCw, @@ -68,6 +70,7 @@ interface BatchItemProps { batch: CleanerHistoryBatchStats isAdmin: boolean onDelete: (batchId: string) => void + onRequestDelete: (batchId: string) => Promise } const BATCH_PAGE_SIZE = 5 @@ -113,7 +116,7 @@ const formatDuration = (startTime: string | Date | null, endTime: string | Date // ====== BatchItem Component ====== // Extracted from the modal so that expanding one batch doesn't re-render siblings. // Each BatchItem manages its own details, orders, and material state locally. -const BatchItem = React.memo(({ batch, isAdmin, onDelete }: BatchItemProps) => { +const BatchItem = React.memo(({ batch, isAdmin, onDelete, onRequestDelete }: BatchItemProps) => { const [isExpanded, setIsExpanded] = useState(false) const [executions, setExecutions] = useState([]) const [orders, setOrders] = useState([]) @@ -241,7 +244,7 @@ const BatchItem = React.memo(({ batch, isAdmin, onDelete }: BatchItemProps) => { const handleDelete = async () => { if (isDeleting) return - const confirmed = confirm('确定要删除此批次记录吗?此操作不可撤销。') + const confirmed = await onRequestDelete(batch.batchId) if (!confirmed) return setIsDeleting(true) @@ -645,6 +648,7 @@ export const CleanerOperationHistoryModal: React.FC([]) const [currentPage, setCurrentPage] = useState(0) const [isFilterPending, startFilterTransition] = useTransition() + const { confirm, dialog: confirmDialog } = useConfirmDialog() const logger = useLogger('CleanerOperationHistory') const isAdmin = user?.userType === 'Admin' @@ -704,6 +708,30 @@ export const CleanerOperationHistoryModal: React.FC prev.filter((b) => b.batchId !== batchId)) }, []) + const requestDeleteConfirmation = useCallback( + async (batchId: string) => { + const batch = batches.find((item) => item.batchId === batchId) + const ownerLabel = batch ? `操作人:${batch.username}` : '此操作不可撤销。' + + return confirm({ + title: '确认删除历史批次', + message: ( +
+

确定要删除这条清理操作历史吗?

+
+
该操作会一并删除批次、订单和物料明细记录。
+
{ownerLabel}
+
+
+ ), + confirmText: '删除', + cancelText: '取消', + variant: 'danger' + }) + }, + [batches, confirm] + ) + const toggleUserFilter = (username: string) => { startFilterTransition(() => { setCurrentPage(0) @@ -824,6 +852,7 @@ export const CleanerOperationHistoryModal: React.FC ))} @@ -853,6 +882,7 @@ export const CleanerOperationHistoryModal: React.FC + {confirmDialog && } ) } diff --git a/src/renderer/src/components/ExtractorOperationHistoryModal.tsx b/src/renderer/src/components/ExtractorOperationHistoryModal.tsx index 6884f8d..eaa200c 100644 --- a/src/renderer/src/components/ExtractorOperationHistoryModal.tsx +++ b/src/renderer/src/components/ExtractorOperationHistoryModal.tsx @@ -7,6 +7,8 @@ import React, { useState, useEffect, useCallback } from 'react' import { Modal } from './ui/Modal' +import { ConfirmDialog } from './ui/ConfirmDialog' +import { useConfirmDialog } from './ui/useConfirmDialog' import { useLogger } from '../hooks/useLogger' import { RefreshCw, @@ -83,6 +85,7 @@ export const ExtractorOperationHistoryModal: React.FC>(new Set()) const [allUsers, setAllUsers] = useState([]) const [selectedUsers, setSelectedUsers] = useState([]) + const { confirm, dialog: confirmDialog } = useConfirmDialog() const logger = useLogger('OperationHistory') const isAdmin = user?.userType === 'Admin' @@ -172,7 +175,24 @@ export const ExtractorOperationHistoryModal: React.FC { if (deleting.has(batchId)) return - const confirmed = confirm('确定要删除此批次记录吗?此操作不可撤销。') + const batch = batches.find((item) => item.batchId === batchId) + const ownerLabel = batch ? `操作人:${batch.username}` : '此操作不可撤销。' + + const confirmed = await confirm({ + title: '确认删除提取历史', + message: ( +
+

确定要删除这条提取操作历史吗?

+
+
该操作会删除当前批次下的提取记录明细。
+
{ownerLabel}
+
+
+ ), + confirmText: '删除', + cancelText: '取消', + variant: 'danger' + }) if (!confirmed) return setDeleting((prev) => new Set(prev).add(batchId)) @@ -503,6 +523,7 @@ export const ExtractorOperationHistoryModal: React.FC + {confirmDialog && } ) }