From 2ca9562f02b4254dc9582b87a9710c9e610cdfd1 Mon Sep 17 00:00:00 2001 From: kalugin66 Date: Mon, 9 Feb 2026 10:30:06 +0500 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=BB=D0=B6=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/main.js | 6 +++--- public/ui.js | 47 ++++++++++++++++++++++++++++++++++++++++++++++- public/users.js | 24 +++++++++++++++++++++--- 3 files changed, 70 insertions(+), 7 deletions(-) diff --git a/public/main.js b/public/main.js index 084bf28..ac96fd8 100644 --- a/public/main.js +++ b/public/main.js @@ -149,12 +149,12 @@ async function createTask(event) { for (const userId of selectedUsers) { const groups = await getUserGroups(userId); const hasSecretaryGroup = groups.some(group => - group.name === 'IT поддержка' || - (typeof group === 'string' && group.includes('IT поддержка')) + group.name === 'ИТ специалист' || + (typeof group === 'string' && group.includes('ИТ специалист')) ); if (!hasSecretaryGroup) { - alert('Для задачи можно выбирать только пользователей из группы "IT поддержка"'); + alert('Для задачи можно выбирать только пользователей из группы "ИТ специалист"'); return; } } diff --git a/public/ui.js b/public/ui.js index eb363a9..8119fa3 100644 --- a/public/ui.js +++ b/public/ui.js @@ -670,6 +670,20 @@ async function selectTaskType(type) { // Для типа "document" перезагружаем пользователей с фильтрацией if (type === 'document') { await reloadUsersForDocumentType(); + } else if (type === 'it') { + await reloadUsersForType('ИТ специалист'); + } else if (type === 'ahch') { + await reloadUsersForType('АХЧ'); + } else if (type === 'psychologist') { + await reloadUsersForType('психолог'); + } else if (type === 'speech_therapist') { + await reloadUsersForType('логопед'); + } else if (type === 'hr') { + await reloadUsersForType('кадровичка'); + } else if (type === 'certificate') { + await reloadUsersForType('Администрация'); + } else if (type === 'e_journal') { + await reloadUsersForType('Админ ЭЖ'); } else { // Для других типов перезагружаем обычных пользователей await loadUsers(); @@ -705,6 +719,38 @@ async function reloadUsersForDocumentType() { console.error('Ошибка загрузки секретарей:', error); } } +// функция для перезагрузки пользователей для типа "в переменной" +async function reloadUsersForType(TypegroupName) { + try { + const response = await fetch('/api/users'); + const allUsersData = await response.json(); + + const TypegroupUsers = []; + for (const user of allUsersData) { + if (user.id === currentUser.id) continue; + + const groups = await getUserGroups(user.id); + const hasTargetGroup = groups.some(group => + group.name === TypegroupName || + (typeof group === 'string' && group.includes(TypegroupName)) + ); + + if (hasTargetGroup) { + TypegroupUsers.push(user); + } + } + + users = TypegroupUsers; + filteredUsers = [...users]; + renderUsersChecklist(); + + return filteredUsers; + + } catch (error) { + console.error(`Ошибка загрузки пользователей группы "${TypegroupName}":`, error); + throw error; + } +} // Используем кэширование, чтобы не делать лишние запросы async function getUserGroups(userId) { // Используем кэширование, чтобы не делать лишние запросы @@ -1311,7 +1357,6 @@ function closeManageAssigneesModal() { } } -// Обновленная функция рендеринга файлов с группировкой по пользователям // Обновленная функция рендеринга файлов с группировкой по пользователям function renderGroupedFiles(task) { if (!task.files || task.files.length === 0) { diff --git a/public/users.js b/public/users.js index 6447866..8c1b2ac 100644 --- a/public/users.js +++ b/public/users.js @@ -68,6 +68,23 @@ function filterAssignableUsers(allUsers, taskType = 'regular') { return hasSecretaryGroup; }); } + // Для задач типа "it" - только пользователи из группы "ИТ специалист" + if (taskType === 'it') { + return allUsers.filter(async (user) => { + if (user.id === currentUser.id) return false; + + // Получаем группы пользователя + const groups = await getUserGroups(user.id); + + // Проверяем, есть ли группа "Секретарь" + const hasSecretaryGroup = groups.some(group => + group.name === 'ИТ специалист' || + (typeof group === 'string' && group.includes('ИТ специалист')) + ); + + return hasSecretaryGroup; + }); + } // Для других типов задач - обычная фильтрация // Администратор видит всех пользователей @@ -256,9 +273,10 @@ function renderUsersChecklist() { `).join('');