From 4a8ee3c46ca55161efc73c71f0d7d10ea7cecffb Mon Sep 17 00:00:00 2001 From: kalugin66 Date: Sun, 14 Dec 2025 16:41:43 +0500 Subject: [PATCH] r --- public/index.html | 2 +- public/script.js | 138 ++++++++++++++++++++++++++-------------------- public/style.css | 54 ++++++++++++++++++ 3 files changed, 132 insertions(+), 62 deletions(-) diff --git a/public/index.html b/public/index.html index f2c55a5..4d667db 100644 --- a/public/index.html +++ b/public/index.html @@ -47,7 +47,7 @@
-
+

Все задачи

diff --git a/public/script.js b/public/script.js index f842c80..599c7d6 100644 --- a/public/script.js +++ b/public/script.js @@ -2,7 +2,7 @@ let currentUser = null; let users = []; let tasks = []; let filteredUsers = []; - +let expandedTasks = new Set(); document.addEventListener('DOMContentLoaded', function() { checkAuth(); setupEventListeners(); @@ -284,6 +284,7 @@ function renderTasks() { } container.innerHTML = filteredTasks.map(task => { + const isExpanded = expandedTasks.has(task.id); const overallStatus = getTaskOverallStatus(task); const statusClass = getStatusClass(overallStatus); const isDeleted = task.status === 'deleted'; @@ -296,78 +297,93 @@ function renderTasks() { return `
-
- ${!isDeleted && !isClosed ? ` - ${canEdit ? `` : ''} - - ${canEdit ? `` : ''} - ${canEdit ? `` : ''} - ${canEdit ? `` : ''} - ` : ''} - ${isClosed && canEdit ? ` - - ` : ''} - ${isDeleted && currentUser.role === 'admin' ? ` - - ` : ''} -
-
-
- ${task.title} - ${isDeleted ? 'Удалена' : ''} - ${isClosed ? 'Закрыта' : ''} - ${isCopy ? 'Копия' : ''} - ${timeLeftInfo ? `${timeLeftInfo.text}` : ''} - ${userRole} +
+
+ Задача №${task.id} + ${task.title} + ${isDeleted ? 'Удалена' : ''} + ${isClosed ? 'Закрыта' : ''} + ${isCopy ? 'Копия' : ''} + ${timeLeftInfo ? `${timeLeftInfo.text}` : ''} + ${userRole} +
+
${getStatusText(overallStatus)}
+
+ ▼ +
-
${getStatusText(overallStatus)}
- ${isCopy && task.original_task_title ? ` -
- Оригинал: "${task.original_task_title}" (создал: ${task.original_creator_name}) +
+
+ ${!isDeleted && !isClosed ? ` + ${canEdit ? `` : ''} + + ${canEdit ? `` : ''} + ${canEdit ? `` : ''} + ${canEdit ? `` : ''} + ` : ''} + ${isClosed && canEdit ? ` + + ` : ''} + ${isDeleted && currentUser.role === 'admin' ? ` + + ` : ''}
- ` : ''} - -
${task.description || 'Нет описания'}
- - ${task.rework_comment ? ` -
- Комментарий к доработке: ${task.rework_comment} + + ${isCopy && task.original_task_title ? ` +
+ Оригинал: "${task.original_task_title}" (создал: ${task.original_creator_name}) +
+ ` : ''} + +
${task.description || 'Нет описания'}
+ + ${task.rework_comment ? ` +
+ Комментарий к доработке: ${task.rework_comment} +
+ ` : ''} + + ${task.start_date || task.due_date ? ` +
+
Создана: ${formatDateTime(task.start_date || task.created_at)}
+ ${task.due_date ? `
Выполнить до: ${formatDateTime(task.due_date)}
` : ''} +
+ ` : ''} + +
+ Исполнители: + ${task.assignments && task.assignments.length > 0 ? + task.assignments.map(assignment => renderAssignment(assignment, task.id, canEdit)).join('') : + '
Не назначены
' + }
- ` : ''} - - ${task.start_date || task.due_date ? ` -
-
Создана: ${formatDateTime(task.start_date || task.created_at)}
- ${task.due_date ? `
Выполнить до: ${formatDateTime(task.due_date)}
` : ''} + +
+ Файлы: +
Загрузка...
+
+ +
+ Создана: ${formatDateTime(task.created_at)} | Автор: ${task.creator_name} + ${task.deleted_at ? `
Удалена: ${formatDateTime(task.deleted_at)}` : ''} + ${task.closed_at ? `
Закрыта: ${formatDateTime(task.closed_at)}` : ''}
- ` : ''} - -
- Исполнители: - ${task.assignments && task.assignments.length > 0 ? - task.assignments.map(assignment => renderAssignment(assignment, task.id, canEdit)).join('') : - '
Не назначены
' - } -
- -
- Файлы: -
Загрузка...
-
- -
- Создана: ${formatDateTime(task.created_at)} | Автор: ${task.creator_name} - ${task.deleted_at ? `
Удалена: ${formatDateTime(task.deleted_at)}` : ''} - ${task.closed_at ? `
Закрыта: ${formatDateTime(task.closed_at)}` : ''}
`; }).join(''); } - +function toggleTask(taskId) { + if (expandedTasks.has(taskId)) { + expandedTasks.delete(taskId); + } else { + expandedTasks.add(taskId); + } + renderTasks(); +} function getTimeLeftInfo(task) { if (!task.due_date || task.closed_at) return null; diff --git a/public/style.css b/public/style.css index dc5e415..9f4a8e9 100644 --- a/public/style.css +++ b/public/style.css @@ -1273,4 +1273,58 @@ button.reopen-btn:hover { border: 1px solid #f5c6cb; border-left: 5px solid #e74c3c; text-align: center; +} +.task-number { + background: #3498db; + color: white; + padding: 3px 8px; + border-radius: 12px; + font-size: 0.8rem; + margin-right: 10px; + font-weight: bold; +} + +.task-header { + display: flex; + justify-content: space-between; + align-items: flex-start; + margin-bottom: 0; + gap: 20px; +} + +.task-header .task-title { + font-size: 1.2rem; + font-weight: 700; + color: #2c3e50; + flex: 1; + line-height: 1.4; + cursor: pointer; + padding: 15px; + border-radius: 10px; + background: linear-gradient(135deg, rgba(52, 152, 219, 0.1), rgba(52, 152, 219, 0.05)); + transition: all 0.3s ease; +} + +.task-header .task-title:hover { + background: linear-gradient(135deg, rgba(52, 152, 219, 0.15), rgba(52, 152, 219, 0.1)); + transform: translateY(-2px); +} + +.task-header .task-title .expand-icon { + font-size: 0.8rem; + color: #6c757d; + margin-left: auto; + padding-left: 15px; +} + +.task-content { + padding: 20px; + border-top: 1px solid #e9ecef; + margin-top: 10px; + animation: fadeIn 0.3s ease; +} + +@keyframes fadeIn { + from { opacity: 0; transform: translateY(-10px); } + to { opacity: 1; transform: translateY(0); } } \ No newline at end of file