Секретарь

This commit is contained in:
2026-02-08 11:52:23 +05:00
parent e65a2b65cb
commit bb6090a135
3 changed files with 244 additions and 93 deletions

View File

@@ -650,7 +650,7 @@ async function loadTaskFiles(taskId) {
}
// Функция для выбора типа задачи
function selectTaskType(type) {
async function selectTaskType(type) {
// Убираем активный класс со всех кнопок
document.querySelectorAll('.task-type-btn').forEach(btn => {
btn.classList.remove('active');
@@ -666,8 +666,66 @@ function selectTaskType(type) {
updateTaskFormBasedOnType(type);
// Предлагаем заголовок по умолчанию
suggestDefaultTitle(type);
// Для типа "document" перезагружаем пользователей с фильтрацией
if (type === 'document') {
await reloadUsersForDocumentType();
} else {
// Для других типов перезагружаем обычных пользователей
await loadUsers();
}
}
// функция для перезагрузки пользователей для типа "document"
async function reloadUsersForDocumentType() {
try {
const response = await fetch('/api/users');
const allUsersData = await response.json();
// Фильтруем только пользователей из группы "Секретарь"
const secretaries = [];
for (const user of allUsersData) {
if (user.id === currentUser.id) continue;
const groups = await getUserGroups(user.id);
const hasSecretaryGroup = groups.some(group =>
group.name === 'Секретарь' ||
(typeof group === 'string' && group.includes('Секретарь'))
);
if (hasSecretaryGroup) {
secretaries.push(user);
}
}
users = secretaries;
filteredUsers = [...users];
renderUsersChecklist();
} catch (error) {
console.error('Ошибка загрузки секретарей:', error);
}
}
// Используем кэширование, чтобы не делать лишние запросы
async function getUserGroups(userId) {
// Используем кэширование, чтобы не делать лишние запросы
if (!window.userGroupsCache) window.userGroupsCache = {};
if (window.userGroupsCache[userId]) {
return window.userGroupsCache[userId];
}
try {
const response = await fetch(`/api2/idusers/user/${userId}/groups`);
if (!response.ok) return [];
const groups = await response.json();
window.userGroupsCache[userId] = groups || [];
return window.userGroupsCache[userId];
} catch (error) {
console.error('Ошибка получения групп пользователя:', error);
return [];
}
}
// Функция для предложения заголовка по умолчанию
function suggestDefaultTitle(type) {
const titleField = document.getElementById('title');
@@ -695,6 +753,7 @@ function suggestDefaultTitle(type) {
// Функция для обновления формы в зависимости от типа задачи
function updateTaskFormBasedOnType(type) {
const userSearchField = document.getElementById('user-search');
const taskTypeInfo = document.getElementById('task-type-info');
// Устанавливаем заголовки placeholder для поиска исполнителей
const defaultPlaceholders = {
@@ -713,7 +772,22 @@ function updateTaskFormBasedOnType(type) {
if (userSearchField) {
userSearchField.placeholder = defaultPlaceholders[type] || 'Поиск исполнителей...';
}
// Показываем информацию о типе задачи
if (taskTypeInfo) {
const typeInfo = {
'regular': 'Доступны все пользователи в зависимости от ваших прав',
'document': 'Доступны только пользователи из группы "Секретарь"',
'it': 'Доступны ИТ специалисты',
'ahch': 'Доступны сотрудники АХЧ',
'psychologist': 'Доступны психологи',
'speech_therapist': 'Доступны логопеды',
'hr': 'Доступны сотрудники кадровой службы',
'certificate': 'Доступны секретари и завучи',
'e_journal': 'Доступны администраторы электронного журнала'
};
taskTypeInfo.textContent = typeInfo[type] || '';
}
// Показываем/скрываем дополнительные поля в зависимости от типа
showAdditionalFieldsForType(type);
}