chat-app/src/components/avatar-module/index.vue

95 lines
2.1 KiB
Vue
Raw Normal View History

2024-11-11 06:46:14 +00:00
<template>
<div class="avatar-module" :style="customStyle">
<img :src="avatar" v-if="avatar" />
<span v-else :style="customTextStyle">{{ text_avatar }}</span>
2024-11-11 06:46:14 +00:00
</div>
</template>
<script setup>
//群聊默认头像
import groupNormal from '@/static/image/chatList/groupNormal.png'
import groupDepartment from '@/static/image/chatList/groupDepartment.png'
import groupProject from '@/static/image/chatList/groupProject.png'
import groupCompany from '@/static/image/chatList/groupCompany.png'
import { computed, defineProps } from 'vue'
const props = defineProps({
mode: {
//模式1=人2=群
type: Number,
default: 0,
},
avatar: {
//头像
type: String,
default: '',
},
userName: {
//用户名称
type: String,
default: '',
},
groupType: {
//群类型1=普通群2=部门群3=项目群4=总群/公司群
type: Number,
default: 0,
},
customStyle: {
//自定义样式
type: Object,
default() {
return {}
},
},
customTextStyle: {
//自定义文字样式
type: Object,
default() {
return {}
},
},
})
//头像
const avatar = computed(() => {
let avatar_img = props?.avatar
if (!avatar_img) {
if (props?.mode === 1) {
} else if (props?.mode === 2) {
if (props?.groupType === 1) {
avatar_img = groupNormal
} else if (props?.groupType === 2) {
avatar_img = groupDepartment
} else if (props?.groupType === 3) {
avatar_img = groupProject
} else if (props?.groupType === 4) {
avatar_img = groupCompany
}
}
}
return avatar_img
})
//文字头像
const text_avatar = computed(() => {
return props?.userName.length >= 2
? props?.userName.slice(-2)
: props?.userName
})
</script>
<style lang="scss" scoped>
.avatar-module {
border-radius: 50%;
overflow: hidden;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
background: linear-gradient(to right, #674bbc, #46299d);
flex-shrink: 0;
img {
width: 100%;
height: 100%;
}
}
</style>