fix: 提交修改
Build and Deploy Vue3 / build (push) Successful in 1m31s
Build and Deploy Vue3 / deploy (push) Successful in 1m9s

This commit is contained in:
2026-04-15 16:02:36 +08:00
parent 2f06aa9f5f
commit b3ed406f84
61 changed files with 7476 additions and 7226 deletions
+26 -21
View File
@@ -77,7 +77,12 @@
<el-dialog v-model="createDialogVisible" title="创建数据卷" width="560px" destroy-on-close>
<el-form ref="createFormRef" :model="createForm" :rules="createRules" label-width="110px">
<el-form-item label="名称" prop="name"><el-input v-model="createForm.name" placeholder="数据卷名称" /></el-form-item>
<el-form-item label="大小(GB)" prop="size"><el-input-number v-model="createForm.size" :min="1" controls-position="right" style="width: 100%" /></el-form-item>
<el-form-item label="大小" prop="size">
<div class="unit-input-row">
<el-input-number v-model="createForm.size" :min="1" controls-position="right" style="flex:1" />
<el-select v-model="createForm._sizeUnit" class="unit-select"><el-option label="GB" value="GB" /><el-option label="TB" value="TB" /></el-select>
</div>
</el-form-item>
<el-form-item label="宿主机" prop="host_id">
<el-select v-model="createForm.host_id" placeholder="选择宿主机" filterable style="width: 100%">
<el-option v-for="h in hostOptions" :key="h.id" :label="`${h.name} (${h.ip || h.id})`" :value="h.id" />
@@ -110,8 +115,11 @@
<el-dialog v-model="resizeDialogVisible" title="调整数据卷大小" width="400px" destroy-on-close>
<el-form label-width="100px">
<el-form-item label="当前大小">{{ resizeTarget?.size || 0 }} GB</el-form-item>
<el-form-item label="新大小(GB)">
<el-input-number v-model="newSize" :min="1" controls-position="right" style="width: 100%" />
<el-form-item label="新大小">
<div class="unit-input-row">
<el-input-number v-model="resizeForm.size" :min="1" controls-position="right" style="flex:1" />
<el-select v-model="resizeForm._sizeUnit" class="unit-select"><el-option label="GB" value="GB" /><el-option label="TB" value="TB" /></el-select>
</div>
</el-form-item>
</el-form>
<template #footer>
@@ -236,7 +244,7 @@ const createFormRef = ref(null)
const resizeDialogVisible = ref(false)
const mountDialogVisible = ref(false)
const resizeTarget = ref(null)
const newSize = ref(1)
const resizeForm = reactive({ size: 1, _sizeUnit: 'GB' })
const mountTarget = ref(null)
const mountVmId = ref(0)
const mountVmName = ref('')
@@ -262,7 +270,7 @@ const showVmSelector = ref(false)
const showMountVmSelector = ref(false)
const createForm = reactive({
name: '', size: 10, host_id: 0, is_system: false,
name: '', size: 10, _sizeUnit: 'GB', host_id: 0, is_system: false,
image_id: 0, vm_id: 0, target_device: '',
_imageName: '', _vmName: ''
})
@@ -301,7 +309,7 @@ const handleSearch = () => { queryParams.page = 1; loadList() }
const handleAdd = () => {
Object.assign(createForm, {
name: '', size: 10, host_id: hostId.value || '',
name: '', size: 10, _sizeUnit: 'GB', host_id: hostId.value || '',
is_system: false, image_id: '', vm_id: '', target_device: '',
_imageName: '', _vmName: ''
})
@@ -313,9 +321,10 @@ const submitCreate = () => {
if (!valid) return
submitLoading.value = true
try {
const sizeGb = createForm._sizeUnit === 'TB' ? createForm.size * 1024 : createForm.size
const payload = {
service_id: serviceId.value,
name: createForm.name, size: createForm.size,
name: createForm.name, size: sizeGb,
host_id: createForm.host_id, is_system: createForm.is_system
}
if (createForm.image_id) payload.image_id = createForm.image_id
@@ -328,12 +337,18 @@ const submitCreate = () => {
})
}
const handleResize = (row) => { resizeTarget.value = row; newSize.value = row.size || 10; resizeDialogVisible.value = true }
const handleResize = (row) => {
resizeTarget.value = row
resizeForm.size = row.size || 10
resizeForm._sizeUnit = 'GB'
resizeDialogVisible.value = true
}
const submitResize = async () => {
submitLoading.value = true
try {
const res = await resizeVolume({ service_id: serviceId.value, volume_id: resizeTarget.value.id, size: newSize.value })
const sizeGb = resizeForm._sizeUnit === 'TB' ? resizeForm.size * 1024 : resizeForm.size
const res = await resizeVolume({ service_id: serviceId.value, volume_id: resizeTarget.value.id, size: sizeGb })
if (res?.data?.code === 200) { ElMessage.success('调整成功'); resizeDialogVisible.value = false; loadList() }
else ElMessage.error(extractApiError(res?.data, '调整失败'))
} catch (e) { ElMessage.error(extractApiError(e?.response?.data, '调整失败')) } finally { submitLoading.value = false }
@@ -434,16 +449,6 @@ defineExpose({ loadList })
<style scoped>
.volume-manage-container { padding: 20px; }
.page-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; padding-bottom: 16px; border-bottom: 1px solid #ebeef5; }
.header-left { display: flex; align-items: center; gap: 16px; }
.header-info h3 { margin: 0; font-size: 18px; color: #303133; }
.sub-info { font-size: 13px; color: #909399; }
.header-right { display: flex; gap: 8px; }
.embedded-toolbar { display: flex; align-items: center; gap: 8px; margin-bottom: 16px; }
.filter-bar { display: flex; gap: 12px; margin-bottom: 16px; }
.pagination-wrapper { display: flex; justify-content: flex-end; margin-top: 16px; }
.bind-selector-row { display: flex; align-items: center; width: 100%; }
.mono-text { font-family: 'Consolas', monospace; color: #409eff; font-size: 13px; }
:deep(.el-table) { --el-table-header-bg-color: #fafafa; }
:deep(.el-table th) { font-weight: 600; color: #303133; font-size: 13px; }
.unit-input-row { display: flex; align-items: center; gap: 6px; width: 100%; }
.unit-select { width: 90px; flex-shrink: 0; }
</style>