This commit is contained in:
@@ -36,7 +36,6 @@
|
||||
</ElButton>
|
||||
<ElButton
|
||||
type="primary"
|
||||
:disabled="selectedCards.length === 0"
|
||||
@click="showSeriesBindingDialog"
|
||||
v-permission="'iot_card:batch_setting'"
|
||||
>
|
||||
@@ -351,11 +350,97 @@
|
||||
ref="seriesBindingFormRef"
|
||||
:model="seriesBindingForm"
|
||||
:rules="seriesBindingRules"
|
||||
label-width="120px"
|
||||
label-width="100"
|
||||
>
|
||||
<ElFormItem label="已选择卡数">
|
||||
<ElFormItem label="选卡方式" prop="selection_type">
|
||||
<ElRadioGroup v-model="seriesBindingForm.selection_type">
|
||||
<ElRadio label="list">ICCID列表</ElRadio>
|
||||
<ElRadio label="range">号段范围</ElRadio>
|
||||
<ElRadio label="filter">筛选条件</ElRadio>
|
||||
</ElRadioGroup>
|
||||
</ElFormItem>
|
||||
<ElFormItem
|
||||
v-if="seriesBindingForm.selection_type === CardSelectionType.LIST"
|
||||
label="ICCID列表"
|
||||
>
|
||||
<div>已选择 {{ selectedCards.length }} 张卡</div>
|
||||
</ElFormItem>
|
||||
<ElFormItem
|
||||
v-if="seriesBindingForm.selection_type === CardSelectionType.RANGE"
|
||||
label="起始ICCID"
|
||||
prop="iccid_start"
|
||||
>
|
||||
<ElInput v-model="seriesBindingForm.iccid_start" placeholder="请输入起始ICCID" />
|
||||
</ElFormItem>
|
||||
<ElFormItem
|
||||
v-if="seriesBindingForm.selection_type === CardSelectionType.RANGE"
|
||||
label="结束ICCID"
|
||||
prop="iccid_end"
|
||||
>
|
||||
<ElInput v-model="seriesBindingForm.iccid_end" placeholder="请输入结束ICCID" />
|
||||
</ElFormItem>
|
||||
<ElFormItem
|
||||
v-if="seriesBindingForm.selection_type === CardSelectionType.FILTER"
|
||||
label="运营商"
|
||||
>
|
||||
<ElSelect
|
||||
v-model="seriesBindingForm.carrier_id"
|
||||
placeholder="请选择或搜索运营商"
|
||||
clearable
|
||||
filterable
|
||||
remote
|
||||
:remote-method="handleSearchAllocateCarrier"
|
||||
:loading="allocateCarrierLoading"
|
||||
style="width: 100%"
|
||||
>
|
||||
<ElOption
|
||||
v-for="item in allocateCarrierOptions"
|
||||
:key="item.id"
|
||||
:label="item.carrier_name"
|
||||
:value="item.id"
|
||||
/>
|
||||
</ElSelect>
|
||||
</ElFormItem>
|
||||
<ElFormItem
|
||||
v-if="seriesBindingForm.selection_type === CardSelectionType.FILTER"
|
||||
label="卡状态"
|
||||
>
|
||||
<ElSelect
|
||||
v-model="seriesBindingForm.status"
|
||||
placeholder="请选择状态"
|
||||
clearable
|
||||
style="width: 100%"
|
||||
>
|
||||
<ElOption label="在库" :value="1" />
|
||||
<ElOption label="已分销" :value="2" />
|
||||
<ElOption label="已激活" :value="3" />
|
||||
<ElOption label="已停用" :value="4" />
|
||||
</ElSelect>
|
||||
</ElFormItem>
|
||||
<ElFormItem
|
||||
v-if="
|
||||
seriesBindingForm.selection_type === CardSelectionType.FILTER &&
|
||||
userInfo.user_type !== 3
|
||||
"
|
||||
label="批次号"
|
||||
>
|
||||
<ElSelect
|
||||
v-model="seriesBindingForm.batch_no"
|
||||
placeholder="请选择或搜索批次号"
|
||||
clearable
|
||||
filterable
|
||||
remote
|
||||
:remote-method="handleSearchAllocateBatchNo"
|
||||
style="width: 100%"
|
||||
>
|
||||
<ElOption
|
||||
v-for="item in allocateBatchNoOptions"
|
||||
:key="item.id"
|
||||
:label="item.batch_no"
|
||||
:value="item.batch_no"
|
||||
/>
|
||||
</ElSelect>
|
||||
</ElFormItem>
|
||||
<ElFormItem label="套餐系列" prop="series_id">
|
||||
<ElSelect
|
||||
v-model="seriesBindingForm.series_id"
|
||||
@@ -550,6 +635,7 @@
|
||||
AllocateStandaloneCardsRequest,
|
||||
RecallStandaloneCardsRequest,
|
||||
AllocateStandaloneCardsResponse,
|
||||
BatchSetCardSeriesBindingRequest,
|
||||
BatchSetCardSeriesBindingResponse
|
||||
} from '@/types/api/card'
|
||||
import { CardSelectionType } from '@/types/api/card'
|
||||
@@ -593,11 +679,45 @@
|
||||
const seriesBindingFormRef = ref<FormInstance>()
|
||||
const seriesLoading = ref(false)
|
||||
const packageSeriesList = ref<PackageSeriesResponse[]>([])
|
||||
const seriesBindingForm = reactive({
|
||||
series_id: undefined as number | undefined
|
||||
const createInitialSeriesBindingState = () => ({
|
||||
selection_type: CardSelectionType.LIST,
|
||||
series_id: undefined as number | undefined,
|
||||
iccid_start: '',
|
||||
iccid_end: '',
|
||||
carrier_id: undefined as number | undefined,
|
||||
status: undefined as StandaloneCardStatus | undefined,
|
||||
batch_no: ''
|
||||
})
|
||||
const seriesBindingForm = reactive(createInitialSeriesBindingState())
|
||||
const seriesBindingRules = reactive<FormRules>({
|
||||
series_id: [{ required: true, message: '请选择套餐系列', trigger: 'change' }]
|
||||
selection_type: [{ required: true, message: '请选择选卡方式', trigger: 'change' }],
|
||||
series_id: [{ required: true, message: '请选择套餐系列', trigger: 'change' }],
|
||||
iccid_start: [
|
||||
{
|
||||
required: true,
|
||||
validator: (_rule, value, callback) => {
|
||||
if (seriesBindingForm.selection_type === CardSelectionType.RANGE && !value) {
|
||||
callback(new Error('请输入起始ICCID'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
},
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
iccid_end: [
|
||||
{
|
||||
required: true,
|
||||
validator: (_rule, value, callback) => {
|
||||
if (seriesBindingForm.selection_type === CardSelectionType.RANGE && !value) {
|
||||
callback(new Error('请输入结束ICCID'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
},
|
||||
trigger: 'blur'
|
||||
}
|
||||
]
|
||||
})
|
||||
const seriesBindingResult = ref<BatchSetCardSeriesBindingResponse>({
|
||||
success_count: 0,
|
||||
@@ -1127,7 +1247,6 @@
|
||||
{ label: '最后实名检查时间', prop: 'last_real_name_check_at' },
|
||||
{ label: '启用轮询', prop: 'enable_polling' },
|
||||
{ label: '批次号', prop: 'batch_no' },
|
||||
{ label: '供应商', prop: 'supplier' },
|
||||
{ label: '创建时间', prop: 'created_at' },
|
||||
{ label: '更新时间', prop: 'updated_at' }
|
||||
]
|
||||
@@ -1274,12 +1393,14 @@
|
||||
prop: 'shop_name',
|
||||
label: '店铺名称',
|
||||
minWidth: 150,
|
||||
showOverflowTooltip: true,
|
||||
formatter: (row: StandaloneIotCard) => row.shop_name || '-'
|
||||
},
|
||||
{
|
||||
prop: 'series_name',
|
||||
label: '套餐系列',
|
||||
width: 150,
|
||||
width: 180,
|
||||
showOverflowTooltip: true,
|
||||
formatter: (row: StandaloneIotCard) => row.series_name || '-'
|
||||
},
|
||||
{
|
||||
@@ -1393,12 +1514,6 @@
|
||||
width: 200,
|
||||
showOverflowTooltip: true
|
||||
},
|
||||
{
|
||||
prop: 'supplier',
|
||||
label: '供应商',
|
||||
width: 150,
|
||||
formatter: (row: StandaloneIotCard) => row.supplier || '-'
|
||||
},
|
||||
{
|
||||
prop: 'created_at',
|
||||
label: '创建时间',
|
||||
@@ -1707,19 +1822,17 @@
|
||||
|
||||
// 显示套餐系列绑定对话框
|
||||
const showSeriesBindingDialog = async () => {
|
||||
if (selectedCards.value.length === 0) {
|
||||
ElMessage.warning('请先选择要设置的卡')
|
||||
return
|
||||
}
|
||||
|
||||
// 加载套餐系列列表
|
||||
await loadPackageSeriesList()
|
||||
|
||||
Object.assign(seriesBindingForm, createInitialSeriesBindingState(), {
|
||||
selection_type:
|
||||
selectedCards.value.length > 0 ? CardSelectionType.LIST : CardSelectionType.FILTER
|
||||
})
|
||||
await Promise.all([
|
||||
loadPackageSeriesList(),
|
||||
loadAllocateCarrierOptions(),
|
||||
loadAllocateBatchNoOptions()
|
||||
])
|
||||
seriesBindingDialogVisible.value = true
|
||||
seriesBindingForm.series_id = undefined
|
||||
if (seriesBindingFormRef.value) {
|
||||
seriesBindingFormRef.value.resetFields()
|
||||
}
|
||||
seriesBindingFormRef.value?.clearValidate()
|
||||
}
|
||||
|
||||
// 加载套餐系列列表(支持名称搜索,默认20条)
|
||||
@@ -1752,6 +1865,7 @@
|
||||
|
||||
// 关闭套餐系列绑定对话框
|
||||
const handleSeriesBindingDialogClose = () => {
|
||||
Object.assign(seriesBindingForm, createInitialSeriesBindingState())
|
||||
if (seriesBindingFormRef.value) {
|
||||
seriesBindingFormRef.value.resetFields()
|
||||
}
|
||||
@@ -1769,19 +1883,30 @@
|
||||
|
||||
await seriesBindingFormRef.value.validate(async (valid) => {
|
||||
if (valid) {
|
||||
const iccids = selectedCards.value.map((card) => card.iccid)
|
||||
|
||||
if (iccids.length === 0) {
|
||||
ElMessage.warning('请先选择要设置的卡')
|
||||
return
|
||||
}
|
||||
|
||||
seriesBindingLoading.value = true
|
||||
try {
|
||||
const res = await CardService.batchSetCardSeriesBinding({
|
||||
iccids,
|
||||
const request: BatchSetCardSeriesBindingRequest = {
|
||||
selection_type: seriesBindingForm.selection_type,
|
||||
series_id: seriesBindingForm.series_id!
|
||||
})
|
||||
}
|
||||
|
||||
if (seriesBindingForm.selection_type === CardSelectionType.LIST) {
|
||||
const iccids = selectedCards.value.map((card) => card.iccid)
|
||||
if (iccids.length === 0) {
|
||||
ElMessage.warning('列表模式下请先选择要设置的卡')
|
||||
return
|
||||
}
|
||||
request.iccids = iccids
|
||||
} else if (seriesBindingForm.selection_type === CardSelectionType.RANGE) {
|
||||
request.iccid_start = seriesBindingForm.iccid_start
|
||||
request.iccid_end = seriesBindingForm.iccid_end
|
||||
} else {
|
||||
if (seriesBindingForm.carrier_id) request.carrier_id = seriesBindingForm.carrier_id
|
||||
if (seriesBindingForm.status) request.status = seriesBindingForm.status
|
||||
if (seriesBindingForm.batch_no) request.batch_no = seriesBindingForm.batch_no
|
||||
}
|
||||
|
||||
const res = await CardService.batchSetCardSeriesBinding(request)
|
||||
|
||||
if (res.code === 0) {
|
||||
seriesBindingResult.value = res.data
|
||||
@@ -1833,6 +1958,7 @@
|
||||
.then(async () => {
|
||||
try {
|
||||
const res = await CardService.batchSetCardSeriesBinding({
|
||||
selection_type: CardSelectionType.LIST,
|
||||
iccids: selectedCards.value.map((card) => card.iccid),
|
||||
series_id: 0
|
||||
})
|
||||
@@ -1885,6 +2011,7 @@
|
||||
.then(async () => {
|
||||
try {
|
||||
const res = await CardService.batchSetCardSeriesBinding({
|
||||
selection_type: CardSelectionType.LIST,
|
||||
iccids: [iccid],
|
||||
series_id: 0
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user