должность
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
47
public/ui.js
47
public/ui.js
@@ -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) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Для других типов задач - обычная фильтрация
|
// Для других типов задач - обычная фильтрация
|
||||||
// Администратор видит всех пользователей
|
// Администратор видит всех пользователей
|
||||||
@@ -256,9 +273,10 @@ function renderUsersChecklist() {
|
|||||||
<label>
|
<label>
|
||||||
<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('');
|
||||||
|
|||||||
Reference in New Issue
Block a user