Загрузка данных
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Список работников</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
:root {
--rosatom-dark-blue: #003274;
--rosatom-blue: #025EA1;
--rosatom-light-blue: #6CACE4;
--rosatom-grey: #7F7F7F;
--rosatom-dark-grey: #333333;
--rosatom-teal: #259789;
}
body {
background-color: #f4f6f9;
font-family: Arial, Helvetica, sans-serif;
color: var(--rosatom-dark-grey);
}
h2 {
color: var(--rosatom-dark-blue);
font-weight: bold;
}
.search-block {
background: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.08);
border-top: 4px solid var(--rosatom-dark-blue);
}
.table-wrapper {
overflow-x: auto;
margin-bottom: 20px;
background: white;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.08);
}
table.table-bordered {
border: 1px solid #dee2e6;
margin-bottom: 0;
}
table.table-bordered th, table.table-bordered td {
border: 1px solid #dee2e6;
vertical-align: middle;
padding: 12px 15px;
}
thead.table-dark th {
background-color: var(--rosatom-dark-blue);
color: white;
border-color: var(--rosatom-dark-blue);
font-weight: normal;
}
.table tbody tr.selected {
background-color: var(--rosatom-light-blue) !important;
color: white;
cursor: pointer;
}
.table tbody tr:hover:not(.selected) {
background-color: #f1f3f5;
cursor: pointer;
}
/* Кнопки */
.btn {
font-family: Arial, Helvetica, sans-serif;
border-radius: 4px;
font-weight: 500;
}
#searchBtn {
background-color: var(--rosatom-dark-blue);
border-color: var(--rosatom-dark-blue);
color: white;
}
#searchBtn:hover {
background-color: var(--rosatom-blue);
border-color: var(--rosatom-blue);
color: white;
}
#resetBtn {
background-color: var(--rosatom-grey);
border-color: var(--rosatom-grey);
color: white;
}
#resetBtn:hover {
background-color: var(--rosatom-dark-grey);
border-color: var(--rosatom-dark-grey);
color: white;
}
#selectBtn {
background-color: var(--rosatom-teal);
border-color: var(--rosatom-teal);
color: white;
}
#selectBtn:hover:not(:disabled) {
background-color: #1e7a6e;
border-color: #1e7a6e;
color: white;
}
#selectBtn:disabled {
background-color: #a0c4e8;
border-color: #a0c4e8;
opacity: 0.7;
cursor: not-allowed;
}
#selectedTabnum {
display: none;
}
</style>
</head>
<body>
<div class="container mt-5">
<h2 class="mb-4 text-center">Список работников</h2>
<!-- Важно: action="/" исправляет ошибку поиска -->
<form id="selectForm" method="get" action="/">
<div class="table-wrapper">
<table class="table table-bordered table-hover" id="workerTable">
<thead class="table-dark">
<tr>
{% for col in column_names %}
<th>{{ col }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for row in rows %}
<tr data-tabnum="{{ row[0] }}">
<td>{{ row[0] }}</td>
<td>{{ row[1] }}</td>
<td>{{ row[2] }}</td>
<td>{{ row[3] }}</td>
<td>{{ row[4] }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<input type="hidden" id="selectedTabnum" name="tabnum" value="">
<div class="search-block mt-3">
<div class="row g-3 align-items-end">
<div class="col-md-3">
<label for="tabnum" class="form-label">Табельный номер</label>
<input type="text" class="form-control" id="tabnum" name="tabnum_search" value="{{ search_tabnum }}" placeholder="Например, 06520001">
</div>
<div class="col-md-3">
<label for="fam" class="form-label">Фамилия</label>
<input type="text" class="form-control" id="fam" name="fam" value="{{ search_fam }}" placeholder="Иванов">
</div>
<div class="col-md-6 d-flex gap-2">
<button type="submit" class="btn flex-grow-1" id="searchBtn">Поиск</button>
<a href="/" class="btn flex-grow-1" id="resetBtn">Сбросить</a>
<button type="button" class="btn btn-select flex-grow-1" id="selectBtn" disabled>Выбрать</button>
</div>
</div>
</div>
</form>
<script>
(function() {
const table = document.getElementById('workerTable');
const rows = table.querySelectorAll('tbody tr');
const selectBtn = document.getElementById('selectBtn');
const selectedInput = document.getElementById('selectedTabnum');
const selectForm = document.getElementById('selectForm');
let selectedRow = null;
function clearSelection() {
rows.forEach(row => row.classList.remove('selected'));
selectedRow = null;
selectBtn.disabled = true;
selectedInput.value = '';
}
function selectRow(row) {
clearSelection();
row.classList.add('selected');
selectedRow = row;
const tabnum = row.getAttribute('data-tabnum');
selectedInput.value = tabnum;
selectBtn.disabled = false;
}
rows.forEach(row => {
row.addEventListener('click', function(e) {
selectRow(this);
});
});
selectBtn.addEventListener('click', function() {
const tabnum = selectedInput.value;
if (tabnum) {
selectForm.action = '/employee/' + tabnum + '/children';
selectForm.submit();
}
});
})();
</script>
</div>
</body>
</html>