From c92ca8859b93b857f80d28123791ab7f7f1004b9 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 03 八月 2026 16:35:03 +0800
Subject: [PATCH] 银川 1.部署不同公司切换logo逻辑修改

---
 deploy.bat           |    2 +-
 src/preferences.ts   |    4 +++-
 vite.config.ts       |   24 +++++++++++++++++-------
 .env.production      |    2 ++
 src/types/app.d.ts   |    2 ++
 src/layouts/auth.vue |    4 +++-
 src/main.ts          |   15 ++++++++-------
 7 files changed, 36 insertions(+), 17 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/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/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 dab2d7c..e208cd2 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -3,6 +3,9 @@
 
 import { overridesPreferences, preferencesExtension } from './preferences';
 
+declare const __APP_LOGO__: string;
+declare const __APP_FAVICON__: string;
+
 /**
  * 搴旂敤鍒濆鍖栧畬鎴愪箣鍚庡啀杩涜椤甸潰鍔犺浇娓叉煋
  */
@@ -20,16 +23,14 @@
     overrides: overridesPreferences,
   });
 
-  // 閫氳繃鐜鍙橀噺寮哄埗瑕嗙洊鍏徃 logo 鍜� favicon锛岀粫杩囩紦瀛�
-  const envLogo = import.meta.env.VITE_APP_LOGO;
-  const envFavicon = import.meta.env.VITE_APP_FAVICON;
-  if (envLogo) {
-    preferencesManager.updatePreferences({ logo: { source: envLogo } });
+  // 寮哄埗瑕嗙洊鍏徃 logo 鍜� favicon锛岀粫杩� localStorage 缂撳瓨
+  if (__APP_LOGO__) {
+    preferencesManager.updatePreferences({ logo: { source: __APP_LOGO__ } });
   }
-  if (envFavicon) {
+  if (__APP_FAVICON__) {
     const link = document.querySelector('link[rel="icon"]');
     if (link) {
-      link.setAttribute('href', envFavicon);
+      link.setAttribute('href', __APP_FAVICON__);
     }
   }
 
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 ef69137..825d4d4 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,17 +1,27 @@
 import { resolve } from "node:path";
+import { loadEnv } from "vite";
 import { defineConfig } from "./internal/vite-config/src";
-import { companies } from "./company.config";
 
-const company = companies[process.env.COMPANY || ''];
-if (company) {
-  process.env.VITE_APP_LOGO = company.logo;
-  process.env.VITE_APP_FAVICON = company.favicon;
-}
+/** 鍏徃閰嶇疆锛氭柊澧炲叕鍙稿彧闇�鍔犱竴琛岋紝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: {
+        __APP_LOGO__: JSON.stringify(appLogo),
+        __APP_FAVICON__: JSON.stringify(appFavicon),
+      },
       resolve: {
         alias: {
           '@vue-office/pdf': resolve(__dirname, 'node_modules/@vue-office/pdf/lib/v3/vue-office-pdf.mjs'),

--
Gitblit v1.9.3