142 lines
4.9 KiB
JavaScript
142 lines
4.9 KiB
JavaScript
// 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];
|
||
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.cloneNode(true));
|
||
|
||
const assigneeOption = creatorOption.cloneNode(true);
|
||
assigneeFilter.appendChild(assigneeOption);
|
||
});
|
||
}
|
||
|
||
function filterUsers() {
|
||
const search = document.getElementById('user-search').value.toLowerCase();
|
||
filteredUsers = users.filter(user =>
|
||
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.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.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)
|
||
.map(user => `
|
||
<div class="checkbox-item">
|
||
<label>
|
||
<input type="checkbox" name="assignedUsers" value="${user.id}"
|
||
onchange="toggleUserSelection(this, ${user.id})">
|
||
${user.name} (${user.email})
|
||
${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)
|
||
.map(user => `
|
||
<div class="checkbox-item">
|
||
<label>
|
||
<input type="checkbox" name="assignedUsers" value="${user.id}"
|
||
onchange="toggleEditUserSelection(this, ${user.id})">
|
||
${user.name} (${user.email})
|
||
${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)
|
||
.map(user => `
|
||
<div class="checkbox-item">
|
||
<label>
|
||
<input type="checkbox" name="assignedUsers" value="${user.id}"
|
||
onchange="toggleCopyUserSelection(this, ${user.id})">
|
||
${user.name} (${user.email})
|
||
${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);
|
||
}
|
||
} |