summaryrefslogtreecommitdiffstats
path: root/webapp
diff options
context:
space:
mode:
authorUdo Walter2019-02-26 04:28:51 +0100
committerUdo Walter2019-02-26 04:28:51 +0100
commit79a33eb08a36b9540d7fc58f2e1eefb56a1aaf6e (patch)
tree85b2df81ede5c0efbd9f59cf88a2aef059157a40 /webapp
parent[account] Fix for the changePassword method (diff)
downloadbas-79a33eb08a36b9540d7fc58f2e1eefb56a1aaf6e.tar.gz
bas-79a33eb08a36b9540d7fc58f2e1eefb56a1aaf6e.tar.xz
bas-79a33eb08a36b9540d7fc58f2e1eefb56a1aaf6e.zip
[webapp/configurator] add ability to assign configs to groups/clients
[server] increase request size limit to 50mb
Diffstat (limited to 'webapp')
-rw-r--r--webapp/src/components/ConfiguratorModuleAssign.vue84
-rw-r--r--webapp/src/components/GroupModuleClientList.vue6
-rw-r--r--webapp/src/components/GroupModuleDialog.vue16
-rw-r--r--webapp/src/components/GroupModuleGroupView.vue2
4 files changed, 69 insertions, 39 deletions
diff --git a/webapp/src/components/ConfiguratorModuleAssign.vue b/webapp/src/components/ConfiguratorModuleAssign.vue
index 8c9ba83..af49d45 100644
--- a/webapp/src/components/ConfiguratorModuleAssign.vue
+++ b/webapp/src/components/ConfiguratorModuleAssign.vue
@@ -5,14 +5,22 @@
"description": "Description",
"ip": "IP Address",
"title": "Assign groups and clients",
- "assign": "Assign"
+ "assign": "Assign",
+ "groups": "Groups",
+ "clients": "Clients",
+ "success": "Assignment successful.",
+ "config": "Config"
},
"de": {
"name": "Name",
"description": "Beschreibung",
"ip": "IP Adresse",
- "title": "Gruppen und Clienten zuweisen",
- "assign": "Zuweisen"
+ "title": "Gruppen und Clients zuweisen",
+ "assign": "Zuweisen",
+ "groups": "Gruppen",
+ "clients": "Clients",
+ "success": "Zuweisung erfolgreich.",
+ "config": "Konfiguration"
}
}
</i18n>
@@ -20,17 +28,30 @@
<template>
<v-card style="overflow: hidden">
<v-card-title class="dialog-title elevation-3">
- <div class="headline">{{ $t('title') }}</div>
- <div class="subheading text--secondary pa-2">{{ dialog.info.name }}</div>
+ <div class="dialog-title-text">
+ <div class="headline non-selectable">{{ $t('title') }}</div>
+ <div class="subheading text--secondary pa-2">{{ $t('config') + ': ' + dialog.info.name }}</div>
+ </div>
+ <v-tabs v-model="tabs" grow slider-color="primary">
+ <v-tab><v-icon class="tabbar-tabicon">category</v-icon>{{ selectedGroups.length + ' ' + $t('groups') }}</v-tab>
+ <v-tab><v-icon class="tabbar-tabicon">computer</v-icon>{{ selectedClients.length + ' ' + $t('clients') }}</v-tab>
+ </v-tabs>
</v-card-title>
<v-card-text class="dialog-content">
- <data-table v-model="selectedGroups" :headers="groupHeaders" :items="groupList" slim></data-table>
+ <v-tabs-items v-model="tabs">
+ <v-tab-item>
+ <data-table v-model="selectedGroups" :headers="groupHeaders" :items="groupList" slim :row-count="$vuetify.breakpoint.smAndDown ? -1 : undefined"></data-table>
+ </v-tab-item>
+ <v-tab-item>
+ <data-table v-model="selectedClients" :headers="clientHeaders" :items="clientList" slim :row-count="$vuetify.breakpoint.smAndDown ? -1 : undefined"></data-table>
+ </v-tab-item>
+ </v-tabs-items>
</v-card-text>
<v-divider></v-divider>
<v-card-actions>
<v-spacer></v-spacer>
<v-btn flat="flat" @click="setDialog({ show: false })">{{ $t('cancel') }}</v-btn>
- <v-btn color="primary" @click="saveEntry">{{ $t('assign') }}</v-btn>
+ <v-btn color="primary" @click="saveAssignment">{{ $t('assign') }}</v-btn>
</v-card-actions>
</v-card>
</template>
@@ -46,6 +67,7 @@ export default {
},
data () {
return {
+ tabs: 0,
selectedGroups: [],
selectedClients: []
}
@@ -70,12 +92,16 @@ export default {
dialog: {
immediate: true,
deep: true,
- handler (value) {
- if (value.type === 'entry' && value.show) {
- this.name = value.info.name || ''
- this.script = value.info.script || ''
- this.interval.id = setInterval(this.refreshEditor, 50)
- this.interval.counter = 0
+ async handler (value) {
+ if (value.show && value.type === 'assign') {
+ this.selectedGroups = []
+ this.selectedClients = []
+ const [ groupsResponse, clientsResponse ] = await Promise.all([
+ this.$http.get(`/api/configurator/configs/${value.info.id}/groups`),
+ this.$http.get(`/api/configurator/configs/${value.info.id}/clients`)
+ ])
+ this.selectedGroups = groupsResponse.data
+ this.selectedClients = clientsResponse.data
}
}
}
@@ -84,20 +110,14 @@ export default {
setDialog (data) {
this.$store.commit('configurator/setDialog', data)
},
- async saveEntry () {
- let url = '/api/configurator/entries'
- if (this.dialog.info.id !== undefined) url += '/' + this.dialog.info.id
- await this.$http.post(url, {
- name: this.name,
- script: this.script
- })
- this.$store.dispatch('configurator/loadData')
+ async saveAssignment () {
+ let url = '/api/configurator/configs/' + this.dialog.info.id
+ await Promise.all([
+ this.$http.put(url + '/groups', { ids: this.selectedGroups.map(x => x.id) }),
+ this.$http.put(url + '/clients', { ids: this.selectedClients.map(x => x.id) })
+ ])
+ this.$snackbar({ color: 'success', text: this.$t('success') })
this.setDialog({ show: false })
- },
- refreshEditor () {
- this.interval.counter++
- if (this.$refs.editor) this.$refs.editor.codemirror.refresh()
- if (this.interval.counter >= 15) clearInterval(this.interval.id)
}
}
}
@@ -109,7 +129,17 @@ export default {
z-index: 1;
display: flex;
flex-direction: column;
- align-items: flex-start;
+ align-items: stretch;
+ margin: 0;
+ padding: 0;
+}
+
+.dialog-title >>> .v-tabs .v-tabs__item {
+ text-transform: none;
+}
+
+.dialog-title-text {
+ padding: 16px 16px 0 16px;
}
.dialog-content {
diff --git a/webapp/src/components/GroupModuleClientList.vue b/webapp/src/components/GroupModuleClientList.vue
index bc2e59a..88d1332 100644
--- a/webapp/src/components/GroupModuleClientList.vue
+++ b/webapp/src/components/GroupModuleClientList.vue
@@ -17,9 +17,9 @@
"ip": "IP Adresse",
"mac": "MAC Adresse",
"uuid": "UUID",
- "removeClients": "Entferne einen Clienten | Entferne {0} Clienten",
- "addClients": "Füge Clienten hinzu",
- "deleteClients": "Lösche einen Clienten | Lösche {0} Clienten",
+ "removeClients": "Entferne einen Client | Entferne {0} Clients",
+ "addClients": "Füge Clients hinzu",
+ "deleteClients": "Lösche einen Clients | Lösche {0} Clients",
"createClient": "Client erstellen"
}
}
diff --git a/webapp/src/components/GroupModuleDialog.vue b/webapp/src/components/GroupModuleDialog.vue
index 4328830..8eb3079 100644
--- a/webapp/src/components/GroupModuleDialog.vue
+++ b/webapp/src/components/GroupModuleDialog.vue
@@ -47,38 +47,38 @@
"title": {
"delete": {
"group": "Diese Gruppe löschen? | Diese {0} Gruppen löschen?",
- "client": "Diesen Clienten löschen? | Diese {0} Clienten löschen?"
+ "client": "Diesen Client löschen? | Diese {0} Clients löschen?"
},
"remove": {
"group": "Diese Untergruppe entfernen? | Diese {0} Untergruppen entfernen?",
- "client": "Diesen Clienten entfernen? | Diese {0} Clienten entfernen?"
+ "client": "Diesen Client entfernen? | Diese {0} Clients entfernen?"
},
"add": {
"group": "Gruppen hinzufügen | Diese Gruppe hinzufügen? | Diese {0} Gruppen hinzufügen?",
- "client": "Clienten hinzufügen | Diesen Clienten hinzufügen? | Diese {0} Clienten hinzufügen?"
+ "client": "Clients hinzufügen | Diesen Client hinzufügen? | Diese {0} Clients hinzufügen?"
},
"select": {
"group": "Gruppen auswählen",
- "clienten": "Clienten auswählen"
+ "client": "Clients auswählen"
}
},
"success": {
"delete": {
- "client": "Client erfolgreich gelöscht | {0} Clienten erfolgreich gelöscht",
+ "client": "Client erfolgreich gelöscht | {0} Clients erfolgreich gelöscht",
"group": "Gruppe erfolgreich gelöscht | {0} Gruppen erfolgreich gelöscht"
},
"remove": {
- "client": "Client erfolgreich entfernt | {0} Clienten erfolgreich entfernt",
+ "client": "Client erfolgreich entfernt | {0} Clients erfolgreich entfernt",
"group": "Gruppe erfolgreich entfernt | {0} Gruppen erfolgreich entfernt"
},
"add": {
- "client": "Client erfolgreich hinzugefügt | {0} Clienten erfolgreich hinzugefügt",
+ "client": "Client erfolgreich hinzugefügt | {0} Clients erfolgreich hinzugefügt",
"group": "Gruppe erfolgreich hinzugefügt | {0} Gruppen erfolgreich hinzugefügt"
}
},
"deletePermanently": {
"group": "Gruppe dauerhaft löschen | Gruppen dauerhaft löschen",
- "client": "Client dauerhaft löschen | Clienten dauerhaft löschen"
+ "client": "Client dauerhaft löschen | Clients dauerhaft löschen"
},
"new": "Neu",
"id": "ID",
diff --git a/webapp/src/components/GroupModuleGroupView.vue b/webapp/src/components/GroupModuleGroupView.vue
index 59d57d1..deda78b 100644
--- a/webapp/src/components/GroupModuleGroupView.vue
+++ b/webapp/src/components/GroupModuleGroupView.vue
@@ -21,7 +21,7 @@
"showall": "Show All",
"groups": "Groups",
"subgroups": "Untergruppen",
- "clients": "Clienten",
+ "clients": "Clients",
"name": "Name",
"description": "Beschreibung",
"ipranges": "IP Bereiche",