Browse Source

feat: 入库单增加产成品类型打印模板

liujt 23 hours ago
parent
commit
8b21f1002d

+ 187 - 68
src/views/warehouseManagement/stockManagement/components/printStockEnterHt.vue

@@ -22,13 +22,13 @@
       >
         <!-- 入库单标题 -->
         <div style="text-align: center; margin-bottom: 20px;">
-          <h2 style="margin: 0; font-size: 24px; font-weight: bold;">{{ groupName }}入库单</h2>
+          <h2 style="margin: 0; font-size: 24px; font-weight: bold;">{{ rowItem.bizType == 1 ? "产成品入库单" : groupName + "入库单" }}</h2>
         </div>
         
         <!-- 供应商/客户信息 -->
         <div style="margin-bottom: 20px; width: 100%;">
           <div style="width: 100%; display: flex;">
-            <div style="width: 40%;">
+            <div v-if="rowItem.bizType != 1" style="width: 40%;">
               供应商名称:{{ rowItem.supplierNames || '' }}
             </div>
             <div style="width: 30%;">
@@ -41,7 +41,59 @@
         </div>
         
         <!-- 入库物品表格 -->
+         <table
+          v-if="rowItem.bizType == 1"
+          border="1"
+          cellspacing="0"
+          style="
+            width: 100%;
+            border-collapse: collapse;
+            font-size: 14px;
+          "
+        >
+          <thead>
+            <tr>
+              <th style="border: 1px solid #000; padding: 4px; text-align: center; width: 5%;">编号</th>
+              <th style="border: 1px solid #000; padding: 4px; text-align: center; width: 19%;">名称</th>
+              <th style="border: 1px solid #000; padding: 4px; text-align: center; width: 19%;">型号规格</th>
+              <th style="border: 1px solid #000; padding: 4px; text-align: center; width: 8%;">颜色</th>
+              <th style="border: 1px solid #000; padding: 4px; text-align: center; width: 8%;">计量单位</th>
+              <th style="border: 1px solid #000; padding: 4px; text-align: center; width: 8%;">实收数量</th>
+              <th style="border: 1px solid #000; padding: 4px; text-align: center; width: 9%;">计量单位2</th>
+              <th style="border: 1px solid #000; padding: 4px; text-align: center; width: 9%;">实收数量2</th>
+              <th style="border: 1px solid #000; padding: 4px; text-align: center; width: 10%;">批次号</th>
+            </tr>
+          </thead>
+          <tbody>
+            <tr v-for="(row, index) in rowItem.outInDetailList" :key="index">
+              <td style="border: 1px solid #000; padding: 4px; text-align: center;">{{ index + 1 }}</td>
+              <td style="border: 1px solid #000; padding: 4px; text-align: center;">{{ row?.categoryName || '' }}</td>
+              <td style="border: 1px solid #000; padding: 4px; text-align: center;">{{row.categoryModel || '' }}{{ row.categoryModel && row?.specification ? '/' : '' }}{{ row?.specification || '' }}</td>
+              <td style="border: 1px solid #000; padding: 4px; text-align: center;">{{ row?.colorKey || '' }}</td>
+              <td style="border: 1px solid #000; padding: 4px; text-align: center;">{{ row?.measureUnit || '' }}</td>
+              <td style="border: 1px solid #000; padding: 4px; text-align: center;">{{ row?.measureQuantity || '' }}</td>
+              <td style="border: 1px solid #000; padding: 4px; text-align: center;">{{ row?.packingUnit || '' }}</td>
+              <td style="border: 1px solid #000; padding: 4px; text-align: center;">{{ row?.packingQuantity || '' }}</td>
+              <td style="border: 1px solid #000; padding: 4px; text-align: center;">{{ row?.batchNo || '' }}</td>
+              
+            </tr>
+            
+            <!-- 合计行 -->
+            <tr>
+              <td style="border: 1px solid #000; padding: 4px; text-align: center;" colspan="2">合计:</td>
+              <td v-if="rowItem.bizType == 6" style="border: 1px solid #000; padding: 4px; text-align: center;"></td>
+              <td style="border: 1px solid #000; padding: 4px; text-align: center;"></td>
+              <td style="border: 1px solid #000; padding: 4px; text-align: center;"></td>
+              <td style="border: 1px solid #000; padding: 4px; text-align: center;"></td>
+              <td style="border: 1px solid #000; padding: 4px; text-align: center;">{{ getTotalAmount(rowItem) }}</td>
+              <td style="border: 1px solid #000; padding: 4px; text-align: center;"></td>
+              <td style="border: 1px solid #000; padding: 4px; text-align: center;"></td>
+              <td style="border: 1px solid #000; padding: 4px; text-align: center;"></td>
+            </tr>
+          </tbody>
+        </table>
         <table
+          v-else
           border="1"
           cellspacing="0"
           style="
@@ -94,7 +146,15 @@
         </table>
         
         <!-- 签字区域 -->
-        <div style="margin-top: 20px; display: flex; width: 100%;">
+        <div v-if="rowItem.bizType == 1" style="margin-top: 20px; display: flex; width: 100%;">
+          <div style="width: 25%;">
+            <strong>制单人:</strong>{{ rowItem.extInfo?.createUserName || '' }}
+          </div>
+          <div style="width: 25%;">
+            <strong>审核人:</strong>{{ rowItem.verifyName || '' }}
+          </div>
+        </div>
+        <div v-else style="margin-top: 20px; display: flex; width: 100%;">
           <div style="width: 25%;">
             <strong>主管:</strong>{{ rowItem.verifyName || '' }}
           </div>
@@ -217,31 +277,91 @@
         const td = `${cellBase}font-family:'宋体';font-size:11pt;`;
         const labelLeft = `${border}padding:4px;mso-number-format:"\\@";vertical-align:middle;text-align:left;mso-horizontal-align:left;font-family:'宋体';font-size:11pt;`;
 
-        const title = `${this.groupName || ''}入库单`;
-
+        const baseTitle = `${this.groupName || ''}入库单`;
         // 遍历多个单据生成多个表格
         let tables = '';
         this.formData.forEach((rowItem) => {
           const list = rowItem.outInDetailList || [];
           const totalAmount = this.getTotalAmount(rowItem);
           const warehouseName = this.getUniqueWarehouses(rowItem);
+          const isBizType1 = rowItem.bizType == 1;
           const isBizType6 = rowItem.bizType == 6;
           const supplierValue = rowItem.supplierNames || '';
+          const title = isBizType1 ? '产成品入库单' : `${this.groupName || ''}入库单`;
 
-          const totalCols = isBizType6 ? 10 : 9;
-          const colWidths = isBizType6
-            ? [55, 80, 100, 100, 70, 70, 70, 80, 70, 80]
-            : [55, 100, 130, 70, 70, 70, 80, 70, 80];
-          const colGroup = colWidths
-            .map((w) => `<col width="${w}" style="width:${w}pt;" />`)
-            .join('');
+          if (isBizType1) {
+            // === bizType == 1:9列,实收数量/实收数量2 ===
+            const totalCols = 9;
+            const colWidths = [55, 100, 100, 70, 70, 70, 70, 70, 70];
+            const colGroup = colWidths.map((w) => `<col width="${w}" style="width:${w}pt;" />`).join('');
 
-          const customerTh = isBizType6
-            ? `<td align="center" valign="middle" style="${th}">客户</td>`
-            : '';
+            const rows = list.map(
+              (item, index) => `
+              <tr height="24" style="height:24pt;">
+                <td align="center" valign="middle" style="${td}">${index + 1}</td>
+                <td align="left" valign="middle" style="${labelLeft}">${item.categoryName || ''}</td>
+                <td align="center" valign="middle" style="${td}">${item.categoryModel || ''}${item.categoryModel && item.specification ? '/' : ''}${item.specification || ''}</td>
+                <td align="center" valign="middle" style="${td}">${item.colorKey || ''}</td>
+                <td align="center" valign="middle" style="${td}">${item.measureUnit || ''}</td>
+                <td align="center" valign="middle" style="${td}">${item.measureQuantity || ''}</td>
+                <td align="center" valign="middle" style="${td}">${item.packingUnit || ''}</td>
+                <td align="center" valign="middle" style="${td}">${item.packingQuantity || ''}</td>
+                <td align="center" valign="middle" style="${td}">${item.batchNo || ''}</td>
+              </tr>`
+            ).join('');
 
-          const rows = list
-            .map(
+            tables += `
+            <table border="1" cellspacing="0" cellpadding="0" align="center"
+              style="border-collapse:collapse;border:1px solid #000;mso-border-alt:solid #000 0.5pt;font-family:'宋体';font-size:11pt;text-align:center;">
+              <colgroup>${colGroup}</colgroup>
+              <tr height="40" style="height:40pt;">
+                <td colspan="${totalCols}" align="center" valign="middle" style="${border}padding:6px;text-align:center;font-family:'宋体';font-size:22pt;font-weight:bold;">${title}</td>
+              </tr>
+              <tr height="26" style="height:26pt;">
+                <td colspan="4" align="left" valign="middle" style="${labelLeft}">日期:${rowItem.storageTime || ''}</td>
+                <td colspan="5" align="left" valign="middle" style="${labelLeft}">编号:${rowItem.bizNo || ''}</td>
+              </tr>
+              <tr height="28" style="height:28pt;">
+                <td align="center" valign="middle" style="${th}">编号</td>
+                <td align="center" valign="middle" style="${th}">名称</td>
+                <td align="center" valign="middle" style="${th}">型号规格</td>
+                <td align="center" valign="middle" style="${th}">颜色</td>
+                <td align="center" valign="middle" style="${th}">计量单位</td>
+                <td align="center" valign="middle" style="${th}">实收数量</td>
+                <td align="center" valign="middle" style="${th}">计量单位2</td>
+                <td align="center" valign="middle" style="${th}">实收数量2</td>
+                <td align="center" valign="middle" style="${th}">批次号</td>
+              </tr>
+              ${rows}
+              <tr height="26" style="height:26pt;">
+                <td colspan="2" align="center" valign="middle" style="${td};font-weight:bold;">合计:</td>
+                <td align="center" valign="middle" style="${td}"></td>
+                <td align="center" valign="middle" style="${td}"></td>
+                <td align="center" valign="middle" style="${td}"></td>
+                <td align="center" valign="middle" style="${td};font-weight:bold;">${totalAmount}</td>
+                <td align="center" valign="middle" style="${td}"></td>
+                <td align="center" valign="middle" style="${td}"></td>
+                <td align="center" valign="middle" style="${td}"></td>
+              </tr>
+              <tr height="28" style="height:28pt;">
+                <td colspan="4" align="left" valign="middle" style="${labelLeft}">制单人:${rowItem.extInfo?.createUserName || ''}</td>
+                <td colspan="5" align="left" valign="middle" style="${labelLeft}">审核人:${rowItem.verifyName || ''}</td>
+              </tr>
+            </table>
+            <br style="mso-special-character:line-break;page-break-before:always" />`;
+          } else {
+            // === bizType != 1:9-10列,含客户列(bizType6) ===
+            const totalCols = isBizType6 ? 10 : 9;
+            const colWidths = isBizType6
+              ? [55, 80, 100, 100, 70, 70, 70, 80, 70, 80]
+              : [55, 100, 130, 70, 70, 70, 80, 70, 80];
+            const colGroup = colWidths.map((w) => `<col width="${w}" style="width:${w}pt;" />`).join('');
+
+            const customerTh = isBizType6
+              ? `<td align="center" valign="middle" style="${th}">客户</td>`
+              : '';
+
+            const rows = list.map(
               (item, index) => `
               <tr height="24" style="height:24pt;">
                 <td align="center" valign="middle" style="${td}">${index + 1}</td>
@@ -255,57 +375,56 @@
                 <td align="center" valign="middle" style="${td}"></td>
                 <td align="center" valign="middle" style="${td}"></td>
               </tr>`
-            )
-            .join('');
+            ).join('');
 
-          const customerEmpty = isBizType6
-            ? '<td align="center" valign="middle" style="${td}"></td>'
-            : '';
+            const customerEmpty = isBizType6
+              ? `<td align="center" valign="middle" style="${td}"></td>`
+              : '';
 
-          tables += `
-          <table border="1" cellspacing="0" cellpadding="0" align="center"
-            style="border-collapse:collapse;border:1px solid #000;mso-border-alt:solid #000 0.5pt;font-family:'宋体';font-size:11pt;text-align:center;">
-            <colgroup>${colGroup}</colgroup>
-            <tr height="40" style="height:40pt;">
-              <td colspan="${totalCols}" align="center" valign="middle" style="${border}padding:6px;text-align:center;font-family:'宋体';font-size:22pt;font-weight:bold;">${title}</td>
-            </tr>
-            <tr height="26" style="height:26pt;">
-              <td colspan="${isBizType6 ? 4 : 4}" align="left" valign="middle" style="${labelLeft}">供应商名称:${supplierValue}</td>
-              <td align="left" valign="middle" style="${labelLeft}">日期:${rowItem.storageTime || ''}</td>
-              <td colspan="${isBizType6 ? 5 : 4}" align="left" valign="middle" style="${labelLeft}">编号:${rowItem.bizNo || ''}</td>
-            </tr>
-            
-            <tr height="28" style="height:28pt;">
-              <td align="center" valign="middle" style="${th}">编号</td>
-              <td align="center" valign="middle" style="${th}">物料名称</td>
-              <td align="center" valign="middle" style="${th}">型号规格</td>
-              ${customerTh}
-              <td align="center" valign="middle" style="${th}">颜色</td>
-              <td align="center" valign="middle" style="${th}">单位</td>
-              <td align="center" valign="middle" style="${th}">入库数量</td>
-              <td align="center" valign="middle" style="${th}">批次号</td>
-              <td align="center" valign="middle" style="${th}">单价</td>
-              <td align="center" valign="middle" style="${th}">金额</td>
-            </tr>
-            ${rows}
-            <tr height="26" style="height:26pt;">
-              <td colspan="3" align="center" valign="middle" style="${td};font-weight:bold;">合计:</td>
-              ${customerEmpty}
-              <td align="center" valign="middle" style="${td}"></td>
-              <td align="center" valign="middle" style="${td}"></td>
-              <td align="center" valign="middle" style="${td};font-weight:bold;">${totalAmount}</td>
-              <td align="center" valign="middle" style="${td}"></td>
-              <td align="center" valign="middle" style="${td}"></td>
-              <td align="center" valign="middle" style="${td}"></td>
-            </tr>
-            <tr height="28" style="height:28pt;">
-              <td align="left" valign="middle" style="${labelLeft}">主管:${rowItem.verifyName || ''}</td>
-              <td align="left" valign="middle" style="${labelLeft}">仓库:${warehouseName}</td>
-              <td align="left" valign="middle" style="${labelLeft}">记账:${rowItem.extInfo?.createUserName || ''}</td>
-              <td colspan="${isBizType6 ? 7 : 6}" align="left" valign="middle" style="${labelLeft}">经手人:${rowItem.fromUser || ''}</td>
-            </tr>
-          </table>
-          <br style="mso-special-character:line-break;page-break-before:always" />`;
+            tables += `
+            <table border="1" cellspacing="0" cellpadding="0" align="center"
+              style="border-collapse:collapse;border:1px solid #000;mso-border-alt:solid #000 0.5pt;font-family:'宋体';font-size:11pt;text-align:center;">
+              <colgroup>${colGroup}</colgroup>
+              <tr height="40" style="height:40pt;">
+                <td colspan="${totalCols}" align="center" valign="middle" style="${border}padding:6px;text-align:center;font-family:'宋体';font-size:22pt;font-weight:bold;">${title}</td>
+              </tr>
+              <tr height="26" style="height:26pt;">
+                <td colspan="${isBizType6 ? 4 : 4}" align="left" valign="middle" style="${labelLeft}">供应商名称:${supplierValue}</td>
+                <td align="left" valign="middle" style="${labelLeft}">日期:${rowItem.storageTime || ''}</td>
+                <td colspan="${isBizType6 ? 5 : 4}" align="left" valign="middle" style="${labelLeft}">编号:${rowItem.bizNo || ''}</td>
+              </tr>
+              <tr height="28" style="height:28pt;">
+                <td align="center" valign="middle" style="${th}">编号</td>
+                <td align="center" valign="middle" style="${th}">物料名称</td>
+                <td align="center" valign="middle" style="${th}">型号规格</td>
+                ${customerTh}
+                <td align="center" valign="middle" style="${th}">颜色</td>
+                <td align="center" valign="middle" style="${th}">单位</td>
+                <td align="center" valign="middle" style="${th}">入库数量</td>
+                <td align="center" valign="middle" style="${th}">批次号</td>
+                <td align="center" valign="middle" style="${th}">单价</td>
+                <td align="center" valign="middle" style="${th}">金额</td>
+              </tr>
+              ${rows}
+              <tr height="26" style="height:26pt;">
+                <td colspan="3" align="center" valign="middle" style="${td};font-weight:bold;">合计:</td>
+                ${customerEmpty}
+                <td align="center" valign="middle" style="${td}"></td>
+                <td align="center" valign="middle" style="${td}"></td>
+                <td align="center" valign="middle" style="${td};font-weight:bold;">${totalAmount}</td>
+                <td align="center" valign="middle" style="${td}"></td>
+                <td align="center" valign="middle" style="${td}"></td>
+                <td align="center" valign="middle" style="${td}"></td>
+              </tr>
+              <tr height="28" style="height:28pt;">
+                <td align="left" valign="middle" style="${labelLeft}">主管:${rowItem.verifyName || ''}</td>
+                <td align="left" valign="middle" style="${labelLeft}">仓库:${warehouseName}</td>
+                <td align="left" valign="middle" style="${labelLeft}">记账:${rowItem.extInfo?.createUserName || ''}</td>
+                <td colspan="${isBizType6 ? 7 : 6}" align="left" valign="middle" style="${labelLeft}">经手人:${rowItem.fromUser || ''}</td>
+              </tr>
+            </table>
+            <br style="mso-special-character:line-break;page-break-before:always" />`;
+          }
         });
 
         const html = `<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">
@@ -318,7 +437,7 @@
         </style>
         <!--[if gte mso 9]><xml>
         <x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet>
-        <x:Name>${title}</x:Name>
+        <x:Name>${baseTitle}</x:Name>
         <x:WorksheetOptions>
           <x:DefaultRowHeight>260</x:DefaultRowHeight>
           <x:Print><x:ValidPrinterInfo/><x:HorizontalResolution>600</x:HorizontalResolution><x:VerticalResolution>600</x:VerticalResolution></x:Print>
@@ -335,7 +454,7 @@
         });
         const firstBizNo = this.formData[0]?.bizNo || '';
         const suffix = this.formData.length > 1 ? `等${this.formData.length}条` : firstBizNo;
-        saveAs(blob, `${title}_${suffix}.xls`);
+        saveAs(blob, `${baseTitle}_${suffix}.xls`);
       }
     }
   };