11<script setup lang="ts">
2- import { ChevronDown } from ' lucide-vue-next' ;
3-
4- const { data, signOut } = useAuth ();;
5- const { hasPermission } = usePermission ();
2+ import { ChevronDown } from " lucide-vue-next" ;
63
4+ const { data, signOut } = useAuth ();
5+ const { hasPermission, hasRole } = usePermission ();
76 </script >
87
98<template >
109 <div class =" relative" >
1110 <DropdownMenu >
1211 <DropdownMenuTrigger >
1312 <div class =" flex items-center cursor-pointer" >
14- <div class =" h-9 w-9 rounded-full border-slate-dark border-[2px] bg-primary-lighter relative" >
13+ <div
14+ class =" h-9 w-9 rounded-full border-slate-dark border-[2px] bg-primary-lighter relative"
15+ >
1516 <img
16- class =" h-[100%] aspect-auto inline-block rounded-full" :src =" data?.user?.image || ''"
17- alt =" User's avatar" >
17+ class =" h-[100%] aspect-auto inline-block rounded-full"
18+ :src =" data?.user?.image || ''"
19+ alt =" User's avatar"
20+ />
1821 <div
19- class =" w-3 h-3 absolute bg-safe-darker rounded-full z-50 border-white border-[2px] top-6 right-[-2px]"
20- aria-hidden />
22+ class =" w-3 h-3 absolute bg-safe-darker rounded-full z-50 border-white border-[2px] top-6 right-[-2px]"
23+ aria-hidden
24+ />
2125 </div >
2226 <ChevronDown class =" h-4 w-4 ml-2 text-gray-500" :stroke-width =" 3" />
2327 </div >
@@ -26,21 +30,40 @@ class="w-3 h-3 absolute bg-safe-darker rounded-full z-50 border-white border-[2p
2630 <DropdownMenuContent class =" w-56" >
2731 <div class =" flex items-center p-2 border-b" >
2832 <div class =" h-8 w-8 rounded-full bg-gray-200 mr-2" >
29- <img :src =" data?.user?.image || ''" class =" h-full w-full rounded-full" alt =" User's avatar" >
33+ <img
34+ :src =" data?.user?.image || ''"
35+ class =" h-full w-full rounded-full"
36+ alt =" User's avatar"
37+ />
3038 </div >
3139 <div class =" flex flex-col" >
3240 <span class =" text-md font-medium" >{{ data?.user?.name }}</span >
33- <span class =" text-normal text-gray-500" >{{ data?.user?.roles.map(role => role.name).join(', ') }}</span >
41+ <span class =" text-normal text-gray-500" >{{
42+ data?.user?.roles.map((role) => role.name).join(", ")
43+ }}</span >
3444 </div >
3545 </div >
3646
37- <NuxtLink v-if =" hasPermission('/settings/users:own')" href =" /settings/users" >
47+ <DropdownMenuItem
48+ v-if =" hasRole(['student', 'teacher'])"
49+ class =" cursor-pointer"
50+ >
51+ <UserQrButton class =" w-full h-auto" />
52+ </DropdownMenuItem >
53+
54+ <NuxtLink
55+ v-if =" hasPermission('/settings/users:own')"
56+ href =" /settings/users"
57+ >
3858 <DropdownMenuItem class =" cursor-pointer" >
3959 <span class =" text-normal" >Cài đặt</span >
4060 </DropdownMenuItem >
4161 </NuxtLink >
4262
43- <DropdownMenuItem class =" text-red-600 cursor-pointer hover:!bg-red-400" @click =" signOut({ callbackUrl: '/' })" >
63+ <DropdownMenuItem
64+ class =" text-red-600 cursor-pointer hover:!bg-red-400"
65+ @click =" signOut({ callbackUrl: '/' })"
66+ >
4467 <span class =" text-normal" >Đăng xuất</span >
4568 </DropdownMenuItem >
4669 </DropdownMenuContent >
0 commit comments