|
@@ -1619,8 +1619,17 @@ const queryParams = reactive({
|
|
|
|
|
|
// 获取指定bomNodeId的物料数量
|
|
|
const getMaterialCount = (bomNodeId: number) => {
|
|
|
- console.log('当前BOM节点:' + bomNodeId)
|
|
|
- return materialList.value.filter(item => item.bomNodeId === bomNodeId).length
|
|
|
+ const uniqueKey = `${bomNodeId}`;
|
|
|
+ const materials = bomMaterialsMap.value[uniqueKey] || [];
|
|
|
+
|
|
|
+ // 只计算有效的物料数量
|
|
|
+ return materials.filter(material =>
|
|
|
+ !isMaterialDisabled(material) &&
|
|
|
+ material.materialName &&
|
|
|
+ material.unit &&
|
|
|
+ (material.unitPrice || 0) > 0 &&
|
|
|
+ (material.quantity || 0) > 0
|
|
|
+ ).length;
|
|
|
}
|
|
|
|
|
|
// 校验保养项下物料数据的方法
|
|
@@ -1808,10 +1817,17 @@ const submitForm = async () => {
|
|
|
? item.lastNaturalDate
|
|
|
: (item.lastNaturalDate ? dayjs(item.lastNaturalDate).valueOf() : null)
|
|
|
}));
|
|
|
+
|
|
|
+ // 从 bomMaterialsMap 获取所有物料数据,而不是 materialList
|
|
|
+ const allMaterials = [];
|
|
|
+ for (const key in bomMaterialsMap.value) {
|
|
|
+ allMaterials.push(...bomMaterialsMap.value[key]);
|
|
|
+ }
|
|
|
+
|
|
|
const data = {
|
|
|
mainWorkOrder: formData.value,
|
|
|
mainWorkOrderBom: convertedList,
|
|
|
- mainWorkOrderMaterials: materialList.value
|
|
|
+ mainWorkOrderMaterials: allMaterials
|
|
|
}
|
|
|
await IotMainWorkOrderApi.fillWorkOrder(data)
|
|
|
message.success(t('common.createSuccess'))
|
|
@@ -2258,7 +2274,7 @@ const validateTableData = (): boolean => {
|
|
|
if (formData.value.outsourcingFlag !== 1) {
|
|
|
list.value.forEach((row, index) => {
|
|
|
const rowNumber = index + 1;
|
|
|
- const deviceIdentifier = `${row.deviceCode}-${row.name}`;
|
|
|
+ const deviceIdentifier = `${row.deviceCode}-${formatMaintItemName(row.name)}`;
|
|
|
|
|
|
// 检查消耗物料规则,如果为1(不消耗物料)则跳过校验
|
|
|
if (row.rule === 1) {
|
|
@@ -2271,10 +2287,24 @@ const validateTableData = (): boolean => {
|
|
|
(row.delayNaturalDate || 0) > 0 ||
|
|
|
(row.delayDuration || 0) > 0;
|
|
|
|
|
|
- // 未设置推迟保养且未选择物料
|
|
|
- if (!hasDelay && getMaterialCount(row.bomNodeId) === 0) {
|
|
|
- materialRequiredErrors.push(`第${rowNumber}行【${deviceIdentifier}】未添加物料`);
|
|
|
- isValid = false;
|
|
|
+ // 未设置推迟保养时,需要校验物料
|
|
|
+ if (!hasDelay) {
|
|
|
+ // 使用 bomMaterialsMap 获取物料,更可靠
|
|
|
+ const uniqueKey = `${row.bomNodeId}`;
|
|
|
+ const materials = bomMaterialsMap.value[uniqueKey] || [];
|
|
|
+
|
|
|
+ // 过滤有效的物料(非禁用、非无效状态)
|
|
|
+ const validMaterials = materials.filter(material =>
|
|
|
+ material.materialName && // 物料名称不为空
|
|
|
+ material.unit && // 单位不为空
|
|
|
+ (material.unitPrice || 0) > 0 && // 单价大于0
|
|
|
+ (material.quantity || 0) > 0 // 数量大于0
|
|
|
+ );
|
|
|
+
|
|
|
+ if (validMaterials.length === 0) {
|
|
|
+ materialRequiredErrors.push(`第${rowNumber}行【${deviceIdentifier}】未添加有效物料`);
|
|
|
+ isValid = false;
|
|
|
+ }
|
|
|
}
|
|
|
});
|
|
|
}
|