From 4f5d8e28b98957dd2f60f06e6e81929477f4ebf9 Mon Sep 17 00:00:00 2001 From: eight <641137800@qq.com> Date: 星期一, 09 九月 2024 16:49:22 +0800 Subject: [PATCH] 设备管理功能 --- src/views/ecg/devmanage/DeviceForm.vue | 119 +++++++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 83 insertions(+), 36 deletions(-) diff --git a/src/views/ecg/devmanage/DeviceForm.vue b/src/views/ecg/devmanage/DeviceForm.vue index b57e583..90e165a 100644 --- a/src/views/ecg/devmanage/DeviceForm.vue +++ b/src/views/ecg/devmanage/DeviceForm.vue @@ -1,22 +1,37 @@ <template> <Dialog :title="dialogTitle" v-model="dialogVisible"> <el-form - ref="formRef" - :model="formData" - :rules="formRules" - label-width="100px" - v-loading="formLoading" + ref="formRef" + :model="formData" + :rules="formRules" + label-width="100px" + v-loading="formLoading" > + <el-form-item label="閲囪喘鏃ユ湡" prop="purchaseDate"> + <el-date-picker + v-model="formData.purchaseDate" + type="date" + value-format="x" + placeholder="閫夋嫨閲囪喘鏃ユ湡" + /> + </el-form-item> <el-form-item label="璁惧缂栧彿" prop="devId"> <el-input v-model="formData.devId" placeholder="璇疯緭鍏ヨ澶囩紪鍙�" /> </el-form-item> <el-form-item label="鍒嗙被鍚�" prop="category"> - <el-input v-model="formData.category" placeholder="璇疯緭鍏ュ垎绫诲悕" /> + <el-select v-model="formData.category" placeholder="璇烽�夋嫨鍒嗙被鍚�" @change="categoryChanged"> + <el-option + v-for="dict in categoryOptions" + :key="dict.value as string" + :label="dict.label" + :value="dict.value" + /> + </el-select> </el-form-item> <el-form-item label="鍝佺墝" prop="brand"> - <el-select v-model="formData.brand" placeholder="璇疯緭鍏ュ搧鐗�"> + <el-select v-model="formData.brand" placeholder="璇烽�夋嫨鍝佺墝" @change="brandChanged"> <el-option - v-for="dict in getIntDictOptions(DICT_TYPE.ECG_DEV_BRAND)" + v-for="dict in brandOptions" :key="dict.value" :label="dict.label" :value="dict.value" @@ -24,15 +39,14 @@ </el-select> </el-form-item> <el-form-item label="鍨嬪彿" prop="model"> - <el-input v-model="formData.model" placeholder="璇疯緭鍏ュ瀷鍙�" /> - </el-form-item> - <el-form-item label="閲囪喘鏃ユ湡" prop="purchaseDate"> - <el-date-picker - v-model="formData.purchaseDate" - type="date" - value-format="x" - placeholder="閫夋嫨閲囪喘鏃ユ湡" - /> + <el-select v-model="formData.model" placeholder="璇烽�夋嫨鍨嬪彿"> + <el-option + v-for="dict in modelOptions" + :key="dict.value" + :label="dict.label" + :value="dict.value" + /> + </el-select> </el-form-item> </el-form> <template #footer> @@ -42,8 +56,8 @@ </Dialog> </template> <script setup lang="ts"> -import { DeviceApi, DeviceVO } from '@/api/ecg/devmanage' -import {DICT_TYPE, getIntDictOptions} from "@/utils/dict"; +import {getStrDictOptions, DICT_TYPE, DictDataType} from '@/utils/dict' +import {DeviceApi, DeviceVO, DevModelApi, OptionsVO} from '@/api/ecg/devmanage' /** 璁惧 琛ㄥ崟 */ defineOptions({ name: 'DeviceForm' }) @@ -55,19 +69,15 @@ const dialogTitle = ref('') // 寮圭獥鐨勬爣棰� const formLoading = ref(false) // 琛ㄥ崟鐨勫姞杞戒腑锛�1锛変慨鏀规椂鐨勬暟鎹姞杞斤紱2锛夋彁浜ょ殑鎸夐挳绂佺敤 const formType = ref('') // 琛ㄥ崟鐨勭被鍨嬶細create - 鏂板锛泆pdate - 淇敼 -const formData = ref({ - id: undefined, - devId: undefined, - category: undefined, - brand: undefined, - model: undefined, - purchaseDate: undefined +const formData = ref<DeviceVO>({ + id: 0, + purchaseDate: new Date().getTime(), + devId: '', + category: '', + brand: '', + model: '' }) const formRules = reactive({ - devId: [{ required: true, message: '璁惧缂栧彿涓嶈兘涓虹┖', trigger: 'blur' }], - category: [{ required: true, message: '鍒嗙被鍚嶄笉鑳戒负绌�', trigger: 'blur' }], - brand: [{ required: true, message: '鍝佺墝涓嶈兘涓虹┖', trigger: 'blur' }], - model: [{ required: true, message: '鍨嬪彿涓嶈兘涓虹┖', trigger: 'blur' }] }) const formRef = ref() // 琛ㄥ崟 Ref @@ -77,13 +87,23 @@ dialogTitle.value = t('action.' + type) formType.value = type resetForm() + // 淇敼鏃讹紝璁剧疆鏁版嵁 if (id) { formLoading.value = true try { formData.value = await DeviceApi.getDevice(id) + const bandData = await DevModelApi.getBrandOption(formData.value.category!) + brandOptions.value = bandData + const modelData = await DevModelApi.getModelOption(formData.value.category!, formData.value.brand!) + modelOptions.value = modelData } finally { formLoading.value = false + } + } else { // 鏂板鏃� + if (categoryOptions.value.length !== 0) { + formData.value.category = categoryOptions.value[0].value as string + categoryChanged() } } } @@ -116,13 +136,40 @@ /** 閲嶇疆琛ㄥ崟 */ const resetForm = () => { formData.value = { - id: undefined, - devId: undefined, - category: undefined, - brand: undefined, - model: undefined, - purchaseDate: undefined + id: 0, + purchaseDate: new Date().getTime(), + devId: '', + category: '', + brand: '', + model: '' } formRef.value?.resetFields() } + +const brandOptions = ref<OptionsVO[]>([]) +const modelOptions = ref<OptionsVO[]>([]) + +const categoryChanged = async () => { + const data = await DevModelApi.getBrandOption(formData.value.category!) + brandOptions.value = data + + formData.value.brand = brandOptions.value.length === 0 ? "" : brandOptions.value[0].value + brandChanged() +} + +const brandChanged = async () => { + const data = await DevModelApi.getModelOption(formData.value.category!, formData.value.brand!) + modelOptions.value = data + + formData.value.model = modelOptions.value.length === 0 ? "" : modelOptions.value[0].value +} + +const categoryOptions = ref<DictDataType[]>([]) + +onMounted( async () => { + console.info("onMount DeviceForm...") + const data = await getStrDictOptions(DICT_TYPE.ECG_DEV_CATEGORY) + categoryOptions.value = data +}) + </script> \ No newline at end of file -- Gitblit v1.9.3