diff --git a/app.json b/app.json
index 467dc1a..19d9400 100644
--- a/app.json
+++ b/app.json
@@ -6,6 +6,7 @@
"pages/my/my",
"pages/news/news-details",
"pages/guanyu/guanyu",
+ "pages/ghdCalculator/ghdCalculator",
"pages/webpage/webpage",
"pages/tool/tool",
"pages/igfrefer/igfrefer",
diff --git a/pages/ghdCalculator/ghdCalculator.js b/pages/ghdCalculator/ghdCalculator.js
new file mode 100644
index 0000000..e4057a5
--- /dev/null
+++ b/pages/ghdCalculator/ghdCalculator.js
@@ -0,0 +1,243 @@
+const app = getApp();
+
+Page({
+ data: {
+ // 基础数据
+ ba: '', // 骨龄
+ ca: '', // 实际年龄
+ igf1: '', // IGF-1值
+ igfbp3: '', // IGFBP-3值
+ // 计算结果
+ showResult: false,
+ probability: null,
+ calculationDetails: null,
+ // 参考范围
+ referenceRanges: {
+ igf1: {
+ male: [
+ { ageRange: '0-1', min: 55, max: 327 },
+ { ageRange: '1-3', min: 51, max: 303 },
+ { ageRange: '3-5', min: 49, max: 289 },
+ { ageRange: '5-7', min: 52, max: 297 },
+ { ageRange: '7-9', min: 57, max: 316 },
+ { ageRange: '9-11', min: 88, max: 474 },
+ { ageRange: '11-13', min: 110, max: 565 },
+ { ageRange: '13-15', min: 202, max: 957 },
+ { ageRange: '15-17', min: 193, max: 731 }
+ ],
+ female: [
+ { ageRange: '0-1', min: 55, max: 327 },
+ { ageRange: '1-3', min: 51, max: 303 },
+ { ageRange: '3-5', min: 49, max: 289 },
+ { ageRange: '5-7', min: 52, max: 297 },
+ { ageRange: '7-9', min: 57, max: 316 },
+ { ageRange: '9-11', min: 88, max: 474 },
+ { ageRange: '11-13', min: 183, max: 850 },
+ { ageRange: '13-15', min: 261, max: 1096 },
+ { ageRange: '15-17', min: 238, max: 996 }
+ ]
+ },
+ igfbp3: {
+ male: [
+ { ageRange: '0-1', min: 0.7, max: 3.6 },
+ { ageRange: '1-3', min: 0.8, max: 3.9 },
+ { ageRange: '3-5', min: 0.9, max: 4.3 },
+ { ageRange: '5-7', min: 1.0, max: 4.7 },
+ { ageRange: '7-9', min: 1.1, max: 5.2 },
+ { ageRange: '9-11', min: 1.3, max: 5.6 },
+ { ageRange: '11-13', min: 1.4, max: 6.1 },
+ { ageRange: '13-15', min: 1.6, max: 6.8 },
+ { ageRange: '15-17', min: 1.8, max: 7.1 }
+ ],
+ female: [
+ { ageRange: '0-1', min: 0.7, max: 3.6 },
+ { ageRange: '1-3', min: 0.8, max: 3.9 },
+ { ageRange: '3-5', min: 0.9, max: 4.3 },
+ { ageRange: '5-7', min: 1.0, max: 4.7 },
+ { ageRange: '7-9', min: 1.1, max: 5.2 },
+ { ageRange: '9-11', min: 1.3, max: 5.6 },
+ { ageRange: '11-13', min: 1.5, max: 6.3 },
+ { ageRange: '13-15', min: 1.7, max: 7.3 },
+ { ageRange: '15-17', min: 1.9, max: 7.9 }
+ ]
+ }
+ }
+ },
+
+ // 输入处理
+ inputBA(e) {
+ // 只允许输入数字和小数点
+ const value = e.detail.value.replace(/[^\d.]/g, '');
+ // 确保只有一个小数点
+ const formattedValue = value.replace(/\.+/g, '.');
+ this.setData({ ba: formattedValue });
+ },
+
+ inputCA(e) {
+ const value = e.detail.value.replace(/[^\d.]/g, '');
+ const formattedValue = value.replace(/\.+/g, '.');
+ this.setData({ ca: formattedValue });
+ },
+
+ inputIGF1(e) {
+ const value = e.detail.value.replace(/[^\d.]/g, '');
+ const formattedValue = value.replace(/\.+/g, '.');
+ this.setData({ igf1: formattedValue });
+ },
+
+ inputIGFBP3(e) {
+ const value = e.detail.value.replace(/[^\d.]/g, '');
+ const formattedValue = value.replace(/\.+/g, '.');
+ this.setData({ igfbp3: formattedValue });
+ },
+
+ // 计算GHD概率
+ calculate() {
+ const { ba, ca, igf1, igfbp3 } = this.data;
+
+ // 输入验证
+ if (!this.validateInput()) return;
+
+ try {
+ // 将字符串转换为数字
+ const baNum = parseFloat(ba);
+ const caNum = parseFloat(ca);
+ const igf1Num = parseFloat(igf1);
+ const igfbp3Num = parseFloat(igfbp3);
+
+ // 计算 BA-CA
+ const baCaDiff = baNum - caNum;
+
+ // 计算 Y = LN(P/1-P)
+ const y = this.calculateY(baCaDiff, igf1Num, igfbp3Num);
+
+ // 计算概率 P
+ const p = this.calculateProbability(y);
+
+ // 计算各因素的贡献
+ const contributions = this.calculateContributions(baCaDiff, igf1Num, igfbp3Num);
+
+ // 显示结果
+ this.setData({
+ showResult: true,
+ probability: p,
+ calculationDetails: {
+ steps: [
+ `步骤1:设置方程右边为 Y`,
+ `Y = 3.726 - 0.876×(BA-CA) - 0.058×(IGF-1) + 0.229×(IGFBP-3)`,
+ `Y = 3.726 - 0.876×(${baNum.toFixed(2)} - ${caNum.toFixed(2)}) - 0.058×${igf1Num.toFixed(2)} + 0.229×${igfbp3Num.toFixed(2)}`,
+ `Y = 3.726 - 0.876×(${baCaDiff.toFixed(2)}) - 0.058×${igf1Num.toFixed(2)} + 0.229×${igfbp3Num.toFixed(2)}`,
+ `Y = 3.726 - ${(0.876 * baCaDiff).toFixed(4)} - ${(0.058 * igf1Num).toFixed(4)} + ${(0.229 * igfbp3Num).toFixed(4)}`,
+ `Y = ${y.toFixed(4)}`,
+ ``,
+ `步骤2:解指数方程`,
+ `P/(1-P) = e^Y`,
+ `P/(1-P) = e^${y.toFixed(4)}`,
+ `P/(1-P) = ${Math.exp(y).toFixed(4)}`,
+ ``,
+ `步骤3:求概率 P`,
+ `P = e^Y / (1 + e^Y)`,
+ `P = ${p.toFixed(4)}`,
+ ``,
+ `GHD预测概率:${(p * 100).toFixed(2)}%`
+ ].join('\n'),
+ interpretation: this.getInterpretation(p)
+ }
+ });
+
+ } catch (error) {
+ wx.showToast({
+ title: error.message || '计算失败',
+ icon: 'none'
+ });
+ }
+ },
+
+ // 输入验证
+ validateInput() {
+ const { ba, ca, igf1, igfbp3 } = this.data;
+
+ if (!ba || !ca || !igf1 || !igfbp3) {
+ wx.showToast({
+ title: '请填写完整信息',
+ icon: 'none'
+ });
+ return false;
+ }
+
+ // 验证输入是否为有效数字
+ const baNum = parseFloat(ba);
+ const caNum = parseFloat(ca);
+ const igf1Num = parseFloat(igf1);
+ const igfbp3Num = parseFloat(igfbp3);
+
+ if (isNaN(baNum) || isNaN(caNum) || isNaN(igf1Num) || isNaN(igfbp3Num)) {
+ wx.showToast({
+ title: '请输入有效数字',
+ icon: 'none'
+ });
+ return false;
+ }
+
+ // 验证数值范围
+ if (baNum <= 0 || caNum <= 0) {
+ wx.showToast({
+ title: '年龄必须大于0',
+ icon: 'none'
+ });
+ return false;
+ }
+
+ return true;
+ },
+
+ // 计算Y值
+ calculateY(baCaDiff, igf1, igfbp3) {
+ return 3.726 - 0.876 * baCaDiff - 0.058 * igf1 + 0.229 * igfbp3;
+ },
+
+ // 计算概率
+ calculateProbability(y) {
+ const expY = Math.exp(y);
+ return expY / (1 + expY);
+ },
+
+ // 计算各因素的贡献
+ calculateContributions(baCaDiff, igf1, igfbp3) {
+ // Implementation of calculateContributions method
+ },
+
+ // 获取解释文本
+ getInterpretation(p) {
+ const percentage = (p * 100).toFixed(2);
+ let interpretation = `预测结果显示该患者患有GHD的概率为${percentage}%\n\n`;
+
+ if (p >= 0.8) {
+ interpretation += '预测结果提示GHD可能性较大,建议进一步进行相关检查。';
+ } else if (p >= 0.5) {
+ interpretation += '预测结果提示存在GHD可能,建议进行相关检查。';
+ } else {
+ interpretation += '预测结果提示GHD可能性较小,但仍需结合临床表现进行综合判断。';
+ }
+
+ return interpretation;
+ },
+
+ // 重置表单
+ reset() {
+ this.setData({
+ ba: '',
+ ca: '',
+ igf1: '',
+ igfbp3: '',
+ showResult: false,
+ probability: null,
+ calculationDetails: null
+ });
+ },
+
+ // 返回上一页
+ onClickLeft() {
+ wx.navigateBack();
+ }
+});
\ No newline at end of file
diff --git a/pages/ghdCalculator/ghdCalculator.json b/pages/ghdCalculator/ghdCalculator.json
new file mode 100644
index 0000000..f1ebea3
--- /dev/null
+++ b/pages/ghdCalculator/ghdCalculator.json
@@ -0,0 +1,11 @@
+{
+ "usingComponents": {
+ "van-nav-bar": "/miniprogram/miniprogram_npm/@vant/weapp/nav-bar/index",
+ "van-overlay": "/miniprogram/miniprogram_npm/@vant/weapp/overlay/index",
+ "van-field": "/miniprogram/miniprogram_npm/@vant/weapp/field/index",
+ "van-button": "/miniprogram/miniprogram_npm/@vant/weapp/button/index",
+ "van-toast": "/miniprogram/miniprogram_npm/@vant/weapp/toast/index"
+ },
+ "navigationBarTitleText": "GHD预测计算",
+ "navigationStyle": "custom"
+}
diff --git a/pages/ghdCalculator/ghdCalculator.wxml b/pages/ghdCalculator/ghdCalculator.wxml
new file mode 100644
index 0000000..3cc4da3
--- /dev/null
+++ b/pages/ghdCalculator/ghdCalculator.wxml
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+ 骨龄(岁)
+
+
+
+
+ 实际年龄(岁)
+
+
+
+
+ IGF-1值
+
+
+
+
+ IGFBP-3值
+
+
+
+
+ 计算
+ 重置
+
+
+
+
+
+ 计算结果
+
+
+
+ 计算过程:
+
+ {{calculationDetails.steps}}
+
+
+
+
+
+ {{calculationDetails.interpretation}}
+
+
+
+ 注:本计算结果仅供参考,具体诊断请咨询专业医生。预测模型基于二元Logistic回归分析。
+
+
+
\ No newline at end of file
diff --git a/pages/ghdCalculator/ghdCalculator.wxss b/pages/ghdCalculator/ghdCalculator.wxss
new file mode 100644
index 0000000..dcf92ce
--- /dev/null
+++ b/pages/ghdCalculator/ghdCalculator.wxss
@@ -0,0 +1,175 @@
+/* pages/ghdCalculator/ghdCalculator.wxss *//* 页面容器 */
+.container {
+ padding: 40rpx;
+ background: #f5f5f5;
+ min-height: 100vh;
+}
+
+/* 输入表单 */
+.form-container {
+ width: 100%;
+ background: #fff;
+ border-radius: 24rpx;
+ padding: 0rpx;
+ background: #f5f5f5;
+ box-shadow: 0 4rpx 12rpx rgba(0,0,0,0.05);
+}
+
+.form-group {
+ margin-bottom: 40rpx;
+}
+
+.form-label {
+ font-size: 28rpx;
+ color: #333;
+ margin-bottom: 16rpx;
+ display: inline-block;
+ font-weight: bold;
+}
+
+.form-input {
+ width: 90%;
+ height: 80rpx;
+ background: #ffffff;
+ border-radius: 16rpx;
+ padding: 0 24rpx;
+ font-size: 28rpx;
+}
+
+/* 性别选择 */
+.gender-group {
+ display: flex;
+ margin: 20rpx 0;
+}
+
+.gender-item {
+ flex: 1;
+ text-align: center;
+ padding: 20rpx;
+ border: 2rpx solid #eee;
+ border-radius: 16rpx;
+ margin: 0 10rpx;
+}
+
+.gender-item.active {
+ border-color: #27C2A7;
+ background: #e6f7f4;
+}
+
+/* 按钮样式 */
+.button-group {
+ margin-top: 40rpx;
+}
+
+.button {
+ height: 80rpx;
+ line-height: 80rpx;
+ text-align: center;
+ border-radius: 16rpx;
+ font-size: 28rpx;
+ color: #fff;
+ background: #27C2A7;
+}
+
+.button.secondary {
+ background: #fff;
+ border: 2rpx solid #27C2A7;
+ color: #27C2A7;
+ margin-top: 20rpx;
+}
+
+/* 结果展示 */
+.result-container {
+ margin-top: 40rpx;
+ background: #fff;
+ border-radius: 24rpx;
+ padding: 40rpx;
+}
+
+.result-title {
+ font-size: 32rpx;
+ font-weight: bold;
+ color: #333;
+ text-align: center;
+ margin-bottom: 40rpx;
+}
+
+.result-item {
+ display: flex;
+ justify-content: space-between;
+ padding: 20rpx 0;
+ border-bottom: 2rpx solid #eee;
+}
+
+.result-label {
+ font-size: 28rpx;
+ color: #666;
+}
+
+.result-value {
+ font-size: 28rpx;
+ color: #333;
+ font-weight: bold;
+}
+
+.result-value.green {
+ color: #27C2A7;
+}
+
+.result-value.red {
+ color: #ff4c00;
+}
+
+/* 图表容器 */
+.chart-container {
+ margin-top: 40rpx;
+ height: 400rpx;
+}
+
+/* 提示信息 */
+.tips {
+ font-size: 24rpx;
+ color: #999;
+ margin-top: 20rpx;
+ line-height: 1.6;
+}
+
+.calculation-process {
+ margin: 20rpx 0;
+ padding: 20rpx;
+ background-color: #f8f8f8;
+ border-radius: 10rpx;
+}
+
+.process-title {
+ font-size: 28rpx;
+ color: #333;
+ margin-bottom: 10rpx;
+}
+
+.process-steps {
+ display: flex;
+ flex-direction: column;
+ font-family: monospace;
+ font-size: 28rpx;
+ color: #666;
+}
+
+.process-steps text {
+ margin: 5rpx 0;
+ white-space: pre;
+}
+
+.result-interpretation {
+ margin: 20rpx 0;
+ padding: 20rpx;
+ background-color: #fff;
+ border-radius: 10rpx;
+ border: 1px solid #eee;
+}
+
+.interpretation-text {
+ font-size: 28rpx;
+ color: #333;
+ white-space: pre-line;
+}
diff --git a/pages/home/home.js b/pages/home/home.js
index 78b8ba8..88568ab 100644
--- a/pages/home/home.js
+++ b/pages/home/home.js
@@ -61,10 +61,15 @@ Page({
// 性发育图表
go_peizhen() {
- if (this.checkLoginAndNavigate()) {
- wx.showToast({
- title: '功能正在开发中',
- icon: 'none'
+ // if (this.checkLoginAndNavigate()) {
+ // wx.showToast({
+ // title: '功能正在开发中',
+ // icon: 'none'
+ // })
+ // }
+ if (this.checkLoginAndNavigate()) {
+ wx.navigateTo({
+ url: '/pages/ghdCalculator/ghdCalculator'
})
}
},
diff --git a/pages/home/home.wxml b/pages/home/home.wxml
index 33cdd36..d5ab755 100644
--- a/pages/home/home.wxml
+++ b/pages/home/home.wxml
@@ -16,12 +16,12 @@
{{"生长发育相关参考计算和图表"}}
-
+