## 1. 套餐系列 DTO 修复（Operator 字段）

- [x] 1.1 `internal/model/dto/package_series_dto.go`：`OneTimeCommissionTierDTO` 新增 `Operator string` 字段，tag 为 `json:"operator,omitempty" validate:"omitempty,oneof=> >= < <=" description:"阈值比较运算符（>、>=、<、<=），空值时计算引擎默认 >="`
- [x] 1.2 `internal/service/package_series/service.go`：`dtoToModelConfig()` 中 `OneTimeCommissionTier` 赋值新增 `Operator: tier.Operator`
- [x] 1.3 `internal/service/package_series/service.go`：`modelToDTO()` 中 `OneTimeCommissionTierDTO` 赋值新增 `Operator: tier.Operator`
- [x] 1.4 运行 `go build ./...` 确认无编译错误

## 2. 授权分配 DTO 修复（Dimension / StatScope 字段）

- [x] 2.1 `internal/model/dto/shop_series_grant_dto.go`：`GrantCommissionTierItem` 新增两个字段：
  - `Dimension string`，tag 为 `json:"dimension,omitempty" description:"统计维度（sales_count:销售量, sales_amount:销售额），来自 PackageSeries 全局配置，响应中只读"`
  - `StatScope string`，tag 为 `json:"stat_scope,omitempty" description:"统计范围（self:仅自己, self_and_sub:自己+下级），来自 PackageSeries 全局配置，响应中只读"`
- [x] 2.2 `internal/service/shop_series_grant/service.go`：`buildGrantResponse()` 梯度模式合并分支，在构造 `GrantCommissionTierItem` 时补充 `Dimension: globalTier.Dimension` 和 `StatScope: globalTier.StatScope`
- [x] 2.3 运行 `go build ./...` 确认无编译错误

## 3. 验证

- [x] 3.1 db-validation：创建含 `operator`/`dimension`/`stat_scope` 的梯度套餐系列，查询详情确认响应中 tiers 包含完整字段
- [x] 3.2 db-validation：创建梯度模式系列授权，调用 `GET /shop-series-grants/:id`，确认 `commission_tiers` 中每档位包含 `operator`、`dimension`、`stat_scope`、`threshold`、`amount`
- [x] 3.3 db-validation：调用 `POST /shop-series-grants`（Create）和 `PUT /shop-series-grants/:id`（Update），确认响应中同样携带 `dimension`/`stat_scope`
- [x] 3.4 db-validation：不传 `operator` 的梯度档位，确认响应中 `operator` 字段缺失（omitempty 生效），不影响佣金计算逻辑

## 4. 强充状态有效展示修复

- [x] 4.1 `internal/model/dto/shop_series_grant_dto.go`：`ShopSeriesGrantListItem` 新增两个字段：
  - `ForceRechargeLocked bool`，tag 为 `json:"force_recharge_locked" description:"强充是否被套餐系列锁定（true 时代理不可修改）"`
  - `ForceRechargeAmount int64`，tag 为 `json:"force_recharge_amount" description:"强充金额（分）"`
- [x] 4.2 `internal/service/shop_series_grant/service.go`：列表构建（for 循环内的 `if sr, ok := seriesMap[a.SeriesID]` 分支）修正强充状态字段：
  ```go
  forceRechargeLocked := config.TriggerType == model.OneTimeCommissionTriggerFirstRecharge || config.EnableForceRecharge
  item.ForceRechargeLocked = forceRechargeLocked
  if forceRechargeLocked {
      item.ForceRechargeEnabled = true
      item.ForceRechargeAmount = config.ForceAmount
  } else {
      item.ForceRechargeEnabled = a.EnableForceRecharge
      item.ForceRechargeAmount = a.ForceRechargeAmount
  }
  ```
- [x] 4.3 `internal/service/shop_series_grant/service.go`：`buildGrantResponse()` 内强充状态计算修正（当前约 L132-L135）：
  ```go
  if forceRechargeLocked {
      resp.ForceRechargeEnabled = true
      resp.ForceRechargeAmount = config.ForceAmount
  } else {
      resp.ForceRechargeEnabled = allocation.EnableForceRecharge
      resp.ForceRechargeAmount = allocation.ForceRechargeAmount
  }
  ```
- [x] 4.4 运行 `go build ./...` 确认无编译错误

## 5. 强充 Bug 验证

- [x] 5.1 db-validation：查询套餐系列中 `enable_force_recharge=true` 的系列（如 series_id=2117，2118）对应的授权分配列表，确认 `force_recharge_locked=true`、`force_recharge_enabled=true`、`force_recharge_amount=系列配置值`
- [x] 5.2 db-validation：调用 `GET /api/admin/shop-series-grants/:id`（锁定系列的分配记录），确认详情响应中 `force_recharge_locked=true`、`force_recharge_enabled=true`
