diff --git a/nx/helper/calcAnalysisValue.js b/nx/helper/calcAnalysisValue.js
index 99af0c6..32ebc77 100644
--- a/nx/helper/calcAnalysisValue.js
+++ b/nx/helper/calcAnalysisValue.js
@@ -352,3 +352,53 @@ export function groupByField(list, groupKey = 'groupDictionaryBusinessKey') {
// 转为数组
return Array.from(groupMap.values())
}
+
+export function validateElementRange(fieldIndex, row, conRangeElementAnalysisList) {
+ if (!conRangeElementAnalysisList?.length) return null
+ const rangeElementAnalysis = conRangeElementAnalysisList.find(
+ ele => ele.dictionaryProjectId === row[fieldIndex]?.dicId && row[fieldIndex]['type'] === 'project'
+ )
+
+ if (!rangeElementAnalysis) return null
+
+ const val = row[fieldIndex]?.value
+
+ if (val == '' || val == null) return null
+ const value = Number(val)
+
+ let result = { promptType: '', promptMsg: '' }
+
+ switch (Number(rangeElementAnalysis.rangeType)) {
+ case 1:
+ //如果值小于最小警告值或者大于最大警告值,则校验不通过
+ if (value < rangeElementAnalysis.minimumWarningValue || value > rangeElementAnalysis.maximumWarningValue) {
+ result.promptType = 'warning'
+ result.promptMsg = `警告:值超出范围(${rangeElementAnalysis.minimumWarningValue} ~ ${rangeElementAnalysis.maximumWarningValue})`
+ }
+ break
+ case 2:
+ //如果值小于最小限制值或者大于最大限制值,则校验不通过
+ if (value < rangeElementAnalysis.minimumValue || value > rangeElementAnalysis.maximumValue) {
+ result.promptType = 'error'
+ result.promptMsg = `错误:值超出范围(${rangeElementAnalysis.minimumValue} ~ ${rangeElementAnalysis.maximumValue})`
+ }
+ break
+ case 3:
+ //如果值小于最小限制值或者大于最大限制值,则校验不通过
+ if (value < rangeElementAnalysis.minimumValue || value > rangeElementAnalysis.maximumValue) {
+ result.promptType = 'error'
+ result.promptMsg = `错误:值超出范围(${rangeElementAnalysis.minimumValue} ~ ${rangeElementAnalysis.maximumValue})`
+ } else if (
+ (rangeElementAnalysis.minimumValue < value && value < rangeElementAnalysis.minimumWarningValue) ||
+ (rangeElementAnalysis.maximumWarningValue < value && value <= rangeElementAnalysis.maximumValue)
+ ) {
+ result.promptType = 'warning'
+ result.promptMsg = `警告:值超出范围(${rangeElementAnalysis.minimumWarningValue} ~ ${rangeElementAnalysis.maximumWarningValue})`
+ }
+ break
+ default:
+ return null
+ }
+
+ return result
+}
diff --git a/pages/analysis/sample/sample-work-detail.vue b/pages/analysis/sample/sample-work-detail.vue
index 2ee935a..527c512 100644
--- a/pages/analysis/sample/sample-work-detail.vue
+++ b/pages/analysis/sample/sample-work-detail.vue
@@ -105,6 +105,18 @@
确认采集
+
+
+
+
+
+
+
@@ -122,39 +134,41 @@
:id="'elId' + groupIndex"
:style="{ height: fields.open ? collaHeights[groupIndex] + 'px' : '0' }"
> -->
-
+
-
-
+
+
+ {{ fields.label }}
+
+
-
-
-
+ /> -->
-
-
-
- {{
- !field.fillingWay || field.fillingWay == 'calculate' ? '计算值' : '请输入'
- }}
- {{ field.value }}
+
+
+ {{
+ !field.fillingWay || field.fillingWay == 'calculate' ? '计算值' : '请输入'
+ }}
+ {{ field.value }}
+
-
+ {{ field.validation?.promptMsg }}
+
@@ -211,7 +232,8 @@ import {
handleRoundFiveNumber,
calcRowAnalysisValue,
math,
- groupByField
+ groupByField,
+ validateElementRange
} from '@/nx/helper/calcAnalysisValue'
import { number } from 'mathjs'
import AuncelSelectPopup from '@/components/sample/auncel-select-popup.vue'
@@ -255,7 +277,11 @@ const busSubCSampleId = ref('')
let fieldGroup = ref([])
const collaHeights = ref([])
const cupNumKey = '杯号'
+const inputValue = ref('')
+function handleResetInputValue() {
+ inputValue.value = ''
+}
// refs
const myKeyboard = ref(null)
const auncelSelector = ref(null)
@@ -312,7 +338,10 @@ const parameterClassifyChange = v => {
}
const fieldClick = (field, key) => {
- if (!field.isEdit || field.fillingWay === 'input') return
+ if (!field.isEdit) return
+ if (field.fillingWay === 'input') {
+ inputValue.value = field.value
+ }
selectedField.value = field
groupFieldIndex.value = key
if (myKeyboard.value) {
@@ -567,7 +596,27 @@ const checkBh = () => {
}
return true
}
-
+const checkRange = async () => {
+ for (const g of fieldGroup.value) {
+ for (const f of g.fields) {
+ if (f.validation) {
+ if (f.validation.promptType === 'error') {
+ nx.$helper.showToast({
+ title: '存在范围校验错误,请修正后再保存!',
+ icon: 'error',
+ duration: 2000
+ })
+ return false
+ }
+ if (f.validation.promptType === 'warning') {
+ const confirm = await tools.showPromiseModal('提示', '检测到范围警告,是否继续保存?')
+ return confirm
+ }
+ }
+ }
+ }
+ return true // 无问题,通过
+}
const saveAuncelData = () => {
//保存数据
if (!weightDataIsToZero.value) {
@@ -625,6 +674,8 @@ const dynamicFormData = {}
const saveDetail = async () => {
//检查杯号
if (!checkBh()) return
+ // 检查范围校验
+ if (!(await checkRange())) return
setValueToSample()
let params = {
businessAssayTaskId: taskId.value
@@ -634,7 +685,7 @@ const saveDetail = async () => {
if (activeAssayTypeKey.value === 'kby' || activeAssayTypeKey.value === 'by') {
// 处理其他页签的输入变化
const configInfomation = currentAssayType.value.configQCSampleMethodInfo
- const row = sampleDataList.value[currentSampleIndex.value]
+ const row = currentSampleData.value
configInfomation.forEach(item => {
const sourceKey = item.source
const sourceValue = row[sourceKey]
@@ -657,7 +708,7 @@ const saveDetail = async () => {
analysisType: item.value
}))
} else {
- const datas = sampleDataList.value[currentSampleIndex.value]
+ const datas = currentSampleData.value
params.assayTaskAnalysisDataList = [{ datas: [datas], analysisType: activeAssayTypeKey.value }]
}
@@ -703,14 +754,14 @@ function setValueToSample() {
let fields = fieldGroup.value.flatMap(item => item.fields)
fields.forEach(item => {
if (
- sampleDataList.value[currentSampleIndex.value].hasOwnProperty(item.fieldIndex) &&
- nx.$test.object(sampleDataList.value[currentSampleIndex.value][item.fieldIndex])
+ currentSampleData.value.hasOwnProperty(item.fieldIndex) &&
+ nx.$test.object(currentSampleData.value[item.fieldIndex])
) {
- sampleDataList.value[currentSampleIndex.value][item.fieldIndex].value = item.value
+ currentSampleData.value[item.fieldIndex].value = item.value
}
// 初始化的时候保存杯号到样品中后续自动生成杯号用
if (item.title === cupNumKey && currentSampleIndex.value == 0) {
- sampleDataList.value[currentSampleIndex.value].cupNum = item.value
+ currentSampleData.value.cupNum = item.value
}
})
}
@@ -828,7 +879,7 @@ let assayGroups = ref([])
const activeAssayTypeKey = ref('')
const activeAssayTypeIndex = ref(0)
//元素结果范围
-let conRangeElementAnalysisList = []
+let conRangeElementAnalysisList = ref([])
const currentAssayType = computed(() => {
return assayGroups.value.find(item => item.value === activeAssayTypeKey.value)
})
@@ -856,6 +907,21 @@ const currentGroup = computed(() => {
return fieldGroup.value.filter(g => g.value === curParameterKey.value)
}
})
+watch(
+ () => currentGroup.value,
+ () => {
+ fieldGroup.value.forEach(item => {
+ item.fields.forEach(field => {
+ const validation = validateElementRange(
+ field.fieldIndex,
+ currentSampleData.value,
+ conRangeElementAnalysisList.value
+ )
+ field.validation = validation
+ })
+ })
+ }
+)
const collapseRef = ref()
const activeCollapses = ref([])
function handleAssayTypeChange({ index, value }) {
@@ -893,7 +959,7 @@ async function getSampleAnalysisByTaskId() {
if (!activeAssayTypeKey.value) {
activeAssayTypeKey.value = assayGroups.value.length > 0 ? assayGroups.value[0].value : ''
}
- conRangeElementAnalysisList = configAssayMethodProjectRangeList || []
+ conRangeElementAnalysisList.value = configAssayMethodProjectRangeList || []
}
// 设置字段值
function setValueToField() {
@@ -905,7 +971,7 @@ function setValueToField() {
}
}
function getFieldValue(field) {
- const fieldValue = sampleDataList.value[currentSampleIndex.value][field.fieldIndex]?.value
+ const fieldValue = currentSampleData.value[field.fieldIndex]?.value
if (fieldValue) {
return fieldValue
} else {
@@ -1176,8 +1242,7 @@ onBackPress(() => {
.form-item-my {
display: flex;
align-items: center;
- margin-bottom: 10px;
- height: 35px;
+ min-height: 35px;
font-size: 13px;
border-bottom: 1px solid #dcdcdc;
}
@@ -1233,6 +1298,12 @@ onBackPress(() => {
.content-right-scroll {
height: 68vh;
}
+.valid-warning {
+ color: orange;
+}
+.valid-error {
+ color: red;
+}
.u-tab-item {
display: flex;