spring
2026-05-25 0c4429a719f5c95a7690fae51efaaa799ef4e77d
src/views/productionManagement/workOrder/components/ProductionRecordForm.vue
@@ -17,7 +17,7 @@
    type: Number,
    default: 120
  },
  /** 本次生产数量(成型工序用于计算投入重量) */
  /** 本次生产数量(成型工序用于计算投入重量/数量) */
  quantity: {
    type: Number,
    default: null
@@ -27,7 +27,7 @@
    type: Boolean,
    default: false
  },
  /** 工单 BOM 投入重量,非成型工序回显到「投入重量」 */
  /** 工单 BOM 投入重量,非成型工序回显到「投入重量/数量」 */
  bomInputQty: {
    type: Number,
    default: null
@@ -39,11 +39,21 @@
  list: [] as any[],
});
const INPUT_WEIGHT_PARAM_ITEM = "投入重量/数量";
/** 参数项展示名(兼容库内旧名「投入重量」) */
const displayParameterItem = (name) => {
  const trimmed = String(name ?? "").trim();
  if (trimmed === "投入重量") return INPUT_WEIGHT_PARAM_ITEM;
  return trimmed;
};
const fieldLabel = (item: any) => {
  const parameterItem = displayParameterItem(item.parameterItem);
  if (!item.unit || item.unit === "/") {
    return item.parameterItem;
    return parameterItem;
  }
  return `${item.parameterItem}(${item.unit})`;
  return `${parameterItem}(${item.unit})`;
};
const getType = (item: any) => item.type || "文本格式";
@@ -52,7 +62,11 @@
  const result: Record<string, any[]> = {};
  formData.list.forEach((item, index) => {
    if (String(item.isRequired) === "1") {
      result[`list.${index}.value`] = [{required: true, message: `请输入${item.parameterItem}`, trigger: "blur"}];
      result[`list.${index}.value`] = [{
        required: true,
        message: `请输入${displayParameterItem(item.parameterItem)}`,
        trigger: "blur"
      }];
    }
  });
  return result;
@@ -66,15 +80,17 @@
const normalizeUnit = (unit) => String(unit ?? "").trim().toLowerCase();
const isInputWeightItem = (item) =>
  String(item?.parameterItem ?? "").includes("投入重量") &&
  normalizeUnit(item?.unit) === "kg";
const isInputWeightItem = (item) => {
  const name = String(item?.parameterItem ?? "").trim();
  return (name === "投入重量" || name.includes(INPUT_WEIGHT_PARAM_ITEM)) &&
    normalizeUnit(item?.unit) === "kg";
};
const isBlankCoeffItem = (item) =>
  String(item?.parameterItem ?? "").includes("生坯系数") &&
  normalizeUnit(item?.unit) === "g";
/** 投入重量(KG) = 本次生产数量 × 生坯系数(g) / 1000 */
/** 投入重量/数量(KG) = 本次生产数量 × 生坯系数(g) / 1000 */
const syncFormingInputWeight = () => {
  if (!props.isFormingProcess) return;
  const weightItem = formData.list.find(isInputWeightItem);
@@ -93,13 +109,19 @@
  weightItem.value = Number(((qty * coeff) / 1000).toFixed(4));
};
/** 非成型:投入重量取工单 bomInputQty */
const syncBomInputWeight = () => {
/** 非成型:投入重量/数量取工单 bomInputQty(仅回显,不覆盖用户已编辑的值) */
const syncBomInputWeight = (force = false) => {
  if (props.isFormingProcess) return;
  const weightItem = formData.list.find(isInputWeightItem);
  if (!weightItem) return;
  const bom = props.bomInputQty;
  if (bom === null || bom === undefined || Number.isNaN(Number(bom))) {
    return;
  }
  const current = weightItem.value;
  const isEmpty =
    current === null || current === undefined || current === "";
  if (!force && !isEmpty) {
    return;
  }
  weightItem.value = Number(bom);
@@ -113,15 +135,22 @@
  }
};
const cloneParamList = (list) =>
  JSON.parse(JSON.stringify(list || []));
const initData = () => {
  formData.list = props.list || [];
  formData.list = cloneParamList(props.list);
  formData.list.forEach(item => {
    if (item.value === undefined) {
      item.value = null;
    }
  });
  loadDeviceName();
  syncInputWeight();
  if (props.isFormingProcess) {
    syncFormingInputWeight();
  } else {
    syncBomInputWeight(true);
  }
};
const submitData = async () => {
@@ -139,7 +168,7 @@
    () => {
      initData();
    },
    {immediate: true, deep: true}
    {immediate: true}
);
watch(