feat: 对接虚拟化平台管理
Build and Deploy Vue3 / build (push) Successful in 1m22s
Build and Deploy Vue3 / deploy (push) Successful in 1m2s

This commit is contained in:
2026-03-19 18:13:24 +08:00
parent cd16ec17ae
commit cf19956b88
24 changed files with 5000 additions and 807 deletions
+14 -13
View File
@@ -198,6 +198,7 @@ import {
getRemoteHostList, getVolumeList, getVolumeDetail,
createVolume, resizeVolume, mountVolume, unmountVolume, transferVolume, deleteVolume
} from '@/api/admin/kvmService'
import { extractApiError } from '@/utils/kvmErrorUtil'
import ImageSelectorPopup from '@/components/admin/ImageSelectorPopup.vue'
import VmSelectorPopup from '@/components/admin/VmSelectorPopup.vue'
@@ -310,7 +311,7 @@ const loadList = async () => {
volumeList.value = inner.data || inner.volumes || (Array.isArray(inner) ? inner : [])
total.value = inner.meta?.count ?? inner.all_count ?? inner.total ?? volumeList.value.length
} else { volumeList.value = []; total.value = 0 }
} catch (e) { ElMessage.error('获取数据卷列表失败') } finally { loading.value = false }
} catch (e) { ElMessage.error(extractApiError(e?.response?.data, '获取数据卷列表失败')) } finally { loading.value = false }
}
const handleSearch = () => { queryParams.page = 1; loadList() }
@@ -339,8 +340,8 @@ const submitCreate = () => {
if (createForm.target_device) payload.target_device = createForm.target_device
const res = await createVolume(payload)
if (res?.data?.code === 200) { ElMessage.success('创建成功'); createDialogVisible.value = false; loadList() }
else ElMessage.error(res?.data?.message || '创建失败')
} catch (e) { ElMessage.error('创建失败: ' + (e?.response?.data?.message || e.message)) } finally { submitLoading.value = false }
else ElMessage.error(extractApiError(res?.data, '创建失败'))
} catch (e) { ElMessage.error(extractApiError(e?.response?.data, '创建失败')) } finally { submitLoading.value = false }
})
}
@@ -351,8 +352,8 @@ const submitResize = async () => {
try {
const res = await resizeVolume({ service_id: serviceId.value, volume_id: resizeTarget.value.id, size: newSize.value })
if (res?.data?.code === 200) { ElMessage.success('调整成功'); resizeDialogVisible.value = false; loadList() }
else ElMessage.error(res?.data?.message || '调整失败')
} catch (e) { ElMessage.error('调整失败') } finally { submitLoading.value = false }
else ElMessage.error(extractApiError(res?.data, '调整失败'))
} catch (e) { ElMessage.error(extractApiError(e?.response?.data, '调整失败')) } finally { submitLoading.value = false }
}
const handleMount = (row) => {
@@ -366,8 +367,8 @@ const submitMount = async () => {
try {
const res = await mountVolume({ service_id: serviceId.value, volume_id: mountTarget.value.id, vm_id: mountVmId.value })
if (res?.data?.code === 200) { ElMessage.success('挂载成功'); mountDialogVisible.value = false; loadList() }
else ElMessage.error(res?.data?.message || '挂载失败')
} catch (e) { ElMessage.error('挂载失败') } finally { submitLoading.value = false }
else ElMessage.error(extractApiError(res?.data, '挂载失败'))
} catch (e) { ElMessage.error(extractApiError(e?.response?.data, '挂载失败')) } finally { submitLoading.value = false }
}
const handleUnmount = (row) => {
@@ -377,8 +378,8 @@ const handleUnmount = (row) => {
try {
const res = await unmountVolume({ service_id: serviceId.value, volume_id: row.id })
if (res?.data?.code === 200) { ElMessage.success('卸载成功'); loadList() }
else ElMessage.error(res?.data?.message || '卸载失败')
} catch (e) { ElMessage.error('卸载失败') }
else ElMessage.error(extractApiError(res?.data, '卸载失败'))
} catch (e) { ElMessage.error(extractApiError(e?.response?.data, '卸载失败')) }
}).catch(() => {})
}
@@ -403,9 +404,9 @@ const submitTransfer = async () => {
transferDialogVisible.value = false
loadList()
} else {
ElMessage.error(res?.data?.message || '迁移失败')
ElMessage.error(extractApiError(res?.data, '迁移失败'))
}
} catch (e) { ElMessage.error('迁移失败: ' + (e?.response?.data?.message || e.message)) }
} catch (e) { ElMessage.error(extractApiError(e?.response?.data, '迁移失败')) }
finally { transferLoading.value = false }
}
@@ -430,8 +431,8 @@ const handleDelete = (row) => {
try {
const res = await deleteVolume({ service_id: serviceId.value, volume_id: row.id })
if (res?.data?.code === 200) { ElMessage.success('删除成功'); loadList() }
else ElMessage.error(res?.data?.message || '删除失败')
} catch (e) { ElMessage.error('删除失败') }
else ElMessage.error(extractApiError(res?.data, '删除失败'))
} catch (e) { ElMessage.error(extractApiError(e?.response?.data, '删除失败')) }
}).catch(() => {})
}