修复bug
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 11m14s

This commit is contained in:
sexygoat
2026-04-08 10:19:25 +08:00
parent ff087abd44
commit b510b4539f
55 changed files with 2274 additions and 2612 deletions

View File

@@ -6,21 +6,18 @@
import { BaseService } from '../BaseService'
import type {
BaseResponse,
AssetType,
AssetResolveResponse,
AssetRealtimeStatusResponse,
AssetRefreshResponse,
AssetPackageUsageRecord,
AssetPackageListResponse,
AssetPackageParams,
AssetCurrentPackageResponse,
DeviceStopResponse,
DeviceStartResponse,
CardStopResponse,
CardStartResponse,
AssetWalletTransactionListResponse,
AssetWalletTransactionParams,
AssetWalletResponse
AssetWalletResponse,
AssetOrdersParams,
AssetOrdersResponse
} from '@/types/api'
export class AssetService extends BaseService {
@@ -36,148 +33,150 @@ export class AssetService extends BaseService {
/**
* 读取资产实时状态(直接读 DB/Redis不调网关
* GET /api/admin/assets/:asset_type/:id/realtime-status
* @param assetType 资产类型 (card 或 device)
* @param id 资产ID
* GET /api/admin/assets/:identifier/realtime-status
* @param identifier 资产标识符ICCID 或 VirtualNo
*/
static getRealtimeStatus(
assetType: AssetType,
id: number
): Promise<BaseResponse<AssetRealtimeStatusResponse>> {
static getRealtimeStatus(identifier: string): Promise<BaseResponse<AssetRealtimeStatusResponse>> {
return this.getOne<AssetRealtimeStatusResponse>(
`/api/admin/assets/${assetType}/${id}/realtime-status`
`/api/admin/assets/${identifier}/realtime-status`
)
}
/**
* 主动调网关拉取最新数据后返回
* POST /api/admin/assets/:asset_type/:id/refresh
* POST /api/admin/assets/:identifier/refresh
* 注意:设备有 30 秒冷却期,冷却中调用返回 429
* @param assetType 资产类型 (card 或 device)
* @param id 资产ID
* @param identifier 资产标识符ICCID 或 VirtualNo
*/
static refreshAsset(
assetType: AssetType,
id: number
): Promise<BaseResponse<AssetRefreshResponse>> {
static refreshAsset(identifier: string): Promise<BaseResponse<AssetRefreshResponse>> {
return this.post<BaseResponse<AssetRefreshResponse>>(
`/api/admin/assets/${assetType}/${id}/refresh`,
`/api/admin/assets/${identifier}/refresh`,
{}
)
}
/**
* 查询该资产所有套餐记录,含虚流量换算字段(分页)
* GET /api/admin/assets/:asset_type/:id/packages?page=1&page_size=50
* @param assetType 资产类型 (card 或 device)
* @param id 资产ID
* GET /api/admin/assets/:identifier/packages?page=1&page_size=50
* @param identifier 资产标识符ICCID 或 VirtualNo
* @param params 查询参数(可选分页参数)
*/
static getAssetPackages(
assetType: AssetType,
id: number,
identifier: string,
params?: AssetPackageParams
): Promise<BaseResponse<AssetPackageListResponse>> {
return this.get<BaseResponse<AssetPackageListResponse>>(
`/api/admin/assets/${assetType}/${id}/packages`,
`/api/admin/assets/${identifier}/packages`,
params
)
}
/**
* 查询当前生效中的主套餐
* GET /api/admin/assets/:asset_type/:id/current-package
* GET /api/admin/assets/:identifier/current-package
* 无生效套餐时返回 404
* @param assetType 资产类型 (card 或 device)
* @param id 资产ID
* @param identifier 资产标识符ICCID 或 VirtualNo
*/
static getCurrentPackage(
assetType: AssetType,
id: number
): Promise<BaseResponse<AssetCurrentPackageResponse>> {
static getCurrentPackage(identifier: string): Promise<BaseResponse<AssetCurrentPackageResponse>> {
return this.getOne<AssetCurrentPackageResponse>(
`/api/admin/assets/${assetType}/${id}/current-package`
`/api/admin/assets/${identifier}/current-package`
)
}
// ========== 设备停复机操作 ==========
// ========== 资产停复机操作(统一接口)==========
/**
* 批量停机设备下所有已实名卡
* POST /api/admin/assets/device/:device_id/stop
* 停机资产(卡或设备)
* POST /api/admin/assets/:identifier/stop
* 停机成功后设置 1 小时停机保护期(保护期内禁止复机)
* @param deviceId 设备ID
* @param identifier 资产标识符ICCID 或 VirtualNo
*/
static stopDevice(deviceId: number): Promise<BaseResponse<DeviceStopResponse>> {
return this.post<BaseResponse<DeviceStopResponse>>(
`/api/admin/assets/device/${deviceId}/stop`,
static stopAsset(identifier: string): Promise<BaseResponse<DeviceStopResponse | void>> {
return this.post<BaseResponse<DeviceStopResponse | void>>(
`/api/admin/assets/${identifier}/stop`,
{}
)
}
/**
* 批量复机设备下所有已实名卡
* POST /api/admin/assets/device/:device_id/start
* 复机资产(卡或设备)
* POST /api/admin/assets/:identifier/start
* 复机成功后设置 1 小时复机保护期(保护期内禁止停机)
* @param deviceId 设备ID
* @param identifier 资产标识符ICCID 或 VirtualNo
*/
static startDevice(deviceId: number): Promise<BaseResponse<void>> {
return this.post<BaseResponse<void>>(`/api/admin/assets/device/${deviceId}/start`, {})
static startAsset(identifier: string): Promise<BaseResponse<void>> {
return this.post<BaseResponse<void>>(`/api/admin/assets/${identifier}/start`, {})
}
// ========== 单卡停复机操作 ==========
// ========== 资产停用 ==========
/**
* 手动停机单张卡(通过 ICCID
* POST /api/admin/assets/card/:iccid/stop
* 若卡绑定的设备在复机保护期内,返回 403
* @param iccid ICCID
* 手动停用资产(卡或设备
* PATCH /api/admin/assets/:identifier/deactivate
* @param identifier 资产标识符ICCID 或 VirtualNo
*/
static stopCard(iccid: string): Promise<BaseResponse<void>> {
return this.post<BaseResponse<void>>(`/api/admin/assets/card/${iccid}/stop`, {})
}
/**
* 手动复机单张卡(通过 ICCID
* POST /api/admin/assets/card/:iccid/start
* 若卡绑定的设备在停机保护期内,返回 403
* @param iccid ICCID
*/
static startCard(iccid: string): Promise<BaseResponse<void>> {
return this.post<BaseResponse<void>>(`/api/admin/assets/card/${iccid}/start`, {})
static deactivateAsset(identifier: string): Promise<BaseResponse> {
return this.patch<BaseResponse>(`/api/admin/assets/${identifier}/deactivate`, {})
}
// ========== 钱包查询 ==========
/**
* 查询指定卡或设备的钱包余额概况
* GET /api/admin/assets/:asset_type/:id/wallet
* GET /api/admin/assets/:identifier/wallet
* 企业账号禁止调用
* @param assetType 资产类型 (card 或 device)
* @param id 资产ID
* @param identifier 资产标识符ICCID 或 VirtualNo
*/
static getAssetWallet(
assetType: AssetType,
id: number
): Promise<BaseResponse<AssetWalletResponse>> {
return this.getOne<AssetWalletResponse>(`/api/admin/assets/${assetType}/${id}/wallet`)
static getAssetWallet(identifier: string): Promise<BaseResponse<AssetWalletResponse>> {
return this.getOne<AssetWalletResponse>(`/api/admin/assets/${identifier}/wallet`)
}
/**
* 分页查询指定资产的钱包收支流水
* GET /api/admin/assets/:asset_type/:id/wallet/transactions
* GET /api/admin/assets/:identifier/wallet/transactions
* 企业账号禁止调用
* @param assetType 资产类型 (card 或 device)
* @param id 资产ID
* @param identifier 资产标识符ICCID 或 VirtualNo
* @param params 查询参数
*/
static getWalletTransactions(
assetType: AssetType,
id: number,
identifier: string,
params?: AssetWalletTransactionParams
): Promise<BaseResponse<AssetWalletTransactionListResponse>> {
return this.get<BaseResponse<AssetWalletTransactionListResponse>>(
`/api/admin/assets/${assetType}/${id}/wallet/transactions`,
`/api/admin/assets/${identifier}/wallet/transactions`,
params
)
}
// ========== 轮询状态更新 ==========
/**
* 更新资产轮询状态
* PATCH /api/admin/assets/:identifier/polling-status
* @param identifier 资产标识符ICCID 或 VirtualNo
* @param data 轮询状态数据
*/
static updatePollingStatus(
identifier: string,
data: { enable_polling: boolean }
): Promise<BaseResponse> {
return this.patch<BaseResponse>(`/api/admin/assets/${identifier}/polling-status`, data)
}
// ========== 资产历史订单 ==========
/**
* 查询资产历史订单
* GET /api/admin/assets/:identifier/orders
* @param identifier 资产标识符ICCID 或 VirtualNo
* @param params 查询参数
*/
static getAssetOrders(
identifier: string,
params?: AssetOrdersParams
): Promise<BaseResponse<AssetOrdersResponse>> {
return this.get<BaseResponse<AssetOrdersResponse>>(
`/api/admin/assets/${identifier}/orders`,
params
)
}

View File

@@ -56,45 +56,48 @@ export class DeviceService extends BaseService {
/**
* 删除设备
* @param id 设备ID
* @param virtualNo 设备虚拟号
*/
static deleteDevice(id: number): Promise<BaseResponse> {
return this.remove(`/api/admin/devices/${id}`)
static deleteDevice(virtualNo: string): Promise<BaseResponse> {
return this.remove(`/api/admin/devices/${virtualNo}`)
}
// ========== 设备卡绑定管理 ==========
/**
* 获取设备绑定的卡列表
* @param id 设备ID
* @param virtualNo 设备虚拟号
*/
static getDeviceCards(id: number): Promise<BaseResponse<DeviceCardsResponse>> {
return this.getOne<DeviceCardsResponse>(`/api/admin/devices/${id}/cards`)
static getDeviceCards(virtualNo: string): Promise<BaseResponse<DeviceCardsResponse>> {
return this.getOne<DeviceCardsResponse>(`/api/admin/devices/${virtualNo}/cards`)
}
/**
* 绑定卡到设备
* @param id 设备ID
* @param virtualNo 设备虚拟号
* @param data 绑定参数
*/
static bindCard(
id: number,
virtualNo: string,
data: BindCardToDeviceRequest
): Promise<BaseResponse<BindCardToDeviceResponse>> {
return this.post<BaseResponse<BindCardToDeviceResponse>>(`/api/admin/devices/${id}/cards`, data)
return this.post<BaseResponse<BindCardToDeviceResponse>>(
`/api/admin/devices/${virtualNo}/cards`,
data
)
}
/**
* 解绑设备上的卡
* @param deviceId 设备ID
* @param cardId IoT卡ID
* @param virtualNo 设备虚拟号
* @param iccid 卡ICCID
*/
static unbindCard(
deviceId: number,
cardId: number
virtualNo: string,
iccid: string
): Promise<BaseResponse<UnbindCardFromDeviceResponse>> {
return this.delete<BaseResponse<UnbindCardFromDeviceResponse>>(
`/api/admin/devices/${deviceId}/cards/${cardId}`
`/api/admin/devices/${virtualNo}/cards/${iccid}`
)
}
@@ -230,12 +233,4 @@ export class DeviceService extends BaseService {
data
)
}
/**
* 手动停用设备
* @param id 设备ID
*/
static deactivateDevice(id: number): Promise<BaseResponse> {
return this.patch<BaseResponse>(`/api/admin/devices/${id}/deactivate`, {})
}
}

View File

@@ -66,10 +66,10 @@ export class ExchangeService extends BaseService {
static getExchanges(
params?: ExchangeQueryParams
): Promise<
BaseResponse<{ list: ExchangeResponse[]; page: number; page_size: number; total: number }>
BaseResponse<{ items: ExchangeResponse[]; page: number; page_size: number; total: number }>
> {
return this.get<
BaseResponse<{ list: ExchangeResponse[]; page: number; page_size: number; total: number }>
BaseResponse<{ items: ExchangeResponse[]; page: number; page_size: number; total: number }>
>('/api/admin/exchanges', params)
}