FPSMS-frontend
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 

45 行
1.3 KiB

  1. import { I18nProvider, getServerI18n } from "@/i18n";
  2. import ItemTracing from "@/components/ItemTracing";
  3. import { AUTH } from "@/authorities";
  4. import { authOptions } from "@/config/authConfig";
  5. import { Stack, Typography } from "@mui/material";
  6. import { Metadata } from "next";
  7. import { getServerSession } from "next-auth";
  8. import { redirect } from "next/navigation";
  9. import { Suspense } from "react";
  10. import ItemTracingLoading from "@/components/ItemTracing/ItemTracingLoading";
  11. export const metadata: Metadata = {
  12. title: "Item Tracing",
  13. };
  14. const canAccess = (abilities: string[]) =>
  15. abilities.includes(AUTH.ITEM_TRACING);
  16. const ItemTracingPage: React.FC = async () => {
  17. const session = await getServerSession(authOptions);
  18. const abilities = session?.user?.abilities ?? [];
  19. if (!canAccess(abilities)) {
  20. redirect("/dashboard");
  21. }
  22. const { t } = await getServerI18n("itemTracing");
  23. return (
  24. <>
  25. <Stack direction="row" justifyContent="space-between" flexWrap="wrap" rowGap={2}>
  26. <Typography variant="h4" marginInlineEnd={2}>
  27. {t("title")}
  28. </Typography>
  29. </Stack>
  30. <I18nProvider namespaces={["itemTracing", "navigation", "common"]}>
  31. <Suspense fallback={<ItemTracingLoading />}>
  32. <ItemTracing />
  33. </Suspense>
  34. </I18nProvider>
  35. </>
  36. );
  37. };
  38. export default ItemTracingPage;