update 11 files

temp
mahdi 2 years ago
parent 14f4991dcd
commit 14975386a8
  1. 38
      src/views/Product/index.js
  2. 8
      src/views/Products/layouts/Desktop/Main.js
  3. 12
      src/views/Products/layouts/Desktop/Sidebar.js
  4. 4
      src/views/Products/layouts/Mobile/Header.js
  5. 31
      src/views/Products/layouts/Mobile/Main.js
  6. 10
      src/views/QR/Content/components/Links.js
  7. 40
      src/views/QR/Content/components/Tab.js
  8. 35
      src/views/QR/Content/index.js
  9. 20
      src/views/ShoppingCart/Code/index.js
  10. 18
      src/views/ShoppingCart/Product/index.js

@ -74,7 +74,7 @@ export const Product = ({
{book?.name}
</h1>
<div className="text-green7B text-tiny dark:text-greenBA">
{"پایه" + " " + grades[book?.gradeId]}
{window.t("پایه") + " " + grades[book?.gradeId]}
</div>
</div>
</header>
@ -83,23 +83,27 @@ export const Product = ({
style={{ direction: "ltr" }}
>
<li className="border-solid border-blueFE flex-1 flex-shrink-0 text-center text-tiny leading-5 font-medium text-green7B dark:text-white">
{book?.pagesNum} <br /> صفحه
{book?.pagesNum} <br /> {window.t("صفحه")}
</li>
<li className="border-solid border-blueFE flex-1 flex-shrink-0 text-center text-tiny leading-5 font-medium text-green7B dark:text-white">
{"فیزیکی - دیجیتالی"} <br /> در دسترس
{window.t("فیزیکی - دیجیتالی")}
<br /> {window.t("در دسترس")}
</li>
<li className="border-solid border-blueFE flex-1 flex-shrink-0 text-center text-tiny leading-5 font-medium text-green7B dark:text-white">
{book?.rate} <br /> امتیاز
{book?.rate} <br />
{window.t("امتیاز")}
</li>
</ul>
<h2 className="text-green7B text-base font-semibold mt-10 dark:text-greenBA">
نسخه محصول را انتخاب کنید
{window.t("نسخه محصول را انتخاب کنید")}
</h2>
<div className="w-full flex flex-row justify-between items-center mt-5">
<ButtonBetween
width="100%"
item={"خرید نسخه فیزیکی کتاب"}
status={separate(book?.product[1]?.price) + " " + "تومان"}
item={window.t("خرید نسخه فیزیکی کتاب")}
status={
separate(book?.product[1]?.price) + " " + window.t("تومان")
}
onClick={() =>
userId
? pushToCart({
@ -107,15 +111,17 @@ export const Product = ({
userId,
count: 1,
})
: toast.info("ابتدا وارد حساب کاربری خود شوید.")
: toast.info(window.t("ابتدا وارد حساب کاربری خود شوید"))
}
/>
</div>
<div className="w-full flex flex-row justify-between items-center mt-4 gap-2">
<ButtonBetween
width="72%"
item={"خرید نسخه دیجیتال کتاب"}
status={separate(book?.product[0]?.price) + " " + "تومان"}
item={window.t("خرید نسخه دیجیتال کتاب")}
status={
separate(book?.product[0]?.price) + " " + window.t("تومان")
}
onClick={() =>
userId
? pushToCart({
@ -123,7 +129,7 @@ export const Product = ({
userId,
count: 1,
})
: toast.info("ابتدا وارد حساب کاربری خود شوید.")
: toast.info(window.t("ابتدا وارد حساب کاربری خود شوید."))
}
/>
<a
@ -131,14 +137,16 @@ export const Product = ({
className="flex-1 border-2 border-solid text-sm border-green-500 bg-green-50 bg-opacity-70 rounded-sm font-bold text-green-700 text-center"
style={{ padding: "18px 0px" }}
>
مشاهده نمونه
{window.t("مشاهده نمونه")}
</a>
</div>
<div className="w-full flex flex-row justify-between items-center mt-4">
<ButtonBetween
width="72%"
item={"خرید نسخه ویدئویی کتاب"}
status={separate(book?.product[2]?.price) + " " + "تومان"}
item={window.t("خرید نسخه ویدئویی کتاب")}
status={
separate(book?.product[2]?.price) + " " + window.t("تومان")
}
onClick={() =>
userId
? pushToCart({
@ -146,7 +154,7 @@ export const Product = ({
userId,
count: 1,
})
: toast.info("ابتدا وارد حساب کاربری خود شوید.")
: toast.info(window.t("ابتدا وارد حساب کاربری خود شوید."))
}
/>
<ButtonBetween

@ -73,15 +73,15 @@ export const Main = ({
byAvailableFilter = bySubjectFilter;
}
if (sort) {
if (sort === "ارزان ترین") {
if (sort === window.t("ارزان ترین")) {
bySortFilter = byAvailableFilter?.sort(
(a, b) => a.product[type].price - b.product[type].price
);
} else if (sort === "محبوب ترین") {
} else if (sort === window.t("محبوب ترین")) {
bySortFilter = byAvailableFilter?.sort(
(a, b) => a.product[type].rate - b.product[type].rate
);
} else if (sort === "جدیدترین") {
} else if (sort === window.t("جدیدترین")) {
bySortFilter = byAvailableFilter?.sort(
(a, b) => moment(a.createdAt) - moment(b.createdAt)
);
@ -168,7 +168,7 @@ export const Main = ({
</g>
</svg>
<span className="text-tiny text-greenBA font-bold">
{"مرتب سازی" + "" + ":"}
{window.t("مرتب سازی") + "" + ":"}
</span>
</div>
<ul className="flex py-0 flex-1 gap-4">

@ -116,7 +116,7 @@ export const Sidebar = ({
}}
>
<div className="flex justify-between items-center mb-10">
<strong className="text-lg text-green4F">فیلترها</strong>
<strong className="text-lg text-green4F">{window.t("فیلترها")}</strong>
{filterLength > 0 && (
<span
className="text-tiny text-greenBA bg-greenBA bg-opacity-20 rounded-full px-3 py-2"
@ -130,30 +130,30 @@ export const Sidebar = ({
})
}
>
{filterLength + " " + "فیلتر"}
{filterLength + " " + window.t("فیلتر")}
</span>
)}
</div>
<div className="flex flex-col divide-y divide-solid divide-gray-200">
<Dropdown
list={productTypes}
title="نوع محصول"
title={window.t("نوع محصول")}
name="productType"
active={filterOptions.productType}
/>
<Dropdown
list={Object.values(levels)}
title={"پایه تحصیلی"}
title={window.t("پایه تحصیلی")}
name="grade"
active={filterOptions.grade}
/>
<Dropdown
list={subjects}
title={"عنوان کتاب"}
title={window.t("عنوان کتاب")}
name="subject"
active={filterOptions.subject}
/>
<CkeckItem title="فقط کالاهای موجود" name={"available"} />
<CkeckItem title={window.t("فقط کالاهای موجود")} name={"available"} />
</div>
</div>
);

@ -37,7 +37,7 @@ export const Header = ({
borderColor="border-grayDB dark:border-gray45"
backgroundColor="bg-gray-100"
onChange={(name, value) =>
value === "نوع محصول"
value === window.t("نوع محصول")
? setFilterOptions({ ...filterOptions, [name]: null })
: setFilterOptions({ ...filterOptions, [name]: value })
}
@ -50,7 +50,7 @@ export const Header = ({
borderColor="border-grayDB dark:border-gray45"
backgroundColor="bg-gray-100"
onChange={(name, value) =>
value === "پایه تحصیلی"
value === window.t("پایه تحصیلی")
? setFilterOptions({ ...filterOptions, [name]: null })
: setFilterOptions({ ...filterOptions, [name]: value })
}

@ -55,7 +55,7 @@ export const Main = ({ books, filterOptions, grades }) => {
bySearchFilter = byAvailableFilter;
}
return filterOptions.productType === "دوره ویدئویی"
return filterOptions.productType === window.t("دوره ویدئویی")
? bySearchFilter?.map((product, index) => (
<Link
to={"/videos/" + product?.id}
@ -81,16 +81,18 @@ export const Main = ({ books, filterOptions, grades }) => {
{product?.name}
</strong>
<span className="text-tiny lg:text-sm text-green7B dark:text-greenBA font-light mb-4">
{"پایه" + " " + grades[product?.gradeId]}
{window.t("پایه") + " " + grades[product?.gradeId]}
</span>
<div className="w-full flex flex-row justify-center font-bold lg:font-medium text-lg lg:text-tiny text-blue5F dark:text-white">
{product?.product[2]?.price + " " + "تومان"}
{product?.product[2]?.price + " " + window.t("تومان")}
</div>
</Link>
))
: bySearchFilter?.map((product) => (
<>
{(productType ? productType === "کتاب دیجیتال" : true) && (
{(productType
? productType === window.t("کتاب دیجیتال")
: true) && (
<Link
key={product?.product[0]?.id}
to={"/products/" + product?.id}
@ -101,17 +103,17 @@ export const Main = ({ books, filterOptions, grades }) => {
className="w-full rounded-md mb-3 object-contain"
/>
<strong className="text-blue5F dark:text-white text-tiny font-bold lg:text-sm lg:font-medium mb-2">
{"کتاب دیجیتال" + " " + product?.name}
{window.t("کتاب دیجیتال") + " " + product?.name}
</strong>
<span className="text-tiny lg:text-xs text-green7B dark:text-greenBA font-light mb-4">
{"پایه" + " " + grades[product?.gradeId]}
{window.t("پایه") + " " + grades[product?.gradeId]}
</span>
<div className="w-full flex flex-row justify-center font-bold lg:font-medium text-lg lg:text-sm text-blue5F dark:text-white">
{product?.product[0]?.price + " " + "تومان"}
{product?.product[0]?.price + " " + window.t("تومان")}
</div>
</Link>
)}
{(productType ? productType === "کتاب فیزیکی" : true) && (
{(productType ? productType === window.t("کتاب فیزیکی") : true) && (
<Link
key={product?.product[1]?.id}
to={"/products/" + product?.id}
@ -120,15 +122,16 @@ export const Main = ({ books, filterOptions, grades }) => {
<img
src={"https://dnvn.ir/api/v1/file/" + product?.fileIds}
className="w-full rounded-md mb-3"
alt=""
/>
<strong className="text-blue5F dark:text-white text-tiny font-bold lg:text-sm lg:font-medium mb-2">
{"کتاب فیزیکی" + " " + product?.name}
{window.t("کتاب فیزیکی") + " " + product?.name}
</strong>
<span className="text-tiny lg:text-xs text-green7B dark:text-greenBA font-light mb-4">
{"پایه" + " " + grades[product?.gradeId]}
{window.t("پایه") + " " + grades[product?.gradeId]}
</span>
<div className="w-full flex flex-row justify-center font-bold lg:font-medium text-lg lg:text-sm text-blue5F dark:text-white">
{product?.product[1]?.price + " " + "تومان"}
{product?.product[1]?.price + " " + window.t("تومان")}
</div>
</Link>
)}
@ -138,9 +141,9 @@ export const Main = ({ books, filterOptions, grades }) => {
return (
<div className="h-full overflow-y-scroll w-full flex flex-wrap py-32">
{filterOptions?.productType === "دوره ویدئویی" && Items(2)}
{filterOptions?.productType === "کتاب دیجیتال" && Items(0)}
{filterOptions?.productType === "کتاب فیزیکی" && Items(1)}
{filterOptions?.productType === window.t("دوره ویدئویی") && Items(2)}
{filterOptions?.productType === window.t("کتاب دیجیتال") && Items(0)}
{filterOptions?.productType === window.t("کتاب فیزیکی") && Items(1)}
{!filterOptions?.productType && Items(0)}
{filterLoading && (
<div className="w-full h-screen flex justify-center items-center bg-white bg-opacity-20 backdrop-filter backdrop-blur-xl fixed left-0 top-0">

@ -6,14 +6,20 @@ export default function Links({ data }) {
return (
<div className="w-full flex-row justify-between items-center rounded-md bg-yellow-100 bg-opacity-20 py-3 px-2 mt-5 relative dark:bg-opacity-10">
<div className="flex flex-col">
<strong className="text-sm font-normal dark:text-white">لینک ها</strong>
<strong className="text-sm font-normal dark:text-white">
{window.t("لینک ها")}
</strong>
{data.map((link, i) => (
<Link to="#" key={i} className="text-xs mt-1 dark:text-white">
{link}
</Link>
))}
</div>
<img src={linkIcon} className="w-8 absolute left-2 top-1/2 transform -translate-y-1/2" />
<img
src={linkIcon}
className="w-8 absolute left-2 top-1/2 transform -translate-y-1/2"
alt=""
/>
</div>
);
}

@ -21,7 +21,7 @@ export default function Tab({ data }) {
: "bg-white font-normal"
}`}
>
تمامی محتوا
{window.t("تمامی محتوا")}
</button>
<button
onClick={() => setDataType("voice")}
@ -31,7 +31,7 @@ export default function Tab({ data }) {
: "bg-white font-normal"
}`}
>
صوت
{window.t("صوت")}
</button>
<button
onClick={() => setDataType("video")}
@ -41,7 +41,7 @@ export default function Tab({ data }) {
: "bg-white font-normal"
}`}
>
ویدئو
{window.t("ویدئو")}
</button>
<button
onClick={() => setDataType("pdf")}
@ -51,7 +51,7 @@ export default function Tab({ data }) {
: "bg-white font-normal"
}`}
>
پی دی اف
{window.t("پی دی اف")}
</button>
<button
onClick={() => setDataType("ppt")}
@ -61,7 +61,7 @@ export default function Tab({ data }) {
: "bg-white font-normal"
}`}
>
پاور پوینت
{window.t("پاور پوینت")}
</button>
<button
onClick={() => setDataType("links")}
@ -71,18 +71,14 @@ export default function Tab({ data }) {
: "bg-white font-normal"
}`}
>
لینک ها
{window.t("لینک ها")}
</button>
</div>
<div className="flex flex-col w-full p-4">
{dataType === "all" && (
<>
{data.voice && (
<Voice data={data?.voice} />
)}
{data.video && (
<Video data={data?.video} />
)}
{data.voice && <Voice data={data?.voice} />}
{data.video && <Video data={data?.video} />}
{data.ppt && <PPT data={data.ppt} />}
{data.pdf && <PDF data={data.pdf} />}
{data.links && <Links data={data.links} />}
@ -93,7 +89,9 @@ export default function Tab({ data }) {
{data.voice ? (
<Voice data={data.voice} />
) : (
<p className="text-sm text-gray70">فایل صدا یافت نشد.</p>
<p className="text-sm text-gray70">
{window.t("فایل صدا یافت نشد.")}
</p>
)}
</>
)}
@ -102,7 +100,9 @@ export default function Tab({ data }) {
{data.video ? (
<Video data={data.video} />
) : (
<p className="text-sm text-gray70">فایل تصویری یافت نشد.</p>
<p className="text-sm text-gray70">
{window.t("فایل تصویری یافت نشد.")}
</p>
)}
</>
)}
@ -111,7 +111,9 @@ export default function Tab({ data }) {
{data.ppt ? (
<PPT data={data.ppt} />
) : (
<p className="text-sm text-gray70">فایل پاورپوینت یافت نشد.</p>
<p className="text-sm text-gray70">
{window.t("فایل پاورپوینت یافت نشد.")}
</p>
)}
</>
)}
@ -120,7 +122,9 @@ export default function Tab({ data }) {
{data.pdf ? (
<PDF data={data.pdf} />
) : (
<p className="text-sm text-gray70">فایل پی دی اف یافت نشد.</p>
<p className="text-sm text-gray70">
{window.t("فایل پی دی اف یافت نشد.")}
</p>
)}
</>
)}
@ -129,7 +133,9 @@ export default function Tab({ data }) {
{data.links ? (
<Links data={data.links} />
) : (
<p className="text-sm text-gray70">لینکی پیدا نشد.</p>
<p className="text-sm text-gray70">
{window.t("لینکی پیدا نشد.")}
</p>
)}
</>
)}

@ -36,17 +36,19 @@ export const Content = ({
<span className="text-sm text-blueC0 mt-2 dark:text-greenBA">
{grades[data?.book?.gradeId]}
</span>
<p className="text-sm mt-2 text-blueC0 dark:text-greenBA">{`شما در حال مشاهده صفحه ${data?.qr?.pageNumber} هستید.`}</p>
<p className="text-sm mt-2 text-blueC0 dark:text-greenBA">{`${window.t(
"شما در حال مشاهده صفحه"
)} ${data?.qr?.pageNumber} ${window.t("هستید.")}`}</p>
</div>
</div>
<Tab
data={{
voice: data?.qr?.content?.filter((obj) => obj.type === 'voice')[0],
video: data?.qr?.content?.filter((obj) => obj.type === 'video')[0],
pdf: data?.qr?.content?.filter((obj) => obj.type === 'pdf')[0],
ppt: data?.qr?.content?.filter((obj) => obj.type === 'ppt')[0],
links: data?.qr?.content?.filter((obj) => obj.type === 'links')[0],
voice: data?.qr?.content?.filter((obj) => obj.type === "voice")[0],
video: data?.qr?.content?.filter((obj) => obj.type === "video")[0],
pdf: data?.qr?.content?.filter((obj) => obj.type === "pdf")[0],
ppt: data?.qr?.content?.filter((obj) => obj.type === "ppt")[0],
links: data?.qr?.content?.filter((obj) => obj.type === "links")[0],
}}
/>
</div>
@ -67,18 +69,21 @@ export default connect(mapStateToProps, mapDispatchToProps)(Content);
Content.defaultProps = {
data: {
name: "ریاضیات گسسته خیلی پیشرفته",
grade: "پایه هفتم ابتدایی",
name: window.t("ریاضیات گسسته خیلی پیشرفته"),
grade: window.t("پایه هفتم ابتدایی"),
page: "67",
percent: "62",
voice: { name: "استاد رضایی: فصل پنجم توضیح در مورد آتش فشان ها", file: 1 },
video: { name: "ویدئوی آزمایش آتشفشان سرکه ای", file: 1 },
pdf: { name: "فایل پاورپوینت ارائه درس آتشفشان ها", file: 1 },
ppt: { name: "فایل پاورپوینت ارائه درس آتشفشان ها", file: 1 },
voice: {
name: window.t("استاد رضایی: فصل پنجم توضیح در مورد آتش فشان ها"),
file: 1,
},
video: { name: window.t("ویدئوی آزمایش آتشفشان سرکه ای"), file: 1 },
pdf: { name: window.t("فایل پی دی اف ارائه درس آتشفشان ها"), file: 1 },
ppt: { name: window.t("فایل پاورپوینت ارائه درس آتشفشان ها"), file: 1 },
links: [
"وبسایت آموزشی دانوین",
"وبسایت رسمی مدیریت راهبردی کشور",
"سازمان تبلیغات صنایع سبک ",
window.t("وبسایت آموزشی دانوین"),
window.t("وبسایت رسمی مدیریت راهبردی کشور"),
window.t("سازمان تبلیغات صنایع سبک "),
],
},
};

@ -7,16 +7,23 @@ function Code({ codeId, setCodeId, userId, factorId }) {
const setOff = () => {
setCodeId({ offCodeValue: value, userId: userId, id: factorId });
}
};
return (
<div className="flex w-full flex-row border border-blueC0 border-solid rounded-md mt-3 mb-4 overflow-hidden lg:w-2/5 lg:mt-5">
<input
type="text"
className="border-0 flex-1 text-right pr-3 font-medium text-tiny dark:bg-gray2077 placeholder:text-blue5F dark:text-white outline-none lg:text-base lg:font-bold"
placeholder={"کد تخفیف دارید ؟"}
placeholder={window.t("کد تخفیف دارید ؟")}
/>
<button className={"py-3 px-4 lg:py-4 text-tiny bg-blueC0 text-white border border-blueC0 border-solid lg:font-bold"} onClick={() => setOff()}>ثبت کد</button>
<button
className={
"py-3 px-4 lg:py-4 text-tiny bg-blueC0 text-white border border-blueC0 border-solid lg:font-bold"
}
onClick={() => setOff()}
>
{window.t("ثبت کد")}
</button>
</div>
);
}
@ -29,9 +36,6 @@ const mapStateToProps = (state) => ({
const mapDispatchToProps = {
setCodeId: userFactor.update,
}
};
export default connect(
mapStateToProps,
mapDispatchToProps
)(Code);
export default connect(mapStateToProps, mapDispatchToProps)(Code);

@ -22,10 +22,12 @@ function Product({ product, grades, pushToCart, isMobile, loading }) {
{product.product.book.name}
</strong>
<span className="text-gray70 text-tiny mb-2 dark:text-greenBA">
{"پایه" + " " + grades[product.product.book.gradeId]}
{window.t("پایه") + " " + grades[product.product.book.gradeId]}
</span>
<span className="text-gray70 text-tiny dark:text-greenBA">
{product.productType === 2 ? "نسخه فیزیکی" : "نسخه دیجیتال"}
{product.productType === 2
? window.t("نسخه فیزیکی")
: window.t("نسخه دیجیتال")}
</span>
</div>
</div>
@ -107,7 +109,8 @@ function Product({ product, grades, pushToCart, isMobile, loading }) {
</div>
)}
<strong className="font-bold text-md text-blue5F dark:text-white">
{separate(product.product.price * product.count)}&nbsp;تومان
{separate(product.product.price * product.count)}&nbsp;
{window.t("تومان")}
</strong>
</div>
</div>
@ -129,17 +132,20 @@ function Product({ product, grades, pushToCart, isMobile, loading }) {
<div className="flex flex-row items-center mt-4">
<span className="w-2 h-2 bg-greenBA rounded-md ml-1"></span>
<div className="text-gray70 text-sm dark:text-greenBA">
{"پایه" + " " + grades[product?.product?.book?.gradeId]}
{window.t("پایه") + " " + grades[product?.product?.book?.gradeId]}
</div>
<span className="w-2 h-2 bg-greenBA rounded-md mr-5 ml-1"></span>
<div className="text-gray70 text-sm dark:text-greenBA">
{product?.productType === 2 ? "نسخه فیزیکی" : "نسخه دیجیتال"}
{product?.productType === 2
? window.t("نسخه فیزیکی")
: window.t("نسخه دیجیتال")}
</div>
</div>
<div className="flex flex-row items-center pl-4 mt-6">
<strong className="font-semibold text-xl text-blue5F dark:text-white">
&nbsp;{separate(product?.product?.price * product.count)}
&nbsp;&nbsp;تومان
&nbsp;&nbsp;
{window.t("تومان")}
</strong>
</div>
</div>

Loading…
Cancel
Save