v4 - add edit permissions to all tabs
This commit is contained in:
parent
684d95dba1
commit
ce466279af
264
index.html
264
index.html
@ -69,6 +69,11 @@ body{font:15px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Inter,system-ui,s
|
||||
.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>
|
||||
@ -282,36 +287,41 @@ body{font:15px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Inter,system-ui,s
|
||||
<th>Активных задач</th>
|
||||
<th>Выполнено за месяц</th>
|
||||
<th>Эффективность</th>
|
||||
<th>Действия</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Айгуль К.</td>
|
||||
<td>Специалист АХО</td>
|
||||
<td>8</td>
|
||||
<td>34</td>
|
||||
<tr data-id="emp1">
|
||||
<td contenteditable="true">Айгуль К.</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>
|
||||
<td>Руслан М.</td>
|
||||
<td>Техник</td>
|
||||
<td>6</td>
|
||||
<td>28</td>
|
||||
<tr data-id="emp2">
|
||||
<td contenteditable="true">Руслан М.</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>
|
||||
<td>Динара С.</td>
|
||||
<td>Документооборот</td>
|
||||
<td>5</td>
|
||||
<td>42</td>
|
||||
<tr data-id="emp3">
|
||||
<td contenteditable="true">Динара С.</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>
|
||||
<tr>
|
||||
<td>Алексей В.</td>
|
||||
<td>Кладовщик</td>
|
||||
<td>5</td>
|
||||
<td>31</td>
|
||||
<tr data-id="emp4">
|
||||
<td contenteditable="true">Алексей В.</td>
|
||||
<td contenteditable="true">Кладовщик</td>
|
||||
<td contenteditable="true">5</td>
|
||||
<td contenteditable="true">31</td>
|
||||
<td><span class="badge pending">78%</span></td>
|
||||
<td><button class="btn-save" onclick="saveEmployee(this)">Сохранить</button></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@ -330,36 +340,65 @@ body{font:15px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Inter,system-ui,s
|
||||
<th>Статус</th>
|
||||
<th>Срок</th>
|
||||
<th>Исполнитель</th>
|
||||
<th>Действия</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Канцелярия для отдела</td>
|
||||
<td>45 000 ₸</td>
|
||||
<td><span class="badge pending">Ожидает</span></td>
|
||||
<td>18 июня</td>
|
||||
<td>Айгуль</td>
|
||||
<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">Айгуль</td>
|
||||
<td><button class="btn-save" onclick="savePurchase(this)">Сохранить</button></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Уборочные средства</td>
|
||||
<td>32 000 ₸</td>
|
||||
<td><span class="badge approved">Согласовано</span></td>
|
||||
<td>20 июня</td>
|
||||
<td>Айгуль</td>
|
||||
<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">Айгуль</td>
|
||||
<td><button class="btn-save" onclick="savePurchase(this)">Сохранить</button></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Запчасти для кондиционера</td>
|
||||
<td>28 500 ₸</td>
|
||||
<td><span class="badge rejected">Отклонено</span></td>
|
||||
<td>17 июня</td>
|
||||
<td>Руслан</td>
|
||||
<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">Руслан</td>
|
||||
<td><button class="btn-save" onclick="savePurchase(this)">Сохранить</button></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Бумага для принтера</td>
|
||||
<td>18 000 ₸</td>
|
||||
<td><span class="badge approved">Согласовано</span></td>
|
||||
<td>22 июня</td>
|
||||
<td>Динара</td>
|
||||
<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">Динара</td>
|
||||
<td><button class="btn-save" onclick="savePurchase(this)">Сохранить</button></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@ -378,36 +417,89 @@ body{font:15px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Inter,system-ui,s
|
||||
<th>Приоритет</th>
|
||||
<th>Статус</th>
|
||||
<th>Дата подачи</th>
|
||||
<th>Действия</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Переговорная №3</td>
|
||||
<td>Не работает кондиционер</td>
|
||||
<td><span class="badge rejected">Высокий</span></td>
|
||||
<td><span class="badge pending">В работе</span></td>
|
||||
<td>15 июня</td>
|
||||
<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>
|
||||
<td>Офис 204</td>
|
||||
<td>Протекает кран</td>
|
||||
<td><span class="badge pending">Средний</span></td>
|
||||
<td><span class="badge approved">Назначен</span></td>
|
||||
<td>16 июня</td>
|
||||
<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>
|
||||
<td>Коридор 2 этаж</td>
|
||||
<td>Не горит свет</td>
|
||||
<td><span class="badge rejected">Высокий</span></td>
|
||||
<td><span class="badge approved">Выполнено</span></td>
|
||||
<td>14 июня</td>
|
||||
<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>
|
||||
<td>Склад</td>
|
||||
<td>Заклинила дверь</td>
|
||||
<td><span class="badge pending">Низкий</span></td>
|
||||
<td><span class="badge pending">Ожидает</span></td>
|
||||
<td>18 июня</td>
|
||||
<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>
|
||||
@ -516,6 +608,42 @@ document.querySelectorAll('.employee-select').forEach(select => {
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function saveEmployee(btn) {
|
||||
const row = btn.closest('tr');
|
||||
const name = row.cells[0].textContent;
|
||||
showNotification('Данные сотрудника "' + name + '" сохранены');
|
||||
}
|
||||
|
||||
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>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user