IntelliClass_FE/components/course/team/Member.vue

64 lines
1.8 KiB
Vue

<script lang="ts" setup>
import type { ICourseTeamMember } from "~/api/course";
defineProps<{
member: ICourseTeamMember;
isCurrentUser?: boolean;
}>();
const emit = defineEmits<{
delete: [recordId: number];
}>();
</script>
<template>
<div class="member-card relative group/member-card">
<div
class="absolute top-0 right-0 flex flex-col gap-1 invisible group-hover/member-card:visible"
>
<Button
v-if="!isCurrentUser"
variant="link"
size="icon"
@click="emit('delete', member.id)"
>
<Icon name="tabler:logout" size="20px" class="text-red-500" />
</Button>
</div>
<Avatar size="base">
<AvatarImage
:src="member.teacher.avatar || ''"
:alt="member.teacher.userName"
/>
<AvatarFallback class="rounded-lg">
{{ member.teacher.userName.slice(0, 2).toUpperCase() }}
</AvatarFallback>
</Avatar>
<div class="flex flex-col gap-1">
<h1
class="text-sm font-medium text-ellipsis line-clamp-1"
:class="`${isCurrentUser ? 'text-amber-500' : ''}`"
>
{{ member.teacher.userName || "未知教师" }}
</h1>
<p class="text-xs text-muted-foreground/80">
工号:{{ member.teacher.employeeId || "未知" }}
</p>
<p class="text-xs text-muted-foreground/80">
{{ member.teacher.schoolName || "未知学校" }}
</p>
<p class="text-xs text-muted-foreground/80">
{{ member.teacher.collegeName || "未知学院" }}
</p>
</div>
</div>
</template>
<style scoped>
.member-card {
@apply p-4 flex justify-start items-center gap-4 border border-muted-foreground/20 rounded-lg bg-background/50 shadow-md transition duration-300 ease-in-out hover:shadow-lg hover:ring-4 hover:ring-secondary;
}
</style>