From 8c99ae416c5277e737e950ce7702776d7c9b6430 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 03 八月 2026 17:57:08 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_pro2.0' into dev_pro2.0

---
 deploy.bat            |    2 +-
 src/preferences.ts    |    4 +++-
 vite.config.ts        |   19 +++++++++++++++----
 .env.production       |    2 ++
 public/logos/TEST.ico |    0 
 src/types/app.d.ts    |    2 ++
 src/layouts/auth.vue  |    4 +++-
 company.config.ts     |    6 ++++--
 src/main.ts           |   16 +++++++++++++++-
 9 files changed, 45 insertions(+), 10 deletions(-)

diff --git a/.env.production b/.env.production
index cd77149..f7d87ea 100644
--- a/.env.production
+++ b/.env.production
@@ -1,3 +1,5 @@
+VITE_COMPANY=TEST
+
 VITE_BASE=/
 
 # 璇锋眰璺緞
diff --git a/company.config.ts b/company.config.ts
index b2d21a3..04c0ed2 100644
--- a/company.config.ts
+++ b/company.config.ts
@@ -3,15 +3,17 @@
   name: string;
   /** logo 鍥剧墖璺緞锛岀浉瀵逛簬 public 鐩綍 */
   logo: string;
+  /** 缃戦〉鏍囬鍥炬爣璺緞锛岀浉瀵逛簬 public 鐩綍 */
+  favicon: string;
 }
 
 /**
  * 鎵�鏈夊叕鍙搁厤缃�
  * 鏂板鍏徃鍙渶鍦ㄤ笅闈㈠姞涓�琛屽嵆鍙�
  *
- * 鎵撳寘锛氳寰楀湪鍦╠eploy.bat鏂囦欢涓皢set "COMPANY=TEST"鏀瑰悕瀛�
+ * 鎵撳寘鍛戒护锛歞eploy.bat 涓慨鏀� set "COMPANY=鍏徃key"
  * 绀轰緥锛歴et "COMPANY=TEST"
  */
 export const companies: Record<string, CompanyConfig> = {
-  TEST: { name: '娴嬭瘯鍏徃', logo: '/logos/TEST.png' },
+  TEST: { name: '娴嬭瘯鍏徃', logo: '/logos/TEST.png', favicon: '/logos/TEST.ico' },
 };
diff --git a/deploy.bat b/deploy.bat
index 11a1ca0..52e47e9 100644
--- a/deploy.bat
+++ b/deploy.bat
@@ -95,7 +95,7 @@
 echo [STEP 1/3] Building project for %COMPANY%...
 echo [INFO] Running: pnpm run build
 echo.
-set COMPANY=%COMPANY% && call pnpm run build
+set "COMPANY=!COMPANY!" && call pnpm run build
 if !errorlevel! neq 0 (
     echo [ERROR] Build failed! Check your project configuration.
     goto :error_exit
diff --git a/public/logos/TEST.ico b/public/logos/TEST.ico
new file mode 100644
index 0000000..f5d4f2c
--- /dev/null
+++ b/public/logos/TEST.ico
Binary files differ
diff --git a/src/layouts/auth.vue b/src/layouts/auth.vue
index 8ba66e8..ad41d1f 100644
--- a/src/layouts/auth.vue
+++ b/src/layouts/auth.vue
@@ -6,8 +6,10 @@
 
 import { $t } from '#/locales';
 
+declare const __APP_LOGO__: string;
+
 const appName = computed(() => preferences.app.name);
-const logo = computed(() => preferences.logo.source);
+const logo = computed(() => __APP_LOGO__ || preferences.logo.source);
 const logoDark = computed(() => preferences.logo.sourceDark);
 </script>
 
diff --git a/src/main.ts b/src/main.ts
index d6fa68c..e208cd2 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -1,7 +1,10 @@
-import { initPreferences } from './packages/preferences/src';
+import { initPreferences, preferencesManager } from './packages/preferences/src';
 import { unmountGlobalLoading } from './packages/utils/src';
 
 import { overridesPreferences, preferencesExtension } from './preferences';
+
+declare const __APP_LOGO__: string;
+declare const __APP_FAVICON__: string;
 
 /**
  * 搴旂敤鍒濆鍖栧畬鎴愪箣鍚庡啀杩涜椤甸潰鍔犺浇娓叉煋
@@ -20,6 +23,17 @@
     overrides: overridesPreferences,
   });
 
+  // 寮哄埗瑕嗙洊鍏徃 logo 鍜� favicon锛岀粫杩� localStorage 缂撳瓨
+  if (__APP_LOGO__) {
+    preferencesManager.updatePreferences({ logo: { source: __APP_LOGO__ } });
+  }
+  if (__APP_FAVICON__) {
+    const link = document.querySelector('link[rel="icon"]');
+    if (link) {
+      link.setAttribute('href', __APP_FAVICON__);
+    }
+  }
+
   // 鍚姩搴旂敤骞舵寕杞�
   // vue搴旂敤涓昏閫昏緫鍙婅鍥�
   const { bootstrap } = await import('./bootstrap');
diff --git a/src/preferences.ts b/src/preferences.ts
index f2b5a03..6b87741 100644
--- a/src/preferences.ts
+++ b/src/preferences.ts
@@ -3,6 +3,8 @@
   definePreferencesExtension,
 } from './packages/preferences/src';
 
+declare const __APP_LOGO__: string;
+
 interface WebAntdPreferencesExtension {
   defaultTableSize: number;
   enableFormFullscreen: boolean;
@@ -33,7 +35,7 @@
     companySiteLink: 'https://gitee.com/yudaocode/yudao-ui-admin-vben',
   },
   logo: {
-    source: import.meta.env.VITE_APP_LOGO || undefined,
+    source: __APP_LOGO__ || undefined,
   },
   tabbar: {
     /** 鍒锋柊娴忚鍣ㄥ悗鍙繚鐣欏綋鍓嶉〉闈紝涓嶆寔涔呭寲鎵�鏈夋爣绛鹃〉 */
diff --git a/src/types/app.d.ts b/src/types/app.d.ts
new file mode 100644
index 0000000..d65d0ad
--- /dev/null
+++ b/src/types/app.d.ts
@@ -0,0 +1,2 @@
+declare const __APP_LOGO__: string;
+declare const __APP_FAVICON__: string;
diff --git a/vite.config.ts b/vite.config.ts
index 82ece29..825d4d4 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,15 +1,26 @@
 import { resolve } from "node:path";
+import { loadEnv } from "vite";
 import { defineConfig } from "./internal/vite-config/src";
-import { companies } from "./company.config";
 
-const appLogo = process.env.COMPANY ? companies[process.env.COMPANY]?.logo : undefined;
+/** 鍏徃閰嶇疆锛氭柊澧炲叕鍙稿彧闇�鍔犱竴琛岋紝logo 鍥剧墖鏀� public/logos/ 鐩綍 */
+const companyConfigs: Record<string, { favicon: string; logo: string; name: string }> = {
+  TEST: { name: '娴嬭瘯鍏徃', logo: '/logos/TEST.png', favicon: '/logos/TEST.ico' },
+};
 
-export default defineConfig(async () => {
+export default defineConfig(async ({ mode }) => {
+  const env = loadEnv(mode, process.cwd(), 'VITE_');
+  const companyKey = env.VITE_COMPANY || '';
+  const company = companyConfigs[companyKey];
+  const appLogo = company?.logo ?? '';
+  const appFavicon = company?.favicon ?? '';
+  console.log('[company]', companyKey, '-> logo:', appLogo, 'favicon:', appFavicon);
+
   return {
     application: {},
     vite: {
       define: {
-        'import.meta.env.VITE_APP_LOGO': JSON.stringify(appLogo ?? ''),
+        __APP_LOGO__: JSON.stringify(appLogo),
+        __APP_FAVICON__: JSON.stringify(appFavicon),
       },
       resolve: {
         alias: {

--
Gitblit v1.9.3