From 69ab08825fe3ac30ced302ec0a7c7afbd7895a98 Mon Sep 17 00:00:00 2001 From: "gorbenko.pavel" Date: Fri, 21 Aug 2026 17:09:04 +0500 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D1=82=D1=8C=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B5=D0=BA=D0=BE=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B4=D0=B0=D1=82=D0=B5=D0=BB=D1=8F=20=D1=80=D0=B5=D0=B4=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=B8=D1=80=D1=83=D0=B5=D0=BC=D1=8B=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ReferrerDepartment остаётся автозаполняемым из профиля (SPS-Department), но больше не read-only — как ReferrerPosition, это подстановка-фолбэк, которую можно поправить вручную. При смене рекомендателя профиль больше не затирает поле пустым значением, если в новом профиле отдел не указан. Co-Authored-By: Claude Sonnet 5 --- src/webparts/requestPortal/forms/Referral/README.md | 9 ++++----- .../requestPortal/forms/Referral/ReferralForm.tsx | 12 ++++-------- .../forms/Referral/sections/ReferrerSection.tsx | 9 +-------- 3 files changed, 9 insertions(+), 21 deletions(-) diff --git a/src/webparts/requestPortal/forms/Referral/README.md b/src/webparts/requestPortal/forms/Referral/README.md index 21d9c05..3cb8676 100644 --- a/src/webparts/requestPortal/forms/Referral/README.md +++ b/src/webparts/requestPortal/forms/Referral/README.md @@ -29,11 +29,10 @@ рекомендателя — кандидата в тенанте нет, резолвить условия по нему нечем. - **Автоподстановка при создании:** рекомендатель = текущий пользователь, его должность и подразделение — из профиля SharePoint (`SPS-JobTitle`/`SPS-Department` - через `approval.getProfileFields`, как в «Обходном листе»), дата подачи = - сегодня. При выборе другого рекомендателя должность и подразделение - подтягиваются заново. **Подразделение — только для чтения** (в отличие от - должности не редактируется вручную: не участвует в условиях маршрута, поэтому - риска сломать согласование нет, и расхождение с профилем не нужно). + через `approval.getProfileFields`), дата подачи = сегодня. При выборе другого + рекомендателя должность и подразделение подтягиваются заново — оба поля + остаются **редактируемыми** (фолбэк, если профиль не синхронизирован или + подразделение указано не так, как нужно для этой рекомендации). «Подразделение / Объект» вакансии (`VacancyDepartment`) — отдельное поле, свободный текст: это подразделение, КУДА рекомендуют, а не рекомендателя. - **Условное поле:** «Откуда знаете» = «Другое» → появляется обязательное diff --git a/src/webparts/requestPortal/forms/Referral/ReferralForm.tsx b/src/webparts/requestPortal/forms/Referral/ReferralForm.tsx index ff18641..dc724a5 100644 --- a/src/webparts/requestPortal/forms/Referral/ReferralForm.tsx +++ b/src/webparts/requestPortal/forms/Referral/ReferralForm.tsx @@ -127,14 +127,10 @@ const ReferralForm: React.FC = ({ }, [editId]); // Выбор другого рекомендателя подтягивает его должность и подразделение из - // профиля. Подразделение поле только для чтения (см. ReferrerSection) — в - // отличие от должности его нельзя поправить вручную, если профиль не - // синхронизирован: колонка не участвует в условиях маршрута, риска сломать - // согласование нет. + // профиля — оба поля остаются редактируемыми (фолбэк, если профиль не + // синхронизирован), поэтому не затираем то, что уже введено, пустым значением. const handleReferrerChange = (login: string): void => { - // Подразделение — только для чтения, поэтому сбрасываем сразу (а не ждём - // ответа профиля): иначе до резолва в поле виден отдел ПРЕЖНЕГО рекомендателя. - setData((prev) => ({ ...prev, Referrer: login, ReferrerDepartment: '' })); + setData((prev) => ({ ...prev, Referrer: login })); if (!login) { return; } @@ -144,7 +140,7 @@ const ReferralForm: React.FC = ({ setData((prev) => ({ ...prev, ReferrerPosition: profile.jobTitle || prev.ReferrerPosition, - ReferrerDepartment: profile.department + ReferrerDepartment: profile.department || prev.ReferrerDepartment })) ) .catch(() => undefined); diff --git a/src/webparts/requestPortal/forms/Referral/sections/ReferrerSection.tsx b/src/webparts/requestPortal/forms/Referral/sections/ReferrerSection.tsx index 68bbfec..b4b91fc 100644 --- a/src/webparts/requestPortal/forms/Referral/sections/ReferrerSection.tsx +++ b/src/webparts/requestPortal/forms/Referral/sections/ReferrerSection.tsx @@ -2,12 +2,6 @@ import * as React from 'react'; import { CollapseSection, FormField, TextInput, PhoneInput, PeopleField } from '../../../shared/ui'; import { ISectionProps, REFERRER_PLACEHOLDER } from '../model'; -// Подразделение подтягивается автоматически при выборе рекомендателя (см. -// ReferralForm.handleReferrerChange — SharePoint User Profile, SPS-Department) — -// свободный ввод здесь намеренно убран, чтобы не расходиться с профилем (как в -// «Обходном листе»). -const NOOP = (): void => undefined; - /** Секция 1: кто рекомендует — дата подачи, сам рекомендатель и его контакты. */ export const ReferrerSection: React.FC = ({ data, set, context, onReferrerChange }) => ( @@ -33,8 +27,7 @@ export const ReferrerSection: React.FC = ({ data, set, context, o set('ReferrerDepartment', v)} placeholder="Подставится автоматически по выбранному сотруднику" />