From ade0b5b5090cff8bc11ac90b26ad05f4f8f92754 Mon Sep 17 00:00:00 2001 From: Nan Kyung Lee Date: Mon, 2 Mar 2026 10:47:29 +0900 Subject: [PATCH] =?UTF-8?q?feat(reports):=20HWPX=20=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EB=B8=94=20=EB=A0=88=EC=9D=B4=EC=95=84=EC=9B=83=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0=20(=ED=85=8C=EB=91=90=EB=A6=AC=20+=20=EB=9D=BC?= =?UTF-8?q?=EB=B2=A8=20=EB=B0=B0=EA=B2=BD=EC=83=89)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit borderFill id=3(값 셀: 실선 테두리), id=4(라벨 셀: 실선 테두리 + #f0f4f8 배경) 추가하여 HTML 보고서와 동일한 테이블 스타일 적용. Co-Authored-By: Claude Opus 4.6 --- .../src/tabs/reports/components/hwpxExport.ts | 41 +++++++++++++++---- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/frontend/src/tabs/reports/components/hwpxExport.ts b/frontend/src/tabs/reports/components/hwpxExport.ts index 46eb796..533c805 100644 --- a/frontend/src/tabs/reports/components/hwpxExport.ts +++ b/frontend/src/tabs/reports/components/hwpxExport.ts @@ -207,7 +207,11 @@ const HEADER_XML = '' + '' + // ── borderFill - '' + + // id=1: 기본 (테두리 없음) + // id=2: 기본 + fillBrush 없음 + // id=3: 테이블 값 셀 (실선 테두리) + // id=4: 테이블 라벨 셀 (실선 테두리 + 배경색 #f0f4f8) + '' + '' + '' + '' + @@ -227,6 +231,27 @@ const HEADER_XML = '' + '' + '' + + // id=3: 값 셀 — 실선 테두리, 배경 없음 + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + // id=4: 라벨 셀 — 실선 테두리 + 연한 파란 배경 + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + '' + // ── charProperties (Skeleton 7개 그대로) '' + @@ -490,10 +515,12 @@ function buildCell( colSpan: number, rowSpan: number, width: number, - isHeader = false, + isLabel = false, ): string { + // 라벨 셀: borderFill id=4 (테두리 + 배경), 값 셀: id=3 (테두리만) + const bfId = isLabel ? 4 : 3; return ( - `` + + `` + `` + buildCellPara(text) + @@ -526,17 +553,17 @@ function buildFieldTable( fields.forEach((field, rowIdx) => { const value = getVal(field.key) || '-'; if (field.label) { - // 2열: 라벨 | 값 + // 2열: 라벨(배경색) | 값 rows += '' + - buildCell(field.label, 0, rowIdx, 1, 1, LABEL_WIDTH) + - buildCell(value, 1, rowIdx, 1, 1, VALUE_WIDTH) + + buildCell(field.label, 0, rowIdx, 1, 1, LABEL_WIDTH, true) + + buildCell(value, 1, rowIdx, 1, 1, VALUE_WIDTH, false) + ''; } else { // 1열 전체 너비 (textarea 류) rows += '' + - buildCell(value, 0, rowIdx, 2, 1, CONTENT_WIDTH) + + buildCell(value, 0, rowIdx, 2, 1, CONTENT_WIDTH, false) + ''; } });