refactor(ServiceRequest): убрать «Ревизия», «Отдел» -> «Подразделение» из справочника
Tests / frontend-test (pull_request) Successful in 1m24s
Tests / frontend-test (pull_request) Successful in 1m24s
Поле «Ревизия» — из бумажной формы, в электронной не нужно (нет параллельных версий заявки, при возврате на доработку правится тот же элемент). Убрано из модели, манифеста и load.ts. «Отдел» переименован в «Подразделение» (заголовок общего столбца сайта Department — у большинства форм он уже так называется) и теперь, как организация и должность, подставляется из карточки заявителя (Employee/ByEmail.section/departmentId) при выборе/загрузке — а не только вручную через DepartmentPicker. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -91,7 +91,10 @@ const ServiceRequestForm: React.FC<IRequestFormProps> = ({
|
||||
RequesterName: user.displayName || '',
|
||||
RequestDate: prev.RequestDate || today
|
||||
}));
|
||||
// Организации/должность заявителя (Employee/ByEmail) — как в TmcTransfer.
|
||||
// Организации/должность/подразделение заявителя (Employee/ByEmail) — как в
|
||||
// TmcTransfer. Подразделение — только ПРЕДЛАГАЕТСЯ (prev.Department || …),
|
||||
// как и должность: справочник не всегда точен, дальше поле остаётся
|
||||
// редактируемым через DepartmentPicker.
|
||||
let alive = true;
|
||||
getEmployeeOrganizations(context, requesterEmail)
|
||||
.then((records) => {
|
||||
@@ -99,7 +102,9 @@ const ServiceRequestForm: React.FC<IRequestFormProps> = ({
|
||||
setData((prev) => ({
|
||||
...prev,
|
||||
Organization: formatEmployeeOrganizations(records),
|
||||
RequesterJobTitle: prev.RequesterJobTitle || records[0]?.position || ''
|
||||
RequesterJobTitle: prev.RequesterJobTitle || records[0]?.position || '',
|
||||
Department: prev.Department || records[0]?.section || '',
|
||||
DepartmentId: prev.DepartmentId || records[0]?.departmentId || ''
|
||||
}));
|
||||
}
|
||||
})
|
||||
@@ -109,7 +114,7 @@ const ServiceRequestForm: React.FC<IRequestFormProps> = ({
|
||||
};
|
||||
}, [editId, context]);
|
||||
|
||||
// Выбор другого заявителя подтягивает его ФИО, должность и организации.
|
||||
// Выбор другого заявителя подтягивает его ФИО, должность, подразделение и организации.
|
||||
const handleRequesterChange = (login: string): void => {
|
||||
setData((prev) => ({ ...prev, RequesterEmail: login }));
|
||||
if (!login) {
|
||||
@@ -122,6 +127,8 @@ const ServiceRequestForm: React.FC<IRequestFormProps> = ({
|
||||
...prev,
|
||||
RequesterName: records[0]?.fio || prev.RequesterName,
|
||||
RequesterJobTitle: records[0]?.position || prev.RequesterJobTitle,
|
||||
Department: records[0]?.section || prev.Department,
|
||||
DepartmentId: records[0]?.departmentId || prev.DepartmentId,
|
||||
Organization: formatEmployeeOrganizations(records)
|
||||
}))
|
||||
)
|
||||
|
||||
@@ -20,7 +20,6 @@ const SELECT_FIELDS = [
|
||||
'Department',
|
||||
'DepartmentId',
|
||||
'RequestDate',
|
||||
'Revision',
|
||||
'ProjectName',
|
||||
'ProjectId',
|
||||
'ProjectManager',
|
||||
@@ -81,7 +80,6 @@ export async function loadServiceRequest(itemId: number, listId?: string): Promi
|
||||
Department: (item.Department as string) || '',
|
||||
DepartmentId: (item.DepartmentId as string) || '',
|
||||
RequestDate: toDateInput(item.RequestDate),
|
||||
Revision: (item.Revision as string) || '',
|
||||
ProjectName: (item.ProjectName as string) || '',
|
||||
ProjectId: (item.ProjectId as string) || '',
|
||||
ProjectManager: (item.ProjectManager as string) || '',
|
||||
|
||||
@@ -95,14 +95,16 @@ export interface IFormData {
|
||||
RequesterJobTitle: string;
|
||||
/** Организации заявителя (`\n`-joined «Компания — должность»), read-only. */
|
||||
Organization: string;
|
||||
/** Отдел (справочник Dictionary/Departments) — на маршрут не влияет. */
|
||||
/**
|
||||
* Подразделение заявителя. Подставляется из его карточки (Employee/ByEmail),
|
||||
* дальше правится выбором из справочника Dictionary/Departments. На маршрут
|
||||
* согласования не влияет — он резолвится по проекту.
|
||||
*/
|
||||
Department: string;
|
||||
/** Id отдела из справочника; '' — если введён вручную. */
|
||||
/** Id подразделения из справочника; '' — если введено вручную. */
|
||||
DepartmentId: string;
|
||||
/** Дата заявки (YYYY-MM-DD). */
|
||||
RequestDate: string;
|
||||
/** Ревизия заявки: бумажная форма живёт ревизиями (00, U01, U02…). */
|
||||
Revision: string;
|
||||
|
||||
// --- Проект и работы ---
|
||||
ProjectName: string;
|
||||
@@ -182,8 +184,6 @@ export interface ISectionProps {
|
||||
onRemoveAnnexFile?: (rowIndex: number) => void;
|
||||
}
|
||||
|
||||
/** Ревизия по умолчанию — как в бумажной форме («Рев:00»). */
|
||||
export const DEFAULT_REVISION = '00';
|
||||
export const REQUESTER_PLACEHOLDER = 'Начните вводить Ф.И.О. заявителя…';
|
||||
|
||||
export const EMPTY_DATA: IFormData = {
|
||||
@@ -194,7 +194,6 @@ export const EMPTY_DATA: IFormData = {
|
||||
Department: '',
|
||||
DepartmentId: '',
|
||||
RequestDate: '',
|
||||
Revision: DEFAULT_REVISION,
|
||||
ProjectName: '',
|
||||
ProjectId: '',
|
||||
ProjectManager: '',
|
||||
|
||||
@@ -8,10 +8,9 @@
|
||||
{ "internalName": "RequesterName", "title": "Заявитель (Ф.И.О.)", "type": "Text" },
|
||||
{ "internalName": "RequesterJobTitle", "title": "Должность заявителя", "type": "Text" },
|
||||
{ "internalName": "Organization", "title": "Организация", "type": "Note" },
|
||||
{ "internalName": "Department", "title": "Отдел", "type": "Text" },
|
||||
{ "internalName": "DepartmentId", "title": "Id отдела (справочник)", "type": "Text" },
|
||||
{ "internalName": "Department", "title": "Подразделение", "type": "Text" },
|
||||
{ "internalName": "DepartmentId", "title": "Id подразделения (справочник)", "type": "Text" },
|
||||
{ "internalName": "RequestDate", "title": "Дата заявки", "type": "DateTime", "dateOnly": true },
|
||||
{ "internalName": "Revision", "title": "Ревизия", "type": "Text" },
|
||||
|
||||
{ "internalName": "ProjectName", "title": "Проект", "type": "Text" },
|
||||
{ "internalName": "ProjectId", "title": "Id проекта", "type": "Text" },
|
||||
|
||||
@@ -47,7 +47,7 @@ export const HeaderSection: React.FC<ISectionProps> = ({
|
||||
placeholder="Напр. вед. инженер ПТО"
|
||||
/>
|
||||
</FormField>
|
||||
<FormField label="Отдел" htmlFor="Department">
|
||||
<FormField label="Подразделение" htmlFor="Department">
|
||||
<DepartmentPicker
|
||||
id="Department"
|
||||
context={context}
|
||||
@@ -67,14 +67,6 @@ export const HeaderSection: React.FC<ISectionProps> = ({
|
||||
onChange={(v) => set('RequestDate', v)}
|
||||
/>
|
||||
</FormField>
|
||||
<FormField label="Ревизия" htmlFor="Revision">
|
||||
<TextInput
|
||||
id="Revision"
|
||||
value={data.Revision}
|
||||
onChange={(v) => set('Revision', v)}
|
||||
placeholder="00"
|
||||
/>
|
||||
</FormField>
|
||||
|
||||
<FormField label="Проект" htmlFor="ProjectName" required>
|
||||
<ProjectPicker
|
||||
|
||||
Reference in New Issue
Block a user