Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e4de308ba4 | |||
| 97caae95b8 | |||
| 4561ee4cc3 |
@@ -140,7 +140,7 @@ fi
|
|||||||
|
|
||||||
# ── 下载二进制压缩包 ──────────────────────────────────────────────────────────
|
# ── 下载二进制压缩包 ──────────────────────────────────────────────────────────
|
||||||
printf '==> 下载 %s…\n' "${ARCHIVE_FILE}"
|
printf '==> 下载 %s…\n' "${ARCHIVE_FILE}"
|
||||||
curl -fSL --retry 3 --retry-delay 2 \
|
curl -fSL --retry 8 --retry-delay 5 --retry-connrefused --retry-all-errors --connect-timeout 20 \
|
||||||
-o "${ARCHIVE_CACHE}" \
|
-o "${ARCHIVE_CACHE}" \
|
||||||
"${ARCHIVE_URL}"
|
"${ARCHIVE_URL}"
|
||||||
|
|
||||||
@@ -197,7 +197,7 @@ if [[ "${TARGET_OS}" == "windows" ]]; then
|
|||||||
if [[ "${FORCE}" == false && -f "${WINTUN_OUT}" ]]; then
|
if [[ "${FORCE}" == false && -f "${WINTUN_OUT}" ]]; then
|
||||||
printf '✓ wintun.dll 已存在,跳过(传 --force 重新下载)\n'
|
printf '✓ wintun.dll 已存在,跳过(传 --force 重新下载)\n'
|
||||||
else
|
else
|
||||||
curl -fSL --retry 3 --retry-delay 2 \
|
curl -fSL --retry 8 --retry-delay 5 --retry-connrefused --retry-all-errors --connect-timeout 20 \
|
||||||
-o "${WINTUN_ZIP_CACHE}" \
|
-o "${WINTUN_ZIP_CACHE}" \
|
||||||
"${WINTUN_URL}"
|
"${WINTUN_URL}"
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ export const viewport: Viewport = {
|
|||||||
|
|
||||||
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
||||||
return (
|
return (
|
||||||
<html lang="zh" data-theme="light">
|
<html lang="zh" data-theme="light" suppressHydrationWarning>
|
||||||
<head>
|
<head>
|
||||||
{/* 设计令牌单一真相源,原样链入(SRI 由构建期注入) */}
|
{/* 设计令牌单一真相源,原样链入(SRI 由构建期注入) */}
|
||||||
{/* eslint-disable-next-line @next/next/no-css-tags */}
|
{/* eslint-disable-next-line @next/next/no-css-tags */}
|
||||||
|
|||||||
@@ -100,10 +100,9 @@ export default function UserCenter() {
|
|||||||
setView('overview');
|
setView('overview');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ready) {
|
// 静态导出无服务端会话:首屏(!ready)与未登录一律直接渲染登录页,避免出现空白
|
||||||
return <div style={{ minHeight: '100vh', background: 'var(--bg)' }} />;
|
// 背景(慢网络下用户会看到"空的")。已登录用户(有 refresh)会话续期完成后再切面板。
|
||||||
}
|
if (!ready || !authed) {
|
||||||
if (!authed) {
|
|
||||||
return <Login onDone={() => { setAuthed(true); setView('overview'); }} />;
|
return <Login onDone={() => { setAuthed(true); setView('overview'); }} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,14 +6,13 @@ import { SITE } from '../config/site';
|
|||||||
interface Props { t: T }
|
interface Props { t: T }
|
||||||
const { t } = Astro.props;
|
const { t } = Astro.props;
|
||||||
|
|
||||||
// href 缺省 = 本轮未接入下载(iOS / macOS / Windows / Linux),按钮渲染为禁用态占位。
|
// href 缺省 = 本轮未接入下载(iOS / macOS / Linux),按钮渲染为禁用态占位。
|
||||||
// 本轮仅 Android 有真实产物;Windows 待其 CI(需 windows runner)产出 exe 后接
|
// Android + Windows 已由客户端 CI 产出真实产物并部署到 /downloads。
|
||||||
// SITE.downloads.windows(已在 site.ts 备好)。
|
|
||||||
const plats: { icon: string; name: string; ver: string; href?: string }[] = [
|
const plats: { icon: string; name: string; ver: string; href?: string }[] = [
|
||||||
{ icon: 'smartphone', name: 'iOS', ver: 'iOS 16+' },
|
{ icon: 'smartphone', name: 'iOS', ver: 'iOS 16+' },
|
||||||
{ icon: 'smartphone', name: 'Android', ver: 'Android 9+', href: SITE.downloads.android },
|
{ icon: 'smartphone', name: 'Android', ver: 'Android 9+', href: SITE.downloads.android },
|
||||||
{ icon: 'laptop', name: 'macOS', ver: 'macOS 12+' },
|
{ icon: 'laptop', name: 'macOS', ver: 'macOS 12+' },
|
||||||
{ icon: 'monitor', name: 'Windows', ver: 'Win 10/11' },
|
{ icon: 'monitor', name: 'Windows', ver: 'Win 10/11', href: SITE.downloads.windows },
|
||||||
{ icon: 'terminal', name: 'Linux', ver: 'deb / rpm' },
|
{ icon: 'terminal', name: 'Linux', ver: 'deb / rpm' },
|
||||||
];
|
];
|
||||||
---
|
---
|
||||||
|
|||||||
Reference in New Issue
Block a user