Files
one-pipe-system/src/api/modules/card.ts
sexygoat 6c9b29c53b
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 4m59s
fix: 套餐订购,界面优化
2026-04-27 11:14:20 +08:00

434 lines
12 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 网卡相关 API
*/
import { BaseService } from '../BaseService'
import type {
Card,
SimCardProduct,
CardQueryParams,
CardImportBatch,
CardOperationParams,
CardAssignParams,
BatchRechargeRecord,
CardChangeApplication,
ProcessCardChangeParams,
FlowDetail,
SuspendResumeRecord,
CardOrder,
BaseResponse,
PaginationResponse,
ListResponse,
GatewayRealnameLinkResponse,
ImportIotCardRequest,
ImportIotCardResponse
} from '@/types/api'
export class CardService extends BaseService {
// ========== 号卡商品管理 ==========
/**
* 获取号卡商品列表
* @param params 查询参数
*/
static getSimCardProducts(params?: any): Promise<PaginationResponse<SimCardProduct>> {
return this.getPage<SimCardProduct>('/api/simcard-products', params)
}
/**
* 创建号卡商品
* @param data 商品数据
*/
static createSimCardProduct(data: Partial<SimCardProduct>): Promise<BaseResponse> {
return this.create('/api/simcard-products', data)
}
/**
* 更新号卡商品
* @param id 商品ID
* @param data 商品数据
*/
static updateSimCardProduct(
id: string | number,
data: Partial<SimCardProduct>
): Promise<BaseResponse> {
return this.update(`/api/simcard-products/${id}`, data)
}
/**
* 删除号卡商品
* @param id 商品ID
*/
static deleteSimCardProduct(id: string | number): Promise<BaseResponse> {
return this.remove(`/api/simcard-products/${id}`)
}
/**
* 号卡分配
* @param params 分配参数
*/
static assignCard(params: CardAssignParams): Promise<BaseResponse> {
return this.post<BaseResponse>('/api/simcard-products/assign', params)
}
// ========== 网卡管理 ==========
/**
* 获取网卡列表
* @param params 查询参数
*/
static getCards(params?: CardQueryParams): Promise<PaginationResponse<Card>> {
return this.getPage<Card>('/api/cards', params)
}
/**
* 根据ICCID获取单卡信息旧接口用于现有功能
* @param iccid ICCID
*/
static getCardByIccid(iccid: string): Promise<BaseResponse<Card>> {
return this.getOne<Card>(`/api/cards/iccid/${iccid}`)
}
/**
* 通过ICCID查询单卡详情旧接口已废弃
* @deprecated 使用 AssetService.resolveAsset 替代
* @param iccid ICCID
*/
static getIotCardDetailByIccid(iccid: string): Promise<BaseResponse<any>> {
return this.getOne<any>(`/api/admin/iot-cards/by-iccid/${iccid}`)
}
/**
* 网卡操作(充值、停复机、增减流量等)
* @param params 操作参数
*/
static cardOperation(params: CardOperationParams): Promise<BaseResponse> {
return this.post<BaseResponse>('/api/cards/operation', params)
}
/**
* 套餐充值
* @param iccid ICCID
* @param packageId 套餐ID
*/
static rechargePackage(iccid: string, packageId: string | number): Promise<BaseResponse> {
return this.post<BaseResponse>(`/api/cards/${iccid}/recharge`, { packageId })
}
/**
* 停机
* @param iccid ICCID
* @param remark 备注
*/
static suspend(iccid: string, remark?: string): Promise<BaseResponse> {
return this.post<BaseResponse>(`/api/cards/${iccid}/suspend`, { remark })
}
/**
* 复机
* @param iccid ICCID
* @param remark 备注
*/
static resume(iccid: string, remark?: string): Promise<BaseResponse> {
return this.post<BaseResponse>(`/api/cards/${iccid}/resume`, { remark })
}
/**
* 获取流量详情
* @param iccid ICCID
* @param startDate 开始日期
* @param endDate 结束日期
*/
static getFlowDetails(
iccid: string,
startDate?: string,
endDate?: string
): Promise<ListResponse<FlowDetail>> {
return this.getList<FlowDetail>(`/api/cards/${iccid}/flow-details`, {
startDate,
endDate
})
}
/**
* 获取停复机记录
* @param iccid ICCID
*/
static getSuspendResumeRecords(iccid: string): Promise<ListResponse<SuspendResumeRecord>> {
return this.getList<SuspendResumeRecord>(`/api/cards/${iccid}/suspend-resume-records`)
}
/**
* 获取往期订单
* @param iccid ICCID
*/
static getCardOrders(iccid: string): Promise<ListResponse<CardOrder>> {
return this.getList<CardOrder>(`/api/cards/${iccid}/orders`)
}
/**
* 更改过期时间
* @param iccid ICCID
* @param expireTime 过期时间
*/
static changeExpireTime(iccid: string, expireTime: string): Promise<BaseResponse> {
return this.put<BaseResponse>(`/api/cards/${iccid}/expire-time`, { expireTime })
}
/**
* 增加流量
* @param iccid ICCID
* @param flow 流量MB
*/
static addFlow(iccid: string, flow: number): Promise<BaseResponse> {
return this.post<BaseResponse>(`/api/cards/${iccid}/add-flow`, { flow })
}
/**
* 减少流量
* @param iccid ICCID
* @param flow 流量MB
*/
static reduceFlow(iccid: string, flow: number): Promise<BaseResponse> {
return this.post<BaseResponse>(`/api/cards/${iccid}/reduce-flow`, { flow })
}
/**
* 变更钱包余额
* @param iccid ICCID
* @param amount 金额
*/
static changeWalletBalance(iccid: string, amount: number): Promise<BaseResponse> {
return this.put<BaseResponse>(`/api/cards/${iccid}/wallet`, { amount })
}
// ========== 批量操作 ==========
/**
* 获取导入批次列表
* @param params 查询参数
*/
static getImportBatches(params?: any): Promise<PaginationResponse<CardImportBatch>> {
return this.getPage<CardImportBatch>('/api/cards/import-batches', params)
}
/**
* 批量导入网卡
* @param file Excel文件
* @param params 额外参数
*/
static importCards(file: File, params?: Record<string, any>): Promise<BaseResponse> {
return this.upload('/api/cards/import', file, params)
}
/**
* 获取导入失败记录
* @param batchId 批次ID
*/
static getImportFailures(batchId: string | number): Promise<ListResponse<any>> {
return this.getList(`/api/cards/import-batches/${batchId}/failures`)
}
/**
* 批量充值记录列表
* @param params 查询参数
*/
static getBatchRechargeRecords(params?: any): Promise<PaginationResponse<BatchRechargeRecord>> {
return this.getPage<BatchRechargeRecord>('/api/cards/batch-recharge-records', params)
}
/**
* 批量充值导入
* @param file Excel文件
*/
static batchRecharge(file: File): Promise<BaseResponse> {
return this.upload('/api/cards/batch-recharge', file)
}
// ========== 换卡管理 ==========
/**
* 获取换卡申请列表
* @param params 查询参数
*/
static getCardChangeApplications(
params?: any
): Promise<PaginationResponse<CardChangeApplication>> {
return this.getPage<CardChangeApplication>('/api/card-change-applications', params)
}
/**
* 处理换卡申请
* @param params 处理参数
*/
static processCardChange(params: ProcessCardChangeParams): Promise<BaseResponse> {
return this.post<BaseResponse>('/api/card-change-applications/process', params)
}
/**
* 创建换卡通知
* @param iccids ICCID列表
* @param reason 换卡原因
*/
static createCardChangeNotice(iccids: string[], reason: string): Promise<BaseResponse> {
return this.post<BaseResponse>('/api/card-change-notices', { iccids, reason })
}
/**
* 获取换卡通知记录
* @param params 查询参数
*/
static getCardChangeNotices(params?: any): Promise<PaginationResponse<any>> {
return this.getPage('/api/card-change-notices', params)
}
// ========== ICCID批量导入相关 ==========
/**
* 批量导入ICCID新版使用 JSON 格式)
* @param data 导入请求参数
*/
static importIotCards(data: ImportIotCardRequest): Promise<BaseResponse<ImportIotCardResponse>> {
return this.post<BaseResponse<ImportIotCardResponse>>('/api/admin/iot-cards/import', data)
}
/**
* 获取导入任务列表
* @param params 查询参数
*/
static getIotCardImportTasks(params?: any): Promise<PaginationResponse<any>> {
return this.getPage('/api/admin/iot-cards/import-tasks', params)
}
/**
* 获取导入任务详情
* @param id 任务ID
*/
static getIotCardImportTaskDetail(id: number): Promise<BaseResponse<any>> {
return this.getOne(`/api/admin/iot-cards/import-tasks/${id}`)
}
// ========== 单卡列表(未绑定设备)相关 ==========
/**
* 获取单卡列表(未绑定设备)
* @param params 查询参数
*/
static getStandaloneIotCards(params?: any): Promise<PaginationResponse<any>> {
return this.getPage('/api/admin/iot-cards/standalone', { is_standalone: true, ...params })
}
/**
* 批量分配单卡
* @param data 分配参数
*/
static allocateStandaloneCards(data: any): Promise<BaseResponse<any>> {
return this.post('/api/admin/iot-cards/standalone/allocate', data)
}
/**
* 批量回收单卡
* @param data 回收参数
*/
static recallStandaloneCards(data: any): Promise<BaseResponse<any>> {
return this.post('/api/admin/iot-cards/standalone/recall', data)
}
// ========== 资产分配记录相关 ==========
/**
* 获取资产分配记录列表
* @param params 查询参数
*/
static getAssetAllocationRecords(params?: any): Promise<PaginationResponse<any>> {
return this.getPage('/api/admin/asset-allocation-records', params)
}
/**
* 获取资产分配记录详情
* @param id 记录ID
*/
static getAssetAllocationRecordDetail(id: number): Promise<BaseResponse<any>> {
return this.getOne(`/api/admin/asset-allocation-records/${id}`)
}
// ========== 批量设置卡的套餐系列绑定相关 ==========
/**
* 批量设置卡的套餐系列绑定
* @param data 请求参数
*/
static batchSetCardSeriesBinding(data: {
iccids: string[]
series_id: number
}): Promise<BaseResponse<any>> {
return this.patch('/api/admin/iot-cards/series-binding', data)
}
// ========== IoT卡网关操作相关 ==========
/**
* 获取实名认证链接
* @param iccid ICCID
*/
static getRealnameLink(iccid: string): Promise<BaseResponse<GatewayRealnameLinkResponse>> {
return this.get<BaseResponse<GatewayRealnameLinkResponse>>(
`/api/admin/iot-cards/${iccid}/realname-link`
)
}
/**
* 启用 IoT 卡 单卡复机
* @param iccid
*/
static enableIotCard(iccid: string): Promise<BaseResponse> {
return this.post<BaseResponse>(`/api/admin/assets/card/${iccid}/start`, {})
}
/**
* 停用 IoT 卡 单卡停机
* @param iccid
*/
static disableIotCard(iccid: string): Promise<BaseResponse> {
return this.post<BaseResponse>(`/api/admin/assets/card/${iccid}/stop`, {})
}
/**
* 手动停用 IoT 卡
* @param id IoT卡ID
*/
static deactivateIotCard(id: number): Promise<BaseResponse> {
return this.patch<BaseResponse>(`/api/admin/iot-cards/${id}/deactivate`, {})
}
/**
* 获取套餐流量详单(每日流量记录)
* @param packageUsageId 套餐使用记录ID
*/
static getPackageDailyRecords(packageUsageId: number): Promise<
BaseResponse<{
package_name: string
package_usage_id: number
total_usage_mb: number
records: Array<{
date: string
daily_usage_mb: number
cumulative_usage_mb: number
}>
}>
> {
return this.get<
BaseResponse<{
package_name: string
package_usage_id: number
total_usage_mb: number
records: Array<{
date: string
daily_usage_mb: number
cumulative_usage_mb: number
}>
}>
>(`/api/admin/package-usage/${packageUsageId}/daily-records`)
}
}