fix: переименования полей в заявках на подбор и прием,
Tests / frontend-test (push) Successful in 1m18s

This commit is contained in:
Тимур Городецкий
2026-09-11 17:48:13 +05:00
parent 564921d56d
commit 7712a5ced4
4 changed files with 77 additions and 49 deletions
@@ -18,7 +18,7 @@ function parseJsonArray<T>(raw: unknown): T[] {
const SCALAR_FIELDS: (keyof IFormData)[] = [ const SCALAR_FIELDS: (keyof IFormData)[] = [
'Phone', 'HireType', 'HireReplacedEmployee', 'Project', 'ProjectId', 'ProjectCode', 'Phone', 'HireType', 'HireReplacedEmployee', 'Project', 'ProjectId', 'ProjectCode',
'HireCandidateName', 'HireHireDate', 'Position', 'WorkKind', 'HireCandidateName', 'HireHireDate', 'Position', 'WorkKind',
'Department', 'DepartmentId', 'SiteLocation', 'PpeHeight', 'PpeClothingSize', 'PpeShoeSize', 'ProbationPeriod', 'Department', 'SiteLocation', 'PpeHeight', 'PpeClothingSize', 'PpeShoeSize', 'ProbationPeriod',
'SalaryProbation', 'SalaryAfterProbation', 'WorkSchedule', 'WorkScheduleOther', 'SalaryProbation', 'SalaryAfterProbation', 'WorkSchedule', 'WorkScheduleOther',
'AgencyName', 'AgencyTerms', 'AgencyName', 'AgencyTerms',
'SelectionRequestId', 'SelectionRequestListId', 'SelectionRequestCode' 'SelectionRequestId', 'SelectionRequestListId', 'SelectionRequestCode'
@@ -43,16 +43,8 @@ export interface IFormData {
HireHireDate: string; HireHireDate: string;
Position: string; Position: string;
WorkKind: string; WorkKind: string;
/** /** Отдел/Участок — свободный текст, чисто информационное, на маршрут согласования не влияет. */
* Подразделение по справочнику (Dictionary/Departments, см.
* shared/dictionary/DepartmentPicker) — как в WorkplaceSetup/RecruitingSelection:
* ручной выбор, чисто информационное, на маршрут согласования НЕ влияет.
* Заменило прежнее свободнотекстовое поле «Отдел / участок» (колонка SiteName
* в SP осталась в схеме нетронутой — просто больше не используется формой).
*/
Department: string; Department: string;
/** Id отдела из справочника; '' — если введён вручную без выбора из списка. */
DepartmentId: string;
SiteLocation: string; SiteLocation: string;
// СИЗ // СИЗ
PpeHeight: string; PpeHeight: string;
@@ -96,7 +88,6 @@ export const EMPTY_DATA: IFormData = {
Position: '', Position: '',
WorkKind: '', WorkKind: '',
Department: '', Department: '',
DepartmentId: '',
SiteLocation: '', SiteLocation: '',
PpeHeight: '', PpeHeight: '',
PpeClothingSize: '', PpeClothingSize: '',
@@ -1,9 +1,8 @@
import * as React from 'react'; import * as React from 'react';
import { CollapseSection, FormField, TextInput } from '../../../shared/ui'; import { CollapseSection, FormField, TextInput } from '../../../shared/ui';
import { DepartmentPicker } from '../../../shared/dictionary';
import { ISectionProps } from '../model'; import { ISectionProps } from '../model';
export const CandidateSection: React.FC<ISectionProps> = ({ data, set, context }) => ( export const CandidateSection: React.FC<ISectionProps> = ({ data, set }) => (
<CollapseSection title="Кандидат" icon="people"> <CollapseSection title="Кандидат" icon="people">
<FormField label="Ф.И.О. кандидата" htmlFor="HireCandidateName" required full> <FormField label="Ф.И.О. кандидата" htmlFor="HireCandidateName" required full>
<TextInput id="HireCandidateName" value={data.HireCandidateName} onChange={(v) => set('HireCandidateName', v)} /> <TextInput id="HireCandidateName" value={data.HireCandidateName} onChange={(v) => set('HireCandidateName', v)} />
@@ -17,16 +16,8 @@ export const CandidateSection: React.FC<ISectionProps> = ({ data, set, context }
<FormField label="Вид работ" htmlFor="WorkKind"> <FormField label="Вид работ" htmlFor="WorkKind">
<TextInput id="WorkKind" value={data.WorkKind} onChange={(v) => set('WorkKind', v)} /> <TextInput id="WorkKind" value={data.WorkKind} onChange={(v) => set('WorkKind', v)} />
</FormField> </FormField>
<FormField label="Подразделение" htmlFor="Department"> <FormField label="Отдел/Участок" htmlFor="Department">
<DepartmentPicker <TextInput id="Department" value={data.Department} onChange={(v) => set('Department', v)} />
id="Department"
context={context}
value={data.Department}
onChange={(name, id) => {
set('Department', name);
set('DepartmentId', id);
}}
/>
</FormField> </FormField>
<FormField label="Местоположение" htmlFor="SiteLocation"> <FormField label="Местоположение" htmlFor="SiteLocation">
<TextInput id="SiteLocation" value={data.SiteLocation} onChange={(v) => set('SiteLocation', v)} /> <TextInput id="SiteLocation" value={data.SiteLocation} onChange={(v) => set('SiteLocation', v)} />
@@ -1,46 +1,84 @@
import * as React from 'react'; import * as React from "react";
import { CollapseSection, FormField, TextInput, TextArea, MoneyInput, Toggle, Select, PeopleField, PeopleFieldMulti } from '../../../shared/ui'; import {
import { MultiChoiceField } from './MultiChoiceField'; CollapseSection,
FormField,
TextInput,
TextArea,
MoneyInput,
Toggle,
Select,
PeopleField,
PeopleFieldMulti,
} from "../../../shared/ui";
import { MultiChoiceField } from "./MultiChoiceField";
import { import {
ISectionProps, ISectionProps,
PERSON_PLACEHOLDER, PERSON_PLACEHOLDER,
OTHER_VALUE, OTHER_VALUE,
WORK_SCHEDULE_OPTIONS, WORK_SCHEDULE_OPTIONS,
WORK_HOURS_OPTIONS, WORK_HOURS_OPTIONS,
WORKPLACE_PROVISION_OPTIONS WORKPLACE_PROVISION_OPTIONS,
} from '../model'; } from "../model";
export const ConditionsSection: React.FC<ISectionProps> = ({ data, set, context }) => ( export const ConditionsSection: React.FC<ISectionProps> = ({
data,
set,
context,
}) => (
<CollapseSection title="5. Условия работы" icon="chart"> <CollapseSection title="5. Условия работы" icon="chart">
<FormField label="5.1 Ставка на ИС" htmlFor="RateProbation"> <FormField label="5.1 Ставка на ИС" htmlFor="RateProbation">
<MoneyInput id="RateProbation" value={data.RateProbation} onChange={(v) => set('RateProbation', v)} /> <MoneyInput
id="RateProbation"
value={data.RateProbation}
onChange={(v) => set("RateProbation", v)}
/>
</FormField> </FormField>
<FormField label="5.2 Ставка после ИС" htmlFor="RateAfterProbation"> <FormField label="5.2 Ставка после ИС" htmlFor="RateAfterProbation">
<MoneyInput <MoneyInput
id="RateAfterProbation" id="RateAfterProbation"
value={data.RateAfterProbation} value={data.RateAfterProbation}
onChange={(v) => set('RateAfterProbation', v)} onChange={(v) => set("RateAfterProbation", v)}
/> />
</FormField> </FormField>
<FormField label="5.3 Премии" htmlFor="Awards" full> <FormField label="5.3 Премии" htmlFor="Awards" full>
<TextArea id="Awards" value={data.Awards} onChange={(v) => set('Awards', v)} /> <TextArea
id="Awards"
value={data.Awards}
onChange={(v) => set("Awards", v)}
/>
</FormField> </FormField>
<FormField label="5.4 Бонусы" htmlFor="Bonuses" full> <FormField label="5.4 Бонусы" htmlFor="Bonuses" full>
<TextArea id="Bonuses" value={data.Bonuses} onChange={(v) => set('Bonuses', v)} /> <TextArea
id="Bonuses"
value={data.Bonuses}
onChange={(v) => set("Bonuses", v)}
/>
</FormField> </FormField>
<FormField label="5.5 Компенсационный пакет" htmlFor="CompensationPackage" full> <FormField
<TextArea id="CompensationPackage" value={data.CompensationPackage} onChange={(v) => set('CompensationPackage', v)} /> label="5.5 Компенсационный пакет"
htmlFor="CompensationPackage"
full
>
<TextArea
id="CompensationPackage"
value={data.CompensationPackage}
onChange={(v) => set("CompensationPackage", v)}
/>
</FormField> </FormField>
<FormField label="5.6 Сдельная оплата труда"> <FormField label="5.6 Сдельная оплата труда">
<Toggle checked={data.PieceworkPay} onChange={(v) => set('PieceworkPay', v)} onLabel="Да" /> <Toggle
checked={data.PieceworkPay}
onChange={(v) => set("PieceworkPay", v)}
onLabel="Да"
/>
</FormField> </FormField>
<FormField label="5.7 Режим работы" htmlFor="WorkSchedule"> <FormField label="5.7 График работы" htmlFor="WorkSchedule">
<Select <Select
id="WorkSchedule" id="WorkSchedule"
value={data.WorkSchedule} value={data.WorkSchedule}
onChange={(v) => { onChange={(v) => {
set('WorkSchedule', v); set("WorkSchedule", v);
if (v !== OTHER_VALUE) set('WorkScheduleOther', ''); if (v !== OTHER_VALUE) set("WorkScheduleOther", "");
}} }}
options={WORK_SCHEDULE_OPTIONS} options={WORK_SCHEDULE_OPTIONS}
placeholder="— выберите —" placeholder="— выберите —"
@@ -51,7 +89,7 @@ export const ConditionsSection: React.FC<ISectionProps> = ({ data, set, context
<TextInput <TextInput
id="WorkScheduleOther" id="WorkScheduleOther"
value={data.WorkScheduleOther} value={data.WorkScheduleOther}
onChange={(v) => set('WorkScheduleOther', v)} onChange={(v) => set("WorkScheduleOther", v)}
/> />
</FormField> </FormField>
)} )}
@@ -60,8 +98,8 @@ export const ConditionsSection: React.FC<ISectionProps> = ({ data, set, context
id="WorkHours" id="WorkHours"
value={data.WorkHours} value={data.WorkHours}
onChange={(v) => { onChange={(v) => {
set('WorkHours', v); set("WorkHours", v);
if (v !== OTHER_VALUE) set('WorkHoursOther', ''); if (v !== OTHER_VALUE) set("WorkHoursOther", "");
}} }}
options={WORK_HOURS_OPTIONS} options={WORK_HOURS_OPTIONS}
placeholder="— выберите —" placeholder="— выберите —"
@@ -69,33 +107,41 @@ export const ConditionsSection: React.FC<ISectionProps> = ({ data, set, context
</FormField> </FormField>
{data.WorkHours === OTHER_VALUE && ( {data.WorkHours === OTHER_VALUE && (
<FormField label="Время работы (другое)" htmlFor="WorkHoursOther"> <FormField label="Время работы (другое)" htmlFor="WorkHoursOther">
<TextInput id="WorkHoursOther" value={data.WorkHoursOther} onChange={(v) => set('WorkHoursOther', v)} /> <TextInput
id="WorkHoursOther"
value={data.WorkHoursOther}
onChange={(v) => set("WorkHoursOther", v)}
/>
</FormField> </FormField>
)} )}
<FormField label="5.9 Материальная ответственность"> <FormField label="5.9 Материальная ответственность">
<Toggle <Toggle
checked={data.MaterialResponsibility} checked={data.MaterialResponsibility}
onChange={(v) => set('MaterialResponsibility', v)} onChange={(v) => set("MaterialResponsibility", v)}
onLabel="Да" onLabel="Да"
/> />
</FormField> </FormField>
<FormField label="5.10 Обеспечение рабочего места" full> <FormField label="5.10 Обеспечение рабочего места" full>
<MultiChoiceField <MultiChoiceField
value={data.WorkplaceProvision} value={data.WorkplaceProvision}
onChange={(v) => set('WorkplaceProvision', v)} onChange={(v) => set("WorkplaceProvision", v)}
options={WORKPLACE_PROVISION_OPTIONS} options={WORKPLACE_PROVISION_OPTIONS}
allowOther allowOther
placeholder="Выберите категорию" placeholder="Выберите категорию"
/> />
</FormField> </FormField>
<FormField label="5.11 Реферальная программа"> <FormField label="5.11 Реферальная программа">
<Toggle checked={data.ReferralProgram} onChange={(v) => set('ReferralProgram', v)} onLabel="Да" /> <Toggle
checked={data.ReferralProgram}
onChange={(v) => set("ReferralProgram", v)}
onLabel="Да"
/>
</FormField> </FormField>
<FormField label="5.12 Предполагаемый наставник"> <FormField label="5.12 Предполагаемый наставник">
<PeopleField <PeopleField
context={context} context={context}
value={data.ProposedMentor} value={data.ProposedMentor}
onChange={(v) => set('ProposedMentor', v)} onChange={(v) => set("ProposedMentor", v)}
placeholder={PERSON_PLACEHOLDER} placeholder={PERSON_PLACEHOLDER}
/> />
</FormField> </FormField>
@@ -103,7 +149,7 @@ export const ConditionsSection: React.FC<ISectionProps> = ({ data, set, context
<PeopleField <PeopleField
context={context} context={context}
value={data.DirectManager} value={data.DirectManager}
onChange={(v) => set('DirectManager', v)} onChange={(v) => set("DirectManager", v)}
placeholder={PERSON_PLACEHOLDER} placeholder={PERSON_PLACEHOLDER}
/> />
</FormField> </FormField>
@@ -111,7 +157,7 @@ export const ConditionsSection: React.FC<ISectionProps> = ({ data, set, context
<PeopleFieldMulti <PeopleFieldMulti
context={context} context={context}
value={data.HiringDecisionMaker} value={data.HiringDecisionMaker}
onChange={(v) => set('HiringDecisionMaker', v)} onChange={(v) => set("HiringDecisionMaker", v)}
placeholder={PERSON_PLACEHOLDER} placeholder={PERSON_PLACEHOLDER}
/> />
</FormField> </FormField>