zhangwencui
2026-03-31 7cb0cf9a36e263d29be61a44b8caae2a896f3461
src/views/salesManagement/salesLedger/index.vue
@@ -82,70 +82,19 @@
            <el-table :data="props.row.children"
                      border
                      show-summary
                      :summary-method="summarizeChildrenTable">
                      :summary-method="summarizeChildrenTable"
                      style="min-width: 1200px;"
                      scrollbar-always-on>
              <el-table-column align="center"
                               label="序号"
                               type="index"
                               width="60" />
                               width="70" />
              <el-table-column label="产品大类"
                               prop="productCategory" />
              <el-table-column label="规格型号"
                               prop="specificationModel" />
              <el-table-column label="单位"
                               prop="unit" />
              <el-table-column label="生产状态"
                               width="100px"
                               align="center">
                <template #default="scope">
                  <el-tag v-if="scope.row.productionStatus === '已完成'"
                          type="success">已完成</el-tag>
                  <el-tag v-if="scope.row.productionStatus === '生产中'"
                          type="warning">生产中</el-tag>
                  <el-tag v-if="scope.row.productionStatus === '未开始'"
                          type="danger">未开始</el-tag>
                  <el-tag v-if="!scope.row.productionStatus"
                          type="info">暂无状态</el-tag>
                </template>
              </el-table-column>
              <el-table-column label="产品状态"
                               width="100px"
                               align="center">
                <template #default="scope">
                  <el-tag v-if="scope.row.approveStatus === 0"
                          type="info">未出库</el-tag>
                  <el-tag v-if="scope.row.approveStatus === 1"
                          type="success">已出库</el-tag>
                  <el-tag v-if="scope.row.approveStatus === 2"
                          type="warning">审核中</el-tag>
                  <el-tag v-if="scope.row.approveStatus === 3"
                          type="success">审核成功</el-tag>
                  <el-tag v-if="scope.row.approveStatus === 4"
                          type="danger">审核失败</el-tag>
                </template>
              </el-table-column>
              <el-table-column label="发货车牌"
                               minWidth="100px"
                               align="center">
                <template #default="scope">
                  <div>
                    <el-tag type="success"
                            v-if="scope.row.shippingCarNumber">{{ scope.row.shippingCarNumber }}</el-tag>
                    <el-tag v-else
                            type="info">未发货</el-tag>
                  </div>
                </template>
              </el-table-column>
              <el-table-column label="发货日期"
                               minWidth="100px"
                               align="center">
                <template #default="scope">
                  <div>
                    <div v-if="scope.row.shippingDate">{{ scope.row.shippingDate }}</div>
                    <el-tag v-else
                            type="info">未发货</el-tag>
                  </div>
                </template>
              </el-table-column>
              <el-table-column label="数量"
                               prop="quantity" />
              <el-table-column label="税率(%)"
@@ -159,16 +108,15 @@
              <el-table-column label="不含税总价(元)"
                               prop="taxExclusiveTotalPrice"
                               :formatter="formattedNumber" />
              <!--操作-->
              <el-table-column Width="60px"
              <el-table-column fixed="right"
                               label="操作"
                               width="150"
                               align="center">
                <template #default="scope">
                  <el-button :disabled="scope.row.approveStatus===2 || scope.row.approveStatus===5"
                             link
                  <el-button link
                             type="primary"
                             size="small"
                             @click="openDeliveryForm(scope.row)">发货</el-button>
                             @click="openDeliveryForm(props.row, scope.row)">发货</el-button>
                </template>
              </el-table-column>
            </el-table>
@@ -198,6 +146,29 @@
                         prop="projectName"
                         width="180"
                         show-overflow-tooltip />
        <el-table-column label="审核状态"
                         width="140">
          <template #default="scope">
            <el-tag v-if="(scope.row.approveStatus ?? scope.row.approvalStatus) == 0"
                    type="warning">待审核</el-tag>
            <el-tag v-else-if="(scope.row.approveStatus ?? scope.row.approvalStatus) == 1"
                    type="primary">审核中</el-tag>
            <el-tag v-else-if="(scope.row.approveStatus ?? scope.row.approvalStatus) == 2"
                    type="success">审核完成</el-tag>
            <el-tag v-else-if="(scope.row.approveStatus ?? scope.row.approvalStatus) == 3"
                    type="danger">审核未通过</el-tag>
            <el-tag v-else-if="(scope.row.approveStatus ?? scope.row.approvalStatus) == 4"
                    type="info">已重新提交</el-tag>
            <el-tag v-else
                    type="info">-</el-tag>
          </template>
        </el-table-column>
        <el-table-column label="销售类型"
                         width="120">
          <template #default="scope">
            <el-tag :type="scope.row.salesType === '紧急' ? 'danger' : 'info'">{{ scope.row.salesType || '-' }}</el-tag>
          </template>
        </el-table-column>
        <el-table-column label="付款方式"
                         prop="paymentMethod"
                         show-overflow-tooltip />
@@ -220,7 +191,7 @@
                         show-overflow-tooltip />
        <el-table-column fixed="right"
                         label="操作"
                         min-width="100"
                         min-width="150"
                         align="center">
          <template #default="scope">
            <el-button link
@@ -232,7 +203,7 @@
                       type="primary"
                       size="small"
                       @click="downLoadFile(scope.row)">附件</el-button>
            <!--            <el-button link type="primary" size="small" @click="openDeliveryForm(scope.row)">发货</el-button>-->
            <!-- <el-button link type="primary" size="small" @click="openDeliveryForm(scope.row)">发货</el-button> -->
          </template>
        </el-table-column>
      </el-table>
@@ -366,6 +337,57 @@
                        placeholder="请输入"
                        clearable
                        :disabled="operationType === 'view'" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="销售类型:"
                          prop="salesType">
              <el-select v-model="form.salesType"
                         placeholder="请选择"
                         clearable
                         :disabled="operationType === 'view'"
                         style="width: 100%">
                <el-option label="普通"
                           value="普通" />
                <el-option label="紧急"
                           value="紧急" />
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="24">
            <el-form-item v-if="operationType !== 'view'">
              <template #label>
                <span>审批人选择:</span>
                <el-button type="primary"
                           @click="addApproverNode"
                           style="margin-left: 8px;">新增节点</el-button>
              </template>
              <div style="display: flex; align-items: flex-end; flex-wrap: wrap;">
                <div v-for="(node, index) in approverNodes"
                     :key="node.id"
                     style="margin-right: 30px; text-align: center; margin-bottom: 10px;">
                  <div>
                    <span>审批人</span>
                    →
                  </div>
                  <el-select v-model="node.userId"
                             placeholder="选择人员"
                             style="width: 140px; margin-bottom: 8px;">
                    <el-option v-for="user in userList"
                               :key="user.userId"
                               :label="user.nickName"
                               :value="user.userId" />
                  </el-select>
                  <div>
                    <el-button type="danger"
                               size="small"
                               @click="removeApproverNode(index)"
                               v-if="approverNodes.length > 1">删除</el-button>
                  </div>
                </div>
              </div>
            </el-form-item>
          </el-col>
        </el-row>
@@ -765,22 +787,6 @@
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="24">
            <el-form-item label="审批人:"
                          prop="approverId">
              <el-select v-model="deliveryForm.approverId"
                         placeholder="请选择审批人"
                         clearable
                         :disabled="operationType === 'view'">
                <el-option v-for="item in userList"
                           :key="item.userId"
                           :label="item.nickName"
                           :value="item.userId" />
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <template #footer>
        <div class="dialog-footer">
@@ -814,11 +820,11 @@
    delProduct,
    delLedgerFile,
    getProductInventory,
    judgmentInventory,
  } from "@/api/salesManagement/salesLedger.js";
  import { modelList, productTreeList } from "@/api/basicData/product.js";
  import useFormData from "@/hooks/useFormData.js";
  import dayjs from "dayjs";
  import { getStockInPage } from "@/api/inventoryManagement/stockIn.js";
  const userStore = useUserStore();
  const { proxy } = getCurrentInstance();
@@ -837,6 +843,8 @@
  });
  const total = ref(0);
  const fileList = ref([]);
  const approverNodes = ref([{ id: 1, userId: null }]);
  let nextApproverId = 2;
  // 用户信息表单弹框数据
  const operationType = ref("");
@@ -863,8 +871,12 @@
      productData: [],
      executionDate: "",
      paymentMethod: "",
      salesType: "普通",
    },
    rules: {
      salesType: [
        { required: true, message: "请选择销售类型", trigger: "change" },
      ],
      salesman: [{ required: true, message: "请选择", trigger: "change" }],
      customerContractNo: [
        { required: true, message: "请输入", trigger: "blur" },
@@ -878,6 +890,12 @@
  });
  const { form, rules } = toRefs(data);
  const { form: searchForm } = useFormData(data.searchForm);
  const addApproverNode = () => {
    approverNodes.value.push({ id: nextApproverId++, userId: null });
  };
  const removeApproverNode = index => {
    approverNodes.value.splice(index, 1);
  };
  // 产品表单弹框数据
  const productFormVisible = ref(false);
  const productOperationType = ref("");
@@ -930,7 +948,7 @@
  // 发货相关
  const deliveryFormVisible = ref(false);
  const currentDeliveryRow = ref(null);
  const currentDeliveryContext = ref(null);
  const deliveryFormData = reactive({
    deliveryForm: {
      shippingDate: "",
@@ -942,12 +960,6 @@
      ],
      shippingCarNumber: [
        { required: true, message: "请输入发货车牌号", trigger: "blur" },
      ],
      approverId: [
        {
          required: true,
          message: "",
        },
      ],
    },
  });
@@ -976,9 +988,7 @@
    page.size = obj.limit;
    getList();
  };
  const getList = async () => {
    let userLists = await userListNoPage();
    userList.value = userLists.data;
  const getList = () => {
    tableLoading.value = true;
    const { entryDate, ...rest } = searchForm;
    ledgerListPage({ ...rest, ...page })
@@ -1059,31 +1069,23 @@
    productSelectedRows.value = selectedRows;
  };
  const expandedRowKeys = ref([]);
  // 展开行(始终只展开一行)
  const expandChange = row => {
    const rowKey = row.id;
    const isExpanded = expandedRowKeys.value.includes(rowKey);
    if (isExpanded) {
      // 当前行已展开 -> 收起
  // 展开行
  const expandChange = (row, expandedRows) => {
    if (expandedRows.length > 0) {
      expandedRowKeys.value = [];
      return;
    }
    // 展开当前行前,先收起其它行
    expandedRowKeys.value = [];
    try {
      productList({ salesLedgerId: row.id, type: 1 }).then(res => {
        const index = tableData.value.findIndex(item => item.id === row.id);
        if (index > -1) {
          tableData.value[index].children = res.data;
        }
        // 只保留当前这一行处于展开状态
        expandedRowKeys.value = [rowKey];
      });
    } catch (error) {
      console.log(error);
      try {
        productList({ salesLedgerId: row.id, type: 1 }).then(res => {
          const index = tableData.value.findIndex(item => item.id === row.id);
          if (index > -1) {
            tableData.value[index].children = res.data;
          }
          expandedRowKeys.value.push(row.id);
        });
      } catch (error) {
        console.log(error);
      }
    } else {
      expandedRowKeys.value = [];
    }
  };
  // 主表合计方法
@@ -1107,6 +1109,10 @@
    operationType.value = type;
    form.value = {};
    productData.value = [];
    approverNodes.value = [{ id: 1, userId: null }];
    nextApproverId = 2;
    let userLists = await userListNoPage();
    userList.value = userLists.data;
    customerList().then(res => {
      customerOption.value = res;
    });
@@ -1116,8 +1122,26 @@
      getSalesLedgerWithProducts({ id: row.id, type: 1 }).then(res => {
        form.value = { ...res };
        form.value.entryPerson = Number(res.entryPerson);
        if (!form.value.salesType) {
          form.value.salesType = "普通";
        }
        productData.value = form.value.productData;
        fileList.value = form.value.salesLedgerFiles;
        const approveUserIds =
          form.value.approveUserIds || form.value.approverIds;
        if (approveUserIds) {
          const ids = String(approveUserIds)
            .split(",")
            .map(id => Number(id.trim()))
            .filter(id => !Number.isNaN(id));
          if (ids.length > 0) {
            approverNodes.value = ids.map((id, idx) => ({
              id: idx + 1,
              userId: id,
            }));
            nextApproverId = ids.length + 1;
          }
        }
      });
    }
    // let userAll = await userStore.getInfo()
@@ -1127,6 +1151,9 @@
    //   }
    // });
    form.value.entryDate = getCurrentDate(); // 设置默认录入日期为当前日期
    if (type === "add") {
      form.value.salesType = "普通";
    }
    dialogFormVisible.value = true;
  };
  function changs(val) {
@@ -1172,6 +1199,16 @@
  const submitForm = () => {
    proxy.$refs["formRef"].validate(valid => {
      if (valid) {
        if (operationType.value !== "view") {
          const hasEmptyApprover = approverNodes.value.some(node => !node.userId);
          if (hasEmptyApprover) {
            proxy.$modal.msgWarning("请为所有审批节点选择审批人");
            return;
          }
          form.value.approveUserIds = approverNodes.value
            .map(node => node.userId)
            .join(",");
        }
        console.log("productData.value--", productData.value);
        if (productData.value !== null && productData.value.length > 0) {
          form.value.productData = proxy.HaveJson(productData.value);
@@ -1384,272 +1421,267 @@
    // 构建打印内容
    let printContent = `
                            <!DOCTYPE html>
                            <html>
                            <head>
                              <meta charset="UTF-8">
                              <title>打印预览</title>
                              <style>
                                body {
                                  margin: 0;
                                  padding: 0;
                                  font-family: "SimSun", serif;
                                  background: white;
                                }
                                                                             .print-page {
                                    width: 200mm;
                                    height: 75mm;
                                    padding: 10mm;
                                    padding-left: 20mm;
                                    background: white;
                                    box-sizing: border-box;
                                    page-break-after: always;
                                    page-break-inside: avoid;
                                  }
                                 .print-page:last-child {
                                   page-break-after: avoid;
                                 }
                                .delivery-note {
                                  width: 100%;
                                  height: 100%;
                                  font-size: 12px;
                                  line-height: 1.2;
                                  display: flex;
                                  flex-direction: column;
                                  color: #000;
                                }
                                .header {
                                  text-align: center;
                                  margin-bottom: 8px;
                                }
                                .company-name {
                                  font-size: 18px;
                                  font-weight: bold;
                                  margin-bottom: 4px;
                                }
                                .document-title {
                                  font-size: 16px;
                                  font-weight: bold;
                                }
                                .info-section {
                                  margin-bottom: 8px;
                                  display: flex;
                                  justify-content: space-between;
                                  align-items: center;
                                }
                                .info-row {
                                  line-height: 20px;
                                }
                                .label {
                                  font-weight: bold;
                                  width: 60px;
                                  font-size: 12px;
                                }
                                .value {
                                  margin-right: 20px;
                                  min-width: 80px;
                                  font-size: 12px;
                                }
                                         .table-section {
                                         margin-bottom: 40px;
                                  //  flex: 0.6;
                                 }
                                .product-table {
                                  width: 100%;
                                  border-collapse: collapse;
                                  border: 1px solid #000;
                                }
                                         .product-table th, .product-table td {
                                   border: 1px solid #000;
                                   padding: 6px;
                                   text-align: center;
                                   font-size: 12px;
                                   line-height: 1.4;
                                 }
                                .product-table th {
                                  font-weight: bold;
                                }
                                .total-value {
                                  font-weight: bold;
                                }
                                .footer-section {
                                  margin-top: auto;
                                }
                                .footer-row {
                                  display: flex;
                                  margin-bottom: 3px;
                                  line-height: 22px;
                                  justify-content: space-between;
                                }
                                .footer-item {
                                  display: flex;
                                  margin-right: 20px;
                                }
                                .footer-item .label {
                                  font-weight: bold;
                                  width: 80px;
                                  font-size: 12px;
                                }
                                .footer-item .value {
                                  min-width: 80px;
                                  font-size: 12px;
                                }
                                .address-item .address-value {
                                  min-width: 200px;
                                }
                                @media print {
                                  body {
                                    margin: 0;
                                    padding: 0;
                                  }
                                             .print-page {
                                     margin: 0;
                                     padding: 10mm;
                                     /* padding-left: 20mm; */
                                     page-break-inside: avoid;
                                     page-break-after: always;
                                   }
                                   .print-page:last-child {
                                     page-break-after: avoid;
                                   }
                                }
                              </style>
                            </head>
                            <body>
                          `;
                      <!DOCTYPE html>
                      <html>
                      <head>
                        <meta charset="UTF-8">
                        <title>打印预览</title>
                        <style>
                          body {
                            margin: 0;
                            padding: 0;
                            font-family: "SimSun", serif;
                            background: white;
                          }
                                                                       .print-page {
                              width: 200mm;
                              height: 75mm;
                              padding: 10mm;
                              padding-left: 20mm;
                              background: white;
                              box-sizing: border-box;
                              page-break-after: always;
                              page-break-inside: avoid;
                            }
                           .print-page:last-child {
                             page-break-after: avoid;
                           }
                          .delivery-note {
                            width: 100%;
                            height: 100%;
                            font-size: 12px;
                            line-height: 1.2;
                            display: flex;
                            flex-direction: column;
                            color: #000;
                          }
                          .header {
                            text-align: center;
                            margin-bottom: 8px;
                          }
                          .company-name {
                            font-size: 18px;
                            font-weight: bold;
                            margin-bottom: 4px;
                          }
                          .document-title {
                            font-size: 16px;
                            font-weight: bold;
                          }
                          .info-section {
                            margin-bottom: 8px;
                            display: flex;
                            justify-content: space-between;
                            align-items: center;
                          }
                          .info-row {
                            line-height: 20px;
                          }
                          .label {
                            font-weight: bold;
                            width: 60px;
                            font-size: 12px;
                          }
                          .value {
                            margin-right: 20px;
                            min-width: 80px;
                            font-size: 12px;
                          }
                                   .table-section {
                                   margin-bottom: 40px;
                            //  flex: 0.6;
                           }
                          .product-table {
                            width: 100%;
                            border-collapse: collapse;
                            border: 1px solid #000;
                          }
                                   .product-table th, .product-table td {
                             border: 1px solid #000;
                             padding: 6px;
                             text-align: center;
                             font-size: 12px;
                             line-height: 1.4;
                           }
                          .product-table th {
                            font-weight: bold;
                          }
                          .total-value {
                            font-weight: bold;
                          }
                          .footer-section {
                            margin-top: auto;
                          }
                          .footer-row {
                            display: flex;
                            margin-bottom: 3px;
                            line-height: 22px;
                            justify-content: space-between;
                          }
                          .footer-item {
                            display: flex;
                            margin-right: 20px;
                          }
                          .footer-item .label {
                            font-weight: bold;
                            width: 80px;
                            font-size: 12px;
                          }
                          .footer-item .value {
                            min-width: 80px;
                            font-size: 12px;
                          }
                          .address-item .address-value {
                            min-width: 200px;
                          }
                          @media print {
                            body {
                              margin: 0;
                              padding: 0;
                            }
                                       .print-page {
                               margin: 0;
                               padding: 10mm;
                               /* padding-left: 20mm; */
                               page-break-inside: avoid;
                               page-break-after: always;
                             }
                             .print-page:last-child {
                               page-break-after: avoid;
                             }
                          }
                        </style>
                      </head>
                      <body>
                    `;
    // 为每条数据生成打印页面
    printData.value.forEach((item, index) => {
      printContent += `
                              <div class="print-page">
                                <div class="delivery-note">
                                  <div class="header">
                                    <div class="company-name">鼎诚瑞实业有限责任公司</div>
                                    <div class="document-title">零售发货单</div>
                                  </div>
                                  <div class="info-section">
                                    <div class="info-row">
                                      <div>
                                        <span class="label">发货日期:</span>
                                        <span class="value">${formatDate(
                                          item.createTime
                                        )}</span>
                                      </div>
                                      <div>
                                        <span class="label">客户名称:</span>
                                        <span class="value">${
                                          item.customerName || "张爱有"
                                        }</span>
                                      </div>
                                    </div>
                                    <div class="info-row">
                                      <span class="label">单号:</span>
                                      <span class="value">${
                                        item.salesContractNo || ""
                                      }</span>
                                    </div>
                                  </div>
                        <div class="print-page">
                          <div class="delivery-note">
                            <div class="header">
                              <div class="company-name">鼎诚瑞实业有限责任公司</div>
                              <div class="document-title">零售发货单</div>
                            </div>
                                  <div class="table-section">
                                    <table class="product-table">
                                      <thead>
                                        <tr>
                                          <th>产品名称</th>
                                          <th>规格型号</th>
                                          <th>单位</th>
                                          <th>单价</th>
                                          <th>零售数量</th>
                                          <th>零售金额</th>
                                        </tr>
                                      </thead>
                                      <tbody>
                                        ${
                                          item.products &&
                                          item.products.length > 0
                                            ? item.products
                                                .map(
                                                  product => `
                                            <tr>
                                              <td>${
                                                product.productCategory || ""
                                              }</td>
                                              <td>${
                                                product.specificationModel || ""
                                              }</td>
                                              <td>${product.unit || ""}</td>
                                              <td>${
                                                product.taxInclusiveUnitPrice ||
                                                "0"
                                              }</td>
                                              <td>${product.quantity || "0"}</td>
                                              <td>${
                                                product.taxInclusiveTotalPrice ||
                                                "0"
                                              }</td>
                                            </tr>
                                          `
                                                )
                                                .join("")
                                            : '<tr><td colspan="6" style="text-align: center; color: #999;">暂无产品数据</td></tr>'
                                        }
                                      </tbody>
                                      <tfoot>
                                        <tr>
                                          <td class="label">合计</td>
                                          <td class="total-value"></td>
                                          <td class="total-value"></td>
                                          <td class="total-value"></td>
                                          <td class="total-value">${getTotalQuantityForPrint(
                                            item.products
                                          )}</td>
                                          <td class="total-value">${getTotalAmountForPrint(
                                            item.products
                                          )}</td>
                                        </tr>
                                      </tfoot>
                                    </table>
                                  </div>
                                  <div class="footer-section">
                                    <div class="footer-row">
                                      <div class="footer-item">
                                        <span class="label">收货电话:</span>
                                        <span class="value"></span>
                                      </div>
                                      <div class="footer-item">
                                        <span class="label">收货人:</span>
                                        <span class="value"></span>
                                      </div>
                                      <div class="footer-item address-item">
                                        <span class="label">收货地址:</span>
                                        <span class="value address-value"></span>
                                      </div>
                                    </div>
                                    <div class="footer-row">
                                      <div class="footer-item">
                                        <span class="label">操作员:</span>
                                        <span class="value">${
                                          userStore.nickName || "撕开前"
                                        }</span>
                                      </div>
                                      <div class="footer-item">
                                        <span class="label">打印日期:</span>
                                        <span class="value">${formatDateTime(
                                          new Date()
                                        )}</span>
                                      </div>
                                    </div>
                                  </div>
                            <div class="info-section">
                              <div class="info-row">
                                <div>
                                  <span class="label">发货日期:</span>
                                  <span class="value">${formatDate(
                                    item.createTime
                                  )}</span>
                                </div>
                                <div>
                                  <span class="label">客户名称:</span>
                                  <span class="value">${
                                    item.customerName || "张爱有"
                                  }</span>
                                </div>
                              </div>
                            `;
                              <div class="info-row">
                                <span class="label">单号:</span>
                                <span class="value">${
                                  item.salesContractNo || ""
                                }</span>
                              </div>
                            </div>
                            <div class="table-section">
                              <table class="product-table">
                                <thead>
                                  <tr>
                                    <th>产品名称</th>
                                    <th>规格型号</th>
                                    <th>单位</th>
                                    <th>单价</th>
                                    <th>零售数量</th>
                                    <th>零售金额</th>
                                  </tr>
                                </thead>
                                <tbody>
                                  ${
                                    item.products && item.products.length > 0
                                      ? item.products
                                          .map(
                                            product => `
                                      <tr>
                                        <td>${product.productCategory || ""}</td>
                                        <td>${
                                          product.specificationModel || ""
                                        }</td>
                                        <td>${product.unit || ""}</td>
                                        <td>${
                                          product.taxInclusiveUnitPrice || "0"
                                        }</td>
                                        <td>${product.quantity || "0"}</td>
                                        <td>${
                                          product.taxInclusiveTotalPrice || "0"
                                        }</td>
                                      </tr>
                                    `
                                          )
                                          .join("")
                                      : '<tr><td colspan="6" style="text-align: center; color: #999;">暂无产品数据</td></tr>'
                                  }
                                </tbody>
                                <tfoot>
                                  <tr>
                                    <td class="label">合计</td>
                                    <td class="total-value"></td>
                                    <td class="total-value"></td>
                                    <td class="total-value"></td>
                                    <td class="total-value">${getTotalQuantityForPrint(
                                      item.products
                                    )}</td>
                                    <td class="total-value">${getTotalAmountForPrint(
                                      item.products
                                    )}</td>
                                  </tr>
                                </tfoot>
                              </table>
                            </div>
                            <div class="footer-section">
                              <div class="footer-row">
                                <div class="footer-item">
                                  <span class="label">收货电话:</span>
                                  <span class="value"></span>
                                </div>
                                <div class="footer-item">
                                  <span class="label">收货人:</span>
                                  <span class="value"></span>
                                </div>
                                <div class="footer-item address-item">
                                  <span class="label">收货地址:</span>
                                  <span class="value address-value"></span>
                                </div>
                              </div>
                              <div class="footer-row">
                                <div class="footer-item">
                                  <span class="label">操作员:</span>
                                  <span class="value">${
                                    userStore.nickName || "撕开前"
                                  }</span>
                                </div>
                                <div class="footer-item">
                                  <span class="label">打印日期:</span>
                                  <span class="value">${formatDateTime(
                                    new Date()
                                  )}</span>
                                </div>
                              </div>
                            </div>
                          </div>
                        </div>
                      `;
    });
    printContent += `
                            </body>
                            </html>
                          `;
                      </body>
                      </html>
                    `;
    // 写入内容到新窗口
    printWindow.document.write(printContent);
@@ -1814,13 +1846,12 @@
  // 根据数量变化计算总价
  const calculateFromQuantity = () => {
    // 这里
    if (!productForm.value.taxRate) {
      proxy.$modal.msgWarning("请先选择税率");
      return;
    }
    if (isCalculating.value) return;
    newfunction();
    const quantity = parseFloat(productForm.value.quantity);
    const unitPrice = parseFloat(productForm.value.taxInclusiveUnitPrice);
@@ -1844,21 +1875,7 @@
    isCalculating.value = false;
  };
  const newfunction = () => {
    // productForm.value.productModelId;
    // productForm.quantity
    judgmentInventory({
      productModelId: productForm.value.productModelId,
      quantity: productForm.value.quantity,
    }).then(res => {
      console.log("res", res);
      // if (res.code === 200) {
      //   proxy.$modal.msgSuccess("库存充足");
      // } else {
      //   proxy.$modal.msgError(res.msg);
      // }
    });
  };
  // 根据含税单价变化计算总价
  const calculateFromUnitPrice = () => {
    if (!productForm.value.taxRate) {
@@ -1929,13 +1946,23 @@
  };
  // 打开发货弹框
  const openDeliveryForm = row => {
    currentDeliveryRow.value = row;
    deliveryForm.value = {
      shippingDate: "", // 移除默认值设置
      shippingCarNumber: "",
    };
    deliveryFormVisible.value = true;
  const openDeliveryForm = (props, scope) => {
    getProductInventory({ salesLedgerId: props.id, type: 1 })
      .then(res => {
        currentDeliveryContext.value = {
          id: props.id,
          productId: scope.id,
        };
        deliveryForm.value = {
          shippingDate: getCurrentDate(),
          shippingCarNumber: "",
        };
        // currentDeliveryRow.value = props.row;
        deliveryFormVisible.value = true;
      })
      .catch(err => {
        // ElMessage.error(err);
      });
  };
  // 提交发货表单
@@ -1943,17 +1970,14 @@
    proxy.$refs["deliveryFormRef"].validate(valid => {
      if (valid) {
        addShippingInfo({
          approverId: deliveryForm.value.approverId,
          salesLedgerId: currentDeliveryRow.value.salesLedgerId,
          salesLedgerProductId: currentDeliveryRow.value.id,
          salesLedgerId: currentDeliveryContext.value.id,
          salesLedgerProductId: currentDeliveryContext.value.productId,
          shippingDate: deliveryForm.value.shippingDate,
          shippingCarNumber: deliveryForm.value.shippingCarNumber,
        })
          .then(() => {
            proxy.$modal.msgSuccess("发货成功");
            closeDeliveryDia();
            getList();
            expandedRowKeys.value = [];
          })
          .catch(() => {
            proxy.$modal.msgError("发货失败,请重试");
@@ -1966,7 +1990,7 @@
  const closeDeliveryDia = () => {
    proxy.resetForm("deliveryFormRef");
    deliveryFormVisible.value = false;
    currentDeliveryRow.value = null;
    currentDeliveryContext.value = null;
  };
  onMounted(() => {