fix(operator): fix operator edit issue
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 6m25s

This commit is contained in:
sexygoat
2026-04-10 15:06:28 +08:00
parent 2b3119c549
commit 8b30341d50
8 changed files with 320 additions and 86 deletions

View File

@@ -42,11 +42,15 @@ export function useAssetInfo() {
if (response.code === 0 && response.data) {
const data = response.data
// 获取资产标识符
const assetIdentifier = data.asset_type === 'card' ? data.iccid : data.virtual_no
// 映射API数据到页面显示格式
cardInfo.value = {
// 基本信息
asset_type: data.asset_type, // card 或 device
asset_id: data.asset_id,
identifier: assetIdentifier || '', // 资产标识符卡用iccid设备用virtual_no
virtual_no: data.virtual_no,
status: data.status,
batch_no: data.batch_no,
@@ -107,13 +111,12 @@ export function useAssetInfo() {
packageList: [] // 套餐列表需要单独调用API获取
}
// 获取资产标识符并加载其他数据
const assetIdentifier = data.asset_type === 'card' ? data.iccid : data.virtual_no
// 加载其他数据
if (assetIdentifier) {
// 并行调用多个接口: 当前生效套餐、套餐列表、实时状态、钱包概况
// 并行调用多个接口: 当前生效套餐、实时状态、钱包概况
// 套餐列表不在这里调用,由父组件调用以便管理分页状态
await Promise.all([
loadCurrentPackage(assetIdentifier),
loadPackageList(assetIdentifier),
loadRealtimeStatus(assetIdentifier, data.asset_type),
loadAssetWallet(assetIdentifier)
])
@@ -123,14 +126,6 @@ export function useAssetInfo() {
cardInfo.value = null
}
} catch (error: any) {
console.error('获取卡片信息失败:', error)
if (error?.response?.status === 404) {
ElMessage.error('未找到该资产')
} else if (error?.response?.status === 403) {
ElMessage.error('无权限访问该资产')
} else {
ElMessage.error(error?.message || '获取卡片信息失败')
}
cardInfo.value = null
} finally {
loading.value = false
@@ -140,19 +135,30 @@ export function useAssetInfo() {
/**
* 加载套餐列表
* @param identifier - 资产标识符
* @param page - 页码
* @param pageSize - 每页条数
*/
const loadPackageList = async (identifier: string) => {
const loadPackageList = async (identifier: string, page: number = 1, pageSize: number = 10) => {
try {
const response = await AssetService.getAssetPackages(identifier, {
page: 1,
page_size: 50
page,
page_size: pageSize
})
if (response.code === 0 && response.data) {
// 使用分页响应中的 items 数组
cardInfo.value.packageList = response.data.items || []
packageList.value = response.data.items || []
// 返回分页信息供外部使用
return {
items: response.data.items || [],
total: response.data.total || 0,
page: response.data.page || 1,
pageSize: response.data.page_size || pageSize
}
}
return { items: [], total: 0, page: 1, pageSize }
} catch (error) {
console.error('获取套餐列表失败:', error)
return { items: [], total: 0, page: 1, pageSize }
}
}
@@ -170,28 +176,30 @@ export function useAssetInfo() {
if (response.code === 0) {
if (response.data) {
const pkg = response.data
// 保存完整的当前套餐数据
cardInfo.value.currentPackageDetail = {
package_usage_id: pkg.package_usage_id,
package_id: pkg.package_id,
package_name: pkg.package_name,
package_type: pkg.package_type,
status: pkg.status,
// 转换为组件期望的格式
currentPackage.value = {
id: pkg.package_usage_id || 0,
package_id: pkg.package_id || 0,
package_name: pkg.package_name || '',
package_price: 0, // API 没有返回价格
package_total_data: pkg.data_limit_mb || 0,
real_data_used: pkg.data_usage_mb || 0,
real_data_remaining: (pkg.data_limit_mb || 0) - (pkg.data_usage_mb || 0),
real_data_total: pkg.data_limit_mb || 0,
virtual_data_used: pkg.virtual_used_mb || 0,
virtual_data_remaining: pkg.virtual_remain_mb || 0,
virtual_data_total: pkg.virtual_limit_mb || 0,
start_time: pkg.activated_at || '',
expire_time: pkg.expires_at || '',
status: pkg.status || 0,
status_name: pkg.status_name,
data_limit_mb: pkg.data_limit_mb,
data_usage_mb: pkg.data_usage_mb,
virtual_limit_mb: pkg.virtual_limit_mb,
virtual_used_mb: pkg.virtual_used_mb,
virtual_remain_mb: pkg.virtual_remain_mb,
virtual_ratio: pkg.virtual_ratio,
activated_at: pkg.activated_at,
expires_at: pkg.expires_at,
created_at: pkg.created_at,
master_usage_id: pkg.master_usage_id,
priority: pkg.priority,
usage_type: pkg.usage_type
duration_days: undefined, // API 没有返回时长
virtual_ratio: pkg.virtual_ratio, // 虚流量比例
package_type: pkg.package_type // 套餐类型
}
// 同时更新流量显示信息
// 同时更新 cardInfo 中的流量显示信息
cardInfo.value.current_package = pkg.package_name
cardInfo.value.packageTotalFlow = formatDataSize(pkg.virtual_limit_mb || 0)
cardInfo.value.usedFlow = formatDataSize(pkg.virtual_used_mb || 0)
@@ -202,14 +210,17 @@ export function useAssetInfo() {
: '0.00%'
} else {
// code 为 0 但 data 为空,表示暂无当前生效套餐(正常情况)
currentPackage.value = null
currentPackageErrorMsg.value = '暂无当前生效套餐'
}
} else {
// 接口返回 code 不为 0,保存错误信息
currentPackage.value = null
currentPackageErrorMsg.value = response.msg || '获取当前套餐失败'
}
} catch (error: any) {
// 404表示无当前生效套餐,这是正常情况
currentPackage.value = null
if (error?.response?.status === 404) {
currentPackageErrorMsg.value = '暂无当前生效套餐'
} else {
@@ -319,11 +330,7 @@ export function useAssetInfo() {
await loadRealtimeStatus(identifier, assetType)
}
} catch (error: any) {
// 检查 429 错误(冷却期)
if (error?.response?.status === 429) {
ElMessage.warning('刷新过于频繁,请稍后再试')
}
throw error
console.log(error)
}
}