Browse Source

Merge remote-tracking branch 'origin/master'

master
DX 4 days ago
parent
commit
dff66c1093
  1. 71
      src/layout/components/UserInfo/src/UserInfo.vue

71
src/layout/components/UserInfo/src/UserInfo.vue

@ -2,37 +2,27 @@
import { ElMessageBox } from 'element-plus'
import avatarImg from '@/assets/imgs/avatar.gif'
import { useDesign } from '@/hooks/web/useDesign'
import { useTagsViewStore } from '@/store/modules/tagsView'
import { useUserStore } from '@/store/modules/user'
import LockDialog from './components/LockDialog.vue'
import LockPage from './components/LockPage.vue'
import { useLockStore } from '@/store/modules/lock'
defineOptions({ name: 'UserInfo' })
const { t } = useI18n()
const { push, replace } = useRouter()
const { replace } = useRouter()
const userStore = useUserStore()
const tagsViewStore = useTagsViewStore()
const { getPrefixCls } = useDesign()
const prefixCls = getPrefixCls('user-info')
const avatar = computed(() => userStore.user.avatar || avatarImg)
const realName = computed(() => userStore.user.realName ?? '管理员')
const deptName = computed(() => userStore.user.deptName ?? '管理员')
//
const lockStore = useLockStore()
const getIsLock = computed(() => lockStore.getLockInfo?.isLock ?? false)
const dialogVisible = ref<boolean>(false)
const lockScreen = () => {
dialogVisible.value = true
}
const loginOut = async () => {
try {
@ -46,51 +36,20 @@ const loginOut = async () => {
replace('/login?redirect=/index')
} catch {}
}
const toProfile = async () => {
push('/user/profile')
}
const toDocument = () => {
window.open('https://doc.iocoder.cn/')
}
</script>
<template>
<ElDropdown class="block" :class="prefixCls" trigger="click">
<div class="flex items-center gap-4px">
<ElAvatar :src="avatar" alt="" :size="32" class="rounded-[50%]" />
<span class="text-14px color-#303133 font-500 line-height-22px">
{{ realName }} | {{ deptName }}
</span>
</div>
<template #dropdown>
<ElDropdownMenu>
<ElDropdownItem>
<Icon icon="ep:tools" />
<div @click="toProfile">{{ t('common.profile') }}</div>
</ElDropdownItem>
<ElDropdownItem>
<Icon icon="ep:menu" />
<div @click="toDocument">{{ t('common.document') }}</div>
</ElDropdownItem>
<ElDropdownItem divided>
<Icon icon="ep:lock" />
<div @click="lockScreen">{{ t('lock.lockScreen') }}</div>
</ElDropdownItem>
<ElDropdownItem divided @click="loginOut">
<Icon icon="ep:switch-button" />
<div>{{ t('common.loginOut') }}</div>
</ElDropdownItem>
</ElDropdownMenu>
</template>
</ElDropdown>
<LockDialog v-if="dialogVisible" v-model="dialogVisible" />
<teleport to="body">
<transition name="fade-bottom" mode="out-in">
<LockPage v-if="getIsLock" />
</transition>
</teleport>
<div class="flex items-center gap-8px">
<ElAvatar :src="avatar" alt="" :size="32" class="rounded-[50%]" />
<span class="text-14px color-#303133 font-500 line-height-22px">
{{ realName }} | {{ deptName }}
</span>
<div @click="loginOut" class="hover:color-[var(--el-color-primary)] translate-y-1px">
<Icon icon="ep:switch-button" :size="20"/>
</div>
</div>
</template>
<style scoped lang="scss">

Loading…
Cancel
Save