From 826cb90400a9f54030f1eb71f0a6bc24ca7c03a7 Mon Sep 17 00:00:00 2001 From: limengnan <420004014@qq.com> Date: Tue, 19 May 2026 15:23:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=95=B0=E5=AD=97=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/antvx6/adddevice.vue | 114 ++++++----- .../src/components/antvx6/editdevice.vue | 50 ++++- .../frontend/src/components/antvx6/index.vue | 4 +- .../src/components/antvx6/materialmodel.vue | 183 +++++++++++++++--- .../business/database/criticalData/index.vue | 129 ++++++++++-- .../views/business/database/device/index.vue | 106 +++++----- .../business/database/material/index.vue | 132 +++++++++++-- 7 files changed, 548 insertions(+), 170 deletions(-) diff --git a/business-css/frontend/src/components/antvx6/adddevice.vue b/business-css/frontend/src/components/antvx6/adddevice.vue index d20b391..7965400 100644 --- a/business-css/frontend/src/components/antvx6/adddevice.vue +++ b/business-css/frontend/src/components/antvx6/adddevice.vue @@ -160,12 +160,16 @@ const info: any = ref({ pulseVelocity: null }); onMounted(() => { - // sizeSchemaInfo.value = props.sizeSchemaInfo sourceTempData.value = props.sizeSchemaInfo[props.deviceTypetype].fields - sourceTempData.value.forEach((item:any) => { + let rulesTemp:any = ref({}) + sourceTempData.value.forEach((item:any) => { info.value.size[item.key] = null + rulesTemp.value['size.' + item.key] = [{ + validator: validator1, + trigger: 'blur' + }] }) - // sizeSchemaInfo.value[queryParams.value.type] + rules.value = {...rules.value,...rulesTemp.value} gettableData() }); @@ -173,9 +177,41 @@ const infoForm = ref(); const isAdd = ref(false) // 是否添加设备 const josnInfo: any = ref({}) // 设备信息 +const validator1 = (rule: any, value: any, callback: any) => { // 校验数字是否大于0 + if (value == null || value === '') { + callback(); + return; + } + if (!/^\d+(\.\d+)?$/.test(value)) { + callback(new Error('请输入有效的数字或小数')); + } else if (parseFloat(value) <= 0) { + callback(new Error('数字必须大于 0')); + } else { + callback(); + } +} + const rules = ref({ name: [{ required: true, message: "请输入设备名称", trigger: "blur" }], code: [{ required: true, message: "请输入设备编码", trigger: "blur" }], + volume: [ + { + validator: validator1, + trigger: 'blur' + } + ], + flowRate: [ + { + validator: validator1, + trigger: 'blur' + } + ], + pulseVelocity: [ + { + validator: validator1, + trigger: 'blur' + } + ], }); function addClick() { info.value = { @@ -187,25 +223,6 @@ function addClick() { flowRate: null, pulseVelocity: null }; - // josnInfo.value = {} - // if(props.deviceTypetype == 'ExtractionColumn'){ - // josnInfo.value = { - // tray_section:{}, - // lower_expanded:{}, - // upper_expanded:{} - // } - // }else if(props.deviceTypetype == 'FluidizedBed'){ - // josnInfo.value = { - // expanded_section:{}, - // reaction_section:{}, - // transition_section:{} - // } - // }else if(props.deviceTypetype == 'ACFTank'){ - // josnInfo.value = { - // frustum_bottom:{}, - // annular_cylinder:{} - // } - // } isAdd.value = true } @@ -247,7 +264,7 @@ function addClick() { - + {{item.unit}} - - - - + + + + - - - - + + + + - + Hz -
确定 diff --git a/business-css/frontend/src/components/antvx6/editdevice.vue b/business-css/frontend/src/components/antvx6/editdevice.vue index c5dbea5..339d046 100644 --- a/business-css/frontend/src/components/antvx6/editdevice.vue +++ b/business-css/frontend/src/components/antvx6/editdevice.vue @@ -39,6 +39,7 @@ const selectedDevice:any = ref({}) // 选中患者 function confirmClick(formEl: any) { formEl.validate((valid: any) => { + debugger if (valid) { const params = { ...info.value, @@ -57,6 +58,15 @@ function confirmClick(formEl: any) { const sourceTempData:any = ref([]) onMounted(() => { sourceTempData.value = props.sizeSchemaInfo[props.deviceTypetype].fields + let rulesTemp:any = ref({}) + sourceTempData.value.forEach((item:any) => { + rulesTemp.value['size.' + item.key] = [{ + validator: validator1, + trigger: 'blur' + }] + }) + rules.value = {...rules.value,...rulesTemp.value} + editClick(props.deviceInfo) }); @@ -70,9 +80,41 @@ const info: any = ref({ flowRate: null, pulseVelocity: null }); +const validator1 = (rule: any, value: any, callback: any) => { // 校验数字是否大于0 + if (value == null || value === '') { + callback(); + return; + } + if (!/^\d+(\.\d+)?$/.test(value)) { + callback(new Error('请输入有效的数字或小数')); + } else if (parseFloat(value) <= 0) { + callback(new Error('数字必须大于 0')); + } else { + callback(); + } +} + const rules = ref({ name: [{ required: true, message: "请输入设备名称", trigger: "blur" }], code: [{ required: true, message: "请输入设备编码", trigger: "blur" }], + volume: [ + { + validator: validator1, + trigger: 'blur' + } + ], + flowRate: [ + { + validator: validator1, + trigger: 'blur' + } + ], + pulseVelocity: [ + { + validator: validator1, + trigger: 'blur' + } + ], }); const isEdit = ref(false) // 是否编辑设备 function editClick(row: any) { @@ -96,7 +138,7 @@ info.value.size = JSON.parse(row.size) - + {{item.unit}} - + L - + m³/h - + { refY: 0, }, label: { - refX: 45, + refX: 0.5, refY: 80, - textAnchor: 'start', + textAnchor: 'middle', textVerticalAnchor: 'top', fontSize: 14, fill: '#000', diff --git a/business-css/frontend/src/components/antvx6/materialmodel.vue b/business-css/frontend/src/components/antvx6/materialmodel.vue index 7a5d1f4..f4878eb 100644 --- a/business-css/frontend/src/components/antvx6/materialmodel.vue +++ b/business-css/frontend/src/components/antvx6/materialmodel.vue @@ -84,8 +84,12 @@ onMounted(() => { deviceName.value = props.deviceInfo.name if(props.materialId != null){ materialsById(props.materialId).then((res:any) => { + + if(res!= null && res != ""){ editClick(res) info.value.iconBase64 = res.iconBase64; + } + }); }else{ editClick(props.materialInfo) @@ -96,18 +100,145 @@ onMounted(() => { }); const infoForm = ref(); const info: any = ref({ - name: "", code: "", type: null, - size: null, - volume: null, - flowRate: null, - pulseVelocity: null + size: {}, + name: "", + description: "", + uConcentration: "", + uo2Density: "", + uEnrichment: "", + puConcentration: "", + puo2Density: "", + ePu238: "", + ePu239: "", + ePu240: "", + ePu241: "", + ePu242: "", + hno3Acidity: "", + h2c2o4Concentration: "", + organicRatio: "", + moistureContent: "", + iconBase64: "" }); const josnInfo: any = ref({}) // 设备信息 +const validator1 = (rule: any, value: any, callback: any) => { + if (!value || value === '') { + callback(); + return; + } + if (!/^\d+(\.\d+)?$/.test(value)) { + callback(new Error('请输入有效的数字或小数')); + } else if (parseFloat(value) <= 0) { + callback(new Error('数字必须大于 0')); + } else { + callback(); + } +} +const validator2 = (rule: any, value: any, callback: any) => { + if (!value || value === '') { + callback(); + return; + } + if (!/^\d+(\.\d+)?$/.test(value)) { + callback(new Error('请输入有效的数字或小数')); + } else if (parseFloat(value) <= 0) { + callback(new Error('数字必须大于 0')); + }else if (parseFloat(value) >= 1) { + callback(new Error('数字必须小于 1')); + } else { + callback(); + } +} +//新建物料数据 const rules = ref({ - name: [{ required: true, message: "请输入设备名称", trigger: "blur" }], - code: [{ required: true, message: "请输入设备编码", trigger: "blur" }], + name: [{ required: true, message: "请输入物料数据名称", trigger: "blur" }], + uConcentration: [ + { + validator: validator1, + trigger: 'blur' + } + ], + uo2Density: [ + { + validator: validator1, + trigger: 'blur' + } + ], + uEnrichment: [{ + validator: validator2, + trigger: 'blur' + }], + puConcentration: [ + { + validator: validator1, + trigger: 'blur' + } + ], + puo2Density: [ + { + validator: validator1, + trigger: 'blur' + } + ], + ePu238: [ + { + validator: validator2, + trigger: 'blur' + } + ], + ePu239: [ + { + validator: validator2, + trigger: 'blur' + } + ], + ePu240: [ + { + validator: validator2, + trigger: 'blur' + } + ], + ePu241: [ + { + validator: validator2, + trigger: 'blur' + } + ], + ePu242: [ + { + validator: validator2, + trigger: 'blur' + } + ], + + + + + hno3Acidity: [ + { + validator: validator1, + trigger: 'blur' + } + ], + h2c2o4Concentration: [ + { + validator: validator1, + trigger: 'blur' + } + ], + organicRatio: [ + { + validator: validator2, + trigger: 'blur' + } + ], + moistureContent: [ + { + validator: validator2, + trigger: 'blur' + } + ], }); const isEdit = ref(false) // 是否编辑设备 function editClick(row: any) { @@ -336,7 +467,7 @@ function delIconBase(){
-
+
@@ -471,32 +602,30 @@ function delIconBase(){ {{ item.value }}
-
+
图片
- +
-
+
- - diff --git a/business-css/frontend/src/views/business/database/criticalData/index.vue b/business-css/frontend/src/views/business/database/criticalData/index.vue index c5b636f..ffc7344 100644 --- a/business-css/frontend/src/views/business/database/criticalData/index.vue +++ b/business-css/frontend/src/views/business/database/criticalData/index.vue @@ -100,15 +100,107 @@ const input = ref(""); //新建临界数据 const title = ref(""); const info: any = ref({ - deviceType: null, diameter: null, height: null, fissileConcentration: null, isotopicAbundance: null, keffValue: null, + size: {}, }); + +const validator1 = (rule: any, value: any, callback: any) => { // 校验数字是否大于0 + if (value == null || value === '') { + callback(); + return; + } + if (!/^\d+(\.\d+)?$/.test(value)) { + callback(new Error('请输入有效的数字或小数')); + } else if (parseFloat(value) <= 0) { + callback(new Error('数字必须大于 0')); + } else { + callback(); + } +} +const validator2 = (rule: any, value: any, callback: any) => { + if (value == null || value === '') { + callback(); + return; + } + if (!/^\d+(\.\d+)?$/.test(value)) { + callback(new Error('请输入有效的数字或小数')); + } else if (parseFloat(value) <= 0) { + callback(new Error('数字必须大于 0')); + }else if (parseFloat(value) >= 1) { + callback(new Error('数字必须小于 1')); + } else { + callback(); + } +} + +const rulesSize = ref({ + uConcentration: [ + { + validator: validator1, + trigger: 'blur' + } + ], + uEnrichment: [ + { + validator: validator2, + trigger: 'blur' + } + ], + puConcentration: [ + { + validator: validator1, + trigger: 'blur' + } + ], + ePu238: [ + { + validator: validator2, + trigger: 'blur' + } + ], + ePu239: [ + { + validator: validator2, + trigger: 'blur' + } + ], + ePu240: [ + { + validator: validator2, + trigger: 'blur' + } + ], + ePu241: [ + { + validator: validator2, + trigger: 'blur' + } + ], + ePu242: [ + { + validator: validator2, + trigger: 'blur' + } + ], + keffValue: [ + { + validator: validator2, + trigger: 'blur' + } + ], +}) + +const rules = ref({...rulesSize.value}); + + + + const dialogVisible = ref(false); function addClick() { title.value = "新增临界数据"; @@ -122,10 +214,15 @@ function addClick() { size: {}, }; + let rulesTemp:any = ref({}) sourceTempData.value.forEach((item:any) => { info.value.size[item.key] = null + rulesTemp.value['size.' + item.key] = [{ + validator: validator1, + trigger: 'blur' + }] }) - + rules.value = {...rulesSize.value,...rulesTemp.value} customAttrsData.value = [] dialogVisible.value = true; } @@ -180,11 +277,6 @@ function handleClose() { dialogVisible.value = false; if (infoForm.value != null) infoForm.value.resetFields(); } -//新建临界数据 -const rules = ref({ - name: [{ required: true, message: "请输入临界数据名称", trigger: "blur" }], - code: [{ required: true, message: "请输入临界数据编码", trigger: "blur" }], -}); //修改临界数据 function editClick(row: any) { title.value = "修改临界数据"; @@ -354,7 +446,7 @@ function downloadFile(obj :any, name :any, suffix :any) { accept=".xlsx,.xls" class="upload-demo" :data="{ deviceType: queryParams.type }" - :action=" url + '/critical-data/import' " + :action=" url + '/critical-data/v2/import' " :headers="{ token: getToken() }" :show-file-list="false" :before-upload="handlePreview" @@ -385,7 +477,6 @@ function downloadFile(obj :any, name :any, suffix :any) { - @@ -414,7 +505,7 @@ function downloadFile(obj :any, name :any, suffix :any) { append-to-body width="677px" height="530px"> - + {{item.unit}} - + - + - + - + - + - + - + - + --> - + diff --git a/business-css/frontend/src/views/business/database/device/index.vue b/business-css/frontend/src/views/business/database/device/index.vue index d91e452..4ad00e5 100644 --- a/business-css/frontend/src/views/business/database/device/index.vue +++ b/business-css/frontend/src/views/business/database/device/index.vue @@ -126,32 +126,19 @@ function addClick() { }; sourceTempData.value = sizeSchemaInfo.value[queryParams.value.type].fields - - sourceTempData.value.forEach((item:any) => { - info.value.size[item.key] = null - }) + let rulesTemp:any = ref({}) + sourceTempData.value.forEach((item:any) => { + info.value.size[item.key] = null + rulesTemp.value['size.' + item.key] = [{ + validator: validator1, + trigger: 'blur' + }] + }) + rules.value = {...rulesInfo.value,...rulesTemp.value} + - // josnInfo.value = {} - // if(queryParams.value.type == 'ExtractionColumn'){ - // josnInfo.value = { - // tray_section:{}, - // lower_expanded:{}, - // upper_expanded:{} - // } - // }else if(queryParams.value.type == 'FluidizedBed'){ - // josnInfo.value = { - // expanded_section:{}, - // reaction_section:{}, - // transition_section:{} - // } - // }else if(queryParams.value.type == 'ACFTank'){ - // josnInfo.value = { - // frustum_bottom:{}, - // annular_cylinder:{} - // } - // } dialogVisible.value = true; } @@ -193,11 +180,44 @@ function handleClose() { dialogVisible.value = false; if (infoForm.value != null) infoForm.value.resetFields(); } -//新建设备 -const rules = ref({ +const validator1 = (rule: any, value: any, callback: any) => { // 校验数字是否大于0 + if (value == null || value === '') { + callback(); + return; + } + if (!/^\d+(\.\d+)?$/.test(value)) { + callback(new Error('请输入有效的数字或小数')); + } else if (parseFloat(value) <= 0) { + callback(new Error('数字必须大于 0')); + } else { + callback(); + } +} + +const rulesInfo = ref({ name: [{ required: true, message: "请输入设备名称", trigger: "blur" }], code: [{ required: true, message: "请输入设备编码", trigger: "blur" }], -}); + volume: [ + { + validator: validator1, + trigger: 'blur' + } + ], + flowRate: [ + { + validator: validator1, + trigger: 'blur' + } + ], + pulseVelocity: [ + { + validator: validator1, + trigger: 'blur' + } + ], +}) +//新建设备 +const rules = ref({...rulesInfo.value}); //修改设备 function editClick(row: any) { title.value = "修改设备"; @@ -209,6 +229,15 @@ function editClick(row: any) { info.value.size[item.key] = null }) } + let rulesTemp:any = ref({}) + sourceTempData.value.forEach((item:any) => { + rulesTemp.value['size.' + item.key] = [{ + validator: validator1, + trigger: 'blur' + }] + + }) + rules.value = {...rulesInfo.value,...rulesTemp.value} dialogVisible.value = true; } @@ -310,23 +339,6 @@ onMounted(() => { menuInit() }); -const handleInput = (val: string) => { - // 正则规则:匹配非负整数或小数(支持最多两位小数,可根据需求调整) - const reg = /^\d+(\.\d{0,2})?$/; - - // 提取合法字符:先去掉所有非数字和非小数点的字符 - let value = val.replace(/[^\d.]/g, ''); - - // 确保只有一个小数点 - value = value.replace(/\.{2,}/g, '.'); - value = value.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.'); - - // 验证最终格式,不符合则清空(或保留合法前缀) - if (!reg.test(value) && value !== '') { - // 保留最后一次合法输入,或者直接清空 - val = value.slice(0, -1); - } -}; function exportExportsClick(){ exportAllExports(queryParams.value.type).then((response:any) => { @@ -438,7 +450,7 @@ function downloadFile(obj :any, name :any, suffix :any) { - + - + L - + m³/h - + { + if (!value || value === '') { + callback(); + return; + } + if (!/^\d+(\.\d+)?$/.test(value)) { + callback(new Error('请输入有效的数字或小数')); + } else if (parseFloat(value) <= 0) { + callback(new Error('数字必须大于 0')); + } else { + callback(); + } +} +const validator2 = (rule: any, value: any, callback: any) => { + if (!value || value === '') { + callback(); + return; + } + if (!/^\d+(\.\d+)?$/.test(value)) { + callback(new Error('请输入有效的数字或小数')); + } else if (parseFloat(value) <= 0) { + callback(new Error('数字必须大于 0')); + }else if (parseFloat(value) >= 1) { + callback(new Error('数字必须小于 1')); + } else { + callback(); + } +} //新建物料数据 const rules = ref({ name: [{ required: true, message: "请输入物料数据名称", trigger: "blur" }], uConcentration: [ - { pattern: /^\d+(\.\d+)?$/, message: "请输入有效的数字或小数", trigger: "blur" } + { + validator: validator1, + trigger: 'blur' + } ], uo2Density: [ - { pattern: /^\d+(\.\d+)?$/, message: "请输入有效的数字或小数", trigger: "blur" } - ], - uEnrichment: [ - { pattern: /^\d+(\.\d+)?$/, message: "请输入有效的数字或小数", trigger: "blur" } + { + validator: validator1, + trigger: 'blur' + } ], + uEnrichment: [{ + validator: validator2, + trigger: 'blur' + }], puConcentration: [ - { pattern: /^\d+(\.\d+)?$/, message: "请输入有效的数字或小数", trigger: "blur" } + { + validator: validator1, + trigger: 'blur' + } ], puo2Density: [ - { pattern: /^\d+(\.\d+)?$/, message: "请输入有效的数字或小数", trigger: "blur" } + { + validator: validator1, + trigger: 'blur' + } ], - puIsotope: [ - { pattern: /^\d+(\.\d+)?$/, message: "请输入有效的数字或小数", trigger: "blur" } + ePu238: [ + { + validator: validator2, + trigger: 'blur' + } ], + ePu239: [ + { + validator: validator2, + trigger: 'blur' + } + ], + ePu240: [ + { + validator: validator2, + trigger: 'blur' + } + ], + ePu241: [ + { + validator: validator2, + trigger: 'blur' + } + ], + ePu242: [ + { + validator: validator2, + trigger: 'blur' + } + ], + + + + hno3Acidity: [ - { pattern: /^\d+(\.\d+)?$/, message: "请输入有效的数字或小数", trigger: "blur" } + { + validator: validator1, + trigger: 'blur' + } ], h2c2o4Concentration: [ - { pattern: /^\d+(\.\d+)?$/, message: "请输入有效的数字或小数", trigger: "blur" } + { + validator: validator1, + trigger: 'blur' + } ], organicRatio: [ - { pattern: /^\d+(\.\d+)?$/, message: "请输入有效的数字或小数", trigger: "blur" } + { + validator: validator2, + trigger: 'blur' + } ], moistureContent: [ - { pattern: /^\d+(\.\d+)?$/, message: "请输入有效的数字或小数", trigger: "blur" } + { + validator: validator2, + trigger: 'blur' + } ], }); //修改物料数据 @@ -446,24 +538,24 @@ function delIconBase(){ - +
- + - +
- + - +