parent
8dffb3fe8f
commit
be5dd88986
After Width: | Height: | Size: 863 B |
After Width: | Height: | Size: 963 B |
After Width: | Height: | Size: 587 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.0 KiB |
@ -0,0 +1,312 @@ |
|||||||
|
<template> |
||||||
|
<div class="app-container"> |
||||||
|
<el-card shadow="never"> |
||||||
|
<template #header> |
||||||
|
<div style="display: flex; align-items: center"> |
||||||
|
<el-icon size="15"><Grid /></el-icon> <span |
||||||
|
style="font-weight: 700; font-size: 14px; line-height: 16px" |
||||||
|
>新增设备类型信息</span |
||||||
|
> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<el-form |
||||||
|
v-loading="loading" |
||||||
|
:model="formData" |
||||||
|
ref="addDeviceTypeRef" |
||||||
|
:rules="rules" |
||||||
|
> |
||||||
|
<el-descriptions :column="2" border> |
||||||
|
<el-descriptions-item |
||||||
|
label="设备供应商" |
||||||
|
label-align="left" |
||||||
|
align="center" |
||||||
|
label-class-name="my-label" |
||||||
|
class-name="my-content" |
||||||
|
width="150px" |
||||||
|
> |
||||||
|
<el-form-item prop="devVendorName"> |
||||||
|
<el-input |
||||||
|
v-model="formData.devVendorName" |
||||||
|
style="width: 200px; margin-right: 10px" |
||||||
|
/> |
||||||
|
<el-select |
||||||
|
v-model="formData.devVendorName" |
||||||
|
clearable |
||||||
|
filterable |
||||||
|
placeholder="请选择设备供应商" |
||||||
|
style="width: 180px" |
||||||
|
> |
||||||
|
<el-option |
||||||
|
v-for="item in vendorNameOption" |
||||||
|
:key="item.value" |
||||||
|
:label="item.label" |
||||||
|
:value="item.value" |
||||||
|
/> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
</el-descriptions-item> |
||||||
|
<el-descriptions-item |
||||||
|
label="设备OUI" |
||||||
|
label-align="left" |
||||||
|
align="center" |
||||||
|
label-class-name="my-label" |
||||||
|
class-name="my-content" |
||||||
|
width="150px" |
||||||
|
> |
||||||
|
<el-form-item prop="devVendorOui"> |
||||||
|
<el-input |
||||||
|
v-model="formData.devVendorOui" |
||||||
|
style="width: 200px; margin-right: 10px" |
||||||
|
/> |
||||||
|
<el-select |
||||||
|
v-model="formData.devVendorOui" |
||||||
|
clearable |
||||||
|
filterable |
||||||
|
placeholder="请选择设备OUI" |
||||||
|
style="width: 180px" |
||||||
|
> |
||||||
|
<el-option |
||||||
|
v-for="item in vendorOuiOption" |
||||||
|
:key="item.value" |
||||||
|
:label="item.label" |
||||||
|
:value="item.value" |
||||||
|
/> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
</el-descriptions-item> |
||||||
|
<el-descriptions-item |
||||||
|
label="设备型号" |
||||||
|
label-align="left" |
||||||
|
align="center" |
||||||
|
label-class-name="my-label" |
||||||
|
class-name="my-content" |
||||||
|
width="150px" |
||||||
|
> |
||||||
|
<el-form-item prop="devTypeName"> |
||||||
|
<el-input |
||||||
|
v-model="formData.devTypeName" |
||||||
|
style="width: 200px; margin-right: 10px" |
||||||
|
/> |
||||||
|
<el-select |
||||||
|
v-model="formData.devTypeName" |
||||||
|
clearable |
||||||
|
filterable |
||||||
|
placeholder="请选择设备型号" |
||||||
|
style="width: 180px" |
||||||
|
> |
||||||
|
<el-option |
||||||
|
v-for="item in typeNameOption" |
||||||
|
:key="item.value" |
||||||
|
:label="item.label" |
||||||
|
:value="item.value" |
||||||
|
/> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
</el-descriptions-item> |
||||||
|
<el-descriptions-item |
||||||
|
label="设备硬件版本" |
||||||
|
label-align="left" |
||||||
|
align="center" |
||||||
|
label-class-name="my-label" |
||||||
|
class-name="my-content" |
||||||
|
width="150px" |
||||||
|
> |
||||||
|
<el-form-item prop="devHardVer"> |
||||||
|
<el-input |
||||||
|
v-model="formData.devHardVer" |
||||||
|
style="width: 200px; margin-right: 10px" |
||||||
|
/> |
||||||
|
<el-select |
||||||
|
v-model="formData.devHardVer" |
||||||
|
clearable |
||||||
|
filterable |
||||||
|
placeholder="设备硬件版本" |
||||||
|
style="width: 180px" |
||||||
|
> |
||||||
|
<el-option |
||||||
|
v-for="item in hardVerOption" |
||||||
|
:key="item.value" |
||||||
|
:label="item.label" |
||||||
|
:value="item.value" |
||||||
|
/> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
</el-descriptions-item> |
||||||
|
<el-descriptions-item |
||||||
|
label="设备类型描述" |
||||||
|
label-align="left" |
||||||
|
align="center" |
||||||
|
label-class-name="my-label" |
||||||
|
class-name="my-content" |
||||||
|
width="150px" |
||||||
|
> |
||||||
|
<el-form-item prop="devTypeDesc"> |
||||||
|
<el-input v-model="formData.devTypeDesc" type="textarea" /> |
||||||
|
</el-form-item> |
||||||
|
</el-descriptions-item> |
||||||
|
</el-descriptions> |
||||||
|
</el-form> |
||||||
|
<template #footer> |
||||||
|
<div class="flex justify-end"> |
||||||
|
<el-button type="primary" @click="submitForm(addDeviceTypeRef)" |
||||||
|
>保存</el-button |
||||||
|
> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
</el-card> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script setup lang="ts"> |
||||||
|
import { Grid } from "@element-plus/icons-vue"; |
||||||
|
import { DeviceTypeForm } from "@/api/device-type/types"; |
||||||
|
import { |
||||||
|
addDeviceType, |
||||||
|
getHardVerOption, |
||||||
|
getTypeNameOption, |
||||||
|
getVendorNameOption, |
||||||
|
getVendorOuiOption, |
||||||
|
} from "@/api/device-type"; |
||||||
|
import { FormInstance, FormRules } from "element-plus"; |
||||||
|
import { confirm } from "@/utils/confirm"; |
||||||
|
const formData = ref<DeviceTypeForm>({ |
||||||
|
devTypeName: "", |
||||||
|
devVendorOui: "", |
||||||
|
devHardVer: "", |
||||||
|
devVendorName: "", |
||||||
|
}); |
||||||
|
const loading = ref<boolean>(false); |
||||||
|
const addDeviceTypeRef = ref<FormInstance>(); |
||||||
|
const vendorNameOption = ref<OptionType[]>([]); |
||||||
|
const vendorOuiOption = ref<OptionType[]>([]); |
||||||
|
const typeNameOption = ref<OptionType[]>([]); |
||||||
|
const hardVerOption = ref<OptionType[]>([]); |
||||||
|
const rules = reactive<FormRules<DeviceTypeForm>>({ |
||||||
|
devVendorName: [ |
||||||
|
{ required: true, message: "请选择或输入设备供应商", trigger: "blur" }, |
||||||
|
{ |
||||||
|
min: 3, |
||||||
|
max: 64, |
||||||
|
message: "设备供应商长度大于最小64字符长度", |
||||||
|
trigger: "blur", |
||||||
|
}, |
||||||
|
], |
||||||
|
devTypeName: [ |
||||||
|
{ required: true, message: "请选择或输入设备型号", trigger: "blur" }, |
||||||
|
{ |
||||||
|
min: 3, |
||||||
|
max: 64, |
||||||
|
message: "设备型号长度大于最小64字符长度", |
||||||
|
trigger: "blur", |
||||||
|
}, |
||||||
|
], |
||||||
|
devHardVer: [ |
||||||
|
{ required: true, message: "请选择或输入设备硬件版本", trigger: "blur" }, |
||||||
|
{ |
||||||
|
min: 3, |
||||||
|
max: 64, |
||||||
|
message: "设备硬件版本长度大于最小64字符长度", |
||||||
|
trigger: "blur", |
||||||
|
}, |
||||||
|
], |
||||||
|
devVendorOui: [ |
||||||
|
{ required: true, message: "请选择或输入设备OUI", trigger: "blur" }, |
||||||
|
{ |
||||||
|
min: 3, |
||||||
|
max: 64, |
||||||
|
message: "设备OUI本长度大于最小64字符长度", |
||||||
|
trigger: "blur", |
||||||
|
}, |
||||||
|
], |
||||||
|
}); |
||||||
|
watch( |
||||||
|
() => formData.value.devVendorName, |
||||||
|
() => { |
||||||
|
if (formData.value.devVendorName === undefined) { |
||||||
|
return; |
||||||
|
} |
||||||
|
loadVendorOuiOption(); |
||||||
|
} |
||||||
|
); |
||||||
|
watch( |
||||||
|
() => formData.value.devVendorOui, |
||||||
|
() => { |
||||||
|
if (formData.value.devVendorOui === undefined) { |
||||||
|
return; |
||||||
|
} |
||||||
|
loadTypeNameOption(); |
||||||
|
} |
||||||
|
); |
||||||
|
watch( |
||||||
|
() => formData.value.devTypeName, |
||||||
|
() => { |
||||||
|
if (formData.value.devTypeName === undefined) { |
||||||
|
return; |
||||||
|
} |
||||||
|
loadHardVerOption(); |
||||||
|
} |
||||||
|
); |
||||||
|
const loadVendorNameOption = async () => { |
||||||
|
await getVendorNameOption().then(({ data }) => { |
||||||
|
vendorNameOption.value = data; |
||||||
|
}); |
||||||
|
}; |
||||||
|
|
||||||
|
const loadVendorOuiOption = async () => { |
||||||
|
await getVendorOuiOption(formData.value.devVendorName).then(({ data }) => { |
||||||
|
vendorOuiOption.value = data; |
||||||
|
}); |
||||||
|
}; |
||||||
|
const loadTypeNameOption = async () => { |
||||||
|
await getTypeNameOption(formData.value.devVendorOui).then(({ data }) => { |
||||||
|
typeNameOption.value = data; |
||||||
|
}); |
||||||
|
}; |
||||||
|
const loadHardVerOption = async () => { |
||||||
|
await getHardVerOption(formData.value.devTypeName).then(({ data }) => { |
||||||
|
hardVerOption.value = data; |
||||||
|
}); |
||||||
|
}; |
||||||
|
const submitForm = async (formEl: FormInstance | undefined) => { |
||||||
|
if (!formEl) return; |
||||||
|
await formEl.validate((valid, fields) => { |
||||||
|
if (valid) { |
||||||
|
confirm("确定新增设备类型吗", () => { |
||||||
|
loading.value = true; |
||||||
|
addDeviceType(formData.value) |
||||||
|
.then(() => { |
||||||
|
ElMessage({ |
||||||
|
message: "操作成功", |
||||||
|
duration: 1000, |
||||||
|
type: "success", |
||||||
|
}); |
||||||
|
}) |
||||||
|
.finally(() => { |
||||||
|
loading.value = false; |
||||||
|
}); |
||||||
|
}); |
||||||
|
} else { |
||||||
|
console.log("error submit!", fields); |
||||||
|
} |
||||||
|
}); |
||||||
|
}; |
||||||
|
onMounted(() => { |
||||||
|
loadVendorNameOption(); |
||||||
|
loadVendorOuiOption(); |
||||||
|
loadTypeNameOption(); |
||||||
|
loadHardVerOption(); |
||||||
|
}); |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped> |
||||||
|
:deep(.my-label) { |
||||||
|
width: 100px !important; |
||||||
|
background: var(--el-color-white) !important; |
||||||
|
} |
||||||
|
:deep(.el-card__body) { |
||||||
|
padding: 10px 5px; |
||||||
|
} |
||||||
|
:deep(.el-form-item--default) { |
||||||
|
margin-bottom: 0; |
||||||
|
} |
||||||
|
</style> |
Loading…
Reference in new issue