Merge branch 'release/v1.6.0'

This commit is contained in:
AmirHossein Mahmoodi
2025-08-13 15:09:36 +03:30
26 changed files with 292 additions and 105 deletions

View File

@@ -1,4 +1,4 @@
HOST="rms.witel.ir"
NEXT_PUBLIC_VERSION="1.5.0"
NEXT_PUBLIC_VERSION="1.6.0"
NEXT_PUBLIC_API_URL="https://rms.witel.ir"
NEXT_PUBLIC_MAPTILE_ENDPOINT="https://rmsmap.rmto.ir/141map"

View File

@@ -46,12 +46,12 @@ const ImageUpload = ({ name, value, onChange, error, title }) => {
>
<FormHelperText
sx={{
fontSize: 14,
fontSize: 12,
border: 1,
borderBottom: 0,
borderColor: "divider",
px: 2,
py: 1,
py: 0.5,
borderRadius: 2,
borderBottomRightRadius: 0,
borderBottomLeftRadius: 0,

View File

@@ -46,12 +46,12 @@ const ImageUpload = ({ name, value, onChange, error, beforeImage = null, title }
>
<FormHelperText
sx={{
fontSize: 14,
fontSize: 12,
border: 1,
borderBottom: 0,
borderColor: "divider",
px: 2,
py: 1,
py: 0.5,
borderRadius: 2,
borderBottomRightRadius: 0,
borderBottomLeftRadius: 0,

View File

@@ -46,12 +46,12 @@ const ImageUpload = ({ name, value, onChange, error, title }) => {
>
<FormHelperText
sx={{
fontSize: 14,
fontSize: 12,
border: 1,
borderBottom: 0,
borderColor: "divider",
px: 2,
py: 1,
py: 0.5,
borderRadius: 2,
borderBottomRightRadius: 0,
borderBottomLeftRadius: 0,

View File

@@ -86,12 +86,12 @@ const ImageUpload = ({ control, setValue, errors, getValues, beforeImage = null,
>
<FormHelperText
sx={{
fontSize: 14,
fontSize: 12,
border: 1,
borderBottom: 0,
borderColor: "divider",
px: 2,
py: 1,
py: 0.5,
borderRadius: 2,
borderBottomRightRadius: 0,
borderBottomLeftRadius: 0,
@@ -135,12 +135,12 @@ const ImageUpload = ({ control, setValue, errors, getValues, beforeImage = null,
>
<FormHelperText
sx={{
fontSize: 14,
fontSize: 12,
border: 1,
borderBottom: 0,
borderColor: "divider",
px: 2,
py: 1,
py: 0.5,
borderRadius: 2,
borderBottomRightRadius: 0,
borderBottomLeftRadius: 0,

View File

@@ -70,12 +70,12 @@ const ImageUpload = ({ control, setValue, errors, getValues, beforeImage = null,
>
<FormHelperText
sx={{
fontSize: 14,
fontSize: 12,
border: 1,
borderBottom: 0,
borderColor: "divider",
px: 2,
py: 1,
py: 0.5,
borderRadius: 2,
borderBottomRightRadius: 0,
borderBottomLeftRadius: 0,

View File

@@ -1,19 +1,18 @@
import React, { useState } from "react";
import { useForm } from "react-hook-form";
import { yupResolver } from "@hookform/resolvers/yup";
import { mixed, number, object, string } from "yup";
import { Box, Button, DialogActions, DialogContent, Tab, Tabs } from "@mui/material";
import StyledForm from "@/core/components/StyledForm";
import InsertDriveFileIcon from "@mui/icons-material/InsertDriveFile";
import FileCopyIcon from "@mui/icons-material/FileCopy";
import ExitToAppIcon from "@mui/icons-material/ExitToApp";
import KeyboardDoubleArrowRightIcon from "@mui/icons-material/KeyboardDoubleArrowRight";
import BeenhereIcon from "@mui/icons-material/Beenhere";
import { FIRST_STEP_STORE } from "@/core/utils/routes";
import useRequest from "@/lib/hooks/useRequest";
import { yupResolver } from "@hookform/resolvers/yup";
import BeenhereIcon from "@mui/icons-material/Beenhere";
import ExitToAppIcon from "@mui/icons-material/ExitToApp";
import FileCopyIcon from "@mui/icons-material/FileCopy";
import InsertDriveFileIcon from "@mui/icons-material/InsertDriveFile";
import KeyboardDoubleArrowRightIcon from "@mui/icons-material/KeyboardDoubleArrowRight";
import { Box, Button, DialogActions, DialogContent, Tab, Tabs } from "@mui/material";
import { useState } from "react";
import { useForm } from "react-hook-form";
import { mixed, number, object, string } from "yup";
import GetItemInfo from "./GetItemInfo";
import GetSubItemInfo from "./GetSubItemInfo";
import { format } from "date-fns";
import { FIRST_STEP_STORE } from "@/core/utils/routes";
function TabPanel(props) {
const { children, value, index } = props;
@@ -25,7 +24,8 @@ function TabPanel(props) {
}
const validationSchema = object({
recognize_picture: mixed().nullable().required("لطفا عکس فعالیت را بارگذاری کنید!"),
recognize_picture: mixed().nullable().required("لطفا تصویر بازدید 1 را بارگذاری کنید!"),
recognize_picture_second: mixed().nullable().required("لطفا تصویر بازدید 2 را بارگذاری کنید!"),
info_id: number().required("نوع آیتم را مشخص کنید!"),
axis_type_id: string().required("نوع محور را مشخص کنید!"),
start_point: mixed()
@@ -44,6 +44,7 @@ const CreateFormContent = ({ setOpen, mutate }) => {
info_id: null,
axis_type_id: "",
recognize_picture: null,
recognize_picture_second: null,
activity_date: "",
activity_time: "",
start_point: "",
@@ -59,7 +60,13 @@ const CreateFormContent = ({ setOpen, mutate }) => {
const handlePrev = () => {
if (tabState === 2) {
const fieldsToReset = ["recognize_picture", "activity_time", "activity_date", "start_point"];
const fieldsToReset = [
"recognize_picture",
"recognize_picture_second",
"activity_time",
"activity_date",
"start_point",
];
fieldsToReset.forEach((field) => resetField(field));
}
if (tabState === 0) {
@@ -87,6 +94,7 @@ const CreateFormContent = ({ setOpen, mutate }) => {
formData.append("info_id", data.info_id);
formData.append("axis_type_id", data.axis_type_id);
formData.append("recognize_picture", data.recognize_picture);
formData.append("recognize_picture_second", data.recognize_picture_second);
formData.append("point", startPoint);
await requestServer(FIRST_STEP_STORE, "post", {
data: formData,

View File

@@ -95,7 +95,7 @@ const GetSubItemInfo = ({ itemsList, control, setValue, errors }) => {
name={"activity_time"}
/>
</Grid>
<Grid item xs={12} sm={12}>
<Grid item xs={12} sm={6}>
<Controller
name="recognize_picture"
control={control}
@@ -105,7 +105,22 @@ const GetSubItemInfo = ({ itemsList, control, setValue, errors }) => {
value={field.value}
error={error}
onChange={field.onChange}
title={"تصویر مورد مشاهده شده"}
title={"تصویر بازدید 1"}
/>
)}
/>
</Grid>
<Grid item xs={12} sm={6}>
<Controller
name="recognize_picture_second"
control={control}
render={({ field, fieldState: { error } }) => (
<ImageUpload
name={field.name}
value={field.value}
error={error}
onChange={field.onChange}
title={"تصویر بازدید 2"}
/>
)}
/>

View File

@@ -46,12 +46,12 @@ const ImageUpload = ({ name, value, onChange, error, title }) => {
>
<FormHelperText
sx={{
fontSize: 14,
fontSize: 12,
border: 1,
borderBottom: 0,
borderColor: "divider",
px: 2,
py: 1,
py: 0.5,
borderRadius: 2,
borderBottomRightRadius: 0,
borderBottomLeftRadius: 0,

View File

@@ -46,12 +46,12 @@ const ImageUpload = ({ name, value, onChange, error, title }) => {
>
<FormHelperText
sx={{
fontSize: 14,
fontSize: 12,
border: 1,
borderBottom: 0,
borderColor: "divider",
px: 2,
py: 1,
py: 0.5,
borderRadius: 2,
borderBottomRightRadius: 0,
borderBottomLeftRadius: 0,

View File

@@ -4,7 +4,7 @@ import StyledForm from "@/core/components/StyledForm";
import { THIRD_STEP_STORE } from "@/core/utils/routes";
import useRequest from "@/lib/hooks/useRequest";
import { yupResolver } from "@hookform/resolvers/yup";
import { Button, DialogActions, DialogContent, Grid, Stack } from "@mui/material";
import { Button, DialogActions, DialogContent, Divider, Grid, Stack } from "@mui/material";
import { Controller, useForm } from "react-hook-form";
import { mixed, object, string } from "yup";
import ImageUpload from "./ImageUpload";
@@ -15,11 +15,15 @@ const StepThreeContent = ({ setOpen, mutate, rowId }) => {
action_date: "",
action_time: "",
action_picture: null,
finish_picture: null,
evidence_picture: null,
};
const validationSchema = object({
action_date: string().required("لطفا تاریخ اقدام را انتخاب کنید!"),
action_time: string().required("لطفا ساعت اقدام را انتخاب کنید!"),
action_picture: mixed().nullable().required("لطفا عکس اقدام را بارگذاری کنید!"),
action_picture: mixed().nullable().required("لطفا تصویر در حین انجام را بارگذاری کنید!"),
finish_picture: mixed().nullable().required("لطفا تصویر بعد از انجام را بارگذاری کنید!"),
evidence_picture: mixed().nullable().required("لطفا تصویر بعد صورت جلسه را بارگذاری کنید!"),
});
const {
control,
@@ -34,6 +38,8 @@ const StepThreeContent = ({ setOpen, mutate, rowId }) => {
const formData = new FormData();
formData.append("action_date", `${data.action_date} ${data.action_time.toString().padStart(2, "0")}:00`);
formData.append("action_picture", data.action_picture);
formData.append("finish_picture", data.finish_picture);
formData.append("evidence_picture", data.evidence_picture);
await requestServer(`${THIRD_STEP_STORE}/${rowId}`, "post", {
data: formData,
hasSidebarUpdate: true,
@@ -85,19 +91,54 @@ const StepThreeContent = ({ setOpen, mutate, rowId }) => {
/>
</Grid>
</Grid>
<Controller
name="action_picture"
control={control}
render={({ field, fieldState: { error } }) => (
<ImageUpload
name={field.name}
value={field.value}
error={error}
onChange={field.onChange}
title={"تصویر اقدام"}
<Divider sx={{ my: 2 }} />
<Grid container spacing={2}>
<Grid item xs={12} sm={6}>
<Controller
name="action_picture"
control={control}
render={({ field, fieldState: { error } }) => (
<ImageUpload
name={field.name}
value={field.value}
error={error}
onChange={field.onChange}
title={"تصویر در حین کار"}
/>
)}
/>
)}
/>
</Grid>
<Grid item xs={12} sm={6}>
<Controller
name="finish_picture"
control={control}
render={({ field, fieldState: { error } }) => (
<ImageUpload
name={field.name}
value={field.value}
error={error}
onChange={field.onChange}
title={"تصویر اتمام عملیات"}
/>
)}
/>
</Grid>
<Grid item xs={12} sm={6}>
<Controller
name="evidence_picture"
control={control}
render={({ field, fieldState: { error } }) => (
<ImageUpload
name={field.name}
value={field.value}
error={error}
onChange={field.onChange}
title={"تصویر صورت جلسه"}
/>
)}
/>
</Grid>
</Grid>
</Stack>
</DialogContent>
<DialogActions>

View File

@@ -24,7 +24,7 @@ const StepThree = ({ mutate, rowId }) => {
fullWidth
>
<DialogTitle>ثبت اقدام</DialogTitle>
<StepThreeContent setOpen={setOpen} mutate={mutate} rowId={rowId} />
{open && <StepThreeContent setOpen={setOpen} mutate={mutate} rowId={rowId} />}
</Dialog>
</>
);

View File

@@ -206,8 +206,8 @@ const OperatorList = () => {
{row.original.is_finished == 1
? "خاتمه یافته"
: row.original.is_finished == 0
? "در جریان"
: "-"}
? "در جریان"
: "-"}
</>
),
},
@@ -293,7 +293,7 @@ const OperatorList = () => {
columns: [
{
accessorKey: "recognize_picture",
header: "تصویر بازدید",
header: "تصاویر بازدید",
id: "recognize_picture",
enableColumnFilter: false,
enableSorting: false,
@@ -309,10 +309,13 @@ const OperatorList = () => {
},
},
},
Cell: ({ renderedCellValue }) => {
return renderedCellValue ? (
Cell: ({ row }) => {
return row.original.recognize_picture ? (
<Stack alignItems={"center"} justifyContent={"center"}>
<RecognizePictureDialog image={renderedCellValue} />
<RecognizePictureDialog
image1={row.original.recognize_picture ?? ""}
image2={row.original.recognize_picture_second ?? ""}
/>
</Stack>
) : (
<>-</>
@@ -366,7 +369,7 @@ const OperatorList = () => {
return (
<Stack alignItems={"center"} justifyContent={"center"}>
{row.original.judiciary_document_upload_date !== "0000-00-00 00:00:00" &&
row.original.judiciary_document_upload_date ? (
row.original.judiciary_document_upload_date ? (
<JudiciaryDocumentDialog rowId={row.getValue("id")} />
) : (
<>-</>
@@ -431,7 +434,7 @@ const OperatorList = () => {
columns: [
{
accessorKey: "action_picture",
header: "تصویر اقدام",
header: "تصاویر اقدام",
id: "action_picture",
enableColumnFilter: false,
enableSorting: false,
@@ -447,10 +450,14 @@ const OperatorList = () => {
},
},
},
Cell: ({ renderedCellValue }) => {
return renderedCellValue ? (
Cell: ({ row }) => {
return row.original.action_picture ? (
<Stack alignItems={"center"} justifyContent={"center"}>
<ActionPictureDialog image={renderedCellValue} />
<ActionPictureDialog
image1={row.original.action_picture ?? ""}
image2={row.original.finish_picture ?? ""}
image3={row.original.evidence_picture ?? ""}
/>
</Stack>
) : (
<>-</>

View File

@@ -0,0 +1,13 @@
import { Stack } from "@mui/material";
import ActionPictureContent from "./ActionPictureContent";
const List = ({ image1, image2, image3 }) => {
return (
<Stack>
<ActionPictureContent image={image1} title={"تصویر در حین کار"} />
<ActionPictureContent image={image2} title={"تصویر اتمام عملیات"} />
<ActionPictureContent image={image3} title={"تصویر صورت جلسه"} />
</Stack>
);
};
export default List;

View File

@@ -1,14 +1,14 @@
import PhotoLibraryIcon from "@mui/icons-material/PhotoLibrary";
import { Button, Dialog, DialogActions, DialogContent, IconButton, Tooltip } from "@mui/material";
import { useState } from "react";
import ActionPictureContent from "./ActionPictureContent";
import List from "./List";
const ActionPictureDialog = ({ image }) => {
const ActionPictureDialog = ({ image1, image2, image3 }) => {
const [openImageDialog, setOpenImageDialog] = useState(false);
return (
<>
<Tooltip title="تصویر اقدام">
<Tooltip title="تصاویر اقدام">
<IconButton color="primary" onClick={() => setOpenImageDialog(true)}>
<PhotoLibraryIcon />
</IconButton>
@@ -26,7 +26,7 @@ const ActionPictureDialog = ({ image }) => {
scroll="paper"
>
<DialogContent>
<ActionPictureContent image={image} title={"تصویر اقدام"} />
<List image1={image1} image2={image2} image3={image3} />
</DialogContent>
<DialogActions>
<Button onClick={() => setOpenImageDialog(false)} variant="outlined" color="secondary">

View File

@@ -0,0 +1,12 @@
import { Stack } from "@mui/material";
import RecognizePictureContent from "./RecognizePictureContent";
const List = ({ image1, image2 }) => {
return (
<Stack>
<RecognizePictureContent image={image1} title={"تصویر بازدید 1"} />
<RecognizePictureContent image={image2} title={"تصویر بازدید 2"} />
</Stack>
);
};
export default List;

View File

@@ -1,9 +1,9 @@
import PhotoLibraryIcon from "@mui/icons-material/PhotoLibrary";
import { Button, Dialog, DialogActions, DialogContent, IconButton, Tooltip } from "@mui/material";
import { useState } from "react";
import RecognizePictureContent from "./RecognizePictureContent";
import List from "./List";
const RecognizePictureDialog = ({ image }) => {
const RecognizePictureDialog = ({ image1, image2 }) => {
const [openImageDialog, setOpenImageDialog] = useState(false);
return (
@@ -26,7 +26,7 @@ const RecognizePictureDialog = ({ image }) => {
scroll="paper"
>
<DialogContent>
<RecognizePictureContent image={image} title={"تصویر بازدید"} />
<List image1={image1} image2={image2} />
</DialogContent>
<DialogActions>
<Button onClick={() => setOpenImageDialog(false)} variant="outlined" color="secondary">

View File

@@ -79,23 +79,73 @@ const ContentInfoItem = ({ data }) => {
/>
</Box>
</Stack>
<Stack
sx={{ flex: 1, border: 1, borderColor: "divider", borderRadius: 2, p: 1 }}
spacing={1}
alignItems={"center"}
>
<Chip size="small" label="تصویر بازدید" />
<Box sx={{ position: "relative", height: 300, width: "100%" }}>
<Image
src={data.recognize_picture_second}
style={{ objectFit: "contain" }}
alt="recognize_picture"
fill
sizes="(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw"
/>
</Box>
</Stack>
{data.step == 3 && (
<Stack
sx={{ flex: 1, border: 1, borderColor: "divider", borderRadius: 2, p: 1 }}
spacing={1}
alignItems={"center"}
>
<Chip size="small" label="تصویر اقدام" />
<Box sx={{ position: "relative", height: 300, width: "100%" }}>
<Image
src={data.action_picture}
style={{ objectFit: "contain" }}
alt="action_picture"
fill
sizes="(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw"
/>
</Box>
</Stack>
<>
<Stack
sx={{ flex: 1, border: 1, borderColor: "divider", borderRadius: 2, p: 1 }}
spacing={1}
alignItems={"center"}
>
<Chip size="small" label="تصویر در حین کار" />
<Box sx={{ position: "relative", height: 300, width: "100%" }}>
<Image
src={data.action_picture}
style={{ objectFit: "contain" }}
alt="action_picture"
fill
sizes="(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw"
/>
</Box>
</Stack>
<Stack
sx={{ flex: 1, border: 1, borderColor: "divider", borderRadius: 2, p: 1 }}
spacing={1}
alignItems={"center"}
>
<Chip size="small" label="تصویر اتمام عملیات" />
<Box sx={{ position: "relative", height: 300, width: "100%" }}>
<Image
src={data.finish_picture}
style={{ objectFit: "contain" }}
alt="finish_picture"
fill
sizes="(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw"
/>
</Box>
</Stack>
<Stack
sx={{ flex: 1, border: 1, borderColor: "divider", borderRadius: 2, p: 1 }}
spacing={1}
alignItems={"center"}
>
<Chip size="small" label={"تصویر صورت جلسه"} />
<Box sx={{ position: "relative", height: 300, width: "100%" }}>
<Image
src={data.evidence_picture}
style={{ objectFit: "contain" }}
alt="evidence_picture"
fill
sizes="(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw"
/>
</Box>
</Stack>
</>
)}
</Stack>
</Stack>

View File

@@ -0,0 +1,13 @@
import { Stack } from "@mui/material";
import ActionPictureContent from "./ActionPictureContent";
const List = ({ image1, image2, image3 }) => {
return (
<Stack>
<ActionPictureContent image={image1} title={"تصویر در حین کار"} />
<ActionPictureContent image={image2} title={"تصویر اتمام عملیات"} />
<ActionPictureContent image={image3} title={"تصویر صورت جلسه"} />
</Stack>
);
};
export default List;

View File

@@ -1,14 +1,14 @@
import PhotoLibraryIcon from "@mui/icons-material/PhotoLibrary";
import { Button, Dialog, DialogActions, DialogContent, IconButton, Tooltip } from "@mui/material";
import { useState } from "react";
import ActionPictureContent from "./ActionPictureContent";
import List from "./List";
const ActionPictureDialog = ({ image }) => {
const ActionPictureDialog = ({ image1, image2, image3 }) => {
const [openImageDialog, setOpenImageDialog] = useState(false);
return (
<>
<Tooltip title="تصویر اقدام">
<Tooltip title="تصاویر اقدام">
<IconButton color="primary" onClick={() => setOpenImageDialog(true)}>
<PhotoLibraryIcon />
</IconButton>
@@ -26,7 +26,7 @@ const ActionPictureDialog = ({ image }) => {
scroll="paper"
>
<DialogContent>
<ActionPictureContent image={image} title={"تصویر اقدام"} />
<List image1={image1} image2={image2} image3={image3} />
</DialogContent>
<DialogActions>
<Button onClick={() => setOpenImageDialog(false)} variant="outlined" color="secondary">

View File

@@ -0,0 +1,12 @@
import { Stack } from "@mui/material";
import RecognizePictureContent from "./RecognizePictureContent";
const List = ({ image1, image2 }) => {
return (
<Stack>
<RecognizePictureContent image={image1} title={"تصویر بازدید 1"} />
<RecognizePictureContent image={image2} title={"تصویر بازدید 2"} />
</Stack>
);
};
export default List;

View File

@@ -1,9 +1,9 @@
import PhotoLibraryIcon from "@mui/icons-material/PhotoLibrary";
import { Button, Dialog, DialogActions, DialogContent, IconButton, Tooltip } from "@mui/material";
import { useState } from "react";
import RecognizePictureContent from "./RecognizePictureContent";
import List from "./List";
const RecognizePictureDialog = ({ image }) => {
const RecognizePictureDialog = ({ image1, image2 }) => {
const [openImageDialog, setOpenImageDialog] = useState(false);
return (
@@ -26,7 +26,7 @@ const RecognizePictureDialog = ({ image }) => {
scroll="paper"
>
<DialogContent>
<RecognizePictureContent image={image} title={"تصویر بازدید"} />
<List image1={image1} image2={image2} />
</DialogContent>
<DialogActions>
<Button onClick={() => setOpenImageDialog(false)} variant="outlined" color="secondary">

View File

@@ -155,8 +155,8 @@ const SupervisorList = () => {
props.dependencyFieldValue?.value === ""
? "empty"
: loadingEdaratList
? "loading"
: props.filterParameters.value
? "loading"
: props.filterParameters.value
}
columnSelectOption={getColumnSelectOptions}
/>
@@ -313,8 +313,8 @@ const SupervisorList = () => {
{row.original.is_finished == 1
? "خاتمه یافته"
: row.original.is_finished == 0
? "در جریان"
: "-"}
? "در جریان"
: "-"}
</>
),
},
@@ -400,7 +400,7 @@ const SupervisorList = () => {
columns: [
{
accessorKey: "recognize_picture",
header: "تصویر بازدید",
header: "تصاویر بازدید",
id: "recognize_picture",
enableColumnFilter: false,
enableSorting: false,
@@ -416,10 +416,13 @@ const SupervisorList = () => {
},
},
},
Cell: ({ renderedCellValue }) => {
return renderedCellValue ? (
Cell: ({ row }) => {
return row.original.recognize_picture ? (
<Stack alignItems={"center"} justifyContent={"center"}>
<RecognizePictureDialog image={renderedCellValue} />
<RecognizePictureDialog
image1={row.original.recognize_picture ?? ""}
image2={row.original.recognize_picture_second ?? ""}
/>
</Stack>
) : (
<>-</>
@@ -473,7 +476,7 @@ const SupervisorList = () => {
return (
<Stack alignItems={"center"} justifyContent={"center"}>
{row.original.judiciary_document_upload_date !== "0000-00-00 00:00:00" &&
row.original.judiciary_document_upload_date ? (
row.original.judiciary_document_upload_date ? (
<JudiciaryDocumentDialog rowId={row.getValue("id")} />
) : (
<>-</>
@@ -538,7 +541,7 @@ const SupervisorList = () => {
columns: [
{
accessorKey: "action_picture",
header: "تصویر اقدام",
header: "تصاویر اقدام",
id: "action_picture",
enableColumnFilter: false,
enableSorting: false,
@@ -554,10 +557,14 @@ const SupervisorList = () => {
},
},
},
Cell: ({ renderedCellValue }) => {
return renderedCellValue ? (
Cell: ({ row }) => {
return row.original.action_picture ? (
<Stack alignItems={"center"} justifyContent={"center"}>
<ActionPictureDialog image={renderedCellValue} />
<ActionPictureDialog
image1={row.original.action_picture ?? ""}
image2={row.original.finish_picture ?? ""}
image3={row.original.evidence_picture ?? ""}
/>
</Stack>
) : (
<>-</>

View File

@@ -46,12 +46,12 @@ const ImageUpload = ({ name, value, onChange, error, title }) => {
>
<FormHelperText
sx={{
fontSize: 14,
fontSize: 12,
border: 1,
borderBottom: 0,
borderColor: "divider",
px: 2,
py: 1,
py: 0.5,
borderRadius: 2,
borderBottomRightRadius: 0,
borderBottomLeftRadius: 0,

View File

@@ -9,7 +9,7 @@ import moment from "jalali-moment";
import { headerMenu } from "@/core/utils/headerMenu";
import SidebarMenu from "./Sidebar/SidebarMenu";
const drawerWidth = 275;
const drawerWidth = 280;
const headersHeight = 51;
const Main = styled(Stack, { shouldForwardProp: (prop) => prop !== "open" })(({ theme, open }) => ({

View File

@@ -21,6 +21,7 @@ import AssignmentLateIcon from "@mui/icons-material/AssignmentLate";
import LockPersonIcon from "@mui/icons-material/LockPerson";
import LineAxisIcon from "@mui/icons-material/LineAxis";
import ScienceIcon from "@mui/icons-material/Science";
import HandymanIcon from "@mui/icons-material/Handyman";
import DriveEtaIcon from "@mui/icons-material/DriveEta";
import BiotechIcon from "@mui/icons-material/Biotech";
import Mediation from "@mui/icons-material/Mediation";
@@ -539,6 +540,14 @@ export const pageMenu = [
icon: <BiotechIcon sx={{ width: "inherit", height: "inherit" }} />,
permissions: ["azmayesh-type-management"],
},
{
id: "rahdaran",
label: "راهداران",
type: "page",
route: "/dashboard/rahdaran",
icon: <HandymanIcon sx={{ width: "inherit", height: "inherit" }} />,
permissions: ["show-rahdaran"],
},
{
id: "adminManagement",
label: "مدیریت سامانه",