diff --git a/web-admin/src/utils/crm/contract-html-to-docx.ts b/web-admin/src/utils/crm/contract-html-to-docx.ts index 61337b082..35a73e7c1 100644 --- a/web-admin/src/utils/crm/contract-html-to-docx.ts +++ b/web-admin/src/utils/crm/contract-html-to-docx.ts @@ -1,5 +1,33 @@ /** 合同打印弹窗:HTML → DOCX 预处理与生成 */ +import HTMLtoDOCX from '@turbodocx/html-to-docx' + +const DOCX_MIME = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' + +/** + * 将已预处理的合同 HTML 转为 DOCX Blob(浏览器下载用)。 + * 调用方须先执行 prepareContractHtmlForDocx。 + */ +export async function generateContractDocxBlob( + preparedHtml: string, + title?: string +): Promise { + const fullHtml = `${preparedHtml}` + const result = await HTMLtoDOCX(fullHtml, null, { + orientation: 'portrait', + title: title || '合同', + margins: { + top: 720, + right: 720, + bottom: 720, + left: 720 + } + }) + + if (result instanceof Blob) return result + return new Blob([result as ArrayBuffer], { type: DOCX_MIME }) +} + export function parseContractSupplierCode(contractNo?: string | null): string { if (!contractNo) return 'SX' const match = String(contractNo).match(/^([A-Z]+)\/X-JT/)