fix: bug
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 2m27s

This commit is contained in:
sexygoat
2026-04-11 16:51:54 +08:00
parent 33e15314ac
commit 4f02d6faf0
25 changed files with 387 additions and 317 deletions

View File

@@ -15,9 +15,17 @@
reserve-keyword
:remote-method="handlePackageSearch"
:loading="packageSearchLoading"
:disabled="!props.seriesId"
clearable
style="width: 100%"
>
<template v-if="!props.seriesId">
<ElOption :value="null" disabled>
<span style="color: var(--el-text-color-warning)"
>该设备未关联套餐系列无法购买套餐</span
>
</ElOption>
</template>
<ElOption
v-for="pkg in packageOptions"
:key="pkg.id"
@@ -143,32 +151,54 @@
// 监听对话框打开,加载套餐列表
watch(visible, async (newVal) => {
if (newVal) {
if (!props.seriesId) {
packageOptions.value = []
return
}
await loadPackages()
}
})
// 监听 seriesId 变化,重新加载套餐列表
watch(
() => props.seriesId,
async (newSeriesId) => {
if (visible.value && newSeriesId) {
await loadPackages()
}
}
)
let loadPackagesPromise: Promise<void> | null = null
const loadPackages = async () => {
if (!props.seriesId) return
// 防止重复调用
if (loadPackagesPromise) return
try {
packageSearchLoading.value = true
const response = await PackageManageService.getPackages({
loadPackagesPromise = PackageManageService.getPackages({
series_id: props.seriesId,
page: 1,
page_size: 20,
status: 1, // 只获取启用的套餐
shelf_status: 1 // 只获取已上架的套餐
})
if (response.code === 0 && response.data) {
packageOptions.value = response.data.items || []
}
.then((response) => {
if (response.code === 0 && response.data) {
packageOptions.value = response.data.items || []
}
})
.finally(() => {
packageSearchLoading.value = false
loadPackagesPromise = null
})
await loadPackagesPromise
} catch (error: any) {
console.error('加载套餐列表失败:', error)
console.log(error?.message || '加载套餐列表失败')
} finally {
packageSearchLoading.value = false
}
}

View File

@@ -1045,14 +1045,12 @@
{
prop: 'max_sim_slots',
label: '最大插槽数',
width: 100,
align: 'center'
width: 100
},
{
prop: 'bound_card_count',
label: '已绑定卡数',
width: 110,
align: 'center',
formatter: (row: Device) => {
const color = row.bound_card_count > 0 ? '#67c23a' : '#909399'
return h('span', { style: { color, fontWeight: 'bold' } }, row.bound_card_count)
@@ -1091,6 +1089,7 @@
prop: 'software_version',
label: '固件版本',
width: 120,
showOverflowTooltip: true,
formatter: (row: Device) => row.software_version || '-'
},
{

View File

@@ -1015,13 +1015,15 @@
{
prop: 'virtual_no',
label: '卡虚拟号',
width: 160,
width: 180,
showOverflowTooltip: true,
formatter: (row: StandaloneIotCard) => row.virtual_no || '-'
},
{
prop: 'device_virtual_no',
label: '绑定设备虚拟号',
width: 160,
width: 180,
showOverflowTooltip: true,
formatter: (row: StandaloneIotCard) => row.device_virtual_no || '-'
},
{
@@ -1033,7 +1035,8 @@
{
prop: 'carrier_name',
label: '运营商',
width: 150
width: 150,
showOverflowTooltip: true
},
{
prop: 'shop_name',

View File

@@ -384,7 +384,8 @@
{
prop: 'carrier_name',
label: '运营商',
width: 120
width: 120,
showOverflowTooltip: true
},
{
prop: 'card_category',