From 6288ac926c6f6f5ad9c89e87f18420e0df8ab02c Mon Sep 17 00:00:00 2001 From: Amirhossein Mahmoodi Date: Mon, 8 Jul 2024 15:45:39 +0330 Subject: [PATCH] update --- public/images/headerLogo.png | Bin 0 -> 12522 bytes public/images/rmsLogo.svg | 1 + src/app/default.js | 3 + src/app/page.js | 8 +- .../headerWithLogo/HaederBottom/index.jsx | 40 ++ .../headerWithLogo/HaederTop/index.jsx | 17 + .../dashboard/headerWithLogo/index.jsx | 18 +- .../headerWithSidebar/HeaderMenu/index.jsx | 4 + .../dashboard/headerWithSidebar/index.jsx | 186 +++++---- src/core/components/SidebarListItems.jsx | 119 ++++-- src/core/components/SidebarMenu.jsx | 315 ++++++-------- src/core/components/SidebarSubitems.jsx | 147 +++---- src/core/utils/pageMenu.js | 386 ++++++++++++++++++ src/core/utils/theme.js | 12 +- 14 files changed, 853 insertions(+), 403 deletions(-) create mode 100644 public/images/headerLogo.png create mode 100644 public/images/rmsLogo.svg create mode 100644 src/app/default.js create mode 100644 src/components/layouts/dashboard/headerWithLogo/HaederBottom/index.jsx create mode 100644 src/components/layouts/dashboard/headerWithLogo/HaederTop/index.jsx create mode 100644 src/components/layouts/dashboard/headerWithSidebar/HeaderMenu/index.jsx create mode 100644 src/core/utils/pageMenu.js diff --git a/public/images/headerLogo.png b/public/images/headerLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..86dbfcdec68e82cd257652da38e41f13e4464345 GIT binary patch literal 12522 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 AtN;K2 literal 0 HcmV?d00001 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