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 @@ - + @@ -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 } })