Compare commits

...

20 Commits

Author SHA1 Message Date
Mikola
1576b23215 choose project 2024-02-15 15:37:15 +03:00
Mikola
0880d27aea choose project 2024-02-15 15:36:13 +03:00
adc80d4cb0 Merge pull request 'trackerTask' (#20) from trackerTask into main
Reviewed-on: #20
2024-02-15 15:24:19 +03:00
Victor Batischev
65ca1c32ff Merge branch 'main' of https://git.itguild.info/apuc/guild_front 2024-02-15 14:29:35 +03:00
Victor Batischev
26b27129fd footer layout 2024-02-15 14:29:00 +03:00
8525445e18 - 2024-02-15 13:30:44 +03:00
954f696044 Merge branch 'main' of https://git.itguild.info/apuc/guild_front
-
2024-02-15 13:30:13 +03:00
181bbc834a - 2024-02-15 13:26:44 +03:00
e2bce6fd38 add mobile burger-menu 2024-02-15 13:25:57 +03:00
Victor Batischev
42cae241f2 fix 2024-02-14 19:32:51 +03:00
Victor Batischev
140adb0051 pages rename 2024-02-14 19:32:13 +03:00
Victor Batischev
0fc8f68c79 font family 2024-02-14 18:46:53 +03:00
Victor Batischev
795f92fe61 styles 2024-02-14 18:39:47 +03:00
Victor Batischev
59a279f924 Merge branch 'main' of https://git.itguild.info/apuc/guild_front 2024-02-14 16:34:35 +03:00
Victor Batischev
2268e6e281 layout rework in progress 2024-02-14 16:34:12 +03:00
4ea80eb460 Merge pull request 'trackerTask' (#19) from trackerTask into main
Reviewed-on: #19
2024-02-14 16:27:29 +03:00
Victor Batischev
12dd238c13 start footer rework 2024-02-14 16:22:15 +03:00
Victor Batischev
ef6d8f4331 rework footer layout 2024-02-14 16:09:09 +03:00
Victor Batischev
97813c875c employee flex container 2024-02-14 15:40:58 +03:00
2e0f6d24a0 Merge pull request 'trackerTask' (#18) from trackerTask into main
Reviewed-on: #18
2024-02-14 15:00:33 +03:00
93 changed files with 971 additions and 783 deletions

View File

@ -1,63 +1,64 @@
import "bootstrap/dist/css/bootstrap.min.css";
import React from "react";
import { useSelector } from "react-redux";
import {
BrowserRouter as Router,
Route,
Routes,
Navigate,
Route,
BrowserRouter as Router,
Routes
} from "react-router-dom";
import { getNotification } from "@redux/outstaffingSlice";
import Auth from "./pages/Auth/Auth";
import { AuthForCandidate } from "@pages/AuthForCandidate/AuthForCandidate";
import CatalogSpecialists from "@pages/CatalogSpecialists/CatalogSpecialists";
import { TrackerIntro } from "@pages/TrackerIntro/TrackerIntro"
import { CompanyInfo } from "@pages/CompanyInfo/CompanyInfo";
import { TrackerAuth } from "@pages/TrackerAuth/TrackerAuth";
import { TrackerRegistration } from "@pages/TrackerRegistration/TrackerRegistration";
import Home from "./pages/Home/Home";
import Candidate from "./components/Candidate/Candidate";
import Calendar from "./components/Calendar/Calendar";
import ReportForm from "./components/ReportForm/ReportForm";
import FreeDevelopers from "./components/FreeDevelopers/FreeDevelopers";
import { TicketFullScreen } from "@components/Modal/Tracker/TicketFullScreen/TicketFullScreen";
import { ProfileCalendar } from "@components/ProfileCalendar/ProfileCalendar";
import { RegistrationSetting } from "@pages/RegistrationSetting/RegistrationSetting";
import Article from "./pages/Article/Article";
import FormPage from "./pages/FormPage/FormPage";
import SingleReportPage from "./pages/SingleReportPage/SingleReportPage";
import { QuizPage } from "@pages/Quiz/QuizPage";
import { QuizReportPage } from "@pages/Quiz/QuizReportPage";
import { Profile } from "@pages/Profile/Profile";
import { Summary } from "@pages/Summary/Summary";
import { ViewReport } from "@pages/ViewReport/ViewReport";
import { Tracker } from "@pages/Tracker/Tracker";
import { Payouts } from "@pages/Payouts/Payouts";
import { PartnerSettings } from "@pages/PartnerSettings/PartnerSettings";
import { PartnerRequests } from "@pages/PartnerRequests/PartnerRequests";
import { FrequentlyAskedQuestion } from "@pages/FrequentlyAskedQuestion/FrequentlyAskedQuestion";
import { FrequentlyAskedQuestions } from "@pages/FrequentlyAskedQuestions/FrequentlyAskedQuestions";
import { PartnerAddRequest } from "@pages/PartnerAddRequest/PartnerAddRequest";
import { PartnerBid } from "@pages/PartnerBid/PartnerBid";
import { PartnerCategories } from "@pages/PartnerСategories/PartnerСategories";
import { PartnerTreaties } from "@pages/PartnerTreaties/PartnerTreaties";
import { PartnerEmployees } from "@pages/PartnerEmployees/PartnerEmployees";
import { AuthForCandidate } from "@pages/AuthForCandidate/AuthForCandidate";
import { RegistrationForCandidate } from "@pages/RegistrationForCandidate/RegistrationForCandidate";
import { ProfileCandidate } from "@pages/ProfileCandidate/ProfileCandidate";
import { PartnerEmployeeReport } from "@pages/PartnerEmployeeReport/PartnerEmployeeReport";
import { PassingTests } from "@pages/Quiz/PassingTests";
import Blog from "./pages/Blog/Blog";
import Statistics from "@pages/Statistics/Statistics";
import { PartnerEmployees } from "@pages/PartnerEmployees/PartnerEmployees";
import { PartnerRequests } from "@pages/PartnerRequests/PartnerRequests";
import { PartnerSettings } from "@pages/PartnerSettings/PartnerSettings";
import { PartnerTreaties } from "@pages/PartnerTreaties/PartnerTreaties";
import { PartnerCategories } from "@pages/PartnerСategories/PartnerСategories";
import { Payouts } from "@pages/Payouts/Payouts";
import { Profile } from "@pages/Profile/Profile";
import { ProfileCandidate } from "@pages/ProfileCandidate/ProfileCandidate";
import { ProjectTracker } from "@pages/ProjectTracker/ProjectTracker";
import { FrequentlyAskedQuestions } from "@pages/FrequentlyAskedQuestions/FrequentlyAskedQuestions";
import { FrequentlyAskedQuestion } from "@pages/FrequentlyAskedQuestion/FrequentlyAskedQuestion";
import Notification from "@components/Notification/Notification";
import { useSelector } from "react-redux";
import { PassingTests } from "@pages/Quiz/PassingTests";
import { QuizPage } from "@pages/Quiz/QuizPage";
import { QuizReportPage } from "@pages/Quiz/QuizReportPage";
import { RegistrationForCandidate } from "@pages/RegistrationForCandidate/RegistrationForCandidate";
import { RegistrationSetting } from "@pages/RegistrationSetting/RegistrationSetting";
import Statistics from "@pages/Statistics/Statistics";
import { Summary } from "@pages/Summary/Summary";
import { Tracker } from "@pages/Tracker/Tracker";
import { TrackerAuth } from "@pages/TrackerAuth/TrackerAuth";
import { TrackerIntro } from "@pages/TrackerIntro/TrackerIntro";
import { TrackerRegistration } from "@pages/TrackerRegistration/TrackerRegistration";
import { ViewReport } from "@pages/ViewReport/ViewReport";
import { TicketFullScreen } from "@components/Modal/Tracker/TicketFullScreen/TicketFullScreen";
import Notification from "@components/Notification/Notification";
import { ProfileCalendar } from "@components/ProfileCalendar/ProfileCalendar";
import "./assets/global.scss";
import "./assets/fonts/stylesheet.css";
import "bootstrap/dist/css/bootstrap.min.css";
import "./assets/global.scss";
import Calendar from "./components/Calendar/Calendar";
import Candidate from "./components/Candidate/Candidate";
import FreeDevelopers from "./components/FreeDevelopers/FreeDevelopers";
import ReportForm from "./components/ReportForm/ReportForm";
import Article from "./pages/Article/Article";
import Auth from "./pages/Auth/Auth";
import Blog from "./pages/Blog/Blog";
import FormPage from "./pages/FormPage/FormPage";
import Home from "./pages/Home/Home";
import SingleReportPage from "./pages/SingleReportPage/SingleReportPage";
const App = () => {
const notification = useSelector(getNotification)
const notification = useSelector(getNotification);
return (
<>
<Router>
@ -65,10 +66,22 @@ const App = () => {
<Route exact path="/auth" element={<Auth />} />
<Route exact path="/tracker-intro" element={<TrackerIntro />} />
<Route exact path="/tracker-auth" element={<TrackerAuth />} />
<Route exact path="/tracker-registration" element={<TrackerRegistration />} />
<Route
exact
path="/tracker-registration"
element={<TrackerRegistration />}
/>
<Route exact path="/company" element={<CompanyInfo />} />
<Route exact path="/registration-setting" element={<RegistrationSetting />} />
<Route exact path="/catalog-specialists" element={<CatalogSpecialists />} />
<Route
exact
path="/registration-setting"
element={<RegistrationSetting />}
/>
<Route
exact
path="/catalog-specialists"
element={<CatalogSpecialists />}
/>
<Route exact path="/worker/:id" element={<FreeDevelopers />} />
<Route
@ -113,10 +126,14 @@ const App = () => {
<Route exact path="catalog" element={<Home />} />
<Route exact path="calendar" element={<ProfileCalendar />} />
<Route exact path="calendar/report" element={<ReportForm />} />
<Route exact path="calendar/view/:date/:id" element={<ViewReport />} />
<Route
exact
path="calendar/view/:date/:id"
element={<ViewReport />}
/>
<Route exact path="summary" element={<Summary />} />
<Route exact path="tracker" element={<Tracker />} />
<Route exact path="statistics/:id" element={<Statistics/>}/>
<Route exact path="statistics/:id" element={<Statistics />} />
<Route exact path="payouts" element={<Payouts />} />
<Route exact path="settings" element={<PartnerSettings />} />
<Route exact path="requests" element={<PartnerRequests />} />
@ -124,7 +141,11 @@ const App = () => {
<Route exact path="requests-edit" element={<PartnerAddRequest />} />
<Route exact path="requests-bid" element={<PartnerBid />} />
<Route exact path="employees" element={<PartnerCategories />} />
<Route exact path="employees/report/:uuid" element={<PartnerEmployeeReport />} />
<Route
exact
path="employees/report/:uuid"
element={<PartnerEmployeeReport />}
/>
<Route exact path="treaties" element={<PartnerTreaties />} />
<Route exact path="quiz">
<Route index element={<QuizPage />} />
@ -139,7 +160,6 @@ const App = () => {
/>
</Route>
<Route exact path="profile-candidate/:id">
<Route index element={<ProfileCandidate />} />
</Route>
@ -147,9 +167,7 @@ const App = () => {
<Route path="*" element={<Navigate to="/auth" replace />} />
</Routes>
</Router>
{notification.show &&
<Notification />
}
{notification.show && <Notification />}
</>
);
};

View File

@ -1,6 +1,6 @@
import React from "react";
import { getCorrectDate } from "@components/Calendar/calendarHelper";
import { getCorrectDate } from "@utils/calendarHelper";
import "./archiveTasksItem.scss";

View File

@ -11,9 +11,9 @@ import { LogoutButton } from "@components/LogoutButton/LogoutButton";
import rectangle from "assets/images/rectangle_secondPage.png";
import { currentMonth } from "../../utils/calendarHelper";
import CalendarComponent from "./CalendarComponent";
import "./calendar.scss";
import { currentMonth } from "./calendarHelper";
const Calendar = () => {
if (localStorage.getItem("role_status") !== "18") {
@ -79,8 +79,8 @@ const Calendar = () => {
</p>
</div>
</div>
<Footer />
</section>
<Footer />
</div>
);
};

View File

@ -6,8 +6,8 @@ import calendarIcon from "assets/icons/calendar.svg";
import ellipse from "assets/icons/ellipse.png";
import rectangle from "assets/images/rectangle__calendar.png";
import { calendarHelper, currentMonthAndDay } from "../../utils/calendarHelper";
import "./calendarComponent.scss";
import { calendarHelper, currentMonthAndDay } from "./calendarHelper";
const CalendarComponent = ({ onSelect }) => {
const [value, setValue] = useState(moment());

View File

@ -1,6 +1,5 @@
.calendar {
margin-bottom: 40px;
font-family: "LabGrotesque", sans-serif;
&__header {
display: flex;
@ -136,10 +135,6 @@
line-height: normal;
}
}
footer {
margin-top: 2rem !important;
}
}
@media (max-width: 575.98px) {

View File

@ -3,7 +3,6 @@
margin: 10px 0;
background-color: #f9f9f9;
padding: 20px 30px;
font-family: "LabGrotesque", sans-serif;
&__header {
display: flex;

View File

@ -233,8 +233,8 @@ const Candidate = () => {
)}
</div>
</div>
<Footer />
</div>
<Footer />
</div>
);
};

View File

@ -148,12 +148,6 @@
}
}
}
footer {
margin-top: 2.5rem !important;
position: relative;
z-index: -2;
}
}
@media (max-width: 375.98px) {

View File

@ -6,7 +6,6 @@
border-radius: 44px;
color: white;
font-style: normal;
font-family: "LabGrotesque", sans-serif;
border: none;
transition: 0.5s;

View File

@ -18,7 +18,6 @@
}
&__empty {
font-family: "LabGrotesque", sans-serif;
font-style: normal;
font-weight: 700;
font-size: 16px;

View File

@ -92,8 +92,8 @@ export const FreeDevelopers = () => {
</BaseButton>
</div>
</div>
<Footer />
</div>
<Footer />
</section>
);
};

View File

@ -1,5 +1,4 @@
.free-dev {
font-family: "LabGrotesque", sans-serif;
overflow: hidden;
position: relative;
background-color: #f1f1f1;

View File

@ -43,7 +43,7 @@ import send from "assets/icons/send.svg";
import watch from "assets/icons/watch.svg";
import avatarMok from "assets/images/avatarMok.png";
import { getCorrectDate } from "../../../Calendar/calendarHelper";
import { getCorrectDate } from "../../../../utils/calendarHelper";
import "./modalTicket.scss";
registerLocale("ru", ru);

View File

@ -77,7 +77,6 @@
line-height: 32px;
color: #1458dd;
margin: 0;
font-family: "LabGrotesque", sans-serif;
}
h2 {
@ -780,7 +779,6 @@
.react-datepicker__current-month {
font-size: 18px;
font-family: "LabGrotesque", sans-serif;
text-transform: capitalize;
}
@ -823,7 +821,6 @@
.react-datepicker__day {
font-size: 16px;
width: 35px;
font-family: "LabGrotesque", sans-serif;
border-radius: 50px;
padding: 7px;
}
@ -832,7 +829,6 @@
font-size: 18px;
width: 35px;
font-weight: 500;
font-family: "LabGrotesque", sans-serif;
}
.react-datepicker__triangle {

View File

@ -9,6 +9,7 @@ import { Link, useNavigate, useParams } from "react-router-dom";
import { getProfileInfo } from "@redux/outstaffingSlice";
import { getBoarderLoader, setToggleTab } from "@redux/projectsTrackerSlice";
import { getCorrectDate } from "@utils/calendarHelper";
import {
backendImg,
caseOfNum,
@ -21,7 +22,6 @@ import { apiRequest } from "@api/request";
import { useNotification } from "@hooks/useNotification";
import { getCorrectDate } from "@components/Calendar/calendarHelper";
import { Footer } from "@components/Common/Footer/Footer";
import { Loader } from "@components/Common/Loader/Loader";
import FileTracker from "@components/FileTracker/FileTracker";

View File

@ -22,13 +22,13 @@ import {
setProjectBoardFetch
} from "@redux/projectsTrackerSlice";
import { getCorrectDate } from "@utils/calendarHelper";
import { getCorrectRequestDate, urlForLocal } from "@utils/helper";
import { apiRequest } from "@api/request";
import { useNotification } from "@hooks/useNotification";
import { getCorrectDate } from "@components/Calendar/calendarHelper";
import BaseButton from "@components/Common/BaseButton/BaseButton";
import { Loader } from "@components/Common/Loader/Loader";
import ModalLayout from "@components/Common/ModalLayout/ModalLayout";

View File

@ -172,7 +172,8 @@
.executor {
display: flex;
justify-content: space-between;
column-gap: 5px;
align-items: center;
&:hover {
font-weight: 600;
}
@ -650,7 +651,6 @@
.react-datepicker__current-month {
font-size: 18px;
font-family: "LabGrotesque", sans-serif;
text-transform: capitalize;
padding-bottom: 8px;
}
@ -694,7 +694,6 @@
.react-datepicker__day {
font-size: 16px;
width: 35px;
font-family: "LabGrotesque", sans-serif;
border-radius: 50px;
padding: 7px;
}
@ -703,7 +702,6 @@
font-size: 18px;
width: 35px;
font-weight: 500;
font-family: "LabGrotesque", sans-serif;
}
.react-datepicker__triangle {

View File

@ -1,7 +1,3 @@
body {
font-family: "LabGrotesque", sans-serif !important;
}
.container {
max-width: 1160px !important;
}
@ -9,7 +5,6 @@ body {
background: #f1f1f1;
height: 100%;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
padding-top: 23px;
&__title {

View File

@ -12,11 +12,11 @@ import {
setRequestDate
} from "@redux/reportSlice";
import { getReports } from "@utils/calendarHelper";
import { urlForLocal } from "@utils/helper";
import { apiRequest } from "@api/request";
import { getReports } from "@components/Calendar/calendarHelper";
import { Footer } from "@components/Common/Footer/Footer";
import { Loader } from "@components/Common/Loader/Loader";
import { Navigation } from "@components/Navigation/Navigation";

View File

@ -11,11 +11,6 @@ import {
setSendRequest
} from "@redux/reportSlice";
import { getCorrectYYMMDD } from "@utils/helper";
import { apiRequest } from "@api/request";
import "@components/Calendar/calendarComponent.scss";
import {
calendarHelper,
correctDay,
@ -23,7 +18,12 @@ import {
getCorrectDate,
getReports,
hourOfNum
} from "@components/Calendar/calendarHelper";
} from "@utils/calendarHelper";
import { getCorrectYYMMDD } from "@utils/helper";
import { apiRequest } from "@api/request";
import "@components/Calendar/calendarComponent.scss";
import BaseButton from "@components/Common/BaseButton/BaseButton";
import arrow from "assets/icons/arrows/arrowCalendar.png";

View File

@ -1,12 +1,15 @@
.profile__calendar {
background: #f1f1f1;
height: 100%;
display: flex;
flex-direction: column;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
.container {
max-width: 1160px;
margin-top: 23px;
display: flex;
flex-direction: column;
flex: 1;
@media (max-width: 570px) {
margin-top: 0;

View File

@ -4,22 +4,82 @@ import { NavLink, useNavigate } from "react-router-dom";
import { auth, getProfileInfo, setProfileInfo } from "@redux/outstaffingSlice";
import { urlForLocal } from "@utils/helper";
import { apiRequest } from "@api/request";
import { Loader } from "@components/Common/Loader/Loader";
import avatarMok from "assets/images/avatarMok.png";
import "./profileHeader.scss";
export const ProfileHeader = () => {
const navigate = useNavigate();
const dispatch = useDispatch();
const profileInfo = useSelector(getProfileInfo);
const currentPath = window.location.pathname;
const [user] = useState(
localStorage.getItem("role_status") === "18" ? "partner" : "developer"
);
const [isLoggingOut, setIsLoggingOut] = useState(false);
const [navInfo] = useState({
developer: [
{
path: "/summary",
name: "Резюме"
},
{
path: "/calendar",
name: "Отчеты"
},
{
path: "/tracker",
name: "Трекер"
},
{
path: "/payouts",
name: "Выплаты"
},
{
path: "/quiz",
name: "Тесты"
},
{
path: "/settings",
name: "Настройки"
}
],
partner: [
{
path: "/catalog",
name: "Каталог"
},
{
path: "/requests",
name: "Запросы"
},
{
path: "/employees",
name: "Персонал"
},
{
path: "/tracker",
name: "Трекер"
},
{
path: "/treaties",
name: "Договоры"
},
{
path: "/settings",
name: "Настройки"
}
]
});
useEffect(() => {
if (!Object.keys(profileInfo).length)
apiRequest(`/user/me`).then((profileInfo) => {
@ -40,21 +100,85 @@ export const ProfileHeader = () => {
dispatch(setProfileInfo({}));
};
const [active, setActive] = useState(false);
const toggleBar = () => {
if (active) {
setActive(false);
} else {
setActive(true);
}
};
return (
<header className="profile-header">
<div className="profile-header__head">
<div className="profile-header__container">
<div className="auth-title">
<div className="text">
<NavLink to={"/profile"} className="profile-header__title">
itguild.
<span>
{user === "developer" ? "для разработчиков" : "для партнеров"}
</span>
</NavLink>
<button onClick={handler} className="profile-header__logout">
{isLoggingOut ? <Loader /> : "Выйти"}
</button>
<div className="burger" onClick={() => toggleBar()}>
<div
className={active ? "burger__line l1 change" : "burger__line"}
></div>
<div
className={active ? "burger__line l2 change" : "burger__line"}
></div>
<div
className={active ? "burger__line l3 change" : "burger__line"}
></div>
</div>
</div>
</div>
<div className={active ? "auth-body active" : "auth-body"}>
{/* <div className="auth-body__title">
<img src={ITguild}></img>
</div> */}
<nav className="auth-body__navigation">
<div className="profile-header__personal-info">
<h3 className="profile-header__personal-info-name">
{profileInfo?.fio ? profileInfo?.fio : profileInfo?.username}
</h3>
<NavLink end to={"/profile"}>
<img
src={
profileInfo?.photo
? urlForLocal(profileInfo.photo)
: avatarMok
}
className="profile-header__personal-info-avatar"
alt="avatar"
/>
</NavLink>
</div>
{navInfo[user].map((link, index) => {
return (
<NavLink
key={index}
end
to={link.path === "/Quiz" ? link.path : `/profile${link.path}`}
className={currentPath.includes(link.path) ? "active" : ""}
>
{link.name}
</NavLink>
);
})}
<button onClick={handler} className="profile-header__logout-burger">
{isLoggingOut ? <Loader /> : "Выйти"}
</button>
</nav>
</div>
</header>
);
};

View File

@ -1,13 +1,146 @@
.profile-header {
width: 100%;
height: 66px;
background: #e1fccf;
padding: 20px;
display: flex;
flex-direction: column;
font-family: "LabGrotesque", sans-serif;
&__head {
background: #e1fccf;
}
.auth-title {
position: relative;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
height: 100%;
z-index: 9999;
max-width: 1160px;
width: 100%;
margin: 0 auto;
padding: 0 15px;
.text {
width: 100%;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
.burger {
display: none;
cursor: pointer;
@media (max-width: 414px) {
display: block;
}
&__line {
width: 32px;
border-radius: 33px;
height: 5px;
background-color: #333;
margin: 5px 0 0 27px;
transition: 0.4s;
}
.l1.change {
transform: rotate(-45deg) translate(-7px, 6px);
}
.l2.change {
opacity: 0;
}
.l3.change {
transform: rotate(45deg) translate(-8px, -8px);
}
}
}
}
&__info {
background: white;
}
.auth-body {
opacity: 0;
z-index: 99;
position: absolute;
top: 0;
right: 0;
height: 0;
width: 0;
overflow: hidden;
background: #e1fccf;
transition: 0.3s;
// @media (max-width: 414px) {
// display: block;
// }
&__title {
display: flex;
margin-top: 24px;
img {
width: 160px;
}
}
&__navigation {
margin-top: 28px;
padding: 0;
list-style: none;
font-size: 14px;
line-height: 20px;
display: flex;
flex-direction: column;
a {
padding: 10px 0 0 0;
}
a,
a:hover,
a:active {
color: #000000;
}
}
&__politic {
margin-top: 42px;
font-size: 14px;
line-height: 22px;
color: #000000;
}
&__contacts {
margin-top: 127px;
color: #000000;
h4 {
font-size: 20px;
line-height: 33px;
}
p {
font-size: 14px;
}
}
}
.auth-body.active {
padding: 40px 10px;
opacity: 1;
display: flex;
overflow: visible;
width: calc(100vw / 3);
transition: width 0.3s;
height: 100%;
flex-direction: column;
align-items: stretch;
}
&__container {
max-width: 1160px;
padding: 0 15px;
@ -15,7 +148,11 @@
display: flex;
justify-content: space-between;
align-items: center;
min-height: 50px;
min-height: 66px;
@media (max-width: 414px) {
display: none;
}
}
&__title {
@ -42,10 +179,19 @@
font-size: 16px;
line-height: 32px;
color: #000000;
@media (max-width: 414px) {
display: none;
}
}
&__info {
background: #ffffff;
&__logout-burger {
background: none;
border: none;
font-weight: 500;
font-size: 16px;
line-height: 32px;
color: #000000;
}
&__nav {
@ -69,6 +215,7 @@
a.active {
color: #000000;
padding: 0;
}
@media (max-width: 800px) {
@ -87,7 +234,10 @@
&__personal-info {
display: flex;
column-gap: 20px;
flex-direction: row-reverse;
align-items: center;
justify-content: flex-end;
padding: 10px;
&-name {
margin-bottom: 0;
@ -103,6 +253,10 @@
}
}
a.active {
padding: 0;
}
&-avatar {
width: 37px;
height: 37px;

View File

@ -135,7 +135,7 @@ export const ProjectTicket = ({ project, index }) => {
<img src={edit}></img>
<p>редактировать</p>
</div>
<div onClick={copyProjectLink(project.id)}>
<div onClick={() => copyProjectLink(project.id)}>
<img src={link}></img>
<p>скопировать ссылку</p>
</div>

View File

@ -27,7 +27,7 @@ import {
getCorrectDate,
getCreatedDate,
hourOfNum
} from "../Calendar/calendarHelper";
} from "../../utils/calendarHelper";
import "./reportForm.scss";
registerLocale("ru", ru);

View File

@ -1,10 +1,13 @@
.report-form {
background: #f1f1f1;
height: 100%;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
display: flex;
flex-direction: column;
.container {
display: flex;
flex-direction: column;
flex: 1;
max-width: 1160px;
margin-top: 23px;
@ -486,7 +489,6 @@
.react-datepicker__current-month {
font-size: 14px;
font-family: "LabGrotesque", sans-serif;
text-transform: capitalize;
}
@ -498,13 +500,11 @@
.react-datepicker__day {
font-size: 14px;
width: 35px;
font-family: "LabGrotesque", sans-serif;
}
.react-datepicker__day-name {
font-size: 14px;
width: 35px;
font-family: "LabGrotesque", sans-serif;
}
.react-datepicker__triangle {

View File

@ -8,13 +8,14 @@ import {
setSendRequest
} from "@redux/reportSlice";
import { apiRequest } from "@api/request";
import {
getCorrectDate,
getCreatedDate,
hourOfNum
} from "@components/Calendar/calendarHelper";
} from "@utils/calendarHelper";
import { apiRequest } from "@api/request";
import { Loader } from "@components/Common/Loader/Loader";
import "./shortReport.scss";

View File

@ -16,184 +16,184 @@
@media (max-width: 1440px) {
width: 80px;
}
}
.auth-title {
position: relative;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
height: 80%;
z-index: 9999;
.text {
.auth-title {
position: relative;
display: flex;
flex-direction: column;
margin: 70px 0 0 0;
h3 {
transform: rotate(270deg);
font-size: 25px;
line-height: 32px;
text-transform: uppercase;
color: #222222;
}
.burger {
cursor: pointer;
margin-bottom: 70px;
&__line {
width: 32px;
border-radius: 33px;
height: 5px;
background-color: #333;
margin: 5px 0 0 27px;
transition: 0.4s;
}
.l1.change {
transform: rotate(-45deg) translate(-7px, 6px);
}
.l2.change {
opacity: 0;
}
.l3.change {
transform: rotate(45deg) translate(-8px, -8px);
}
}
}
.outstaffing {
transform: rotate(270deg);
font-size: 18px;
line-height: 32px;
width: 200px;
img {
margin-right: 15px;
}
}
@media (max-width: 1375px) {
flex-direction: row;
height: 100%;
justify-content: space-between;
align-items: center;
height: 80%;
z-index: 9999;
.text {
margin: 0;
flex-direction: row;
.burger {
margin-bottom: 5px;
}
display: flex;
flex-direction: column;
margin: 70px 0 0 0;
h3 {
display: none;
transform: rotate(270deg);
font-size: 25px;
line-height: 32px;
text-transform: uppercase;
color: #222222;
}
.burger {
cursor: pointer;
margin-bottom: 70px;
&__line {
width: 32px;
border-radius: 33px;
height: 5px;
background-color: #333;
margin: 5px 0 0 27px;
transition: 0.4s;
}
.l1.change {
transform: rotate(-45deg) translate(-7px, 6px);
}
.l2.change {
opacity: 0;
}
.l3.change {
transform: rotate(45deg) translate(-8px, -8px);
}
}
}
.outstaffing {
margin: 0;
width: 150px;
font-size: 12px;
transform: none;
transform: rotate(270deg);
font-size: 18px;
line-height: 32px;
width: 200px;
img {
margin-right: 5px;
width: 15px;
margin-right: 15px;
}
}
@media (max-width: 1375px) {
flex-direction: row;
height: 100%;
.text {
margin: 0;
flex-direction: row;
.burger {
margin-bottom: 5px;
}
h3 {
display: none;
}
}
.outstaffing {
margin: 0;
width: 150px;
font-size: 12px;
transform: none;
img {
margin-right: 5px;
width: 15px;
}
}
}
}
}
.auth-body {
padding: 40px 10px;
visibility: hidden;
transition: 0.2s ease-in-out;
opacity: 0;
z-index: 99;
position: absolute;
top: 0;
left: 0;
height: 100%;
background: #e1fccf;
width: 0;
flex-direction: column;
align-items: stretch;
.auth-body {
padding: 40px 10px;
visibility: hidden;
transition: 0.2s ease-in-out;
opacity: 0;
z-index: 99;
position: absolute;
top: 0;
left: 0;
height: 100%;
background: #e1fccf;
width: 0;
flex-direction: column;
align-items: stretch;
&__title {
display: flex;
margin-top: 24px;
&__title {
display: flex;
margin-top: 24px;
img {
width: 160px;
img {
width: 160px;
}
}
}
&__navigation {
margin-top: 28px;
padding: 0;
list-style: none;
font-size: 20px;
line-height: 33px;
a,
a:hover,
a:active {
color: #000000;
}
}
&__politic {
margin-top: 42px;
font-size: 14px;
line-height: 22px;
color: #000000;
}
&__contacts {
margin-top: 127px;
color: #000000;
h4 {
&__navigation {
margin-top: 28px;
padding: 0;
list-style: none;
font-size: 20px;
line-height: 33px;
}
p {
font-size: 14px;
}
}
@media (max-width: 1375px) {
&__title {
margin-top: 35px;
a,
a:hover,
a:active {
color: #000000;
}
}
&__politic {
margin-top: 35px;
margin-top: 42px;
font-size: 14px;
line-height: 22px;
color: #000000;
}
&__contacts {
margin: 50px 0 25px 0;
margin-top: 127px;
color: #000000;
h4 {
font-size: 20px;
line-height: 33px;
}
p {
font-size: 14px;
}
}
@media (max-width: 1375px) {
&__title {
margin-top: 35px;
}
&__politic {
margin-top: 35px;
}
&__contacts {
margin: 50px 0 25px 0;
}
}
}
.auth-body.active {
visibility: visible;
transition: 0.1s ease-in-out;
opacity: 1;
display: flex;
width: 280px;
left: 100px;
@media (max-width: 1440px) {
left: 79px;
}
@media (max-width: 1375px) {
left: 0;
width: 100%;
height: 705px;
}
}
}
.auth-body.active {
visibility: visible;
transition: 0.1s ease-in-out;
opacity: 1;
display: flex;
width: 280px;
left: 100px;
@media (max-width: 1440px) {
left: 79px;
}
@media (max-width: 1375px) {
left: 0;
width: 100%;
height: 705px;
}
}

View File

@ -2,11 +2,11 @@ import ClassicEditor from "@ckeditor/ckeditor5-build-classic";
import { CKEditor } from "@ckeditor/ckeditor5-react";
import React, { useState } from "react";
import { getCorrectDate } from "@utils/calendarHelper";
import { urlForLocal } from "@utils/helper";
import { apiRequest } from "@api/request";
import { getCorrectDate } from "@components/Calendar/calendarHelper";
import TrackerTaskSubComment from "@components/TrackerTaskComment/TrackerTaskComment";
import del from "assets/icons/delete.svg";

View File

@ -6,15 +6,13 @@ body {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
font-family: "LabGrotesque", sans-serif !important;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
code {
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
monospace;
}

View File

@ -91,10 +91,10 @@ const Auth = () => {
</div>
</div>
</div>
<Footer />
</div>
</div>
<SideBar />
<Footer />
</section>
);
};

View File

@ -1,10 +1,10 @@
.auth-partners {
font-family: "LabGrotesque", sans-serif;
background-color: #f1f1f1;
overflow: hidden;
position: relative;
&__background {
background-color: #f1f1f1;
position: relative;
}

View File

@ -115,7 +115,7 @@ export const AuthForCandidate = () => {
resetModal={setModalReset}
title="Войти, если есть доступ"
description="Если вы получили доступ, пройдя
2 шага для входа или хотите узнать
2 шага для входа, или хотите узнать
свои результаты в кабинете"
/>
<div className="auth-candidate__start">

View File

@ -1,5 +1,4 @@
.auth-candidate {
font-family: "LabGrotesque", sans-serif;
overflow: hidden;
position: relative;
background-color: #f1f1f1;
@ -62,8 +61,4 @@
}
}
}
footer {
margin-top: 10px;
}
}

View File

@ -90,12 +90,10 @@ export const Blog = () => {
);
})}
</div>
<div className="blog__load-more">
<button>Загрузить еще</button>
</div>
</div>
<Footer />
</div>
);

View File

@ -200,9 +200,9 @@ const CatalogSpecialists = () => {
);
})}
</div>
<Footer />
</div>
<SideBar />
<Footer />
</section>
);
};

View File

@ -1,8 +1,8 @@
.catalog-specialists {
background: #f1f1f1;
height: 100%;
display: flex;
flex-direction: column;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
&__wrapper {
padding-top: 24px;

View File

@ -103,8 +103,8 @@ export const CompanyInfo = () => {
</div>
</div>
</div>
<Footer />
</div>
<Footer />
</div>
);
};

View File

@ -1,6 +1,5 @@
.company-info {
&__content {
font-family: "LabGrotesque", sans-serif;
background-color: #f1f1f1;
padding-top: 60px;

View File

@ -96,8 +96,8 @@ const FormPage = () => {
</div>
</div>
</div>
<Footer />
</div>
<Footer />
</div>
);
};

View File

@ -124,10 +124,6 @@
right: 2.5rem;
}
.form-page footer {
margin-top: 6rem !important;
}
@media (max-width: 991px) {
.form-page {
&__separator {

View File

@ -2,9 +2,7 @@
.frequently-asked-question {
background: #f5f5f5;
height: 100%;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
display: flex;
flex-direction: column;

View File

@ -1,8 +1,6 @@
.frequently-asked-questions {
background: #f5f5f5;
height: 100%;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
display: flex;
flex-direction: column;

View File

@ -69,9 +69,9 @@ const Home = () => {
<h2 className="catalog__title">Каталог специалистов</h2>
<Outstaffing />
<Description onLoadMore={loadMore} isLoadingMore={isLoadingMore} />
<Footer />
</div>
</div>
<Footer />
</>
);
};

View File

@ -1,8 +1,8 @@
.partner-add-request {
background: #f1f1f1;
height: 100%;
display: flex;
flex-direction: column;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
.container {
max-width: 1160px;
@ -314,10 +314,6 @@
}
}
footer {
margin-top: 70px;
}
&__info {
background: #ffffff;
border-radius: 12px;

View File

@ -9,11 +9,11 @@ import {
setPartnerRequestInfo
} from "@redux/outstaffingSlice";
import { getCorrectDate } from "@utils/calendarHelper";
import { urlForLocal } from "@utils/helper";
import { apiRequest } from "@api/request";
import { getCorrectDate } from "@components/Calendar/calendarHelper";
import { Footer } from "@components/Common/Footer/Footer";
import { Loader } from "@components/Common/Loader/Loader";
import ModalLayout from "@components/Common/ModalLayout/ModalLayout";

View File

@ -1,11 +1,14 @@
.partner-bid {
background: #f1f1f1;
height: 100%;
display: flex;
flex-direction: column;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
.container {
max-width: 1160px;
display: flex;
flex-direction: column;
flex: 1;
margin-top: 23px;
@media (max-width: 570px) {
@ -536,8 +539,4 @@
background: #52b709;
}
}
footer {
margin-top: 70px;
}
}

View File

@ -5,9 +5,10 @@ import { Navigate, useParams } from "react-router-dom";
import { getRequestDates, setRequestDate } from "@redux/reportSlice";
import { getReports } from "@utils/calendarHelper";
import { apiRequest } from "@api/request";
import { getReports } from "@components/Calendar/calendarHelper";
import { Footer } from "@components/Common/Footer/Footer";
import { Loader } from "@components/Common/Loader/Loader";
import { Navigation } from "@components/Navigation/Navigation";

View File

@ -1,10 +1,14 @@
.employee-report {
background: #f1f1f1;
height: 100%;
display: flex;
flex-direction: column;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
.container {
max-width: 1160px;
display: flex;
flex-direction: column;
flex: 1;
margin-top: 23px;
}

View File

@ -1,8 +1,8 @@
.partner-employees {
background: #f1f1f1;
height: 100%;
display: flex;
flex-direction: column;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
&__title {
color: #000000;
@ -168,14 +168,13 @@
.container {
max-width: 1160px;
display: flex;
flex-direction: column;
flex: 1;
margin-top: 23px;
@media (max-width: 570px) {
margin-top: 0;
}
}
footer {
margin-top: 70px;
}
}

View File

@ -1,11 +1,14 @@
.partner-requests {
background: #f1f1f1;
height: 100%;
display: flex;
flex-direction: column;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
.container {
max-width: 1160px;
display: flex;
flex-direction: column;
flex: 1;
margin-top: 23px;
@media (max-width: 570px) {
@ -352,8 +355,4 @@
}
}
}
footer {
margin-top: 70px;
}
}

View File

@ -1,8 +1,8 @@
.settings {
background: #f1f1f1;
height: 100%;
display: flex;
flex-direction: column;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
background: #f1f1f1;
.info-personal__title {
color: #000000;
@ -12,7 +12,9 @@
}
&__page {
min-height: 750px;
display: flex;
flex-direction: column;
flex: 1;
max-width: 1160px !important;
margin-top: 23px;
}
@ -129,7 +131,10 @@
}
.partner-settings {
margin-bottom: 110px;
display: flex;
flex-direction: column;
flex: 1;
margin-bottom: 10px;
&__body {
display: flex;

View File

@ -1,8 +1,8 @@
.treaties {
background: #f1f1f1;
height: 100%;
display: flex;
flex-direction: column;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
&__title {
font-weight: 700;
@ -379,14 +379,13 @@
.container {
max-width: 1160px;
display: flex;
flex-direction: column;
flex: 1;
margin-top: 23px;
@media (max-width: 570px) {
margin-top: 0;
}
}
footer {
margin-top: 70px;
}
}

View File

@ -1,8 +1,8 @@
.partner-categories {
background: #f1f1f1;
height: 100%;
display: flex;
flex-direction: column;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
&__title {
color: #000000;
@ -145,14 +145,13 @@
.container {
max-width: 1160px;
display: flex;
flex-direction: column;
flex: 1;
margin-top: 23px;
@media (max-width: 570px) {
margin-top: 0;
}
}
footer {
margin-top: 70px;
}
}

View File

@ -1,13 +1,18 @@
import React from "react";
import { Footer } from "@components/Common/Footer/Footer";
import { Navigation } from "@components/Navigation/Navigation";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
import "./payouts.scss";
export const Payouts = () => {
return (
<div className="payouts">
<ProfileHeader />
<Navigation />
<div className="container"></div>
<Footer />
</div>
);
};

View File

@ -0,0 +1,13 @@
.payouts {
display: flex;
flex-direction: column;
min-height: 100vh;
background: #f1f1f1;
.container {
max-width: 1160px;
display: flex;
flex-direction: column;
flex: 1;
}
}

View File

@ -1,8 +1,8 @@
.profile {
background: #f1f1f1;
height: 100%;
display: flex;
flex-direction: column;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
&__title {
font-weight: 700;
@ -48,92 +48,17 @@
@media (max-width: 1175px) {
justify-content: center;
}
// .item {
// max-width: 353px;
// width: 100%;
// padding: 35px 45px 15px 30px;
// background: #FFFFFF;
// border-radius: 12px;
// text-decoration: none;
// cursor: pointer;
// transition: all 0.3s ease;
// &:hover {
// box-shadow: 6px 5px 20px rgb(87 98 80 / 21%);
// transform: scale(1.02);
// }
// @media (max-width: 1175px) {
// width: 48%;
// max-width: none;
// }
// @media (max-width: 925px) {
// width: 100%;
// padding: 15px 25px;
// }
// &__about {
// display: flex;
// column-gap: 20px;
// align-items: center;
// margin-bottom: 30px;
// @media (max-width: 925px) {
// margin-bottom: 15px;
// }
// h3 {
// color: #000000;
// font-weight: 500;
// font-size: 18px;
// line-height: 22px;
// max-width: 125px;
// margin-bottom: 0;
// }
// }
// &__info {
// display: flex;
// justify-content: space-between;
// align-items: center;
// p {
// font-weight: 700;
// font-size: 12px;
// line-height: 20px;
// color: #000000;
// margin-bottom: 0;
// span {
// color: #52B709;
// font-weight: 700;
// }
// }
// &Link {
// width: 48px;
// height: 48px;
// background: #DDEEC6;
// border-radius: 50px;
// display: flex;
// justify-content: center;
// align-items: center;
// }
// }
// }
}
.container {
max-width: 1160px;
margin-top: 23px;
display: flex;
flex-direction: column;
flex: 1;
@media (max-width: 570px) {
margin-top: 0;
}
}
footer {
margin-top: 70px;
}
}

View File

@ -1,166 +1,160 @@
.profile-candidate{
background: #F1F1F1;
height: 100%;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
display: flex;
flex-direction: column;
//max-width: 1200px;
&__container{
max-width: 1160px;
margin: 0 auto 42px auto;
flex: 1 1 auto;
padding: 0 15px;
}
&__title{
margin: 0 0 31px 0;
}
&__row{
display: flex;
gap: 30px;
flex-wrap: wrap;
}
// &__column{
// flex: 1 1 60%;
// }
&__tests{
display: flex;
flex-wrap: wrap;
justify-content: space-between;
flex: 1 1 60%;
gap: 30px;
}
&__cards{
display: flex;
gap: 29px;
width: 100%;
@media (max-width: 660px) {
flex-wrap: wrap;
}
}
&__head-bottom{
margin: 0 0 27px 0;
//max-width: 1160px;
}
.profile-candidate {
background: #f1f1f1;
display: flex;
flex-direction: column;
min-height: 100vh;
&__container {
max-width: 1160px;
display: flex;
flex-direction: column;
margin: 0 auto 42px auto;
flex: 1 1 auto;
padding: 0 15px;
}
&__title {
margin: 0 0 31px 0;
}
&__row {
display: flex;
gap: 30px;
flex-wrap: wrap;
}
// &__column{
// flex: 1 1 60%;
// }
&__tests {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
flex: 1 1 60%;
gap: 30px;
}
&__cards {
display: flex;
gap: 29px;
width: 100%;
@media (max-width: 660px) {
flex-wrap: wrap;
}
}
&__head-bottom {
margin: 0 0 27px 0;
//max-width: 1160px;
}
}
.instructions-candidate{
flex: 1 1 auto;
background: #FFFFFF;
border-radius: 12px;
&__container{
padding: 40px 18px 32px 36px;
display: flex;
flex-direction: column;
gap: 29px;
@media (max-width: 660px) {
padding: 20px;
}
}
&__note{
display: flex;
align-items: center;
gap: 22px;
&:not(:last-child){
margin: 0 0 30px 0;
}
}
&__icon{
width: 25px;
height: 30px;
}
&__title{
color: #52B709;
font-weight: 900;
font-size: 14px;
line-height: 171%;
margin: 0 0 20px 0;
}
&__text{
font-weight: 400;
font-size: 12px;
line-height: 200%;
color: #000000;
max-width: 235px;
span{
color: #406128;
font-weight: 700;
text-decoration: underline;
}
}
.instructions-candidate {
flex: 1 1 auto;
background: #ffffff;
border-radius: 12px;
&__container {
padding: 40px 18px 32px 36px;
display: flex;
flex-direction: column;
gap: 29px;
@media (max-width: 660px) {
padding: 20px;
}
}
&__note {
display: flex;
align-items: center;
gap: 22px;
&:not(:last-child) {
margin: 0 0 30px 0;
}
}
&__icon {
width: 25px;
height: 30px;
}
&__title {
color: #52b709;
font-weight: 900;
font-size: 14px;
line-height: 171%;
margin: 0 0 20px 0;
}
&__text {
font-weight: 400;
font-size: 12px;
line-height: 200%;
color: #000000;
max-width: 235px;
span {
color: #406128;
font-weight: 700;
text-decoration: underline;
}
}
}
.info-candidate{
width: 100%;
background: #fff;
border-radius: 12px;
padding: 20px 45px;
display: flex;
align-items: center;
gap: 47px;
@media (max-width:560px) {
padding: 20px;
}
&__img{
flex: 0 0 88px;
height: 88px;
img{
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 50%;
}
}
&__info{
width: 100%;
}
&__title{
font-weight: 500;
font-size: 16px;
line-height: 200%;
color: #000000;
margin: 0 0 12px 0;
}
.info-candidate {
width: 100%;
background: #fff;
border-radius: 12px;
padding: 20px 45px;
display: flex;
align-items: center;
gap: 47px;
@media (max-width: 560px) {
padding: 20px;
}
&__img {
flex: 0 0 88px;
height: 88px;
img {
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 50%;
}
}
&__info {
width: 100%;
}
&__title {
font-weight: 500;
font-size: 16px;
line-height: 200%;
color: #000000;
margin: 0 0 12px 0;
}
&__decor{
background: #52B709;
border-radius: 12px;
height: 8px;
width: 60%;
}
&__decor {
background: #52b709;
border-radius: 12px;
height: 8px;
width: 60%;
}
}
.bottom-head{
margin: 0 0 40px 0;
height: 66px;
background: #FFF;
&__container{
max-width: 1160px;
margin: 0 auto;
padding: 0 15px;
height: 100%;
display: flex;
justify-content: space-between;
align-items: center;
}
&__img{
flex: 0 0 37px;
height: 37px;
img{
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 50%;
}
}
&__title{
font-weight: 500;
font-size: 18px;
line-height: 178%;
color: #807777;
}
}
.bottom-head {
margin: 0 0 40px 0;
height: 66px;
background: #fff;
&__container {
margin: 0 auto;
padding: 0 15px;
height: 100%;
display: flex;
justify-content: space-between;
align-items: center;
}
&__img {
flex: 0 0 37px;
height: 37px;
img {
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 50%;
}
}
&__title {
font-weight: 500;
font-size: 18px;
line-height: 178%;
color: #807777;
}
}

View File

@ -58,7 +58,7 @@ import accept from "assets/images/accept.png";
import archive from "assets/images/archiveIcon.png";
import avatarMok from "assets/images/avatarMok.png";
import { getCorrectDate } from "../../components/Calendar/calendarHelper";
import { getCorrectDate } from "../../utils/calendarHelper";
export const ProjectTracker = () => {
const dispatch = useDispatch();

View File

@ -1,13 +1,13 @@
.quiz-page {
background: #f1f1f1;
height: 100%;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
display: flex;
flex-direction: column;
&__container {
max-width: 1160px;
display: flex;
flex-direction: column;
margin: 23px auto 42px auto;
flex: 1 1 auto;
width: 100%;
@ -64,9 +64,7 @@
.interjacent-page-quiz {
background: #f1f1f1;
height: 100%;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
display: flex;
flex-direction: column;
@ -80,6 +78,7 @@
&__container {
max-width: 1160px;
display: flex;
margin: 23px auto 42px auto;
flex: 1 1 auto;
width: 100%;
@ -96,14 +95,14 @@
.passing-tests-page {
background: #f1f1f1;
height: 100%;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
display: flex;
flex-direction: column;
&__container {
max-width: 1160px;
flex-direction: column;
display: flex;
margin: 23px auto 42px auto;
flex: 1 1 auto;
width: 100%;
@ -136,14 +135,14 @@
.quiz-report-page {
background: #f1f1f1;
height: 100%;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
display: flex;
flex-direction: column;
&__container {
max-width: 1160px;
display: flex;
flex-direction: column;
margin: 23px auto 42px auto;
flex: 1 1 auto;
width: 100%;

View File

@ -1,5 +1,4 @@
.registration-candidate {
font-family: "LabGrotesque", sans-serif;
position: relative;
background-color: #f1f1f1;
@ -188,8 +187,4 @@
}
}
}
footer {
margin-top: 80px;
}
}

View File

@ -212,8 +212,8 @@ export const RegistrationSetting = () => {
</button>
)}
</div>
<Footer />
</div>
<Footer />
</div>
);
};

View File

@ -1,6 +1,5 @@
.registration-setting {
&__content {
font-family: "LabGrotesque", sans-serif;
background-color: #f1f1f1;
color: #000000;
padding: 50px 0 0;

View File

@ -6,6 +6,7 @@ import { setToggleTab } from "@redux/projectsTrackerSlice";
import { copyProjectLink } from "@utils/helper";
import { Footer } from "@components/Common/Footer/Footer";
import { Navigation } from "@components/Navigation/Navigation";
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
@ -71,133 +72,137 @@ const Statistics = () => {
/>
<h2 className="tracker__title">Управление проектами с трекером</h2>
</div>
</div>
<div className="tracker__tabs">
<div className="tracker__tabs__head">
<Link
to="/profile/tracker"
className="tab active-tab"
onClick={() => toggleTabs(1)}
>
<img src={project} alt="img" />
<p>Проекты </p>
</Link>
<Link
to="/profile/tracker"
className="tab"
onClick={() => toggleTabs(2)}
>
<img src={tasks} alt="img" />
<p>Все мои задачи</p>
</Link>
<Link
to="/profile/tracker"
className="tab"
onClick={() => toggleTabs(3)}
>
<img src={archive} alt="img" />
<p>Архив</p>
</Link>
</div>
<div className="tracker__tabs__content">
<div className="tracker__tabs__content__wrapper statistics-body">
<div className="statistics-header">
<div className="statistics-header__menu">
<h1>Статистика проекта</h1>
<img src={link} alt="#" />
<span className="return-text" onClick={copyProjectLink("62")}>
ссылка на проект
</span>
</div>
<div className="statistics-header__return">
<img src={arrow} alt="#" />
<Link to={`/profile/tracker`} className="return-text">
К списку проектов
</Link>
</div>
</div>
<div className="statistics-info">
<div className="statistics-info__head">
<p>Проект: </p>
<h1>{"Разработка трекера"}</h1>
</div>
<div className="statistics-info__team">
<div className="project-info">
<div className="project-info__creator">
<span className="return-text">Создатель проекта:</span>
<div>
<p>{"Василий Тарасов"}</p>{" "}
<img src={mockAvatar} alt="#" />
</div>
</div>
<div className="project-info__tasks">
<div className="task-quantity">
<p>Открытые задачи</p>
<span className="task-quantity_open">{4}</span>
</div>
<div className="task-quantity">
<p>Задач в работе</p>
<span className="task-quantity_work">{5}</span>
</div>
<div className="task-quantity">
<p>Закрыто задач</p>
<span className="task-quantity_closed">{434}</span>
</div>
</div>
<div className="tracker__tabs">
<div className="tracker__tabs__head">
<Link
to="/profile/tracker"
className="tab active-tab"
onClick={() => toggleTabs(1)}
>
<img src={project} alt="img" />
<p>Проекты </p>
</Link>
<Link
to="/profile/tracker"
className="tab"
onClick={() => toggleTabs(2)}
>
<img src={tasks} alt="img" />
<p>Все мои задачи</p>
</Link>
<Link
to="/profile/tracker"
className="tab"
onClick={() => toggleTabs(3)}
>
<img src={archive} alt="img" />
<p>Архив</p>
</Link>
</div>
<div className="tracker__tabs__content">
<div className="tracker__tabs__content__wrapper statistics-body">
<div className="statistics-header">
<div className="statistics-header__menu">
<h1>Статистика проекта</h1>
<img src={link} alt="#" />
<span
className="return-text"
onClick={() => copyProjectLink("62")}
>
ссылка на проект
</span>
</div>
<div className="list-team">
<div className="list-team__title">
<span className="return-text">Участники проекта:</span>
</div>
<div className="list-team__head">
<p>Имя</p>
<p>Почта</p>
<p>Роль</p>
<p>Статус</p>
</div>
<div className="list-team__body">
{teams.map((item) => {
return (
<>
<div className="list-team__item">
<div className="person-name">
<img src={item.avatar} alt="#" />
<p>{item.name}</p>
</div>
<div className="person-email">
<img src={emailImg} alt="#" />
<p>{item.email}</p>
</div>
<p className="person-type">{item.role}</p>
{/* <span className="status status-active"> */}
<div className="statistics-header__return">
<img src={arrow} alt="#" />
<span
className={
item.status
? "status status-active"
: "status status-none"
}
>
{item.status ? "Активно" : "Не активно"}
</span>
</div>
</>
);
})}
</div>
<Link to={`/profile/tracker`} className="return-text">
К списку проектов
</Link>
</div>
<div className="add-person">
<span className="add-person__button">+</span>
<p>Добавить участника</p>
</div>
<div className="statistics-info">
<div className="statistics-info__head">
<p>Проект: </p>
<h1>{"Разработка трекера"}</h1>
</div>
<div className="statistics-info__team">
<div className="project-info">
<div className="project-info__creator">
<span className="return-text">Создатель проекта:</span>
<div>
<p>{"Василий Тарасов"}</p>{" "}
<img src={mockAvatar} alt="#" />
</div>
</div>
<div className="project-info__tasks">
<div className="task-quantity">
<p>Открытые задачи</p>
<span className="task-quantity_open">{4}</span>
</div>
<div className="task-quantity">
<p>Задач в работе</p>
<span className="task-quantity_work">{5}</span>
</div>
<div className="task-quantity">
<p>Закрыто задач</p>
<span className="task-quantity_closed">{434}</span>
</div>
</div>
</div>
<div className="list-team">
<div className="list-team__title">
<span className="return-text">Участники проекта:</span>
</div>
<div className="list-team__head">
<p>Имя</p>
<p>Почта</p>
<p>Роль</p>
<p>Статус</p>
</div>
<div className="list-team__body">
{teams.map((item) => {
return (
<>
<div className="list-team__item">
<div className="person-name">
<img src={item.avatar} alt="#" />
<p>{item.name}</p>
</div>
<div className="person-email">
<img src={emailImg} alt="#" />
<p>{item.email}</p>
</div>
<p className="person-type">{item.role}</p>
{/* <span className="status status-active"> */}
<span
className={
item.status
? "status status-active"
: "status status-none"
}
>
{item.status ? "Активно" : "Не активно"}
</span>
</div>
</>
);
})}
</div>
</div>
<div className="add-person">
<span className="add-person__button">+</span>
<p>Добавить участника</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<Footer />
</div>
);
};

View File

@ -1,9 +1,15 @@
.statistics {
background: #f1f1f1;
height: 100%;
display: flex;
flex-direction: column;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
position: relative;
.container {
max-width: 1160px;
display: flex;
flex-direction: column;
flex: 1;
}
&-header {
display: flex;

View File

@ -1,8 +1,8 @@
.summary {
background: #f1f1f1;
height: 100%;
display: flex;
flex-direction: column;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
&__content {
display: flex;
@ -509,12 +509,11 @@
}
}
footer {
margin-top: 10px;
}
.container {
max-width: 1160px;
display: flex;
flex-direction: column;
flex: 1;
margin-top: 23px;
@media (max-width: 570px) {

View File

@ -1,8 +1,8 @@
.tracker {
background: #f1f1f1;
height: 100%;
display: flex;
flex-direction: column;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
position: relative;
.container {
@ -18,14 +18,6 @@
margin-top: 23px;
}
footer {
margin-top: 70px;
.row {
margin-right: 0px;
}
}
&__title {
font-weight: 700;
font-size: 22px;
@ -34,9 +26,9 @@
}
&__tabs {
min-height: 600px;
display: flex;
flex-direction: column;
flex: 1;
&__head {
display: flex;

View File

@ -38,8 +38,8 @@ export const TrackerAuth = () => {
<ModalReset setModalReset={setModalReset} />
</ModalLayout>
)}
<Footer />
</div>
<Footer />
</div>
);
};

View File

@ -1,10 +1,16 @@
.tracker-auth {
display: flex;
flex-direction: column;
min-height: 100vh;
background-color: #f1f1f1;
&__content {
font-family: "LabGrotesque", sans-serif;
background-color: #f1f1f1;
display: flex;
flex-direction: column;
flex: 1;
color: #000000;
padding: 50px 0 0;
min-height: 100vh;
@media (max-width: 1375px) {
padding-top: 100px;
@ -25,7 +31,7 @@
margin-bottom: 46px;
color: #000000;
span {
color: #52B709;
color: #52b709;
position: relative;
img {
position: absolute;

View File

@ -102,8 +102,8 @@ export const TrackerIntro = () => {
</div>
</div>
</div>
<Footer />
</div>
<Footer />
</div>
);
};

View File

@ -1,7 +1,6 @@
.tracker-intro {
background-color: #f1f1f1;
&__content {
font-family: "LabGrotesque", sans-serif;
background-color: #f1f1f1;
color: #000000;
@media (max-width: 1375px) {

View File

@ -149,8 +149,8 @@ export const TrackerRegistration = () => {
/>
</ModalLayout>
)}
<Footer />
</div>
<Footer />
</div>
);
};

View File

@ -1,6 +1,5 @@
.tracker-registration {
&__content {
font-family: "LabGrotesque", sans-serif;
background-color: #f1f1f1;
color: #000000;
padding: 50px 0 0;

View File

@ -4,13 +4,14 @@ import { Link, useParams } from "react-router-dom";
import { setEditReport } from "@redux/reportSlice";
import { apiRequest } from "@api/request";
import {
getCorrectDate,
getCreatedDate,
hourOfNum
} from "@components/Calendar/calendarHelper";
} from "@utils/calendarHelper";
import { apiRequest } from "@api/request";
import { Footer } from "@components/Common/Footer/Footer";
import { Loader } from "@components/Common/Loader/Loader";
import { Navigation } from "@components/Navigation/Navigation";
@ -269,8 +270,8 @@ export const ViewReport = () => {
)}
</div>
)}
<Footer />
</div>
<Footer />
</div>
);
};

View File

@ -1,11 +1,14 @@
.view-report {
background: #f1f1f1;
height: 100%;
display: flex;
flex-direction: column;
min-height: 100vh;
font-family: "LabGrotesque", sans-serif;
.container {
max-width: 1160px;
display: flex;
flex-direction: column;
flex: 1;
margin-top: 23px;
@media (max-width: 570px) {
@ -424,12 +427,4 @@
}
}
}
footer {
margin-top: 70px;
@media (max-width: 575px) {
margin-top: 0;
}
}
}

View File

@ -2,34 +2,33 @@ export function createMarkup(text) {
return { __html: text.split("</p>").join("</p>") };
}
// export function transformHtml(text) {
// let startHtml = {
// __html: text.split("<h3> || <h2>").join("<br><h2>").split("<br>"),
// };
// startHtml = startHtml.__html.filter(
// (el) => (el !== null && el !== "") || el === 0
// );
// const finalHtml = startHtml.map(
// (item) =>
// `<div class='experience__block'>
// <div class="summary__sections__head">
// <h3>Описание опыта работы</h3>
// <button>Редактировать</button>
// </div>
// <div class="experience__content">${item.split("<h3>")[0]}</div>
// </div>`
// );
// return { __html: finalHtml.join("") };
// }
//
// export const setToken = () => {
// const url = new URL(window.location.href);
// const urlT = url.searchParams.get("token");
// urlT ? sessionStorage.setItem('token', 'Bearer ' + urlT) : '';
// const tParam = urlT || sessionStorage.getItem('token');
// return tParam ? {"Authorization": tParam} : false
//
// };
export function transformHtml(text) {
let startHtml = {
__html: text.split("<h3> || <h2>").join("<br><h2>").split("<br>")
};
startHtml = startHtml.__html.filter(
(el) => (el !== null && el !== "") || el === 0
);
const finalHtml = startHtml.map(
(item) =>
`<div class='experience__block'>
<div class="summary__sections__head">
<h3>Описание опыта работы</h3>
<button>Редактировать</button>
</div>
<div class="experience__content">${item.split("<h3>")[0]}</div>
</div>`
);
return { __html: finalHtml.join("") };
}
export const setToken = () => {
const url = new URL(window.location.href);
const urlT = url.searchParams.get("token");
urlT ? sessionStorage.setItem("token", "Bearer " + urlT) : "";
const tParam = urlT || sessionStorage.getItem("token");
return tParam ? { Authorization: tParam } : false;
};
export const getToken = () => {
const tParam = `Bearer ${localStorage.getItem("auth_token")}`;