Compare commits
20 Commits
269f3fe703
...
1576b23215
Author | SHA1 | Date | |
---|---|---|---|
|
1576b23215 | ||
|
0880d27aea | ||
adc80d4cb0 | |||
|
65ca1c32ff | ||
|
26b27129fd | ||
8525445e18 | |||
954f696044 | |||
181bbc834a | |||
e2bce6fd38 | |||
|
42cae241f2 | ||
|
140adb0051 | ||
|
0fc8f68c79 | ||
|
795f92fe61 | ||
|
59a279f924 | ||
|
2268e6e281 | ||
4ea80eb460 | |||
|
12dd238c13 | ||
|
ef6d8f4331 | ||
|
97813c875c | ||
2e0f6d24a0 |
@ -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 />}
|
||||
</>
|
||||
);
|
||||
};
|
@ -1,6 +1,6 @@
|
||||
import React from "react";
|
||||
|
||||
import { getCorrectDate } from "@components/Calendar/calendarHelper";
|
||||
import { getCorrectDate } from "@utils/calendarHelper";
|
||||
|
||||
import "./archiveTasksItem.scss";
|
||||
|
||||
|
@ -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>
|
||||
);
|
||||
};
|
||||
|
@ -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());
|
||||
|
@ -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) {
|
||||
|
@ -3,7 +3,6 @@
|
||||
margin: 10px 0;
|
||||
background-color: #f9f9f9;
|
||||
padding: 20px 30px;
|
||||
font-family: "LabGrotesque", sans-serif;
|
||||
|
||||
&__header {
|
||||
display: flex;
|
||||
|
@ -233,8 +233,8 @@ const Candidate = () => {
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
@ -148,12 +148,6 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
footer {
|
||||
margin-top: 2.5rem !important;
|
||||
position: relative;
|
||||
z-index: -2;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 375.98px) {
|
||||
|
@ -6,7 +6,6 @@
|
||||
border-radius: 44px;
|
||||
color: white;
|
||||
font-style: normal;
|
||||
font-family: "LabGrotesque", sans-serif;
|
||||
border: none;
|
||||
transition: 0.5s;
|
||||
|
||||
|
@ -18,7 +18,6 @@
|
||||
}
|
||||
|
||||
&__empty {
|
||||
font-family: "LabGrotesque", sans-serif;
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-size: 16px;
|
||||
|
@ -92,8 +92,8 @@ export const FreeDevelopers = () => {
|
||||
</BaseButton>
|
||||
</div>
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
<Footer />
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
@ -1,5 +1,4 @@
|
||||
.free-dev {
|
||||
font-family: "LabGrotesque", sans-serif;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
background-color: #f1f1f1;
|
||||
|
@ -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);
|
||||
|
@ -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 {
|
||||
|
@ -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";
|
||||
|
@ -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";
|
||||
|
@ -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 {
|
||||
|
@ -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 {
|
||||
|
@ -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";
|
||||
|
@ -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";
|
||||
|
@ -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;
|
||||
|
@ -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>
|
||||
);
|
||||
};
|
||||
|
@ -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;
|
||||
|
@ -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>
|
||||
|
@ -27,7 +27,7 @@ import {
|
||||
getCorrectDate,
|
||||
getCreatedDate,
|
||||
hourOfNum
|
||||
} from "../Calendar/calendarHelper";
|
||||
} from "../../utils/calendarHelper";
|
||||
import "./reportForm.scss";
|
||||
|
||||
registerLocale("ru", ru);
|
||||
|
@ -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 {
|
||||
|
@ -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";
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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";
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -91,10 +91,10 @@ const Auth = () => {
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
</div>
|
||||
<SideBar />
|
||||
<Footer />
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
@ -1,10 +1,10 @@
|
||||
.auth-partners {
|
||||
font-family: "LabGrotesque", sans-serif;
|
||||
background-color: #f1f1f1;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
|
||||
&__background {
|
||||
background-color: #f1f1f1;
|
||||
|
||||
position: relative;
|
||||
}
|
||||
|
||||
|
@ -115,7 +115,7 @@ export const AuthForCandidate = () => {
|
||||
resetModal={setModalReset}
|
||||
title="Войти, если есть доступ"
|
||||
description="Если вы получили доступ, пройдя
|
||||
2 шага для входа или хотите узнать
|
||||
2 шага для входа, или хотите узнать
|
||||
свои результаты в кабинете"
|
||||
/>
|
||||
<div className="auth-candidate__start">
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -90,12 +90,10 @@ export const Blog = () => {
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
|
||||
<div className="blog__load-more">
|
||||
<button>Загрузить еще</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Footer />
|
||||
</div>
|
||||
);
|
||||
|
@ -200,9 +200,9 @@ const CatalogSpecialists = () => {
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
<SideBar />
|
||||
<Footer />
|
||||
</section>
|
||||
);
|
||||
};
|
||||
|
@ -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;
|
||||
|
@ -103,8 +103,8 @@ export const CompanyInfo = () => {
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
@ -1,6 +1,5 @@
|
||||
.company-info {
|
||||
&__content {
|
||||
font-family: "LabGrotesque", sans-serif;
|
||||
background-color: #f1f1f1;
|
||||
padding-top: 60px;
|
||||
|
||||
|
@ -96,8 +96,8 @@ const FormPage = () => {
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
@ -124,10 +124,6 @@
|
||||
right: 2.5rem;
|
||||
}
|
||||
|
||||
.form-page footer {
|
||||
margin-top: 6rem !important;
|
||||
}
|
||||
|
||||
@media (max-width: 991px) {
|
||||
.form-page {
|
||||
&__separator {
|
||||
|
@ -2,9 +2,7 @@
|
||||
|
||||
.frequently-asked-question {
|
||||
background: #f5f5f5;
|
||||
height: 100%;
|
||||
min-height: 100vh;
|
||||
font-family: "LabGrotesque", sans-serif;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
|
@ -1,8 +1,6 @@
|
||||
.frequently-asked-questions {
|
||||
background: #f5f5f5;
|
||||
height: 100%;
|
||||
min-height: 100vh;
|
||||
font-family: "LabGrotesque", sans-serif;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
|
@ -69,9 +69,9 @@ const Home = () => {
|
||||
<h2 className="catalog__title">Каталог специалистов</h2>
|
||||
<Outstaffing />
|
||||
<Description onLoadMore={loadMore} isLoadingMore={isLoadingMore} />
|
||||
<Footer />
|
||||
</div>
|
||||
</div>
|
||||
<Footer />
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
@ -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;
|
||||
|
@ -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";
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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";
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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>
|
||||
);
|
||||
};
|
13
src/pages/Payouts/payouts.scss
Normal file
13
src/pages/Payouts/payouts.scss
Normal 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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
@ -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%;
|
||||
|
@ -1,5 +1,4 @@
|
||||
.registration-candidate {
|
||||
font-family: "LabGrotesque", sans-serif;
|
||||
position: relative;
|
||||
background-color: #f1f1f1;
|
||||
|
||||
@ -188,8 +187,4 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
footer {
|
||||
margin-top: 80px;
|
||||
}
|
||||
}
|
||||
|
@ -212,8 +212,8 @@ export const RegistrationSetting = () => {
|
||||
</button>
|
||||
)}
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
);
|
||||
};
|
@ -1,6 +1,5 @@
|
||||
.registration-setting {
|
||||
&__content {
|
||||
font-family: "LabGrotesque", sans-serif;
|
||||
background-color: #f1f1f1;
|
||||
color: #000000;
|
||||
padding: 50px 0 0;
|
||||
|
@ -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>
|
||||
);
|
||||
};
|
||||
|
@ -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;
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
@ -38,8 +38,8 @@ export const TrackerAuth = () => {
|
||||
<ModalReset setModalReset={setModalReset} />
|
||||
</ModalLayout>
|
||||
)}
|
||||
<Footer />
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
);
|
||||
};
|
@ -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;
|
||||
|
@ -102,8 +102,8 @@ export const TrackerIntro = () => {
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
);
|
||||
};
|
@ -1,7 +1,6 @@
|
||||
.tracker-intro {
|
||||
background-color: #f1f1f1;
|
||||
&__content {
|
||||
font-family: "LabGrotesque", sans-serif;
|
||||
background-color: #f1f1f1;
|
||||
color: #000000;
|
||||
|
||||
@media (max-width: 1375px) {
|
||||
|
@ -149,8 +149,8 @@ export const TrackerRegistration = () => {
|
||||
/>
|
||||
</ModalLayout>
|
||||
)}
|
||||
<Footer />
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
);
|
||||
};
|
@ -1,6 +1,5 @@
|
||||
.tracker-registration {
|
||||
&__content {
|
||||
font-family: "LabGrotesque", sans-serif;
|
||||
background-color: #f1f1f1;
|
||||
color: #000000;
|
||||
padding: 50px 0 0;
|
||||
|
@ -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>
|
||||
);
|
||||
};
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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")}`;
|
||||
|
Loading…
Reference in New Issue
Block a user