# 数据显示问题排查指南

## 问题描述
小程序端登录成功，但管理后台的数据统计和用户管理没有显示相应的数据。

## 快速诊断

### 步骤 1: 运行诊断脚本

```bash
cd backend
node src/scripts/diagnoseData.js
```

这个脚本会检查:
- ✅ 数据库连接状态
- ✅ 数据库名称和配置
- ✅ 数据表是否存在
- ✅ 用户数据统计
- ✅ 预约和提现数据统计
- ✅ 环境配置

### 步骤 2: 检查数据库配置

#### 后端配置 (backend/.env)
```bash
# 检查后端的数据库配置
cat backend/.env | grep DB_
```

确认以下配置:
```env
DB_HOST=localhost
DB_PORT=3306
DB_NAME=overseas_appointment
DB_USER=root
DB_PASSWORD=your_password
```

#### 管理后台配置 (admin/.env)
```bash
# 检查管理后台的 API 地址
cat admin/.env | grep VITE_API
```

确认 API 地址指向正确的后端:
```env
VITE_API_BASE_URL=http://localhost:3000
```

### 步骤 3: 检查后端日志

启动后端并查看日志:
```bash
cd backend
npm run dev
```

观察是否有以下信息:
- ✅ 数据库连接成功
- ✅ 服务器启动在正确的端口
- ⚠️  任何错误或警告信息

### 步骤 4: 测试 API 接口

#### 测试用户列表 API
```bash
# 首先登录管理后台获取 token
curl -X POST http://localhost:3000/api/v1/admin/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "username": "admin",
    "password": "admin123"
  }'

# 使用返回的 token 查询用户列表
curl -X GET "http://localhost:3000/api/v1/admin/users?page=1&limit=20" \
  -H "Authorization: Bearer YOUR_TOKEN_HERE"
```

#### 测试统计 API
```bash
curl -X GET "http://localhost:3000/api/v1/admin/statistics/dashboard" \
  -H "Authorization: Bearer YOUR_TOKEN_HERE"
```

### 步骤 5: 检查浏览器控制台

1. 打开管理后台 (http://localhost:5173)
2. 按 F12 打开开发者工具
3. 切换到 "Console" 标签
4. 切换到 "Network" 标签
5. 刷新页面，查看:
   - ❌ 是否有 API 请求失败 (红色)
   - ⚠️  是否有 CORS 错误
   - ⚠️  是否有 401/403 认证错误
   - ⚠️  是否有 500 服务器错误

## 常见问题和解决方案

### 问题 1: 数据库配置不一致

**症状**: 诊断脚本显示有用户数据，但管理后台看不到

**原因**: 小程序和管理后台连接到不同的数据库

**解决方案**:
1. 检查 `backend/.env` 文件
2. 确认 `DB_NAME` 是否正确
3. 确认所有服务使用相同的数据库配置

### 问题 2: 管理后台 API 地址错误

**症状**: 浏览器控制台显示网络错误或 404

**原因**: 管理后台的 API 基础地址配置错误

**解决方案**:
1. 检查 `admin/.env` 或 `admin/.env.local`
2. 确认 `VITE_API_BASE_URL` 指向正确的后端地址
3. 重启管理后台开发服务器

```bash
cd admin
npm run dev
```

### 问题 3: CORS 跨域问题

**症状**: 浏览器控制台显示 CORS 错误

**原因**: 后端没有正确配置 CORS

**解决方案**:
检查 `backend/src/app.js` 中的 CORS 配置:
```javascript
app.use(cors({
  origin: ['http://localhost:5173', 'http://localhost:5174'],
  credentials: true
}));
```

### 问题 4: 认证 Token 问题

**症状**: API 返回 401 Unauthorized

**原因**: Token 过期或无效

**解决方案**:
1. 重新登录管理后台
2. 检查浏览器 localStorage 中的 token
3. 确认 token 格式正确

### 问题 5: 数据库表不存在

**症状**: 诊断脚本显示表不存在或数量不对

**原因**: 数据库迁移未执行

**解决方案**:
```bash
cd backend
npm run db:init
```

### 问题 6: 小程序使用测试数据

**症状**: 诊断脚本显示没有用户数据

**原因**: 小程序在开发模式下使用模拟的 openId

**解决方案**:
1. 检查小程序登录时传递的 code
2. 查看后端日志确认用户创建
3. 确认 `authService.js` 中的逻辑正确执行

## 数据验证清单

使用以下 SQL 直接查询数据库:

```sql
-- 连接到数据库
mysql -u root -p overseas_appointment

-- 检查用户表
SELECT COUNT(*) as total_users FROM user;
SELECT * FROM user ORDER BY created_at DESC LIMIT 5;

-- 检查预约表
SELECT COUNT(*) as total_appointments FROM appointment;
SELECT status, COUNT(*) as count FROM appointment GROUP BY status;

-- 检查提现表
SELECT COUNT(*) as total_withdrawals FROM withdrawal;
SELECT status, COUNT(*) as count FROM withdrawal GROUP BY status;
```

## 调试技巧

### 1. 启用详细日志

在 `backend/.env` 中添加:
```env
LOG_LEVEL=debug
NODE_ENV=development
```

### 2. 使用 Postman 测试 API

导入 Swagger 文档到 Postman:
1. 访问 http://localhost:3000/api-docs.json
2. 在 Postman 中导入 JSON
3. 逐个测试 API 接口

### 3. 检查数据库连接池

在 `backend/src/config/database.js` 中添加日志:
```javascript
const sequelize = new Sequelize(/* ... */, {
  logging: console.log, // 启用 SQL 日志
  // ...
});
```

### 4. 监控网络请求

在管理后台的 `admin/src/utils/api.js` 中添加请求拦截器日志:
```javascript
api.interceptors.request.use(config => {
  console.log('API Request:', config.method.toUpperCase(), config.url);
  return config;
});

api.interceptors.response.use(
  response => {
    console.log('API Response:', response.status, response.data);
    return response;
  },
  error => {
    console.error('API Error:', error.response?.status, error.response?.data);
    return Promise.reject(error);
  }
);
```

## 联系支持

如果以上步骤都无法解决问题，请提供以下信息:

1. 诊断脚本的完整输出
2. 后端启动日志
3. 浏览器控制台的错误信息
4. Network 标签中失败的 API 请求详情
5. 数据库查询结果

## 预防措施

为避免将来出现类似问题:

1. ✅ 使用统一的环境配置管理
2. ✅ 在 `.env.example` 中记录所有必需的配置项
3. ✅ 添加健康检查端点
4. ✅ 实施完整的错误日志记录
5. ✅ 定期备份数据库
6. ✅ 使用 Docker 统一开发环境
