diff --git a/public/images/headerLogo.png b/public/images/headerLogo.png
new file mode 100644
index 0000000..86dbfcd
Binary files /dev/null and b/public/images/headerLogo.png differ
diff --git a/public/images/rmsLogo.svg b/public/images/rmsLogo.svg
new file mode 100644
index 0000000..5c47991
--- /dev/null
+++ b/public/images/rmsLogo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/app/default.js b/src/app/default.js
new file mode 100644
index 0000000..73d13c1
--- /dev/null
+++ b/src/app/default.js
@@ -0,0 +1,3 @@
+export default function Default() {
+ return null
+}
\ No newline at end of file
diff --git a/src/app/page.js b/src/app/page.js
index 9d660d7..3fab3b7 100644
--- a/src/app/page.js
+++ b/src/app/page.js
@@ -1,8 +1,8 @@
-'use client'
-import HomeComponent from "@/components/home";
+import { redirect } from "next/navigation"
function Page() {
- return ;
+ redirect('/dashboard', 'replace')
+ return null
}
-export default Page;
+export default Page
\ No newline at end of file
diff --git a/src/components/layouts/dashboard/headerWithLogo/HaederBottom/index.jsx b/src/components/layouts/dashboard/headerWithLogo/HaederBottom/index.jsx
new file mode 100644
index 0000000..501dadc
--- /dev/null
+++ b/src/components/layouts/dashboard/headerWithLogo/HaederBottom/index.jsx
@@ -0,0 +1,40 @@
+"use client";
+import { Stack, Typography } from "@mui/material";
+import Image from "next/image";
+
+const HeaderBottom = () => {
+ return (
+ theme.palette.primary2.main,
+ }}
+ spacing={4}
+ alignItems={"center"}
+ direction={"row"}
+ >
+
+
+ theme.palette.primary2.contrastText }}
+ >
+ سامانه جامع راهداری
+
+ theme.palette.primary2.contrastText }}
+ >
+ rms.rmto.ir
+
+
+
+ );
+};
+export default HeaderBottom;
diff --git a/src/components/layouts/dashboard/headerWithLogo/HaederTop/index.jsx b/src/components/layouts/dashboard/headerWithLogo/HaederTop/index.jsx
new file mode 100644
index 0000000..27cd26a
--- /dev/null
+++ b/src/components/layouts/dashboard/headerWithLogo/HaederTop/index.jsx
@@ -0,0 +1,17 @@
+import { Stack } from "@mui/material";
+import Image from "next/image";
+
+const HeaderTop = () => {
+ return (
+
+
+
+ );
+};
+export default HeaderTop;
diff --git a/src/components/layouts/dashboard/headerWithLogo/index.jsx b/src/components/layouts/dashboard/headerWithLogo/index.jsx
index f16f58c..f628e49 100644
--- a/src/components/layouts/dashboard/headerWithLogo/index.jsx
+++ b/src/components/layouts/dashboard/headerWithLogo/index.jsx
@@ -1,9 +1,13 @@
-import {Box, Stack} from "@mui/material";
+import { Box, Stack } from "@mui/material";
+import HeaderTop from "./HaederTop";
+import HeaderBottom from "./HaederBottom";
const HeaderWithLogo = () => {
- return (
- header1
- header2
- )
-}
-export default HeaderWithLogo
\ No newline at end of file
+ return (
+
+
+
+
+ );
+};
+export default HeaderWithLogo;
diff --git a/src/components/layouts/dashboard/headerWithSidebar/HeaderMenu/index.jsx b/src/components/layouts/dashboard/headerWithSidebar/HeaderMenu/index.jsx
new file mode 100644
index 0000000..01fd681
--- /dev/null
+++ b/src/components/layouts/dashboard/headerWithSidebar/HeaderMenu/index.jsx
@@ -0,0 +1,4 @@
+const HeaderMenu = () => {
+ return <>منو>;
+};
+export default HeaderMenu;
diff --git a/src/components/layouts/dashboard/headerWithSidebar/index.jsx b/src/components/layouts/dashboard/headerWithSidebar/index.jsx
index eeb88a3..be0a284 100644
--- a/src/components/layouts/dashboard/headerWithSidebar/index.jsx
+++ b/src/components/layouts/dashboard/headerWithSidebar/index.jsx
@@ -1,94 +1,116 @@
-'use client'
-import {useState} from "react";
-import {Box, Drawer, IconButton, Paper, styled, Toolbar, Typography} from "@mui/material";
-import MuiAppBar from '@mui/material/AppBar';
-import MenuIcon from '@mui/icons-material/Menu';
-import ChevronRightIcon from '@mui/icons-material/ChevronRight';
+"use client";
import SidebarMenu from "@/core/components/SidebarMenu";
+import ChevronRightIcon from "@mui/icons-material/ChevronRight";
+import MenuIcon from "@mui/icons-material/Menu";
+import { Box, Drawer, IconButton, Paper, styled, Toolbar } from "@mui/material";
+import MuiAppBar from "@mui/material/AppBar";
+import { useState } from "react";
+import HeaderMenu from "./HeaderMenu";
-const drawerWidth = 260;
+const drawerWidth = 300;
-const Main = styled(Paper, {shouldForwardProp: (prop) => prop !== 'open'})(({theme, open}) => ({
- flexGrow: 1, transition: theme.transitions.create('margin', {
- easing: theme.transitions.easing.sharp, duration: theme.transitions.duration.leavingScreen,
- }), marginLeft: `-${drawerWidth}px`, ...(open && {
- transition: theme.transitions.create('margin', {
- easing: theme.transitions.easing.easeOut, duration: theme.transitions.duration.enteringScreen,
- }), marginLeft: 0,
+const Main = styled(Paper, { shouldForwardProp: (prop) => prop !== "open" })(
+ ({ theme, open }) => ({
+ flexGrow: 1,
+ transition: theme.transitions.create("margin", {
+ easing: theme.transitions.easing.sharp,
+ duration: theme.transitions.duration.leavingScreen,
}),
-}),);
+ marginLeft: `-${drawerWidth}px`,
+ ...(open && {
+ transition: theme.transitions.create("margin", {
+ easing: theme.transitions.easing.easeOut,
+ duration: theme.transitions.duration.enteringScreen,
+ }),
+ marginLeft: 0,
+ }),
+ })
+);
const AppBar = styled(MuiAppBar, {
- shouldForwardProp: (prop) => prop !== 'open',
-})(({theme, open}) => ({
- transition: theme.transitions.create(['margin', 'width'], {
- easing: theme.transitions.easing.sharp, duration: theme.transitions.duration.leavingScreen,
- }), ...(open && {
- width: `calc(100% - ${drawerWidth}px)`,
- marginLeft: `${drawerWidth}px`,
- transition: theme.transitions.create(['margin', 'width'], {
- easing: theme.transitions.easing.easeOut, duration: theme.transitions.duration.enteringScreen,
- }),
+ shouldForwardProp: (prop) => prop !== "open",
+})(({ theme, open }) => ({
+ transition: theme.transitions.create(["margin", "width"], {
+ easing: theme.transitions.easing.sharp,
+ duration: theme.transitions.duration.leavingScreen,
+ }),
+ ...(open && {
+ width: `calc(100% - ${drawerWidth}px)`,
+ marginLeft: `${drawerWidth}px`,
+ transition: theme.transitions.create(["margin", "width"], {
+ easing: theme.transitions.easing.easeOut,
+ duration: theme.transitions.duration.enteringScreen,
}),
+ }),
}));
-const DrawerHeader = styled('div')(({theme}) => ({
- display: 'flex', alignItems: 'center', padding: theme.spacing(0, 1), // necessary for content to be below app bar
- ...theme.mixins.toolbar, justifyContent: 'flex-end',
+const DrawerHeader = styled("div")(({ theme }) => ({
+ display: "flex",
+ alignItems: "center",
+ padding: theme.spacing(0, 1),
+ ...theme.mixins.toolbar,
+ justifyContent: "flex-end",
}));
-const HeaderWithSidebar = ({children}) => {
- const [open, setOpen] = useState(false);
+const HeaderWithSidebar = ({ children }) => {
+ const [open, setOpen] = useState(true);
- const handleDrawerOpen = () => {
- setOpen(true);
- };
-
- const handleDrawerClose = () => {
- setOpen(false);
- };
- return (
-
-
-
-
-
-
- menu
-
-
-
-
-
-
-
-
-
-
-
-
-
- {children}
-
- )
-}
-export default HeaderWithSidebar
\ No newline at end of file
+ const handleDrawerOpen = () => {
+ setOpen(true);
+ };
+ const handleDrawerClose = () => {
+ setOpen(false);
+ };
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {children}
+
+
+ );
+};
+export default HeaderWithSidebar;
diff --git a/src/core/components/SidebarListItems.jsx b/src/core/components/SidebarListItems.jsx
index 9ffcac2..d300d7f 100644
--- a/src/core/components/SidebarListItems.jsx
+++ b/src/core/components/SidebarListItems.jsx
@@ -1,46 +1,77 @@
-import {Collapse, ListItem, ListItemButton, ListItemIcon, ListItemText} from "@mui/material";
-import { ExpandLess, ExpandMore } from '@mui/icons-material';
-import WifiIcon from '@mui/icons-material/Wifi';
import SidebarSubitems from "@/core/components/SidebarSubitems";
+import { ExpandLess, ExpandMore } from "@mui/icons-material";
+import {
+ Collapse,
+ List,
+ ListItem,
+ ListItemButton,
+ ListItemIcon,
+ ListItemText,
+} from "@mui/material";
+import Link from "next/link";
-const SidebarListItems = ({menuItem, dispatch}) => {
- return(
- <>
-
- {
- dispatch({type: "COLLAPSE_MENU", id: menuItem.id})
- }}>
-
- {menuItem.icon}
-
-
- {menuItem.hasSubitems ? (menuItem.showSubitems ? : ) : null }
-
-
-
- {
- menuItem.hasSubitems ? (menuItem.Subitems.map((subitem,index)=>{
- return(
-
- )
- })) : null
- }
-
-
- >
- )
-}
-export default SidebarListItems
\ No newline at end of file
+const SidebarListItems = ({ menuItem, dispatch }) => {
+ return (
+ <>
+
+ {
+ dispatch({ type: "COLLAPSE_MENU", id: menuItem.id });
+ }}
+ >
+
+ {menuItem.icon}
+
+
+ {menuItem.hasSubitems ? (
+ menuItem.showSubitems ? (
+
+ ) : (
+
+ )
+ ) : null}
+
+
+
+ {menuItem.hasSubitems ? (
+
+ {menuItem.Subitems.map((subitem, index) => {
+ return (
+
+ );
+ })}
+
+ ) : null}
+
+ >
+ );
+};
+export default SidebarListItems;
diff --git a/src/core/components/SidebarMenu.jsx b/src/core/components/SidebarMenu.jsx
index f7589c3..c9f6a73 100644
--- a/src/core/components/SidebarMenu.jsx
+++ b/src/core/components/SidebarMenu.jsx
@@ -1,201 +1,132 @@
-"use client"
-import {List} from "@mui/material";
+"use client";
import SidebarListItems from "@/core/components/SidebarListItems";
-import {useEffect, useReducer, useState} from "react";
-import {usePathname} from 'next/navigation'
-import SecurityIcon from '@mui/icons-material/Security';
-import SpaceDashboardIcon from "@mui/icons-material/SpaceDashboard";
-import AssessmentIcon from '@mui/icons-material/Assessment';
-import AirlineSeatReclineNormalIcon from "@mui/icons-material/AirlineSeatReclineNormal";
-import RepartitionIcon from '@mui/icons-material/Repartition';
-
-const data = [
- {
- id: "hello",
- type: "menu",
- route: "/hello",
- icon: ,
- selected: false,
- Subitems: [
- {
- id: "amin",
- route: "/s",
- icon: ,
- firstName: "amin",
- lastName: "ali",
- Subitems: [
- {
- id: "shahrokh", shahrokh: "shahrokh", type: "page", selected: false, route: "/dashbssoard", icon:
- },
- {
- id: "shasdasdsahrokh", shahrokh: "shahroasdasdkh", type: "page", selected: false, route: "/dashboardsd", icon:
- }
- ],
- hasSubitems: true,
- showSubitems: false,
- type: "menu",
- selected: false,
- },
- {
- id: "amir",
- route: "/dashboarsad",
- icon: ,
- firstName: "amir",
- lastName: "akbar",
- hasSubitems: false,
- showSubitems: false,
- selected: false,
- type: "page",
- },
- ],
- hasSubitems: true,
- showSubitems: false
- },
- {
- id: "hi",
- type: "menu",
- icon: ,
- route: "/hi",
- selected: false,
- Subitems: [
- {
- id: "ali",
- route: "/dashboardss",
- firstName: "ali",
- lastName: "ali",
- icon: ,
- hasSubitems: false,
- showSubitems: false,
- type: "page",
- selected: false,
- },
- {
- id: "akbar",
- route: "/akbar",
- firstName: "akbar",
- icon: ,
- lastName: "akbar",
- hasSubitems: false,
- showSubitems: false,
- type: "page",
- selected: false,
- },
- ],
- hasSubitems: true,
- showSubitems: false
- },
- {
- id: "hoo",
- type: "page",
- route: "/dashboard",
- icon: ,
- selected: false,
- hasSubitems: false,
- showSubitems: false
- }
-]
+import { List } from "@mui/material";
+import { usePathname } from "next/navigation";
+import { useEffect, useReducer, useState } from "react";
+import { pageMenu } from "../utils/pageMenu";
function reducer(state, action) {
- switch (action.type) {
- case "COLLAPSE_MENU":
- return state.map((item) => action.id == item.id ? {
- ...item, showSubitems: !item.showSubitems
- } : item)
- case "COLLAPSE_SUB_ITEMS" :
- return state.map((item) => {
- return item.hasSubitems ? {
- ...item, Subitems: item.Subitems.map((subitem) => action.id === subitem.id ? {
- ...subitem, showSubitems: !subitem.showSubitems
- } : subitem)
- } : item
- })
- case "COLLAPSE_SUB_SECOND_ITEMS" :
- return state.map((item) => {
- return item.hasSubitems ? {
- ...item, Subitems: item.Subitems.map((subitem) => {
- return subitem.hasSubitems ? {
- ...subitem,
- Subitems: subitem.Subitems.map((secondSubitem) => action.id === secondSubitem.id ? {
- ...secondSubitem, showSubitems: !secondSubitem.showSubitems
- } : secondSubitem)
- } : subitem
- })
- } : item
- })
- case "SELECTED":
- return state.map((item) => {
- return item.type === "page" ? {
- ...item, selected: action.route === item.route,showSubitems: item.route === action.route
- } : item.Subitems && Array.isArray(item.Subitems) ? {
- ...item, Subitems: item.Subitems.map((subitem) => {
- return subitem.type === "page" ? {
- ...subitem, selected: action.route === subitem.route,showSubitems: subitem.route === action.route
- } : subitem.Subitems && Array.isArray(subitem.Subitems) ? {
- ...subitem, Subitems: subitem.Subitems.map((secondSubItem) => ({
- ...secondSubItem, selected: secondSubItem.route === action.route
- })),showSubitems: subitem.Subitems.some((secondSubItem) => secondSubItem.route === action.route),
- } : subitem
- }),showSubitems: item.Subitems.some((subitem) => subitem.showSubitems),
- } : item
- });
- // case "SELECTED":
- // return state.map((item) => {
- // return item.type === "page" ? {
- // ...item,
- // selected: action.route === item.route
- // } : item.Subitems && Array.isArray(item.Subitems) ? {
- // ...item,
- // Subitems: item.Subitems.map((subitem) => {
- // const updatedSubitem = subitem.type === "page" ? {
- // ...subitem,
- // selected: action.route === subitem.route
- // } : subitem.Subitems && Array.isArray(subitem.Subitems) ? {
- // ...subitem,
- // Subitems: subitem.Subitems.map((secondSubItem) => ({
- // ...secondSubItem,
- // selected: secondSubItem.route === action.route
- // })),
- // showSubitems: subitem.Subitems.some((secondSubItem) => secondSubItem.route === action.route),
- // } : subitem;
- //
- // console.log("Updated subitem:", updatedSubitem); // Log the updated subitem
- // return updatedSubitem;
- // }),
- // showSubitems: item.Subitems.some((subitem) => subitem.showSubitems),
- // } : item
- // });
+ switch (action.type) {
+ case "COLLAPSE_MENU":
+ return state.map((item) =>
+ action.id == item.id
+ ? {
+ ...item,
+ showSubitems: !item.showSubitems,
+ }
+ : item
+ );
+ case "COLLAPSE_SUB_ITEMS":
+ return state.map((item) => {
+ return item.hasSubitems
+ ? {
+ ...item,
+ Subitems: item.Subitems.map((subitem) =>
+ action.id === subitem.id
+ ? {
+ ...subitem,
+ showSubitems: !subitem.showSubitems,
+ }
+ : subitem
+ ),
+ }
+ : item;
+ });
+ case "COLLAPSE_SUB_SECOND_ITEMS":
+ return state.map((item) => {
+ return item.hasSubitems
+ ? {
+ ...item,
+ Subitems: item.Subitems.map((subitem) => {
+ return subitem.hasSubitems
+ ? {
+ ...subitem,
+ Subitems: subitem.Subitems.map((secondSubitem) =>
+ action.id === secondSubitem.id
+ ? {
+ ...secondSubitem,
+ showSubitems: !secondSubitem.showSubitems,
+ }
+ : secondSubitem
+ ),
+ }
+ : subitem;
+ }),
+ }
+ : item;
+ });
+ case "SELECTED":
+ return state.map((item) => {
+ return item.type === "page"
+ ? {
+ ...item,
+ selected: action.route === item.route,
+ showSubitems: item.route === action.route,
+ }
+ : item.Subitems && Array.isArray(item.Subitems)
+ ? {
+ ...item,
+ Subitems: item.Subitems.map((subitem) => {
+ return subitem.type === "page"
+ ? {
+ ...subitem,
+ selected: action.route === subitem.route,
+ showSubitems: subitem.route === action.route,
+ }
+ : subitem.Subitems && Array.isArray(subitem.Subitems)
+ ? {
+ ...subitem,
+ Subitems: subitem.Subitems.map((secondSubItem) => ({
+ ...secondSubItem,
+ selected: secondSubItem.route === action.route,
+ })),
+ showSubitems: subitem.Subitems.some(
+ (secondSubItem) => secondSubItem.route === action.route
+ ),
+ }
+ : subitem;
+ }),
+ showSubitems: item.Subitems.some(
+ (subitem) => subitem.showSubitems
+ ),
+ }
+ : item;
+ });
-
- default:
- throw new Error();
- }
+ default:
+ throw new Error();
+ }
}
const SidebarMenu = () => {
- const [menuItems, dispatch] = useReducer(reducer, data);
- const pathname = usePathname()
- const [selectedKey, setSelectedKey] = useState(null);
- useEffect(() => {
- dispatch({type: "SELECTED", route: pathname});
- setSelectedKey(pathname);
- }, [pathname]);
+ const [menuItems, dispatch] = useReducer(reducer, pageMenu);
+ const pathname = usePathname();
+ const [selectedKey, setSelectedKey] = useState(null);
+ useEffect(() => {
+ dispatch({ type: "SELECTED", route: pathname });
+ setSelectedKey(pathname);
+ }, [pathname]);
- useEffect(() => {
- selectedKey && document.querySelector(`[data-route="${selectedKey}"]`)?.scrollIntoView({
- behavior: "smooth", block: "center"
- });
- }, [selectedKey]);
+ useEffect(() => {
+ selectedKey &&
+ document.querySelector(`[data-route="${selectedKey}"]`)?.scrollIntoView({
+ behavior: "smooth",
+ block: "center",
+ });
+ }, [selectedKey]);
- return (
-
- {
- menuItems.map((menuItem) => {
- return (
-
- )
- })
- }
-
- )
-}
-export default SidebarMenu
\ No newline at end of file
+ return (
+
+ {menuItems.map((menuItem) => {
+ return (
+
+ );
+ })}
+
+ );
+};
+export default SidebarMenu;
diff --git a/src/core/components/SidebarSubitems.jsx b/src/core/components/SidebarSubitems.jsx
index 275befb..b54d3a9 100644
--- a/src/core/components/SidebarSubitems.jsx
+++ b/src/core/components/SidebarSubitems.jsx
@@ -1,74 +1,75 @@
-import {Collapse, List, ListItem, ListItemButton, ListItemIcon, ListItemText} from "@mui/material";
-import {ExpandLess, ExpandMore} from "@mui/icons-material";
+import { ExpandLess, ExpandMore } from "@mui/icons-material";
+import {
+ Collapse,
+ List,
+ ListItem,
+ ListItemButton,
+ ListItemIcon,
+ ListItemText,
+} from "@mui/material";
+import Link from "next/link";
-const SidebarSubitems = ({subitem, dispatch}) => {
- return (
- <>
-
-
- {
- dispatch({type: "COLLAPSE_SUB_ITEMS", id: subitem.id})
- }}>
-
- {subitem.icon}
-
-
- {subitem.hasSubitems ? (subitem.showSubitems ? : ) : null
- }
-
-
-
- {
- subitem.hasSubitems ? (subitem.Subitems.map((subSubitem, index) => {
- return (
-
-
-
- {
- dispatch({type: "COLLAPSE_SUB_SECOND_ITEMS", id: subSubitem.id})
- }}
- selected={subSubitem.selected}
- sx={{
- '&.Mui-selected': {
- backgroundColor: 'rgba(0, 0, 0, 0.05)',
- },
- }}
- >
-
- {subSubitem.icon}
-
-
-
-
-
-
- )
- })) : null
- }
- >
- )
-}
-export default SidebarSubitems
\ No newline at end of file
+const SidebarSubitems = ({ subitem, dispatch }) => {
+ return (
+ <>
+
+ {
+ dispatch({ type: "COLLAPSE_SUB_ITEMS", id: subitem.id });
+ }}
+ >
+
+ {subitem.icon}
+
+
+ {subitem.hasSubitems ? (
+ subitem.showSubitems ? (
+
+ ) : (
+
+ )
+ ) : null}
+
+
+
+ {subitem.hasSubitems ? (
+
+ {subitem.Subitems.map((subSubitem, index) => {
+ return (
+
+ );
+ })}
+
+ ) : null}
+
+ >
+ );
+};
+export default SidebarSubitems;
diff --git a/src/core/utils/pageMenu.js b/src/core/utils/pageMenu.js
new file mode 100644
index 0000000..b97199a
--- /dev/null
+++ b/src/core/utils/pageMenu.js
@@ -0,0 +1,386 @@
+import { AirlineSeatReclineNormal, Assessment, Repartition, Security, SpaceDashboard } from "@mui/icons-material";
+
+export const pageMenu = [
+ {
+ id: 'dashboard',
+ label: 'پیشخوان',
+ type: "page",
+ route: "/dashboard",
+ icon: ,
+ },
+ {
+ id: 'userManagement',
+ label: 'مدیریت کاربران',
+ type: "page",
+ route: "./v2/user_management",
+ icon: ,
+ },
+ {
+ id: 'projectsManagment',
+ label: 'پروژه های راهداری',
+ type: "menu",
+ icon: ,
+ hasSubitems: true,
+ Subitems: [
+ {
+ id: 'projectsManagmentFinance',
+ label: 'ثبت قرارداد و پروژه',
+ type: "page",
+ route: "./v2/rahdari_projects/finance",
+ icon: ,
+ },
+ {
+ id: 'projectsManagmentList',
+ label: 'لیست پروژه ها',
+ type: "page",
+ route: "./v2/rahdari_projects/projects_list",
+ icon: ,
+ },
+ {
+ id: 'projectsManagmentProposal',
+ label: 'پروژه های پیشنهادی',
+ type: "page",
+ route: "./v2/rahdari_projects/proposal",
+ icon: ,
+ },
+ {
+ id: 'projectsManagmentLawmaker',
+ label: 'درخواست نمایندگان',
+ type: "page",
+ route: "./v2/rahdari_projects/lawmakers",
+ icon: ,
+ },
+ {
+ id: 'projectsManagmentMap',
+ label: 'پراکندگی بر روی نقشه',
+ type: "page",
+ route: "./v2/map?type=rahdari_projects",
+ icon: ,
+ },
+ ]
+ },
+ {
+ id: 'roadItemManagment',
+ label: 'فعالیت های روزانه',
+ type: "menu",
+ icon: ,
+ hasSubitems: true,
+ Subitems: [
+ {
+ id: 'roadItemManagmentSupervisor',
+ label: 'ارزیابی',
+ type: "menu",
+ icon: ,
+ hasSubitems: true,
+ Subitems: [
+ {
+ id: 'roadItemManagmentSupervisorCartable',
+ label: 'کارتابل',
+ type: "page",
+ route: "./v2/road_items/supervisor/cartable",
+ },
+ ]
+ },
+ {
+ id: 'roadItemManagmentOparation',
+ label: 'عملیات',
+ type: "menu",
+ icon: ,
+ hasSubitems: true,
+ Subitems: [
+ {
+ id: 'roadItemManagmentOparationCreate',
+ label: 'ثبت فعالیت',
+ type: "page",
+ route: "./v2/road_items/operator/create",
+ },
+ {
+ id: 'roadItemManagmentOparationCartable',
+ label: 'کارتابل',
+ type: "page",
+ route: "./v2/road_items/operator/cartable",
+ },
+ ]
+ },
+ {
+ id: 'roadItemManagmentMap',
+ label: 'پراکندگی بر روی نقشه',
+ type: "page",
+ route: "./v2/map?type=road_items",
+ icon: ,
+ },
+ {
+ id: 'roadItemManagmentReport',
+ label: 'گزارش ها',
+ type: "page",
+ route: "./v2/road_items/report",
+ icon: ,
+ },
+ ]
+ },
+ {
+ id: 'roadPatrolManagment',
+ label: 'گشت راهداری و ترابری',
+ type: "menu",
+ icon: ,
+ hasSubitems: true,
+ Subitems: [
+ {
+ id: 'roadPatrolManagmentSupervisor',
+ label: 'ارزیابی',
+ type: "menu",
+ icon: ,
+ hasSubitems: true,
+ Subitems: [
+ {
+ id: 'roadPatrolManagmentSupervisorCartable',
+ label: 'کارتابل',
+ type: "page",
+ route: "./road_patrols/supervisor/cartable",
+ },
+ ]
+ },
+ {
+ id: 'roadPatrolManagmentOparation',
+ label: 'عملیات',
+ type: "menu",
+ icon: ,
+ hasSubitems: true,
+ Subitems: [
+ {
+ id: 'roadPatrolManagmentOparationCreate',
+ label: 'ثبت اقدام',
+ type: "page",
+ route: "./v2/road_patrols/operator/create",
+ },
+ {
+ id: 'roadPatrolManagmentOparationCartable',
+ label: 'کارتابل',
+ type: "page",
+ route: "./v2/road_patrols/operator/cartable",
+ },
+ ]
+ },
+ {
+ id: 'roadPatrolManagmentMap',
+ label: 'پراکندگی بر روی نقشه',
+ type: "page",
+ route: "./v2/map?type=road_patrols",
+ icon: ,
+ },
+ {
+ id: 'roadPatrolManagmentReport',
+ label: 'گزارش ها',
+ type: "page",
+ route: "./v2/road_patrols/report",
+ icon: ,
+ },
+ ]
+ },
+ {
+ id: 'safetyAndPrivacyManagment',
+ label: 'نگهداری حریم راه',
+ type: "menu",
+ icon: ,
+ hasSubitems: true,
+ Subitems: [
+ {
+ id: 'safetyAndPrivacyManagmentOparation',
+ label: 'عملیات',
+ type: "menu",
+ icon: ,
+ hasSubitems: true,
+ Subitems: [
+ {
+ id: 'safetyAndPrivacyManagmentOparationCreate',
+ label: 'ثبت فعالیت',
+ type: "page",
+ route: "./safety_and_privacy/operator/first_step",
+ },
+ {
+ id: 'safetyAndPrivacyManagmentOparationCartable',
+ label: 'کارتابل',
+ type: "page",
+ route: "./v2/safety_and_privacy/operator/cartable",
+ },
+ ]
+ },
+ {
+ id: 'safetyAndPrivacyManagmentMap',
+ label: 'پراکندگی بر روی نقشه',
+ type: "page",
+ route: "./v2/map?type=safety_and_privacy",
+ icon: ,
+ },
+ {
+ id: 'safetyAndPrivacyManagmentReport',
+ label: 'گزارش ها',
+ type: "page",
+ route: "./v2/safety_and_privacy/report",
+ icon: ,
+ },
+ ]
+ },
+ {
+ id: 'roadObservationsManagment',
+ label: 'واکنش سریع',
+ type: "menu",
+ icon: ,
+ hasSubitems: true,
+ Subitems: [
+ {
+ id: 'roadObservationsManagmentSupervisor',
+ label: 'ارزیابی',
+ type: "menu",
+ icon: ,
+ hasSubitems: true,
+ Subitems: [
+ {
+ id: 'roadObservationsManagmentSupervisorCartable',
+ label: 'کارتابل',
+ type: "page",
+ route: "./v2/road_observations/supervisor/cartable",
+ },
+ ]
+ },
+ {
+ id: 'roadObservationsManagmentList',
+ label: 'رسیدگی به شکایات',
+ type: "page",
+ route: "./v2/road_observations",
+ icon: ,
+ },
+ {
+ id: 'roadObservationsManagmentOparation',
+ label: 'عملیات',
+ type: "menu",
+ icon: ,
+ hasSubitems: true,
+ Subitems: [
+ {
+ id: 'roadObservationsManagmentOparationCartable',
+ label: 'کارتابل',
+ type: "page",
+ route: "./v2/road_observations/operator/cartable",
+ },
+ ]
+ },
+ {
+ id: 'roadObservationsManagmentMap',
+ label: 'پراکندگی بر روی نقشه',
+ type: "page",
+ route: "./v2/map?type=road_observations",
+ icon: ,
+ },
+ {
+ id: 'roadObservationsManagmentReport',
+ label: 'گزارش ها',
+ type: "page",
+ route: "./v2/road_observations/report/index",
+ icon: ,
+ },
+ ]
+ },
+ {
+ id: 'winterCampManagment',
+ label: 'قرارگاه زمستانی',
+ type: "menu",
+ icon: ,
+ hasSubitems: true,
+ Subitems: [
+ {
+ id: 'winterCampManagmentBlocking',
+ label: 'محور های انسدادی',
+ type: "page",
+ route: "./v2/winter_camp",
+ icon: ,
+ },
+ {
+ id: 'winterCampManagmentFirstRing',
+ label: 'محور های حلقه اول',
+ type: "page",
+ route: "./v2/map?type=camp",
+ icon: ,
+ },
+ {
+ id: 'winterCampManagmentReport',
+ label: 'گزارش ها',
+ type: "page",
+ route: "./v2/map?type=campNew",
+ icon: ,
+ },
+ ]
+ },
+ {
+ id: 'receiptManagment',
+ label: 'خسارات وارده بر ابنیه فنی و تاسیسات راه',
+ type: "menu",
+ icon: ,
+ hasSubitems: true,
+ Subitems: [
+ {
+ id: 'receiptManagmentOparation',
+ label: 'عملیات',
+ type: "menu",
+ icon: ,
+ hasSubitems: true,
+ Subitems: [
+ {
+ id: 'receiptManagmentOparationCartable',
+ label: 'کارتابل',
+ type: "page",
+ route: "./v2/receipt",
+ },
+ ]
+ },
+ {
+ id: 'receiptManagmentReport',
+ label: 'گزارش ها',
+ type: "page",
+ route: "./v2/receipt/report",
+ icon: ,
+ },
+ ]
+ }
+ // {
+ // id: "hello",
+ // type: "menu",
+ // route: "/hello",
+ // icon: ,
+ // selected: false,
+ // Subitems: [
+ // {
+ // id: "amin",
+ // route: "/s",
+ // icon: ,
+ // firstName: "amin",
+ // lastName: "ali",
+ // Subitems: [
+ // {
+ // id: "shahrokh", shahrokh: "shahrokh", type: "page", selected: false, route: "/dashbssoard", icon:
+ // },
+ // {
+ // id: "shasdasdsahrokh", shahrokh: "shahroasdasdkh", type: "page", selected: false, route: "/dashboardsd", icon:
+ // }
+ // ],
+ // hasSubitems: true,
+ // showSubitems: false,
+ // type: "menu",
+ // selected: false,
+ // },
+ // {
+ // id: "amir",
+ // route: "/dashboarsad",
+ // icon: ,
+ // firstName: "amir",
+ // lastName: "akbar",
+ // hasSubitems: false,
+ // showSubitems: false,
+ // selected: false,
+ // type: "page",
+ // },
+ // ],
+ // hasSubitems: true,
+ // showSubitems: false
+ // },
+]
\ No newline at end of file
diff --git a/src/core/utils/theme.js b/src/core/utils/theme.js
index d96fc53..581e23e 100644
--- a/src/core/utils/theme.js
+++ b/src/core/utils/theme.js
@@ -1,5 +1,5 @@
'use client'
-import {createTheme} from "@mui/material";
+import { createTheme } from "@mui/material";
const theme = createTheme({
direction: 'rtl',
@@ -7,6 +7,16 @@ const theme = createTheme({
fontFamily: `IRANSansFaNum, sans-serif`,
fontSize: 12
},
+ palette: {
+ primary: {
+ main: '#2070af',
+ contrastText: '#fff'
+ },
+ primary2: {
+ main: '#015688',
+ contrastText: '#fff'
+ },
+ }
});
export default theme
\ No newline at end of file