Merge branch 'develop' of https://gitlab.com/witel-front-end/loan-facilities/user into feature/yasi_delet_signup_check_login

This commit is contained in:
Yasiu1376
2023-12-12 09:38:00 +03:30
15 changed files with 286 additions and 132 deletions

4
.gitignore vendored
View File

@@ -31,4 +31,6 @@ cypress/screenshots
.env
.idea
package-lock.json
ecosystem.config
ecosystem.config
public/config.json

View File

@@ -16,7 +16,7 @@
"@mui/icons-material": "^5.11.16",
"@mui/lab": "^5.0.0-alpha.152",
"@mui/material": "^5.12.0",
"@witel/webapp-builder": "^1.0.2",
"@witel/webapp-builder": "^1.0.6",
"axios": "^1.4.0",
"colord": "^2.9.3",
"eslint": "8.36.0",

View File

@@ -0,0 +1,36 @@
{
"time_lines": {
"navgan_first_page": [
{
"date": {
"from": "1402/09/01",
"to": "1402/09/10"
},
"label": {
"primary": "ثبت نام متقاضی",
"secondary": "ثبت نام متقاضیان واجد شرایط"
}
},
{
"date": {
"from": "1402/09/15",
"to": "1402/11/10"
},
"label": {
"primary": "صحت سنجی متقاضیان",
"secondary": "بررسی و کارشناسی درخواست ها"
}
},
{
"date": {
"from": "1402/11/10",
"to": "1402/12/20"
},
"label": {
"primary": "ارجاع به بانک",
"secondary": "فرآیند معرفی ضامن و پرداخت"
}
}
]
}
}

Binary file not shown.

View File

@@ -18,6 +18,7 @@
"upload_file_text": "بارگذاری فایل",
"online_message": "شما به اینترنت وصل هستید",
"offline_message": "اتصال شما به اینترنت قطع شده است",
"routing_to": "در حال انتقال به صفحه",
"header": {
"open_profile": "پروفایل",
"edit_profile": "ویرایش پروفایل",

View File

@@ -7,9 +7,6 @@ const LoanCondition = () => {
return (
<Box>
<Container sx={{py: 3}} maxWidth="xl">
<Typography sx={{my: 3}} variant={'h3'}>
تخصیص وام
</Typography>
<Grid container>
<Grid item xs={12} md={8}>
<Box sx={{padding: 3}}>
@@ -17,18 +14,22 @@ const LoanCondition = () => {
قوانین دریافت وام
</Typography>
<Grid item sx={{my: 2}}>
<Chip sx={{m: 1}} label="1 . فقط به زوجین ایرانی تعلق می‌گیرد"/>
<Chip sx={{m: 1}} label="2 . فقط به زوجین ایرانی تعلق می‌گیرد"/>
<Chip sx={{m: 1}} label="3 . فقط به زوجین ایرانی تعلق می‌گیرد"/>
<Chip sx={{m: 1}} label="4 . فقط به زوجین ایرانی تعلق می‌گیرد"/>
<Chip sx={{m: 1}}
label="1. ارایه کارت هوشمند ناوگان فعال توسط مالک ناوگان (صاحب سند و پلاک)"/>
<Chip sx={{m: 1}} label="2. ارایه حداقل 140 صورت وضعیت در سال 1400 و 1401"/>
<Chip sx={{m: 1}} label="3. نداشتن بدهی جاری"/>
</Grid>
<Typography textAlign={'justify'}> این یکی از محبوبترین انواع وام در ایران است. دلیل این
محبوبیت سرعت آن در پرداخت و سود بسیار پایین آن است.
تنها یک شرط برای اخذ این وام وجود دارد و آن این است که باید به تازگی ازدواج کرده باشید.
همچنین فقط یک بار از این وام میتوانید استفاده کنید. یعنی این وام فقط یک بار به هر فرد
تعلق میگیرد.
محل تامین بودجه آن حسابهای قرض الحسنهایست که افراد در بانکها باز میکنند و مرجع اصلی
آرائه آن، بانک مرکزی است.
<Typography sx={{lineHeight: 2.4}} textAlign={'justify'}>
این وام برای اتوبوس تا سقف <Typography sx={{color: "secondary.main"}}
variant={'h6'}
fontWeight={'bold'}
component={'span'}>700</Typography> میلیون تومان
و برای مینی بوس تا سقف <Typography sx={{color: "secondary.main"}}
variant={'h6'}
fontWeight={'bold'}
component={'span'}>200</Typography> میلیون تومان در
نظر گرفته شده است. مبلغ نهایی با توجه به امتیاز و روند کارشناسی در ادارات مربوطه مشخص
میشود. برای اطلاع از شرایط کامل این وام فایل پیوست را مطالعه بفرمایید.
</Typography>
</Box>
</Grid>
@@ -41,7 +42,7 @@ const LoanCondition = () => {
color={'white'}
download
underline="none"
href={'/dist/images/modalrms/Asset%2010.apk'}
href={'/files/راهنما.xlsx'}
>
دریافت فایل های راهنما
</Link>

View File

@@ -1,92 +1,74 @@
import {useTranslations} from "next-intl";
import {
Timeline,
TimelineConnector, TimelineContent,
TimelineDot,
TimelineItem,
TimelineOppositeContent,
TimelineSeparator
} from "@mui/lab";
import RepeatIcon from '@mui/icons-material/Repeat';
import FastfoodIcon from '@mui/icons-material/Fastfood';
import LaptopMacIcon from '@mui/icons-material/LaptopMac';
import CheckCircleIcon from '@mui/icons-material/CheckCircle';
import CallMadeIcon from '@mui/icons-material/CallMade';
import {CircularProgress, Typography} from "@mui/material";
import HowToRegIcon from '@mui/icons-material/HowToReg';
import DoneIcon from '@mui/icons-material/Done';
import HotelIcon from '@mui/icons-material/Hotel';
import {useEffect, useState} from "react";
import {useRequest} from "@witel/webapp-builder";
import TimelineManager from "@/core/components/timelines/timelineManager";
import moment from "jalali-moment";
import {Timeline} from "@mui/lab";
import {LinearProgress} from "@mui/material";
const TimeLineDetails = () => {
const t = useTranslations();
return(
<Timeline position="alternate">
<TimelineItem>
<TimelineOppositeContent
sx={{ m: 'auto 0' }}
align="right"
variant="body2"
color="text.secondary"
>
10 دی
</TimelineOppositeContent>
<TimelineSeparator>
<TimelineDot color={'success'}>
<DoneIcon/>
</TimelineDot>
<TimelineConnector sx={{ backgroundColor: 'green' }} />
</TimelineSeparator>
<TimelineContent sx={{ py: '12px', px: 2 }}>
<Typography variant="h6" component="span">
ثبت نام متقاضی
</Typography>
<Typography color={'gray'}>ثبت نام متقاضیان واجد شرایط</Typography>
</TimelineContent>
</TimelineItem>
<TimelineItem>
<TimelineOppositeContent
sx={{ m: 'auto 0' }}
variant="body2"
color="text.secondary"
>
10 بهمن
</TimelineOppositeContent>
<TimelineSeparator>
<TimelineConnector sx={{ backgroundColor: 'green' }} />
<TimelineDot color="primary">
<CircularProgress color={'inherit'} size={40} />
</TimelineDot>
<TimelineConnector />
</TimelineSeparator>
<TimelineContent sx={{ py: '12px', px: 2 }}>
<Typography variant="h6">
صحت سنجی متقاضیان
</Typography>
<Typography color={'gray'}>بررسی و کارشناسی درخواست ها</Typography>
</TimelineContent>
</TimelineItem>
<TimelineItem>
<TimelineOppositeContent
sx={{ m: 'auto 0' }}
variant="body2"
color="text.secondary"
>
10 اسفند
</TimelineOppositeContent>
<TimelineSeparator>
<TimelineConnector />
<TimelineDot>
<CallMadeIcon />
</TimelineDot>
</TimelineSeparator>
<TimelineContent sx={{ py: '12px', px: 2 }}>
<Typography variant="h6" component="span">
ارجاع به بانک
</Typography>
<Typography color={'gray'}>فرآیند معرفی ضامن و پرداخت</Typography>
</TimelineContent>
</TimelineItem>
</Timeline>
const request = useRequest({notification: false, auth: false})
const [timeLineList, setTimeLineList] = useState([])
const [loading, setLoading] = useState(true)
useEffect(() => {
setLoading(true)
request(process.env.NEXT_PUBLIC_CONFIG_APP_URL, 'get').then(res => {
let tempArr = []
for (const timeLine of res.data.time_lines.navgan_first_page) {
let temp = {}
temp['label'] = timeLine.label
temp['date'] = moment(timeLine.date.from, 'jYYYY/jMM/jDD').locale('fa').format('jD jMMMM')
const fromDate = moment(timeLine.date.from, 'jYYYY/jMM/jDD')
const toDate = moment(timeLine.date.to, 'jYYYY/jMM/jDD')
const today = moment()
if (today.isBetween(fromDate, toDate, null, '[]')) {
temp['status'] = 'in progress'
} else if (today.isAfter(toDate, null)) {
temp['status'] = 'done'
} else if (today.isBefore(fromDate, null)) {
temp['status'] = 'open'
}
tempArr.push(temp)
}
setTimeLineList(tempArr)
setLoading(false)
}).catch(() => {
setLoading(false)
})
}, []);
return (
<>
{loading ? (
<LinearProgress/>
) : (
<Timeline position="alternate">
{timeLineList.map((timeLine, index) => (
<TimelineManager
key={index}
status={timeLine.status}
date={timeLine.date}
primaryLabel={timeLine.label.primary}
secondaryLabel={timeLine.label.secondary}
position={index === (timeLineList.length - 1) ? 'end' : ''}
/>
))
}
</Timeline>
)}
</>
)
// return (
// <Timeline position="alternate">
// <InProgressTimeLine date={'10 دی'} primaryLabel={'ثبت نام متقاضی'}
// secondaryLabel={'ثبت نام متقاضیان واجد شرایط'}/>
// <OpenTimeLine date={'10 بهمن'} primaryLabel={'صحت سنجی متقاضیان'}
// secondaryLabel={'بررسی و کارشناسی درخواست ها'}/>
// <OpenTimeLine position={'end'} date={'10 اسفند'} primaryLabel={'ارجاع به بانک'}
// secondaryLabel={'فرآیند معرفی ضامن و پرداخت'}/>
// </Timeline>
// )
}
export default TimeLineDetails

View File

@@ -8,27 +8,29 @@ const LoanDescription = () => {
<Box>
<Container sx={{py: 3}} maxWidth="xl">
<Typography sx={{my: 3}} variant={'h3'}>
توضیحات دریافت وام
وام نوسازی ناوگان
</Typography>
<Grid sx={{py: 2}} container spacing={2}>
<Grid item xs={12} md={7}>
<Typography variant={'subtitle1'} textAlign={'justify'}>
وام خرید کالای مهر ایران یا کالا کارت با هدف خرید مایحتاج خانه و کالاهای ضروری زندگی داده
میشود. سقف کالا کارت ۱۵۰ میلیون تومان و سود آن ۴ درصد است.
با دریافت کالا کارت میتوانید وسایل موردنیازتان را از فروشگاههای طرف قرارداد
این فروشگاهها با نام گلدیران در شهرهای تهران، شیراز، اهواز، نور، اصفهان، تبریز، ساری و رشت
فعالیت میکنند.
طبق قوانین جدید و در راستای حمایت از طرح افزایش جمیعت، مبلغ آن برای زوجینی که مرد زیر ۲۵ سال
و زن زیر ۲۳ سال داشته باشد، <Typography sx={{color: "secondary.main"}} variant={'h5'}
fontWeight={'bold'}
component={'span'}>440</Typography> میلیون یا ۲۲۰
میلیون به ازای هر نفر است.
در این قانون هریک از زوجین که شرایط آنها در این قانون نگنجد،
مبلغ تغییر کرده و به زوج <Typography sx={{color: "secondary.main"}} variant={'h5'}
fontWeight={'bold'}
component={'span'}>400</Typography> میلیون وام تعلق
خواهد گرفت.
حداکثر زمان بازپرداخت وام خرید کالا ۲۴ ماه است و برای گرفتن آن به یک ضامن رسمی احتیاج دارید.
<Typography sx={{lineHeight: 2.4}} variant={'subtitle1'} textAlign={'justify'}>
این وام براساس <Typography sx={{color: "secondary.main"}} variant={'h5'}
fontWeight={'bold'}
component={'span'}>تبصره 18</Typography> قانون بودجه می باشد. در
قانون
بودجه این تبصره اینگونه بیان شده است:
به منظور رشد و پیشرفت استان های کشور از طریق ارتقای بهره وری و توسعه، سرمایه گذاری ها،
تکمیل واحدهای نیمه تمام و ظرفیت های خالی بنگاه های تولیدی بر پایه آمایش سرزمین و همچنین
حمایت از طرح(پروژهای) دانش بنیان و پیشران و بسط و عدالت سرزمینی منابع زیر جهت ایجاد و افزایش
تولید، اشتغال و کارآفرینی و ارتقای رشد اقتصادی اختصاص می یابد.
</Typography>
<Typography sx={{lineHeight: 2.4}} variant={'subtitle1'} textAlign={'justify'}>
در این راستا سازمان راهداری و حمل و نقل جاده ای به منظور بهبود کیفیت حمل و نقل بین شهری و
افزایش ظرفیت ترابری اقدام به اعطای وام به <Typography sx={{color: "secondary.main"}}
variant={'h5'}
fontWeight={'bold'}
component={'span'}>ناوگان های
مسافربری</Typography> برای
بازسازی و تعمیرات میکند.
</Typography>
</Grid>
<Grid item xs={12} md={5}>

View File

@@ -14,9 +14,10 @@ const LoanRegister = () => {
<Grid sx={{py: 4}} container spacing={2}>
<Grid item xs={12} md={6}>
<Box sx={{paddingBottom: 4}}>
<Typography>
برای استفاده از تسهیلات این سامانه و دریافت وام می بایست ابتدا وارد سامانه شوید و یا
اگر ثبت نام نکرده اید ثبت نام کنید
<Typography sx={{lineHeight: 2.7}}>
وام نوسازی ناوگان به هدف رشد و پیشرفت استان های کشور از طریق ارتقای بهره وری و توسعه
اعطا میشود. برای استفاده از تسهیلات این سامانه و درخواست وام می بایست ابتدا وارد
سامانه شوید.
</Typography>
</Box>
</Grid>

View File

@@ -0,0 +1,35 @@
import {
TimelineConnector,
TimelineContent,
TimelineDot,
TimelineItem,
TimelineOppositeContent,
TimelineSeparator
} from "@mui/lab";
import DoneIcon from "@mui/icons-material/Done";
import {Typography} from "@mui/material";
const DoneTimeLine = ({date, primaryLabel, secondaryLabel, position}) => {
return (
<TimelineItem>
<TimelineOppositeContent
sx={{m: 'auto 0'}}
align="right"
variant="body2"
color="text.secondary"
>{date}</TimelineOppositeContent>
<TimelineSeparator>
<TimelineDot color={'success'}>
<DoneIcon/>
</TimelineDot>
{position !== 'end' && <TimelineConnector/>}
</TimelineSeparator>
<TimelineContent sx={{py: '12px', px: 2}}>
<Typography variant="h6" component="span">{primaryLabel}</Typography>
<Typography variant="body2" color={'gray'}>{secondaryLabel}</Typography>
</TimelineContent>
</TimelineItem>
)
}
export default DoneTimeLine

View File

@@ -0,0 +1,33 @@
import {
TimelineConnector,
TimelineContent,
TimelineDot,
TimelineItem,
TimelineOppositeContent,
TimelineSeparator
} from "@mui/lab";
import {CircularProgress, Typography} from "@mui/material";
const InProgressTimeLine = ({date, primaryLabel, secondaryLabel, position}) => {
return (
<TimelineItem sx={{minHeight: 90}}>
<TimelineOppositeContent
sx={{m: 'auto 0'}}
variant="body2"
color="text.secondary"
>{date}</TimelineOppositeContent>
<TimelineSeparator>
<TimelineDot color="primary">
<CircularProgress color={'inherit'} size={40}/>
</TimelineDot>
{position !== 'end' && <TimelineConnector/>}
</TimelineSeparator>
<TimelineContent sx={{py: '12px', px: 2}}>
<Typography variant="h6" component="span">{primaryLabel}</Typography>
<Typography variant="body2" color={'gray'}>{secondaryLabel}</Typography>
</TimelineContent>
</TimelineItem>
)
}
export default InProgressTimeLine

View File

@@ -0,0 +1,34 @@
import {
TimelineConnector,
TimelineContent,
TimelineDot,
TimelineItem,
TimelineOppositeContent,
TimelineSeparator
} from "@mui/lab";
import CallMadeIcon from "@mui/icons-material/CallMade";
import {Typography} from "@mui/material";
const OpenTimeLine = ({date, primaryLabel, secondaryLabel, position}) => {
return (
<TimelineItem>
<TimelineOppositeContent
sx={{m: 'auto 0'}}
variant="body2"
color="text.secondary"
>{date}</TimelineOppositeContent>
<TimelineSeparator>
<TimelineDot>
<CallMadeIcon/>
</TimelineDot>
{position !== 'end' && <TimelineConnector/>}
</TimelineSeparator>
<TimelineContent sx={{py: '12px', px: 2}}>
<Typography variant="h6" component="span">{primaryLabel}</Typography>
<Typography variant="body2" color={'gray'}>{secondaryLabel}</Typography>
</TimelineContent>
</TimelineItem>
)
}
export default OpenTimeLine

View File

@@ -0,0 +1,16 @@
import OpenTimeLine from "@/core/components/timelines/OpenTimeLine";
import InProgressTimeLine from "@/core/components/timelines/InProgressTimeLine";
import DoneTimeLine from "@/core/components/timelines/DoneTimeLine";
const TimelineManager = (props) => {
switch (props.status) {
case 'open':
return <OpenTimeLine {...props} />
case 'in progress':
return <InProgressTimeLine {...props} />
case 'done':
return <DoneTimeLine {...props} />
}
}
export default TimelineManager

View File

@@ -6,27 +6,30 @@ const sidebarMenu = [
[
{
key: "sidebar.dashboard",
name: "sidebar.dashboard",
type: "page",
route: "/dashboard",
icon: <SpaceDashboardIcon/>,
icon: <SpaceDashboardIcon sx={{width: 'inherit', height: 'inherit'}}/>,
selected: false,
permission_name: "all"
permission: "all"
},
{
key: "sidebar.add-request-loan",
name: "sidebar.add-request-loan",
type: "page",
route: "/dashboard/navgan/add-request-loan",
icon: <DataSaverOnIcon/>,
icon: <DataSaverOnIcon sx={{width: 'inherit', height: 'inherit'}}/>,
selected: false,
permission_name: "can_request_a_new_loan"
permission: "can_request_a_new_loan"
},
{
key: "sidebar.followUp-loan",
name: "sidebar.followUp-loan",
type: "page",
route: "/dashboard/navgan/followUp-loan",
icon: <BookmarkAddedIcon/>,
icon: <BookmarkAddedIcon sx={{width: 'inherit', height: 'inherit'}}/>,
selected: false,
permission_name: "all"
permission: "all"
},
],
];

View File

@@ -1,13 +1,21 @@
import {DashboardLayout as DashboardLayoutPure} from "@witel/webapp-builder";
import {DashboardLayout as DashboardLayoutPure, useUser} from "@witel/webapp-builder";
import headerProfileItems from "@/core/data/headerProfileItems";
import sidebarMenu from "@/core/data/sidebarMenu";
import {GET_SIDEBAR_NOTIFICATION} from "@/core/data/apiRoutes";
const DashboardLayout = (props) => {
const {user} = useUser()
return (
<>
<DashboardLayoutPure headerProfileItems={headerProfileItems} sidebarMenu={sidebarMenu}
urlNotification={GET_SIDEBAR_NOTIFICATION} {...props} />
<DashboardLayoutPure
loginUrl={'/login'}
user_introduction={user.type_name}
headerProfileItems={headerProfileItems}
sidebarMenu={sidebarMenu}
urlNotification={GET_SIDEBAR_NOTIFICATION}
BC_segmentsToRemove={[]}
{...props}
/>
</>
)
}