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_PUBLIC_URL=https://api.brizco.io
NEXT_PUBLIC_API_URL=https://api.brizco.io/api
NEXT_PUBLIC_SERVER_URL=https://api.brizco.app
NEXT_PUBLIC_PUBLIC_URL=https://api.brizco.app
NEXT_PUBLIC_API_URL=https://api.brizco.app/api
# NEXT_PUBLIC_VERSION=1.0.3.4
# NEXT_PUBLIC_API_URL_IMAGE=https://api.macsonline.ir/Files/ReportImages
# NEXT_PUBLIC_API_URL_BackUp=https://api.macsonline.ir/Files/Back1.10

View File

@ -1,5 +1,5 @@
NODE_ENV="production"
NEXT_PUBLIC_SERVER_URL=https://api.brizco.io
NEXT_PUBLIC_PUBLIC_URL=https://api.brizco.io
NEXT_PUBLIC_API_URL=https://api.brizco.io/api
NEXT_PUBLIC_SERVER_URL=https://api.brizco.app
NEXT_PUBLIC_PUBLIC_URL=https://api.brizco.app
NEXT_PUBLIC_API_URL=https://api.brizco.app/api
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 push 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.7.9

View File

@ -37,7 +37,7 @@ const AppHeader = ({
const handlelogOut = () => {
CTX.setStepLogin(0);
localStorage.removeItem("token");
router.push("/login");
router.push("/app/login");
};
const attrs = useLongPress(() => handlelogOut(), {
@ -130,7 +130,7 @@ const AppHeader = ({
return (
<div className="bg-white flex justify-between rtl pt-4 px-4 w-full">
<Link href={"/acount"}>
<Link href={"/app/acount"}>
<div className="flex">
{userIcon && (
<div className="w-[50px] h-[50px] rounded-full bg-white border-[5px]">
@ -193,7 +193,7 @@ const AppHeader = ({
)}
{notif && (
<Link href={"/news"} className="ml-5">
<Link href={"/app/news"} className="ml-5">
{notifUnreadData > 0 && (
<div className="absolute">
<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 ">
{HasPermission("ViewDashboard", permissions) && (
<Link href={"/home"} className="w-full !no-underline">
<Link href={"/app/home"} className="w-full !no-underline">
<>
{usePath.includes("/home") ? (
<div className="flex justify-center w-full">
@ -86,7 +86,7 @@ const NavBAr = (props) => {
</Link>
)}
{HasPermission("ViewShiftPlans", permissions) && (
<Link href={"/shifts"} className="w-full !no-underline">
<Link href={"/app/shifts"} className="w-full !no-underline">
<>
{usePath.includes("/shifts") ? (
<div className="flex justify-center w-full">
@ -144,7 +144,7 @@ const NavBAr = (props) => {
)}
{HasPermission("ViewComplexSettings", permissions) && (
<Link href={"/employees"} className="w-full !no-underline ">
<Link href={"/app/employees"} className="w-full !no-underline ">
<>
{usePath.includes("/employees") ? (
<div className="flex justify-center w-full">
@ -164,7 +164,7 @@ const NavBAr = (props) => {
)}
{HasPermission("ViewActivities", permissions) && (
<Link href={"/tasks"} className="w-full !no-underline ">
<Link href={"/app/tasks"} className="w-full !no-underline ">
<>
{notifUnreadData > 0 && (
<div className="relative flex justify-center">

View File

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

View File

@ -1,5 +1,6 @@
import { motion } from "framer-motion";
import Link from "next/link";
import MovingLogos from "./MovingLogos/page";
const Hero = () => {
return (
@ -11,22 +12,31 @@ const Hero = () => {
</div> */}
<div className=" ml-1 text-center">
<div className="flex w-full justify-center">
<small className="text-[80px] mx-2 mt-[-30px] text-primary-300">
"
</small>
<h1
className={`font-black text-white lg:text-[200px] sm:text-[160px] xs:text-[140px] text-[40px] mb-0 `}
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" }}
>
Briz
SIMPLE AND SMOOTH OPERATION
</h1>
<small className="text-[80px] mx-2 mt-[-30px] text-primary-300 ">
"
</small>
</div>
<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
Management <small className="text-[30px]">"</small>
A task and shift management solution for coffee shops that provides
clear, trackable task management and monitoring of store operations.{" "}
</p>
<Link href="/login">
<div className="justify-center flex mt-5">
<button className="btn btn-primary rounded-full px-20 py-4 ">
get start{" "}
<Link href="/app/login">
<div className="justify-center flex mt-10">
<button className="btn btn-primary rounded-full px-20 py-5 text-black text-lg font-bold ">
Get started
</button>
</div>
</Link>
@ -34,6 +44,17 @@ const Hero = () => {
</div>
{/* <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>
);
};

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 (
<nav
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">
@ -47,8 +47,8 @@ const Navbar = () => {
<Image
src={logo2}
alt="ldsdogo"
className="w-[40px] h-[40px] object-contain "
/>
className="w-[120px] object-contain "
/>{" "}
</Link>
<ul className="list-none hidden sm:flex flex-row gap-10 p-3 mx-10">
{navLinks.map((nav) => (
@ -71,11 +71,13 @@ const Navbar = () => {
</ul>
</div>
<div className="flex">
<Link href="/login">
<div className="border-[2px] border-primary-100 rounded-full px-10 p-2 xs:hidden lg:block tr03 cursor-pointer hover:bg-primary-300">
<p className="mb-0 text-white ">log in</p>
</div>
<button className=" btn btn-primary px-10 rounded-full py-2 xs:hidden lg:block">
Get started
</button>
</Link>
</div>
<div className="sm:hidden flex flex-1 justify-end items-center">
<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 !== "" ? (
<div className="col-span-2 mt-5">
<Link href={"/coffee-brew"}>
<Link href={"/app/coffee-brew"}>
<CoffeeBrewCard data={latesCoffeeBrewData} />
</Link>
</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 ">
<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") {
const item = localStorage.token;
if (!!item) {
router.push("/home");
router.push("/app/home");
}
}
}, []);
return (
<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="w-[200px] mx-auto pt-10 ">
<Image src={task} className="w-[100px] mx-auto rounded-2xl" />

View File

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

View File

@ -129,7 +129,7 @@ const Shifts = (props) => {
<div className="bg-white overflow-hidden p-5 rtl">
{HasPermission("ManageShiftPlans", permissions) && (
<>
<Link href={"/shifts/manage-shift"}>
<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">
شیفت بندی هفته{" "}
@ -352,7 +352,9 @@ const Shifts = (props) => {
))}
{checkDateStatus(e.planFor).yesterday && (
<Link href={"/shifts/complete-shift?day=yesterday"}>
<Link
href={"/app/shifts/complete-shift?day=yesterday"}
>
<div className="mt-6">
<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 && (
<Link href={"/shifts/complete-shift"}>
<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">
بستن و تایید شیفت
@ -372,7 +374,9 @@ const Shifts = (props) => {
)}
{checkDateStatus(e.planFor).tomorrow && (
<Link href={"/shifts/complete-shift?day=tomorrow"}>
<Link
href={"/app/shifts/complete-shift?day=tomorrow"}
>
<div className="mt-6">
<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);
CTX.setStopGetTasks(false);
CTX.setPageGetTasks(0);
router.push("/tasks");
router.push("/app/tasks");
} catch ({ error, status }) {
toast.error(`${error?.response?.data?.message}`, {
position: "bottom-right",

View File

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

View File

@ -222,7 +222,7 @@ export default function RootLayout({ children }) {
position: "bottom-right",
closeOnClick: true,
});
router.push("/home");
router.push("/app/home");
}
} catch ({ error, status }) {
toast.error(`${error?.response?.data?.message}`, {
@ -258,7 +258,7 @@ export default function RootLayout({ children }) {
// localStorage.removeItem("token");
localStorage.setItem("token", data.access_token);
router.push("/home");
router.push("/app/home");
}
} catch ({ error, status }) {
toast.error(`${error?.response?.data?.message}`, {
@ -1154,7 +1154,7 @@ export default function RootLayout({ children }) {
setLoading(false);
router.push("/tasks");
router.push("/app/tasks");
} catch ({ error, status }) {
toast.error(`${error?.response?.data?.message}`, {
position: "bottom-right",
@ -1184,7 +1184,7 @@ export default function RootLayout({ children }) {
// router->
setLoading(false);
router.push("/tasks");
router.push("/app/tasks");
} catch ({ error, status }) {
toast.error(`${error?.response?.data?.message}`, {
position: "bottom-right",
@ -1612,7 +1612,7 @@ export default function RootLayout({ children }) {
`);
const token = localStorage.getItem("token");
// if (!token) {
// router.push("/login");
// router.push("/app/login");
// }
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 = [
{
id: "platform",
title: "platform",
id: "our-solution",
title: "our solution",
go: false,
},
{
id: "pricing",
title: "pricing",
id: "product",
title: "product",
go: true,
},
{
id: "about-us",
title: "about us",
id: "Pricing",
title: "Pricing",
go: true,
},
{
id: "contact-us",
title: "contact us",
go: true,
},
];

View File

@ -14,10 +14,10 @@
}
.btn-primary {
@apply bg-secondary-950 text-primary-300;
@apply bg-primary-300 text-primary-700;
}
.btn-primary:hover {
@apply bg-secondary-900;
@apply bg-primary-700 text-white;
}
.btn-secondary {
@ -500,3 +500,42 @@ body {
white-space: nowrap;
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
);
}