# 后台管理系统文档 **项目名称:** 瑞莱医疗后台管理系统 **技术架构:** ThinkPHP 5.0 + Layui + jQuery **数据库:** MySQL **文档版本:** v2.0 **创建日期:** 2025年1月28日 **最后更新:** 2025年1月29日(已完成逻辑彻底分离) > **✅ 分离状态:** 两个后台模块已实现**逻辑彻底分离**(方案一),可独立维护,互不影响。 > - **admin 模块**:早熟预测后台,完全独立实现 > - **adminghd 模块**:GHD预测后台,完全独立实现 > - 两个模块不再依赖 `common` 模块的业务基类 --- ## 一、系统概述 ### 1.1 系统简介 本系统为两个医疗小程序提供统一的后台管理服务: 1. **女童成长发育早熟预测模型后台** (`admin` 模块) - 对应小程序:瑞莱医疗小程序 - 小程序AppID: `wx0847525a15342a46` - 访问路径:`/admin/` 2. **生长激素缺乏预测模型后台** (`adminghd` 模块) - 对应小程序:生长激素缺乏(GHD)预测模型小程序 - 小程序AppID: `wxa75a76964ae7ce73` - 访问路径:`/adminghd/` ### 1.2 系统架构 ``` ┌─────────────────────────────────────────┐ │ 后台管理系统 │ ├─────────────────────────────────────────┤ │ admin模块 adminghd模块 │ │ (早熟预测) (GHD预测) │ ├─────────────────────────────────────────┤ │ 共同功能: │ │ - 登录认证 │ │ - 菜单管理 │ │ - 资讯管理 │ │ - 用户管理 │ │ - 计算记录管理 │ └─────────────────────────────────────────┘ ``` --- ## 二、系统架构 ### 2.1 目录结构 ``` /www/wwwroot/code/ ├── application/ # 应用目录 │ ├── admin/ # 早熟预测后台模块 │ │ ├── controller/ # 控制器 │ │ │ ├── Login.php # 登录控制器 │ │ │ ├── Menu.php # 菜单管理 │ │ │ ├── Wechatset.php # 资讯管理 │ │ │ ├── Wechatinfro.php # 用户和记录管理 │ │ │ └── Dashboard.php # 仪表盘 │ │ ├── common/ # 公共类 │ │ │ └── Base.php # 基础控制器(登录验证) │ │ └── view/ # 视图模板 │ │ ├── login/ # 登录相关视图 │ │ │ ├── login.html # 登录页 │ │ │ └── nav.html # 主框架页 │ │ ├── wechatset/ # 资讯管理视图 │ │ └── wechatinfro/ # 用户和记录视图 │ ├── adminghd/ # GHD预测后台模块 │ │ ├── controller/ # 控制器(结构同admin) │ │ ├── common/ # 公共类 │ │ └── view/ # 视图模板 │ ├── app/ # 小程序API模块 │ │ └── controller/ │ │ ├── Ruilaiwechat.php # 瑞莱小程序API │ │ └── Ghdwechat.php # GHD小程序API │ └── common/ # 公共模块 │ ├── config/ # 配置类 │ │ └── BusinessConfig.php # 业务配置 │ └── controller/ # 公共控制器 │ ├── WechatsetBase.php # 资讯管理基类 │ ├── WechatinfroBase.php # 用户管理基类 │ └── DashboardBase.php # 仪表盘基类 ├── public/ # 公共访问目录 │ ├── static/ # 静态资源 │ │ ├── admin/ # admin模块静态资源 │ │ │ ├── css/ # 样式文件 │ │ │ ├── js/ # JavaScript文件 │ │ │ └── layui/ # Layui框架 │ │ └── adminghd/ # adminghd模块静态资源 │ └── index.php # 入口文件 └── thinkphp/ # ThinkPHP框架核心 ``` ### 2.2 技术栈 - **后端框架:** ThinkPHP 5.0 - **前端框架:** Layui 2.x - **JavaScript库:** jQuery - **数据库:** MySQL - **会话管理:** ThinkPHP Session --- ## 三、模块说明 ### 3.1 admin 模块(早熟预测后台) #### 3.1.1 访问路径 - 登录页:`/admin/login` - 主框架:`/admin/login/index`(登录后自动跳转) #### 3.1.2 Session配置 - 用户ID键名:`admin_user_id` - 登录时间键名:`admin_user_login_time` - 超时时间:3600秒(1小时) #### 3.1.3 数据表映射 | 业务表 | 数据库表名 | |--------|-----------| | 用户表 | `wechat_user` | | 资讯表 | `wechat_real_time_info` | | 计算记录表 | `wechat_calculate_record` | | 菜单表 | `menu` | | 管理员表 | `user` | #### 3.1.4 静态资源路径 - CSS:`/static/admin/css/` - JS:`/static/admin/js/` - Layui:`/static/admin/layui/` ### 3.2 adminghd 模块(GHD预测后台) #### 3.2.1 访问路径 - 登录页:`/adminghd/login` - 主框架:`/adminghd/login/index`(登录后自动跳转) #### 3.2.2 Session配置 - 用户ID键名:`adminghd_user_id` - 登录时间键名:`adminghd_user_login_time` - 超时时间:3600秒(1小时) #### 3.2.3 数据表映射 | 业务表 | 数据库表名 | |--------|-----------| | 用户表 | `ghd_wechat_user` | | 资讯表 | `wechat_real_time_info` | | 计算记录表 | `wechat_calculate_record` | | 菜单表 | `menu` | | 管理员表 | `user` | #### 3.2.4 静态资源路径 - CSS:`/static/adminghd/css/` - JS:`/static/adminghd/js/` - Layui:`/static/adminghd/layui/` --- ## 四、功能模块 ### 4.1 登录认证模块 #### 4.1.1 登录功能 **控制器:** `Login.php` **登录流程:** 1. 用户访问登录页 `/admin/login` 或 `/adminghd/login` 2. 输入用户名(手机号)和密码 3. 系统验证用户信息: - 查询 `user` 表 - 验证条件:`phone` = 用户名,`password` = MD5(密码),`status` = 1,`type` = 1 4. 登录成功: - 设置Session:`admin_user_id` 或 `adminghd_user_id` - 设置登录时间:`admin_user_login_time` 或 `adminghd_user_login_time`(当前时间 + 3600秒) - 返回JSON:`{'status':1, 'msg':'登录成功', 'token':1}` 5. 跳转到主框架页面 **登录验证:** - 所有需要登录的页面继承 `Base` 类 - `Base::_initialize()` 方法自动检查Session - 未登录或超时:跳转到登录页 #### 4.1.2 退出功能 **接口:** `/admin/Login/logout` 或 `/adminghd/Login/logout` **功能:** - 清除所有Session数据 - 返回JSON:`{'status':1, 'msg':'退出成功'}` - 前端跳转到登录页 ### 4.2 菜单管理模块 #### 4.2.1 菜单结构 **数据表:** `menu` **表结构:** - `id`:菜单ID(主键) - `pid`:父菜单ID(空或0表示一级菜单) - `menu_name`:菜单名称 - `url`:菜单链接 - `seq_on`:排序序号 - `menu_icon`:菜单图标 - `create_time`:创建时间 **菜单层级:** - 一级菜单:`pid` 为空或0 - 二级菜单:`pid` 指向一级菜单的 `id` #### 4.2.2 获取菜单列表 **接口:** `/admin/Menu/getMenuList` 或 `/adminghd/Menu/getMenuList` **返回格式:** ```json { "status": 1, "msg": "获取数据成功!!", "data": [ { "id": "xxx", "pid": "", "menu_name": "小程序设置", "url": "", "seq_on": 1, "type": 1, "children": [ { "id": "yyy", "pid": "xxx", "menu_name": "首页资讯列表", "url": "/admin/Wechatset/wechatRealTimeInfo", "type": 2 } ] } ] } ``` #### 4.2.3 菜单管理功能 - **添加菜单:** `/admin/Menu/doaddMenu` - **修改菜单:** `/admin/Menu/doupdMenu` - **删除菜单:** `/admin/Menu/delMenu` - **获取菜单详情:** `/admin/Menu/updMenu` ### 4.3 用户信息模块 #### 4.3.1 获取当前用户信息 **接口:** `/admin/Menu/getUserInfor` 或 `/adminghd/Menu/getUserInfor` **返回格式:** ```json { "status": 1, "msg": "查询成功", "infro": { "user_name": "管理员", "user_head": "/static/admin/img/upload.png" } } ``` #### 4.3.2 小程序注册用户管理 **控制器:** `Wechatinfro.php` **功能列表:** - **用户列表:** `/admin/Wechatinfro/wechatUserList` - **获取用户列表:** `/admin/Wechatinfro/getWechatUserList` **数据表:** - admin模块:`wechat_user` - adminghd模块:`ghd_wechat_user` **用户列表字段:** - `uid`:用户ID - `nickname`:用户昵称 - `headimg`:头像 - `create_time`:注册时间 **搜索功能:** - 支持按昵称模糊搜索 ### 4.4 资讯管理模块 #### 4.4.1 资讯列表 **控制器:** `Wechatset.php` **功能列表:** - **资讯列表页:** `/admin/Wechatset/wechatRealTimeInfo` - **获取资讯列表:** `/admin/Wechatset/getWechatRealTimeInfoList` - **添加资讯页:** `/admin/Wechatset/wechatRealTimeInfoAdd` - **编辑资讯页:** `/admin/Wechatset/wechatRealTimeInfoUpdate` - **保存资讯:** `/admin/Wechatset/saveWechatRealTimeInfo` - **删除资讯:** `/admin/Wechatset/delWechatRealTimeInfo` - **获取资讯详情:** `/admin/Wechatset/getRealTimeInfoDetail` **数据表:** `wechat_real_time_info`(两个模块共用) **资讯字段:** - `id`:资讯ID - `title_plain`:标题 - `thumbnail`:缩略图 - `excerpt_plain`:简介 - `url`:跳转链接 - `create_time`:创建时间 **搜索功能:** - 支持按标题模糊搜索 #### 4.4.2 资讯管理流程 1. **添加资讯:** - 填写标题、上传图片、填写简介、填写跳转链接 - 系统自动生成ID(MD5(时间戳+随机数)) - 保存到数据库 2. **编辑资讯:** - 根据ID获取资讯详情 - 修改后保存 3. **删除资讯:** - 根据ID删除记录 ### 4.5 计算记录管理模块 #### 4.5.1 计算记录列表 **控制器:** `Wechatinfro.php` **功能列表:** - **记录列表页:** `/admin/Wechatinfro/wechatRecordList` - **获取记录列表:** `/admin/Wechatinfro/getWechatRecordList` **数据表:** `wechat_calculate_record`(两个模块共用) **记录字段:** - `id`:记录ID - `name`:姓名 - `age`:年龄 - `height`:身高 - `bone_age`:骨龄 - `father_height`:父亲身高 - `mother_height`:母亲身高 - `IGF`:IGF-1值(GHD)或IGFBP-3值(早熟) - `LH`:LH值(早熟) - `uterus_thickness`:子宫厚度(早熟) - `calculate_resutlt`:计算结果 - `create_time`:创建时间 **搜索功能:** - 支持按姓名模糊搜索 ### 4.6 仪表盘模块(Dashboard) #### 4.6.1 统计概览 **控制器:** `Dashboard.php` **功能列表:** - **仪表盘页面:** `/admin/Dashboard/index` - **获取统计数据:** `/admin/Dashboard/getStatistics` **统计数据:** - 注册用户数 - 首页资讯数量 - 最近一次计算时间 - 今日新增用户数 - 总计算次数 --- ## 五、数据库设计 ### 5.1 核心数据表 #### 5.1.1 管理员表(user) **说明:** 后台管理员账户表,两个模块共用 **字段:** - `id`:管理员ID(主键) - `user_name`:管理员姓名 - `phone`:手机号(登录用户名) - `password`:密码(MD5加密) - `user_head`:头像 - `status`:状态(1=启用,0=禁用) - `type`:类型(1=管理员) #### 5.1.2 菜单表(menu) **说明:** 后台菜单配置表,两个模块共用 **字段:** - `id`:菜单ID(主键,MD5生成) - `pid`:父菜单ID(空或0=一级菜单) - `menu_name`:菜单名称 - `url`:菜单链接 - `seq_on`:排序序号 - `menu_icon`:菜单图标 - `create_time`:创建时间 #### 5.1.3 小程序用户表 **说明:** 小程序注册用户表,两个模块使用不同的表 **admin模块:** `wechat_user` **adminghd模块:** `ghd_wechat_user` **字段:** - `uid`:用户ID(主键) - `openid`:微信OpenID - `nickname`:用户昵称 - `headimg`:头像 - `create_time`:注册时间 #### 5.1.4 资讯表(wechat_real_time_info) **说明:** 首页资讯表,两个模块共用 **字段:** - `id`:资讯ID(主键,MD5生成) - `title_plain`:标题 - `thumbnail`:缩略图URL - `excerpt_plain`:简介 - `url`:跳转链接 - `create_time`:创建时间 #### 5.1.5 计算记录表(wechat_calculate_record) **说明:** 预测计算记录表,两个模块共用 **字段:** - `id`:记录ID(主键,MD5生成) - `uid`:用户ID - `name`:姓名 - `age`:年龄 - `height`:身高(cm) - `bone_age`:骨龄(年) - `father_height`:父亲身高(cm) - `mother_height`:母亲身高(cm) - `IGF`:IGF-1值(GHD)或IGFBP-3值(早熟) - `LH`:LH值(早熟预测) - `uterus_thickness`:子宫厚度(早熟预测) - `calculate_resutlt`:计算结果(JSON格式) - `create_time`:创建时间 --- ## 六、前端架构 ### 6.1 主框架结构 **文件:** `application/admin/view/login/nav.html` 或 `application/adminghd/view/login/nav.html` **布局:** - 左侧导航栏:菜单列表 - 顶部栏:面包屑导航 + 用户信息 + 退出按钮 - 主内容区:iframe加载功能页面 ### 6.2 导航菜单渲染 **文件:** `public/static/admin/js/nav.js` 或 `public/static/adminghd/js/nav.js` **功能:** 1. 页面加载时调用 `/admin/Menu/getMenuList` 获取菜单数据 2. 将菜单数据渲染为左侧导航栏 3. 支持一级和二级菜单结构 4. 点击菜单项,在iframe中加载对应页面 ### 6.3 样式框架 **CSS框架:** Layui 2.x **主要样式文件:** - `nav.css`:主框架样式 - `login.css`:登录页样式 - `index.css`:列表页样式 --- ## 七、API接口 ### 7.1 登录相关 | 接口 | 方法 | 说明 | |------|------|------| | `/admin/Login/index` | GET | 登录页 | | `/admin/Login/login` | POST | 登录验证 | | `/admin/Login/logout` | POST | 退出登录 | | `/admin/Login/logoutJump` | GET | 超时跳转页 | ### 7.2 菜单相关 | 接口 | 方法 | 说明 | |------|------|------| | `/admin/Menu/getMenuList` | POST | 获取菜单列表 | | `/admin/Menu/getUserInfor` | POST | 获取当前用户信息 | | `/admin/Menu/doaddMenu` | POST | 添加菜单 | | `/admin/Menu/doupdMenu` | POST | 修改菜单 | | `/admin/Menu/delMenu` | POST | 删除菜单 | ### 7.3 用户管理 | 接口 | 方法 | 说明 | |------|------|------| | `/admin/Wechatinfro/wechatUserList` | GET | 用户列表页 | | `/admin/Wechatinfro/getWechatUserList` | POST | 获取用户列表 | ### 7.4 资讯管理 | 接口 | 方法 | 说明 | |------|------|------| | `/admin/Wechatset/wechatRealTimeInfo` | GET | 资讯列表页 | | `/admin/Wechatset/getWechatRealTimeInfoList` | POST | 获取资讯列表 | | `/admin/Wechatset/wechatRealTimeInfoAdd` | GET | 添加资讯页 | | `/admin/Wechatset/wechatRealTimeInfoUpdate` | GET | 编辑资讯页 | | `/admin/Wechatset/saveWechatRealTimeInfo` | POST | 保存资讯 | | `/admin/Wechatset/delWechatRealTimeInfo` | POST | 删除资讯 | | `/admin/Wechatset/getRealTimeInfoDetail` | POST | 获取资讯详情 | ### 7.5 计算记录 | 接口 | 方法 | 说明 | |------|------|------| | `/admin/Wechatinfro/wechatRecordList` | GET | 记录列表页 | | `/admin/Wechatinfro/getWechatRecordList` | POST | 获取记录列表 | ### 7.6 仪表盘 | 接口 | 方法 | 说明 | |------|------|------| | `/admin/Dashboard/index` | GET | 仪表盘页面 | | `/admin/Dashboard/getStatistics` | POST | 获取统计数据 | --- ## 八、安全机制 ### 8.1 登录验证 - 所有需要登录的控制器继承 `Base` 类 - `Base::_initialize()` 自动检查Session - 未登录或超时自动跳转到登录页 ### 8.2 密码加密 - 密码使用MD5加密存储 - 登录时对输入密码进行MD5加密后比对 ### 8.3 Session管理 - 登录成功设置Session,有效期1小时 - 每次请求检查Session是否过期 - 退出登录清除所有Session ### 8.4 权限控制 - 当前版本未实现细粒度权限控制 - 所有登录用户拥有相同权限 - 预留权限控制接口(代码中已注释) --- ## 九、部署说明 ### 9.1 环境要求 - PHP >= 5.6 - MySQL >= 5.6 - Apache/Nginx Web服务器 - ThinkPHP 5.0框架 ### 9.2 配置说明 #### 9.2.1 数据库配置 **文件:** `application/database.php` ```php return [ 'type' => 'mysql', 'hostname' => '127.0.0.1', 'database' => 'ruilai', 'username' => 'rootrui', 'password' => 'X2)jB+k%YH.p', 'charset' => 'utf8', 'prefix' => 't_sys_', ]; ``` #### 9.2.2 路由配置 **文件:** `application/route.php` 默认使用ThinkPHP的路由规则,URL格式: - `/模块/控制器/方法` 例如: - `/admin/Login/index` → `application/admin/controller/Login.php::index()` ### 9.3 静态资源 静态资源存放在 `public/static/` 目录下,通过Web服务器直接访问。 **访问路径:** - `/static/admin/css/nav.css` - `/static/adminghd/js/nav.js` --- ## 十、常见问题 ### 10.1 登录问题 **问题:** 登录后立即跳转到登录页 **原因:** Session未正确设置或Base类验证失败 **解决:** 1. 检查Session配置 2. 检查Base类的Session键名是否正确 3. 检查数据库用户表数据 ### 10.2 菜单不显示 **问题:** 左侧导航栏菜单不显示 **原因:** 1. 菜单数据未正确返回 2. JavaScript渲染错误 3. 菜单表数据为空 **解决:** 1. 检查浏览器控制台错误 2. 检查 `/admin/Menu/getMenuList` 接口返回 3. 检查 `menu` 表是否有数据 ### 10.3 数据表不存在 **问题:** 提示数据表不存在 **原因:** 数据库表前缀配置错误 **解决:** 1. 检查 `application/database.php` 中的 `prefix` 配置 2. 确认数据库表名是否正确(包含前缀) --- ## 十一、开发规范 ### 11.1 代码规范 - 遵循PSR-2编码规范 - 控制器类名首字母大写 - 方法名使用驼峰命名 - 注释使用PHPDoc格式 ### 11.2 命名规范 - **控制器:** 大驼峰,如 `Wechatset.php` - **方法:** 小驼峰,如 `getWechatUserList()` - **数据表:** 小写下划线,如 `wechat_user` - **Session键:** 小写下划线,如 `admin_user_id` ### 11.3 文件组织 - 控制器放在 `controller/` 目录 - 视图放在 `view/` 目录 - 静态资源放在 `public/static/` 目录 - 公共类放在 `common/` 目录 --- ## 十二、后续优化建议 ### 12.1 代码优化 1. **统一公共逻辑:** 将两个模块的公共代码提取到 `common` 模块 2. **配置统一管理:** 使用配置文件管理业务类型和表映射 3. **错误处理:** 统一异常处理和错误返回格式 ### 12.2 功能增强 1. **权限管理:** 实现基于角色的权限控制(RBAC) 2. **操作日志:** 记录管理员操作日志 3. **数据统计:** 增加更详细的数据统计和报表功能 4. **批量操作:** 支持批量删除、批量导出等功能 ### 12.3 性能优化 1. **缓存机制:** 菜单数据、统计数据使用缓存 2. **数据库优化:** 添加索引,优化查询语句 3. **前端优化:** 压缩静态资源,使用CDN --- ## 十三、后台模块彻底分离维护方案 两个后台(admin 早熟预测、adminghd GHD 预测)可以做到**彻底分离维护**,互不影响。根据目标不同,有两种做法。 ### 13.1 分离状态 **✅ 已完成逻辑彻底分离(方案一)** | 模块 | 状态 | 说明 | |------|------|------| | **admin 模块** | ✅ 已独立 | 所有控制器继承 `app\admin\common\Base`,不再依赖 common 模块 | | **adminghd 模块** | ✅ 已独立 | 所有控制器继承 `app\adminghd\common\Base`,不再依赖 common 模块 | | **Dashboard** | ✅ 已独立 | 两个模块的 `Dashboard` 控制器各自实现 `getStatistics` 方法,使用固定的表名 | | **数据库** | 共用 | 同一库 `ruilai`,同一前缀 `t_sys_`;部分表共用(menu、wechat_real_time_info、wechat_calculate_record),用户表不同(wechat_user / ghd_wechat_user) | | **入口与框架** | 共用 | 同一 `public/index.php`、同一 ThinkPHP 应用目录 | **已解除的耦合:** - ✅ `Dashboard` 不再继承 `DashboardBase` - ✅ 表名和 Session 键已硬编码到各自控制器中 - ✅ 两个模块可独立修改,互不影响 --- ### 13.2 方案一:同仓库内逻辑彻底分离(✅ 已采用) **目标**:同一套代码、同一部署,但 admin 与 adminghd 在代码上**完全独立**,改一个模块不会牵动另一个,也不依赖 common 里的业务基类。 **实施状态:** ✅ **已完成** **已完成的修改:** 1. **✅ 解除 Dashboard 对 common 的依赖** - `application/admin/controller/Dashboard.php` 已改为继承 `\app\admin\common\Base`,不再继承 `DashboardBase`。 - `getStatistics` 方法已独立实现,使用固定的表名 `wechat_user`、`wechat_real_time_info`、`wechat_calculate_record`。 - `application/adminghd/controller/Dashboard.php` 已改为继承 `\app\adminghd\common\Base`,使用固定的表名 `ghd_wechat_user`、`wechat_real_time_info`、`wechat_calculate_record`。 2. **✅ 代码独立性验证** - 两个模块的控制器已完全独立,不再依赖 `app\common\controller\*Base` 和 `BusinessConfig`。 - 表名和 Session 键已硬编码到各自控制器中。 3. **✅ common 模块保留** - `common` 模块中的基类(`DashboardBase`、`WechatinfroBase`、`WechatsetBase`)已保留,但不再被使用。 - 可作为参考或未来新后台的模板,但不影响现有两个模块的独立性。 **优点**:✅ 部署不变、数据库不变,只改一处不影响另一处,适合继续同仓库、同服务器维护。 **维护约定**:两个模块独立维护,如需同步功能,需分别在两个模块中实现。建议在代码注释中标注需要同步的功能点。 --- ### 13.3 方案二:拆成两个独立项目(物理分离) **目标**:两套独立代码库、可独立部署、独立发版,甚至不同服务器、不同数据库。 **思路**: - 以当前代码为基准,复制出两份项目:一份只保留 admin 相关(及 app、index 等必要模块),一份只保留 adminghd 相关。 - 每份项目有独立 `application`、独立入口(可共用同一 `public` 或各建各的)、独立配置与依赖。 **具体步骤**: 1. **项目 A(早熟预测后台)** - 新建目录如 `code-admin`,保留 ThinkPHP 框架、`public`、`application/database.php` 等。 - 只保留 `application/admin`、`application/app`(瑞莱小程序 API)、`application/index` 等与早熟业务相关的模块;删除 `application/adminghd` 和 `application/common` 中业务相关部分。 - 将原 admin 内对表名、Session 的写法固定为早熟业务(wechat_user、admin_user_id 等)。 - 配置独立入口(如 `code-admin/public/index.php`)和独立域名或路径。 2. **项目 B(GHD 预测后台)** - 新建目录如 `code-adminghd`,同样保留框架与必要目录。 - 只保留 `application/adminghd`、`application/app`(GHD 小程序 API)等;删除 `application/admin` 和 common 业务基类。 - 表名、Session 固定为 GHD(ghd_wechat_user、adminghd_user_id 等)。 - 配置独立入口与访问方式。 3. **数据库** - **选项甲**:仍用同一库,两项目连同一 `database.php`,仅模块不同、访问表不同。 - **选项乙**:分库(如 `ruilai` 与 `ruilai_ghd`),各项目独立 `database.php`,表结构可复制或迁移脚本分表。 4. **静态资源** - 各项目 `public/static` 下只保留本后台所需(如项目 A 只保留 `admin`,项目 B 只保留 `adminghd`),避免混用。 **优点**:版本、上线、回滚完全独立,技术栈升级可分批进行。 **缺点**:两套代码、两套部署与运维;公共 bug 或需求要改两处,需通过复制或少量共享库(如 composer 私有包)来收敛。 --- ### 13.4 选择建议 | 场景 | 建议 | |------|------| | 希望**少动部署、少动库**,只希望开发时互不干扰 | 采用 **方案一**(同仓库逻辑分离) | | 需要**独立域名、独立服务器、独立发版节奏** | 采用 **方案二**(拆成两个项目) | | 未来可能新增更多“类似后台”且希望复用一套基类 | 可保留 common 基类,仅把 admin、adminghd 改为不继承它们,实现“可选复用、默认分离” | **实施完成日期:** 2025年1月29日 **采用的方案:** 方案一(同仓库内逻辑彻底分离) **状态:** ✅ 已完成,两个模块已完全独立,可独立维护 --- ## 附录 ### A. 相关文档 - [数据库配置文档](./数据库配置.md) - [生长激素缺乏预测模型项目需求文档](./生长激素缺乏预测模型项目需求文档.md) ### B. 联系方式 如有问题,请联系开发团队。 --- **文档生成时间:** 2025年1月28日 **最后更新:** 2025年1月28日