- {/* Permissions Grid */}
-
- {group.permissions.map((permission) => (
-
-
togglePermission(permission.name)}
- />
-
-
- {translateAction(permission.name)}
-
-
- {permission.name}
-
-
+
+ {/* 基本操作 */}
+ {normalPermissions.length > 0 && (
+
+
+ {normalPermissions.map((permission) => (
+
+ ))}
+
+
+ )}
+
+ {/* 狀態操作/進階權限 */}
+ {specialPermissions.length > 0 && (
+
+
+
+ 單據狀態與進階操作權限
+
+
+ {specialPermissions.map((permission) => (
+
+ ))}
+
+
+ )}
@@ -275,3 +292,26 @@ export default function PermissionSelector({ groupedPermissions, selectedPermiss
);
}
+
+function PermissionItem({ permission, selectedPermissions, onToggle, translate }: any) {
+ return (
+
+
onToggle(permission.name)}
+ />
+
+
+ {translate(permission.name)}
+
+
+ {permission.name}
+
+
+
+ );
+}
diff --git a/resources/js/Pages/PurchaseOrder/Create.tsx b/resources/js/Pages/PurchaseOrder/Create.tsx
index de5930a..8b159cc 100644
--- a/resources/js/Pages/PurchaseOrder/Create.tsx
+++ b/resources/js/Pages/PurchaseOrder/Create.tsx
@@ -10,7 +10,7 @@ import { Textarea } from "@/Components/ui/textarea";
import { Alert, AlertDescription } from "@/Components/ui/alert";
import { SearchableSelect } from "@/Components/ui/searchable-select";
import AuthenticatedLayout from "@/Layouts/AuthenticatedLayout";
-import { Head, Link, router } from "@inertiajs/react";
+import { Head, Link, router, usePage } from "@inertiajs/react";
import { PurchaseOrderItemsTable } from "@/Components/PurchaseOrder/PurchaseOrderItemsTable";
import type { PurchaseOrder, Supplier } from "@/types/purchase-order";
import type { Warehouse } from "@/types/requester";
@@ -21,8 +21,9 @@ import {
getTodayDate,
formatCurrency,
} from "@/utils/purchase-order";
-import { STATUS_OPTIONS } from "@/constants/purchase-order";
+import { STATUS_CONFIG, MANUAL_STATUS_OPTIONS } from "@/constants/purchase-order";
import { toast } from "sonner";
+import { Can } from "@/Components/Permission/Can";
import { getCreateBreadcrumbs, getEditBreadcrumbs } from "@/utils/breadcrumb";
interface Props {
@@ -36,6 +37,17 @@ export default function CreatePurchaseOrder({
suppliers,
warehouses,
}: Props) {
+ const { auth } = usePage
().props;
+ const permissions = auth.user?.permissions || [];
+ const isSuperAdmin = auth.user?.roles?.some((r: any) => r.name === 'super-admin');
+
+ const canApprove = isSuperAdmin || permissions.includes('purchase_orders.approve');
+ const canCreate = isSuperAdmin || permissions.includes('purchase_orders.create');
+ const canEdit = isSuperAdmin || permissions.includes('purchase_orders.edit');
+
+ // 儲存權限判斷
+ const canSave = order ? canEdit : canCreate;
+
const {
supplierId,
expectedDate,
@@ -273,12 +285,26 @@ export default function CreatePurchaseOrder({
{order && (
狀態
-
setStatus(v as any)}
- options={STATUS_OPTIONS.map((opt) => ({ label: opt.label, value: opt.value }))}
- placeholder="選擇狀態"
- />
+
+ setStatus(v as any)}
+ options={MANUAL_STATUS_OPTIONS}
+ placeholder="選擇狀態"
+ />
+
+
+ {!canApprove && (
+ <>
+
+ {STATUS_CONFIG[status as keyof typeof STATUS_CONFIG]?.label || status}
+
+
+ * 您沒有權限在此修改狀態,請使用詳情頁面的動作按鈕進行操作。
+
+ >
+ )}
+
)}
@@ -454,9 +480,11 @@ export default function CreatePurchaseOrder({