|
@@ -8,8 +8,22 @@ import { type PluginOption } from 'vite';
|
|
|
* 用于生成将loading样式注入到项目中
|
|
|
* 为多app提供loading样式,无需在每个 app -> index.html单独引入
|
|
|
*/
|
|
|
-async function viteInjectAppLoadingPlugin(): Promise<PluginOption | undefined> {
|
|
|
+async function viteInjectAppLoadingPlugin(
|
|
|
+ isBuild: string,
|
|
|
+ env: Record<string, any>,
|
|
|
+): Promise<PluginOption | undefined> {
|
|
|
const loadingHtml = await getLoadingRawByHtmlTemplate();
|
|
|
+ const envRaw = isBuild ? 'prod' : 'dev';
|
|
|
+ const cacheName = `'__${env.VITE_APP_NAMESPACE}-${envRaw}-theme__'`;
|
|
|
+
|
|
|
+ // 获取缓存的主题
|
|
|
+ // 保证黑暗主题下,刷新页面时,loading也是黑暗主题
|
|
|
+ const injectScript = `
|
|
|
+ <script>
|
|
|
+ var theme = localStorage.getItem(${cacheName});
|
|
|
+ document.documentElement.classList.toggle('dark', theme === 'dark');
|
|
|
+</script>
|
|
|
+`;
|
|
|
|
|
|
if (!loadingHtml) {
|
|
|
return;
|
|
@@ -21,7 +35,10 @@ async function viteInjectAppLoadingPlugin(): Promise<PluginOption | undefined> {
|
|
|
transformIndexHtml: {
|
|
|
handler(html) {
|
|
|
const re = /<div\s*id\s*=\s*"app"\s*>(\s*)<\/div>/;
|
|
|
- html = html.replace(re, `<div id="app">${loadingHtml}</div>`);
|
|
|
+ html = html.replace(
|
|
|
+ re,
|
|
|
+ `<div id="app">${injectScript}${loadingHtml}</div>`,
|
|
|
+ );
|
|
|
return html;
|
|
|
},
|
|
|
order: 'pre',
|