# 合同详情页面无限递归问题修复

## 问题描述

用户点击合同详情按钮后，页面显示空白，控制台报错：
```
RangeError: Maximum call stack size exceeded
    at li.loadContractDetail (detail.js? [sm]:127)
    at li.loadContractDetail (detail.js? [sm]:127)
    at li.loadContractDetail (detail.js? [sm]:127)
    ...
```

## 问题分析

### 根本原因
在 `detail.js` 文件中，`loadContractDetail` 方法出现了无限递归调用：

```javascript
// 重试加载
loadContractDetail() {
  this.loadContractDetail();  // ❌ 调用自己，造成无限递归
},
```

### 错误说明
- 方法名冲突：`loadContractDetail` 既作为数据加载方法，又作为重试方法
- 无限递归：重试方法调用数据加载方法，但方法名相同，导致无限循环
- 栈溢出：递归调用超过最大调用栈限制，导致程序崩溃

## 修复方案

### 1. 重命名重试方法
将重试方法重命名为 `retryLoadContractDetail`：

```javascript
// 修复前
loadContractDetail() {
  this.loadContractDetail();  // ❌ 无限递归
}

// 修复后
retryLoadContractDetail() {
  this.loadContractDetail();  // ✅ 正确调用数据加载方法
}
```

### 2. 更新WXML绑定
更新重试按钮的事件绑定：

```xml
<!-- 修复前 -->
<button class="retry-btn" bindtap="loadContractDetail">重试</button>

<!-- 修复后 -->
<button class="retry-btn" bindtap="retryLoadContractDetail">重试</button>
```

## 修复的文件

### 1. bank_mini_program/pages/business/loan-contracts/detail.js
- 将 `loadContractDetail()` 重命名为 `retryLoadContractDetail()`
- 保持数据加载方法 `loadContractDetail()` 不变

### 2. bank_mini_program/pages/business/loan-contracts/detail.wxml
- 更新重试按钮的 `bindtap` 绑定
- 从 `loadContractDetail` 改为 `retryLoadContractDetail`

## 方法职责说明

### loadContractDetail()
- **职责**：实际的数据加载逻辑
- **功能**：调用API获取合同详情，处理响应数据
- **调用时机**：页面加载时、重试时

### retryLoadContractDetail()
- **职责**：重试加载的入口方法
- **功能**：调用 `loadContractDetail()` 重新加载数据
- **调用时机**：用户点击重试按钮时

## 代码结构

```javascript
Page({
  // 页面加载时调用
  onLoad(options) {
    this.loadContractDetail();
  },

  // 实际的数据加载方法
  async loadContractDetail() {
    // API调用和数据处理逻辑
  },

  // 重试加载方法
  retryLoadContractDetail() {
    this.loadContractDetail();  // 调用数据加载方法
  }
});
```

## 测试验证

### 正常加载测试
1. 点击合同详情按钮
2. 页面应正常显示合同信息
3. 控制台无递归错误

### 错误重试测试
1. 模拟网络错误
2. 页面显示错误状态
3. 点击重试按钮
4. 重新加载数据

## 预防措施

### 1. 方法命名规范
- 数据加载方法：`loadXxx()`
- 重试方法：`retryLoadXxx()`
- 避免方法名冲突

### 2. 代码审查要点
- 检查方法调用是否正确
- 避免方法调用自身
- 确保递归有终止条件

### 3. 调试技巧
- 使用 `console.log` 跟踪方法调用
- 检查调用栈信息
- 注意无限循环的警告

## 更新日志

- **v1.1.2** (2024-01-15)
  - 修复合同详情页面无限递归问题
  - 重命名重试方法避免冲突
  - 更新WXML事件绑定
  - 确保页面正常显示
