/**
|
* 检验项判定(需求九.3)
|
*
|
* 判定口径逐字复刻管理端 qualityManagement/finalInspection/components/formDia.vue
|
* 里 watch(tableData) 的那段逻辑,不要自行发明:
|
* 数字型(parameterType === 1):minValue <= 检验值 <= maxValue
|
* 文字型(parameterType 其余):检验值全等 standardValue
|
* 全部项通过 → 合格;全部项未通过 → 不合格;其余 → 部分合格
|
*
|
* 注意判定用的是最大值/最小值,"内控值(controlValue)"只作展示、不参与判定。
|
* 管理端在检验项为空时跳过判定,这里对应返回空串,由调用方决定是否保留原值。
|
*/
|
|
export const TEXT_TYPE = 0;
|
export const NUMERIC_TYPE = 1;
|
|
/** 单行是否判定通过 */
|
export function isItemPass(item) {
|
const val = item?.testValue;
|
if (val === null || val === undefined || val === "") return false;
|
if (item.parameterType === NUMERIC_TYPE) {
|
const numVal = Number(val);
|
const min = Number(item.minValue);
|
const max = Number(item.maxValue);
|
return !isNaN(numVal) && numVal >= min && numVal <= max;
|
}
|
return String(val) === String(item.standardValue);
|
}
|
|
/** 检验项列表 → 检测结果(合格 / 不合格 / 部分合格),空列表返回空串 */
|
export function judgeInspectionResult(rows) {
|
const list = Array.isArray(rows) ? rows : [];
|
if (list.length === 0) return "";
|
|
let passCount = 0;
|
let failCount = 0;
|
list.forEach(item => {
|
if (isItemPass(item)) passCount++;
|
else failCount++;
|
});
|
|
if (failCount === 0 && passCount > 0) return "合格";
|
if (passCount === 0 && failCount > 0) return "不合格";
|
return "部分合格";
|
}
|
|
/** 临时追加的检测项行(需求九.2):不受指标标准约束,各字段都可编辑 */
|
export function createTempItem() {
|
return {
|
id: undefined,
|
isTemp: true,
|
parameterItem: "",
|
parameterType: NUMERIC_TYPE,
|
unit: "",
|
standardValue: "",
|
controlValue: "",
|
maxValue: null,
|
minValue: null,
|
testValue: "",
|
};
|
}
|