| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- <template>
- <el-dropdown @command="handleCommand" @visible-change="handleVisibleChange">
- <span class="avatar-dropdown">
- <el-avatar class="user-avatar" :src="avatar" />
- <div class="user-name">
- <span class="hidden-xs-only">{{ nickName }}</span>
- <vab-icon class="vab-dropdown" :class="{ 'vab-dropdown-active': active }" icon="arrow-down-s-line" />
- </div>
- </span>
- <template #dropdown>
- <el-dropdown-menu>
- <!--用户重置密码-->
- <user-rest-pwd ref="userRestPwd" @fetch-data="logout" />
- <el-dropdown-item command="logout">
- <vab-icon icon="logout-circle-r-line" />
- {{ translateTitle('退出登录') }}
- </el-dropdown-item>
- </el-dropdown-menu>
- </template>
- </el-dropdown>
- </template>
- <script>
- import { translateTitle } from '@/utils/i18n'
- import { mapActions, mapGetters } from 'vuex'
- import { toLoginRoute } from '@/utils/routes'
- import UserRestPwd from '@/views/system/user/components/UserRestPwd'
- export default {
- name: 'VabAvatar',
- components: { UserRestPwd },
- data() {
- return {
- active: false,
- }
- },
- computed: {
- ...mapGetters({
- avatar: 'user/avatar',
- username: 'user/username',
- nickName: 'user/nickName',
- }),
- },
- methods: {
- translateTitle,
- ...mapActions({
- _logout: 'user/logout',
- }),
- handleCommand(command) {
- switch (command) {
- case 'logout':
- this.logout()
- break
- case 'userRestPwd':
- this.$refs['userRestPwd'].showEdit()
- break
- }
- },
- handleVisibleChange(val) {
- this.active = val
- },
- async logout() {
- await this._logout()
- await this.$router.push(toLoginRoute(this.$route.fullPath))
- },
- },
- }
- </script>
- <style lang="scss" scoped>
- .avatar-dropdown {
- display: flex;
- align-content: center;
- align-items: center;
- justify-content: center;
- justify-items: center;
- .user-avatar {
- width: 40px;
- height: 40px;
- margin-left: 15px;
- cursor: pointer;
- border-radius: 50%;
- }
- .user-name {
- position: relative;
- display: flex;
- align-content: center;
- align-items: center;
- height: 40px;
- margin-left: 6px;
- line-height: 40px;
- cursor: pointer;
- [class*='ri-'] {
- margin-left: 0 !important;
- }
- }
- }
- </style>
|