main
حسین معصومی پور 2024-08-26 13:38:26 +03:30
parent 8681ba8d93
commit 4fd00bbf82
26 changed files with 186 additions and 60 deletions

6
.env
View File

@ -14,9 +14,9 @@ NODE_ENV="development"
NEXT_PUBLIC_SERVER_URL=https://api.brizco.io NEXT_PUBLIC_SERVER_URL=https://api.brizco.app
NEXT_PUBLIC_PUBLIC_URL=https://api.brizco.io NEXT_PUBLIC_PUBLIC_URL=https://api.brizco.app
NEXT_PUBLIC_API_URL=https://api.brizco.io/api NEXT_PUBLIC_API_URL=https://api.brizco.app/api
# NEXT_PUBLIC_VERSION=1.0.3.4 # NEXT_PUBLIC_VERSION=1.0.3.4
# NEXT_PUBLIC_API_URL_IMAGE=https://api.macsonline.ir/Files/ReportImages # NEXT_PUBLIC_API_URL_IMAGE=https://api.macsonline.ir/Files/ReportImages
# NEXT_PUBLIC_API_URL_BackUp=https://api.macsonline.ir/Files/Back1.10 # NEXT_PUBLIC_API_URL_BackUp=https://api.macsonline.ir/Files/Back1.10

View File

@ -1,5 +1,5 @@
NODE_ENV="production" NODE_ENV="production"
NEXT_PUBLIC_SERVER_URL=https://api.brizco.io NEXT_PUBLIC_SERVER_URL=https://api.brizco.app
NEXT_PUBLIC_PUBLIC_URL=https://api.brizco.io NEXT_PUBLIC_PUBLIC_URL=https://api.brizco.app
NEXT_PUBLIC_API_URL=https://api.brizco.io/api NEXT_PUBLIC_API_URL=https://api.brizco.app/api
NEXT_PUBLIC_VERSION=1.0.3.4 NEXT_PUBLIC_VERSION=1.0.3.4

View File

@ -14,5 +14,5 @@ CMD ["/app/node_modules/.bin/next", "start"]
# docker build -f Dockerfile.emergency -t registry.vnfco.ir/brizco/web:1.0.5.6 . # docker build -f Dockerfile.emergency -t registry.vnfco.ir/brizco/web:1.0.7.9 .
# docker push registry.vnfco.ir/brizco/web:1.0.5.6 # docker push registry.vnfco.ir/brizco/web:1.0.7.9

View File

@ -37,7 +37,7 @@ const AppHeader = ({
const handlelogOut = () => { const handlelogOut = () => {
CTX.setStepLogin(0); CTX.setStepLogin(0);
localStorage.removeItem("token"); localStorage.removeItem("token");
router.push("/login"); router.push("/app/login");
}; };
const attrs = useLongPress(() => handlelogOut(), { const attrs = useLongPress(() => handlelogOut(), {
@ -130,7 +130,7 @@ const AppHeader = ({
return ( 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">
<Link href={"/acount"}> <Link href={"/app/acount"}>
<div className="flex"> <div className="flex">
{userIcon && ( {userIcon && (
<div className="w-[50px] h-[50px] rounded-full bg-white border-[5px]"> <div className="w-[50px] h-[50px] rounded-full bg-white border-[5px]">
@ -193,7 +193,7 @@ const AppHeader = ({
)} )}
{notif && ( {notif && (
<Link href={"/news"} className="ml-5"> <Link href={"/app/news"} className="ml-5">
{notifUnreadData > 0 && ( {notifUnreadData > 0 && (
<div className="absolute"> <div className="absolute">
<div className="w-3 h-3 rounded-full bg-red-300 border-2 border-black"></div> <div className="w-3 h-3 rounded-full bg-red-300 border-2 border-black"></div>

View File

@ -43,7 +43,7 @@ const NavBAr = (props) => {
<div className="bg-gray-100 rounded-t-3xl shadow py-3 flex "> <div className="bg-gray-100 rounded-t-3xl shadow py-3 flex ">
{HasPermission("ViewDashboard", permissions) && ( {HasPermission("ViewDashboard", permissions) && (
<Link href={"/home"} className="w-full !no-underline"> <Link href={"/app/home"} className="w-full !no-underline">
<> <>
{usePath.includes("/home") ? ( {usePath.includes("/home") ? (
<div className="flex justify-center w-full"> <div className="flex justify-center w-full">
@ -86,7 +86,7 @@ const NavBAr = (props) => {
</Link> </Link>
)} )}
{HasPermission("ViewShiftPlans", permissions) && ( {HasPermission("ViewShiftPlans", permissions) && (
<Link href={"/shifts"} className="w-full !no-underline"> <Link href={"/app/shifts"} className="w-full !no-underline">
<> <>
{usePath.includes("/shifts") ? ( {usePath.includes("/shifts") ? (
<div className="flex justify-center w-full"> <div className="flex justify-center w-full">
@ -144,7 +144,7 @@ const NavBAr = (props) => {
)} )}
{HasPermission("ViewComplexSettings", permissions) && ( {HasPermission("ViewComplexSettings", permissions) && (
<Link href={"/employees"} className="w-full !no-underline "> <Link href={"/app/employees"} className="w-full !no-underline ">
<> <>
{usePath.includes("/employees") ? ( {usePath.includes("/employees") ? (
<div className="flex justify-center w-full"> <div className="flex justify-center w-full">
@ -164,7 +164,7 @@ const NavBAr = (props) => {
)} )}
{HasPermission("ViewActivities", permissions) && ( {HasPermission("ViewActivities", permissions) && (
<Link href={"/tasks"} className="w-full !no-underline "> <Link href={"/app/tasks"} className="w-full !no-underline ">
<> <>
{notifUnreadData > 0 && ( {notifUnreadData > 0 && (
<div className="relative flex justify-center"> <div className="relative flex justify-center">

View File

@ -75,7 +75,7 @@ const UnderDevelopeTimer = () => {
</div> </div>
<div className="mx-2 mt-4"> <div className="mx-2 mt-4">
<Link href="/login"> <Link href="/app/login">
<div className="w-[50px] h-[50px] rounded-full bg-sky-800"> <div className="w-[50px] h-[50px] rounded-full bg-sky-800">
<p className="mb-0 text-2xl text-white font-bold pt-2"> <p className="mb-0 text-2xl text-white font-bold pt-2">
<PersianNumber number={timeRemaining.seconds} /> <PersianNumber number={timeRemaining.seconds} />

View File

@ -1,5 +1,6 @@
import { motion } from "framer-motion"; import { motion } from "framer-motion";
import Link from "next/link"; import Link from "next/link";
import MovingLogos from "./MovingLogos/page";
const Hero = () => { const Hero = () => {
return ( return (
@ -11,22 +12,31 @@ const Hero = () => {
</div> */} </div> */}
<div className=" ml-1 text-center"> <div className=" ml-1 text-center">
<h1 <div className="flex w-full justify-center">
className={`font-black text-white lg:text-[200px] sm:text-[160px] xs:text-[140px] text-[40px] mb-0 `} <small className="text-[80px] mx-2 mt-[-30px] text-primary-300">
> "
Briz </small>
</h1> <h1
className={`font-black text-white lg:text-[60px] sm:text-[160px] xs:text-[140px] text-[40px] mb-0 space-x-6 text-center `}
style={{ "word-spacing": "10px" }}
>
SIMPLE AND SMOOTH OPERATION
</h1>
<small className="text-[80px] mx-2 mt-[-30px] text-primary-300 ">
"
</small>
</div>
<p <p
className={`text-[#dfd9ff] font-medium lg:text-[30px] sm:text-[26px] xs:text-[16px] text-[16px] lg:leading-[40px] text-white-100 xs:mt-[-50px] lg:mt-[-77px]`} className={`text-gray-300 font-medium lg:text-[22px] sm:text-[26px] xs:text-[16px] text-[16px] lg:leading-[24px] text-white-100 text-center w-8/12 mx-auto `}
> >
<small className="text-[30px]">"</small> harmonious Routine A task and shift management solution for coffee shops that provides
Management <small className="text-[30px]">"</small> clear, trackable task management and monitoring of store operations.{" "}
</p> </p>
<Link href="/login"> <Link href="/app/login">
<div className="justify-center flex mt-5"> <div className="justify-center flex mt-10">
<button className="btn btn-primary rounded-full px-20 py-4 "> <button className="btn btn-primary rounded-full px-20 py-5 text-black text-lg font-bold ">
get start{" "} Get started
</button> </button>
</div> </div>
</Link> </Link>
@ -34,6 +44,17 @@ const Hero = () => {
</div> </div>
{/* <ComputersCanvas /> */} {/* <ComputersCanvas /> */}
<div className="mt-[200px]">
<p
className={`opacity-60 text-white font-light lg:text-[20px] sm:text-[26px] xs:text-[16px] text-[16px] lg:leading-[24px] text-white-100 text-center w-8/12 mx-auto `}
>
Brands that trust us and use BRIZ for their managing.
</p>
<div className=" p-5 relative overflow-hidden w-10/12 mx-auto opacity-40 fade-mask">
<MovingLogos />
</div>
</div>
</section> </section>
); );
}; };

View File

@ -0,0 +1,43 @@
"use client";
import Image from "next/image";
import logobrand1 from "@img/logo/alp.png";
import logobrand2 from "@img/logo/lam.png";
import logobrand3 from "@img/logo/tuk.png";
import logobrand4 from "@img/logo/vi.png";
import logobrand5 from "@img/logo/woo.png";
const MovingLogos = () => {
const logos = [
{ id: 1, logo: logobrand1 },
{ id: 2, logo: logobrand2 },
{ id: 3, logo: logobrand3 },
{ id: 4, logo: logobrand4 },
{ id: 5, logo: logobrand5 },
{ id: 6, logo: logobrand1 },
{ id: 7, logo: logobrand2 },
{ id: 8, logo: logobrand3 },
{ id: 9, logo: logobrand4 },
{ id: 10, logo: logobrand5 },
];
// Duplicate logos array to ensure seamless infinite scroll
const duplicatedLogos = [...logos, ...logos, ...logos]; // Tripling the logos array
return (
<div className="relative w-full overflow-hidden">
<div className="flex animate-scroll ">
{duplicatedLogos.map((e, index) => (
<div key={index} className="w-[100px] flex-shrink mx-4">
<Image
src={e.logo}
alt={`Logo ${e.id}`}
className="xs:w-[60px] lg:w-[100px] mx-10"
/>
</div>
))}
</div>
</div>
);
};
export default MovingLogos;

View File

@ -31,7 +31,7 @@ const Navbar = () => {
return ( return (
<nav <nav
className={`sm:px-16 px-6 w-full flex items-center py-5 fixed top-0 z-20 tr03 ${ className={`sm:px-16 px-6 w-full flex items-center py-5 fixed top-0 z-20 tr03 ${
scrolled ? "bg-primary-300" : "bg-transparent" scrolled ? "bg-black" : "bg-transparent"
}`} }`}
> >
<div className="w-full flex justify-between items-center max-w-7xl mx-auto"> <div className="w-full flex justify-between items-center max-w-7xl mx-auto">
@ -47,8 +47,8 @@ const Navbar = () => {
<Image <Image
src={logo2} src={logo2}
alt="ldsdogo" alt="ldsdogo"
className="w-[40px] h-[40px] object-contain " className="w-[120px] object-contain "
/> />{" "}
</Link> </Link>
<ul className="list-none hidden sm:flex flex-row gap-10 p-3 mx-10"> <ul className="list-none hidden sm:flex flex-row gap-10 p-3 mx-10">
{navLinks.map((nav) => ( {navLinks.map((nav) => (
@ -71,11 +71,13 @@ const Navbar = () => {
</ul> </ul>
</div> </div>
<Link href="/login"> <div className="flex">
<div className="border-[2px] border-primary-100 rounded-full px-10 p-2 xs:hidden lg:block tr03 cursor-pointer hover:bg-primary-300"> <Link href="/login">
<p className="mb-0 text-white ">log in</p> <button className=" btn btn-primary px-10 rounded-full py-2 xs:hidden lg:block">
</div> Get started
</Link> </button>
</Link>
</div>
<div className="sm:hidden flex flex-1 justify-end items-center"> <div className="sm:hidden flex flex-1 justify-end items-center">
<Image <Image

Binary file not shown.

Before

Width:  |  Height:  |  Size: 637 KiB

After

Width:  |  Height:  |  Size: 689 KiB

File diff suppressed because one or more lines are too long

View File

@ -142,12 +142,12 @@ const Home = (props) => {
{latesCoffeeBrewData.logBy !== "" ? ( {latesCoffeeBrewData.logBy !== "" ? (
<div className="col-span-2 mt-5"> <div className="col-span-2 mt-5">
<Link href={"/coffee-brew"}> <Link href={"/app/coffee-brew"}>
<CoffeeBrewCard data={latesCoffeeBrewData} /> <CoffeeBrewCard data={latesCoffeeBrewData} />
</Link> </Link>
</div> </div>
) : ( ) : (
<Link href={"/coffee-brew"}> <Link href={"/app/coffee-brew"}>
<div className="bg-gray-50 rounded-lg p-6 mt-3 text-center text-gray-500 "> <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"> <p className="bg-white p-2 w-fit mx-auto rounded-2xl text-sm">
افزودن ادجاست جدید افزودن ادجاست جدید

View File

@ -18,13 +18,25 @@ const Login = (props) => {
if (typeof window !== "undefined") { if (typeof window !== "undefined") {
const item = localStorage.token; const item = localStorage.token;
if (!!item) { if (!!item) {
router.push("/home"); router.push("/app/home");
} }
} }
}, []); }, []);
return ( return (
<div className="pb-5 "> <div className="pb-5 ">
<video
autoPlay
muted
controls={false}
loop
playsInline
poster="/Images/video-section-1-poster.png"
className="absolute left-0 top-0 right-0 w-screen -z-10 object-cover brightness-50 h-screen "
>
<source src={"/public/mp4/login.mp4"} type="video/mp4" />
</video>
<div className="flex rtl"> <div className="flex rtl">
<div className="w-[200px] mx-auto pt-10 "> <div className="w-[200px] mx-auto pt-10 ">
<Image src={task} className="w-[100px] mx-auto rounded-2xl" /> <Image src={task} className="w-[100px] mx-auto rounded-2xl" />

View File

@ -223,7 +223,7 @@ const Calendar = () => {
CTX.setLoading(false); CTX.setLoading(false);
GetListDaysWithShiftByRoutine(idRoutineShiftPlan); GetListDaysWithShiftByRoutine(idRoutineShiftPlan);
// router.push("/shifts"); // router.push("/app/shifts");
} catch ({ error, status }) { } catch ({ error, status }) {
toast.error(`${error?.response?.data?.message}`, { toast.error(`${error?.response?.data?.message}`, {
position: "bottom-right", position: "bottom-right",

View File

@ -129,7 +129,7 @@ const Shifts = (props) => {
<div className="bg-white overflow-hidden p-5 rtl"> <div className="bg-white overflow-hidden p-5 rtl">
{HasPermission("ManageShiftPlans", permissions) && ( {HasPermission("ManageShiftPlans", permissions) && (
<> <>
<Link href={"/shifts/manage-shift"}> <Link href={"/app/shifts/manage-shift"}>
<div className="bg-secondary-950 p-4 rounded-2xl "> <div className="bg-secondary-950 p-4 rounded-2xl ">
<p className="mb-0 text-center text-white text-sm font-medium"> <p className="mb-0 text-center text-white text-sm font-medium">
شیفت بندی هفته{" "} شیفت بندی هفته{" "}
@ -352,7 +352,9 @@ const Shifts = (props) => {
))} ))}
{checkDateStatus(e.planFor).yesterday && ( {checkDateStatus(e.planFor).yesterday && (
<Link href={"/shifts/complete-shift?day=yesterday"}> <Link
href={"/app/shifts/complete-shift?day=yesterday"}
>
<div className="mt-6"> <div className="mt-6">
<button className="btn bg-secondary-950 text-primary-300 w-full font-bold rounded-2xl text-sm p-3"> <button className="btn bg-secondary-950 text-primary-300 w-full font-bold rounded-2xl text-sm p-3">
بستن و تایید شیفت بستن و تایید شیفت
@ -362,7 +364,7 @@ const Shifts = (props) => {
)} )}
{checkDateStatus(e.planFor).today && ( {checkDateStatus(e.planFor).today && (
<Link href={"/shifts/complete-shift"}> <Link href={"/app/shifts/complete-shift"}>
<div className="mt-6"> <div className="mt-6">
<button className="btn bg-secondary-950 text-primary-300 w-full font-bold rounded-2xl text-sm p-3"> <button className="btn bg-secondary-950 text-primary-300 w-full font-bold rounded-2xl text-sm p-3">
بستن و تایید شیفت بستن و تایید شیفت
@ -372,7 +374,9 @@ const Shifts = (props) => {
)} )}
{checkDateStatus(e.planFor).tomorrow && ( {checkDateStatus(e.planFor).tomorrow && (
<Link href={"/shifts/complete-shift?day=tomorrow"}> <Link
href={"/app/shifts/complete-shift?day=tomorrow"}
>
<div className="mt-6"> <div className="mt-6">
<button className="btn bg-secondary-950 text-primary-300 w-full font-bold rounded-2xl text-sm p-3"> <button className="btn bg-secondary-950 text-primary-300 w-full font-bold rounded-2xl text-sm p-3">
بستن و تایید شیفت بستن و تایید شیفت

View File

@ -198,7 +198,7 @@ const AddTask = () => {
window.scrollTo(0, 0); window.scrollTo(0, 0);
CTX.setStopGetTasks(false); CTX.setStopGetTasks(false);
CTX.setPageGetTasks(0); CTX.setPageGetTasks(0);
router.push("/tasks"); router.push("/app/tasks");
} catch ({ error, status }) { } catch ({ error, status }) {
toast.error(`${error?.response?.data?.message}`, { toast.error(`${error?.response?.data?.message}`, {
position: "bottom-right", position: "bottom-right",

View File

@ -5,7 +5,7 @@ import AppContext from "@ctx/AppContext";
import BottomSheetCreateRoutine from "plugins/BottomSheet/BottomSheetCreateRoutine"; import BottomSheetCreateRoutine from "plugins/BottomSheet/BottomSheetCreateRoutine";
import PersianNumber from "plugins/PersianNumber"; import PersianNumber from "plugins/PersianNumber";
import React, { useContext, useEffect, useState } from "react"; import React, { useContext, useEffect, useState } from "react";
import Link from "next/link";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import ActivityCard from "@comp/TaskPage/ActivityCard/page"; import ActivityCard from "@comp/TaskPage/ActivityCard/page";
import TasksCard from "@comp/TaskPage/TasksCard/page"; import TasksCard from "@comp/TaskPage/TasksCard/page";

View File

@ -222,7 +222,7 @@ export default function RootLayout({ children }) {
position: "bottom-right", position: "bottom-right",
closeOnClick: true, closeOnClick: true,
}); });
router.push("/home"); router.push("/app/home");
} }
} catch ({ error, status }) { } catch ({ error, status }) {
toast.error(`${error?.response?.data?.message}`, { toast.error(`${error?.response?.data?.message}`, {
@ -258,7 +258,7 @@ export default function RootLayout({ children }) {
// localStorage.removeItem("token"); // localStorage.removeItem("token");
localStorage.setItem("token", data.access_token); localStorage.setItem("token", data.access_token);
router.push("/home"); router.push("/app/home");
} }
} catch ({ error, status }) { } catch ({ error, status }) {
toast.error(`${error?.response?.data?.message}`, { toast.error(`${error?.response?.data?.message}`, {
@ -1154,7 +1154,7 @@ export default function RootLayout({ children }) {
setLoading(false); setLoading(false);
router.push("/tasks"); router.push("/app/tasks");
} catch ({ error, status }) { } catch ({ error, status }) {
toast.error(`${error?.response?.data?.message}`, { toast.error(`${error?.response?.data?.message}`, {
position: "bottom-right", position: "bottom-right",
@ -1184,7 +1184,7 @@ export default function RootLayout({ children }) {
// router-> // router->
setLoading(false); setLoading(false);
router.push("/tasks"); router.push("/app/tasks");
} catch ({ error, status }) { } catch ({ error, status }) {
toast.error(`${error?.response?.data?.message}`, { toast.error(`${error?.response?.data?.message}`, {
position: "bottom-right", position: "bottom-right",
@ -1612,7 +1612,7 @@ export default function RootLayout({ children }) {
`); `);
const token = localStorage.getItem("token"); const token = localStorage.getItem("token");
// if (!token) { // if (!token) {
// router.push("/login"); // router.push("/app/login");
// } // }
if (profile.length <= 0 && token) { if (profile.length <= 0 && token) {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 139 KiB

View File

@ -1,17 +1,22 @@
export const navLinks = [ export const navLinks = [
{ {
id: "platform", id: "our-solution",
title: "platform", title: "our solution",
go: false, go: false,
}, },
{ {
id: "pricing", id: "product",
title: "pricing", title: "product",
go: true, go: true,
}, },
{ {
id: "about-us", id: "Pricing",
title: "about us", title: "Pricing",
go: true,
},
{
id: "contact-us",
title: "contact us",
go: true, go: true,
}, },
]; ];

View File

@ -14,10 +14,10 @@
} }
.btn-primary { .btn-primary {
@apply bg-secondary-950 text-primary-300; @apply bg-primary-300 text-primary-700;
} }
.btn-primary:hover { .btn-primary:hover {
@apply bg-secondary-900; @apply bg-primary-700 text-white;
} }
.btn-secondary { .btn-secondary {
@ -500,3 +500,42 @@ body {
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
} }
@keyframes scroll {
0% {
transform: translateX(0);
}
100% {
transform: translateX(-100%);
}
}
.animate-scroll {
display: flex;
width: max-content;
animation: scroll 300s linear infinite;
}
.fade-mask {
-webkit-mask-image: linear-gradient(
to right,
transparent,
black 40%,
black 50%,
black 60%,
black 70%,
black 80%,
black 90%,
transparent
);
mask-image: linear-gradient(
to right,
transparent,
black 40%,
black 50%,
black 60%,
black 70%,
black 80%,
black 90%,
transparent
);
}