From b9cffc8abf94f1f780fb626946f8b8f102645ec0 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 10 Sep 2026 23:36:45 +0800 Subject: [PATCH] =?utf8?q?V1=20=E6=A0=B9=E7=AB=99=E7=82=B9:=20=E9=BB=98?= =?utf8?q?=E8=AE=A4=E6=98=BE=E7=A4=BA'=E5=B7=B2=E5=88=87=E6=8D=A2=E5=88=B0?= =?utf8?q?=E5=88=86=E7=BB=84=E6=A8=A1=E5=BC=8F'=E6=8F=90=E7=A4=BA=E9=A1=B5?= =?utf8?q?=E5=B9=B6=E5=BC=95=E5=AF=BC=E8=87=B3=20/split/;=20=E5=BC=80?= =?utf8?q?=E5=8F=91=E8=80=85=E6=A8=A1=E5=BC=8F(=3Fdev=3D1=20=E6=88=96=20lo?= =?utf8?q?calStorage.v1=5Fdev=3D1)=E5=8F=AF=E6=89=93=E5=BC=80=E5=8E=9F=20V?= =?utf8?q?1=20=E5=BA=94=E7=94=A8(=E8=BF=9B=E5=BA=A6=E4=BF=9D=E7=95=99)?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- frontend/src/V1Notice.js | 35 +++++++++++++++++++++++++++++++++++ frontend/src/index.js | 18 +++++++++++++++--- 2 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 frontend/src/V1Notice.js diff --git a/frontend/src/V1Notice.js b/frontend/src/V1Notice.js new file mode 100644 index 0000000..a770d6d --- /dev/null +++ b/frontend/src/V1Notice.js @@ -0,0 +1,35 @@ +import React from 'react'; + +// V1 根站点提示页: 默认访问 https://words.acesimba.cloud/ 时显示, +// 告知用户已切换到分组模式并引导到 /split/。开发者模式(?dev=1 或 localStorage.v1_dev=1)下不显示。 +export default function V1Notice() { + return ( +
+

+ 您已经开始使用分组模式,请进入链接{' '} + + https://words.acesimba.cloud/split/ + + 。如需要打开,请在开发者模式中进行打开(请联系你最爱的妈妈)。 +

+
+ ); +} diff --git a/frontend/src/index.js b/frontend/src/index.js index 3a56c9e..b7b091d 100644 --- a/frontend/src/index.js +++ b/frontend/src/index.js @@ -3,14 +3,26 @@ import ReactDOM from 'react-dom/client'; import './index.css'; import App from './App'; import ErrorBoundary from './ErrorBoundary'; +import V1Notice from './V1Notice'; import { isLoggedIn } from './auth'; import reportWebVitals from './reportWebVitals'; +// V1 根站点网关: 默认显示"已切换到分组模式"提示页; +// 开发者模式(?dev=1 或 localStorage.v1_dev=1)才加载原 V1 应用(进度/数据均保留在后端, 不受影响)。 +function isDevMode() { + try { + const params = new URLSearchParams(window.location.search); + if (params.get('dev') === '1') return true; + if (window.localStorage.getItem('v1_dev') === '1') return true; + } catch (e) {} + return false; +} + const root = ReactDOM.createRoot(document.getElementById('root')); root.render( - + {isDevMode() ? : } ); @@ -20,13 +32,13 @@ root.render( // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals reportWebVitals(); -// 注册 Service Worker (PWA 离线支持) — split 用相对路径, 确保在 /split 作用域下注册 +// 注册 Service Worker (PWA 离线支持) if ('serviceWorker' in navigator) { window.addEventListener('load', () => { navigator.serviceWorker.register('sw.js').catch(err => console.error('SW registration failed:', err)); // SW 接管页面后, 再触发一次同步+预取, 确保预取请求被 SW 拦截并写入缓存 navigator.serviceWorker.ready.then(() => { - if (isLoggedIn()) { + if (isDevMode() && isLoggedIn()) { import('./sync').then(m => m.triggerAutoSync()).catch(() => {}); } }).catch(() => {}); -- 2.43.0