diff --git a/resources/js/Components/ActivityLog/ActivityDetailDialog.tsx b/resources/js/Components/ActivityLog/ActivityDetailDialog.tsx index bcbf15c..79be7a5 100644 --- a/resources/js/Components/ActivityLog/ActivityDetailDialog.tsx +++ b/resources/js/Components/ActivityLog/ActivityDetailDialog.tsx @@ -5,7 +5,6 @@ import { DialogTitle, } from "@/Components/ui/dialog"; import { Badge } from "@/Components/ui/badge"; -import { ScrollArea } from "@/Components/ui/scroll-area"; import { Table, TableBody, @@ -237,7 +236,7 @@ export default function ActivityDetailDialog({ open, onOpenChange, activity }: P return ( - +
@@ -276,163 +275,161 @@ export default function ActivityDetailDialog({ open, onOpenChange, activity }: P
-
- - {activity.event === 'created' ? ( +
+ {activity.event === 'created' ? ( +
+ + + + 欄位 + 異動前 + 異動後 + + + + {filteredKeys + .filter(key => attributes[key] !== null && attributes[key] !== '' && !isSnapshotField(key)) + .map((key) => ( + + {getFieldLabel(key)} + - + + {getFormattedValue(key, attributes[key])} + + + ))} + {filteredKeys.filter(key => attributes[key] !== null && attributes[key] !== '' && !isSnapshotField(key)).length === 0 && ( + + + 無初始資料 + + + )} + +
+
+ ) : ( +
+ + + + 欄位 + 異動前 + 異動後 + + + + {filteredKeys.some(key => !isSnapshotField(key)) ? ( + filteredKeys + .filter(key => !isSnapshotField(key)) + .map((key) => { + const oldValue = old[key]; + const newValue = attributes[key]; + const isChanged = JSON.stringify(oldValue) !== JSON.stringify(newValue); + + // For deleted events, we want to show the current attributes in the "Before" column + const displayBefore = activity.event === 'deleted' + ? getFormattedValue(key, newValue || oldValue) + : getFormattedValue(key, oldValue); + + const displayAfter = activity.event === 'deleted' + ? '-' + : getFormattedValue(key, newValue); + + return ( + + {getFieldLabel(key)} + + {displayBefore} + + + {displayAfter} + + + ); + }) + ) : ( + + + 無詳細異動內容 + + + )} + +
+
+ )} + {/* Items Diff Section (Special for Purchase Orders) */} + {activity.properties?.items_diff && ( +
+

+ + 品項異動明細 +

+
- - - 欄位 - 異動前 - 異動後 + + + 商品名稱 + 異動類型 + 異動詳情 (舊 → 新) - {filteredKeys - .filter(key => attributes[key] !== null && attributes[key] !== '' && !isSnapshotField(key)) - .map((key) => ( - - {getFieldLabel(key)} - - - - {getFormattedValue(key, attributes[key])} - - - ))} - {filteredKeys.filter(key => attributes[key] !== null && attributes[key] !== '' && !isSnapshotField(key)).length === 0 && ( - - - 無初始資料 + {/* Updated Items */} + {activity.properties.items_diff.updated.map((item: any, idx: number) => ( + + {item.product_name} + + 更新 + + +
+ {item.old.quantity !== item.new.quantity && ( +
數量: {item.old.quantity}{item.new.quantity}
+ )} + {item.old.unit_name !== item.new.unit_name && ( +
單位: {item.old.unit_name || '-'}{item.new.unit_name || '-'}
+ )} + {item.old.subtotal !== item.new.subtotal && ( +
小計: ${item.old.subtotal}${item.new.subtotal}
+ )} +
- )} + ))} + + {/* Added Items */} + {activity.properties.items_diff.added.map((item: any, idx: number) => ( + + {item.product_name} + + 新增 + + + 數量: {item.quantity} {item.unit_name} / 小計: ${item.subtotal} + + + ))} + + {/* Removed Items */} + {activity.properties.items_diff.removed.map((item: any, idx: number) => ( + + {item.product_name} + + 移除 + + + 原紀錄: {item.quantity} {item.unit_name} + + + ))}
- ) : ( -
- - - - 欄位 - 異動前 - 異動後 - - - - {filteredKeys.some(key => !isSnapshotField(key)) ? ( - filteredKeys - .filter(key => !isSnapshotField(key)) - .map((key) => { - const oldValue = old[key]; - const newValue = attributes[key]; - const isChanged = JSON.stringify(oldValue) !== JSON.stringify(newValue); - - // For deleted events, we want to show the current attributes in the "Before" column - const displayBefore = activity.event === 'deleted' - ? getFormattedValue(key, newValue || oldValue) - : getFormattedValue(key, oldValue); - - const displayAfter = activity.event === 'deleted' - ? '-' - : getFormattedValue(key, newValue); - - return ( - - {getFieldLabel(key)} - - {displayBefore} - - - {displayAfter} - - - ); - }) - ) : ( - - - 無詳細異動內容 - - - )} - -
-
- )} - {/* Items Diff Section (Special for Purchase Orders) */} - {activity.properties?.items_diff && ( -
-

- - 品項異動明細 -

- -
- - - - 商品名稱 - 異動類型 - 異動詳情 (舊 → 新) - - - - {/* Updated Items */} - {activity.properties.items_diff.updated.map((item: any, idx: number) => ( - - {item.product_name} - - 更新 - - -
- {item.old.quantity !== item.new.quantity && ( -
數量: {item.old.quantity}{item.new.quantity}
- )} - {item.old.unit_name !== item.new.unit_name && ( -
單位: {item.old.unit_name || '-'}{item.new.unit_name || '-'}
- )} - {item.old.subtotal !== item.new.subtotal && ( -
小計: ${item.old.subtotal}${item.new.subtotal}
- )} -
-
-
- ))} - - {/* Added Items */} - {activity.properties.items_diff.added.map((item: any, idx: number) => ( - - {item.product_name} - - 新增 - - - 數量: {item.quantity} {item.unit_name} / 小計: ${item.subtotal} - - - ))} - - {/* Removed Items */} - {activity.properties.items_diff.removed.map((item: any, idx: number) => ( - - {item.product_name} - - 移除 - - - 原紀錄: {item.quantity} {item.unit_name} - - - ))} -
-
-
-
- )} - +
+ )}