Files
code/后台文档.md
2026-01-29 17:48:51 +08:00

25 KiB
Raw Permalink 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 = 1type = 1
  4. 登录成功:
    • 设置Sessionadmin_user_idadminghd_user_id
    • 设置登录时间:admin_user_login_timeadminghd_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. 添加资讯:

    • 填写标题、上传图片、填写简介、填写跳转链接
    • 系统自动生成IDMD5(时间戳+随机数)
    • 保存到数据库
  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:母亲身高
  • IGFIGF-1值GHD或IGFBP-3值早熟
  • LHLH值早熟
  • 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
  • IGFIGF-1值GHD或IGFBP-3值早熟
  • LHLH值早熟预测
  • uterus_thickness:子宫厚度(早熟预测)
  • calculate_resutlt计算结果JSON格式
  • create_time:创建时间

六、前端架构

6.1 主框架结构

文件: application/admin/view/login/nav.htmlapplication/adminghd/view/login/nav.html

布局:

  • 左侧导航栏:菜单列表
  • 顶部栏:面包屑导航 + 用户信息 + 退出按钮
  • 主内容区iframe加载功能页面

6.2 导航菜单渲染

文件: public/static/admin/js/nav.jspublic/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/indexapplication/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_userwechat_real_time_infowechat_calculate_record
    • application/adminghd/controller/Dashboard.php 已改为继承 \app\adminghd\common\Base,使用固定的表名 ghd_wechat_userwechat_real_time_infowechat_calculate_record
  2. 代码独立性验证

    • 两个模块的控制器已完全独立,不再依赖 app\common\controller\*BaseBusinessConfig
    • 表名和 Session 键已硬编码到各自控制器中。
  3. common 模块保留

    • common 模块中的基类(DashboardBaseWechatinfroBaseWechatsetBase)已保留,但不再被使用。
    • 可作为参考或未来新后台的模板,但不影响现有两个模块的独立性。

优点 部署不变、数据库不变,只改一处不影响另一处,适合继续同仓库、同服务器维护。
维护约定:两个模块独立维护,如需同步功能,需分别在两个模块中实现。建议在代码注释中标注需要同步的功能点。


13.3 方案二:拆成两个独立项目(物理分离)

目标:两套独立代码库、可独立部署、独立发版,甚至不同服务器、不同数据库。

思路

  • 以当前代码为基准,复制出两份项目:一份只保留 admin 相关(及 app、index 等必要模块),一份只保留 adminghd 相关。
  • 每份项目有独立 application、独立入口(可共用同一 public 或各建各的)、独立配置与依赖。

具体步骤

  1. 项目 A早熟预测后台

    • 新建目录如 code-admin,保留 ThinkPHP 框架、publicapplication/database.php 等。
    • 只保留 application/adminapplication/app(瑞莱小程序 APIapplication/index 等与早熟业务相关的模块;删除 application/adminghdapplication/common 中业务相关部分。
    • 将原 admin 内对表名、Session 的写法固定为早熟业务wechat_user、admin_user_id 等)。
    • 配置独立入口(如 code-admin/public/index.php)和独立域名或路径。
  2. 项目 BGHD 预测后台)

    • 新建目录如 code-adminghd,同样保留框架与必要目录。
    • 只保留 application/adminghdapplication/appGHD 小程序 API删除 application/admin 和 common 业务基类。
    • 表名、Session 固定为 GHDghd_wechat_user、adminghd_user_id 等)。
    • 配置独立入口与访问方式。
  3. 数据库

    • 选项甲:仍用同一库,两项目连同一 database.php,仅模块不同、访问表不同。
    • 选项乙:分库(如 ruilairuilai_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日