mirror of
https://github.com/headporter81/specialsource-homepage-frontend.git
synced 2026-08-08 15:21:11 +09:00
This commit is contained in:
+7
-24
@@ -36,6 +36,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
<nav class="auth-nav" style="display: none;"></nav>
|
||||||
|
|
||||||
<main class="content-area">
|
<main class="content-area">
|
||||||
<transition name="fade" mode="out-in">
|
<transition name="fade" mode="out-in">
|
||||||
|
|
||||||
@@ -173,6 +175,9 @@ const menuItems = [
|
|||||||
|
|
||||||
const loggedInUser = ref(localStorage.getItem('username') || 'anonymous');
|
const loggedInUser = ref(localStorage.getItem('username') || 'anonymous');
|
||||||
|
|
||||||
|
// 🟢 [★복구] 유실되었던 로그인 상태 체크 computed 함수를 제자리에 원상 복구 완료
|
||||||
|
const isLoggedIn = computed(() => !!authToken.value);
|
||||||
|
|
||||||
const rawAscii = `
|
const rawAscii = `
|
||||||
███████╗██████╗ ███████╗ ██████╗██╗ █████╗ ██╗
|
███████╗██████╗ ███████╗ ██████╗██╗ █████╗ ██╗
|
||||||
██╔════╝██╔══██╗██╔════╝██╔════╝██║██╔══██╗██║
|
██╔════╝██╔══██╗██╔════╝██╔════╝██║██╔══██╗██║
|
||||||
@@ -291,23 +296,20 @@ const fetchVideos = async () => {
|
|||||||
const openVideo = (id) => window.open(`https://www.youtube.com/watch?v=${id}`);
|
const openVideo = (id) => window.open(`https://www.youtube.com/watch?v=${id}`);
|
||||||
const handleRegister = () => alert("회원가입은 현재 관리자 승인제로 운영됩니다.");
|
const handleRegister = () => alert("회원가입은 현재 관리자 승인제로 운영됩니다.");
|
||||||
|
|
||||||
// 🟢 [UPGRADE] 로그아웃 시 스토리지 대청소 및 프롬프트 완벽 복구
|
|
||||||
const handleLogout = () => {
|
const handleLogout = () => {
|
||||||
localStorage.removeItem('token');
|
localStorage.removeItem('token');
|
||||||
localStorage.removeItem('username'); // 👈 [추가] 브라우저에 남은 아이디 파괴
|
localStorage.removeItem('username');
|
||||||
|
|
||||||
authToken.value = null;
|
authToken.value = null;
|
||||||
loggedInUser.value = 'anonymous'; // 👈 [추가] 로그인 변수 기본값 리셋
|
loggedInUser.value = 'anonymous';
|
||||||
activeMenu.value = 'main';
|
activeMenu.value = 'main';
|
||||||
|
|
||||||
if (termInstance.value) {
|
if (termInstance.value) {
|
||||||
termInstance.value.echo(`\n[[b;red;][ALERT]] SESSION TERMINATED. USER LOGGED OUT.`);
|
termInstance.value.echo(`\n[[b;red;][ALERT]] SESSION TERMINATED. USER LOGGED OUT.`);
|
||||||
// 👈 [추가] 하단 CRT 모니터의 아이디 단말기 프롬프트도 anonymous(익명) 상태로 즉시 강제 원상복구
|
|
||||||
termInstance.value.set_prompt(`anonymous@specialsource:~$ `);
|
termInstance.value.set_prompt(`anonymous@specialsource:~$ `);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 🟢 [UPGRADE] 중복 찌꺼기를 지우고 순서를 정밀 정렬한 로그인 모듈
|
|
||||||
const handleLoginSubmit = async () => {
|
const handleLoginSubmit = async () => {
|
||||||
if (!loginId.value || !loginPw.value) {
|
if (!loginId.value || !loginPw.value) {
|
||||||
alert("아이디와 비밀번호를 모두 입력해 주세요.");
|
alert("아이디와 비밀번호를 모두 입력해 주세요.");
|
||||||
@@ -337,7 +339,6 @@ const handleLoginSubmit = async () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (response.data && response.data.token) {
|
if (response.data && response.data.token) {
|
||||||
// 1) 지저분하게 겹쳐있던 스토리지 세이브 로직 1군데로 최적화 정렬
|
|
||||||
localStorage.setItem('token', response.data.token);
|
localStorage.setItem('token', response.data.token);
|
||||||
localStorage.setItem('username', loginId.value);
|
localStorage.setItem('username', loginId.value);
|
||||||
|
|
||||||
@@ -700,22 +701,4 @@ iframe { width: 100%; height: 180px; border-radius: 4px; }
|
|||||||
}
|
}
|
||||||
.monitor-header { padding: 4px 10px; font-size: 10px; }
|
.monitor-header { padding: 4px 10px; font-size: 10px; }
|
||||||
}
|
}
|
||||||
@keyframes blink { 0%, 100% { opacity: 0.4; } 50% { opacity: 1; } }
|
|
||||||
|
|
||||||
/* 일회성 사이버 글리치 키프레임 */
|
|
||||||
@keyframes once-cyber-glitch-wobble {
|
|
||||||
0%, 25% { transform: translate(0) scale(1) skewX(0deg); color: var(--tui-color) !important; text-shadow: 0 0 8px var(--tui-glow) !important; opacity: 1; }
|
|
||||||
26% { transform: translate(-3px, 1.5px) scale(1.02); color: #ffffff !important; text-shadow: 2px 0 #ff0000, -2px 0 #0000ff !important; }
|
|
||||||
27% { transform: translate(3px, -1.5px) skewX(-2deg); color: var(--tui-color) !important; }
|
|
||||||
28% { transform: translate(-5px, 0) skewX(10deg); color: #ff00ff !important; text-shadow: -3px 0 magenta, 3px 0 cyan;}
|
|
||||||
29% { transform: translate(5px, 0) skewX(-10deg); color: #00ffff !important; text-shadow: 3px 0 magenta, -3px 0 cyan;}
|
|
||||||
30% { transform: translate(0); color: var(--tui-color) !important; text-shadow: 0 0 15px var(--tui-color) !important;}
|
|
||||||
31%, 50% { transform: translate(0); color: var(--tui-color) !important; text-shadow: 0 0 8px var(--tui-glow) !important;}
|
|
||||||
51% { transform: scale(1.05) skewY(1deg); color: #ffffff !important; opacity: 0.05; }
|
|
||||||
53% { opacity: 1; transform: translate(0); color: var(--tui-color) !important; text-shadow: 0 0 20px var(--tui-color), 0 0 40px var(--tui-glow) !important; }
|
|
||||||
90% { transform: translate(-2px, 1px); text-shadow: 2px 0 red, -2px 0 blue;}
|
|
||||||
92% { transform: translate(2px, -1px); text-shadow: -2px 0 red, 2px 0 blue;}
|
|
||||||
95% { transform: translate(0); color: var(--tui-color) !important; text-shadow: 0 0 20px var(--tui-color) !important;}
|
|
||||||
100% { transform: translate(0) scale(1) skewX(0deg); color: var(--tui-color) !important; text-shadow: 0 0 15px var(--tui-color), 0 0 30px var(--tui-glow) !important; opacity: 1; }
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
Reference in New Issue
Block a user