feat: Enhance ASNsNewManager with input validation, import/export functionality, and improved UI feedback for better user experience
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 7m32s

This commit is contained in:
2025-08-08 10:56:31 +07:00
parent 3c185509b2
commit 6d7ed80646
4 changed files with 122 additions and 62 deletions
+14 -2
View File
@@ -479,7 +479,7 @@ function ServerManager() {
{/* Таблица серверов на всю ширину */}
<div className="card w-100">
<div className="card-header d-flex justify-content-between align-items-center">
<h3 className="card-title mb-0">Список серверов</h3>
<h3 className="card-title mb-0">Список серверов <span className="badge bg-blue-lt text-blue ms-2">{filteredServers.length}</span></h3>
<div className="d-flex gap-2 w-75">
{/* Фильтры и поиск */}
<select className="form-select w-auto" value={filterTunnel} onChange={e => { setFilterTunnel(e.target.value); setCurrentPage(1); }}>
@@ -512,6 +512,14 @@ function ServerManager() {
onChange={e => { setSearchTerm(e.target.value); setCurrentPage(1); }}
/>
</div>
<button
className="btn btn-outline-secondary"
type="button"
onClick={() => { setFilterTunnel(''); setFilterCountry(''); setFilterProvider(''); setSearchTerm(''); setCurrentPage(1); }}
title="Сбросить фильтры"
>
Сбросить
</button>
</div>
</div>
<div className="table-responsive">
@@ -571,7 +579,11 @@ function ServerManager() {
</tr>
</thead>
<tbody>
{paginatedServers.map((server) => (
{paginatedServers.length === 0 ? (
<tr>
<td colSpan={8} className="text-center text-muted py-4">Ничего не найдено. Измените фильтры или поиск.</td>
</tr>
) : paginatedServers.map((server) => (
<tr key={server.ip} className={editingServer === server.ip ? 'table-info' : ''}>
<td>{server.ip}</td>
<td>{server.dns}</td>