Feature/change any file
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
HOST="rms.witel.ir"
|
||||||
NEXT_PUBLIC_VERSION="0.14.0"
|
NEXT_PUBLIC_VERSION="0.14.0"
|
||||||
NEXT_PUBLIC_API_URL="https://rms.witel.ir"
|
NEXT_PUBLIC_API_URL="https://rms.witel.ir"
|
||||||
NEXT_PUBLIC_MAPTILE_ENDPOINT="https://rmsmap.rmto.ir/141map"
|
NEXT_PUBLIC_MAPTILE_ENDPOINT="https://rmsmap.rmto.ir/141map"
|
||||||
@@ -5,7 +5,7 @@ const nextConfig = {
|
|||||||
remotePatterns: [
|
remotePatterns: [
|
||||||
{
|
{
|
||||||
protocol: 'https',
|
protocol: 'https',
|
||||||
hostname: 'rms.witel.ir',
|
hostname: process.env.HOST,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
import TestPage from "@/components/dashboard/carDetails";
|
|
||||||
import WithPermission from "@/core/middlewares/withPermission";
|
|
||||||
|
|
||||||
const Page = () => {
|
|
||||||
return (
|
|
||||||
<WithPermission permission_name={[""]}>
|
|
||||||
<TestPage />
|
|
||||||
</WithPermission>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default Page;
|
|
||||||
@@ -1,180 +0,0 @@
|
|||||||
import { Button, Collapse, DialogActions, DialogContent, Grid, Stack, TextField } from "@mui/material";
|
|
||||||
import MuiDatePicker from "@/core/components/MuiDatePicker";
|
|
||||||
import { useFormik } from "formik";
|
|
||||||
import moment from "jalali-moment";
|
|
||||||
import * as Yup from "yup";
|
|
||||||
import { useState } from "react";
|
|
||||||
import ApplicantRequestDetail from "@/core/components/ApplicantRequestDetail";
|
|
||||||
import DetailMap from "@/core/components/ApplicantRequestDetail/DetailMap";
|
|
||||||
import FlyToPolyline from "@/core/components/ApplicantRequestDetail/FlyToPolyline";
|
|
||||||
import { MapContainer } from "react-leaflet";
|
|
||||||
import dynamic from "next/dynamic";
|
|
||||||
import MapLoading from "@/core/components/MapLayer/Loading";
|
|
||||||
const MapLayer = dynamic(() => import("@/core/components/MapLayer"), {
|
|
||||||
loading: () => <MapLoading />,
|
|
||||||
ssr: false,
|
|
||||||
});
|
|
||||||
|
|
||||||
const fakeData = {
|
|
||||||
id: 1,
|
|
||||||
shomareh_darkhast: "2124",
|
|
||||||
ostan: "ostan",
|
|
||||||
shahr: "shahr",
|
|
||||||
shahrestan: "shahrestan",
|
|
||||||
bakhsh: "bakhsh",
|
|
||||||
roosta: "roosta",
|
|
||||||
tarikh_darkhast: "tarikh_darkhast",
|
|
||||||
sazman: "sazman",
|
|
||||||
masahat_zamin: "masahat_zamin",
|
|
||||||
masahat_tarh: "masahat_tarh",
|
|
||||||
gorooh_tarh: "gorooh_tarh",
|
|
||||||
onvane_tarh: "onvane_tarh",
|
|
||||||
address: "کرج - فلان جا - جنب پاساژ - نزدیک اونجا - اونور خیابون - زیر رو گذر - روی زیر گذر",
|
|
||||||
file_mosavab: "file",
|
|
||||||
polyline: [
|
|
||||||
[35.6892, 51.389],
|
|
||||||
[35.7074, 51.3929],
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
const CarDetailsContent = ({ setOpenCarDialog }) => {
|
|
||||||
const [openCarDetailContent, setOpenCarDetailContent] = useState(false);
|
|
||||||
const initialValues = {
|
|
||||||
start_date: "",
|
|
||||||
end_date: "",
|
|
||||||
vehicle_code: "",
|
|
||||||
};
|
|
||||||
|
|
||||||
const validationSchema = Yup.object().shape({
|
|
||||||
start_date: Yup.string().required("تاریخ شروع الزامیست!!!"),
|
|
||||||
end_date: Yup.string()
|
|
||||||
.test("is-greater", "تاریخ اتمام نمیتواند کمتر از تاریخ شروع باشد", function (value) {
|
|
||||||
const { start_date } = this.parent; // Access other field values
|
|
||||||
if (!value || !start_date) return true; // Skip validation if either field is empty
|
|
||||||
return moment(value, "YYYY/MM/DD").isSameOrAfter(moment(start_date, "YYYY/MM/DD"));
|
|
||||||
})
|
|
||||||
.required("تاریخ اتمام الزامیست!!!"),
|
|
||||||
vehicle_code: Yup.mixed()
|
|
||||||
.test("is-number", "کد خودرو باید عدد باشد!!!", (value) => !isNaN(value))
|
|
||||||
.test("positive", "کد خودرو باید مثبت باشد!!!", (value) => value >= 0)
|
|
||||||
.required("کد خودرو الزامیست!!!"),
|
|
||||||
});
|
|
||||||
|
|
||||||
const handleSubmit = async (values, props) => {
|
|
||||||
props.setSubmitting(true);
|
|
||||||
setOpenCarDetailContent(true);
|
|
||||||
};
|
|
||||||
|
|
||||||
const formik = useFormik({
|
|
||||||
initialValues,
|
|
||||||
validationSchema,
|
|
||||||
onSubmit: handleSubmit,
|
|
||||||
});
|
|
||||||
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<DialogContent>
|
|
||||||
<Stack spacing={2} sx={{ my: 2 }}>
|
|
||||||
<Stack direction={"row"} spacing={2} sx={{ my: 2 }}>
|
|
||||||
<MuiDatePicker
|
|
||||||
formik={formik}
|
|
||||||
value={formik.values.start_date}
|
|
||||||
name={"start_date"}
|
|
||||||
error={formik.errors.start_date}
|
|
||||||
helperText={formik.touched.start_date && formik.errors.start_date}
|
|
||||||
touched={formik.touched.start_date}
|
|
||||||
onBlur={formik.handleBlur("start_date")}
|
|
||||||
/>
|
|
||||||
<MuiDatePicker
|
|
||||||
formik={formik}
|
|
||||||
name={"end_date"}
|
|
||||||
disabled={formik.values.start_date === ""}
|
|
||||||
value={formik.values.end_date}
|
|
||||||
error={formik.errors.end_date}
|
|
||||||
helperText={formik.touched.end_date && formik.errors.end_date}
|
|
||||||
touched={formik.touched.end_date}
|
|
||||||
onBlur={formik.handleBlur("end_date")}
|
|
||||||
/>
|
|
||||||
<TextField
|
|
||||||
name="vehicle_code"
|
|
||||||
label={"کد خودرو"}
|
|
||||||
type="text"
|
|
||||||
inputProps={{
|
|
||||||
inputMode: "number",
|
|
||||||
min: 0,
|
|
||||||
pattern: "[0-9]*",
|
|
||||||
}}
|
|
||||||
variant="outlined"
|
|
||||||
value={formik.values.vehicle_code}
|
|
||||||
onChange={(event) => {
|
|
||||||
if (!isNaN(event.target.value)) {
|
|
||||||
formik.setFieldValue("vehicle_code", event.target.value);
|
|
||||||
} else {
|
|
||||||
formik.setFieldValue("vehicle_code", formik.values.vehicle_code);
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
size={"small"}
|
|
||||||
error={formik.touched.vehicle_code && Boolean(formik.errors.vehicle_code)}
|
|
||||||
helperText={formik.touched.vehicle_code && formik.errors.vehicle_code}
|
|
||||||
onBlur={formik.handleBlur("vehicle_code")}
|
|
||||||
fullWidth
|
|
||||||
/>
|
|
||||||
</Stack>
|
|
||||||
<Stack>
|
|
||||||
<Button variant={"contained"} color={"primary"} onClick={formik.handleSubmit}>
|
|
||||||
نمایش اطلاعات
|
|
||||||
</Button>
|
|
||||||
</Stack>
|
|
||||||
</Stack>
|
|
||||||
<Grid container spacing={2}>
|
|
||||||
<Grid item xs={12} sm={4}>
|
|
||||||
<Stack
|
|
||||||
direction="column"
|
|
||||||
sx={{ height: "100%", justifyContent: "start", alignItems: "center" }}
|
|
||||||
spacing={5}
|
|
||||||
>
|
|
||||||
<TextField
|
|
||||||
name="vehicle_code"
|
|
||||||
label={"مصرف سوخت خودرو"}
|
|
||||||
disabled
|
|
||||||
variant="outlined"
|
|
||||||
value={"5 لیتر"}
|
|
||||||
size={"small"}
|
|
||||||
fullWidth
|
|
||||||
/>
|
|
||||||
<TextField
|
|
||||||
name="vehicle_code"
|
|
||||||
label={"مسافت پیموده شده"}
|
|
||||||
disabled
|
|
||||||
variant="outlined"
|
|
||||||
value={"54 کیلومتر"}
|
|
||||||
size={"small"}
|
|
||||||
fullWidth
|
|
||||||
/>
|
|
||||||
<TextField
|
|
||||||
name="vehicle_code"
|
|
||||||
label={"زمان روشن بودن خودرو"}
|
|
||||||
disabled
|
|
||||||
variant="outlined"
|
|
||||||
value={"3 ساعت"}
|
|
||||||
size={"small"}
|
|
||||||
fullWidth
|
|
||||||
/>
|
|
||||||
</Stack>
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={12} sm={8}>
|
|
||||||
<MapLayer style={{ height: "400px", width: "100%" }}>
|
|
||||||
{/*<FlyToPolyline polyline={fakeData.polyline} />*/}
|
|
||||||
</MapLayer>
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</DialogContent>
|
|
||||||
<DialogActions>
|
|
||||||
<Button variant={"outlined"} color={"warning"} onClick={() => setOpenCarDialog(false)}>
|
|
||||||
بستن
|
|
||||||
</Button>
|
|
||||||
</DialogActions>
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
export default CarDetailsContent;
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
"use client";
|
|
||||||
import PageTitle from "@/core/components/PageTitle";
|
|
||||||
import { Dialog, DialogTitle, IconButton, Stack, Tooltip } from "@mui/material";
|
|
||||||
import { useState } from "react";
|
|
||||||
import DriveEtaIcon from "@mui/icons-material/DriveEta";
|
|
||||||
import CarDetailsContent from "@/components/dashboard/carDetails/CarDetailsContent";
|
|
||||||
|
|
||||||
const TestPage = () => {
|
|
||||||
const [openCarDialog, setOpenCarDialog] = useState(false);
|
|
||||||
return (
|
|
||||||
<Stack spacing={1}>
|
|
||||||
<PageTitle title={"نمایش اطلاعات خودرو"} />
|
|
||||||
<>
|
|
||||||
<Tooltip title="نمایش اطلاعات خودرو">
|
|
||||||
<IconButton
|
|
||||||
color="primary"
|
|
||||||
onClick={() => {
|
|
||||||
setOpenCarDialog(true);
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<DriveEtaIcon />
|
|
||||||
</IconButton>
|
|
||||||
</Tooltip>
|
|
||||||
<Dialog
|
|
||||||
onClose={() => setOpenCarDialog(false)}
|
|
||||||
fullWidth
|
|
||||||
open={openCarDialog}
|
|
||||||
PaperProps={{
|
|
||||||
sx: {
|
|
||||||
transition: "all .3s",
|
|
||||||
boxShadow:
|
|
||||||
"rgba(60, 64, 67, 0.3) 0px 1px 16px 0px, rgba(60, 64, 67, 0.15) 0px 1px 10px 0px",
|
|
||||||
},
|
|
||||||
}}
|
|
||||||
maxWidth={"lg"}
|
|
||||||
>
|
|
||||||
<DialogTitle>نمایش اطلاعات خودرو</DialogTitle>
|
|
||||||
<CarDetailsContent setOpenCarDialog={setOpenCarDialog} />
|
|
||||||
</Dialog>
|
|
||||||
</>
|
|
||||||
</Stack>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
export default TestPage;
|
|
||||||
@@ -27,7 +27,7 @@ function TabPanel(props) {
|
|||||||
|
|
||||||
const validationSchema = object({
|
const validationSchema = object({
|
||||||
item_id: number().required("نوع آیتم را مشخص کنید!"),
|
item_id: number().required("نوع آیتم را مشخص کنید!"),
|
||||||
sub_item_id: number().required("موضوع مشاهده شده را مشخص کنید!"),
|
sub_item_id: number().required("اقدام انجام شده را مشخص کنید!"),
|
||||||
amount: string().required("وارد کردن مقدار الزامیست!"),
|
amount: string().required("وارد کردن مقدار الزامیست!"),
|
||||||
cmms_machines: array().required("وارد کردن کد خودرو الزامیست!").min(1, "حداقل یک کد خودرو باید وارد شود!"),
|
cmms_machines: array().required("وارد کردن کد خودرو الزامیست!").min(1, "حداقل یک کد خودرو باید وارد شود!"),
|
||||||
rahdaran_id: array().required("وارد کردن کد راهداران الزامیست!").min(1, "حداقل یک کد راهدار باید وارد شود!"), // بررسی حداقل یک آیتم,
|
rahdaran_id: array().required("وارد کردن کد راهداران الزامیست!").min(1, "حداقل یک کد راهدار باید وارد شود!"), // بررسی حداقل یک آیتم,
|
||||||
@@ -214,7 +214,7 @@ const CreateFormContent = ({ setOpen, onSubmit, is_gasht = false }) => {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Tab icon={<InsertDriveFileIcon />} label="انتخاب آیتم" />
|
<Tab icon={<InsertDriveFileIcon />} label="انتخاب آیتم" />
|
||||||
<Tab disabled={tabState === 0} icon={<FileCopyIcon />} label="انتخاب موضوع مشاهده شده" />
|
<Tab disabled={tabState === 0} icon={<FileCopyIcon />} label="انتخاب اقدام انجام شده" />
|
||||||
<Tab disabled={tabState === 0 || tabState === 1} icon={<InfoIcon />} label="اطلاعات فعالیت" />
|
<Tab disabled={tabState === 0 || tabState === 1} icon={<InfoIcon />} label="اطلاعات فعالیت" />
|
||||||
</Tabs>
|
</Tabs>
|
||||||
<DialogContent dividers sx={{ overflowY: "auto", maxHeight: "70vh" }}>
|
<DialogContent dividers sx={{ overflowY: "auto", maxHeight: "70vh" }}>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ const GetSubItemsForm = ({ setValue, watch, setSubItemsList, tabState, setTabSta
|
|||||||
<>
|
<>
|
||||||
{errorSubItemsList ? (
|
{errorSubItemsList ? (
|
||||||
<Typography textAlign={"center"} color={"error"}>
|
<Typography textAlign={"center"} color={"error"}>
|
||||||
خطا در دریافت موضوع مشاهده شده
|
خطا در دریافت اقدام انجام شده
|
||||||
</Typography>
|
</Typography>
|
||||||
) : loadingSubItemsList ? (
|
) : loadingSubItemsList ? (
|
||||||
<LinearProgress />
|
<LinearProgress />
|
||||||
|
|||||||
@@ -27,14 +27,14 @@ const PreviousStatesInfo = ({ itemsList, subItemsList }) => {
|
|||||||
icon={<FileCopyIcon />}
|
icon={<FileCopyIcon />}
|
||||||
label={
|
label={
|
||||||
<Typography variant="body2" sx={{ fontWeight: 600, color: "grey.700" }}>
|
<Typography variant="body2" sx={{ fontWeight: 600, color: "grey.700" }}>
|
||||||
موضوع مشاهدهشده
|
اقدام انجام شده
|
||||||
</Typography>
|
</Typography>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</Box>
|
</Box>
|
||||||
<Divider sx={{ flex: 1, mx: 2 }} />
|
<Divider sx={{ flex: 1, mx: 2 }} />
|
||||||
<Typography variant="body2" sx={{ fontWeight: 600, color: "grey.800" }}>
|
<Typography variant="body2" sx={{ fontWeight: 600, color: "grey.800" }}>
|
||||||
{subItemsList?.name || "هیچ موضوعی انتخاب نشده است"}
|
{subItemsList?.name || "هیچ اقدامی انتخاب نشده است"}
|
||||||
</Typography>
|
</Typography>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ const GashtCreateContent = ({ mutate, setOpen, tabState, setTabState }) => {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Tab icon={<InsertDriveFileIcon />} label="انتخاب مورد مشاهده شده" />
|
<Tab icon={<InsertDriveFileIcon />} label="انتخاب مورد مشاهده شده" />
|
||||||
<Tab disabled={tabState === 0} icon={<FileCopyIcon />} label="اطلاعات مورد مشاهده شده" />
|
<Tab disabled={tabState === 0} icon={<FileCopyIcon />} label="اطلاعات مورد اقدام شده" />
|
||||||
</Tabs>
|
</Tabs>
|
||||||
<DialogContent dividers sx={{ overflowY: "auto", maxHeight: "70vh" }}>
|
<DialogContent dividers sx={{ overflowY: "auto", maxHeight: "70vh" }}>
|
||||||
<Box sx={{ flex: 1 }}>
|
<Box sx={{ flex: 1 }}>
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ const CompleteItem = ({ subItem, itemInfo, setSubmitCompleteForm, mutate, setOpe
|
|||||||
|
|
||||||
const validationSchema = object({
|
const validationSchema = object({
|
||||||
item_id: number().required("نوع آیتم را مشخص کنید!"),
|
item_id: number().required("نوع آیتم را مشخص کنید!"),
|
||||||
sub_item_id: number().required("موضوع مشاهده شده را مشخص کنید!"),
|
sub_item_id: number().required("اقدام انجام شده را مشخص کنید!"),
|
||||||
amount: string().required("وارد کردن مقدار الزامیست!"),
|
amount: string().required("وارد کردن مقدار الزامیست!"),
|
||||||
cmms_machines: array().required("وارد کردن کد خودرو الزامیست!").min(1, "حداقل یک کد خودرو باید وارد شود!"),
|
cmms_machines: array().required("وارد کردن کد خودرو الزامیست!").min(1, "حداقل یک کد خودرو باید وارد شود!"),
|
||||||
rahdaran_id: array().required("وارد کردن کد راهداران الزامیست!").min(1, "حداقل یک کد راهدار باید وارد شود!"), // بررسی حداقل یک آیتم,
|
rahdaran_id: array().required("وارد کردن کد راهداران الزامیست!").min(1, "حداقل یک کد راهدار باید وارد شود!"), // بررسی حداقل یک آیتم,
|
||||||
|
|||||||
@@ -27,14 +27,14 @@ const PreviousStatesInfo = ({ itemInfo }) => {
|
|||||||
icon={<FileCopyIcon />}
|
icon={<FileCopyIcon />}
|
||||||
label={
|
label={
|
||||||
<Typography variant="body2" sx={{ fontWeight: 600, color: "grey.700" }}>
|
<Typography variant="body2" sx={{ fontWeight: 600, color: "grey.700" }}>
|
||||||
موضوع مشاهدهشده
|
اقدام انجام شده
|
||||||
</Typography>
|
</Typography>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</Box>
|
</Box>
|
||||||
<Divider sx={{ flex: 1, mx: 2 }} />
|
<Divider sx={{ flex: 1, mx: 2 }} />
|
||||||
<Typography variant="body2" sx={{ fontWeight: 600, color: "grey.800" }}>
|
<Typography variant="body2" sx={{ fontWeight: 600, color: "grey.800" }}>
|
||||||
{itemInfo?.sub_item_name || "هیچ موضوعی انتخاب نشده است"}
|
{itemInfo?.sub_item_name || "هیچ اقدامی انتخاب نشده است"}
|
||||||
</Typography>
|
</Typography>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ const TableInfo = ({ specialFilter, setTabState, setItemInfo }) => {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
accessorKey: "sub_item_name",
|
accessorKey: "sub_item_name",
|
||||||
header: "موضوع مشاهده شده",
|
header: "مشاهده انجام شده",
|
||||||
id: "sub_item_name",
|
id: "sub_item_name",
|
||||||
enableColumnFilter: false,
|
enableColumnFilter: false,
|
||||||
datatype: "text",
|
datatype: "text",
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ const OperatorList = () => {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
accessorKey: "sub_item",
|
accessorKey: "sub_item",
|
||||||
header: "موضوع مشاهده شده",
|
header: "اقدام انجام شده",
|
||||||
id: "sub_item",
|
id: "sub_item",
|
||||||
enableColumnFilter: true,
|
enableColumnFilter: true,
|
||||||
datatype: "numeric",
|
datatype: "numeric",
|
||||||
@@ -246,7 +246,7 @@ const OperatorList = () => {
|
|||||||
</Stack>
|
</Stack>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return <Typography variant="body2">کد خودرویی وجود ندارد</Typography>;
|
return <Typography variant="body2">خودرویی وجود ندارد</Typography>;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,41 +1,44 @@
|
|||||||
import { DialogContent, Paper, Stack, Typography, useTheme } from "@mui/material";
|
import { Box, DialogContent, Paper, Stack, Typography, useTheme } from "@mui/material";
|
||||||
|
import Image from "next/image";
|
||||||
|
|
||||||
const ImageFormContent = ({ image, title }) => {
|
const ImageFormContent = ({ image, title }) => {
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
return (
|
return (
|
||||||
<DialogContent>
|
<Stack
|
||||||
<Paper
|
spacing={2}
|
||||||
elevation={3}
|
alignItems="center"
|
||||||
|
justifyContent="center"
|
||||||
|
sx={{
|
||||||
|
my: 2,
|
||||||
|
padding: 2,
|
||||||
|
borderRadius: "12px",
|
||||||
|
border: `1px solid ${theme.palette.primary.main}`,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Typography
|
||||||
|
variant="h6"
|
||||||
sx={{
|
sx={{
|
||||||
padding: 2,
|
color: theme.palette.primary.dark,
|
||||||
borderRadius: "12px",
|
fontWeight: "bold",
|
||||||
border: `1px solid ${theme.palette.primary.main}`,
|
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Stack spacing={2} alignItems="center" justifyContent="center">
|
{title}
|
||||||
<Typography
|
</Typography>
|
||||||
variant="h6"
|
<Box sx={{ width: "100%", position: "relative", aspectRatio: "16/9" }}>
|
||||||
sx={{
|
<Image
|
||||||
color: theme.palette.primary.dark,
|
src={image}
|
||||||
fontWeight: "bold",
|
alt="Image"
|
||||||
}}
|
fill={true}
|
||||||
>
|
loading="lazy"
|
||||||
{title}
|
style={{
|
||||||
</Typography>
|
objectFit: "contain",
|
||||||
<img
|
marginBottom: "16px",
|
||||||
src={image}
|
borderRadius: "12px",
|
||||||
alt="Image"
|
border: `1px solid ${theme.palette.divider}`,
|
||||||
style={{
|
}}
|
||||||
maxWidth: "100%",
|
/>
|
||||||
maxHeight: "200px",
|
</Box>
|
||||||
marginBottom: "16px",
|
</Stack>
|
||||||
borderRadius: "12px",
|
|
||||||
border: `1px solid ${theme.palette.divider}`,
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</Stack>
|
|
||||||
</Paper>
|
|
||||||
</DialogContent>
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
export default ImageFormContent;
|
export default ImageFormContent;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Button, Dialog, DialogActions, DialogTitle, IconButton, Tooltip } from "@mui/material";
|
import { Button, Dialog, DialogActions, DialogContent, DialogTitle, IconButton, Paper, Tooltip } from "@mui/material";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import PhotoLibraryIcon from "@mui/icons-material/PhotoLibrary";
|
import PhotoLibraryIcon from "@mui/icons-material/PhotoLibrary";
|
||||||
import ImageFormContent from "./ImageFormContent";
|
import ImageFormContent from "./ImageFormContent";
|
||||||
@@ -22,14 +22,18 @@ const ImageDialog = ({ images }) => {
|
|||||||
boxShadow: "rgba(60, 64, 67, 0.3) 0px 1px 16px 0px, rgba(60, 64, 67, 0.15) 0px 1px 10px 0px",
|
boxShadow: "rgba(60, 64, 67, 0.3) 0px 1px 16px 0px, rgba(60, 64, 67, 0.15) 0px 1px 10px 0px",
|
||||||
},
|
},
|
||||||
}}
|
}}
|
||||||
dir="rtl"
|
maxWidth={"sm"}
|
||||||
maxWidth={"md"}
|
scroll="paper"
|
||||||
>
|
>
|
||||||
<DialogTitle sx={{ fontSize: "large" }}>تصاویر</DialogTitle>
|
<DialogTitle sx={{ fontSize: "large" }}>تصاویر</DialogTitle>
|
||||||
<ImageFormContent image={images[1]?.full_path_for_fast_react} title={"قبل از اقدام"} />
|
<DialogContent>
|
||||||
<ImageFormContent image={images[0]?.full_path_for_fast_react} title={"بعد از اقدام"} />
|
<Paper elevation={0}>
|
||||||
|
<ImageFormContent image={images[1]?.full_path_for_fast_react} title={"قبل از اقدام"} />
|
||||||
|
<ImageFormContent image={images[0]?.full_path_for_fast_react} title={"بعد از اقدام"} />
|
||||||
|
</Paper>
|
||||||
|
</DialogContent>
|
||||||
<DialogActions>
|
<DialogActions>
|
||||||
<Button onClick={() => setOpenImageDialog(false)} variant="outlined" color="secondary" autoFocus>
|
<Button onClick={() => setOpenImageDialog(false)} variant="outlined" color="secondary">
|
||||||
بستن
|
بستن
|
||||||
</Button>
|
</Button>
|
||||||
</DialogActions>
|
</DialogActions>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ const MachinesCodeDialog = ({ machinesLists }) => {
|
|||||||
const [openMachinesCodeDialog, setOpenMachinesCodeDialog] = useState(false);
|
const [openMachinesCodeDialog, setOpenMachinesCodeDialog] = useState(false);
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Tooltip title="کد خودرو">
|
<Tooltip title="خودرو ها">
|
||||||
<IconButton color="primary" onClick={() => setOpenMachinesCodeDialog(true)}>
|
<IconButton color="primary" onClick={() => setOpenMachinesCodeDialog(true)}>
|
||||||
<DirectionsCarIcon />
|
<DirectionsCarIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
@@ -24,7 +24,7 @@ const MachinesCodeDialog = ({ machinesLists }) => {
|
|||||||
dir="rtl"
|
dir="rtl"
|
||||||
maxWidth={"md"}
|
maxWidth={"md"}
|
||||||
>
|
>
|
||||||
<DialogTitle sx={{ fontSize: "large" }}>کد خودرو</DialogTitle>
|
<DialogTitle sx={{ fontSize: "large" }}>خودرو ها</DialogTitle>
|
||||||
<MachinesCodeContent machinesLists={machinesLists} />
|
<MachinesCodeContent machinesLists={machinesLists} />
|
||||||
<DialogActions>
|
<DialogActions>
|
||||||
<Button
|
<Button
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ const ReportLists = ({ itemsList, data }) => {
|
|||||||
data={data.data}
|
data={data.data}
|
||||||
page_name={"roadItemReportByItems"}
|
page_name={"roadItemReportByItems"}
|
||||||
table_name={"roadItemReportByItemsList"}
|
table_name={"roadItemReportByItemsList"}
|
||||||
|
enablePagination={false}
|
||||||
/>
|
/>
|
||||||
</Box>
|
</Box>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ const SubItemsList = ({ data }) => {
|
|||||||
data={data.data}
|
data={data.data}
|
||||||
page_name={"roadItemReportBySubItems"}
|
page_name={"roadItemReportBySubItems"}
|
||||||
table_name={"roadItemReportBySubItemsList"}
|
table_name={"roadItemReportBySubItemsList"}
|
||||||
|
enablePagination={false}
|
||||||
/>
|
/>
|
||||||
</Box>
|
</Box>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ const createColumns = (sub_items) => {
|
|||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
accessorKey: `sub_item_${sub_item.sub_item}_count`,
|
accessorKey: `sub_item_${sub_item.sub_item}_count`,
|
||||||
header: "تعداد",
|
header: "تعداد اقدام",
|
||||||
id: `sub_item_${sub_item.sub_item}_count`,
|
id: `sub_item_${sub_item.sub_item}_count`,
|
||||||
enableColumnFilter: false,
|
enableColumnFilter: false,
|
||||||
enableSorting: false,
|
enableSorting: false,
|
||||||
@@ -81,7 +81,7 @@ const createColumns = (sub_items) => {
|
|||||||
size: 50,
|
size: 50,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
header: "موارد مشاهده شده فعالیت روزانه",
|
header: "موارد اقدام شده فعالیت روزانه",
|
||||||
enableColumnFilter: false,
|
enableColumnFilter: false,
|
||||||
id: "subItems",
|
id: "subItems",
|
||||||
enableSorting: false,
|
enableSorting: false,
|
||||||
@@ -228,7 +228,7 @@ const SubItemsReports = () => {
|
|||||||
});
|
});
|
||||||
return (
|
return (
|
||||||
<Stack spacing={1}>
|
<Stack spacing={1}>
|
||||||
<PageTitle title={"گزارش تعداد فعالیت ها به تفکیک موارد مشاهده شده"} />
|
<PageTitle title={"گزارش تعداد فعالیت ها به تفکیک موارد اقدام شده"} />
|
||||||
<SearchReportList
|
<SearchReportList
|
||||||
control={control}
|
control={control}
|
||||||
hasProvincesPermission={hasProvincesPermission}
|
hasProvincesPermission={hasProvincesPermission}
|
||||||
|
|||||||
@@ -40,10 +40,12 @@ const ConfirmContent = ({ rowId, mutate, setOpenConfirmDialog }) => {
|
|||||||
{...register("description")}
|
{...register("description")}
|
||||||
multiline
|
multiline
|
||||||
rows={8}
|
rows={8}
|
||||||
label="توضیحات کارشناس"
|
label="توضیحات و دلایل تأیید (اختیاری)"
|
||||||
|
placeholder="لطفاً علت تأیید خود را توضیح دهید"
|
||||||
fullWidth
|
fullWidth
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
sx={{ mt: 1 }}
|
sx={{ mt: 1 }}
|
||||||
|
InputLabelProps={{ shrink: true }}
|
||||||
/>
|
/>
|
||||||
</Stack>
|
</Stack>
|
||||||
</Stack>
|
</Stack>
|
||||||
@@ -59,7 +61,7 @@ const ConfirmContent = ({ rowId, mutate, setOpenConfirmDialog }) => {
|
|||||||
بستن
|
بستن
|
||||||
</Button>
|
</Button>
|
||||||
<Button onClick={handleSubmit(onSubmit)} variant="contained" color="primary" disabled={isSubmitting}>
|
<Button onClick={handleSubmit(onSubmit)} variant="contained" color="primary" disabled={isSubmitting}>
|
||||||
{isSubmitting ? "درحال ارسال اطلاعات..." : "ثبت"}
|
{isSubmitting ? "درحال ثبت تایید..." : "ثبت تایید"}
|
||||||
</Button>
|
</Button>
|
||||||
</DialogActions>
|
</DialogActions>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ const ConfirmForm = ({ rowId, mutate }) => {
|
|||||||
const [openConfirmDialog, setOpenConfirmDialog] = useState(false);
|
const [openConfirmDialog, setOpenConfirmDialog] = useState(false);
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Tooltip title="تایید">
|
<Tooltip title="تایید فعالیت">
|
||||||
<IconButton color="primary" onClick={() => setOpenConfirmDialog(true)}>
|
<IconButton color="primary" onClick={() => setOpenConfirmDialog(true)}>
|
||||||
<DoneIcon />
|
<DoneIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
@@ -20,7 +20,7 @@ const ConfirmForm = ({ rowId, mutate }) => {
|
|||||||
},
|
},
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<DialogTitle>تایید</DialogTitle>
|
<DialogTitle>تایید فعالیت</DialogTitle>
|
||||||
<ConfirmContent mutate={mutate} rowId={rowId} setOpenConfirmDialog={setOpenConfirmDialog} />
|
<ConfirmContent mutate={mutate} rowId={rowId} setOpenConfirmDialog={setOpenConfirmDialog} />
|
||||||
</Dialog>
|
</Dialog>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -22,9 +22,7 @@ const DeleteContent = ({ rowId, mutate, setOpenDeleteDialog }) => {
|
|||||||
<>
|
<>
|
||||||
<DialogContent>
|
<DialogContent>
|
||||||
<Stack alignItems="center" spacing={2}>
|
<Stack alignItems="center" spacing={2}>
|
||||||
<Typography textAlign="center" fontWeight="bold" fontSize="16px" mt={2}>
|
<Typography mt={2}>آیا از حذف فعالیت اطمینان دارید؟</Typography>
|
||||||
آیا از حذف فعالیت اطمینان دارید؟
|
|
||||||
</Typography>
|
|
||||||
</Stack>
|
</Stack>
|
||||||
</DialogContent>
|
</DialogContent>
|
||||||
<DialogActions sx={{ justifyContent: "center", paddingBottom: 2, width: "100%" }}>
|
<DialogActions sx={{ justifyContent: "center", paddingBottom: 2, width: "100%" }}>
|
||||||
@@ -32,7 +30,7 @@ const DeleteContent = ({ rowId, mutate, setOpenDeleteDialog }) => {
|
|||||||
خیر !
|
خیر !
|
||||||
</Button>
|
</Button>
|
||||||
<Button onClick={handleClick} variant="contained" color="error" disabled={submitting}>
|
<Button onClick={handleClick} variant="contained" color="error" disabled={submitting}>
|
||||||
{submitting ? "درحال ارسال اطلاعات..." : "بله اطمینان دارم"}
|
{submitting ? "درحال حذف..." : "بله اطمینان دارم"}
|
||||||
</Button>
|
</Button>
|
||||||
</DialogActions>
|
</DialogActions>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -1,41 +1,44 @@
|
|||||||
import { DialogContent, Paper, Stack, Typography, useTheme } from "@mui/material";
|
import { Box, DialogContent, Paper, Stack, Typography, useTheme } from "@mui/material";
|
||||||
|
import Image from "next/image";
|
||||||
|
|
||||||
const ImageFormContent = ({ image, title }) => {
|
const ImageFormContent = ({ image, title }) => {
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
return (
|
return (
|
||||||
<DialogContent>
|
<Stack
|
||||||
<Paper
|
spacing={2}
|
||||||
elevation={3}
|
alignItems="center"
|
||||||
|
justifyContent="center"
|
||||||
|
sx={{
|
||||||
|
my: 2,
|
||||||
|
padding: 2,
|
||||||
|
borderRadius: "12px",
|
||||||
|
border: `1px solid ${theme.palette.primary.main}`,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Typography
|
||||||
|
variant="h6"
|
||||||
sx={{
|
sx={{
|
||||||
padding: 2,
|
color: theme.palette.primary.dark,
|
||||||
borderRadius: "12px",
|
fontWeight: "bold",
|
||||||
border: `1px solid ${theme.palette.primary.main}`,
|
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Stack spacing={2} alignItems="center" justifyContent="center">
|
{title}
|
||||||
<Typography
|
</Typography>
|
||||||
variant="h6"
|
<Box sx={{ width: "100%", position: "relative", aspectRatio: "16/9" }}>
|
||||||
sx={{
|
<Image
|
||||||
color: theme.palette.primary.dark,
|
src={image}
|
||||||
fontWeight: "bold",
|
alt="Image"
|
||||||
}}
|
fill={true}
|
||||||
>
|
loading="lazy"
|
||||||
{title}
|
style={{
|
||||||
</Typography>
|
objectFit: "contain",
|
||||||
<img
|
marginBottom: "16px",
|
||||||
src={image}
|
borderRadius: "12px",
|
||||||
alt="Image"
|
border: `1px solid ${theme.palette.divider}`,
|
||||||
style={{
|
}}
|
||||||
maxWidth: "100%",
|
/>
|
||||||
maxHeight: "200px",
|
</Box>
|
||||||
marginBottom: "16px",
|
</Stack>
|
||||||
borderRadius: "12px",
|
|
||||||
border: `1px solid ${theme.palette.divider}`,
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</Stack>
|
|
||||||
</Paper>
|
|
||||||
</DialogContent>
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
export default ImageFormContent;
|
export default ImageFormContent;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Button, Dialog, DialogActions, DialogTitle, IconButton, Tooltip } from "@mui/material";
|
import { Button, Dialog, DialogActions, DialogContent, DialogTitle, IconButton, Paper, Tooltip } from "@mui/material";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import PhotoLibraryIcon from "@mui/icons-material/PhotoLibrary";
|
import PhotoLibraryIcon from "@mui/icons-material/PhotoLibrary";
|
||||||
import ImageFormContent from "./ImageFormContent";
|
import ImageFormContent from "./ImageFormContent";
|
||||||
@@ -22,14 +22,18 @@ const ImageDialog = ({ images }) => {
|
|||||||
boxShadow: "rgba(60, 64, 67, 0.3) 0px 1px 16px 0px, rgba(60, 64, 67, 0.15) 0px 1px 10px 0px",
|
boxShadow: "rgba(60, 64, 67, 0.3) 0px 1px 16px 0px, rgba(60, 64, 67, 0.15) 0px 1px 10px 0px",
|
||||||
},
|
},
|
||||||
}}
|
}}
|
||||||
dir="rtl"
|
maxWidth={"sm"}
|
||||||
maxWidth={"md"}
|
scroll="paper"
|
||||||
>
|
>
|
||||||
<DialogTitle>تصاویر</DialogTitle>
|
<DialogTitle sx={{ fontSize: "large" }}>تصاویر</DialogTitle>
|
||||||
<ImageFormContent image={images[1].full_path_for_fast_react} title={"قبل از اقدام"} />
|
<DialogContent>
|
||||||
<ImageFormContent image={images[0].full_path_for_fast_react} title={"بعد از اقدام"} />
|
<Paper elevation={0}>
|
||||||
|
<ImageFormContent image={images[1]?.full_path_for_fast_react} title={"قبل از اقدام"} />
|
||||||
|
<ImageFormContent image={images[0]?.full_path_for_fast_react} title={"بعد از اقدام"} />
|
||||||
|
</Paper>
|
||||||
|
</DialogContent>
|
||||||
<DialogActions>
|
<DialogActions>
|
||||||
<Button onClick={() => setOpenImageDialog(false)} variant="outlined" color="secondary" autoFocus>
|
<Button onClick={() => setOpenImageDialog(false)} variant="outlined" color="secondary">
|
||||||
بستن
|
بستن
|
||||||
</Button>
|
</Button>
|
||||||
</DialogActions>
|
</DialogActions>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ const MachinesCodeDialog = ({ machinesLists }) => {
|
|||||||
const [openMachinesCodeDialog, setOpenMachinesCodeDialog] = useState(false);
|
const [openMachinesCodeDialog, setOpenMachinesCodeDialog] = useState(false);
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Tooltip title="کد خودرو">
|
<Tooltip title="خودرو ها">
|
||||||
<IconButton color="primary" onClick={() => setOpenMachinesCodeDialog(true)}>
|
<IconButton color="primary" onClick={() => setOpenMachinesCodeDialog(true)}>
|
||||||
<DirectionsCarIcon />
|
<DirectionsCarIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
@@ -24,7 +24,7 @@ const MachinesCodeDialog = ({ machinesLists }) => {
|
|||||||
dir="rtl"
|
dir="rtl"
|
||||||
maxWidth={"md"}
|
maxWidth={"md"}
|
||||||
>
|
>
|
||||||
<DialogTitle sx={{ fontSize: "large" }}>کد خودرو</DialogTitle>
|
<DialogTitle sx={{ fontSize: "large" }}>خودرو ها</DialogTitle>
|
||||||
<MachinesCodeContent machinesLists={machinesLists} />
|
<MachinesCodeContent machinesLists={machinesLists} />
|
||||||
<DialogActions>
|
<DialogActions>
|
||||||
<Button
|
<Button
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ const RejectContent = ({ rowId, mutate, setOpenRejectDialog }) => {
|
|||||||
const requestServer = useRequest({ notificationSuccess: true });
|
const requestServer = useRequest({ notificationSuccess: true });
|
||||||
|
|
||||||
const validationSchema = Yup.object().shape({
|
const validationSchema = Yup.object().shape({
|
||||||
description: Yup.string().required("توضیحات الزامیست!!!"),
|
description: Yup.string().required("لطفاً توضیحات را وارد کنید."),
|
||||||
});
|
});
|
||||||
|
|
||||||
const {
|
const {
|
||||||
@@ -51,12 +51,14 @@ const RejectContent = ({ rowId, mutate, setOpenRejectDialog }) => {
|
|||||||
{...register("description")}
|
{...register("description")}
|
||||||
multiline
|
multiline
|
||||||
rows={8}
|
rows={8}
|
||||||
label="توضیحات کارشناس"
|
label="توضیحات و دلایل عدم تأیید"
|
||||||
|
placeholder="لطفاً علت عدم تأیید خود را توضیح دهید"
|
||||||
error={!!errors.description}
|
error={!!errors.description}
|
||||||
helperText={errors.description?.message}
|
helperText={errors.description?.message}
|
||||||
fullWidth
|
fullWidth
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
sx={{ mt: 1 }}
|
sx={{ mt: 1 }}
|
||||||
|
InputLabelProps={{ shrink: true }}
|
||||||
/>
|
/>
|
||||||
</Stack>
|
</Stack>
|
||||||
</Stack>
|
</Stack>
|
||||||
@@ -72,7 +74,7 @@ const RejectContent = ({ rowId, mutate, setOpenRejectDialog }) => {
|
|||||||
بستن
|
بستن
|
||||||
</Button>
|
</Button>
|
||||||
<Button onClick={handleSubmit(onSubmit)} variant="contained" color="primary" disabled={isSubmitting}>
|
<Button onClick={handleSubmit(onSubmit)} variant="contained" color="primary" disabled={isSubmitting}>
|
||||||
{isSubmitting ? "درحال ارسال اطلاعات..." : "عدم تایید"}
|
{isSubmitting ? "درحال ثبت عدم تایید..." : "ثبت عدم تایید"}
|
||||||
</Button>
|
</Button>
|
||||||
</DialogActions>
|
</DialogActions>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ const RejectForm = ({ rowId, mutate }) => {
|
|||||||
const [openRejectDialog, setOpenRejectDialog] = useState(false);
|
const [openRejectDialog, setOpenRejectDialog] = useState(false);
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Tooltip title="عدم تایید">
|
<Tooltip title="عدم تایید فعالیت">
|
||||||
<IconButton color="primary" onClick={() => setOpenRejectDialog(true)}>
|
<IconButton color="primary" onClick={() => setOpenRejectDialog(true)}>
|
||||||
<ClearIcon />
|
<ClearIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
@@ -20,7 +20,7 @@ const RejectForm = ({ rowId, mutate }) => {
|
|||||||
},
|
},
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<DialogTitle>عدم تایید</DialogTitle>
|
<DialogTitle>عدم تایید فعالیت</DialogTitle>
|
||||||
<RejectContent mutate={mutate} rowId={rowId} setOpenRejectDialog={setOpenRejectDialog} />
|
<RejectContent mutate={mutate} rowId={rowId} setOpenRejectDialog={setOpenRejectDialog} />
|
||||||
</Dialog>
|
</Dialog>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -177,7 +177,7 @@ const SupervisorList = () => {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
accessorKey: "sub_item",
|
accessorKey: "sub_item",
|
||||||
header: "موضوع مشاهده شده",
|
header: "اقدام انجام شده",
|
||||||
id: "sub_item",
|
id: "sub_item",
|
||||||
enableColumnFilter: true,
|
enableColumnFilter: true,
|
||||||
datatype: "numeric",
|
datatype: "numeric",
|
||||||
@@ -347,7 +347,7 @@ const SupervisorList = () => {
|
|||||||
</Stack>
|
</Stack>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return <Typography variant="body2">کد خودرویی وجود ندارد</Typography>;
|
return <Typography variant="body2">خودرویی وجود ندارد</Typography>;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ const ActionsDuringPatrol = ({ setValue, tabState, setTabState }) => {
|
|||||||
const SubmitActionDuringPatrol = () => {
|
const SubmitActionDuringPatrol = () => {
|
||||||
setTabState(tabState + 1);
|
setTabState(tabState + 1);
|
||||||
const resultItems = ActionsList.map((item) => item.result);
|
const resultItems = ActionsList.map((item) => item.result);
|
||||||
console.log("resultItems", resultItems);
|
|
||||||
setValue("observed_items", resultItems);
|
setValue("observed_items", resultItems);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ const CompeleteRequest = ({ watch, isSubmitting, setValue, register }) => {
|
|||||||
setOtpSended(true);
|
setOtpSended(true);
|
||||||
setDelayPerRequest(true);
|
setDelayPerRequest(true);
|
||||||
})
|
})
|
||||||
.catch(() => { });
|
.catch(() => {});
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
import { Tooltip, IconButton } from "@mui/material";
|
import { GET_ROAD_PATROL_OPERATOR_REPORT } from "@/core/utils/routes";
|
||||||
import PrintIcon from "@mui/icons-material/Print";
|
import PrintIcon from "@mui/icons-material/Print";
|
||||||
|
import { IconButton, Tooltip } from "@mui/material";
|
||||||
|
|
||||||
const ReportForm = ({ rowId }) => {
|
const ReportForm = ({ rowId }) => {
|
||||||
const reportUrl = `https://rms.rmto.ir/v2/road_patrols/operator/report/${rowId}`;
|
|
||||||
return (
|
return (
|
||||||
<Tooltip title="گزارش" arrow placement="right">
|
<Tooltip title="گزارش" arrow placement="right">
|
||||||
<IconButton
|
<IconButton
|
||||||
color="primary"
|
color="primary"
|
||||||
component="a"
|
component="a"
|
||||||
href={reportUrl}
|
href={`${GET_ROAD_PATROL_OPERATOR_REPORT}/${rowId}`}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
sx={{ textTransform: "unset", alignSelf: "center" }}
|
sx={{ textTransform: "unset", alignSelf: "center" }}
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
import { Tooltip, IconButton } from "@mui/material";
|
import { GET_ROAD_PATROL_SUPERVISOR_REPORT } from "@/core/utils/routes";
|
||||||
import PrintIcon from "@mui/icons-material/Print";
|
import PrintIcon from "@mui/icons-material/Print";
|
||||||
|
import { IconButton, Tooltip } from "@mui/material";
|
||||||
|
|
||||||
const ReportForm = ({ rowId }) => {
|
const ReportForm = ({ rowId }) => {
|
||||||
const reportUrl = `https://rms.rmto.ir/v2/road_patrols/operator/report/${rowId}`;
|
|
||||||
return (
|
return (
|
||||||
<Tooltip title="گزارش" arrow placement="right">
|
<Tooltip title="گزارش" arrow placement="right">
|
||||||
<IconButton
|
<IconButton
|
||||||
color="primary"
|
color="primary"
|
||||||
component="a"
|
component="a"
|
||||||
href={reportUrl}
|
href={`${GET_ROAD_PATROL_SUPERVISOR_REPORT}/${rowId}`}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
sx={{ textTransform: "unset", alignSelf: "center" }}
|
sx={{ textTransform: "unset", alignSelf: "center" }}
|
||||||
|
|||||||
@@ -10,36 +10,37 @@ const CarCode = ({ carCode, setCarCode, inputValueDefault = "", error, multiple
|
|||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
const requestServer = useRequest();
|
const requestServer = useRequest();
|
||||||
|
|
||||||
const fetchCarCodes = (inputValue, controller) => {
|
|
||||||
const debouncer = debounce((query) => {
|
|
||||||
if (!query || query?.length < 3) {
|
|
||||||
setOptions([]);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
setLoading(true);
|
|
||||||
requestServer(`${GET_CAR_LIST_SEARCH}?machine_code=${query}`, "get", {
|
|
||||||
requestOptions: { signal: controller.signal },
|
|
||||||
})
|
|
||||||
.then((response) => {
|
|
||||||
const combinedArray = carCode ? [...carCode, ...response.data.data] : [...response.data.data];
|
|
||||||
const uniqueArray = Array.from(new Map(combinedArray.map((item) => [item.id, item])).values());
|
|
||||||
setOptions(uniqueArray || []);
|
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
setOptions([]);
|
|
||||||
})
|
|
||||||
.finally(() => {
|
|
||||||
setLoading(false);
|
|
||||||
});
|
|
||||||
}, 500);
|
|
||||||
debouncer(inputValue);
|
|
||||||
};
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
const fetchCarCodes = (inputValue, controller) => {
|
||||||
|
const debouncer = debounce((query) => {
|
||||||
|
if (!query || query?.length < 3) {
|
||||||
|
setOptions([]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
setLoading(true);
|
||||||
|
requestServer(`${GET_CAR_LIST_SEARCH}?machine_code=${query}`, "get", {
|
||||||
|
requestOptions: { signal: controller.signal },
|
||||||
|
})
|
||||||
|
.then((response) => {
|
||||||
|
const combinedArray = carCode ? [...carCode, ...response.data.data] : [...response.data.data];
|
||||||
|
const uniqueArray = Array.from(new Map(combinedArray.map((item) => [item.id, item])).values());
|
||||||
|
setOptions(uniqueArray || []);
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
setOptions([]);
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
setLoading(false);
|
||||||
|
});
|
||||||
|
}, 500);
|
||||||
|
debouncer(inputValue);
|
||||||
|
};
|
||||||
|
|
||||||
const controller = new AbortController();
|
const controller = new AbortController();
|
||||||
fetchCarCodes(inputValue, controller);
|
fetchCarCodes(inputValue, controller);
|
||||||
return () => controller.abort();
|
return () => controller.abort();
|
||||||
}, [inputValue]);
|
}, [inputValue]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Autocomplete
|
<Autocomplete
|
||||||
multiple={multiple}
|
multiple={multiple}
|
||||||
@@ -50,7 +51,7 @@ const CarCode = ({ carCode, setCarCode, inputValueDefault = "", error, multiple
|
|||||||
}}
|
}}
|
||||||
inputValue={inputValue}
|
inputValue={inputValue}
|
||||||
onInputChange={(event, newInputValue) => {
|
onInputChange={(event, newInputValue) => {
|
||||||
setInputValue(newInputValue || ""); // Prevent inputValue from being null or undefined
|
setInputValue(newInputValue || "");
|
||||||
}}
|
}}
|
||||||
options={options}
|
options={options}
|
||||||
getOptionLabel={(option) => {
|
getOptionLabel={(option) => {
|
||||||
|
|||||||
@@ -61,7 +61,8 @@ const DataTable_Main = (props) => {
|
|||||||
}
|
}
|
||||||
params.set("sorting", JSON.stringify(sortData));
|
params.set("sorting", JSON.stringify(sortData));
|
||||||
return `${table_url}?${params}`;
|
return `${table_url}?${params}`;
|
||||||
}, [table_url, filterData, pagination, columns, sortData, specialFilter]);
|
}, [table_url, filterData, pagination, sortData, specialFilter]);
|
||||||
|
|
||||||
const fetcher = async (url) => {
|
const fetcher = async (url) => {
|
||||||
try {
|
try {
|
||||||
const response = await request(url);
|
const response = await request(url);
|
||||||
|
|||||||
@@ -122,8 +122,8 @@ const MapInteraction = ({ setValue, startLat, startLng }) => {
|
|||||||
zIndex: 1000,
|
zIndex: 1000,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Button variant="contained" onClick={handleUnlockMarker}>
|
<Button variant="contained" color="warning" onClick={handleUnlockMarker}>
|
||||||
ویرایش
|
تغییر مکان
|
||||||
</Button>
|
</Button>
|
||||||
</Box>
|
</Box>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ const MapInteraction = ({ setValue, startLat, startLng, endLat, endLng }) => {
|
|||||||
{ lat: startLat, lng: startLng },
|
{ lat: startLat, lng: startLng },
|
||||||
{ lat: endLat, lng: endLng },
|
{ lat: endLat, lng: endLng },
|
||||||
],
|
],
|
||||||
{ paddingTopLeft: [16, 16], paddingBottomRight: [16, 130] }
|
{ paddingTopLeft: [64, 64], paddingBottomRight: [64, 64] }
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}, [startLat, map, endLng]);
|
}, [startLat, map, endLng]);
|
||||||
@@ -142,7 +142,7 @@ const MapInteraction = ({ setValue, startLat, startLng, endLat, endLng }) => {
|
|||||||
zIndex: 1000,
|
zIndex: 1000,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Button variant={"contained"} onClick={handleUnlockStart}>
|
<Button variant={"contained"} color="warning" onClick={handleUnlockStart}>
|
||||||
ویرایش نقطه شروع
|
ویرایش نقطه شروع
|
||||||
</Button>
|
</Button>
|
||||||
</Box>
|
</Box>
|
||||||
@@ -184,8 +184,8 @@ const MapInteraction = ({ setValue, startLat, startLng, endLat, endLng }) => {
|
|||||||
setIsEndLocked(true);
|
setIsEndLocked(true);
|
||||||
setEndIconColor("#D13131");
|
setEndIconColor("#D13131");
|
||||||
map.fitBounds([startPosition, map.getCenter()], {
|
map.fitBounds([startPosition, map.getCenter()], {
|
||||||
paddingTopLeft: [16, 16],
|
paddingTopLeft: [64, 64],
|
||||||
paddingBottomRight: [16, 16],
|
paddingBottomRight: [64, 64],
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -202,7 +202,7 @@ const MapInteraction = ({ setValue, startLat, startLng, endLat, endLng }) => {
|
|||||||
zIndex: 1000,
|
zIndex: 1000,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Button variant={"contained"} onClick={handleUnlockEnd}>
|
<Button variant={"contained"} color="warning" onClick={handleUnlockEnd}>
|
||||||
ویرایش نقاط
|
ویرایش نقاط
|
||||||
</Button>
|
</Button>
|
||||||
</Box>
|
</Box>
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ const ChangePass = ({ open, setOpen }) => {
|
|||||||
<LoadingButton
|
<LoadingButton
|
||||||
loading={loading}
|
loading={loading}
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
color="error"
|
color="secondary"
|
||||||
size="large"
|
size="large"
|
||||||
onClick={handleCloseForm}
|
onClick={handleCloseForm}
|
||||||
>
|
>
|
||||||
@@ -38,7 +38,7 @@ const ChangePass = ({ open, setOpen }) => {
|
|||||||
loadingPosition="end"
|
loadingPosition="end"
|
||||||
endIcon={<SaveIcon />}
|
endIcon={<SaveIcon />}
|
||||||
>
|
>
|
||||||
ثبت
|
تغییر
|
||||||
</LoadingButton>
|
</LoadingButton>
|
||||||
</DialogActions>
|
</DialogActions>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ const Update = ({ open, setOpen }) => {
|
|||||||
<Form handleCloseForm={handleCloseForm} setLoading={setLoading} />
|
<Form handleCloseForm={handleCloseForm} setLoading={setLoading} />
|
||||||
</DialogContent>
|
</DialogContent>
|
||||||
<DialogActions>
|
<DialogActions>
|
||||||
<Button autoFocus variant="outlined" color="error" size="large" onClick={handleCloseForm}>
|
<Button variant="outlined" color="secondary" size="large" onClick={handleCloseForm}>
|
||||||
بستن
|
بستن
|
||||||
</Button>
|
</Button>
|
||||||
<LoadingButton
|
<LoadingButton
|
||||||
@@ -35,7 +35,7 @@ const Update = ({ open, setOpen }) => {
|
|||||||
loadingPosition="end"
|
loadingPosition="end"
|
||||||
endIcon={<SaveIcon />}
|
endIcon={<SaveIcon />}
|
||||||
>
|
>
|
||||||
ثبت
|
ویرایش
|
||||||
</LoadingButton>
|
</LoadingButton>
|
||||||
</DialogActions>
|
</DialogActions>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
|
|||||||
@@ -11,34 +11,34 @@ const RahdarCode = ({ rahdarsCode, setRahdarsCode, error, multiple = true }) =>
|
|||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
const requestServer = useRequest();
|
const requestServer = useRequest();
|
||||||
|
|
||||||
const fetchRahdarCodes = (inputValue, controller) => {
|
|
||||||
const debouncer = debounce((query) => {
|
|
||||||
if ((query || "").length < 3) {
|
|
||||||
setOptions([]);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
setLoading(true);
|
|
||||||
requestServer(`${GET_RAHDARANS_LIST_SEARCH}?code=${query}`, "get", {
|
|
||||||
requestOptions: { signal: controller.signal },
|
|
||||||
})
|
|
||||||
.then((response) => {
|
|
||||||
const combinedArray = rahdarsCode
|
|
||||||
? [...rahdarsCode, ...response.data.data]
|
|
||||||
: [...response.data.data];
|
|
||||||
const uniqueArray = Array.from(new Map(combinedArray.map((item) => [item.id, item])).values());
|
|
||||||
setOptions(uniqueArray || []);
|
|
||||||
})
|
|
||||||
.catch(() => {
|
|
||||||
setOptions([]);
|
|
||||||
})
|
|
||||||
.finally(() => {
|
|
||||||
setLoading(false);
|
|
||||||
});
|
|
||||||
}, 500);
|
|
||||||
debouncer(inputValue);
|
|
||||||
};
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
const fetchRahdarCodes = (inputValue, controller) => {
|
||||||
|
const debouncer = debounce((query) => {
|
||||||
|
if ((query || "").length < 3) {
|
||||||
|
setOptions([]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
setLoading(true);
|
||||||
|
requestServer(`${GET_RAHDARANS_LIST_SEARCH}?code=${query}`, "get", {
|
||||||
|
requestOptions: { signal: controller.signal },
|
||||||
|
})
|
||||||
|
.then((response) => {
|
||||||
|
const combinedArray = rahdarsCode
|
||||||
|
? [...rahdarsCode, ...response.data.data]
|
||||||
|
: [...response.data.data];
|
||||||
|
const uniqueArray = Array.from(new Map(combinedArray.map((item) => [item.id, item])).values());
|
||||||
|
setOptions(uniqueArray || []);
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
setOptions([]);
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
setLoading(false);
|
||||||
|
});
|
||||||
|
}, 500);
|
||||||
|
debouncer(inputValue);
|
||||||
|
};
|
||||||
|
|
||||||
const controller = new AbortController();
|
const controller = new AbortController();
|
||||||
fetchRahdarCodes(inputValue, controller);
|
fetchRahdarCodes(inputValue, controller);
|
||||||
return () => controller.abort();
|
return () => controller.abort();
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
const api = process.env.NEXT_PUBLIC_API_URL;
|
||||||
|
|
||||||
export const headerMenu = [
|
export const headerMenu = [
|
||||||
{
|
{
|
||||||
title: "تصادفات",
|
title: "تصادفات",
|
||||||
@@ -5,7 +7,7 @@ export const headerMenu = [
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
title: "تصادفات روزانه",
|
title: "تصادفات روزانه",
|
||||||
href: "https://rms.witel.ir/v2/daily_accidents/create",
|
href: api + "/v2/daily_accidents/create",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
@@ -16,11 +18,11 @@ export const headerMenu = [
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
title: "گزارش محوری",
|
title: "گزارش محوری",
|
||||||
href: "https://rms.witel.ir/v2/axis_reports",
|
href: api + "/v2/axis_reports",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "هوش تجاری (BI)",
|
title: "هوش تجاری (BI)",
|
||||||
href: "https://rms.witel.ir/v2/axis_reports",
|
href: api + "/v2/axis_reports",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
@@ -31,17 +33,17 @@ export const headerMenu = [
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
title: "پراکندگی بر روی نقشه راهدارخانه ها",
|
title: "پراکندگی بر روی نقشه راهدارخانه ها",
|
||||||
href: "https://rms.witel.ir/v2/map?type=rahdar",
|
href: api + "/v2/map?type=rahdar",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "راهدارخانه ها",
|
title: "راهدارخانه ها",
|
||||||
href: "https://rms.witel.ir/v2/rahdari_points",
|
href: api + "/v2/rahdari_points",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
title: "ممیزی ماشین آلات راهداری کشور",
|
title: "ممیزی ماشین آلات راهداری کشور",
|
||||||
href: "https://rms.witel.ir/cmms-audit",
|
href: api + "/cmms-audit",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
@@ -52,7 +54,7 @@ export const headerMenu = [
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
title: "تحقیق و توسعه",
|
title: "تحقیق و توسعه",
|
||||||
href: "https://rms.witel.ir/RandD",
|
href: api + "/RandD",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "سامانه مدیریت یکپارچه زیرساخت های راه (PMS,BMS,SMS)",
|
title: "سامانه مدیریت یکپارچه زیرساخت های راه (PMS,BMS,SMS)",
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ export const pageMenu = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "roadItemManagmentReportItems",
|
id: "roadItemManagmentReportItems",
|
||||||
label: "تعداد و حجم فعالیت ها به تفکیک موارد مشاهده شده",
|
label: "تعداد و حجم فعالیت ها به تفکیک موارد اقدام شده",
|
||||||
type: "page",
|
type: "page",
|
||||||
route: "/dashboard/road-items/reports/sub-items-report",
|
route: "/dashboard/road-items/reports/sub-items-report",
|
||||||
permissions: [
|
permissions: [
|
||||||
|
|||||||
@@ -30,10 +30,12 @@ export const UPDATE_AZMAYESH_TYPE = api + "/api/v3/azmayesh_types/update";
|
|||||||
|
|
||||||
//road patrol
|
//road patrol
|
||||||
export const GET_ROAD_PATROL_OPERATOR_LIST = api + "/api/v3/road_patrols/operator_index";
|
export const GET_ROAD_PATROL_OPERATOR_LIST = api + "/api/v3/road_patrols/operator_index";
|
||||||
export const EXPORT_ROAD_PATROL_OPERATOR_LIST = "https://rms.witel.ir/v2/road_patrols/operator/cartable/report";
|
export const EXPORT_ROAD_PATROL_OPERATOR_LIST = api + "/v2/road_patrols/operator/cartable/report";
|
||||||
export const GET_ROAD_PATROL_SUPERVISOR_LIST = api + "/api/v3/road_patrols/supervisor_index";
|
export const GET_ROAD_PATROL_SUPERVISOR_LIST = api + "/api/v3/road_patrols/supervisor_index";
|
||||||
export const EXPORT_ROAD_PATROL_SUPERVISOR_LIST = "https://rms.witel.ir/v2/road_patrols/supervisor/cartable/report";
|
export const EXPORT_ROAD_PATROL_SUPERVISOR_LIST = api + "/v2/road_patrols/supervisor/cartable/report";
|
||||||
export const DELETE_ROAD_PATROL_SUPERVISOR = api + "/api/v3/road_patrols/delete";
|
export const DELETE_ROAD_PATROL_SUPERVISOR = api + "/api/v3/road_patrols/delete";
|
||||||
|
export const GET_ROAD_PATROL_OPERATOR_REPORT = api + "/v2/road_patrols/operator/report";
|
||||||
|
export const GET_ROAD_PATROL_SUPERVISOR_REPORT = api + "/v2/road_patrols/supervisor/report";
|
||||||
export const CREATE_PATROL = api + "/api/v3/road_patrols/store";
|
export const CREATE_PATROL = api + "/api/v3/road_patrols/store";
|
||||||
export const GET_FMS_DATA = api + "/api/v3/fms_vehicle/get_activity";
|
export const GET_FMS_DATA = api + "/api/v3/fms_vehicle/get_activity";
|
||||||
export const GET_OTP_TOKEN = api + "/v2/get_otp_token";
|
export const GET_OTP_TOKEN = api + "/v2/get_otp_token";
|
||||||
@@ -45,9 +47,9 @@ export const GET_ROAD_ITEMS_SUPERVISOR_LIST = api + "/api/v3/road_items/supervis
|
|||||||
export const EXPORT_ROAD_ITEMS_SUPERVISOR_LIST = api + "/api/v3/road_items/supervisor_report";
|
export const EXPORT_ROAD_ITEMS_SUPERVISOR_LIST = api + "/api/v3/road_items/supervisor_report";
|
||||||
export const GET_ROAD_ITEMS_OPERATOR_LIST = api + "/api/v3/road_items/operator_index";
|
export const GET_ROAD_ITEMS_OPERATOR_LIST = api + "/api/v3/road_items/operator_index";
|
||||||
export const EXPORT_ROAD_ITEMS_OPERATOR_LIST = api + "/api/v3/road_items/operator_report";
|
export const EXPORT_ROAD_ITEMS_OPERATOR_LIST = api + "/api/v3/road_items/operator_report";
|
||||||
export const GET_ROAD_ITEMS_ITEM = "https://rms.witel.ir/v2/items";
|
export const GET_ROAD_ITEMS_ITEM = api + "/v2/items";
|
||||||
export const GET_ROAD_ITEMS_SUB_ITEM = "https://rms.witel.ir/v2/sub_items";
|
export const GET_ROAD_ITEMS_SUB_ITEM = api + "/v2/sub_items";
|
||||||
export const GET_EDARAT_LISTS = "https://rms.witel.ir/public/contents/edarate_shahri_by_province";
|
export const GET_EDARAT_LISTS = api + "/public/contents/edarate_shahri_by_province";
|
||||||
export const CREATE_ROAD_ITEMS = api + "/api/v3/road_items/store";
|
export const CREATE_ROAD_ITEMS = api + "/api/v3/road_items/store";
|
||||||
export const UPDATE_ROAD_ITEMS = api + "/api/v3/road_items/update";
|
export const UPDATE_ROAD_ITEMS = api + "/api/v3/road_items/update";
|
||||||
export const VERIFY_BY_SUPERVISOR = api + "/api/v3/road_items/verify_by_supervisor";
|
export const VERIFY_BY_SUPERVISOR = api + "/api/v3/road_items/verify_by_supervisor";
|
||||||
|
|||||||
Reference in New Issue
Block a user