You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

164 lines
3.7 KiB

<template>
<div class="page page-me">
<el-row :gutter="20">
<el-col :span="6" class="part-left">
<el-card shadow="never">
<user-card :user="user" />
<nuxt-link to="/upload">
<el-button
type="primary"
icon="el-icon-upload2"
class="btn-block mgt-20px"
v-if="!isMobile"
></el-button
>
</nuxt-link>
<el-tabs
v-if="isMobile"
v-model="defaultActive.value"
class="mgt-20px"
type="card"
@tab-click="tabClick"
>
<el-tab-pane
v-for="item in tabs"
:key="item.value"
:name="item.value"
:label="item.label"
>
<span slot="label">
<i :class="item.icon"></i> {{ item.label }}</span
>
</el-tab-pane>
</el-tabs>
<el-menu
v-else
class="mgt-20px"
:router="true"
:default-active="defaultActive.value"
>
<el-menu-item
v-for="item in tabs"
:key="item.value"
:index="item.value"
>
<i :class="item.icon"></i>
<span slot="title">{{ item.label }}</span>
</el-menu-item>
</el-menu>
</el-card>
</el-col>
<el-col :span="18" class="part-right">
<el-card shadow="never">
<div slot="header">{{ defaultActive.label }}</div>
<div class="nuxt-child">
<nuxt-child :user="user" />
</div>
</el-card>
</el-col>
</el-row>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
export default {
name: 'PageMe',
computed: {
...mapGetters('user', ['user']),
...mapGetters('setting', ['settings']),
},
data() {
return {
defaultActive: {
value: '/me',
label: '',
},
tabs: [
{
label: '',
value: '/me',
icon: 'el-icon-magic-stick',
},
{
label: '',
value: '/me/document',
icon: 'el-icon-document',
},
{
label: '',
value: '/me/favorite',
icon: 'el-icon-star-off',
},
{
label: '',
value: '/me/download',
icon: 'el-icon-download',
},
{
label: '',
value: '/me/profile',
icon: 'fa fa-shield',
},
],
}
},
head() {
return {
title: `${this.defaultActive.label} - ${this.user.username} - ${this.settings.system.sitename}`,
}
},
watch: {
'$route.path': {
handler(val) {
// val 去掉最后的斜杠
val = val.replace(/\/$/, '')
const item = this.tabs.find((item) => item.value === val)
this.defaultActive = {
value: val,
label: item.label || '',
}
},
immediate: true,
},
},
methods: {
tabClick(tab) {
this.defaultActive = {
value: tab.name,
label: tab.label,
}
this.$router.push(tab.name)
},
},
}
</script>
<style lang="scss">
.page-me {
.el-menu {
border-right: 0;
}
.fa-shield {
margin-right: 5px;
width: 24px;
text-align: center;
font-size: 18px;
vertical-align: middle;
}
.nuxt-child {
min-height: calc(100vh - 190px);
}
}
@media screen and (max-width: $mobile-width) {
.page-me {
.part-left {
width: 100%;
}
.part-right {
margin-top: -20px;
width: 100%;
}
}
}
</style>