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