m0_70156489 1 week ago
parent
commit
dd585595d7

+ 34 - 31
application/admin/controller/Procuremen.php

@@ -13,6 +13,7 @@ use think\Config;
 use PhpOffice\PhpSpreadsheet\Spreadsheet;
 use PhpOffice\PhpSpreadsheet\Style\Alignment;
 use PhpOffice\PhpSpreadsheet\Style\Border;
+use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
 use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
 use think\Db;
 use think\Log;
@@ -7047,7 +7048,11 @@ class Procuremen extends Backend
         $sheet->getRowDimension(1)->setRowHeight(28);
 
         $quoteLines = $this->buildMonthExportQuoteLines($detailRows, $mainBySid);
-        $this->appendMonthExportQuoteSheet($spreadsheet, $quoteLines, $ym);
+        $quoteStartRow = $lastRow + 3;
+        $quoteLastRow = $this->appendMonthExportQuoteBlock($sheet, $quoteLines, $ym, $quoteStartRow);
+        if ($quoteLastRow >= $quoteStartRow) {
+            $sheet->getColumnDimension('E')->setWidth(28);
+        }
 
         $fileBase = '协助明细_' . str_replace('-', '', $ym);
         $filename = $fileBase . '.xlsx';
@@ -7191,35 +7196,39 @@ class Procuremen extends Backend
     }
 
     /**
+     * 月度导出:在同一工作表指定行起写入供应商报价明细(含未中标)
+     *
      * @param array<int, array<string, mixed>> $quoteLines
      */
-    protected function appendMonthExportQuoteSheet(Spreadsheet $spreadsheet, array $quoteLines, string $ym): void
+    protected function appendMonthExportQuoteBlock(Worksheet $sheet, array $quoteLines, string $ym, int $startRow): int
     {
-        $sheet = $spreadsheet->createSheet();
-        $sheet->setTitle('供应商报价明细');
         $mon = (int)substr($ym, 5, 2);
-        $sheet->mergeCells('A1:H1');
-        $sheet->setCellValue('A1', $mon . '月供应商报价明细');
-        $sheet->getStyle('A1')->getFont()->setBold(true)->setSize(14);
-        $sheet->getStyle('A1')->getAlignment()
+        $titleRow = $startRow;
+        $headerRow = $startRow + 1;
+        $dataStartRow = $startRow + 2;
+
+        $sheet->mergeCells('A' . $titleRow . ':H' . $titleRow);
+        $sheet->setCellValue('A' . $titleRow, $mon . '月供应商报价明细');
+        $sheet->getStyle('A' . $titleRow)->getFont()->setBold(true)->setSize(14);
+        $sheet->getStyle('A' . $titleRow)->getAlignment()
             ->setHorizontal(Alignment::HORIZONTAL_CENTER)
             ->setVertical(Alignment::VERTICAL_CENTER);
 
         $headers = ['序号', '传票号', '传票名称', '工序', '供应商', '单价', '交货期', '是否中标'];
         $col = 'A';
         foreach ($headers as $h) {
-            $sheet->setCellValue($col . '2', $h);
+            $sheet->setCellValue($col . $headerRow, $h);
             $col++;
         }
-        $sheet->getStyle('A2:H2')->getFont()->setBold(true);
-        $sheet->getStyle('A2:H2')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER);
+        $sheet->getStyle('A' . $headerRow . ':H' . $headerRow)->getFont()->setBold(true);
+        $sheet->getStyle('A' . $headerRow . ':H' . $headerRow)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER);
 
-        $rowNum = 3;
+        $rowNum = $dataStartRow;
         if ($quoteLines === []) {
-            $sheet->mergeCells('A3:H3');
-            $sheet->setCellValue('A3', '(当月暂无供应商报价明细)');
-            $sheet->getStyle('A3')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER);
-            $rowNum = 4;
+            $sheet->mergeCells('A' . $dataStartRow . ':H' . $dataStartRow);
+            $sheet->setCellValue('A' . $dataStartRow, '(当月暂无供应商报价明细)');
+            $sheet->getStyle('A' . $dataStartRow)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER);
+            $rowNum = $dataStartRow + 1;
         } else {
             $i = 0;
             foreach ($quoteLines as $line) {
@@ -7245,8 +7254,8 @@ class Procuremen extends Backend
         }
 
         $lastRow = $rowNum - 1;
-        if ($lastRow >= 2) {
-            $sheet->getStyle('A1:H' . $lastRow)->applyFromArray([
+        if ($lastRow >= $headerRow) {
+            $sheet->getStyle('A' . $titleRow . ':H' . $lastRow)->applyFromArray([
                 'borders' => [
                     'allBorders' => [
                         'borderStyle' => Border::BORDER_THIN,
@@ -7254,20 +7263,14 @@ class Procuremen extends Backend
                     ],
                 ],
             ]);
-            $sheet->getStyle('A3:H' . $lastRow)->getAlignment()->setVertical(Alignment::VERTICAL_CENTER);
-            $sheet->getStyle('C3:C' . $lastRow)->getAlignment()->setWrapText(true)->setVertical(Alignment::VERTICAL_TOP);
-            $sheet->getStyle('D3:D' . $lastRow)->getAlignment()->setWrapText(true)->setVertical(Alignment::VERTICAL_TOP);
-            $sheet->getStyle('E3:E' . $lastRow)->getAlignment()->setWrapText(true)->setVertical(Alignment::VERTICAL_TOP);
+            $sheet->getStyle('A' . $dataStartRow . ':H' . $lastRow)->getAlignment()->setVertical(Alignment::VERTICAL_CENTER);
+            $sheet->getStyle('C' . $dataStartRow . ':C' . $lastRow)->getAlignment()->setWrapText(true)->setVertical(Alignment::VERTICAL_TOP);
+            $sheet->getStyle('D' . $dataStartRow . ':D' . $lastRow)->getAlignment()->setWrapText(true)->setVertical(Alignment::VERTICAL_TOP);
+            $sheet->getStyle('E' . $dataStartRow . ':E' . $lastRow)->getAlignment()->setWrapText(true)->setVertical(Alignment::VERTICAL_TOP);
+            $sheet->getRowDimension($titleRow)->setRowHeight(28);
         }
-        $sheet->getColumnDimension('A')->setWidth(7);
-        $sheet->getColumnDimension('B')->setWidth(16);
-        $sheet->getColumnDimension('C')->setWidth(40);
-        $sheet->getColumnDimension('D')->setWidth(24);
-        $sheet->getColumnDimension('E')->setWidth(28);
-        $sheet->getColumnDimension('F')->setWidth(12);
-        $sheet->getColumnDimension('G')->setWidth(14);
-        $sheet->getColumnDimension('H')->setWidth(10);
-        $sheet->getRowDimension(1)->setRowHeight(28);
+
+        return $lastRow;
     }
 
     /**

+ 4 - 1
application/admin/view/procuremenexport/index.html

@@ -14,7 +14,10 @@
                 </span>
             </div>
             <table id="table" class="table table-striped table-bordered table-hover table-nowrap" width="100%"></table>
-            <p class="help-block" style="padding:8px 12px;margin:0;">显示所选月份内<strong>已完结</strong>的协助订单(月份按<strong>采购确认通过</strong>时间统计,同一订单号合并为一行)。点击「导出 Excel」下载该月协助明细;Excel 含两个工作表:<strong>协助明细</strong>(中标汇总)与<strong>供应商报价明细</strong>(各订单下发供应商的单价、交货期及是否中标)。</p>
+            <div class="procuremen-export-help" style="padding:8px 12px 10px;">
+                <p class="help-block" style="margin:0 0 8px;">显示所选月份内<strong>已完结</strong>的协助订单(月份按<strong>采购确认通过</strong>时间统计,同一订单号合并为一行)。</p>
+                <p class="help-block" style="margin:0;">点击「导出 Excel」下载该月协助明细(单个工作表):上方为<strong>中标汇总</strong>;下方为<strong>供应商报价明细</strong>,列出各订单下发供应商的单价、交货期及是否中标。</p>
+            </div>
         </div>
     </div>
 </div>