gaoluyang
2026-05-15 af6be9b1bf9e0c70f1e2c5fed7ca9ae056881fdf
src/views/inventoryManagement/dispatchLog/Record.vue
@@ -150,7 +150,7 @@
          <el-input v-model="formState.unit" disabled />
        </el-form-item>
        <el-form-item label="仓库"
                      prop="warehouseId"
                      prop="warehouseInfoId"
                      :rules="[
                        {
                          required: true,
@@ -158,15 +158,14 @@
                          trigger: 'change',
                        }
                      ]">
          <el-select v-model="formState.warehouseId"
          <el-select v-model="formState.warehouseInfoId"
                     placeholder="请选择仓库"
                     clearable
                     :disabled="isEdit || !formState.productId"
                     @change="handleWarehouseChange"
                     style="width: 100%">
            <el-option v-for="warehouse in warehouseList"
                       :key="warehouse.id"
                       :label="warehouse.name"
                       :label="warehouse.warehouseName"
                       :value="warehouse.id" />
          </el-select>
        </el-form-item>
@@ -182,7 +181,6 @@
          <el-select v-model="formState.batchNo"
                     placeholder="请选择批号"
                     clearable
                     :disabled="isEdit"
                     @change="handleBatchNoChange"
                     style="width: 100%">
            <el-option v-for="batch in batchNoList"
@@ -191,10 +189,10 @@
                       :value="batch" />
          </el-select>
        </el-form-item>
        <el-form-item v-if="formState.batchNo && batchNoStockMap[formState.batchNo]"
        <el-form-item v-if="formState.batchNo && batchNoStockMap[formState.batchNo] !== undefined"
                      label="当前批号库存"
                      prop="currentStock">
          <el-input v-model="batchNoStockMap[formState.batchNo]" disabled />
          <el-input :model-value="batchNoStockMap[formState.batchNo]" disabled />
        </el-form-item>
        <el-form-item label="出库数量"
                      prop="qualitity"
@@ -244,7 +242,7 @@
                      ]">
          <el-select v-model="formState.type"
                     placeholder="请选择库存类型"
                     :disabled="isEdit">
                     >
            <el-option label="合格库存"
                       value="qualified" />
            <el-option label="不合格库存"
@@ -290,9 +288,10 @@
  findAllQualifiedStockOutRecordTypeOptions,
  findAllUnQualifiedStockOutRecordTypeOptions,
} from "@/api/basicData/enum.js";
import { addStockOutRecordOnly } from "@/api/inventoryManagement/stockInventory.js";
import { addStockOutRecordOnly, getStockInventoryByModelId } from "@/api/inventoryManagement/stockInventory.js";
import { addUnqualifiedStockOutRecordOnly } from "@/api/inventoryManagement/stockUninventory.js";
import { getWarehouseList } from "@/api/inventoryManagement/warehouse.js";
import { productModelListByUrl } from "@/api/basicData/productModel.js";
const userStore = useUserStore();
const { proxy } = getCurrentInstance();
@@ -357,7 +356,7 @@
  productName: "",
  productModelName: "",
  unit: "",
  warehouseId: null, // 仓库ID
  warehouseInfoId: null, // 仓库ID
  type: undefined,
  qualitity: 0,
  batchNo: null,
@@ -463,7 +462,7 @@
};
// 编辑
const handleEdit = (row) => {
const handleEdit = async (row) => {
  dialogType.value = 'edit';
  resetForm();
  // 填充表单数据
@@ -477,21 +476,110 @@
    type: props.type === '0' ? 'qualified' : 'unqualified',
    qualitity: row.stockOutNum,
    batchNo: row.batchNo,
    warehouseInfoId: row.warehouseInfoId,
    recordType: row.recordType,
    remark: row.remark || "",
    maxStock: row.stockOutNum || 0, // 编辑时使用当前出库数量作为最大库存(因为是修改已有记录)
    maxStock: 0,
  };
  // 编辑时从batchNoMaps获取批号列表
  if (row.batchNoMaps && Object.keys(row.batchNoMaps).length > 0) {
    batchNoList.value = Object.keys(row.batchNoMaps);
    batchNoStockMap.value = row.batchNoMaps;
  } else if (row.batchNo) {
    batchNoList.value = [row.batchNo];
    batchNoStockMap.value = { [row.batchNo]: row.stockOutNum || 0 };
  } else {
    batchNoList.value = [];
    batchNoStockMap.value = {};
  // 编辑时加载仓库列表
  if (row.warehouseInfoId) {
    const allWarehouses = await loadWarehouseList();
    const currentWarehouse = allWarehouses.find(w => String(w.id) === String(row.warehouseInfoId));
    if (currentWarehouse) {
      warehouseList.value = [{
        id: currentWarehouse.id,
        warehouseName: currentWarehouse.warehouseName || currentWarehouse.name || currentWarehouse.warehouseCode || `仓库${currentWarehouse.id}`
      }];
    }
  }
  // 编辑时查询产品库存
  if (row.productModelId) {
    try {
      console.log('编辑时查询库存,productModelId:', row.productModelId);
      console.log('当前row数据:', row);
      const res = await productModelListByUrl('/basic/product/pageModelAndQua', {
        id: row.productModelId,
        page: 1,
        size: 1
      });
      console.log('查询库存接口返回:', res);
      // 接口直接返回 {records: [], total: ...},没有 data 层和 code
      const records = res.records || (res.data && res.data.records) || [];
      if (records.length > 0) {
        const product = records[0];
        console.log('产品数据:', product);
        console.log('batchNoMaps:', product.batchNoMaps);
        if (product.batchNoMaps && Object.keys(product.batchNoMaps).length > 0) {
          rawBatchNoMaps.value = product.batchNoMaps;
          // 获取所有仓库信息用于反显名称
          const allWarehouses = await loadWarehouseList();
          const warehouseMap = {};
          allWarehouses.forEach(w => {
            warehouseMap[w.id] = w.warehouseName || w.name || w.warehouseCode || `仓库${w.id}`;
          });
          // 构建仓库列表
          warehouseList.value = Object.keys(product.batchNoMaps).map(warehouseInfoId => ({
            id: warehouseInfoId,
            warehouseName: warehouseMap[warehouseInfoId] || `仓库${warehouseInfoId}`
          }));
          console.log('当前仓库ID:', row.warehouseInfoId);
          console.log('该仓库的batchNoMaps:', product.batchNoMaps[row.warehouseInfoId]);
          // 如果当前有仓库ID,解析该仓库的批号库存
          if (row.warehouseInfoId && product.batchNoMaps[row.warehouseInfoId]) {
            const batchArray = product.batchNoMaps[row.warehouseInfoId];
            console.log('batchArray:', batchArray);
            const batchMap = {};
            const batches = [];
            batchArray.forEach(item => {
              const batchNo = Object.keys(item)[0];
              const stock = item[batchNo];
              console.log('批号:', batchNo, '库存:', stock);
              batches.push(batchNo);
              batchMap[batchNo] = stock;
            });
            batchNoList.value = batches;
            batchNoStockMap.value = batchMap;
            console.log('batchMap:', batchMap);
            console.log('当前批号:', row.batchNo);
            // 设置当前批号的库存
            if (row.batchNo && batchMap[row.batchNo] !== undefined) {
              formState.value.maxStock = batchMap[row.batchNo];
              console.log('设置maxStock为:', formState.value.maxStock);
            } else {
              console.log('未找到当前批号的库存');
              formState.value.maxStock = 0;
            }
          } else {
            console.log('未找到当前仓库的batchNoMaps');
            batchNoList.value = row.batchNo ? [row.batchNo] : [];
            batchNoStockMap.value = {};
            formState.value.maxStock = 0;
          }
        } else {
          console.log('产品没有batchNoMaps');
          batchNoList.value = row.batchNo ? [row.batchNo] : [];
          batchNoStockMap.value = {};
          formState.value.maxStock = 0;
        }
      } else {
        console.log('接口返回数据异常:', res);
        batchNoList.value = row.batchNo ? [row.batchNo] : [];
        batchNoStockMap.value = {};
        formState.value.maxStock = 0;
      }
    } catch (error) {
      console.error('查询产品库存失败', error);
      batchNoList.value = row.batchNo ? [row.batchNo] : [];
      batchNoStockMap.value = {};
      formState.value.maxStock = 0;
    }
  } else {
    console.log('没有productModelId');
    batchNoList.value = row.batchNo ? [row.batchNo] : [];
    batchNoStockMap.value = {};
    formState.value.maxStock = 0;
  }
  // 所有数据加载完成后再显示弹窗
  dialogVisible.value = true;
};
@@ -504,7 +592,7 @@
    productName: "",
    productModelName: "",
    unit: "",
    warehouseId: null,
    warehouseInfoId: null,
    type: undefined,
    qualitity: 0,
    batchNo: null,
@@ -551,7 +639,7 @@
    batchNoList.value = [];
    batchNoStockMap.value = {};
    rawBatchNoMaps.value = {};
    formState.value.warehouseId = null;
    formState.value.warehouseInfoId = null;
    formState.value.batchNo = null;
    formState.value.maxStock = 0;
@@ -564,9 +652,9 @@
        warehouseMap[w.id] = w.warehouseName || w.name || w.warehouseCode || `仓库${w.id}`;
      });
      // 构建仓库列表
      warehouseList.value = Object.keys(product.batchNoMaps).map(warehouseId => ({
        id: warehouseId,
        name: warehouseMap[warehouseId] || `仓库${warehouseId}`
      warehouseList.value = Object.keys(product.batchNoMaps).map(warehouseInfoId => ({
        id: warehouseInfoId,
        warehouseName: warehouseMap[warehouseInfoId] || `仓库${warehouseInfoId}`
      }));
    }
    showProductSelect.value = false;
@@ -576,15 +664,15 @@
};
// 仓库选择变化处理
const handleWarehouseChange = (warehouseId) => {
const handleWarehouseChange = (warehouseInfoId) => {
  batchNoList.value = [];
  batchNoStockMap.value = {};
  formState.value.batchNo = null;
  formState.value.maxStock = 0;
  if (warehouseId && rawBatchNoMaps.value[warehouseId]) {
  if (warehouseInfoId && rawBatchNoMaps.value[warehouseInfoId]) {
    // 解析该仓库下的批号数据,格式为:[{批号: 库存}, {批号: 库存}]
    const batchArray = rawBatchNoMaps.value[warehouseId];
    const batchArray = rawBatchNoMaps.value[warehouseInfoId];
    const batchMap = {};
    const batches = [];