From a28d0d5079e0dabbf2498fe464a24e5808041caa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A7=8B=E4=BA=8E=E5=88=9D=E8=A7=81?= <752204717@qq.com> Date: Mon, 13 Apr 2026 17:00:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../page/components/Tinymce/index.vue | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/components/page/components/Tinymce/index.vue b/src/components/page/components/Tinymce/index.vue index 42a4b61..1722c7f 100644 --- a/src/components/page/components/Tinymce/index.vue +++ b/src/components/page/components/Tinymce/index.vue @@ -466,12 +466,31 @@ export default { if (!body) return { replaced: 0 }; let replaced = 0; ed.undoManager.transact(() => { + // 先把被拆成多个 span 的 [13, 16, 21–23] 规整成单段文本,再做自动匹配 + this.normalizeSplitBracketCitesInTableCells(body); replaced = this._replaceBracketCitesInDocOrder(body, doc, maps, { tableOffset: 0 }); }); this.renderAutociteInEditor(ed); ed.fire('change'); return { replaced }; }, + /** + * TinyMCE/粘贴可能把单元格里的 [1, 2–3] 拆成多个内联节点(span/text 混排), + * 导致按文本节点匹配的自动链接无法命中。这里在匹配前把该类节点规整回纯文本。 + */ + normalizeSplitBracketCitesInTableCells(root) { + if (!root || !root.querySelectorAll) return; + const cells = root.querySelectorAll('td, th'); + cells.forEach((cell) => { + if (!cell || !cell.querySelectorAll) return; + if (cell.querySelector('mycite, autocite, wmath')) return; + if (!cell.querySelector('span')) return; + const raw = (cell.textContent || '').replace(/\u200b/g, ''); + const compact = raw.replace(/\s+/g, ' ').trim(); + if (!/^\[[\d\s,,\-–—]+\]$/.test(compact)) return; + cell.textContent = compact; + }); + }, /** 底部「自动链接参考文献」按钮,与原先工具栏 autoLinkRefs 行为一致 */ handleAutoLinkRefsClick() { const r = this.convertPlainBracketCitesToAutocite();