fix bugs
parent
564ab216c7
commit
644f19eebe
8
.env
8
.env
|
@ -1,9 +1,9 @@
|
|||
NODE_ENV="development"
|
||||
|
||||
NEXT_PUBLIC_SERVER_URL=http://192.168.1.12:32768
|
||||
NEXT_PUBLIC_PUBLIC_URL=http://192.168.1.12:32768
|
||||
NEXT_PUBLIC_API_URL=http://192.168.1.12:32768/api
|
||||
NEXT_PUBLIC_VERSION=0.2.7
|
||||
NEXT_PUBLIC_SERVER_URL=http://192.168.1.12:32767
|
||||
NEXT_PUBLIC_PUBLIC_URL=http://192.168.1.12:32767
|
||||
NEXT_PUBLIC_API_URL=http://192.168.1.12:32767/api
|
||||
NEXT_PUBLIC_VERSION=0.3.0
|
||||
|
||||
# SECURE_LOCAL_STORAGE_HASH_KEY=f1da2b2c7a4c446934267fea631102ec389b5b99
|
||||
# NEXT_PUBLIC_API_URL_IMAGE=https://192.168.88.12:49154/Files/ReportImages
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
"use client";
|
||||
import AppContext from "@ctx/AppContext";
|
||||
import Avatar from "boring-avatars";
|
||||
import moment from "jalali-moment";
|
||||
import Buttonbriz from "plugins/Buttonbriz/page";
|
||||
import Input from "plugins/Input/page";
|
||||
import PersianNumber from "plugins/PersianNumber";
|
||||
import React, { useContext, useRef, useState } from "react";
|
||||
import SimpleReactValidator from "simple-react-validator";
|
||||
|
||||
|
@ -113,6 +115,18 @@ const ActivityCardCloseShift = ({ data }) => {
|
|||
{data?.shiftTitle}
|
||||
</div>
|
||||
</div>
|
||||
<div className=" w-fit relative text-[11px] rounded-full bg-gray-300 text-black px-2 h-fit">
|
||||
{data?.userFullName}
|
||||
</div>
|
||||
|
||||
{data?.doneAt !== "0001-01-01T00:00:00" && (
|
||||
<div className=" w-fit relative text-[11px] rounded-full bg-primary-100 text-primary-300 px-2 h-fit mr-1 mt-[-1px]">
|
||||
<PersianNumber
|
||||
number={moment(data?.doneAt).locale("fa").format("HH:mm")}
|
||||
style={"!text-[11px]"}
|
||||
/>{" "}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -276,7 +290,7 @@ const ActivityCardCloseShift = ({ data }) => {
|
|||
>
|
||||
<div className="">
|
||||
<Input
|
||||
lable="چرا انجام نشد ؟؟؟ "
|
||||
// lable="چرا انجام نشد ؟؟؟ "
|
||||
id="undoneResone-id"
|
||||
name="undoneResone"
|
||||
type={"text"}
|
||||
|
|
|
@ -21,6 +21,8 @@ const TasksCard = ({ tasksData, permissions }) => {
|
|||
}
|
||||
};
|
||||
|
||||
console.log("tasksData", tasksData.days);
|
||||
|
||||
return (
|
||||
<div className="mt-3">
|
||||
{tasksData?.map((e, index) => (
|
||||
|
@ -30,7 +32,7 @@ const TasksCard = ({ tasksData, permissions }) => {
|
|||
goToEditTask(e.id);
|
||||
}}
|
||||
>
|
||||
<div className="flex">
|
||||
<div className="flex whitespace-nowrap overflow-auto">
|
||||
{/* <div className=" w-fit relative px-2 text-[12px] my-2 mx-1 rounded-3xl text-primary-300 bg-red-200 px-2">
|
||||
<PersianNumber number={index + 1} />
|
||||
</div> */}
|
||||
|
@ -53,6 +55,17 @@ const TasksCard = ({ tasksData, permissions }) => {
|
|||
</div>
|
||||
</div>
|
||||
|
||||
{e?.days?.length > 0 && (
|
||||
<>
|
||||
{e?.days.map((s) => (
|
||||
<div className=" w-fit relative px-2 text-[12px] mr-1 rounded-full bg-primary-100 text-green-700 text-center ">
|
||||
{" "}
|
||||
{s}
|
||||
</div>
|
||||
))}
|
||||
</>
|
||||
)}
|
||||
|
||||
<div className=" w-fit relative px-2 text-[12px] mr-1 rounded-full bg-gray-300 text-gray-600 text-center ">
|
||||
{" "}
|
||||
{e?.positions[0]}
|
||||
|
|
|
@ -31,10 +31,10 @@ Chapar.interceptors.response.use(
|
|||
// Do something with response error
|
||||
// ;
|
||||
|
||||
// if (error.response.status === 401) {
|
||||
// localStorage.removeItem("token");
|
||||
// window.location.href = "/login";
|
||||
// }
|
||||
if (error.response.status === 401) {
|
||||
localStorage.removeItem("token");
|
||||
window.location.href = "/login";
|
||||
}
|
||||
|
||||
return Promise.reject({ error, status: error?.response?.status });
|
||||
}
|
||||
|
|
|
@ -92,6 +92,8 @@ const Home = (props) => {
|
|||
const today = new Date();
|
||||
const formattedDate = formatJalaliDate(today);
|
||||
|
||||
console.log(homePageData?.todayStaffNames?.slice(0, 4));
|
||||
|
||||
return (
|
||||
<div className="pb-20">
|
||||
<AppHeader
|
||||
|
@ -109,18 +111,40 @@ const Home = (props) => {
|
|||
/>
|
||||
|
||||
<div className="bg-body-100 relative top-[-30px] rounded-t-3xl overflow-hidden p-5 rtl">
|
||||
<div className="p-3 text-right flex">
|
||||
<div className="relative mt-1 ml-1 ">
|
||||
<div className="blink_me w-3 h-3 rounded-full bg-green-600 "></div>
|
||||
</div>
|
||||
<div>
|
||||
<h3 className=" text-sm font-bold">
|
||||
<PersianNumber number={formattedDate} />
|
||||
</h3>
|
||||
|
||||
<p className="mb-0 text-sm text-gray-600">
|
||||
{homePageData?.currentShift}-{homePageData?.currentPosition}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
{homePageData?.totalStaffToday > 0 && (
|
||||
<div>
|
||||
<div className="bg-white p-5 rounded-full shadow">
|
||||
<div className="bg-white pt-4 pb-5 px-5 rounded-full shadow">
|
||||
<div className="flex justify-between">
|
||||
<div className="flex mt-[-3px]">
|
||||
{homePageData?.todayStaffNames
|
||||
?.slice(0, 4)
|
||||
.map((e, index) => (
|
||||
<div
|
||||
className={`w-[50px] h-[50px] rounded-full bg-white border-[5px] absolute mr-[${
|
||||
index * 30
|
||||
}px]`}
|
||||
className={`w-[50px] h-[50px] rounded-full bg-white border-[5px] absolute ${
|
||||
index == 0
|
||||
? "avatarHomePage-0"
|
||||
: index === 1
|
||||
? "avatarHomePage-1"
|
||||
: index === 2
|
||||
? "avatarHomePage-2"
|
||||
: index === 3
|
||||
? "avatarHomePage-3"
|
||||
: "avatarHomePage-0"
|
||||
}`}
|
||||
>
|
||||
<div className=" rounded-full z-10 ">
|
||||
<Avatar
|
||||
|
@ -147,10 +171,8 @@ const Home = (props) => {
|
|||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div className="mt-5">
|
||||
<h3 className="text-right p-3 text-sm font-bold">
|
||||
<PersianNumber number={formattedDate} />
|
||||
</h3>
|
||||
<div className="grid xs:grid-cols-2 gap-4 rtl">
|
||||
<div>
|
||||
<div className="bg-dahs-chart rounded-2xl p-2 h-[195px]">
|
||||
|
|
|
@ -984,11 +984,11 @@ export default function RootLayout({ children }) {
|
|||
setLoading(false);
|
||||
}
|
||||
};
|
||||
const GetShifPlans = async (page) => {
|
||||
const GetShifPlans = async (page, dataFilter) => {
|
||||
setLoading(true);
|
||||
try {
|
||||
const data = await Chapar.get(
|
||||
`${process.env.NEXT_PUBLIC_API_URL}/shift/plan?page=${page}`,
|
||||
`${process.env.NEXT_PUBLIC_API_URL}/shift/plan?page=${page}&dateFilter=${dataFilter}`,
|
||||
{
|
||||
headers: {
|
||||
Authorization: "Bearer " + localStorage.getItem("token"),
|
||||
|
@ -1312,7 +1312,7 @@ export default function RootLayout({ children }) {
|
|||
}
|
||||
);
|
||||
|
||||
if (data.length < 14) {
|
||||
if (data.length < 19) {
|
||||
setStopGetActivities(true);
|
||||
}
|
||||
|
||||
|
@ -1584,9 +1584,9 @@ export default function RootLayout({ children }) {
|
|||
|
||||
`);
|
||||
const token = localStorage.getItem("token");
|
||||
if (!token) {
|
||||
router.push("/login");
|
||||
}
|
||||
// if (!token) {
|
||||
// router.push("/login");
|
||||
// }
|
||||
|
||||
if (profile.length <= 0 && token) CheckUser();
|
||||
}, []);
|
||||
|
|
|
@ -21,6 +21,7 @@ const CompleteShift = () => {
|
|||
const [closeShiftScore, setCloseShiftScore] = useState(50);
|
||||
const [activeShifPlan, setActiveShifPlan] = useState(-1);
|
||||
const [selectDayForShift, setSelectDayForShift] = useState(-1);
|
||||
|
||||
const currentDate = new Date();
|
||||
|
||||
const siftsData = CTX.state.shiftsData;
|
||||
|
@ -70,6 +71,8 @@ const CompleteShift = () => {
|
|||
};
|
||||
|
||||
const handleOpenShift = (isCompleted, id, index, hasCurrentShiftPlan) => {
|
||||
CTX.setStopGetActivities(false);
|
||||
CTX.setPageGetActivity(0);
|
||||
if (isCompleted) {
|
||||
toast.warning(`شیفت بسته شده است `, {
|
||||
position: "bottom-right",
|
||||
|
@ -132,6 +135,7 @@ const CompleteShift = () => {
|
|||
CTX.CloseShift(body, siftsData[activeShifPlan]?.currentShiftPlanId);
|
||||
setActiveShifPlan(-1);
|
||||
handleDayCloseShift(1);
|
||||
CTX.GetShifts(moment().locale("fa").startOf("day").unix() * 1000);
|
||||
},
|
||||
[siftsData[activeShifPlan]?.currentShiftPlanId],
|
||||
body
|
||||
|
@ -170,13 +174,34 @@ const CompleteShift = () => {
|
|||
|
||||
const handleInfiniteNextFetchActivity = () => {
|
||||
CTX.setPageGetActivity((e) => e + 1);
|
||||
CTX.GetActivity(
|
||||
moment().locale("fa").startOf("day").unix() * 1000,
|
||||
null,
|
||||
pageGetActivity + 1
|
||||
);
|
||||
|
||||
if (selectDayForShift == 0) {
|
||||
CTX.GetActivity(
|
||||
moment().locale("fa").subtract(1, "day")?.unix() * 1000,
|
||||
siftsData[activeShifPlan].id,
|
||||
pageGetActivity + 1
|
||||
);
|
||||
} else if (selectDayForShift == 1) {
|
||||
CTX.GetActivity(
|
||||
moment().locale("fa").startOf("day").unix() * 1000,
|
||||
siftsData[activeShifPlan].id,
|
||||
pageGetActivity + 1
|
||||
);
|
||||
} else if (selectDayForShift == 2) {
|
||||
CTX.GetActivity(
|
||||
moment().locale("fa").add(1, "day").unix() * 1000,
|
||||
siftsData[activeShifPlan].id,
|
||||
pageGetActivity + 1
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
console.log(siftsData[activeShifPlan]);
|
||||
console.log(
|
||||
"getYesterdayPersianDate",
|
||||
moment().locale("fa").subtract(1, "day")?.unix() * 1000
|
||||
);
|
||||
|
||||
return (
|
||||
<div className="pb-20">
|
||||
<AppHeader
|
||||
|
@ -298,7 +323,7 @@ const CompleteShift = () => {
|
|||
{activeShifPlan == index && (
|
||||
<>
|
||||
<InfiniteScroll
|
||||
dataLength={activitiesData.length}
|
||||
dataLength={siftsData[activeShifPlan]?.totalActivitiesCount}
|
||||
next={handleInfiniteNextFetchActivity}
|
||||
hasMore={!stopGetActivities}
|
||||
>
|
||||
|
|
|
@ -18,9 +18,15 @@ const Shifts = (props) => {
|
|||
|
||||
const [shiftplans, setShiftplans] = useState([]);
|
||||
const [shiftPlansSelect, setShiftPlansSelect] = useState(0);
|
||||
const [shifilterShifPlaneSelect, setFilterShifPlaneSelect] = useState(0);
|
||||
|
||||
const shiftplansData = CTX.state.shiftPlansData;
|
||||
|
||||
const handleFilterGetShifPlane = (num, index) => {
|
||||
setFilterShifPlaneSelect(index);
|
||||
CTX.GetShifPlans(0, num);
|
||||
};
|
||||
|
||||
const groupObjectsByPlanFor = (responseData) => {
|
||||
const groupedData = {};
|
||||
|
||||
|
@ -87,7 +93,8 @@ const Shifts = (props) => {
|
|||
}
|
||||
|
||||
useEffect(() => {
|
||||
CTX.GetShifPlans(0);
|
||||
CTX.GetShifPlans(0, 12);
|
||||
setFilterShifPlaneSelect(1);
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
|
@ -128,7 +135,7 @@ const Shifts = (props) => {
|
|||
{HasPermission("ManageShiftPlans", permissions) && (
|
||||
<>
|
||||
<Link href={"/shifts/manage-shift"}>
|
||||
<div className="bg-[#e29d494b] p-4 rounded-2xl mb-5 ">
|
||||
<div className="bg-[#e29d494b] p-4 rounded-2xl ">
|
||||
<p className="mb-0 text-center text-[#66451d] text-sm font-medium">
|
||||
شیفت بندی هفته{" "}
|
||||
</p>
|
||||
|
@ -136,6 +143,100 @@ const Shifts = (props) => {
|
|||
</Link>
|
||||
</>
|
||||
)}
|
||||
<div
|
||||
className="flex justify-start whitespace-nowrap overflow-auto pb-4"
|
||||
id="swich-shifts"
|
||||
>
|
||||
<div
|
||||
className={`border-2 px-2 py-1 w-fit rounded-full flex mt-2 tr03 mr-1 ${
|
||||
shifilterShifPlaneSelect == 1
|
||||
? " bg-primary-100"
|
||||
: "opacity-50 border-gray-300"
|
||||
}`}
|
||||
onClick={() => handleFilterGetShifPlane(12, 1)}
|
||||
>
|
||||
<div className="mr-1">
|
||||
<p className="mb-0 text-[12px] text-primary-300 font-medium">
|
||||
شیفت های هفته{" "}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
className={`border-2 px-2 py-1 w-fit rounded-full flex mt-2 tr03 mr-1 ${
|
||||
shifilterShifPlaneSelect == 6
|
||||
? " bg-primary-100"
|
||||
: "opacity-50 border-gray-300"
|
||||
}`}
|
||||
onClick={() => handleFilterGetShifPlane(22, 6)}
|
||||
>
|
||||
<div className="mr-1">
|
||||
<p className="mb-0 text-[12px] text-primary-300 font-medium">
|
||||
شیفت های ماه{" "}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
className={`border-2 px-2 py-1 w-fit rounded-full flex mt-2 tr03 mr-1 ${
|
||||
shifilterShifPlaneSelect == 2
|
||||
? " bg-primary-100"
|
||||
: "opacity-50 border-gray-300"
|
||||
}`}
|
||||
onClick={() => handleFilterGetShifPlane(11, 2)}
|
||||
>
|
||||
<div className="mr-1">
|
||||
<p className="mb-0 text-[12px] text-primary-300 font-medium">
|
||||
شیفت های هفته بعد{" "}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
className={`border-2 px-2 py-1 w-fit rounded-full flex mt-2 tr03 mr-1 ${
|
||||
shifilterShifPlaneSelect == 3
|
||||
? " bg-primary-100"
|
||||
: "opacity-50 border-gray-300"
|
||||
}`}
|
||||
onClick={() => handleFilterGetShifPlane(10, 3)}
|
||||
>
|
||||
<div className="mr-1">
|
||||
<p className="mb-0 text-[12px] text-primary-300 font-medium">
|
||||
شیفت های هفته قبل{" "}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
className={`border-2 px-2 py-1 w-fit rounded-full flex mt-2 tr03 mr-1 ${
|
||||
shifilterShifPlaneSelect == 4
|
||||
? " bg-primary-100"
|
||||
: "opacity-50 border-gray-300"
|
||||
}`}
|
||||
onClick={() => handleFilterGetShifPlane(20, 4)}
|
||||
>
|
||||
<div className="mr-1">
|
||||
<p className="mb-0 text-[12px] text-primary-300 font-medium">
|
||||
شیفت های ماه قبل{" "}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
className={`border-2 px-2 py-1 w-fit rounded-full flex mt-2 tr03 mr-1 ${
|
||||
shifilterShifPlaneSelect == 5
|
||||
? " bg-primary-100"
|
||||
: "opacity-50 border-gray-300"
|
||||
}`}
|
||||
onClick={() => handleFilterGetShifPlane(21, 5)}
|
||||
>
|
||||
<div className="mr-1">
|
||||
<p className="mb-0 text-[12px] text-primary-300 font-medium">
|
||||
شیفت های ماه بعد{" "}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{shiftplans.length <= 0 ? (
|
||||
<div className="flex justify-center py-5">
|
||||
<div className="bg-white shadow mt-5 w-fit rounded-full text-sm p-4">
|
||||
|
|
|
@ -112,11 +112,11 @@ const page = () => {
|
|||
</div>
|
||||
)}
|
||||
|
||||
<div
|
||||
className="flex justify-start"
|
||||
onClick={() => CTX.setBottomFilterActivitiesOpen(true)}
|
||||
>
|
||||
<div className="border-2 border-gray-300 px-2 py-1 w-fit rounded-full flex mt-2">
|
||||
<div className="flex justify-start">
|
||||
<div
|
||||
className="border-2 border-gray-300 px-2 py-1 w-fit rounded-full flex mt-2"
|
||||
onClick={() => CTX.setBottomFilterActivitiesOpen(true)}
|
||||
>
|
||||
<div>
|
||||
<svg
|
||||
width="15"
|
||||
|
|
|
@ -470,3 +470,26 @@ body {
|
|||
#c95040
|
||||
);
|
||||
}
|
||||
|
||||
.avatarHomePage-0 {
|
||||
margin-right: 0;
|
||||
}
|
||||
.avatarHomePage-1 {
|
||||
margin-right: 20px;
|
||||
}
|
||||
.avatarHomePage-2 {
|
||||
margin-right: 40px;
|
||||
}
|
||||
.avatarHomePage-3 {
|
||||
margin-right: 60px;
|
||||
}
|
||||
|
||||
.blink_me {
|
||||
animation: blinker 3s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes blinker {
|
||||
50% {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue