]*>\s*
![]()
]*(?:logo\.gif|logo)[^>]*>[\s\S]*?<\/div>/gi, (match) => {
if (match.includes('logo.gif') || match.includes('/logo') || (match.includes('logo') && !match.includes('watermask'))) {
return ''
}
return match
})
result = result.replace(/
![]()
]*(?:logo\.gif|logo)[^>]*(?![^<]*watermask)[^>]*>/gi, '')
return result
}
export function toAbsoluteAssetUrls(html: string, origin: string): string {
const base = origin.replace(/\/$/, '')
return html.replace(/\bsrc=(["'])(\/[^"']+)\1/gi, (_m, quote: string, path: string) => {
return `src=${quote}${base}${path}${quote}`
})
}
export function injectSxWatermarkHtml(html: string, watermarkUrl: string): string {
const watermarkBlock = `
`
return `${watermarkBlock}${html}`
}
export function prepareContractHtmlForDocx(options: {
html: string
contractNo?: string | null
origin: string
}): string {
const origin = options.origin.replace(/\/$/, '')
const supplierCode = parseContractSupplierCode(options.contractNo)
const isSX = supplierCode === 'SX'
let html = options.html || ''
if (!isSX) {
html = stripContractLogoHtml(html)
}
html = toAbsoluteAssetUrls(html, origin)
if (isSX) {
html = injectSxWatermarkHtml(html, `${origin}/watermask.jpg`)
}
return html
}
export function buildContractDocxFileName(
contractName?: string | null,
contractNo?: string | null
): string {
const raw = (contractName && String(contractName).trim()) || (contractNo && String(contractNo).trim()) || '合同'
const safe = raw.replace(/[/\\:*?"<>|]/g, '-')
return `${safe}合同.docx`
}