Files
star-erp/resources/js/Components/PurchaseOrder/PurchaseOrderActions.tsx

99 lines
3.7 KiB
TypeScript
Raw Normal View History

import { useState } from "react";
2025-12-31 17:48:36 +08:00
import { Pencil, Eye, Trash2 } from "lucide-react";
2025-12-30 15:03:19 +08:00
import { Button } from "@/Components/ui/button";
2025-12-30 17:05:19 +08:00
import { Link, useForm } from "@inertiajs/react";
2025-12-30 15:03:19 +08:00
import type { PurchaseOrder } from "@/types/purchase-order";
2025-12-30 17:05:19 +08:00
import { toast } from "sonner";
import { Can } from "@/Components/Permission/Can";
import {
AlertDialog,
AlertDialogAction,
AlertDialogCancel,
AlertDialogContent,
AlertDialogDescription,
AlertDialogFooter,
AlertDialogHeader,
AlertDialogTitle,
} from "@/Components/ui/alert-dialog";
2025-12-30 15:03:19 +08:00
export function PurchaseOrderActions({
order,
}: { order: PurchaseOrder }) {
const [showDeleteDialog, setShowDeleteDialog] = useState(false);
2025-12-30 17:05:19 +08:00
const { delete: destroy, processing } = useForm({});
const handleConfirmDelete = () => {
// @ts-ignore
destroy(route('purchase-orders.destroy', order.id), {
onSuccess: () => {
toast.success("採購單已成功刪除");
setShowDeleteDialog(false);
},
onError: (errors: any) => toast.error(errors.error || "刪除過程中發生錯誤"),
});
2025-12-30 17:05:19 +08:00
};
2025-12-30 15:03:19 +08:00
return (
<div className="flex justify-center gap-2">
2025-12-30 15:03:19 +08:00
<Link href={`/purchase-orders/${order.id}`}>
<Button
variant="outline"
size="sm"
className="button-outlined-primary"
title="查看詳情"
2025-12-30 15:03:19 +08:00
>
<Eye className="h-4 w-4" />
</Button>
</Link>
<Can permission="purchase_orders.edit">
{order.status === 'draft' && (
<Link href={`/purchase-orders/${order.id}/edit`}>
<Button
variant="outline"
size="sm"
className="button-outlined-primary"
title="編輯"
>
<Pencil className="h-4 w-4" />
</Button>
</Link>
)}
</Can>
<Can permission="purchase_orders.delete">
{order.status === 'draft' && (
<Button
variant="outline"
size="sm"
className="button-outlined-error"
title="刪除"
onClick={() => setShowDeleteDialog(true)}
disabled={processing}
>
<Trash2 className="h-4 w-4" />
</Button>
)}
<AlertDialog open={showDeleteDialog} onOpenChange={setShowDeleteDialog}>
<AlertDialogContent>
<AlertDialogHeader>
<AlertDialogTitle></AlertDialogTitle>
<AlertDialogDescription>
{order.poNumber}
</AlertDialogDescription>
</AlertDialogHeader>
<AlertDialogFooter>
<AlertDialogCancel className="button-outlined-primary"></AlertDialogCancel>
<AlertDialogAction
onClick={handleConfirmDelete}
className="button-filled-error"
>
</AlertDialogAction>
</AlertDialogFooter>
</AlertDialogContent>
</AlertDialog>
</Can>
2025-12-30 15:03:19 +08:00
</div>
);
}