vacancy
This commit is contained in:
@ -1,13 +1,289 @@
|
||||
import React from "react";
|
||||
import React, { useState } from "react";
|
||||
|
||||
import { Footer } from "@components/Common/Footer/Footer";
|
||||
import { Navigation } from "@components/Navigation/Navigation";
|
||||
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
|
||||
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
|
||||
import { VacancyTab } from "@components/VacancyTab/VacancyTab";
|
||||
import { VacancyItem } from "@components/VacancyItem/VacancyItem";
|
||||
|
||||
import "./OpenRequest.scss";
|
||||
|
||||
export const OpenRequest = () => {
|
||||
const vacancy = [
|
||||
{
|
||||
name: 'Frontend',
|
||||
count: 15,
|
||||
items: [
|
||||
{
|
||||
name: 'Laravel Middle+/Senior 1',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior 2',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior 3',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior 4',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior 5',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior 6',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'Backend',
|
||||
count: 8,
|
||||
items: [
|
||||
{
|
||||
name: 'Laravel Middle+/Senior 7',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior 8',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'Дизайн',
|
||||
count: 0,
|
||||
items: [
|
||||
{
|
||||
name: 'Laravel Middle+/Senior 9',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior 10',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'Аналитика',
|
||||
count: 0,
|
||||
items: [
|
||||
{
|
||||
name: 'Laravel Middle+/Senior 11',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior 12',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior 13',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'Тестирование',
|
||||
count: 0,
|
||||
items: [
|
||||
{
|
||||
name: 'Laravel Middle+/Senior 14',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior 15',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior 16',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
},
|
||||
{
|
||||
name: 'Laravel Middle+/Senior',
|
||||
description: 'Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы',
|
||||
level: 'Middle+/Senior',
|
||||
location: 'РФ, РБ',
|
||||
price: '1500 руб. час',
|
||||
count: '1 сотрудник'
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
const [activeTab, setActiveTab] = useState('Frontend')
|
||||
return (
|
||||
<div className="open-request">
|
||||
<ProfileHeader />
|
||||
@ -19,11 +295,28 @@ export const OpenRequest = () => {
|
||||
{ name: "Главная", link: "/profile" },
|
||||
{
|
||||
name: "Работа в IT открытые запросы",
|
||||
link: "/profile/open-request"
|
||||
link: "/profile/open-requests"
|
||||
}
|
||||
]}
|
||||
/>
|
||||
<h2 className="summary__title">Работа в IT открытые запросы</h2>
|
||||
<div className="vacancy__tabs">
|
||||
{vacancy.map((item, index) => {
|
||||
return <VacancyTab title={item.name} count={item.count} active={activeTab}
|
||||
setActive={() => setActiveTab(item.name)} key={index} />
|
||||
})
|
||||
}
|
||||
</div>
|
||||
<div className="vacancy__items">
|
||||
{vacancy.map((item) => {
|
||||
if (item.name === activeTab) {
|
||||
return item.items.map((vacancy, index) => {
|
||||
return <VacancyItem key={index} vacancy={vacancy}/>
|
||||
});
|
||||
}
|
||||
return null
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<Footer />
|
||||
|
@ -0,0 +1,23 @@
|
||||
.open-request {
|
||||
background: #F0F0F0;
|
||||
|
||||
&-content {
|
||||
padding-top: 23px;
|
||||
}
|
||||
}
|
||||
|
||||
.vacancy {
|
||||
&__tabs {
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
margin-top: 29px;
|
||||
}
|
||||
|
||||
&__items {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
row-gap: 24px;
|
||||
column-gap: 22.5px;
|
||||
margin-top: 30px;
|
||||
}
|
||||
}
|
83
src/pages/Vacancy/Vacancy.jsx
Normal file
83
src/pages/Vacancy/Vacancy.jsx
Normal file
@ -0,0 +1,83 @@
|
||||
|
||||
import React from "react";
|
||||
|
||||
import { Footer } from "@components/Common/Footer/Footer";
|
||||
import { Navigation } from "@components/Navigation/Navigation";
|
||||
import { ProfileBreadcrumbs } from "@components/ProfileBreadcrumbs/ProfileBreadcrumbs";
|
||||
import { ProfileHeader } from "@components/ProfileHeader/ProfileHeader";
|
||||
|
||||
import titleImg from "assets/images/VacancyItemImg.svg";
|
||||
|
||||
import "./vacancy.scss";
|
||||
|
||||
export const Vacancy = () => {
|
||||
|
||||
return (
|
||||
<div className="vacancy">
|
||||
<ProfileHeader />
|
||||
<Navigation />
|
||||
<div className="container">
|
||||
<div className="vacancy-content">
|
||||
<ProfileBreadcrumbs
|
||||
links={[
|
||||
{ name: "Главная", link: "/profile" },
|
||||
{
|
||||
name: "Работа в IT открытые запросы",
|
||||
link: "/profile/open-requests"
|
||||
}
|
||||
]}
|
||||
/>
|
||||
<h2 className="opening__title">Laravel Middle+/Senior</h2>
|
||||
<div className="opening">
|
||||
<div className="opening__head">
|
||||
<span className="opening__img">
|
||||
<img src={titleImg} alt='img' />
|
||||
</span>
|
||||
<h4 className="opening__name">Проект представляет из себя монолит с большим техдолгом, нужен php разработчик с опытом распила монолита на модули/микросервисы</h4>
|
||||
</div>
|
||||
<div className="opening__info">
|
||||
<div className="opening__description">
|
||||
<span>Требования :</span>
|
||||
<ul>
|
||||
<li>Опыт разработки на Golang 2+ года и общий опыт разработки 3+ года;</li>
|
||||
<li>Понимание устройства языка Go (многопоточность, шедулер, кодогенерация);</li>
|
||||
<li>Опыт работы с брокерами сообщений (Kafka, RabbitMQ, Nuts и etc);</li>
|
||||
<li>Опыт работы с реляционными БД (PostgreSQL, ClickHouse и etc);</li>
|
||||
<li>Знание сетевого стека и основных сетевых протоколов на высоком уровне;</li>
|
||||
<li>Опыт работы с различными средствами автоматизации для процессов разработки (Nexus, Gitlab registry
|
||||
etc) (необходимо для понимания предметной области);
|
||||
</li>
|
||||
<li>Понимание работы прокси и опыт работы с различными решениями (Nginx, Haproxy, Squid).</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div className="opening__blocks">
|
||||
<div className="opening__block">
|
||||
<div className="opening__block__info">
|
||||
<span>Грейд:</span>
|
||||
<p>Middle+/Senior</p>
|
||||
</div>
|
||||
<div className="opening__block__info">
|
||||
<span>Ставка:</span>
|
||||
<p>1500 руб. час</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="opening__block">
|
||||
<div className="opening__block__info">
|
||||
<span>Локация:</span>
|
||||
<p>РФ, РБ</p>
|
||||
</div>
|
||||
<div className="opening__block__info">
|
||||
<span>Кол-во человек:</span>
|
||||
<p>1 сотрудник</p>
|
||||
</div>
|
||||
</div>
|
||||
<button className="opening__btn">Откликнуться</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<Footer />
|
||||
</div>
|
||||
);
|
||||
};
|
131
src/pages/Vacancy/vacancy.scss
Normal file
131
src/pages/Vacancy/vacancy.scss
Normal file
@ -0,0 +1,131 @@
|
||||
.vacancy {
|
||||
background: #F1F1F1;
|
||||
height: 100vh;
|
||||
|
||||
&-content {
|
||||
padding-top: 23px;
|
||||
}
|
||||
}
|
||||
|
||||
.opening {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
position: relative;
|
||||
|
||||
&__head {
|
||||
display: flex;
|
||||
border: 1px solid #DDDFE4;
|
||||
border-radius: 8px;
|
||||
background: white;
|
||||
height: 60px;
|
||||
align-items: center;
|
||||
column-gap: 25px;
|
||||
padding: 0 23px;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
&__name {
|
||||
color: #2E3A59;
|
||||
font-size: 14px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
&__img {
|
||||
background: #52B709;
|
||||
border-radius: 4px;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
&__info {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
&__description {
|
||||
background: white;
|
||||
border: 1px solid #DDDFE4;
|
||||
padding: 24px 24px;
|
||||
border-radius: 8px;
|
||||
position: relative;
|
||||
top: -12px;
|
||||
z-index: 1;
|
||||
|
||||
span {
|
||||
color: #000000;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style-type: none;
|
||||
padding: 0;
|
||||
font-size: 14px;
|
||||
color: #2E3A59;
|
||||
line-height: 17.5px;
|
||||
max-width: 600px;
|
||||
}
|
||||
li {
|
||||
position: relative;
|
||||
padding-left: 20px;
|
||||
}
|
||||
li::before {
|
||||
content: '*';
|
||||
position: absolute;
|
||||
left: 0;
|
||||
color: black;
|
||||
}
|
||||
}
|
||||
|
||||
&__blocks {
|
||||
display: flex;
|
||||
position: relative;
|
||||
top: -12px;
|
||||
height: 50%;
|
||||
}
|
||||
|
||||
&__block {
|
||||
border-radius: 8px;
|
||||
border: 1px solid #DDDFE4;
|
||||
background: #EBEBEB;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 24px 21px 12px;
|
||||
row-gap: 14px;
|
||||
|
||||
&:nth-child(2) {
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
&__info {
|
||||
font-size: 14px;
|
||||
span {
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__title {
|
||||
font-weight: 700;
|
||||
font-size: 22px;
|
||||
color: #000000;
|
||||
margin: 11px 0;
|
||||
}
|
||||
|
||||
&__btn {
|
||||
max-width: 150px;
|
||||
width: 100%;
|
||||
background: #52B709;
|
||||
border-radius: 44px;
|
||||
height: 40px;
|
||||
color: #FFFFFF;
|
||||
font-size: 14px;
|
||||
border: none;
|
||||
position: absolute;
|
||||
right: 25%;
|
||||
bottom: -40%;
|
||||
}
|
||||
}
|
@ -2,6 +2,7 @@ import React from "react";
|
||||
import { Route, Routes } from "react-router-dom";
|
||||
|
||||
import { OpenRequest } from "@pages/OpenRequests/OpenRequest";
|
||||
import { Vacancy } from "@pages/Vacancy/Vacancy"
|
||||
import { PartnerSettings } from "@pages/PartnerSettings/PartnerSettings";
|
||||
import { PartnerTreaties } from "@pages/PartnerTreaties/PartnerTreaties";
|
||||
import { Payouts } from "@pages/Payouts/Payouts";
|
||||
@ -36,6 +37,7 @@ export const DeveloperPage = () => {
|
||||
<Route exact path="calendar/report" element={<ReportForm />} />
|
||||
<Route exact path="calendar/view/:date/:id" element={<ViewReport />} />
|
||||
<Route exact path="open-requests" element={<OpenRequest />} />
|
||||
<Route exact path="open-requests/:id" element={<Vacancy />} />
|
||||
<Route exact path="summary" element={<Summary />} />
|
||||
<Route exact path="tracker" element={<Tracker />} />
|
||||
<Route exact path="statistics/:id" element={<Statistics />} />
|
||||
|
Reference in New Issue
Block a user