diff --git a/src/api/modules/index.ts b/src/api/modules/index.ts index 690c767..5df33df 100644 --- a/src/api/modules/index.ts +++ b/src/api/modules/index.ts @@ -23,8 +23,7 @@ export { DeviceService } from './device' export { CarrierService } from './carrier' export { PackageSeriesService } from './packageSeries' export { PackageManageService } from './packageManage' -export { ShopPackageAllocationService } from './shopPackageAllocation' -export { ShopSeriesAllocationService } from './shopSeriesAllocation' +export { ShopSeriesGrantService } from './shopSeriesGrant' export { OrderService } from './order' // TODO: 按需添加其他业务模块 diff --git a/src/api/modules/shopPackageAllocation.ts b/src/api/modules/shopPackageAllocation.ts deleted file mode 100644 index a43a301..0000000 --- a/src/api/modules/shopPackageAllocation.ts +++ /dev/null @@ -1,104 +0,0 @@ -/** - * 单套餐分配 API 服务 - */ - -import { BaseService } from '../BaseService' -import type { - ShopPackageAllocationResponse, - ShopPackageAllocationQueryParams, - CreateShopPackageAllocationRequest, - UpdateShopPackageAllocationRequest, - UpdateShopPackageAllocationStatusRequest, - BaseResponse, - PaginationResponse -} from '@/types/api' - -export class ShopPackageAllocationService extends BaseService { - /** - * 获取单套餐分配列表 - * GET /api/admin/shop-package-allocations - * @param params 查询参数 - */ - static getShopPackageAllocations( - params?: ShopPackageAllocationQueryParams - ): Promise> { - return this.getPage( - '/api/admin/shop-package-allocations', - params - ) - } - - /** - * 创建单套餐分配 - * POST /api/admin/shop-package-allocations - * @param data 分配数据 - */ - static createShopPackageAllocation( - data: CreateShopPackageAllocationRequest - ): Promise> { - return this.create('/api/admin/shop-package-allocations', data) - } - - /** - * 获取单套餐分配详情 - * GET /api/admin/shop-package-allocations/{id} - * @param id 分配ID - */ - static getShopPackageAllocationDetail( - id: number - ): Promise> { - return this.getOne(`/api/admin/shop-package-allocations/${id}`) - } - - /** - * 更新单套餐分配 - * PUT /api/admin/shop-package-allocations/{id} - * @param id 分配ID - * @param data 分配数据(只允许修改成本价) - */ - static updateShopPackageAllocation( - id: number, - data: UpdateShopPackageAllocationRequest - ): Promise> { - return this.update( - `/api/admin/shop-package-allocations/${id}`, - data - ) - } - - /** - * 删除单套餐分配 - * DELETE /api/admin/shop-package-allocations/{id} - * @param id 分配ID - */ - static deleteShopPackageAllocation(id: number): Promise { - return this.remove(`/api/admin/shop-package-allocations/${id}`) - } - - /** - * 更新单套餐分配成本价 - * PUT /api/admin/shop-package-allocations/{id}/cost-price - * @param id 分配ID - * @param costPrice 成本价(分) - */ - static updateShopPackageAllocationCostPrice( - id: number, - costPrice: number - ): Promise> { - return this.put>( - `/api/admin/shop-package-allocations/${id}/cost-price`, - { cost_price: costPrice } - ) - } - - /** - * 更新单套餐分配状态 - * PUT /api/admin/shop-package-allocations/{id}/status - * @param id 分配ID - * @param status 状态 (1:启用, 2:禁用) - */ - static updateShopPackageAllocationStatus(id: number, status: number): Promise { - const data: UpdateShopPackageAllocationStatusRequest = { status } - return this.put(`/api/admin/shop-package-allocations/${id}/status`, data) - } -} diff --git a/src/api/modules/shopSeriesAllocation.ts b/src/api/modules/shopSeriesAllocation.ts deleted file mode 100644 index 81b54e9..0000000 --- a/src/api/modules/shopSeriesAllocation.ts +++ /dev/null @@ -1,85 +0,0 @@ -/** - * 套餐系列分配 API 服务 - */ - -import { BaseService } from '../BaseService' -import type { - ShopSeriesAllocationResponse, - ShopSeriesAllocationQueryParams, - CreateShopSeriesAllocationRequest, - UpdateShopSeriesAllocationRequest, - UpdateShopSeriesAllocationStatusRequest, - BaseResponse, - PaginationResponse -} from '@/types/api' - -export class ShopSeriesAllocationService extends BaseService { - /** - * 获取套餐系列分配分页列表 - * GET /api/admin/shop-series-allocations - * @param params 查询参数 - */ - static getShopSeriesAllocations( - params?: ShopSeriesAllocationQueryParams - ): Promise> { - return this.getPage('/api/admin/shop-series-allocations', params) - } - - /** - * 创建套餐系列分配 - * POST /api/admin/shop-series-allocations - * @param data 分配数据 - */ - static createShopSeriesAllocation( - data: CreateShopSeriesAllocationRequest - ): Promise> { - return this.create('/api/admin/shop-series-allocations', data) - } - - /** - * 获取套餐系列分配详情 - * GET /api/admin/shop-series-allocations/{id} - * @param id 分配ID - */ - static getShopSeriesAllocationDetail( - id: number - ): Promise> { - return this.getOne(`/api/admin/shop-series-allocations/${id}`) - } - - /** - * 更新套餐系列分配 - * PUT /api/admin/shop-series-allocations/{id} - * @param id 分配ID - * @param data 分配数据 - */ - static updateShopSeriesAllocation( - id: number, - data: UpdateShopSeriesAllocationRequest - ): Promise> { - return this.update( - `/api/admin/shop-series-allocations/${id}`, - data - ) - } - - /** - * 删除套餐系列分配 - * DELETE /api/admin/shop-series-allocations/{id} - * @param id 分配ID - */ - static deleteShopSeriesAllocation(id: number): Promise { - return this.remove(`/api/admin/shop-series-allocations/${id}`) - } - - /** - * 更新套餐系列分配状态 - * PUT /api/admin/shop-series-allocations/{id}/status - * @param id 分配ID - * @param status 状态 (1:启用, 2:禁用) - */ - static updateShopSeriesAllocationStatus(id: number, status: number): Promise { - const data: UpdateShopSeriesAllocationStatusRequest = { status } - return this.put(`/api/admin/shop-series-allocations/${id}/status`, data) - } -} diff --git a/src/api/modules/shopSeriesGrant.ts b/src/api/modules/shopSeriesGrant.ts new file mode 100644 index 0000000..eec2d56 --- /dev/null +++ b/src/api/modules/shopSeriesGrant.ts @@ -0,0 +1,90 @@ +/** + * 代理系列授权 API 服务 + */ + +import { BaseService } from '../BaseService' +import type { + ShopSeriesGrantResponse, + ShopSeriesGrantQueryParams, + CreateShopSeriesGrantRequest, + UpdateShopSeriesGrantRequest, + ManageGrantPackagesRequest, + BaseResponse, + PaginationResponse +} from '@/types/api' + +export class ShopSeriesGrantService extends BaseService { + /** + * 获取代理系列授权分页列表 + * GET /api/admin/shop-series-grants + * @param params 查询参数 + */ + static getShopSeriesGrants( + params?: ShopSeriesGrantQueryParams + ): Promise> { + return this.getPage('/api/admin/shop-series-grants', params) + } + + /** + * 创建代理系列授权 + * POST /api/admin/shop-series-grants + * @param data 授权数据 + */ + static createShopSeriesGrant( + data: CreateShopSeriesGrantRequest + ): Promise> { + return this.create('/api/admin/shop-series-grants', data) + } + + /** + * 获取代理系列授权详情 + * GET /api/admin/shop-series-grants/{id} + * @param id 授权ID + */ + static getShopSeriesGrantDetail( + id: number + ): Promise> { + return this.getOne(`/api/admin/shop-series-grants/${id}`) + } + + /** + * 更新代理系列授权 + * PUT /api/admin/shop-series-grants/{id} + * @param id 授权ID + * @param data 授权数据 + */ + static updateShopSeriesGrant( + id: number, + data: UpdateShopSeriesGrantRequest + ): Promise> { + return this.update( + `/api/admin/shop-series-grants/${id}`, + data + ) + } + + /** + * 删除代理系列授权 + * DELETE /api/admin/shop-series-grants/{id} + * @param id 授权ID + */ + static deleteShopSeriesGrant(id: number): Promise { + return this.remove(`/api/admin/shop-series-grants/${id}`) + } + + /** + * 管理代理系列授权的套餐 + * PUT /api/admin/shop-series-grants/{id}/packages + * @param id 授权ID + * @param data 套餐管理数据 + */ + static manageGrantPackages( + id: number, + data: ManageGrantPackagesRequest + ): Promise> { + return this.put>( + `/api/admin/shop-series-grants/${id}/packages`, + data + ) + } +} diff --git a/src/locales/langs/zh.json b/src/locales/langs/zh.json index 236b334..3618956 100644 --- a/src/locales/langs/zh.json +++ b/src/locales/langs/zh.json @@ -404,10 +404,8 @@ "packageList": "套餐管理", "packageDetail": "套餐详情", "packageChange": "套餐变更", - "packageAssign": "单套餐分配", - "packageAssignDetail": "套餐分配详情", - "seriesAssign": "套餐系列分配", - "seriesAssignDetail": "系列分配详情", + "seriesGrants": "代理系列授权", + "seriesGrantsDetail": "代理系列授权详情", "packageSeries": "套餐系列", "packageSeriesDetail": "套餐系列详情", "packageCommission": "套餐佣金网卡" diff --git a/src/router/routes/asyncRoutes.ts b/src/router/routes/asyncRoutes.ts index 701bf3d..4549c54 100644 --- a/src/router/routes/asyncRoutes.ts +++ b/src/router/routes/asyncRoutes.ts @@ -760,39 +760,20 @@ export const asyncRoutes: AppRouteRecord[] = [ } }, { - path: 'package-assign', - name: 'PackageAssign', - component: RoutesAlias.PackageAssign, + path: 'series-grants', + name: 'SeriesGrants', + component: RoutesAlias.SeriesGrants, meta: { - title: 'menus.packageManagement.packageAssign', + title: 'menus.packageManagement.seriesGrants', keepAlive: true } }, { - path: 'package-assign/detail/:id', - name: 'PackageAssignDetail', - component: RoutesAlias.PackageAssignDetail, + path: 'series-grants/detail/:id', + name: 'SeriesGrantsDetail', + component: RoutesAlias.SeriesGrantsDetail, meta: { - title: 'menus.packageManagement.packageAssignDetail', - isHide: true, - keepAlive: false - } - }, - { - path: 'series-assign', - name: 'SeriesAssign', - component: RoutesAlias.SeriesAssign, - meta: { - title: 'menus.packageManagement.seriesAssign', - keepAlive: true - } - }, - { - path: 'series-assign/detail/:id', - name: 'SeriesAssignDetail', - component: RoutesAlias.SeriesAssignDetail, - meta: { - title: 'menus.packageManagement.seriesAssignDetail', + title: 'menus.packageManagement.seriesGrantsDetail', isHide: true, keepAlive: false } diff --git a/src/router/routesAlias.ts b/src/router/routesAlias.ts index fec9310..d896690 100644 --- a/src/router/routesAlias.ts +++ b/src/router/routesAlias.ts @@ -70,10 +70,8 @@ export enum RoutesAlias { PackageList = '/package-management/package-list', // 套餐管理 PackageDetail = '/package-management/package-list/detail', // 套餐详情 PackageChange = '/package-management/package-change', // 套餐变更 - PackageAssign = '/package-management/package-assign', // 单套餐分配 - PackageAssignDetail = '/package-management/package-assign/detail', // 单套餐分配详情 - SeriesAssign = '/package-management/series-assign', // 套餐系列分配 - SeriesAssignDetail = '/package-management/series-assign/detail', // 套餐系列分配详情 + SeriesGrants = '/package-management/series-grants', // 代理系列授权 + SeriesGrantsDetail = '/package-management/series-grants/detail', // 代理系列授权详情 PackageSeries = '/package-management/package-series', // 套餐系列 PackageSeriesDetail = '/package-management/package-series/detail', // 套餐系列详情 PackageCommission = '/package-management/package-commission', // 套餐佣金网卡 diff --git a/src/types/api/packageManagement.ts b/src/types/api/packageManagement.ts index 7f11054..05c0a85 100644 --- a/src/types/api/packageManagement.ts +++ b/src/types/api/packageManagement.ts @@ -200,93 +200,58 @@ export interface SeriesSelectOption { series_code: string } -// ==================== 单套餐分配 ==================== +// ==================== 代理系列授权 (新接口) ==================== /** - * 单套餐分配响应 + * 佣金梯度配置 */ -export interface ShopPackageAllocationResponse { - id: number +export interface CommissionTier { + operator: '>=' // 运算符 + threshold: number // 阈值 + amount: number // 佣金金额(分) +} + +/** + * 套餐信息(用于系列授权) + */ +export interface GrantPackageInfo { package_id: number - package_code: string - package_name: string - series_id: number // 套餐系列ID - series_name: string // 套餐系列名称 + package_name?: string + package_code?: string + cost_price: number // 成本价(分) + shelf_status?: number // 上架状态 + status?: number // 状态 +} + +/** + * 代理系列授权响应 + */ +export interface ShopSeriesGrantResponse { + id: number shop_id: number shop_name: string - allocator_shop_id: number // 分配者店铺ID,0表示平台分配 - allocator_shop_name: string // 分配者店铺名称 - series_allocation_id?: number | null // 关联的系列分配ID(可空) - cost_price: number // 该代理的成本价(分) - status: number // 1:启用, 2:禁用 - created_at: string - updated_at: string -} - -/** - * 单套餐分配查询参数 - */ -export interface ShopPackageAllocationQueryParams extends PaginationParams { - shop_id?: number // 店铺ID筛选 - package_id?: number // 套餐ID筛选 - series_allocation_id?: number // 系列分配ID筛选 - allocator_shop_id?: number // 分配者店铺ID筛选 - status?: number // 状态筛选 -} - -/** - * 创建单套餐分配请求 - */ -export interface CreateShopPackageAllocationRequest { - package_id: number // 套餐ID,必填 - shop_id: number // 店铺ID,必填 - cost_price: number // 覆盖的成本价(分),必填 -} - -/** - * 更新单套餐分配请求 - */ -export interface UpdateShopPackageAllocationRequest { - cost_price: number // 只允许修改成本价 -} - -/** - * 更新单套餐分配状态请求 - */ -export interface UpdateShopPackageAllocationStatusRequest { - status: number // 1:启用, 2:禁用 -} - -// ==================== 套餐系列分配 ==================== - -/** - * 套餐系列分配响应 - */ -export interface ShopSeriesAllocationResponse { - id: number series_id: number series_name: string - series_code: string // 套餐系列编码 - shop_id: number - shop_name: string - allocator_shop_id: number // 分配者店铺ID,0表示平台分配 + series_code?: string + commission_type: 'fixed' | 'tiered' // 佣金类型:固定或梯度 + one_time_commission_amount: number // 固定佣金金额(分) + commission_tiers: CommissionTier[] // 梯度配置列表 + force_recharge_locked: boolean // 是否被平台锁定(true时前端只读) + force_recharge_enabled: boolean // 是否启用强充 + force_recharge_amount: number // 强充金额(分) + allocator_shop_id: number // 分配者店铺ID,0表示平台 allocator_shop_name: string // 分配者店铺名称 - enable_one_time_commission: boolean // 是否启用一次性佣金 - one_time_commission_amount: number // 该代理能拿的一次性佣金金额上限(分) - one_time_commission_threshold?: number // 一次性佣金触发阈值(分) - one_time_commission_trigger?: 'first_recharge' | 'accumulated_recharge' // 一次性佣金触发类型 - enable_force_recharge: boolean // 是否启用强制充值 - force_recharge_amount?: number // 强制充值金额(分) - force_recharge_trigger_type?: 1 | 2 // 强充触发类型:1(单次充值)、2(累计充值) + package_count?: number // 套餐数量 + packages?: GrantPackageInfo[] // 套餐列表 status: number // 1:启用, 2:禁用 created_at: string - updated_at: string + updated_at?: string } /** - * 套餐系列分配查询参数 + * 代理系列授权查询参数 */ -export interface ShopSeriesAllocationQueryParams extends PaginationParams { +export interface ShopSeriesGrantQueryParams extends PaginationParams { shop_id?: number // 店铺ID筛选 series_id?: number // 系列ID筛选 allocator_shop_id?: number // 分配者店铺ID筛选 @@ -294,37 +259,40 @@ export interface ShopSeriesAllocationQueryParams extends PaginationParams { } /** - * 创建套餐系列分配请求 + * 创建代理系列授权请求 */ -export interface CreateShopSeriesAllocationRequest { - series_id: number // 套餐系列ID,必填 +export interface CreateShopSeriesGrantRequest { shop_id: number // 店铺ID,必填 - one_time_commission_amount: number // 一次性佣金金额上限(分),必填 - enable_one_time_commission?: boolean // 是否启用一次性佣金,可选 - one_time_commission_threshold?: number // 一次性佣金触发阈值(分),可选 - one_time_commission_trigger?: 'first_recharge' | 'accumulated_recharge' // 一次性佣金触发类型,可选 - enable_force_recharge?: boolean // 是否启用强制充值,可选 - force_recharge_amount?: number // 强制充值金额(分),可选 - force_recharge_trigger_type?: 1 | 2 // 强充触发类型,可选 + series_id: number // 系列ID,必填 + one_time_commission_amount?: number // 固定佣金金额(分),固定模式时必填 + commission_tiers?: CommissionTier[] // 梯度配置列表,梯度模式时必填 + enable_force_recharge?: boolean // 是否启用强充 + force_recharge_amount?: number // 强充金额(分) + packages?: GrantPackageInfo[] // 套餐列表 } /** - * 更新套餐系列分配请求 + * 更新代理系列授权请求 */ -export interface UpdateShopSeriesAllocationRequest { - enable_one_time_commission?: boolean // 是否启用一次性佣金 - one_time_commission_amount?: number // 一次性佣金金额上限(分) - one_time_commission_threshold?: number // 一次性佣金触发阈值(分) - one_time_commission_trigger?: 'first_recharge' | 'accumulated_recharge' // 一次性佣金触发类型 - enable_force_recharge?: boolean // 是否启用强制充值 - force_recharge_amount?: number // 强制充值金额(分) - force_recharge_trigger_type?: 1 | 2 // 强充触发类型 - status?: number // 状态 +export interface UpdateShopSeriesGrantRequest { + one_time_commission_amount?: number // 固定佣金金额(分) + commission_tiers?: CommissionTier[] // 梯度配置列表 + enable_force_recharge?: boolean // 是否启用强充(force_recharge_locked=true时忽略) + force_recharge_amount?: number // 强充金额(分) } /** - * 更新套餐系列分配状态请求 + * 管理套餐请求中的套餐项 */ -export interface UpdateShopSeriesAllocationStatusRequest { - status: number // 1:启用, 2:禁用 +export interface GrantPackageItem { + package_id?: number // 套餐ID + cost_price?: number // 成本价(分) + remove?: boolean | null // 是否删除该套餐授权(true=删除) +} + +/** + * 管理套餐请求 + */ +export interface ManageGrantPackagesRequest { + packages?: GrantPackageItem[] | null // 套餐操作列表 } diff --git a/src/views/package-management/package-assign/detail.vue b/src/views/package-management/package-assign/detail.vue deleted file mode 100644 index 4464a69..0000000 --- a/src/views/package-management/package-assign/detail.vue +++ /dev/null @@ -1,147 +0,0 @@ - - - - - diff --git a/src/views/package-management/package-assign/index.vue b/src/views/package-management/package-assign/index.vue deleted file mode 100644 index b185d47..0000000 --- a/src/views/package-management/package-assign/index.vue +++ /dev/null @@ -1,891 +0,0 @@ - - - - - diff --git a/src/views/package-management/series-assign/detail.vue b/src/views/package-management/series-assign/detail.vue deleted file mode 100644 index 7b2a09c..0000000 --- a/src/views/package-management/series-assign/detail.vue +++ /dev/null @@ -1,205 +0,0 @@ - - - - - diff --git a/src/views/package-management/series-assign/index.vue b/src/views/package-management/series-assign/index.vue deleted file mode 100644 index 753b4bd..0000000 --- a/src/views/package-management/series-assign/index.vue +++ /dev/null @@ -1,1090 +0,0 @@ - - - - - diff --git a/src/views/package-management/series-grants/detail.vue b/src/views/package-management/series-grants/detail.vue new file mode 100644 index 0000000..04688dc --- /dev/null +++ b/src/views/package-management/series-grants/detail.vue @@ -0,0 +1,663 @@ + + + + + diff --git a/src/views/package-management/series-grants/index.vue b/src/views/package-management/series-grants/index.vue new file mode 100644 index 0000000..6e77f42 --- /dev/null +++ b/src/views/package-management/series-grants/index.vue @@ -0,0 +1,1538 @@ + + + + +