Compare commits

...

4 Commits

Author SHA1 Message Date
Mikola
16a5a1f548 partner request design 2024-05-03 19:23:46 +03:00
Mikola
a763c5a69a partner request design 2024-05-03 19:23:15 +03:00
Mikola
a7c58b2609 tracker tasks 2024-05-03 14:26:36 +03:00
Mikola
3b8ec8e100 tracker tasks 2024-05-03 14:26:09 +03:00
13 changed files with 421 additions and 270 deletions

View File

@ -0,0 +1,3 @@
<svg width="9" height="6" viewBox="0 0 9 6" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.11629 5.8584L8.07227 0.858398H0.160323L4.11629 5.8584Z" fill="#2E3A59"/>
</svg>

After

Width:  |  Height:  |  Size: 184 B

View File

@ -299,7 +299,7 @@
} }
.pass { .pass {
background-color: #f7d7c9 !important; background-color: #ba5c33 !important;
} }
.today { .today {
@ -308,7 +308,7 @@
} }
.selected { .selected {
background-color: #f9f9c3 !important; background-color: #cbcbb4 !important;
} }
.block { .block {

View File

@ -664,11 +664,8 @@ export const ModalTiсket = ({
"EasyImage", "EasyImage",
"Image", "Image",
"ImageCaption", "ImageCaption",
"ImageStyle",
"ImageToolbar",
"ImageUpload", "ImageUpload",
"MediaEmbed", "MediaEmbed"
"BlockQuote"
] ]
}} }}
onChange={(event, editor) => { onChange={(event, editor) => {

View File

@ -683,11 +683,8 @@ export const TicketFullScreen = () => {
"EasyImage", "EasyImage",
"Image", "Image",
"ImageCaption", "ImageCaption",
"ImageStyle",
"ImageToolbar",
"ImageUpload", "ImageUpload",
"MediaEmbed", "MediaEmbed"
"BlockQuote"
] ]
}} }}
onChange={(event, editor) => { onChange={(event, editor) => {

View File

@ -624,7 +624,15 @@ export const TrackerModal = ({
"bulletedList", "bulletedList",
"numberedList" "numberedList"
], ],
removePlugins: ["BlockQuote"], removePlugins: [
"CKFinderUploadAdapter",
"CKFinder",
"EasyImage",
"Image",
"ImageCaption",
"ImageUpload",
"MediaEmbed"
],
placeholder: "Описание задачи" placeholder: "Описание задачи"
}} }}
onChange={(event, editor) => { onChange={(event, editor) => {

View File

@ -34,11 +34,15 @@
display: flex; display: flex;
align-items: center; align-items: center;
grid-column-gap: 30px; grid-column-gap: 30px;
column-gap: 30px; column-gap: 10px;
margin-top: 20px; margin-top: 20px;
cursor: pointer; cursor: pointer;
text-decoration: none; text-decoration: none;
img {
width: 23px;
}
p { p {
margin-bottom: 0; margin-bottom: 0;
font-size: 14px; font-size: 14px;

View File

@ -127,11 +127,8 @@ export const TrackerTaskComment = ({
"EasyImage", "EasyImage",
"Image", "Image",
"ImageCaption", "ImageCaption",
"ImageStyle",
"ImageToolbar",
"ImageUpload", "ImageUpload",
"MediaEmbed", "MediaEmbed"
"BlockQuote"
] ]
}} }}
onChange={(event, editor) => { onChange={(event, editor) => {

View File

@ -34,17 +34,20 @@ export const PartnerAddRequest = () => {
const [specializationList, setSpecializationList] = useState([]); const [specializationList, setSpecializationList] = useState([]);
const [levelList, setLevelList] = useState([]); const [levelList, setLevelList] = useState([]);
const [countList] = useState([1, 2, 3, 4, 5]); const [countList] = useState([1, 2, 3, 4, 5]);
const [locationList] = useState(["РФ", "Беларусь"]);
const [openSkillsSelect, setOpenSkillsSelect] = useState(false); const [openSkillsSelect, setOpenSkillsSelect] = useState(false);
const [openSpecializationList, setOpenSpecializationListOpen] = const [openSpecializationList, setOpenSpecializationListOpen] =
useState(false); useState(false);
const [openLevelList, setOpenLevelList] = useState(false); const [openLevelList, setOpenLevelList] = useState(false);
const [openCountList, setOpenCountList] = useState(false); const [openCountList, setOpenCountList] = useState(false);
const [openLocationList, setOpenLocationList] = useState(false);
const [editRequest, setEditRequest] = useState(false); const [editRequest, setEditRequest] = useState(false);
const [selectedSkills, setSelectedSkills] = useState([]); const [selectedSkills, setSelectedSkills] = useState([]);
const [selectedSpecialization, setSelectedSpecialization] = useState( const [selectedSpecialization, setSelectedSpecialization] = useState(
"Выберите специализацию" "Выберите специализацию"
); );
const [selectedLevel, setSelectedLevel] = useState("Выберите уровень"); const [selectedLevel, setSelectedLevel] = useState("Выберите уровень");
const [selectedLocation, setSelectedLocation] = useState("Выберите локацию");
const [selectedCount, setSelectedCount] = useState( const [selectedCount, setSelectedCount] = useState(
"Выберите кол-во сотрудников" "Выберите кол-во сотрудников"
); );
@ -177,6 +180,7 @@ export const PartnerAddRequest = () => {
setOpenSpecializationListOpen(false); setOpenSpecializationListOpen(false);
setOpenLevelList(false); setOpenLevelList(false);
setOpenCountList(false); setOpenCountList(false);
setOpenLocationList(false);
} }
}; };
@ -202,6 +206,7 @@ export const PartnerAddRequest = () => {
? "Страница редактирования заявки" ? "Страница редактирования заявки"
: "Страница добавления заявки"} : "Страница добавления заявки"}
</h2> </h2>
<div className="partner-add-request__main">
<div className="partner-add-request__section"> <div className="partner-add-request__section">
<div className="partner-add-request__form"> <div className="partner-add-request__form">
<div className="partner-add-request__form__block form__block"> <div className="partner-add-request__form__block form__block">
@ -357,7 +362,8 @@ export const PartnerAddRequest = () => {
src={arrowDown} src={arrowDown}
/> />
</div> </div>
{openLevelList && Boolean(Object.values(levelList).length) && ( {openLevelList &&
Boolean(Object.values(levelList).length) && (
<div className="form__block__dropDown"> <div className="form__block__dropDown">
{Object.values(levelList).map((level, index) => { {Object.values(levelList).map((level, index) => {
return ( return (
@ -365,7 +371,10 @@ export const PartnerAddRequest = () => {
key={level} key={level}
onClick={() => { onClick={() => {
setOpenLevelList(false); setOpenLevelList(false);
setSelectedLevel({ name: level, id: index + 1 }); setSelectedLevel({
name: level,
id: index + 1
});
}} }}
> >
{level} {level}
@ -417,21 +426,6 @@ export const PartnerAddRequest = () => {
</div> </div>
)} )}
</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> </div>
<div className="partner-add-request__info"> <div className="partner-add-request__info">
@ -441,8 +435,8 @@ export const PartnerAddRequest = () => {
<h4>Процесс:</h4> <h4>Процесс:</h4>
</div> </div>
<p> <p>
При аутстаффе мы предоставляем вам IT-специалистов при этом они При аутстаффе мы предоставляем вам IT-специалистов при этом
находятся в нашем штате. они находятся в нашем штате.
<br /> <br />
<br /> <br />
Вы сможете прособеседовать наших специалистов, посмотреть Вы сможете прособеседовать наших специалистов, посмотреть
@ -474,8 +468,67 @@ export const PartnerAddRequest = () => {
</h4> </h4>
</div> </div>
<p> <p>
В Личном кабинете платформы получайте отчеты выполненных работ и В Личном кабинете платформы получайте отчеты выполненных работ
счеты на согласование и оплату и счеты на согласование и оплату
</p>
</div>
</div>
</div>
<div className="partner-add-request__special">
<h4>Основные требования по вакансии</h4>
<div className="form__block__section special__select">
<h3>Локация</h3>
<div
className="form__block__section__select"
onClick={() => setOpenLocationList(true)}
>
<span>{selectedLocation}</span>
<img
className={openLocationList ? "rotate" : ""}
src={arrowDown}
/>
</div>
{openLocationList && (
<div className="form__block__dropDown">
{locationList.map((location, index) => {
return (
<p
key={index}
onClick={() => {
setOpenLocationList(false);
setSelectedLocation(location);
}}
>
{location}
</p>
);
})}
</div>
)}
</div>
<div className="form__block__section">
<h3>Ставка</h3>
<div className="form__block__section__input special__select">
<input type="text" placeholder="Оплата" />
</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>
<p>
Нажимая "Сохранить", вы соглашаетесь с Правилами обработки и
использования персональных данных
</p> </p>
</div> </div>
</div> </div>

View File

@ -23,6 +23,31 @@
line-height: 32px; line-height: 32px;
} }
&__main {
display: flex;
flex-direction: column;
row-gap: 30px;
}
&__special {
background: rgba(255, 255, 255, 1);
border-radius: 12px;
padding: 41px 45px 35px 55px;
display: flex;
flex-direction: column;
h4 {
font-weight: 700;
color: rgba(91, 104, 113, 1);
font-size: 20px;
line-height: 24px;
}
.special__select {
max-width: 450px;
}
}
&__section { &__section {
margin-top: 25px; margin-top: 25px;
display: flex; display: flex;
@ -99,6 +124,7 @@
font-size: 15px; font-size: 15px;
line-height: 18px; line-height: 18px;
outline: none; outline: none;
width: 100%;
} }
} }
@ -164,13 +190,23 @@
&__buttons { &__buttons {
display: flex; display: flex;
margin-top: 50px;
button { button {
max-width: 150px; max-width: 150px;
width: 100%; width: 100%;
height: 40px; height: 40px;
} }
p {
font-weight: 300;
font-size: 12px;
line-height: 18px;
color: rgba(0, 0, 0, 1);
margin-left: 50px;
max-width: 360px;
display: flex;
align-items: center;
}
} }
&__cancel { &__cancel {
@ -321,7 +357,7 @@
background: #ffffff; background: #ffffff;
border-radius: 12px; border-radius: 12px;
width: 100%; width: 100%;
padding: 74px 48px 136px 62px; padding: 74px 48px 67px 62px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
row-gap: 61px; row-gap: 61px;

View File

@ -44,9 +44,25 @@ export const PartnerCategories = () => {
const theme = useTheme(getTheme()); const theme = useTheme(getTheme());
const [nodes, setNodes] = useState([]); const [nodes, setNodes] = useState([]);
const [initialNodes, setInitialNodes] = useState([]); const [initialNodes, setInitialNodes] = useState([]);
const [activeTab, setActiveTab] = useState(1);
const [search, setSearch] = useState(""); const [search, setSearch] = useState("");
const tabs = [
{
id: 1,
name: "Все"
},
{
id: 2,
name: "Фронтенд"
},
{
id: 3,
name: "Бэкенд"
}
];
const COLUMNS = [ const COLUMNS = [
{ {
label: "", label: "",
@ -256,6 +272,21 @@ export const PartnerCategories = () => {
<div className="partner-categories__items"> <div className="partner-categories__items">
{Boolean(initialNodes.length) ? ( {Boolean(initialNodes.length) ? (
<> <>
<div className="table__tabs">
{tabs.map((tab) => {
return (
<button
onClick={() => setActiveTab(tab.id)}
key={tab.id}
className={`table__tab ${
tab.id === activeTab ? "table__tab--active" : ""
}`}
>
{tab.name}
</button>
);
})}
</div>
<label className="table__search" htmlFor="search"> <label className="table__search" htmlFor="search">
Поиск по имени: Поиск по имени:
<input <input

View File

@ -204,6 +204,29 @@
} }
} }
&__tabs {
margin: 0 auto 36px 18px;
background: rgba(240, 242, 245, 1);
padding: 4px 8px 4px 8px;
border-radius: 6px;
display: flex;
}
&__tab {
color: rgba(46, 58, 89, 1);
font-size: 15px;
outline: none;
background: none;
border: none;
padding: 0 12px;
&--active {
background: rgba(255, 255, 255, 1);
border-radius: 5px;
font-size: 16px;
}
}
&__pagination { &__pagination {
width: 100%; width: 100%;
display: flex; display: flex;

View File

@ -243,11 +243,8 @@ export const Summary = () => {
"EasyImage", "EasyImage",
"Image", "Image",
"ImageCaption", "ImageCaption",
"ImageStyle",
"ImageToolbar",
"ImageUpload", "ImageUpload",
"MediaEmbed", "MediaEmbed"
"BlockQuote"
] ]
}} }}
onChange={(event, editor) => { onChange={(event, editor) => {

View File

@ -64,13 +64,18 @@
&__back { &__back {
display: flex; display: flex;
align-items: center; align-items: center;
column-gap: 30px; column-gap: 10px;
margin-top: 20px; margin-top: 20px;
cursor: pointer; cursor: pointer;
&:hover { &:hover {
text-decoration: none; text-decoration: none;
} }
img {
width: 23px;
}
p { p {
margin-bottom: 0; margin-bottom: 0;
font-weight: 400; font-weight: 400;