spring
3 天以前 3739a47340c8d8b6edf5fdcbb0534f5fc8d96530
src/views/salesManagement/salesQuotation/index.vue
@@ -51,7 +51,7 @@
        height="calc(100vh - 22em)"
      >
            <el-table-column align="center" label="序号" type="index" width="60" />
        <el-table-column prop="quotationNo" label="报价单号" width="150" />
        <el-table-column prop="quotationNo" label="报价单号" />
        <el-table-column prop="customer" label="客户名称" />
        <el-table-column prop="salesperson" label="业务员" width="100" />
        <el-table-column prop="quotationDate" label="报价日期" width="120" />
@@ -252,7 +252,7 @@
                           @change="getProductModel($event, scope.row)"
                        >
                           <el-option
                              v-for="item in modelOptions"
                              v-for="item in scope.row.modelOptions || []"
                              :key="item.id"
                              :label="item.model"
                              :value="item.id"
@@ -322,7 +322,7 @@
        </el-descriptions-item>
      </el-descriptions>
      
      <div style="margin-top: 20px;">
      <div style="margin: 20px 0;">
        <h4>产品明细</h4>
        <el-table :data="currentQuotation.products" border style="width: 100%">
          <el-table-column prop="product" label="产品名称" />
@@ -521,7 +521,7 @@
   if (!value) {
      row.productId = '';
      row.product = '';
      modelOptions.value = [];
      row.modelOptions = [];
      row.specificationId = '';
      row.specification = '';
      row.unit = '';
@@ -534,9 +534,9 @@
   if (label) {
      row.product = label;
   }
   // 获取规格型号列表
   // 获取规格型号列表,设置到当前行的 modelOptions
   modelList({ id: value }).then((res) => {
      modelOptions.value = res || [];
      row.modelOptions = res || [];
   });
};
const getProductModel = (value, row) => {
@@ -550,10 +550,11 @@
   }
   // 更新 specificationId(v-model 已经自动更新,这里确保一致性)
   row.specificationId = value;
   const index = modelOptions.value.findIndex((item) => item.id === value);
   const modelOptions = row.modelOptions || [];
   const index = modelOptions.findIndex((item) => item.id === value);
   if (index !== -1) {
      row.specification = modelOptions.value[index].model;
      row.unit = modelOptions.value[index].unit;
      row.specification = modelOptions[index].model;
      row.unit = modelOptions[index].unit;
   } else {
      row.specification = '';
      row.unit = '';
@@ -616,23 +617,46 @@
  form.paymentMethod = row.paymentMethod || ''
  form.status = row.status || '草稿'
  form.remark = row.remark || ''
  form.products = row.products ? row.products.map(product => {
  form.products = row.products ? await Promise.all(row.products.map(async (product) => {
    const productName = product.product || product.productName || ''
    // 优先用 productId;如果只有名称,尝试反查 id 以便树选择器反显
    const resolvedId = product.productId
    const resolvedProductId = product.productId
      ? Number(product.productId)
      : findNodeIdByLabel(productOptions.value, productName) || ''
    // 如果有产品ID,加载对应的规格型号列表
    let modelOptions = [];
    let resolvedSpecificationId = product.specificationId || '';
    if (resolvedProductId) {
      try {
        const res = await modelList({ id: resolvedProductId });
        modelOptions = res || [];
        // 如果返回的数据没有 specificationId,但有 specification 名称,根据名称查找 ID
        if (!resolvedSpecificationId && product.specification) {
          const foundModel = modelOptions.find(item => item.model === product.specification);
          if (foundModel) {
            resolvedSpecificationId = foundModel.id;
          }
        }
      } catch (error) {
        console.error('加载规格型号失败:', error);
      }
    }
    return {
      productId: resolvedId,
      productId: resolvedProductId,
      product: productName,
      specificationId: product.specificationId || '',
      specificationId: resolvedSpecificationId,
      specification: product.specification || '',
      quantity: product.quantity || 0,
      unit: product.unit || '',
      unitPrice: product.unitPrice || 0,
      amount: product.amount || 0
      amount: product.amount || 0,
      modelOptions: modelOptions // 为每行添加独立的规格型号列表
    }
  }) : []
  })) : []
  form.subtotal = row.subtotal || 0
  form.freight = row.freight || 0
  form.otherFee = row.otherFee || 0
@@ -714,7 +738,8 @@
    quantity: 1,
    unit: '',
    unitPrice: 0,
    amount: 0
    amount: 0,
    modelOptions: [] // 为每行添加独立的规格型号列表
  })
}