-
-
-
- {{ t(serviceInfoLabel[service.name] || 'services.port') }}:
- {{ service.port || service.info || '—' }}
-
-
- {{ t('services.rules') }}:
- {{ service.info }}
-
-
+
+
+
+ {{ service.name }}
+ {{ service.pending }}
diff --git a/front_vue/src/Design/components/services/ServicesGrid.vue b/front_vue/src/Design/components/services/ServicesGrid.vue
index 53cf8e8..a6a9894 100644
--- a/front_vue/src/Design/components/services/ServicesGrid.vue
+++ b/front_vue/src/Design/components/services/ServicesGrid.vue
@@ -5,7 +5,7 @@ const servicesStore = useServicesStore()
-
+
diff --git a/front_vue/src/Design/components/sites/SitesTable.vue b/front_vue/src/Design/components/sites/SitesTable.vue
index 45ec735..c4cf4e9 100644
--- a/front_vue/src/Design/components/sites/SitesTable.vue
+++ b/front_vue/src/Design/components/sites/SitesTable.vue
@@ -1,12 +1,49 @@
-
-
+
- | {{ t('sites.name') }} |
- {{ t('sites.host') }} |
- {{ t('sites.alias') }} |
- {{ t('sites.status') }} |
- {{ t('sites.rootFile') }} |
- {{ t('sites.actions') }} |
+ {{ t('sites.name') }} |
+ {{ t('sites.host') }} |
+ {{ t('sites.alias') }} |
+ {{ t('sites.status') }} |
+ {{ t('sites.rootFile') }} |
+ {{ t('sites.actions') }} |
-
+
|
+
@@ -99,8 +140,12 @@ const confirmDelete = (site) => {
|
{{ site.alias?.join(', ') || '—' }} |
-
- {{ site.status }}
+
+ {{ togglingStatus === site.host ? '...' : site.status }}
|
{{ site.root_file }} |
diff --git a/front_vue/src/Design/components/ui/VConfirmDialog.vue b/front_vue/src/Design/components/ui/VConfirmDialog.vue
new file mode 100644
index 0000000..76ddf4a
--- /dev/null
+++ b/front_vue/src/Design/components/ui/VConfirmDialog.vue
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
{{ config.title }}
+
{{ config.message }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/front_vue/src/Design/components/ui/VSectionHeader.vue b/front_vue/src/Design/components/ui/VSectionHeader.vue
new file mode 100644
index 0000000..a515552
--- /dev/null
+++ b/front_vue/src/Design/components/ui/VSectionHeader.vue
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
diff --git a/front_vue/src/Design/layouts/MainLayout.vue b/front_vue/src/Design/layouts/MainLayout.vue
index 7158c7e..3318ff7 100644
--- a/front_vue/src/Design/layouts/MainLayout.vue
+++ b/front_vue/src/Design/layouts/MainLayout.vue
@@ -47,6 +47,7 @@ onUnmounted(() => {
+
@@ -56,7 +57,15 @@ onUnmounted(() => {
flex-direction: column;
height: 100vh;
width: 100vw;
- background: var(--bg-primary);
+
+ /* Красивый грандиент */
+ background:
+ /*
+ radial-gradient(circle at 100% 30%, rgba(53, 55, 126, 0.089) 0%, transparent 50%),
+ radial-gradient(circle at 45% 100%, rgba(126, 53, 98, 0.082) 0%, transparent 50%),
+ radial-gradient(circle at 0% 100%, rgba(53, 55, 126, 0.089) 0%, transparent 50%),
+ */
+ var(--bg-primary);
}
.app-body {
@@ -73,8 +82,9 @@ onUnmounted(() => {
}
.main-content {
+ --page-padding: 50px;
flex: 1;
overflow-y: auto;
- padding: 40px var(--space-3xl);
+ padding: var(--page-padding) var(--page-padding) var(--page-padding) var(--page-padding);
}
diff --git a/front_vue/src/Design/views/DashboardView.vue b/front_vue/src/Design/views/DashboardView.vue
index b42e4ba..8c608e4 100644
--- a/front_vue/src/Design/views/DashboardView.vue
+++ b/front_vue/src/Design/views/DashboardView.vue
@@ -19,8 +19,10 @@ onMounted(async () => {
@@ -30,4 +32,22 @@ onMounted(async () => {
flex-direction: column;
gap: var(--space-xl);
}
+
+.dashboard-tables {
+ display: flex;
+ flex-direction: column;
+ gap: var(--space-xl);
+}
+
+@media (min-width: 2200px) {
+ .dashboard-tables {
+ flex-direction: row;
+ gap: var(--space-xl);
+ }
+
+ .dashboard-tables > * {
+ flex: 1;
+ min-width: 0;
+ }
+}
diff --git a/front_vue/src/Design/views/ProxyEditView.vue b/front_vue/src/Design/views/ProxyEditView.vue
index d6d4ed4..de224a8 100644
--- a/front_vue/src/Design/views/ProxyEditView.vue
+++ b/front_vue/src/Design/views/ProxyEditView.vue
@@ -1,9 +1,9 @@
-
diff --git a/front_vue/src/Design/views/SettingsView.vue b/front_vue/src/Design/views/SettingsView.vue
index 2b33dea..febf1a9 100644
--- a/front_vue/src/Design/views/SettingsView.vue
+++ b/front_vue/src/Design/views/SettingsView.vue
@@ -62,7 +62,7 @@ const toggleAcme = async () => {