fix: добавил прочие вложения на форму заявки на прием
Tests / frontend-test (push) Successful in 1m12s

This commit is contained in:
Тимур Городецкий
2026-08-24 15:47:57 +05:00
parent 0b2961a741
commit df33608f42
2 changed files with 18 additions and 12 deletions
@@ -35,11 +35,12 @@
и в просмотре показывается ссылкой «№ код ↗», которая открывает
`RecruitingSelectionView` в **новой вкладке** (deep-link через `routeUrl`,
rptype=recruiting-selection, rpid/rplist из сохранённых полей).
- **Вложения по категориям** — две области: «Удостоверение» и «Резюме» (в каждую
можно несколько файлов). Вложения SP плоские, поэтому категория кодируется
префиксом в имени файла «<Категория> — <имя>» (`attachmentCategories.ts`); при
показе группируются и префикс срезается. Старые файлы без префикса показываются
блоком «Прочие вложения», чтобы не исчезали.
- **Вложения по категориям** — три зоны загрузки: «Удостоверение», «Резюме» и
«Прочие вложения» (в каждую можно несколько файлов). Вложения SP плоские, поэтому
категория кодируется префиксом в имени файла «<Категория> — <имя>»
(`attachmentCategories.ts`); при показе группируются и префикс срезается.
«Прочие» грузятся БЕЗ префикса — это та же «незакатегоризированная» корзина, куда
же попадают и старые файлы, загруженные до разделения (не исчезают).
- Печать — общий механизм (без «Вложений»).
## Секции формы
@@ -70,9 +70,11 @@ const RecruitingHireForm: React.FC<IRequestFormProps> = ({
editListId
}) => {
const [data, setData] = useState<IFormData>(EMPTY_DATA);
// Вложения — две категории: удостоверение и резюме (см. attachmentCategories.ts).
// Вложения — три зоны: удостоверение, резюме и прочие (см. attachmentCategories.ts).
// «Прочие» грузятся без префикса — это та же «незакатегоризированная» корзина.
const [idFiles, setIdFiles] = useState<File[]>([]);
const [resumeFiles, setResumeFiles] = useState<File[]>([]);
const [otherFiles, setOtherFiles] = useState<File[]>([]);
const [existingAttachments, setExistingAttachments] = useState<IAttachmentInfo[]>([]);
// При открытии на редактирование (editId) — сразу известен, иначе появится
// после первого сохранения.
@@ -221,15 +223,17 @@ const RecruitingHireForm: React.FC<IRequestFormProps> = ({
if (code) {
setRequestCode(code);
}
// Категорию кодируем префиксом в имени файла (SP-вложения плоские).
// Категорию кодируем префиксом в имени файла (SP-вложения плоские); прочие — без префикса.
const filesToUpload = [
...prefixFiles(idFiles, ATT_CATEGORY_ID),
...prefixFiles(resumeFiles, ATT_CATEGORY_RESUME)
...prefixFiles(resumeFiles, ATT_CATEGORY_RESUME),
...otherFiles
];
if (filesToUpload.length > 0) {
await uploadAttachments(writeListId || dataListTitle(FORM_ID), id, filesToUpload); // файлы — после создания элемента
setIdFiles([]); // выгруженные файлы убираем, чтобы пересохранение не дублировало
setResumeFiles([]);
setOtherFiles([]);
setExistingAttachments(await getAttachments(writeListId || dataListTitle(FORM_ID), id)); // показать добавленные
}
if (onSaved) {
@@ -340,11 +344,12 @@ const RecruitingHireForm: React.FC<IRequestFormProps> = ({
)}
<FileDropzone files={resumeFiles} onChange={setResumeFiles} />
</FormField>
{otherAttachments.length > 0 && (
<FormField label="Прочие вложения" full>
{otherAttachments.length > 0 && (
<AttachmentList items={otherAttachments} onRemove={handleRemoveAttachment} />
</FormField>
)}
<FileDropzone files={otherFiles} onChange={setOtherFiles} />
</FormField>
</CollapseSection>
)}