# 玩家管理Bug修复 - 架构设计

## 整体架构图

```mermaid
graph TB
    subgraph Frontend["前端 Vue3"]
        PM[玩家管理页面]
        PD[用户详情抽屉]
        PL[盈亏分析组件]
        AD["活动分析抽屉(已有)"]
    end
    
    subgraph Backend["后端 Go/Gin"]
        UA[users_admin.go]
        UP[users_profit_loss.go]
        AA[activities_admin.go]
    end
    
    PM --> |分页请求| UA
    PD --> |资产列表+搜索| UA
    PL --> |盈亏趋势| UP
    PL --> |盈亏明细| UP
```

---

## Bug 1: 分页修复

### 问题分析
```
player-manage/index.vue
    └── useTable hook
        ├── handleCurrentChange(newCurrent)
        │   └── getData(params)  // params中需要包含正确的page参数
        └── 问题：searchParams可能覆盖新的页码
```

### 修复方案
在 `index.vue` 中，`handleSearch` 函数调用 `getDataDebounced` 时传递了搜索参数，这可能导致分页参数被覆盖。

需要检查的代码路径:
1. `ArtTable` 组件发出 `pagination:current-change` 事件
2. `useTable` 的 `handleCurrentChange` 接收新页码
3. 确保页码正确传递给 API 请求

---

## Bug 2: 活动盈亏仪表盘

### 现有组件
- `ActivityAnalysisDrawer.vue`: 单活动数据分析
- 计算: 总营收、总成本、毛利润、参与人数

### 待确认/完善
- 检查计算逻辑是否正确
- 确保数据展示完整

---

## Bug 3: 用户盈亏明细

### 新增API

#### 后端: `GET /api/admin/users/{user_id}/stats/profit_loss_details`

**请求参数**:
```go
type profitLossDetailsRequest struct {
    Page     int    `form:"page"`
    PageSize int    `form:"page_size"`
    RangeType string `form:"rangeType"`  // today, 7d, 30d, all
}
```

**响应结构**:
```go
type profitLossDetailItem struct {
    OrderID         int64   `json:"order_id"`
    OrderNo         string  `json:"order_no"`
    CreatedAt       string  `json:"created_at"`
    ActualAmount    int64   `json:"actual_amount"`      // 实际支付金额(分)
    RefundAmount    int64   `json:"refund_amount"`      // 退款金额(分)
    NetCost         int64   `json:"net_cost"`           // 净投入(分)
    PrizeValue      int64   `json:"prize_value"`        // 获得奖品价值(分)
    PointsEarned    int64   `json:"points_earned"`      // 获得积分
    PointsValue     int64   `json:"points_value"`       // 积分价值(分)
    CouponUsedValue int64   `json:"coupon_used_value"`  // 使用优惠券价值(分)
    ItemCardUsed    string  `json:"item_card_used"`     // 使用的道具卡名称
    ItemCardValue   int64   `json:"item_card_value"`    // 道具卡价值(分)
    NetProfit       int64   `json:"net_profit"`         // 净盈亏
    ActivityName    string  `json:"activity_name"`      // 活动名称
    PrizeName       string  `json:"prize_name"`         // 奖品名称
    SourceType      int     `json:"source_type"`        // 来源类型
}

type profitLossDetailsResponse struct {
    Page     int                    `json:"page"`
    PageSize int                    `json:"page_size"`
    Total    int64                  `json:"total"`
    List     []profitLossDetailItem `json:"list"`
    Summary  struct {
        TotalCost     int64 `json:"total_cost"`
        TotalValue    int64 `json:"total_value"`
        TotalProfit   int64 `json:"total_profit"`
    } `json:"summary"`
}
```

### 前端组件修改

在 `player-profit-loss-chart.vue` 中增加:
1. "查看明细" 按钮
2. 明细表格（支持分页）
3. 显示字段：时间、订单号、支付金额、获得价值、使用优惠券/道具卡、净盈亏

---

## Bug 4: 资产搜索

### 后端修改

修改 `users_admin.go` 中的 `ListUserInventory`:
```go
type listInventoryRequest struct {
    Page      int    `form:"page"`
    PageSize  int    `form:"page_size"`
    Keyword   string `form:"keyword"`  // 新增：搜索关键词
}
```

查询逻辑增加:
```go
if req.Keyword != "" {
    query = query.Where(db.Products.Name.Like("%" + req.Keyword + "%"))
}
```

### 前端修改

在 `player-detail-drawer.vue` 资产Tab中:
1. 增加搜索输入框
2. 调用API时传递 `keyword` 参数

---

## 数据流图

```mermaid
sequenceDiagram
    participant User as 用户
    participant FE as 前端
    participant BE as 后端
    participant DB as 数据库
    
    Note over User, DB: Bug 3: 盈亏明细查询
    User->>FE: 点击"查看明细"
    FE->>BE: GET /users/:id/stats/profit_loss_details
    BE->>DB: 查询订单+奖品+优惠券+道具卡
    DB-->>BE: 返回数据
    BE-->>FE: JSON响应
    FE-->>User: 展示明细列表
```

---

## 文件变更清单

| 文件 | 变更类型 | 说明 |
|------|---------|------|
| `web/admin/src/views/player-manage/index.vue` | 修改 | 修复分页问题 |
| `web/admin/src/hooks/core/useTable.ts` | 检查 | 确认分页逻辑 |
| `web/admin/src/views/player-manage/modules/player-profit-loss-chart.vue` | 修改 | 添加明细列表 |
| `web/admin/src/views/player-manage/modules/player-detail-drawer.vue` | 修改 | 添加资产搜索 |
| `web/admin/src/api/player-manage.ts` | 修改 | 添加明细API调用 |
| `internal/api/admin/users_profit_loss.go` | 修改 | 添加明细API |
| `internal/api/admin/users_admin.go` | 修改 | 资产列表添加搜索 |
