vuetify-demo/src/views/dashboard/components/core/Settings.vue

264 lines
6.1 KiB
Vue

<template>
<div id="settings-wrapper">
<v-card
id="settings"
class="py-2 px-4"
color="rgba(0, 0, 0, .3)"
dark
flat
link
min-width="100"
style="position: fixed; top: 115px; right: -35px; border-radius: 8px;"
>
<v-icon large>
mdi-settings
</v-icon>
</v-card>
<v-menu
v-model="menu"
:close-on-content-click="false"
activator="#settings"
bottom
content-class="v-settings"
left
nudge-left="8"
offset-x
origin="top right"
transition="scale-transition"
>
<v-card
class="text-center mb-0"
width="300"
>
<v-card-text>
<strong class="mb-3 d-inline-block">SIDEBAR FILTERS</strong>
<v-item-group v-model="color">
<v-item
v-for="color in colors"
:key="color"
:value="color"
>
<template v-slot="{ active, toggle }">
<v-avatar
:class="active && 'v-settings__item--active'"
:color="color"
class="v-settings__item"
size="25"
@click="toggle"
/>
</template>
</v-item>
</v-item-group>
<v-divider class="my-4 secondary" />
<v-row
align="center"
no-gutters
>
<v-col cols="auto">
Dark Mode
</v-col>
<v-spacer />
<v-col cols="auto">
<v-switch
v-model="$vuetify.theme.dark"
class="ma-0 pa-0"
color="secondary"
hide-details
/>
</v-col>
</v-row>
<v-divider class="my-4 secondary" />
<v-row
align="center"
no-gutters
>
<v-col cols="auto">
Sidebar Image
</v-col>
<v-spacer />
<v-col cols="auto">
<v-switch
v-model="showImg"
class="ma-0 pa-0"
color="secondary"
hide-details
/>
</v-col>
</v-row>
<v-divider class="my-4 secondary" />
<strong class="mb-3 d-inline-block">IMAGES</strong>
<v-item-group
v-model="image"
class="d-flex justify-space-between mb-3"
>
<v-item
v-for="image in images"
:key="image"
:value="image"
class="mx-1"
>
<template v-slot="{ active, toggle }">
<v-sheet
:class="active && 'v-settings__item--active'"
class="d-inline-block v-settings__item"
@click="toggle"
>
<v-img
:src="image"
height="100"
width="50"
/>
</v-sheet>
</template>
</v-item>
</v-item-group>
<v-btn
block
class="mb-3"
color="success"
href="https://www.creative-tim.com/product/vuetify-material-dashboard"
default
rel="noopener"
target="_blank"
>
Free Download
</v-btn>
<v-btn
block
class="mb-3"
color="grey darken-1"
dark
href="https://vuetifyjs.com/components/api-explorer"
default
rel="noopener"
target="_blank"
>
Documentation
</v-btn>
<div class="my-12" />
<div>
<strong class="mb-3 d-inline-block">THANK YOU FOR SHARING!</strong>
</div>
<v-btn
class="ma-1"
color="#55acee"
dark
default
rounded
>
<v-icon>mdi-twitter</v-icon>
- 45
</v-btn>
<v-btn
class="ma-1"
color="#3b5998"
dark
default
rounded
>
<v-icon>mdi-facebook</v-icon>
- 50
</v-btn>
</v-card-text>
</v-card>
</v-menu>
</div>
</template>
<script>
// Mixins
import Proxyable from 'vuetify/lib/mixins/proxyable'
import { mapMutations, mapState } from 'vuex'
export default {
name: 'DashboardCoreSettings',
mixins: [Proxyable],
data: () => ({
color: '#E91E63',
colors: [
'#9C27b0',
'#00CAE3',
'#4CAF50',
'#ff9800',
'#E91E63',
'#FF5252',
],
image: 'https://demos.creative-tim.com/material-dashboard/assets/img/sidebar-1.jpg',
images: [
'https://demos.creative-tim.com/material-dashboard/assets/img/sidebar-1.jpg',
'https://demos.creative-tim.com/material-dashboard/assets/img/sidebar-2.jpg',
'https://demos.creative-tim.com/material-dashboard/assets/img/sidebar-3.jpg',
'https://demos.creative-tim.com/material-dashboard/assets/img/sidebar-4.jpg',
],
menu: false,
saveImage: '',
showImg: true,
}),
computed: {
...mapState(['barImage']),
},
watch: {
color (val) {
this.$vuetify.theme.themes[this.isDark ? 'dark' : 'light'].primary = val
},
showImg (val) {
if (!val) {
this.saveImage = this.barImage
this.setBarImage('')
} else if (this.saveImage) {
this.setBarImage(this.saveImage)
this.saveImage = ''
} else {
this.setBarImage(val)
}
},
image (val) {
this.setBarImage(val)
},
},
methods: {
...mapMutations({
setBarImage: 'SET_BAR_IMAGE',
}),
},
}
</script>
<style lang="sass">
.v-settings
.v-item-group > *
cursor: pointer
&__item
border-width: 3px
border-style: solid
border-color: transparent !important
&--active
border-color: #00cae3 !important
</style>