2023-12-14 23:29:36 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<div class="avatar">
|
|
|
|
|
|
<div class="avatar-left">
|
|
|
|
|
|
<el-avatar :size="props.size" :src="iconUrl" />
|
|
|
|
|
|
|
2023-12-21 12:56:06 +08:00
|
|
|
|
<div v-if="props.isSelf" class="avatar-center">
|
2023-12-14 23:29:36 +08:00
|
|
|
|
<div class="nick">{{ userInfo.nick }}</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div v-if="!props.isSelf">
|
|
|
|
|
|
<div class="nick" :class="{ mt_1: props.time != 'undefined' }">
|
2023-12-23 15:02:49 +08:00
|
|
|
|
<div class="text">{{ userInfo.nick }}</div>
|
|
|
|
|
|
<div class="level">
|
2023-12-23 18:47:28 +08:00
|
|
|
|
<el-tag round effect="light" type="success" v-if="userInfo.level">{{
|
2023-12-23 15:02:49 +08:00
|
|
|
|
userInfo.level
|
|
|
|
|
|
}}</el-tag>
|
|
|
|
|
|
</div>
|
2023-12-23 18:47:28 +08:00
|
|
|
|
<div class="status" v-if="userInfo.userLimit">
|
2023-12-23 15:02:49 +08:00
|
|
|
|
<el-tag round effect="light" :type="userInfo.userLimit.type">
|
|
|
|
|
|
{{ userInfo.userLimit.label }}
|
|
|
|
|
|
</el-tag>
|
|
|
|
|
|
</div>
|
2023-12-14 10:15:23 +08:00
|
|
|
|
</div>
|
2023-12-14 23:29:36 +08:00
|
|
|
|
<div class="remarks" v-if="props.time">{{ props.time }}</div>
|
|
|
|
|
|
<div class="remarks">
|
|
|
|
|
|
<slot name="bottom" />
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="info" v-if="!props.isSelf">
|
|
|
|
|
|
<el-tag class="ml-2" type="warning">V8</el-tag>
|
|
|
|
|
|
<el-tag class="ml-2" type="danger">会员</el-tag>
|
|
|
|
|
|
</div>
|
2023-12-21 12:56:06 +08:00
|
|
|
|
<el-button
|
|
|
|
|
|
v-if="props.showWatching"
|
|
|
|
|
|
type="primary"
|
|
|
|
|
|
size="small"
|
|
|
|
|
|
icon="Plus"
|
|
|
|
|
|
>关注</el-button
|
|
|
|
|
|
>
|
2023-12-14 10:15:23 +08:00
|
|
|
|
</div>
|
2023-12-14 23:29:36 +08:00
|
|
|
|
</div>
|
2023-12-14 10:15:23 +08:00
|
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
2023-12-14 23:29:36 +08:00
|
|
|
|
import useUserStore from "@/stores/user";
|
|
|
|
|
|
import { reactive, watch, onMounted, computed, ref } from "vue";
|
2023-12-24 21:26:04 +08:00
|
|
|
|
import { upload } from "@/apis/fileApi";
|
|
|
|
|
|
|
2023-12-14 10:15:23 +08:00
|
|
|
|
//userInfo
|
|
|
|
|
|
//{icon,name,role,id},根据判断userInfo是否等于未定义,来觉得是当前登录用户信息,还是其他人信息
|
2023-12-14 23:29:36 +08:00
|
|
|
|
const props = defineProps([
|
|
|
|
|
|
"size",
|
|
|
|
|
|
"showWatching",
|
|
|
|
|
|
"time",
|
|
|
|
|
|
"userInfo",
|
|
|
|
|
|
"isSelf",
|
|
|
|
|
|
]);
|
2023-12-14 10:15:23 +08:00
|
|
|
|
const userStore = useUserStore();
|
|
|
|
|
|
const userInfo = reactive({
|
2023-12-14 23:29:36 +08:00
|
|
|
|
icon: "",
|
|
|
|
|
|
nick: "",
|
|
|
|
|
|
role: [],
|
|
|
|
|
|
id: "",
|
2023-12-23 18:47:28 +08:00
|
|
|
|
level: "",
|
|
|
|
|
|
userLimit: "",
|
2023-12-14 10:15:23 +08:00
|
|
|
|
});
|
2023-12-15 00:56:23 +08:00
|
|
|
|
const iconUrl = ref("/favicon.ico");
|
2023-12-24 21:26:04 +08:00
|
|
|
|
const iconUrlHandler = (icon) => {
|
2023-12-14 23:29:36 +08:00
|
|
|
|
if (
|
|
|
|
|
|
userInfo.icon == null ||
|
|
|
|
|
|
userInfo.icon == undefined ||
|
|
|
|
|
|
userInfo.icon == ""
|
|
|
|
|
|
) {
|
2023-12-15 00:56:23 +08:00
|
|
|
|
return "/favicon.ico";
|
2023-12-24 21:26:04 +08:00
|
|
|
|
} else {
|
|
|
|
|
|
return import.meta.env.VITE_APP_BASEAPI + "/file/" + icon;
|
2023-12-14 23:29:36 +08:00
|
|
|
|
}
|
|
|
|
|
|
};
|
2023-12-14 10:15:23 +08:00
|
|
|
|
|
|
|
|
|
|
watch(userStore, (n) => {
|
2023-12-14 23:29:36 +08:00
|
|
|
|
if (props.userInfo == undefined) {
|
|
|
|
|
|
userInfo.nick = n.name;
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
2023-12-14 10:15:23 +08:00
|
|
|
|
|
2023-12-14 23:29:36 +08:00
|
|
|
|
watch(
|
|
|
|
|
|
() => props,
|
|
|
|
|
|
(n) => {
|
2023-12-14 10:15:23 +08:00
|
|
|
|
Init();
|
2023-12-14 23:29:36 +08:00
|
|
|
|
},
|
|
|
|
|
|
{ deep: true }
|
|
|
|
|
|
);
|
2023-12-14 10:15:23 +08:00
|
|
|
|
|
|
|
|
|
|
onMounted(() => {
|
2023-12-14 23:29:36 +08:00
|
|
|
|
Init();
|
|
|
|
|
|
});
|
2023-12-14 10:15:23 +08:00
|
|
|
|
|
|
|
|
|
|
const Init = () => {
|
2023-12-14 23:29:36 +08:00
|
|
|
|
//使用传入值
|
|
|
|
|
|
if (props.userInfo != undefined) {
|
|
|
|
|
|
userInfo.icon = props.userInfo.icon;
|
|
|
|
|
|
userInfo.nick = props.userInfo.nick;
|
|
|
|
|
|
userInfo.role = props.userInfo.role;
|
|
|
|
|
|
userInfo.id = props.userInfo.id;
|
2023-12-23 15:02:49 +08:00
|
|
|
|
userInfo.level = "等级" + props.userInfo.level;
|
2023-12-23 18:47:28 +08:00
|
|
|
|
userInfo.userLimit = getStatusInfo(props.userInfo.userLimit);
|
2023-12-14 23:29:36 +08:00
|
|
|
|
iconUrl.value = iconUrlHandler(userInfo.icon);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//使用当前登录用户
|
|
|
|
|
|
else {
|
|
|
|
|
|
userInfo.icon = userStore.icon;
|
|
|
|
|
|
userInfo.nick = userStore.name;
|
|
|
|
|
|
userInfo.role = userStore.role;
|
|
|
|
|
|
userInfo.id = userStore.id;
|
2023-12-16 10:03:29 +08:00
|
|
|
|
iconUrl.value = userInfo.icon;
|
2023-12-14 23:29:36 +08:00
|
|
|
|
}
|
|
|
|
|
|
};
|
2023-12-23 15:02:49 +08:00
|
|
|
|
|
|
|
|
|
|
const statusTypeList = [
|
|
|
|
|
|
{
|
|
|
|
|
|
label: "正常",
|
|
|
|
|
|
value: 0,
|
|
|
|
|
|
type: "success",
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
label: "危险",
|
|
|
|
|
|
value: 1,
|
|
|
|
|
|
type: "warning",
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
label: "已禁止",
|
|
|
|
|
|
value: 2,
|
|
|
|
|
|
type: "danger",
|
|
|
|
|
|
},
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
|
|
const getStatusInfo = (type) => {
|
|
|
|
|
|
return statusTypeList.filter((item) => item.value === type)[0];
|
|
|
|
|
|
};
|
2023-12-14 10:15:23 +08:00
|
|
|
|
</script>
|
|
|
|
|
|
<style scoped>
|
|
|
|
|
|
.mt_1 {
|
2023-12-14 23:29:36 +08:00
|
|
|
|
margin-top: 0.5rem;
|
2023-12-14 10:15:23 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.nick {
|
2023-12-23 15:02:49 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: space-between;
|
2023-12-14 23:29:36 +08:00
|
|
|
|
font-weight: bold;
|
2023-12-23 15:02:49 +08:00
|
|
|
|
> div {
|
|
|
|
|
|
margin-right: 10px;
|
|
|
|
|
|
}
|
2023-12-14 10:15:23 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.info {
|
2023-12-21 12:56:06 +08:00
|
|
|
|
flex: 1;
|
2023-12-14 23:29:36 +08:00
|
|
|
|
margin-top: 0.6rem;
|
|
|
|
|
|
margin-left: 1rem;
|
2023-12-14 10:15:23 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.info .el-tag {
|
2023-12-14 23:29:36 +08:00
|
|
|
|
margin-right: 1rem;
|
2023-12-14 10:15:23 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.el-icon {
|
2023-12-14 23:29:36 +08:00
|
|
|
|
color: white;
|
2023-12-14 10:15:23 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.avatar {
|
2023-12-21 12:56:06 +08:00
|
|
|
|
flex: 1;
|
2023-12-14 23:29:36 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
justify-content: space-between;
|
2023-12-14 10:15:23 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.avatar-left {
|
2023-12-14 23:29:36 +08:00
|
|
|
|
display: flex;
|
2023-12-21 12:56:06 +08:00
|
|
|
|
justify-content: space-between;
|
2023-12-14 23:29:36 +08:00
|
|
|
|
align-items: center;
|
2023-12-14 10:15:23 +08:00
|
|
|
|
}
|
2023-12-21 12:56:06 +08:00
|
|
|
|
.avatar-center {
|
|
|
|
|
|
flex: 2;
|
|
|
|
|
|
}
|
2023-12-14 10:15:23 +08:00
|
|
|
|
.el-avatar {
|
2023-12-16 10:03:29 +08:00
|
|
|
|
margin-right: 1rem;
|
|
|
|
|
|
--el-avatar-bg-color: none;
|
2023-12-14 10:15:23 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.remarks {
|
2023-12-14 23:29:36 +08:00
|
|
|
|
padding-top: 0.5rem;
|
|
|
|
|
|
color: #8c8c8c;
|
2023-12-14 10:15:23 +08:00
|
|
|
|
}
|
2023-12-14 23:29:36 +08:00
|
|
|
|
</style>
|