141 lines
2.6 KiB
Vue
Raw Normal View History

2021-12-18 16:36:43 +08:00
<template>
<n-dropdown
trigger="hover"
@select="handleSelect"
:show-arrow="true"
:options="options"
>
2021-12-18 22:05:00 +08:00
<div class="user-info-box">
<person-icon v-if="fallback"></person-icon>
2021-12-18 16:36:43 +08:00
<n-avatar
2021-12-18 22:05:00 +08:00
v-if="!fallback"
2021-12-18 16:36:43 +08:00
round
2021-12-18 22:05:00 +08:00
object-fit="cover"
size="medium"
2022-02-06 01:04:05 +08:00
:src="Person"
2021-12-18 16:36:43 +08:00
@error="errorHandle"
></n-avatar>
2021-12-18 22:05:00 +08:00
</div>
2021-12-18 16:36:43 +08:00
</n-dropdown>
<!-- 系统设置 model -->
<system-set v-model:modelShow="modelShow"></system-set>
2021-12-18 16:36:43 +08:00
</template>
<script lang="ts" setup>
import { h, ref } from 'vue'
2021-12-18 16:36:43 +08:00
import { NAvatar, NText } from 'naive-ui'
2021-12-20 14:29:29 +08:00
import { renderIcon } from '@/utils'
import { openDoc, logout, renderLang } from '@/utils'
2022-01-08 15:00:52 +08:00
import { SystemSet } from '@/components/SystemSet/index'
2022-02-06 01:04:05 +08:00
import Person from './person.png'
import { icon } from '@/plugins'
const {
DocumentTextIcon,
ChatboxEllipsesIcon,
PersonIcon,
LogOutOutlineIcon,
SettingsSharpIcon
} = icon.ionicons5
2021-12-18 16:36:43 +08:00
2021-12-22 15:31:20 +08:00
const t = window['$t']
2021-12-22 10:38:57 +08:00
const modelShow = ref(false)
2021-12-18 16:36:43 +08:00
// 是否失败
const fallback = ref(false)
// 用户图标渲染
const renderUserInfo = () => {
return h(
'div',
{
style: 'display: flex; align-items: center; padding: 8px 12px;'
},
[
h(NAvatar, {
round: true,
style: 'margin-right: 12px;',
2022-02-06 01:04:05 +08:00
src: Person
2021-12-18 16:36:43 +08:00
}),
h('div', null, [
h('div', null, [
h(NText, { depth: 2 }, { default: () => '奔跑的面条' })
])
])
]
)
}
const options = ref([
2021-12-18 16:36:43 +08:00
{
label: '我的信息',
key: 'info',
type: 'render',
render: renderUserInfo
},
{
type: 'divider',
key: 'd1'
},
{
label: renderLang('global.doc'),
2021-12-18 16:36:43 +08:00
key: 'doc',
icon: renderIcon(DocumentTextIcon)
},
2021-12-18 22:05:00 +08:00
{
label: renderLang('global.contact'),
2021-12-18 22:05:00 +08:00
key: 'contact',
icon: renderIcon(ChatboxEllipsesIcon)
},
{
label: renderLang('global.sys_set'),
key: 'sysSet',
icon: renderIcon(SettingsSharpIcon)
},
2021-12-18 16:36:43 +08:00
{
type: 'divider',
key: 'd3'
2021-12-18 16:36:43 +08:00
},
{
label: renderLang('global.logout'),
2021-12-18 16:36:43 +08:00
key: 'logout',
icon: renderIcon(LogOutOutlineIcon)
}
])
2021-12-18 16:36:43 +08:00
// 图片渲染错误
const errorHandle = (e: Event) => {
fallback.value = true
}
// 系统设置
const sysSetHandle = () => {
modelShow.value = true
}
2021-12-18 16:36:43 +08:00
const handleSelect = (key: string) => {
switch (key) {
case 'doc':
openDoc()
break
2021-12-18 22:05:00 +08:00
case 'contact':
openDoc()
break
case 'sysSet':
sysSetHandle()
break
2021-12-18 16:36:43 +08:00
case 'logout':
logout()
break
}
}
</script>
2021-12-18 22:05:00 +08:00
<style lang="scss" scoped>
.user-info-box {
cursor: pointer;
transform: scale(0.7);
2021-12-18 22:05:00 +08:00
}
</style>