Секретарь
This commit is contained in:
80
public/ui.js
80
public/ui.js
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user