aho-panel/index.html

721 lines
32 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>АХО Панель управления</title>
<style>
:root{--ink:#0F1218;--cyan:#00E5FF;--cyan-50:#E8FCFF;--white:#fff;--gray-500:#5B6573;--gray-100:#F2F4F7;--red:#FF5252;--green:#4CAF50;--orange:#FF9800}
*{box-sizing:border-box;margin:0;padding:0}
body{font:15px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Inter,system-ui,sans-serif;color:var(--white);background:var(--ink)}
.sidebar{position:fixed;left:0;top:0;bottom:0;width:240px;background:#1a1f2e;padding:24px 0;z-index:100}
.sidebar h1{font-size:18px;font-weight:700;padding:0 24px;margin-bottom:32px;color:var(--cyan)}
.sidebar nav a{display:block;padding:12px 24px;color:var(--gray-500);text-decoration:none;font-weight:500;transition:all 0.2s}
.sidebar nav a:hover,.sidebar nav a.active{color:var(--white);background:rgba(255,255,255,0.05)}
.main{margin-left:240px;padding:32px}
.header{display:flex;justify-content:space-between;align-items:center;margin-bottom:32px}
.header h2{font-size:24px;font-weight:700}
.header .date{color:var(--gray-500)}
.section{margin-bottom:48px;scroll-margin-top:32px}
.section h3{font-size:20px;font-weight:600;margin-bottom:24px;padding-bottom:12px;border-bottom:1px solid rgba(255,255,255,0.1);color:var(--cyan)}
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;margin-bottom:32px}
.stat{background:#1a1f2e;border-radius:12px;padding:24px}
.stat .label{color:var(--gray-500);font-size:13px;margin-bottom:8px}
.stat .value{font-size:28px;font-weight:700}
.stat .value.red{color:var(--red)}
.stat .value.green{color:var(--green)}
.stat .value.orange{color:var(--orange)}
.stat .value.cyan{color:var(--cyan)}
.grid{display:grid;grid-template-columns:2fr 1fr;gap:24px}
.panel{background:#1a1f2e;border-radius:12px;padding:24px}
.panel h4{font-size:16px;font-weight:600;margin-bottom:20px;padding-bottom:12px;border-bottom:1px solid rgba(255,255,255,0.1)}
.task{display:flex;align-items:center;padding:12px 0;border-bottom:1px solid rgba(255,255,255,0.05)}
.task:last-child{border-bottom:none}
.task .status{width:8px;height:8px;border-radius:50%;margin-right:12px}
.task .status.done{background:var(--green)}
.task .status.progress{background:var(--orange)}
.task .status.overdue{background:var(--red)}
.task .info{flex:1}
.task .title{font-weight:500;margin-bottom:4px}
.task .meta{font-size:13px;color:var(--gray-500)}
.task .priority{font-size:12px;padding:4px 8px;border-radius:4px;font-weight:600}
.task .priority.high{background:rgba(255,82,82,0.2);color:var(--red)}
.task .priority.medium{background:rgba(255,152,0,0.2);color:var(--orange)}
.task .priority.low{background:rgba(76,175,80,0.2);color:var(--green)}
.employee{display:flex;align-items:center;padding:12px 0;border-bottom:1px solid rgba(255,255,255,0.05)}
.employee:last-child{border-bottom:none}
.employee .avatar{width:40px;height:40px;border-radius:50%;background:var(--cyan);display:flex;align-items:center;justify-content:center;font-weight:700;margin-right:12px;color:var(--ink)}
.employee .info{flex:1}
.employee .name{font-weight:500}
.employee .role{font-size:13px;color:var(--gray-500)}
.employee .tasks-count{font-size:13px;color:var(--cyan)}
.table{width:100%;border-collapse:collapse}
.table th,.table td{padding:12px;text-align:left;border-bottom:1px solid rgba(255,255,255,0.05)}
.table th{color:var(--gray-500);font-weight:600;font-size:13px}
.table tr:hover{background:rgba(255,255,255,0.02)}
.badge{display:inline-block;padding:4px 8px;border-radius:4px;font-size:12px;font-weight:600}
.badge.pending{background:rgba(255,152,0,0.2);color:var(--orange)}
.badge.approved{background:rgba(76,175,80,0.2);color:var(--green)}
.badge.rejected{background:rgba(255,82,82,0.2);color:var(--red)}
.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}}
.btn-save{background:var(--cyan);color:var(--ink);border:none;border-radius:6px;padding:6px 12px;font-size:12px;font-weight:600;cursor:pointer;transition:all 0.2s}
.btn-save:hover{background:#1be5ff}
.status-select,.priority-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}
[contenteditable="true"]{background:rgba(255,255,255,0.05);border-radius:4px;padding:4px 8px;outline:none;transition:background 0.2s}
[contenteditable="true"]:focus{background:rgba(0,229,255,0.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}.actions{flex-wrap:wrap}}
</style>
</head>
<body>
<aside class="sidebar">
<h1>АХО Панель</h1>
<nav>
<a href="#tasks" class="active">Задачи</a>
<a href="#employees">Сотрудники</a>
<a href="#purchases">Закупки</a>
<a href="#requests">Заявки</a>
<a href="#reports">Отчёты</a>
<a href="#settings">Настройки</a>
</nav>
</aside>
<main class="main">
<div class="header">
<h2>Панель управления АХО</h2>
<div class="date">19 июня 2026</div>
</div>
<!-- ЗАДАЧИ -->
<section id="tasks" class="section">
<h3>Задачи</h3>
<div class="stats">
<div class="stat">
<div class="label">Всего задач</div>
<div class="value cyan">24</div>
</div>
<div class="stat">
<div class="label">Просрочено</div>
<div class="value red">3</div>
</div>
<div class="stat">
<div class="label">В работе</div>
<div class="value orange">12</div>
</div>
<div class="stat">
<div class="label">Выполнено</div>
<div class="value green">9</div>
</div>
</div>
<div class="grid">
<div class="panel">
<h4>Активные задачи</h4>
<div class="task" data-id="1">
<div class="status overdue"></div>
<div class="info">
<div class="title">Закупить канцелярию для отдела</div>
<div class="meta">Исполнитель: Талгат 1 • Дедлайн: 18 июня</div>
</div>
<div class="actions">
<select class="employee-select">
<option value="">Назначить</option>
<option value="Талгат 1">Талгат 1</option>
<option value="Талгат 2">Талгат 2</option>
<option value="Талгат 3">Талгат 3</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" data-id="2">
<div class="status overdue"></div>
<div class="info">
<div class="title">Ремонт кондиционера в переговорной</div>
<div class="meta">Исполнитель: Талгат 2 • Дедлайн: 17 июня</div>
</div>
<div class="actions">
<select class="employee-select">
<option value="">Назначить</option>
<option value="Талгат 1">Талгат 1</option>
<option value="Талгат 2">Талгат 2</option>
<option value="Талгат 3">Талгат 3</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" data-id="3">
<div class="status overdue"></div>
<div class="info">
<div class="title">Подготовить акт осмотра помещения</div>
<div class="meta">Исполнитель: Талгат 3 • Дедлайн: 18 июня</div>
</div>
<div class="actions">
<select class="employee-select">
<option value="">Назначить</option>
<option value="Талгат 1">Талгат 1</option>
<option value="Талгат 2">Талгат 2</option>
<option value="Талгат 3">Талгат 3</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" data-id="4">
<div class="status progress"></div>
<div class="info">
<div class="title">Заказать уборку офиса на пятницу</div>
<div class="meta">Исполнитель: Талгат 1 • Дедлайн: 20 июня</div>
</div>
<div class="actions">
<select class="employee-select">
<option value="">Назначить</option>
<option value="Талгат 1">Талгат 1</option>
<option value="Талгат 2">Талгат 2</option>
<option value="Талгат 3">Талгат 3</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" data-id="5">
<div class="status progress"></div>
<div class="info">
<div class="title">Оформить пропуска для подрядчиков</div>
<div class="meta">Исполнитель: Талгат 2 • Дедлайн: 21 июня</div>
</div>
<div class="actions">
<select class="employee-select">
<option value="">Назначить</option>
<option value="Талгат 1">Талгат 1</option>
<option value="Талгат 2">Талгат 2</option>
<option value="Талгат 3">Талгат 3</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" data-id="6">
<div class="status done"></div>
<div class="info">
<div class="title">Согласовать смету на ремонт</div>
<div class="meta">Исполнитель: Талгат 3 • Выполнено</div>
</div>
<div class="actions">
<select class="employee-select">
<option value="">Назначить</option>
<option value="Талгат 1">Талгат 1</option>
<option value="Талгат 2">Талгат 2</option>
<option value="Талгат 3">Талгат 3</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>
<div class="panel">
<h4>Загрузка сотрудников</h4>
<div class="employee">
<div class="avatar">Т</div>
<div class="info">
<div class="name">Талгат 1</div>
<div class="role">Специалист АХО</div>
</div>
<div class="tasks-count">8 задач</div>
</div>
<div class="employee">
<div class="avatar">Т</div>
<div class="info">
<div class="name">Талгат 2</div>
<div class="role">Техник</div>
</div>
<div class="tasks-count">6 задач</div>
</div>
<div class="employee">
<div class="avatar">Т</div>
<div class="info">
<div class="name">Талгат 3</div>
<div class="role">Документооборот</div>
</div>
<div class="tasks-count">5 задач</div>
</div>
</div>
</div>
</section>
<!-- СОТРУДНИКИ -->
<section id="employees" class="section">
<h3>Сотрудники</h3>
<div class="panel">
<table class="table">
<thead>
<tr>
<th>Имя</th>
<th>Должность</th>
<th>Активных задач</th>
<th>Выполнено за месяц</th>
<th>Эффективность</th>
<th>Действия</th>
</tr>
</thead>
<tbody>
<tr data-id="emp1" data-employee-name="Талгат 1">
<td contenteditable="true">Талгат 1</td>
<td contenteditable="true">Специалист АХО</td>
<td contenteditable="true">8</td>
<td contenteditable="true">34</td>
<td><span class="badge approved">92%</span></td>
<td><button class="btn-save" onclick="saveEmployee(this)">Сохранить</button></td>
</tr>
<tr data-id="emp2" data-employee-name="Талгат 2">
<td contenteditable="true">Талгат 2</td>
<td contenteditable="true">Техник</td>
<td contenteditable="true">6</td>
<td contenteditable="true">28</td>
<td><span class="badge approved">88%</span></td>
<td><button class="btn-save" onclick="saveEmployee(this)">Сохранить</button></td>
</tr>
<tr data-id="emp3" data-employee-name="Талгат 3">
<td contenteditable="true">Талгат 3</td>
<td contenteditable="true">Документооборот</td>
<td contenteditable="true">5</td>
<td contenteditable="true">42</td>
<td><span class="badge approved">95%</span></td>
<td><button class="btn-save" onclick="saveEmployee(this)">Сохранить</button></td>
</tr>
</tbody>
</table>
</div>
</section>
<!-- ЗАКУПКИ -->
<section id="purchases" class="section">
<h3>Закупки</h3>
<div class="panel">
<table class="table">
<thead>
<tr>
<th>Наименование</th>
<th>Сумма</th>
<th>Статус</th>
<th>Срок</th>
<th>Исполнитель</th>
<th>Действия</th>
</tr>
</thead>
<tbody>
<tr data-id="pur1">
<td contenteditable="true">Канцелярия для отдела</td>
<td contenteditable="true">45 000 ₸</td>
<td>
<select class="status-select">
<option value="pending" selected>Ожидает</option>
<option value="approved">Согласовано</option>
<option value="rejected">Отклонено</option>
</select>
</td>
<td contenteditable="true">18 июня</td>
<td contenteditable="true">Талгат 1</td>
<td><button class="btn-save" onclick="savePurchase(this)">Сохранить</button></td>
</tr>
<tr data-id="pur2">
<td contenteditable="true">Уборочные средства</td>
<td contenteditable="true">32 000 ₸</td>
<td>
<select class="status-select">
<option value="pending">Ожидает</option>
<option value="approved" selected>Согласовано</option>
<option value="rejected">Отклонено</option>
</select>
</td>
<td contenteditable="true">20 июня</td>
<td contenteditable="true">Талгат 1</td>
<td><button class="btn-save" onclick="savePurchase(this)">Сохранить</button></td>
</tr>
<tr data-id="pur3">
<td contenteditable="true">Запчасти для кондиционера</td>
<td contenteditable="true">28 500 ₸</td>
<td>
<select class="status-select">
<option value="pending">Ожидает</option>
<option value="approved">Согласовано</option>
<option value="rejected" selected>Отклонено</option>
</select>
</td>
<td contenteditable="true">17 июня</td>
<td contenteditable="true">Талгат 2</td>
<td><button class="btn-save" onclick="savePurchase(this)">Сохранить</button></td>
</tr>
<tr data-id="pur4">
<td contenteditable="true">Бумага для принтера</td>
<td contenteditable="true">18 000 ₸</td>
<td>
<select class="status-select">
<option value="pending">Ожидает</option>
<option value="approved" selected>Согласовано</option>
<option value="rejected">Отклонено</option>
</select>
</td>
<td contenteditable="true">22 июня</td>
<td contenteditable="true">Талгат 3</td>
<td><button class="btn-save" onclick="savePurchase(this)">Сохранить</button></td>
</tr>
</tbody>
</table>
</div>
</section>
<!-- ЗАЯВКИ -->
<section id="requests" class="section">
<h3>Заявки на ремонт</h3>
<div class="panel">
<table class="table">
<thead>
<tr>
<th>Объект</th>
<th>Проблема</th>
<th>Приоритет</th>
<th>Статус</th>
<th>Дата подачи</th>
<th>Действия</th>
</tr>
</thead>
<tbody>
<tr data-id="req1">
<td contenteditable="true">Переговорная №3</td>
<td contenteditable="true">Не работает кондиционер</td>
<td>
<select class="priority-select">
<option value="high" selected>Высокий</option>
<option value="medium">Средний</option>
<option value="low">Низкий</option>
</select>
</td>
<td>
<select class="status-select">
<option value="pending" selected>В работе</option>
<option value="approved">Назначен</option>
<option value="done">Выполнено</option>
</select>
</td>
<td contenteditable="true">15 июня</td>
<td><button class="btn-save" onclick="saveRequest(this)">Сохранить</button></td>
</tr>
<tr data-id="req2">
<td contenteditable="true">Офис 204</td>
<td contenteditable="true">Протекает кран</td>
<td>
<select class="priority-select">
<option value="high">Высокий</option>
<option value="medium" selected>Средний</option>
<option value="low">Низкий</option>
</select>
</td>
<td>
<select class="status-select">
<option value="pending">В работе</option>
<option value="approved" selected>Назначен</option>
<option value="done">Выполнено</option>
</select>
</td>
<td contenteditable="true">16 июня</td>
<td><button class="btn-save" onclick="saveRequest(this)">Сохранить</button></td>
</tr>
<tr data-id="req3">
<td contenteditable="true">Коридор 2 этаж</td>
<td contenteditable="true">Не горит свет</td>
<td>
<select class="priority-select">
<option value="high" selected>Высокий</option>
<option value="medium">Средний</option>
<option value="low">Низкий</option>
</select>
</td>
<td>
<select class="status-select">
<option value="pending">В работе</option>
<option value="approved">Назначен</option>
<option value="done" selected>Выполнено</option>
</select>
</td>
<td contenteditable="true">14 июня</td>
<td><button class="btn-save" onclick="saveRequest(this)">Сохранить</button></td>
</tr>
<tr data-id="req4">
<td contenteditable="true">Склад</td>
<td contenteditable="true">Заклинила дверь</td>
<td>
<select class="priority-select">
<option value="high">Высокий</option>
<option value="medium">Средний</option>
<option value="low" selected>Низкий</option>
</select>
</td>
<td>
<select class="status-select">
<option value="pending" selected>Ожидает</option>
<option value="approved">Назначен</option>
<option value="done">Выполнено</option>
</select>
</td>
<td contenteditable="true">18 июня</td>
<td><button class="btn-save" onclick="saveRequest(this)">Сохранить</button></td>
</tr>
</tbody>
</table>
</div>
</section>
<!-- ОТЧЁТЫ -->
<section id="reports" class="section">
<h3>Отчёты</h3>
<div class="grid">
<div class="card">
<h4>Сводка за июнь</h4>
<p>Выполнено задач: 9 из 24</p>
<p>Просроченных задач: 3</p>
<p>Сумма закупок: 123 500 ₸</p>
<p>Заявок на ремонт: 4</p>
</div>
<div class="card">
<h4>Эффективность</h4>
<p>Средний % выполнения: 88%</p>
<p>Лучший сотрудник: Динара С. (95%)</p>
<p>Задач без исполнителя: 0</p>
</div>
</div>
</section>
<!-- НАСТРОЙКИ -->
<section id="settings" class="section">
<h3>Настройки</h3>
<div class="panel">
<p style="color:var(--gray-500);margin-bottom:16px">Раздел настроек панели управления</p>
<div class="task">
<div class="info">
<div class="title">Уведомления о просроченных задачах</div>
<div class="meta">Включено • Ежедневно в 9:00</div>
</div>
<div class="priority low">Активно</div>
</div>
<div class="task">
<div class="info">
<div class="title">Автоматическое напоминание исполнителям</div>
<div class="meta">За 24 часа до дедлайна</div>
</div>
<div class="priority low">Активно</div>
</div>
<div class="task">
<div class="info">
<div class="title">Экспорт отчётов в PDF</div>
<div class="meta">Раз в неделю по пятницам</div>
</div>
<div class="priority low">Активно</div>
</div>
</div>
</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) {
document.querySelectorAll('.sidebar nav a').forEach(l => l.classList.remove('active'));
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 newEmployee = this.value;
const meta = task.querySelector('.meta');
const oldEmployee = meta.textContent.split('Исполнитель: ')[1]?.split(' •')[0] || '';
if (newEmployee && oldEmployee !== newEmployee) {
// Обновляем текущую задачу
const deadline = meta.textContent.split('•')[1] || '';
meta.textContent = 'Исполнитель: ' + newEmployee + ' •' + deadline;
// Обновляем данные сотрудника во всех других задачах
document.querySelectorAll('.task .meta').forEach(m => {
if (m !== meta && m.textContent.includes('Исполнитель: ' + oldEmployee)) {
m.textContent = m.textContent.replace('Исполнитель: ' + oldEmployee, 'Исполнитель: ' + newEmployee);
}
});
// Обновляем данные в закупках
document.querySelectorAll('.table td').forEach(td => {
if (td.textContent.trim() === oldEmployee && td.nextElementSibling && !td.nextElementSibling.querySelector('select')) {
td.textContent = newEmployee;
}
});
// Обновляем данные в загрузке сотрудников
document.querySelectorAll('.employee .name').forEach(nameEl => {
if (nameEl.textContent.trim() === oldEmployee) {
nameEl.textContent = newEmployee;
}
});
// Обновляем selectы с сотрудниками
document.querySelectorAll('.employee-select').forEach(s => {
s.querySelectorAll('option').forEach(option => {
if (option.value === oldEmployee) {
option.value = newEmployee;
option.textContent = newEmployee;
}
});
});
// Обновляем таблицу сотрудников
document.querySelectorAll('.table tr[data-employee-name]').forEach(row => {
if (row.dataset.employeeName === oldEmployee) {
row.dataset.employeeName = newEmployee;
row.cells[0].textContent = newEmployee;
}
});
showNotification('Сотрудник "' + oldEmployee + '" заменён на "' + newEmployee + '" во всех разделах');
}
});
});
function saveEmployee(btn) {
const row = btn.closest('tr');
const oldName = row.dataset.employeeName;
const newName = row.cells[0].textContent.trim();
const newRole = row.cells[1].textContent.trim();
// Проверяем, что имя входит в допустимый список
const allowedNames = ['Талгат 1', 'Талгат 2', 'Талгат 3'];
if (!allowedNames.includes(newName) && newName !== oldName) {
showNotification('Ошибка: можно использовать только Талгат 1, Талгат 2, Талгат 3');
row.cells[0].textContent = oldName;
return;
}
// Обновляем данные во всех задачах
document.querySelectorAll('.task .meta').forEach(meta => {
if (meta.textContent.includes('Исполнитель: ' + oldName)) {
meta.textContent = meta.textContent.replace('Исполнитель: ' + oldName, 'Исполнитель: ' + newName);
}
});
// Обновляем данные во всех закупках
document.querySelectorAll('.table td').forEach(td => {
if (td.textContent.trim() === oldName && td.nextElementSibling && !td.nextElementSibling.querySelector('select')) {
td.textContent = newName;
}
});
// Обновляем данные в загрузке сотрудников
document.querySelectorAll('.employee .name').forEach(nameEl => {
if (nameEl.textContent.trim() === oldName) {
nameEl.textContent = newName;
}
});
document.querySelectorAll('.employee .role').forEach(roleEl => {
if (roleEl.textContent.trim() === oldName || roleEl.textContent.includes(oldName)) {
roleEl.textContent = newRole;
}
});
// Обновляем selectы с сотрудниками
document.querySelectorAll('.employee-select').forEach(select => {
select.querySelectorAll('option').forEach(option => {
if (option.value === oldName) {
option.value = newName;
option.textContent = newName;
}
});
});
// Сохраняем новое имя для будущих изменений
row.dataset.employeeName = newName;
showNotification('Данные сотрудника "' + oldName + '" обновлены на "' + newName + '" во всех разделах');
}
function savePurchase(btn) {
const row = btn.closest('tr');
const name = row.cells[0].textContent;
showNotification('Закупка "' + name + '" обновлена');
}
function saveRequest(btn) {
const row = btn.closest('tr');
const name = row.cells[0].textContent;
showNotification('Заявка "' + name + '" обновлена');
}
document.querySelectorAll('.status-select').forEach(select => {
select.addEventListener('change', function() {
const row = this.closest('tr');
const name = row.cells[0].textContent;
const status = this.options[this.selectedIndex].text;
showNotification('Статус "' + name + '" изменён на: ' + status);
});
});
document.querySelectorAll('.priority-select').forEach(select => {
select.addEventListener('change', function() {
const row = this.closest('tr');
const name = row.cells[0].textContent;
const priority = this.options[this.selectedIndex].text;
showNotification('Приоритет "' + name + '" изменён на: ' + priority);
});
});
</script>
</body>
</html>