Moving all images to assets
@ -1,13 +1,14 @@
|
||||
import React from 'react';
|
||||
import { ActContent } from "../../components/features/bookkeeping/ActContent/ActContent"
|
||||
import { BookkeepingTemplete } from "../../components/features/bookkeeping/BookkeepingTemplete/BookkeepingTemplete"
|
||||
import React from "react";
|
||||
|
||||
import { ActContent } from "../../components/features/bookkeeping/ActContent/ActContent";
|
||||
import { BookkeepingTemplete } from "../../components/features/bookkeeping/BookkeepingTemplete/BookkeepingTemplete";
|
||||
|
||||
export const ActPage = () => {
|
||||
return (
|
||||
<div>
|
||||
<BookkeepingTemplete showBreadcrumps nameBreeadcrumps="Создание акта">
|
||||
<ActContent></ActContent>
|
||||
</BookkeepingTemplete>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
return (
|
||||
<div>
|
||||
<BookkeepingTemplete showBreadcrumps nameBreeadcrumps="Создание акта">
|
||||
<ActContent></ActContent>
|
||||
</BookkeepingTemplete>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
@ -7,13 +7,13 @@ import { Footer } from "../../components/Footer/Footer";
|
||||
import { ProfileBreadcrumbs } from "../../components/ProfileBreadcrumbs/ProfileBreadcrumbs";
|
||||
import CardArticle from "../../components/UI/CardArticle/CardArticle";
|
||||
|
||||
import mockImgArticle from "../../images/mockImgArticle.png";
|
||||
import rightArrow from "../../images/left-arrow.png";
|
||||
import yandexZen from "../../images/yandexZen.svg";
|
||||
import cardCalendar from "../../images/cardCalendar.svg";
|
||||
import cardImg1 from "../../images/cardArticleItem.png";
|
||||
import cardImg2 from "../../images/cardArticleItem2.png";
|
||||
import cardImg3 from "../../images/cardArticleItem3.png";
|
||||
import mockImgArticle from "../../assets/images/mock/mockImgArticle.png";
|
||||
import rightArrow from "../../assets/icons/arrows/left-arrow.png";
|
||||
import yandexZen from "../../assets/icons/yandexZen.svg";
|
||||
import cardCalendar from "../../assets/icons/cardCalendar.svg";
|
||||
import cardImg1 from "../../assets/images/mock/cardArticleItem.png";
|
||||
import cardImg2 from "../../assets/images/mock/cardArticleItem2.png";
|
||||
import cardImg3 from "../../assets/images/mock/cardArticleItem3.png";
|
||||
|
||||
import "./article.scss";
|
||||
|
||||
|
@ -13,18 +13,17 @@ import CategoriesItem from "../../components/CategoriesItem/CategoriesItem";
|
||||
import StepsForCandidate from "../../components/StepsForCandidate/StepsForCandidate";
|
||||
import { Footer } from "../../components/Footer/Footer";
|
||||
|
||||
import BackEndImg from "../../images/personalBackEnd.svg";
|
||||
import FrontendImg from "../../images/PersonalFrontend.svg";
|
||||
import ArchitectureImg from "../../images/PersonalArchitecture.svg";
|
||||
import DesignImg from "../../images/PersonalDesign.svg";
|
||||
import TestImg from "../../images/PersonalTesters.svg";
|
||||
import AdminImg from "../../images/PersonalAdmin.svg";
|
||||
import ManageImg from "../../images/PersonalMng.svg";
|
||||
import CopyImg from "../../images/PersonalCopy.svg";
|
||||
import SmmImg from "../../images/PersonalSMM.svg";
|
||||
|
||||
import authImg from "../../images/authCandidateFormImg.png";
|
||||
import arrowBtn from "../../images/arrowRight.svg";
|
||||
import BackEndImg from "../../assets/images/partnerProfile/personalBackEnd.svg";
|
||||
import FrontendImg from "../../assets/images/partnerProfile/PersonalFrontend.svg";
|
||||
import ArchitectureImg from "../../assets/images/partnerProfile/PersonalArchitecture.svg";
|
||||
import DesignImg from "../../assets/images/partnerProfile/PersonalDesign.svg";
|
||||
import TestImg from "../../assets/images/partnerProfile/PersonalTesters.svg";
|
||||
import AdminImg from "../../assets/images/partnerProfile/PersonalAdmin.svg";
|
||||
import ManageImg from "../../assets/images/partnerProfile/PersonalMng.svg";
|
||||
import CopyImg from "../../assets/images/partnerProfile/PersonalCopy.svg";
|
||||
import SmmImg from "../../assets/images/partnerProfile/PersonalSMM.svg";
|
||||
import authImg from "../../assets/images/partnerProfile/authCandidateFormImg.png";
|
||||
import arrowBtn from "../../assets/icons/arrows/arrowRight.svg";
|
||||
|
||||
import "./authForCandidate.scss";
|
||||
|
||||
|
@ -10,13 +10,13 @@ import { selectAuth } from "../../redux/outstaffingSlice";
|
||||
import { Link, useNavigate } from "react-router-dom";
|
||||
import { scrollToForm } from "../../helper";
|
||||
|
||||
import arrow from "../../images/arrow__login_page.png";
|
||||
import medium from "../../images/medium_male_big.png";
|
||||
import cross from "../../images/cross.png";
|
||||
import text from "../../images/Body_Text.png";
|
||||
import arrowBtn from "../../images/arrowRight.svg";
|
||||
import vector from "../../images/Vector_Smart_Object.png";
|
||||
import vectorBlack from "../../images/Vector_Smart_Object_black.png";
|
||||
import arrow from "../../assets/icons/arrows/arrow__login_page.png";
|
||||
import medium from "../../assets/images/medium_male_big.png";
|
||||
import cross from "../../assets/images/cross.png";
|
||||
import text from "../../assets/images/Body_Text.png";
|
||||
import arrowBtn from "../../assets/icons/arrows/arrowRight.svg";
|
||||
import vector from "../../assets/images/Vector_Smart_Object.png";
|
||||
import vectorBlack from "../../assets/images/Vector_Smart_Object_black.png";
|
||||
|
||||
import "./authForDevelopers.scss";
|
||||
|
||||
|
@ -11,13 +11,13 @@ import { selectAuth } from "../../redux/outstaffingSlice";
|
||||
import { Link, useNavigate } from "react-router-dom";
|
||||
import { scrollToForm } from "../../helper";
|
||||
|
||||
import arrow from "../../images/arrow__login_page.png";
|
||||
import authImg from "../../images/auth_img.png";
|
||||
import cross from "../../images/cross.png";
|
||||
import text from "../../images/Body_Text.png";
|
||||
import arrowBtn from "../../images/arrowRight.svg";
|
||||
import vector from "../../images/Vector_Smart_Object.png";
|
||||
import vectorBlack from "../../images/Vector_Smart_Object_black.png";
|
||||
import arrow from "../../assets/icons/arrows/arrow__login_page.png";
|
||||
import authImg from "../../assets/images/auth_img.png";
|
||||
import cross from "../../assets/images/cross.png";
|
||||
import text from "../../assets/images/Body_Text.png";
|
||||
import arrowBtn from "../../assets/icons/arrows/arrowRight.svg";
|
||||
import vector from "../../assets/images/Vector_Smart_Object.png";
|
||||
import vectorBlack from "../../assets/images/Vector_Smart_Object_black.png";
|
||||
|
||||
import "./authForPartners.scss";
|
||||
|
@ -6,15 +6,13 @@ import { ProfileBreadcrumbs } from "../../components/ProfileBreadcrumbs/ProfileB
|
||||
import { Footer } from "../../components/Footer/Footer";
|
||||
import CardArticle from "../../components/UI/CardArticle/CardArticle";
|
||||
|
||||
// import arrowRight from "../../images/arrowRight.png";
|
||||
import blogArrow from "../../images/blogArrow.svg";
|
||||
|
||||
import cardImg1 from "../../images/cardArticleItem.png";
|
||||
import cardImg2 from "../../images/cardArticleItem2.png";
|
||||
import cardImg3 from "../../images/cardArticleItem3.png";
|
||||
import cardImg4 from "../../images/cardArticleItem4.png";
|
||||
import cardImg5 from "../../images/cardArticleItem5.png";
|
||||
import cardImg6 from "../../images/cardArticleItem6.png";
|
||||
import blogArrow from "../../assets/icons/arrows/blogArrow.svg";
|
||||
import cardImg1 from "../../assets/images/mock/cardArticleItem.png";
|
||||
import cardImg2 from "../../assets/images/mock/cardArticleItem2.png";
|
||||
import cardImg3 from "../../assets/images/mock/cardArticleItem3.png";
|
||||
import cardImg4 from "../../assets/images/mock/cardArticleItem4.png";
|
||||
import cardImg5 from "../../assets/images/mock/cardArticleItem5.png";
|
||||
import cardImg6 from "../../assets/images/mock/cardArticleItem6.png";
|
||||
|
||||
import "./blog.scss";
|
||||
|
||||
|
@ -3,24 +3,22 @@ import { useDispatch, useSelector } from "react-redux";
|
||||
import { useParams, useNavigate, Navigate } from "react-router-dom";
|
||||
import SVG from "react-inlinesvg";
|
||||
|
||||
import Form from "../../components/Form/Form";
|
||||
import { Footer } from "../../components/Footer/Footer";
|
||||
import { LogoutButton } from "../../components/LogoutButton/LogoutButton";
|
||||
|
||||
import arrow from "../../images/left-arrow.png";
|
||||
import rectangle from "../../images/rectangle_secondPage.png";
|
||||
import telegramIcon from "../../images/telegram-icon.svg";
|
||||
|
||||
import { LEVELS, SKILLS } from "../../constants/constants";
|
||||
|
||||
import {
|
||||
currentCandidate,
|
||||
selectCurrentCandidate,
|
||||
} from "../../redux/outstaffingSlice";
|
||||
|
||||
import { apiRequest } from "../../api/request";
|
||||
import { urlForLocal } from "../../helper";
|
||||
|
||||
import Form from "../../components/Form/Form";
|
||||
import { Footer } from "../../components/Footer/Footer";
|
||||
import { LogoutButton } from "../../components/LogoutButton/LogoutButton";
|
||||
|
||||
import arrow from "../../assets/icons/arrows/left-arrow.png";
|
||||
import rectangle from "../../assets/images/rectangle_secondPage.png";
|
||||
import telegramIcon from "../../assets/icons/telegram-icon.svg";
|
||||
|
||||
import "./formPage.scss";
|
||||
|
||||
const FormPage = () => {
|
@ -6,7 +6,7 @@ import SideBar from "../../components/SideBar/SideBar";
|
||||
import AuthHeader from "../../components/AuthHeader/AuthHeader";
|
||||
import { Footer } from "../../components/Footer/Footer";
|
||||
|
||||
import arrowBtn from "../../images/arrowRight.svg";
|
||||
import arrowBtn from "../../assets/icons/arrows/arrowRight.svg";
|
||||
|
||||
import "./FrequentlyAskedQuestion.scss";
|
||||
|
||||
|
@ -3,10 +3,10 @@ import React from "react";
|
||||
import { ProfileBreadcrumbs } from "../../components/ProfileBreadcrumbs/ProfileBreadcrumbs";
|
||||
import { Footer } from "../../components/Footer/Footer";
|
||||
import { FrequentlyAskedQuestionsItem } from "../../components/FrequentlyAskedQuestionsItem/FrequentlyAskedQuestionsItem";
|
||||
|
||||
import AuthHeader from "../../components/AuthHeader/AuthHeader";
|
||||
import SideBar from "../../components/SideBar/SideBar";
|
||||
import arrow from "./../../images/faq/arrow.svg";
|
||||
|
||||
import arrow from "./../../assets/images/faq/arrow.svg";
|
||||
|
||||
import "./FrequentlyAskedQuestions.scss";
|
||||
|
||||
|
@ -1,81 +0,0 @@
|
||||
import React, {useState, useEffect} from 'react'
|
||||
import {useDispatch} from 'react-redux'
|
||||
|
||||
import Outstaffing from '../../components/Outstaffing/Outstaffing'
|
||||
import Description from '../../components/Description/Description'
|
||||
import {Footer} from '../../components/Footer/Footer'
|
||||
|
||||
import {profiles, tags} from '../../redux/outstaffingSlice'
|
||||
|
||||
import {ProfileHeader} from "../../components/ProfileHeader/ProfileHeader";
|
||||
import {ProfileBreadcrumbs} from "../../components/ProfileBreadcrumbs/ProfileBreadcrumbs"
|
||||
import {apiRequest} from "../../api/request";
|
||||
import {Navigate} from "react-router-dom";
|
||||
import { Navigation } from '../../components/Navigation/Navigation'
|
||||
|
||||
|
||||
const Home = () => {
|
||||
if(localStorage.getItem('role_status') !== '18') {
|
||||
return <Navigate to="/profile" replace/>
|
||||
}
|
||||
|
||||
const [isLoadingMore, setIsLoadingMore] = useState(false);
|
||||
const [index, setIndex] = useState(4);
|
||||
|
||||
const dispatch = useDispatch();
|
||||
|
||||
useEffect(() => {
|
||||
setIsLoadingMore(true);
|
||||
apiRequest('/profile', {
|
||||
params: {limit: 1000},
|
||||
}).then((profileArr) => {
|
||||
|
||||
dispatch(profiles(profileArr));
|
||||
setIsLoadingMore(false)
|
||||
});
|
||||
|
||||
apiRequest('/skills/skills-on-main-page', {}).then((skills) => {
|
||||
if (!skills) {
|
||||
return []
|
||||
}
|
||||
|
||||
const keys = Object.keys(skills);
|
||||
const values = Object.values(skills);
|
||||
|
||||
const tempTags = values.map((value, index) =>
|
||||
value.map((val) => {
|
||||
return {id: val.id, value: val.tags, name: keys[index]}
|
||||
})
|
||||
);
|
||||
dispatch(tags(tempTags))
|
||||
})
|
||||
|
||||
}, [index]);
|
||||
|
||||
const loadMore = (count) => {
|
||||
setIndex((prev) => prev + count)
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<ProfileHeader/>
|
||||
<Navigation />
|
||||
<div className="catalog">
|
||||
<div className='container'>
|
||||
<ProfileBreadcrumbs links={[
|
||||
{name: 'Главная', link: '/profile'},
|
||||
{name: 'Запросы и открытые позиции', link: '/profile/requests'},
|
||||
{name: 'Каталог', link: '/profile/catalog'}
|
||||
]}
|
||||
/>
|
||||
<h2 className="catalog__title">Каталог специалистов</h2>
|
||||
<Outstaffing/>
|
||||
<Description onLoadMore={loadMore} isLoadingMore={isLoadingMore}/>
|
||||
<Footer/>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
};
|
||||
|
||||
export default Home
|
77
src/pages/Home/Home.jsx
Normal file
@ -0,0 +1,77 @@
|
||||
import React, { useState, useEffect } from "react";
|
||||
import { useDispatch } from "react-redux";
|
||||
import { apiRequest } from "../../api/request";
|
||||
import { Navigate } from "react-router-dom";
|
||||
import { profiles, tags } from "../../redux/outstaffingSlice";
|
||||
|
||||
import Outstaffing from "../../components/Outstaffing/Outstaffing";
|
||||
import Description from "../../components/Description/Description";
|
||||
import { Footer } from "../../components/Footer/Footer";
|
||||
import { ProfileHeader } from "../../components/ProfileHeader/ProfileHeader";
|
||||
import { ProfileBreadcrumbs } from "../../components/ProfileBreadcrumbs/ProfileBreadcrumbs";
|
||||
import { Navigation } from "../../components/Navigation/Navigation";
|
||||
|
||||
const Home = () => {
|
||||
if (localStorage.getItem("role_status") !== "18") {
|
||||
return <Navigate to="/profile" replace />;
|
||||
}
|
||||
|
||||
const [isLoadingMore, setIsLoadingMore] = useState(false);
|
||||
const [index, setIndex] = useState(4);
|
||||
|
||||
const dispatch = useDispatch();
|
||||
|
||||
useEffect(() => {
|
||||
setIsLoadingMore(true);
|
||||
apiRequest("/profile", {
|
||||
params: { limit: 1000 },
|
||||
}).then((profileArr) => {
|
||||
dispatch(profiles(profileArr));
|
||||
setIsLoadingMore(false);
|
||||
});
|
||||
|
||||
apiRequest("/skills/skills-on-main-page", {}).then((skills) => {
|
||||
if (!skills) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const keys = Object.keys(skills);
|
||||
const values = Object.values(skills);
|
||||
|
||||
const tempTags = values.map((value, index) =>
|
||||
value.map((val) => {
|
||||
return { id: val.id, value: val.tags, name: keys[index] };
|
||||
})
|
||||
);
|
||||
dispatch(tags(tempTags));
|
||||
});
|
||||
}, [index]);
|
||||
|
||||
const loadMore = (count) => {
|
||||
setIndex((prev) => prev + count);
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<ProfileHeader />
|
||||
<Navigation />
|
||||
<div className="catalog">
|
||||
<div className="container">
|
||||
<ProfileBreadcrumbs
|
||||
links={[
|
||||
{ name: "Главная", link: "/profile" },
|
||||
{ name: "Запросы и открытые позиции", link: "/profile/requests" },
|
||||
{ name: "Каталог", link: "/profile/catalog" },
|
||||
]}
|
||||
/>
|
||||
<h2 className="catalog__title">Каталог специалистов</h2>
|
||||
<Outstaffing />
|
||||
<Description onLoadMore={loadMore} isLoadingMore={isLoadingMore} />
|
||||
<Footer />
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default Home;
|
@ -1,315 +1,447 @@
|
||||
import React, {useEffect, useState } from 'react';
|
||||
import React, { useEffect, useState } from "react";
|
||||
import { useSelector } from "react-redux";
|
||||
import { Link, Navigate, useNavigate } from "react-router-dom";
|
||||
|
||||
import {ProfileHeader} from "../../components/ProfileHeader/ProfileHeader";
|
||||
import {ProfileBreadcrumbs} from "../../components/ProfileBreadcrumbs/ProfileBreadcrumbs"
|
||||
import {Footer} from "../../components/Footer/Footer";
|
||||
import {Link, Navigate, useNavigate} from "react-router-dom";
|
||||
import { Navigation } from '../../components/Navigation/Navigation';
|
||||
import {apiRequest} from "../../api/request";
|
||||
import {useSelector} from "react-redux";
|
||||
import { apiRequest } from "../../api/request";
|
||||
import { getPartnerRequestInfo } from "../../redux/outstaffingSlice";
|
||||
|
||||
import { getPartnerRequestInfo } from '../../redux/outstaffingSlice'
|
||||
import { ProfileHeader } from "../../components/ProfileHeader/ProfileHeader";
|
||||
import { ProfileBreadcrumbs } from "../../components/ProfileBreadcrumbs/ProfileBreadcrumbs";
|
||||
import { Footer } from "../../components/Footer/Footer";
|
||||
import { Navigation } from "../../components/Navigation/Navigation";
|
||||
|
||||
import arrowDown from "../../images/selectArrow.png"
|
||||
import processImg from "../../images/partnerAddRequestFirstImg.png"
|
||||
import reportImg from "../../images/partnerAddRequestSecondImg.png"
|
||||
import documentsImg from "../../images/partnerAddRequestThirdInfo.png"
|
||||
import deleteIcon from "../../images/close.png"
|
||||
import arrowDown from "../../assets/icons/arrows/selectArrow.png";
|
||||
import processImg from "../../assets/images/partnerProfile/partnerAddRequestFirstImg.png";
|
||||
import reportImg from "../../assets/images/partnerProfile/partnerAddRequestSecondImg.png";
|
||||
import documentsImg from "../../assets/images/partnerProfile/partnerAddRequestThirdInfo.png";
|
||||
import deleteIcon from "../../assets/icons/close.png";
|
||||
|
||||
|
||||
import './partnerAddRequest.scss'
|
||||
import "./partnerAddRequest.scss";
|
||||
|
||||
export const PartnerAddRequest = () => {
|
||||
if(localStorage.getItem('role_status') !== '18') {
|
||||
return <Navigate to="/profile" replace/>
|
||||
if (localStorage.getItem("role_status") !== "18") {
|
||||
return <Navigate to="/profile" replace />;
|
||||
}
|
||||
|
||||
const partnerRequestInfo = useSelector(getPartnerRequestInfo);
|
||||
const currentUrl = useState(window.location.pathname);
|
||||
const navigate = useNavigate();
|
||||
const [skills, setSkills] = useState([]);
|
||||
const [filteredSkills, setFilteredSkills] = useState([]);
|
||||
const [specializationList, setSpecializationList] = useState([]);
|
||||
const [levelList, setLevelList] = useState([]);
|
||||
const [countList] = useState([1, 2, 3, 4, 5]);
|
||||
const [openSkillsSelect, setOpenSkillsSelect] = useState(false);
|
||||
const [openSpecializationList, setOpenSpecializationListOpen] =
|
||||
useState(false);
|
||||
const [openLevelList, setOpenLevelList] = useState(false);
|
||||
const [openCountList, setOpenCountList] = useState(false);
|
||||
const [editRequest, setEditRequest] = useState(false);
|
||||
const [selectedSkills, setSelectedSkills] = useState([]);
|
||||
const [selectedSpecialization, setSelectedSpecialization] = useState(
|
||||
"Выберите специализацию"
|
||||
);
|
||||
const [selectedLevel, setSelectedLevel] = useState("Выберите уровень");
|
||||
const [selectedCount, setSelectedCount] = useState(
|
||||
"Выберите кол-во сотрудников"
|
||||
);
|
||||
const [inputs, setInputs] = useState({ title: "", description: "" });
|
||||
|
||||
if (
|
||||
currentUrl[0] === "/profile/edit-request" &&
|
||||
!Object.keys(partnerRequestInfo).length
|
||||
) {
|
||||
return <Navigate to="/profile/requests" replace />;
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
apiRequest(`/profile/positions-list`).then((el) =>
|
||||
setSpecializationList(el)
|
||||
);
|
||||
apiRequest(`/profile/level-list`).then((el) => setLevelList(el));
|
||||
apiRequest(`/skills/get-skills-list`).then((el) => {
|
||||
setSkills(el);
|
||||
setFilteredSkills(el);
|
||||
});
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
if (
|
||||
currentUrl[0] === "/profile/edit-request" &&
|
||||
Object.keys(partnerRequestInfo).length
|
||||
) {
|
||||
setInputs({
|
||||
title: partnerRequestInfo.title,
|
||||
description: partnerRequestInfo.descr,
|
||||
});
|
||||
setSelectedSpecialization(partnerRequestInfo.position);
|
||||
setSelectedLevel({
|
||||
name: partnerRequestInfo.level,
|
||||
id: partnerRequestInfo.knowledge_level_id,
|
||||
});
|
||||
setSelectedCount(partnerRequestInfo.specialist_count);
|
||||
setSelectedSkills(partnerRequestInfo.skills);
|
||||
setEditRequest(true);
|
||||
}
|
||||
}, []);
|
||||
|
||||
const partnerRequestInfo = useSelector(getPartnerRequestInfo);
|
||||
const currentUrl = useState(window.location.pathname)
|
||||
const navigate= useNavigate();
|
||||
const [skills, setSkills] = useState([])
|
||||
const [filteredSkills, setFilteredSkills] = useState([])
|
||||
const [specializationList, setSpecializationList] = useState([])
|
||||
const [levelList, setLevelList] = useState([])
|
||||
const [countList] = useState([1, 2, 3, 4, 5])
|
||||
const [openSkillsSelect, setOpenSkillsSelect] = useState(false)
|
||||
const [openSpecializationList, setOpenSpecializationListOpen] = useState(false)
|
||||
const [openLevelList, setOpenLevelList] = useState(false)
|
||||
const [openCountList, setOpenCountList] = useState(false)
|
||||
const [editRequest, setEditRequest] = useState(false)
|
||||
const [selectedSkills, setSelectedSkills] = useState([])
|
||||
const [selectedSpecialization, setSelectedSpecialization] = useState('Выберите специализацию')
|
||||
const [selectedLevel, setSelectedLevel] = useState('Выберите уровень')
|
||||
const [selectedCount, setSelectedCount] = useState('Выберите кол-во сотрудников')
|
||||
const [inputs, setInputs] = useState({title: '', description: ''})
|
||||
|
||||
if (currentUrl[0] === "/profile/edit-request" && !Object.keys(partnerRequestInfo).length) {
|
||||
return <Navigate to="/profile/requests" replace/>
|
||||
const disableBtn = () => {
|
||||
if (
|
||||
!inputs.title ||
|
||||
typeof selectedSpecialization === "string" ||
|
||||
typeof selectedLevel === "string" ||
|
||||
typeof selectedCount === "string" ||
|
||||
!inputs.description ||
|
||||
!selectedSkills.length
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
apiRequest(`/profile/positions-list`).then((el) => setSpecializationList(el))
|
||||
apiRequest(`/profile/level-list`).then((el) => setLevelList(el))
|
||||
apiRequest(`/skills/get-skills-list`).then((el) => {
|
||||
setSkills(el)
|
||||
setFilteredSkills(el)
|
||||
})
|
||||
}, [])
|
||||
|
||||
useEffect(() => {
|
||||
if (currentUrl[0] === "/profile/edit-request" && Object.keys(partnerRequestInfo).length) {
|
||||
setInputs({title: partnerRequestInfo.title, description: partnerRequestInfo.descr})
|
||||
setSelectedSpecialization(partnerRequestInfo.position)
|
||||
setSelectedLevel({name: partnerRequestInfo.level, id: partnerRequestInfo.knowledge_level_id})
|
||||
setSelectedCount(partnerRequestInfo.specialist_count)
|
||||
setSelectedSkills(partnerRequestInfo.skills)
|
||||
setEditRequest(true)
|
||||
}
|
||||
}, [])
|
||||
|
||||
const disableBtn = () => {
|
||||
if (!inputs.title ||
|
||||
typeof selectedSpecialization === "string" ||
|
||||
typeof selectedLevel === "string" ||
|
||||
typeof selectedCount === "string" ||
|
||||
!inputs.description ||
|
||||
!selectedSkills.length) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
const handler = () => {
|
||||
if (currentUrl[0] === "/profile/edit-request") {
|
||||
apiRequest("/request/update-request", {
|
||||
method: "PUT",
|
||||
data: {
|
||||
user_id: localStorage.getItem("id"),
|
||||
request_id: partnerRequestInfo.id,
|
||||
title: inputs.title,
|
||||
position_id: selectedSpecialization.id,
|
||||
knowledge_level_id: selectedLevel.id,
|
||||
specialist_count: selectedCount,
|
||||
status: 1,
|
||||
descr: inputs.description,
|
||||
skill_ids: selectedSkills.map((skill) => {
|
||||
return skill.id;
|
||||
}),
|
||||
},
|
||||
}).then((res) => {
|
||||
navigate("/profile/requests");
|
||||
});
|
||||
} else {
|
||||
apiRequest("/request/create-request", {
|
||||
method: "POST",
|
||||
data: {
|
||||
user_id: localStorage.getItem("id"),
|
||||
title: inputs.title,
|
||||
position_id: selectedSpecialization.id,
|
||||
knowledge_level_id: selectedLevel.id,
|
||||
specialist_count: selectedCount,
|
||||
status: 1,
|
||||
descr: inputs.description,
|
||||
skill_ids: selectedSkills.map((skill) => {
|
||||
return skill.id;
|
||||
}),
|
||||
},
|
||||
}).then((res) => {
|
||||
navigate("/profile/requests");
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
const handler = () => {
|
||||
if (currentUrl[0] === "/profile/edit-request") {
|
||||
apiRequest('/request/update-request', {
|
||||
method: 'PUT',
|
||||
data: {
|
||||
user_id: localStorage.getItem('id'),
|
||||
request_id: partnerRequestInfo.id,
|
||||
title: inputs.title,
|
||||
position_id: selectedSpecialization.id,
|
||||
knowledge_level_id: selectedLevel.id,
|
||||
specialist_count: selectedCount,
|
||||
status: 1,
|
||||
descr: inputs.description,
|
||||
skill_ids: selectedSkills.map((skill) => {return skill.id})
|
||||
}
|
||||
}).then((res) => {
|
||||
navigate('/profile/requests');
|
||||
})
|
||||
} else {
|
||||
apiRequest('/request/create-request', {
|
||||
method: 'POST',
|
||||
data: {
|
||||
user_id: localStorage.getItem('id'),
|
||||
title: inputs.title,
|
||||
position_id: selectedSpecialization.id,
|
||||
knowledge_level_id: selectedLevel.id,
|
||||
specialist_count: selectedCount,
|
||||
status: 1,
|
||||
descr: inputs.description,
|
||||
skill_ids: selectedSkills.map((skill) => {return skill.id})
|
||||
}
|
||||
}).then((res) => {
|
||||
navigate('/profile/requests');
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return (
|
||||
<div className='partnerAddRequest'>
|
||||
<ProfileHeader />
|
||||
<Navigation />
|
||||
<div className='container'>
|
||||
<ProfileBreadcrumbs links={[
|
||||
{name: 'Главная', link: '/profile'},
|
||||
{name: 'Запросы и открытые позиции', link: '/profile/requests'},
|
||||
{name: `${editRequest ? 'Редактирование заявки' : 'Создание новой заявки'}`, link: '/profile/add-request'}
|
||||
]}
|
||||
/>
|
||||
<h2 className='partnerAddRequest__title'>{editRequest ? 'Страница редактирования заявки' : 'Страница добавления заявки'}</h2>
|
||||
<div className='partnerAddRequest__section'>
|
||||
<div className='partnerAddRequest__form'>
|
||||
<div className='partnerAddRequest__form__block form__block'>
|
||||
<h3 className='form__block__title'>Данные открытой позиции</h3>
|
||||
<div className='form__block__section'>
|
||||
<h3>Название вакансии</h3>
|
||||
<div className='form__block__section__input'>
|
||||
<input value={inputs.title} onChange={e => setInputs((prevValue) => ({...prevValue, title: e.target.value}) )} type='text' placeholder='Вакансия'/>
|
||||
</div>
|
||||
</div>
|
||||
<div className='form__block__section'>
|
||||
<h3>Выберите специализацию</h3>
|
||||
<div className='form__block__section__selects' onClick={() => {setOpenSpecializationListOpen(!openSpecializationList)}}>
|
||||
<div className='form__block__section__select'>
|
||||
<span>{typeof selectedSpecialization === "string" ? selectedSpecialization : selectedSpecialization.name}</span>
|
||||
<img className={openSpecializationList ? 'rotate' : ''} src={arrowDown} />
|
||||
</div>
|
||||
</div>
|
||||
{openSpecializationList && Boolean(specializationList.length) &&
|
||||
<div className='form__block__dropDown'>
|
||||
{specializationList.map((specialization, index) => {
|
||||
return <p
|
||||
key={specialization.id}
|
||||
onClick={() => {
|
||||
setOpenSpecializationListOpen(false)
|
||||
setSelectedSpecialization(specialization)
|
||||
}}
|
||||
>
|
||||
{specialization.name}</p>
|
||||
})}
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
<div className='form__block__section'>
|
||||
<h3>Навыки</h3>
|
||||
<div className='form__block__skills' onClick={() => {setOpenSkillsSelect(true)}}>
|
||||
{Boolean(selectedSkills.length) &&
|
||||
selectedSkills.map((skill, index) => {
|
||||
return<div className='skill' key={`selected-${skill.id}`}>
|
||||
<span >{skill.name}</span>
|
||||
<img src={deleteIcon} alt='delete'
|
||||
onClick={() => {
|
||||
setSkills(prevArray => [...prevArray, skill])
|
||||
setFilteredSkills(prevArray => [...prevArray, skill])
|
||||
setSelectedSkills(selectedSkills.filter((skill, indexSkill) => {
|
||||
return indexSkill !== index
|
||||
}))
|
||||
}} />
|
||||
</div>
|
||||
})
|
||||
}
|
||||
<input type='text' placeholder='Выберите навыки'
|
||||
onChange={(e) => {
|
||||
setFilteredSkills(skills.filter((skill) => {
|
||||
return skill.name.toLowerCase().includes(e.target.value.toLowerCase())
|
||||
}))
|
||||
}} />
|
||||
</div>
|
||||
{openSkillsSelect && Boolean(filteredSkills.length) &&
|
||||
<div className='form__block__dropDown'>
|
||||
{filteredSkills.map((skill, index) => {
|
||||
return <span
|
||||
key={skill.id}
|
||||
onClick={() => {
|
||||
setSelectedSkills(prevArray => [...prevArray, skill])
|
||||
setFilteredSkills(filteredSkills.filter((skill, skillIndex) => {
|
||||
return skillIndex !== index
|
||||
}))
|
||||
setSkills(skills.filter((initSkill) => {
|
||||
return initSkill.id !==skill.id
|
||||
}))
|
||||
setOpenSkillsSelect(false)
|
||||
}}
|
||||
>
|
||||
{skill.name}</span>
|
||||
})}
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div className='partnerAddRequest__form__block form__block'>
|
||||
<h3 className='form__block__title'>Квалификация</h3>
|
||||
<div className='form__block__section'>
|
||||
<h3>Выберите уровень знаний </h3>
|
||||
<div className='form__block__section__select' onClick={() => setOpenLevelList(!openLevelList)}>
|
||||
<span>{typeof selectedLevel === "string" ? selectedLevel : selectedLevel.name}</span>
|
||||
<img className={openLevelList ? 'rotate' : ''} src={arrowDown} />
|
||||
</div>
|
||||
{openLevelList && Boolean(Object.values(levelList).length) &&
|
||||
<div className='form__block__dropDown'>
|
||||
{Object.values(levelList).map((level, index) => {
|
||||
return <p
|
||||
key={level}
|
||||
onClick={() => {
|
||||
setOpenLevelList(false)
|
||||
setSelectedLevel({name: level, id: index + 1})
|
||||
}}
|
||||
>
|
||||
{level}</p>
|
||||
})}
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
<div className='form__block__section'>
|
||||
<h3>Введите необходимое описание</h3>
|
||||
<textarea value={inputs.description} onChange={e => setInputs((prevValue) => ({...prevValue, description: e.target.value}) )}/>
|
||||
</div>
|
||||
<div className='form__block__section'>
|
||||
<h3>Необходимое количество человек на позицию</h3>
|
||||
<div className='form__block__section__select' onClick={() => setOpenCountList(true)}>
|
||||
<span>{selectedCount}</span>
|
||||
<img className={openCountList ? 'rotate' : ''} src={arrowDown} />
|
||||
</div>
|
||||
{openCountList &&
|
||||
<div className='form__block__dropDown'>
|
||||
{countList.map((count) => {
|
||||
return <p
|
||||
key={count}
|
||||
onClick={() => {
|
||||
setOpenCountList(false)
|
||||
setSelectedCount(count)
|
||||
}}
|
||||
>
|
||||
{count}</p>
|
||||
})}
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
<div className='form__block__buttons'>
|
||||
<Link to='/profile/requests' className='form__block__cancel'>Отмена</Link>
|
||||
<button onClick={() => handler()} className={disableBtn() ? 'form__block__save' : 'form__block__save disable'}>Сохранить</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className='partnerAddRequest__info'>
|
||||
<div className='partnerAddRequest__info__block'>
|
||||
<div className='partnerAddRequest__info__block__title'>
|
||||
<img src={processImg} alt='process' />
|
||||
<h4>Процесс:</h4>
|
||||
</div>
|
||||
<p>
|
||||
При аутстафе мы предоставляем вам
|
||||
it-специалистов при этом они находятся в
|
||||
нашем штате.
|
||||
<br/><br/>
|
||||
Вы сможете прособеседовать наших
|
||||
специалистов, посмотреть проекты и Git.
|
||||
</p>
|
||||
</div>
|
||||
<div className='partnerAddRequest__info__block'>
|
||||
<div className='partnerAddRequest__info__block__title'>
|
||||
<img src={reportImg} alt='reportImg' />
|
||||
<h4>Отчетность:</h4>
|
||||
</div>
|
||||
<p>
|
||||
Вы можете обратиться к специалисту
|
||||
напрямую.
|
||||
<br/><br/>
|
||||
Каждый день специалисты описывают
|
||||
выполненные работы и затраченные
|
||||
на это часы.
|
||||
<br/><br/>
|
||||
Можем выделить руководителя проекта
|
||||
и тестировщиков.
|
||||
</p>
|
||||
</div>
|
||||
<div className='partnerAddRequest__info__block'>
|
||||
<div className='partnerAddRequest__info__block__title'>
|
||||
<img src={documentsImg} alt='documentsImg' />
|
||||
<h4>Обмен <br/>документами:</h4>
|
||||
</div>
|
||||
<p>
|
||||
В Личном кабинете платформы
|
||||
получайте отчеты выполненных работ
|
||||
и счета на согласование и оплату
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
return (
|
||||
<div className="partnerAddRequest">
|
||||
<ProfileHeader />
|
||||
<Navigation />
|
||||
<div className="container">
|
||||
<ProfileBreadcrumbs
|
||||
links={[
|
||||
{ name: "Главная", link: "/profile" },
|
||||
{ name: "Запросы и открытые позиции", link: "/profile/requests" },
|
||||
{
|
||||
name: `${
|
||||
editRequest ? "Редактирование заявки" : "Создание новой заявки"
|
||||
}`,
|
||||
link: "/profile/add-request",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
<h2 className="partnerAddRequest__title">
|
||||
{editRequest
|
||||
? "Страница редактирования заявки"
|
||||
: "Страница добавления заявки"}
|
||||
</h2>
|
||||
<div className="partnerAddRequest__section">
|
||||
<div className="partnerAddRequest__form">
|
||||
<div className="partnerAddRequest__form__block form__block">
|
||||
<h3 className="form__block__title">Данные открытой позиции</h3>
|
||||
<div className="form__block__section">
|
||||
<h3>Название вакансии</h3>
|
||||
<div className="form__block__section__input">
|
||||
<input
|
||||
value={inputs.title}
|
||||
onChange={(e) =>
|
||||
setInputs((prevValue) => ({
|
||||
...prevValue,
|
||||
title: e.target.value,
|
||||
}))
|
||||
}
|
||||
type="text"
|
||||
placeholder="Вакансия"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className="form__block__section">
|
||||
<h3>Выберите специализацию</h3>
|
||||
<div
|
||||
className="form__block__section__selects"
|
||||
onClick={() => {
|
||||
setOpenSpecializationListOpen(!openSpecializationList);
|
||||
}}
|
||||
>
|
||||
<div className="form__block__section__select">
|
||||
<span>
|
||||
{typeof selectedSpecialization === "string"
|
||||
? selectedSpecialization
|
||||
: selectedSpecialization.name}
|
||||
</span>
|
||||
<img
|
||||
className={openSpecializationList ? "rotate" : ""}
|
||||
src={arrowDown}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
{openSpecializationList &&
|
||||
Boolean(specializationList.length) && (
|
||||
<div className="form__block__dropDown">
|
||||
{specializationList.map((specialization, index) => {
|
||||
return (
|
||||
<p
|
||||
key={specialization.id}
|
||||
onClick={() => {
|
||||
setOpenSpecializationListOpen(false);
|
||||
setSelectedSpecialization(specialization);
|
||||
}}
|
||||
>
|
||||
{specialization.name}
|
||||
</p>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
<div className="form__block__section">
|
||||
<h3>Навыки</h3>
|
||||
<div
|
||||
className="form__block__skills"
|
||||
onClick={() => {
|
||||
setOpenSkillsSelect(true);
|
||||
}}
|
||||
>
|
||||
{Boolean(selectedSkills.length) &&
|
||||
selectedSkills.map((skill, index) => {
|
||||
return (
|
||||
<div className="skill" key={`selected-${skill.id}`}>
|
||||
<span>{skill.name}</span>
|
||||
<img
|
||||
src={deleteIcon}
|
||||
alt="delete"
|
||||
onClick={() => {
|
||||
setSkills((prevArray) => [...prevArray, skill]);
|
||||
setFilteredSkills((prevArray) => [
|
||||
...prevArray,
|
||||
skill,
|
||||
]);
|
||||
setSelectedSkills(
|
||||
selectedSkills.filter((skill, indexSkill) => {
|
||||
return indexSkill !== index;
|
||||
})
|
||||
);
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
<input
|
||||
type="text"
|
||||
placeholder="Выберите навыки"
|
||||
onChange={(e) => {
|
||||
setFilteredSkills(
|
||||
skills.filter((skill) => {
|
||||
return skill.name
|
||||
.toLowerCase()
|
||||
.includes(e.target.value.toLowerCase());
|
||||
})
|
||||
);
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
{openSkillsSelect && Boolean(filteredSkills.length) && (
|
||||
<div className="form__block__dropDown">
|
||||
{filteredSkills.map((skill, index) => {
|
||||
return (
|
||||
<span
|
||||
key={skill.id}
|
||||
onClick={() => {
|
||||
setSelectedSkills((prevArray) => [
|
||||
...prevArray,
|
||||
skill,
|
||||
]);
|
||||
setFilteredSkills(
|
||||
filteredSkills.filter((skill, skillIndex) => {
|
||||
return skillIndex !== index;
|
||||
})
|
||||
);
|
||||
setSkills(
|
||||
skills.filter((initSkill) => {
|
||||
return initSkill.id !== skill.id;
|
||||
})
|
||||
);
|
||||
setOpenSkillsSelect(false);
|
||||
}}
|
||||
>
|
||||
{skill.name}
|
||||
</span>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
<Footer />
|
||||
<div className="partnerAddRequest__form__block form__block">
|
||||
<h3 className="form__block__title">Квалификация</h3>
|
||||
<div className="form__block__section">
|
||||
<h3>Выберите уровень знаний </h3>
|
||||
<div
|
||||
className="form__block__section__select"
|
||||
onClick={() => setOpenLevelList(!openLevelList)}
|
||||
>
|
||||
<span>
|
||||
{typeof selectedLevel === "string"
|
||||
? selectedLevel
|
||||
: selectedLevel.name}
|
||||
</span>
|
||||
<img
|
||||
className={openLevelList ? "rotate" : ""}
|
||||
src={arrowDown}
|
||||
/>
|
||||
</div>
|
||||
{openLevelList && Boolean(Object.values(levelList).length) && (
|
||||
<div className="form__block__dropDown">
|
||||
{Object.values(levelList).map((level, index) => {
|
||||
return (
|
||||
<p
|
||||
key={level}
|
||||
onClick={() => {
|
||||
setOpenLevelList(false);
|
||||
setSelectedLevel({ name: level, id: index + 1 });
|
||||
}}
|
||||
>
|
||||
{level}
|
||||
</p>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
<div className="form__block__section">
|
||||
<h3>Введите необходимое описание</h3>
|
||||
<textarea
|
||||
value={inputs.description}
|
||||
onChange={(e) =>
|
||||
setInputs((prevValue) => ({
|
||||
...prevValue,
|
||||
description: e.target.value,
|
||||
}))
|
||||
}
|
||||
/>
|
||||
</div>
|
||||
<div className="form__block__section">
|
||||
<h3>Необходимое количество человек на позицию</h3>
|
||||
<div
|
||||
className="form__block__section__select"
|
||||
onClick={() => setOpenCountList(true)}
|
||||
>
|
||||
<span>{selectedCount}</span>
|
||||
<img
|
||||
className={openCountList ? "rotate" : ""}
|
||||
src={arrowDown}
|
||||
/>
|
||||
</div>
|
||||
{openCountList && (
|
||||
<div className="form__block__dropDown">
|
||||
{countList.map((count) => {
|
||||
return (
|
||||
<p
|
||||
key={count}
|
||||
onClick={() => {
|
||||
setOpenCountList(false);
|
||||
setSelectedCount(count);
|
||||
}}
|
||||
>
|
||||
{count}
|
||||
</p>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
<div className="form__block__buttons">
|
||||
<Link to="/profile/requests" className="form__block__cancel">
|
||||
Отмена
|
||||
</Link>
|
||||
<button
|
||||
onClick={() => handler()}
|
||||
className={
|
||||
disableBtn()
|
||||
? "form__block__save"
|
||||
: "form__block__save disable"
|
||||
}
|
||||
>
|
||||
Сохранить
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="partnerAddRequest__info">
|
||||
<div className="partnerAddRequest__info__block">
|
||||
<div className="partnerAddRequest__info__block__title">
|
||||
<img src={processImg} alt="process" />
|
||||
<h4>Процесс:</h4>
|
||||
</div>
|
||||
<p>
|
||||
При аутстафе мы предоставляем вам it-специалистов при этом они
|
||||
находятся в нашем штате.
|
||||
<br />
|
||||
<br />
|
||||
Вы сможете прособеседовать наших специалистов, посмотреть
|
||||
проекты и Git.
|
||||
</p>
|
||||
</div>
|
||||
<div className="partnerAddRequest__info__block">
|
||||
<div className="partnerAddRequest__info__block__title">
|
||||
<img src={reportImg} alt="reportImg" />
|
||||
<h4>Отчетность:</h4>
|
||||
</div>
|
||||
<p>
|
||||
Вы можете обратиться к специалисту напрямую.
|
||||
<br />
|
||||
<br />
|
||||
Каждый день специалисты описывают выполненные работы и
|
||||
затраченные на это часы.
|
||||
<br />
|
||||
<br />
|
||||
Можем выделить руководителя проекта и тестировщиков.
|
||||
</p>
|
||||
</div>
|
||||
<div className="partnerAddRequest__info__block">
|
||||
<div className="partnerAddRequest__info__block__title">
|
||||
<img src={documentsImg} alt="documentsImg" />
|
||||
<h4>
|
||||
Обмен <br />
|
||||
документами:
|
||||
</h4>
|
||||
</div>
|
||||
<p>
|
||||
В Личном кабинете платформы получайте отчеты выполненных работ и
|
||||
счета на согласование и оплату
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
@ -20,10 +20,10 @@ import { getCorrectDate } from "../../components/Calendar/calendarHelper";
|
||||
|
||||
import { urlForLocal } from "../../helper";
|
||||
|
||||
import arrowSwitchDate from "../../images/arrowViewReport.png";
|
||||
import backEndImg from "../../images/QualificationInfo.png";
|
||||
import middle from "../../images/QualificationInfoMiddle.png";
|
||||
import deleteBtn from "../../images/deleteBtn.png";
|
||||
import arrowSwitchDate from "../../assets/icons/arrows/arrowViewReport.png";
|
||||
import backEndImg from "../../assets/images/QualificationInfo.png";
|
||||
import middle from "../../assets/images/QualificationInfoMiddle.png";
|
||||
import deleteBtn from "../../assets/images/deleteBtn.png";
|
||||
|
||||
import "./partnerBid.scss";
|
||||
|
||||
|
@ -6,9 +6,10 @@ import { getPartnerEmployees } from "../../redux/outstaffingSlice";
|
||||
import { ProfileHeader } from "../../components/ProfileHeader/ProfileHeader";
|
||||
import { ProfileBreadcrumbs } from "../../components/ProfileBreadcrumbs/ProfileBreadcrumbs";
|
||||
import { Footer } from "../../components/Footer/Footer";
|
||||
import { Navigation } from "../../components/Navigation/Navigation";
|
||||
|
||||
import imgInfo from "./emplInfo.png";
|
||||
import rightArrow from "../../images/arrowRight.svg";
|
||||
import imgInfo from "../../assets/images/emplInfo.png";
|
||||
import rightArrow from "../../assets/icons/arrows/arrowRight.svg";
|
||||
|
||||
import "./partnerEmployees.scss";
|
||||
|
||||
@ -23,6 +24,7 @@ export const PartnerEmployees = () => {
|
||||
return (
|
||||
<div className="partnerEmployees">
|
||||
<ProfileHeader />
|
||||
<Navigation />
|
||||
<div className="container">
|
||||
<ProfileBreadcrumbs
|
||||
links={[
|
||||
|
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 596 B |
@ -6,6 +6,7 @@ import {
|
||||
setPartnerRequests,
|
||||
} from "../../redux/outstaffingSlice";
|
||||
|
||||
import { Navigation } from "../../components/Navigation/Navigation";
|
||||
import { ProfileHeader } from "../../components/ProfileHeader/ProfileHeader";
|
||||
import { ProfileBreadcrumbs } from "../../components/ProfileBreadcrumbs/ProfileBreadcrumbs";
|
||||
import { SliderWorkers } from "../../components/SliderWorkers/SliderWorkers";
|
||||
@ -14,10 +15,9 @@ import { Footer } from "../../components/Footer/Footer";
|
||||
|
||||
import { apiRequest } from "../../api/request";
|
||||
|
||||
import cursorImg from "../../images/cursorImg.svg";
|
||||
import cursorImg from "../../assets/icons/cursorImg.svg";
|
||||
|
||||
import "./partnerRequests.scss";
|
||||
import { Navigation } from "../../components/Navigation/Navigation";
|
||||
|
||||
export const PartnerRequests = () => {
|
||||
if (localStorage.getItem("role_status") !== "18") {
|
||||
|
@ -1,14 +1,15 @@
|
||||
import React from "react";
|
||||
import { Footer } from "../../components/Footer/Footer";
|
||||
|
||||
import { Footer } from "../../components/Footer/Footer";
|
||||
import { ProfileBreadcrumbs } from "../../components/ProfileBreadcrumbs/ProfileBreadcrumbs";
|
||||
import { ProfileHeader } from "../../components/ProfileHeader/ProfileHeader";
|
||||
|
||||
import kontur from "../../images/konturLogo.png";
|
||||
import astral from "../../images/astralLogo.png";
|
||||
import "./partnerSettings.scss";
|
||||
import { Navigation } from "../../components/Navigation/Navigation";
|
||||
|
||||
import kontur from "../../assets/images/logo/konturLogo.png";
|
||||
import astral from "../../assets/images/logo/astralLogo.png";
|
||||
|
||||
import "./partnerSettings.scss";
|
||||
|
||||
export const PartnerSettings = () => {
|
||||
return (
|
||||
<div className="settings">
|
||||
|
Before Width: | Height: | Size: 458 B |
Before Width: | Height: | Size: 473 B |
Before Width: | Height: | Size: 248 B |
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 407 B |
@ -1,4 +0,0 @@
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M2.55556 10.1657L3.2866 9.9981L2.55556 10.1657ZM2.55556 6.23549L3.2866 6.40304L2.55556 6.23549ZM13.4445 6.23549L12.7135 6.40304L13.4445 6.23549ZM13.4445 10.1657L12.7135 9.9981L13.4445 10.1657ZM9.92014 13.7726L10.0952 14.5019L9.92014 13.7726ZM6.07995 13.7726L6.25502 13.0433L6.07995 13.7726ZM6.07994 2.62853L6.25502 3.35781L6.07994 2.62853ZM9.92014 2.62853L10.0952 1.89925L9.92014 2.62853ZM6.13009 2C6.13009 1.58579 5.79431 1.25 5.38009 1.25C4.96588 1.25 4.63009 1.58579 4.63009 2H6.13009ZM4.63009 3.67583C4.63009 4.09004 4.96588 4.42583 5.38009 4.42583C5.79431 4.42583 6.13009 4.09004 6.13009 3.67583H4.63009ZM11.37 2C11.37 1.58579 11.0342 1.25 10.62 1.25C10.2058 1.25 9.86999 1.58579 9.86999 2H11.37ZM9.86999 3.67583C9.86999 4.09004 10.2058 4.42583 10.62 4.42583C11.0342 4.42583 11.37 4.09004 11.37 3.67583H9.86999ZM3.2866 9.9981C3.01563 8.81586 3.01563 7.58528 3.2866 6.40304L1.82451 6.06793C1.50299 7.47072 1.50299 8.93042 1.82451 10.3332L3.2866 9.9981ZM12.7135 6.40304C12.9845 7.58528 12.9845 8.81586 12.7135 9.9981L14.1756 10.3332C14.4971 8.93042 14.4971 7.47072 14.1756 6.06794L12.7135 6.40304ZM9.74507 13.0433C8.59722 13.3189 7.40286 13.3189 6.25502 13.0433L5.90487 14.5019C7.28288 14.8327 8.71721 14.8327 10.0952 14.5019L9.74507 13.0433ZM6.25502 3.35781C7.40286 3.08225 8.59722 3.08225 9.74507 3.35781L10.0952 1.89925C8.71721 1.56844 7.28288 1.56844 5.90487 1.89925L6.25502 3.35781ZM6.25502 13.0433C4.79054 12.6918 3.63487 11.5176 3.2866 9.9981L1.82451 10.3332C2.29664 12.3931 3.87186 14.0138 5.90487 14.5019L6.25502 13.0433ZM10.0952 14.5019C12.1282 14.0138 13.7034 12.3931 14.1756 10.3332L12.7135 9.9981C12.3652 11.5176 11.2095 12.6918 9.74507 13.0433L10.0952 14.5019ZM9.74507 3.35781C11.2095 3.70938 12.3652 4.88353 12.7135 6.40304L14.1756 6.06794C13.7034 4.00801 12.1282 2.3873 10.0952 1.89925L9.74507 3.35781ZM5.90487 1.89925C3.87185 2.3873 2.29664 4.008 1.82451 6.06793L3.2866 6.40304C3.63487 4.88353 4.79053 3.70938 6.25502 3.35781L5.90487 1.89925ZM2.76015 6.26924H13.2399V4.76924H2.76015V6.26924ZM4.63009 2V3.67583H6.13009V2H4.63009ZM9.86999 2V3.67583H11.37V2H9.86999Z" fill="#A29EB6"/>
|
||||
<path d="M8.96137 9.28262C9.23137 9.09062 9.39937 8.80262 9.39937 8.41262C9.39937 7.60262 8.77537 7.18262 8.03737 7.18262C7.29937 7.18262 6.66937 7.60262 6.66937 8.41262C6.66937 8.80262 6.84337 9.09062 7.10737 9.28262C6.74137 9.50462 6.53137 9.87062 6.53137 10.2966C6.53137 11.0706 7.10137 11.5506 8.03737 11.5506C8.96737 11.5506 9.54337 11.0706 9.54337 10.2966C9.54337 9.87062 9.33337 9.50462 8.96137 9.28262ZM8.03737 7.96262C8.34937 7.96262 8.57737 8.14262 8.57737 8.45462C8.57737 8.76062 8.34937 8.95262 8.03737 8.95262C7.72537 8.95262 7.49737 8.76062 7.49737 8.45462C7.49737 8.14262 7.72537 7.96262 8.03737 7.96262ZM8.03737 10.7706C7.64137 10.7706 7.35337 10.5666 7.35337 10.1886C7.35337 9.81662 7.64137 9.61262 8.03737 9.61262C8.43337 9.61262 8.72137 9.81662 8.72137 10.1886C8.72137 10.5666 8.43337 10.7706 8.03737 10.7706Z" fill="#A29EB6"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 3.0 KiB |
@ -1,4 +0,0 @@
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M2.55556 10.1657L3.2866 9.9981L2.55556 10.1657ZM2.55556 6.23549L3.2866 6.40304L2.55556 6.23549ZM13.4445 6.23549L12.7135 6.40304L13.4445 6.23549ZM13.4445 10.1657L12.7135 9.9981L13.4445 10.1657ZM9.92014 13.7726L10.0952 14.5019L9.92014 13.7726ZM6.07995 13.7726L6.25502 13.0433L6.07995 13.7726ZM6.07994 2.62853L6.25502 3.35781L6.07994 2.62853ZM9.92014 2.62853L10.0952 1.89925L9.92014 2.62853ZM6.13009 2C6.13009 1.58579 5.79431 1.25 5.38009 1.25C4.96588 1.25 4.63009 1.58579 4.63009 2H6.13009ZM4.63009 3.67583C4.63009 4.09004 4.96588 4.42583 5.38009 4.42583C5.79431 4.42583 6.13009 4.09004 6.13009 3.67583H4.63009ZM11.37 2C11.37 1.58579 11.0342 1.25 10.62 1.25C10.2058 1.25 9.86999 1.58579 9.86999 2H11.37ZM9.86999 3.67583C9.86999 4.09004 10.2058 4.42583 10.62 4.42583C11.0342 4.42583 11.37 4.09004 11.37 3.67583H9.86999ZM3.2866 9.9981C3.01563 8.81586 3.01563 7.58528 3.2866 6.40304L1.82451 6.06793C1.50299 7.47072 1.50299 8.93042 1.82451 10.3332L3.2866 9.9981ZM12.7135 6.40304C12.9845 7.58528 12.9845 8.81586 12.7135 9.9981L14.1756 10.3332C14.4971 8.93042 14.4971 7.47072 14.1756 6.06794L12.7135 6.40304ZM9.74507 13.0433C8.59722 13.3189 7.40286 13.3189 6.25502 13.0433L5.90487 14.5019C7.28288 14.8327 8.71721 14.8327 10.0952 14.5019L9.74507 13.0433ZM6.25502 3.35781C7.40286 3.08225 8.59722 3.08225 9.74507 3.35781L10.0952 1.89925C8.71721 1.56844 7.28288 1.56844 5.90487 1.89925L6.25502 3.35781ZM6.25502 13.0433C4.79054 12.6918 3.63487 11.5176 3.2866 9.9981L1.82451 10.3332C2.29664 12.3931 3.87186 14.0138 5.90487 14.5019L6.25502 13.0433ZM10.0952 14.5019C12.1282 14.0138 13.7034 12.3931 14.1756 10.3332L12.7135 9.9981C12.3652 11.5176 11.2095 12.6918 9.74507 13.0433L10.0952 14.5019ZM9.74507 3.35781C11.2095 3.70938 12.3652 4.88353 12.7135 6.40304L14.1756 6.06794C13.7034 4.00801 12.1282 2.3873 10.0952 1.89925L9.74507 3.35781ZM5.90487 1.89925C3.87185 2.3873 2.29664 4.008 1.82451 6.06793L3.2866 6.40304C3.63487 4.88353 4.79053 3.70938 6.25502 3.35781L5.90487 1.89925ZM2.76015 6.26924H13.2399V4.76924H2.76015V6.26924ZM4.63009 2V3.67583H6.13009V2H4.63009ZM9.86999 2V3.67583H11.37V2H9.86999Z" fill="#406128"/>
|
||||
<path d="M8.96137 9.28262C9.23137 9.09062 9.39937 8.80262 9.39937 8.41262C9.39937 7.60262 8.77537 7.18262 8.03737 7.18262C7.29937 7.18262 6.66937 7.60262 6.66937 8.41262C6.66937 8.80262 6.84337 9.09062 7.10737 9.28262C6.74137 9.50462 6.53137 9.87062 6.53137 10.2966C6.53137 11.0706 7.10137 11.5506 8.03737 11.5506C8.96737 11.5506 9.54337 11.0706 9.54337 10.2966C9.54337 9.87062 9.33337 9.50462 8.96137 9.28262ZM8.03737 7.96262C8.34937 7.96262 8.57737 8.14262 8.57737 8.45462C8.57737 8.76062 8.34937 8.95262 8.03737 8.95262C7.72537 8.95262 7.49737 8.76062 7.49737 8.45462C7.49737 8.14262 7.72537 7.96262 8.03737 7.96262ZM8.03737 10.7706C7.64137 10.7706 7.35337 10.5666 7.35337 10.1886C7.35337 9.81662 7.64137 9.61262 8.03737 9.61262C8.43337 9.61262 8.72137 9.81662 8.72137 10.1886C8.72137 10.5666 8.43337 10.7706 8.03737 10.7706Z" fill="#406128"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 505 B |
@ -1,358 +1,380 @@
|
||||
import React, {useState} from 'react';
|
||||
import React, { useState } from "react";
|
||||
|
||||
import {ProfileHeader} from "../../components/ProfileHeader/ProfileHeader";
|
||||
import {ProfileBreadcrumbs} from "../../components/ProfileBreadcrumbs/ProfileBreadcrumbs"
|
||||
import {Footer} from "../../components/Footer/Footer";
|
||||
import { ProfileHeader } from "../../components/ProfileHeader/ProfileHeader";
|
||||
import { ProfileBreadcrumbs } from "../../components/ProfileBreadcrumbs/ProfileBreadcrumbs";
|
||||
import { Footer } from "../../components/Footer/Footer";
|
||||
import { Navigation } from "../../components/Navigation/Navigation";
|
||||
|
||||
import mainTabImg from "./Images/mainTreaties.png"
|
||||
import actImg from "./Images/actTreaties.png"
|
||||
import checkImg from "./Images/checkTreaties.png"
|
||||
import arrowDown from "./Images/arrowDown.png"
|
||||
import logoAstral from "./Images/logoAstral.png"
|
||||
import arrowItem from "./Images/arrowCheck.png"
|
||||
import lock from "./Images/lock.svg"
|
||||
import lockDone from "./Images/lockDone.svg"
|
||||
import avatarMok from "./Images/avatarMok.png"
|
||||
import mainTabImg from "../../assets/icons/mainTreaties.png";
|
||||
import actImg from "../../assets/icons/actTreaties.png";
|
||||
import checkImg from "../../assets/icons/checkTreaties.png";
|
||||
import arrowDown from "../../assets/icons/arrows/arrowDown.png";
|
||||
import logoAstral from "../../assets/images/logo/astralLogo.png";
|
||||
import arrowItem from "../../assets/icons/arrows/arrowCheck.png";
|
||||
import lock from "../../assets/icons/lock.svg";
|
||||
import lockDone from "../../assets/icons/lockDone.svg";
|
||||
import avatarMok from "../../assets/images/avatarMok.png";
|
||||
|
||||
import './partnerTreaties.scss'
|
||||
import { Navigation } from '../../components/Navigation/Navigation';
|
||||
import "./partnerTreaties.scss";
|
||||
|
||||
export const PartnerTreaties = () => {
|
||||
const [toggleTab, setToggleTab] = useState(1);
|
||||
const [toggleTab, setToggleTab] = useState(1);
|
||||
|
||||
const toggleTabs = (index) => {
|
||||
setToggleTab(index);
|
||||
};
|
||||
return(
|
||||
<div className="treaties">
|
||||
<ProfileHeader/>
|
||||
<Navigation />
|
||||
<div className="container">
|
||||
<ProfileBreadcrumbs
|
||||
links={[
|
||||
{name: 'Главная', link: '/profile'},
|
||||
{name: 'Договора и отчетность', link: '/profile/treaties'},
|
||||
]}
|
||||
/>
|
||||
<h2 className="treaties__title">Договора и отчетность</h2>
|
||||
<div className="treaties__tabs">
|
||||
<div className="treaties__tabs__head">
|
||||
<div
|
||||
className={toggleTab === 1 ? "tab active-tab" : "tab"}
|
||||
onClick={() => toggleTabs(1)}
|
||||
>
|
||||
<img src={mainTabImg} alt="img" />
|
||||
<p>Основные </p>
|
||||
</div>
|
||||
<div
|
||||
className={toggleTab === 2 ? "tab active-tab" : "tab"}
|
||||
onClick={() => toggleTabs(2)}
|
||||
>
|
||||
<img src={actImg} alt="img" />
|
||||
<p>Акты</p>
|
||||
</div>
|
||||
<div
|
||||
className={toggleTab === 3 ? "tab active-tab" : "tab"}
|
||||
onClick={() => toggleTabs(3)}
|
||||
>
|
||||
<img src={checkImg} alt="img" />
|
||||
<p>Счета</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="treaties__tabs__content">
|
||||
<div className={toggleTab === 1
|
||||
? "treaties__tabs__content__main active__content"
|
||||
: "treaties__tabs__content__main"}>
|
||||
<div className="main__head">
|
||||
<p>Реквизиты компании</p>
|
||||
<div className="img">
|
||||
<img src={arrowDown} alt="arrow" />
|
||||
</div>
|
||||
</div>
|
||||
<div className="treaties__tabs__content__main__item item notPaid">
|
||||
<div className="item__info">
|
||||
<p className="number">Договор № К-1-2022<br/>от 01.11.22</p>
|
||||
<div className="astral">
|
||||
<p>Провайдер документооборота: Астрал</p>
|
||||
<div className="img">
|
||||
<img src={arrowDown} alt="arrow" />
|
||||
</div>
|
||||
</div>
|
||||
<img className="logo" src={logoAstral} alt="logo" />
|
||||
</div>
|
||||
<div className="item__more">
|
||||
<div className="item__more__names">
|
||||
<p>Бойко Кирилл Сергеевич, подписал и отправил документ</p>
|
||||
<p>ООО "Зоря", документ получен</p>
|
||||
</div>
|
||||
<div className="item__more__date">
|
||||
<div className="item__more__date__from">
|
||||
<img src={lock} alt="lock" />
|
||||
<p>01/01/2021</p>
|
||||
</div>
|
||||
<img src={arrowItem} alt="to" />
|
||||
<div className="item__more__date__to">
|
||||
<img src={lockDone} alt="lockDone" />
|
||||
<p>01/02/2021</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="treaties__tabs__content__main__item item persons">
|
||||
<div className="item__info">
|
||||
<p className="number">Доп. соглашение<br/> №12 от 10.05.22</p>
|
||||
<div className="item__person">
|
||||
<div className="item__person__date">
|
||||
<img className="arrow" src={arrowItem} alt="arrow" />
|
||||
<p>На выполнение работ данного сотрудника</p>
|
||||
</div>
|
||||
<div className="item__person__info">
|
||||
<img src={avatarMok} alt="avatar" />
|
||||
<div className="item__person__info__name">
|
||||
<p>Макаренко Дмитрий</p>
|
||||
<span>Дизайнер</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="item__info">
|
||||
<p className="number">Доп. соглашение<br/> №12 от 10.05.22</p>
|
||||
<div className="item__person">
|
||||
<div className="item__person__date">
|
||||
<img className="arrow" src={arrowItem} alt="arrow" />
|
||||
<p>На выполнение работ данного сотрудника</p>
|
||||
</div>
|
||||
<div className="item__person__info">
|
||||
<img src={avatarMok} alt="avatar" />
|
||||
<div className="item__person__info__name">
|
||||
<p>Макаренко Дмитрий</p>
|
||||
<span>Дизайнер</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className={toggleTab === 2
|
||||
? "treaties__tabs__content__main second active__content"
|
||||
: "treaties__tabs__content__main"}>
|
||||
<div className="main__head acts">
|
||||
<div className="provider">
|
||||
<p>Провайдер документооборота: Астрал</p>
|
||||
<img src={logoAstral} alt="astral" />
|
||||
</div>
|
||||
<div className="info">
|
||||
<p>Реквизиты компании</p>
|
||||
<div className="img">
|
||||
<img src={arrowDown} alt="arrow" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="treaties__tabs__content__main__item item notPaid">
|
||||
<div className="item__info">
|
||||
<p className="number">Акт №4 от 10.03.23</p>
|
||||
<div className="item__person__act">
|
||||
<div className="item__person__act__info">
|
||||
<div className="item__person__act__avatar">
|
||||
<img src={avatarMok} alt="avatar" />
|
||||
<div className="item__person__act__name">
|
||||
<p>
|
||||
Макаренко Дмитрий
|
||||
</p>
|
||||
<span>
|
||||
Дизайнер
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<img className="personArrow" src={arrowItem} alt="arrow" />
|
||||
<p className="moreInfo">к Доп. соглашению № 1</p>
|
||||
</div>
|
||||
<div className="arrow">
|
||||
<img src={arrowDown} alt="arrow" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="item__more price">
|
||||
<div className="item__more__price">
|
||||
<p className="total">214 500,00 руб</p>
|
||||
<p>147 раб.часов ( 1200руб / час ) </p>
|
||||
</div>
|
||||
<div className="item__more__names">
|
||||
<p>Бойко Кирилл Сергеевич, подписал и отправил документ</p>
|
||||
<p>ООО "Зоря", документ получен</p>
|
||||
</div>
|
||||
<div className="item__more__date">
|
||||
<div className="item__more__date__from">
|
||||
<img src={lock} alt="lock" />
|
||||
<p>01/01/2021</p>
|
||||
</div>
|
||||
<img src={arrowItem} alt="to" />
|
||||
<div className="item__more__date__to">
|
||||
<img src={lockDone} alt="lockDone" />
|
||||
<p>01/02/2021</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="treaties__tabs__content__main__item item">
|
||||
<div className="item__info">
|
||||
<p className="number">Акт №4 от 10.03.23</p>
|
||||
<div className="item__person__act">
|
||||
<div className="item__person__act__info">
|
||||
<div className="item__person__act__avatar">
|
||||
<img src={avatarMok} alt="avatar" />
|
||||
<div className="item__person__act__name">
|
||||
<p>
|
||||
Макаренко Дмитрий
|
||||
</p>
|
||||
<span>
|
||||
Дизайнер
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<img className="personArrow" src={arrowItem} alt="arrow" />
|
||||
<p className="moreInfo">к Доп. соглашению № 1</p>
|
||||
</div>
|
||||
<div className="arrow">
|
||||
<img src={arrowDown} alt="arrow" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="item__more price">
|
||||
<div className="item__more__price">
|
||||
<p className="total">214 500,00 руб</p>
|
||||
<p>147 раб.часов ( 1200руб / час ) </p>
|
||||
</div>
|
||||
<div className="item__more__names">
|
||||
<p>Бойко Кирилл Сергеевич, подписал и отправил документ</p>
|
||||
<p>ООО "Зоря", документ получен</p>
|
||||
</div>
|
||||
<div className="item__more__date">
|
||||
<div className="item__more__date__from">
|
||||
<img src={lock} alt="lock" />
|
||||
<p>01/01/2021</p>
|
||||
</div>
|
||||
<img src={arrowItem} alt="to" />
|
||||
<div className="item__more__date__to">
|
||||
<img src={lockDone} alt="lockDone" />
|
||||
<p>01/02/2021</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className={toggleTab === 3
|
||||
? "treaties__tabs__content__main second active__content"
|
||||
: "treaties__tabs__content__main"}>
|
||||
<div className="main__head acts">
|
||||
<div className="provider">
|
||||
<p>Провайдер документооборота: Астрал</p>
|
||||
<img src={logoAstral} alt="astral" />
|
||||
</div>
|
||||
<div className="info">
|
||||
<p>Реквизиты компании</p>
|
||||
<div className="img">
|
||||
<img src={arrowDown} alt="arrow" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="treaties__tabs__content__main__item item notPaid">
|
||||
<div className="item__info">
|
||||
<p className="number">Акт №4 от 10.03.23</p>
|
||||
<div className="item__person__act">
|
||||
<div className="item__person__act__info">
|
||||
<div className="item__person__act__avatar">
|
||||
<img src={avatarMok} alt="avatar" />
|
||||
<div className="item__person__act__name">
|
||||
<p>
|
||||
Макаренко Дмитрий
|
||||
</p>
|
||||
<span>
|
||||
Дизайнер
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<img className="personArrow" src={arrowItem} alt="arrow" />
|
||||
<p className="moreInfo">к Доп. соглашению № 1</p>
|
||||
</div>
|
||||
<div className="arrow">
|
||||
<img src={arrowDown} alt="arrow" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="item__more price">
|
||||
<div className="item__more__price">
|
||||
<p className="total">214 500,00 руб</p>
|
||||
<p>147 раб.часов ( 1200руб / час ) </p>
|
||||
</div>
|
||||
<div className="item__more__names">
|
||||
<p>Бойко Кирилл Сергеевич, подписал и отправил документ</p>
|
||||
<p>ООО "Зоря", документ получен</p>
|
||||
</div>
|
||||
<div className="item__more__date">
|
||||
<div className="item__more__date__from">
|
||||
<img src={lock} alt="lock" />
|
||||
<p>01/01/2021</p>
|
||||
</div>
|
||||
<img src={arrowItem} alt="to" />
|
||||
<div className="item__more__date__to">
|
||||
<img src={lockDone} alt="lockDone" />
|
||||
<p>01/02/2021</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="treaties__tabs__content__main__item item">
|
||||
<div className="item__info">
|
||||
<p className="number">Акт №4 от 10.03.23</p>
|
||||
<div className="item__person__act">
|
||||
<div className="item__person__act__info">
|
||||
<div className="item__person__act__avatar">
|
||||
<img src={avatarMok} alt="avatar" />
|
||||
<div className="item__person__act__name">
|
||||
<p>
|
||||
Макаренко Дмитрий
|
||||
</p>
|
||||
<span>
|
||||
Дизайнер
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<img className="personArrow" src={arrowItem} alt="arrow" />
|
||||
<p className="moreInfo">к Доп. соглашению № 1</p>
|
||||
</div>
|
||||
<div className="arrow">
|
||||
<img src={arrowDown} alt="arrow" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="item__more price">
|
||||
<div className="item__more__price">
|
||||
<p className="total">214 500,00 руб</p>
|
||||
<p>147 раб.часов ( 1200руб / час ) </p>
|
||||
</div>
|
||||
<div className="item__more__names">
|
||||
<p>Бойко Кирилл Сергеевич, подписал и отправил документ</p>
|
||||
<p>ООО "Зоря", документ получен</p>
|
||||
</div>
|
||||
<div className="item__more__date">
|
||||
<div className="item__more__date__from">
|
||||
<img src={lock} alt="lock" />
|
||||
<p>01/01/2021</p>
|
||||
</div>
|
||||
<img src={arrowItem} alt="to" />
|
||||
<div className="item__more__date__to">
|
||||
<img src={lockDone} alt="lockDone" />
|
||||
<p>01/02/2021</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
const toggleTabs = (index) => {
|
||||
setToggleTab(index);
|
||||
};
|
||||
return (
|
||||
<div className="treaties">
|
||||
<ProfileHeader />
|
||||
<Navigation />
|
||||
<div className="container">
|
||||
<ProfileBreadcrumbs
|
||||
links={[
|
||||
{ name: "Главная", link: "/profile" },
|
||||
{ name: "Договора и отчетность", link: "/profile/treaties" },
|
||||
]}
|
||||
/>
|
||||
<h2 className="treaties__title">Договора и отчетность</h2>
|
||||
<div className="treaties__tabs">
|
||||
<div className="treaties__tabs__head">
|
||||
<div
|
||||
className={toggleTab === 1 ? "tab active-tab" : "tab"}
|
||||
onClick={() => toggleTabs(1)}
|
||||
>
|
||||
<img src={mainTabImg} alt="img" />
|
||||
<p>Основные </p>
|
||||
</div>
|
||||
<Footer/>
|
||||
<div
|
||||
className={toggleTab === 2 ? "tab active-tab" : "tab"}
|
||||
onClick={() => toggleTabs(2)}
|
||||
>
|
||||
<img src={actImg} alt="img" />
|
||||
<p>Акты</p>
|
||||
</div>
|
||||
<div
|
||||
className={toggleTab === 3 ? "tab active-tab" : "tab"}
|
||||
onClick={() => toggleTabs(3)}
|
||||
>
|
||||
<img src={checkImg} alt="img" />
|
||||
<p>Счета</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="treaties__tabs__content">
|
||||
<div
|
||||
className={
|
||||
toggleTab === 1
|
||||
? "treaties__tabs__content__main active__content"
|
||||
: "treaties__tabs__content__main"
|
||||
}
|
||||
>
|
||||
<div className="main__head">
|
||||
<p>Реквизиты компании</p>
|
||||
<div className="img">
|
||||
<img src={arrowDown} alt="arrow" />
|
||||
</div>
|
||||
</div>
|
||||
<div className="treaties__tabs__content__main__item item notPaid">
|
||||
<div className="item__info">
|
||||
<p className="number">
|
||||
Договор № К-1-2022
|
||||
<br />
|
||||
от 01.11.22
|
||||
</p>
|
||||
<div className="astral">
|
||||
<p>Провайдер документооборота: Астрал</p>
|
||||
<div className="img">
|
||||
<img src={arrowDown} alt="arrow" />
|
||||
</div>
|
||||
</div>
|
||||
<img className="logo" src={logoAstral} alt="logo" />
|
||||
</div>
|
||||
<div className="item__more">
|
||||
<div className="item__more__names">
|
||||
<p>Бойко Кирилл Сергеевич, подписал и отправил документ</p>
|
||||
<p>ООО "Зоря", документ получен</p>
|
||||
</div>
|
||||
<div className="item__more__date">
|
||||
<div className="item__more__date__from">
|
||||
<img src={lock} alt="lock" />
|
||||
<p>01/01/2021</p>
|
||||
</div>
|
||||
<img src={arrowItem} alt="to" />
|
||||
<div className="item__more__date__to">
|
||||
<img src={lockDone} alt="lockDone" />
|
||||
<p>01/02/2021</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="treaties__tabs__content__main__item item persons">
|
||||
<div className="item__info">
|
||||
<p className="number">
|
||||
Доп. соглашение
|
||||
<br /> №12 от 10.05.22
|
||||
</p>
|
||||
<div className="item__person">
|
||||
<div className="item__person__date">
|
||||
<img className="arrow" src={arrowItem} alt="arrow" />
|
||||
<p>На выполнение работ данного сотрудника</p>
|
||||
</div>
|
||||
<div className="item__person__info">
|
||||
<img src={avatarMok} alt="avatar" />
|
||||
<div className="item__person__info__name">
|
||||
<p>Макаренко Дмитрий</p>
|
||||
<span>Дизайнер</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="item__info">
|
||||
<p className="number">
|
||||
Доп. соглашение
|
||||
<br /> №12 от 10.05.22
|
||||
</p>
|
||||
<div className="item__person">
|
||||
<div className="item__person__date">
|
||||
<img className="arrow" src={arrowItem} alt="arrow" />
|
||||
<p>На выполнение работ данного сотрудника</p>
|
||||
</div>
|
||||
<div className="item__person__info">
|
||||
<img src={avatarMok} alt="avatar" />
|
||||
<div className="item__person__info__name">
|
||||
<p>Макаренко Дмитрий</p>
|
||||
<span>Дизайнер</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
className={
|
||||
toggleTab === 2
|
||||
? "treaties__tabs__content__main second active__content"
|
||||
: "treaties__tabs__content__main"
|
||||
}
|
||||
>
|
||||
<div className="main__head acts">
|
||||
<div className="provider">
|
||||
<p>Провайдер документооборота: Астрал</p>
|
||||
<img src={logoAstral} alt="astral" />
|
||||
</div>
|
||||
<div className="info">
|
||||
<p>Реквизиты компании</p>
|
||||
<div className="img">
|
||||
<img src={arrowDown} alt="arrow" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="treaties__tabs__content__main__item item notPaid">
|
||||
<div className="item__info">
|
||||
<p className="number">Акт №4 от 10.03.23</p>
|
||||
<div className="item__person__act">
|
||||
<div className="item__person__act__info">
|
||||
<div className="item__person__act__avatar">
|
||||
<img src={avatarMok} alt="avatar" />
|
||||
<div className="item__person__act__name">
|
||||
<p>Макаренко Дмитрий</p>
|
||||
<span>Дизайнер</span>
|
||||
</div>
|
||||
</div>
|
||||
<img
|
||||
className="personArrow"
|
||||
src={arrowItem}
|
||||
alt="arrow"
|
||||
/>
|
||||
<p className="moreInfo">к Доп. соглашению № 1</p>
|
||||
</div>
|
||||
<div className="arrow">
|
||||
<img src={arrowDown} alt="arrow" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="item__more price">
|
||||
<div className="item__more__price">
|
||||
<p className="total">214 500,00 руб</p>
|
||||
<p>147 раб.часов ( 1200руб / час ) </p>
|
||||
</div>
|
||||
<div className="item__more__names">
|
||||
<p>Бойко Кирилл Сергеевич, подписал и отправил документ</p>
|
||||
<p>ООО "Зоря", документ получен</p>
|
||||
</div>
|
||||
<div className="item__more__date">
|
||||
<div className="item__more__date__from">
|
||||
<img src={lock} alt="lock" />
|
||||
<p>01/01/2021</p>
|
||||
</div>
|
||||
<img src={arrowItem} alt="to" />
|
||||
<div className="item__more__date__to">
|
||||
<img src={lockDone} alt="lockDone" />
|
||||
<p>01/02/2021</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="treaties__tabs__content__main__item item">
|
||||
<div className="item__info">
|
||||
<p className="number">Акт №4 от 10.03.23</p>
|
||||
<div className="item__person__act">
|
||||
<div className="item__person__act__info">
|
||||
<div className="item__person__act__avatar">
|
||||
<img src={avatarMok} alt="avatar" />
|
||||
<div className="item__person__act__name">
|
||||
<p>Макаренко Дмитрий</p>
|
||||
<span>Дизайнер</span>
|
||||
</div>
|
||||
</div>
|
||||
<img
|
||||
className="personArrow"
|
||||
src={arrowItem}
|
||||
alt="arrow"
|
||||
/>
|
||||
<p className="moreInfo">к Доп. соглашению № 1</p>
|
||||
</div>
|
||||
<div className="arrow">
|
||||
<img src={arrowDown} alt="arrow" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="item__more price">
|
||||
<div className="item__more__price">
|
||||
<p className="total">214 500,00 руб</p>
|
||||
<p>147 раб.часов ( 1200руб / час ) </p>
|
||||
</div>
|
||||
<div className="item__more__names">
|
||||
<p>Бойко Кирилл Сергеевич, подписал и отправил документ</p>
|
||||
<p>ООО "Зоря", документ получен</p>
|
||||
</div>
|
||||
<div className="item__more__date">
|
||||
<div className="item__more__date__from">
|
||||
<img src={lock} alt="lock" />
|
||||
<p>01/01/2021</p>
|
||||
</div>
|
||||
<img src={arrowItem} alt="to" />
|
||||
<div className="item__more__date__to">
|
||||
<img src={lockDone} alt="lockDone" />
|
||||
<p>01/02/2021</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
className={
|
||||
toggleTab === 3
|
||||
? "treaties__tabs__content__main second active__content"
|
||||
: "treaties__tabs__content__main"
|
||||
}
|
||||
>
|
||||
<div className="main__head acts">
|
||||
<div className="provider">
|
||||
<p>Провайдер документооборота: Астрал</p>
|
||||
<img src={logoAstral} alt="astral" />
|
||||
</div>
|
||||
<div className="info">
|
||||
<p>Реквизиты компании</p>
|
||||
<div className="img">
|
||||
<img src={arrowDown} alt="arrow" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="treaties__tabs__content__main__item item notPaid">
|
||||
<div className="item__info">
|
||||
<p className="number">Акт №4 от 10.03.23</p>
|
||||
<div className="item__person__act">
|
||||
<div className="item__person__act__info">
|
||||
<div className="item__person__act__avatar">
|
||||
<img src={avatarMok} alt="avatar" />
|
||||
<div className="item__person__act__name">
|
||||
<p>Макаренко Дмитрий</p>
|
||||
<span>Дизайнер</span>
|
||||
</div>
|
||||
</div>
|
||||
<img
|
||||
className="personArrow"
|
||||
src={arrowItem}
|
||||
alt="arrow"
|
||||
/>
|
||||
<p className="moreInfo">к Доп. соглашению № 1</p>
|
||||
</div>
|
||||
<div className="arrow">
|
||||
<img src={arrowDown} alt="arrow" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="item__more price">
|
||||
<div className="item__more__price">
|
||||
<p className="total">214 500,00 руб</p>
|
||||
<p>147 раб.часов ( 1200руб / час ) </p>
|
||||
</div>
|
||||
<div className="item__more__names">
|
||||
<p>Бойко Кирилл Сергеевич, подписал и отправил документ</p>
|
||||
<p>ООО "Зоря", документ получен</p>
|
||||
</div>
|
||||
<div className="item__more__date">
|
||||
<div className="item__more__date__from">
|
||||
<img src={lock} alt="lock" />
|
||||
<p>01/01/2021</p>
|
||||
</div>
|
||||
<img src={arrowItem} alt="to" />
|
||||
<div className="item__more__date__to">
|
||||
<img src={lockDone} alt="lockDone" />
|
||||
<p>01/02/2021</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="treaties__tabs__content__main__item item">
|
||||
<div className="item__info">
|
||||
<p className="number">Акт №4 от 10.03.23</p>
|
||||
<div className="item__person__act">
|
||||
<div className="item__person__act__info">
|
||||
<div className="item__person__act__avatar">
|
||||
<img src={avatarMok} alt="avatar" />
|
||||
<div className="item__person__act__name">
|
||||
<p>Макаренко Дмитрий</p>
|
||||
<span>Дизайнер</span>
|
||||
</div>
|
||||
</div>
|
||||
<img
|
||||
className="personArrow"
|
||||
src={arrowItem}
|
||||
alt="arrow"
|
||||
/>
|
||||
<p className="moreInfo">к Доп. соглашению № 1</p>
|
||||
</div>
|
||||
<div className="arrow">
|
||||
<img src={arrowDown} alt="arrow" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="item__more price">
|
||||
<div className="item__more__price">
|
||||
<p className="total">214 500,00 руб</p>
|
||||
<p>147 раб.часов ( 1200руб / час ) </p>
|
||||
</div>
|
||||
<div className="item__more__names">
|
||||
<p>Бойко Кирилл Сергеевич, подписал и отправил документ</p>
|
||||
<p>ООО "Зоря", документ получен</p>
|
||||
</div>
|
||||
<div className="item__more__date">
|
||||
<div className="item__more__date__from">
|
||||
<img src={lock} alt="lock" />
|
||||
<p>01/01/2021</p>
|
||||
</div>
|
||||
<img src={arrowItem} alt="to" />
|
||||
<div className="item__more__date__to">
|
||||
<img src={lockDone} alt="lockDone" />
|
||||
<p>01/02/2021</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
@ -9,17 +9,17 @@ import { Footer } from "../../components/Footer/Footer";
|
||||
|
||||
import { setPartnerEmployees } from "../../redux/outstaffingSlice";
|
||||
|
||||
import BackEndImg from "../../images/personalBackEnd.svg";
|
||||
import FrontendImg from "../../images/PersonalFrontend.svg";
|
||||
import ArchitectureImg from "../../images/PersonalArchitecture.svg";
|
||||
import DesignImg from "../../images/PersonalDesign.svg";
|
||||
import TestImg from "../../images/PersonalTesters.svg";
|
||||
import AdminImg from "../../images/PersonalAdmin.svg";
|
||||
import ManageImg from "../../images/PersonalMng.svg";
|
||||
import CopyImg from "../../images/PersonalCopy.svg";
|
||||
import SmmImg from "../../images/PersonalSMM.svg";
|
||||
import rightArrow from "../../images/arrowRight.svg";
|
||||
import avatarImg from "../PartnerEmployees/avatarMok.png";
|
||||
import BackEndImg from "../../assets/images/partnerProfile/personalBackEnd.svg";
|
||||
import FrontendImg from "../../assets/images/partnerProfile/PersonalFrontend.svg";
|
||||
import ArchitectureImg from "../../assets/images/partnerProfile/PersonalArchitecture.svg";
|
||||
import DesignImg from "../../assets/images/partnerProfile/PersonalDesign.svg";
|
||||
import TestImg from "../../assets/images/partnerProfile/PersonalTesters.svg";
|
||||
import AdminImg from "../../assets/images/partnerProfile/PersonalAdmin.svg";
|
||||
import ManageImg from "../../assets/images/partnerProfile/PersonalMng.svg";
|
||||
import CopyImg from "../../assets/images/partnerProfile/PersonalCopy.svg";
|
||||
import SmmImg from "../../assets/images/partnerProfile/PersonalSMM.svg";
|
||||
import rightArrow from "../../assets/icons/arrows/arrowRight.svg";
|
||||
import avatarImg from "../../assets/images/avatarMok.png";
|
||||
|
||||
import "./partnerСategories.scss";
|
||||
import { Navigation } from "../../components/Navigation/Navigation";
|
@ -1,13 +1,13 @@
|
||||
import React from 'react';
|
||||
import React from "react";
|
||||
|
||||
import {ProfileHeader} from "../../components/ProfileHeader/ProfileHeader";
|
||||
import { Navigation } from '../../components/Navigation/Navigation';
|
||||
import { ProfileHeader } from "../../components/ProfileHeader/ProfileHeader";
|
||||
import { Navigation } from "../../components/Navigation/Navigation";
|
||||
|
||||
export const Payouts = () => {
|
||||
return (
|
||||
<div className='payouts'>
|
||||
<ProfileHeader />
|
||||
<Navigation />
|
||||
</div>
|
||||
)
|
||||
return (
|
||||
<div className="payouts">
|
||||
<ProfileHeader />
|
||||
<Navigation />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
@ -1,137 +1,148 @@
|
||||
import React, {useState} from 'react';
|
||||
import {useSelector} from "react-redux";
|
||||
import {Link} from "react-router-dom";
|
||||
import React, { useState } from "react";
|
||||
import { useSelector } from "react-redux";
|
||||
|
||||
import {ProfileHeader} from "../../components/ProfileHeader/ProfileHeader";
|
||||
import {ProfileBreadcrumbs} from "../../components/ProfileBreadcrumbs/ProfileBreadcrumbs"
|
||||
import {Footer} from "../../components/Footer/Footer";
|
||||
import { CardControl } from '../../components/CardControl/CardControl';
|
||||
import { Navigation } from '../../components/Navigation/Navigation';
|
||||
import { getProfileInfo } from "../../redux/outstaffingSlice";
|
||||
import { urlForLocal } from "../../helper";
|
||||
|
||||
import {getProfileInfo} from "../../redux/outstaffingSlice";
|
||||
import { ProfileHeader } from "../../components/ProfileHeader/ProfileHeader";
|
||||
import { ProfileBreadcrumbs } from "../../components/ProfileBreadcrumbs/ProfileBreadcrumbs";
|
||||
import { Footer } from "../../components/Footer/Footer";
|
||||
import { CardControl } from "../../components/CardControl/CardControl";
|
||||
import { Navigation } from "../../components/Navigation/Navigation";
|
||||
|
||||
import {urlForLocal} from "../../helper";
|
||||
import reportsIcon from "../../assets/images/reports.png";
|
||||
import summaryIcon from "../../assets/icons/summaryIcon.png";
|
||||
import timerIcon from "../../assets/icons/timerIcon.png";
|
||||
import paymentIcon from "../../assets/icons/paymentIcon.png";
|
||||
import settingIcon from "../../assets/icons/settingIcon.png";
|
||||
import avatarMok from "../../assets/images/avatarMok.png";
|
||||
|
||||
import reportsIcon from "../../images/reports.png"
|
||||
import summaryIcon from "../../images/summaryIcon.png"
|
||||
import timerIcon from "../../images/timerIcon.png"
|
||||
import paymentIcon from "../../images/paymentIcon.png"
|
||||
import settingIcon from "../../images/settingIcon.png"
|
||||
import avatarMok from "../PartnerTreaties/Images/avatarMok.png"
|
||||
|
||||
import './profile.scss'
|
||||
import "./profile.scss";
|
||||
|
||||
export const Profile = () => {
|
||||
|
||||
const profileInfo = useSelector(getProfileInfo);
|
||||
const [user] = useState(localStorage.getItem('role_status') === '18' ? 'partner' : 'developer')
|
||||
const [user] = useState(
|
||||
localStorage.getItem("role_status") === "18" ? "partner" : "developer"
|
||||
);
|
||||
const [profileItemsInfo] = useState({
|
||||
developer: [
|
||||
{
|
||||
path: 'profile/calendar',
|
||||
path: "profile/calendar",
|
||||
img: reportsIcon,
|
||||
title: 'Ваша отчетность',
|
||||
description: '<span></span>Отработанных в этом месяце часов'
|
||||
title: "Ваша отчетность",
|
||||
description: "<span></span>Отработанных в этом месяце часов",
|
||||
},
|
||||
{
|
||||
path: 'profile/summary',
|
||||
path: "profile/summary",
|
||||
img: summaryIcon,
|
||||
title: 'Данные и резюме',
|
||||
description: 'Ваше резюме<br/><span>заполнено</span>'
|
||||
title: "Данные и резюме",
|
||||
description: "Ваше резюме<br/><span>заполнено</span>",
|
||||
},
|
||||
{
|
||||
path: 'profile/tracker',
|
||||
path: "profile/tracker",
|
||||
img: timerIcon,
|
||||
title: 'Трекер времени',
|
||||
description: 'Сколько времени занимает<br/> выполнение задач'
|
||||
title: "Трекер времени",
|
||||
description: "Сколько времени занимает<br/> выполнение задач",
|
||||
},
|
||||
{
|
||||
path: 'profile/payouts',
|
||||
path: "profile/payouts",
|
||||
img: paymentIcon,
|
||||
title: 'Выплаты',
|
||||
description: 'У вас <span>подтвержден</span><br/> статус самозанятого'
|
||||
title: "Выплаты",
|
||||
description: "У вас <span>подтвержден</span><br/> статус самозанятого",
|
||||
},
|
||||
{
|
||||
path: 'profile/settings',
|
||||
path: "profile/settings",
|
||||
img: settingIcon,
|
||||
title: 'Настройки аккаунта',
|
||||
description: 'Перейдите чтобы начать<br/> редактирование'
|
||||
}
|
||||
title: "Настройки аккаунта",
|
||||
description: "Перейдите чтобы начать<br/> редактирование",
|
||||
},
|
||||
],
|
||||
partner: [
|
||||
{
|
||||
path: 'profile/requests',
|
||||
path: "profile/requests",
|
||||
img: reportsIcon,
|
||||
title: 'Запросы и открытые позиции',
|
||||
description: '<span>У вас 2 вакансии<br/></span>открытые от лица компании'
|
||||
title: "Запросы и открытые позиции",
|
||||
description:
|
||||
"<span>У вас 2 вакансии<br/></span>открытые от лица компании",
|
||||
},
|
||||
{
|
||||
path: 'profile/categories',
|
||||
path: "profile/categories",
|
||||
img: summaryIcon,
|
||||
title: 'Данные персонала',
|
||||
description: 'Наши специалисты <br/><span>уже работающие у вас</span>'
|
||||
title: "Данные персонала",
|
||||
description: "Наши специалисты <br/><span>уже работающие у вас</span>",
|
||||
},
|
||||
{
|
||||
path: 'profile/tracker',
|
||||
path: "profile/tracker",
|
||||
img: timerIcon,
|
||||
title: 'Трекер времени',
|
||||
description: 'Контроль времени и<br/> выполнение задач'
|
||||
title: "Трекер времени",
|
||||
description: "Контроль времени и<br/> выполнение задач",
|
||||
},
|
||||
{
|
||||
path: 'profile/treaties',
|
||||
path: "profile/treaties",
|
||||
img: paymentIcon,
|
||||
title: 'Договора и отчетность',
|
||||
description: 'Ключевые условия<br/> договора'
|
||||
title: "Договора и отчетность",
|
||||
description: "Ключевые условия<br/> договора",
|
||||
},
|
||||
{
|
||||
path: 'profile/settings',
|
||||
path: "profile/settings",
|
||||
img: settingIcon,
|
||||
title: 'Настройки аккаунта',
|
||||
description: 'Перейдите чтобы начать<br/> редактирование'
|
||||
}
|
||||
]
|
||||
})
|
||||
title: "Настройки аккаунта",
|
||||
description: "Перейдите чтобы начать<br/> редактирование",
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
return (
|
||||
<div className='profile'>
|
||||
<ProfileHeader/>
|
||||
<Navigation />
|
||||
<div className='container'>
|
||||
<ProfileBreadcrumbs links={[{name: 'Главная', link: '/profile'}]} />
|
||||
<h2 className='profile__title'>
|
||||
{user === 'developer' ?
|
||||
<span><p>Добрый день, </p>{profileInfo.fio}</span>
|
||||
:
|
||||
'ООО НДВ Консалтинг'
|
||||
}
|
||||
</h2>
|
||||
<div className='summary__info'>
|
||||
<div className='summary__person'>
|
||||
<img src={profileInfo.photo ? urlForLocal(profileInfo.photo) : avatarMok} className='summary__avatar' alt='avatar'/>
|
||||
<p className='summary__name'>
|
||||
{user === 'developer' ?
|
||||
<span>{profileInfo.fio}, {profileInfo.specification} разработчик</span>
|
||||
:
|
||||
'ООО НДВ Консалтинг'
|
||||
}
|
||||
</p>
|
||||
</div>
|
||||
<div className="profile">
|
||||
<ProfileHeader />
|
||||
<Navigation />
|
||||
<div className="container">
|
||||
<ProfileBreadcrumbs links={[{ name: "Главная", link: "/profile" }]} />
|
||||
<h2 className="profile__title">
|
||||
{user === "developer" ? (
|
||||
<span>
|
||||
<p>Добрый день, </p>
|
||||
{profileInfo.fio}
|
||||
</span>
|
||||
) : (
|
||||
"ООО НДВ Консалтинг"
|
||||
)}
|
||||
</h2>
|
||||
<div className="summary__info">
|
||||
<div className="summary__person">
|
||||
<img
|
||||
src={
|
||||
profileInfo.photo ? urlForLocal(profileInfo.photo) : avatarMok
|
||||
}
|
||||
className="summary__avatar"
|
||||
alt="avatar"
|
||||
/>
|
||||
<p className="summary__name">
|
||||
{user === "developer" ? (
|
||||
<span>
|
||||
{profileInfo.fio}, {profileInfo.specification} разработчик
|
||||
</span>
|
||||
) : (
|
||||
"ООО НДВ Консалтинг"
|
||||
)}
|
||||
</p>
|
||||
</div>
|
||||
<div className='profile__items'>
|
||||
{
|
||||
profileItemsInfo[user].map((item, index) => {
|
||||
return <CardControl
|
||||
</div>
|
||||
<div className="profile__items">
|
||||
{profileItemsInfo[user].map((item, index) => {
|
||||
return (
|
||||
<CardControl
|
||||
description={item.description}
|
||||
img={item.img}
|
||||
path={item.path}
|
||||
title={item.title}
|
||||
key={index}
|
||||
/>
|
||||
})
|
||||
}
|
||||
</div>
|
||||
/>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
<Footer/>
|
||||
</div>
|
||||
)
|
||||
<Footer />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
@ -1,16 +1,19 @@
|
||||
import React, { useState } from "react";
|
||||
import "./ProfileCandidate.scss";
|
||||
|
||||
import { ProfileHeader } from "../../components/ProfileHeader/ProfileHeader";
|
||||
import { ProfileBreadcrumbs } from "../../components/ProfileBreadcrumbs/ProfileBreadcrumbs";
|
||||
import { CardControl } from "../../components/CardControl/CardControl";
|
||||
import settingIcon from "../../images/settingIcon.png";
|
||||
import reportsIcon from "../../images/reports.png";
|
||||
import noteIcon from "../../images/note.png";
|
||||
import questionIcon from "../../images/question.png";
|
||||
import medium_male from "../../images/medium_male.png";
|
||||
import { Footer } from "../../components/Footer/Footer";
|
||||
import { HeadBottom } from "../../components/features/Candidate-lk/HeadBottom";
|
||||
|
||||
import settingIcon from "../../assets/icons/settingIcon.png";
|
||||
import reportsIcon from "../../assets/images/reports.png";
|
||||
import noteIcon from "../../assets/images/note.png";
|
||||
import questionIcon from "../../assets/images/question.png";
|
||||
import medium_male from "../../assets/images/medium_male.png";
|
||||
|
||||
import "./ProfileCandidate.scss";
|
||||
|
||||
export const ProfileCandidate = () => {
|
||||
const [candidatsCardsControl] = useState([
|
||||
{
|
||||
|
@ -5,7 +5,7 @@ import { ProfileBreadcrumbs } from "../../components/ProfileBreadcrumbs/ProfileB
|
||||
import { Footer } from "../../components/Footer/Footer";
|
||||
import { Navigation } from "../../components/Navigation/Navigation";
|
||||
import { Loader } from "../../components/Loader/Loader";
|
||||
import { urlForLocal } from '../../helper'
|
||||
import { urlForLocal } from "../../helper";
|
||||
|
||||
import { useDispatch, useSelector } from "react-redux";
|
||||
import { apiRequest } from "../../api/request";
|
||||
@ -19,22 +19,22 @@ import {
|
||||
activeLoader,
|
||||
setColumnName,
|
||||
setColumnId,
|
||||
deletePersonOnProject
|
||||
deletePersonOnProject,
|
||||
} from "../../redux/projectsTrackerSlice";
|
||||
|
||||
import ModalTicket from "../../components/UI/ModalTicket/ModalTicket";
|
||||
import TrackerModal from "../../components/UI/TrackerModal/TrackerModal";
|
||||
|
||||
import project from "../../images/trackerProject.svg";
|
||||
import tasks from "../../images/trackerTasks.svg";
|
||||
import archive from "../../images/archiveTracker.svg";
|
||||
import selectArrow from "../../images/select.svg";
|
||||
import commentsBoard from "../../images/commentsBoard.svg";
|
||||
import filesBoard from "../../images/filesBoard.svg";
|
||||
import arrow from "../../images/arrowCalendar.png";
|
||||
import del from "../../images/delete.svg";
|
||||
import edit from "../../images/edit.svg";
|
||||
import close from "../../images/closeProjectPersons.svg"
|
||||
import project from "../../assets/icons/trackerProject.svg";
|
||||
import tasks from "../../assets/icons/trackerTasks.svg";
|
||||
import archive from "../../assets/icons/archiveTracker.svg";
|
||||
import selectArrow from "../../assets/icons/arrows/select.svg";
|
||||
import commentsBoard from "../../assets/icons/commentsBoard.svg";
|
||||
import filesBoard from "../../assets/icons/filesBoard.svg";
|
||||
import arrow from "../../assets/icons/arrows/arrowCalendar.png";
|
||||
import del from "../../assets/icons/delete.svg";
|
||||
import edit from "../../assets/icons/edit.svg";
|
||||
import close from "../../assets/icons/closeProjectPersons.svg";
|
||||
|
||||
export const ProjectTracker = () => {
|
||||
const dispatch = useDispatch();
|
||||
@ -47,7 +47,7 @@ export const ProjectTracker = () => {
|
||||
const [modalAdd, setModalAdd] = useState(false);
|
||||
const [modalActiveTicket, setModalActiveTicket] = useState(false);
|
||||
const [selectedTicket, setSelectedTicket] = useState({});
|
||||
const [personListOpen, setPersonListOpen] = useState(false)
|
||||
const [personListOpen, setPersonListOpen] = useState(false);
|
||||
|
||||
const startWrapperIndexTest = useRef({});
|
||||
const projectBoard = useSelector(getProjectBoard);
|
||||
@ -134,7 +134,7 @@ export const ProjectTracker = () => {
|
||||
setSelectedTab(columnId);
|
||||
dispatch(modalToggle("createTiketProject"));
|
||||
setModalAdd(true);
|
||||
setPriorityTask(length + 1)
|
||||
setPriorityTask(length + 1);
|
||||
}
|
||||
|
||||
function openTicket(e, task) {
|
||||
@ -160,10 +160,10 @@ export const ProjectTracker = () => {
|
||||
method: "DELETE",
|
||||
data: {
|
||||
project_id: projectBoard.id,
|
||||
user_id: userId
|
||||
user_id: userId,
|
||||
},
|
||||
}).then((res) => {
|
||||
dispatch(deletePersonOnProject(userId))
|
||||
dispatch(deletePersonOnProject(userId));
|
||||
});
|
||||
}
|
||||
|
||||
@ -238,43 +238,69 @@ export const ProjectTracker = () => {
|
||||
<div className="tasks__head__persons">
|
||||
{/*<img src={avatarTest} alt="avatar" />*/}
|
||||
{/*<img src={avatarTest} alt="avatar" />*/}
|
||||
<span className="countPersons">{projectBoard.projectUsers?.length}</span>
|
||||
<span className="countPersons">
|
||||
{projectBoard.projectUsers?.length}
|
||||
</span>
|
||||
<span
|
||||
className="addPerson"
|
||||
onClick={() => {
|
||||
setPersonListOpen(true)
|
||||
setPersonListOpen(true);
|
||||
}}
|
||||
>
|
||||
+
|
||||
</span>
|
||||
<p>добавить участника</p>
|
||||
{personListOpen &&
|
||||
<div className='persons__list'>
|
||||
<img className='persons__list__close' src={close} alt='close' onClick={() => setPersonListOpen(false)} />
|
||||
<div className='persons__list__count'><span>{projectBoard.projectUsers?.length}</span>участник</div>
|
||||
<div className='persons__list__info'>В проекте - <span>“{projectBoard.name}”</span></div>
|
||||
<div className='persons__list__items'>
|
||||
{projectBoard.projectUsers?.map((person) => {
|
||||
return <div className='persons__list__item' key={person.user_id}>
|
||||
<img className='avatar' src={urlForLocal(person.user.avatar)} alt='avatar' />
|
||||
<span>{person.user.fio}</span>
|
||||
<img className='delete' src={close} alt='delete' onClick={() => deletePerson(person.user_id)}/>
|
||||
</div>
|
||||
})
|
||||
}
|
||||
{personListOpen && (
|
||||
<div className="persons__list">
|
||||
<img
|
||||
className="persons__list__close"
|
||||
src={close}
|
||||
alt="close"
|
||||
onClick={() => setPersonListOpen(false)}
|
||||
/>
|
||||
<div className="persons__list__count">
|
||||
<span>{projectBoard.projectUsers?.length}</span>
|
||||
участник
|
||||
</div>
|
||||
<div className="persons__list__info">
|
||||
В проекте - <span>“{projectBoard.name}”</span>
|
||||
</div>
|
||||
<div className="persons__list__items">
|
||||
{projectBoard.projectUsers?.map((person) => {
|
||||
return (
|
||||
<div
|
||||
className="persons__list__item"
|
||||
key={person.user_id}
|
||||
>
|
||||
<img
|
||||
className="avatar"
|
||||
src={urlForLocal(person.user.avatar)}
|
||||
alt="avatar"
|
||||
/>
|
||||
<span>{person.user.fio}</span>
|
||||
<img
|
||||
className="delete"
|
||||
src={close}
|
||||
alt="delete"
|
||||
onClick={() => deletePerson(person.user_id)}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
<div
|
||||
className="persons__list__add"
|
||||
onClick={() => {
|
||||
dispatch(modalToggle("addWorker"));
|
||||
setModalAdd(true);
|
||||
setPersonListOpen(false);
|
||||
}}
|
||||
>
|
||||
<span className="addPerson">+</span>
|
||||
<p>Добавить участников</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className='persons__list__add'
|
||||
onClick={() => {
|
||||
dispatch(modalToggle("addWorker"));
|
||||
setModalAdd(true);
|
||||
setPersonListOpen(false)
|
||||
}}
|
||||
>
|
||||
<span className='addPerson'>+</span>
|
||||
<p>Добавить участников</p>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
)}
|
||||
</div>
|
||||
<div className="tasks__head__select">
|
||||
<span>Участвую</span>
|
||||
@ -291,14 +317,16 @@ export const ProjectTracker = () => {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{Boolean(modalActiveTicket) && <ModalTicket
|
||||
{Boolean(modalActiveTicket) && (
|
||||
<ModalTicket
|
||||
active={modalActiveTicket}
|
||||
setActive={setModalActiveTicket}
|
||||
task={selectedTicket}
|
||||
projectId={projectBoard.id}
|
||||
projectName={projectBoard.name}
|
||||
projectUsers={projectBoard.projectUsers}
|
||||
/>}
|
||||
/>
|
||||
)}
|
||||
|
||||
<div className="tasks__container">
|
||||
{Boolean(projectBoard?.columns) &&
|
||||
@ -322,7 +350,9 @@ export const ProjectTracker = () => {
|
||||
<div>
|
||||
<span
|
||||
className="add"
|
||||
onClick={() => selectedTabTask(column.id, column.tasks.length)}
|
||||
onClick={() =>
|
||||
selectedTabTask(column.id, column.tasks.length)
|
||||
}
|
||||
>
|
||||
+
|
||||
</span>
|
||||
@ -349,8 +379,8 @@ export const ProjectTracker = () => {
|
||||
[column.id]: false,
|
||||
}));
|
||||
dispatch(modalToggle("editColumn"));
|
||||
dispatch(setColumnName(column.title))
|
||||
dispatch(setColumnId(column.id))
|
||||
dispatch(setColumnName(column.title));
|
||||
dispatch(setColumnId(column.id));
|
||||
setModalAdd(true);
|
||||
}}
|
||||
>
|
||||
|
@ -5,8 +5,8 @@ import SideBar from "../../components/SideBar/SideBar";
|
||||
import StepsForCandidate from "../../components/StepsForCandidate/StepsForCandidate";
|
||||
import { Footer } from "../../components/Footer/Footer";
|
||||
|
||||
import BackEndImg from "../../images/personalBackEnd.svg";
|
||||
import arrowBtn from "../../images/arrowRight.svg";
|
||||
import BackEndImg from "../../assets/images/partnerProfile/personalBackEnd.svg";
|
||||
import arrowBtn from "../../assets/icons/arrows/arrowRight.svg";
|
||||
|
||||
import "./registationForCandidate.scss";
|
||||
|
||||
|
@ -24,7 +24,7 @@
|
||||
margin-top: 200px;
|
||||
display: flex;
|
||||
padding: 33px 69px 32px 30px;
|
||||
background: #FFFFFF;
|
||||
background: #ffffff;
|
||||
border-radius: 12px;
|
||||
width: 100%;
|
||||
}
|
||||
@ -56,13 +56,13 @@
|
||||
font-weight: 400;
|
||||
font-size: 12px;
|
||||
line-height: 20px;
|
||||
color: #6F6F6F;
|
||||
color: #6f6f6f;
|
||||
}
|
||||
|
||||
&__arrow {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
background: #DDEEC6;
|
||||
background: #ddeec6;
|
||||
border-radius: 50px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
@ -96,7 +96,7 @@
|
||||
}
|
||||
|
||||
input {
|
||||
background: #EFF2F7;
|
||||
background: #eff2f7;
|
||||
border-radius: 8px;
|
||||
width: 100%;
|
||||
padding: 8px 12px;
|
||||
@ -117,8 +117,8 @@
|
||||
font-weight: 500;
|
||||
font-size: 18px;
|
||||
line-height: 32px;
|
||||
color: #FFFFFF;
|
||||
background: #52B709;
|
||||
color: #ffffff;
|
||||
background: #52b709;
|
||||
border-radius: 44px;
|
||||
width: 180px;
|
||||
height: 46px;
|
||||
|
@ -5,9 +5,9 @@ import SVG from "react-inlinesvg";
|
||||
import { TaskItem } from "../../components/TaskItem/TaskItem";
|
||||
import { LogoutButton } from "../../components/LogoutButton/LogoutButton";
|
||||
|
||||
import arrowLeft from "../../images/left-arrow.png";
|
||||
import dateArrowIcon from "../../images/dateArrow.svg";
|
||||
import calendarIcon from "../../images/calendar.svg";
|
||||
import arrowLeft from "../../assets/icons/arrows/left-arrow.png";
|
||||
import dateArrowIcon from "../../assets/icons/arrows/dateArrow.svg";
|
||||
import calendarIcon from "../../assets/icons/calendar.svg";
|
||||
|
||||
import "./singleReportPage.scss";
|
||||
|
||||
|
@ -10,9 +10,9 @@ import { urlForLocal } from "../../helper";
|
||||
import { apiRequest } from "../../api/request";
|
||||
import { Navigation } from "../../components/Navigation/Navigation";
|
||||
|
||||
import arrow from "../../images/left-arrow.png";
|
||||
import rightArrow from "../../images/arrowRight.svg";
|
||||
import gitImgItem from "../../images/gitItemImg.svg";
|
||||
import arrow from "../../assets/icons/arrows/left-arrow.png";
|
||||
import rightArrow from "../../assets/icons/arrows/arrowRight.svg";
|
||||
import gitImgItem from "../../assets/icons/gitItemImg.svg";
|
||||
|
||||
import "./summary.scss";
|
||||
|
||||
|
@ -1,12 +1,6 @@
|
||||
import React, { useEffect, useState } from "react";
|
||||
|
||||
import { ProfileHeader } from "../../components/ProfileHeader/ProfileHeader";
|
||||
import { ProfileBreadcrumbs } from "../../components/ProfileBreadcrumbs/ProfileBreadcrumbs";
|
||||
import { Footer } from "../../components/Footer/Footer";
|
||||
import { apiRequest } from "../../api/request";
|
||||
import { Navigation } from "../../components/Navigation/Navigation";
|
||||
|
||||
import { useDispatch, useSelector } from "react-redux";
|
||||
|
||||
import {
|
||||
setAllProjects,
|
||||
getProjects,
|
||||
@ -15,18 +9,22 @@ import {
|
||||
modalToggle,
|
||||
} from "../../redux/projectsTrackerSlice";
|
||||
|
||||
import { ProfileHeader } from "../../components/ProfileHeader/ProfileHeader";
|
||||
import { ProfileBreadcrumbs } from "../../components/ProfileBreadcrumbs/ProfileBreadcrumbs";
|
||||
import { Footer } from "../../components/Footer/Footer";
|
||||
import { apiRequest } from "../../api/request";
|
||||
import { Navigation } from "../../components/Navigation/Navigation";
|
||||
import TrackerModal from "../../components/UI/TrackerModal/TrackerModal";
|
||||
import ProjectTiket from "../../components/ProjectTiket/ProjectTiket";
|
||||
import { urlForLocal } from "../../helper";
|
||||
import { getCorrectDate } from "../../components/Calendar/calendarHelper";
|
||||
import { Loader } from "../../components/Loader/Loader";
|
||||
|
||||
import project from "../../images/trackerProject.svg";
|
||||
import tasks from "../../images/trackerTasks.svg";
|
||||
import archive from "../../images/archiveTracker.svg";
|
||||
import avatarTest from "../../images/AvatarTest .png";
|
||||
import search from "../../images/serchIcon.png";
|
||||
import noProjects from "../../images/noProjects.png";
|
||||
import project from "../../assets/icons/trackerProject.svg";
|
||||
import tasks from "../../assets/icons/trackerTasks.svg";
|
||||
import archive from "../../assets/icons/archiveTracker.svg";
|
||||
import search from "../../assets/icons/serchIcon.png";
|
||||
import noProjects from "../../assets/images/noProjects.png";
|
||||
|
||||
import "./tracker.scss";
|
||||
|
||||
@ -39,7 +37,7 @@ export const Tracker = () => {
|
||||
const [filteredAllTasks, setFilteredAllTasks] = useState([]);
|
||||
const [loader, setLoader] = useState(false);
|
||||
const [filterCompleteTasks, setFilterCompleteTasks] = useState([]);
|
||||
const [allCompletedTasks, setAllCompletedTasks] = useState([])
|
||||
const [allCompletedTasks, setAllCompletedTasks] = useState([]);
|
||||
|
||||
const [modalCreateProject, setModalCreateProject] = useState(false);
|
||||
|
||||
@ -66,12 +64,12 @@ export const Tracker = () => {
|
||||
apiRequest(
|
||||
`/task/get-user-tasks?user_id=${localStorage.getItem("id")}`
|
||||
).then((el) => {
|
||||
const allTasks = el.filter((item) => item.status !== 0)
|
||||
const completedTasks = el.filter((item) => item.status === 0)
|
||||
const allTasks = el.filter((item) => item.status !== 0);
|
||||
const completedTasks = el.filter((item) => item.status === 0);
|
||||
setAllTasks(allTasks);
|
||||
setFilteredAllTasks(allTasks);
|
||||
setAllCompletedTasks(completedTasks)
|
||||
setFilterCompleteTasks(completedTasks)
|
||||
setAllCompletedTasks(completedTasks);
|
||||
setFilterCompleteTasks(completedTasks);
|
||||
});
|
||||
}, []);
|
||||
|
||||
@ -99,7 +97,7 @@ export const Tracker = () => {
|
||||
|
||||
function filterArchiveTasks(e) {
|
||||
setFilterCompleteTasks(
|
||||
allCompletedTasks.filter((item) => {
|
||||
allCompletedTasks.filter((item) => {
|
||||
if (!e.target.value) {
|
||||
return item;
|
||||
}
|
||||
@ -291,41 +289,50 @@ export const Tracker = () => {
|
||||
</div>
|
||||
<div className="archive__tasksWrapper">
|
||||
{loader && <Loader style="green" />}
|
||||
{!loader && <>
|
||||
{Boolean(filterCompleteTasks.length) ? (
|
||||
filterCompleteTasks.map((task, index) => {
|
||||
return (
|
||||
<div className="archive__completeTask" key={index}>
|
||||
<div className="archive__completeTask__description">
|
||||
<p>{task.title}</p>
|
||||
<p className="date">{task.description}</p>
|
||||
</div>
|
||||
<div className="archive__completeTask__info">
|
||||
<img src={urlForLocal(task.user.avatar)} alt="avatar" />
|
||||
<div className="archive__completeTask__info__project">
|
||||
{/*<span>Проект</span>*/}
|
||||
<p>{getCorrectDate(task.updated_at)}</p>
|
||||
{!loader && (
|
||||
<>
|
||||
{Boolean(filterCompleteTasks.length) ? (
|
||||
filterCompleteTasks.map((task, index) => {
|
||||
return (
|
||||
<div className="archive__completeTask" key={index}>
|
||||
<div className="archive__completeTask__description">
|
||||
<p>{task.title}</p>
|
||||
<p className="date">{task.description}</p>
|
||||
</div>
|
||||
<div className="archive__completeTask__info">
|
||||
<img
|
||||
src={urlForLocal(task.user.avatar)}
|
||||
alt="avatar"
|
||||
/>
|
||||
<div className="archive__completeTask__info__project">
|
||||
{/*<span>Проект</span>*/}
|
||||
<p>{getCorrectDate(task.updated_at)}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
})
|
||||
) : (
|
||||
<div className="archive__noItem">
|
||||
<p>В архиве задач нет</p>
|
||||
</div>
|
||||
);
|
||||
})
|
||||
) : (
|
||||
<div className="archive__noItem">
|
||||
<p>В архиве задач нет</p>
|
||||
</div>
|
||||
)}
|
||||
</>
|
||||
)}
|
||||
</>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div className="archive__projects">
|
||||
<div className="archive__title">
|
||||
<h3>Архив проектов:</h3>
|
||||
<p>{projects.filter((project) => project.status === 10).length} проект(ов)</p>
|
||||
<p>
|
||||
{projects.filter((project) => project.status === 10).length}{" "}
|
||||
проект(ов)
|
||||
</p>
|
||||
</div>
|
||||
<div className="archive__tasksWrapper">
|
||||
{Boolean(projects.filter((project) => project.status === 10).length) ? (
|
||||
{Boolean(
|
||||
projects.filter((project) => project.status === 10).length
|
||||
) ? (
|
||||
projects.map((project, index) => {
|
||||
return project.status === 10 ? (
|
||||
<div className="archive__completeTask" key={index}>
|
||||
@ -334,7 +341,9 @@ export const Tracker = () => {
|
||||
<p className="date">{project.date}</p>
|
||||
</div>
|
||||
</div>
|
||||
): '';
|
||||
) : (
|
||||
""
|
||||
);
|
||||
})
|
||||
) : (
|
||||
<div className="archive__noItem">
|
||||
|
@ -14,8 +14,8 @@ import {
|
||||
hourOfNum,
|
||||
} from "../../components/Calendar/calendarHelper";
|
||||
|
||||
import arrow from "../../images/left-arrow.png";
|
||||
import arrowSwitchDate from "../../images/arrowViewReport.png";
|
||||
import arrow from "../../assets/icons/arrows/left-arrow.png";
|
||||
import arrowSwitchDate from "../../assets/icons/arrows/arrowViewReport.png";
|
||||
|
||||
import "./viewReport.scss";
|
||||
|
||||
|
@ -1,83 +1,108 @@
|
||||
import React, { useState } from 'react'
|
||||
import { ProfileHeader } from '../../components/ProfileHeader/ProfileHeader'
|
||||
import { HeadBottom } from '../../components/features/Candidate-lk/HeadBottom'
|
||||
import { ProfileBreadcrumbs } from '../../components/ProfileBreadcrumbs/ProfileBreadcrumbs'
|
||||
import { Link } from 'react-router-dom'
|
||||
import { Footer } from '../../components/Footer/Footer'
|
||||
import { QuizPassingInformation } from '../../components/features/quiz/Quiz-passing-information'
|
||||
import { CardIntroduction } from '../../components/features/quiz/Card-introduction'
|
||||
import { TaskQuiz } from '../../components/features/quiz/Task'
|
||||
import { BlockCompletedTest } from '../../components/features/quiz/BlockCompletedTest'
|
||||
import { useSelector } from 'react-redux'
|
||||
import { completedTestSelector, selectedTest } from '../../redux/quizSlice'
|
||||
import React, { useState } from "react";
|
||||
import { useSelector } from "react-redux";
|
||||
import { Link } from "react-router-dom";
|
||||
|
||||
import { ProfileHeader } from "../../components/ProfileHeader/ProfileHeader";
|
||||
import { HeadBottom } from "../../components/features/Candidate-lk/HeadBottom";
|
||||
import { ProfileBreadcrumbs } from "../../components/ProfileBreadcrumbs/ProfileBreadcrumbs";
|
||||
import { Footer } from "../../components/Footer/Footer";
|
||||
import { QuizPassingInformation } from "../../components/features/quiz/Quiz-passing-information";
|
||||
import { CardIntroduction } from "../../components/features/quiz/Card-introduction";
|
||||
import { TaskQuiz } from "../../components/features/quiz/Task";
|
||||
import { BlockCompletedTest } from "../../components/features/quiz/BlockCompletedTest";
|
||||
|
||||
import { completedTestSelector, selectedTest } from "../../redux/quizSlice";
|
||||
|
||||
export const PassingTests = () => {
|
||||
//const selectedTest = useSelector(selectedTest)
|
||||
//const selectedTest = useSelector(selectedTest)
|
||||
|
||||
if(''){
|
||||
if ("") {
|
||||
}
|
||||
|
||||
}
|
||||
const time = new Date();
|
||||
time.setSeconds(time.getSeconds() + 600); //600 - кол-во секунд для прохождения теста
|
||||
|
||||
const time = new Date();
|
||||
time.setSeconds(time.getSeconds() + 600);//600 - кол-во секунд для прохождения теста
|
||||
const [startTest, setStartTest] = useState(false);
|
||||
const completedTest = useSelector(completedTestSelector);
|
||||
|
||||
const [startTest, setStartTest] = useState(false)
|
||||
const completedTest = useSelector(completedTestSelector)
|
||||
const introduction = [
|
||||
{
|
||||
title: "Зачем?",
|
||||
description:
|
||||
"Тесты itguild предназначены для того, чтобы подтверждать навыки, которые вы указали у себя.",
|
||||
},
|
||||
{
|
||||
title: "Почему именно тестирование?",
|
||||
description:
|
||||
"Тесты itguild заменяют первое техническое собеседование по любой вакансии.",
|
||||
},
|
||||
{
|
||||
title: "Какие тесты нужно проходить?",
|
||||
description:
|
||||
"Здесь все довольно просто — следует проходить тесты по инструментам и навыкам, которыми вы владеете.",
|
||||
},
|
||||
];
|
||||
|
||||
const introduction = [
|
||||
{
|
||||
title: 'Зачем?',
|
||||
description: 'Тесты itguild предназначены для того, чтобы подтверждать навыки, которые вы указали у себя.'
|
||||
},
|
||||
{
|
||||
title: 'Почему именно тестирование?',
|
||||
description: 'Тесты itguild заменяют первое техническое собеседование по любой вакансии.'
|
||||
},
|
||||
{
|
||||
title: 'Какие тесты нужно проходить?',
|
||||
description: 'Здесь все довольно просто — следует проходить тесты по инструментам и навыкам, которыми вы владеете.'
|
||||
}
|
||||
]
|
||||
return (
|
||||
<div className="passing-tests-page">
|
||||
<ProfileHeader />
|
||||
<HeadBottom />
|
||||
<div className="passing-tests-page__container">
|
||||
<ProfileBreadcrumbs
|
||||
links={[
|
||||
{ name: "Главная", link: "/profile-candidate" },
|
||||
{ name: "Тестирование", link: "/quiz" },
|
||||
{ name: "Прохождение тестов", link: "/quiz/test" },
|
||||
]}
|
||||
/>
|
||||
<div className="passing-tests-page__title main-title">
|
||||
Тестирование в позиции Junior разработчик{" "}
|
||||
</div>
|
||||
<div className="passing-tests-page__passing-information">
|
||||
<QuizPassingInformation
|
||||
expiryTimestamp={time}
|
||||
setStartTest={setStartTest}
|
||||
/>
|
||||
</div>
|
||||
|
||||
return (
|
||||
<div className='passing-tests-page'>
|
||||
<ProfileHeader />
|
||||
<HeadBottom />
|
||||
<div className="passing-tests-page__container">
|
||||
<ProfileBreadcrumbs links={[
|
||||
{ name: 'Главная', link: '/profile-candidate' },
|
||||
{ name: 'Тестирование', link: '/quiz' },
|
||||
{ name: 'Прохождение тестов', link: '/quiz/test' },
|
||||
]} />
|
||||
<div className="passing-tests-page__title main-title">Тестирование в позиции Junior разработчик </div>
|
||||
<div className="passing-tests-page__passing-information">
|
||||
<QuizPassingInformation expiryTimestamp={time} setStartTest={setStartTest} />
|
||||
</div>
|
||||
|
||||
{
|
||||
!completedTest &&
|
||||
<>
|
||||
{startTest && <div className="passing-tests-page__block-green">Тестирование началось</div>}
|
||||
{startTest ? <TaskQuiz /> : <div className='passing-tests-page__introduction'>
|
||||
{
|
||||
introduction.map((item, i) => <CardIntroduction description={item.description} title={item.title} key={i} />)
|
||||
}
|
||||
</div>}
|
||||
{
|
||||
!startTest && <div className="passing-tests-page__block-text block-text">
|
||||
ИЛИ <Link to={''} >выполните тестове задание</Link> , без прохождения тестов
|
||||
</div>
|
||||
}
|
||||
</>
|
||||
}
|
||||
{
|
||||
completedTest && <>
|
||||
<div className="passing-tests-page__block-green">Тестирование завершено</div>
|
||||
<BlockCompletedTest />
|
||||
</>
|
||||
}
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
{!completedTest && (
|
||||
<>
|
||||
{startTest && (
|
||||
<div className="passing-tests-page__block-green">
|
||||
Тестирование началось
|
||||
</div>
|
||||
)}
|
||||
{startTest ? (
|
||||
<TaskQuiz />
|
||||
) : (
|
||||
<div className="passing-tests-page__introduction">
|
||||
{introduction.map((item, i) => (
|
||||
<CardIntroduction
|
||||
description={item.description}
|
||||
title={item.title}
|
||||
key={i}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
{!startTest && (
|
||||
<div className="passing-tests-page__block-text block-text">
|
||||
ИЛИ <Link to={""}>выполните тестове задание</Link> , без
|
||||
прохождения тестов
|
||||
</div>
|
||||
)}
|
||||
</>
|
||||
)}
|
||||
{completedTest && (
|
||||
<>
|
||||
<div className="passing-tests-page__block-green">
|
||||
Тестирование завершено
|
||||
</div>
|
||||
<BlockCompletedTest />
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
@ -15,15 +15,15 @@ import { Footer } from "../../components/Footer/Footer";
|
||||
import { CardAvailableTest } from "../../components/features/quiz/CardAviableTest";
|
||||
import CategoriesItem from "../../components/CategoriesItem/CategoriesItem";
|
||||
|
||||
import BackEndImg from "../../images/personalBackEnd.svg";
|
||||
import FrontendImg from "../../images/PersonalFrontend.svg";
|
||||
import ArchitectureImg from "../../images/PersonalArchitecture.svg";
|
||||
import DesignImg from "../../images/PersonalDesign.svg";
|
||||
import TestImg from "../../images/PersonalTesters.svg";
|
||||
import AdminImg from "../../images/PersonalAdmin.svg";
|
||||
import ManageImg from "../../images/PersonalMng.svg";
|
||||
import CopyImg from "../../images/PersonalCopy.svg";
|
||||
import SmmImg from "../../images/PersonalSMM.svg";
|
||||
import BackEndImg from "../../assets/images/partnerProfile/personalBackEnd.svg";
|
||||
import FrontendImg from "../../assets/images/partnerProfile/PersonalFrontend.svg";
|
||||
import ArchitectureImg from "../../assets/images/partnerProfile/PersonalArchitecture.svg";
|
||||
import DesignImg from "../../assets/images/partnerProfile/PersonalDesign.svg";
|
||||
import TestImg from "../../assets/images/partnerProfile/PersonalTesters.svg";
|
||||
import AdminImg from "../../assets/images/partnerProfile/PersonalAdmin.svg";
|
||||
import ManageImg from "../../assets/images/partnerProfile/PersonalMng.svg";
|
||||
import CopyImg from "../../assets/images/partnerProfile/PersonalCopy.svg";
|
||||
import SmmImg from "../../assets/images/partnerProfile/PersonalSMM.svg";
|
||||
|
||||
import "./quiz-page.scss";
|
||||
|
||||
|
@ -1,25 +1,21 @@
|
||||
import { useNavigate } from "react-router-dom"
|
||||
import { HeaderPageTestsQuiz } from "../../components/features/quiz/HeaderPageTests"
|
||||
import { Results } from "../../components/features/quiz/Results";
|
||||
import { useSelector } from "react-redux";
|
||||
import { selectedTest } from "../../redux/quizSlice";
|
||||
import React from "react";
|
||||
import { useNavigate } from "react-router-dom";
|
||||
import { useSelector } from "react-redux";
|
||||
|
||||
import { selectedTest } from "../../redux/quizSlice";
|
||||
import { ProfileHeader } from "../../components/ProfileHeader/ProfileHeader";
|
||||
import { HeadBottom } from "../../components/features/Candidate-lk/HeadBottom";
|
||||
import { ProfileBreadcrumbs } from "../../components/ProfileBreadcrumbs/ProfileBreadcrumbs";
|
||||
import { QuizReport } from "../../components/features/quiz/QuizReport";
|
||||
import { Footer } from "../../components/Footer/Footer";
|
||||
import suucessIcon from '../../images/quiz/success.png'
|
||||
import { AlertResult } from "../../components/features/quiz/AlertResult";
|
||||
|
||||
|
||||
export const QuizReportPage = () => {
|
||||
|
||||
const test = useSelector(selectedTest)
|
||||
const test = useSelector(selectedTest);
|
||||
|
||||
let navigate = useNavigate();
|
||||
if (!test) {
|
||||
navigate('/quiz')
|
||||
navigate("/quiz");
|
||||
}
|
||||
|
||||
return (
|
||||
@ -27,16 +23,23 @@ export const QuizReportPage = () => {
|
||||
<ProfileHeader />
|
||||
<HeadBottom />
|
||||
<div className="quiz-report-page__container">
|
||||
<ProfileBreadcrumbs links={[{ name: 'Главная', link: '/profile-candidate' }, { name: 'Тестирование', link: '/quiz' },
|
||||
{ name: 'Отчет по тестированию', link: '/quiz/report' }]} />
|
||||
<div className="quiz-report-page__title main-title">Отчет по тестированию позиции Junior разработчик </div>
|
||||
<div className="quiz-report-page__report-quiz">
|
||||
<QuizReport />
|
||||
<ProfileBreadcrumbs
|
||||
links={[
|
||||
{ name: "Главная", link: "/profile-candidate" },
|
||||
{ name: "Тестирование", link: "/quiz" },
|
||||
{ name: "Отчет по тестированию", link: "/quiz/report" },
|
||||
]}
|
||||
/>
|
||||
<div className="quiz-report-page__title main-title">
|
||||
Отчет по тестированию позиции Junior разработчик{" "}
|
||||
</div>
|
||||
|
||||
<div className="quiz-report-page__report-quiz">
|
||||
<QuizReport />
|
||||
</div>
|
||||
|
||||
<AlertResult />
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
)
|
||||
};
|
||||
);
|
||||
};
|
||||
|
@ -1,143 +1,139 @@
|
||||
.quiz-page{
|
||||
background: #F1F1F1;
|
||||
height: 100%;
|
||||
min-height: 100vh;
|
||||
font-family: "LabGrotesque", sans-serif;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
&__container{
|
||||
max-width: 1160px;
|
||||
margin: 0 auto 42px auto;
|
||||
flex: 1 1 auto;
|
||||
width: 100%;
|
||||
padding: 0 15px;
|
||||
}
|
||||
&__title{
|
||||
margin: 0 0 39px 0;
|
||||
}
|
||||
&__block{
|
||||
background: #E1FCCF;
|
||||
border-radius: 12px 12px 0px 0px;
|
||||
font-weight: 400;
|
||||
font-size: 18px;
|
||||
line-height: 178%;
|
||||
color: #000000;
|
||||
padding: 20px 51px;
|
||||
margin: 0 0 16px 0;
|
||||
}
|
||||
&__cards-test{
|
||||
display: grid;
|
||||
grid-gap: 29px;
|
||||
grid-template-columns: 1fr 1fr 1fr;
|
||||
margin-bottom: 29px;
|
||||
@media (max-width: 955px) {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
@media (max-width: 668px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
}
|
||||
&__specialization{
|
||||
margin: 0 0 26px 0;
|
||||
}
|
||||
&__categories-items{
|
||||
display: grid;
|
||||
grid-gap: 24px;
|
||||
grid-template-columns: 1fr 1fr 1fr;
|
||||
margin-bottom: 24px;
|
||||
@media (max-width: 955px) {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
@media (max-width: 668px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
.quiz-page {
|
||||
background: #f1f1f1;
|
||||
height: 100%;
|
||||
min-height: 100vh;
|
||||
font-family: "LabGrotesque", sans-serif;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
&__container {
|
||||
max-width: 1160px;
|
||||
margin: 0 auto 42px auto;
|
||||
flex: 1 1 auto;
|
||||
width: 100%;
|
||||
padding: 0 15px;
|
||||
}
|
||||
&__title {
|
||||
margin: 0 0 39px 0;
|
||||
}
|
||||
&__block {
|
||||
background: #e1fccf;
|
||||
border-radius: 12px 12px 0px 0px;
|
||||
font-weight: 400;
|
||||
font-size: 18px;
|
||||
line-height: 178%;
|
||||
color: #000000;
|
||||
padding: 20px 51px;
|
||||
margin: 0 0 16px 0;
|
||||
}
|
||||
&__cards-test {
|
||||
display: grid;
|
||||
grid-gap: 29px;
|
||||
grid-template-columns: 1fr 1fr 1fr;
|
||||
margin-bottom: 29px;
|
||||
@media (max-width: 955px) {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
@media (max-width: 668px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
&__specialization {
|
||||
margin: 0 0 26px 0;
|
||||
}
|
||||
&__categories-items {
|
||||
display: grid;
|
||||
grid-gap: 24px;
|
||||
grid-template-columns: 1fr 1fr 1fr;
|
||||
margin-bottom: 24px;
|
||||
@media (max-width: 955px) {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
@media (max-width: 668px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
}
|
||||
.interjacent-page-quiz{
|
||||
|
||||
background: #F1F1F1;
|
||||
height: 100%;
|
||||
min-height: 100vh;
|
||||
font-family: "LabGrotesque", sans-serif;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
&__title{
|
||||
margin: 0 0 39px 0;
|
||||
}
|
||||
&__passing-information{
|
||||
margin: 0 0 32px 0;
|
||||
}
|
||||
&__container{
|
||||
max-width: 1160px;
|
||||
margin: 0 auto 42px auto;
|
||||
flex: 1 1 auto;
|
||||
width: 100%;
|
||||
padding: 0 15px;
|
||||
}
|
||||
&__introduction-items{
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin: 0px -25px -50px;
|
||||
margin: 0 auto 54px auto;
|
||||
|
||||
}
|
||||
.interjacent-page-quiz {
|
||||
background: #f1f1f1;
|
||||
height: 100%;
|
||||
min-height: 100vh;
|
||||
font-family: "LabGrotesque", sans-serif;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
&__title {
|
||||
margin: 0 0 39px 0;
|
||||
}
|
||||
&__passing-information {
|
||||
margin: 0 0 32px 0;
|
||||
}
|
||||
&__container {
|
||||
max-width: 1160px;
|
||||
margin: 0 auto 42px auto;
|
||||
flex: 1 1 auto;
|
||||
width: 100%;
|
||||
padding: 0 15px;
|
||||
}
|
||||
&__introduction-items {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin: 0px -25px -50px;
|
||||
margin: 0 auto 54px auto;
|
||||
}
|
||||
}
|
||||
|
||||
.passing-tests-page{
|
||||
background: #F1F1F1;
|
||||
height: 100%;
|
||||
min-height: 100vh;
|
||||
font-family: "LabGrotesque", sans-serif;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
&__container{
|
||||
max-width: 1160px;
|
||||
margin: 0 auto 42px auto;
|
||||
flex: 1 1 auto;
|
||||
width: 100%;
|
||||
padding: 0 15px;
|
||||
}
|
||||
&__title{
|
||||
margin: 0 0 39px 0;
|
||||
}
|
||||
&__passing-information{
|
||||
margin: 0 0 29px 0;
|
||||
}
|
||||
&__block-green{
|
||||
font-weight: 400;
|
||||
font-size: 18px;
|
||||
line-height: 178%;
|
||||
color: #000000;
|
||||
background: #E1FCCF;
|
||||
border-radius: 12px 12px 0px 0px;
|
||||
padding: 20px 51px;
|
||||
}
|
||||
&__introduction{
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.passing-tests-page {
|
||||
background: #f1f1f1;
|
||||
height: 100%;
|
||||
min-height: 100vh;
|
||||
font-family: "LabGrotesque", sans-serif;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
&__container {
|
||||
max-width: 1160px;
|
||||
margin: 0 auto 42px auto;
|
||||
flex: 1 1 auto;
|
||||
width: 100%;
|
||||
padding: 0 15px;
|
||||
}
|
||||
&__title {
|
||||
margin: 0 0 39px 0;
|
||||
}
|
||||
&__passing-information {
|
||||
margin: 0 0 29px 0;
|
||||
}
|
||||
&__block-green {
|
||||
font-weight: 400;
|
||||
font-size: 18px;
|
||||
line-height: 178%;
|
||||
color: #000000;
|
||||
background: #e1fccf;
|
||||
border-radius: 12px 12px 0px 0px;
|
||||
padding: 20px 51px;
|
||||
}
|
||||
&__introduction {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.quiz-report-page{
|
||||
background: #F1F1F1;
|
||||
height: 100%;
|
||||
min-height: 100vh;
|
||||
font-family: "LabGrotesque", sans-serif;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
&__container{
|
||||
max-width: 1160px;
|
||||
margin: 0 auto 42px auto;
|
||||
flex: 1 1 auto;
|
||||
width: 100%;
|
||||
padding: 0 15px;
|
||||
}
|
||||
&__title{
|
||||
margin: 0 0 39px 0;
|
||||
}
|
||||
&__report-quiz{
|
||||
margin: 0 0 28px 0;
|
||||
}
|
||||
}
|
||||
.quiz-report-page {
|
||||
background: #f1f1f1;
|
||||
height: 100%;
|
||||
min-height: 100vh;
|
||||
font-family: "LabGrotesque", sans-serif;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
&__container {
|
||||
max-width: 1160px;
|
||||
margin: 0 auto 42px auto;
|
||||
flex: 1 1 auto;
|
||||
width: 100%;
|
||||
padding: 0 15px;
|
||||
}
|
||||
&__title {
|
||||
margin: 0 0 39px 0;
|
||||
}
|
||||
&__report-quiz {
|
||||
margin: 0 0 28px 0;
|
||||
}
|
||||
}
|
||||
|