v3 - add task status controls
This commit is contained in:
parent
98987d20ad
commit
684d95dba1
134
index.html
134
index.html
@ -60,8 +60,17 @@ body{font:15px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Inter,system-ui,s
|
||||
.card{background:#1a1f2e;border-radius:12px;padding:24px;margin-bottom:16px}
|
||||
.card h4{margin-bottom:16px}
|
||||
.card p{color:var(--gray-500);margin-bottom:8px}
|
||||
.actions{display:flex;gap:8px;align-items:center}
|
||||
.employee-select{background:#2a2f3e;color:var(--white);border:1px solid rgba(255,255,255,0.1);border-radius:6px;padding:6px 10px;font-size:12px;cursor:pointer}
|
||||
.btn-status{background:rgba(0,229,255,0.2);color:var(--cyan);border:none;border-radius:6px;padding:6px 12px;font-size:12px;font-weight:600;cursor:pointer;transition:all 0.2s}
|
||||
.btn-status:hover{background:var(--cyan);color:var(--ink)}
|
||||
.notification{position:fixed;top:24px;right:24px;background:#1a1f2e;border:1px solid var(--cyan);border-radius:12px;padding:16px 24px;z-index:1000;display:none;animation:slideIn 0.3s ease}
|
||||
.notification.show{display:block}
|
||||
.notification .title{font-weight:600;margin-bottom:8px;color:var(--cyan)}
|
||||
.notification .message{color:var(--gray-500);font-size:14px}
|
||||
@keyframes slideIn{from{transform:translateX(100%);opacity:0}to{transform:translateX(0);opacity:1}}
|
||||
@media(max-width:1024px){.sidebar{display:none}.main{margin-left:0}.stats{grid-template-columns:repeat(2,1fr)}.grid{grid-template-columns:1fr}}
|
||||
@media(max-width:640px){.stats{grid-template-columns:1fr}.header{flex-direction:column;align-items:flex-start;gap:8px}}
|
||||
@media(max-width:640px){.stats{grid-template-columns:1fr}.header{flex-direction:column;align-items:flex-start;gap:8px}.actions{flex-wrap:wrap}}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@ -108,52 +117,118 @@ body{font:15px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Inter,system-ui,s
|
||||
<div class="grid">
|
||||
<div class="panel">
|
||||
<h4>Активные задачи</h4>
|
||||
<div class="task">
|
||||
<div class="task" data-id="1">
|
||||
<div class="status overdue"></div>
|
||||
<div class="info">
|
||||
<div class="title">Закупить канцелярию для отдела</div>
|
||||
<div class="meta">Исполнитель: Айгуль • Дедлайн: 18 июня</div>
|
||||
</div>
|
||||
<div class="actions">
|
||||
<select class="employee-select">
|
||||
<option value="">Назначить</option>
|
||||
<option value="Айгуль">Айгуль</option>
|
||||
<option value="Руслан">Руслан</option>
|
||||
<option value="Динара">Динара</option>
|
||||
<option value="Алексей">Алексей</option>
|
||||
</select>
|
||||
<button class="btn-status" data-status="progress">В работу</button>
|
||||
<button class="btn-status" data-status="done">Выполнено</button>
|
||||
</div>
|
||||
<div class="priority high">Срочно</div>
|
||||
</div>
|
||||
<div class="task">
|
||||
<div class="task" data-id="2">
|
||||
<div class="status overdue"></div>
|
||||
<div class="info">
|
||||
<div class="title">Ремонт кондиционера в переговорной</div>
|
||||
<div class="meta">Исполнитель: Руслан • Дедлайн: 17 июня</div>
|
||||
</div>
|
||||
<div class="actions">
|
||||
<select class="employee-select">
|
||||
<option value="">Назначить</option>
|
||||
<option value="Айгуль">Айгуль</option>
|
||||
<option value="Руслан">Руслан</option>
|
||||
<option value="Динара">Динара</option>
|
||||
<option value="Алексей">Алексей</option>
|
||||
</select>
|
||||
<button class="btn-status" data-status="progress">В работу</button>
|
||||
<button class="btn-status" data-status="done">Выполнено</button>
|
||||
</div>
|
||||
<div class="priority high">Срочно</div>
|
||||
</div>
|
||||
<div class="task">
|
||||
<div class="task" data-id="3">
|
||||
<div class="status overdue"></div>
|
||||
<div class="info">
|
||||
<div class="title">Подготовить акт осмотра помещения</div>
|
||||
<div class="meta">Исполнитель: Динара • Дедлайн: 18 июня</div>
|
||||
</div>
|
||||
<div class="actions">
|
||||
<select class="employee-select">
|
||||
<option value="">Назначить</option>
|
||||
<option value="Айгуль">Айгуль</option>
|
||||
<option value="Руслан">Руслан</option>
|
||||
<option value="Динара">Динара</option>
|
||||
<option value="Алексей">Алексей</option>
|
||||
</select>
|
||||
<button class="btn-status" data-status="progress">В работу</button>
|
||||
<button class="btn-status" data-status="done">Выполнено</button>
|
||||
</div>
|
||||
<div class="priority high">Срочно</div>
|
||||
</div>
|
||||
<div class="task">
|
||||
<div class="task" data-id="4">
|
||||
<div class="status progress"></div>
|
||||
<div class="info">
|
||||
<div class="title">Заказать уборку офиса на пятницу</div>
|
||||
<div class="meta">Исполнитель: Айгуль • Дедлайн: 20 июня</div>
|
||||
</div>
|
||||
<div class="actions">
|
||||
<select class="employee-select">
|
||||
<option value="">Назначить</option>
|
||||
<option value="Айгуль">Айгуль</option>
|
||||
<option value="Руслан">Руслан</option>
|
||||
<option value="Динара">Динара</option>
|
||||
<option value="Алексей">Алексей</option>
|
||||
</select>
|
||||
<button class="btn-status" data-status="progress">В работу</button>
|
||||
<button class="btn-status" data-status="done">Выполнено</button>
|
||||
</div>
|
||||
<div class="priority medium">Средний</div>
|
||||
</div>
|
||||
<div class="task">
|
||||
<div class="task" data-id="5">
|
||||
<div class="status progress"></div>
|
||||
<div class="info">
|
||||
<div class="title">Оформить пропуска для подрядчиков</div>
|
||||
<div class="meta">Исполнитель: Руслан • Дедлайн: 21 июня</div>
|
||||
</div>
|
||||
<div class="actions">
|
||||
<select class="employee-select">
|
||||
<option value="">Назначить</option>
|
||||
<option value="Айгуль">Айгуль</option>
|
||||
<option value="Руслан">Руслан</option>
|
||||
<option value="Динара">Динара</option>
|
||||
<option value="Алексей">Алексей</option>
|
||||
</select>
|
||||
<button class="btn-status" data-status="progress">В работу</button>
|
||||
<button class="btn-status" data-status="done">Выполнено</button>
|
||||
</div>
|
||||
<div class="priority medium">Средний</div>
|
||||
</div>
|
||||
<div class="task">
|
||||
<div class="task" data-id="6">
|
||||
<div class="status done"></div>
|
||||
<div class="info">
|
||||
<div class="title">Согласовать смету на ремонт</div>
|
||||
<div class="meta">Исполнитель: Динара • Выполнено</div>
|
||||
</div>
|
||||
<div class="actions">
|
||||
<select class="employee-select">
|
||||
<option value="">Назначить</option>
|
||||
<option value="Айгуль">Айгуль</option>
|
||||
<option value="Руслан">Руслан</option>
|
||||
<option value="Динара">Динара</option>
|
||||
<option value="Алексей">Алексей</option>
|
||||
</select>
|
||||
<button class="btn-status" data-status="progress">В работу</button>
|
||||
<button class="btn-status" data-status="done">Выполнено</button>
|
||||
</div>
|
||||
<div class="priority low">Низкий</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -389,6 +464,11 @@ body{font:15px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Inter,system-ui,s
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<div class="notification" id="notification">
|
||||
<div class="title">Уведомление</div>
|
||||
<div class="message" id="notification-message"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.querySelectorAll('.sidebar nav a').forEach(link => {
|
||||
link.addEventListener('click', function(e) {
|
||||
@ -396,6 +476,46 @@ document.querySelectorAll('.sidebar nav a').forEach(link => {
|
||||
this.classList.add('active');
|
||||
});
|
||||
});
|
||||
|
||||
function showNotification(message) {
|
||||
const notification = document.getElementById('notification');
|
||||
const notificationMessage = document.getElementById('notification-message');
|
||||
notificationMessage.textContent = message;
|
||||
notification.classList.add('show');
|
||||
setTimeout(() => {
|
||||
notification.classList.remove('show');
|
||||
}, 3000);
|
||||
}
|
||||
|
||||
document.querySelectorAll('.btn-status').forEach(btn => {
|
||||
btn.addEventListener('click', function() {
|
||||
const task = this.closest('.task');
|
||||
const status = this.dataset.status;
|
||||
const title = task.querySelector('.title').textContent;
|
||||
const statusDot = task.querySelector('.status');
|
||||
|
||||
statusDot.className = 'status ' + (status === 'done' ? 'done' : 'progress');
|
||||
|
||||
const statusText = status === 'done' ? 'выполнена' : 'взята в работу';
|
||||
showNotification('Задача "' + title + '" ' + statusText);
|
||||
});
|
||||
});
|
||||
|
||||
document.querySelectorAll('.employee-select').forEach(select => {
|
||||
select.addEventListener('change', function() {
|
||||
const task = this.closest('.task');
|
||||
const title = task.querySelector('.title').textContent;
|
||||
const employee = this.value;
|
||||
|
||||
if (employee) {
|
||||
const meta = task.querySelector('.meta');
|
||||
const deadline = meta.textContent.split('•')[1] || '';
|
||||
meta.textContent = 'Исполнитель: ' + employee + ' •' + deadline;
|
||||
|
||||
showNotification('Задача "' + title + '" назначена на ' + employee);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
</body>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user