diff --git a/frontend/components.d.ts b/frontend/components.d.ts
index 54b6cd63..31da5b1d 100644
--- a/frontend/components.d.ts
+++ b/frontend/components.d.ts
@@ -16,6 +16,8 @@ declare module '@vue/runtime-core' {
ABreadcrumbItem: typeof import('ant-design-vue/es')['BreadcrumbItem']
AButton: typeof import('ant-design-vue/es')['Button']
ACard: typeof import('ant-design-vue/es')['Card']
+ ACheckbox: typeof import('ant-design-vue/es')['Checkbox']
+ ACheckboxGroup: typeof import('ant-design-vue/es')['CheckboxGroup']
ACol: typeof import('ant-design-vue/es')['Col']
ACollapse: typeof import('ant-design-vue/es')['Collapse']
ACollapsePanel: typeof import('ant-design-vue/es')['CollapsePanel']
@@ -70,6 +72,7 @@ declare module '@vue/runtime-core' {
FooterToolbarFooterToolBar: typeof import('./src/components/FooterToolbar/FooterToolBar.vue')['default']
LogoLogo: typeof import('./src/components/Logo/Logo.vue')['default']
NginxControlNginxControl: typeof import('./src/components/NginxControl/NginxControl.vue')['default']
+ NodeSelectorNodeSelector: typeof import('./src/components/NodeSelector/NodeSelector.vue')['default']
PageHeaderPageHeader: typeof import('./src/components/PageHeader/PageHeader.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
diff --git a/frontend/src/api/curd.ts b/frontend/src/api/curd.ts
index 41b822eb..3ba11b40 100644
--- a/frontend/src/api/curd.ts
+++ b/frontend/src/api/curd.ts
@@ -22,8 +22,8 @@ class Curd {
return http.get(this.baseUrl + (id ? '/' + id : ''))
}
- _save(id: any = null, data: any) {
- return http.post(this.baseUrl + (id ? '/' + id : ''), data)
+ _save(id: any = null, data: any, config: any = undefined) {
+ return http.post(this.baseUrl + (id ? '/' + id : ''), data, config)
}
_destroy(id: any = null) {
diff --git a/frontend/src/components/EnvIndicator/EnvIndicator.vue b/frontend/src/components/EnvIndicator/EnvIndicator.vue
index 14157ea2..98b6b292 100644
--- a/frontend/src/components/EnvIndicator/EnvIndicator.vue
+++ b/frontend/src/components/EnvIndicator/EnvIndicator.vue
@@ -75,6 +75,10 @@ watch(node_id, () => {
align-items: center;
justify-content: space-between;
+ .env-name {
+ max-width: 50px;
+ }
+
.ant-tag {
cursor: pointer;
margin-right: 0;
diff --git a/frontend/src/components/NodeSelector/NodeSelector.vue b/frontend/src/components/NodeSelector/NodeSelector.vue
new file mode 100644
index 00000000..ef075c86
--- /dev/null
+++ b/frontend/src/components/NodeSelector/NodeSelector.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+ {{ $gettext('Local') }}
+
+
+ {{ node.name }}
+
+
+
+
+
+
diff --git a/frontend/src/pinia/moudule/settings.ts b/frontend/src/pinia/moudule/settings.ts
index 0cd78015..036d0ec7 100644
--- a/frontend/src/pinia/moudule/settings.ts
+++ b/frontend/src/pinia/moudule/settings.ts
@@ -10,7 +10,11 @@ export const useSettingsStore = defineStore('settings', {
name: 'Local'
}
}),
- getters: {},
+ getters: {
+ is_remote(): boolean {
+ return this.environment.id !== 0
+ }
+ },
actions: {
set_language(lang: string) {
this.language = lang
diff --git a/frontend/src/views/domain/SiteDuplicate.vue b/frontend/src/views/domain/SiteDuplicate.vue
index 4e14f0bf..8daa4644 100644
--- a/frontend/src/views/domain/SiteDuplicate.vue
+++ b/frontend/src/views/domain/SiteDuplicate.vue
@@ -1,15 +1,19 @@