From 9fccf770d51d9a526199787e26dc54e4929b5da6 Mon Sep 17 00:00:00 2001 From: Mohammad Jalali Date: Sun, 15 Dec 2024 18:27:27 +0330 Subject: [PATCH] work on phone validation part and complete structure with timeline --- .../dashboard/road-patrols/operator/page.js | 2 +- .../operator/Actions/Create/index.jsx | 33 +++++ .../roadPatrols/operator/ExcelPrint/index.jsx | 26 ++-- .../Forms/CreatePatrol/PatrolForms.jsx | 80 +++++++++++ .../Forms/CreatePatrol/PatrolTimeLine.jsx | 122 ++++++++++++++++ .../Forms/CreatePatrol/PhoneValidation.jsx | 130 ++++++++++++++++++ .../operator/Forms/CreatePatrol/index.jsx | 17 +++ .../roadPatrols/operator/Toolbar.jsx | 11 +- .../dashboard/roadPatrols/operator/index.jsx | 8 +- .../roadPatrols/supervisor/SupervisorList.jsx | 28 ++-- .../roadPatrols/supervisor/index.jsx | 8 +- src/core/utils/pageMenu.js | 87 ++++++------ src/core/utils/routes.js | 1 + 13 files changed, 466 insertions(+), 87 deletions(-) create mode 100644 src/components/dashboard/roadPatrols/operator/Actions/Create/index.jsx create mode 100644 src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/PatrolForms.jsx create mode 100644 src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/PatrolTimeLine.jsx create mode 100644 src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/PhoneValidation.jsx create mode 100644 src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/index.jsx diff --git a/src/app/(withAuth)/dashboard/road-patrols/operator/page.js b/src/app/(withAuth)/dashboard/road-patrols/operator/page.js index 73fa9cf..ce319b9 100644 --- a/src/app/(withAuth)/dashboard/road-patrols/operator/page.js +++ b/src/app/(withAuth)/dashboard/road-patrols/operator/page.js @@ -4,7 +4,7 @@ import OperatorPage from "@/components/dashboard/roadPatrols/operator"; const Page = () => { return ( - + ); }; diff --git a/src/components/dashboard/roadPatrols/operator/Actions/Create/index.jsx b/src/components/dashboard/roadPatrols/operator/Actions/Create/index.jsx new file mode 100644 index 0000000..63347f0 --- /dev/null +++ b/src/components/dashboard/roadPatrols/operator/Actions/Create/index.jsx @@ -0,0 +1,33 @@ +"use client"; + +import {Button, IconButton, useMediaQuery} from "@mui/material"; +import {useTheme} from "@emotion/react"; +import {useState} from "react"; +import {AddCircle} from "@mui/icons-material"; +import CreatePatrol from "../../Forms/CreatePatrol"; + +const OperatorCreate = ({mutate}) => { + const theme = useTheme(); + const isMobile = useMediaQuery(theme.breakpoints.down("sm")); + const [open, setOpen] = useState(false); + + const handleOpen = () => { + setOpen(true); + }; + + return ( + <> + {isMobile ? ( + + + + ) : ( + + )} + {open && } + + ); +}; +export default OperatorCreate; diff --git a/src/components/dashboard/roadPatrols/operator/ExcelPrint/index.jsx b/src/components/dashboard/roadPatrols/operator/ExcelPrint/index.jsx index 8fdc753..9148331 100644 --- a/src/components/dashboard/roadPatrols/operator/ExcelPrint/index.jsx +++ b/src/components/dashboard/roadPatrols/operator/ExcelPrint/index.jsx @@ -1,18 +1,18 @@ -import { Button, CircularProgress } from "@mui/material"; -import { useMemo, useState } from "react"; +import {Button, CircularProgress} from "@mui/material"; +import {useMemo, useState} from "react"; import moment from "jalali-moment"; import FileSaver from "file-saver"; import DescriptionIcon from "@mui/icons-material/Description"; import useRequest from "@/lib/hooks/useRequest"; -import { EXPORT_OPERATOR_LIST } from "@/core/utils/routes"; +import {EXPORT_OPERATOR_LIST} from "@/core/utils/routes"; -const PrintExcel = ({ table, filterData }) => { +const PrintExcel = ({table, filterData}) => { const [loading, setLoading] = useState(false); const requestServer = useRequest(); const activeFilters = Object.entries(filterData).reduce((acc, [key, filter]) => { if (filter.value) { // Check if there's an active filter - acc.push({ id: key, value: filter.value }); + acc.push({id: key, value: filter.value}); } return acc; }, []); @@ -20,22 +20,23 @@ const PrintExcel = ({ table, filterData }) => { const filterParams = useMemo(() => { const params = new URLSearchParams(); activeFilters.length > 0 && - activeFilters.map((filter, index) => { - params.set(`${filter.id}`, filter.value); - }); + activeFilters.map((filter, index) => { + params.set(`${filter.id}`, filter.value); + }); return params; }, [activeFilters]); const clickHandler = () => { setLoading(true); requestServer(`${EXPORT_OPERATOR_LIST}?${filterParams}`, "get", { - requestOptions: { responseType: "blob" }, + requestOptions: {responseType: "blob"}, }) .then((response) => { const filename = `خروجی کارتابل عملیات تاریخ_${moment().format("jYYYY_jMM_jDD")}.xlsx`; FileSaver.saveAs(response.data, filename); }) - .catch(() => {}) + .catch(() => { + }) .finally(() => { setLoading(false); }); @@ -45,10 +46,9 @@ const PrintExcel = ({ table, filterData }) => { + + + + + کد پیامک شده + + + + + + + ); +}; + +export default PhoneValidation; \ No newline at end of file diff --git a/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/index.jsx b/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/index.jsx new file mode 100644 index 0000000..46eac78 --- /dev/null +++ b/src/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/index.jsx @@ -0,0 +1,17 @@ +"use client"; + +import {Dialog} from "@mui/material"; +import PatrolForms from "@/components/dashboard/roadPatrols/operator/Forms/CreatePatrol/PatrolForms"; + +const CreatePatrol = ({open, setOpen, mutate, rowId}) => { + return ( + + + + ); +}; +export default CreatePatrol; diff --git a/src/components/dashboard/roadPatrols/operator/Toolbar.jsx b/src/components/dashboard/roadPatrols/operator/Toolbar.jsx index 32c4395..f652e04 100644 --- a/src/components/dashboard/roadPatrols/operator/Toolbar.jsx +++ b/src/components/dashboard/roadPatrols/operator/Toolbar.jsx @@ -1,10 +1,13 @@ import PrintExcel from "./ExcelPrint"; +import OperatorCreate from "./Actions/Create"; +import {Box} from "@mui/material"; -const Toolbar = ({ table, filterData }) => { +const Toolbar = ({table, filterData, mutate}) => { return ( - <> - - + + + + ); }; export default Toolbar; diff --git a/src/components/dashboard/roadPatrols/operator/index.jsx b/src/components/dashboard/roadPatrols/operator/index.jsx index 7835954..dcf34af 100644 --- a/src/components/dashboard/roadPatrols/operator/index.jsx +++ b/src/components/dashboard/roadPatrols/operator/index.jsx @@ -1,13 +1,13 @@ "use client"; import PageTitle from "@/core/components/PageTitle"; -import { Stack } from "@mui/material"; -import OperatorList from "@/components/dashboard/roadPatrols/operator/OperatorList"; +import {Stack} from "@mui/material"; +import OperatorList from "./OperatorList"; const OperatorPage = () => { return ( - - + + ); }; diff --git a/src/components/dashboard/roadPatrols/supervisor/SupervisorList.jsx b/src/components/dashboard/roadPatrols/supervisor/SupervisorList.jsx index d568c46..9478939 100644 --- a/src/components/dashboard/roadPatrols/supervisor/SupervisorList.jsx +++ b/src/components/dashboard/roadPatrols/supervisor/SupervisorList.jsx @@ -1,15 +1,15 @@ "use client"; -import { useMemo } from "react"; -import { Box, Typography } from "@mui/material"; +import {useMemo} from "react"; +import {Box, Typography} from "@mui/material"; import DataTableWithAuth from "@/core/components/DataTableWithAuth"; import Toolbar from "./Toolbar"; -import { GET_SUPERVISOR_LIST } from "@/core/utils/routes"; +import {GET_SUPERVISOR_LIST} from "@/core/utils/routes"; import moment from "jalali-moment"; import RowActions from "./RowActions"; import useProvinces from "@/lib/hooks/useProvince"; -const OperatorList = () => { - const { provinces, errorProvinces, loadingProvinces } = useProvinces(); +const SuperviserList = () => { + const {provinces, errorProvinces, loadingProvinces} = useProvinces(); const citiesListApi = "https://rms.rmto.ir/public/contents/edarate_shahri_by_province"; const columns = useMemo( () => [ @@ -31,11 +31,11 @@ const OperatorList = () => { filterFn: "equals", columnSelectOption: () => { if (loadingProvinces) { - return [{ value: "", label: "در حال بارگذاری..." }]; + return [{value: "", label: "در حال بارگذاری..."}]; } if (errorProvinces) { - return [{ value: "", label: "خطا در بارگذاری" }]; + return [{value: "", label: "خطا در بارگذاری"}]; } return provinces.map((province) => ({ @@ -54,10 +54,10 @@ const OperatorList = () => { dependencyId: "province", columnSelectOption: (dependencyField) => { if (dependencyField.value === "") { - return [{ value: "", label: "ابتدا استان را انتخاب کنید" }]; + return [{value: "", label: "ابتدا استان را انتخاب کنید"}]; } - return [{ value: dependencyField.value, label: dependencyField.value }]; + return [{value: dependencyField.value, label: dependencyField.value}]; }, }, { @@ -95,7 +95,7 @@ const OperatorList = () => { datatype: "date", filterFn: "equals", columnFilterModeOptions: ["equals", "contains"], - Cell: ({ renderedCellValue }) => ( + Cell: ({renderedCellValue}) => ( {renderedCellValue ? moment(renderedCellValue).locale("fa").format("YYYY/MM/DD") : "-"} @@ -109,7 +109,7 @@ const OperatorList = () => { datatype: "date", filterFn: "equals", columnFilterModeOptions: ["equals", "contains"], - Cell: ({ renderedCellValue }) => ( + Cell: ({renderedCellValue}) => ( {renderedCellValue ? moment(renderedCellValue).locale("fa").format("YYYY/MM/DD") : "-"} @@ -123,7 +123,7 @@ const OperatorList = () => { datatype: "date", filterFn: "equals", columnFilterModeOptions: ["equals", "contains"], - Cell: ({ renderedCellValue }) => ( + Cell: ({renderedCellValue}) => ( {renderedCellValue ? moment(renderedCellValue).locale("fa").format("YYYY/MM/DD") : "-"} @@ -135,7 +135,7 @@ const OperatorList = () => { return ( <> - + { ); }; -export default OperatorList; +export default SuperviserList; diff --git a/src/components/dashboard/roadPatrols/supervisor/index.jsx b/src/components/dashboard/roadPatrols/supervisor/index.jsx index 3fa490b..5e2001d 100644 --- a/src/components/dashboard/roadPatrols/supervisor/index.jsx +++ b/src/components/dashboard/roadPatrols/supervisor/index.jsx @@ -1,13 +1,13 @@ "use client"; import PageTitle from "@/core/components/PageTitle"; -import { Stack } from "@mui/material"; -import SupervisorList from "./SupervisorList"; +import {Stack} from "@mui/material"; +import SuperviserList from "./SupervisorList"; const SupervisorPage = () => { return ( - - + + ); }; diff --git a/src/core/utils/pageMenu.js b/src/core/utils/pageMenu.js index 6000f64..5fd062d 100644 --- a/src/core/utils/pageMenu.js +++ b/src/core/utils/pageMenu.js @@ -28,7 +28,7 @@ export const pageMenu = [ label: "پیشخوان", type: "page", route: "/dashboard", - icon: , + icon: , permissions: ["all"], }, { @@ -36,14 +36,14 @@ export const pageMenu = [ label: "مدیریت کاربران", type: "page", route: process.env.NEXT_PUBLIC_API_URL + "/v2/user_management", - icon: , + icon: , permissions: ["full-user-management", "limited-user-management"], }, { id: "projectsManagment", label: "پروژه های راهداری", type: "menu", - icon: , + icon: , hasSubitems: true, Subitems: [ { @@ -51,7 +51,7 @@ export const pageMenu = [ label: "ثبت قرارداد و پروژه", type: "page", route: process.env.NEXT_PUBLIC_API_URL + "/v2/rahdari_projects/finance", - icon: , + icon: , permissions: ["show-contract", "show-contract-province"], }, { @@ -59,7 +59,7 @@ export const pageMenu = [ label: "لیست پروژه ها", type: "page", route: process.env.NEXT_PUBLIC_API_URL + "/v2/rahdari_projects/projects_list", - icon: , + icon: , permissions: ["all"], }, { @@ -67,7 +67,7 @@ export const pageMenu = [ label: "پروژه های پیشنهادی", type: "page", route: process.env.NEXT_PUBLIC_API_URL + "/v2/rahdari_projects/proposal", - icon: , + icon: , permissions: ["show-proposal", "show-proposal-province"], }, { @@ -75,7 +75,7 @@ export const pageMenu = [ label: "درخواست نمایندگان", type: "page", route: process.env.NEXT_PUBLIC_API_URL + "/v2/rahdari_projects/lawmakers", - icon: , + icon: , permissions: ["show-lawmaker", "show-lawmaker-province"], }, { @@ -83,7 +83,7 @@ export const pageMenu = [ label: "پراکندگی بر روی نقشه", type: "page", route: process.env.NEXT_PUBLIC_API_URL + "/v2/map?type=rahdari_projects", - icon: , + icon: , permissions: ["all"], }, ], @@ -92,7 +92,7 @@ export const pageMenu = [ id: "roadItemManagment", label: "فعالیت های روزانه", type: "menu", - icon: , + icon: , hasSubitems: true, badges: ["road_items.total"], Subitems: [ @@ -100,7 +100,7 @@ export const pageMenu = [ id: "roadItemManagmentSupervisor", label: "ارزیابی", type: "menu", - icon: , + icon: , hasSubitems: true, badges: ["road_items.supervise_cnt"], Subitems: [ @@ -120,7 +120,7 @@ export const pageMenu = [ id: "roadItemManagmentOparation", label: "عملیات", type: "menu", - icon: , + icon: , hasSubitems: true, badges: ["road_items.operation_cnt"], Subitems: [ @@ -145,7 +145,7 @@ export const pageMenu = [ label: "پراکندگی بر روی نقشه", type: "page", route: process.env.NEXT_PUBLIC_API_URL + "/v2/map?type=road_items", - icon: , + icon: , permissions: [ "show-road-item-supervise-cartable", "show-road-item-supervise-cartable-province", @@ -157,7 +157,7 @@ export const pageMenu = [ label: "گزارش ها", type: "page", route: process.env.NEXT_PUBLIC_API_URL + "/v2/road_items/report", - icon: , + icon: , permissions: [ "show-road-item-supervise-cartable", "show-road-item-supervise-cartable-province", @@ -170,7 +170,7 @@ export const pageMenu = [ id: "roadPatrolManagment", label: "گشت راهداری و ترابری", type: "menu", - icon: , + icon: , hasSubitems: true, badges: ["road_patrols.total"], Subitems: [ @@ -178,7 +178,7 @@ export const pageMenu = [ id: "roadPatrolManagmentSupervisor", label: "ارزیابی", type: "menu", - icon: , + icon: , hasSubitems: true, badges: ["road_patrols.supervise_cnt"], Subitems: [ @@ -198,22 +198,15 @@ export const pageMenu = [ id: "roadPatrolManagmentOparation", label: "عملیات", type: "menu", - icon: , + icon: , hasSubitems: true, badges: ["road_patrols.operation_cnt"], Subitems: [ - { - id: "roadPatrolManagmentOparationCreate", - label: "ثبت اقدام", - type: "page", - route: process.env.NEXT_PUBLIC_API_URL + "/v2/road_patrols/operator/create", - permissions: ["add-road-patrol"], - }, { id: "roadPatrolManagmentOparationCartable", label: "کارتابل", type: "page", - route: process.env.NEXT_PUBLIC_API_URL + "/v2/road_patrols/operator/cartable", + route: "/dashboard/road-patrols/operator", permissions: ["add-road-patrol"], }, ], @@ -223,7 +216,7 @@ export const pageMenu = [ label: "پراکندگی بر روی نقشه", type: "page", route: process.env.NEXT_PUBLIC_API_URL + "/v2/map?type=road_patrols", - icon: , + icon: , permissions: [ "add-road-patrol", "show-road-patrol-supervise-cartable", @@ -235,7 +228,7 @@ export const pageMenu = [ label: "گزارش ها", type: "page", route: process.env.NEXT_PUBLIC_API_URL + "/v2/road_patrols/report", - icon: , + icon: , permissions: [ "add-road-patrol", "show-road-patrol-supervise-cartable", @@ -248,7 +241,7 @@ export const pageMenu = [ id: "inquiryPrivacyManagment", label: "استعلام حریم راه", type: "menu", - icon: , + icon: , hasSubitems: true, Subitems: [ { @@ -285,7 +278,7 @@ export const pageMenu = [ id: "safetyAndPrivacyManagment", label: "نگهداری حریم راه", type: "menu", - icon: , + icon: , hasSubitems: true, badges: ["safety_and_privacy.step_one", "safety_and_privacy.step_two"], Subitems: [ @@ -293,7 +286,7 @@ export const pageMenu = [ id: "safetyAndPrivacyManagmentOparation", label: "عملیات", type: "menu", - icon: , + icon: , hasSubitems: true, Subitems: [ { @@ -321,7 +314,7 @@ export const pageMenu = [ label: "پراکندگی بر روی نقشه", type: "page", route: process.env.NEXT_PUBLIC_API_URL + "/v2/map?type=safety_and_privacy", - icon: , + icon: , permissions: [ "show-safety-and-privacy-operator-cartable", "show-safety-and-privacy-operator-cartable-province", @@ -334,7 +327,7 @@ export const pageMenu = [ label: "گزارش ها", type: "page", route: process.env.NEXT_PUBLIC_API_URL + "/v2/safety_and_privacy/report", - icon: , + icon: , permissions: [ "show-safety-and-privacy-operator-cartable", "show-safety-and-privacy-operator-cartable-province", @@ -348,7 +341,7 @@ export const pageMenu = [ id: "roadObservationsManagment", label: "واکنش سریع", type: "menu", - icon: , + icon: , hasSubitems: true, badges: ["road_observations.total"], Subitems: [ @@ -356,7 +349,7 @@ export const pageMenu = [ id: "roadObservationsManagmentSupervisor", label: "ارزیابی", type: "menu", - icon: , + icon: , hasSubitems: true, badges: ["road_observations.supervise_cnt"], Subitems: [ @@ -374,14 +367,14 @@ export const pageMenu = [ label: "رسیدگی به شکایات", type: "page", route: process.env.NEXT_PUBLIC_API_URL + "/v2/road_observations", - icon: , + icon: , permissions: ["show-fast-react", "show-fast-react-province", "show-fast-react-edarate-shahri"], }, { id: "roadObservationsManagmentOparation", label: "عملیات", type: "menu", - icon: , + icon: , hasSubitems: true, badges: ["road_observations.operation_cnt"], Subitems: [ @@ -399,7 +392,7 @@ export const pageMenu = [ label: "پراکندگی بر روی نقشه", type: "page", route: process.env.NEXT_PUBLIC_API_URL + "/v2/map?type=road_observations", - icon: , + icon: , permissions: ["all"], }, { @@ -407,7 +400,7 @@ export const pageMenu = [ label: "گزارش ها", type: "page", route: process.env.NEXT_PUBLIC_API_URL + "/v2/road_observations/report/index", - icon: , + icon: , permissions: ["all"], }, ], @@ -416,7 +409,7 @@ export const pageMenu = [ id: "winterCampManagment", label: "قرارگاه زمستانی", type: "menu", - icon: , + icon: , hasSubitems: true, Subitems: [ { @@ -424,7 +417,7 @@ export const pageMenu = [ label: "محور های انسدادی", type: "page", route: process.env.NEXT_PUBLIC_API_URL + "/v2/winter_camp", - icon: , + icon: , permissions: ["show-camp", "show-camp-province"], }, { @@ -432,7 +425,7 @@ export const pageMenu = [ label: "محور های حلقه اول", type: "page", route: process.env.NEXT_PUBLIC_API_URL + "/v2/map?type=camp", - icon: , + icon: , permissions: ["show-camp", "show-camp-province"], }, { @@ -440,7 +433,7 @@ export const pageMenu = [ label: "گزارش ها", type: "page", route: process.env.NEXT_PUBLIC_API_URL + "/v2/map?type=campNew", - icon: , + icon: , permissions: ["show-camp", "show-camp-province"], }, ], @@ -449,14 +442,14 @@ export const pageMenu = [ id: "receiptManagment", label: "خسارات وارده بر ابنیه فنی و تاسیسات راه", type: "menu", - icon: , + icon: , hasSubitems: true, Subitems: [ { id: "receiptManagmentOparation", label: "عملیات", type: "menu", - icon: , + icon: , hasSubitems: true, Subitems: [ { @@ -473,7 +466,7 @@ export const pageMenu = [ label: "گزارش ها", type: "page", route: process.env.NEXT_PUBLIC_API_URL + "/v2/receipt/report", - icon: , + icon: , permissions: ["all"], }, ], @@ -483,7 +476,7 @@ export const pageMenu = [ label: "آزمایشات (OPTS)", type: "page", route: "/dashboard/azmayesh", - icon: , + icon: , permissions: ["azmayesh-management"], }, { @@ -491,7 +484,7 @@ export const pageMenu = [ label: "نوع آزمایشات", type: "page", route: "/dashboard/azmayesh_type", - icon: , + icon: , permissions: ["azmayesh-type-management"], }, { @@ -499,7 +492,7 @@ export const pageMenu = [ label: "اطلاعات خودرو", type: "page", route: "/dashboard/car-details", - icon: , + icon: , permissions: [""], }, ]; diff --git a/src/core/utils/routes.js b/src/core/utils/routes.js index db24fd6..c9ee515 100644 --- a/src/core/utils/routes.js +++ b/src/core/utils/routes.js @@ -31,3 +31,4 @@ export const GET_OPERATOR_LIST = "/v3/api/fake-operator-list"; export const EXPORT_OPERATOR_LIST = "https://rms.rmto.ir/v2/road_patrols/operator/cartable/report"; export const GET_SUPERVISOR_LIST = "/v3/api/fake-supervisor-list"; export const EXPORT_SUPERVISOR_LIST = "https://rms.rmto.ir/v2/road_patrols/supervisor/cartable/report"; +export const GET_OTP_TOKEN = "https://rms.rmto.ir/v2/get_otp_token";