diff --git a/components/n-scanTemp/n-scanTemp.vue b/components/n-scanTemp/n-scanTemp.vue index 1514935..77d2665 100644 --- a/components/n-scanTemp/n-scanTemp.vue +++ b/components/n-scanTemp/n-scanTemp.vue @@ -7,7 +7,7 @@ {{ title }} - + request({ - url: '/lims/bus/deviceBusMaintain/getMaintainDetail', + url: '/qms/resource/device-maintain/getMaintainDetail', method: 'GET', params: { id } }), list: params => request({ - url: '/lims/bus/deviceBusMaintain/list', + url: '/qms/resource/device-maintain/page', method: 'GET', params }), // 根据设备id或者维护和点检记录 getCheckRecord: data => request({ - url: '/lims/bus/deviceBusMaintain/createOrGet', + url: '/qms/resource/device-maintain/createOrGet', method: 'POST', data }), submit: data => request({ - url: '/lims/bus/deviceBusMaintain/saveMaintainVo', + url: '/qms/resource/device-maintain/saveMaintainVo', method: 'POST', data, custom: { @@ -30,13 +30,13 @@ export default { }), getLastDailyCheckOfToday: params => request({ - url: '/lims/bus/deviceBusMaintain/getLastDailyCheckOfToday', + url: '/qms/resource/device-maintain/getLastDailyCheckOfToday', method: 'GET', params, }), createDailyCheck: data => request({ - url: '/lims/bus/deviceBusMaintain/create', + url: '/qms/resource/device-maintain/create', method: 'POST', data }) diff --git a/nx/helper/calcAnalysisValue.js b/nx/helper/calcAnalysisValue.js index b2900df..a236161 100644 --- a/nx/helper/calcAnalysisValue.js +++ b/nx/helper/calcAnalysisValue.js @@ -64,11 +64,8 @@ const Get_C_KNO3 = function (weight, sValue, operator) { //判断sValue是数字 const S = number(sValue) const W = number(weight) - console.log(S, W) - //如果样重为0就不计算 if (W === 0) { - console.log('结束') return '' } if (W === 0) return '' @@ -130,7 +127,7 @@ export function calcAnalysisValue(group, externalFormData, taskIngredientsWay) { v = math.evaluate(formulaVal).toString() v = isFinite(v) ? v.toString() : 0 } - ele.value = handleRoundFiveNumber(v, ele.decimalPosition) + ele.value = handleRoundFiveNumber(v, ele.decimalPosition, ele.type === 'project') changed = true } } @@ -152,13 +149,11 @@ export function evaluateGetFromFormula(formula, parse, externalFormData, current relFormulaVal = relFormulaVal.replace(key, value || 0) } } - console.log(relFormulaVal) - try { let v = math.evaluate(relFormulaVal).toString() v = isFinite(v) ? v : 0 if (parse) { - return handleRoundFiveNumber(v, currentColumn.decimalPosition) + return handleRoundFiveNumber(v, currentColumn.decimalPosition, currentColumn.type === 'project') } return v } catch (e) { @@ -212,7 +207,8 @@ export function calcRowAnalysisValue(row, columnObj, dynamicsColumns, externalFo v = math.evaluate(formulaVal).toString() v = isFinite(v) ? v : 0 } - row[curItem.fieldIndex].value = handleRoundFiveNumber(Number(v), row[curItem.fieldIndex].decimalPosition) + let rowObj = row[curItem.fieldIndex] + rowObj.value = handleRoundFiveNumber(Number(v), rowObj.decimalPosition, rowObj.type === 'project') calcRowAnalysisValue(row, curItem, dynamicsColumns, externalFormData) } } @@ -235,24 +231,56 @@ const findFieldInGroup = function (paramNo, group, p) { * 3.四舍,六入 * 传入数值和保留位数 */ -export function handleRoundFiveNumber(number, fixed = 0) { +export function handleRoundFiveNumber(number, fixed = 0, useTwoSignificantDigits = false) { if (number == null || number === '' || isNaN(number)) return number if (fixed === -1) return number number = String(number) //可以考虑清掉末尾的0,暂时限制了不会有,因为传入数值,末尾0是去掉的 + // 保留2位有效数字:小数点后面大于0的才叫有效数字,从小数点后面查找两位有效数字 ,如果末尾的有效数字的位数大于所设置的精度 以及 如果查找的有效数字没有两位的 ,就按照所设置的精度逻辑来计算,两位有效数字的最后 一位是在第几位,就用这个位数充当精度来按照原来精度的逻辑计算, + // ===== 新增:按小数点后前两个非零数字确定精度 ===== + let actualFixed = fixed + if (useTwoSignificantDigits) { + const numStr = String(number) + const dotIndex = numStr.indexOf('.') + + if (dotIndex !== -1) { + const decimalPart = numStr.slice(dotIndex + 1) + let nonZeroCount = 0 + let secondNonZeroPos = -1 + + for (let i = 0; i < decimalPart.length; i++) { + if (decimalPart[i] !== '0') { + nonZeroCount++ + if (nonZeroCount === 2) { + secondNonZeroPos = i + 1 // 小数点后第几位(从1开始) + break + } + } + } + + // 只有同时满足: + // 1. 找到两个非零数字 + // 2. 第二个的位置 <= 用户指定的 fixed + // 才使用该位置作为精度 + if (secondNonZeroPos !== -1 && secondNonZeroPos <= fixed) { + actualFixed = secondNonZeroPos + } + } + } + console.log(actualFixed) const index = number.indexOf('.') if (index == -1) { - if (fixed > 0) { + if (actualFixed > 0) { number += '.' } - for (let i = 0; i < fixed; i++) { + for (let i = 0; i < actualFixed; i++) { number += '0' } //补0返回 return number } //取到保留小数位的下一位,5.5555取保留俩位,那就是小数点后第三位 - const indexFixed = index + fixed + 1 + const indexFixed = index + actualFixed + 1 if (indexFixed >= number.length) { //如果小数位数不够, 补0直接返回 const zerolen = indexFixed - number.length @@ -265,16 +293,16 @@ export function handleRoundFiveNumber(number, fixed = 0) { const endNumber = number.substr(indexFixed, 1) if (endNumber != '5') { //如果做判断的数不是五,就按正常的四舍五入,即忽略了5,后面补0的那些由于是数字传进来,0已经去掉,此处不做处理 - return Number(number).toFixed(fixed) + return Number(number).toFixed(actualFixed) } if (indexFixed != number.length - 1) { //由于当前判断位不是最后一位,而又去除了0,那么后面后的位数应该直接入位,五后不为0时入,由于会有小于五的,四舍五入肯定不行,那么只能截取到当前保留位数,然后转成数字加上10的负fixed的次方即可 number = number.substring(0, indexFixed) if (number.indexOf('-') != -1) { //需要考虑到负数的情况 - return (Number(number) - Number(Math.pow(10, -fixed))).toFixed(fixed) + return (Number(number) - Number(Math.pow(10, -actualFixed))).toFixed(actualFixed) } - return (Number(number) + Number(Math.pow(10, -fixed))).toFixed(fixed) + return (Number(number) + Number(Math.pow(10, -actualFixed))).toFixed(actualFixed) //return this.accAdd(number,Math.pow(10,-fixed)) } //接下来就时五后没有值也就是0的需要看前面的奇入偶不入了,取当前位的上一位 @@ -288,9 +316,9 @@ export function handleRoundFiveNumber(number, fixed = 0) { number = number.substring(0, indexFixed) if (number.indexOf('-') != -1) { //需要考虑到负数的情况 - return (Number(number) - Math.pow(10, -fixed)).toFixed(fixed) + return (Number(number) - Math.pow(10, -actualFixed)).toFixed(actualFixed) } - return (Number(number) + Math.pow(10, -fixed)).toFixed(fixed) + return (Number(number) + Math.pow(10, -actualFixed)).toFixed(actualFixed) } //偶不进,将取值的当前位数,直接截取字符即可 return number.substr(0, indexFixed) diff --git a/pages/analysis/sample/sample-work-detail.vue b/pages/analysis/sample/sample-work-detail.vue index 79d82b1..f41d47f 100644 --- a/pages/analysis/sample/sample-work-detail.vue +++ b/pages/analysis/sample/sample-work-detail.vue @@ -674,7 +674,7 @@ const saveDetail = async () => { if (item.calcMethod === 'calculateAverageValue') { item.value = calcAverageValue(sourceKey, currentAssayType.value.tableData) } else { - item.value = handleRoundFiveNumber(row[sourceKey].value, row.decimalPosition) + item.value = handleRoundFiveNumber(row[sourceKey].value, row.decimalPosition, row.type === 'project') } // 如果处理后的值不为空,重新赋值该字段到其他样品类型下的样品上,并触发每一个样品的计算 for (const col of currentAssayType.value.columns) { @@ -707,9 +707,10 @@ const saveDetail = async () => { function calcAverageValue(fieldIndex, tableData) { const rows = tableData.map(row => row[fieldIndex]) const decimalPosition = rows[0].decimalPosition + const isProject = rows[0].type === 'project' const values = rows.map(row => Number(row.value)) if (values.some(item => item == null)) return null - return handleRoundFiveNumber(math.mean(values), decimalPosition) + return handleRoundFiveNumber(math.mean(values), decimalPosition, isProject) } // 表格数据更新后重新计算 @@ -1109,12 +1110,13 @@ const listenNumKeyboard = () => { } //自动补全小数位数 const decimalPosition = selectedField.value.decimalPosition + const isProject = selectedField.value.type === 'project' let val = res.val const symbol = res.symbol if (decimalPosition == null) { selectedField.value.value = val } else { - selectedField.value.value = handleRoundFiveNumber(val, decimalPosition) + selectedField.value.value = handleRoundFiveNumber(val, decimalPosition, isProject) } if (symbol) { selectedField.value.symbol = symbol diff --git a/pages/device/deviceBusDailyCheck/index.vue b/pages/device/deviceBusDailyCheck/index.vue index 308296b..722e7cc 100644 --- a/pages/device/deviceBusDailyCheck/index.vue +++ b/pages/device/deviceBusDailyCheck/index.vue @@ -1,14 +1,14 @@