добавлени и удаление пользователей ииз задачи
This commit is contained in:
138
public/ui.js
138
public/ui.js
@@ -86,7 +86,9 @@ function renderTasks() {
|
|||||||
<button class="copy-btn" onclick="openTaskChat(${task.id})" title="Открыть чат">💬</button>
|
<button class="copy-btn" onclick="openTaskChat(${task.id})" title="Открыть чат">💬</button>
|
||||||
<button class="add-file-btn" onclick="openAddFileModal(${task.id})" title="Добавить файл">📎</button>
|
<button class="add-file-btn" onclick="openAddFileModal(${task.id})" title="Добавить файл">📎</button>
|
||||||
${currentUser && currentUser.login === 'minicrm' ? `<button class="edit-btn" onclick="openEditModal(${task.id})" title="Редактировать">✏️</button>` : ''}
|
${currentUser && currentUser.login === 'minicrm' ? `<button class="edit-btn" onclick="openEditModal(${task.id})" title="Редактировать">✏️</button>` : ''}
|
||||||
${currentUser && currentUser.login === 'minicrm' ? `<button class="manage-assignees-btn" onclick="openManageAssigneesModal(${task.id})" title="Управление исполнителями">👥</button>` : ''}
|
${currentUser && currentUser.login === 'kalugin.o' ? `<button class="manage-assignees-btn" onclick="openManageAssigneesModal(${task.id})" title="Управление исполнителями">👥</button>` : ''}
|
||||||
|
${currentUser && currentUser.login === 'kalugin.o' ? `<button class="manage-assignees-btn" onclick="assignAdd_openModal(${task.id})" title="Управление исполнителями">👥Добавить</button>` : ''}
|
||||||
|
${currentUser && currentUser.login === 'kalugin.o' ? `<button class="manage-assignees-btn" onclick="assignRemove_openModal(${task.id})" title="Управление исполнителями">👥Удалить</button>` : ''}
|
||||||
<button class="copy-btn" onclick="openCopyModal(${task.id})" title="Создать копию">📋</button>
|
<button class="copy-btn" onclick="openCopyModal(${task.id})" title="Создать копию">📋</button>
|
||||||
${currentUser && currentUser.login === 'minicrm' ? `<button class="rework-btn" onclick="openReworkModal(${task.id})" title="Вернуть на доработку">🔄</button>` : ''}
|
${currentUser && currentUser.login === 'minicrm' ? `<button class="rework-btn" onclick="openReworkModal(${task.id})" title="Вернуть на доработку">🔄</button>` : ''}
|
||||||
${currentUser && currentUser.login === 'minicrm' ? `<button class="close-btn" onclick="closeTask(${task.id})" title="Закрыть задачу">🔒</button>` : ''}
|
${currentUser && currentUser.login === 'minicrm' ? `<button class="close-btn" onclick="closeTask(${task.id})" title="Закрыть задачу">🔒</button>` : ''}
|
||||||
@@ -1297,6 +1299,140 @@ async function openManageAssigneesModal(taskId) {
|
|||||||
alert('Ошибка загрузки данных пользователей');
|
alert('Ошибка загрузки данных пользователей');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// ========== ДОБАВЛЕНИЯ ИСПОЛНИТЕЛЕЙ ==========
|
||||||
|
async function assignAdd_openModal(taskId) {
|
||||||
|
// Находим задачу
|
||||||
|
const task = tasks.find(t => t.id === taskId);
|
||||||
|
if (!task) {
|
||||||
|
alert('Задача не найдена');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Проверяем права
|
||||||
|
if (!canUserEditTask(task)) {
|
||||||
|
alert('У вас нет прав для управления исполнителями этой задачи');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Получаем текущих исполнителей
|
||||||
|
const currentAssignees = task.assignments || [];
|
||||||
|
|
||||||
|
// Получаем доступных для добавления исполнителей
|
||||||
|
try {
|
||||||
|
const response = await fetch(`/api/tasks/${taskId}/available-assignees`);
|
||||||
|
const availableUsers = await response.json();
|
||||||
|
|
||||||
|
// Создаем модальное окно
|
||||||
|
const modalHtml = `
|
||||||
|
<div class="modal" id="manage-assignees-modal">
|
||||||
|
<div class="modal-content" style="max-width: 800px;">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h3>Управление исполнителями задачи: "${task.title}"</h3>
|
||||||
|
<span class="close" onclick="closeManageAssigneesModal()">×</span>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<div id="add-assignee-tab" class="tab-content active">
|
||||||
|
<h4>Добавить исполнителей</h4>
|
||||||
|
<div class="user-search-box">
|
||||||
|
<input type="text" id="available-users-search" placeholder="Поиск пользователей..."
|
||||||
|
oninput="filterAvailableUsers()">
|
||||||
|
</div>
|
||||||
|
<div class="users-checklist" id="available-users-list" style="max-height: 200px; overflow-y: auto;">
|
||||||
|
${availableUsers.map(user => `
|
||||||
|
<div class="checkbox-item">
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" class="available-user-checkbox" value="${user.id}">
|
||||||
|
${user.name}
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
`).join('')}
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn-cancel" onclick="closeManageAssigneesModal()">Отмена</button>
|
||||||
|
<button type="button" class="btn-primary" onclick="addAssignees(${taskId})">Добавить выбранных</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
|
||||||
|
// Добавляем модальное окно в DOM
|
||||||
|
const modalContainer = document.createElement('div');
|
||||||
|
modalContainer.innerHTML = modalHtml;
|
||||||
|
document.body.appendChild(modalContainer);
|
||||||
|
|
||||||
|
// Показываем модальное окно
|
||||||
|
setTimeout(() => {
|
||||||
|
document.getElementById('manage-assignees-modal').style.display = 'block';
|
||||||
|
}, 10);
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Ошибка загрузки данных:', error);
|
||||||
|
alert('Ошибка загрузки данных пользователей');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ========== УДАЛЕНИЯ ИСПОЛНИТЕЛЕЙ ==========
|
||||||
|
async function assignRemove_openModal(taskId) {
|
||||||
|
// Находим задачу
|
||||||
|
const task = tasks.find(t => t.id === taskId);
|
||||||
|
if (!task) {
|
||||||
|
alert('Задача не найдена');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Проверяем права
|
||||||
|
if (!canUserEditTask(task)) {
|
||||||
|
alert('У вас нет прав для управления исполнителями этой задачи');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Получаем текущих исполнителей и фильтруем удаленных
|
||||||
|
const currentAssignees = (task.assignments || []).filter(assignee =>
|
||||||
|
assignee.status !== 'deleted' && assignee.status !== 'удален'
|
||||||
|
);
|
||||||
|
// Создаем модальное окно
|
||||||
|
const modalHtml = `
|
||||||
|
<div class="modal" id="manage-assignees-modal">
|
||||||
|
<div class="modal-content" style="max-width: 800px;">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h3>Управление исполнителями задачи: "${task.title}"</h3>
|
||||||
|
<span class="close" onclick="closeManageAssigneesModal()">×</span>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<div id="remove-assignee-tab" class="tab-content">
|
||||||
|
<h4>Удалить исполнителей</h4>
|
||||||
|
${currentAssignees.length > 0 ? `
|
||||||
|
<div class="users-checklist" style="max-height: 200px; overflow-y: auto;">
|
||||||
|
${currentAssignees.map(assignee => `
|
||||||
|
<div class="checkbox-item">
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" class="remove-user-checkbox" value="${assignee.user_id}">
|
||||||
|
${assignee.user_name} (${assignee.user_login})
|
||||||
|
<small>Статус: ${getStatusText(assignee.status)}</small>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
`).join('')}
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn-cancel" onclick="closeManageAssigneesModal()">Отмена</button>
|
||||||
|
<button type="button" class="btn-danger" onclick="removeAssignees(${taskId})">Удалить выбранных</button>
|
||||||
|
</div>
|
||||||
|
` : '<p>Нет исполнителей для удаления</p>'}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
|
||||||
|
// Добавляем модальное окно в DOM
|
||||||
|
const modalContainer = document.createElement('div');
|
||||||
|
modalContainer.innerHTML = modalHtml;
|
||||||
|
document.body.appendChild(modalContainer);
|
||||||
|
|
||||||
|
// Показываем модальное окно
|
||||||
|
setTimeout(() => {
|
||||||
|
document.getElementById('manage-assignees-modal').style.display = 'block';
|
||||||
|
}, 10);
|
||||||
|
}
|
||||||
|
|
||||||
// Функция для переключения вкладок в модальном окне
|
// Функция для переключения вкладок в модальном окне
|
||||||
function switchManageTab(tabName) {
|
function switchManageTab(tabName) {
|
||||||
|
|||||||
Reference in New Issue
Block a user