diff --git a/szjs b/szjs new file mode 160000 index 0000000..4d7032d --- /dev/null +++ b/szjs @@ -0,0 +1 @@ +Subproject commit 4d7032dffbad3bda0dd4e386bf6facbd182443f5 diff --git a/小程序域名配置问题解决方案.md b/小程序域名配置问题解决方案.md new file mode 100644 index 0000000..b7da57e --- /dev/null +++ b/小程序域名配置问题解决方案.md @@ -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日 +**问题状态:** 待解决 - 需要在微信小程序后台添加域名 diff --git a/生长激素缺乏预测模型项目需求文档.md b/生长激素缺乏预测模型项目需求文档.md new file mode 100644 index 0000000..741393c --- /dev/null +++ b/生长激素缺乏预测模型项目需求文档.md @@ -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