add form create inquiryPrivacyFencing

This commit is contained in:
Amirhossein Mahmoodi
2024-07-13 11:10:53 +03:30
parent 56fbe67483
commit 4efc228d31
5 changed files with 539 additions and 388 deletions

View File

@@ -28,6 +28,7 @@
"next": "^14.2.3", "next": "^14.2.3",
"react": "^18", "react": "^18",
"react-dom": "^18", "react-dom": "^18",
"react-hook-form": "^7.52.1",
"react-leaflet": "^4.2.1", "react-leaflet": "^4.2.1",
"react-toastify": "^10.0.5", "react-toastify": "^10.0.5",
"sass": "^1.75.0", "sass": "^1.75.0",
@@ -42,4 +43,4 @@
"eslint-config-prettier": "^9.1.0", "eslint-config-prettier": "^9.1.0",
"prettier": "^3.3.2" "prettier": "^3.3.2"
} }
} }

View File

@@ -9,12 +9,12 @@ const MapLayer = dynamic(() => import("@/core/components/MapLayer"), {
ssr: false, ssr: false,
}); });
const LocationOnMap = () => { const LocationOnMap = ({ setValue }) => {
return ( return (
<Stack sx={{ height: "100%", position: "relative" }}> <Stack sx={{ height: "100%", position: "relative" }}>
<Paper sx={{ flexGrow: 1 }} elevation={0}> <Paper sx={{ flexGrow: 1 }} elevation={0}>
<MapLayer style={{ borderRadius: '4px' }}> <MapLayer style={{ borderRadius: '4px' }}>
<MarkerLocation /> <MarkerLocation setValue={setValue} />
</MapLayer> </MapLayer>
</Paper> </Paper>
</Stack> </Stack>

View File

@@ -2,415 +2,568 @@ import LtrTextField from "@/core/components/LtrTextField";
import StyledForm from "@/core/components/StyledForm"; import StyledForm from "@/core/components/StyledForm";
import { SET_INQUIRE_PRIVACY_FENCING } from "@/core/utils/routes"; import { SET_INQUIRE_PRIVACY_FENCING } from "@/core/utils/routes";
import useRequest from "@/lib/hooks/useRequest"; import useRequest from "@/lib/hooks/useRequest";
import { Autocomplete, Button, Chip, DialogActions, DialogContent, Fade, Grid, InputAdornment, Stack, TextField, Typography } from "@mui/material"; import { Autocomplete, Box, Button, Chip, DialogActions, DialogContent, Fade, Grid, InputAdornment, Stack, TextField, Typography } from "@mui/material";
import { DatePicker, LocalizationProvider, faIR } from "@mui/x-date-pickers"; import { DatePicker, LocalizationProvider, faIR } from "@mui/x-date-pickers";
import { AdapterDateFnsJalali } from "@mui/x-date-pickers/AdapterDateFnsJalali"; import { AdapterDateFnsJalali } from "@mui/x-date-pickers/AdapterDateFnsJalali";
import { Formik } from "formik";
import moment from "jalali-moment"; import moment from "jalali-moment";
import { Controller, useForm } from "react-hook-form";
import LocationOnMap from "./LocationOnMap"; import LocationOnMap from "./LocationOnMap";
const CreateForm = ({ handleClose }) => { const CreateForm = ({ handleClose }) => {
const { control, watch, register, handleSubmit, setValue } = useForm({
defaultValues: {
dabirkhaneh_number: '',
nameh_date: moment(),
nameh_date_fa: '',
marjae_pasokh: '',
motaghazi_is_legal_id: null,
motaghazi_is_legal: '',
motaghazi_type_id: '',
motaghazi_type: null,
motaghazi_firstname: '',
motaghazi_lastname: '',
national_id: '',
shenase_melli: '',
tel_number: '',
mobile_number: '',
address: '',
edare_kol_id: null,
edare_kol: '',
edare_shahri_id: null,
edare_shahri: '',
rah_type_id: null,
rah_type: '',
name_mehvar_id: '',
name_mehvar_fa: null,
mizan_harim: null,
arze_navar: null,
samt_id: null,
samt: '',
kilometr: '',
lat: '',
lon: '',
zone: null,
karbari_type_id: null,
karbari_type: '',
tarh_title: '',
masahat_zirbana: '',
ehdasat_type_id: [],
ehdasat_type: '',
divarkeshi_distance: '',
mostahadesat_distance: '',
mahale_ejra_id: null,
mahale_ejra: '',
traffic_id: null,
traffic: '',
vaziat_eghtesadi_id: null,
vaziat_eghtesadi: '',
has_access_id: null,
has_access: '',
shomare_estelam_harim: '',
max_month: '',
max_day: '',
shomare_tahaodname: '',
shomare_daftarkhaneh: '',
description: '',
ronevesht: '',
}
});
const request = useRequest() const request = useRequest()
const onSubmit = async (data) => {
const formData = new FormData()
formData.append('dabirkhaneh_number', data.dabirkhaneh_number)
formData.append('nameh_date', data.nameh_date.format('YYYY-MM-DD'))
formData.append('nameh_date_fa', data.nameh_date)
formData.append('marjae_pasokh', data.marjae_pasokh)
formData.append('motaghazi_is_legal_id', data.motaghazi_is_legal_id)
formData.append('motaghazi_is_legal', data.motaghazi_is_legal_id)
formData.append('motaghazi_type_id', 1)
formData.append('motaghazi_type', data.motaghazi_type)
formData.append('motaghazi_firstname', data.motaghazi_firstname)
formData.append('motaghazi_lastname', data.motaghazi_lastname)
formData.append('national_id', data.national_id)
formData.append('shenase_melli', data.national_id)
formData.append('tel_number', data.tel_number)
formData.append('mobile_number', data.mobile_number)
formData.append('address', data.address)
formData.append('edare_kol_id', data.edare_kol_id)
formData.append('edare_kol', data.edare_kol_id)
formData.append('edare_shahri_id', data.edare_shahri_id)
formData.append('edare_shahri', data.edare_shahri_id)
formData.append('rah_type_id', data.rah_type_id)
formData.append('rah_type', data.rah_type_id)
formData.append('name_mehvar_id', 1)
formData.append('name_mehvar_fa', data.name_mehvar_id)
formData.append('mizan_harim', data.mizan_harim)
formData.append('arze_navar', data.arze_navar)
formData.append('samt_id', data.samt_id)
formData.append('samt', data.samt_id)
formData.append('kilometr', data.kilometr)
formData.append('lat', data.lat)
formData.append('lon', data.lon)
formData.append('zone', data.zone)
formData.append('karbari_type_id', data.karbari_type_id)
formData.append('karbari_type', data.karbari_type_id)
formData.append('tarh_title', data.tarh_title)
formData.append('masahat_zirbana', data.masahat_zirbana)
formData.append('ehdasat_type_id', data.ehdasat_type_id.join("|"))
formData.append('ehdasat_type', data.ehdasat_type_id.join("|"))
formData.append('divarkeshi_distance', data.divarkeshi_distance)
formData.append('mostahadesat_distance', data.mostahadesat_distance)
formData.append('mahale_ejra_id', data.mahale_ejra_id)
formData.append('mahale_ejra', data.mahale_ejra)
formData.append('traffic_id', data.traffic_id)
formData.append('traffic', data.traffic_id)
formData.append('vaziat_eghtesadi_id', data.vaziat_eghtesadi_id)
formData.append('vaziat_eghtesadi', data.vaziat_eghtesadi)
formData.append('has_access_id', data.has_access_id)
formData.append('has_access', data.has_access_id)
formData.append('shomare_estelam_harim', data.shomare_estelam_harim)
formData.append('max_month', data.max_month)
formData.append('max_day', data.max_day)
formData.append('shomare_tahaodname', data.shomare_tahaodname)
formData.append('shomare_daftarkhaneh', data.shomare_daftarkhaneh)
formData.append('description', data.description)
formData.append('ronevesht', data.ronevesht)
try {
await request(SET_INQUIRE_PRIVACY_FENCING, 'post', { data: formData })
handleClose()
} catch (error) {
}
};
return ( return (
<LocalizationProvider <LocalizationProvider
dateAdapter={AdapterDateFnsJalali} dateAdapter={AdapterDateFnsJalali}
localeText={faIR.components.MuiLocalizationProvider.defaultProps.localeText} localeText={faIR.components.MuiLocalizationProvider.defaultProps.localeText}
> >
<Formik <DialogContent>
initialValues={{ <StyledForm onSubmit={handleSubmit(onSubmit)} id={'InquiryPrivacyFencingCreateForm'}>
dabirkhaneh_number: '', <Grid container columns={{ xs: 1, sm: 2, md: 3 }} spacing={4}>
nameh_date: moment(), <Grid item xs={1}>
nameh_date_fa: '', <LtrTextField {...register('dabirkhaneh_number')} required label="شماره دبیرخانه درخواست" size="small" fullWidth type="tel" />
marjae_pasokh: '', </Grid>
motaghazi_is_legal_id: null, <Grid item xs={1}>
motaghazi_is_legal: '', <Controller
motaghazi_type_id: null, name="nameh_date"
motaghazi_type: '', control={control}
motaghazi_firstname: '', render={({ field: { onChange, value } }) => (
motaghazi_lastname: '', <DatePicker
national_id: '', value={value.toDate()}
shenase_melli: '', onChange={(newValue) => onChange(moment(newValue))}
tel_number: '', label="تاریخ نامه درخواست"
mobile_number: '', slotProps={{
address: '', textField: { fullWidth: true, size: "small" },
edare_kol_id: null, }}
edare_kol: '', />
edare_shahri_id: null, )}
edare_shahri: '', />
rah_type_id: null, </Grid>
rah_type: '', <Grid item xs={1}>
name_mehvar_id: null, <TextField {...register('marjae_pasokh')} label="مرجع درخواست کننده پاسخ به استعلام" size="small" fullWidth />
name_mehvar_fa: '', </Grid>
mizan_harim: null, <Grid item xs={1}>
arze_navar: null, <Controller
samt_id: null, name="motaghazi_is_legal_id"
samt: '', control={control}
kilometr: '', render={({ field: { onChange, value } }) => (
lat: '', <Autocomplete
lon: '', size="small"
zone: null, disablePortal
karbari_type_id: null, value={value}
karbari_type: '', onChange={(event, newValue) => {
tarh_title: '', onChange(newValue)
masahat_zirbana: '', }}
ehdasat_type_id: [], options={["حقوقی", "حقیقی"]}
ehdasat_type: '', renderInput={(params) => <TextField fullWidth {...params} label="متقاضی" required />}
divarkeshi_distance: '', />
mostahadesat_distance: '', )}
mahale_ejra_id: null, />
mahale_ejra: '', </Grid>
traffic_id: null, <Grid item xs={1}>
traffic: '', <Fade in={watch('motaghazi_is_legal_id') === 'حقوقی'} mountOnEnter={true} unmountOnExit={true}>
vaziat_eghtesadi_id: null, <Box>
vaziat_eghtesadi: '', <Controller
has_access_id: null, name="motaghazi_type"
has_access: '', control={control}
shomare_estelam_harim: '', render={({ field: { onChange, value } }) => (
max_month: '',
max_day: '',
shomare_tahaodname: '',
shomare_daftarkhaneh: '',
description: '',
ronevesht: '',
}}
onSubmit={async (values, { setSubmitting }) => {
try {
await request(SET_INQUIRE_PRIVACY_FENCING, 'post', { data: { ...values, ehdasat_type_id: values.ehdasat_type_id.join("|") } })
handleClose()
} catch (error) {
}
finally {
setSubmitting(false);
}
}}
>
{formik => (
<>
<DialogContent>
<StyledForm onSubmit={formik.handleSubmit} id={'InquiryPrivacyFencingCreateForm'}>
<Grid container columns={{ xs: 1, sm: 2, md: 3 }} spacing={4}>
<Grid item xs={1}>
<LtrTextField name="dabirkhaneh_number" value={formik.values.dabirkhaneh_number} onChange={formik.handleChange} required label="شماره دبیرخانه درخواست" size="small" fullWidth type="tel" />
</Grid>
<Grid item xs={1}>
<DatePicker
value={formik.values.nameh_date.toDate()} onChange={(newValue) => formik.setFieldValue('nameh_date', moment(newValue))}
label="تاریخ نامه درخواست"
slotProps={{
textField: { fullWidth: true, size: "small" },
}}
/>
</Grid>
<Grid item xs={1}>
<TextField name="marjae_pasokh" value={formik.values.marjae_pasokh} onChange={formik.handleChange} label="مرجع درخواست کننده پاسخ به استعلام" size="small" fullWidth />
</Grid>
<Grid item xs={1}>
<Autocomplete
size="small"
disablePortal
value={formik.values.motaghazi_is_legal_id}
onChange={(event, newValue) => {
formik.setFieldValue('motaghazi_is_legal_id', newValue)
}}
options={["حقوقی", "حقیقی"]}
renderInput={(params) => <TextField fullWidth {...params} label="متقاضی" required />}
/>
</Grid>
<Grid item xs={1}>
<Fade in={formik.values.motaghazi_is_legal_id === 'حقوقی'} mountOnEnter={true} unmountOnExit={true}>
<Autocomplete <Autocomplete
size="small" size="small"
disablePortal disablePortal
value={formik.values.motaghazi_type_id} value={value}
onChange={(event, newValue) => { onChange={(event, newValue) => {
formik.setFieldValue('motaghazi_type_id', newValue) onChange(newValue)
}} }}
options={["دولتی", "خصوصی"]} options={["دولتی", "خصوصی"]}
renderInput={(params) => <TextField fullWidth {...params} label="نوع متقاضی" required />} renderInput={(params) => <TextField fullWidth {...params} label="نوع متقاضی" required />}
/> />
</Fade> )}
</Grid> />
<Grid item xs={1}></Grid> </Box>
<Grid item xs={1}> </Fade>
<TextField name="motaghazi_firstname" value={formik.values.motaghazi_firstname} onChange={formik.handleChange} label="نام متقاضی" size="small" fullWidth required /> </Grid>
</Grid> <Grid item xs={1}></Grid>
<Grid item xs={1}> <Grid item xs={1}>
<Fade in={formik.values.motaghazi_is_legal_id === 'حقیقی'} mountOnEnter={true} unmountOnExit={true}> <TextField {...register('motaghazi_firstname')} label="نام متقاضی" size="small" fullWidth required />
<TextField name="motaghazi_lastname" value={formik.values.motaghazi_lastname} onChange={formik.handleChange} label="نام خانوادگی متقاضی" size="small" fullWidth required /> </Grid>
</Fade> <Grid item xs={1}>
</Grid> <Fade in={watch('motaghazi_is_legal_id') === 'حقیقی'} mountOnEnter={true} unmountOnExit={true}>
<Grid item xs={1}> <TextField {...register('motaghazi_lastname')} label="نام خانوادگی متقاضی" size="small" fullWidth required />
<LtrTextField name="national_id" value={formik.values.national_id} onChange={formik.handleChange} required label="کد ملی/شناسه ملی" size="small" fullWidth type="tel" /> </Fade>
</Grid> </Grid>
<Grid item xs={1}> <Grid item xs={1}>
<LtrTextField name="tel_number" value={formik.values.tel_number} onChange={formik.handleChange} label="تلفن" size="small" fullWidth type="tel" /> <LtrTextField {...register('national_id')} required label="کد ملی/شناسه ملی" size="small" fullWidth type="tel" />
</Grid> </Grid>
<Grid item xs={1}> <Grid item xs={1}>
<Fade in={formik.values.motaghazi_type_id !== 'دولتی'} mountOnEnter={true} unmountOnExit={true}> <LtrTextField {...register('tel_number')} label="تلفن" size="small" fullWidth type="tel" />
<LtrTextField name="mobile_number" value={formik.values.mobile_number} onChange={formik.handleChange} label="تلفن همراه" size="small" fullWidth type="tel" /> </Grid>
</Fade> <Grid item xs={1}>
</Grid> <Fade in={watch('motaghazi_type') !== 'دولتی' || watch('formik.values.motaghazi_is_legal_id') === 'حقیقی'} mountOnEnter={true} unmountOnExit={true}>
<Grid item xs={1}> <LtrTextField {...register('mobile_number')} label="تلفن همراه" size="small" fullWidth type="tel" />
<TextField name="address" value={formik.values.address} onChange={formik.handleChange} label="آدرس" size="small" fullWidth required /> </Fade>
</Grid> </Grid>
<Grid item xs={1}> <Grid item xs={1}>
<Autocomplete <TextField {...register('address')} label="آدرس" size="small" fullWidth required />
size="small" </Grid>
disablePortal <Grid item xs={1}>
options={["تهران"]} <Controller
value={formik.values.edare_kol_id} name="edare_kol_id"
onChange={(event, newValue) => { control={control}
formik.setFieldValue('edare_kol_id', newValue) render={({ field: { onChange, value } }) => (
}} <Autocomplete
renderInput={(params) => ( size="small"
<TextField disablePortal
fullWidth value={value}
{...params} onChange={(event, newValue) => {
label="اداره كل راهداری و حمل و نقل جاده ای" onChange(newValue)
required }}
/> options={["تهران"]}
)} renderInput={(params) => (
/> <TextField
</Grid> fullWidth
<Grid item xs={1}> {...params}
<Autocomplete label="اداره كل راهداری و حمل و نقل جاده ای"
size="small" required
disablePortal />
value={formik.values.edare_shahri_id} )}
onChange={(event, newValue) => { />
formik.setFieldValue('edare_shahri_id', newValue) )}
}} />
options={["تهران"]} </Grid>
renderInput={(params) => <TextField fullWidth {...params} label="اداره شهرستان" required />} <Grid item xs={1}>
/> <Controller
</Grid> name="edare_shahri_id"
<Grid item xs={1}> control={control}
<Autocomplete render={({ field: { onChange, value } }) => (
size="small" <Autocomplete
disablePortal size="small"
value={formik.values.rah_type_id} disablePortal
onChange={(event, newValue) => { value={value}
formik.setFieldValue('rah_type_id', newValue) onChange={(event, newValue) => {
}} onChange(newValue)
options={["آزاد راه", "بزرگراه", 'راه فرعی درجه 3']} }}
renderInput={(params) => <TextField fullWidth {...params} label="نوع راه" required />} options={["تهران"]}
/> renderInput={(params) => <TextField fullWidth {...params} label="اداره شهرستان" required />}
</Grid> />
<Grid item xs={1}> )}
<Autocomplete />
size="small" </Grid>
disablePortal <Grid item xs={1}>
value={formik.values.name_mehvar_id} <Controller
onChange={(event, newValue) => { name="rah_type_id"
formik.setFieldValue('name_mehvar_id', newValue) control={control}
}} render={({ field: { onChange, value } }) => (
options={["سایر"]} <Autocomplete
renderInput={(params) => <TextField fullWidth {...params} label="نام محور" required />} size="small"
/> disablePortal
</Grid> value={value}
<Grid item xs={1}> onChange={(event, newValue) => {
<Fade in={formik.values.name_mehvar_id === "سایر"} mountOnEnter={true} unmountOnExit={true}> onChange(newValue)
<TextField label="سایر محورها" size="small" fullWidth /> }}
</Fade> options={["آزاد راه", "بزرگراه", 'راه فرعی درجه 3']}
</Grid> renderInput={(params) => <TextField fullWidth {...params} label="نوع راه" required />}
<Grid item xs={1}> />
<Autocomplete )}
size="small" />
disablePortal </Grid>
value={formik.values.samt_id} <Grid item xs={1}>
onChange={(event, newValue) => { <Controller
formik.setFieldValue('samt_id', newValue) name="name_mehvar_fa"
}} control={control}
options={["چپ", "راست"]} render={({ field: { onChange, value } }) => (
renderInput={(params) => <TextField fullWidth {...params} label="سمت" required />} <Autocomplete
/> size="small"
</Grid> disablePortal
<Grid item xs={1}> value={value}
<Autocomplete onChange={(event, newValue) => {
size="small" onChange(newValue)
disablePortal }}
value={formik.values.mizan_harim} options={["سایر"]}
onChange={(event, newValue) => { renderInput={(params) => <TextField fullWidth {...params} label="نام محور" required />}
formik.setFieldValue('mizan_harim', newValue) />
}} )}
options={["12.5", "17.5"]} />
renderInput={(params) => <TextField fullWidth {...params} label="میزان حریم" required />} </Grid>
/> <Grid item xs={1}>
</Grid> <Fade in={watch('name_mehvar_fa') === "سایر"} mountOnEnter={true} unmountOnExit={true}>
<Grid item xs={1}> <TextField label="سایر محورها" size="small" fullWidth />
<Fade in={formik.values.rah_type_id !== 'راه فرعی درجه 3'} mountOnEnter={true} unmountOnExit={true}> </Fade>
</Grid>
<Grid item xs={1}>
<Controller
name="samt_id"
control={control}
render={({ field: { onChange, value } }) => (
<Autocomplete
size="small"
disablePortal
value={value}
onChange={(event, newValue) => {
onChange(newValue)
}}
options={["چپ", "راست"]}
renderInput={(params) => <TextField fullWidth {...params} label="سمت" required />}
/>
)}
/>
</Grid>
<Grid item xs={1}>
<Controller
name="mizan_harim"
control={control}
render={({ field: { onChange, value } }) => (
<Autocomplete
size="small"
disablePortal
value={value}
onChange={(event, newValue) => {
onChange(newValue)
}}
options={["12.5", "17.5"]}
renderInput={(params) => <TextField fullWidth {...params} label="میزان حریم" required />}
/>
)}
/>
</Grid>
<Grid item xs={1}>
<Fade in={watch('rah_type_id') !== 'راه فرعی درجه 3'} mountOnEnter={true} unmountOnExit={true}>
<Box>
<Controller
name="arze_navar"
control={control}
render={({ field: { onChange, value } }) => (
<Autocomplete <Autocomplete
size="small" size="small"
disablePortal disablePortal
value={formik.values.arze_navar} value={value}
onChange={(event, newValue) => { onChange={(event, newValue) => {
formik.setFieldValue('arze_navar', newValue) onChange(newValue)
}} }}
options={["15", "30"]} options={["15", "30"]}
renderInput={(params) => <TextField fullWidth {...params} label="عرض نوار تاسیساتی زیربنایی" required />} renderInput={(params) => <TextField fullWidth {...params} label="عرض نوار تاسیساتی زیربنایی" required />}
/> />
</Fade> )}
</Grid> />
<Grid item xs={1}> </Box>
<LtrTextField name="kilometr" value={formik.values.kilometr} onChange={formik.handleChange} label="كيلومتر" size="small" fullWidth type="tel" /> </Fade>
</Grid> </Grid>
<Grid item xs={1} sm={2} sx={{ height: 300 }}> <Grid item xs={1}>
<LocationOnMap /> <LtrTextField {...register('kilometr')} label="كيلومتر" size="small" fullWidth type="tel" />
</Grid> </Grid>
<Grid item xs={1}> <Grid item xs={1} sm={2} sx={{ height: 300 }}>
<Stack spacing={3}> <LocationOnMap setValue={setValue} />
<LtrTextField value={formik.values.lat} label="عرض جغرافیایی" size="small" fullWidth InputProps={{ </Grid>
readOnly: true, <Grid item xs={1}>
}} /> <Stack spacing={3}>
<LtrTextField value={formik.values.lon} label="طول جغرافیایی" size="small" fullWidth InputProps={{ <LtrTextField {...register('lat')} label="عرض جغرافیایی" size="small" fullWidth disabled={true} />
readOnly: true, <LtrTextField {...register('lon')} label="طول جغرافیایی" size="small" fullWidth disabled={true} />
}} /> <Controller
<Autocomplete name="zone"
size="small" control={control}
disablePortal render={({ field: { onChange, value } }) => (
value={formik.values.zone}
onChange={(event, newValue) => {
formik.setFieldValue('zone', newValue)
}}
options={["38", "39"]}
renderInput={(params) => <TextField fullWidth {...params} label="Zone" required />}
/>
</Stack>
</Grid>
<Grid item xs={1}>
<Autocomplete <Autocomplete
size="small" size="small"
disablePortal disablePortal
options={["اتاقک نگهبانی", "دولتی"]} value={value}
value={formik.values.karbari_type_id}
onChange={(event, newValue) => { onChange={(event, newValue) => {
formik.setFieldValue('karbari_type_id', newValue) onChange(newValue)
}} }}
renderInput={(params) => <TextField fullWidth {...params} label="نوع کاربری" required />} options={["38", "39"]}
renderInput={(params) => <TextField fullWidth {...params} label="Zone" required />}
/> />
</Grid> )}
<Grid item xs={1}> />
<TextField name="tarh_title" value={formik.values.tarh_title} onChange={formik.handleChange} label="عنوان طرح" size="small" fullWidth /> </Stack>
</Grid> </Grid>
<Grid item xs={1}> <Grid item xs={1}>
<LtrTextField name="masahat_zirbana" value={formik.values.masahat_zirbana} label="مساحت زیربنا" size="small" fullWidth type="tel" InputProps={{ <Controller
endAdornment: <InputAdornment position="end"> name="karbari_type_id"
مترمربع</InputAdornment>, control={control}
}} /> render={({ field: { onChange, value } }) => (
</Grid> <Autocomplete
<Grid item xs={1}> size="small"
<Autocomplete disablePortal
multiple value={value}
size="small" onChange={(event, newValue) => {
disablePortal onChange(newValue)
value={formik.values.ehdasat_type_id} }}
onChange={(event, newValue) => { options={["اتاقک نگهبانی", "دولتی"]}
formik.setFieldValue('ehdasat_type_id', newValue) renderInput={(params) => <TextField fullWidth {...params} label="نوع کاربری" required />}
}} />
renderTags={(value, getTagProps) => )}
value.map((option, index) => { />
const { key, ...tagProps } = getTagProps({ index }); </Grid>
return ( <Grid item xs={1}>
<Chip label={option} key={key} {...tagProps} /> <TextField {...register('tarh_title')} label="عنوان طرح" size="small" fullWidth />
); </Grid>
}) <Grid item xs={1}>
} <LtrTextField {...register('masahat_zirbana')} label="مساحت زیربنا" size="small" fullWidth type="tel" InputProps={{
options={["تعمیرات", "احداث بنا"]} endAdornment: <InputAdornment position="end">
renderInput={(params) => <TextField fullWidth {...params} label="نوع احداثات" />} مترمربع</InputAdornment>,
/> }} />
</Grid> </Grid>
<Grid item xs={1}> <Grid item xs={1}>
<LtrTextField name="divarkeshi_distance" value={formik.values.divarkeshi_distance} onChange={formik.handleChange} label="فاصله دیوارکشی از آکس محور" size="small" fullWidth type="tel" InputProps={{ <Controller
endAdornment: <InputAdornment position="end">متر</InputAdornment>, name="ehdasat_type_id"
}} /> control={control}
</Grid> render={({ field: { onChange, value } }) => (
<Grid item xs={1}> <Autocomplete
<LtrTextField name="mostahadesat_distance" value={formik.values.mostahadesat_distance} onChange={formik.handleChange} label="فاصله مستحدثات از آکس محور" size="small" fullWidth type="tel" InputProps={{ multiple
endAdornment: <InputAdornment position="end">متر</InputAdornment>, size="small"
}} /> disablePortal
</Grid> value={value}
<Grid item xs={1}> onChange={(event, newValue) => {
<Autocomplete onChange(newValue)
size="small" }}
disablePortal renderTags={(value, getTagProps) =>
value={formik.values.mahale_ejra_id} value.map((option, index) => {
onChange={(event, newValue) => { const { key, ...tagProps } = getTagProps({ index });
formik.setFieldValue('mahale_ejra_id', newValue) return (
}} <Chip label={option} key={key} {...tagProps} />
options={["داخل حریم"]} );
renderInput={(params) => <TextField fullWidth {...params} label="محل اجرا" />} })
/> }
</Grid> options={["تعمیرات", "احداث بنا"]}
<Grid item xs={1}> renderInput={(params) => <TextField fullWidth {...params} label="نوع احداثات" />}
<Autocomplete />
size="small" )}
disablePortal />
value={formik.values.traffic_id} </Grid>
onChange={(event, newValue) => { <Grid item xs={1}>
formik.setFieldValue('traffic_id', newValue) <LtrTextField {...register('divarkeshi_distance')} label="فاصله دیوارکشی از آکس محور" size="small" fullWidth type="tel" InputProps={{
}} endAdornment: <InputAdornment position="end">متر</InputAdornment>,
options={["سبک (ضریب ۱)"]} }} />
renderInput={(params) => <TextField fullWidth {...params} label="میزان ترافیک" required />} </Grid>
/> <Grid item xs={1}>
</Grid> <LtrTextField {...register('mostahadesat_distance')} label="فاصله مستحدثات از آکس محور" size="small" fullWidth type="tel" InputProps={{
<Grid item xs={1}> endAdornment: <InputAdornment position="end">متر</InputAdornment>,
<Autocomplete }} />
size="small" </Grid>
disablePortal <Grid item xs={1}>
value={formik.values.vaziat_eghtesadi_id} <Controller
onChange={(event, newValue) => { name="mahale_ejra_id"
formik.setFieldValue('vaziat_eghtesadi_id', newValue) control={control}
}} render={({ field: { onChange, value } }) => (
options={["تست"]} <Autocomplete
renderInput={(params) => <TextField fullWidth {...params} label="وضعیت اقتصادی" />} size="small"
/> disablePortal
</Grid> value={value}
<Grid item xs={1}> onChange={(event, newValue) => {
<Autocomplete onChange(newValue)
size="small" }}
disablePortal options={["داخل حریم"]}
value={formik.values.has_access_id} renderInput={(params) => <TextField fullWidth {...params} label="محل اجرا" />}
onChange={(event, newValue) => { />
formik.setFieldValue('has_access_id', newValue) )}
}} />
options={["بله", "خیر"]} </Grid>
renderInput={(params) => <TextField fullWidth {...params} label="آیا راه دسترسی از قبل وجود دارد؟" required />} <Grid item xs={1}>
/> <Controller
</Grid> name="traffic_id"
<Grid item xs={1}> control={control}
<LtrTextField name="shomare_estelam_harim" value={formik.values.shomare_estelam_harim} onChange={formik.handleChange} label="شماره استعلام دفتر ایمنی و حریم" size="small" fullWidth type="tel" /> render={({ field: { onChange, value } }) => (
</Grid> <Autocomplete
<Grid item xs={1}> size="small"
<Stack direction={'row'} spacing={1} alignItems={'center'}> disablePortal
<Typography sx={{ flex: 2 }} variant="body2">حداکثر مدت زمان شروع عملیات:</Typography> value={value}
<LtrTextField name="max_month" value={formik.values.max_month} onChange={formik.handleChange} sx={{ width: 60 }} label="ماه" size="small" type="tel" /> onChange={(event, newValue) => {
<LtrTextField name="max_day" value={formik.values.max_day} onChange={formik.handleChange} sx={{ width: 60 }} label="روز" size="small" type="tel" /> onChange(newValue)
</Stack> }}
</Grid> options={["سبک (ضریب ۱)"]}
<Grid item xs={1}> renderInput={(params) => <TextField fullWidth {...params} label="میزان ترافیک" required />}
<LtrTextField name="shomare_tahaodname" value={formik.values.shomare_tahaodname} onChange={formik.handleChange} label="شماره تعهدنامه" size="small" fullWidth type="tel" /> />
</Grid> )}
<Grid item xs={1}> />
<LtrTextField name="shomare_daftarkhaneh" value={formik.values.shomare_daftarkhaneh} onChange={formik.handleChange} label="شماره دفترخانه" size="small" fullWidth type="tel" /> </Grid>
</Grid> <Grid item xs={1}>
<Grid item xs={1}></Grid> <Controller
<Grid item xs={1}> name="vaziat_eghtesadi_id"
<TextField name="description" value={formik.values.description} onChange={formik.handleChange} multiline rows={2} label="توضیحات" size="small" fullWidth /> control={control}
</Grid> render={({ field: { onChange, value } }) => (
<Grid item xs={1}> <Autocomplete
<TextField name="ronevesht" value={formik.values.ronevesht} onChange={formik.handleChange} multiline rows={2} label="رونوشت" size="small" fullWidth /> size="small"
</Grid> disablePortal
<Grid item xs={1}></Grid> value={value}
</Grid> onChange={(event, newValue) => {
</StyledForm> onChange(newValue)
</DialogContent> }}
<DialogActions sx={{ p: 2 }}> options={["تست"]}
<Button variant="contained" size="large" type="submit" form={'InquiryPrivacyFencingCreateForm'}>ثبت</Button> renderInput={(params) => <TextField fullWidth {...params} label="وضعیت اقتصادی" />}
</DialogActions> />
</> )}
)} />
</Formik> </Grid>
<Grid item xs={1}>
<Controller
name="has_access_id"
control={control}
render={({ field: { onChange, value } }) => (
<Autocomplete
size="small"
disablePortal
value={value}
onChange={(event, newValue) => {
onChange(newValue)
}}
options={["بله", "خیر"]}
renderInput={(params) => <TextField fullWidth {...params} label="آیا راه دسترسی از قبل وجود دارد؟" required />}
/>
)}
/>
</Grid>
<Grid item xs={1}>
<LtrTextField {...register('shomare_estelam_harim')} label="شماره استعلام دفتر ایمنی و حریم" size="small" fullWidth type="tel" />
</Grid>
<Grid item xs={1}>
<Stack direction={'row'} spacing={1} alignItems={'center'}>
<Typography sx={{ flex: 2 }} variant="body2">حداکثر مدت زمان شروع عملیات:</Typography>
<LtrTextField {...register('max_month')} sx={{ width: 60 }} label="ماه" size="small" type="tel" />
<LtrTextField {...register('max_day')} sx={{ width: 60 }} label="روز" size="small" type="tel" />
</Stack>
</Grid>
<Grid item xs={1}>
<LtrTextField {...register('shomare_tahaodname')} label="شماره تعهدنامه" size="small" fullWidth type="tel" />
</Grid>
<Grid item xs={1}>
<LtrTextField {...register('shomare_daftarkhaneh')} label="شماره دفترخانه" size="small" fullWidth type="tel" />
</Grid>
<Grid item xs={1}></Grid>
<Grid item xs={1}>
<TextField {...register('description')} multiline rows={2} label="توضیحات" size="small" fullWidth />
</Grid>
<Grid item xs={1}>
<TextField {...register('ronevesht')} multiline rows={2} label="رونوشت" size="small" fullWidth />
</Grid>
<Grid item xs={1}></Grid>
</Grid>
</StyledForm>
</DialogContent>
<DialogActions sx={{ p: 2 }}>
<Button variant="contained" size="large" type="submit" form={'InquiryPrivacyFencingCreateForm'}>ثبت</Button>
</DialogActions>
</LocalizationProvider > </LocalizationProvider >
); );
}; };

View File

@@ -1,6 +1,5 @@
import { useFormikContext } from "formik";
import { useRef } from "react"; import { useRef } from "react";
import { Marker, useMapEvents } from "react-leaflet" import { Marker, useMapEvents } from "react-leaflet";
const prefix = process.env.NODE_ENV === "production" ? "/v3" : ""; const prefix = process.env.NODE_ENV === "production" ? "/v3" : "";
@@ -10,21 +9,20 @@ const locationMarker = L.icon({
iconAnchor: [25, 50], iconAnchor: [25, 50],
}); });
const MarkerLocation = () => { const MarkerLocation = ({ setValue }) => {
const { setFieldValue } = useFormikContext()
const location = useRef(); const location = useRef();
const map = useMapEvents({ const map = useMapEvents({
move: (e) => { move: (e) => {
const latlon = e.target.getCenter() const latlon = e.target.getCenter()
location.current?.setLatLng(latlon); location.current?.setLatLng(latlon);
setFieldValue('lat', latlon.lat) setValue('lat', latlon.lat)
setFieldValue('lon', latlon.lng) setValue('lon', latlon.lng)
}, },
zoom: (e) => { zoom: (e) => {
const latlon = e.target.getCenter() const latlon = e.target.getCenter()
location.current?.setLatLng(latlon); location.current?.setLatLng(latlon);
setFieldValue('lat', latlon.lat) setValue('lat', latlon.lat)
setFieldValue('lon', latlon.lng) setValue('lon', latlon.lng)
}, },
}); });
return ( return (

View File

@@ -1,6 +1,5 @@
import { styled } from "@mui/material"; import { styled } from "@mui/material";
import { Form } from "formik";
const StyledForm = styled(Form)``; const StyledForm = styled('form')``;
export default StyledForm; export default StyledForm;