3.8 KiB
3.8 KiB
【可直接投喂AI·优化版需求说明】
你好,我现在需要对我的项目进行多租户二级域名绑定官网系统的整体改造,请根据我的现有项目结构和需求,帮我完成所有代码修改。
一、现有项目结构
我有三个独立项目:
- frontend:前端官网展示,使用 Vite 构建
- backend:后台管理系统,使用 Vite 构建
- tp:后端 API 服务,使用 ThinkPHP 框架
整套平台是多租户 SaaS 模式,为企业用户建设官网使用,所有租户共用一个数据库,不独立分库,通过租户 ID 做数据隔离。
二、要实现的核心功能
- 我在后台配置一批我已购买备案的主域名,形成域名池。
- 企业用户登录租户后台,可以申请二级域名。
- 租户选择主域名 + 自定义二级前缀,提交申请,管理员审核。
- 租户访问自己申请的二级域名时,系统自动识别对应租户,并展示该租户在 CMS 中选择的官网页面。
- 访问规则:
admin.xxx.com→ 后台管理系统www.xxx.com/ 裸域名 → 平台官网- 其他二级域名 → 对应租户的官网
三、数据库表结构(已建好)
我已经建好两张域名相关表,结构如下,你必须严格按这两张表开发:
1. 主域名池表:mete_system_domain_pool
CREATE TABLE `mete_system_domain_pool` (
`id` int(11) NOT NULL COMMENT 'id',
`main_domain` varchar(255) DEFAULT NULL COMMENT '主域名',
`status` int(11) DEFAULT NULL COMMENT '状态 0-禁用 1-启用',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
2. 租户域名绑定表:mete_tenant_domain
CREATE TABLE `mete_tenant_domain` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`tenant_id` int(11) DEFAULT NULL COMMENT '租户 ID',
`sub_domain` varchar(50) DEFAULT NULL COMMENT '二级域名前缀',
`main_domain` varchar(255) DEFAULT NULL COMMENT '绑定的主域名',
`full_domain` varchar(255) DEFAULT NULL COMMENT '完整域名',
`status` int(11) DEFAULT NULL COMMENT '状态(1 已生效 / 0 审核中 / 2 禁用)',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`delete_time` datetime DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
四、你需要帮我完成的改造内容
-
ThinkPHP 后端
- 编写全局域名解析中间件:通过访问域名自动识别租户。
- 实现主域名池管理接口(增删改查、启用禁用)。
- 实现租户二级域名申请、列表查询接口。
- 实现管理员审核租户域名接口。
- 所有租户相关接口必须自动带上
tenant_id做数据隔离。
-
backend 后台(Vite + Vue)
- 管理员端:主域名池管理页面。
- 管理员端:租户域名审核页面。
- 租户端:二级域名申请页面、我的域名列表页面。
-
nginx 配置
- 给出可直接使用的泛域名解析、路由转发配置。
- 区分后台、官网、租户二级域名。
-
整体逻辑要求
- 多租户共用数据库,不独立库,只按
tenant_id隔离。 - 二级域名唯一,不能重复。
- 支持软删除
delete_time。 - 域名状态严格按我给的字段逻辑。
- 多租户共用数据库,不独立库,只按
五、你的输出要求
- 直接按我现有项目结构给出完整可替换的文件与代码。
- 标明每个文件路径、作用、代码内容。
- 不要解释原理,直接输出可使用代码。
- 严格使用我提供的表名与字段,不要新增或修改字段。