This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 || '-'
|
||||
},
|
||||
{
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -384,7 +384,8 @@
|
||||
{
|
||||
prop: 'carrier_name',
|
||||
label: '运营商',
|
||||
width: 120
|
||||
width: 120,
|
||||
showOverflowTooltip: true
|
||||
},
|
||||
{
|
||||
prop: 'card_category',
|
||||
|
||||
Reference in New Issue
Block a user