gaoluyang
2026-08-03 c92ca8859b93b857f80d28123791ab7f7f1004b9
银川
1.部署不同公司切换logo逻辑修改
已修改6个文件
已添加1个文件
53 ■■■■■ 文件已修改
.env.production 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
deploy.bat 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layouts/auth.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.ts 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/preferences.ts 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/types/app.d.ts 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vite.config.ts 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.env.production
@@ -1,3 +1,5 @@
VITE_COMPANY=TEST
VITE_BASE=/
# è¯·æ±‚路径
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
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>
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__);
    }
  }
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: {
    /** åˆ·æ–°æµè§ˆå™¨åŽåªä¿ç•™å½“前页面,不持久化所有标签页 */
src/types/app.d.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2 @@
declare const __APP_LOGO__: string;
declare const __APP_FAVICON__: string;
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'),