236 lines
4.7 KiB
Vue
236 lines
4.7 KiB
Vue
<template>
|
|
<v-navigation-drawer
|
|
id="core-navigation-drawer"
|
|
v-model="drawer"
|
|
:dark="barColor !== 'rgba(228, 226, 226, 1), rgba(255, 255, 255, 0.7)'"
|
|
:expand-on-hover="expandOnHover"
|
|
:right="$vuetify.rtl"
|
|
:src="barImage"
|
|
mobile-break-point="960"
|
|
app
|
|
width="260"
|
|
v-bind="$attrs"
|
|
>
|
|
<template v-slot:img="props">
|
|
<v-img
|
|
:gradient="`to bottom, ${barColor}`"
|
|
v-bind="props"
|
|
/>
|
|
</template>
|
|
|
|
<v-divider class="mb-1" />
|
|
|
|
<v-list
|
|
dense
|
|
nav
|
|
>
|
|
<v-list-item>
|
|
<v-list-item-avatar
|
|
class="align-self-center"
|
|
color="white"
|
|
contain
|
|
>
|
|
<v-img
|
|
src="https://demos.creative-tim.com/vuetify-material-dashboard/favicon.ico"
|
|
max-height="30"
|
|
/>
|
|
</v-list-item-avatar>
|
|
|
|
<v-list-item-content>
|
|
<v-list-item-title
|
|
class="display-1"
|
|
v-text="profile.title"
|
|
/>
|
|
</v-list-item-content>
|
|
</v-list-item>
|
|
</v-list>
|
|
|
|
<v-divider class="mb-2" />
|
|
|
|
<v-list
|
|
expand
|
|
nav
|
|
>
|
|
<!-- Style cascading bug -->
|
|
<!-- https://github.com/vuetifyjs/vuetify/pull/8574 -->
|
|
<div />
|
|
|
|
<template v-for="(item, i) in computedItems">
|
|
<base-item-group
|
|
v-if="item.children"
|
|
:key="`group-${i}`"
|
|
:item="item"
|
|
>
|
|
<!-- -->
|
|
</base-item-group>
|
|
|
|
<base-item
|
|
v-else
|
|
:key="`item-${i}`"
|
|
:item="item"
|
|
/>
|
|
</template>
|
|
|
|
<!-- Style cascading bug -->
|
|
<!-- https://github.com/vuetifyjs/vuetify/pull/8574 -->
|
|
<div />
|
|
</v-list>
|
|
|
|
<template v-slot:append>
|
|
<base-item
|
|
:item="{
|
|
title: $t('upgrade'),
|
|
icon: 'mdi-package-up',
|
|
to: '/upgrade',
|
|
}"
|
|
/>
|
|
</template>
|
|
</v-navigation-drawer>
|
|
</template>
|
|
|
|
<script>
|
|
// Utilities
|
|
import {
|
|
mapState,
|
|
} from 'vuex'
|
|
|
|
export default {
|
|
name: 'DashboardCoreDrawer',
|
|
|
|
props: {
|
|
expandOnHover: {
|
|
type: Boolean,
|
|
default: false,
|
|
},
|
|
},
|
|
|
|
data: () => ({
|
|
items: [
|
|
{
|
|
icon: 'mdi-view-dashboard',
|
|
title: 'dashboard',
|
|
to: '/',
|
|
},
|
|
{
|
|
icon: 'mdi-account',
|
|
title: 'user',
|
|
to: '/pages/user',
|
|
},
|
|
{
|
|
title: 'rtables',
|
|
icon: 'mdi-clipboard-outline',
|
|
to: '/tables/regular-tables',
|
|
},
|
|
{
|
|
title: 'typography',
|
|
icon: 'mdi-format-font',
|
|
to: '/components/typography',
|
|
},
|
|
{
|
|
title: 'icons',
|
|
icon: 'mdi-chart-bubble',
|
|
to: '/components/icons',
|
|
},
|
|
{
|
|
title: 'google',
|
|
icon: 'mdi-map-marker',
|
|
to: '/maps/google-maps',
|
|
},
|
|
{
|
|
title: 'notifications',
|
|
icon: 'mdi-bell',
|
|
to: '/components/notifications',
|
|
},
|
|
],
|
|
}),
|
|
|
|
computed: {
|
|
...mapState(['barColor', 'barImage']),
|
|
drawer: {
|
|
get () {
|
|
return this.$store.state.drawer
|
|
},
|
|
set (val) {
|
|
this.$store.commit('SET_DRAWER', val)
|
|
},
|
|
},
|
|
computedItems () {
|
|
return this.items.map(this.mapItem)
|
|
},
|
|
profile () {
|
|
return {
|
|
avatar: true,
|
|
title: this.$t('avatar'),
|
|
}
|
|
},
|
|
},
|
|
|
|
methods: {
|
|
mapItem (item) {
|
|
return {
|
|
...item,
|
|
children: item.children ? item.children.map(this.mapItem) : undefined,
|
|
title: this.$t(item.title),
|
|
}
|
|
},
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style lang="sass">
|
|
@import '~vuetify/src/styles/tools/_rtl.sass'
|
|
|
|
#core-navigation-drawer
|
|
.v-list-group__header.v-list-item--active:before
|
|
opacity: .24
|
|
|
|
.v-list-item
|
|
&__icon--text,
|
|
&__icon:first-child
|
|
justify-content: center
|
|
text-align: center
|
|
width: 20px
|
|
|
|
+ltr()
|
|
margin-right: 24px
|
|
margin-left: 12px !important
|
|
|
|
+rtl()
|
|
margin-left: 24px
|
|
margin-right: 12px !important
|
|
|
|
.v-list--dense
|
|
.v-list-item
|
|
&__icon--text,
|
|
&__icon:first-child
|
|
margin-top: 10px
|
|
|
|
.v-list-group--sub-group
|
|
.v-list-item
|
|
+ltr()
|
|
padding-left: 8px
|
|
|
|
+rtl()
|
|
padding-right: 8px
|
|
|
|
.v-list-group__header
|
|
+ltr()
|
|
padding-right: 0
|
|
|
|
+rtl()
|
|
padding-right: 0
|
|
|
|
.v-list-item__icon--text
|
|
margin-top: 19px
|
|
order: 0
|
|
|
|
.v-list-group__header__prepend-icon
|
|
order: 2
|
|
|
|
+ltr()
|
|
margin-right: 8px
|
|
|
|
+rtl()
|
|
margin-left: 8px
|
|
</style>
|