liding
5 天以前 62b0623c3476c971dc9bfa36cb0f3b3a4e0544a4
fix(report): 清除旧报告序号单元格中的默认下划线

- 新增 clearDefaultSequenceUnderlines 函数处理序号列下划线
- 针对包含"检测结果"或"检验结果"的表格中序号列进行清理
- 移除未显式设置 w:val 类型的下划线标签(旧报告中默认单下划线)
- 保留用户自行设置的带类型下划线,避免覆盖自定义格式
- 在 normalizeReportDocxForEditor 流程中集成该处理步骤
已修改1个文件
16 ■■■■■ 文件已修改
src/utils/reportDocxLayout.js 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/reportDocxLayout.js
@@ -164,6 +164,21 @@
  return changed ? documentXml : null
}
function clearDefaultSequenceUnderlines(xml) {
  return xml.replace(resultTablePattern, table => {
    if (!table.includes('序号') || !/(检测结果|检验结果)/.test(table)) return table
    return table.replace(tableRowPattern, row => row.replace(tableCellPattern, (cell, offset) => {
      if (offset !== row.indexOf('<w:tc')) return cell
      const text = [...cell.matchAll(/<w:t\b(?![^>]*\/>)[^>]*>([\s\S]*?)<\/w:t>/g)]
        .map(match => match[1]).join('').trim()
      if (!/^\d+$/.test(text)) return cell
      // 旧报告中的 <w:u w:color="auto"/> 默认会被解释成单下划线。
      // 显式设置了类型的下划线保留,允许用户自行修改序号格式。
      return cell.replace(/<w:u\b[^>]*\/>/g, tag => /\bw:val=/.test(tag) ? tag : '')
    }))
  })
}
export async function normalizeReportDocxForEditor(blob, reportCode) {
  const zip = await JSZip.loadAsync(blob)
  const documentPart = zip.file('word/document.xml')
@@ -173,6 +188,7 @@
  const themeXml = themePart ? await themePart.async('string') : ''
  const themeFonts = { major: chineseThemeFont(themeXml, 'major'), minor: chineseThemeFont(themeXml, 'minor') }
  let normalizedXml = alignResultTable(documentXml) || documentXml
  normalizedXml = clearDefaultSequenceUnderlines(normalizedXml)
  normalizedXml = fitCoverCustomer(normalizedXml) || normalizedXml
  normalizedXml = materializeChineseThemeFonts(normalizedXml, themeFonts) || normalizedXml
  let changed = normalizedXml !== documentXml