huminmin
3 天以前 45ebf67583fb4ab6be9c437c39b78ae254407654
优化主生产计划表单产品相关
已修改1个文件
98 ■■■■ 文件已修改
src/views/productionPlan/productionPlan/index.vue 98 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionPlan/productionPlan/index.vue
@@ -234,19 +234,27 @@
                    placeholder="请输入客户名称" />
        </el-form-item>
        <el-form-item label="产品名称"
                      prop="productName">
          <el-input v-model="form.productName"
                    placeholder="请输入产品名称" />
                      prop="productMaterialId">
          <el-tree-select v-model="form.productMaterialId"
                          placeholder="请选择"
                          clearable
                          :data="productOptions"
                          :render-after-expand="false"
                          filterable
                          @change="handleProductChange"
                          style="width: 100%" />
        </el-form-item>
        <el-form-item label="产品规格"
                      prop="specification">
          <el-input v-model="form.specification"
                    placeholder="请输入产品规格" />
        </el-form-item>
        <el-form-item label="物料编码"
                      prop="materialCode">
          <el-input v-model="form.materialCode"
                    placeholder="请输入物料编码" />
                      prop="productMaterialSkuId">
          <el-select v-model="form.productMaterialSkuId"
                     @change="handleChangeSpecification"
                     placeholder="请选择">
            <el-option v-for="item in specificationOptions"
                       :key="item.skuId"
                       :label="item.specification"
                       :value="item.skuId" />
          </el-select>
        </el-form-item>
        <el-form-item label="块数"
                      prop="quantity">
@@ -335,6 +343,7 @@
    productionPlanCombine,
  } from "@/api/productionPlan/productionPlan.js";
  import PIMTable from "./components/PIMTable.vue";
  import {modelListPage, productTreeList} from "@/api/basicData/newProduct.js";
  const { proxy } = getCurrentInstance();
@@ -557,11 +566,15 @@
  // 新增/编辑相关
  const dialogVisible = ref(false);
  const operationType = ref("add"); // add | edit
  const productOptions = ref([])
  const specificationOptions = ref([])
  const formRef = ref(null);
  const form = reactive({
    id: undefined,
    applyNo: "",
    customerName: "",
    productMaterialId: undefined,
    productMaterialSkuId: undefined,
    productName: "",
    specification: "",
    materialCode: "",
@@ -581,12 +594,11 @@
    customerName: [
      { required: true, message: "请输入客户名称", trigger: "blur" },
    ],
    productName: [{ required: true, message: "请输入产品名称", trigger: "blur" }],
    specification: [
      { required: true, message: "请输入产品规格", trigger: "blur" },
    productMaterialSkuId: [
      { required: true, message: "请选择产品规格", trigger: "change" },
    ],
    materialCode: [
      { required: true, message: "请输入物料编码", trigger: "blur" },
    productMaterialId: [
      { required: true, message: "请选择产品", trigger: "change" },
    ],
  });
@@ -612,6 +624,53 @@
    // 限制四位小数
    mergeForm.totalAssignedQuantity = Number(value.toFixed(4));
  };
  const fetchProductOptions = () => {
    return productTreeList().then(res => {
      productOptions.value = convertIdToValue(res.data);
      return res;
    });
  }
  const convertIdToValue = (data) => {
    return data.map((item) => {
      const newItem = {
        value: `config_${item.configId}`, // 使用config_前缀确保唯一性
        label: item.configName,
        disabled: item.materialList.length === 0,
      };
      if (item.materialList && item.materialList.length > 0) {
        newItem.children = item.materialList.map(material => ({
          value: material.id, // 使用material的id作为value
          label: material.materialName, // 使用materialName作为label
        }));
      }
      return newItem;
    });
  }
  const handleProductChange = (value) => {
    form.productMaterialSkuId = undefined
    fetchSpecificationOptions(value)
  }
  const fetchSpecificationOptions = (materialId) => {
    specificationOptions.value = []
    if (materialId) {
      modelListPage({ materialId: materialId}).then(res => {
        specificationOptions.value = res.data;
      });
    }
  }
  const handleChangeSpecification = (value) => {
    form.materialCode = undefined
    const selectedModel = specificationOptions.value.find((item) => item.id === value)
    if (selectedModel) {
      form.materialCode = selectedModel.materialCode
    }
  }
  // 生成模拟进度详情数据
  const generateProgressDetails = status => {
@@ -950,6 +1009,8 @@
      applyNo: "",
      customerName: "",
      productName: "",
      productMaterialId: undefined,
      productMaterialSkuId: undefined,
      specification: "",
      materialCode: "",
      quantity: 0,
@@ -964,6 +1025,7 @@
      remarkTwo: "",
    });
    dialogVisible.value = true;
    fetchProductOptions();
  };
  // 编辑
@@ -974,6 +1036,8 @@
      applyNo: row.applyNo || "",
      customerName: row.customerName || "",
      productName: row.productName || "",
      productMaterialId: row.productMaterialId || undefined,
      productMaterialSkuId: row.productMaterialSkuId || undefined,
      specification: row.specification || "",
      materialCode: row.materialCode || "",
      quantity: row.quantity || 0,
@@ -988,6 +1052,8 @@
      remarkTwo: row.remarkTwo || "",
    });
    dialogVisible.value = true;
    fetchProductOptions();
    fetchSpecificationOptions(row.productMaterialId);
  };
  // 删除