This commit is contained in:
@@ -35,20 +35,24 @@
|
||||
根据提供的权限JSON,需要添加权限控制的模块包括:
|
||||
|
||||
1. **套餐管理** (`/package-management`)
|
||||
|
||||
- 套餐系列 (`package-series`)
|
||||
- 套餐列表 (`package-list`)
|
||||
- 单套餐分配 (`package-assign`)
|
||||
- 套餐系列分配 (`series-assign`)
|
||||
|
||||
2. **店铺管理** (`/shop-management`)
|
||||
|
||||
- 店铺列表 (`list`)
|
||||
|
||||
3. **账号管理** (`/account-management`)
|
||||
|
||||
- 账号列表 (`account`)
|
||||
- 平台账号 (`platform-account`)
|
||||
- 代理账号 (`shop-account`)
|
||||
|
||||
4. **资产管理** (`/asset-management`)
|
||||
|
||||
- IoT卡管理 (`iot-card-management`)
|
||||
- IoT卡任务 (`iot-card-task`)
|
||||
- 设备任务 (`device-task`)
|
||||
@@ -67,9 +71,9 @@
|
||||
|
||||
```vue
|
||||
<script setup>
|
||||
import { useAuth } from '@/composables/useAuth'
|
||||
import { useAuth } from '@/composables/useAuth'
|
||||
|
||||
const { hasAuth } = useAuth()
|
||||
const { hasAuth } = useAuth()
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -79,29 +83,28 @@ const { hasAuth } = useAuth()
|
||||
</template>
|
||||
|
||||
<!-- 2. 表格列中的状态切换 -->
|
||||
<ElSwitch
|
||||
:disabled="!hasAuth('module:update_status')"
|
||||
v-model="row.status"
|
||||
/>
|
||||
<ElSwitch :disabled="!hasAuth('module:update_status')" v-model="row.status" />
|
||||
|
||||
<!-- 3. 表格列中的操作按钮 -->
|
||||
<script>
|
||||
const columns = [{
|
||||
prop: 'operation',
|
||||
formatter: (row) => {
|
||||
const buttons = []
|
||||
const columns = [
|
||||
{
|
||||
prop: 'operation',
|
||||
formatter: (row) => {
|
||||
const buttons = []
|
||||
|
||||
if (hasAuth('module:edit')) {
|
||||
buttons.push(h(ArtButtonTable, { type: 'edit', onClick: () => edit(row) }))
|
||||
if (hasAuth('module:edit')) {
|
||||
buttons.push(h(ArtButtonTable, { type: 'edit', onClick: () => edit(row) }))
|
||||
}
|
||||
|
||||
if (hasAuth('module:delete')) {
|
||||
buttons.push(h(ArtButtonTable, { type: 'delete', onClick: () => del(row) }))
|
||||
}
|
||||
|
||||
return h('div', { style: 'display: flex; gap: 8px;' }, buttons)
|
||||
}
|
||||
}
|
||||
|
||||
if (hasAuth('module:delete')) {
|
||||
buttons.push(h(ArtButtonTable, { type: 'delete', onClick: () => del(row) }))
|
||||
}
|
||||
|
||||
return h('div', { style: 'display: flex; gap: 8px;' }, buttons)
|
||||
}
|
||||
}]
|
||||
]
|
||||
</script>
|
||||
</template>
|
||||
```
|
||||
|
||||
@@ -9,12 +9,14 @@
|
||||
### 1. 套餐管理模块 (Package Management) ✅
|
||||
|
||||
- [x] **套餐系列页面** (`/package-management/package-series`)
|
||||
|
||||
- ✅ 引入 `useAuth` composable
|
||||
- ✅ 为"新增套餐系列"按钮添加 `v-permission="'package_series:add'"`
|
||||
- ✅ 为状态切换添加 `disabled: !hasAuth('package_series:update_status')`
|
||||
- ✅ 在操作列中使用 `hasAuth()` 判断编辑权限 (`package_series:edit`)和删除权限 (`package_series:delete`)
|
||||
|
||||
- [x] **套餐列表页面** (`/package-management/package-list`)
|
||||
|
||||
- ✅ 引入 `useAuth` composable
|
||||
- ✅ 为"新增套餐"按钮添加 `v-permission="'package:add'"`
|
||||
- ✅ 为上/下架切换添加 `disabled: !hasAuth('package:update_away')`
|
||||
@@ -22,6 +24,7 @@
|
||||
- ✅ 在操作列中使用 `hasAuth()` 判断编辑 (`package:edit`) 和删除 (`package:delete`) 权限
|
||||
|
||||
- [x] **单套餐分配页面** (`/package-management/package-assign`)
|
||||
|
||||
- ✅ 引入 `useAuth` composable
|
||||
- ✅ 为"新增分配"按钮添加 `v-permission="'package_assign:add'"`
|
||||
- ✅ 为状态切换添加 `disabled: !hasAuth('package_assign:update_status')`
|
||||
@@ -50,6 +53,7 @@
|
||||
### 3. 账号管理模块 (Account Management) ✅
|
||||
|
||||
- [x] **账号列表页面** (`/account-management/account`)
|
||||
|
||||
- ✅ 引入 `useAuth` composable
|
||||
- ✅ 为"新增账号"按钮添加 `v-permission="'account:add'"`
|
||||
- ✅ 在操作列中使用 `hasAuth()` 判断以下权限:
|
||||
@@ -58,6 +62,7 @@
|
||||
- 删除: `account:delete`
|
||||
|
||||
- [x] **平台账号页面** (`/account-management/platform-account`)
|
||||
|
||||
- ✅ 引入 `useAuth` composable
|
||||
- ✅ 为"新增平台账号"按钮添加 `v-permission="'platform_account:add'"`
|
||||
- ✅ 在操作列中使用 `hasAuth()` 判断以下权限:
|
||||
@@ -76,6 +81,7 @@
|
||||
### 4. 资产管理模块 (Asset Management) ✅
|
||||
|
||||
- [x] **IoT卡管理页面** (`/asset-management/iot-card-management`)
|
||||
|
||||
- ✅ 引入 `useAuth` composable
|
||||
- ✅ 为表格头部操作按钮添加权限控制:
|
||||
- 批量分配: `v-permission="'iot_card:batch_allocation'"`
|
||||
@@ -89,16 +95,19 @@
|
||||
- ✅ 验证权限控制正确工作
|
||||
|
||||
- [x] **IoT卡任务页面** (`/asset-management/iot-card-task`)
|
||||
|
||||
- ✅ 引入 `useAuth` composable
|
||||
- ✅ 为"批量导入IoT卡"按钮添加 `v-permission="''"`
|
||||
- ✅ 验证权限控制正确工作
|
||||
|
||||
- [x] **设备任务页面** (`/asset-management/device-task`)
|
||||
|
||||
- ✅ 引入 `useAuth` composable
|
||||
- ✅ 为"批量导入设备"按钮添加 `v-permission="'device_task:bulk_import'"`
|
||||
- ✅ 验证权限控制正确工作
|
||||
|
||||
- [x] **设备管理页面** (`/asset-management/device-list`)
|
||||
|
||||
- ✅ 引入 `useAuth` composable
|
||||
- ✅ 为表格头部操作按钮添加权限控制:
|
||||
- 批量分配: `v-permission="'devices:batch_allocation'"`
|
||||
@@ -117,6 +126,7 @@
|
||||
### 5. 账户管理模块 (Account Module) ✅
|
||||
|
||||
- [x] **企业客户页面** (`/account/enterprise-customer`)
|
||||
|
||||
- ✅ 引入 `useAuth` composable
|
||||
- ✅ 为"新增企业客户"按钮添加 `v-permission="'enterprise_customer:add'"`
|
||||
- ✅ 在操作列中使用 `hasAuth()` 判断以下权限:
|
||||
@@ -127,6 +137,7 @@
|
||||
- ✅ 验证权限控制正确工作
|
||||
|
||||
- [x] **运营商管理页面** (`/account/carrier-management`)
|
||||
|
||||
- ✅ 引入 `useAuth` composable
|
||||
- ✅ 为"新增运营商"按钮添加 `v-permission="'carrier:add'"`
|
||||
- ✅ 为状态切换添加 `disabled: !hasAuth('carrier:update_status')`
|
||||
@@ -134,16 +145,19 @@
|
||||
- ✅ 验证权限控制正确工作
|
||||
|
||||
- [x] **订单管理页面** (`/account/orders`)
|
||||
|
||||
- ✅ 引入 `useAuth` composable
|
||||
- ✅ 为"创建订单"按钮添加 `v-permission="'orders:add'"`
|
||||
- ✅ 验证权限控制正确工作
|
||||
|
||||
- [x] **提现配置页面** (`/account/commission/withdrawal-settings`)
|
||||
|
||||
- ✅ 引入 `useAuth` composable
|
||||
- ✅ 为"新增配置"按钮添加 `v-permission="'withdrawal_settings:add'"`
|
||||
- ✅ 验证权限控制正确工作
|
||||
|
||||
- [x] **我的佣金页面** (`/account/commission/my-commission`)
|
||||
|
||||
- ✅ 引入 `useAuth` composable
|
||||
- ✅ 为"发起提现"按钮添加 `v-permission="'my_commission:add'"`
|
||||
- ✅ 验证权限控制正确工作
|
||||
@@ -164,6 +178,7 @@
|
||||
### 7. 测试与文档
|
||||
|
||||
- [ ] **权限控制测试**
|
||||
|
||||
- 创建不同权限组合的测试用户
|
||||
- 验证每个页面的按钮显示/隐藏符合预期
|
||||
- 验证状态切换的启用/禁用符合预期
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
## What Changes
|
||||
|
||||
### IoT Card Operations (6 new APIs)
|
||||
|
||||
- 查询流量使用情况 (GET /api/admin/iot-cards/{iccid}/gateway-flow)
|
||||
- 查询实名认证状态 (GET /api/admin/iot-cards/{iccid}/gateway-realname)
|
||||
- 查询卡片状态 (GET /api/admin/iot-cards/{iccid}/gateway-status)
|
||||
@@ -15,6 +16,7 @@
|
||||
- 停用物联网卡 (POST /api/admin/iot-cards/{iccid}/stop)
|
||||
|
||||
### Device Operations (6 new APIs)
|
||||
|
||||
- 重启设备 (POST /api/admin/devices/by-imei/{imei}/reboot)
|
||||
- 重置设备 (POST /api/admin/devices/by-imei/{imei}/reset)
|
||||
- 设置限速 (PUT /api/admin/devices/by-imei/{imei}/speed-limit)
|
||||
@@ -22,6 +24,7 @@
|
||||
- 设置WiFi (PUT /api/admin/devices/by-imei/{imei}/wifi)
|
||||
|
||||
### UI Changes
|
||||
|
||||
- 在 `/asset-management/iot-card-management` 页面添加操作按钮:
|
||||
- "查询流量"按钮(主要操作)
|
||||
- "更多操作"下拉菜单(包含其他5个操作)
|
||||
@@ -32,10 +35,12 @@
|
||||
## Impact
|
||||
|
||||
### Affected Specs
|
||||
|
||||
- **NEW**: `specs/iot-card-operations/spec.md` - IoT卡操作相关的所有需求
|
||||
- **NEW**: `specs/device-operations/spec.md` - 设备操作相关的所有需求
|
||||
|
||||
### Affected Code
|
||||
|
||||
- **API层**:
|
||||
- 新增 `src/api/modules/iotCard.ts` - IoT卡操作API方法
|
||||
- 新增 `src/api/modules/device.ts` - 设备操作API方法
|
||||
@@ -47,6 +52,7 @@
|
||||
- 修改 `src/views/asset-management/devices/index.vue` - 添加操作按钮和对话框
|
||||
|
||||
### Breaking Changes
|
||||
|
||||
无破坏性变更。所有变更都是增量式的新功能添加。
|
||||
|
||||
## Dependencies
|
||||
|
||||
@@ -9,9 +9,11 @@
|
||||
**API端点**: `GET /api/admin/shops/{shop_id}/roles`
|
||||
|
||||
**路径参数**:
|
||||
|
||||
- `shop_id` (integer, required): 店铺ID
|
||||
|
||||
**响应数据**:
|
||||
|
||||
```typescript
|
||||
{
|
||||
shop_id: number // 店铺ID
|
||||
@@ -54,9 +56,11 @@ interface ShopRole {
|
||||
**API端点**: `POST /api/admin/shops/{shop_id}/roles`
|
||||
|
||||
**路径参数**:
|
||||
|
||||
- `shop_id` (integer, required): 店铺ID
|
||||
|
||||
**请求体**:
|
||||
|
||||
```typescript
|
||||
{
|
||||
role_ids: number[] | null // 角色ID列表
|
||||
@@ -106,6 +110,7 @@ interface ShopRole {
|
||||
**API端点**: `DELETE /api/admin/shops/{shop_id}/roles/{role_id}`
|
||||
|
||||
**路径参数**:
|
||||
|
||||
- `shop_id` (integer, required): 店铺ID
|
||||
- `role_id` (integer, required): 角色ID
|
||||
|
||||
|
||||
@@ -36,11 +36,13 @@
|
||||
### 完成的功能
|
||||
|
||||
1. **类型定义** - 已在 `src/types/api/shop.ts` 添加了三个接口:
|
||||
|
||||
- `ShopRoleResponse`: 店铺角色响应实体
|
||||
- `ShopRolesResponse`: 店铺角色列表响应
|
||||
- `AssignShopRolesRequest`: 分配角色请求
|
||||
|
||||
2. **API 服务层** - 已在 `src/api/modules/shop.ts` 的 `ShopService` 类中添加:
|
||||
|
||||
- `getShopRoles(shopId)`: 获取店铺默认角色列表
|
||||
- `assignShopRoles(shopId, data)`: 分配店铺默认角色
|
||||
- `deleteShopRole(shopId, roleId)`: 删除店铺默认角色
|
||||
@@ -56,6 +58,7 @@
|
||||
### 待测试项
|
||||
|
||||
所有开发任务已完成,现在需要进行功能测试以确保:
|
||||
|
||||
- API 调用正常工作
|
||||
- UI 交互符合预期
|
||||
- 边界情况处理正确
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
## What Changes
|
||||
|
||||
- **BREAKING**: 重命名 4 个 API 端点的请求/响应字段
|
||||
|
||||
- `PATCH /api/admin/iot-cards/series-binding` - 请求参数 `series_allocation_id` → `series_id`
|
||||
- `PATCH /api/admin/devices/series-binding` - 请求参数 `series_allocation_id` → `series_id`
|
||||
- `GET /api/admin/iot-cards/standalone` - 查询参数和响应字段 `series_allocation_id` → `series_id`
|
||||
|
||||
@@ -25,6 +25,7 @@ The system SHALL support filtering devices by package series ID in query paramet
|
||||
The system SHALL include package series ID in device response data.
|
||||
|
||||
**Response Field**: `series_id` (number | null)
|
||||
|
||||
- Value is package series ID if device is bound to a series
|
||||
- Value is null if device has no series binding
|
||||
|
||||
@@ -58,18 +59,21 @@ The system SHALL provide an endpoint to batch set package series binding for dev
|
||||
**Endpoint**: `PATCH /api/admin/devices/series-binding`
|
||||
|
||||
**Request Body**:
|
||||
|
||||
```json
|
||||
{
|
||||
"device_ids": [1, 2, 3],
|
||||
"series_id": 123 // Changed from series_allocation_id
|
||||
"series_id": 123 // Changed from series_allocation_id
|
||||
}
|
||||
```
|
||||
|
||||
**Field Definitions**:
|
||||
|
||||
- `device_ids`: Array of device IDs (max 500 items)
|
||||
- `series_id`: Package series ID (tb_package_series.id), 0 means clear association
|
||||
|
||||
**Response**:
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 0,
|
||||
|
||||
@@ -25,6 +25,7 @@ The system SHALL support filtering standalone IoT cards by package series ID in
|
||||
The system SHALL include package series ID in standalone IoT card response data.
|
||||
|
||||
**Response Field**: `series_id` (number | null)
|
||||
|
||||
- Value is package series ID if card is bound to a series
|
||||
- Value is null if card has no series binding
|
||||
|
||||
@@ -58,18 +59,21 @@ The system SHALL provide an endpoint to batch set package series binding for IoT
|
||||
**Endpoint**: `PATCH /api/admin/iot-cards/series-binding`
|
||||
|
||||
**Request Body**:
|
||||
|
||||
```json
|
||||
{
|
||||
"iccids": ["898600..."],
|
||||
"series_id": 123 // Changed from series_allocation_id
|
||||
"series_id": 123 // Changed from series_allocation_id
|
||||
}
|
||||
```
|
||||
|
||||
**Field Definitions**:
|
||||
|
||||
- `iccids`: Array of ICCIDs (max 500 items)
|
||||
- `series_id`: Package series ID (tb_package_series.id), 0 means clear association
|
||||
|
||||
**Response**:
|
||||
|
||||
```json
|
||||
{
|
||||
"code": 0,
|
||||
|
||||
@@ -3,14 +3,17 @@
|
||||
## 1. 类型定义更新
|
||||
|
||||
### 1.1 批量设置接口参数重命名
|
||||
|
||||
- [x] 1.1.1 更新 `src/types/api/device.ts` 中 BatchSetDeviceSeriesBindingRequest 接口,将 `series_allocation_id` 改为 `series_id`
|
||||
- [x] 1.1.2 更新 `src/types/api/card.ts` 中 BatchSetCardSeriesBindingRequest 接口,将 `series_allocation_id` 改为 `series_id`
|
||||
|
||||
### 1.2 查询参数新增字段
|
||||
|
||||
- [x] 1.2.1 在 `src/types/api/device.ts` 的 DeviceQueryParams 接口中添加 `series_id?: number` 查询参数
|
||||
- [x] 1.2.2 在 `src/types/api/card.ts` 的 StandaloneCardQueryParams 接口中添加 `series_id?: number` 查询参数
|
||||
|
||||
### 1.3 响应类型新增字段
|
||||
|
||||
- [x] 1.3.1 在 `src/types/api/device.ts` 的 Device 接口中添加 `series_id?: number | null` 响应字段(在 updated_at 后面)
|
||||
- [x] 1.3.2 在 `src/types/api/card.ts` 的 StandaloneIotCard 接口中添加 `series_id?: number | null` 响应字段(在 updated_at 后面)
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
**修改**: `src/types/api/packageManagement.ts`
|
||||
|
||||
**套餐系列相关类型**:
|
||||
|
||||
- `PackageSeriesResponse` - 新增 `enable_one_time_commission` 和 `one_time_commission_config`
|
||||
- `CreatePackageSeriesRequest` - 新增一次性佣金配置字段
|
||||
- `UpdatePackageSeriesRequest` - 新增一次性佣金配置字段
|
||||
@@ -24,6 +25,7 @@
|
||||
- 新增 `OneTimeCommissionTier` - 梯度佣金档位配置
|
||||
|
||||
**系列分配相关类型**:
|
||||
|
||||
- **BREAKING**: `ShopSeriesAllocationResponse` - 完全重构字段结构
|
||||
- 移除: `base_commission` (BaseCommissionConfig)
|
||||
- 新增: `series_code`, `enable_force_recharge`, `enable_one_time_commission`, `force_recharge_amount`, `force_recharge_trigger_type`, `one_time_commission_amount`, `one_time_commission_threshold`, `one_time_commission_trigger`
|
||||
@@ -32,6 +34,7 @@
|
||||
- 移除不再使用的类型: `BaseCommissionConfig`, `TierEntry`, `TierCommissionConfig`, `OneTimeCommissionTierEntry`, `OneTimeCommissionConfig`(旧版)
|
||||
|
||||
**单套餐分配相关类型**:
|
||||
|
||||
- `ShopPackageAllocationResponse` - 字段调整
|
||||
- 新增: `series_id`, `series_name`, `series_allocation_id`, `allocator_shop_id`, `allocator_shop_name`
|
||||
- 移除: `allocation_id` (重命名为 `series_allocation_id`), `calculated_cost_price`
|
||||
@@ -44,6 +47,7 @@
|
||||
### 3. 页面/组件适配(实施阶段处理)
|
||||
|
||||
以下文件需要适配新的数据结构(本提案阶段不编写代码):
|
||||
|
||||
- 套餐系列管理页面 - 需支持一次性佣金配置表单
|
||||
- 系列分配页面 - 需重构佣金配置表单UI
|
||||
- 单套餐分配页面 - 需展示新增的关联字段
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
套餐系列的数据模型SHALL支持一次性佣金配置,包括固定佣金、梯度佣金、强制充值、时效类型等高级功能。
|
||||
|
||||
**字段定义**:
|
||||
|
||||
- `id` (number) - 系列ID
|
||||
- `series_code` (string) - 系列编码,唯一标识
|
||||
- `series_name` (string) - 系列名称
|
||||
@@ -18,6 +19,7 @@
|
||||
- `updated_at` (string) - 更新时间
|
||||
|
||||
**一次性佣金配置结构** (`SeriesOneTimeCommissionConfig`):
|
||||
|
||||
- `enable` (boolean) - 是否启用一次性佣金
|
||||
- `commission_type` (string) - 佣金类型: "fixed"(固定) | "tiered"(梯度)
|
||||
- `commission_amount` (number, optional) - 固定佣金金额(分),commission_type=fixed时使用
|
||||
@@ -31,6 +33,7 @@
|
||||
- `validity_value` (string, optional) - 时效值(日期字符串或月数)
|
||||
|
||||
**梯度档位结构** (`OneTimeCommissionTier`):
|
||||
|
||||
- `threshold` (number) - 达标阈值
|
||||
- `dimension` (string) - 统计维度: "sales_count"(销量) | "sales_amount"(销售额)
|
||||
- `amount` (number) - 佣金金额(分)
|
||||
@@ -64,10 +67,7 @@
|
||||
- `commission_type`: "tiered"
|
||||
- `threshold`: 5000
|
||||
- `trigger_type`: "accumulated_recharge"
|
||||
- `tiers`: [
|
||||
{ threshold: 10, dimension: "sales_count", amount: 3000 },
|
||||
{ threshold: 50, dimension: "sales_count", amount: 8000 }
|
||||
]
|
||||
- `tiers`: [ { threshold: 10, dimension: "sales_count", amount: 3000 }, { threshold: 50, dimension: "sales_count", amount: 8000 } ]
|
||||
- `validity_type`: "relative"
|
||||
- `validity_value`: "12" (12个月)
|
||||
- **THEN** 系统SHALL创建套餐系列,并保存梯度佣金配置
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
单套餐分配的数据模型SHALL新增系列关联字段和分配者信息字段,以支持更完整的分配关系追溯。
|
||||
|
||||
**字段定义**:
|
||||
|
||||
- `id` (number) - 分配ID
|
||||
- `package_id` (number) - 套餐ID
|
||||
- `package_code` (string) - 套餐编码
|
||||
@@ -24,6 +25,7 @@
|
||||
- `updated_at` (string) - 更新时间
|
||||
|
||||
**查询参数** (`ShopPackageAllocationQueryParams`):
|
||||
|
||||
- `page` (number, optional) - 页码
|
||||
- `page_size` (number, optional) - 每页数量
|
||||
- `shop_id` (number, optional) - 被分配的店铺ID
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
套餐系列分配的数据模型SHALL重构为更细粒度的佣金配置结构,移除旧的 `base_commission` 模式,采用独立的一次性佣金和强制充值配置字段。
|
||||
|
||||
**字段定义**:
|
||||
|
||||
- `id` (number) - 分配ID
|
||||
- `series_id` (number) - 套餐系列ID
|
||||
- `series_name` (string) - 套餐系列名称
|
||||
@@ -27,6 +28,7 @@
|
||||
- `updated_at` (string) - 更新时间
|
||||
|
||||
**创建请求字段** (`CreateShopSeriesAllocationRequest`):
|
||||
|
||||
- `series_id` (number, required) - 套餐系列ID
|
||||
- `shop_id` (number, required) - 被分配的店铺ID
|
||||
- `one_time_commission_amount` (number, required) - 一次性佣金金额上限(分)
|
||||
@@ -38,6 +40,7 @@
|
||||
- `force_recharge_trigger_type` (number, optional) - 强充触发类型
|
||||
|
||||
**更新请求字段** (`UpdateShopSeriesAllocationRequest`):
|
||||
|
||||
- 所有字段均为可选,允许部分更新
|
||||
- `enable_one_time_commission` (boolean, optional)
|
||||
- `one_time_commission_amount` (number, optional)
|
||||
|
||||
Reference in New Issue
Block a user