# 任务对齐：统一积分与元比例 (Standardize Points and Yuan Ratio)

## 1. 项目上下文分析
- **项目结构**: 
    - 后端: `bindbox_game` (Go)
    - 管理后台: `bindbox_game/web/admin` (Vue 3)
    - 小程序: `bindbox-mini` (UniApp / Vue)
- **核心问题**: 
    - 当前代码逻辑隐含 "1积分 = 1分钱" (100积分=1元)，前端通过 `/100` 强行展示为 "1.00"，导致逻辑割裂。
    - 用户期望标准: **1元 = 1积分**。
    - 后端配置缺失，且计算公式需要适配 "元" 为单位。

## 2. 需求确认
- **目标**: 
    1. **统一比例**: 全局统一为 **1 元 = 1 积分** (即 1 积分价值 100 分钱)。
    2. **配置化**: 后台可配置 "积分/元 兑换比例" (Rate)，当前固定为 1。
    3. **整改范围**: 修正后端转换公式，修正前端展示逻辑，添加后台配置界面。
    4. **业务场景**: 暂时不涉及"消费送积分" (即订单完成后自动按比例赠送)，主要关注积分价值本身（如充值、抵扣、退款等场景的换算）。

## 3. 现状分析 (As-Is)
- **后端 (`bindbox_game`)**:
    - `CentsToPoints`: 依赖 `points_exchange_per_cent` (分换积分比例)，默认为 1。即 1 分钱 = 1 积分单位。
    - `RefundPointsAmount`: 存在硬编码 `/ 100`，逻辑存疑。
- **小程序 (`bindbox-mini`)**:
    - `formatPoints`: `value / 100`。
    - 如果后端给 100 积分单位，前端展示为 "1.0"。
    - 含义模糊：是“1积分”还是“1.0元价值”？
- **后台 (`web/admin`)**:
    - 缺少积分比例配置界面。

## 4. 关键决策点 (Resolved)
1. **积分定义**: 
    - 确认采用 **1 积分 = 1 元** 的价值锚点。
    - 数据库存储: 存 `1` 代表 1 积分 (即 1 元)。
    - *变更*: 现在的 `100` (分) 对应 1 元，未来 `1` (积分) 对应 1 元。需要明确是否存在历史数据需要迁移（或者是新项目/可重置）。**假设目前无存量包袱或接受重置/迁移，或者我们调整代码适配现有数值**。
    - *风险提示*: 如果仅仅改代码不改数据，原来的 100 积分 (1元) 瞬间变成 100 积分 (100元)。**必须确认是否需要数据清洗脚本**。
    
2. **兑换比例配置**:
    - 配置项: `points_exchange_rate` (1 元对应多少积分)。
    - 默认值: 1。
    - 公式:
        - 元转积分 (Amount -> Points): `points = amount_yuan * rate` => `points = (cents / 100) * rate`
        - 积分转元 (Points -> Amount): `cents = (points / rate) * 100`

## 5. 实施方案 (Architecture)
### 5.1 数据库与配置
- **配置表 (`sys_configs`)**:
    - Key: `points_exchange_rate`
    - Value: `1` (Default)
    - Description: "积分/元 兑换比例(多少积分=1元)"。

### 5.2 后端改造 (`bindbox_game`)
- **`internal/pkg/points/convert.go`**:
    - `CentsToPoints(cents, rate)`: 
        - Old: `cents * rate` (Assumed rate per cent)
        - New: `(cents * rate) / 100` (Rate per Yuan)
    - `PointsToCents(points, rate)`:
        - Old: `points / rate`
        - New: `(points * 100) / rate`
    - `RefundPointsAmount`: 适配新公式。
- **Service Layer**:
    - 确保读取新的配置 Key。
    - 检查所有手动计算积分的地方，全部收敛到 `convert` 包。

### 5.3 后台改造 (`web/admin`)
- **界面**: 在 `SystemConfigs` (系统配置) -> 新增 "积分配置" 分组。
- **功能**: 编辑 `points_exchange_rate`。

### 5.4 小程序/前端改造 (`bindbox-mini`)
- **展示逻辑**:
    - 移除 `formatPoints` 中的 `/ 100`。
    - 直接展示后端返回的整数积分。
    - 检查 "积分抵扣" 等页面，确保传给后端的数值正确。

## 6. 执行计划 (Task Split)
1. **Design**: 确认方案无误 (当前步骤)。
2. **Backend**: 
    - 修改 Convert 算法。
    - 确保 Config 读取逻辑正确。
    - (Optional) 数据迁移脚本/重置脚本 (如果已有数据)。
3. **Frontend (Admin)**: 添加配置界面。
4. **Frontend (App)**: 修正展示逻辑。
5. **Verify**: 验证 1 元订单是否对应 1 积分（模拟），或者充值/手动增加 1 积分是否显示为 1。
