()
| 864 | } |
| 865 | |
| 866 | async function autoLogin() { |
| 867 | const savedToken = localStorage.getItem('gcli2api_auth_token'); |
| 868 | if (!savedToken) return false; |
| 869 | |
| 870 | AppState.authToken = savedToken; |
| 871 | |
| 872 | try { |
| 873 | const response = await fetch('./config/get', { |
| 874 | headers: { |
| 875 | 'Content-Type': 'application/json', |
| 876 | 'Authorization': `Bearer ${AppState.authToken}` |
| 877 | } |
| 878 | }); |
| 879 | |
| 880 | if (response.ok) { |
| 881 | document.getElementById('loginSection').classList.add('hidden'); |
| 882 | document.getElementById('mainSection').classList.remove('hidden'); |
| 883 | showStatus('自动登录成功', 'success'); |
| 884 | // 显示面板后初始化滑块 |
| 885 | requestAnimationFrame(() => initTabSlider()); |
| 886 | return true; |
| 887 | } else if (response.status === 401) { |
| 888 | localStorage.removeItem('gcli2api_auth_token'); |
| 889 | AppState.authToken = ''; |
| 890 | return false; |
| 891 | } |
| 892 | return false; |
| 893 | } catch (error) { |
| 894 | return false; |
| 895 | } |
| 896 | } |
| 897 | |
| 898 | function logout() { |
| 899 | localStorage.removeItem('gcli2api_auth_token'); |
no test coverage detected