exam/parentAdd api | 330

main
alireza khaji 2 years ago
parent e38efeaf6f
commit 3a7f53ca9b
  1. 30
      src/components/Product/index.js
  2. 4
      src/redux/actions/exam.js
  3. 22
      src/redux/reducers/exam.js
  4. 2
      src/redux/reducers/exam2.js
  5. 256
      src/view/addExam/views/AddDescription.js
  6. 3
      src/view/addExam/views/AddGradeGroup.js
  7. 4
      src/view/addExam/views/OkExam.js
  8. 304
      src/view/addExam/views/ViewExam.js
  9. 185
      src/view/services/service/index.js

@ -54,36 +54,6 @@ const ProductDesign = ({
); );
console.log(userInfo); console.log(userInfo);
let rulesAccepted = userInfo.rulesAccepted; let rulesAccepted = userInfo.rulesAccepted;
const emkanat = [
{
title: "دستشویی",
isActive: true,
},
{
title: "آب خوری",
isActive: true,
},
{
title: "تخته هوشمند",
isActive: true,
},
{
title: "کامپیوتر",
isActive: true,
},
{
title: "کتابخانه",
isActive: true,
},
{
title: "مشاوره تحصیلی",
isActive: true,
},
{
title: "آزمایشگاه",
isActive: false,
},
];
//budgetHandler------------- //budgetHandler-------------
const budgetHandler = (fileId) => { const budgetHandler = (fileId) => {

@ -5,6 +5,10 @@ const exam = {
(data = {}) => (data = {}) =>
async (dispatch) => async (dispatch) =>
await proxy.get("exam/info", data, { dispatch }), await proxy.get("exam/info", data, { dispatch }),
parentAdd:
(data = {}) =>
async (dispatch) =>
await proxy.post("exam/parentAdd", data, { dispatch }),
}; };
export default exam; export default exam;

@ -11,6 +11,7 @@ const initialState = {
endTime: '', endTime: '',
description: '', description: '',
type: 'bank', type: 'bank',
duration:null,
questionnaires: [ questionnaires: [
{ {
@ -207,15 +208,18 @@ export default function addExamReduser(state = initialState, { type, payload })
case 'ADD_EXAM_DESCRIPTION': case 'ADD_EXAM_DESCRIPTION':
return { return {
...state, ...state,
name: payload.name, name: payload.name,
startDate: new Date(), startDate: new Date(),
endDate: new Date(), endDate: new Date(),
startTime: '19:0', startTime: "19:0",
endTime: '', endTime: "",
description: payload.description, description: payload.description,
type: payload.type type: payload.type,
} duration: payload.duration,
startDate:payload.startDate,
endDate:payload.endDate
};
case 'ADD_EXAM_QUESTIONAIRES': case 'ADD_EXAM_QUESTIONAIRES':
return { return {

@ -12,6 +12,8 @@ export default function exam2(state = initialState, action) {
switch (type) { switch (type) {
case "exam/info": case "exam/info":
return { ...state, loading: false, info: data, error: null }; return { ...state, loading: false, info: data, error: null };
case "exam/parentAdd":
return { ...state, loading: false, error: null };
default: default:
return state; return state;
} }

@ -13,121 +13,165 @@ const AddExamDescription = ({ grades, addExamState, dispatch, stepClick, backSte
const [name, setName] = useState(null); const [name, setName] = useState(null);
const [type, setType] = useState(null); const [type, setType] = useState(null);
const [description, setDescription] = useState(null); const [description, setDescription] = useState(null);
const [duration,setDuration]=useState(null);
const payload = { name: name, description: description, type: type }; const [date, setDate] = useState({ format: "MM/DD/YYYY" });
const CostumeDatePickerInput = ({ openCalendar, value, handleValueChange, title }) => { const [startDate,setStartDate]=useState(null);
return( const [endDate, setEndDate] = useState(null);
<input
const payload = {
name: name,
description: description,
type: type,
duration,
startDate,
endDate,
};
console.log("uuuuuuuuuuu")
const CostumeDatePickerInput = ({ openCalendar, value, handleValueChange, title,index }) => {
return (
<input
onFocus={openCalendar} onFocus={openCalendar}
value={value} value={value}
onChange={handleValueChange} // onChange={(e) => changeHandler(e)}
placeholder={title} placeholder={title}
className="w-full h-14 rounded-lg p-3 border border-gray-200 text-blue3A outline-blue-300" className="create-exame-date-input w-full h-14 rounded-lg p-3 border border-gray-200 text-blue3A outline-blue-300"
/> />
) );
} }
return (
<>
<div className="flex py-10 items-start px-10 border-b border-gray-300">
<div className="flex flex-col w-1/6">
<div className="text-blue3A text-lg font-bold text-right px-4 border-r-4 border-blue65">
تنظیمات آزمون
</div>
<p className="text-sm text-right font-bold pt-4 text-gray-500">لطفا مشخضات آزمون را تکمیل کنید</p>
</div>
<div className="flex w-5/6 pl-[10%] flex-col">
<div className="flex items-center justify-between">
<input type='text' placeholder="نام آزمون" className="w-1/2 bg-white px-4 h-14 border border-gray-300 rounded-lg text-blue3A outline-blue65"
onChange={(e) => setName(e.target.value)}
/>
<DatePicker
format="YYYY/MM/DD HH:mm:ss"
calendar={persian}
locale={persian_fa}
renderButton={(direction, handleClick) => (
<button className="text-blue-500 font-bold mx-2" onClick={handleClick}>
{direction === "right" ? ">" : "<"}
</button>
)}
render={<CostumeDatePickerInput title='تاریخ و زمان شروع آزمون'/>}
plugins={[
<TimePicker hideSeconds position="bottom" />,
]}
/>
<DatePicker
format="YYYY/MM/DD HH:mm:ss"
calendar={persian} const dateChangeHandler=(index)=>{
locale={persian_fa} let inputs = document.querySelectorAll(".create-exame-date-input");
renderButton={(direction, handleClick) => ( console.log(inputs[index].value);
<button className="text-blue-500 font-bold mx-2" onClick={handleClick}> let dateList = inputs[index].value.split(" ")[0].split("/");
{direction === "right" ? ">" : "<"} let timeList = inputs[index].value.split(" ")[1].split(":");
</button> console.log(dateList);
)} console.log(timeList);
console.log(Number(dateList[0]));
render={<CostumeDatePickerInput title='تاریخ و زمان پایان آزمون'/>} }
plugins={[ return (
<TimePicker hideSeconds position="bottom" />, <>
<div className="flex py-10 items-start px-10 border-b border-gray-300">
]} <div className="flex flex-col w-1/6">
/> <div className="text-blue3A text-lg font-bold text-right px-4 border-r-4 border-blue65">
</div> تنظیمات آزمون
<textarea className="w-full mt-6 h-60 border border-gray-300 rounded-lg p-4 outline-blue65 text-blue3A" placeholder="توضیحات آزمون"
onChange={(e) => setDescription(e.target.value)}
>
</textarea>
</div>
</div> </div>
<p className="text-sm text-right font-bold pt-4 text-gray-500">
<div className="flex pt-10 items-start px-10 "> لطفا مشخضات آزمون را تکمیل کنید
<div className="flex flex-col w-1/6"> </p>
<div className="text-blue3A text-lg font-bold text-right px-4 border-r-4 border-blue65"> </div>
تنظیمات آزمون
<div className="flex w-5/6 pl-[10%] flex-col">
</div> <div className="flex items-center justify-between">
<p className="text-sm text-right font-bold pt-4 text-gray-500">لطفا یک مدل از آزمون را انتخاب کنید</p> <input
</div> type="text"
placeholder="نام آزمون"
<div className="flex w-5/6 flex-wrap"> className="w-1/2 bg-white px-4 h-14 border border-gray-300 rounded-lg text-blue3A outline-blue65"
onChange={(e) => setName(e.target.value)}
<div className={`w-1/6 border ${type == 'bank' ? 'border-red52 text-red52 bg-pinkF5' : ' border-gray-300 text-blue3A bg-white'} font-bold cursor-pointer py-10 m-4 rounded-xl`} onClick={() => setType('bank')}> />
بانک سوالات <DatePicker
format="YYYY/MM/DD HH:mm:ss"
calendar={persian}
</div> locale={persian_fa}
<div className={`w-1/6 border ${type == 'pdf' ? 'border-red52 text-red52 bg-pinkF5' : ' border-gray-300 text-blue3A bg-white'} font-bold cursor-pointer py-10 m-4 rounded-xl`} onClick={() => setType('pdf')}> // onChange={() => dateChangeHandler(0)}
دفترچه سوالات onChange={setStartDate}
renderButton={(direction, handleClick) => (
<button
</div> className="text-blue-500 font-bold mx-2"
onClick={handleClick}
</div> >
{direction === "right" ? ">" : "<"}
</button>
)}
render={
<CostumeDatePickerInput title="تاریخ و زمان شروع آزمون" />
}
plugins={[<TimePicker hideSeconds={true} position="bottom" />]}
/>
<DatePicker
format="YYYY/MM/DD HH:mm:ss"
calendar={persian}
locale={persian_fa}
onChange={setEndDate}
renderButton={(direction, handleClick) => (
<button
className="text-blue-500 font-bold mx-2"
onClick={handleClick}
>
{direction === "right" ? ">" : "<"}
</button>
)}
render={
<CostumeDatePickerInput title="تاریخ و زمان پایان آزمون" />
}
plugins={[<TimePicker hideSeconds={true} position="bottom" />]}
/>
</div> </div>
<div className="flex fixed bottom-10 left-0 w-full px-10 justify-end"> <textarea
<button className=' mx-2 h-12 mt-4 text-red52 font-bold flex items-center justify-center' onClick={() => backStep()}> بازگشت به مرحله قبل </button> className="w-full mt-6 h-60 border border-gray-300 rounded-lg p-4 outline-blue65 text-blue3A"
<Button placeholder="توضیحات آزمون"
title='مرحله بعدی' onChange={(e) => setDescription(e.target.value)}
className='w-1/12' ></textarea>
onClick={() => { <input
dispatch({ type: 'ADD_EXAM_DESCRIPTION', payload }); type="text"
stepClick() placeholder="مدت زمان آزمون(دقیقه)"
}} className="w-1/3 bg-white px-4 h-14 border border-gray-300 rounded-lg text-blue3A outline-blue65 mt-6"
onChange={(e) => setDuration(e.target.value)}
/> />
</div>
</div>
<div className="flex pt-10 items-start px-10 ">
<div className="flex flex-col w-1/6">
<div className="text-blue3A text-lg font-bold text-right px-4 border-r-4 border-blue65">
نوع آزمون
</div> </div>
<p className="text-sm text-right font-bold pt-4 text-gray-500">
</> لطفا یک مدل از آزمون را انتخاب کنید
) </p>
</div>
<div className="flex w-5/6 flex-wrap">
<div
className={`w-1/6 border ${
type == 1
? "border-red52 text-red52 bg-pinkF5"
: " border-gray-300 text-blue3A bg-white"
} font-bold cursor-pointer py-10 m-4 rounded-xl`}
onClick={() => setType(1)}
>
بانک سوالات
</div>
<div
className={`w-1/6 border ${
type == 2
? "border-red52 text-red52 bg-pinkF5"
: " border-gray-300 text-blue3A bg-white"
} font-bold cursor-pointer py-10 m-4 rounded-xl`}
onClick={() => setType(2)}
>
دفترچه سوالات
</div>
</div>
</div>
<div className="flex fixed bottom-10 left-0 w-full px-10 justify-end">
<button
className=" mx-2 h-12 mt-4 text-red52 font-bold flex items-center justify-center"
onClick={() => backStep()}
>
{" "}
بازگشت به مرحله قبل{" "}
</button>
<Button
title="مرحله بعدی"
className="w-1/12"
onClick={() => {
dispatch({ type: "ADD_EXAM_DESCRIPTION", payload });
stepClick();
}}
/>
</div>
</>
);
} }
const mapStateToProps = (state) => ({ const mapStateToProps = (state) => ({

@ -2,6 +2,7 @@
import React, { useState } from "react"; import React, { useState } from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import Button from "../../../components/Button"; import Button from "../../../components/Button";
import { exam } from "../../../redux/actions";
const AddGradeGroup = ({grades, addExamState, dispatch, stepClick}) => { const AddGradeGroup = ({grades, addExamState, dispatch, stepClick}) => {
const [examGrade, setExamGrade] = useState(null); const [examGrade, setExamGrade] = useState(null);
@ -82,4 +83,6 @@ const mapStateToProps = (state) => ({
addExamState: state.addExamReduser addExamState: state.addExamReduser
}) })
export default connect(mapStateToProps)(AddGradeGroup); export default connect(mapStateToProps)(AddGradeGroup);

@ -6,6 +6,8 @@ import AddQuestionnaireExam from "./addQuestionnaireExam";
import AddQuestionsFromBank from "./AddQuestionsFromBank"; import AddQuestionsFromBank from "./AddQuestionsFromBank";
const OkExam = ({ addExamState, stepClick, backStep }) => { const OkExam = ({ addExamState, stepClick, backStep }) => {
console.log("examInfo:----------------------------------------");
console.log(addExamState);
const grades = [ const grades = [
'', '',
'اول', 'اول',
@ -63,4 +65,6 @@ const mapStateToProps = (state) => ({
addExamState: state.addExamReduser addExamState: state.addExamReduser
}) })
export default connect(mapStateToProps)(OkExam); export default connect(mapStateToProps)(OkExam);

@ -9,146 +9,186 @@ import { Viewer } from '@react-pdf-viewer/core';
// Import the styles // Import the styles
import '@react-pdf-viewer/core/lib/styles/index.css'; import '@react-pdf-viewer/core/lib/styles/index.css';
import Preview from "../../../components/AnswerSheet/preview"; import Preview from "../../../components/AnswerSheet/preview";
import { exam } from "../../../redux/actions";
const ViewExam = ({ addExamState, stepClick, backStep }) => {
useEffect(() => { const ViewExam = ({ addExamState, stepClick, backStep, parentAdd }) => {
window.scrollTo(0, 0); useEffect(() => {
console.log(addExamState.type) window.scrollTo(0, 0);
}, []) console.log("oooooooooooooooooooooooooooooo");
const grades = [ console.log(addExamState);
'', }, []);
'اول', const grades = [
'دوم', "",
'سوم', "اول",
'چهارم', "دوم",
'پنجم', "سوم",
'ششم', "چهارم",
'هفتم', "پنجم",
'هشتم', "ششم",
'نهم', "هفتم",
'دهم', "هشتم",
'یازدهم', "نهم",
'دوازدهم', "دهم",
] "یازدهم",
const optionNum = [ "دوازدهم",
'', ];
'الف', const optionNum = ["", "الف", "ب", "پ", "ت", "ث", "ج", "چ", "ح"];
'ب',
'پ', const [selectedCourse, setSelectedCourse] = useState(
'ت', addExamState?.questionnaires[0]
'ث', );
'ج',
'چ', const [numPages, setNumPages] = useState(1);
'ح',
function onDocumentLoadSuccess({ numPages }) {
] setNumPages(numPages);
}
const [selectedCourse, setSelectedCourse] = useState(addExamState?.questionnaires[0]);
let questionCount = 0;
const [numPages, setNumPages] = useState(1); for(let i=0;i<addExamState.courses.length;i++){
questionCount += addExamState.courses[i].selectedQuestions.length;
function onDocumentLoadSuccess({ numPages }) { }
setNumPages(numPages);
} console.log(">>>>>>>>>>>>>>>>>>>>>>>>>>>");
console.log(addExamState.startDate);
return ( const submitHandler=()=>{
parentAdd({
<div className="w-[95%] flex flex-col mx-10"> name: addExamState.name,
<div className="w-4/5 py-6 flex items-center"> description: addExamState.description,
<h1 className="text-2xl font-bold ml-6">آزمون {addExamState.name}</h1> startDate: addExamState.startDate,
<h3 className="text-gray-500"> پایه {grades[addExamState.grade]}</h3> endDate: addExamState.endDate,
</div> duration: addExamState?.duration || 60,
{addExamState.type !== 'pdf' ? <div className="w-full flex flex-col text-right"> // duration:30,
{ type: addExamState.type,
addExamState.courses.map((item, index) => ( //questionCount: addExamState.questions.length,
<div className={`flex flex-col w-full py-6 border-b-2 border-gray-400`}> questionCount,
<h1 className="text-xl">سوالات {item.title}</h1> examGroupId: addExamState.groupId,
<p className="text-gray-500 pt-2">ضریب {item.coefficient}</p> levelCriterion: null,
{ budgetFileId:null
item.selectedQuestions.map((question, idx) => ( });
<div className={`flex flex-col w-full py-4 ${item.selectedQuestions.length !== idx + 1 && 'border-b border-gray-200'}`} key={`PISHNAMAYESH__${question.questionId}`}> // stepClick();
{console.log(item.selectedQuestions.length)} }
{console.log(idx + 1)}
<div className="flex items-start pb-4"> return (
<h1 className="text-xl">{question.title}</h1> <div className="w-[95%] flex flex-col mx-10">
<p className="w-1/12 pr-4">{question.score} نمره</p> <div className="w-4/5 py-6 flex items-center">
</div> <h1 className="text-2xl font-bold ml-6">آزمون {addExamState.name}</h1>
{ <h3 className="text-gray-500"> پایه {grades[addExamState.grade]}</h3>
question.options.map((option) => ( </div>
<div className="flex w-full my-2 items-center"> {addExamState.type !== "pdf" ? (
<div className={`${option.isAnswer ? 'bg-green-400 text-white' : 'bg-gray-300'} w-16 h-14 text-xl flex items-center justify-center rounded-xl rounded-l-none`}> <div className="w-full flex flex-col text-right">
{optionNum[option.id]} {addExamState.courses.map((item, index) => (
</div> <div
<div className={`w-1/4 flex items-center px-6 ${option.isAnswer ? 'bg-green-200' : 'bg-gray-200'} h-14 rounded-xl rounded-r-none`}> className={`flex flex-col w-full py-6 border-b-2 border-gray-400`}
{option.title} >
</div> <h1 className="text-xl">سوالات {item.title}</h1>
</div> <p className="text-gray-500 pt-2">ضریب {item.coefficient}</p>
)) {item.selectedQuestions.map((question, idx) => (
} <div
</div> className={`flex flex-col w-full py-4 ${
)) item.selectedQuestions.length !== idx + 1 &&
} "border-b border-gray-200"
</div> }`}
)) key={`PISHNAMAYESH__${question.questionId}`}
} >
</div> : {console.log(item.selectedQuestions.length)}
addExamState.type === 'pdf' && {console.log(idx + 1)}
<div className="flex flex-col w-full items-center"> <div className="flex items-start pb-4">
<h1 className="w-full text-right pb-4 text-lg font-bold">دفترچه ها</h1> <h1 className="text-xl">{question.title}</h1>
<div className="w-full flex flex-wrap"> <p className="w-1/12 pr-4">{question.score} نمره</p>
{ </div>
addExamState?.questionnaires?.map((item) => ( {question.options.map((option) => (
<div <div className="flex w-full my-2 items-center">
<div
className={`flex flex-col ${selectedCourse.id === item?.id ? 'bg-pinkF5 border border-red52 text-red52' : 'bg-white border border-gray-300 text-blue3A'} items-center justify-center w-36 h-32 mx-2 font-bold rounded-xl cursor-pointer`} className={`${
onClick={() => setSelectedCourse(item)} option.isAnswer
> ? "bg-green-400 text-white"
: "bg-gray-300"
} w-16 h-14 text-xl flex items-center justify-center rounded-xl rounded-l-none`}
<p className="text-red52"> >
{item.name} {optionNum[option.id]}
</p> </div>
</div> <div
)) className={`w-1/4 flex items-center px-6 ${
} option.isAnswer ? "bg-green-200" : "bg-gray-200"
</div> } h-14 rounded-xl rounded-r-none`}
>
<div className="flex w-full border-t border-gray-200 mt-10"> {option.title}
<div className="w-1/2 border-l border-gray-200 py-20 " style={{ height: '750px' }}> </div>
<Worker workerUrl="https://unpkg.com/pdfjs-dist@2.13.216/build/pdf.worker.min.js">
<Viewer fileUrl={selectedCourse.fileUrl} />
</Worker>
</div>
<div className="w-1/2 my-20 flex justify-center overflow-x-hidden overflow-scroll" style={{height: '600px'}}>
<div className="w-2/3">
<Preview answers={selectedCourse.answers}/>
</div>
</div>
</div> </div>
))}
</div> </div>
))}
}
<div className="w-full flex justify-end font-bold mt-6">
<button className="py-4 font-bold px-6 rounded-lg text-red52 mr-4"
onClick={() => backStep()}>
بازگشت به مرحله قبلی
</button>
<button className="bg-red52 py-4 px-6 rounded-lg text-white mr-4"
onClick={() => stepClick()}>
تایید آزمون
</button>
</div> </div>
))}
</div> </div>
) : (
addExamState.type === "pdf" && (
<div className="flex flex-col w-full items-center">
<h1 className="w-full text-right pb-4 text-lg font-bold">
دفترچه ها
</h1>
<div className="w-full flex flex-wrap">
{addExamState?.questionnaires?.map((item) => (
<div
className={`flex flex-col ${
selectedCourse.id === item?.id
? "bg-pinkF5 border border-red52 text-red52"
: "bg-white border border-gray-300 text-blue3A"
} items-center justify-center w-36 h-32 mx-2 font-bold rounded-xl cursor-pointer`}
onClick={() => setSelectedCourse(item)}
>
<p className="text-red52">{item.name}</p>
</div>
))}
</div>
<div className="flex w-full border-t border-gray-200 mt-10">
) <div
} className="w-1/2 border-l border-gray-200 py-20 "
style={{ height: "750px" }}
>
<Worker workerUrl="https://unpkg.com/pdfjs-dist@2.13.216/build/pdf.worker.min.js">
<Viewer fileUrl={selectedCourse.fileUrl} />
</Worker>
</div>
<div
className="w-1/2 my-20 flex justify-center overflow-x-hidden overflow-scroll"
style={{ height: "600px" }}
>
<div className="w-2/3">
<Preview answers={selectedCourse.answers} />
</div>
</div>
</div>
</div>
)
)}
<div className="w-full flex justify-end font-bold mt-6">
<button
className="py-4 font-bold px-6 rounded-lg text-red52 mr-4"
onClick={() => backStep()}
>
بازگشت به مرحله قبلی
</button>
<button
className="bg-red52 py-4 px-6 rounded-lg text-white mr-4"
onClick={submitHandler}
>
تایید آزمون
</button>
</div>
</div>
);
};
const mapStateToProps = (state) => ({ const mapStateToProps = (state) => ({
grades: state.publicApi.grades, grades: state.publicApi.grades,
addExamState: state.addExamReduser addExamState: state.addExamReduser
}) })
export default connect(mapStateToProps)(ViewExam); const mapDispatchToProps = {
parentAdd: exam.parentAdd,
};
export default connect(mapStateToProps, mapDispatchToProps)(ViewExam);

@ -1,7 +1,9 @@
import moment from "jalali-moment"; import moment from "jalali-moment";
import React from "react"; import React from "react";
import { connect } from "react-redux";
import Button from "../../../components/Button"; import Button from "../../../components/Button";
import Checkbox from "../../../components/Checkbox"; import Checkbox from "../../../components/Checkbox";
import { userProduct } from "../../../redux/actions";
import separate from "../../../utils/separate"; import separate from "../../../utils/separate";
const servicePopUp = ({ const servicePopUp = ({
content, content,
@ -10,6 +12,8 @@ const servicePopUp = ({
sendPrice, sendPrice,
setShowBudget, setShowBudget,
setBudgetFileId, setBudgetFileId,
userInfo,
pushToCart
}) => { }) => {
console.log(")))))(((((((((("); console.log(")))))((((((((((");
console.log(content); console.log(content);
@ -18,6 +22,29 @@ const servicePopUp = ({
setBudgetFileId(fileId); setBudgetFileId(fileId);
setShowBudget(true); setShowBudget(true);
}; };
//addToCartHandler------
let rulesAccepted = userInfo.rulesAccepted;
const addToCartHandler = () => {
let checkBoxes = document.querySelectorAll(".exam-child-checbox");
let childList = [];
let parentLength = content?.product?.childs?.length;
console.log("buying.....................");
for (let i = 0; i < checkBoxes.length; i++) {
if (checkBoxes[i].checked) {
childList.push(content?.product?.childs[i].id);
}
}
console.log(childList);
console.log(parentLength);
if (parentLength === childList.length) {
pushToCart({ productId :content.product.id,count:1});
} else {
for(let j=0;j<childList.length;j++){
pushToCart({productId:childList[j],count:1})
}
}
};
return ( return (
<div <div
className="flex justify-center w-full items-center fixed text-right z-30 backdrop-blur" className="flex justify-center w-full items-center fixed text-right z-30 backdrop-blur"
@ -156,83 +183,97 @@ const servicePopUp = ({
</div> </div>
)} )}
{content.id === 2 && ( {content.id === 2 && (
<div className="flex w-11/12 flex-col rounded-xl border border-red82OP"> <div className="w-full">
<h1 className="px-2 py-6 border-b border-red82OP bg-blueFF rounded-t-xl pr-10 text-blueE3 text-xl font-bold"> <div className="flex w-11/12 flex-col rounded-xl border border-red82OP">
{content.title} <h1 className="px-2 py-6 border-b border-red82OP bg-blueFF rounded-t-xl pr-10 text-blueE3 text-xl font-bold">
</h1> {content.title}
<div </h1>
className="flex w-full border-b border-red82OP text-red26 text-sm font-bold"
style={{ direction: "rtl" }}
>
<div className="w-1/4 flex justify-center py-4 border-l border-red82OP">
نوع آزمون :{" "}
{content?.product?.exam?.productType === 2
? "حضوری"
: "مجازی"}
</div>
<div className="w-1/4 flex justify-center py-4 border-l border-red82OP">
تاریخ شروع :{" "}
{moment(content?.product?.exam?.startDate, "YYYY/MM/DD")
.locale("fa")
.format("YYYY/MM/DD")}
</div>
<div className="w-1/4 flex justify-center py-4 border-l border-red82OP">
تعداد آزمون : ۱۸
</div>
<div
className="w-1/4 flex items-center justify-center py-4 cursor-pointer"
onClick={() =>
budgetHandler(content?.product?.exam?.budgetFileId)
}
>
{" "}
بودجه بندی آزمون{" "}
</div>
</div>
<div
className="flex w-full border-b border-red82OP text-red26 text-xs py-3 px-6 "
style={{ direction: "rtl" }}
>
<span className="text-red52 ml-1 font-bold">توجه:</span>
به صورت معمول تمامی آزمون ها برای شما خریداری خواهند شد مگر
اینکه شما به صورت دلخواه یک یا چند آزمون را انتخاب نمایید
</div>
{content?.product?.exam?.childs?.map((item, index) => (
<div <div
className="flex w-full items-center justify-between border-b border-red82OP font-bold text-red26 text-xs py-3 px-6 " className="flex w-full border-b border-red82OP text-red26 text-sm font-bold"
style={{ direction: "rtl" }} style={{ direction: "rtl" }}
> >
<div className="flex items-center font-bold"> <div className="w-1/4 flex justify-center py-4 border-l border-red82OP">
<Checkbox نوع آزمون :{" "}
name={`examPackage_${item.id}_${index}`} {content?.product?.exam?.productType === 2
defaultChecked={true} ? "حضوری"
// onclick={(e) => : "مجازی"}
// e.target.checked
// ? sendPrice(item.price)
// : sendPrice(-item.price)
// }
/>
<p>{item?.name}</p>
</div> </div>
<p> <div className="w-1/4 flex justify-center py-4 border-l border-red82OP">
تاریخ :{" "} تاریخ شروع :{" "}
{moment(item?.startDate, "YYYY/MM/DD") {moment(content?.product?.exam?.startDate, "YYYY/MM/DD")
.locale("fa") .locale("fa")
.format("YYYY/MM/DD")} .format("YYYY/MM/DD")}
</p> </div>
{/* <p>ساعت : {item.time}</p> */} <div className="w-1/4 flex justify-center py-4 border-l border-red82OP">
<p تعداد آزمون : ۱۸
className="cursor-pointer" </div>
<div
className="w-1/4 flex items-center justify-center py-4 cursor-pointer"
onClick={() => onClick={() =>
budgetHandler(item?.budgetFileId) budgetHandler(content?.product?.exam?.budgetFileId)
} }
> >
بودجه بندی ! {" "}
</p> بودجه بندی آزمون{" "}
<p>تعداد سوالات: {item?.questionCount}</p> </div>
<p>{separate(item?.price)} تومان</p>
</div> </div>
))} <div
className="flex w-full border-b border-red82OP text-red26 text-xs py-3 px-6 "
style={{ direction: "rtl" }}
>
<span className="text-red52 ml-1 font-bold">توجه:</span>
به صورت معمول تمامی آزمون ها برای شما خریداری خواهند شد مگر
اینکه شما به صورت دلخواه یک یا چند آزمون را انتخاب نمایید
</div>
{content?.product?.childs?.map((item, index) => (
<div
className="flex w-full items-center justify-between border-b border-red82OP font-bold text-red26 text-xs py-3 px-6 "
style={{ direction: "rtl" }}
>
<div className="flex items-center font-bold">
{/* <Checkbox
name={`examPackage_${item.id}_${index}`}
defaultChecked={true}
// onclick={(e) =>
// e.target.checked
// ? sendPrice(item.price)
// : sendPrice(-item.price)
// }
/> */}
<input
type="checkbox"
name="exam-child-checbox"
className="exam-child-checbox w-5 h-5 rounded-sm ml-3 accent-[#DF1452]"
defaultChecked={true}
/>
<p>{item?.name}</p>
</div>
<p>
تاریخ :{" "}
{moment(item?.exam?.startDate, "YYYY/MM/DD")
.locale("fa")
.format("YYYY/MM/DD")}
</p>
{/* <p>ساعت : {item.time}</p> */}
<p
className="cursor-pointer"
onClick={() => budgetHandler(item?.exam?.budgetFileId)}
>
بودجه بندی !
</p>
<p>تعداد سوالات: {item?.exam?.questionCount}</p>
<p>{separate(item?.price)} تومان</p>
</div>
))}
</div>
{rulesAccepted && <div className="w-full flex mt-5">
<div
className="w-40 h-12 rounded bg-[#DF1452] flex items-center justify-center text-[#fff] cursor-pointer text-sm"
onClick={addToCartHandler}
>
افزودن به سبد خرید
</div>
</div>}
</div> </div>
)} )}
@ -272,4 +313,12 @@ const servicePopUp = ({
); );
}; };
export default servicePopUp; const mapStateToProps = (state) => ({
userInfo: state.user.status,
});
const mapDispatchToProps = {
pushToCart: userProduct.add,
};
export default connect(mapStateToProps, mapDispatchToProps)(servicePopUp);

Loading…
Cancel
Save