gaoluyang
2026-09-22 1f7e58b5ec4f633773bbcfe65d1f686f934905d1
src/views/inventoryManagement/stockManagement/OilStockInDialog.vue
@@ -10,15 +10,16 @@
               ref="formRef">
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="产品大类"
            <el-form-item label="产品"
                          prop="productId"
                          :rules="[
                {
                required: true,
                message: '请选择产品大类',
                message: '请选择产品',
                trigger: 'change',
              }
            ]">
              <!-- 油品由「产品 + 规格型号」两级选出,不单独维护 -->
              <el-tree-select v-model="formState.productId"
                              placeholder="请选择"
                              clearable
@@ -206,10 +207,11 @@
          <el-col :span="12">
            <el-form-item label="油品"
                          prop="oilProduct"
                          :rules="[{ required: true, message: '请选择油品', trigger: 'change' }]">
              <el-input :model-value="formState.oilProduct"
                        readonly
                        placeholder="--" />
                          :rules="[{ required: true, message: '请输入油品', trigger: 'change' }]">
              <!-- 选完「产品 + 规格型号」自动写入,也能自己改 -->
              <el-input v-model="formState.oilProduct"
                        placeholder="选完产品与规格型号后自动生成"
                        @input="handleOilProductInput" />
            </el-form-item>
          </el-col>
        </el-row>
@@ -315,7 +317,6 @@
                          prop="trailerPlateNo"
                          :rules="[{ required: true, message: '请输入车挂牌号', trigger: 'blur' }]">
              <el-input v-model="formState.trailerPlateNo"
                        :readonly="!!formState.vehicleId"
                        placeholder="请输入"
                        clearable />
            </el-form-item>
@@ -679,6 +680,26 @@
  const productOptions = ref([]);
  const modelOptions = ref([]);
  // 油品默认由「产品 + 规格型号」两级拼出来(两级都选完才有值)。
  // autoOilProduct 记住自动写进去的值,用来判断用户有没有手改过——手改过就不再覆盖
  const autoOilProduct = ref("");
  const oilProductLabel = (productName, model) =>
    [productName, model].filter(Boolean).join(" / ");
  const syncOilProduct = next => {
    const current = formState.value.oilProduct;
    if (!current || current === autoOilProduct.value) {
      formState.value.oilProduct = next || undefined;
    }
    autoOilProduct.value = next || "";
  };
  // 手改过之后 autoOilProduct 就对不上了,后面的产品/规格联动不再覆盖它
  const handleOilProductInput = () => {
    autoOilProduct.value = "";
  };
  let { proxy } = getCurrentInstance();
  const closeModal = () => {
@@ -708,19 +729,17 @@
    }
  };
  // 车辆选择改变:车牌号、车挂牌号与司机信息由车辆主数据带出,司机可手动覆盖
  // 车辆选择改变:车牌号与司机信息由车辆主数据带出,司机可手动覆盖。
  // 车挂牌号是挂车自己的牌、不在车辆主数据里,始终手填,不参与联动。
  const vehicleChange = id => {
    const vehicle = vehicleList.value.find(item => item.id === id);
    if (vehicle) {
      formState.value.truckPlateNo = vehicle.plateNumber || "";
      // 车挂牌号与车牌号是同一个牌,选了车辆就带出并置为只读,避免手填出两个不一致的值
      formState.value.trailerPlateNo = vehicle.plateNumber || "";
      formState.value.driverName = vehicle.driverName || "";
      formState.value.driverPhone = vehicle.driverPhone || "";
    } else {
    if (!vehicle) {
      formState.value.truckPlateNo = "";
      formState.value.trailerPlateNo = "";
      return;
    }
    formState.value.truckPlateNo = vehicle.plateNumber || "";
    formState.value.driverName = vehicle.driverName || "";
    formState.value.driverPhone = vehicle.driverPhone || "";
  };
  const getProductOptions = () =>
@@ -746,7 +765,8 @@
    formState.value.productName = "";
    formState.value.productModelName = "";
    formState.value.unit = "";
    formState.value.oilProduct = undefined;
    // 油品是产品 + 规格拼出来的,换了产品就一起作废,手改过的不动
    syncOilProduct("");
    modelOptions.value = [];
    if (!value) {
      return;
@@ -756,14 +776,14 @@
    });
  };
  // 规格型号改变:产品名称/规格/单位由规格主数据带出,油品取产品名称
  // 规格型号改变:产品名称/规格/单位由规格主数据带出
  const handleProductModelChange = value => {
    const item = modelOptions.value.find(row => row.id === value);
    formState.value.productName = item?.productName || "";
    formState.value.productModelName = item?.model || "";
    formState.value.unit = item?.unit || "";
    // 本租户「油品」就是产品名称(库存明细/出库台账的油品列绑的都是 productName)
    formState.value.oilProduct = item?.productName || undefined;
    // 本租户「油品」按「产品名称 / 规格型号」展示,库存明细、出库台账的油品列取的就是它
    syncOilProduct(oilProductLabel(item?.productName, item?.model));
    proxy.$refs["formRef"]?.validateField("productModelId");
  };