diff --git a/src/assets/images/downloadExel.svg b/src/assets/images/downloadExcel.svg similarity index 100% rename from src/assets/images/downloadExel.svg rename to src/assets/images/downloadExcel.svg diff --git a/src/components/Common/ModalLayout/modalLayout.scss b/src/components/Common/ModalLayout/modalLayout.scss index b803a061..2c0ef01f 100644 --- a/src/components/Common/ModalLayout/modalLayout.scss +++ b/src/components/Common/ModalLayout/modalLayout.scss @@ -23,6 +23,8 @@ .select-person { align-items: start; + margin: 0; + padding: 0; &__info { font-size: 15px; @@ -49,19 +51,17 @@ display: flex; flex-direction: column; justify-content: space-between; - - button { - // margin: 0 auto; - } + align-items: center; } .invite-person-block { display: flex; flex-direction: column; - row-gap: 20px; + align-items: center; + row-gap: 10px; &__input { margin: 0; - min-width: 320px; + min-width: 240px; height: 42px; input { @@ -75,7 +75,7 @@ &__btn { margin: 0; - max-width: 242px; + max-width: 190px; width: 100%; } } @@ -106,7 +106,6 @@ display: flex; flex-direction: column; row-gap: 10px; - padding: 19px 10px 29px 10px; @media (max-width: 500px) { padding: 10px; diff --git a/src/components/Modal/ModalRegistration/ModalRegistration.jsx b/src/components/Modal/ModalRegistration/ModalRegistration.jsx index c18820db..bc6ef14d 100644 --- a/src/components/Modal/ModalRegistration/ModalRegistration.jsx +++ b/src/components/Modal/ModalRegistration/ModalRegistration.jsx @@ -10,11 +10,13 @@ import ModalLayout from "@components/Common/ModalLayout/ModalLayout"; import anyMoment from "assets/icons/anyMoment.svg"; import doc from "assets/icons/doc.svg"; import telegramLogo from "assets/icons/tgLogo.svg"; +import accept from "assets/images/accept.png"; import "./modalRegistration.scss"; export const ModalRegistration = ({ active, setActive }) => { const [loader, setLoader] = useState(false); + const [isPartner, setIsPartner] = useState(false); const fields = { username: "", @@ -56,7 +58,7 @@ export const ModalRegistration = ({ active, setActive }) => { fields, showNotificationError, showNotificationTrue, - closeModal + isPartner ); return ( @@ -123,6 +125,15 @@ export const ModalRegistration = ({ active, setActive }) => { +
setIsPartner(!isPartner)} + > +

Партнер:

+ + {isPartner ? accept : ""} + +
{loader ? ( diff --git a/src/components/Modal/ModalRegistration/modalRegistration.scss b/src/components/Modal/ModalRegistration/modalRegistration.scss index 8f2d90fc..0ba642bc 100644 --- a/src/components/Modal/ModalRegistration/modalRegistration.scss +++ b/src/components/Modal/ModalRegistration/modalRegistration.scss @@ -128,6 +128,38 @@ } } + .input_checkbox { + display: flex; + width: 100%; + align-items: center; + cursor: pointer; + + p { + font-size: 16px; + font-weight: 500; + } + + span { + border: 1px solid gray; + border-radius: 4px; + width: 20px; + height: 20px; + margin-left: 10px; + display: flex; + align-items: center; + justify-content: center; + + img { + width: 15px; + height: 15px; + } + } + + .checkbox--active { + background: #f2f2f2; + } + } + .button-box { display: flex; flex-direction: row; diff --git a/src/components/Modal/ModalSelect/ModalSelect.jsx b/src/components/Modal/ModalSelect/ModalSelect.jsx index 68726efd..4aae3e92 100644 --- a/src/components/Modal/ModalSelect/ModalSelect.jsx +++ b/src/components/Modal/ModalSelect/ModalSelect.jsx @@ -5,7 +5,6 @@ import "./modalSelect.scss"; export const ModalSelect = ({ active, children }) => { return (
- ... {children}
); diff --git a/src/components/Modal/ModalSelect/modalSelect.scss b/src/components/Modal/ModalSelect/modalSelect.scss index 5a1f6aa3..46bb17a2 100644 --- a/src/components/Modal/ModalSelect/modalSelect.scss +++ b/src/components/Modal/ModalSelect/modalSelect.scss @@ -1,29 +1,30 @@ .project { &__settings { position: absolute; - padding: 32px 23px 10px 11px; + padding: 0 10px; background: #e1fccf; border-radius: 12px; transform: scale(0); - bottom: -40px; - right: -120px; + bottom: -30px; + right: -130px; @media (max-width: 1050px) { - right: 10px; - padding-top: 10px; - bottom: -75px; + right: 5px; + bottom: -30px; } &-menu { font-size: 14px; - line-height: 38px; + padding: 5px 0; div { display: flex; align-items: center; + padding: 2px 0; img { - margin-right: 12px; + width: 12px; + margin-right: 5px; } p:hover { diff --git a/src/components/Modal/Tracker/ListEmployees/ListEmployees.jsx b/src/components/Modal/Tracker/ListEmployees/ListEmployees.jsx index a9fefcb4..e35689a9 100644 --- a/src/components/Modal/Tracker/ListEmployees/ListEmployees.jsx +++ b/src/components/Modal/Tracker/ListEmployees/ListEmployees.jsx @@ -87,7 +87,7 @@ const ListEmployees = ({ }} > + -

Добавить участников

+

Добавить участника

diff --git a/src/components/Modal/Tracker/ModalTicket/ModalTicket.jsx b/src/components/Modal/Tracker/ModalTicket/ModalTicket.jsx index bcecfdd1..97619d55 100644 --- a/src/components/Modal/Tracker/ModalTicket/ModalTicket.jsx +++ b/src/components/Modal/Tracker/ModalTicket/ModalTicket.jsx @@ -758,8 +758,7 @@ export const ModalTiсket = ({
setActive(false)}> -

Создатель: {task.user?.fio}

- + Создатель:

{task.user?.fio}

{executor ? ( <>
Исполнитель:
@@ -819,7 +818,6 @@ export const ModalTiсket = ({ )}
)} - {Boolean(members.length) && (
Участники:
@@ -847,7 +845,6 @@ export const ModalTiсket = ({
)} -
- Добавить участников + Добавить участника {dropListMembersOpen && (
- Длительность:

{correctTimerTime(currentTimerCount.hours)}: {correctTimerTime(currentTimerCount.minute)}: @@ -1091,7 +1087,7 @@ export const ModalTiсket = ({

{acceptModalOpen && ( diff --git a/src/components/Modal/Tracker/ModalTicket/modalTicket.scss b/src/components/Modal/Tracker/ModalTicket/modalTicket.scss index d41d2946..5c2a224c 100644 --- a/src/components/Modal/Tracker/ModalTicket/modalTicket.scss +++ b/src/components/Modal/Tracker/ModalTicket/modalTicket.scss @@ -52,7 +52,7 @@ position: relative; display: flex; flex-direction: column; - width: 600px; + width: 630px; margin: 26px 0 0 21px; .title-project { @@ -100,10 +100,11 @@ } &__task { - margin-top: -5px; + margin-top: -20px; padding: 18px; display: flex; flex-direction: column; + overflow-y: scroll; input { font-style: normal; @@ -144,12 +145,9 @@ } .task-name { - display: -webkit-box; max-width: 550px; - overflow: hidden; text-overflow: ellipsis; -webkit-line-clamp: 2; - -webkit-box-orient: vertical; } .full-name { @@ -613,8 +611,8 @@ .exit { cursor: pointer; position: absolute; - top: 25px; - right: 20px; + top: 15px; + right: 15px; width: 13px; height: 13px; display: flex; @@ -640,8 +638,8 @@ span { font-family: "Inter", sans-serif; font-weight: 500; - font-size: 11px; - color: #807777; + font-size: 12px; + color: #666; } .nameProject { @@ -661,7 +659,7 @@ color: #000000; font-size: 12px; line-height: 32px; - margin-left: 17px; + margin-left: 10px; font-style: normal; font-weight: 400; } @@ -849,8 +847,8 @@ display: flex; align-items: center; justify-content: space-between; - font-size: 12px; - margin-top: 10px; + font-size: 13px; + margin-top: 5px; width: 160px; p { @@ -862,7 +860,7 @@ &__creator { font-size: 14px; font-weight: 500; - color: #2d4a17; + max-width: 200px; overflow: hidden; white-space: nowrap; @@ -875,6 +873,7 @@ line-height: 32px; font-weight: 500; display: flex; + color: #2d4a17; } } @@ -964,11 +963,11 @@ } &_box { - padding: 25px 0px 10px 40px; + padding: 25px 0px 10px 20px; border-bottom: 1px solid #f1f1f1; &-middle { - padding: 0px 0px 10px 35px; + padding: 0px 0px 10px 20px; border-bottom: 1px solid #f1f1f1; } @@ -979,7 +978,7 @@ position: relative; row-gap: 10px; - padding: 10px 40px 0px 40px; + padding: 10px 40px 0px 20px; border-radius: 10px; margin-bottom: 10px; @@ -1110,7 +1109,7 @@ &-priority { position: relative; - padding: 10px 40px 0 40px; + padding: 10px 40px 0 20px; border-radius: 10px; margin-bottom: 10px; .priority { @@ -1170,7 +1169,7 @@ } &-bottom { - padding: 0px 110px 10px 35px; + padding: 0px 90px 10px 35px; font-weight: 400; font-size: 14px; line-height: 32px; @@ -1186,7 +1185,7 @@ } p { - margin: 0 0 0 12px; + margin: 0 0 0 5px; } } diff --git a/src/components/Modal/Tracker/TicketFullScreen/TicketFullScreen.jsx b/src/components/Modal/Tracker/TicketFullScreen/TicketFullScreen.jsx index e031cbb3..d845e475 100644 --- a/src/components/Modal/Tracker/TicketFullScreen/TicketFullScreen.jsx +++ b/src/components/Modal/Tracker/TicketFullScreen/TicketFullScreen.jsx @@ -812,7 +812,7 @@ export const TicketFullScreen = () => {
- Создатель:

 {taskInfo.user?.fio}

+ Создатель:

{taskInfo.user?.fio}

{taskInfo.executor ? ( @@ -908,7 +908,7 @@ export const TicketFullScreen = () => { > + - Добавить участников + Добавить участника {dropListMembersOpen && (
{
- Длительность:

{correctTimerTime(currentTimerCount.hours)}: {correctTimerTime(currentTimerCount.minute)}: @@ -1152,7 +1151,7 @@ export const TicketFullScreen = () => {

{acceptModalOpen && ( diff --git a/src/components/Modal/Tracker/TrackerModal/TrackerModal.jsx b/src/components/Modal/Tracker/TrackerModal/TrackerModal.jsx index 622eafc3..89f14f80 100644 --- a/src/components/Modal/Tracker/TrackerModal/TrackerModal.jsx +++ b/src/components/Modal/Tracker/TrackerModal/TrackerModal.jsx @@ -75,7 +75,7 @@ export const TrackerModal = ({ "Выберите приоритет колонки" ); const [selectedExecutorTask, setSelectedExecutorTask] = useState( - "Выберите исполнителя задачи" + "Выберите исполнителя" ); const [selectExecutorTaskOpen, setSelectExecutorTaskOpen] = useState(false); const [correctProjectUsers, setCorrectProjectUsers] = useState([]); @@ -183,7 +183,7 @@ export const TrackerModal = ({ setActive(false); setValueTicket(""); setDescriptionTicket(""); - setSelectedExecutorTask("Выберите исполнителя задачи"); + setSelectedExecutorTask("Выберите исполнителя"); setSelectedPriority(null); }); } else { @@ -407,7 +407,7 @@ export const TrackerModal = ({

Добавьте участника

- Выберите пользователя в проекте или добавьте по e-mail + Выберите пользователя в списке или добавьте по e-mail

@@ -440,7 +440,7 @@ export const TrackerModal = ({ setSelectedWorker(worker); }} > -

{worker.employee.fio}

+ {worker.employee.fio} avatar
- Отправить приглашение + Пригласить
@@ -489,19 +489,11 @@ export const TrackerModal = ({
-

Создатель: {profileInfo?.fio}

- avatar +

Создание задачи

-
-
+
+

Введите название и описание задачи

{selectedExecutorTask.user_id ? ( <> - {selectedExecutorTask.user.fio} avatar + {selectedExecutorTask.user.fio} ) : ( {selectedExecutorTask} @@ -671,7 +663,6 @@ export const TrackerModal = ({ className="executor" key={person.user_id} > - {person.user.fio} avatar + {person.user.fio}
); }) @@ -692,12 +684,10 @@ export const TrackerModal = ({
calendar - Срок исполнения - arrow

setDatePickerOpen(!datePickerOpen)}> {deadLineDate ? getCorrectDate(deadLineDate) - : "Дата не выбрана"} + : "Срок исполнения"}

{ diff --git a/src/components/ProfileCalendar/ProfileCalendarComponent.jsx b/src/components/ProfileCalendar/ProfileCalendarComponent.jsx index 13fbaeb4..a1a0a580 100644 --- a/src/components/ProfileCalendar/ProfileCalendarComponent.jsx +++ b/src/components/ProfileCalendar/ProfileCalendarComponent.jsx @@ -5,6 +5,7 @@ import { useDispatch } from "react-redux"; import { Link } from "react-router-dom"; import { + setEditReport, setReportDate, setRequestDate, setSendRequest @@ -235,6 +236,7 @@ export const ProfileCalendarComponent = React.memo( else { dispatch(setReportDate(day)); dispatch(setSendRequest(true)); + dispatch(setEditReport("")); } }} onMouseEnter={() => { diff --git a/src/components/ProjectTicket/ProjectTicket.jsx b/src/components/ProjectTicket/ProjectTicket.jsx index bbdc5b58..95b3e0b5 100644 --- a/src/components/ProjectTicket/ProjectTicket.jsx +++ b/src/components/ProjectTicket/ProjectTicket.jsx @@ -109,7 +109,7 @@ export const ProjectTicket = ({ project, index }) => { to={`/profile/statistics/${project.id}`} className="project__statistics" > - Просмотреть статистику + Посмотреть статистику {
-

ссылка на проект

+

скопировать ссылку

{ @@ -158,7 +158,7 @@ export const ProjectTicket = ({ project, index }) => { {acceptModalOpen && ( @@ -166,7 +166,7 @@ export const ProjectTicket = ({ project, index }) => { {modalDelete && ( diff --git a/src/components/ProjectTicket/projectTicket.scss b/src/components/ProjectTicket/projectTicket.scss index 766aa818..19425b18 100644 --- a/src/components/ProjectTicket/projectTicket.scss +++ b/src/components/ProjectTicket/projectTicket.scss @@ -80,8 +80,8 @@ position: absolute; font-size: 21px; color: #6f6f6f; - right: 26px; - top: 10px; + right: 15px; + top: 0px; } &__avatar { diff --git a/src/components/ReportForm/ReportForm.jsx b/src/components/ReportForm/ReportForm.jsx index b27287db..fa27d27e 100644 --- a/src/components/ReportForm/ReportForm.jsx +++ b/src/components/ReportForm/ReportForm.jsx @@ -3,9 +3,11 @@ import React, { useEffect, useState } from "react"; import DatePicker, { registerLocale } from "react-datepicker"; import "react-datepicker/dist/react-datepicker.css"; import { useSelector } from "react-redux"; +import { useDispatch } from "react-redux"; import { Link, Navigate, useNavigate } from "react-router-dom"; -import { getReportDate } from "@redux/reportSlice"; +import { getEditReport, getReportDate } from "@redux/reportSlice"; +import { setEditReport } from "@redux/reportSlice"; import { apiRequest } from "@api/request"; @@ -35,6 +37,8 @@ const ReportForm = () => { } const navigate = useNavigate(); const reportDate = useSelector(getReportDate); + const editReport = useSelector(getEditReport); + const dispatch = useDispatch(); useEffect(() => { initListeners(); @@ -43,15 +47,23 @@ const ReportForm = () => { const [isFetching, setIsFetching] = useState(false); const [reportSuccess, setReportSuccess] = useState(""); const [startDate, setStartDate] = useState( - reportDate ? new Date(reportDate._d) : new Date() + reportDate || editReport + ? new Date(reportDate ? reportDate._d : editReport.created_at) + : new Date() ); const [datePickerOpen, setDatePickerOpen] = useState(false); - const [inputs, setInputs] = useState([ - { task: "", hours_spent: "", minutes_spent: 0 } - ]); - const [troublesInputValue, setTroublesInputValue] = useState(""); - const [scheduledInputValue, setScheduledInputValue] = useState(""); + const [inputs, setInputs] = useState( + editReport + ? editReport.task + : [{ task: "", hours_spent: "", minutes_spent: 0 }] + ); + const [troublesInputValue, setTroublesInputValue] = useState( + editReport ? editReport.difficulties : "" + ); + const [scheduledInputValue, setScheduledInputValue] = useState( + editReport ? editReport.tomorrow : "" + ); const addInput = () => { setInputs((prev) => [ @@ -112,14 +124,49 @@ const ReportForm = () => { setReportSuccess(""); navigate("/profile/calendar"); }, 1000); - setInputs(() => []); - setTroublesInputValue(""); - setScheduledInputValue(""); setIsFetching(false); - setInputs(() => [{ task: "", hours_spent: "", minutes_spent: 0 }]); + clearParams(); }); }; + const handleEditReport = () => { + setIsFetching(true); + for (let input of inputs) { + if (!input.task || !input.hours_spent) { + setReportSuccess("Заполните задачи"); + setTimeout(() => setReportSuccess(""), 2000); + setIsFetching(false); + return; + } + } + apiRequest(`/reports/update?id=${editReport.id}`, { + method: "PUT", + data: { + tasks: inputs, + difficulties: troublesInputValue, + tomorrow: scheduledInputValue, + created_at: getCreatedDate(startDate), + status: 1 + } + }).then(() => { + setReportSuccess("Отчет изменён"); + setTimeout(() => { + setReportSuccess(""); + navigate("/profile/calendar"); + }, 1000); + setIsFetching(false); + clearParams(); + dispatch(setEditReport("")); + }); + }; + + const clearParams = () => { + setInputs(() => []); + setTroublesInputValue(""); + setScheduledInputValue(""); + setInputs(() => [{ task: "", hours_spent: "", minutes_spent: 0 }]); + }; + return (
@@ -133,7 +180,8 @@ const ReportForm = () => { ]} />

- Ваши отчеты - добавить отчет + Ваши отчеты -{" "} + {editReport ? "редактировать отчет" : "добавить отчет"}

@@ -147,13 +195,14 @@ const ReportForm = () => {
-

Добавление отчета за день

+

+ {editReport + ? "Редактирование отчета за день" + : "Добавление отчета за день"} +

Дата заполнения отчета:

-
setDatePickerOpen(true)} - > +
{ ) : ( )}

diff --git a/src/components/StarRating/StarRating.js b/src/components/StarRating/StarRating.js index 446336e4..913ae7bf 100644 --- a/src/components/StarRating/StarRating.js +++ b/src/components/StarRating/StarRating.js @@ -6,7 +6,7 @@ const StarRating = ({ countStars = 1, countActiveStars = 1, color = "#52B709", - size = 61 + size = 40 }) => { const [shadedStars, setShadedStars] = useState([]); const [noShadedStars, setNoShadedStars] = useState([]); diff --git a/src/components/features/quiz/AlertResult.jsx b/src/components/features/quiz/AlertResult.jsx index dcac3961..bccacf5b 100644 --- a/src/components/features/quiz/AlertResult.jsx +++ b/src/components/features/quiz/AlertResult.jsx @@ -18,13 +18,13 @@ export const AlertResult = ({ info }) => { style={{ color: successTest ? "#52B709" : "#5B6871" }} > Благодарим Вас за прохождение теста "{info.questionnaire_title}". Ваши - результаты проверены, готовы пригласить Вас в команду + результаты проверены, мы готовы пригласить Вас в команду

{!successTest && (
)} diff --git a/src/components/features/quiz/QuizReport.jsx b/src/components/features/quiz/QuizReport.jsx index 0e05ccce..8ec9a085 100644 --- a/src/components/features/quiz/QuizReport.jsx +++ b/src/components/features/quiz/QuizReport.jsx @@ -3,12 +3,6 @@ import React from "react"; import StarRating from "@components/StarRating/StarRating"; export const QuizReport = ({ info }) => { - function correctAnswers() { - return info.number_questions * info.percent_correct_answers; - } - function correctWrongAnswers() { - return info.number_questions * (1 - info.percent_correct_answers); - } return (
@@ -23,19 +17,13 @@ export const QuizReport = ({ info }) => {
- {Boolean(correctAnswers()) ? correctAnswers() : 0} + {info.count_correct_answers}/{info.number_questions}
правильных ответов
-
-
- {Boolean(correctWrongAnswers()) ? correctWrongAnswers() : 0} -
-
неправильных ответов
-
Статус:
-
Пройдено!
+
Пройден!
diff --git a/src/components/features/quiz/quiz.scss b/src/components/features/quiz/quiz.scss index 42701f1a..bceb02b9 100644 --- a/src/components/features/quiz/quiz.scss +++ b/src/components/features/quiz/quiz.scss @@ -31,16 +31,14 @@ $maxWidthContainer: 1123; } .quiz-btn { display: flex; - font-family: "Lab Grotesque"; align-items: center; justify-content: center; - // box-shadow: 6px 5px 20px rgba(82, 151, 34, 0.21); + box-shadow: 6px 5px 20px rgba(82, 151, 34, 0.21); white-space: nowrap; background: #406128; border-radius: 44px; color: #fff; outline: none; - //border: 2px solid #52b709; border: none; transition: 0 all ease 0.8s; padding: 7px 51px; @@ -48,11 +46,6 @@ $maxWidthContainer: 1123; font-size: 14px; text-decoration: none; line-height: 200%; - // &:hover{ - // text-decoration: none; - // color: #52b709; - // background: #fff; - // } &_back { background: #dddddd; color: #000; @@ -68,13 +61,11 @@ $maxWidthContainer: 1123; } } .quiz-title_h3 { - font-family: "Lab Grotesque"; font-weight: 700; font-size: 18px; line-height: 156%; color: #52b709; } -//============================================= .error-msg { text-align: center; @@ -140,7 +131,6 @@ $maxWidthContainer: 1123; .form-task__group { display: block; margin-bottom: 13px; - font-family: "Lab Grotesque"; label { font-weight: 400; font-size: 15px; @@ -312,9 +302,9 @@ $maxWidthContainer: 1123; } .card-introduction { - padding: 0px 25px; + padding: 0px 20px; margin: 0px 0px 50px 0px; - flex: 0 1 33.333%; + flex: 0 1 33%; @media (max-width: 850px) { flex: 0 1 50%; } @@ -324,14 +314,13 @@ $maxWidthContainer: 1123; &__body { display: flex; - gap: 20px; + gap: 10px; } &__title { font-weight: 900; - font-size: 14px; - line-height: 171%; + font-size: 18px; color: #52b709; - margin: 0 0 30px 0; + margin-bottom: 10px; } &__icon { flex: 0 0 25px; @@ -343,8 +332,8 @@ $maxWidthContainer: 1123; } &__text { font-weight: 400; - font-size: 12px; - line-height: 200%; + font-size: 15px; + line-height: 20px; color: #000000; } } @@ -352,20 +341,8 @@ $maxWidthContainer: 1123; .quiz-passing-information { background: #fff; border-radius: 12px; - &__container { - // @media (max-width: 600px) { - // display: block; - // } - // @media (max-width: 600px) { - // display: block; - // } - // @media (max-width: 600px) { - // display: block; - // } - } &__main { - //flex: 1 1 auto; - padding: 35px 45px; + padding: 30px; height: 100%; display: grid; grid-template-columns: 1fr 1.2fr 1.2fr 0.6fr; @@ -388,7 +365,7 @@ $maxWidthContainer: 1123; } &__text { font-weight: 400; - font-size: 12px; + font-size: 14px; line-height: 167%; color: #6f6f6f; span { @@ -399,7 +376,7 @@ $maxWidthContainer: 1123; &__timer, &__attempt { display: flex; - gap: 23px; + gap: 10px; align-items: center; } @@ -448,10 +425,10 @@ $maxWidthContainer: 1123; &__container { display: block; - @include adaptiv-value("padding-top", 30, 20, 1); - @include adaptiv-value("padding-bottom", 30, 20, 1); - @include adaptiv-value("padding-right", 28, 18, 1); - @include adaptiv-value("padding-left", 28, 18, 1); + @include adaptiv-value("padding-top", 15, 15, 1); + @include adaptiv-value("padding-bottom", 15, 15, 1); + @include adaptiv-value("padding-right", 15, 15, 1); + @include adaptiv-value("padding-left", 15, 15, 1); } &:hover { @@ -463,8 +440,8 @@ $maxWidthContainer: 1123; &__top-head { display: flex; align-items: center; - gap: 19px; - margin: 0 0 24px 0; + gap: 10px; + margin-bottom: 15px; } &__title { font-weight: 500; @@ -482,9 +459,8 @@ $maxWidthContainer: 1123; p { flex: 0 1 66%; - font-weight: 700; - font-size: 12px; - line-height: 20px; + font-weight: 500; + font-size: 13px; color: #000000; margin-bottom: 0; @@ -508,7 +484,7 @@ $maxWidthContainer: 1123; border-radius: 12px; padding: 13px 16px; position: absolute; - bottom: 20px; + bottom: 0px; left: 0; display: flex; align-items: center; @@ -517,8 +493,7 @@ $maxWidthContainer: 1123; gap: 10px; p { font-weight: 500; - font-size: 14px; - line-height: 129%; + font-size: 13px; color: #000000; } a { @@ -545,7 +520,6 @@ $maxWidthContainer: 1123; .block-completed-test { background: #ffffff; border-radius: 12px; - // .block-completed-test__container &__container { padding: 41px 35px 29px 59px; @@ -554,8 +528,6 @@ $maxWidthContainer: 1123; flex-wrap: wrap; } - // .block-completed-test__img - &__img { flex: 0 0 54px; height: 60px; @@ -567,8 +539,6 @@ $maxWidthContainer: 1123; } } - // .block-completed-test__title - &__title { font-weight: 700; font-size: 18px; @@ -577,27 +547,20 @@ $maxWidthContainer: 1123; color: #52b709; } - // .block-completed-test__text - &__text { max-width: 386px; margin: 0 26px 0 0; - font-weight: 400; - font-size: 12px; - line-height: 200%; + font-weight: 500; + font-size: 13px; color: #000000; } - // .block-completed-test__button - &__button { display: block; } } .report { - // .report__row - &__row { display: flex; align-items: center; @@ -609,36 +572,37 @@ $maxWidthContainer: 1123; } } - // .report__column - &__column { &:first-child { background: #ffffff; - flex: 0 1 22%; - border-radius: 12px; + flex: 0 1 40%; + border-radius: 12px 0 0 12px; @media (max-width: 1000px) { flex: 0 1 50%; } + @media (max-width: 600px) { + border-radius: 12px 12px 0 0; + } } - height: 128px; - border-radius: 0px 12px 0px 0px; - flex: 0 1 26%; + height: 90px; + flex: 0 1 30%; display: flex; justify-content: center; align-items: center; background: #e1fccf; - gap: 21px; + gap: 10px; &:last-child { - flex-direction: column; - gap: 0; - } - @media (max-width: 1000px) { - flex: 0 1 50%; + border-radius: 0 12px 12px 0; + gap: 10px; + @media (max-width: 1000px) { + flex: 0 1 50%; + } + @media (max-width: 600px) { + border-radius: 0 0 12px 12px; + } } } - // .report__job-title - &__job-title { font-weight: 500; font-size: 18px; @@ -646,22 +610,17 @@ $maxWidthContainer: 1123; color: #000000; } - // .report__value - &__value { font-weight: 700; font-size: 52px; line-height: 56%; color: #52b709; - // .report__value_false &_false { color: #5b6871; } } - // .report__text - &__text { font-weight: 400; font-size: 16px; @@ -669,26 +628,20 @@ $maxWidthContainer: 1123; color: #000000; } - // .report__status-text - &__status-text { - font-weight: 400; - font-size: 12px; - line-height: 200%; + font-weight: 500; + font-size: 15px; color: #000000; - width: 50%; } - // .report__status - &__status { background: #1458dd; - border-radius: 44px; + border-radius: 5px; font-weight: 500; font-size: 16px; line-height: 200%; color: #ffffff; - padding: 7px 34px; + padding: 7px 14px; max-width: 154px; } } @@ -696,19 +649,19 @@ $maxWidthContainer: 1123; .alert-result { display: flex; align-items: center; - @include adaptiv-value("padding-top", 39, 20, 1); - @include adaptiv-value("padding-bottom", 39, 20, 1); - @include adaptiv-value("padding-right", 61, 20, 1); - @include adaptiv-value("padding-left", 61, 20, 1); + @include adaptiv-value("padding-top", 20, 20, 1); + @include adaptiv-value("padding-bottom", 20, 20, 1); + @include adaptiv-value("padding-right", 20, 20, 1); + @include adaptiv-value("padding-left", 20, 20, 1); background: #fff; - gap: 30px; + gap: 10px; border-radius: 10px; @media (max-width: 900px) { flex-wrap: wrap; } &__column { display: flex; - @include adaptiv-value("gap", 44, 14, 1); + @include adaptiv-value("gap", 20, 20, 1); align-items: center; @media (max-width: 900px) { flex: 1 1 auto; diff --git a/src/hooks/useFormValidation.js b/src/hooks/useFormValidation.js index f19880e5..041ca836 100644 --- a/src/hooks/useFormValidation.js +++ b/src/hooks/useFormValidation.js @@ -6,7 +6,8 @@ export const useFormValidation = ( apiEndpoint, fields, showNotificationError, - showNotificationTrue + showNotificationTrue, + isPartner ) => { // Состояние формы, содержащее значения полей const [formData, setFormData] = useState(fields); @@ -84,7 +85,7 @@ export const useFormValidation = ( e.preventDefault(); // Проверка валидации формы if (validateForm()) { - let newformData = { ...formData }; + let newformData = { ...formData, is_partner: isPartner ? 1 : 0 }; delete newformData.secondPassword; try { diff --git a/src/pages/PartnerСategories/PartnerСategories.jsx b/src/pages/PartnerСategories/PartnerСategories.jsx index b2443b0c..7089d923 100644 --- a/src/pages/PartnerСategories/PartnerСategories.jsx +++ b/src/pages/PartnerСategories/PartnerСategories.jsx @@ -39,7 +39,7 @@ export const PartnerCategories = () => { setLoader(true); apiRequest("/project/my-employee").then((el) => { setLoader(false); - setStaff(el.managerEmployees); + setStaff(el?.managerEmployees); }); }, []); @@ -161,16 +161,22 @@ export const PartnerCategories = () => { ) : (
- {staff.map((card) => { - return ( - - ); - })} + {Boolean(staff) ? ( + staff.map((card) => { + return ( + + ); + }) + ) : ( + + У вас нет нанятого персонала + + )} {/*{personalInfoItems.map((item, index) => {*/} {/* return (*/} {/* {
-
Интсрукция:
+
Инструкция:
{ alt="" />
- Тесты itguild предназначены для того, чтобы подтверждать + Тесты ITguild предназначены для того, чтобы подтверждать навыки, которые вы указали у себя.
diff --git a/src/pages/ProjectTracker/ProjectTracker.js b/src/pages/ProjectTracker/ProjectTracker.js index 0af6f4f6..516263fb 100644 --- a/src/pages/ProjectTracker/ProjectTracker.js +++ b/src/pages/ProjectTracker/ProjectTracker.js @@ -43,6 +43,7 @@ import TrackerSelectColumn from "@components/TrackerSelectColumn/TrackerSelectCo import arrow from "assets/icons/arrows/arrowCalendar.png"; import arrowDown from "assets/icons/arrows/selectArrow.png"; +import calendarIcon from "assets/icons/calendar.svg"; import close from "assets/icons/close.png"; import commentsBoard from "assets/icons/commentsBoard.svg"; import del from "assets/icons/delete.svg"; @@ -528,7 +529,9 @@ export const ProjectTracker = () => {
)} {projectBoard.projectUsers?.length > 3 && ( - +1 + + +{projectBoard.projectUsers?.length - 3} + )} { className="tasks__board__item__description" >

+ avatar - {task.executor?.fio - ? task.executor?.fio - : "Исполнитель не назначен"} + {task.executor?.fio || + "Исполнитель не назначен"} - {task.executor?.avatar && ( - avatar - )}
{Boolean(task.mark.length) && (
@@ -943,7 +943,7 @@ export const ProjectTracker = () => { )} {task.dead_line && (
-

Срок исполнения:

+ calendar {getCorrectDate(task.dead_line)} @@ -1001,7 +1001,9 @@ export const ProjectTracker = () => {
{acceptModalOpen && ( deleteColumn(currentColumnDelete)} /> diff --git a/src/pages/Quiz/PassingTests.js b/src/pages/Quiz/PassingTests.js index bbf8ea2b..2745638b 100644 --- a/src/pages/Quiz/PassingTests.js +++ b/src/pages/Quiz/PassingTests.js @@ -10,7 +10,6 @@ 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 { HeadBottom } from "@components/features/Candidate-lk/HeadBottom"; import { BlockCompletedTest } from "@components/features/quiz/BlockCompletedTest"; import { CardIntroduction } from "@components/features/quiz/Card-introduction"; import { QuizPassingInformation } from "@components/features/quiz/Quiz-passing-information"; @@ -43,12 +42,12 @@ export const PassingTests = () => { { title: "Зачем?", description: - "Тесты itguild предназначены для того, чтобы подтверждать навыки, которые вы указали у себя." + "Тесты ITguild предназначены для того, чтобы подтверждать навыки, которые вы указали у себя." }, { title: "Почему именно тестирование?", description: - "Тесты itguild заменяют первое техническое собеседование по любой вакансии." + "Тесты ITguild заменяют первое техническое собеседование по любой вакансии." }, { title: "Какие тесты нужно проходить?", @@ -138,11 +137,6 @@ export const PassingTests = () => { )}
- {/**/}
); }; diff --git a/src/pages/Quiz/quiz-page.scss b/src/pages/Quiz/quiz-page.scss index f5f7a21d..bcf74eab 100644 --- a/src/pages/Quiz/quiz-page.scss +++ b/src/pages/Quiz/quiz-page.scss @@ -20,12 +20,12 @@ &__block { background: #e1fccf; - border-radius: 12px 12px 0px 0px; + border-radius: 12px; font-weight: 400; - font-size: 18px; + font-size: 23px; line-height: 178%; color: #000000; - padding: 20px 51px; + padding: 20px; margin: 0 0 16px 0; } diff --git a/src/pages/Statistics/Statistics.jsx b/src/pages/Statistics/Statistics.jsx index c37f59b4..7699d1b4 100644 --- a/src/pages/Statistics/Statistics.jsx +++ b/src/pages/Statistics/Statistics.jsx @@ -191,7 +191,7 @@ const Statistics = () => {
+ -

Добавить участников

+

Добавить участника

diff --git a/src/pages/Tracker/Tracker.jsx b/src/pages/Tracker/Tracker.jsx index c18c625b..7cb3bb90 100644 --- a/src/pages/Tracker/Tracker.jsx +++ b/src/pages/Tracker/Tracker.jsx @@ -33,7 +33,7 @@ import project from "assets/icons/trackerProject.svg"; import tasks from "assets/icons/trackerTasks.svg"; import archive from "assets/images/archiveIcon.png"; import mockAvatar from "assets/images/avatarMok.png"; -import downloadExel from "assets/images/downloadExel.svg"; +import downloadExcel from "assets/images/downloadExcel.svg"; import noProjects from "assets/images/noProjects.png"; import statusTimeTask from "assets/images/statusTimeTask.svg"; @@ -305,8 +305,8 @@ export const Tracker = () => {

Сверка пройдена

- # -

Скачать Exel отчет

+ # +

Скачать Excel-отчет

diff --git a/src/pages/Tracker/tracker.scss b/src/pages/Tracker/tracker.scss index 2109e746..f562aa2a 100644 --- a/src/pages/Tracker/tracker.scss +++ b/src/pages/Tracker/tracker.scss @@ -43,7 +43,7 @@ max-width: 1160px; width: 100%; background: #e1fccf; - border-radius: 12px; + border-radius: 12px 12px 0 0; margin: 0 auto; position: relative; height: 60px; @@ -124,8 +124,7 @@ &__content { width: 100%; background: #ffffff; - padding: 30px 0; - margin-bottom: 10px; + padding: 20px 0; &__wrapper { max-width: 1160px; @@ -354,7 +353,7 @@ border: 1px solid #e3e2e2; padding: 2px 6px; position: relative; - max-width: 220px; + max-width: 190px; width: 100%; @media (max-width: 915px) { @@ -830,9 +829,7 @@ max-height: 100px; overflow: hidden; text-overflow: ellipsis; - display: -webkit-box; -webkit-line-clamp: 3; - -webkit-box-orient: vertical; } span { @@ -868,6 +865,7 @@ column-gap: 10px; align-items: center; pointer-events: none; + margin-top: 5px; &__more { cursor: pointer; @@ -898,7 +896,7 @@ display: flex; align-items: center; column-gap: 5px; - margin-bottom: 8px; + margin-top: 3px; p { font-weight: 500; @@ -927,7 +925,6 @@ display: flex; align-items: center; column-gap: 5px; - margin-bottom: 8px; p { font-weight: 500; @@ -939,12 +936,16 @@ font-weight: 500; font-size: 14px; } + + img { + margin-top: -2px; + width: 18px; + } } &__executor { display: flex; align-items: center; - margin-top: 2px; font-size: 14px; font-weight: 500; column-gap: 5px; @@ -967,7 +968,7 @@ flex-wrap: wrap; column-gap: 6px; row-gap: 3px; - margin: 5px 0 8px; + margin: 3px 0; .tag-item { padding: 3px 10px; diff --git a/src/pages/ViewReport/ViewReport.jsx b/src/pages/ViewReport/ViewReport.jsx index e94114bc..c2ae1acf 100644 --- a/src/pages/ViewReport/ViewReport.jsx +++ b/src/pages/ViewReport/ViewReport.jsx @@ -1,6 +1,9 @@ import React, { useEffect, useState } from "react"; +import { useDispatch } from "react-redux"; import { Link, useParams } from "react-router-dom"; +import { setEditReport } from "@redux/reportSlice"; + import { apiRequest } from "@api/request"; import { @@ -20,6 +23,7 @@ import arrow from "assets/icons/arrows/left-arrow.png"; import "./viewReport.scss"; export const ViewReport = () => { + const dispatch = useDispatch(); const params = useParams(); const [previousReportDay] = useState(new Date(params.date)); const [nextReportDay] = useState(new Date(params.date)); @@ -32,6 +36,7 @@ export const ViewReport = () => { const [currentDay] = useState(new Date()); const [loader, setLoader] = useState(false); const [deleteLoader, setDeleteLoader] = useState(false); + const [reportInfo, setReportInfo] = useState({}); function getReportFromDate(day) { setLoader(true); @@ -41,6 +46,7 @@ export const ViewReport = () => { apiRequest(`reports/find-by-date?user_id=${params.id}&date=${day}`).then( (res) => { let spendTime = 0; + setReportInfo(res[0]); setTaskId(res[0]?.id); for (const item of res) { if (item.difficulties) { @@ -127,7 +133,17 @@ export const ViewReport = () => { {localStorage.getItem("role_status") !== "18" && (
- + dispatch(setEditReport(reportInfo))} + className={ + taskText.length + ? "view-report__bar__edit" + : "view-report__bar__edit disable" + } + > + Редактировать + {deleteLoader ? ( ) : ( diff --git a/src/pages/ViewReport/viewReport.scss b/src/pages/ViewReport/viewReport.scss index ce695d36..326921d5 100644 --- a/src/pages/ViewReport/viewReport.scss +++ b/src/pages/ViewReport/viewReport.scss @@ -73,9 +73,18 @@ } &__edit { + color: #000000; + font-size: 15px; + font-weight: 500; + line-height: 32px; + padding: 8px 24px; background: #e1fccf; border-radius: 44px; border: none; + + &:hover { + color: #000000; + } } &__delete { diff --git a/src/redux/reportSlice.js b/src/redux/reportSlice.js index 0e3e85c5..fdb916c7 100644 --- a/src/redux/reportSlice.js +++ b/src/redux/reportSlice.js @@ -4,7 +4,8 @@ const initialState = { dateSelected: "", reportDate: "", requestDates: "", - sendRequest: "" + sendRequest: "", + editReport: "" }; export const reportSlice = createSlice({ @@ -22,12 +23,20 @@ export const reportSlice = createSlice({ }, setSendRequest: (state, action) => { state.sendRequest = action.payload; + }, + setEditReport: (state, action) => { + state.editReport = action.payload; } } }); -export const { dateSelected, setReportDate, setRequestDate, setSendRequest } = - reportSlice.actions; +export const { + dateSelected, + setReportDate, + setRequestDate, + setSendRequest, + setEditReport +} = reportSlice.actions; export const selectDate = (state) => state.report.dateSelected; @@ -37,4 +46,6 @@ export const getRequestDates = (state) => state.report.requestDates; export const getSendRequest = (state) => state.report.sendRequest; +export const getEditReport = (state) => state.report.editReport; + export default reportSlice.reducer;