Files
code/(红头)后台文档.md
2026-01-29 17:51:13 +08:00

25 KiB
Raw Blame History

后台管理系统文档

项目名称: 瑞莱医疗后台管理系统
技术架构: 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

返回格式:

{
  "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

返回格式:

{
  "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

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. 相关文档

B. 联系方式

如有问题,请联系开发团队。


文档生成时间: 2025年1月28日
最后更新: 2025年1月28日