414 lines
12 KiB
Markdown
414 lines
12 KiB
Markdown
# 套餐管理系统 - 移动端H5
|
|
|
|
> **小米米家风格** - 套餐使用记录管理系统
|
|
|
|
---
|
|
|
|
## ✨ 功能说明
|
|
|
|
这是一个**套餐使用记录管理系统**,展示和管理用户的套餐使用情况。
|
|
|
|
### 核心功能
|
|
|
|
- ✅ **套餐统计** - 总数、生效中、待生效、已过期
|
|
- ✅ **套餐列表** - 筛选、搜索、分类展示
|
|
- ✅ **套餐详情** - 流量使用、时间信息、操作按钮
|
|
- ✅ **状态管理** - 5种状态标识和颜色区分
|
|
- ✅ **流量可视化** - 进度条显示虚流量/真流量
|
|
|
|
---
|
|
|
|
## 🚀 快速启动
|
|
|
|
```bash
|
|
# 启动开发服务器
|
|
pnpm dev:h5
|
|
|
|
# 访问地址
|
|
http://localhost:5173/
|
|
```
|
|
|
|
---
|
|
|
|
## 📋 数据字段说明
|
|
|
|
### 套餐状态 (status)
|
|
|
|
| 值 | 状态名称 | 颜色 | 说明 |
|
|
|----|---------|------|------|
|
|
| 0 | 待生效 | 橙色 | 已购买但未激活 |
|
|
| 1 | 生效中 | 绿色 | 正常使用中 |
|
|
| 2 | 已用完 | 灰色 | 流量已耗尽 |
|
|
| 3 | 已过期 | 红色 | 超过有效期 |
|
|
| 4 | 已失效 | 灰色 | 主动失效 |
|
|
|
|
### 套餐类型 (package_type)
|
|
|
|
- **formal** - 正式套餐 (主套餐)
|
|
- **addon** - 加油包 (附加套餐,有master_usage_id)
|
|
|
|
### 使用类型 (usage_type)
|
|
|
|
- **single_card** - 单卡使用
|
|
- **device** - 设备使用
|
|
|
|
### 流量相关
|
|
|
|
- **data_limit_mb** - 真流量总量(MB)
|
|
- **data_usage_mb** - 已用真流量(MB)
|
|
- **virtual_limit_mb** - 虚流量总量(MB)
|
|
- **virtual_used_mb** - 已用虚流量(MB)
|
|
- **virtual_remain_mb** - 剩余虚流量(MB)
|
|
- **virtual_ratio** - 虚流量比例 (真实/虚拟)
|
|
|
|
**示例**: 如果 virtual_ratio = 0.5
|
|
- 真流量 1GB = 虚流量 2GB
|
|
- 显示比例: 1:2
|
|
|
|
---
|
|
|
|
## 🎨 页面结构
|
|
|
|
### 1. 数据概览页 (Dashboard)
|
|
|
|
```
|
|
┌─────────────────────────────────┐
|
|
│ GT Agent [代理端][企业端] │
|
|
│ 🔍 [搜索套餐名称...] │
|
|
├─────────────────────────────────┤
|
|
│ │
|
|
│ ┌──────┬──────┐ │ ← 统计卡片
|
|
│ │套餐 │生效中│ │
|
|
│ │总数 │ │ │
|
|
│ │ 4 │ 2 │ │
|
|
│ └──────┴──────┘ │
|
|
│ ┌──────┬──────┐ │
|
|
│ │待生效│已过期│ │
|
|
│ │ 1 │ 1 │ │
|
|
│ └──────┴──────┘ │
|
|
│ │
|
|
│ ┌─────────────────────┐ │ ← 快捷操作
|
|
│ │ 套餐 添加 统计 记录│ │
|
|
│ └─────────────────────┘ │
|
|
│ │
|
|
│ ┌─────────────────────┐ │ ← 最近套餐
|
|
│ │ 最近套餐 查看全部→│ │
|
|
│ │ │ │
|
|
│ │ 月付套餐 50GB │ │
|
|
│ │ 生效中 │ │
|
|
│ │ [进度条] 25/100GB │ │
|
|
│ │ 到期: 2024-04-01 │ │
|
|
│ └─────────────────────┘ │
|
|
│ │
|
|
└─────────────────────────────────┘
|
|
```
|
|
|
|
### 2. 套餐列表页
|
|
|
|
```
|
|
┌─────────────────────────────────┐
|
|
│ ← 返回 套餐列表 [筛选] │
|
|
├─────────────────────────────────┤
|
|
│ │
|
|
│ [全部] 生效中 待生效 已过期 → │ ← 筛选标签
|
|
│ │
|
|
│ ┌─────────────────────┐ │ ← 套餐卡片
|
|
│ │ 月付套餐 50GB 生效中│ │
|
|
│ │ 正式套餐 优先级:1 │ │
|
|
│ │ │ │
|
|
│ │ 虚流量使用 │ │
|
|
│ │ [████░░░] 25/100GB │ │
|
|
│ │ 真流量: 12.5/50GB │ │
|
|
│ │ │ │
|
|
│ │ 激活:2024-03-01 │ │
|
|
│ │ 到期:2024-04-01(剩5天) │ │
|
|
│ └─────────────────────┘ │
|
|
│ │
|
|
│ ┌─────────────────────┐ │
|
|
│ │ 加油包 20GB 生效中│ │
|
|
│ │ 加油包 优先级:2 │ │
|
|
│ │ [████░░░] 10/40GB │ │
|
|
│ └─────────────────────┘ │
|
|
│ │
|
|
└─────────────────────────────────┘
|
|
```
|
|
|
|
### 3. 套餐详情页
|
|
|
|
```
|
|
┌─────────────────────────────────┐
|
|
│ ← 返回列表 │
|
|
├─────────────────────────────────┤
|
|
│ │
|
|
│ ┌─────────────────────┐ │ ← 基本信息
|
|
│ │ 月付套餐 50GB 生效中│ │
|
|
│ │ │ │
|
|
│ │ 套餐类型: 正式套餐 │ │
|
|
│ │ 优先级: 1 │ │
|
|
│ └─────────────────────┘ │
|
|
│ │
|
|
│ ┌─────────────────────┐ │ ← 流量使用
|
|
│ │ 流量使用 │ │
|
|
│ │ │ │
|
|
│ │ 虚流量使用 25% │ │
|
|
│ │ [████████░░] │ │
|
|
│ │ │ │
|
|
│ │ 已用 剩余 总量│ │
|
|
│ │ 25GB 75GB 100GB│ │
|
|
│ │ │ │
|
|
│ │ 真流量: 12.5/50GB │ │
|
|
│ │ [████░░░░░] │ │
|
|
│ │ │ │
|
|
│ │ 虚流量比例: 1:2 │ │
|
|
│ └─────────────────────┘ │
|
|
│ │
|
|
│ ┌─────────────────────┐ │ ← 时间信息
|
|
│ │ 时间信息 │ │
|
|
│ │ 创建:2024-02-25 │ │
|
|
│ │ 激活:2024-03-01 │ │
|
|
│ │ 到期:2024-04-01 │ │
|
|
│ │ 剩余5天 │ │
|
|
│ └─────────────────────┘ │
|
|
│ │
|
|
│ [续费套餐] [购买加油包] │
|
|
│ │
|
|
└─────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## 🎨 状态颜色方案
|
|
|
|
### 套餐状态标签
|
|
|
|
```scss
|
|
// 待生效 (status: 0)
|
|
color: #ff9800
|
|
background: #fff3e0
|
|
|
|
// 生效中 (status: 1)
|
|
color: #4caf50
|
|
background: #e8f5e9
|
|
|
|
// 已用完 (status: 2)
|
|
color: #9e9e9e
|
|
background: #f5f5f5
|
|
|
|
// 已过期 (status: 3)
|
|
color: #f44336
|
|
background: #ffebee
|
|
|
|
// 已失效 (status: 4)
|
|
color: #757575
|
|
background: #eeeeee
|
|
```
|
|
|
|
### 进度条颜色
|
|
|
|
```scss
|
|
// 正常使用 (status: 1)
|
|
进度条: #4caf50 (绿色)
|
|
|
|
// 已用完 (status: 2)
|
|
进度条: #f44336 (红色)
|
|
|
|
// 真流量进度条
|
|
进度条: #2196f3 (蓝色)
|
|
```
|
|
|
|
### 剩余天数颜色
|
|
|
|
```scss
|
|
// ≤ 7天 (即将过期)
|
|
text-color: #f44336 (红色)
|
|
|
|
// 7-30天 (提醒)
|
|
text-color: #ff9800 (橙色)
|
|
|
|
// > 30天 (正常)
|
|
text-color: #4caf50 (绿色)
|
|
```
|
|
|
|
---
|
|
|
|
## 💡 交互说明
|
|
|
|
### 1. 套餐筛选
|
|
|
|
点击顶部筛选标签:
|
|
- **全部** - 显示所有套餐
|
|
- **生效中** - 仅显示 status = 1
|
|
- **待生效** - 仅显示 status = 0
|
|
- **已过期** - 仅显示 status = 3
|
|
|
|
### 2. 查看详情
|
|
|
|
点击套餐卡片 → 跳转详情页
|
|
|
|
### 3. 返回导航
|
|
|
|
- 列表页 → 点击"← 返回" → 数据概览
|
|
- 详情页 → 点击"← 返回列表" → 列表页
|
|
|
|
---
|
|
|
|
## 📊 流量计算逻辑
|
|
|
|
### 虚流量比例计算
|
|
|
|
```typescript
|
|
// 示例: virtual_ratio = 0.5
|
|
// 真流量 1GB = 虚流量 2GB
|
|
|
|
显示比例 = 1 : (1 / virtual_ratio)
|
|
= 1 : (1 / 0.5)
|
|
= 1 : 2
|
|
|
|
// 虚流量换算
|
|
virtual_limit_mb = data_limit_mb / virtual_ratio
|
|
= 50GB / 0.5
|
|
= 100GB
|
|
```
|
|
|
|
### 使用百分比
|
|
|
|
```typescript
|
|
usagePercent = (used / total) * 100
|
|
= (25600 / 102400) * 100
|
|
= 25%
|
|
```
|
|
|
|
### 剩余天数
|
|
|
|
```typescript
|
|
remainingDays = (expires_at - now) / (24小时)
|
|
= 向上取整
|
|
|
|
// 颜色判断
|
|
if (remainingDays <= 7) → 红色
|
|
else if (remainingDays <= 30) → 橙色
|
|
else → 绿色
|
|
```
|
|
|
|
---
|
|
|
|
## 🔧 数据示例
|
|
|
|
### 示例 1: 正式套餐
|
|
|
|
```json
|
|
{
|
|
"package_usage_id": 1,
|
|
"package_id": 101,
|
|
"package_name": "月付套餐 50GB",
|
|
"package_type": "formal",
|
|
"status": 1,
|
|
"status_name": "生效中",
|
|
"data_limit_mb": 51200, // 50GB
|
|
"data_usage_mb": 12800, // 12.5GB
|
|
"virtual_limit_mb": 102400, // 100GB (50GB / 0.5)
|
|
"virtual_used_mb": 25600, // 25GB
|
|
"virtual_remain_mb": 76800, // 75GB
|
|
"virtual_ratio": 0.5, // 1:2比例
|
|
"priority": 1,
|
|
"usage_type": "single_card",
|
|
"master_usage_id": null,
|
|
"activated_at": "2024-03-01T10:00:00Z",
|
|
"expires_at": "2024-04-01T10:00:00Z",
|
|
"created_at": "2024-02-25T15:30:00Z"
|
|
}
|
|
```
|
|
|
|
### 示例 2: 加油包
|
|
|
|
```json
|
|
{
|
|
"package_usage_id": 2,
|
|
"package_id": 102,
|
|
"package_name": "加油包 20GB",
|
|
"package_type": "addon",
|
|
"status": 1,
|
|
"status_name": "生效中",
|
|
"data_limit_mb": 20480, // 20GB
|
|
"data_usage_mb": 5120, // 5GB
|
|
"virtual_limit_mb": 40960, // 40GB
|
|
"virtual_used_mb": 10240, // 10GB
|
|
"virtual_remain_mb": 30720, // 30GB
|
|
"virtual_ratio": 0.5,
|
|
"priority": 2,
|
|
"usage_type": "single_card",
|
|
"master_usage_id": 1, // 关联主套餐ID
|
|
"activated_at": "2024-03-15T14:00:00Z",
|
|
"expires_at": "2024-04-15T14:00:00Z",
|
|
"created_at": "2024-03-15T13:00:00Z"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## ✅ 设计检查清单
|
|
|
|
- [x] 套餐状态使用对应颜色标签
|
|
- [x] 进度条颜色区分状态
|
|
- [x] 虚流量/真流量分别展示
|
|
- [x] 虚流量比例清晰显示
|
|
- [x] 剩余天数有颜色提醒
|
|
- [x] 加油包显示主套餐关联
|
|
- [x] 待生效套餐不显示激活/到期时间
|
|
- [x] 流量单位自动换算 (MB/GB)
|
|
- [x] 所有时间格式统一
|
|
- [x] 空状态有友好提示
|
|
|
|
---
|
|
|
|
## 🎯 下一步开发
|
|
|
|
### 优先级 P0
|
|
|
|
- [ ] **API接口对接** - 获取真实套餐数据
|
|
- [ ] **搜索功能** - 按套餐名称搜索
|
|
- [ ] **下拉刷新** - 刷新套餐列表
|
|
- [ ] **分页加载** - 长列表分页
|
|
|
|
### 优先级 P1
|
|
|
|
- [ ] **续费功能** - 续费套餐表单
|
|
- [ ] **购买加油包** - 加油包选择和购买
|
|
- [ ] **套餐详情操作** - 更多操作选项
|
|
- [ ] **使用记录** - 流量使用历史
|
|
|
|
### 优先级 P2
|
|
|
|
- [ ] **图表统计** - 流量使用趋势图
|
|
- [ ] **到期提醒** - 即将到期推送
|
|
- [ ] **自动续费** - 自动续费开关
|
|
|
|
---
|
|
|
|
## 📐 字段映射表
|
|
|
|
| API字段 | 显示名称 | 类型 | 说明 |
|
|
|---------|---------|------|------|
|
|
| package_usage_id | 套餐使用ID | number | 主键 |
|
|
| package_id | 套餐ID | number | 套餐模板ID |
|
|
| package_name | 套餐名称 | string | 显示标题 |
|
|
| package_type | 套餐类型 | string | formal/addon |
|
|
| status | 状态码 | number | 0-4 |
|
|
| status_name | 状态名称 | string | 中文状态 |
|
|
| data_limit_mb | 真流量总量 | number | MB单位 |
|
|
| data_usage_mb | 真流量已用 | number | MB单位 |
|
|
| virtual_limit_mb | 虚流量总量 | number | MB单位 |
|
|
| virtual_used_mb | 虚流量已用 | number | MB单位 |
|
|
| virtual_remain_mb | 虚流量剩余 | number | MB单位 |
|
|
| virtual_ratio | 虚流量比例 | number | 小数 |
|
|
| priority | 优先级 | number | 越小越优先 |
|
|
| usage_type | 使用类型 | string | single_card/device |
|
|
| master_usage_id | 主套餐ID | number/null | 加油包关联 |
|
|
| activated_at | 激活时间 | datetime/null | ISO格式 |
|
|
| expires_at | 到期时间 | datetime/null | ISO格式 |
|
|
| created_at | 创建时间 | datetime | ISO格式 |
|
|
|
|
---
|
|
|
|
**小米米家风格 - 简约、清晰、易用** 🎨
|