|
|
@@ -2827,7 +2827,7 @@ const generateContractTemplate = (contractData: ContractVO | undefined): string
|
|
|
return unitDict?.label || unitValue || '';
|
|
|
};
|
|
|
|
|
|
- // 构建产品明细表格行
|
|
|
+ // 构建产品明细表格行(使用 0.3px 边框)
|
|
|
const productRows =
|
|
|
contractData.products
|
|
|
?.map((product, index) => {
|
|
|
@@ -2837,19 +2837,19 @@ const generateContractTemplate = (contractData: ContractVO | undefined): string
|
|
|
|
|
|
return `
|
|
|
<tr>
|
|
|
- <td style="padding: 4px 6px; border: 1px solid #000; text-align: center; font-size: 12px;">${product.productName || ''}</td>
|
|
|
- <td style="padding: 4px 6px; border: 1px solid #000; text-align: center; font-size: 12px;">${product.model || product.productModel || ''}</td>
|
|
|
- <td style="padding: 4px 6px; border: 1px solid #000; text-align: center; font-size: 12px;">${getUnitLabel(product.unit)}</td>
|
|
|
- <td style="padding: 4px 6px; border: 1px solid #000; text-align: center; font-size: 12px;">${product.quantity || 0}</td>
|
|
|
- <td style="padding: 4px 6px; border: 1px solid #000; text-align: center; font-size: 12px;">${formatNumber(product.price)}</td>
|
|
|
- <td style="padding: 4px 6px; border: 1px solid #000; text-align: right; font-size: 12px;">${formatNumber(beforeTax)}</td>
|
|
|
- <td style="padding: 4px 6px; border: 1px solid #000; text-align: right; font-size: 12px;">${formatNumber(taxAmount)}</td>
|
|
|
- <td style="padding: 4px 6px; border: 1px solid #000; text-align: right; font-weight: bold; font-size: 12px;">${formatNumber(subtotal)}</td>
|
|
|
- <td style="padding: 4px 6px; border: 1px solid #000; text-align: center; font-size: 12px;">${product.remark || ''}</td>
|
|
|
+ <td style="padding: 4px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px;">${product.productName || ''}</td>
|
|
|
+ <td style="padding: 4px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px;">${product.model || product.productModel || ''}</td>
|
|
|
+ <td style="padding: 4px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px;">${getUnitLabel(product.unit)}</td>
|
|
|
+ <td style="padding: 4px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px;">${product.quantity || 0}</td>
|
|
|
+ <td style="padding: 4px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px;">${formatNumber(product.price)}</td>
|
|
|
+ <td style="padding: 4px 6px; border: 0.3px solid #000; text-align: right; font-size: 12px;">${formatNumber(beforeTax)}</td>
|
|
|
+ <td style="padding: 4px 6px; border: 0.3px solid #000; text-align: right; font-size: 12px;">${formatNumber(taxAmount)}</td>
|
|
|
+ <td style="padding: 4px 6px; border: 0.3px solid #000; text-align: right; font-weight: bold; font-size: 12px;">${formatNumber(subtotal)}</td>
|
|
|
+ <td style="padding: 4px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px;">${product.remark || ''}</td>
|
|
|
</tr>`;
|
|
|
})
|
|
|
.join('') ||
|
|
|
- '<tr><td colspan="9" style="padding: 5px 6px; border: 1px solid #000; text-align: center; font-size: 12px;">暂无产品信息</td></tr>';
|
|
|
+ '<tr><td colspan="9" style="padding: 5px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px;">暂无产品信息</td></tr>';
|
|
|
|
|
|
return `
|
|
|
<div style="width: 210mm; margin: 0 auto; padding: 0 15mm 20mm 15mm; font-family: '宋体', SimSun, serif; line-height: 1.6; box-sizing: border-box;">
|
|
|
@@ -2886,30 +2886,30 @@ const generateContractTemplate = (contractData: ContractVO | undefined): string
|
|
|
<div style="font-weight: bold; margin-bottom: 10px; font-size: 12px; color: #000;">第一条、标的、数量、价格及其他</div>
|
|
|
|
|
|
<!-- 产品表格 -->
|
|
|
- <table style="width: 100%; border-collapse: collapse; margin-bottom: 0; border: 1px solid #000;">
|
|
|
+ <table style="width: 100%; border-collapse: collapse; margin-bottom: 0; border: 0.3px solid #000;">
|
|
|
<thead>
|
|
|
<tr style="background-color: #fff;">
|
|
|
- <th style="padding: 5px 6px; border: 1px solid #000; text-align: center; font-size: 12px; width: 20%;">产品名称</th>
|
|
|
- <th style="padding: 5px 6px; border: 1px solid #000; text-align: center; font-size: 12px; width: 10%;">规格</th>
|
|
|
- <th style="padding: 5px 6px; border: 1px solid #000; text-align: center; font-size: 12px; width: 8%;">单位</th>
|
|
|
- <th style="padding: 5px 6px; border: 1px solid #000; text-align: center; font-size: 12px; width: 8%;">用量</th>
|
|
|
- <th style="padding: 5px 6px; border: 1px solid #000; text-align: center; font-size: 12px; width: 12%;">含税单价(元)</th>
|
|
|
- <th style="padding: 5px 6px; border: 1px solid #000; text-align: center; font-size: 12px; width: 12%;">未含税金额(元)</th>
|
|
|
- <th style="padding: 5px 6px; border: 1px solid #000; text-align: center; font-size: 12px; width: 10%;">税费(元)</th>
|
|
|
- <th style="padding: 5px 6px; border: 1px solid #000; text-align: center; font-size: 12px; width: 13%;">含税金额(元)</th>
|
|
|
- <th style="padding: 5px 6px; border: 1px solid #000; text-align: center; font-size: 12px; width: 15%;">备注</th>
|
|
|
+ <th style="padding: 5px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px; width: 20%;">产品名称</th>
|
|
|
+ <th style="padding: 5px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px; width: 10%;">规格</th>
|
|
|
+ <th style="padding: 5px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px; width: 8%;">单位</th>
|
|
|
+ <th style="padding: 5px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px; width: 8%;">用量</th>
|
|
|
+ <th style="padding: 5px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px; width: 12%;">含税单价(元)</th>
|
|
|
+ <th style="padding: 5px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px; width: 12%;">未含税金额(元)</th>
|
|
|
+ <th style="padding: 5px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px; width: 10%;">税费(元)</th>
|
|
|
+ <th style="padding: 5px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px; width: 13%;">含税金额(元)</th>
|
|
|
+ <th style="padding: 5px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px; width: 15%;">备注</th>
|
|
|
</tr>
|
|
|
</thead>
|
|
|
<tbody>
|
|
|
${productRows}
|
|
|
<!-- 合计行 -->
|
|
|
<tr style="background-color: #fff; font-weight: bold;">
|
|
|
- <td colspan="5" style="padding: 5px 6px; border: 1px solid #000; text-align: center; font-size: 12px;">合计(人民币)</td>
|
|
|
- <td colspan="4" style="padding: 5px 6px; border: 1px solid #000; text-align: center; font-size: 12px;">${productTotalChinese}(¥${formatNumber(productTotal)})</td>
|
|
|
+ <td colspan="4" style="padding: 5px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px;">合计(人民币)</td>
|
|
|
+ <td colspan="5" style="padding: 5px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px;">${productTotalChinese}(¥${formatNumber(productTotal)})</td>
|
|
|
</tr>
|
|
|
<!-- 提示行 -->
|
|
|
<tr>
|
|
|
- <td colspan="9" style="padding: 5px 6px; border: 1px solid #000; text-align: center; font-size: 11px; background-color: #fff;">
|
|
|
+ <td colspan="9" style="padding: 5px 6px; border: 0.3px solid #000; text-align: center; font-size: 11px; background-color: #fff;">
|
|
|
含税、含运费、装卸费(一票制) 结算以实际到货吨位为准
|
|
|
</td>
|
|
|
</tr>
|
|
|
@@ -2981,7 +2981,7 @@ const generateContractTemplate = (contractData: ContractVO | undefined): string
|
|
|
<div style="margin-bottom: 0;">开户银行:${contractData.partyABank || '中国建设银行安庆市城北支行'}</div>
|
|
|
<div style="margin-bottom: 0;">账号:${contractData.partyAAccount || '34050168680800000121'}</div>
|
|
|
</div>
|
|
|
- <div style="flex: 1; padding-left: 10px; border: 1px solid #000; padding: 8px; line-height: 1.3; font-size: 12px; position: relative;">
|
|
|
+ <div style="flex: 1; padding-left: 10px; border: 1px solid #000; border-left: none; padding: 8px; line-height: 1.3; font-size: 12px; position: relative;">
|
|
|
<div style="font-weight: bold; margin-bottom: 5px; padding-bottom: 5px; border-bottom: 1px solid #000;">需方</div>
|
|
|
<!-- 印章图片:如果partyB是山峡公司或云栋公司,则显示印章(说明供需方已调换),根据公司名称决定显示哪个印章文件 -->
|
|
|
${contractData.partyB && (contractData.partyB.includes('山峡') || contractData.partyB.includes('安庆市山峡化工有限公司') || contractData.partyB.includes('云栋') || contractData.partyB.includes('安徽云栋化工有限公司')) ? `<img src="${getSealImageByCompanyName(contractData.partyB)}" alt="印章" style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 140px; height: 140px; opacity: 0.85; z-index: 10;" />` : ''}
|