/home/ivoiecob/email.hirewise-va.com/modules/AdminPanelWebclient/vue/src/pages/System.vue
<template>
<main-layout>
<q-splitter after-class="q-splitter__right-panel" class="full-height full-width" v-model="splitterWidth"
:limits="[10,30]">
<template v-slot:before>
<q-scroll-area class="full-height full-width">
<q-list>
<div v-for="item in tabs" :key="item.tabName">
<q-item clickable @click="changeTab(item.tabName)"
:class="currentTabName === item.tabName ? 'bg-selected-item text-white' : ''"
>
<q-item-section>
<q-item-label lines="1">{{ $t(item.tabTitle) }}</q-item-label>
</q-item-section>
</q-item>
<q-separator/>
</div>
</q-list>
</q-scroll-area>
</template>
<template v-slot:after>
<router-view></router-view>
</template>
</q-splitter>
</main-layout>
</template>
<script>
import _ from 'lodash'
import modulesManager from 'src/modules-manager'
import settings from 'src/settings'
import typesUtils from 'src/utils/types'
import MainLayout from 'src/layouts/MainLayout'
export default {
name: 'System',
components: {
MainLayout,
},
data() {
return {
tabs: [],
splitterWidth: typesUtils.pInt(localStorage.getItem('aurora_admin_system_splitter-width'), 20),
currentTabName: '',
}
},
watch: {
$route(to, from) {
this.setCurrentTabName()
},
tabs () {
this.setCurrentTabName()
},
splitterWidth () {
localStorage.setItem('aurora_admin_system_splitter-width', this.splitterWidth)
}
},
mounted () {
const tabsOrder = settings.getTabsOrder()
let tabs = modulesManager.getAdminEntityTabs('getAdminSystemTabs').map(tab => {
return {
tabName: tab.tabName,
tabTitle: tab.tabTitle,
}
})
if (typesUtils.isNonEmptyArray(tabs)) {
tabs = _.sortBy(tabs, (tab) => {
const index = _.indexOf(tabsOrder, tab.tabName)
return index !== -1 ? index : tabsOrder.length
})
this.tabs = tabs
}
},
methods: {
setCurrentTabName () {
const fullPath = this.$route.fullPath
const pathParts = fullPath.split('/')
this.currentTabName = pathParts.length > 2 ? pathParts[2] : ''
if (!this.currentTabName) {
this.changeTab(this.tabs[0].tabName)
}
// Third element in the path represents current tab name. Paths examples:
// /system/licensing
// /system/mail-servers
// /system/mail-servers/id/1
},
changeTab (tabName) {
// const currentPath = this.$router.currentRoute. && this.$router.currentRoute.path ? this.$router.currentRoute.path : ''
const currentPath = this.$route?.path || ''
const newPath = '/system/' + tabName
if (currentPath !== newPath) {
this.$router.push(newPath)
} else {
this.setCurrentTabName()
}
},
},
}
</script>
<style lang="scss">
</style>