11<script setup>
2- import { ref , computed , onMounted } from ' vue'
2+ import { ref , onMounted } from ' vue'
33import { useRouter } from ' vue-router'
44import authApi from ' @/api/authApi'
55
66const router = useRouter ()
7+ defineOptions ({ name: ' AppHeader' })
78
89// props 정의
9- const props = defineProps ({
10+ defineProps ({
1011 isTransparent: {
1112 type: Boolean ,
1213 default: false ,
@@ -29,16 +30,20 @@ const checkLoginStatus = () => {
2930
3031// 로그인 상태 (실제 토큰 기반)
3132const isLoggedIn = ref (false )
33+ const isChildLoggedIn = ref (false )
3234
3335// 로그인 상태 업데이트
3436const updateLoginStatus = () => {
3537 isLoggedIn .value = checkLoginStatus ()
38+ isChildLoggedIn .value = !! localStorage .getItem (' child-accessToken' )
3639}
3740
3841function clearCookie (name ) {
3942 try {
4043 document .cookie = ` ${ name} =; Max-Age=0; path=/;`
41- } catch {}
44+ } catch {
45+ // ignore
46+ }
4247}
4348
4449// 로그아웃 함수
@@ -52,7 +57,7 @@ const handleLogout = async () => {
5257 // 서버에 로그아웃 요청 (HttpOnly refresh 쿠키 제거)
5358 try {
5459 await authApi .logout ()
55- } catch (e) {
60+ } catch {
5661 // ignore
5762 }
5863 clearCookie (' refreshToken' )
@@ -64,6 +69,11 @@ const handleLogout = async () => {
6469 router .push (' /' )
6570}
6671
72+ // 모드 전환 버튼: 모드 선택 페이지로 이동
73+ const handleToggleChildMode = () => {
74+ router .push (' /mode' )
75+ }
76+
6777// 로그인/로그아웃 토글
6878const toggleLogin = () => {
6979 if (isLoggedIn .value ) {
@@ -109,6 +119,7 @@ onMounted(() => {
109119 if (e .key === ' accessToken' || e .key === ' child-accessToken' ) {
110120 updateLoginStatus ()
111121 }
122+ // no-op for child-mode; header button just opens /mode
112123 })
113124})
114125 </script >
@@ -123,9 +134,17 @@ onMounted(() => {
123134 style =" width : 100% ; height : 100% ; cursor : pointer "
124135 />
125136 </div >
126- <button class =" login-btn" @click =" toggleLogin" >
127- {{ isLoggedIn ? '로그아웃' : '로그인' }}
128- </button >
137+ <div class =" header-actions" >
138+ <button
139+ v-if =" isChildLoggedIn && router.currentRoute.value.path !== '/mode'"
140+ class =" login-btn"
141+ @click =" handleToggleChildMode"
142+ aria-label =" 모드 전환"
143+ >모드 전환</button >
144+ <button class =" login-btn" @click =" toggleLogin" >
145+ {{ isLoggedIn ? '로그아웃' : '로그인' }}
146+ </button >
147+ </div >
129148 </div >
130149 </header >
131150</template >
@@ -159,6 +178,12 @@ onMounted(() => {
159178 margin : 0 auto ;
160179}
161180
181+ .header-actions {
182+ display : flex ;
183+ align-items : center ;
184+ gap : 0px ;
185+ }
186+
162187.logo {
163188 width : 120px ;
164189 height : 50px ;
0 commit comments