ознакомление

This commit is contained in:
2026-03-26 17:20:04 +05:00
parent 3a866762a5
commit f5f4f12ff1
9 changed files with 360 additions and 7 deletions

View File

@@ -7,6 +7,8 @@ let filteredUsers = [];
let selectedUsers = [];
let editSelectedUsers = [];
let copySelectedUsers = [];
let acquaintanceSelectedUsers = []; // исполнители для ознакомления
let acquaintanceSelectedAuthor = null; // выбранный автор для ознакомления
// Переменные для пользовательских списков
let userLists = [];
@@ -662,6 +664,76 @@ async function saveListFromModal() {
closeListModal();
}
// ==================== ФУНКЦИИ ДЛЯ ОЗНАКОМЛЕНИЯ (выбор исполнителей) ====================
function renderAcquaintanceUsersChecklist(filtered = users) {
const container = document.getElementById('acquaintance-users-checklist');
if (!container) return;
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="toggleAcquaintanceUserSelection(this, ${user.id})"
${acquaintanceSelectedUsers.includes(user.id) ? 'checked' : ''}>
${escapeHtml(user.name)} (${user.login})
</label>
</div>
`).join('');
}
function toggleAcquaintanceUserSelection(checkbox, userId) {
if (checkbox.checked) {
if (!acquaintanceSelectedUsers.includes(userId)) acquaintanceSelectedUsers.push(userId);
} else {
acquaintanceSelectedUsers = acquaintanceSelectedUsers.filter(id => id !== userId);
}
}
async function filterAcquaintanceUsers() {
const search = document.getElementById('acquaintance-user-search')?.value.toLowerCase() || '';
let filtered = users.filter(user =>
user.name.toLowerCase().includes(search) ||
user.login.toLowerCase().includes(search) ||
(user.email && user.email.toLowerCase().includes(search))
);
renderAcquaintanceUsersChecklist(filtered);
}
// ==================== ФУНКЦИИ ДЛЯ ВЫБОРА АВТОРА В ЗАДАЧЕ ОЗНАКОМЛЕНИЯ ====================
function renderAcquaintanceAuthorsChecklist(filtered = users) {
const container = document.getElementById('acquaintance-authors-checklist');
if (!container) return;
container.innerHTML = filtered
.filter(user => user.id !== currentUser?.id) // можно разрешить выбирать себя, если нужно
.map(user => `
<div class="checkbox-item">
<label>
<input type="radio" name="acquaintance-author" value="${user.id}"
onchange="toggleAcquaintanceAuthorSelection(this, ${user.id})"
${acquaintanceSelectedAuthor === user.id ? 'checked' : ''}>
${escapeHtml(user.name)} (${user.login})
</label>
</div>
`).join('');
}
function toggleAcquaintanceAuthorSelection(radio, userId) {
acquaintanceSelectedAuthor = radio.checked ? userId : null;
}
async function filterAcquaintanceAuthors() {
const search = document.getElementById('acquaintance-author-search')?.value.toLowerCase() || '';
let filtered = users.filter(user =>
user.name.toLowerCase().includes(search) ||
user.login.toLowerCase().includes(search) ||
(user.email && user.email.toLowerCase().includes(search))
);
renderAcquaintanceAuthorsChecklist(filtered);
}
// ==================== ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ ====================
function escapeHtml(text) {
@@ -705,6 +777,18 @@ window.closeListModal = closeListModal;
window.saveListFromModal = saveListFromModal;
window.filterListUsers = filterListUsers;
// Экспорт функций для ознакомления (исполнители)
window.renderAcquaintanceUsersChecklist = renderAcquaintanceUsersChecklist;
window.toggleAcquaintanceUserSelection = toggleAcquaintanceUserSelection;
window.filterAcquaintanceUsers = filterAcquaintanceUsers;
window.acquaintanceSelectedUsers = acquaintanceSelectedUsers;
// Экспорт функций для выбора автора
window.renderAcquaintanceAuthorsChecklist = renderAcquaintanceAuthorsChecklist;
window.toggleAcquaintanceAuthorSelection = toggleAcquaintanceAuthorSelection;
window.filterAcquaintanceAuthors = filterAcquaintanceAuthors;
window.acquaintanceSelectedAuthor = acquaintanceSelectedAuthor;
// Также экспортируем переменные, которые могут понадобиться в других скриптах
window.selectedUsers = selectedUsers;
window.editSelectedUsers = editSelectedUsers;