跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScriptSaaS大前端java

若依框架二次开发:实现前端动态域名解析与主题换肤

基于若依框架的 SaaS 化改造中,通过 Nginx 泛域名解析配合 Vue 前端拦截,可实现租户隔离与动态换肤。核心流程包括配置 Nginx 通配符规则、后端提供公开配置接口、前端在初始化阶段获取域名并更新 Store 状态,最终将 Logo 与主题色动态渲染至 UI 组件。该方案无需修改核心代码即可支持多租户独立域名访问,有效解决了交付时的品牌定制需求,同时需注意缓存策略以避免接口频繁请求。

极客工坊发布于 2026/4/5更新于 2026/8/2340 浏览
若依框架二次开发:实现前端动态域名解析与主题换肤

应用场景

客户常提的需求很直接:'系统好用是好事,但登录页别显示'若依管理系统'了,换成我们公司的 Logo;另外给我们一个专属网址,比如 oa.lisan.com,别用 IP 地址。'这就是 SaaS 交付里的'最后一公里'——前端体验的租户隔离。

今天聊聊怎么改造 RuoYi-Vue 的前端,搞定动态域名解析、Logo 标题自动切换以及千人千面的主题换肤。

架构设计

前端怎么知道我是谁?传统单体应用里,Logo 和标题通常写死在 vue.config.js 或者 .env 文件里。但在 SaaS 模式下,这些必须是动态的。

核心逻辑其实就这几步:

  • 用户访问 tenantA.saas.com。
  • Nginx 做泛解析,把请求转发给前端服务器。
  • 前端启动(main.js)时拦截,获取当前 URL 的 host。
  • 调用后端接口(无需鉴权),根据域名查租户配置(Logo、Title、主题色)。
  • 渲染页面,并在初始化阶段注入这些配置。

改造步骤

第一步:Nginx 泛域名解析

这一步是基础。假设你的主域名是 saas.com,你需要配置一条通配符规则。这样无论用户访问哪个子域,流量都能落到同一套前端资源上。

nginx 配置大概长这样:

server {
    listen 80;
    server_name *.saas.com;
    root /usr/share/nginx/html;
    index index.html;
    
    location / {
        try_files $uri $uri/ /index.html;
    }
}

注意这里用了 *.saas.com,只要主机名匹配,请求就会进来。接下来我们要让前端自己识别这个主机名。

第二步:后端提供配置接口

前端拿到域名后,得有个地方查配置。虽然理论上可以全在前端处理,但为了安全和管理方便,建议还是走后端接口。

不需要复杂的鉴权,因为配置本身是公开的(Logo、颜色等)。接口返回结构大致如下:

{
  "code": 200,
  "data": {
    "logoUrl": "https://cdn.example.com/logo.png",
    "appName": "客户定制系统",
    "themeColor": "#409EFF"
  }
}

后端可以根据请求头中的 Host 字段来路由查询对应的租户表数据。

第三步:前端核心改造(Vue)

这部分是重头戏。我们需要在 Vue 生命周期里尽早获取并应用配置。

封装获取域名的工具类

先写个简单的工具函数,方便后续复用。

// utils/domain.js
export const getTenantDomain = () => {
  return window.location.hostname;
};
改造 store,存储租户信息

Vuex 里加几个 state,专门放租户相关的配置。

// store/modules/settings.js
state: {
  logo: '',
  appName: 'RuoYi',
  themeColor: '#409EFF'
},
mutations: {
  SET_TENANT_CONFIG(state, config) {
    state.logo = config.logoUrl;
    state.appName = config.appName;
    state.themeColor = config.themeColor;
  }
}
这里的坑:要在哪里调用?

很多新手会直接在 App.vue 里调,但这可能太晚了。最好在 main.js 里,路由守卫之前就把配置拉回来。这样路由渲染出来的组件才能拿到正确的主题色。

// main.js
import { getTenantConfig } from '@/api/config';
import store from '@/store';

(async () => {
  try {
    const res = await getTenantConfig();
    store.commit('SET_TENANT_CONFIG', res.data);
  } catch (e) {
    console.warn('租户配置加载失败,使用默认值');
  }
})();

第四步:替换静态资源

最后一步是把拿到的配置应用到实际 UI 组件上。若依的 Header 和 Sidebar 组件通常有固定的 Logo 路径,需要改成从 store 读取。

比如在 Header 组件里:

<img :src="settings.logo" class="logo" />

主题色同理,可以用 CSS 变量或者动态 style 绑定。

最终效果与总结

做完这些,你的系统就能支持多租户独立域名访问了。不同客户打开不同的子域名,看到的 Logo、标题甚至主题色都不一样。

这种方案的优势在于扩展性强,不用改代码就能上线新租户。当然,缓存策略也得跟上,避免频繁请求接口影响性能。希望这篇分享能帮你在 SaaS 交付路上少踩点坑。

目录

  1. 应用场景
  2. 架构设计
  3. 改造步骤
  4. 第一步:Nginx 泛域名解析
  5. 第二步:后端提供配置接口
  6. 第三步:前端核心改造(Vue)
  7. 封装获取域名的工具类
  8. 改造 store,存储租户信息
  9. 这里的坑:要在哪里调用?
  10. 第四步:替换静态资源
  11. 最终效果与总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 2026 年 2 月 AIGC 行业模型发布及前沿资讯
  • Python 爬虫项目:爬取 B 站直播弹幕数据
  • JDK 17 官方下载与跨平台安装指南
  • 开源 AI 联网搜索工具 OpenWebSearch MCP 支持多引擎与流式响应
  • Neo4j Desktop 2 本地部署与图数据库实战
  • 基于 Copilot 反向代理的 Claude 本地部署指南
  • 二叉树顺序结构:堆的定义与实现
  • Java 设计模式:工厂模式实现与解析
  • LazyLLM 低代码框架实战:代码专家智能体开发
  • Windows 与 macOS 安装 Claude Code 及配置第三方 Key 指南
  • 跨平台字体渲染解决方案:开源技术实现与行业适配
  • F5 刷新后浏览器前端发生了什么:缓存与渲染机制详解
  • AI 工作流实践:构建日报生成工具
  • Docker 零基础入门:核心概念与使用价值
  • 使用 Docker 部署 Apache Answer 并通过 cpolar 实现公网访问
  • 大语言模型训练优化指南
  • 基于 GLM-4.6V-Flash-WEB 构建智能阅卷系统实战
  • 前端 AI 与营销增长:AI 应用的核心趋势与实战价值
  • 时空数据与大模型:基础模型的愿景、挑战与机遇及应用
  • Zabbix 3.0 声音告警配置指南

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online