diff --git a/src/views/virtualization/VmDetail.vue b/src/views/virtualization/VmDetail.vue
index 60d3aa9..1bd8a61 100644
--- a/src/views/virtualization/VmDetail.vue
+++ b/src/views/virtualization/VmDetail.vue
@@ -1029,7 +1029,12 @@
-
+ handleNetCreate('dataMigrate')" />
@@ -2142,13 +2147,14 @@ const dataMigrateTaskId = ref('')
const dataMigrateForm = reactive({ target_service_id: null, target_host_id: null, ipv4_num: 0, ipv6_num: 0, network_ids: [] })
const dataMigrateNetworkOptions = ref([])
const showDataMigrateNetworkSelector = ref(false)
+const dataMigrateNetSelectorRef = ref(null)
const dataMigrateSelectedNetworks = ref([])
-const handleDataMigrateNetworkConfirm = (network) => {
- if (!dataMigrateSelectedNetworks.value.some(n => n.id === network.id)) {
- dataMigrateSelectedNetworks.value.push({ id: network.id, name: network.name })
- dataMigrateForm.network_ids = dataMigrateSelectedNetworks.value.map(n => n.id)
- }
+const handleDataMigrateNetworkConfirm = (items) => {
+ const arr = Array.isArray(items) ? items : [items]
+ const existIds = new Set(dataMigrateSelectedNetworks.value.map(n => n.id))
+ arr.forEach(n => { if (!existIds.has(n.id)) dataMigrateSelectedNetworks.value.push(n) })
+ dataMigrateForm.network_ids = dataMigrateSelectedNetworks.value.map(n => n.id)
}
const removeDataMigrateNetwork = (id) => {
dataMigrateSelectedNetworks.value = dataMigrateSelectedNetworks.value.filter(n => n.id !== id)
@@ -2452,7 +2458,8 @@ const netFormRules = {
const handleNetCreate = (source = '') => {
netDialogSource.value = source
netDialogType.value = 'add'
- Object.assign(netForm, { id: 0, name: '', address: '', gateway: '', nameservers: '', type: 'bridge', mac_address: '', bridge_name: '', ls_bridge_name: '', ls_name: '', host_id: vmHostId.value })
+ const hostId = source === 'dataMigrate' ? (dataMigrateForm.target_host_id || vmHostId.value) : vmHostId.value
+ Object.assign(netForm, { id: 0, name: '', address: '', gateway: '', nameservers: '', type: 'bridge', mac_address: '', bridge_name: '', ls_bridge_name: '', ls_name: '', host_id: hostId })
netDialogVisible.value = true
}
const handleNetDialogCancel = () => {
@@ -2465,6 +2472,7 @@ const handleNetDialogCancel = () => {
else if (src === 'refactorInternal') showRefactorInternalNetworkSelector.value = true
else if (src === 'bindBridge') showNetBindBridgeSelector.value = true
else if (src === 'bindNat') showNetBindNatSelector.value = true
+ else if (src === 'dataMigrate') showDataMigrateNetworkSelector.value = true
}
const handleNetEdit = (row) => {
@@ -2478,7 +2486,8 @@ const submitNetForm = () => {
actionLoading.value = true
try {
const fd = new FormData()
- fd.append('service_id', serviceId.value)
+ const sid = netDialogSource.value === 'dataMigrate' && dataMigrateForm.target_service_id ? dataMigrateForm.target_service_id : serviceId.value
+ fd.append('service_id', sid)
fd.append('name', netForm.name)
fd.append('address', netForm.address)
fd.append('gateway', netForm.gateway)
@@ -2492,7 +2501,22 @@ const submitNetForm = () => {
let res
if (netDialogType.value === 'add') { res = await createNetwork(fd) }
else { fd.append('id', netForm.id); res = await updateNetwork(fd) }
- if (res?.data?.code === 200) { ElMessage.success(netDialogType.value === 'add' ? '创建成功' : '修改成功'); netDialogVisible.value = false; loadDetail() }
+ if (res?.data?.code === 200) {
+ ElMessage.success(netDialogType.value === 'add' ? '创建成功' : '修改成功')
+ netDialogVisible.value = false
+ const src = netDialogSource.value
+ netDialogSource.value = ''
+ if (src === 'dataMigrate') { nextTick(() => dataMigrateNetSelectorRef.value?.loadList()) }
+ else {
+ if (src === 'edit') showEditNetworkSelector.value = true
+ else if (src === 'editInternal') showEditInternalNetworkSelector.value = true
+ else if (src === 'refactor') showRefactorNetworkSelector.value = true
+ else if (src === 'refactorInternal') showRefactorInternalNetworkSelector.value = true
+ else if (src === 'bindBridge') showNetBindBridgeSelector.value = true
+ else if (src === 'bindNat') showNetBindNatSelector.value = true
+ loadDetail()
+ }
+ }
else ElMessage.error(extractApiError(res?.data, '操作失败'))
} catch (e) { ElMessage.error(extractApiError(e?.response?.data, '操作失败')) } finally { actionLoading.value = false }
})