项目结构

XYGo Admin 2026-04-01 38 次阅读

web-tenant 目录结构与主项目差异说明

项目结构

租户前端项目 web-tenant 是一个独立的 Vue3 + Vite 工程,与主项目 web 共享技术栈和组件体系,但在路由、API 命名空间和业务定位上有明确区分。

目录树

复制代码
web-tenant/
├── src/
│   ├── api/                    # API 请求封装
│   │   ├── site.ts             # 站点公开接口(/site/index)
│   │   ├── common/             # 验证码等公共接口
│   │   └── backend/            # 租户后台接口
│   │       ├── auth/           # 登录认证
│   │       ├── system/         # 菜单、角色、用户等
│   │       ├── member/         # 租户下的会员管理
│   │       ├── tenant/         # 租户管理专属接口
│   │       ├── cms/            # 文档管理
│   │       ├── monitor/        # 系统监控
│   │       └── develop/        # 开发工具
│   ├── components/             # 公共组件(与 web/ 一致)
│   ├── directives/             # 自定义指令(v-auth/v-roles)
│   ├── hooks/                  # 组合式函数
│   ├── locales/                # 国际化语言包
│   ├── router/
│   │   ├── index.ts            # Hash 路由实例
│   │   ├── routesAlias.ts      # ADMIN_BASE_PATH = /tenant
│   │   ├── routes/
│   │   │   └── staticRoutes.ts # / → /tenant/login
│   │   ├── guards/             # 路由守卫
│   │   └── core/               # MenuProcessor/RouteRegistry
│   ├── store/modules/          # Pinia:user/site/menu/setting
│   ├── utils/
│   │   ├── http/               # Axios 封装(tenantRequest)
│   │   ├── navigation/         # 菜单跳转工具
│   │   ├── storage/            # 本地存储
│   │   └── ...                 # 表格/UI/表单工具
│   ├── views/
│   │   ├── backend/            # 租户后台页面
│   │   └── common/             # 403/404/500/Iframe
│   ├── App.vue
│   └── main.ts
├── .env                        # 通用变量(端口/路径/加密密钥)
├── .env.development            # 开发变量(API 代理地址)
├── .env.production             # 生产变量(API 基础 URL)
├── vite.config.ts              # Vite 配置(代理/别名/构建)
├── package.json
└── tsconfig.json

与主项目 web/ 的关键差异

维度 web-tenant web
定位 纯租户后台管理 平台后台 + 前台门户
路由前缀 /tenant /admin(后台)+ /(前台)
API 命名空间 /tenant/* /admin/* + /member/* + /site/*
前台门户 无(/ 直接跳转登录) 有(首页/文档/社区/案例)
端口 3007 3006
Token Header Authorization: Bearer(租户 JWT) 后台同 + 前台 Xy-User-Token
member 用户态 拦截器中无 member Store 拦截器中注入 member Token
部署路径 VITE_BASE_URL = /tenant/ VITE_BASE_URL = /
锁屏密钥 s3cur3k3y4tenant 独立密钥

组件与依赖复用

web-tenantpackage.jsonweb 保持一致的依赖版本,公共组件(表格、表单、图标、布局等)代码相同,确保 UI 风格统一。

当主项目 web 中的公共组件更新时,只需同步对应文件到 web-tenant 即可。

路由体系

租户端是纯后台项目,不包含前台门户:

typescript 复制代码
// routesAlias.ts
export const ADMIN_BASE_PATH = import.meta.env.VITE_ADMIN_PATH || '/admin'
// 实际值:/tenant
typescript 复制代码
// staticRoutes.ts
{
  path: '/',
  redirect: `${ADMIN_BASE_PATH}/login`  // → /tenant/login
}

动态路由的加载流程与主项目一致:登录后从 /tenant/menu/routes 获取菜单树,由 MenuProcessor 转换并注册。