summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUdo Walter2018-08-03 23:51:11 +0200
committerUdo Walter2018-08-03 23:51:11 +0200
commit344a0502ab3800e69712bff15d4026550d50ab76 (patch)
treefd6b9c771fc89be5524eac25f2a5667eebb05faf
parent[groups] icon fix (diff)
downloadbas-344a0502ab3800e69712bff15d4026550d50ab76.tar.gz
bas-344a0502ab3800e69712bff15d4026550d50ab76.tar.xz
bas-344a0502ab3800e69712bff15d4026550d50ab76.zip
[webapp] everythiing configurable (dashboardmodule, stores and global i18n messages is now in the config folder; router rework: modules can now set their own subroutes
-rw-r--r--webapp/src/components/DashboardPage.vue32
-rw-r--r--webapp/src/config/dashboard.js9
-rw-r--r--webapp/src/config/i18n.js60
-rw-r--r--webapp/src/config/store.js7
-rw-r--r--webapp/src/i18n.json50
-rw-r--r--webapp/src/main.js12
-rw-r--r--webapp/src/router.js13
-rw-r--r--webapp/src/store/index.js14
8 files changed, 108 insertions, 89 deletions
diff --git a/webapp/src/components/DashboardPage.vue b/webapp/src/components/DashboardPage.vue
index 3fef1e9..d400f9f 100644
--- a/webapp/src/components/DashboardPage.vue
+++ b/webapp/src/components/DashboardPage.vue
@@ -1,18 +1,12 @@
<i18n>
{
"en": {
- "group": "Groups / Clients",
- "backend": "External Backends",
- "permission": "Permissions",
"title": "Boot Selection Server",
"account": "Account",
"settings": "Settings",
"logout": "Logout"
},
"de": {
- "group": "Gruppen / Clienten",
- "backend": "Externe Backends",
- "permission": "Rechteverwaltung",
"title": "Boot Auswahl Server",
"account": "Konto",
"settings": "Einstellungen",
@@ -53,12 +47,12 @@
>
<div class="drawer-header grey darken-4 hidden-lg-and-up"><img class="logo" src="@/assets/logo.svg" /></div>
<v-list>
- <v-list-tile ripple v-for="child in $options.dashboardModules" :key="child.path" :to="'/dashboard/' + child.path">
+ <v-list-tile ripple v-for="module in modules" :key="module.path" :to="'/dashboard/' + module.path">
<v-list-tile-action>
- <v-icon v-html="child.dashboardIcon"></v-icon>
+ <v-icon v-html="module.icon"></v-icon>
</v-list-tile-action>
<v-list-tile-content>
- <v-list-tile-title v-text="$t(child.path)"></v-list-tile-title>
+ <v-list-tile-title v-text="$t('$dashboardModules.' + module.path)"></v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
</v-list>
@@ -119,25 +113,21 @@
<script>
import { mapState, mapGetters, mapMutations } from 'vuex'
-import GroupModule from '@/components/GroupModule'
-import BackendModule from '@/components/BackendModule'
-import PermissionModule from '@/components/PermissionModule'
import AccountModule from '@/components/AccountModule'
import SettingsModule from '@/components/SettingsModule'
+import dashboardModules from '@/config/dashboard'
export default {
name: 'DashboardPage',
- dashboardModules: [
- { path: 'group', component: GroupModule, dashboardIcon: 'category' },
- { path: 'backend', component: BackendModule, dashboardIcon: 'cloud' },
- { path: 'permission', component: PermissionModule, dashboardIcon: 'lock_open' }
- ],
- hiddenModules: [
- { path: 'account', component: AccountModule },
- { path: 'settings', component: SettingsModule }
- ],
+ routes () {
+ return [
+ { path: 'account', component: AccountModule },
+ { path: 'settings', component: SettingsModule }
+ ]
+ },
data () {
return {
+ modules: dashboardModules,
snackbarsInQueue: false,
showSnackbar: false,
snackbarText: 'MESSAGE',
diff --git a/webapp/src/config/dashboard.js b/webapp/src/config/dashboard.js
new file mode 100644
index 0000000..c03c9a3
--- /dev/null
+++ b/webapp/src/config/dashboard.js
@@ -0,0 +1,9 @@
+import GroupModule from '@/components/GroupModule'
+import BackendModule from '@/components/BackendModule'
+import PermissionModule from '@/components/PermissionModule'
+
+export default [
+ { path: 'groups', component: GroupModule, icon: 'category' },
+ { path: 'backends', component: BackendModule, icon: 'cloud' },
+ { path: 'permissions', component: PermissionModule, icon: 'lock_open' }
+]
diff --git a/webapp/src/config/i18n.js b/webapp/src/config/i18n.js
new file mode 100644
index 0000000..12aece9
--- /dev/null
+++ b/webapp/src/config/i18n.js
@@ -0,0 +1,60 @@
+export default {
+ 'en': {
+ 'continue': 'Continue',
+ 'cancel': 'Cancel',
+ 'delete': 'Delete',
+ 'create': 'Create',
+ 'remove': 'Remove',
+ 'add': 'Add',
+ 'save': 'Save',
+ 'edit': 'Edit',
+ '$vuetify': {
+ 'dataIterator': {
+ 'rowsPerPageText': 'Items per page:',
+ 'rowsPerPageAll': 'All',
+ 'pageText': '{0}-{1} of {2}',
+ 'noResultsText': 'No matching records found',
+ 'nextPage': 'Next page',
+ 'prevPage': 'Previous page'
+ },
+ 'dataTable': {
+ 'rowsPerPageText': 'Rows per page:'
+ },
+ 'noDataText': 'No data available'
+ },
+ '$dashboardModules': {
+ 'groups': 'Groups / Clients',
+ 'backends': 'External Backends',
+ 'permissions': 'Permission Manager'
+ }
+ },
+ 'de': {
+ 'continue': 'Weiter',
+ 'cancel': 'Abbrechen',
+ 'delete': 'Löschen',
+ 'create': 'Erstellen',
+ 'remove': 'Entfernen',
+ 'add': 'Hinzufügen',
+ 'save': 'Speichern',
+ 'edit': 'Bearbeiten',
+ '$vuetify': {
+ 'dataIterator': {
+ 'rowsPerPageText': 'Einträge pro Seite:',
+ 'rowsPerPageAll': 'Alle',
+ 'pageText': '{0}-{1} von {2}',
+ 'noResultsText': 'Keine übereinstimmenden Einträge gefunden',
+ 'nextPage': 'Nächste Seite',
+ 'prevPage': 'Vorherige Seite'
+ },
+ 'dataTable': {
+ 'rowsPerPageText': 'Reihen pro Seite:'
+ },
+ 'noDataText': 'Keine Daten verfügbar'
+ },
+ '$dashboardModules': {
+ 'groups': 'Gruppen / Clienten',
+ 'backends': 'Externe Backends',
+ 'permissions': 'Rechteverwaltung'
+ }
+ }
+}
diff --git a/webapp/src/config/store.js b/webapp/src/config/store.js
new file mode 100644
index 0000000..aab86c9
--- /dev/null
+++ b/webapp/src/config/store.js
@@ -0,0 +1,7 @@
+import groups from '@/store/groups'
+import backends from '@/store/backends'
+
+export default {
+ groups,
+ backends
+}
diff --git a/webapp/src/i18n.json b/webapp/src/i18n.json
deleted file mode 100644
index 4bf71c0..0000000
--- a/webapp/src/i18n.json
+++ /dev/null
@@ -1,50 +0,0 @@
-{
- "en": {
- "continue": "Continue",
- "cancel": "Cancel",
- "delete": "Delete",
- "create": "Create",
- "remove": "Remove",
- "add": "Add",
- "save": "Save",
- "edit": "Edit",
- "$vuetify": {
- "dataIterator": {
- "rowsPerPageText": "Items per page:",
- "rowsPerPageAll": "All",
- "pageText": "{0}-{1} of {2}",
- "noResultsText": "No matching records found",
- "nextPage": "Next page",
- "prevPage": "Previous page"
- },
- "dataTable": {
- "rowsPerPageText": "Rows per page:"
- },
- "noDataText": "No data available"
- }
- },
- "de": {
- "continue": "Weiter",
- "cancel": "Abbrechen",
- "delete": "Löschen",
- "create": "Erstellen",
- "remove": "Entfernen",
- "add": "Hinzufügen",
- "save": "Speichern",
- "edit": "Bearbeiten",
- "$vuetify": {
- "dataIterator": {
- "rowsPerPageText": "Einträge pro Seite:",
- "rowsPerPageAll": "Alle",
- "pageText": "{0}-{1} von {2}",
- "noResultsText": "Keine übereinstimmenden Einträge gefunden",
- "nextPage": "Nächste Seite",
- "prevPage": "Vorherige Seite"
- },
- "dataTable": {
- "rowsPerPageText": "Reihen pro Seite:"
- },
- "noDataText": "Keine Daten verfügbar"
- }
- }
-} \ No newline at end of file
diff --git a/webapp/src/main.js b/webapp/src/main.js
index 26c6b2c..63a8cbe 100644
--- a/webapp/src/main.js
+++ b/webapp/src/main.js
@@ -2,15 +2,21 @@ import Vue from 'vue'
import Vuetify from 'vuetify'
import 'vuetify/dist/vuetify.min.css'
import VueTouch from 'vue-touch'
-import store from './store'
+import Vuex from 'vuex'
+import globalStore from '@/store/global'
+import storeModules from '@/config/store'
import axios from 'axios'
-import router from './router'
+import router from '@/router'
import VueI18n from 'vue-i18n'
-import i18nMessages from './i18n.json'
+import i18nMessages from '@/config/i18n'
import '@/assets/styles.css'
Vue.config.productionTip = false
+Vue.use(Vuex)
+globalStore.modules = storeModules
+var store = new Vuex.Store(globalStore)
+
Vue.use(VueI18n)
const i18n = new VueI18n({
diff --git a/webapp/src/router.js b/webapp/src/router.js
index be287cf..1c9484a 100644
--- a/webapp/src/router.js
+++ b/webapp/src/router.js
@@ -2,9 +2,20 @@ import Vue from 'vue'
import Router from 'vue-router'
import LoginPage from '@/components/LoginPage'
import DashboardPage from '@/components/DashboardPage'
+import dashboardModules from '@/config/dashboard'
Vue.use(Router)
+function setChildren (modules) {
+ modules.forEach(module => {
+ if (module.component && module.component.routes) {
+ module.children = module.component.routes()
+ setChildren(module.children)
+ }
+ })
+ return modules
+}
+
var router = new Router({
routes: [
{
@@ -16,7 +27,7 @@ var router = new Router({
path: '/dashboard',
name: 'Dashboard',
component: DashboardPage,
- children: DashboardPage.dashboardModules.concat(DashboardPage.hiddenModules)
+ children: setChildren(dashboardModules.concat(DashboardPage.routes()))
},
{
path: '*',
diff --git a/webapp/src/store/index.js b/webapp/src/store/index.js
deleted file mode 100644
index afaa1b4..0000000
--- a/webapp/src/store/index.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import Vue from 'vue'
-import Vuex from 'vuex'
-import globalStore from '@/store/global'
-import groups from '@/store/groups'
-import backends from '@/store/backends'
-
-Vue.use(Vuex)
-
-globalStore.modules = {
- groups,
- backends
-}
-
-export default new Vuex.Store(globalStore)