forked from gongxuegit/tiku-backend.net
feat: 更新前端静态演示数据处理
This commit is contained in:
@@ -343,13 +343,13 @@ function saveData() {
|
||||
}
|
||||
}
|
||||
function backendStatusLabel() {
|
||||
if (!platformApi?.isEnabled()) return '演示模式可用';
|
||||
if (!platformApi?.isEnabled()) return '静态演示数据';
|
||||
if (state.apiConnection === 'connecting') return '正在连接后端';
|
||||
if (state.apiConnection === 'connected') {
|
||||
const partial = state.apiFailedOperations ? ` · ${state.apiFailedOperations} 项无权限/失败` : '';
|
||||
const partial = state.apiFailedOperations ? ` · ${state.apiFailedOperations} 项加载失败` : '';
|
||||
return `后端已连接${partial}`;
|
||||
}
|
||||
return '演示模式可用';
|
||||
return '后端不可用 · 已保留静态演示';
|
||||
}
|
||||
function backendErrorText(error, fallback = '平台接口请求失败') {
|
||||
if (!error) return fallback;
|
||||
@@ -424,10 +424,14 @@ async function hydrateFromBackend({ silent = false } = {}) {
|
||||
if (!silent) showToast(`后端数据已刷新 · ${successful}/${result.requested} 项成功`);
|
||||
return true;
|
||||
} catch (error) {
|
||||
if (error?.status === 401) {
|
||||
window.GongxuePlatformAuth?.requireReauthentication();
|
||||
return false;
|
||||
}
|
||||
state.apiConnection = 'degraded';
|
||||
state.apiFailedOperations = 1;
|
||||
render();
|
||||
if (!silent) showToast(`${backendErrorText(error, '后端连接失败')} · 已切换至演示模式`, 'error');
|
||||
if (!silent) showToast(`${backendErrorText(error, '后端连接失败')} · 已保留静态演示`, 'error');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,11 +8,11 @@
|
||||
<link rel="icon" href="./assets/logo.png" />
|
||||
<link rel="stylesheet" href="./styles.css?v=20260728-api2" />
|
||||
<script src="https://unpkg.com/lucide@0.468.0/dist/umd/lucide.min.js" defer onerror="document.documentElement.classList.add('icons-unavailable')"></script>
|
||||
<script src="./runtime-config.js?v=20260730-demo1" defer></script>
|
||||
<script src="./platform-auth.js?v=20260730-question-bank1" defer></script>
|
||||
<script src="./runtime-config.js?v=20260730-question-bank1" defer></script>
|
||||
<script src="./platform-auth.js?v=20260730-api-fix1" defer></script>
|
||||
<script src="./spec-contract.js?v=20260730-question-bank1" defer></script>
|
||||
<script src="./platform-api.js?v=20260730-question-bank1" defer></script>
|
||||
<script src="./app.js?v=20260730-demo1" defer></script>
|
||||
<script src="./platform-api.js?v=20260730-api-fix1" defer></script>
|
||||
<script src="./app.js?v=20260730-api-fix1" defer></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="platformAuthGate" class="platform-auth-gate" hidden></div>
|
||||
|
||||
@@ -1081,8 +1081,8 @@
|
||||
storage_gb: 'storageGB',
|
||||
traffic_tb: 'trafficTB',
|
||||
};
|
||||
const field = metricMap[item.metricKey];
|
||||
if (field) record[field] = Number(item.metricValue || 0);
|
||||
const field = metricMap[item.metricKey || item.metricCode];
|
||||
if (field) record[field] = Number(item.metricValue ?? item.usedValue ?? 0);
|
||||
records.set(key, record);
|
||||
});
|
||||
return Array.from(records.values());
|
||||
|
||||
@@ -116,6 +116,12 @@
|
||||
return new Promise(resolve => { pendingResolve = resolve; });
|
||||
}
|
||||
|
||||
function requireReauthentication() {
|
||||
clearSession();
|
||||
renderLogin();
|
||||
pendingResolve = () => location.reload();
|
||||
}
|
||||
|
||||
async function logout() {
|
||||
const refreshToken = sessionStorage.getItem(REFRESH_TOKEN_KEY);
|
||||
try { if (refreshToken) await post('/api/auth/logout', { refreshToken }); } catch { /* Clear the browser session even when revocation cannot be reached. */ }
|
||||
@@ -129,6 +135,7 @@
|
||||
try { return JSON.parse(sessionStorage.getItem(USER_KEY) || 'null'); } catch { return null; }
|
||||
},
|
||||
logout,
|
||||
requireReauthentication,
|
||||
requireSession,
|
||||
});
|
||||
})();
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* 平台端公开运行时配置。
|
||||
*
|
||||
* 默认使用可交互演示数据。其他部署环境可在本文件之前注入同名对象,
|
||||
* 默认连接同源后端。其他部署环境可在本文件之前注入同名对象,
|
||||
* 或在部署时替换本文件。不要把 access token、service role key 或任何服务端密钥
|
||||
* 写入静态文件;getAccessToken 应从当前平台登录会话中按需读取短期 JWT。
|
||||
*
|
||||
@@ -16,9 +16,9 @@
|
||||
* };
|
||||
*/
|
||||
window.GONGXUE_PLATFORM_RUNTIME_CONFIG = window.GONGXUE_PLATFORM_RUNTIME_CONFIG || {
|
||||
mode: 'mock',
|
||||
mode: 'api',
|
||||
apiBaseUrl: '',
|
||||
fallbackToMock: true,
|
||||
fallbackToMock: false,
|
||||
timeoutMs: 10000,
|
||||
getAccessToken: async () => window.GongxuePlatformAuth?.getAccessToken() || '',
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user