huminmin
17 小时以前 a54aee54c636ba45ac3a00c287f11599bb4517ba
src/views/salesManagement/salesLedger/index.vue
@@ -118,9 +118,10 @@
        <el-table-column label="录入日期" prop="entryDate" width="120" show-overflow-tooltip />
        <el-table-column label="签订日期" prop="executionDate" width="120" show-overflow-tooltip />
        <el-table-column label="交付日期" prop="deliveryDate" width="120" show-overflow-tooltip />
        <el-table-column label="备注" prop="remarks" width="200" show-overflow-tooltip />
        <el-table-column fixed="right" label="操作" min-width="100" align="center">
          <template #default="scope">
            <el-button link type="primary" size="small" @click="openForm('edit', scope.row)">编辑</el-button>
            <el-button link type="primary" size="small" @click="openForm('edit', scope.row)" :disabled="!scope.row.isEdit">编辑</el-button>
<!--            <el-button link type="primary" size="small" @click="openForm('view', scope.row)">详情</el-button>-->
            <el-button link type="primary" size="small" @click="downLoadFile(scope.row)">附件</el-button>
<!--            <el-button link type="primary" size="small" @click="openDeliveryForm(scope.row)">发货</el-button>-->
@@ -242,14 +243,14 @@
            </el-table>
            <el-row :gutter="30">
               <el-col :span="24">
                  <el-form-item label="备注·:" prop="remark">
                     <el-input v-model="form.remark" placeholder="请输入" clearable type="textarea" :rows="2" :disabled="operationType === 'view'" />
                  <el-form-item label="备注:" prop="remarks">
                     <el-input v-model="form.remarks" placeholder="请输入" clearable type="textarea" :rows="2" :disabled="operationType === 'view'" />
                  </el-form-item>
               </el-col>
            </el-row>
            <el-row :gutter="30">
               <el-col :span="24">
                  <el-form-item label="附件材料:" prop="remark">
                  <el-form-item label="附件材料:" prop="salesLedgerFiles">
                     <el-upload v-model:file-list="fileList" :action="upload.url" multiple ref="fileUpload" auto-upload
                                     :headers="upload.headers" :before-upload="handleBeforeUpload" :on-error="handleUploadError"
                                     :on-success="handleUploadSuccess" :on-remove="handleRemove">
@@ -317,6 +318,15 @@
               </template>
            </el-table-column>
         </el-table>
         <pagination
            v-show="quotationPage.total > 0"
            :total="quotationPage.total"
            layout="total, sizes, prev, pager, next, jumper"
            :page="quotationPage.current"
            :limit="quotationPage.size"
            @pagination="quotationPaginationChange"
         />
         
         <template #footer>
            <el-button @click="quotationDialogVisible = false">关闭</el-button>
@@ -471,51 +481,77 @@
               <div v-for="(item, index) in printData" :key="index" class="print-page">
                  <div class="delivery-note">
                     <div class="header">
                        <div class="company-name">鼎诚瑞实业有限责任公司</div>
                        <div class="document-title">零售发货单</div>
                        <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.shippingCarNumber }}</span>
                           </div>
                  <div>
                    <span class="label">客户名称:</span>
                    <span class="value">{{ item.customerName }}</span>
                  </div>
                  <div>
                    <span class="label">送货地址:</span>
                    <span class="value">{{ item.companyAddress }}</span>
                  </div>
                        </div>
                        <div class="info-row">
                           <div>
                              <span class="label">客户名称:</span>
                              <span class="value">{{ item.customerName || '张爱有' }}</span>
                           </div>
                           <span class="label">单号:</span>
                           <span class="value">{{ item.salesContractNo }}</span>
                  <div>
                    <span class="label">单据编号:</span>
                    <span class="value">{{ item.salesContractNo }}</span>
                  </div>
                  <div>
                    <span class="label">送货日期:</span>
                    <span class="value">{{ formatDate(null) }}</span>
                  </div>
                  <div>
                    <span class="label">联系电话:</span>
                    <span class="value">{{ item.contactPhone }}</span>
                  </div>
                        </div>
                     </div>
              <div class="info-section">
                <div class="info-row">
                  <div>
                    <span class="label">联系方式:</span>
                    <span class="value"></span>
                  </div>
                  <div>
                    <span class="label">送货单位:</span>
                    <span class="value">湖南鹏创电子有限公司</span>
                  </div>
                  <div>
                    <span class="label">地址:</span>
                    <span class="value">湖南耒阳市创新创业园A1栋</span>
                  </div>
                </div>
              </div>
              <span style="font-size: 16px;">货物详细信息:</span>
                     <div class="table-section">
                        <table class="product-table">
                           <thead>
                           <tr>
                              <th>产品名称</th>
                              <th>规格型号</th>
                              <th>序号</th>
                              <th>物料编号</th>
                              <th>品名/规格</th>
                              <th>单位</th>
                              <th>单价</th>
                              <th>零售数量</th>
                              <th>零售金额</th>
                              <th>数量</th>
                              <th>订单号</th>
                           </tr>
                           </thead>
                           <tbody>
                           <tr v-for="product in item.products" :key="product.id">
                              <td>{{ product.productCategory || '' }}</td>
                              <td>{{ product.specificationModel || '' }}</td>
                           <tr v-for="(product, index) in item.products" :key="product.id">
                              <td>{{ index + 1 }}</td>
                              <td>{{ product.materialCode || '' }}</td>
                              <td>{{`${product.productCategory || ''}/${product.specificationModel || ''}` }}</td>
                              <td>{{ product.unit || '' }}</td>
                              <td>{{ product.taxInclusiveUnitPrice || '0' }}</td>
                              <td>{{ product.quantity || '0' }}</td>
                              <td>{{ product.taxInclusiveTotalPrice || '0' }}</td>
                              <td>{{ item.salesContractNo || '' }}</td>
                           </tr>
                           <tr v-if="!item.products || item.products.length === 0">
                              <td colspan="6" style="text-align: center; color: #999;">暂无产品数据</td>
@@ -523,43 +559,30 @@
                           </tbody>
                           <tfoot>
                           <tr>
                              <td class="label"></td>
                              <td class="label">合计</td>
                              <td class="total-value"></td>
                              <td class="total-value"></td>
                              <td class="total-value"></td>
                              <td class="total-value">{{ getTotalQuantity(item.products) }}</td>
                              <td class="total-value">{{ getTotalAmount(item.products) }}</td>
                              <td class="total-value"></td>
                           </tr>
                           </tfoot>
                        </table>
                <div style="width: 30px;">
                  共四联存根回单客户仓库
                </div>
                     </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>
              <el-descriptions :column="1">
                <el-descriptions-item label="备注:">贵公司在收货后请即刻核实数量及品质,若有异议,请在3日内提出,否则视为收妥。</el-descriptions-item>
              </el-descriptions>
              <el-descriptions :column="2">
                <el-descriptions-item label="送货单位(签章):"/>
                <el-descriptions-item label="收货单位:"/>
                <el-descriptions-item label="送货人:"/>
                <el-descriptions-item label="收货人:"/>
              </el-descriptions>
                  </div>
               </div>
            </div>
@@ -779,6 +802,12 @@
const quotationSearchForm = reactive({
   quotationNo: "",
   customer: "",
});
// 报价单弹框分页
const quotationPage = reactive({
   current: 1,
   size: 10,
   total: 0,
});
const selectedQuotation = ref(null);
@@ -1004,6 +1033,7 @@
// 添加表行类名方法
const tableRowClassName = ({ row }) => {
  if (!row.deliveryDate) return '';
  if (row.isFh) return '';
  const diff = row.deliveryDaysDiff;
@@ -1073,6 +1103,8 @@
const openQuotationDialog = async () => {
   if (operationType.value === "view") return;
   quotationDialogVisible.value = true;
   // 打开弹窗时重置分页到第一页
   quotationPage.current = 1;
   // 先确保客户列表已加载,便于后续回填 customerId
   if (!customerOption.value || customerOption.value.length === 0) {
      try {
@@ -1089,14 +1121,15 @@
   quotationLoading.value = true;
   try {
      const params = {
         // 兼容后端分页字段:这里沿用报价页面已有可用的字段命名
         currentPage: 1,
         pageSize: 100,
         // 后端分页字段:current / size
         current: quotationPage.current,
         size: quotationPage.size,
         ...quotationSearchForm,
         status: "通过",
      };
      const res = await getQuotationList(params);
      quotationList.value = res?.data?.records || [];
      quotationPage.total = res?.data?.total || 0;
   } finally {
      quotationLoading.value = false;
   }
@@ -1105,7 +1138,15 @@
const resetQuotationSearch = async () => {
   quotationSearchForm.quotationNo = "";
   quotationSearchForm.customer = "";
   quotationPage.current = 1;
   await fetchQuotationList();
};
// 报价单弹框分页切换
const quotationPaginationChange = (obj) => {
   quotationPage.current = obj.page;
   quotationPage.size = obj.limit;
   fetchQuotationList();
};
// 选中报价单后回填到台账表单
@@ -1560,7 +1601,7 @@
        }
        .label {
          font-weight: bold;
          width: 60px;
          min-width: 60px;
          font-size: 12px;
        }
        .value {
@@ -1568,10 +1609,11 @@
          min-width: 80px;
          font-size: 12px;
        }
                 .table-section {
                 margin-bottom: 40px;
          //  flex: 0.6;
         }
        .table-section {
          margin-bottom: 4px;
          flex: 1;
          display: flex;
        }
        .product-table {
          width: 100%;
          border-collapse: collapse;
@@ -1599,13 +1641,66 @@
          line-height: 22px;
          justify-content: space-between;
        }
        .remarks-section {
          margin: 10px 0;
          .remark-item {
            display: flex;
            align-items: flex-start;
            .label {
              font-weight: bold;
              min-width: 30px;
              font-size: 14px;
              margin-right: 10px;
              white-space: nowrap;
            }
            .value {
              flex: 1;
              font-size: 14px;
              line-height: 1.4;
            }
          }
        }
        .sign-section {
          margin-top: 15px;
          .sign-row {
            display: flex;
            justify-content: space-between;
            margin-bottom: 10px;
            .sign-item {
              display: flex;
              align-items: center;
              width: 48%;
              .label {
                font-weight: bold;
                font-size: 14px;
                margin-right: 10px;
                white-space: nowrap;
              }
              .value {
                flex: 1;
                min-height: 30px;
                border-bottom: 1px solid #000;
                font-size: 14px;
              }
            }
          }
        }
        .footer-item {
          display: flex;
          margin-right: 20px;
        }
        .footer-item .label {
          font-weight: bold;
          width: 80px;
          min-width: 80px;
          font-size: 12px;
        }
        .footer-item .value {
@@ -1642,93 +1737,125 @@
      <div class="print-page">
        <div class="delivery-note">
          <div class="header">
            <div class="company-name">鼎诚瑞实业有限责任公司</div>
            <div class="document-title">零售发货单</div>
              <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 class="info-row">
                <div>
                  <span class="label">客户名称:</span>
                  <span class="value">${item.customerName || ''}</span>
                </div>
                <div>
                  <span class="label">送货地址:</span>
                  <span class="value">${item.companyAddress || ''}</span>
                </div>
              </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="info-row">
                <div>
                  <span class="label">单据编号:</span>
                  <span class="value">${item.salesContractNo || ''}</span>
                </div>
                <div>
                  <span class="label">送货日期:</span>
                  <span class="value">${ formatDate(null)}</span>
                </div>
                <div>
                  <span class="label">联系电话:</span>
                  <span class="value">${item.contactPhone || ''}</span>
                </div>
              </div>
            </div>
          <div class="info-section">
              <div class="info-row">
                <div>
                  <span class="label">联系方式:</span>
                  <span class="value"></span>
                </div>
                <div>
                  <span class="label">送货单位:</span>
                  <span class="value">湖南鹏创电子有限公司</span>
                </div>
                <div>
                  <span class="label">地址:</span>
                  <span class="value">湖南耒阳市创新创业园A1栋</span>
                </div>
              </div>
            </div>
          <span style="font-size: 16px;">货物详细信息:</span>
          <div class="table-section">
            <table class="product-table">
              <thead>
                <tr>
                  <th>产品名称</th>
                  <th>规格型号</th>
                  <th>序号</th>
                  <th>物料编号</th>
                  <th>品名/规格</th>
                  <th>单位</th>
                  <th>单价</th>
                  <th>零售数量</th>
                  <th>零售金额</th>
                  <th>数量</th>
                  <th>订单号</th>
                </tr>
              </thead>
              <tbody>
                  <tbody>
                ${item.products && item.products.length > 0 ?
         item.products.map(product => `
        item.products.map((product, index) => `
                    <tr>
                      <td>${product.productCategory || ''}</td>
                      <td>${product.specificationModel || ''}</td>
                      <td>${index + 1}</td>
                      <td>${product.materialCode || ''}</td>
                      <td>${product.productCategory || ''}/${product.specificationModel || ''}</td>
                      <td>${product.unit || ''}</td>
                      <td>${product.taxInclusiveUnitPrice || '0'}</td>
                      <td>${product.quantity || '0'}</td>
                      <td>${product.taxInclusiveTotalPrice || '0'}</td>
                      <td>${item.salesContractNo || ''}</td>
                    </tr>
                  `).join('') :
         '<tr><td colspan="6" style="text-align: center; color: #999;">暂无产品数据</td></tr>'
      }
        '<tr><td colspan="6" style="text-align: center; color: #999;">暂无产品数据</td></tr>'
    }
              </tbody>
              <tfoot>
                <tr>
                  <td></td>
                  <td class="label">合计</td>
                  <td class="total-value"></td>
                  <td class="total-value"></td>
                  <td class="total-value">${ getTotalQuantity(item.products) || '0'}</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 style="width: 30px;">
              共四联存根回单客户仓库
            </div>
          </div>
          <div class="footer-section">
            <div class="footer-row">
              <div class="footer-item">
                <span class="label">收货电话:</span>
                <span class="value"></span>
          <div class="remarks-section">
            <div class="remark-item">
              <span class="label">备注:</span>
              <span class="value">贵公司在收货后请即刻核实数量及品质,若有异议,请在3日内提出,否则视为收妥。</span>
            </div>
          </div>
          <div class="sign-section">
            <div class="sign-row">
              <div class="sign-item">
                <span class="label">送货单位(签章):</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 class="sign-item">
                <span class="label">收货单位:</span>
              </div>
            </div>
            <div class="footer-row">
              <div class="footer-item">
                <span class="label">操作员:</span>
                <span class="value">${userStore.nickName || '撕开前'}</span>
            <div class="sign-row">
              <div class="sign-item">
                <span class="label">送货人:</span>
              </div>
              <div class="footer-item">
                <span class="label">打印日期:</span>
                <span class="value">${formatDateTime(new Date())}</span>
              <div class="sign-item">
                <span class="label">收货人:</span>
              </div>
            </div>
          </div>
        </div>
      </div>
    `;
@@ -1754,13 +1881,14 @@
};
// 格式化日期
const formatDate = (dateString) => {
   if (!dateString) return getCurrentDate();
   if (!dateString) return getCurrentDate().replace(/-/g, '/');
   const date = new Date(dateString);
   const year = date.getFullYear();
   const month = String(date.getMonth() + 1).padStart(2, "0");
   const day = String(date.getDate()).padStart(2, "0");
   return `${year}/${month}/${day}`;
};
// 格式化日期时间
const formatDateTime = (date) => {
   const year = date.getFullYear();
@@ -2221,7 +2349,7 @@
.print-page {
   width: 220mm;
   height: 90mm;
   min-height: 90mm;
   padding: 10mm;
   margin: 0 auto;
   background: white;
@@ -2282,6 +2410,7 @@
.table-section {
   margin-bottom: 4px;
   flex: 1;
  display: flex;
   
   .product-table {
      width: 100%;
@@ -2316,20 +2445,22 @@
      display: flex;
      margin-bottom: 3px;
      line-height: 20px;
      justify-content: space-between;
      justify-content: flex-start;
      
      .footer-item {
         display: flex;
      align-items: center;
         margin-right: 20px;
         .label {
            font-weight: bold;
            width: 80px;
        white-space: nowrap;
        margin-right: 10px;
            font-size: 14px;
         }
         
         .value {
            min-width: 80px;
            min-width: 300px;
            font-size: 14px;
         }