This commit is contained in:
2026-01-28 17:28:38 +08:00
parent b6740d2678
commit 77a891e636
3 changed files with 1182 additions and 0 deletions

1
szjs Submodule

Submodule szjs added at 4d7032dffb

View File

@@ -0,0 +1,255 @@
# 小程序域名配置问题解决方案
**问题时间:** 2025年1月28日
**问题描述:** 取消"不校验合法域名"后,小程序无法访问接口
---
## 一、问题诊断
### 错误信息
```
request 合法域名校验出错
https://www.ruilaizipj.com 不在以下 request 合法域名列表中
```
**允许的域名列表:**
- `https://mp.weixin.qq.com`
- `https://ruilaizipj.com`(不带www)
- `https://tcb-api.tencentcloudapi.com`
### 根本原因
1. **代码使用的域名:** `https://www.ruilaizipj.com/`(带www)
2. **白名单中的域名:** `https://ruilaizipj.com`(不带www)
3. **域名不匹配**:微信小程序严格校验域名,必须完全一致
---
## 二、解决方案
### 方案一:在微信小程序后台添加带www的域名(推荐)⭐
**操作步骤:**
1. **登录微信公众平台**
- 访问:https://mp.weixin.qq.com
- 登录您的小程序账号
2. **进入开发设置**
- 左侧菜单:**开发** → **开发管理** → **开发设置**
- 找到 **"服务器域名"** 部分
3. **添加域名**
- 点击 **"修改"** 按钮
- 在 **"request合法域名"** 中添加:
```
https://www.ruilaizipj.com
```
- 同时检查 **"uploadFile合法域名"** 和 **"downloadFile合法域名"**,也添加:
```
https://www.ruilaizipj.com
```
- 点击 **"保存"** 或 **"提交"**
4. **重新编译小程序**
- 在微信开发者工具中重新编译
- 清除缓存后测试
**优点:**
- ✅ 不需要修改代码
- ✅ 使用带www的域名更规范
- ✅ 证书已配置好,直接可用
---
### 方案二:修改代码使用不带www的域名
**操作步骤:**
1. **修改小程序代码**
- 打开 `app.js`
- 将 `globalData.url` 改为:
```javascript
url: 'https://ruilaizipj.com/'
```
2. **配置根域名SSL证书**
- 需要为 `ruilaizipj.com` 申请SSL证书
- 或在现有证书中添加根域名(SAN扩展)
3. **修改Nginx配置**
- 在 `server_name` 中添加 `ruilaizipj.com`
- 确保证书支持根域名
**缺点:**
- ❌ 需要修改代码
- ❌ 需要重新申请/配置SSL证书
- ❌ 根域名证书配置较复杂
---
## 三、当前服务器配置状态
### SSL证书状态
- **证书域名:** `www.ruilaizipj.com` ✅
- **根域名支持:** `ruilaizipj.com` ❌(证书不包含)
- **证书有效期:** 2026-01-28 至 2026-04-28 ✅
### Nginx配置状态
- **server_name:** `www.ruilaizipj.com 101.43.95.130`(已添加 `ruilaizipj.com`)
- **SSL证书路径:** `/www/server/panel/vhost/cert/101.43.95.130/`
- **HTTPS访问:** `www.ruilaizipj.com` ✅ 正常
### 域名访问测试
- **`https://www.ruilaizipj.com`** ✅ 正常(200 OK)
- **`https://ruilaizipj.com`** ❌ 证书不匹配(需要配置根域名证书)
---
## 四、推荐操作
### 立即执行(方案一)
1. **在微信小程序后台添加域名:**
```
https://www.ruilaizipj.com
```
添加到以下列表:
- request合法域名
- uploadFile合法域名
- downloadFile合法域名
2. **保存配置**
3. **在微信开发者工具中:**
- 清除缓存
- 重新编译
- 测试接口访问
### 如果方案一不行,再考虑方案二
如果添加域名后仍有问题,可以:
1. 申请包含根域名的SSL证书(或使用通配符证书)
2. 修改代码使用根域名
3. 配置Nginx支持根域名
---
## 五、注意事项
### 1. 域名必须完全一致
- ✅ 正确:`https://www.ruilaizipj.com`
- ❌ 错误:`https://www.ruilaizipj.com/`(末尾有斜杠,但通常不影响)
- ❌ 错误:`http://www.ruilaizipj.com`(必须是HTTPS)
### 2. 白名单修改限制
- 每月可修改次数有限(您当前还可修改49次)
- 修改后需要保存并重新编译小程序
### 3. 开发环境 vs 生产环境
- **开发环境**:可以勾选"不校验合法域名"进行调试
- **生产环境**:必须配置白名单,否则无法访问
### 4. 证书要求
- 必须是HTTPS(HTTP不支持)
- 证书必须有效且未过期
- 证书域名必须与请求域名匹配
---
## 六、验证步骤
### 1. 检查白名单配置
在微信小程序后台确认:
- ✅ `https://www.ruilaizipj.com` 已在 request合法域名 列表中
- ✅ `https://www.ruilaizipj.com` 已在 uploadFile合法域名 列表中
- ✅ `https://www.ruilaizipj.com` 已在 downloadFile合法域名 列表中
### 2. 检查代码配置
在 `app.js` 中确认:
```javascript
globalData: {
url: 'https://www.ruilaizipj.com/' // 与白名单域名一致
}
```
### 3. 测试访问
在微信开发者工具中:
1. 取消勾选"不校验合法域名"
2. 清除缓存
3. 重新编译
4. 测试接口调用
5. 查看Console是否有错误
---
## 七、常见问题
### Q1: 添加域名后仍然报错?
**可能原因:**
- 白名单未保存
- 小程序未重新编译
- 缓存未清除
**解决方法:**
1. 确认白名单已保存
2. 在开发者工具中清除缓存
3. 重新编译小程序
### Q2: 为什么需要两个域名都加?
**原因:**
- 如果代码中可能使用不同的域名
- 或者有重定向情况
- 为了确保兼容性
**建议:**
- 统一使用一个域名(推荐 `www.ruilaizipj.com`)
- 在代码和白名单中都使用相同的域名
### Q3: 证书不匹配怎么办?
**如果使用根域名 `ruilaizipj.com`:**
1. 申请包含根域名的证书(或通配符证书 `*.ruilaizipj.com`)
2. 在Nginx中配置根域名的SSL证书
3. 确保证书的SAN包含 `ruilaizipj.com`
---
## 八、总结
### 问题根源
**代码使用的域名与白名单域名不一致:**
- 代码:`https://www.ruilaizipj.com/`(带www)
- 白名单:`https://ruilaizipj.com`(不带www)
### 推荐解决方案
**在微信小程序后台添加 `https://www.ruilaizipj.com` 到白名单**
### 操作步骤
1. 登录微信公众平台
2. 进入开发设置 → 服务器域名
3. 添加 `https://www.ruilaizipj.com` 到所有相关域名列表
4. 保存配置
5. 重新编译小程序
---
**创建时间:** 2025年1月28日
**问题状态:** 待解决 - 需要在微信小程序后台添加域名

View File

@@ -0,0 +1,926 @@
# 生长激素缺乏预测模型项目需求文档
**项目名称:** 生长激素缺乏(GHD)预测模型系统
**项目类型:** 医疗健康小程序 + 后台管理系统
**技术架构:** 微信小程序(前端)+ ThinkPHP 5.0(后端)
**数据库:** MySQL
**文档版本:** v1.0
**创建日期:** 2025年1月28日
---
## 一、项目概述
### 1.1 项目背景
生长激素缺乏(Growth Hormone Deficiency, GHD)是儿童内分泌疾病中的常见问题,早期诊断和预测对患者的治疗和预后具有重要意义。本项目旨在开发一个基于多因素分析的GHD预测模型系统,通过微信小程序为医生和患者提供便捷的预测工具,并通过后台管理系统进行数据管理和内容维护。
### 1.2 项目目标
1. **提供GHD预测功能**:基于骨龄、实际年龄、IGF-1、IGFBP-3等指标,计算GHD患病概率
2. **数据管理**:记录用户计算历史,便于医生和患者追踪
3. **资讯管理**:提供相关医疗资讯的发布和管理功能
4. **用户管理**:管理小程序注册用户信息
### 1.3 用户群体
- **主要用户**:医生、患者及其家属
- **管理员**:医疗机构的系统管理员
---
## 二、系统架构
### 2.1 技术架构
```
┌─────────────────┐
│ 微信小程序前端 │
│ (WeChat Mini │
│ Program) │
└────────┬────────┘
│ HTTP/HTTPS
│ API调用
┌────────▼────────┐
│ ThinkPHP 5.0 │
│ 后端服务 │
└────────┬────────┘
│
┌────────▼────────┐
│ MySQL数据库 │
└─────────────────┘
```
### 2.2 目录结构
```
/www/wwwroot/code/
├── application/ # 应用目录
│ ├── adminghd/ # 后台管理模块
│ │ ├── controller/ # 控制器
│ │ │ ├── Login.php # 登录控制器
│ │ │ ├── Menu.php # 菜单管理
│ │ │ ├── Wechatinfro.php # 微信用户信息管理
│ │ │ └── Wechatset.php # 微信设置管理
│ │ ├── model/ # 模型
│ │ └── view/ # 视图
│ ├── app/ # 小程序API模块
│ │ └── controller/
│ │ ├── Ghdwechat.php # GHD相关API
│ │ └── Ruilaiwechat.php # 瑞来相关API
│ └── database.php # 数据库配置
├── public/ # 公共访问目录
│ ├── index.php # 入口文件
│ └── static/ # 静态资源
├── szjs/ # 微信小程序源码
│ ├── pages/ # 小程序页面
│ │ ├── ghdCalculator/ # GHD计算器页面
│ │ ├── home/ # 首页
│ │ ├── my/ # 个人中心
│ │ └── ...
│ ├── app.js # 小程序入口
│ └── app.json # 小程序配置
└── thinkphp/ # ThinkPHP框架核心
```
---
## 三、功能需求
### 3.1 微信小程序功能
#### 3.1.1 GHD预测计算器
**功能描述:** 用户输入相关指标,系统自动计算GHD患病概率
**前端计算器输入参数:**
- **骨龄(BA)**:单位:年,支持小数
- **实际年龄(CA)**:单位:年,支持小数
- **IGF-1值**:单位:ng/ml,支持小数
- **IGFBP-3值**:单位:mg/L,支持小数
**后端API计算输入参数:**
- **用户ID(uid)**:必填
- **患者姓名(name)**:必填
- **年龄(age)**:必填,数字
- **身高(height)**:必填,数字
- **骨龄(bone_age)**:必填,数字
- **父亲身高(father_height)**:必填,数字
- **母亲身高(mother_height)**:必填,数字
- **IGF-1值(IGF)**:必填,数字,单位:ng/ml
- **LH值(LH)**:必填,数字,单位:mIU/ml
- **子宫厚度(uterus_thickness)**:必填,数字,单位:mm
**前端计算公式:**
```
Y = 3.726 - 0.876×(BA-CA) - 0.058×(IGF-1) + 0.229×(IGFBP-3)
P = e^Y / (1 + e^Y)
```
其中:
- Y:中间变量
- P:GHD预测概率(0-1之间)
- BA-CA:骨龄与实际年龄的差值
**后端API计算公式:**
```
P = exp(-5.908 + 0.008×IGF-1 + 2.146×LH + 0.286×子宫厚度) /
(1 + exp(-5.908 + 0.008×IGF-1 + 2.146×LH + 0.286×子宫厚度))
```
其中:
- P:GHD预测概率(0-1之间),保留3位小数
**输出结果:**
- GHD预测概率(百分比形式)
- 计算过程详情(分步骤展示)
- 结果解释和建议
**结果分级:**
- **P ≥ 0.8**:GHD可能性较大,建议进一步进行相关检查
- **0.5 ≤ P < 0.8**:存在GHD可能,建议进行相关检查
- **P < 0.5**:GHD可能性较小,但仍需结合临床表现进行综合判断
**参考范围:**
系统内置IGF-1和IGFBP-3的参考范围(按性别和年龄段):
- IGF-1参考范围(男性/女性,0-17岁,分9个年龄段)
- IGFBP-3参考范围(男性/女性,0-17岁,分9个年龄段)
#### 3.1.2 其他工具页面
根据小程序配置,还包含以下页面:
- **首页(home)**:展示资讯和功能入口
- **个人中心(my)**:用户信息、历史记录
- **IGF参考值(igfrefer)**:IGF-1和IGFBP-3参考范围查询
- **身高SDS计算器(heightSdsCalculator)**:身高标准差评分计算
- **工具集合(tool)**:其他医疗工具
- **性发育图表(sexChart)**:性发育相关图表
- **关于(guanyu)**:关于小程序的信息
#### 3.1.3 用户功能
- **微信授权登录**:
- 通过微信授权获取用户信息
- 接口:`/app/Ghdwechat/wechatLogin` 或 `/app/Ruilaiwechat/wechatLogin`
- 参数:`code`(微信登录code)、`encryptedData`(加密数据)、`iv`(初始向量)
- 返回:用户ID(uid)和登录状态
- **计算历史记录**:
- 查看历史计算记录:`/app/Ghdwechat/selectRecordList` 或 `/app/Ruilaiwechat/selectRecordList`
- 删除历史记录:`/app/Ghdwechat/deleteRecord` 或 `/app/Ruilaiwechat/deleteRecord`
- 支持分页查询(默认每页30条)
- **资讯浏览**:
- 获取资讯列表:`/app/Ghdwechat/selectRealtimeInfoList` 或 `/app/Ruilaiwechat/selectRealtimeInfoList`
- 支持分页查询(默认每页20条)
### 3.2 后台管理系统功能
#### 3.2.1 用户登录
**功能描述:** 管理员登录后台管理系统
**登录方式:**
- 用户名/手机号 + 密码登录
- Session会话管理(1小时有效期)
**权限控制:**
- 基于Session的用户身份验证
- 不同用户类型可能有不同权限(当前代码中部分权限检查被注释)
#### 3.2.2 微信用户管理
**功能描述:** 查看和管理小程序注册用户
**功能列表:**
- **用户列表查询**:
- 支持按昵称搜索
- 分页显示(默认每页30条)
- 显示字段:用户ID、昵称、头像、注册时间
- **用户信息查看**:查看用户详细信息
**数据表:** `ghd_wechat_user`
- `uid`:用户ID
- `nickname`:昵称
- `headimg`:头像
- `create_time`:注册时间
#### 3.2.3 计算记录管理
**功能描述:** 查看和管理用户的GHD预测计算记录
**功能列表:**
- **记录列表查询**:
- 支持按姓名搜索
- 分页显示(默认每页30条)
- 显示字段:序号、姓名、年龄、身高、骨龄、父亲身高、母亲身高、IGF、LH、子宫厚度、计算结果、创建时间
- **记录详情查看**:查看完整的计算记录详情
**数据表:** `wechat_calculate_record`
- `id`:记录ID
- `name`:姓名
- `age`:年龄
- `height`:身高
- `bone_age`:骨龄
- `father_height`:父亲身高
- `mother_height`:母亲身高
- `IGF`:IGF-1值
- `LH`:LH值
- `uterus_thickness`:子宫厚度
- `calculate_resutlt`:计算结果
- `create_time`:创建时间
#### 3.2.4 资讯管理
**功能描述:** 管理小程序中展示的医疗资讯
**功能列表:**
- **资讯列表**:
- 支持按标题搜索
- 分页显示(默认每页30条)
- 显示字段:标题、缩略图、简介、跳转链接、创建时间
- **添加资讯**:
- 标题(必填)
- 缩略图(必填)
- 简介(必填)
- 跳转链接(必填)
- **编辑资讯**:修改已有资讯信息
- **删除资讯**:删除不需要的资讯
**数据表:** `wechat_real_time_info`
- `id`:资讯ID
- `title_plain`:标题
- `thumbnail`:缩略图
- `excerpt_plain`:简介
- `url`:跳转链接
- `create_time`:创建时间
#### 3.2.5 菜单管理
**功能描述:** 管理系统菜单(当前部分功能被注释)
**功能列表:**
- 获取菜单列表
- 添加菜单
- 修改菜单
- 删除菜单
---
## 四、数据库设计
### 4.1 核心数据表
#### 4.1.1 用户表(t_sys_user)
**用途:** 存储后台管理员用户信息
**主要字段:**
- `id`:用户ID(主键)
- `user_name`:用户名
- `phone`:手机号(登录账号)
- `password`:密码(MD5加密)
- `user_head`:头像
- `status`:状态(1:启用,0:禁用)
- `type`:用户类型(1:管理员)
#### 4.1.2 微信用户表(ghd_wechat_user / wechat_user)
**用途:** 存储小程序注册用户信息
**主要字段:**
- `uid`:用户ID(主键,自增)
- `openid`:微信OpenID(唯一标识)
- `nickname`:昵称
- `headimg`:头像URL
- `create_time`:注册时间
**注意:** 代码中同时使用了 `ghd_wechat_user` 和 `wechat_user` 两个表名,需要确认实际使用的表名
#### 4.1.3 计算记录表(wechat_calculate_record)
**用途:** 存储用户的GHD预测计算记录
**主要字段:**
- `id`:记录ID(主键)
- `name`:姓名
- `age`:年龄
- `height`:身高
- `bone_age`:骨龄
- `father_height`:父亲身高
- `mother_height`:母亲身高
- `IGF`:IGF-1值
- `uid`:用户ID(关联微信用户)
- `LH`:LH值(促黄体生成素),单位:mIU/ml
- `uterus_thickness`:子宫厚度,单位:mm
- `calculate_resutlt`:计算结果(GHD概率,0-1之间,保留3位小数)
- `create_time`:创建时间
#### 4.1.4 资讯表(wechat_real_time_info)
**用途:** 存储小程序展示的医疗资讯
**主要字段:**
- `id`:资讯ID(主键,MD5生成)
- `title_plain`:标题
- `thumbnail`:缩略图URL
- `excerpt_plain`:简介
- `url`:跳转链接
- `create_time`:创建时间
#### 4.1.5 菜单表(t_sys_menu)
**用途:** 存储后台管理系统菜单
**主要字段:**
- `id`:菜单ID(主键)
- `pid`:父菜单ID
- `menu_name`:菜单名称
- `url`:菜单链接
- `menu_icon`:菜单图标
- `seq_on`:排序序号
- `create_time`:创建时间
---
## 五、API接口设计
### 5.1 小程序API接口
#### 5.1.1 用户相关接口
**接口路径:** `/app/Ghdwechat/xxx` 或 `/app/Ruilaiwechat/xxx`
**主要接口:**
- 用户登录/注册
- 获取用户信息
- 更新用户信息
#### 5.1.2 计算相关接口
**计算接口:**
- **接口路径:** `/app/Ghdwechat/calculate` 或 `/app/Ruilaiwechat/calculate`
- **请求方式:** POST
- **功能:** 提交计算参数,返回计算结果并保存记录
**请求参数:**
```json
{
"uid": "用户ID",
"name": "患者姓名",
"age": 10.5,
"height": 140,
"bone_age": 9.5,
"father_height": 175,
"mother_height": 160,
"IGF": 250,
"LH": 0.8,
"uterus_thickness": 10
}
```
**响应数据:**
```json
{
"erro": 0,
"msg": "计算成功",
"calculate_resutlt": 0.661
}
```
**错误响应:**
```json
{
"erro": -1,
"msg": "错误信息(如:未传入用户id、未传入姓名等)"
}
```
**历史记录查询接口:**
- **接口路径:** `/app/Ghdwechat/selectRecordList` 或 `/app/Ruilaiwechat/selectRecordList`
- **请求方式:** POST
- **请求参数:**
```json
{
"uid": "用户ID",
"page": 1,
"page_size": 30
}
```
**响应数据:**
```json
{
"erro": 0,
"msg": "查询成功",
"lists": [
{
"id": "记录ID",
"name": "患者姓名",
"age": 10.5,
"height": 140,
"bone_age": 9.5,
"father_height": 175,
"mother_height": 160,
"IGF": 250,
"LH": 0.8,
"uterus_thickness": 10,
"calculate_resutlt": 0.661,
"create_time": "2024-05-19 17:47:17"
}
],
"lastPage": 10,
"currentPage": 1
}
```
**删除记录接口:**
- **接口路径:** `/app/Ghdwechat/deleteRecord` 或 `/app/Ruilaiwechat/deleteRecord`
- **请求方式:** POST
- **请求参数:**
```json
{
"uid": "用户ID",
"id": "记录ID"
}
```
#### 5.1.3 资讯相关接口
**获取资讯列表:**
- **接口路径:** `/app/Ghdwechat/selectRealtimeInfoList` 或 `/app/Ruilaiwechat/selectRealtimeInfoList`
- **请求方式:** POST
- **请求参数:**
```json
{
"page": 1,
"page_size": 20
}
```
**响应数据:**
```json
{
"erro": 0,
"msg": "查询成功",
"lists": [
{
"title_plain": "资讯标题",
"thumbnail": "图片URL",
"excerpt_plain": "简介",
"url": "跳转链接"
}
],
"lastPage": 10,
"currentPage": 1
}
```
#### 5.1.4 用户登录接口
**微信授权登录:**
- **接口路径:** `/app/Ghdwechat/wechatLogin` 或 `/app/Ruilaiwechat/wechatLogin`
- **请求方式:** POST
- **请求参数:**
```json
{
"code": "微信登录code",
"encryptedData": "加密的用户数据",
"iv": "初始向量"
}
```
**响应数据:**
```json
{
"erro": 0,
"msg": "登录成功",
"uid": "用户ID"
}
```
**错误响应:**
```json
{
"erro": -1,
"msg": "错误信息(如:未传入code、解析数据失败等)"
}
```
### 5.2 后台管理API接口
#### 5.2.1 登录接口
**接口路径:** `/adminghd/Login/login`
**请求方式:** POST
**请求参数:**
```json
{
"username": "13212345678",
"password": "123456",
"loginsubmit": "true"
}
```
**响应数据:**
```json
{
"status": 1,
"msg": "登录成功",
"token": 1
}
```
#### 5.2.2 用户信息接口
**接口路径:** `/adminghd/Menu/getUserInfor`
**请求方式:** GET/POST
**响应数据:**
```json
{
"status": 1,
"msg": "查询成功",
"infro": {
"user_name": "管理员",
"user_head": null
}
}
```
#### 5.2.3 微信用户列表接口
**接口路径:** `/adminghd/Wechatinfro/getWechatUserList`
**请求方式:** POST
**请求参数:**
```json
{
"page": 1,
"page_size": 30,
"title": "搜索关键词(可选)"
}
```
**响应数据:**
```json
{
"erro": 0,
"msg": "查询成功",
"lists": [
{
"uid": "xxx",
"nickname": "用户昵称",
"headimg": "头像URL",
"create_time": "2024-05-19 17:47:17",
"no_id": 1
}
],
"lastPage": 10,
"currentPage": 1
}
```
#### 5.2.4 计算记录列表接口
**接口路径:** `/adminghd/Wechatinfro/getWechatRecordList`
**请求方式:** POST
**请求参数:**
```json
{
"page": 1,
"page_size": 30,
"title": "搜索关键词(可选)"
}
```
**响应数据:**
```json
{
"erro": 0,
"msg": "查询成功",
"lists": [
{
"id": "xxx",
"name": "患者姓名",
"age": 10.5,
"height": 140,
"bone_age": 9.5,
"father_height": 175,
"mother_height": 160,
"IGF": 250,
"LH": 0.8,
"uterus_thickness": 10,
"calculate_resutlt": 0.661,
"create_time": "2024-05-19 17:47:17",
"no_id": 1
}
],
"lastPage": 10,
"currentPage": 1
}
```
#### 5.2.5 资讯管理接口
**获取资讯列表:**
- **接口路径:** `/adminghd/Wechatset/getWechatRealTimeInfoList`
- **请求方式:** POST
**添加/更新资讯:**
- **接口路径:** `/adminghd/Wechatset/saveWechatRealTimeInfo`
- **请求方式:** POST
- **请求参数:**
```json
{
"id": "资讯ID(更新时必填)",
"title_plain": "标题",
"thumbnail": "缩略图URL",
"excerpt_plain": "简介",
"url": "跳转链接"
}
```
**删除资讯:**
- **接口路径:** `/adminghd/Wechatset/delWechatRealTimeInfo`
- **请求方式:** POST
- **请求参数:**
```json
{
"id": "资讯ID"
}
```
---
## 六、预测模型算法
### 6.1 GHD预测模型(小程序前端模型 - 基于骨龄和IGF指标)
**模型公式:**
```
Y = 3.726 - 0.876×(BA-CA) - 0.058×(IGF-1) + 0.229×(IGFBP-3)
P = e^Y / (1 + e^Y)
```
**参数说明:**
- **BA**:骨龄(Bone Age),单位:年
- **CA**:实际年龄(Chronological Age),单位:年
- **IGF-1**:胰岛素样生长因子-1,单位:ng/ml
- **IGFBP-3**:胰岛素样生长因子结合蛋白-3,单位:mg/L
- **Y**:中间变量(对数几率)
- **P**:GHD预测概率(0-1之间)
**计算步骤:**
1. 计算骨龄差值:BA-CA
2. 代入公式计算Y值
3. 通过Logistic函数计算概率P
4. 将P转换为百分比形式
**使用场景:** 小程序前端计算器页面(`ghdCalculator`),用于前端实时计算展示
### 6.2 GHD预测模型(后端API模型 - 基于IGF、LH和子宫厚度)
**模型公式:**
```
P = exp(-5.908 + 0.008×IGF-1 + 2.146×LH + 0.286×子宫厚度) /
(1 + exp(-5.908 + 0.008×IGF-1 + 2.146×LH + 0.286×子宫厚度))
```
**参数说明:**
- **IGF-1**:胰岛素样生长因子-1,单位:ng/ml
- **LH**:促黄体生成素(Luteinizing Hormone),单位:mIU/ml
- **子宫厚度**:单位:mm
- **P**:预测概率(0-1之间),保留3位小数
**计算步骤:**
1. 计算指数部分:exp(-5.908 + 0.008×IGF-1 + 2.146×LH + 0.286×子宫厚度)
2. 通过Logistic函数计算概率P
3. 将P四舍五入保留3位小数
**使用场景:** 后端API接口(`/app/Ghdwechat/calculate` 和 `/app/Ruilaiwechat/calculate`),用于服务器端计算并保存记录
**输入参数(后端API):**
- `uid`:用户ID(必填)
- `name`:患者姓名(必填)
- `age`:年龄(必填,数字)
- `height`:身高(必填,数字)
- `bone_age`:骨龄(必填,数字)
- `father_height`:父亲身高(必填,数字)
- `mother_height`:母亲身高(必填,数字)
- `IGF`:IGF-1值(必填,数字)
- `LH`:LH值(必填,数字)
- `uterus_thickness`:子宫厚度(必填,数字)
**输出结果:**
- `calculate_resutlt`:计算结果(概率值,0-1之间)
- 计算结果自动保存到数据库表 `wechat_calculate_record`
**注意:**
- 小程序前端和后端API使用不同的预测模型公式
- 前端模型基于骨龄和IGF指标,后端模型基于IGF、LH和子宫厚度
- 两个模型可能适用于不同的预测场景或患者群体
- 建议统一模型或明确说明两个模型的适用场景
---
## 七、非功能性需求
### 7.1 性能需求
- **响应时间**:API接口响应时间 < 500ms
- **并发支持**:支持至少100个并发用户
- **数据库查询**:优化查询性能,使用索引
### 7.2 安全需求
- **数据加密**:用户密码使用MD5加密存储
- **Session管理**:使用Session进行用户身份验证
- **HTTPS支持**:生产环境使用HTTPS协议
- **SQL注入防护**:使用ThinkPHP的ORM防止SQL注入
- **XSS防护**:对用户输入进行过滤和转义
### 7.3 可用性需求
- **系统可用性**:99%以上
- **数据备份**:定期备份数据库
- **错误处理**:友好的错误提示信息
### 7.4 兼容性需求
- **微信小程序**:支持微信小程序最新版本
- **浏览器**:后台管理系统支持主流浏览器(Chrome、Firefox、Safari、Edge)
- **移动端**:后台管理系统支持移动端访问
---
## 八、部署要求
### 8.1 服务器环境
- **操作系统**:Linux(CentOS 7+)
- **Web服务器**:Nginx 1.20+
- **PHP版本**:PHP 5.6+(推荐PHP 7.3+)
- **数据库**:MySQL 5.7+
- **PHP扩展**:mysqli、pdo_mysql、mbstring、openssl
### 8.2 目录权限
- `runtime/`:可写权限(日志、缓存)
- `public/uploads/`:可写权限(文件上传)
- `public/static/`:可读权限(静态资源)
### 8.3 配置文件
- **数据库配置**:`/www/wwwroot/code/application/database.php`
- **应用配置**:`/www/wwwroot/code/application/config.php`
- **Nginx配置**:`/etc/nginx/conf.d/default.conf` 或宝塔面板配置
---
## 九、项目现状
### 9.1 已完成功能
✅ **后台管理系统:**
- 用户登录功能
- 微信用户管理
- 计算记录管理
- 资讯管理
- 菜单管理(部分功能)
✅ **小程序前端:**
- GHD计算器页面
- 首页、个人中心等基础页面
- 计算逻辑实现
✅ **后端API:**
- 用户相关接口
- 计算记录接口
- 资讯接口
### 9.2 待完善功能
⏳ **数据验证:**
- 输入参数的范围验证
- 计算结果合理性检查
⏳ **用户体验:**
- 错误提示优化
- 加载状态提示
- 结果可视化展示
⏳ **功能扩展:**
- 计算历史记录查看(小程序端)
- 数据导出功能
- 统计分析功能
⏳ **文档完善:**
- API接口文档
- 用户使用手册
- 管理员操作手册
---
## 十、风险评估
### 10.1 技术风险
- **PHP版本兼容性**:当前使用PHP 5.6,建议升级到PHP 7.3+
- **数据库连接**:需要确保MySQL服务稳定运行
- **Session管理**:需要确保Session配置正确
### 10.2 业务风险
- **数据准确性**:预测模型需要定期验证和优化
- **医疗责任**:系统仅作为辅助工具,不能替代专业医疗诊断
- **数据隐私**:需要保护患者隐私信息
### 10.3 运维风险
- **数据备份**:需要建立定期备份机制
- **系统监控**:需要监控系统运行状态
- **安全更新**:需要及时更新安全补丁
---
## 十一、后续规划
### 11.1 短期规划(1-3个月)
1. **功能优化**:
- 完善输入验证
- 优化用户界面
- 添加计算历史功能
2. **性能优化**:
- 数据库查询优化
- 缓存机制引入
- 接口响应时间优化
3. **文档完善**:
- 编写API文档
- 编写用户手册
### 11.2 中期规划(3-6个月)
1. **功能扩展**:
- 多模型支持
- 数据统计分析
- 报告生成功能
2. **技术升级**:
- PHP版本升级
- 框架版本升级
- 前端框架优化
### 11.3 长期规划(6-12个月)
1. **智能化**:
- 机器学习模型集成
- 个性化推荐
- 智能诊断辅助
2. **平台化**:
- 多租户支持
- 开放API平台
- 第三方集成
---
## 十二、附录
### 12.1 术语表
- **GHD**:Growth Hormone Deficiency,生长激素缺乏
- **IGF-1**:Insulin-like Growth Factor-1,胰岛素样生长因子-1
- **IGFBP-3**:Insulin-like Growth Factor Binding Protein-3,胰岛素样生长因子结合蛋白-3
- **BA**:Bone Age,骨龄
- **CA**:Chronological Age,实际年龄
- **LH**:Luteinizing Hormone,促黄体生成素
### 12.2 参考文档
- ThinkPHP 5.0 官方文档:http://www.kancloud.cn/manual/thinkphp5
- 微信小程序开发文档:https://developers.weixin.qq.com/miniprogram/dev/framework/
- MySQL官方文档:https://dev.mysql.com/doc/
### 12.3 联系方式
- **项目地址**:`/www/wwwroot/code`
- **后台管理地址**:`https://www.ruilaizipj.com/adminghd/login`
- **数据库**:MySQL (`ruilai`)
---
**文档结束**
**创建时间:** 2025年1月28日
**最后更新:** 2025年1月28日
**文档版本:** v1.0