Compare commits
11 Commits
1576b23215
...
c972df0656
Author | SHA1 | Date | |
---|---|---|---|
|
c972df0656 | ||
|
5dbf1421f0 | ||
9b01381af1 | |||
|
deac5ec94d | ||
|
07574e98a6 | ||
|
23b8c3ad8a | ||
|
30c316a335 | ||
|
9a1ffb3c77 | ||
|
1ddaf1d405 | ||
|
35ad3086ba | ||
ee509a0754 |
@ -91,10 +91,10 @@ const Candidate = () => {
|
|||||||
const { header, img, classes } = setStyles();
|
const { header, img, classes } = setStyles();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="candidate__wrapper">
|
<div className="candidate">
|
||||||
<ProfileHeader />
|
<ProfileHeader />
|
||||||
<Navigation />
|
<Navigation />
|
||||||
<div className="container candidate">
|
<div className="container">
|
||||||
<ProfileBreadcrumbs
|
<ProfileBreadcrumbs
|
||||||
links={[
|
links={[
|
||||||
{ name: "Главная", link: "/profile" },
|
{ name: "Главная", link: "/profile" },
|
||||||
|
@ -1,22 +1,24 @@
|
|||||||
@use "sass:math";
|
@use "sass:math";
|
||||||
|
|
||||||
.candidate {
|
.candidate {
|
||||||
padding-top: 23px;
|
display: flex;
|
||||||
z-index: 0;
|
flex-direction: column;
|
||||||
|
min-height: 100vh;
|
||||||
|
background: #f1f1f1;
|
||||||
|
|
||||||
&__wrapper {
|
.container {
|
||||||
background: #f1f1f1;
|
margin-top: 23px;
|
||||||
min-height: 100vh;
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
flex: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.profile-breadcrumbs {
|
.profile-breadcrumbs {
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.row {
|
.row {
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&__header {
|
&__header {
|
||||||
@ -32,13 +34,11 @@
|
|||||||
|
|
||||||
.col-xl-8 {
|
.col-xl-8 {
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&__main {
|
&__main {
|
||||||
margin-top: 60px;
|
margin-top: 60px;
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: -1;
|
|
||||||
|
|
||||||
&-description {
|
&-description {
|
||||||
padding-left: 16px;
|
padding-left: 16px;
|
||||||
|
@ -25,7 +25,7 @@ export const AuthHeader = () => {
|
|||||||
</NavLink>
|
</NavLink>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<NavLink to={"/auth"}>Кабинет разработчика</NavLink>
|
<NavLink to={"/profile"}>Кабинет разработчика</NavLink>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<NavLink to={"/tracker-intro"}>Трекер</NavLink>
|
<NavLink to={"/tracker-intro"}>Трекер</NavLink>
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
background: #ffffff;
|
background: #ffffff;
|
||||||
|
|
||||||
.auth-nav {
|
.auth-nav {
|
||||||
|
height: 35px;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
@ -48,11 +49,13 @@
|
|||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
a:focus, a.active {
|
a:focus,
|
||||||
|
a.active {
|
||||||
color: #000000;
|
color: #000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.candidate {
|
.candidate {
|
||||||
|
background: transparent;
|
||||||
color: #1458dd;
|
color: #1458dd;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
.free-dev {
|
.free-dev {
|
||||||
overflow: hidden;
|
display: flex;
|
||||||
position: relative;
|
flex-direction: column;
|
||||||
|
min-height: 100vh;
|
||||||
background-color: #f1f1f1;
|
background-color: #f1f1f1;
|
||||||
|
|
||||||
.link {
|
.link {
|
||||||
@ -28,7 +29,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&_page {
|
&_page {
|
||||||
margin: 24px 0 30px 0;
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
flex: 1;
|
||||||
|
color: #000000;
|
||||||
|
padding: 50px 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__title {
|
&__title {
|
||||||
|
@ -137,7 +137,7 @@ export const ModalRegistration = ({ active, setActive }) => {
|
|||||||
|
|
||||||
<div className="button-box">
|
<div className="button-box">
|
||||||
{loader ? (
|
{loader ? (
|
||||||
<Loader style={"green"} />
|
<Loader />
|
||||||
) : (
|
) : (
|
||||||
<BaseButton
|
<BaseButton
|
||||||
onClick={async (e) => {
|
onClick={async (e) => {
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
width: 65%;
|
width: 65%;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
@media (max-width: 1106px) {
|
@media (max-width: 1106px) {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@ -115,6 +116,8 @@
|
|||||||
.input-container {
|
.input-container {
|
||||||
margin: 0 0 20px 0;
|
margin: 0 0 20px 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
span {
|
span {
|
||||||
|
@ -35,8 +35,8 @@ import arrow from "assets/icons/arrows/arrowCalendar.png";
|
|||||||
import arrowStart from "assets/icons/arrows/arrowStart.png";
|
import arrowStart from "assets/icons/arrows/arrowStart.png";
|
||||||
import arrowDown from "assets/icons/arrows/selectArrow.png";
|
import arrowDown from "assets/icons/arrows/selectArrow.png";
|
||||||
import calendarIcon from "assets/icons/calendar.svg";
|
import calendarIcon from "assets/icons/calendar.svg";
|
||||||
import close from "assets/icons/close.png";
|
|
||||||
import fileDelete from "assets/icons/closeProjectPersons.svg";
|
import fileDelete from "assets/icons/closeProjectPersons.svg";
|
||||||
|
import close from "assets/icons/crossWhite.svg";
|
||||||
import del from "assets/icons/delete.svg";
|
import del from "assets/icons/delete.svg";
|
||||||
import edit from "assets/icons/edit.svg";
|
import edit from "assets/icons/edit.svg";
|
||||||
import file from "assets/icons/fileModal.svg";
|
import file from "assets/icons/fileModal.svg";
|
||||||
@ -971,7 +971,7 @@ export const TicketFullScreen = () => {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="time">
|
<div className="time">
|
||||||
<img src={watch}></img>
|
<p>⏱</p>
|
||||||
<p>
|
<p>
|
||||||
{correctTimerTime(currentTimerCount.hours)}:
|
{correctTimerTime(currentTimerCount.hours)}:
|
||||||
{correctTimerTime(currentTimerCount.minute)}:
|
{correctTimerTime(currentTimerCount.minute)}:
|
||||||
|
@ -49,8 +49,6 @@
|
|||||||
|
|
||||||
.fullscreen-workers {
|
.fullscreen-workers {
|
||||||
@media (max-width: 880px) {
|
@media (max-width: 880px) {
|
||||||
background: #dff1ff;
|
|
||||||
|
|
||||||
.workers_box {
|
.workers_box {
|
||||||
@media (max-width: 880px) {
|
@media (max-width: 880px) {
|
||||||
flex-direction: inherit !important;
|
flex-direction: inherit !important;
|
||||||
|
@ -125,6 +125,11 @@ export const TrackerModal = ({
|
|||||||
}
|
}
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
dispatch(setProjectBoardFetch(projectBoard.id));
|
dispatch(setProjectBoardFetch(projectBoard.id));
|
||||||
|
showNotification({
|
||||||
|
show: true,
|
||||||
|
text: "Колонка создана",
|
||||||
|
type: "success"
|
||||||
|
});
|
||||||
});
|
});
|
||||||
setValueColumn("");
|
setValueColumn("");
|
||||||
setActive(false);
|
setActive(false);
|
||||||
@ -219,6 +224,11 @@ export const TrackerModal = ({
|
|||||||
}).then(() => {
|
}).then(() => {
|
||||||
setActive(false);
|
setActive(false);
|
||||||
dispatch(editProjectName({ id: projectId, name: projectName }));
|
dispatch(editProjectName({ id: projectId, name: projectName }));
|
||||||
|
showNotification({
|
||||||
|
show: true,
|
||||||
|
text: "Название проекта успешно изменено",
|
||||||
|
type: "success"
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -269,6 +279,11 @@ export const TrackerModal = ({
|
|||||||
}).then(() => {
|
}).then(() => {
|
||||||
setActive(false);
|
setActive(false);
|
||||||
dispatch(editColumnName({ id: columnId, title: columnName }));
|
dispatch(editColumnName({ id: columnId, title: columnName }));
|
||||||
|
showNotification({
|
||||||
|
show: true,
|
||||||
|
text: "Колонка создана",
|
||||||
|
type: "success"
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -323,6 +338,11 @@ export const TrackerModal = ({
|
|||||||
}).then((el) => {
|
}).then((el) => {
|
||||||
setActive(false);
|
setActive(false);
|
||||||
setEmailWorker("");
|
setEmailWorker("");
|
||||||
|
showNotification({
|
||||||
|
show: true,
|
||||||
|
text: "Приглашение отправлено",
|
||||||
|
type: "success"
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,3 @@
|
|||||||
.container {
|
|
||||||
max-width: 1160px !important;
|
|
||||||
}
|
|
||||||
.catalog {
|
.catalog {
|
||||||
background: #f1f1f1;
|
background: #f1f1f1;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
@ -14,6 +11,10 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
max-width: 1160px !important;
|
||||||
|
}
|
||||||
|
|
||||||
.outstaffing-block__selected .outstaffing-block__img {
|
.outstaffing-block__selected .outstaffing-block__img {
|
||||||
background-color: #52b70999;
|
background-color: #52b70999;
|
||||||
color: #f9f9f9;
|
color: #f9f9f9;
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
z-index: 9999;
|
z-index: 9;
|
||||||
max-width: 1160px;
|
max-width: 1160px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
|
@ -68,6 +68,11 @@ export const ProjectTicket = ({ project, index }) => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
// showNotification({
|
||||||
|
// show: true,
|
||||||
|
// text: "Проект успешно удален",
|
||||||
|
// type: "success"
|
||||||
|
// });
|
||||||
|
|
||||||
function closeAcceptModal() {
|
function closeAcceptModal() {
|
||||||
setAcceptModalOpen(false);
|
setAcceptModalOpen(false);
|
||||||
@ -135,7 +140,16 @@ export const ProjectTicket = ({ project, index }) => {
|
|||||||
<img src={edit}></img>
|
<img src={edit}></img>
|
||||||
<p>редактировать</p>
|
<p>редактировать</p>
|
||||||
</div>
|
</div>
|
||||||
<div onClick={() => copyProjectLink(project.id)}>
|
<div
|
||||||
|
onClick={() => {
|
||||||
|
copyProjectLink(project.id);
|
||||||
|
showNotification({
|
||||||
|
show: true,
|
||||||
|
text: "Ссылка скопирована в буфер обмена",
|
||||||
|
type: "copy"
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
>
|
||||||
<img src={link}></img>
|
<img src={link}></img>
|
||||||
<p>скопировать ссылку</p>
|
<p>скопировать ссылку</p>
|
||||||
</div>
|
</div>
|
||||||
|
@ -50,7 +50,7 @@ export const SideBar = () => {
|
|||||||
<Link to={"/auth"}>Вход для партнеров</Link>
|
<Link to={"/auth"}>Вход для партнеров</Link>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<Link to={"/auth"}>Кабинет разработчика</Link>
|
<Link to={"/profile"}>Кабинет разработчика</Link>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<Link to={"/tracker-intro"}>Трекер</Link>
|
<Link to={"/tracker-intro"}>Трекер</Link>
|
||||||
|
@ -5,6 +5,8 @@ import { selectUserInfo } from "@redux/quizSlice";
|
|||||||
|
|
||||||
import { urlForLocal } from "@utils/helper";
|
import { urlForLocal } from "@utils/helper";
|
||||||
|
|
||||||
|
import { Loader } from "@components/common/Loader/Loader";
|
||||||
|
|
||||||
// import { apiRequest } from "@api/request";
|
// import { apiRequest } from "@api/request";
|
||||||
import "./quiz.scss";
|
import "./quiz.scss";
|
||||||
|
|
||||||
@ -21,7 +23,7 @@ export const HeaderQuiz = ({ header }) => {
|
|||||||
<div className="header-quiz">
|
<div className="header-quiz">
|
||||||
<div className="header-quiz__container">
|
<div className="header-quiz__container">
|
||||||
{!userInfo ? (
|
{!userInfo ? (
|
||||||
<h2>Loading...</h2>
|
<Loader />
|
||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
{header && (
|
{header && (
|
||||||
|
@ -6,6 +6,8 @@ import { selectedTest } from "@redux/quizSlice";
|
|||||||
|
|
||||||
import { apiRequest } from "@api/request";
|
import { apiRequest } from "@api/request";
|
||||||
|
|
||||||
|
import { Loader } from "@components/common/Loader/Loader";
|
||||||
|
|
||||||
import comment from "assets/icons/comment.jpg";
|
import comment from "assets/icons/comment.jpg";
|
||||||
|
|
||||||
import "./quiz.scss";
|
import "./quiz.scss";
|
||||||
@ -24,7 +26,7 @@ export const Instruction = () => {
|
|||||||
<div className="instruction">
|
<div className="instruction">
|
||||||
<div className="instruction__container">
|
<div className="instruction__container">
|
||||||
{!countQuestions ? (
|
{!countQuestions ? (
|
||||||
<h2>Loading...</h2>
|
<Loader />
|
||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
<h3 className="instruction__title quiz-title_h3">
|
<h3 className="instruction__title quiz-title_h3">
|
||||||
|
@ -5,6 +5,8 @@ import { fetchResultTest, selectResult, selectedTest } from "@redux/quizSlice";
|
|||||||
|
|
||||||
import { apiRequest } from "@api/request";
|
import { apiRequest } from "@api/request";
|
||||||
|
|
||||||
|
import { Loader } from "@components/common/Loader/Loader";
|
||||||
|
|
||||||
export const Results = () => {
|
export const Results = () => {
|
||||||
const result = useSelector(selectResult);
|
const result = useSelector(selectResult);
|
||||||
const test = useSelector(selectedTest);
|
const test = useSelector(selectedTest);
|
||||||
@ -21,7 +23,7 @@ export const Results = () => {
|
|||||||
return (
|
return (
|
||||||
<div className={"result _container"}>
|
<div className={"result _container"}>
|
||||||
{!result ? (
|
{!result ? (
|
||||||
<h1 style={{ display: "block" }}>Ожидайте результата...</h1>
|
<Loader />
|
||||||
) : (
|
) : (
|
||||||
<div className="result__body">
|
<div className="result__body">
|
||||||
<div className="result__text">Благодарим за прохождение теста</div>
|
<div className="result__text">Благодарим за прохождение теста</div>
|
||||||
|
@ -566,7 +566,6 @@ $maxWidthContainer: 1123;
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
flex-wrap: wrap;
|
|
||||||
@media (max-width: 600px) {
|
@media (max-width: 600px) {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,16 @@
|
|||||||
.article-blog {
|
.article-blog {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
min-height: 100vh;
|
||||||
background: #f1f1f1;
|
background: #f1f1f1;
|
||||||
|
|
||||||
|
.container {
|
||||||
|
max-width: 1160px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
&__breadcrumbs {
|
&__breadcrumbs {
|
||||||
margin-top: 30px;
|
margin-top: 30px;
|
||||||
|
|
||||||
|
@ -1,7 +1,15 @@
|
|||||||
.auth-candidate {
|
.auth-candidate {
|
||||||
overflow: hidden;
|
display: flex;
|
||||||
position: relative;
|
flex-direction: column;
|
||||||
background-color: #f1f1f1;
|
min-height: 100vh;
|
||||||
|
background: #f1f1f1;
|
||||||
|
|
||||||
|
.container {
|
||||||
|
max-width: 1160px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
&__start {
|
&__start {
|
||||||
margin-top: 60px;
|
margin-top: 60px;
|
||||||
|
@ -1,6 +1,16 @@
|
|||||||
.blog {
|
.blog {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
min-height: 100vh;
|
||||||
background: #f1f1f1;
|
background: #f1f1f1;
|
||||||
|
|
||||||
|
.container {
|
||||||
|
max-width: 1160px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
&__breadcrumbs {
|
&__breadcrumbs {
|
||||||
margin-top: 30px;
|
margin-top: 30px;
|
||||||
|
|
||||||
|
@ -145,9 +145,10 @@ const CatalogSpecialists = () => {
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
return (
|
return (
|
||||||
<section className="catalog-specialists">
|
<div className="catalog-specialists">
|
||||||
<AuthHeader />
|
<AuthHeader />
|
||||||
<div className="container catalog-specialists__wrapper">
|
<SideBar />
|
||||||
|
<div className="catalog-specialists__content container">
|
||||||
<ProfileBreadcrumbs
|
<ProfileBreadcrumbs
|
||||||
links={[
|
links={[
|
||||||
{ name: "Главная", link: "/auth" },
|
{ name: "Главная", link: "/auth" },
|
||||||
@ -201,9 +202,8 @@ const CatalogSpecialists = () => {
|
|||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<SideBar />
|
|
||||||
<Footer />
|
<Footer />
|
||||||
</section>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -4,8 +4,20 @@
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
|
|
||||||
&__wrapper {
|
&__content {
|
||||||
padding-top: 24px;
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
flex: 1;
|
||||||
|
color: #000000;
|
||||||
|
padding: 50px 0 0;
|
||||||
|
|
||||||
|
@media (max-width: 1375px) {
|
||||||
|
padding-top: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 1000px) {
|
||||||
|
background-color: white;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&__head {
|
&__head {
|
||||||
|
@ -1,7 +1,15 @@
|
|||||||
.company-info {
|
.company-info {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
min-height: 100vh;
|
||||||
|
background-color: #f1f1f1;
|
||||||
|
|
||||||
&__content {
|
&__content {
|
||||||
background-color: #f1f1f1;
|
display: flex;
|
||||||
padding-top: 60px;
|
flex-direction: column;
|
||||||
|
flex: 1;
|
||||||
|
color: #000000;
|
||||||
|
padding: 50px 0 0;
|
||||||
|
|
||||||
@media (max-width: 1375px) {
|
@media (max-width: 1375px) {
|
||||||
padding-top: 120px;
|
padding-top: 120px;
|
||||||
|
@ -83,8 +83,7 @@ export const FrequentlyAskedQuestions = () => {
|
|||||||
<div className="frequently-asked-questions">
|
<div className="frequently-asked-questions">
|
||||||
<AuthHeader />
|
<AuthHeader />
|
||||||
<SideBar />
|
<SideBar />
|
||||||
|
<div className="container">
|
||||||
<div className="frequently-asked-questions__container container">
|
|
||||||
<ProfileBreadcrumbs
|
<ProfileBreadcrumbs
|
||||||
links={[
|
links={[
|
||||||
{ name: "Главная", link: "/auth" },
|
{ name: "Главная", link: "/auth" },
|
||||||
|
@ -8,9 +8,12 @@
|
|||||||
margin-top: 80px;
|
margin-top: 80px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__container {
|
.container {
|
||||||
flex: 1 1 auto;
|
display: flex;
|
||||||
margin: 30px 0;
|
flex-direction: column;
|
||||||
|
flex: 1;
|
||||||
|
max-width: 1160px;
|
||||||
|
margin-top: 23px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__about {
|
&__about {
|
||||||
|
@ -7,6 +7,9 @@
|
|||||||
.container {
|
.container {
|
||||||
max-width: 1160px;
|
max-width: 1160px;
|
||||||
margin-top: 23px;
|
margin-top: 23px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
flex: 1;
|
||||||
|
|
||||||
@media (max-width: 570px) {
|
@media (max-width: 570px) {
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
|
@ -225,7 +225,7 @@
|
|||||||
|
|
||||||
&__report,
|
&__report,
|
||||||
&__login {
|
&__login {
|
||||||
width: 60%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__report {
|
&__report {
|
||||||
|
@ -1,6 +1,15 @@
|
|||||||
.registration-candidate {
|
.registration-candidate {
|
||||||
position: relative;
|
display: flex;
|
||||||
background-color: #f1f1f1;
|
flex-direction: column;
|
||||||
|
min-height: 100vh;
|
||||||
|
background: #f1f1f1;
|
||||||
|
|
||||||
|
.container {
|
||||||
|
max-width: 1160px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
&__start {
|
&__start {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
@ -1,9 +1,15 @@
|
|||||||
.registration-setting {
|
.registration-setting {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
min-height: 100vh;
|
||||||
|
background-color: #f1f1f1;
|
||||||
|
|
||||||
&__content {
|
&__content {
|
||||||
background-color: #f1f1f1;
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
flex: 1;
|
||||||
color: #000000;
|
color: #000000;
|
||||||
padding: 50px 0 0;
|
padding: 50px 0 0;
|
||||||
min-height: 100vh;
|
|
||||||
|
|
||||||
@media (max-width: 1375px) {
|
@media (max-width: 1375px) {
|
||||||
padding-top: 100px;
|
padding-top: 100px;
|
||||||
|
@ -1,12 +1,16 @@
|
|||||||
import React from "react";
|
import React, { useEffect, useState } from "react";
|
||||||
import { useDispatch } from "react-redux";
|
import { useDispatch } from "react-redux";
|
||||||
import { Link } from "react-router-dom";
|
import { Link, useParams } from "react-router-dom";
|
||||||
|
|
||||||
import { setToggleTab } from "@redux/projectsTrackerSlice";
|
import { setToggleTab } from "@redux/projectsTrackerSlice";
|
||||||
|
|
||||||
import { copyProjectLink } from "@utils/helper";
|
import { copyProjectLink } from "@utils/helper";
|
||||||
|
import { urlForLocal } from "@utils/helper";
|
||||||
|
|
||||||
|
import { apiRequest } from "@api/request";
|
||||||
|
|
||||||
import { Footer } from "@components/Common/Footer/Footer";
|
import { Footer } from "@components/Common/Footer/Footer";
|
||||||
|
import { Loader } from "@components/Common/Loader/Loader";
|
||||||
import { Navigation } from "@components/Navigation/Navigation";
|
import { Navigation } from "@components/Navigation/Navigation";
|
||||||
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
|
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
|
||||||
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
|
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
|
||||||
@ -23,6 +27,21 @@ import "./statistics.scss";
|
|||||||
|
|
||||||
const Statistics = () => {
|
const Statistics = () => {
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
const params = useParams();
|
||||||
|
|
||||||
|
const [projectStatistic, setProjectStatistic] = useState(null);
|
||||||
|
const [projectInfo, setProjectInfo] = useState(null);
|
||||||
|
const [loader, setLoader] = useState(true);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
apiRequest(`/project/get-project?project_id=${params.id}`).then((res) => {
|
||||||
|
setProjectInfo(res);
|
||||||
|
});
|
||||||
|
apiRequest(`/project/statistic?project_id=${params.id}`).then((res) => {
|
||||||
|
setProjectStatistic(res);
|
||||||
|
setLoader(false);
|
||||||
|
});
|
||||||
|
}, []);
|
||||||
|
|
||||||
const teams = [
|
const teams = [
|
||||||
{
|
{
|
||||||
@ -72,135 +91,161 @@ const Statistics = () => {
|
|||||||
/>
|
/>
|
||||||
<h2 className="tracker__title">Управление проектами с трекером</h2>
|
<h2 className="tracker__title">Управление проектами с трекером</h2>
|
||||||
</div>
|
</div>
|
||||||
<div className="tracker__tabs">
|
{loader ? (
|
||||||
<div className="tracker__tabs__head">
|
<Loader />
|
||||||
<Link
|
) : (
|
||||||
to="/profile/tracker"
|
<div className="tracker__tabs">
|
||||||
className="tab active-tab"
|
<div className="tracker__tabs__head">
|
||||||
onClick={() => toggleTabs(1)}
|
<Link
|
||||||
>
|
to="/profile/tracker"
|
||||||
<img src={project} alt="img" />
|
className="tab active-tab"
|
||||||
<p>Проекты </p>
|
onClick={() => toggleTabs(1)}
|
||||||
</Link>
|
>
|
||||||
<Link
|
<img src={project} alt="img" />
|
||||||
to="/profile/tracker"
|
<p>Проекты </p>
|
||||||
className="tab"
|
</Link>
|
||||||
onClick={() => toggleTabs(2)}
|
<Link
|
||||||
>
|
to="/profile/tracker"
|
||||||
<img src={tasks} alt="img" />
|
className="tab"
|
||||||
<p>Все мои задачи</p>
|
onClick={() => toggleTabs(2)}
|
||||||
</Link>
|
>
|
||||||
<Link
|
<img src={tasks} alt="img" />
|
||||||
to="/profile/tracker"
|
<p>Все мои задачи</p>
|
||||||
className="tab"
|
</Link>
|
||||||
onClick={() => toggleTabs(3)}
|
<Link
|
||||||
>
|
to="/profile/tracker"
|
||||||
<img src={archive} alt="img" />
|
className="tab"
|
||||||
<p>Архив</p>
|
onClick={() => toggleTabs(3)}
|
||||||
</Link>
|
>
|
||||||
</div>
|
<img src={archive} alt="img" />
|
||||||
<div className="tracker__tabs__content">
|
<p>Архив</p>
|
||||||
<div className="tracker__tabs__content__wrapper statistics-body">
|
</Link>
|
||||||
<div className="statistics-header">
|
</div>
|
||||||
<div className="statistics-header__menu">
|
<div className="tracker__tabs__content">
|
||||||
<h1>Статистика проекта</h1>
|
<div className="tracker__tabs__content__wrapper statistics-body">
|
||||||
<img src={link} alt="#" />
|
<div className="statistics-header">
|
||||||
<span
|
<div className="statistics-header__menu">
|
||||||
className="return-text"
|
<h1>Статистика проекта</h1>
|
||||||
onClick={() => copyProjectLink("62")}
|
<img src={link} alt="#" />
|
||||||
>
|
<span
|
||||||
ссылка на проект
|
className="return-text"
|
||||||
</span>
|
onClick={() => copyProjectLink("62")}
|
||||||
</div>
|
>
|
||||||
|
ссылка на проект
|
||||||
<div className="statistics-header__return">
|
</span>
|
||||||
<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>
|
</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>
|
<div className="statistics-header__return">
|
||||||
{/* <span className="status status-active"> */}
|
<img src={arrow} alt="#" />
|
||||||
|
|
||||||
<span
|
<Link to={`/profile/tracker`} className="return-text">
|
||||||
className={
|
К списку проектов
|
||||||
item.status
|
</Link>
|
||||||
? "status status-active"
|
|
||||||
: "status status-none"
|
|
||||||
}
|
|
||||||
>
|
|
||||||
{item.status ? "Активно" : "Не активно"}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
})}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div className="add-person">
|
</div>
|
||||||
<span className="add-person__button">+</span>
|
<div className="statistics-info">
|
||||||
<p>Добавить участника</p>
|
<div className="statistics-info__head">
|
||||||
|
<p>Проект: </p>
|
||||||
|
<h1>{projectInfo?.name}</h1>
|
||||||
|
</div>
|
||||||
|
<div className="statistics-info__team">
|
||||||
|
<div className="project-info">
|
||||||
|
<div className="project-info__creator">
|
||||||
|
<span className="return-text">Создатель проекта:</span>
|
||||||
|
<div>
|
||||||
|
<p>{projectInfo?.owner_info?.fio}</p>{" "}
|
||||||
|
<img
|
||||||
|
src={
|
||||||
|
projectInfo?.owner_info?.avatar
|
||||||
|
? urlForLocal(projectInfo.owner_info.avatar)
|
||||||
|
: mockAvatar
|
||||||
|
}
|
||||||
|
alt="#"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="project-info__tasks">
|
||||||
|
<div className="task-quantity">
|
||||||
|
<p>Открытые задачи</p>
|
||||||
|
<span className="task-quantity_open">
|
||||||
|
{projectStatistic?.open_tasks_count}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div className="task-quantity">
|
||||||
|
<p>Задач в работе</p>
|
||||||
|
<span className="task-quantity_work">
|
||||||
|
{projectStatistic?.task_on_work_count}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div className="task-quantity">
|
||||||
|
<p>Закрыто задач</p>
|
||||||
|
<span className="task-quantity_closed">
|
||||||
|
{projectStatistic?.closed_task_count}
|
||||||
|
</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 className="head__name">Имя</p>
|
||||||
|
<p className="head__email">Почта</p>
|
||||||
|
<p className="head__role">Роль</p>
|
||||||
|
<p className="head__status">Статус</p>
|
||||||
|
</div>
|
||||||
|
<div className="list-team__body">
|
||||||
|
{projectStatistic?.participants.map((person, index) => {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<div className="list-team__item" key={index}>
|
||||||
|
<div className="person-name">
|
||||||
|
<img
|
||||||
|
src={
|
||||||
|
person.avatar
|
||||||
|
? urlForLocal(person.avatar)
|
||||||
|
: mockAvatar
|
||||||
|
}
|
||||||
|
alt="avatar"
|
||||||
|
/>
|
||||||
|
<p>{person.username}</p>
|
||||||
|
</div>
|
||||||
|
<div className="person-email">
|
||||||
|
<img src={emailImg} alt="#" />
|
||||||
|
<p>{person.email}</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p className="person-type">
|
||||||
|
{person.role ? person.role : "-"}
|
||||||
|
</p>
|
||||||
|
{/* <span className="status status-active"> */}
|
||||||
|
|
||||||
|
<span
|
||||||
|
className={
|
||||||
|
person.status
|
||||||
|
? "status status-active"
|
||||||
|
: "status status-none"
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{person.status ? "Активно" : "Не активно"}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="add-person">
|
||||||
|
<span className="add-person__button">+</span>
|
||||||
|
<p>Добавить участника</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
)}
|
||||||
</div>
|
</div>
|
||||||
<Footer />
|
<Footer />
|
||||||
</div>
|
</div>
|
||||||
|
@ -144,6 +144,11 @@
|
|||||||
line-height: 32px;
|
line-height: 32px;
|
||||||
margin-right: 19px;
|
margin-right: 19px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
max-width: 36px;
|
||||||
|
max-height: 36px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -240,7 +245,7 @@
|
|||||||
&__head {
|
&__head {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
margin-right: 123px;
|
margin-right: 55px;
|
||||||
|
|
||||||
p {
|
p {
|
||||||
color: #5b6871;
|
color: #5b6871;
|
||||||
@ -255,6 +260,30 @@
|
|||||||
@media (max-width: 650px) {
|
@media (max-width: 650px) {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.head {
|
||||||
|
&__name {
|
||||||
|
max-width: 270px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__email {
|
||||||
|
max-width: 270px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__role {
|
||||||
|
max-width: 168px;
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__status {
|
||||||
|
text-align: center;
|
||||||
|
max-width: 152px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&__item {
|
&__item {
|
||||||
@ -270,14 +299,18 @@
|
|||||||
&-name {
|
&-name {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
width: 202px;
|
max-width: 270px;
|
||||||
|
width: 100%;
|
||||||
img {
|
img {
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
|
max-width: 36px;
|
||||||
|
max-height: 36px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&-email {
|
&-email {
|
||||||
width: 235px;
|
max-width: 270px;
|
||||||
|
width: 100%;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
||||||
@ -292,6 +325,7 @@
|
|||||||
|
|
||||||
&-type {
|
&-type {
|
||||||
width: 168px;
|
width: 168px;
|
||||||
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 850px) {
|
@media (max-width: 850px) {
|
||||||
|
@ -8,7 +8,6 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
|
||||||
color: #000000;
|
color: #000000;
|
||||||
padding: 50px 0 0;
|
padding: 50px 0 0;
|
||||||
|
|
||||||
|
@ -1,9 +1,15 @@
|
|||||||
.tracker-registration {
|
.tracker-registration {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
min-height: 100vh;
|
||||||
|
background-color: #f1f1f1;
|
||||||
|
|
||||||
&__content {
|
&__content {
|
||||||
background-color: #f1f1f1;
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
flex: 1;
|
||||||
color: #000000;
|
color: #000000;
|
||||||
padding: 50px 0 0;
|
padding: 50px 0 0;
|
||||||
min-height: 100vh;
|
|
||||||
|
|
||||||
@media (max-width: 1375px) {
|
@media (max-width: 1375px) {
|
||||||
padding-top: 100px;
|
padding-top: 100px;
|
||||||
|
Loading…
Reference in New Issue
Block a user