Files
minicrm/public/users-doc.js
2026-01-27 21:47:05 +05:00

161 lines
6.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// users.js - Управление пользователями
let users = [];
let allUsers = [];
let filteredUsers = [];
let selectedUsers = [];
let editSelectedUsers = [];
let copySelectedUsers = [];
async function loadUsers() {
try {
const response = await fetch('/api/users');
users = await response.json();
allUsers = users;
// Фильтруем только секретарей
filteredUsers = users.filter(user => user.role === 'secretary');
renderUsersChecklist();
renderEditUsersChecklist();
renderCopyUsersChecklist();
populateFilterDropdowns();
} catch (error) {
console.error('Ошибка загрузки пользователей:', error);
}
}
function populateFilterDropdowns() {
const creatorFilter = document.getElementById('creator-filter');
const assigneeFilter = document.getElementById('assignee-filter');
creatorFilter.innerHTML = '<option value="">Все заказчики</option>';
assigneeFilter.innerHTML = '<option value="">Все секретари</option>';
users.forEach(user => {
// Для заказчиков показываем всех пользователей
const creatorOption = document.createElement('option');
creatorOption.value = user.id;
creatorOption.textContent = `${user.name} (${user.login})`;
creatorFilter.appendChild(creatorOption);
// Для исполнителей показываем только секретарей
if (user.role === 'secretary') {
const assigneeOption = document.createElement('option');
assigneeOption.value = user.id;
assigneeOption.textContent = `${user.name} (${user.login}) - ldap_api`;
assigneeFilter.appendChild(assigneeOption);
}
});
}
function filterUsers() {
const search = document.getElementById('user-search').value.toLowerCase();
// Фильтруем только секретарей
filteredUsers = users.filter(user =>
user.role === 'secretary' && (
user.name.toLowerCase().includes(search) ||
user.login.toLowerCase().includes(search) ||
user.email.toLowerCase().includes(search)
)
);
renderUsersChecklist();
}
function filterEditUsers() {
const search = document.getElementById('edit-user-search').value.toLowerCase();
// Фильтруем только секретарей
const filtered = users.filter(user =>
user.role === 'secretary' && (
user.name.toLowerCase().includes(search) ||
user.login.toLowerCase().includes(search) ||
user.email.toLowerCase().includes(search)
)
);
renderEditUsersChecklist(filtered);
}
function filterCopyUsers() {
const search = document.getElementById('copy-user-search').value.toLowerCase();
// Фильтруем только секретарей
const filtered = users.filter(user =>
user.role === 'secretary' && (
user.name.toLowerCase().includes(search) ||
user.login.toLowerCase().includes(search) ||
user.email.toLowerCase().includes(search)
)
);
renderCopyUsersChecklist(filtered);
}
function renderUsersChecklist() {
const container = document.getElementById('users-checklist');
// Показываем только секретарей
container.innerHTML = filteredUsers
.filter(user => user.id !== currentUser.id && user.role === 'secretary')
.map(user => `
<div class="checkbox-item">
<label>
<input type="checkbox" name="assignedUsers" value="${user.id}"
onchange="toggleUserSelection(this, ${user.id})">
${user.name} (${user.email}) - <strong>localrootgroup</strong>
${user.auth_type === 'ldap' ? '<small style="color: #666;"> - LDAP</small>' : ''}
</label>
</div>
`).join('');
}
function renderEditUsersChecklist(filtered = users) {
const container = document.getElementById('edit-users-checklist');
// Показываем только секретарей
container.innerHTML = filtered
.filter(user => user.id !== currentUser.id && user.role === 'secretary')
.map(user => `
<div class="checkbox-item">
<label>
<input type="checkbox" name="assignedUsers" value="${user.id}"
onchange="toggleEditUserSelection(this, ${user.id})">
${user.name} (${user.email}) - <strong>localrootgroup</strong>
${user.auth_type === 'ldap' ? '<small style="color: #666;"> - LDAP</small>' : ''}
</label>
</div>
`).join('');
}
function renderCopyUsersChecklist(filtered = users) {
const container = document.getElementById('copy-users-checklist');
// Показываем только секретарей
container.innerHTML = filtered
.filter(user => user.id !== currentUser.id && user.role === 'secretary')
.map(user => `
<div class="checkbox-item">
<label>
<input type="checkbox" name="assignedUsers" value="${user.id}"
onchange="toggleCopyUserSelection(this, ${user.id})">
${user.name} (${user.email}) - <strong>localrootgroup</strong>
${user.auth_type === 'ldap' ? '<small style="color: #666;"> - LDAP</small>' : ''}
</label>
</div>
`).join('');
}
function toggleUserSelection(checkbox, userId) {
if (checkbox.checked) {
selectedUsers.push(userId);
} else {
selectedUsers = selectedUsers.filter(id => id !== userId);
}
}
function toggleEditUserSelection(checkbox, userId) {
if (checkbox.checked) {
editSelectedUsers.push(userId);
} else {
editSelectedUsers = editSelectedUsers.filter(id => id !== userId);
}
}
function toggleCopyUserSelection(checkbox, userId) {
if (checkbox.checked) {
copySelectedUsers.push(userId);
} else {
copySelectedUsers = copySelectedUsers.filter(id => id !== userId);
}
}