add multi multi lang
parent
d0cc908b25
commit
f8b7ad0ff4
|
@ -1,7 +1,6 @@
|
|||
"use client";
|
||||
|
||||
import Avatar from "boring-avatars";
|
||||
import Link from "next/link";
|
||||
import { useRouter } from "next/navigation";
|
||||
import React, { useContext } from "react";
|
||||
import { useLongPress } from "@uidotdev/usehooks";
|
||||
|
@ -9,6 +8,8 @@ import { toast } from "react-toastify";
|
|||
import AppContext from "@ctx/AppContext";
|
||||
import notifIcon from "@img/notif.png";
|
||||
import Image from "next/image";
|
||||
import { useLocale, useTranslations } from "next-intl";
|
||||
import { Link } from "src/i18n/routing";
|
||||
|
||||
const AppHeader = ({
|
||||
title,
|
||||
|
@ -34,10 +35,21 @@ const AppHeader = ({
|
|||
const CTX = useContext(AppContext);
|
||||
const notifUnreadData = CTX.state.notifUnreadData;
|
||||
|
||||
const t = useTranslations("login");
|
||||
const locale = useLocale();
|
||||
const isRTL = locale === "fa";
|
||||
|
||||
const handlelogOut = () => {
|
||||
CTX.setStepLogin(0);
|
||||
localStorage.removeItem("token");
|
||||
router.push("/app/login");
|
||||
|
||||
router.push(
|
||||
locale === "zh"
|
||||
? "/zh/app/login"
|
||||
: locale === "fa"
|
||||
? "/fa/app/login"
|
||||
: "/app/login"
|
||||
);
|
||||
};
|
||||
|
||||
const attrs = useLongPress(() => handlelogOut(), {
|
||||
|
@ -96,7 +108,7 @@ const AppHeader = ({
|
|||
viewBox="0 0 11 18"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
className="mx-auto mt-[7px]"
|
||||
className={`mx-auto mt-[7px] ${isRTL ? "" : "rotate-180"}`}
|
||||
>
|
||||
<path d="M10 1L2 9L10 17" stroke="#555555" stroke-width="2" />
|
||||
</svg>
|
||||
|
@ -129,7 +141,11 @@ const AppHeader = ({
|
|||
// ;
|
||||
|
||||
return (
|
||||
<div className="bg-white flex justify-between rtl pt-4 px-4 w-full">
|
||||
<div
|
||||
className={`bg-white flex justify-between rtl pt-4 px-4 w-full ${
|
||||
isRTL ? "rtl" : "ltr"
|
||||
}`}
|
||||
>
|
||||
<Link href={"/app/acount"}>
|
||||
<div className="flex">
|
||||
{userIcon && (
|
||||
|
@ -144,12 +160,13 @@ const AppHeader = ({
|
|||
</div>
|
||||
</div>
|
||||
)}
|
||||
<div className="mr-2 mt-1">
|
||||
<div className="mx-2 mt-1">
|
||||
<h2 className="mb-0 text-black font-bold text-base">{title}</h2>
|
||||
<p className="mb-0 text-black text-sm">{sub}</p>
|
||||
</div>
|
||||
</div>
|
||||
</Link>
|
||||
|
||||
{!userRole ? (
|
||||
<div className="flex mt-2">
|
||||
{logOut && (
|
||||
|
@ -209,7 +226,7 @@ const AppHeader = ({
|
|||
className="w-fit h-fit bg-gray-100 rounded-full mx-1 mt-2 "
|
||||
onClick={iconEvent3}
|
||||
>
|
||||
<p className="mb-0 p-2 px-4">{iconName3}</p>
|
||||
<p className="mb-0 p-2 px-4 text-sm">{iconName3}</p>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
|
|
@ -5,11 +5,16 @@ import adjust from "@img/adjust.png";
|
|||
import PersianNumber from "../../../plugins/PersianNumber";
|
||||
import FormatJalaliDate from "plugins/FormatJalaliDate/page";
|
||||
import moment from "jalali-moment";
|
||||
import { useLocale } from "next-intl";
|
||||
import FormatJalaliDateEn from "plugins/FormatJalaliDateEn/page";
|
||||
|
||||
const CoffeeBrewCard = ({ data, last }) => {
|
||||
const today = new Date();
|
||||
const locale = useLocale();
|
||||
const isRTL = locale === "fa";
|
||||
|
||||
const formattedDate = FormatJalaliDate(data?.logAt, true);
|
||||
const formattedDateEn = FormatJalaliDateEn(data?.logAt, true);
|
||||
|
||||
return (
|
||||
<div
|
||||
|
@ -17,23 +22,34 @@ const CoffeeBrewCard = ({ data, last }) => {
|
|||
last ? "bg-gray-200 border border-primary-600" : "bg-gray-50"
|
||||
} `}
|
||||
>
|
||||
<div className="flex justify-between">
|
||||
<div
|
||||
className={`flex justify-between ${isRTL ? "rtl" : "ltr ml-[45px]"}`}
|
||||
>
|
||||
<div>
|
||||
<div className="flex">
|
||||
<p className="mb-0 text-[13px] font-medium w-fit px-2 mt-1 border-l border-gray-400 ">
|
||||
<small className="!text-[12px] text-gray-400">
|
||||
<PersianNumber number={formattedDate} style={"!text-[12px]"} />
|
||||
<p className="mb-0 text-[11px] font-medium w-fit px-1 mt-1 ">
|
||||
<small className="!text-[10px] text-gray-400">
|
||||
<PersianNumber
|
||||
number={isRTL ? formattedDate : formattedDateEn}
|
||||
style={"!text-[10px]"}
|
||||
/>
|
||||
</small>
|
||||
</p>
|
||||
<p className="mb-0 text-[13px] font-medium text-gray-400 w-fit px-2 mt-1 border-l border-gray-400 ">
|
||||
|
||||
<div className="bg-gray-300 h-3 w-[1px] mt-[6px]"></div>
|
||||
<p className="mb-0 text-[10px] font-medium text-gray-400 w-fit px-1 mt-[6px] ">
|
||||
{isRTL ? (
|
||||
<PersianNumber
|
||||
number={moment(data?.logAt).locale("fa").format("HH:mm")}
|
||||
style={"!text-[12px]"}
|
||||
style={"!text-[10px]"}
|
||||
/>
|
||||
) : (
|
||||
<>{moment(data?.logAt).locale("fa").format("HH:mm")}</>
|
||||
)}
|
||||
</p>
|
||||
|
||||
<p className="mb-0 text-[13px] font-medium w-fit px-2 mt-1 ">
|
||||
<small className="!text-[12px] text-gray-400">
|
||||
<div className="bg-gray-300 h-3 w-[1px] mt-[6px]"></div>
|
||||
<p className="mb-0 text-[11px] font-medium w-fit px-1 mt-1 ">
|
||||
<small className="!text-[10px] text-gray-400">
|
||||
{data?.logBy}{" "}
|
||||
</small>
|
||||
</p>
|
||||
|
|
|
@ -33,7 +33,7 @@ const UsersEmployees = () => {
|
|||
colors={["#9d9f88", "#83af96", "#b2de93"]}
|
||||
/>
|
||||
</div>
|
||||
<div className=" flex justify-between w-full mr-2 ">
|
||||
<div className=" flex justify-between w-full mx-2 ">
|
||||
<div className="flex mt-1">
|
||||
<h4 className="text-sm font-bold text-secondary-950">
|
||||
{e.firstName} {e.lastName}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"use client";
|
||||
|
||||
import AppContext from "@ctx/AppContext";
|
||||
import { useLocale, useTranslations } from "next-intl";
|
||||
import Buttonbriz from "plugins/Buttonbriz/page";
|
||||
import Input from "plugins/Input/page";
|
||||
import validateIranPhone from "plugins/IranPhoneRegex";
|
||||
|
@ -13,6 +14,10 @@ const LoginStep = (props) => {
|
|||
const CTX = useContext(AppContext);
|
||||
const phoneNumber = CTX.state.phoneNumber;
|
||||
|
||||
const t = useTranslations("login");
|
||||
const locale = useLocale();
|
||||
const isRTL = locale === "fa";
|
||||
|
||||
const handleConfirmPhoneNumber = () => {
|
||||
setAlertRolCheckBox(false);
|
||||
|
||||
|
@ -46,7 +51,7 @@ const LoginStep = (props) => {
|
|||
|
||||
<div className="mt-3">
|
||||
<Input
|
||||
lable=".شماره تلفن خود را وارد کنید"
|
||||
lable={t("loginInput")}
|
||||
theme={1}
|
||||
id="phoneNumber-id"
|
||||
name="phoneNumber"
|
||||
|
@ -57,16 +62,16 @@ const LoginStep = (props) => {
|
|||
</div>
|
||||
|
||||
<Buttonbriz
|
||||
title="تایید شماره تلفن"
|
||||
title={t("loginButton")}
|
||||
color="SECONDARY"
|
||||
icon="PHONE"
|
||||
buttonEvent={() => handleConfirmPhoneNumber()}
|
||||
/>
|
||||
|
||||
<div
|
||||
className={`flex rtl mt-4 tr03 border-[2px] border-transparent py-2 ${
|
||||
className={`flex mt-4 tr03 border-[2px] border-transparent py-2 ${
|
||||
alertRolCheckBox ? "animate-pulse-1 " : ""
|
||||
}`}
|
||||
} ${isRTL ? "rtl" : "ltr"}`}
|
||||
>
|
||||
<div>
|
||||
<input
|
||||
|
@ -78,9 +83,12 @@ const LoginStep = (props) => {
|
|||
onClick={(e) => setRoleCheckBox(e.target.checked)}
|
||||
/>
|
||||
</div>
|
||||
<p className={`mb-0 text-white mt-1 text-right text-sm `}>
|
||||
با تایید شماره تلفن با همه شرایط حریم خصوص اپلیکیشن بریز موافقت می کنم
|
||||
.
|
||||
<p
|
||||
className={`mb-0 text-white mt-1 text-sm ${
|
||||
isRTL ? "text-right" : "text-left"
|
||||
}`}
|
||||
>
|
||||
{t("acceptRule")}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -9,12 +9,17 @@ import React, { useContext, useEffect, useRef, useState } from "react";
|
|||
import { toast } from "react-toastify";
|
||||
import SimpleReactValidator from "simple-react-validator";
|
||||
import { useSearchParams } from "next/navigation";
|
||||
import { useLocale, useTranslations } from "next-intl";
|
||||
|
||||
const SignUp = (props) => {
|
||||
const CTX = useContext(AppContext);
|
||||
const router = useRouter();
|
||||
const query = useSearchParams();
|
||||
|
||||
const t = useTranslations("login");
|
||||
const locale = useLocale();
|
||||
const isRTL = locale === "fa";
|
||||
|
||||
const [firstName, setFirstName] = useState("");
|
||||
const [lastName, setLastName] = useState("");
|
||||
const [complexName, setComplexName] = useState("");
|
||||
|
@ -74,14 +79,17 @@ const SignUp = (props) => {
|
|||
|
||||
return (
|
||||
<div className="px-5 pt-6">
|
||||
<p className="mb-0 text-white mt-1 text-right text-sm ">
|
||||
برای ورود یا ثبت نام به اپلیکیشن مدیریت وظایف رستوران باید شماره تلفن
|
||||
همراه خود را وارد کنید
|
||||
<p
|
||||
className={`mb-0 text-white mt-1 text-sm ${
|
||||
isRTL ? "text-right" : "text-left"
|
||||
} `}
|
||||
>
|
||||
{t("singUpDesc")}
|
||||
</p>
|
||||
|
||||
<div className="mt-8">
|
||||
<Input
|
||||
lable="نام"
|
||||
lable={t("singUpFirstNameInput")}
|
||||
mt={5}
|
||||
theme={1}
|
||||
id="firstName-id"
|
||||
|
@ -103,7 +111,7 @@ const SignUp = (props) => {
|
|||
</div>
|
||||
<div className="mt-8">
|
||||
<Input
|
||||
lable="نام خانوادگی"
|
||||
lable={t("signUpLastNameInput")}
|
||||
mt={5}
|
||||
theme={1}
|
||||
id="lastName-id"
|
||||
|
@ -126,7 +134,7 @@ const SignUp = (props) => {
|
|||
|
||||
<div className="mt-8">
|
||||
<Input
|
||||
lable="نام مجموعه"
|
||||
lable={t("signUpComplexNameInput")}
|
||||
mt={5}
|
||||
theme={1}
|
||||
id="complexName-id"
|
||||
|
@ -148,7 +156,7 @@ const SignUp = (props) => {
|
|||
</div>
|
||||
<div className="mt-3">
|
||||
<Input
|
||||
lable="شماره تماس مدیریت مجموعه"
|
||||
lable={t("signUpSupportPhoneNumberInput")}
|
||||
mt={5}
|
||||
theme={1}
|
||||
id="supportPhoneNumber-id"
|
||||
|
@ -162,7 +170,7 @@ const SignUp = (props) => {
|
|||
</div>
|
||||
<div className="mt-3">
|
||||
<Input
|
||||
lable="ادرس مجموعه "
|
||||
lable={t("signUpComplexAddressInput")}
|
||||
mt={5}
|
||||
theme={1}
|
||||
id="complexAddress-id"
|
||||
|
@ -184,7 +192,7 @@ const SignUp = (props) => {
|
|||
</div>
|
||||
|
||||
<Buttonbriz
|
||||
title="تایید اطلاعات"
|
||||
title={t("signUpButton")}
|
||||
color="PRIMARY"
|
||||
icon="CHECK"
|
||||
buttonEvent={() => handleSingnUp()}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"use client";
|
||||
|
||||
import AppContext from "@ctx/AppContext";
|
||||
import { useLocale, useTranslations } from "next-intl";
|
||||
import Buttonbriz from "plugins/Buttonbriz/page";
|
||||
import Input from "plugins/Input/page";
|
||||
import PersianNumber from "plugins/PersianNumber";
|
||||
|
@ -11,6 +12,10 @@ const VerifyCodeStep = () => {
|
|||
const phoneNumber = CTX.state.phoneNumber;
|
||||
const verifyCode = CTX.state.verifyCode;
|
||||
|
||||
const t = useTranslations("login");
|
||||
const locale = useLocale();
|
||||
const isRTL = locale === "fa";
|
||||
|
||||
const handleSendVerify = () => {
|
||||
if (verifyCode.length <= 5) {
|
||||
toast.error(" کد را صحیح وارد کنید ", {
|
||||
|
@ -24,18 +29,23 @@ const VerifyCodeStep = () => {
|
|||
|
||||
return (
|
||||
<div className="px-5 mt-6">
|
||||
{isRTL ? (
|
||||
<p className="mb-0 text-white mt-1 text-right text-sm">
|
||||
{" "}
|
||||
کد تایید برای شماره
|
||||
<strong className="mx-1">
|
||||
<PersianNumber number={phoneNumber} />
|
||||
</strong>
|
||||
ارسال شده است
|
||||
</p>
|
||||
) : (
|
||||
<p className="mb-0 text-white mt-1 text-center text-sm">
|
||||
{t("confirmText")}{" "}
|
||||
</p>
|
||||
)}
|
||||
|
||||
<div className="mt-3">
|
||||
<Input
|
||||
lable="کد ارسال شده را وارد کنید"
|
||||
lable={t("confirmInput")}
|
||||
id="verifyCode-id"
|
||||
name="verifyCode"
|
||||
type={"number"}
|
||||
|
@ -47,7 +57,7 @@ const VerifyCodeStep = () => {
|
|||
</div>
|
||||
|
||||
<Buttonbriz
|
||||
title="تایید شماره تلفن"
|
||||
title={t("loginButton")}
|
||||
color="SECONDARY"
|
||||
icon="PHONE"
|
||||
buttonEvent={() => handleSendVerify()}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
"use client";
|
||||
|
||||
import Link from "next/link";
|
||||
import React, { useContext, useEffect, useState } from "react";
|
||||
import { usePathname } from "next/navigation";
|
||||
import Image from "next/image";
|
||||
|
@ -8,6 +7,7 @@ import logo from "@img/logo.png";
|
|||
import setting from "@img/setting.png";
|
||||
import AppContext from "@ctx/AppContext";
|
||||
import HasPermission from "plugins/HasPermission/page";
|
||||
import { Link } from "src/i18n/routing";
|
||||
|
||||
const NavBAr = (props) => {
|
||||
const usePath = usePathname();
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
"use client";
|
||||
import React from "react";
|
||||
import "../../style/globals.css";
|
||||
import { Inter } from "next/font/google";
|
||||
import { Exo_2, Inter } from "next/font/google";
|
||||
import "../../style/fontiran.css";
|
||||
import NavBAr from "@comp/NavBar/NavBAr";
|
||||
import "swiper/css";
|
||||
|
@ -22,10 +22,13 @@ import "rc-slider/assets/index.css";
|
|||
import BottomSheetReport from "plugins/BottomSheet/BottomSheetReport";
|
||||
import BottomSheetReportManageShift from "plugins/BottomSheet/BottomSheetReportManageShift";
|
||||
import moment from "jalali-moment";
|
||||
import { useLocale } from "next-intl";
|
||||
|
||||
const inter = Inter({ subsets: ["latin"] });
|
||||
|
||||
const RootData = ({ children }) => {
|
||||
const locale = useLocale();
|
||||
|
||||
// BottomSheet
|
||||
const [BottomSheetCreateRoleOpen, setBottomSheetCreateRoleOpen] =
|
||||
useState(false);
|
||||
|
@ -170,7 +173,20 @@ const RootData = ({ children }) => {
|
|||
|
||||
const pathname = usePathname();
|
||||
const router = useRouter();
|
||||
const hiddenUrls = ["/app/login", "/pricing", "/about-us", "/"];
|
||||
const hiddenUrls = [
|
||||
"/app/login",
|
||||
"/zh/app/login",
|
||||
"/fa/app/login",
|
||||
"/pricing",
|
||||
"/fa/pricing",
|
||||
"/zh/pricing",
|
||||
"/about-us",
|
||||
"/fa/about-us",
|
||||
"/zh/about-us",
|
||||
"/fa",
|
||||
"/zh",
|
||||
"/",
|
||||
];
|
||||
const shouldRenderComponent = !hiddenUrls.includes(pathname);
|
||||
|
||||
const closeBigPlusPage = () => {
|
||||
|
@ -217,7 +233,13 @@ const RootData = ({ children }) => {
|
|||
position: "bottom-right",
|
||||
closeOnClick: true,
|
||||
});
|
||||
router.push("/app/home");
|
||||
router.push(
|
||||
locale === "zh"
|
||||
? "/zh/app/home"
|
||||
: locale === "fa"
|
||||
? "/fa/app/home"
|
||||
: "/app/home"
|
||||
);
|
||||
}
|
||||
} catch ({ error, status }) {
|
||||
toast.error(`${error?.response?.data?.message}`, {
|
||||
|
@ -253,7 +275,13 @@ const RootData = ({ children }) => {
|
|||
// localStorage.removeItem("token");
|
||||
localStorage.setItem("token", data.access_token);
|
||||
|
||||
router.push("/app/home");
|
||||
router.push(
|
||||
locale === "zh"
|
||||
? "/zh/app/home"
|
||||
: locale === "fa"
|
||||
? "/fa/app/home"
|
||||
: "/app/home"
|
||||
);
|
||||
}
|
||||
} catch ({ error, status }) {
|
||||
toast.error(`${error?.response?.data?.message}`, {
|
||||
|
@ -1149,7 +1177,13 @@ const RootData = ({ children }) => {
|
|||
|
||||
setLoading(false);
|
||||
|
||||
router.push("/app/tasks");
|
||||
router.push(
|
||||
locale === "zh"
|
||||
? "/zh/app/tasks"
|
||||
: locale === "fa"
|
||||
? "/fa/app/tasks"
|
||||
: "/app/tasks"
|
||||
);
|
||||
} catch ({ error, status }) {
|
||||
toast.error(`${error?.response?.data?.message}`, {
|
||||
position: "bottom-right",
|
||||
|
@ -1179,7 +1213,13 @@ const RootData = ({ children }) => {
|
|||
// router->
|
||||
|
||||
setLoading(false);
|
||||
router.push("/app/tasks");
|
||||
router.push(
|
||||
locale === "zh"
|
||||
? "/zh/app/tasks"
|
||||
: locale === "fa"
|
||||
? "/fa/app/tasks"
|
||||
: "/app/tasks"
|
||||
);
|
||||
} catch ({ error, status }) {
|
||||
toast.error(`${error?.response?.data?.message}`, {
|
||||
position: "bottom-right",
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import React, { version } from "react";
|
||||
import logo2 from "../../../src/assets/logo2.png";
|
||||
import Image from "next/image";
|
||||
import Link from "next/link";
|
||||
import { useLocale } from "next-intl";
|
||||
import { Link } from "src/i18n/routing";
|
||||
|
||||
const Footer = () => {
|
||||
const locale = useLocale();
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { useTranslations } from "next-intl";
|
||||
import Link from "next/link";
|
||||
import React, { useState } from "react";
|
||||
import { Link } from "src/i18n/routing";
|
||||
|
||||
const PricingHero = () => {
|
||||
const [oneMonth, setOneMonth] = useState(0);
|
||||
|
|
140
messages/en.json
140
messages/en.json
|
@ -137,10 +137,144 @@
|
|||
"login": {
|
||||
"title": "Briz",
|
||||
"desc": "Harmonic management of routines",
|
||||
"acceptRule": "By confirming the phone number, I agree to all the privacy conditions of the Breeze application",
|
||||
"acceptRule": "By confirming the phone number, I agree to all the privacy conditions of the Briz application",
|
||||
"loginInput": "Enter your phone number",
|
||||
"loginButton": "Confirm phone number",
|
||||
"confirmText": "The confirmation code has been sent to the number",
|
||||
"confirmInput": "Enter the code sent"
|
||||
"confirmText": "The confirmation code has been sent ",
|
||||
"confirmInput": "Enter the code sent",
|
||||
"singUpDesc": "You need a phone number to enter or register in the restaurant task management application Enter your mobile number",
|
||||
"singUpFirstNameInput": "First name",
|
||||
"signUpLastNameInput": "Last name",
|
||||
"signUpComplexNameInput": "Complex name",
|
||||
"signUpSupportPhoneNumberInput": "Management contact",
|
||||
"signUpComplexAddressInput": "Address",
|
||||
"signUpButton": "Verification of information"
|
||||
},
|
||||
|
||||
"homePage": {
|
||||
"activityText": " activities today",
|
||||
"shiftText": " shifts today",
|
||||
"shiftBoxAllactivities": "All activities",
|
||||
"shiftBoxActivityDone": "Activity done",
|
||||
"shiftBoxActivityNotDone": "Activity not done",
|
||||
"shiftBoxShiftPercentage": "Shift progress percentage",
|
||||
"shiftBoxEmpty": "You don't have an open shift",
|
||||
"surpriseText": "surprise",
|
||||
"addAdjust": "Add new adjust",
|
||||
"historyReports": "History reports",
|
||||
"titleReport1": "Activities",
|
||||
"subTitleReport1": "Excel output",
|
||||
"titleReport2": "Week shifts",
|
||||
"subTitleReport2": "Text output"
|
||||
},
|
||||
"coffee-brew": {
|
||||
"title": "Adjust coffee",
|
||||
"subTitle": "Coffee adjustment mechanism",
|
||||
"coffeeGramInput": "BCG | Coffee gram",
|
||||
"extractionTimeInput": "OEG | Extraction time",
|
||||
"outputExtractGrammageInput": "ET | Output extract grammage",
|
||||
"coffeeBrewButton": "registration",
|
||||
"historyTitle": "History of adjustments",
|
||||
"coffeeGramChart": "Coffee gram",
|
||||
"extractionTimeChart": "Extraction time",
|
||||
"outputExtractGrammageChart": "Output extract "
|
||||
},
|
||||
|
||||
"BottomSheet": {
|
||||
"BottomSheetReport": "reports",
|
||||
"BottomSheetReportDesc": "You are getting the activity report",
|
||||
"BottomSheetReportbutton": "submit",
|
||||
"BottomSheetReportManageShiftTitle": "reports",
|
||||
"BottomSheetReportManageShiftType1": "this week",
|
||||
"BottomSheetReportManageShiftType2": "next week",
|
||||
"BottomSheetReportManageShiftButton": "Copy text",
|
||||
"BottomSheetAddUserToPositionShiftPlanTitle": "Add user to position",
|
||||
"BottomSheetCreateRoutineTitle": "Add new routine",
|
||||
"BottomSheetCreateRoutineNameInput": "Routine name",
|
||||
"BottomSheetCreateRoutineDescInput": "Routine description",
|
||||
"BottomSheetCreateRoutineRegButton": "Submit Rutine",
|
||||
"BottomSheetCreateRoutineEditButton": "Edit Rutine",
|
||||
"BottomSheetCreateRoutineDeleteButton": "Delete ",
|
||||
"BottomSheetCreateSectionTitle": "Add new section",
|
||||
"BottomSheetCreateSectionNameInput": "Section name",
|
||||
"BottomSheetCreateSectionDescInput": "Section description",
|
||||
"BottomSheetCreateSectionRegButton": "Submit section",
|
||||
"BottomSheetCreateSectionEditButton": "Edit section",
|
||||
"BottomSheetCreateSectionDeleteButton": "Delete ",
|
||||
"BottomSheetCreatePositionTitle": "Add new Position",
|
||||
"BottomSheetCreatePositionNameInput": "Position name",
|
||||
"BottomSheetCreatePositionDescInput": "Position description",
|
||||
"BottomSheetCreatePositionSectionInput": "Connected section",
|
||||
"chooseText": " choose",
|
||||
"BottomSheetCreatePositionRegButton": "Submit position",
|
||||
"BottomSheetCreatePositionEditButton": "Edit position",
|
||||
"BottomSheetCreatePositionDeleteButton": "Delete ",
|
||||
"BottomSheetCreateEmployeesTitle": "Add new staff",
|
||||
"BottomSheetCreateEmployeesFirstNameInput": "First name",
|
||||
"BottomSheetCreateEmployeesLastNameInput": "Last name",
|
||||
"BottomSheetCreateEmployeesGenderInput": "Gender",
|
||||
"BottomSheetCreateEmployeesPhoneNumberInput": "Phone number",
|
||||
"BottomSheetCreateEmployeesJobTitleInput": "Job Title",
|
||||
"BottomSheetCreateEmployeesRegButton": "Submit staff",
|
||||
"BottomSheetCreateEmployeesEditButton": "Edit staff",
|
||||
"BottomSheetCreateEmployeesDeleteButton": "Delete ",
|
||||
"BottomSheetCreateShiftsTitle": "Add new shifts",
|
||||
"BottomSheetCreateShiftsShiftNameInput": "Shift name",
|
||||
"BottomSheetCreateShiftsStartTimeInput": "Start of the shift",
|
||||
"BottomSheetCreateShiftsEndTimeInput": "End of the shift",
|
||||
"BottomSheetCreateShiftsShiftInWeekInput": "Choose the shift day of the week",
|
||||
"BottomSheetCreateShiftsRutineShiftInput": "Shift routine",
|
||||
"BottomSheetCreateShiftsDescInput": "Shift description",
|
||||
"BottomSheetCreateShiftsRegButton": "Submit shifts",
|
||||
"BottomSheetCreateShiftsEditButton": "Edit shifts",
|
||||
"BottomSheetCreateShiftsDeleteButton": "Delete "
|
||||
},
|
||||
"shifts": {
|
||||
"title": "Complex shifts ",
|
||||
"subTitle": "Complex shift management",
|
||||
"ManageShiftButton": "Management week shift",
|
||||
"weekFilter": "Week shifts",
|
||||
"monthFilter": "Month shifts",
|
||||
"nextWeekFilter": "Next week shifts",
|
||||
"nextMonthFilter": "Next month's shifts",
|
||||
"lastWeekFilter": "last week shifts",
|
||||
"lastMonthkFilter": "last month shifts",
|
||||
"shiftText": "shift",
|
||||
"todayText": "today",
|
||||
"surpriseText": "surprise",
|
||||
"closeShiftButton": "Close and confirm the shift"
|
||||
},
|
||||
"manage-shift": {
|
||||
"title": "Weekly complex shifts ",
|
||||
"subTitle": "shift management",
|
||||
"routineTitle": "Select a routine",
|
||||
"dateTitle": "Select a date",
|
||||
"shiftTitle": "Select a shift",
|
||||
"personnelTitle": "Select personnel",
|
||||
"surpriseTitle": "Select surprise",
|
||||
"surpriseInput": " surprise",
|
||||
"surpriseInputDef": " choose",
|
||||
"surpriseSubTitle": "The shift is closed by the supervisor. Please specify it for each shift",
|
||||
"404Shift": "You do not have a shift on this day",
|
||||
"manageShiftRegButton": "Activity registration",
|
||||
"manageShiftEditButton": "Edit activity",
|
||||
"editText": "You are editing"
|
||||
},
|
||||
"complete-shift": {
|
||||
"title": "Shift closing operation ",
|
||||
"subTitle": " check the completion of tasks",
|
||||
"todayText": "today",
|
||||
"reportText": "report",
|
||||
"completeShiftButton": "Closing with points"
|
||||
},
|
||||
"employees": {
|
||||
"title": "Management of staffs and roles ",
|
||||
"subTitle": "The core of the complex settings",
|
||||
"routinesTitle": "Management of routines",
|
||||
"sectionsTitle": "Management of sections",
|
||||
"positionsTitle": " Management of positions",
|
||||
"staffsTitle": " Management of staffs",
|
||||
"shiftsTitle": "Management of shifts",
|
||||
"taskTitle": "Add a task"
|
||||
}
|
||||
}
|
||||
|
|
285
messages/fa.json
285
messages/fa.json
|
@ -1,148 +1,277 @@
|
|||
{
|
||||
"page": {
|
||||
"title": "عملیات ساده و روان",
|
||||
"desc": "ک راه حل مدیریت کار و شیفت برای کافی شاپ ها که مدیریت وظایف واضح و قابل ردیابی و نظارت بر عملیات فروشگاه را ارائه می دهد. ",
|
||||
"desc": "یک راه حل مدیریت وظایف و شیفت برای کافیشاپها که مدیریت وظایف شفاف و قابل پیگیری و نظارت بر عملیات فروشگاه را فراهم میکند.",
|
||||
"button": "شروع کنید",
|
||||
"brand": "برندهایی که به ما اعتماد دارند و از BRIZ برای مدیریت خود استفاده می کنند."
|
||||
"brand": "برندهایی که به ما اعتماد دارند و از BRIZ برای مدیریت خود استفاده میکنند."
|
||||
},
|
||||
"home": {
|
||||
"title": "Hello, Next.js i18n",
|
||||
"desc": "This is a demo of Next.js i18n"
|
||||
"title": "سلام، Next.js i18n",
|
||||
"desc": "این یک نمایشی از i18n در Next.js است"
|
||||
},
|
||||
"navLinks": {
|
||||
"ourSolution": "راه حل ما",
|
||||
"product": "محصول",
|
||||
"pricing": "قیمت",
|
||||
"pricing": "قیمتگذاری",
|
||||
"aboutUs": "درباره ما",
|
||||
"button": "شروع کنید"
|
||||
},
|
||||
"services": {
|
||||
"title": "بخشی از تست استرس ما باشید",
|
||||
"desc": "خشی از تست استرس ما باشید و ما را به عنوان یک آداپتور اولیه امتحان کنید",
|
||||
"desc": "بخشی از تست استرس ما باشید و به عنوان یک پیشکاربر ما را امتحان کنید",
|
||||
"inputValue": "شماره خود را وارد کنید",
|
||||
"button": "عضو شوید",
|
||||
"successInput": "با تشکر از اعتماد شما، ما با شما تماس خواهیم گرفت",
|
||||
"streamlinedOperations": "عملیات ساده",
|
||||
"empoweredDecision": "تصمیم قدرتمند",
|
||||
"unwaveringSupport": "پشتیبانی بی دریغ",
|
||||
"seamlessIntegration": "یکپارچه سازی "
|
||||
"button": "اشتراک",
|
||||
"successInput": "از اعتماد شما متشکریم، با شما تماس خواهیم گرفت",
|
||||
"streamlinedOperations": "عملیات بهینهشده",
|
||||
"empoweredDecision": "تصمیمگیری توانمند",
|
||||
"unwaveringSupport": "پشتیبانی بیوقفه",
|
||||
"seamlessIntegration": "یکپارچگی بدون درز"
|
||||
},
|
||||
"experiences": {
|
||||
"title": "منطق پایه",
|
||||
"taskText": "تعداد کارهای انجام شده در بریز",
|
||||
"LiveNumberTask": "فعالیت های انجام شده با بریز",
|
||||
"taskText": "تعداد وظایف انجام شده در Briz",
|
||||
"LiveNumberTask": "فعالیتهای انجام شده با Briz",
|
||||
"insertTasks": {
|
||||
"title": "وظایف را وارد کنید و تعیین کنید",
|
||||
"points": "وظایف را وارد کنید و آنها را به موقعیت هایی در فروشگاه اختصاص دهید"
|
||||
"title": "وارد کردن وظایف و اختصاص دادن",
|
||||
"points": "وظایف را وارد کرده و به موقعیتهای فروشگاه اختصاص دهید"
|
||||
},
|
||||
"createShiftPlan": {
|
||||
"title": "یک برنامه شفاف ایجاد کنید",
|
||||
"points": "برای هر هفته یک برنامه شیفت روشن ایجاد کنید و برای هر شیفت یک سرپرست تعیین کنید."
|
||||
"title": "ایجاد برنامه شیفت واضح",
|
||||
"points": "برای هر هفته یک برنامه شیفت واضح ایجاد کرده و یک ناظر به هر شیفت اختصاص دهید."
|
||||
},
|
||||
"specificPerson": {
|
||||
"title": "فعالیتی که به شخص خاصی اختصاص داده شده است",
|
||||
"points": "پس از برنامه ریزی نوبت، هر وظیفه به فعالیتی تبدیل می شود که به یک فرد خاص واگذار می شود."
|
||||
"title": "فعالیت اختصاص داده شده به شخص خاص",
|
||||
"points": "پس از برنامهریزی شیفت، هر وظیفه به عنوان یک فعالیت به شخص خاص اختصاص داده میشود."
|
||||
},
|
||||
"realTime": {
|
||||
"title": "به لحظه",
|
||||
"points": "ردیابی روال عملیات در سیستم در زمان واقعی.."
|
||||
"title": "زمان واقعی",
|
||||
"points": "روتین عملیات را به صورت زمان واقعی در سیستم پیگیری کنید."
|
||||
},
|
||||
"confirmsCompletion": {
|
||||
"title": "تکمیل را تایید می کند",
|
||||
"points": "پس از بستن شیفت، سرپرست شما تمام وظایف را بررسی می کند، تکمیل را تایید می کند و به کارکنان امتیاز می دهد."
|
||||
"title": "تایید تکمیل",
|
||||
"points": "پس از بستن شیفت، ناظر شما تمام وظایف را بررسی کرده، تکمیل آنها را تایید و به کارکنان امتیاز میدهد."
|
||||
}
|
||||
},
|
||||
|
||||
"phiData": {
|
||||
"title": "phi",
|
||||
"desc": "طعم قهوه همیشه بیشترین اهمیت را دارد. با PHI، همیشه عالی خواهد بود. فی به معنای نسبت طلایی است. اگر قهوه خود را با نسبت طلایی دم کنید، همیشه طعم خوبی خواهد داشت. در قسمت Phi، سه کادر وجود دارد که باریستای شیفت باید آنها را پر کند. اینها عناصر اصلی برای تنظیم دستور پخت قهوه روزانه هستند:",
|
||||
"endDesc": "باریستای شما دستور پخت روزانه را وارد می کند که در پایگاه داده شما ثبت می شود. می توانید نمودار تنظیم خود را مشاهده کنید و ببینید در نوار شما چه اتفاقی می افتد و کیفیت سرو قهوه خود را در فروشگاه خود بررسی کنید.",
|
||||
|
||||
"title": "فی",
|
||||
"desc": "طعم قهوه همیشه مهمترین عامل است. با PHI، همیشه کامل خواهد بود. فی به معنای نسبت طلایی است. اگر قهوه خود را با نسبت طلایی تهیه کنید، همیشه طعم خوبی خواهد داشت. در بخش Phi، سه جعبه وجود دارد که باریستا در شیفت باید پر کند. اینها عناصر اصلی برای تنظیم دستور قهوه روزانه هستند:",
|
||||
"endDesc": "باریستا شما دستور روزانه را وارد میکند که در پایگاه داده شما ثبت خواهد شد. شما میتوانید نمودار تنظیمات خود را مشاهده کنید تا ببینید در بار شما چه اتفاقی میافتد و کیفیت سرو قهوه خود را در فروشگاه خود بررسی کنید.",
|
||||
"bcg": {
|
||||
"desc": "منظور مقدار دقیق قهوه آسیاب شده برای هر دم کردن است...",
|
||||
"title": "گرم قهوه پایه (BCG)"
|
||||
"desc": "این به مقدار دقیق قهوه آسیابشده استفاده شده برای هر دم اشاره دارد...",
|
||||
"title": "گرم پایه قهوه (BCG)"
|
||||
},
|
||||
"oeg": {
|
||||
"desc": " وزن نهایی قهوه استخراج شده را پس از دم کردن اندازه گیری می کند.",
|
||||
"title": "خروجی استخراج گراماژ(OEG)"
|
||||
"desc": "این وزن نهایی قهوه استخراجشده پس از دمکردن را اندازهگیری میکند...",
|
||||
"title": "وزن استخراج نهایی (OEG)"
|
||||
},
|
||||
"et": {
|
||||
"desc": " کل زمان دم کردن قهوه از ابتدا تا انتها است...",
|
||||
"desc": "این زمان کل لازم برای دمکردن قهوه از ابتدا تا انتها است...",
|
||||
"title": "زمان استخراج (ET)"
|
||||
}
|
||||
},
|
||||
"stepProducts": {
|
||||
"endDesc": "اکنون فقط شیفت های خود را برای هفته آینده تنظیم کنید. در هر شیفت، کارکنان را به هر موقعیتی اختصاص دهید و یک سرپرست تعیین کنید.",
|
||||
|
||||
"endDesc": "حالا فقط شیفتهای خود را برای هفته آینده تنظیم کنید. کارکنان را به هر موقعیت در هر شیفت اختصاص دهید و یک ناظر تعیین کنید.",
|
||||
"setupRoutine": {
|
||||
"desc": "شما می توانید به طور کامل سیستم عامل خود را سفارشی و تعریف کنید...",
|
||||
"title": "روال خود را تنظیم کنید"
|
||||
"desc": "میتوانید سیستم عملیات خود را به طور کامل سفارشیسازی و تعریف کنید...",
|
||||
"title": "تنظیم روتین خود"
|
||||
},
|
||||
"setupSections": {
|
||||
"desc": "بخش های خود را برای به دست آوردن بینش بهتر در مورد عملیات خود تعریف کنید...",
|
||||
"title": "بخش های خود را تنظیم کنید"
|
||||
"desc": "بخشهای خود را تعریف کنید تا بینش بهتری از عملیات خود به دست آورید...",
|
||||
"title": "تنظیم بخشهای خود"
|
||||
},
|
||||
"setupPositions": {
|
||||
"desc": "موقعیت ها نقش مهمی در پلتفرم ما دارند...",
|
||||
"title": "موقعیت های خود را تنظیم کنید"
|
||||
"desc": "موقعیتها نقش حیاتی در پلتفرم ما دارند...",
|
||||
"title": "تنظیم موقعیتهای خود"
|
||||
},
|
||||
"setupStaffInfo": {
|
||||
"desc": "شما باید اطلاعات کارکنان خود را تنظیم کنید ...",
|
||||
"desc": "شما نیاز دارید اطلاعات کارکنان خود را تنظیم کنید...",
|
||||
"title": "تنظیم اطلاعات کارکنان"
|
||||
},
|
||||
"setupShiftsLogic": {
|
||||
"desc": "شما باید منطق شیفت خود را ایجاد کنید...",
|
||||
"title": "منطق شیفت خود را تنظیم کنید"
|
||||
"desc": "شما نیاز دارید منطق شیفت خود را تعیین کنید...",
|
||||
"title": "تنظیم منطق شیفتهای خود"
|
||||
},
|
||||
"insertTasks": {
|
||||
"desc": "تمام وظایف خود را در این مرحله تنظیم کنید...",
|
||||
"title": "همه وظایف خود را وارد کنید"
|
||||
"desc": "در این مرحله همه وظایف خود را تنظیم کنید...",
|
||||
"title": "وارد کردن همه وظایف"
|
||||
}
|
||||
},
|
||||
"pricing": {
|
||||
"title": "قیمت گذاری",
|
||||
"desc": "مدیریت کافی شاپ خود را با برنامه های قیمت گذاری منعطف زمان ما تنظیم کنید. همه بستهها ویژگیهای جامع یکسانی را ارائه میدهند، که فقط از نظر مدت زمان متفاوت هستند تا با نیازهای تجاری شما مطابقت داشته باشند. از بین گزینه های ماهانه، سه ماهه یا سالانه که هر کدام برای سهولت و کارایی طراحی شده اند، انتخاب کنید.",
|
||||
"title": "قیمتگذاری",
|
||||
"desc": "مدیریت کافیشاپ خود را با طرحهای قیمتگذاری انعطافپذیر ما متناسبسازی کنید. تمام بستهها ویژگیهای جامع یکسانی ارائه میدهند و فقط در مدت زمان تفاوت دارند تا نیازهای کسبوکار شما را برآورده کنند. از گزینههای ماهانه، سهماهه یا سالانه انتخاب کنید، هر کدام برای سهولت و کارایی طراحی شدهاند.",
|
||||
"oneMounth": {
|
||||
"title": "یک ماه",
|
||||
"pricing1": "15,000,000 R",
|
||||
"pricing2": "24,000,000 R ",
|
||||
"pricing3": "29,500,000 R",
|
||||
"desc": "این می تواند بهترین بسته برای شما باشد، بنابراین از 14 روز آزمایشی رایگان استفاده کنید",
|
||||
"users1": "بالای 10 کاربر",
|
||||
"users2": "بالای 25 کاربر",
|
||||
"users3": "بالای 50 کاربر",
|
||||
"title": "1 ماه",
|
||||
"pricing1": "15,000,000 ر",
|
||||
"pricing2": "24,000,000 ر",
|
||||
"pricing3": "29,500,000 ر",
|
||||
"desc": "ممکن است بهترین بسته برای شما باشد، بنابراین از دوره آزمایشی 14 روزه رایگان استفاده کنید",
|
||||
"users1": "تا 10 کاربر",
|
||||
"users2": "تا 25 کاربر",
|
||||
"users3": "تا 50 کاربر",
|
||||
"button": "شروع کنید"
|
||||
},
|
||||
"threeMounth": {
|
||||
"title": "سه ماهه",
|
||||
"pricing1": "36,000,000 R",
|
||||
"pricing2": "57,600,000 R",
|
||||
"pricing3": "70,800,000 R",
|
||||
"desc": "این می تواند بهترین بسته برای شما باشد، بنابراین از 14 روز آزمایشی رایگان استفاده کنید",
|
||||
"users1": "بالای 10 کاربر",
|
||||
"users2": "بالای 25 کاربر",
|
||||
"users3": "بالای 50 کاربر",
|
||||
"title": "3 ماه",
|
||||
"pricing1": "36,000,000 ر",
|
||||
"pricing2": "57,600,000 ر",
|
||||
"pricing3": "70,800,000 ر",
|
||||
"desc": "ممکن است بهترین بسته برای شما باشد، بنابراین از دوره آزمایشی 14 روزه رایگان استفاده کنید",
|
||||
"users1": "تا 10 کاربر",
|
||||
"users2": "تا 25 کاربر",
|
||||
"users3": "تا 50 کاربر",
|
||||
"button": "شروع کنید"
|
||||
},
|
||||
"sixMounth": {
|
||||
"title": "یک سال",
|
||||
"pricing1": "108,000,000 R",
|
||||
"pricing2": "172,800,000 R ",
|
||||
"pricing3": "212,400,000 R",
|
||||
"desc": "این می تواند بهترین بسته برای شما باشد، بنابراین از 14 روز آزمایشی رایگان استفاده کنید",
|
||||
"users1": "بالای 10 کاربر",
|
||||
"users2": "بالای 25 کاربر",
|
||||
"users3": "بالای 50 کاربر",
|
||||
"title": "6 ماه",
|
||||
"pricing1": "108,000,000 ر",
|
||||
"pricing2": "172,800,000 ر",
|
||||
"pricing3": "212,400,000 ر",
|
||||
"desc": "ممکن است بهترین بسته برای شما باشد، بنابراین از دوره آزمایشی 14 روزه رایگان استفاده کنید",
|
||||
"users1": "تا 10 کاربر",
|
||||
"users2": "تا 25 کاربر",
|
||||
"users3": "تا 50 کاربر",
|
||||
"button": "شروع کنید"
|
||||
}
|
||||
},
|
||||
"login": {
|
||||
"title": "بریز",
|
||||
"desc": "مدیریت هماهنگ وظایف روزمره",
|
||||
"acceptRule": "با تأیید شماره تلفن، با تمامی شرایط حریم خصوصی اپلیکیشن بریز موافقت میکنم",
|
||||
"title": "Briz",
|
||||
"desc": "مدیریت هماهنگ روتینها",
|
||||
"acceptRule": "با تأیید شماره تلفن، من با تمام شرایط حفظ حریم خصوصی برنامه Briz موافقت میکنم",
|
||||
"loginInput": "شماره تلفن خود را وارد کنید",
|
||||
"loginButton": "تأیید شماره تلفن",
|
||||
"confirmText": "کد تأیید به شماره شما ارسال شد",
|
||||
"confirmInput": "کد ارسال شده را وارد کنید"
|
||||
"confirmText": "کد تأیید ارسال شده است",
|
||||
"confirmInput": "کد ارسال شده را وارد کنید",
|
||||
"singUpDesc": "برای ورود یا ثبتنام در برنامه مدیریت وظایف رستوران نیاز به شماره تلفن دارید. شماره موبایل خود را وارد کنید",
|
||||
"singUpFirstNameInput": "نام",
|
||||
"signUpLastNameInput": "نام خانوادگی",
|
||||
"signUpComplexNameInput": "نام مجتمع",
|
||||
"signUpSupportPhoneNumberInput": "تماس مدیریت",
|
||||
"signUpComplexAddressInput": "آدرس",
|
||||
"signUpButton": "تأیید اطلاعات"
|
||||
},
|
||||
"homePage": {
|
||||
"activityText": " فعالیت امروز",
|
||||
"shiftText": " شیفت امروز",
|
||||
"shiftBoxAllactivities": "همه فعالیتها",
|
||||
"shiftBoxActivityDone": "فعالیت انجام شده",
|
||||
"shiftBoxActivityNotDone": "فعالیت انجام نشده",
|
||||
"shiftBoxShiftPercentage": "درصد پیشرفت شیفت",
|
||||
"shiftBoxEmpty": "شیفت باز ندارید",
|
||||
"surpriseText": "شگفتی",
|
||||
"addAdjust": "افزودن تنظیم جدید",
|
||||
"historyReports": "گزارشهای تاریخی",
|
||||
"titleReport1": "فعالیتها",
|
||||
"subTitleReport1": "خروجی اکسل",
|
||||
"titleReport2": "شیفتهای هفته",
|
||||
"subTitleReport2": "خروجی متنی"
|
||||
},
|
||||
"coffee-brew": {
|
||||
"title": "تنظیم قهوه",
|
||||
"subTitle": "مکانیزم تنظیم قهوه",
|
||||
"coffeeGramInput": "BCG | گرم قهوه",
|
||||
"extractionTimeInput": "OEG | زمان استخراج",
|
||||
"outputExtractGrammageInput": "ET | وزن استخراج نهایی",
|
||||
"coffeeBrewButton": "ثبتنام",
|
||||
"historyTitle": "تاریخچه تنظیمات",
|
||||
"coffeeGramChart": "گرم قهوه",
|
||||
"extractionTimeChart": "زمان استخراج",
|
||||
"outputExtractGrammageChart": "وزن استخراج"
|
||||
},
|
||||
"BottomSheet": {
|
||||
"BottomSheetReport": "گزارشها",
|
||||
"BottomSheetReportDesc": "شما در حال دریافت گزارش فعالیت هستید",
|
||||
"BottomSheetReportbutton": "ارسال",
|
||||
"BottomSheetReportManageShiftTitle": "گزارشها",
|
||||
"BottomSheetReportManageShiftType1": "این هفته",
|
||||
"BottomSheetReportManageShiftType2": "هفته آینده",
|
||||
"BottomSheetReportManageShiftButton": "کپی متن",
|
||||
"BottomSheetAddUserToPositionShiftPlanTitle": "افزودن کاربر به موقعیت",
|
||||
"BottomSheetCreateRoutineTitle": "افزودن روتین جدید",
|
||||
"BottomSheetCreateRoutineNameInput": "نام روتین",
|
||||
"BottomSheetCreateRoutineDescInput": "توضیح روتین",
|
||||
"BottomSheetCreateRoutineRegButton": "ثبت روتین",
|
||||
"BottomSheetCreateRoutineEditButton": "ویرایش روتین",
|
||||
"BottomSheetCreateRoutineDeleteButton": "حذف",
|
||||
"BottomSheetCreateSectionTitle": "افزودن بخش جدید",
|
||||
"BottomSheetCreateSectionNameInput": "نام بخش",
|
||||
"BottomSheetCreateSectionDescInput": "توضیح بخش",
|
||||
"BottomSheetCreateSectionRegButton": "ثبت بخش",
|
||||
"BottomSheetCreateSectionEditButton": "ویرایش بخش",
|
||||
"BottomSheetCreateSectionDeleteButton": "حذف",
|
||||
"BottomSheetCreatePositionTitle": "افزودن موقعیت جدید",
|
||||
"BottomSheetCreatePositionNameInput": "نام موقعیت",
|
||||
"BottomSheetCreatePositionDescInput": "توضیح موقعیت",
|
||||
"BottomSheetCreatePositionSectionInput": "بخش مرتبط",
|
||||
"chooseText": "انتخاب کنید",
|
||||
"BottomSheetCreatePositionRegButton": "ثبت موقعیت",
|
||||
"BottomSheetCreatePositionEditButton": "ویرایش موقعیت",
|
||||
"BottomSheetCreatePositionDeleteButton": "حذف",
|
||||
"BottomSheetCreateEmployeesTitle": "افزودن کارکنان جدید",
|
||||
"BottomSheetCreateEmployeesFirstNameInput": "نام",
|
||||
"BottomSheetCreateEmployeesLastNameInput": "نام خانوادگی",
|
||||
"BottomSheetCreateEmployeesGenderInput": "جنسیت",
|
||||
"BottomSheetCreateEmployeesPhoneNumberInput": "شماره تلفن",
|
||||
"BottomSheetCreateEmployeesJobTitleInput": "عنوان شغلی",
|
||||
"BottomSheetCreateEmployeesRegButton": "ثبت کارکنان",
|
||||
"BottomSheetCreateEmployeesEditButton": "ویرایش کارکنان",
|
||||
"BottomSheetCreateEmployeesDeleteButton": "حذف",
|
||||
"BottomSheetCreateShiftsTitle": "افزودن شیفتهای جدید",
|
||||
"BottomSheetCreateShiftsShiftNameInput": "نام شیفت",
|
||||
"BottomSheetCreateShiftsStartTimeInput": "شروع شیفت",
|
||||
"BottomSheetCreateShiftsEndTimeInput": "پایان شیفت",
|
||||
"BottomSheetCreateShiftsShiftInWeekInput": "انتخاب روز شیفت هفته",
|
||||
"BottomSheetCreateShiftsRutineShiftInput": "روتین شیفت",
|
||||
"BottomSheetCreateShiftsDescInput": "توضیح شیفت",
|
||||
"BottomSheetCreateShiftsRegButton": "ثبت شیفت",
|
||||
"BottomSheetCreateShiftsEditButton": "ویرایش شیفت",
|
||||
"BottomSheetCreateShiftsDeleteButton": "حذف"
|
||||
},
|
||||
"shifts": {
|
||||
"title": "شیفتهای پیچیده",
|
||||
"subTitle": "مدیریت شیفتهای پیچیده",
|
||||
"ManageShiftButton": "مدیریت شیفتهای هفته",
|
||||
"weekFilter": "شیفتهای هفته",
|
||||
"monthFilter": "شیفتهای ماه",
|
||||
"nextWeekFilter": "شیفتهای هفته آینده",
|
||||
"nextMonthFilter": "شیفتهای ماه آینده",
|
||||
"lastWeekFilter": "شیفتهای هفته گذشته",
|
||||
"lastMonthkFilter": "شیفتهای ماه گذشته",
|
||||
"shiftText": "شیفت",
|
||||
"todayText": "امروز",
|
||||
"surpriseText": "شگفتی",
|
||||
"closeShiftButton": "بستن و تایید شیفت"
|
||||
},
|
||||
"manage-shift": {
|
||||
"title": "شیفتهای پیچیده هفتگی",
|
||||
"subTitle": "مدیریت شیفت",
|
||||
"routineTitle": "انتخاب روتین",
|
||||
"dateTitle": "انتخاب تاریخ",
|
||||
"shiftTitle": "انتخاب شیفت",
|
||||
"personnelTitle": "انتخاب پرسنل",
|
||||
"surpriseTitle": "انتخاب شگفتی",
|
||||
"surpriseInput": " شگفتی",
|
||||
"surpriseInputDef": " انتخاب کنید",
|
||||
"surpriseSubTitle": "شیفت توسط ناظر بسته میشود. لطفاً برای هر شیفت مشخص کنید",
|
||||
"404Shift": "شیفتی در این روز ندارید",
|
||||
"manageShiftRegButton": "ثبت فعالیت",
|
||||
"manageShiftEditButton": "ویرایش فعالیت",
|
||||
"editText": "شما در حال ویرایش هستید"
|
||||
},
|
||||
"complete-shift": {
|
||||
"title": "عملیات بستن شیفت",
|
||||
"subTitle": "بررسی تکمیل وظایف",
|
||||
"todayText": "امروز",
|
||||
"reportText": "گزارش",
|
||||
"completeShiftButton": "بستن با امتیاز"
|
||||
},
|
||||
"employees": {
|
||||
"title": "مدیریت کارکنان و نقشها",
|
||||
"subTitle": "هسته تنظیمات پیچیده",
|
||||
"routinesTitle": "مدیریت روتینها",
|
||||
"sectionsTitle": "مدیریت بخشها",
|
||||
"positionsTitle": "مدیریت موقعیتها",
|
||||
"staffsTitle": "مدیریت کارکنان",
|
||||
"shiftsTitle": "مدیریت شیفتها",
|
||||
"taskTitle": "افزودن وظیفه"
|
||||
}
|
||||
}
|
||||
|
|
275
messages/zh.json
275
messages/zh.json
|
@ -1,13 +1,13 @@
|
|||
{
|
||||
"page": {
|
||||
"title": "简单流畅的操作",
|
||||
"desc": "一款咖啡店的任务和班次管理解决方案,提供清晰、可追踪的任务管理和店铺运营监控。",
|
||||
"title": "简单顺畅的操作",
|
||||
"desc": "为咖啡店提供清晰、可跟踪的任务管理和店铺运营监控的任务和班次管理解决方案。",
|
||||
"button": "开始使用",
|
||||
"brand": "信任我们并使用 BRIZ 进行管理的品牌。"
|
||||
"brand": "信任我们的品牌并使用 BRIZ 进行管理。"
|
||||
},
|
||||
"home": {
|
||||
"title": "你好,Next.js i18n",
|
||||
"desc": "这是 Next.js i18n 的演示"
|
||||
"title": "你好,Next.js 国际化",
|
||||
"desc": "这是一个 Next.js 国际化的演示"
|
||||
},
|
||||
"navLinks": {
|
||||
"ourSolution": "我们的解决方案",
|
||||
|
@ -17,71 +17,70 @@
|
|||
"button": "开始使用"
|
||||
},
|
||||
"services": {
|
||||
"title": "参与我们的压力测试",
|
||||
"desc": "成为我们的压力测试的一部分,作为早期适配者尝试我们",
|
||||
"inputValue": "输入您的号码",
|
||||
"title": "成为我们压力测试的一部分",
|
||||
"desc": "成为我们压力测试的一部分,作为早期采用者尝试我们的服务",
|
||||
"inputValue": "输入您的电话号码",
|
||||
"button": "订阅",
|
||||
"successInput": "感谢您的信任,我们将与您联系",
|
||||
"streamlinedOperations": "精简的操作",
|
||||
"empoweredDecision": "赋权决策",
|
||||
"unwaveringSupport": "坚定支持",
|
||||
"successInput": "感谢您的信任,我们会与您联系",
|
||||
"streamlinedOperations": "精简的运营",
|
||||
"empoweredDecision": "增强的决策",
|
||||
"unwaveringSupport": "坚定的支持",
|
||||
"seamlessIntegration": "无缝集成"
|
||||
},
|
||||
"experiences": {
|
||||
"title": "基本逻辑",
|
||||
"taskText": "在 Briz 完成的任务数量",
|
||||
"LiveNumberTask": "使用 Briz 执行的活动",
|
||||
"title": "基础逻辑",
|
||||
"taskText": "在 Briz 中完成的任务数量",
|
||||
"LiveNumberTask": "与 Briz 完成的活动",
|
||||
"insertTasks": {
|
||||
"title": "插入任务并分配",
|
||||
"points": "插入任务并将其分配到店铺中的职位"
|
||||
"points": "插入任务并将其分配给店铺中的职位"
|
||||
},
|
||||
"createShiftPlan": {
|
||||
"title": "创建明确的班次计划",
|
||||
"points": "为每周创建明确的班次计划,并为每个班次分配监督员。"
|
||||
"title": "创建清晰的班次计划",
|
||||
"points": "为每周创建一个清晰的班次计划,并为每个班次指定一个主管。"
|
||||
},
|
||||
"specificPerson": {
|
||||
"title": "任务分配给特定人员",
|
||||
"points": "班次计划后,每项任务将成为分配给特定人员的活动。"
|
||||
"title": "活动分配给特定人员",
|
||||
"points": "在班次计划之后,每个任务成为分配给特定人员的活动。"
|
||||
},
|
||||
"realTime": {
|
||||
"title": "实时",
|
||||
"points": "实时在系统中跟踪运营常规。"
|
||||
"points": "实时跟踪系统中的运营例程。"
|
||||
},
|
||||
"confirmsCompletion": {
|
||||
"title": "确认完成",
|
||||
"points": "班次结束后,您的监督员检查所有任务,确认完成并评估员工表现。"
|
||||
"points": "班次结束后,您的主管会检查所有任务,确认完成并对员工进行评分。"
|
||||
}
|
||||
},
|
||||
"phiData": {
|
||||
"title": "PHI",
|
||||
"desc": "咖啡的味道永远是最重要的。有了 PHI,它将永远完美。Phi 代表黄金比例。如果按照黄金比例冲泡咖啡,它将永远味道醇美。在 PHI 部分,有三个框需要当班咖啡师填写。这些是调整每日咖啡配方的主要元素:",
|
||||
"endDesc": "您的咖啡师输入每日配方,这将被记录在您的数据库中。您可以查看您的调整图表,了解您的咖啡店情况,并检查店内的咖啡质量。",
|
||||
"title": "Phi",
|
||||
"desc": "咖啡的味道始终是最重要的。使用 PHI,味道将永远完美。Phi 意味着黄金比例。如果您按照黄金比例冲泡咖啡,味道总是会很好。在 Phi 部分,有三个框需要值班的咖啡师填写。这些是调整每日咖啡配方的主要元素:",
|
||||
"endDesc": "您的咖啡师输入每日配方,将记录在您的数据库中。您可以查看调整图表,了解您的酒吧发生了什么,并检查您店内咖啡的质量。",
|
||||
"bcg": {
|
||||
"desc": "这指的是每次冲泡所使用的精确咖啡粉量...",
|
||||
"desc": "指每次冲泡使用的精确咖啡粉量...",
|
||||
"title": "基础咖啡克数 (BCG)"
|
||||
},
|
||||
"oeg": {
|
||||
"desc": "这是冲泡后提取的咖啡的最终重量...",
|
||||
"title": "输出提取克重 (OEG)"
|
||||
"desc": "测量冲泡后提取的咖啡最终重量...",
|
||||
"title": "输出提取克数 (OEG)"
|
||||
},
|
||||
"et": {
|
||||
"desc": "这是从开始到结束冲泡咖啡所花费的总时间...",
|
||||
"title": "萃取时间 (ET)"
|
||||
"desc": "从开始到完成冲泡咖啡所需的总时间...",
|
||||
"title": "提取时间 (ET)"
|
||||
}
|
||||
},
|
||||
"stepProducts": {
|
||||
"endDesc": "现在为接下来的一周设置您的班次。为每个班次中的每个职位分配员工并指定监督员。",
|
||||
|
||||
"endDesc": "现在只需为接下来的一周设置您的班次。为每个班次中的每个职位分配员工并指定主管。",
|
||||
"setupRoutine": {
|
||||
"desc": "您可以完全自定义并定义您的运营系统...",
|
||||
"title": "设置您的常规操作"
|
||||
"desc": "您可以完全自定义和定义您的运营系统...",
|
||||
"title": "设置您的例程"
|
||||
},
|
||||
"setupSections": {
|
||||
"desc": "定义您的区域以更好地了解您的运营...",
|
||||
"title": "设置您的区域"
|
||||
"desc": "定义您的部分以获得更好的运营洞察...",
|
||||
"title": "设置您的部分"
|
||||
},
|
||||
"setupPositions": {
|
||||
"desc": "职位在我们的平台中扮演着重要角色...",
|
||||
"desc": "职位在我们的平台中起着关键作用...",
|
||||
"title": "设置您的职位"
|
||||
},
|
||||
"setupStaffInfo": {
|
||||
|
@ -89,58 +88,190 @@
|
|||
"title": "设置员工信息"
|
||||
},
|
||||
"setupShiftsLogic": {
|
||||
"desc": "您需要确定您的班次逻辑...",
|
||||
"desc": "您需要建立您的班次逻辑...",
|
||||
"title": "设置您的班次逻辑"
|
||||
},
|
||||
"insertTasks": {
|
||||
"desc": "在此阶段设置您所有的任务...",
|
||||
"desc": "在此阶段设置所有任务...",
|
||||
"title": "插入所有任务"
|
||||
}
|
||||
},
|
||||
"pricing": {
|
||||
"title": "定价",
|
||||
"desc": "通过我们灵活的时间定价方案,定制您的咖啡店管理。所有套餐均提供相同的全面功能,仅在时长上有所不同,以满足您的业务需求。从每月、每季度或每年选项中选择,每种方案都旨在提供便捷和高效的体验。",
|
||||
"desc": "使用我们灵活的定价计划定制您的咖啡店管理。所有套餐提供相同的全面功能,仅在持续时间上有所不同,以适应您的业务需求。您可以选择按月、季度或年度选项,每种选项都旨在提供简便和高效。",
|
||||
"oneMounth": {
|
||||
"title": "一个月",
|
||||
"pricing1": "15,000,000 R",
|
||||
"pricing2": "24,000,000 R",
|
||||
"pricing3": "29,500,000 R",
|
||||
"desc": "这可能是最适合您的套餐,请随时使用14天的免费试用",
|
||||
"users1": "超过10位用户",
|
||||
"users2": "超过25位用户",
|
||||
"users3": "超过50位用户",
|
||||
"button": "开始"
|
||||
"title": "1 个月",
|
||||
"pricing1": "15,000,000 ر",
|
||||
"pricing2": "24,000,000 ر",
|
||||
"pricing3": "29,500,000 ر",
|
||||
"desc": "这可能是最适合您的套餐,因此请随意使用 14 天免费试用",
|
||||
"users1": "最多 10 用户",
|
||||
"users2": "最多 25 用户",
|
||||
"users3": "最多 50 用户",
|
||||
"button": "开始使用"
|
||||
},
|
||||
"threeMounth": {
|
||||
"title": "三个月",
|
||||
"pricing1": "36,000,000 R",
|
||||
"pricing2": "57,600,000 R",
|
||||
"pricing3": "70,800,000 R",
|
||||
"desc": "这可能是最适合您的套餐,请随时使用14天的免费试用",
|
||||
"users1": "超过10位用户",
|
||||
"users2": "超过25位用户",
|
||||
"users3": "超过50位用户",
|
||||
"button": "开始"
|
||||
"title": "3 个月",
|
||||
"pricing1": "36,000,000 ر",
|
||||
"pricing2": "57,600,000 ر",
|
||||
"pricing3": "70,800,000 ر",
|
||||
"desc": "这可能是最适合您的套餐,因此请随意使用 14 天免费试用",
|
||||
"users1": "最多 10 用户",
|
||||
"users2": "最多 25 用户",
|
||||
"users3": "最多 50 用户",
|
||||
"button": "开始使用"
|
||||
},
|
||||
"sixMounth": {
|
||||
"title": "一年",
|
||||
"pricing1": "108,000,000 R",
|
||||
"pricing2": "172,800,000 R",
|
||||
"pricing3": "212,400,000 R",
|
||||
"desc": "这可能是最适合您的套餐,请随时使用14天的免费试用",
|
||||
"users1": "超过10位用户",
|
||||
"users2": "超过25位用户",
|
||||
"users3": "超过50位用户",
|
||||
"button": "开始"
|
||||
"title": "6 个月",
|
||||
"pricing1": "108,000,000 ر",
|
||||
"pricing2": "172,800,000 ر",
|
||||
"pricing3": "212,400,000 ر",
|
||||
"desc": "这可能是最适合您的套餐,因此请随意使用 14 天免费试用",
|
||||
"users1": "最多 10 用户",
|
||||
"users2": "最多 25 用户",
|
||||
"users3": "最多 50 用户",
|
||||
"button": "开始使用"
|
||||
}
|
||||
},
|
||||
"login": {
|
||||
"title": "Breeze",
|
||||
"desc": "日常事务的和谐管理",
|
||||
"acceptRule": "通过确认电话号码,我同意Breeze应用的所有隐私条款",
|
||||
"title": "Briz",
|
||||
"desc": "和谐的例程管理",
|
||||
"acceptRule": "确认电话号码即表示我同意 Briz 应用的所有隐私条件",
|
||||
"loginInput": "输入您的电话号码",
|
||||
"loginButton": "确认电话号码",
|
||||
"confirmText": "验证码已发送至该号码",
|
||||
"confirmInput": "输入发送的验证码"
|
||||
"confirmText": "确认码已发送",
|
||||
"confirmInput": "输入发送的代码",
|
||||
"singUpDesc": "您需要一个电话号码才能进入或注册餐厅任务管理应用程序。请输入您的手机号码",
|
||||
"singUpFirstNameInput": "名字",
|
||||
"signUpLastNameInput": "姓氏",
|
||||
"signUpComplexNameInput": "综合名称",
|
||||
"signUpSupportPhoneNumberInput": "管理联系电话",
|
||||
"signUpComplexAddressInput": "地址",
|
||||
"signUpButton": "验证信息"
|
||||
},
|
||||
"homePage": {
|
||||
"activityText": " 今日活动",
|
||||
"shiftText": " 今日班次",
|
||||
"shiftBoxAllactivities": "所有活动",
|
||||
"shiftBoxActivityDone": "已完成活动",
|
||||
"shiftBoxActivityNotDone": "未完成活动",
|
||||
"shiftBoxShiftPercentage": "班次进度百分比",
|
||||
"shiftBoxEmpty": "您没有开放的班次",
|
||||
"surpriseText": "惊喜",
|
||||
"addAdjust": "添加新调整",
|
||||
"historyReports": "历史报告",
|
||||
"titleReport1": "活动",
|
||||
"subTitleReport1": "Excel 输出",
|
||||
"titleReport2": "本周班次",
|
||||
"subTitleReport2": "文本输出"
|
||||
},
|
||||
"coffee-brew": {
|
||||
"title": "调整咖啡",
|
||||
"subTitle": "咖啡调整机制",
|
||||
"coffeeGramInput": "BCG | 咖啡克数",
|
||||
"extractionTimeInput": "OEG | 提取时间",
|
||||
"outputExtractGrammageInput": "ET | 输出提取克数",
|
||||
"coffeeBrewButton": "注册",
|
||||
"historyTitle": "调整历史",
|
||||
"coffeeGramChart": "咖啡克数",
|
||||
"extractionTimeChart": "提取时间",
|
||||
"outputExtractGrammageChart": "输出提取"
|
||||
},
|
||||
"BottomSheet": {
|
||||
"BottomSheetReport": "报告",
|
||||
"BottomSheetReportDesc": "您正在获取活动报告",
|
||||
"BottomSheetReportbutton": "提交",
|
||||
"BottomSheetReportManageShiftTitle": "报告",
|
||||
"BottomSheetReportManageShiftType1": "本周",
|
||||
"BottomSheetReportManageShiftType2": "下周",
|
||||
"BottomSheetReportManageShiftButton": "复制文本",
|
||||
"BottomSheetAddUserToPositionShiftPlanTitle": "将用户添加到职位",
|
||||
"BottomSheetCreateRoutineTitle": "添加新例程",
|
||||
"BottomSheetCreateRoutineNameInput": "例程名称",
|
||||
"BottomSheetCreateRoutineDescInput": "例程描述",
|
||||
"BottomSheetCreateRoutineRegButton": "提交例程",
|
||||
"BottomSheetCreateRoutineEditButton": "编辑例程",
|
||||
"BottomSheetCreateRoutineDeleteButton": "删除",
|
||||
"BottomSheetCreateSectionTitle": "添加新部分",
|
||||
"BottomSheetCreateSectionNameInput": "部分名称",
|
||||
"BottomSheetCreateSectionDescInput": "部分描述",
|
||||
"BottomSheetCreateSectionRegButton": "提交部分",
|
||||
"BottomSheetCreateSectionEditButton": "编辑部分",
|
||||
"BottomSheetCreateSectionDeleteButton": "删除",
|
||||
"BottomSheetCreatePositionTitle": "添加新职位",
|
||||
"BottomSheetCreatePositionNameInput": "职位名称",
|
||||
"BottomSheetCreatePositionDescInput": "职位描述",
|
||||
"BottomSheetCreatePositionSectionInput": "关联部分",
|
||||
"chooseText": "选择",
|
||||
"BottomSheetCreatePositionRegButton": "提交职位",
|
||||
"BottomSheetCreatePositionEditButton": "编辑职位",
|
||||
"BottomSheetCreatePositionDeleteButton": "删除",
|
||||
"BottomSheetCreateEmployeesTitle": "添加新员工",
|
||||
"BottomSheetCreateEmployeesFirstNameInput": "名字",
|
||||
"BottomSheetCreateEmployeesLastNameInput": "姓氏",
|
||||
"BottomSheetCreateEmployeesGenderInput": "性别",
|
||||
"BottomSheetCreateEmployeesPhoneNumberInput": "电话号码",
|
||||
"BottomSheetCreateEmployeesJobTitleInput": "职位名称",
|
||||
"BottomSheetCreateEmployeesRegButton": "提交员工",
|
||||
"BottomSheetCreateEmployeesEditButton": "编辑员工",
|
||||
"BottomSheetCreateEmployeesDeleteButton": "删除",
|
||||
"BottomSheetCreateShiftsTitle": "添加新班次",
|
||||
"BottomSheetCreateShiftsShiftNameInput": "班次名称",
|
||||
"BottomSheetCreateShiftsStartTimeInput": "班次开始时间",
|
||||
"BottomSheetCreateShiftsEndTimeInput": "班次结束时间",
|
||||
"BottomSheetCreateShiftsShiftInWeekInput": "选择班次星期几",
|
||||
"BottomSheetCreateShiftsRutineShiftInput": "班次例程",
|
||||
"BottomSheetCreateShiftsDescInput": "班次描述",
|
||||
"BottomSheetCreateShiftsRegButton": "提交班次",
|
||||
"BottomSheetCreateShiftsEditButton": "编辑班次",
|
||||
"BottomSheetCreateShiftsDeleteButton": "删除"
|
||||
},
|
||||
"shifts": {
|
||||
"title": "复杂班次",
|
||||
"subTitle": "复杂班次管理",
|
||||
"ManageShiftButton": "管理本周班次",
|
||||
"weekFilter": "本周班次",
|
||||
"monthFilter": "本月班次",
|
||||
"nextWeekFilter": "下周班次",
|
||||
"nextMonthFilter": "下个月班次",
|
||||
"lastWeekFilter": "上周班次",
|
||||
"lastMonthkFilter": "上个月班次",
|
||||
"shiftText": "班次",
|
||||
"todayText": "今天",
|
||||
"surpriseText": "惊喜",
|
||||
"closeShiftButton": "关闭并确认班次"
|
||||
},
|
||||
"manage-shift": {
|
||||
"title": "每周复杂班次",
|
||||
"subTitle": "班次管理",
|
||||
"routineTitle": "选择例程",
|
||||
"dateTitle": "选择日期",
|
||||
"shiftTitle": "选择班次",
|
||||
"personnelTitle": "选择人员",
|
||||
"surpriseTitle": "选择惊喜",
|
||||
"surpriseInput": " 惊喜",
|
||||
"surpriseInputDef": " 选择",
|
||||
"surpriseSubTitle": "班次由主管关闭。请为每个班次指定。",
|
||||
"404Shift": "您这一天没有班次",
|
||||
"manageShiftRegButton": "活动注册",
|
||||
"manageShiftEditButton": "编辑活动",
|
||||
"editText": "您正在编辑"
|
||||
},
|
||||
"complete-shift": {
|
||||
"title": "班次关闭操作",
|
||||
"subTitle": "检查任务完成情况",
|
||||
"todayText": "今天",
|
||||
"reportText": "报告",
|
||||
"completeShiftButton": "带积分关闭"
|
||||
},
|
||||
"employees": {
|
||||
"title": "员工和角色管理",
|
||||
"subTitle": "复杂设置的核心",
|
||||
"routinesTitle": "例程管理",
|
||||
"sectionsTitle": "部分管理",
|
||||
"positionsTitle": "职位管理",
|
||||
"staffsTitle": "员工管理",
|
||||
"shiftsTitle": "班次管理",
|
||||
"taskTitle": "添加任务"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
/** @type {import('next').NextConfig} */
|
||||
|
||||
const withPWA = require("@ducanh2912/next-pwa").default({
|
||||
cacheOnFrontEndNav: true,
|
||||
aggressiveFrontEndNavCaching: true,
|
||||
reloadOnOnline: true,
|
||||
swcMinify: true,
|
||||
dest: "public",
|
||||
fallbacks: {
|
||||
document: "/offline", // fallback to custom page
|
||||
},
|
||||
workboxOptions: {
|
||||
disableDevLogs: true,
|
||||
},
|
||||
});
|
||||
// const withPWA = require("@ducanh2912/next-pwa").default({
|
||||
// cacheOnFrontEndNav: true,
|
||||
// aggressiveFrontEndNavCaching: true,
|
||||
// reloadOnOnline: true,
|
||||
// swcMinify: true,
|
||||
// dest: "public",
|
||||
// fallbacks: {
|
||||
// document: "/offline", // fallback to custom page
|
||||
// },
|
||||
// workboxOptions: {
|
||||
// disableDevLogs: true,
|
||||
// },
|
||||
// });
|
||||
|
||||
const createNextIntlPlugin = require("next-intl/plugin");
|
||||
|
||||
|
@ -23,4 +23,4 @@ const withNextIntl = createNextIntlPlugin();
|
|||
const nextConfig = {};
|
||||
|
||||
// Export the combined configuration
|
||||
module.exports = withNextIntl(withPWA(nextConfig));
|
||||
module.exports = withNextIntl(nextConfig);
|
||||
|
|
|
@ -8,6 +8,7 @@ import SimpleReactValidator from "simple-react-validator";
|
|||
import CheckBoxBriz from "plugins/CheckBoxBriz/page";
|
||||
import Buttonbriz from "plugins/Buttonbriz/page";
|
||||
import { toast } from "react-toastify";
|
||||
import { useLocale, useTranslations } from "next-intl";
|
||||
|
||||
const BottomSheetAddUserToPositionShiftPlan = ({
|
||||
setUserAndPositionIds,
|
||||
|
@ -20,6 +21,10 @@ const BottomSheetAddUserToPositionShiftPlan = ({
|
|||
|
||||
const [, forceUpdate] = useState();
|
||||
|
||||
const t = useTranslations("BottomSheet");
|
||||
const locale = useLocale();
|
||||
const isRTL = locale === "fa";
|
||||
|
||||
const validator = useRef(
|
||||
new SimpleReactValidator({
|
||||
messages: {
|
||||
|
@ -43,7 +48,14 @@ const BottomSheetAddUserToPositionShiftPlan = ({
|
|||
>
|
||||
<div className="text-center py-2 bg-secondary-950 ">
|
||||
<p className="mb-0 text-primary-300 relative top-[-5px]">
|
||||
افزودن یوزر به پوزیشن {positionName}
|
||||
{isRTL ? (
|
||||
<> افزودن یوزر به پوزیشن {positionName}</>
|
||||
) : (
|
||||
<>
|
||||
{" "}
|
||||
{t("BottomSheetAddUserToPositionShiftPlanTitle")} {positionName}
|
||||
</>
|
||||
)}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -10,10 +10,16 @@ import Buttonbriz from "plugins/Buttonbriz/page";
|
|||
import DatePickerIran from "plugins/DatePickerIran/page";
|
||||
import moment from "jalali-moment";
|
||||
import validateIranPhone from "plugins/IranPhoneRegex";
|
||||
import { useLocale, useTranslations } from "next-intl";
|
||||
const jalaliMoment = require("jalali-moment");
|
||||
|
||||
const BottomSheetCreateEmployees = (props) => {
|
||||
const CTX = useContext(AppContext);
|
||||
|
||||
const t = useTranslations("BottomSheet");
|
||||
const locale = useLocale();
|
||||
const isRTL = locale === "fa";
|
||||
|
||||
const [firstName, setFirstName] = useState("");
|
||||
const [lastName, setLastName] = useState("");
|
||||
const [phoneNumber, setPhoneNumber] = useState("");
|
||||
|
@ -199,14 +205,14 @@ const BottomSheetCreateEmployees = (props) => {
|
|||
>
|
||||
<div className="text-center py-2 bg-secondary-950 ">
|
||||
<p className="mb-0 text-primary-300 relative top-[-5px]">
|
||||
افزودن کاربر جدید
|
||||
{t("BottomSheetCreateEmployeesTitle")}{" "}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="bg-body-100 p-4 ">
|
||||
<div className="">
|
||||
<Input
|
||||
lable="نام "
|
||||
lable={t("BottomSheetCreateEmployeesFirstNameInput")}
|
||||
id="firstName-id"
|
||||
name="firstName"
|
||||
type={"text"}
|
||||
|
@ -227,7 +233,7 @@ const BottomSheetCreateEmployees = (props) => {
|
|||
|
||||
<div>
|
||||
<Input
|
||||
lable="نام خانوادگی"
|
||||
lable={t("BottomSheetCreateEmployeesLastNameInput")}
|
||||
id="lastName-id"
|
||||
name="lastName"
|
||||
type={"text"}
|
||||
|
@ -248,7 +254,7 @@ const BottomSheetCreateEmployees = (props) => {
|
|||
|
||||
<div className="">
|
||||
<Input
|
||||
lable="جنسیت"
|
||||
lable={t("BottomSheetCreateEmployeesGenderInput")}
|
||||
id="gender-id"
|
||||
name="gender"
|
||||
type={"text"}
|
||||
|
@ -259,8 +265,8 @@ const BottomSheetCreateEmployees = (props) => {
|
|||
style="text-right"
|
||||
select={true}
|
||||
selectData={[
|
||||
{ key: "مرد", value: 0 },
|
||||
{ key: "زن", value: 1 },
|
||||
{ key: isRTL ? "مرد" : "male", value: 0 },
|
||||
{ key: isRTL ? "زن" : "female", value: 1 },
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
|
@ -273,7 +279,7 @@ const BottomSheetCreateEmployees = (props) => {
|
|||
|
||||
<div className="">
|
||||
<Input
|
||||
lable="شماره تماس"
|
||||
lable={t("BottomSheetCreateEmployeesPhoneNumberInput")}
|
||||
id="phoneNumber-id"
|
||||
name="phoneNumber"
|
||||
type={"number"}
|
||||
|
@ -308,7 +314,7 @@ const BottomSheetCreateEmployees = (props) => {
|
|||
|
||||
<div className="">
|
||||
<Input
|
||||
lable="سمت شغلی"
|
||||
lable={t("BottomSheetCreateEmployeesJobTitleInput")}
|
||||
id="roleIds-id"
|
||||
name="roleIds"
|
||||
type={"text"}
|
||||
|
@ -333,7 +339,7 @@ const BottomSheetCreateEmployees = (props) => {
|
|||
)}
|
||||
select={true}
|
||||
selectData={roleSelectData}
|
||||
defaultValue={"انتخاب کنید"}
|
||||
defaultValue={t("chooseText")}
|
||||
/>
|
||||
</div>
|
||||
|
||||
|
@ -388,17 +394,17 @@ const BottomSheetCreateEmployees = (props) => {
|
|||
|
||||
{goToEditUser ? (
|
||||
<Buttonbriz
|
||||
title="ویرایش کاربر"
|
||||
title={t("BottomSheetCreateEmployeesEditButton")}
|
||||
color="INFO"
|
||||
icon="CHECK"
|
||||
buttonEvent={() => handleCreateUser("UPDATE")}
|
||||
subButton={true}
|
||||
subButtonTitle="حذف کاربر"
|
||||
subButtonTitle={t("BottomSheetCreateEmployeesDeleteButton")}
|
||||
subButtonEvent={() => CTX.DeleteUser(idEditUser)}
|
||||
/>
|
||||
) : (
|
||||
<Buttonbriz
|
||||
title="ثبت کاربر"
|
||||
title={t("BottomSheetCreateEmployeesRegButton")}
|
||||
color="PRIMARY"
|
||||
icon="CHECK"
|
||||
buttonEvent={() => handleCreateUser()}
|
||||
|
|
|
@ -7,9 +7,14 @@ import AppContext from "@ctx/AppContext";
|
|||
import SimpleReactValidator from "simple-react-validator";
|
||||
import { toast } from "react-toastify";
|
||||
import Buttonbriz from "plugins/Buttonbriz/page";
|
||||
import { useLocale, useTranslations } from "next-intl";
|
||||
|
||||
const BottomSheetCreatePosition = (props) => {
|
||||
const CTX = useContext(AppContext);
|
||||
const t = useTranslations("BottomSheet");
|
||||
const locale = useLocale();
|
||||
const isRTL = locale === "fa";
|
||||
|
||||
const [title, setTitle] = useState("");
|
||||
const [description, setDescription] = useState("");
|
||||
const [sectionId, setSectionId] = useState("");
|
||||
|
@ -125,14 +130,14 @@ const BottomSheetCreatePosition = (props) => {
|
|||
>
|
||||
<div className="text-center py-2 bg-secondary-950 ">
|
||||
<p className="mb-0 text-primary-300 relative top-[-5px]">
|
||||
افزودن پوزیشن جدید{" "}
|
||||
{t("BottomSheetCreatePositionTitle")}{" "}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="bg-body-100 p-4 ">
|
||||
<div className="">
|
||||
<Input
|
||||
lable="نام پوزیشن "
|
||||
lable={t("BottomSheetCreatePositionNameInput")}
|
||||
id="title-id"
|
||||
name="title"
|
||||
type={"text"}
|
||||
|
@ -152,7 +157,7 @@ const BottomSheetCreatePosition = (props) => {
|
|||
</div>
|
||||
<div className="">
|
||||
<Input
|
||||
lable=" توضیحات"
|
||||
lable={t("BottomSheetCreatePositionDescInput")}
|
||||
id="description-id"
|
||||
name="description"
|
||||
type={"text"}
|
||||
|
@ -174,7 +179,7 @@ const BottomSheetCreatePosition = (props) => {
|
|||
|
||||
<div className="">
|
||||
<Input
|
||||
lable="سکشن مد نظر"
|
||||
lable={t("BottomSheetCreatePositionSectionInput")}
|
||||
id="sectionId-id"
|
||||
name="sectionId"
|
||||
type={"text"}
|
||||
|
@ -202,7 +207,7 @@ const BottomSheetCreatePosition = (props) => {
|
|||
)}
|
||||
select={true}
|
||||
selectData={sectionIdSelectData}
|
||||
defaultValue={"انتخاب کنید"}
|
||||
defaultValue={t("chooseText")}
|
||||
/>
|
||||
</div>
|
||||
|
||||
|
@ -223,17 +228,17 @@ const BottomSheetCreatePosition = (props) => {
|
|||
|
||||
{goToEditPosition ? (
|
||||
<Buttonbriz
|
||||
title="ویرایش پوزیشن"
|
||||
title={t("BottomSheetCreatePositionEditButton")}
|
||||
color="INFO"
|
||||
icon="CHECK"
|
||||
buttonEvent={() => handleCreatePosition("UPDATE")}
|
||||
subButton={true}
|
||||
subButtonTitle="حذف پوزیشن"
|
||||
subButtonTitle={t("BottomSheetCreatePositionDeleteButton")}
|
||||
subButtonEvent={() => CTX.DeletePosition(idEditPosition)}
|
||||
/>
|
||||
) : (
|
||||
<Buttonbriz
|
||||
title="ثبت پوزیشن"
|
||||
title={t("BottomSheetCreatePositionRegButton")}
|
||||
color="PRIMARY"
|
||||
icon="CHECK"
|
||||
buttonEvent={() => handleCreatePosition()}
|
||||
|
|
|
@ -7,6 +7,7 @@ import AppContext from "@ctx/AppContext";
|
|||
import SimpleReactValidator from "simple-react-validator";
|
||||
import { toast } from "react-toastify";
|
||||
import Buttonbriz from "plugins/Buttonbriz/page";
|
||||
import { useLocale, useTranslations } from "next-intl";
|
||||
|
||||
const BottomSheetCreateRoutine = (props) => {
|
||||
const CTX = useContext(AppContext);
|
||||
|
@ -14,6 +15,9 @@ const BottomSheetCreateRoutine = (props) => {
|
|||
const [description, setDescription] = useState("");
|
||||
|
||||
const [, forceUpdate] = useState();
|
||||
const t = useTranslations("BottomSheet");
|
||||
const locale = useLocale();
|
||||
const isRTL = locale === "fa";
|
||||
|
||||
const validator = useRef(
|
||||
new SimpleReactValidator({
|
||||
|
@ -102,14 +106,14 @@ const BottomSheetCreateRoutine = (props) => {
|
|||
>
|
||||
<div className="text-center py-2 bg-secondary-950 ">
|
||||
<p className="mb-0 text-primary-300 relative top-[-5px]">
|
||||
افزودن روتین جدید{" "}
|
||||
{t("BottomSheetCreateRoutineTitle")}{" "}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="bg-body-100 p-4 ">
|
||||
<div className="">
|
||||
<Input
|
||||
lable="نام روتین "
|
||||
lable={t("BottomSheetCreateRoutineNameInput")}
|
||||
id="title-id"
|
||||
name="title"
|
||||
type={"text"}
|
||||
|
@ -129,7 +133,7 @@ const BottomSheetCreateRoutine = (props) => {
|
|||
</div>
|
||||
<div className="">
|
||||
<Input
|
||||
lable=" توضیحات"
|
||||
lable={t("BottomSheetCreateRoutineDescInput")}
|
||||
id="description-id"
|
||||
name="description"
|
||||
type={"text"}
|
||||
|
@ -151,17 +155,17 @@ const BottomSheetCreateRoutine = (props) => {
|
|||
|
||||
{goToEditRoutine ? (
|
||||
<Buttonbriz
|
||||
title="ویرایش روتین"
|
||||
title={t("BottomSheetCreateRoutineEditButton")}
|
||||
color="INFO"
|
||||
icon="CHECK"
|
||||
buttonEvent={() => handleCreateRoutine("UPDATE")}
|
||||
subButton={true}
|
||||
subButtonTitle="حذف روتین"
|
||||
subButtonTitle={t("BottomSheetCreateRoutineDeleteButton")}
|
||||
subButtonEvent={() => CTX.DeleteRoutine(idEditRoutine)}
|
||||
/>
|
||||
) : (
|
||||
<Buttonbriz
|
||||
title="ثبت روتین"
|
||||
title={t("BottomSheetCreateRoutineRegButton")}
|
||||
color="PRIMARY"
|
||||
icon="CHECK"
|
||||
buttonEvent={() => handleCreateRoutine()}
|
||||
|
|
|
@ -7,12 +7,17 @@ import AppContext from "@ctx/AppContext";
|
|||
import SimpleReactValidator from "simple-react-validator";
|
||||
import { toast } from "react-toastify";
|
||||
import Buttonbriz from "plugins/Buttonbriz/page";
|
||||
import { useLocale, useTranslations } from "next-intl";
|
||||
|
||||
const BottomSheetCreateSection = (props) => {
|
||||
const CTX = useContext(AppContext);
|
||||
const [title, setTitle] = useState("");
|
||||
const [description, setDescription] = useState("");
|
||||
|
||||
const t = useTranslations("BottomSheet");
|
||||
const locale = useLocale();
|
||||
const isRTL = locale === "fa";
|
||||
|
||||
const [, forceUpdate] = useState();
|
||||
|
||||
const validator = useRef(
|
||||
|
@ -102,14 +107,14 @@ const BottomSheetCreateSection = (props) => {
|
|||
>
|
||||
<div className="text-center py-2 bg-secondary-950 ">
|
||||
<p className="mb-0 text-primary-300 relative top-[-5px]">
|
||||
افزودن سکشن جدید{" "}
|
||||
{t("BottomSheetCreateSectionTitle")}{" "}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="bg-body-100 p-4 ">
|
||||
<div className="">
|
||||
<Input
|
||||
lable="نام سکشن "
|
||||
lable={t("BottomSheetCreateSectionNameInput")}
|
||||
id="title-id"
|
||||
name="title"
|
||||
type={"text"}
|
||||
|
@ -129,7 +134,7 @@ const BottomSheetCreateSection = (props) => {
|
|||
</div>
|
||||
<div className="">
|
||||
<Input
|
||||
lable=" توضیحات"
|
||||
lable={t("BottomSheetCreateSectionDescInput")}
|
||||
id="description-id"
|
||||
name="description"
|
||||
type={"text"}
|
||||
|
@ -151,17 +156,17 @@ const BottomSheetCreateSection = (props) => {
|
|||
|
||||
{goToEditSection ? (
|
||||
<Buttonbriz
|
||||
title="ویرایش سکشن"
|
||||
title={t("BottomSheetCreateSectionEditButton")}
|
||||
color="INFO"
|
||||
icon="CHECK"
|
||||
buttonEvent={() => handleCreateSection("UPDATE")}
|
||||
subButton={true}
|
||||
subButtonTitle="حذف سکشن"
|
||||
subButtonTitle={t("BottomSheetCreateSectionEditButton")}
|
||||
subButtonEvent={() => CTX.DeleteSection(idEditSection)}
|
||||
/>
|
||||
) : (
|
||||
<Buttonbriz
|
||||
title="ثبت سکشن"
|
||||
title={t("BottomSheetCreateSectionRegButton")}
|
||||
color="PRIMARY"
|
||||
icon="CHECK"
|
||||
buttonEvent={() => handleCreateSection()}
|
||||
|
|
|
@ -7,9 +7,14 @@ import AppContext from "@ctx/AppContext";
|
|||
import SimpleReactValidator from "simple-react-validator";
|
||||
import { toast } from "react-toastify";
|
||||
import Buttonbriz from "plugins/Buttonbriz/page";
|
||||
import { useLocale, useTranslations } from "next-intl";
|
||||
|
||||
const BottomSheetCreateShifts = (props) => {
|
||||
const CTX = useContext(AppContext);
|
||||
const t = useTranslations("BottomSheet");
|
||||
const locale = useLocale();
|
||||
const isRTL = locale === "fa";
|
||||
|
||||
const [title, setTitle] = useState("");
|
||||
const [description, setDescription] = useState("");
|
||||
const [dayOfWeeksCurrent, setDayOfWeeksCurrent] = useState("");
|
||||
|
@ -42,13 +47,13 @@ const BottomSheetCreateShifts = (props) => {
|
|||
);
|
||||
|
||||
const week = [
|
||||
{ key: "شنبه", value: 6 },
|
||||
{ key: "یکشنبه", value: 0 },
|
||||
{ key: "دوشنبه", value: 1 },
|
||||
{ key: "سه شنبه", value: 2 },
|
||||
{ key: "چهار شنبه", value: 3 },
|
||||
{ key: "پنج شنبه", value: 4 },
|
||||
{ key: "جمعه", value: 5 },
|
||||
{ key: isRTL ? "شنبه" : "Saturday ", value: 6 },
|
||||
{ key: isRTL ? "یکشنبه" : "Sunday ", value: 0 },
|
||||
{ key: isRTL ? "دوشنبه" : "Monday ", value: 1 },
|
||||
{ key: isRTL ? "سه شنبه" : "Tuesday ", value: 2 },
|
||||
{ key: isRTL ? "چهار شنبه" : "Wednesday ", value: 3 },
|
||||
{ key: isRTL ? "پنج شنبه" : "Thursday ", value: 4 },
|
||||
{ key: isRTL ? "جمعه" : "Friday ", value: 5 },
|
||||
];
|
||||
|
||||
const clear = () => {
|
||||
|
@ -153,14 +158,14 @@ const BottomSheetCreateShifts = (props) => {
|
|||
>
|
||||
<div className="text-center py-2 bg-secondary-950 ">
|
||||
<p className="mb-0 text-primary-300 relative top-[-5px]">
|
||||
افزودن شیفت کاری جدید
|
||||
{t("BottomSheetCreateShiftsTitle")}{" "}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="bg-body-100 p-4 ">
|
||||
<div className="">
|
||||
<Input
|
||||
lable="نام شیفت مورد نظر"
|
||||
lable={t("BottomSheetCreateShiftsShiftNameInput")}
|
||||
id="title-id"
|
||||
name="title"
|
||||
type={"text"}
|
||||
|
@ -181,7 +186,7 @@ const BottomSheetCreateShifts = (props) => {
|
|||
|
||||
<div className="">
|
||||
<Input
|
||||
lable=" ساعت شروع شیفت"
|
||||
lable={t("BottomSheetCreateShiftsStartTimeInput")}
|
||||
id="startAtTimeShift-id"
|
||||
name="startAtTimeShift"
|
||||
type={"text"}
|
||||
|
@ -215,7 +220,7 @@ const BottomSheetCreateShifts = (props) => {
|
|||
|
||||
<div className="">
|
||||
<Input
|
||||
lable=" ساعت پایان شیفت"
|
||||
lable={t("BottomSheetCreateShiftsEndTimeInput")}
|
||||
id="endAtTimeShift-id"
|
||||
name="endAtTimeShift"
|
||||
type={"text"}
|
||||
|
@ -249,7 +254,7 @@ const BottomSheetCreateShifts = (props) => {
|
|||
|
||||
<div className="">
|
||||
<Input
|
||||
lable="انتخاب روزهای این شیفت در هفته"
|
||||
lable={t("BottomSheetCreateShiftsShiftInWeekInput")}
|
||||
id="dayOfWeeksCurrent-id"
|
||||
name="dayOfWeeksCurrent"
|
||||
type={"text"}
|
||||
|
@ -272,15 +277,15 @@ const BottomSheetCreateShifts = (props) => {
|
|||
style="text-right"
|
||||
select={true}
|
||||
selectData={[
|
||||
{ key: "شنبه", value: parseInt(6) },
|
||||
{ key: "یکشنبه", value: 0 },
|
||||
{ key: "دوشنبه", value: 1 },
|
||||
{ key: "سه شنبه", value: 2 },
|
||||
{ key: "چهار شنبه", value: 3 },
|
||||
{ key: "پنج شنبه", value: 4 },
|
||||
{ key: "جمعه", value: 5 },
|
||||
{ key: isRTL ? "شنبه" : "Saturday ", value: parseInt(6) },
|
||||
{ key: isRTL ? "یکشنبه" : "Sunday", value: 0 },
|
||||
{ key: isRTL ? "دوشنبه" : "Monday", value: 1 },
|
||||
{ key: isRTL ? "سه شنبه" : "Tuesday", value: 2 },
|
||||
{ key: isRTL ? "چهار شنبه" : "Wednesday", value: 3 },
|
||||
{ key: isRTL ? "پنج شنبه" : "Thursday", value: 4 },
|
||||
{ key: isRTL ? "جمعه" : "Friday", value: 5 },
|
||||
]}
|
||||
defaultValue={"انتخاب کنید"}
|
||||
defaultValue={t("chooseText")}
|
||||
/>
|
||||
</div>
|
||||
<div className="flex flex-wrap mt-3 rtl">
|
||||
|
@ -302,7 +307,7 @@ const BottomSheetCreateShifts = (props) => {
|
|||
</div>
|
||||
<div className="">
|
||||
<Input
|
||||
lable="روتین شیفت"
|
||||
lable={t("BottomSheetCreateShiftsRutineShiftInput")}
|
||||
id="routineId-id"
|
||||
name="routineId"
|
||||
type={"text"}
|
||||
|
@ -317,7 +322,7 @@ const BottomSheetCreateShifts = (props) => {
|
|||
)}
|
||||
select={true}
|
||||
selectData={routineIdSelectData}
|
||||
defaultValue={"انتخاب کنید"}
|
||||
defaultValue={t("chooseText")}
|
||||
/>
|
||||
</div>
|
||||
|
||||
|
@ -333,7 +338,7 @@ const BottomSheetCreateShifts = (props) => {
|
|||
|
||||
<div className="">
|
||||
<Input
|
||||
lable=" توضیحات"
|
||||
lable={t("BottomSheetCreateShiftsDescInput")}
|
||||
id="description-id"
|
||||
name="description"
|
||||
type={"text"}
|
||||
|
@ -348,17 +353,17 @@ const BottomSheetCreateShifts = (props) => {
|
|||
</div>
|
||||
{goToEditShift ? (
|
||||
<Buttonbriz
|
||||
title="ویرایش شیفت"
|
||||
title={t("BottomSheetCreateShiftsEditButton")}
|
||||
color="INFO"
|
||||
icon="CHECK"
|
||||
buttonEvent={() => handleCreateShift("UPDATE")}
|
||||
subButton={true}
|
||||
subButtonTitle="حذف شیفت"
|
||||
subButtonTitle={t("BottomSheetCreateShiftsDeleteButton")}
|
||||
subButtonEvent={() => CTX.DeleteShift(idEditShift)}
|
||||
/>
|
||||
) : (
|
||||
<Buttonbriz
|
||||
title="ثبت شیفت"
|
||||
title={t("BottomSheetCreateShiftsRegButton")}
|
||||
color="PRIMARY"
|
||||
icon="CHECK"
|
||||
buttonEvent={() => handleCreateShift()}
|
||||
|
|
|
@ -8,10 +8,14 @@ import SimpleReactValidator from "simple-react-validator";
|
|||
import CheckBoxBriz from "plugins/CheckBoxBriz/page";
|
||||
import Buttonbriz from "plugins/Buttonbriz/page";
|
||||
import { toast } from "react-toastify";
|
||||
import { useLocale, useTranslations } from "next-intl";
|
||||
|
||||
const BottomSheetReport = (props) => {
|
||||
const CTX = useContext(AppContext);
|
||||
const reportDetail = CTX.state.reportDetail;
|
||||
const t = useTranslations("BottomSheet");
|
||||
const locale = useLocale();
|
||||
const isRTL = locale === "fa";
|
||||
|
||||
const handleSendReport_SHIFTPLAN = () => {
|
||||
CTX.ReportShiftPlan(reportDetail?.shiftId);
|
||||
|
@ -30,20 +34,21 @@ const BottomSheetReport = (props) => {
|
|||
blocking={true}
|
||||
>
|
||||
<div className="text-center py-2 bg-secondary-950 ">
|
||||
<p className="mb-0 text-primary-300 relative top-[-5px]">گزارشات </p>
|
||||
<p className="mb-0 text-primary-300 relative top-[-5px]">
|
||||
{" "}
|
||||
{t("BottomSheetReportTitle")}{" "}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="px-3 pt-10 ">
|
||||
<p className="mb-0 text-center text-sm font-light">
|
||||
شما در حال گرفتن گزارش برای
|
||||
<small className="text-sm font-medium"> {reportDetail?.title} </small>
|
||||
هستید
|
||||
{t("BottomSheetReportDesc")}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className=" p-4">
|
||||
<Buttonbriz
|
||||
title="گرفتن گزارش"
|
||||
title={t("BottomSheetReportbutton")}
|
||||
color="INFO"
|
||||
icon="CHECK"
|
||||
buttonEvent={() => {
|
||||
|
|
|
@ -10,10 +10,15 @@ import Buttonbriz from "plugins/Buttonbriz/page";
|
|||
import { toast } from "react-toastify";
|
||||
import PersianNumber from "plugins/PersianNumber";
|
||||
import moment from "jalali-moment";
|
||||
import { useLocale, useTranslations } from "next-intl";
|
||||
|
||||
const BottomSheetReportManageShift = (props) => {
|
||||
const CTX = useContext(AppContext);
|
||||
const shiftplansData = CTX.state.shiftPlansData;
|
||||
const t = useTranslations("BottomSheet");
|
||||
const locale = useLocale();
|
||||
const isRTL = locale === "fa";
|
||||
|
||||
const [shiftplans, setShiftplans] = useState([]);
|
||||
const [type, setType] = useState(0);
|
||||
|
||||
|
@ -118,7 +123,10 @@ const BottomSheetReportManageShift = (props) => {
|
|||
blocking={true}
|
||||
>
|
||||
<div className="text-center py-2 bg-secondary-950 ">
|
||||
<p className="mb-0 text-primary-300 relative top-[-5px]">گزارشات </p>
|
||||
<p className="mb-0 text-primary-300 relative top-[-5px]">
|
||||
{" "}
|
||||
{t("BottomSheetReportManageShiftTitle")}{" "}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="flex bg-gray-100 rounded-xl m-3 rtl">
|
||||
|
@ -133,7 +141,7 @@ const BottomSheetReportManageShift = (props) => {
|
|||
type == 0 ? "text-white" : " text-secondary-900"
|
||||
}`}
|
||||
>
|
||||
همین هفته{" "}
|
||||
{t("BottomSheetReportManageShiftType1")}{" "}
|
||||
</p>
|
||||
</div>
|
||||
<div
|
||||
|
@ -147,7 +155,7 @@ const BottomSheetReportManageShift = (props) => {
|
|||
type == 1 ? "text-white" : " text-secondary-900"
|
||||
}`}
|
||||
>
|
||||
هفته بعد{" "}
|
||||
{t("BottomSheetReportManageShiftType2")}{" "}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -199,7 +207,7 @@ const BottomSheetReportManageShift = (props) => {
|
|||
|
||||
<div className=" p-4">
|
||||
<Buttonbriz
|
||||
title="کپی کردن متن "
|
||||
title={t("BottomSheetReportManageShiftButton")}
|
||||
color="INFO"
|
||||
icon="CHECK"
|
||||
buttonEvent={() => {
|
||||
|
|
|
@ -2,8 +2,8 @@ import moment from "jalali-moment";
|
|||
import React from "react";
|
||||
|
||||
const FormatJalaliDate = (date, noYear) => {
|
||||
const jalaliDateDay = moment(date).locale("fa").format("jD");
|
||||
const jalaliDateYear = moment(date).locale("fa").format("jYYYY");
|
||||
const jalaliDateDay = moment(date).locale("fa").format("D");
|
||||
const jalaliDateYear = moment(date).locale("fa").format("YYYY");
|
||||
|
||||
// Extract day name
|
||||
const dayName = moment(date).locale("fa").format("dddd");
|
||||
|
@ -15,7 +15,7 @@ const FormatJalaliDate = (date, noYear) => {
|
|||
// Get the Persian day name
|
||||
|
||||
// Extract month name
|
||||
const monthName = moment(date).locale("fa").format("jMMMM");
|
||||
const monthName = moment(date).locale("fa").format("MMMM");
|
||||
|
||||
if (noYear) {
|
||||
result = `${dayName} ${jalaliDateDay} ${monthName}`;
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
import moment from "jalali-moment";
|
||||
import React from "react";
|
||||
|
||||
const FormatJalaliDateEn = (date, noYear) => {
|
||||
const jalaliDateDay = moment(date).format("D");
|
||||
const jalaliDateYear = moment(date).format("YYYY");
|
||||
|
||||
// Extract day name
|
||||
const dayName = moment(date).format("dddd");
|
||||
|
||||
let result = null;
|
||||
|
||||
// Map English day names to Persian
|
||||
|
||||
// Get the Persian day name
|
||||
|
||||
// Extract month name
|
||||
const monthName = moment(date).format("MMMM");
|
||||
|
||||
if (noYear) {
|
||||
result = `${dayName} ${jalaliDateDay} ${monthName}`;
|
||||
} else {
|
||||
result = `${dayName} ${jalaliDateDay} ${monthName} ${jalaliDateYear}`;
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
export default FormatJalaliDateEn;
|
|
@ -1,3 +1,4 @@
|
|||
import { useLocale } from "next-intl";
|
||||
import React from "react";
|
||||
|
||||
const Input = ({
|
||||
|
@ -20,18 +21,20 @@ const Input = ({
|
|||
selectData,
|
||||
defaultValue,
|
||||
}) => {
|
||||
const locale = useLocale();
|
||||
const isRTL = locale === "fa";
|
||||
return (
|
||||
<div
|
||||
class={`relative ${mt ? `mt-${mt}` : "mt-8"} ${
|
||||
disabled ? "opacity-40" : ""
|
||||
}`}
|
||||
} ${isRTL ? "!text-right" : "!text-left"}`}
|
||||
>
|
||||
{textarea ? (
|
||||
<textarea
|
||||
type="text"
|
||||
className={`peer w-full border-b placeholder:text-transparent relative rtl !text-sm ${
|
||||
theme == 1 ? "form-control-white" : "form-control"
|
||||
}`}
|
||||
} ${isRTL ? "!text-right" : "!text-left"}`}
|
||||
placeholder={name}
|
||||
disabled={disabled ? true : false}
|
||||
readOnly={readOnly ? true : false}
|
||||
|
@ -43,7 +46,9 @@ const Input = ({
|
|||
<select
|
||||
className={`peer w-full border-b placeholder:text-transparent rtl text-sm ${
|
||||
theme == 1 ? "form-control-white" : "form-control"
|
||||
} ${style ? style : ""} relative`}
|
||||
} ${style ? style : ""} relative ${
|
||||
isRTL ? "!text-right" : "!text-left"
|
||||
}`}
|
||||
placeholder={name}
|
||||
disabled={disabled ? true : false}
|
||||
readOnly={readOnly ? true : false}
|
||||
|
@ -71,7 +76,9 @@ const Input = ({
|
|||
id={id}
|
||||
className={`peer w-full border-b placeholder:text-transparent rtl !text-sm ${
|
||||
theme == 1 ? "form-control-white" : "form-control"
|
||||
} ${style ? style : ""} relative`}
|
||||
} ${style ? style : ""} relative ${
|
||||
isRTL ? "!text-right" : "!text-left"
|
||||
}`}
|
||||
placeholder={name}
|
||||
disabled={disabled ? true : false}
|
||||
readOnly={readOnly ? true : false}
|
||||
|
@ -90,8 +97,10 @@ const Input = ({
|
|||
|
||||
<label
|
||||
htmlFor={id}
|
||||
className={`absolute right-0 mr-3 px-1 -translate-y-3 ${
|
||||
className={`absolute mr-3 px-1 -translate-y-3 ${
|
||||
theme == 1 ? "bg-white" : "bg-body-100"
|
||||
} ${
|
||||
isRTL ? "right-0" : "left-3"
|
||||
} text-sm duration-100 ease-linear peer-placeholder-shown:translate-y-[15px] peer-placeholder-shown:text-base peer-placeholder-shown:text-gray-500 peer-focus:mr-6 peer-focus:-translate-y-3 peer-focus:px-1 peer-focus:text-sm`}
|
||||
>
|
||||
{lable}
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
\************************************************************/
|
||||
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\nself.fallback = async (_)=>{\n let { destination: e, url: A } = _, s = {\n document: \"/offline\",\n image: false,\n audio: false,\n video: false,\n font: false\n }[e];\n return s ? caches.match(s, {\n ignoreSearch: !0\n }) : \"\" === e && false && 0 ? 0 : Response.error();\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGR1Y2FuaDI5MTIvbmV4dC1wd2EvZGlzdC9mYWxsYmFjay5qcyIsIm1hcHBpbmdzIjoiO0FBQUE7QUFDQSxVQUFVLHlCQUF5QjtBQUNuQyxrQkFBa0IsVUFBcUM7QUFDdkQsZUFBZSxLQUFrQztBQUNqRCxlQUFlLEtBQWtDO0FBQ2pELGVBQWUsS0FBa0M7QUFDakQsY0FBYyxLQUFpQztBQUMvQyxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUssZ0JBQWdCLEtBQWlDLElBQUksQ0FBd0MsR0FBRyxDQUUvRjtBQUNOIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9AZHVjYW5oMjkxMi9uZXh0LXB3YS9kaXN0L2ZhbGxiYWNrLmpzP2U4YjAiXSwic291cmNlc0NvbnRlbnQiOlsic2VsZi5mYWxsYmFjayA9IGFzeW5jIChfKT0+e1xuICAgIGxldCB7IGRlc3RpbmF0aW9uOiBlLCB1cmw6IEEgfSA9IF8sIHMgPSB7XG4gICAgICAgIGRvY3VtZW50OiBwcm9jZXNzLmVudi5fX1BXQV9GQUxMQkFDS19ET0NVTUVOVF9fLFxuICAgICAgICBpbWFnZTogcHJvY2Vzcy5lbnYuX19QV0FfRkFMTEJBQ0tfSU1BR0VfXyxcbiAgICAgICAgYXVkaW86IHByb2Nlc3MuZW52Ll9fUFdBX0ZBTExCQUNLX0FVRElPX18sXG4gICAgICAgIHZpZGVvOiBwcm9jZXNzLmVudi5fX1BXQV9GQUxMQkFDS19WSURFT19fLFxuICAgICAgICBmb250OiBwcm9jZXNzLmVudi5fX1BXQV9GQUxMQkFDS19GT05UX19cbiAgICB9W2VdO1xuICAgIHJldHVybiBzID8gY2FjaGVzLm1hdGNoKHMsIHtcbiAgICAgICAgaWdub3JlU2VhcmNoOiAhMFxuICAgIH0pIDogXCJcIiA9PT0gZSAmJiBwcm9jZXNzLmVudi5fX1BXQV9GQUxMQkFDS19EQVRBX18gJiYgQS5tYXRjaCgvXFwvX25leHRcXC9kYXRhXFwvLitcXC8uK1xcLmpzb24kL2kpID8gY2FjaGVzLm1hdGNoKHByb2Nlc3MuZW52Ll9fUFdBX0ZBTExCQUNLX0RBVEFfXywge1xuICAgICAgICBpZ25vcmVTZWFyY2g6ICEwXG4gICAgfSkgOiBSZXNwb25zZS5lcnJvcigpO1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@ducanh2912/next-pwa/dist/fallback.js\n"));
|
||||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\nself.fallback = async (_)=>{\n let { destination: e, url: A } = _, s = {\n document: \"/offline\",\n image: false,\n audio: false,\n video: false,\n font: false\n }[e];\n return s ? caches.match(s, {\n ignoreSearch: !0\n }) : \"\" === e && false && 0 ? 0 : Response.error();\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGR1Y2FuaDI5MTIvbmV4dC1wd2EvZGlzdC9mYWxsYmFjay5qcyIsIm1hcHBpbmdzIjoiO0FBQUE7QUFDQSxVQUFVLHlCQUF5QjtBQUNuQyxrQkFBa0IsVUFBcUM7QUFDdkQsZUFBZSxLQUFrQztBQUNqRCxlQUFlLEtBQWtDO0FBQ2pELGVBQWUsS0FBa0M7QUFDakQsY0FBYyxLQUFpQztBQUMvQyxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUssZ0JBQWdCLEtBQWlDLElBQUksQ0FBd0MsR0FBRyxDQUUvRjtBQUNOIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9AZHVjYW5oMjkxMi9uZXh0LXB3YS9kaXN0L2ZhbGxiYWNrLmpzP2NlNGIiXSwic291cmNlc0NvbnRlbnQiOlsic2VsZi5mYWxsYmFjayA9IGFzeW5jIChfKT0+e1xuICAgIGxldCB7IGRlc3RpbmF0aW9uOiBlLCB1cmw6IEEgfSA9IF8sIHMgPSB7XG4gICAgICAgIGRvY3VtZW50OiBwcm9jZXNzLmVudi5fX1BXQV9GQUxMQkFDS19ET0NVTUVOVF9fLFxuICAgICAgICBpbWFnZTogcHJvY2Vzcy5lbnYuX19QV0FfRkFMTEJBQ0tfSU1BR0VfXyxcbiAgICAgICAgYXVkaW86IHByb2Nlc3MuZW52Ll9fUFdBX0ZBTExCQUNLX0FVRElPX18sXG4gICAgICAgIHZpZGVvOiBwcm9jZXNzLmVudi5fX1BXQV9GQUxMQkFDS19WSURFT19fLFxuICAgICAgICBmb250OiBwcm9jZXNzLmVudi5fX1BXQV9GQUxMQkFDS19GT05UX19cbiAgICB9W2VdO1xuICAgIHJldHVybiBzID8gY2FjaGVzLm1hdGNoKHMsIHtcbiAgICAgICAgaWdub3JlU2VhcmNoOiAhMFxuICAgIH0pIDogXCJcIiA9PT0gZSAmJiBwcm9jZXNzLmVudi5fX1BXQV9GQUxMQkFDS19EQVRBX18gJiYgQS5tYXRjaCgvXFwvX25leHRcXC9kYXRhXFwvLitcXC8uK1xcLmpzb24kL2kpID8gY2FjaGVzLm1hdGNoKHByb2Nlc3MuZW52Ll9fUFdBX0ZBTExCQUNLX0RBVEFfXywge1xuICAgICAgICBpZ25vcmVTZWFyY2g6ICEwXG4gICAgfSkgOiBSZXNwb25zZS5lcnJvcigpO1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@ducanh2912/next-pwa/dist/fallback.js\n"));
|
||||
|
||||
/***/ })
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -16,7 +16,7 @@
|
|||
\*******************************************************************/
|
||||
/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\nself.onmessage = async (e)=>{\n switch(e.data.type){\n case \"__START_URL_CACHE__\":\n {\n let t = e.data.url, a = await fetch(t);\n if (!a.redirected) return (await caches.open(\"start-url\")).put(t, a);\n return Promise.resolve();\n }\n case \"__FRONTEND_NAV_CACHE__\":\n {\n let t = e.data.url, a = await caches.open(\"pages\");\n if (await a.match(t, {\n ignoreSearch: !0\n })) return;\n let s = await fetch(t);\n if (!s.ok) return;\n if (a.put(t, s.clone()), e.data.shouldCacheAggressively && s.headers.get(\"Content-Type\")?.includes(\"text/html\")) try {\n let e = await s.text(), t = [], a = await caches.open(\"static-style-assets\"), r = await caches.open(\"next-static-js-assets\"), c = await caches.open(\"static-js-assets\");\n for (let [s, r] of e.matchAll(/<link.*?href=['\"](.*?)['\"].*?>/g))/rel=['\"]stylesheet['\"]/.test(s) && t.push(a.match(r).then((e)=>e ? Promise.resolve() : a.add(r)));\n for (let [, a] of e.matchAll(/<script.*?src=['\"](.*?)['\"].*?>/g)){\n let e = /\\/_next\\/static.+\\.js$/i.test(a) ? r : c;\n t.push(e.match(a).then((t)=>t ? Promise.resolve() : e.add(a)));\n }\n return await Promise.all(t);\n } catch {}\n return Promise.resolve();\n }\n default:\n return Promise.resolve();\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGR1Y2FuaDI5MTIvbmV4dC1wd2EvZGlzdC9zdy1lbnRyeS13b3JrZXIuanMiLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQGR1Y2FuaDI5MTIvbmV4dC1wd2EvZGlzdC9zdy1lbnRyeS13b3JrZXIuanM/YjIzYiJdLCJzb3VyY2VzQ29udGVudCI6WyJzZWxmLm9ubWVzc2FnZSA9IGFzeW5jIChlKT0+e1xuICAgIHN3aXRjaChlLmRhdGEudHlwZSl7XG4gICAgICAgIGNhc2UgXCJfX1NUQVJUX1VSTF9DQUNIRV9fXCI6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBlLmRhdGEudXJsLCBhID0gYXdhaXQgZmV0Y2godCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhLnJlZGlyZWN0ZWQpIHJldHVybiAoYXdhaXQgY2FjaGVzLm9wZW4oXCJzdGFydC11cmxcIikpLnB1dCh0LCBhKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJfX0ZST05URU5EX05BVl9DQUNIRV9fXCI6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBlLmRhdGEudXJsLCBhID0gYXdhaXQgY2FjaGVzLm9wZW4oXCJwYWdlc1wiKTtcbiAgICAgICAgICAgICAgICBpZiAoYXdhaXQgYS5tYXRjaCh0LCB7XG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZVNlYXJjaDogITBcbiAgICAgICAgICAgICAgICB9KSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGxldCBzID0gYXdhaXQgZmV0Y2godCk7XG4gICAgICAgICAgICAgICAgaWYgKCFzLm9rKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKGEucHV0KHQsIHMuY2xvbmUoKSksIGUuZGF0YS5zaG91bGRDYWNoZUFnZ3Jlc3NpdmVseSAmJiBzLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpPy5pbmNsdWRlcyhcInRleHQvaHRtbFwiKSkgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSBhd2FpdCBzLnRleHQoKSwgdCA9IFtdLCBhID0gYXdhaXQgY2FjaGVzLm9wZW4oXCJzdGF0aWMtc3R5bGUtYXNzZXRzXCIpLCByID0gYXdhaXQgY2FjaGVzLm9wZW4oXCJuZXh0LXN0YXRpYy1qcy1hc3NldHNcIiksIGMgPSBhd2FpdCBjYWNoZXMub3BlbihcInN0YXRpYy1qcy1hc3NldHNcIik7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IFtzLCByXSBvZiBlLm1hdGNoQWxsKC88bGluay4qP2hyZWY9WydcIl0oLio/KVsnXCJdLio/Pi9nKSkvcmVsPVsnXCJdc3R5bGVzaGVldFsnXCJdLy50ZXN0KHMpICYmIHQucHVzaChhLm1hdGNoKHIpLnRoZW4oKGUpPT5lID8gUHJvbWlzZS5yZXNvbHZlKCkgOiBhLmFkZChyKSkpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBbLCBhXSBvZiBlLm1hdGNoQWxsKC88c2NyaXB0Lio/c3JjPVsnXCJdKC4qPylbJ1wiXS4qPz4vZykpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSAvXFwvX25leHRcXC9zdGF0aWMuK1xcLmpzJC9pLnRlc3QoYSkgPyByIDogYztcbiAgICAgICAgICAgICAgICAgICAgICAgIHQucHVzaChlLm1hdGNoKGEpLnRoZW4oKHQpPT50ID8gUHJvbWlzZS5yZXNvbHZlKCkgOiBlLmFkZChhKSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbCh0KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoICB7fVxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@ducanh2912/next-pwa/dist/sw-entry-worker.js\n"));
|
||||
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\nself.onmessage = async (e)=>{\n switch(e.data.type){\n case \"__START_URL_CACHE__\":\n {\n let t = e.data.url, a = await fetch(t);\n if (!a.redirected) return (await caches.open(\"start-url\")).put(t, a);\n return Promise.resolve();\n }\n case \"__FRONTEND_NAV_CACHE__\":\n {\n let t = e.data.url, a = await caches.open(\"pages\");\n if (await a.match(t, {\n ignoreSearch: !0\n })) return;\n let s = await fetch(t);\n if (!s.ok) return;\n if (a.put(t, s.clone()), e.data.shouldCacheAggressively && s.headers.get(\"Content-Type\")?.includes(\"text/html\")) try {\n let e = await s.text(), t = [], a = await caches.open(\"static-style-assets\"), r = await caches.open(\"next-static-js-assets\"), c = await caches.open(\"static-js-assets\");\n for (let [s, r] of e.matchAll(/<link.*?href=['\"](.*?)['\"].*?>/g))/rel=['\"]stylesheet['\"]/.test(s) && t.push(a.match(r).then((e)=>e ? Promise.resolve() : a.add(r)));\n for (let [, a] of e.matchAll(/<script.*?src=['\"](.*?)['\"].*?>/g)){\n let e = /\\/_next\\/static.+\\.js$/i.test(a) ? r : c;\n t.push(e.match(a).then((t)=>t ? Promise.resolve() : e.add(a)));\n }\n return await Promise.all(t);\n } catch {}\n return Promise.resolve();\n }\n default:\n return Promise.resolve();\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGR1Y2FuaDI5MTIvbmV4dC1wd2EvZGlzdC9zdy1lbnRyeS13b3JrZXIuanMiLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQGR1Y2FuaDI5MTIvbmV4dC1wd2EvZGlzdC9zdy1lbnRyeS13b3JrZXIuanM/NmM4NCJdLCJzb3VyY2VzQ29udGVudCI6WyJzZWxmLm9ubWVzc2FnZSA9IGFzeW5jIChlKT0+e1xuICAgIHN3aXRjaChlLmRhdGEudHlwZSl7XG4gICAgICAgIGNhc2UgXCJfX1NUQVJUX1VSTF9DQUNIRV9fXCI6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBlLmRhdGEudXJsLCBhID0gYXdhaXQgZmV0Y2godCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhLnJlZGlyZWN0ZWQpIHJldHVybiAoYXdhaXQgY2FjaGVzLm9wZW4oXCJzdGFydC11cmxcIikpLnB1dCh0LCBhKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJfX0ZST05URU5EX05BVl9DQUNIRV9fXCI6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBlLmRhdGEudXJsLCBhID0gYXdhaXQgY2FjaGVzLm9wZW4oXCJwYWdlc1wiKTtcbiAgICAgICAgICAgICAgICBpZiAoYXdhaXQgYS5tYXRjaCh0LCB7XG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZVNlYXJjaDogITBcbiAgICAgICAgICAgICAgICB9KSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGxldCBzID0gYXdhaXQgZmV0Y2godCk7XG4gICAgICAgICAgICAgICAgaWYgKCFzLm9rKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKGEucHV0KHQsIHMuY2xvbmUoKSksIGUuZGF0YS5zaG91bGRDYWNoZUFnZ3Jlc3NpdmVseSAmJiBzLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpPy5pbmNsdWRlcyhcInRleHQvaHRtbFwiKSkgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSBhd2FpdCBzLnRleHQoKSwgdCA9IFtdLCBhID0gYXdhaXQgY2FjaGVzLm9wZW4oXCJzdGF0aWMtc3R5bGUtYXNzZXRzXCIpLCByID0gYXdhaXQgY2FjaGVzLm9wZW4oXCJuZXh0LXN0YXRpYy1qcy1hc3NldHNcIiksIGMgPSBhd2FpdCBjYWNoZXMub3BlbihcInN0YXRpYy1qcy1hc3NldHNcIik7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IFtzLCByXSBvZiBlLm1hdGNoQWxsKC88bGluay4qP2hyZWY9WydcIl0oLio/KVsnXCJdLio/Pi9nKSkvcmVsPVsnXCJdc3R5bGVzaGVldFsnXCJdLy50ZXN0KHMpICYmIHQucHVzaChhLm1hdGNoKHIpLnRoZW4oKGUpPT5lID8gUHJvbWlzZS5yZXNvbHZlKCkgOiBhLmFkZChyKSkpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBbLCBhXSBvZiBlLm1hdGNoQWxsKC88c2NyaXB0Lio/c3JjPVsnXCJdKC4qPylbJ1wiXS4qPz4vZykpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSAvXFwvX25leHRcXC9zdGF0aWMuK1xcLmpzJC9pLnRlc3QoYSkgPyByIDogYztcbiAgICAgICAgICAgICAgICAgICAgICAgIHQucHVzaChlLm1hdGNoKGEpLnRoZW4oKHQpPT50ID8gUHJvbWlzZS5yZXNvbHZlKCkgOiBlLmFkZChhKSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbCh0KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoICB7fVxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@ducanh2912/next-pwa/dist/sw-entry-worker.js\n"));
|
||||
|
||||
/***/ })
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ import Chapar from "plugins/Chapar";
|
|||
import { toast } from "react-toastify";
|
||||
import CoffeeBrewChart from "plugins/Charts/CoffeeBrewChart";
|
||||
import NothingFound from "plugins/NothingFound/page";
|
||||
import { useLocale, useTranslations } from "next-intl";
|
||||
|
||||
const page = () => {
|
||||
const router = useRouter();
|
||||
|
@ -23,6 +24,10 @@ const page = () => {
|
|||
const [finalYield, setFinalYield] = useState("");
|
||||
const [, forceUpdate] = useState();
|
||||
|
||||
const t = useTranslations("coffee-brew");
|
||||
const locale = useLocale();
|
||||
const isRTL = locale === "fa";
|
||||
|
||||
const validator = useRef(
|
||||
new SimpleReactValidator({
|
||||
messages: {
|
||||
|
@ -101,8 +106,8 @@ const page = () => {
|
|||
{" "}
|
||||
<div className="pb-20">
|
||||
<AppHeader
|
||||
title="ادجاست قهوه"
|
||||
sub="مکانیزم ادجاست قهوه"
|
||||
title={t("title")}
|
||||
sub={t("subTitle")}
|
||||
// icon1={true}
|
||||
// iconName1="PLUS"
|
||||
// iconHref1="#"
|
||||
|
@ -120,7 +125,7 @@ const page = () => {
|
|||
<div className="bg-white overflow-hidden p-5 rtl">
|
||||
<div className="">
|
||||
<Input
|
||||
lable=" BCG | گرماژ قهوه "
|
||||
lable={t("coffeeGramInput")}
|
||||
id="ratio-id"
|
||||
theme={1}
|
||||
name="ratio"
|
||||
|
@ -142,7 +147,7 @@ const page = () => {
|
|||
</div>
|
||||
<div className="">
|
||||
<Input
|
||||
lable=" OEG | زمان عصاره گیری"
|
||||
lable={t("extractionTimeInput")}
|
||||
id="extractionTime-id"
|
||||
theme={1}
|
||||
name="extractionTime"
|
||||
|
@ -164,7 +169,7 @@ const page = () => {
|
|||
</div>
|
||||
<div className="">
|
||||
<Input
|
||||
lable="ET | گرماژ عصاره خروجی"
|
||||
lable={t("outputExtractGrammageInput")}
|
||||
id="finalYield-id"
|
||||
theme={1}
|
||||
name="finalYield"
|
||||
|
@ -187,7 +192,7 @@ const page = () => {
|
|||
<div>
|
||||
{" "}
|
||||
<Buttonbriz
|
||||
title="ثبت"
|
||||
title={t("coffeeBrewButton")}
|
||||
color="PRIMARY"
|
||||
icon="CHECK"
|
||||
buttonEvent={() => CreateBrew()}
|
||||
|
@ -198,7 +203,7 @@ const page = () => {
|
|||
coffeeBrewData?.currentRecipe?.logAt != "0001-01-01T00:00:00" ? (
|
||||
<>
|
||||
<h3 className="text-right px-3 pb-1 font-medium mt-7 text-sm">
|
||||
تاریخچه ادجاست ها
|
||||
{t("historyTitle")}
|
||||
</h3>
|
||||
<div className="flex justify-between mt-4">
|
||||
<div className=" ">
|
||||
|
@ -206,7 +211,7 @@ const page = () => {
|
|||
<div className="w-5 p-1 rounded-full bg-[#4bc0c0]"></div>
|
||||
<div>
|
||||
<p className="mb-0 text-gray-400 text-[12px] mt-1 font-medium text-center">
|
||||
گرماژ قهوه{" "}
|
||||
{t("coffeeGramChart")}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -219,7 +224,7 @@ const page = () => {
|
|||
|
||||
<div>
|
||||
<p className="mb-0 text-gray-400 text-[12px] mt-1 font-medium text-center">
|
||||
زمان عصاره گیری{" "}
|
||||
{t("extractionTimeChart")}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -232,7 +237,7 @@ const page = () => {
|
|||
|
||||
<div>
|
||||
<p className="mb-0 text-gray-400 text-[12px] mt-1 font-medium text-center">
|
||||
گرماژ عصاره خروجی{" "}
|
||||
{t("outputExtractGrammageChart")}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -23,6 +23,7 @@ import HasPermission from "plugins/HasPermission/page";
|
|||
import { useRouter } from "next/navigation";
|
||||
import TasksEmployees from "@comp/EmployeesComponent/Tasks/page";
|
||||
import BottomSheetCreateTask from "plugins/BottomSheet/BottomSheetCreateTask";
|
||||
import { useLocale, useTranslations } from "next-intl";
|
||||
|
||||
// import second from "@img/test.png";
|
||||
|
||||
|
@ -31,6 +32,10 @@ const Employees = (props) => {
|
|||
const permissions = CTX.state.profile?.permissions;
|
||||
const pageGetTasks = CTX.state.pageGetTasks;
|
||||
|
||||
const t = useTranslations("employees");
|
||||
const locale = useLocale();
|
||||
const isRTL = locale === "fa";
|
||||
|
||||
const router = useRouter();
|
||||
|
||||
const [activeSection, setActiveSection] = useState(0);
|
||||
|
@ -88,12 +93,9 @@ const Employees = (props) => {
|
|||
|
||||
return (
|
||||
<div className="pb-20">
|
||||
<AppHeader
|
||||
title=" مدیریت کارکنان و نقش ها"
|
||||
sub=" هسته اصلی تنظیمات مجموعه"
|
||||
/>
|
||||
<AppHeader title={t("title")} sub={t("subTitle")} />
|
||||
|
||||
<div className="bg-white overflow-hidden p-5 rtl">
|
||||
<div className={`bg-white overflow-hidden p-5 ${isRTL ? "rtl" : "ltr"}`}>
|
||||
{" "}
|
||||
<div
|
||||
className={` ${
|
||||
|
@ -112,8 +114,8 @@ const Employees = (props) => {
|
|||
<PersianNumber number={1} style="!text-[15px] " />
|
||||
</p>
|
||||
</div>
|
||||
<div className="pt-1 pr-2 ">
|
||||
<h4 className="text-sm font-bold">مدیریت روتین های مجموعه</h4>
|
||||
<div className="pt-2 px-2 ">
|
||||
<h4 className="text-sm font-bold">{t("routinesTitle")}</h4>
|
||||
</div>
|
||||
</div>
|
||||
{HasPermission("ManageRoutines", permissions) && (
|
||||
|
@ -121,7 +123,7 @@ const Employees = (props) => {
|
|||
{" "}
|
||||
{activeSection == 0 ? (
|
||||
<div
|
||||
className="w-[30px] h-[30px] bg-secondary-50 shadow-sm rounded-lg mt-2 ml-3 "
|
||||
className="w-[30px] h-[30px] bg-secondary-50 shadow-sm rounded-lg mt-2 mx-3 "
|
||||
onClick={() => CTX.setBottomSheetCreateRoutineOpen(true)}
|
||||
>
|
||||
<svg
|
||||
|
@ -167,8 +169,8 @@ const Employees = (props) => {
|
|||
<PersianNumber number={2} style="!text-[15px] " />
|
||||
</p>
|
||||
</div>
|
||||
<div className="pt-1 pr-2 ">
|
||||
<h4 className="text-sm font-bold">مدیریت سکشن های مجموعه</h4>
|
||||
<div className="pt-2 px-2 ">
|
||||
<h4 className="text-sm font-bold">{t("sectionsTitle")}</h4>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -176,7 +178,7 @@ const Employees = (props) => {
|
|||
<>
|
||||
{activeSection == 1 ? (
|
||||
<div
|
||||
className="w-[30px] h-[30px] bg-secondary-50 shadow-sm rounded-lg mt-2 ml-3 "
|
||||
className="w-[30px] h-[30px] bg-secondary-50 shadow-sm rounded-lg mt-2 mx-3 "
|
||||
onClick={() => CTX.setBottomSheetCreateSectionOpen(true)}
|
||||
>
|
||||
<svg
|
||||
|
@ -218,8 +220,8 @@ const Employees = (props) => {
|
|||
<PersianNumber number={3} style="!text-[15px] " />
|
||||
</p>
|
||||
</div>
|
||||
<div className="pt-1 pr-2 ">
|
||||
<h4 className="text-sm font-bold">مدیریت پوزیشن های مجموعه</h4>
|
||||
<div className="pt-2 px-2 ">
|
||||
<h4 className="text-sm font-bold">{t("positionsTitle")}</h4>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -227,7 +229,7 @@ const Employees = (props) => {
|
|||
<>
|
||||
{activeSection == 2 ? (
|
||||
<div
|
||||
className="w-[30px] h-[30px] bg-secondary-50 shadow-sm rounded-lg mt-2 ml-3 "
|
||||
className="w-[30px] h-[30px] bg-secondary-50 shadow-sm rounded-lg mt-2 mx-3 "
|
||||
onClick={() => CTX.setBottomSheetCreatePositionOpen(true)}
|
||||
>
|
||||
<svg
|
||||
|
@ -272,8 +274,8 @@ const Employees = (props) => {
|
|||
<PersianNumber number={4} style="!text-[15px] " />
|
||||
</p>
|
||||
</div>
|
||||
<div className="pt-1 pr-2 ">
|
||||
<h4 className="text-sm font-bold">مدیریت کارکنان مجموعه</h4>
|
||||
<div className="pt-2 px-2 ">
|
||||
<h4 className="text-sm font-bold">{t("staffsTitle")}</h4>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -281,7 +283,7 @@ const Employees = (props) => {
|
|||
<>
|
||||
{activeSection == 3 ? (
|
||||
<div
|
||||
className="w-[30px] h-[30px] bg-secondary-50 shadow-sm rounded-lg mt-2 ml-3 "
|
||||
className="w-[30px] h-[30px] bg-secondary-50 shadow-sm rounded-lg mt-2 mx-3 "
|
||||
onClick={() => CTX.setBottomSheetCreateEmployeesOpen(true)}
|
||||
>
|
||||
<svg
|
||||
|
@ -326,8 +328,8 @@ const Employees = (props) => {
|
|||
<PersianNumber number={5} style="!text-[15px] " />
|
||||
</p>
|
||||
</div>
|
||||
<div className="pt-1 pr-2 ">
|
||||
<h4 className="text-sm font-bold">مدیریت شیفت های مجموعه</h4>
|
||||
<div className="pt-2 px-2 ">
|
||||
<h4 className="text-sm font-bold">{t("shiftsTitle")}</h4>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -335,7 +337,7 @@ const Employees = (props) => {
|
|||
<>
|
||||
{activeSection == 4 ? (
|
||||
<div
|
||||
className="w-[30px] h-[30px] bg-secondary-50 shadow-sm rounded-lg mt-2 ml-3 "
|
||||
className="w-[30px] h-[30px] bg-secondary-50 shadow-sm rounded-lg mt-2 mx-3 "
|
||||
onClick={() => CTX.setBottomSheetCreateShiftsOpen(true)}
|
||||
>
|
||||
<svg
|
||||
|
@ -380,8 +382,8 @@ const Employees = (props) => {
|
|||
<PersianNumber number={6} style="!text-[15px] " />
|
||||
</p>
|
||||
</div>
|
||||
<div className="pt-1 pr-2 ">
|
||||
<h4 className="text-sm font-bold">افزودن تسک مجموعه</h4>
|
||||
<div className="pt-2 px-2 ">
|
||||
<h4 className="text-sm font-bold">{t("taskTitle")}</h4>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -389,7 +391,7 @@ const Employees = (props) => {
|
|||
<>
|
||||
{activeSection == 5 ? (
|
||||
<div
|
||||
className="w-[30px] h-[30px] bg-secondary-50 shadow-sm rounded-lg mt-2 ml-3 "
|
||||
className="w-[30px] h-[30px] bg-secondary-50 shadow-sm rounded-lg mt-2 mx-3 "
|
||||
onClick={() => {
|
||||
CTX.setTaskData([]);
|
||||
CTX.setIdEditTask("");
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
import AppHeader from "@comp/AppHeader/page";
|
||||
// import TaskCard from "@comp/TaskCard/page";
|
||||
import AppContext from "@ctx/AppContext";
|
||||
import Link from "next/link";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { getToken } from "plugins/Chapar";
|
||||
import ParseJwt from "plugins/ParseJwt/page";
|
||||
|
@ -19,6 +18,9 @@ import moment from "jalali-moment";
|
|||
import CoffeeBrewCard from "@comp/CoffeeBrew/CoffeeBrewCard/page";
|
||||
import FormatJalaliDate from "plugins/FormatJalaliDate/page";
|
||||
import { useState } from "react";
|
||||
import { useLocale, useTranslations } from "next-intl";
|
||||
import FormatJalaliDateEn from "plugins/FormatJalaliDateEn/page";
|
||||
import { Link } from "src/i18n/routing";
|
||||
|
||||
ChartJS.register(ArcElement, Tooltip, Legend);
|
||||
|
||||
|
@ -29,6 +31,10 @@ const Home = (props) => {
|
|||
const latesCoffeeBrewData = CTX.state.latesCoffeeBrewData;
|
||||
const profile = CTX.state.profile;
|
||||
|
||||
const t = useTranslations("homePage");
|
||||
const locale = useLocale();
|
||||
const isRTL = locale === "fa";
|
||||
|
||||
const [activeShiftPlanHome, setActiveShiftPlanHome] = useState(-1);
|
||||
|
||||
useEffect(() => {
|
||||
|
@ -76,6 +82,7 @@ const Home = (props) => {
|
|||
|
||||
const today = new Date();
|
||||
const formattedDate = FormatJalaliDate(today);
|
||||
const formattedDateEn = FormatJalaliDateEn(today);
|
||||
|
||||
console.log(latesCoffeeBrewData);
|
||||
|
||||
|
@ -95,11 +102,11 @@ const Home = (props) => {
|
|||
}
|
||||
/>
|
||||
|
||||
<div className="bg-white overflow-hidden p-5 rtl">
|
||||
<div className={`bg-white overflow-hidden p-5 ${isRTL ? "rtl" : "ltr"} `}>
|
||||
<div className="px-3 text-right flex">
|
||||
<div>
|
||||
<h3 className=" text-[14px] font-medium">
|
||||
<PersianNumber number={formattedDate} />
|
||||
<PersianNumber number={isRTL ? formattedDate : formattedDateEn} />
|
||||
</h3>
|
||||
|
||||
<p className="mb-0 text-[12px] text-gray-500">
|
||||
|
@ -114,11 +121,20 @@ const Home = (props) => {
|
|||
<div className=" p-3 rounded-2xl">
|
||||
<div>
|
||||
<p className="mb-0 text-[12px] mt-3 font-medium text-center">
|
||||
{isRTL ? (
|
||||
<PersianNumber
|
||||
number={homePageData?.totalActivitiesToday}
|
||||
style={"!text-[25px] font-bold ml-2 "}
|
||||
/>
|
||||
کل فعالیت های امروز{" "}
|
||||
) : (
|
||||
<>
|
||||
<span className="!text-[18px] font-bold mx-2">
|
||||
{" "}
|
||||
{homePageData?.totalActivitiesToday}
|
||||
</span>
|
||||
</>
|
||||
)}
|
||||
{t("activityText")}{" "}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -129,11 +145,20 @@ const Home = (props) => {
|
|||
<div className=" p-3 rounded-2xl">
|
||||
<div>
|
||||
<p className="mb-0 text-black text-[12px] mt-3 font-medium text-center">
|
||||
{isRTL ? (
|
||||
<PersianNumber
|
||||
number={homePageData?.totalShiftToday}
|
||||
style={"!text-[25px] font-bold ml-2"}
|
||||
/>
|
||||
کل شیفت های امروز{" "}
|
||||
) : (
|
||||
<>
|
||||
<span className="!text-[20px] font-bold mx-2">
|
||||
{" "}
|
||||
{homePageData?.totalShiftToday}
|
||||
</span>
|
||||
</>
|
||||
)}
|
||||
{t("shiftText")}{" "}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -150,7 +175,7 @@ const Home = (props) => {
|
|||
<Link href={"/app/coffee-brew"}>
|
||||
<div className="bg-gray-50 rounded-lg p-6 mt-3 text-center text-gray-500 ">
|
||||
<p className="bg-white p-2 w-fit mx-auto rounded-2xl text-sm">
|
||||
افزودن ادجاست جدید
|
||||
{t("addAdjust")}
|
||||
</p>
|
||||
</div>
|
||||
</Link>
|
||||
|
@ -203,11 +228,17 @@ const Home = (props) => {
|
|||
<div className=" p-1 rounded-2xl">
|
||||
<div>
|
||||
<p className="mb-0 text-black text-[12px] mt-3 font-medium text-center">
|
||||
{isRTL ? (
|
||||
<PersianNumber
|
||||
number={e.totalActivitiesCount}
|
||||
style={"!text-[22px] font-bold ml-2"}
|
||||
/>
|
||||
کل اکتیویتی های{" "}
|
||||
) : (
|
||||
<span className="!text-[18px] font-bold mx-2">
|
||||
{e.totalActivitiesCount}
|
||||
</span>
|
||||
)}
|
||||
{t("shiftBoxAllactivities")}{" "}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -215,11 +246,17 @@ const Home = (props) => {
|
|||
<div className=" p-1 rounded-2xl">
|
||||
<div>
|
||||
<p className="mb-0 text-black text-[12px] mt-3 font-medium text-center">
|
||||
{isRTL ? (
|
||||
<PersianNumber
|
||||
number={e.doneActivitiesCount}
|
||||
style={"!text-[22px] font-bold ml-2"}
|
||||
/>
|
||||
اکتیویتی انجام شده{" "}
|
||||
) : (
|
||||
<span className="!text-[18px] font-bold mx-2">
|
||||
{e.doneActivitiesCount}
|
||||
</span>
|
||||
)}
|
||||
{t("shiftBoxActivityDone")}{" "}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -227,11 +264,17 @@ const Home = (props) => {
|
|||
<div className=" p-1 pb-5 rounded-2xl">
|
||||
<div>
|
||||
<p className="mb-0 text-black text-[12px] mt-3 font-medium text-center">
|
||||
{isRTL ? (
|
||||
<PersianNumber
|
||||
number={e.undoneActivitiesCount}
|
||||
style={"!text-[22px] font-bold ml-2"}
|
||||
/>
|
||||
اکتیویتی انجام نشده{" "}
|
||||
) : (
|
||||
<span className="!text-[18px] font-bold mx-2">
|
||||
{e.undoneActivitiesCount}
|
||||
</span>
|
||||
)}
|
||||
{t("shiftBoxActivityNotDone")}{" "}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -245,6 +288,7 @@ const Home = (props) => {
|
|||
<div className="flex justify-center ">
|
||||
<div className="absolute mt-[40px]">
|
||||
<h2 className="text-lg text-black">
|
||||
{isRTL ? (
|
||||
<PersianNumber
|
||||
number={Math.floor(
|
||||
percentage(
|
||||
|
@ -253,6 +297,17 @@ const Home = (props) => {
|
|||
)
|
||||
)}
|
||||
/>
|
||||
) : (
|
||||
<>
|
||||
{Math.floor(
|
||||
percentage(
|
||||
e.totalActivitiesCount,
|
||||
e.doneActivitiesCount
|
||||
)
|
||||
)}
|
||||
</>
|
||||
)}
|
||||
|
||||
<small className="text-black text-[11px] ml-1">
|
||||
%
|
||||
</small>
|
||||
|
@ -272,14 +327,14 @@ const Home = (props) => {
|
|||
|
||||
<div className="mt-3">
|
||||
<p className="mb-0 text-black text-[12px] text-center">
|
||||
درصد پیشرفت شیفت
|
||||
{t("shiftBoxShiftPercentage")}{" "}
|
||||
</p>
|
||||
</div>
|
||||
</>
|
||||
) : (
|
||||
<div className="mt-20">
|
||||
<p className="mb-0 text-gray-200 text-[12px] text-center">
|
||||
شما شیفت بازی ندارید
|
||||
{t("shiftBoxEmpty")}{" "}
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
|
@ -312,7 +367,7 @@ const Home = (props) => {
|
|||
<div className="flex bg-primary-400 p-1 rounded-full m-1 justify-start mb-2 w-fit ">
|
||||
<div className="px-4 h-[30px] rounded-full bg-primary-200 ">
|
||||
<p className="mb-0 text-center mt-[2px] text-sm">
|
||||
سوپروایزر
|
||||
{t("surpriseText")}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
@ -328,11 +383,15 @@ const Home = (props) => {
|
|||
</>
|
||||
))}
|
||||
|
||||
<h3 className="text-right p-3 font-medium mt-4 text-sm">
|
||||
گزارش های مجموعه
|
||||
<h3
|
||||
className={` p-3 font-medium mt-4 text-sm ${
|
||||
isRTL ? "text-right" : "text-left"
|
||||
}`}
|
||||
>
|
||||
{t("historyReports")}
|
||||
</h3>
|
||||
|
||||
<div className="rtl mt-2">
|
||||
<div className={` mt-2 ${isRTL ? "rtl" : "ltr"}`}>
|
||||
<div className="flex ">
|
||||
<div className="w-[50px] h-[50px] rounded-2xl bg-white shadow">
|
||||
<svg
|
||||
|
@ -359,15 +418,15 @@ const Home = (props) => {
|
|||
</svg>
|
||||
</div>
|
||||
<div className="mx-2 mt-1" onClick={() => handleGoToReport()}>
|
||||
<h3 className="text-sm font-bold "> فعالیت ها </h3>
|
||||
<h3 className="text-sm font-bold "> {t("titleReport1")} </h3>
|
||||
<p className="mb-0 text-right text-sm text-gray-500">
|
||||
خروجی اکسل
|
||||
{t("subTitleReport1")}{" "}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="rtl mt-2">
|
||||
<div className={` mt-2 ${isRTL ? "rtl" : "ltr"}`}>
|
||||
<div className="flex ">
|
||||
<div className="w-[50px] h-[50px] rounded-2xl bg-white shadow">
|
||||
<svg
|
||||
|
@ -397,9 +456,9 @@ const Home = (props) => {
|
|||
className="mx-2 mt-1"
|
||||
onClick={() => CTX.setBottomSheetReportManageShiftOpen(true)}
|
||||
>
|
||||
<h3 className="text-sm font-bold "> شیفت های هفته</h3>
|
||||
<h3 className="text-sm font-bold "> {t("titleReport2")}</h3>
|
||||
<p className="mb-0 text-right text-sm text-gray-500">
|
||||
خروجی متن
|
||||
{t("subTitleReport2")}{" "}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -8,13 +8,15 @@ import AppContext from "@ctx/AppContext";
|
|||
import VerifyCodeStep from "@comp/LoginComponents/VerifyCodeStep";
|
||||
import SignUp from "@comp/LoginComponents/SignUp";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useTranslations } from "next-intl";
|
||||
import { useLocale, useTranslations } from "next-intl";
|
||||
|
||||
const Login = (props) => {
|
||||
const CTX = useContext(AppContext);
|
||||
const stepLogin = CTX.state.stepLogin;
|
||||
const router = useRouter();
|
||||
const t = useTranslations("login");
|
||||
const locale = useLocale();
|
||||
const isRTL = locale === "fa";
|
||||
|
||||
const [isLogoCentered, setIsLogoCentered] = useState(true);
|
||||
|
||||
|
@ -22,7 +24,13 @@ const Login = (props) => {
|
|||
if (typeof window !== "undefined") {
|
||||
const item = localStorage.token;
|
||||
if (!!item) {
|
||||
router.push("/app/home");
|
||||
router.push(
|
||||
locale === "zh"
|
||||
? "/zh/app/home"
|
||||
: locale === fa
|
||||
? "/fa/app/home"
|
||||
: "/app/home"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -70,7 +78,7 @@ const Login = (props) => {
|
|||
} transition-opacity duration-1000`}
|
||||
>
|
||||
<h2 className="text-white text-[50px] font-bold">{t("title")}</h2>
|
||||
<p className="mb-0 text-white">" "</p>
|
||||
<p className="mb-0 text-white">" {t("desc")} "</p>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
|
|
@ -4,6 +4,7 @@ import ActivityCard from "@comp/TaskPage/ActivityCard/page";
|
|||
import ActivityCardCloseShift from "@comp/TaskPage/ActivityCardCloseShift/page";
|
||||
import AppContext from "@ctx/AppContext";
|
||||
import moment from "jalali-moment";
|
||||
import { useLocale, useTranslations } from "next-intl";
|
||||
import { useParams, useSearchParams } from "next/navigation";
|
||||
import Buttonbriz from "plugins/Buttonbriz/page";
|
||||
import GoBack from "plugins/GoBack/page";
|
||||
|
@ -19,6 +20,10 @@ const CompleteShift = () => {
|
|||
const searchParams = useSearchParams();
|
||||
const day = searchParams.get("day");
|
||||
|
||||
const t = useTranslations("complete-shift");
|
||||
const locale = useLocale();
|
||||
const isRTL = locale === "fa";
|
||||
|
||||
const [closeShiftScore, setCloseShiftScore] = useState(50);
|
||||
const [activeShifPlan, setActiveShifPlan] = useState(-1);
|
||||
const [dateQueryFilterValue, setDateQueryFilterValue] = useState(1);
|
||||
|
@ -64,17 +69,30 @@ const CompleteShift = () => {
|
|||
const getTodayPersianDate = () => {
|
||||
return moment().locale("fa").format("D MMMM YYYY");
|
||||
};
|
||||
const getTodayDate = () => {
|
||||
return moment().format(" D MMMM YYYY ");
|
||||
};
|
||||
|
||||
const getYesterdayPersianDate = () => {
|
||||
const yesterday = moment().locale("fa").subtract(1, "day");
|
||||
return yesterday.format("D MMMM YYYY");
|
||||
};
|
||||
|
||||
const getYesterdayDate = () => {
|
||||
const yesterday = moment().subtract(1, "day");
|
||||
return yesterday.format("D MMMM YYYY");
|
||||
};
|
||||
|
||||
const getTomorrowPersianDate = () => {
|
||||
const tomorrow = moment().locale("fa").add(1, "day");
|
||||
return tomorrow.format("D MMMM YYYY");
|
||||
};
|
||||
|
||||
const getTomorrowDate = () => {
|
||||
const tomorrow = moment().add(1, "day");
|
||||
return tomorrow.format("D MMMM YYYY");
|
||||
};
|
||||
|
||||
//handleOpenShift
|
||||
const handleOpenShift = (isCompleted, id, index, hasCurrentShiftPlan) => {
|
||||
CTX.setStopGetActivities(false);
|
||||
|
@ -193,8 +211,8 @@ const CompleteShift = () => {
|
|||
return (
|
||||
<div className="pb-20">
|
||||
<AppHeader
|
||||
title=" عملیات بستن شیفت"
|
||||
sub="عملیات بستن شیفت برای بررسی تکمیل وظایف"
|
||||
title={t("title")}
|
||||
sub={t("subTitle")}
|
||||
icon2={true}
|
||||
iconName2="ARROW"
|
||||
iconHref2="#"
|
||||
|
@ -204,28 +222,42 @@ const CompleteShift = () => {
|
|||
/>
|
||||
|
||||
<div className="bg-white overflow-hidden px-5 rtl">
|
||||
<div className="flex overflow-auto whitespace-nowrap mb-7 mt-4">
|
||||
<div
|
||||
className={`flex overflow-auto whitespace-nowrap mb-7 mt-4 ${
|
||||
isRTL ? "rtl" : "ltr"
|
||||
}`}
|
||||
>
|
||||
<div
|
||||
className={` shadow-sm relative block max-w-max ml-2 rounded-full mt-2 px-4 py-1 tr03 border-2 ${
|
||||
dateQueryFilterValue == 2
|
||||
? " bg-primary-200 border-secondary-300"
|
||||
: "opacity-50 border-secondary-400"
|
||||
}`}
|
||||
} ${isRTL ? "rtl" : "ltr"}`}
|
||||
onClick={() => handleDayCloseShift(2)}
|
||||
>
|
||||
{isRTL ? (
|
||||
<PersianNumber number={getYesterdayPersianDate()} />
|
||||
) : (
|
||||
<>{getYesterdayDate()}</>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div
|
||||
className={` shadow-sm relative block max-w-max ml-2 rounded-full mt-2 px-4 py-1 tr03 border-2 ${
|
||||
dateQueryFilterValue == 1
|
||||
? " bg-primary-200 border-secondary-300"
|
||||
: "opacity-50 border-secondary-400"
|
||||
}`}
|
||||
} ${isRTL ? "rtl" : "ltr"}`}
|
||||
onClick={() => handleDayCloseShift(1)}
|
||||
>
|
||||
<p className="mb-0">
|
||||
{isRTL ? (
|
||||
<PersianNumber number={getTodayPersianDate()} />
|
||||
<small className="text-sm mx-2"> ( امروز )</small>
|
||||
) : (
|
||||
<>{getTodayDate()}</>
|
||||
)}
|
||||
|
||||
<small className="text-sm mx-2"> ( {t("todayText")} )</small>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
@ -234,10 +266,14 @@ const CompleteShift = () => {
|
|||
dateQueryFilterValue == 3
|
||||
? " bg-primary-200 border-secondary-300"
|
||||
: "opacity-50 border-secondary-400"
|
||||
}`}
|
||||
} ${isRTL ? "rtl" : "ltr"}`}
|
||||
onClick={() => handleDayCloseShift(3)}
|
||||
>
|
||||
{isRTL ? (
|
||||
<PersianNumber number={getTomorrowPersianDate()} />
|
||||
) : (
|
||||
<>{getTomorrowDate()}</>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -246,7 +282,7 @@ const CompleteShift = () => {
|
|||
<div
|
||||
className={`bg-gray-50 p-2 rounded-xl flex justify-between ${
|
||||
activeShifPlan == index ? "bg-gray-300 " : "bg-gray-200 "
|
||||
} `}
|
||||
} ${isRTL ? "rtl" : "ltr"} `}
|
||||
>
|
||||
<div
|
||||
className="flex w-full justify-between"
|
||||
|
@ -306,7 +342,7 @@ const CompleteShift = () => {
|
|||
>
|
||||
<p className="mb-0 text-[12px] p-1 text-white text-center mt-[2px]">
|
||||
{" "}
|
||||
گزارش{" "}
|
||||
{t("reportText")}
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
|
@ -332,7 +368,7 @@ const CompleteShift = () => {
|
|||
activeStaff == indexStaff
|
||||
? " rounded-b-0 rounded-t-xl"
|
||||
: "rounded-xl"
|
||||
}`}
|
||||
} ${isRTL ? "rtl" : "ltr"}`}
|
||||
// onClick={() => handleListTaskActive(e?.id, index)}
|
||||
>
|
||||
<p className="mb-0 text-[13px] mt-1">
|
||||
|
@ -365,7 +401,7 @@ const CompleteShift = () => {
|
|||
|
||||
<>
|
||||
{activeStaff == indexStaff && (
|
||||
<div className=" mt-3">
|
||||
<div className=" mt-3 ltr">
|
||||
{activities.length != 0 ? (
|
||||
<InfiniteScroll
|
||||
dataLength={activities.length}
|
||||
|
@ -399,7 +435,7 @@ const CompleteShift = () => {
|
|||
</div>
|
||||
|
||||
<Buttonbriz
|
||||
title={` بستن شیفت با امتیاز ${closeShiftScore}`}
|
||||
title={` ${t("completeShiftButton")} ${closeShiftScore}`}
|
||||
color="PRIMARY"
|
||||
icon="CHECK"
|
||||
buttonEvent={() => handleCloseShift()}
|
||||
|
|
|
@ -16,6 +16,7 @@ import BottomSheetAddUserToPositionShiftPlan from "plugins/BottomSheet/BottomShe
|
|||
import Buttonbriz from "plugins/Buttonbriz/page";
|
||||
import GoBack from "plugins/GoBack/page";
|
||||
import Chapar from "plugins/Chapar";
|
||||
import { useLocale, useTranslations } from "next-intl";
|
||||
|
||||
const Calendar = () => {
|
||||
const CTX = useContext(AppContext);
|
||||
|
@ -26,6 +27,10 @@ const Calendar = () => {
|
|||
const shiftPlanData = CTX.state.shiftPlanData;
|
||||
const shiftplansData = CTX.state.shiftPlansData;
|
||||
|
||||
const t = useTranslations("manage-shift");
|
||||
const locale = useLocale();
|
||||
const isRTL = locale === "fa";
|
||||
|
||||
const [daysUntilWeek, setDaysUntilWeek] = useState([]);
|
||||
const [selectDay, setSelectDay] = useState(null);
|
||||
const [selectShift, setselectShift] = useState(-1);
|
||||
|
@ -52,11 +57,15 @@ const Calendar = () => {
|
|||
const daysArray = [];
|
||||
return responseArray.map((item) => {
|
||||
const date = moment(item.dateTime).locale("fa");
|
||||
const dateEn = moment(item.dateTime);
|
||||
const isToday = date.isSame(moment(), "day");
|
||||
|
||||
daysArray.push({
|
||||
checkDay: date.format("jYYYY/jM/jD"),
|
||||
date: date.format("jD / jM"),
|
||||
checkDayEn: dateEn.format("YYYY/M/D"),
|
||||
dateEn: dateEn.format("D / M"),
|
||||
dayOfWeekEn: dateEn.format("dddd"),
|
||||
dayOfWeek: date.format("dddd"),
|
||||
isToday: isToday,
|
||||
totalShiftPercent: (item.totalShiftPlans / item.totalShifts) * 100,
|
||||
|
@ -308,15 +317,12 @@ const Calendar = () => {
|
|||
);
|
||||
}, [usersData]);
|
||||
|
||||
// console.log(
|
||||
// "hiftsCurrentDaysData[selectShift]",
|
||||
// shiftsCurrentDaysData[selectShift]
|
||||
// );
|
||||
console.log("hiftsCurrentDaysData[selectShift]", daysUntilWeek);
|
||||
return (
|
||||
<div className="pb-20">
|
||||
<AppHeader
|
||||
title=" شیفت بندی های هفتگی"
|
||||
sub={`شیفت بندی`}
|
||||
title={t("title")}
|
||||
sub={t("subTitle")}
|
||||
icon2={true}
|
||||
iconName2="ARROW"
|
||||
iconHref2="#"
|
||||
|
@ -326,20 +332,24 @@ const Calendar = () => {
|
|||
/>
|
||||
|
||||
<div className="bg-white overflow-hidden px-5 rtl">
|
||||
<div className="font-medium text-right mt-5">
|
||||
<p className="mb-0 text-sm">روتین را انتخاب کنید:</p>
|
||||
<div
|
||||
className={`font-medium mt-5 ${isRTL ? "text-right" : "text-left"}`}
|
||||
>
|
||||
<p className="mb-0 text-sm">: {t("routineTitle")}</p>
|
||||
</div>
|
||||
<div
|
||||
className="flex overflow-auto whitespace-nowrap "
|
||||
className={`flex overflow-auto whitespace-nowrap ${
|
||||
isRTL ? "rtl" : "ltr"
|
||||
}`}
|
||||
id="swich-shifts"
|
||||
>
|
||||
{routinesData?.map((e, index) => (
|
||||
<div
|
||||
className={` shadow-sm relative block max-w-max ml-2 rounded-full mt-2 px-4 py-1 tr03 border-2 ${
|
||||
className={` shadow-sm relative block max-w-max rounded-full mt-2 px-4 py-1 tr03 border-2 ${
|
||||
selectRoutine == index
|
||||
? " bg-primary-200 border-secondary-300"
|
||||
: "opacity-50 border-secondary-400"
|
||||
}`}
|
||||
} ${isRTL ? "ml-2" : "mr-2"}`}
|
||||
onClick={() => {
|
||||
if (shiftPlanSteps >= 1) {
|
||||
toast.error("برای تغییر روتین باید رفرش کنید", {
|
||||
|
@ -365,14 +375,19 @@ const Calendar = () => {
|
|||
{shiftPlanSteps >= 1 && (
|
||||
<div className=" overflow-hidden px-5 rtl mt-5 ">
|
||||
<>
|
||||
<div className="font-medium text-right ">
|
||||
<p className="mb-0 text-sm">تاریخ را انتخاب کنید:</p>
|
||||
<div
|
||||
className={`font-medium mt-5 ${
|
||||
isRTL ? "text-right" : "text-left"
|
||||
}`}
|
||||
>
|
||||
<p className="mb-0 text-sm">: {t("dateTitle")}</p>
|
||||
</div>
|
||||
<Swiper
|
||||
spaceBetween={10}
|
||||
slidesPerView={4.3}
|
||||
// onSlideChange={() => }
|
||||
// onSwiper={(swiper) => }
|
||||
className={` ${isRTL ? "rtl" : "ltr"}`}
|
||||
>
|
||||
{daysUntilWeek?.map((e, index) => (
|
||||
<SwiperSlide>
|
||||
|
@ -396,6 +411,7 @@ const Calendar = () => {
|
|||
>
|
||||
<div className="pt-3">
|
||||
<p className="mb-0 text-center ">
|
||||
{isRTL ? (
|
||||
<PersianNumber
|
||||
number={e.date}
|
||||
style={`text-[20px] ${
|
||||
|
@ -408,6 +424,9 @@ const Calendar = () => {
|
|||
: ""
|
||||
} `}
|
||||
/>
|
||||
) : (
|
||||
<>{e.dateEn}</>
|
||||
)}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
@ -418,9 +437,14 @@ const Calendar = () => {
|
|||
: " text-gray-600"
|
||||
}`}
|
||||
>
|
||||
<p className="mb-0 text-center text-sm ">
|
||||
<p
|
||||
className={`mb-0 text-center ${
|
||||
isRTL ? "" : "text-[10px]"
|
||||
}`}
|
||||
>
|
||||
{/* {PersianD.find((i) => i == e.dayOfWeek)} */}
|
||||
{e.dayOfWeek}
|
||||
|
||||
{isRTL ? e.dayOfWeek : e.dayOfWeekEn}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
@ -465,17 +489,23 @@ const Calendar = () => {
|
|||
<>
|
||||
<div className=" overflow-hidden px-5 mt-5 rtl">
|
||||
<>
|
||||
<div className="font-medium text-right ">
|
||||
<p className="mb-0 text-sm">شیفت را انتخاب کنید:</p>
|
||||
<div
|
||||
className={`font-medium mt-5 ${
|
||||
isRTL ? "text-right" : "text-left"
|
||||
}`}
|
||||
>
|
||||
<p className="mb-0 text-sm">: {t("shiftTitle")}</p>
|
||||
</div>
|
||||
{shiftsCurrentDaysData.length > 0 ? (
|
||||
<div
|
||||
className="flex overflow-auto whitespace-nowrap"
|
||||
className={`flex overflow-auto whitespace-nowrap ${
|
||||
isRTL ? "rtl" : "ltr"
|
||||
}`}
|
||||
id="swich-shifts"
|
||||
>
|
||||
{shiftsCurrentDaysData?.map((e, index) => (
|
||||
<div
|
||||
className={` shadow-sm relative block max-w-max ml-2 rounded-full mt-2 px-4 py-1 tr03 border-2 ${
|
||||
className={` shadow-sm relative block max-w-max rounded-full mt-2 px-4 py-1 tr03 border-2 ${
|
||||
selectShift == index
|
||||
? " bg-primary-200 border-secondary-300"
|
||||
: " border-secondary-400"
|
||||
|
@ -483,7 +513,7 @@ const Calendar = () => {
|
|||
e.hasCurrentShiftPlan
|
||||
? "!bg-primary-600 text-white !border-secondary-50"
|
||||
: ""
|
||||
}`}
|
||||
} ${isRTL ? "ml-2" : "mr-2"}`}
|
||||
onClick={() => {
|
||||
handleSelectShift(index);
|
||||
}}
|
||||
|
@ -496,7 +526,7 @@ const Calendar = () => {
|
|||
<div className="flex justify-center ">
|
||||
<div className="bg-gray-300 mt-5 w-fit rounded-full p-2 !px-4">
|
||||
<p className="mb-0 text-gray-600 text-sm">
|
||||
شما شیفتی دراین روز ندارید
|
||||
{t("404Shift")}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -509,7 +539,8 @@ const Calendar = () => {
|
|||
{shiftPlanSteps >= 3 && (
|
||||
<div className=" p-4 rtl sm:h-auto pb-20">
|
||||
<div className=" flex justify-start mb-5">
|
||||
<div className=" rounded-xl w-fit mr-0 px-3">
|
||||
<div className=" rounded-xl w-fit mr-0 px-3 w-full">
|
||||
{isRTL ? (
|
||||
<p className="mb-0 text-right text-sm rtl opacity-80">
|
||||
ویرایش برای{" "}
|
||||
<small className=" text-sm font-bold">
|
||||
|
@ -518,21 +549,47 @@ const Calendar = () => {
|
|||
تاریخ{" "}
|
||||
<small className=" text-sm font-bold text-primary-500 bg-white px-2 rounded-full">
|
||||
<PersianNumber
|
||||
number={daysUntilWeek && daysUntilWeek[selectDay]?.checkDay}
|
||||
number={
|
||||
daysUntilWeek && daysUntilWeek[selectDay]?.checkDay
|
||||
}
|
||||
/>
|
||||
</small>{" "}
|
||||
میباشد
|
||||
</p>
|
||||
) : (
|
||||
<p className="mb-0 text-left text-sm rtl opacity-60 ltr">
|
||||
{t("editText")} |
|
||||
<small className=" text-sm ">
|
||||
{shiftsCurrentDaysData[selectShift]?.title}
|
||||
</small>{" "}
|
||||
|
|
||||
<small className=" text-sm text-primary-500 bg-white px-2 rounded-full">
|
||||
<PersianNumber
|
||||
number={
|
||||
daysUntilWeek && daysUntilWeek[selectDay]?.checkDay
|
||||
}
|
||||
/>
|
||||
</small>{" "}
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="font-medium text-right pb-4">
|
||||
<p className="mb-0 text-sm">پرسنل را انتخاب کنید:</p>
|
||||
<div
|
||||
className={`font-medium mt-5 ${
|
||||
isRTL ? "text-right" : "text-left"
|
||||
}`}
|
||||
>
|
||||
<p className="mb-0 text-sm">: {t("personnelTitle")}</p>
|
||||
</div>
|
||||
|
||||
{positionsData.map((e) => (
|
||||
<div className="">
|
||||
<div className="flex justify-between border-b border-gray-200 p-2 ">
|
||||
<div
|
||||
className={`flex justify-between border-b border-gray-200 p-2 ${
|
||||
isRTL ? "rtl" : "ltr"
|
||||
} `}
|
||||
>
|
||||
<div className="flex p-2">
|
||||
<div className="">
|
||||
<h4 className="text-sm font-bold mt-[2px]">{e.name} </h4>
|
||||
|
@ -612,18 +669,24 @@ const Calendar = () => {
|
|||
</div>
|
||||
))}
|
||||
<div className="mt-8">
|
||||
<div className=" text-right mt-3">
|
||||
<p className="mb-0 font-medium font-sm">
|
||||
سوپروایزر را انتخاب کنید
|
||||
</p>
|
||||
<p className="mb-0 text-right text-[11px] text-secondary-700">
|
||||
شیفت توسط سوپروایزر بسته میشود لطفا برای هر شیفت آن را مشخص کنید
|
||||
<div
|
||||
className={`font-medium mt-3 ${
|
||||
isRTL ? "text-right" : "text-left"
|
||||
}`}
|
||||
>
|
||||
<p className="mb-0 text-sm">: {t("surpriseTitle")}</p>
|
||||
<p
|
||||
className={`mb-0 text-[11px] text-secondary-700 ${
|
||||
isRTL ? "text-right" : "text-left"
|
||||
}`}
|
||||
>
|
||||
{t("surpriseSubTitle")}{" "}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="">
|
||||
<Input
|
||||
lable="سوپروایزر"
|
||||
lable={t("surpriseInput")}
|
||||
id="superId-id"
|
||||
name="superId"
|
||||
type={"text"}
|
||||
|
@ -634,7 +697,7 @@ const Calendar = () => {
|
|||
style="text-right"
|
||||
select={true}
|
||||
selectData={superData}
|
||||
defaultValue={"انتخاب کنید"}
|
||||
defaultValue={t("surpriseInputDef")}
|
||||
theme={1}
|
||||
mt={5}
|
||||
/>
|
||||
|
@ -644,14 +707,14 @@ const Calendar = () => {
|
|||
<div className="mt-5">
|
||||
{editManageShift ? (
|
||||
<Buttonbriz
|
||||
title="ویرایش فعالیت"
|
||||
title={t("manageShiftEditButton")}
|
||||
color="INFO"
|
||||
icon="CHECK"
|
||||
buttonEvent={() => handleCreateShiftPlan("UPDATE")}
|
||||
/>
|
||||
) : (
|
||||
<Buttonbriz
|
||||
title="ثبت فعالیت"
|
||||
title={t("manageShiftRegButton")}
|
||||
color="PRIMARY"
|
||||
icon="CHECK"
|
||||
buttonEvent={() => handleCreateShiftPlan()}
|
||||
|
|
|
@ -4,20 +4,25 @@ import AppHeader from "@comp/AppHeader/page";
|
|||
import AppContext from "@ctx/AppContext";
|
||||
import Avatar from "boring-avatars";
|
||||
import moment from "jalali-moment";
|
||||
import { useLocale, useTranslations } from "next-intl";
|
||||
import Image from "next/image";
|
||||
import Link from "next/link";
|
||||
import { useRouter } from "next/navigation";
|
||||
import FormatJalaliDate from "plugins/FormatJalaliDate/page";
|
||||
import FormatJalaliDateEn from "plugins/FormatJalaliDateEn/page";
|
||||
import HasPermission from "plugins/HasPermission/page";
|
||||
import NothingFound from "plugins/NothingFound/page";
|
||||
import PersianNumber from "plugins/PersianNumber";
|
||||
|
||||
import React, { useContext, useEffect, useState } from "react";
|
||||
import { Link } from "src/i18n/routing";
|
||||
|
||||
const Shifts = (props) => {
|
||||
const CTX = useContext(AppContext);
|
||||
const router = useRouter();
|
||||
const permissions = CTX.state.profile?.permissions;
|
||||
const t = useTranslations("shifts");
|
||||
const locale = useLocale();
|
||||
const isRTL = locale === "fa";
|
||||
|
||||
const [shiftplans, setShiftplans] = useState([]);
|
||||
const [shiftPlansSelect, setShiftPlansSelect] = useState(0);
|
||||
|
@ -116,8 +121,8 @@ const Shifts = (props) => {
|
|||
<>
|
||||
<div className="pb-20">
|
||||
<AppHeader
|
||||
title="شیفتــــ های مجموعه"
|
||||
sub="شما 12 نفر شیفت متفاوت دارید"
|
||||
title={t("title")}
|
||||
sub={t("subTitle")}
|
||||
// icon1={true}
|
||||
// iconName1="PLUS"
|
||||
// iconHref1="#"
|
||||
|
@ -132,14 +137,16 @@ const Shifts = (props) => {
|
|||
<Link href={"/app/shifts/manage-shift"}>
|
||||
<div className="bg-secondary-950 p-4 rounded-2xl ">
|
||||
<p className="mb-0 text-center text-white text-sm font-medium">
|
||||
شیفت بندی هفته{" "}
|
||||
{t("ManageShiftButton")}
|
||||
</p>
|
||||
</div>
|
||||
</Link>
|
||||
</>
|
||||
)}
|
||||
<div
|
||||
className="flex justify-start whitespace-nowrap overflow-auto pb-4 mt-1"
|
||||
className={`flex justify-start whitespace-nowrap overflow-auto pb-4 mt-1 ${
|
||||
isRTL ? "rtl" : "ltr"
|
||||
}`}
|
||||
id="swich-shifts"
|
||||
>
|
||||
<div
|
||||
|
@ -152,7 +159,7 @@ const Shifts = (props) => {
|
|||
>
|
||||
<div className="mr-1">
|
||||
<p className="mb-0 text-[12px] text-secondary-900 font-medium">
|
||||
شیفت های هفته{" "}
|
||||
{t("weekFilter")}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -167,7 +174,7 @@ const Shifts = (props) => {
|
|||
>
|
||||
<div className="mr-1">
|
||||
<p className="mb-0 text-[12px] text-secondary-900 font-medium">
|
||||
شیفت های ماه{" "}
|
||||
{t("monthFilter")}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -182,7 +189,7 @@ const Shifts = (props) => {
|
|||
>
|
||||
<div className="mr-1">
|
||||
<p className="mb-0 text-[12px] text-secondary-900 font-medium">
|
||||
شیفت های هفته بعد{" "}
|
||||
{t("nextWeekFilter")}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -197,7 +204,7 @@ const Shifts = (props) => {
|
|||
>
|
||||
<div className="mr-1">
|
||||
<p className="mb-0 text-[12px] text-secondary-900 font-medium">
|
||||
شیفت های هفته قبل{" "}
|
||||
{t("lastWeekFilter")}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -212,7 +219,7 @@ const Shifts = (props) => {
|
|||
>
|
||||
<div className="mr-1">
|
||||
<p className="mb-0 text-[12px] text-secondary-900 font-medium">
|
||||
شیفت های ماه قبل{" "}
|
||||
{t("lastMonthkFilter")}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -227,7 +234,7 @@ const Shifts = (props) => {
|
|||
>
|
||||
<div className="mr-1">
|
||||
<p className="mb-0 text-[12px] text-secondary-900 font-medium">
|
||||
شیفت های ماه بعد{" "}
|
||||
{t("nextMonthFilter")}{" "}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -248,12 +255,16 @@ const Shifts = (props) => {
|
|||
<div
|
||||
className={`flex justify-between ${
|
||||
shiftPlansSelect == index ? "" : ""
|
||||
}`}
|
||||
} ${isRTL ? "rtl" : "ltr"}`}
|
||||
onClick={() => setShiftPlansSelect(index)}
|
||||
>
|
||||
<div className="flex">
|
||||
<PersianNumber
|
||||
number={FormatJalaliDate(e.planFor, true)}
|
||||
number={
|
||||
isRTL
|
||||
? FormatJalaliDate(e.planFor, true)
|
||||
: FormatJalaliDateEn(e.planFor, true)
|
||||
}
|
||||
/>
|
||||
<div className="w-[2px] h-5 mx-2 bg-primary-200 opacity-75 "></div>
|
||||
|
||||
|
@ -263,14 +274,14 @@ const Shifts = (props) => {
|
|||
number={e.data.length}
|
||||
style={"ml-1"}
|
||||
/>
|
||||
شیفت
|
||||
{t("shiftText")}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<p className="mb-0 mt-[-3px] mx-1">
|
||||
{checkDateStatus(e.planFor).today ? (
|
||||
<small className="!text-primary-300 ">
|
||||
(امروز)
|
||||
( {t("todayText")} )
|
||||
</small>
|
||||
) : (
|
||||
""
|
||||
|
@ -305,7 +316,11 @@ const Shifts = (props) => {
|
|||
<>
|
||||
{e.data.map((e) => (
|
||||
<div>
|
||||
<div className="flex justify-between">
|
||||
<div
|
||||
className={`flex justify-between ${
|
||||
isRTL ? "rtl" : "ltr"
|
||||
}`}
|
||||
>
|
||||
<div className="ml-2 rounded-xl mt-3 p-2">
|
||||
<p className="text-sm mb-0 text-gray-700 font-medium">
|
||||
{" "}
|
||||
|
@ -314,9 +329,15 @@ const Shifts = (props) => {
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-wrap">
|
||||
<div
|
||||
className={`flex flex-wrap ${
|
||||
isRTL ? "rtl" : "ltr"
|
||||
}`}
|
||||
>
|
||||
{e.users.map((i) => (
|
||||
<div className="flex bg-gray-50 p-1 rounded-full m-1 justify-start mb-2 w-fit ">
|
||||
<div
|
||||
className={`flex bg-gray-50 p-1 rounded-full m-1 justify-start mb-2 w-fit `}
|
||||
>
|
||||
<div className="w-[25px] h-[25px] rounded-full bg-gray-400 ">
|
||||
<Avatar
|
||||
size={25}
|
||||
|
@ -337,7 +358,7 @@ const Shifts = (props) => {
|
|||
<div className="flex bg-primary-400 p-1 rounded-full m-1 justify-start mb-2 w-fit ">
|
||||
<div className="px-4 h-[30px] rounded-full bg-primary-200 ">
|
||||
<p className="mb-0 text-center mt-[2px] text-sm">
|
||||
سوپروایزر
|
||||
{t("surpriseText")}{" "}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
@ -357,7 +378,7 @@ const Shifts = (props) => {
|
|||
>
|
||||
<div className="mt-6">
|
||||
<button className="btn bg-secondary-950 text-primary-300 w-full font-bold rounded-2xl text-sm p-3">
|
||||
بستن و تایید شیفت
|
||||
{t("closeShiftButton")}
|
||||
</button>
|
||||
</div>
|
||||
</Link>
|
||||
|
@ -367,7 +388,7 @@ const Shifts = (props) => {
|
|||
<Link href={"/app/shifts/complete-shift"}>
|
||||
<div className="mt-6">
|
||||
<button className="btn bg-secondary-950 text-primary-300 w-full font-bold rounded-2xl text-sm p-3">
|
||||
بستن و تایید شیفت
|
||||
{t("closeShiftButton")}{" "}
|
||||
</button>
|
||||
</div>
|
||||
</Link>
|
||||
|
@ -379,7 +400,7 @@ const Shifts = (props) => {
|
|||
>
|
||||
<div className="mt-6">
|
||||
<button className="btn bg-secondary-950 text-primary-300 w-full font-bold rounded-2xl text-sm p-3">
|
||||
بستن و تایید شیفت
|
||||
{t("closeShiftButton")}{" "}
|
||||
</button>
|
||||
</div>
|
||||
</Link>
|
||||
|
|
|
@ -13,11 +13,13 @@ import moment from "jalali-moment";
|
|||
import { useRouter, useSearchParams } from "next/navigation";
|
||||
import GoBack from "plugins/GoBack/page";
|
||||
import Chapar from "plugins/Chapar";
|
||||
import { useLocale } from "next-intl";
|
||||
|
||||
const AddTask = () => {
|
||||
const CTX = useContext(AppContext);
|
||||
const query = useSearchParams();
|
||||
const router = useRouter();
|
||||
const locale = useLocale();
|
||||
|
||||
const [routinesSelectData, setRoutinesSelectData] = useState([]);
|
||||
const [routineForTaskCurrent, setRoutineForTaskCurrent] = useState([]);
|
||||
|
@ -198,7 +200,13 @@ const AddTask = () => {
|
|||
window.scrollTo(0, 0);
|
||||
CTX.setStopGetTasks(false);
|
||||
CTX.setPageGetTasks(0);
|
||||
router.push("/app/tasks");
|
||||
router.push(
|
||||
locale === "zh"
|
||||
? "/zh/app/tasks"
|
||||
: locale === "fa"
|
||||
? "/fa/app/tasks"
|
||||
: "/app/tasks"
|
||||
);
|
||||
} catch ({ error, status }) {
|
||||
toast.error(`${error?.response?.data?.message}`, {
|
||||
position: "bottom-right",
|
||||
|
|
Loading…
Reference in New Issue