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
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 8m30s
This commit is contained in:
@@ -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
@@ -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) {
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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 ? (
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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 ? (
|
||||
|
||||
@@ -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>
|
||||
|
||||
{/* Таблица серверов на всю ширину */}
|
||||
|
||||
Reference in New Issue
Block a user