feat: Refactor page headers in multiple managers for improved layout and consistency; remove global badge styles to support Tabler text colors
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 8m30s

This commit is contained in:
2025-08-12 12:46:29 +07:00
parent 3b1a59b03f
commit 026d2a9379
7 changed files with 75 additions and 65 deletions
+14 -3
View File
@@ -386,6 +386,19 @@ function ASNsNewManager() {
</div>
)}
<div className="page-header d-print-none mb-4">
<div className="row align-items-center">
<div className="col">
<h2 className="page-title">ASNs</h2>
<div className="page-pretitle">Главная / Данные / ASNs</div>
</div>
<div className="col-auto ms-auto d-print-none">
<div className="btn-list">
<button className="btn btn-outline-secondary" onClick={() => setHistoryOpen(true)}>История</button>
</div>
</div>
</div>
</div>
<div className="row">
<div className="col-lg-3">
<LockBanner resource="asns" className="mb-3" />
@@ -549,9 +562,7 @@ function ASNsNewManager() {
/>
</div>
</div>
<div>
<button className="btn btn-outline-secondary" onClick={() => setHistoryOpen(true)}>История</button>
</div>
<div></div>
</div>
{/* Мета-информация будет показана внизу карточки */}
{loading ? (
+2 -17
View File
@@ -148,23 +148,8 @@
background-position: center;
}
/* Badge styles */
.badge {
display: inline-block;
padding: 0.35em 0.65em;
font-size: 0.75em;
font-weight: 700;
line-height: 1;
color: #fff;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
border-radius: 0.375rem;
}
.badge.bg-red {
background-color: #d63939 !important;
}
/* Убрали глобальную перекраску .badge, чтобы работали текстовые цвета Tabler
(например, badge bg-blue-lt text-blue) */
/* Responsive navbar */
@media (max-width: 991.98px) {
+1 -1
View File
@@ -172,7 +172,7 @@ function CommunitiesManager() {
};
return (
<div className="container-xl">
<div>
<div className="page-header d-print-none mb-4">
<div className="row align-items-center">
<div className="col">
+14 -3
View File
@@ -393,6 +393,19 @@ function DomainsNewManager() {
</div>
)}
<div className="page-header d-print-none mb-4">
<div className="row align-items-center">
<div className="col">
<h2 className="page-title">Домены</h2>
<div className="page-pretitle">Главная / Данные / Домены</div>
</div>
<div className="col-auto ms-auto d-print-none">
<div className="btn-list">
<button className="btn btn-outline-secondary" onClick={() => setHistoryOpen(true)}>История</button>
</div>
</div>
</div>
</div>
<div className="row">
<div className="col-lg-3">
<LockBanner resource="domains-new" className="mb-3" />
@@ -557,9 +570,7 @@ function DomainsNewManager() {
/>
</div>
</div>
<div>
<button className="btn btn-outline-secondary" onClick={() => setHistoryOpen(true)}>История</button>
</div>
<div></div>
</div>
{/* Мета-информация будет показана внизу карточки */}
{loading ? (
+1 -1
View File
@@ -802,7 +802,7 @@ function FilterManager() {
};
return (
<div className="container-xl">
<div>
<div className="page-header d-print-none mb-4">
<div className="row align-items-center">
<div className="col">
+14 -3
View File
@@ -402,6 +402,19 @@ function IPRangesManager() {
</div>
)}
<div className="page-header d-print-none mb-4">
<div className="row align-items-center">
<div className="col">
<h2 className="page-title">IP-диапазоны</h2>
<div className="page-pretitle">Главная / Данные / IP ranges</div>
</div>
<div className="col-auto ms-auto d-print-none">
<div className="btn-list">
<button className="btn btn-outline-secondary" onClick={() => setHistoryOpen(true)}>История</button>
</div>
</div>
</div>
</div>
<div className="row">
<div className="col-lg-3">
<LockBanner resource="ip-ranges" className="mb-3" />
@@ -565,9 +578,7 @@ function IPRangesManager() {
/>
</div>
</div>
<div>
<button className="btn btn-outline-secondary" onClick={() => setHistoryOpen(true)}>История</button>
</div>
<div></div>
</div>
{/* Мета-информация будет показана внизу карточки */}
{loading ? (
+29 -37
View File
@@ -475,45 +475,37 @@ function ServerManager() {
</div>
)}
{/* Кнопки управления */}
<div className="d-flex flex-wrap gap-2 mb-3 align-items-center">
<button
type="button"
className="btn btn-primary d-flex align-items-center"
onClick={handleOpenAddServerModal}
>
<span className="me-2 d-flex align-items-center"><IconPlus className="icon" /></span>
<span className="fw-bold">Добавить</span>
</button>
{/* Пресеты генератора ссылок */}
<div className="dropdown">
<button className="btn btn-outline-primary dropdown-toggle" type="button" data-bs-toggle="dropdown">
Профили ссылок
</button>
<div className="dropdown-menu">
{Object.keys(presets).map(key => (
<button key={key} className="dropdown-item" type="button" onClick={() => applyPreset(key)}>{key}</button>
))}
{/* Page header */}
<div className="page-header d-print-none mb-3">
<div className="row align-items-center">
<div className="col">
<h2 className="page-title">Серверы</h2>
<div className="page-pretitle">Главная / Управление / Серверы</div>
</div>
<div className="col-auto ms-auto d-print-none">
<div className="btn-list">
<div className="dropdown">
<button className="btn btn-outline-primary dropdown-toggle" type="button" data-bs-toggle="dropdown">
Профили ссылок
</button>
<div className="dropdown-menu">
{Object.keys(presets).map(key => (
<button key={key} className="dropdown-item" type="button" onClick={() => applyPreset(key)}>{key}</button>
))}
</div>
</div>
<button type="button" className="btn btn-outline-primary d-flex align-items-center" onClick={exportAllLinks} disabled={servers.length === 0}>
<IconDownload className="me-1" /> Экспорт
</button>
<button type="button" className="btn btn-outline-primary d-flex align-items-center" onClick={handleSaveChanges} disabled={loading}>
<IconDatabase className={loading ? 'spin me-1' : 'me-1'} /> Сохранить
</button>
<button type="button" className="btn btn-primary d-flex align-items-center" onClick={handleOpenAddServerModal}>
<IconPlus className="me-1" /> Добавить
</button>
</div>
</div>
</div>
<button
type="button"
className="btn btn-outline-primary d-flex align-items-center"
onClick={handleSaveChanges}
disabled={loading}
>
<span className="me-2 d-flex align-items-center"><IconDatabase className={loading ? 'spin' : ''} /></span>
<span className="fw-bold">Сохранить</span>
</button>
<button
type="button"
className="btn btn-outline-primary d-flex align-items-center"
onClick={exportAllLinks}
disabled={servers.length === 0}
>
<span className="me-2 d-flex align-items-center"><IconDownload className="icon" /></span>
<span className="fw-bold">Экспорт</span>
</button>
</div>
{/* Таблица серверов на всю ширину */}