должность

This commit is contained in:
2026-02-09 10:30:06 +05:00
parent 859bfc739f
commit 2ca9562f02
3 changed files with 70 additions and 7 deletions

View File

@@ -149,12 +149,12 @@ async function createTask(event) {
for (const userId of selectedUsers) { for (const userId of selectedUsers) {
const groups = await getUserGroups(userId); const groups = await getUserGroups(userId);
const hasSecretaryGroup = groups.some(group => const hasSecretaryGroup = groups.some(group =>
group.name === 'IT поддержка' || group.name === 'ИТ специалист' ||
(typeof group === 'string' && group.includes('IT поддержка')) (typeof group === 'string' && group.includes('ИТ специалист'))
); );
if (!hasSecretaryGroup) { if (!hasSecretaryGroup) {
alert('Для задачи можно выбирать только пользователей из группы "IT поддержка"'); alert('Для задачи можно выбирать только пользователей из группы "ИТ специалист"');
return; return;
} }
} }

View File

@@ -670,6 +670,20 @@ async function selectTaskType(type) {
// Для типа "document" перезагружаем пользователей с фильтрацией // Для типа "document" перезагружаем пользователей с фильтрацией
if (type === 'document') { if (type === 'document') {
await reloadUsersForDocumentType(); 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 { } else {
// Для других типов перезагружаем обычных пользователей // Для других типов перезагружаем обычных пользователей
await loadUsers(); await loadUsers();
@@ -705,6 +719,38 @@ async function reloadUsersForDocumentType() {
console.error('Ошибка загрузки секретарей:', error); 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) { async function getUserGroups(userId) {
// Используем кэширование, чтобы не делать лишние запросы // Используем кэширование, чтобы не делать лишние запросы
@@ -1311,7 +1357,6 @@ function closeManageAssigneesModal() {
} }
} }
// Обновленная функция рендеринга файлов с группировкой по пользователям
// Обновленная функция рендеринга файлов с группировкой по пользователям // Обновленная функция рендеринга файлов с группировкой по пользователям
function renderGroupedFiles(task) { function renderGroupedFiles(task) {
if (!task.files || task.files.length === 0) { if (!task.files || task.files.length === 0) {

View File

@@ -68,6 +68,23 @@ function filterAssignableUsers(allUsers, taskType = 'regular') {
return hasSecretaryGroup; 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;
});
}
// Для других типов задач - обычная фильтрация // Для других типов задач - обычная фильтрация
// Администратор видит всех пользователей // Администратор видит всех пользователей
@@ -257,8 +274,9 @@ function renderUsersChecklist() {
<input type="checkbox" name="assignedUsers" value="${user.id}" <input type="checkbox" name="assignedUsers" value="${user.id}"
onchange="toggleUserSelection(this, ${user.id})"> onchange="toggleUserSelection(this, ${user.id})">
${user.name} ${user.name}
${document.getElementById('task-type').value === 'document' ? ${document.getElementById('task-type').value === 'document' ? '(Секретарь)' : ''}
'<small style="color: #666; margin-left: 5px;">(Секретарь)</small>' : ''} ${document.getElementById('task-type').value === 'it' ? '(Админ)' : ''}
${document.getElementById('task-type').value === 'certificate' ? '(Администрация)' : ''}
</label> </label>
</div> </div>
`).join(''); `).join('');