.app add
parent
8681ba8d93
commit
4fd00bbf82
6
.env
6
.env
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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>
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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} />
|
||||
|
|
|
@ -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>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -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;
|
|
@ -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
|
@ -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">
|
||||
افزودن ادجاست جدید
|
|
@ -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" />
|
|
@ -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",
|
|
@ -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">
|
||||
بستن و تایید شیفت
|
|
@ -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",
|
|
@ -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";
|
|
@ -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 |
|
@ -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,
|
||||
},
|
||||
];
|
||||
|
|
|
@ -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
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue