);
}
// همهی صفحات پشت ورود هستند — بدون نشست، به صفحهی ورود میرویم.
function RequireAuth({ children }: { children: React.ReactNode }) {
const user = useAuthStore((s) => s.user);
const { pathname } = useLocation();
if (!user) return ;
if (user.role === "supervisor") {
// اگر سرپرست پروژهای نداشته باشد، دسترسی مسدود میشود
if (!user.projects || user.projects.length === 0) {
return (
پروژه تخصیص داده نشده است
شما به عنوان سرپرست پروژه در سیستم ثبت شدهاید اما هنوز هیچ پروژهای به شما تخصیص داده نشده است.
تا زمان تخصیص پروژه توسط مدیر سیستم، اجازه ورود به سامانه را ندارید.
);
}
// سرپرست پروژه فقط به انبار و PM دسترسی دارد
if (!pathname.startsWith("/inventory") && pathname !== "/panel/pm") {
return ;
}
}
return <>{children}>;
}
// صفحهی اصلی بر اساس نقش: سرپرست پروژه → پنل مدیریت پروژه (PM)؛ مدیران و ادمین → دفتر تدارکات
function HomeRoute() {
const user = useAuthStore((s) => s.user);
if (user?.role === "supervisor") return ;
return ;
}
// دسترسی ایجاد استعلام/پیشنهاد (ویزارد): مدیر تدارکات، مدیر پروژه و ادمین
function RequireProcurementWrite({ children }: { children: React.ReactNode }) {
const user = useAuthStore((s) => s.user);
if (user?.role !== "admin" && user?.role !== "procurement_manager" && user?.role !== "pm") {
return ;
}
return <>{children}>;
}
// پنل «مدیریت پروژه (PM)» — اپ PM روی همان دامنه زیر مسیر /pm سرو میشود
function PmPanelPage() {
return (
);
}
// دسترسی پنل PM: همه نقشها دسترسی دارند
function RequirePmPanel({ children }: { children: React.ReactNode }) {
const user = useAuthStore((s) => s.user);
const allowed = user?.role === "admin" || user?.role === "procurement_manager" || user?.role === "pm" || user?.role === "supervisor";
if (!allowed) return ;
return <>{children}>;
}
// دسترسی پنل سازماندهی: فقط ادمین، مدیر تدارکات و مدیر پروژه
function RequireOrganization({ children }: { children: React.ReactNode }) {
const user = useAuthStore((s) => s.user);
const allowed = user?.role === "admin" || user?.role === "procurement_manager" || user?.role === "pm";
if (!allowed) return ;
return <>{children}>;
}
// دسترسی تغییر موجودی انبار: فقط سرپرست پروژه و ادمین (مدیر تدارکات و مدیر پروژه نمیتوانند موجودی تغییر دهند)
function RequireInventoryChange({ children }: { children: React.ReactNode }) {
const user = useAuthStore((s) => s.user);
if (user?.role !== "admin" && user?.role !== "supervisor") {
return ;
}
return <>{children}>;
}
// دسترسی مدیریت انبارها: فقط مدیران و ادمین (سرپرست پروژه فقط میتواند موجودی تغییر دهد)
function RequireWarehouseManage({ children }: { children: React.ReactNode }) {
const user = useAuthStore((s) => s.user);
if (user?.role === "supervisor") {
return ;
}
return <>{children}>;
}
export default function App() {
return (
}>
} />
}
/>
}
/>
}
/>
{/* سلسلهمراتب دامنه: دسته → تأمینکننده. کارت دسته مستقیم به
فهرست تأمینکنندههای همان دسته میرود (بدون صفحهی واسط متریال). */}
}
/>
{/* مسیرهای قدیمی (درخت معکوس topic → material → supplier) — ریدایرکت */}
}
/>
}
/>
}
/>
}
/>
}
/>
}
/>
}
/>
}
/>
}
/>
}
/>
}
/>
}
/>
}
/>
{/* پنل مدیریت پروژه — فقط ادمین و مدیر پروژه */}
}
/>
} />
);
}