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