gongchunyi
2 天以前 d48d302bd1da8047d10af89d42fb34dd9f8cdeb4
src/views/salesManagement/salesLedger/index.vue
@@ -75,7 +75,7 @@
                <template #default="scope">
                  {{ scope.row.thickness ?? "" }}
                </template>
                  </el-table-column>
              </el-table-column>
                     <el-table-column label="宽(mm)" prop="width" min-width="80">
                        <template #default="scope">
                           {{ scope.row.width ?? "" }}
@@ -287,6 +287,21 @@
               <el-table-column label="厚度" prop="thickness" min-width="90">
                  <template #default="scope">
                     {{ scope.row.thickness ?? "" }}
                  </template>
               </el-table-column>
               <el-table-column label="宽(mm)" prop="width" min-width="80">
                  <template #default="scope">
                     {{ scope.row.width ?? "" }}
                  </template>
               </el-table-column>
               <el-table-column label="高(mm)" prop="height" min-width="80">
                  <template #default="scope">
                     {{ scope.row.height ?? "" }}
                  </template>
               </el-table-column>
               <el-table-column label="面积(m²)" prop="actualTotalArea" min-width="100">
                  <template #default="scope">
                     {{ scope.row.actualTotalArea ?? "" }}
                  </template>
               </el-table-column>
               <el-table-column label="数量" prop="quantity" />
@@ -706,11 +721,12 @@
                                 <el-input-number
                                    v-model="item.quantity"
                                    :min="0"
                                    :step="0.1"
                                    :precision="2"
                                    :step="1"
                                    :precision="0"
                                    style="width: 100%;"
                                    placeholder="请输入数量"
                                    :disabled="operationType === 'view'"
                                    @change="calculateFromUnitPrice(true)"
                                 />
                              </div>
                              <el-button
@@ -1078,7 +1094,7 @@
    type: "货车", // 货车, 快递
  },
  deliveryRules: {
    type: [
    type: [
      { required: true, message: "请选择发货类型", trigger: "change" }
    ]
  },
@@ -1104,6 +1120,7 @@
      otherAmountSelectOptions.value = records.map((item) => ({
         id: item.id,
         processName: item.processName ?? "",
         unitPrice: item.unitPrice ?? 0,
      }));
   } finally {
      otherAmountSelectOptionsLoading.value = false;
@@ -1175,6 +1192,7 @@
      return {
         id: s.id,
         processName: opt?.processName ?? s.processName ?? "",
         unitPrice: opt?.unitPrice ?? s.unitPrice ?? 0,
         quantity: Number(s.quantity ?? 0) || 0,
      };
   });
@@ -1230,8 +1248,10 @@
   productForm.value.salesProductProcessList.push({
      id: opt.id,
      processName: opt.processName,
      unitPrice: opt.unitPrice ?? 0,
      quantity: 0,
   });
   calculateFromUnitPrice(true);
   // 选择完成后关闭弹窗,下一次可再次点击“新增”继续添加
   otherAmountAddDialogVisible.value = false;
@@ -1246,6 +1266,7 @@
   if (operationType.value === "view") return;
   if (!Array.isArray(productForm.value?.salesProductProcessList)) return;
   productForm.value.salesProductProcessList.splice(index, 1);
   calculateFromUnitPrice(true);
};
// 发货审批人节点(仿协同审批 infoFormDia.vue)
@@ -1872,15 +1893,16 @@
         recalcAreaTotals();
         // 其他金额只提交 {id, processName, quantity}(后端字段:salesProductProcessList)
         productForm.value.salesProductProcessList = (Array.isArray(productForm.value.salesProductProcessList)
            ? productForm.value.salesProductProcessList
            : []
         )
            .map((it) => ({
               id: it?.id,
               processName: it?.processName ?? "",
               quantity: Number(it?.quantity ?? 0) || 0,
            }))
            .filter((it) => it.id !== null && it.id !== undefined && it.id !== "");
         ? productForm.value.salesProductProcessList
         : []
      )
         .map((it) => ({
            id: it?.id,
            processName: it?.processName ?? "",
            unitPrice: Number(it?.unitPrice ?? 0) || 0,
            quantity: Number(it?.quantity ?? 0) || 0,
         }))
         .filter((it) => it.id !== null && it.id !== undefined && it.id !== "");
         if (operationType.value === "edit") {
            submitProductEdit();
@@ -2184,12 +2206,15 @@
      return;
   }
   const settlePieceArea = parseFloat(productForm.value.settlePieceArea) || 1;
   // 含税总价计算 = 单价 * 结算面积 * 数量
   productForm.value.taxInclusiveTotalPrice =
      proxy.calculateTaxIncludeTotalPrice(
         productForm.value.taxInclusiveUnitPrice * settlePieceArea,
         productForm.value.quantity
      );
   // 含税总价计算 = 单价 * 结算面积 * 数量 + 其他金额总和
   const basePrice = proxy.calculateTaxIncludeTotalPrice(
      productForm.value.taxInclusiveUnitPrice * settlePieceArea,
      productForm.value.quantity
   );
   const otherAmountTotal = (productForm.value.salesProductProcessList || []).reduce((total, item) => {
      return total + (Number(item.unitPrice) || 0) * (Number(item.quantity) || 0);
   }, 0);
   productForm.value.taxInclusiveTotalPrice = (parseFloat(basePrice) + otherAmountTotal).toFixed(2);
   if (productForm.value.taxRate) {
      // 不含税总价计算
      productForm.value.taxExclusiveTotalPrice =
@@ -2271,8 +2296,12 @@
   
   isCalculating.value = true;
   
   // 计算含税单价 = 含税总价 / 数量
   productForm.value.taxInclusiveUnitPrice = (totalPrice / quantity).toFixed(2);
   // 计算含税单价 = (含税总价 - 其他金额总和) / 数量
   const otherAmountTotal = (productForm.value.salesProductProcessList || []).reduce((total, item) => {
      return total + (Number(item.unitPrice) || 0) * (Number(item.quantity) || 0);
   }, 0);
   const basePrice = totalPrice - otherAmountTotal;
   productForm.value.taxInclusiveUnitPrice = (basePrice / quantity).toFixed(2);
   
   // 如果有税率,计算不含税总价
   if (productForm.value.taxRate) {
@@ -2309,8 +2338,12 @@
   const inclusiveTotalPrice = exclusiveTotalPrice / (1 - taxRateDecimal);
   productForm.value.taxInclusiveTotalPrice = inclusiveTotalPrice.toFixed(2);
   
   // 计算含税单价 = 含税总价 / 数量
   productForm.value.taxInclusiveUnitPrice = (inclusiveTotalPrice / quantity).toFixed(2);
   // 计算含税单价 = (含税总价 - 其他金额总和) / 数量
   const otherAmountTotal = (productForm.value.salesProductProcessList || []).reduce((total, item) => {
      return total + (Number(item.unitPrice) || 0) * (Number(item.quantity) || 0);
   }, 0);
   const basePrice = inclusiveTotalPrice - otherAmountTotal;
   productForm.value.taxInclusiveUnitPrice = (basePrice / quantity).toFixed(2);
   
   isCalculating.value = false;
};
@@ -2333,8 +2366,12 @@
   isCalculating.value = true;
   // 计算含税总价 = 单价 * 结算面积 * 数量
   productForm.value.taxInclusiveTotalPrice = (unitPrice * settlePieceArea * quantity).toFixed(2);
   // 计算含税总价 = 单价 * 结算面积 * 数量 + 其他金额总和
   const basePrice = unitPrice * settlePieceArea * quantity;
   const otherAmountTotal = (productForm.value.salesProductProcessList || []).reduce((total, item) => {
      return total + (Number(item.unitPrice) || 0) * (Number(item.quantity) || 0);
   }, 0);
   productForm.value.taxInclusiveTotalPrice = (basePrice + otherAmountTotal).toFixed(2);
   // 如果有税率,计算不含税总价
   if (productForm.value.taxRate) {
@@ -2366,8 +2403,12 @@
   isCalculating.value = true;
   // 计算含税总价 = 单价 * 结算面积 * 数量
   productForm.value.taxInclusiveTotalPrice = (unitPrice * settlePieceArea * quantity).toFixed(2);
   // 计算含税总价 = 单价 * 结算面积 * 数量 + 其他金额总和
   const basePrice = unitPrice * settlePieceArea * quantity;
   const otherAmountTotal = (productForm.value.salesProductProcessList || []).reduce((total, item) => {
      return total + (Number(item.unitPrice) || 0) * (Number(item.quantity) || 0);
   }, 0);
   productForm.value.taxInclusiveTotalPrice = (basePrice + otherAmountTotal).toFixed(2);
   // 如果有税率,计算不含税总价
   if (productForm.value.taxRate) {