partner bid page

This commit is contained in:
Николай Полтщук 2023-02-23 14:57:26 +03:00
parent e26b8cc22e
commit 15ed4b8c1d
10 changed files with 565 additions and 4 deletions

View File

@ -24,6 +24,7 @@ import {Payouts} from './pages/Payouts/Payouts'
import {Settings} from './pages/Settings/Settings' import {Settings} from './pages/Settings/Settings'
import {PartnerRequests} from './pages/PartnerRequests/PartnerRequests' import {PartnerRequests} from './pages/PartnerRequests/PartnerRequests'
import {PartnerAddRequest} from './pages/PartnerAddRequest/PartnerAddRequest' import {PartnerAddRequest} from './pages/PartnerAddRequest/PartnerAddRequest'
import {PartnerBid} from './pages/PartnerBid/PartnerBid'
import './fonts/stylesheet.css' import './fonts/stylesheet.css'
import 'bootstrap/dist/css/bootstrap.min.css' import 'bootstrap/dist/css/bootstrap.min.css'
@ -68,6 +69,7 @@ const App = () => {
<Route exact path='settings' element={<Settings/>}/> <Route exact path='settings' element={<Settings/>}/>
<Route exact path='requests' element={<PartnerRequests/>}/> <Route exact path='requests' element={<PartnerRequests/>}/>
<Route exact path='add-request' element={<PartnerAddRequest/>}/> <Route exact path='add-request' element={<PartnerAddRequest/>}/>
<Route exact path='bid' element={<PartnerBid/>}/>
</Route> </Route>
<Route path="*" element={<Navigate to="/" replace/>}/> <Route path="*" element={<Navigate to="/" replace/>}/>

View File

@ -21,7 +21,7 @@ export const ProfileHeader = () => {
const userRole = useSelector(getRole); const userRole = useSelector(getRole);
const profileInfo = useSelector(getProfileInfo); const profileInfo = useSelector(getProfileInfo);
const [user] = useState('developer') const [user] = useState('partner')
const [navInfo] = useState({ const [navInfo] = useState({
developer: [ developer: [
{ {

Binary file not shown.

After

Width:  |  Height:  |  Size: 672 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 507 B

BIN
src/images/mokPerson.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@ -22,7 +22,7 @@ const AuthForPartners = () => {
useEffect(()=> { useEffect(()=> {
if (isAuth || getToken) { if (isAuth || getToken) {
navigate('/') navigate('/profile')
} }
}, [getToken]); }, [getToken]);

View File

@ -0,0 +1,119 @@
import React, {useState} from 'react';
import {Link} from "react-router-dom";
import {ProfileHeader} from "../../components/ProfileHeader/ProfileHeader";
import {Footer} from "../../components/Footer/Footer";
import arrowSwitchDate from "../../images/arrowViewReport.png";
import backEndImg from "../../images/QualificationInfo.png";
import middle from "../../images/QualificationInfoMiddle.png";
import personImg from "../../images/mokPerson.png"
import './partnerBid.scss'
export const PartnerBid = () => {
const [mokPersons] = useState([
{
name: 'Дмитрий, PHP Back end - разработчик, Middle',
link: '',
img: personImg
},
{
name: 'Дмитрий, PHP Back end - разработчик, Middle',
link: '',
img: personImg
},
{
name: 'Дмитрий, PHP Back end - разработчик, Middle',
link: '',
img: personImg
}
])
return (
<div className='partnerBid'>
<ProfileHeader />
<div className='container'>
<h2 className='partnerBid__title'>Страница заявки </h2>
<div className='partnerBid__qualification'>
<h3>PHP разработчик</h3>
</div>
<div className='partnerBid__switcher'>
<div className='partnerBid__switcher__prev switchDate'>
<img src={arrowSwitchDate} alt='arrow'/>
</div>
<p>Дата заявки : 19 декабря 2022 года </p>
<div className='partnerBid__switcher__next switchDate'>
<img src={arrowSwitchDate} alt='arrow'/>
</div>
</div>
<div className='table__wrapper'>
<table>
<thead>
<tr>
<th><p>Требования к стеку разработчика</p></th>
<th><p>Квалификация</p></th>
</tr>
</thead>
<tbody>
<tr>
<td>
<p>
PHP приветствуется аккуратность в коде. MySQL - умение писать запросы к MySQL,
понимание как происходит запрос. Средний уровень: AJAX, JSON, общее понимание;
CSS/CSS3, HTML, Bootstrap;
</p>
</td>
<td>
<div className='qualification__info'>
<div className='img__wrapper'>
<img src={backEndImg} alt='backEndImg' />
</div>
<p>Backend разработчик</p>
</div>
</td>
</tr>
<tr>
<td>
<p>
Знание современных фреймворков Laravel, Yii 2, FuelPHP, Симфони;
Знания по разработке REST API;
Знание PHP,HTML,CSS,MySQL,Pyhton,JavaScript.
</p>
</td>
<td>
<div className='qualification__info'>
<div className='img__wrapper'>
<img src={middle} alt='middleImg' />
</div>
<p className='middle'>Средний<br/>(Middle)</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div className='partnerBid__suitable'>
<div className='partnerBid__suitable__title'>
<p>Подходящие сотрудники по запросу</p>
</div>
<div className='partnerBid__suitable__persons'>
{mokPersons.map((person) => {
return <div className='partnerBid__suitable__person'>
<img src={person.img} alt='avatar' />
<p>{person.name}</p>
<Link className='partnerBid__suitable__person__more' to={person.link}>
Подробнее
</Link>
<div className='partnerBid__suitable__person__info'>
</div>
</div>
})
}
</div>
</div>
</div>
<Footer/>
</div>
)
};

View File

@ -0,0 +1,440 @@
.partnerBid {
background: #F1F1F1;
height: 100%;
min-height: 100vh;
font-family: 'LabGrotesque', sans-serif;
.container {
max-width: 1160px;
margin-top: 23px;
@media (max-width: 570px) {
margin-top: 0;
}
}
&__title {
color: #000000;
font-weight: 700;
font-size: 22px;
line-height: 32px;
}
&__qualification {
background: #FFFFFF;
border-radius: 12px;
padding: 20px 37px;
margin-top: 20px;
h3 {
color: #000000;
font-weight: 500;
font-size: 22px;
line-height: 32px;
margin-bottom: 0;
}
}
&__switcher {
display: flex;
margin: 30px 0;
justify-content: center;
align-items: center;
@media (max-width: 550px) {
justify-content: space-between;
}
.switchDate {
width: 48px;
height: 48px;
background: #8DC63F;
border-radius: 50px;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
}
&__prev {
transform: rotate(180deg);
}
p {
color: #000000;
font-weight: 400;
font-size: 12px;
line-height: 32px;
margin: 0 100px;
@media (max-width: 550px) {
margin: 0;
}
}
}
.table__wrapper {
margin: 0 -28px;
overflow: hidden;
position: relative;
@media (max-width: 1205px) {
margin: 0;
}
table {
width: 100%;
border-collapse: separate;
border-spacing: 28px 0;
@media (max-width: 1205px) {
display: grid;
border-collapse: collapse;
}
thead {
@media (max-width: 1205px) {
display: grid;
}
tr {
@media (max-width: 1205px) {
display: grid;
grid-template-columns: 74% calc(26% - 28px);
column-gap: 28px;
}
@media (max-width: 900px) {
grid-template-columns: 65% calc(35% - 28px);
}
@media (max-width: 515px) {
grid-template-columns: 65% calc(35% - 10px);
column-gap: 10px;
}
th {
background: white;
border-radius: 12px 12px 0 0;
font-weight: 500;
font-size: 22px;
line-height: 32px;
&:first-child {
padding: 32px 37px;
@media (max-width: 640px) {
padding: 15px;
}
}
&:last-child {
padding: 32px 50px 32px 48px;
@media (max-width: 640px) {
padding: 15px;
}
}
p {
margin-bottom: 0;
}
@media (max-width: 1000px) {
font-size: 15px;
line-height: 20px;
text-align: center;
}
@media (max-width: 515px) {
font-size: 12px;
}
}
}
}
tbody {
@media (max-width: 1205px) {
display: grid;
}
tr {
@media (max-width: 1205px) {
display: grid;
grid-template-columns: 74% calc(26% - 28px);
column-gap: 28px;
}
@media (max-width: 900px) {
grid-template-columns: 65% calc(35% - 28px);
}
@media (max-width: 515px) {
column-gap: 10px;
grid-template-columns: 65% calc(35% - 10px);
}
td {
background: white;
p {
margin-bottom: 0;
color: #000000;
font-weight: 400;
font-size: 14px;
line-height: 24px;
@media (max-width: 515px) {
font-size: 12px;
line-height: 18px;
}
@media (max-width: 450px) {
font-size: 10px;
}
}
&:first-child {
padding: 0 27px 35px 39px;
@media (max-width: 580px) {
padding: 15px;
}
}
&:last-child {
padding: 0 45px 35px;
@media (max-width: 580px) {
padding: 15px;
}
}
.qualification__info {
display: flex;
align-items: center;
@media (max-width: 1000px) {
flex-direction: column;
row-gap: 5px;
p {
margin: 0 !important;
text-align: center;
}
}
.img__wrapper {
min-width: 48px;
height: 48px;
background: #8DC63F;
border-radius: 50px;
display: flex;
justify-content: center;
align-items: center;
@media (max-width: 515px) {
min-width: 25px;
height: 25px;
img {
width: 17px;
height: 17px;
}
}
}
p {
font-weight: 400;
font-size: 14px;
line-height: 18px;
margin-left: 25px;
@media (max-width: 515px) {
font-size: 12px;
line-height: 18px;
}
}
.middle {
color: #406128;
font-weight: 900;
font-size: 14px;
line-height: 18px;
@media (max-width: 515px) {
font-size: 12px;
line-height: 18px;
}
}
}
}
&:last-child {
td {
border-radius: 0 0 12px 12px;
}
}
}
}
}
}
&__suitable {
&__title {
background: #E1FCCF;
border-radius: 12px 12px 0px 0px;
margin-top: 48px;
padding: 18px 37px;
position: relative;
p {
color: #000000;
font-weight: 500;
font-size: 22px;
line-height: 32px;
@media (max-width: 540px) {
font-size: 15px;
height: 20px;
}
}
}
&__persons {
display: flex;
flex-direction: column;
row-gap: 18px;
position: relative;
top: -15px;
}
&__person {
display: flex;
padding: 21px 45px 19px;
align-items: center;
background: #FFFFFF;
border-radius: 12px;
img {
width: 88px;
height: 88px;
}
p {
color: #000000;
font-weight: 500;
font-size: 16px;
line-height: 32px;
margin-left: 60px;
position: relative;
&:after {
content: "";
position: absolute;
background: #52B709;
border-radius: 12px;
width: 70%;
height: 8px;
bottom: -14px;
left: 0;
}
}
&__more {
padding: 9px 45px;
background: #52B709;
border-radius: 44px;
color: #FFFFFF;
font-weight: 500;
font-size: 16px;
line-height: 32px;
margin-left: 200px;
&:hover {
color: white;
text-decoration: none;
}
}
&__info {
width: 24px;
height: 24px;
box-shadow: 0px 3px 2px -2px rgba(0, 0, 0, 0.06), 0px 5px 3px -2px rgba(0, 0, 0, 0.02);
border-radius: 6px;
border: 1px solid #DDDDDD;
cursor: pointer;
position: relative;
display: flex;
align-items: center;
justify-content: center;
margin-left: 60px;
&:before {
content: "...";
color: #6F6F6F;
font-size: 25px;
position: relative;
top: -6px;
}
}
@media (max-width: 1100px) {
justify-content: space-between;
p {
margin-left: 0;
}
&__more {
margin-left: 0;
}
&__info {
margin-left: 0;
}
}
@media (max-width: 825px) {
padding: 15px;
}
@media (max-width: 750px) {
p {
max-width: 220px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
margin-bottom: 0;
}
}
@media (max-width: 575px) {
img {
width: 35px;
height: 35px;
}
}
@media (max-width: 630px) {
&__more {
padding: 5px 20px;
}
}
@media (max-width: 510px) {
p {
font-size: 12px;
max-width: 150px;
}
&__more {
font-size: 12px;
padding: 2px 10px;
}
}
}
}
footer {
margin-top: 70px;
}
}

View File

@ -34,7 +34,7 @@ export const PartnerRequests = () => {
<div className='partnerRequests__section__items'> <div className='partnerRequests__section__items'>
{ {
items.map((item, index) => { items.map((item, index) => {
return <Link key={index} to={''} className='partnerRequests__section__item'> return <Link key={index} to={'/profile/bid'} className='partnerRequests__section__item'>
<p className='partnerRequests__section__item__name'> <p className='partnerRequests__section__item__name'>
{item.name} {item.name}
</p> </p>

View File

@ -22,7 +22,7 @@ import './profile.scss'
export const Profile = () => { export const Profile = () => {
const profileInfo = useSelector(getProfileInfo); const profileInfo = useSelector(getProfileInfo);
const [user] = useState('developer') const [user] = useState('partner')
const [profileItemsInfo] = useState({ const [profileItemsInfo] = useState({
developer: [ developer: [
{ {