refactor(文书预览): 移除文书内容页签与 raw 渲染模式,统一走签署态预览

This commit is contained in:
yelan
2026-09-27 12:39:23 +08:00
parent 07b27ad6ca
commit 635e998946
4 changed files with 28 additions and 100 deletions
+11 -24
View File
@@ -1,15 +1,19 @@
/**
* 文书纸的基础排版(全项目唯一一份)。
*
* 为什么单独成文件、还要在运行期注入:同一份「文书纸」有**两种渲染通道**——
* 为什么单独成文件、还要在运行期注入:同一份「文书纸」原先有**两种渲染通道**——
* ① v-html 直接挂进页面(签署工作台、各类预览)→ 只能吃全局样式;
* ② iframe srcdoc(文书库的「文书内容」页签,隔离模板自带的 `<style>`)→ 只能吃字符串。
* 各写一份必然漂移:改版前实测已经有 5 份副本,表格边框在 `#52646e` 与 `#c8d7dd` 之间
* 分叉、单元格内边距 `5px 7px` 与 `5px 9px` 不一致、只有两处带宋体。
* 所以这里只维护一份字符串,两条通道共用。
* 所以这里只维护一份字符串。
*
* 选择器一律以 `.doc-paper` 开头:v-html 通道把它挂在容器 div 上,
* iframe 通道挂在 `<body>` 上,两边命中同一批规则。
* **2026-09-27 起只剩 ① 一条通道**:文书库预览去掉了「文书内容」页签,
* iframe/srcdoc 那条路连同 `DocumentPaper` 的 `raw` 模式一起删除。
* 仍然保留「运行期注入」而不是普通 css 文件,是因为注入的时机可控
* (setup 期,避免首帧"纸没排版"的闪烁),且规则文本同时供导出 PDF 之类的场景复用。
*
* 选择器一律以 `.doc-paper` 开头,挂在容器 div 上。
*
* 注意:填写项胶囊 / 选项 ☑☐ / 系统页眉的样式**不在这里**,
* 它们与「签署态」语义强相关,统一在 styles/signing-document.css。
@@ -100,8 +104,9 @@ const STYLE_TAG_ID = 'document-paper-base-style'
/**
* 把基础排版注入 `document.head`(幂等)。
*
* 用运行期注入而不是普通的全局 css 文件,是为了让 v-html 与 iframe 两条通道
* 吃**同一份**规则文本;写成 css 文件后 iframe 拿不到(srcdoc 无法引用应用样式表)。
* 用运行期注入而不是普通的全局 css 文件,是为了控制注入时机
* (setup 期而不是 onMounted,避免首帧"纸没排版"的闪烁),
* 并且让规则文本有唯一一份来源。
*/
export function ensureDocumentPaperStyle(): void {
if (typeof document === 'undefined') {
@@ -117,21 +122,3 @@ export function ensureDocumentPaperStyle(): void {
style.textContent = DOCUMENT_PAPER_CSS
document.head.appendChild(style)
}
/**
* 把一段正文包成可直接塞进 iframe 的完整文档。
*
* 正文本身已经是完整 HTML 文档(预置模板自带版式)时原样返回——
* 那种情况下再套一层 body 会破坏它自己的 `html/body` 样式。
*/
export function buildPaperSrcDoc(contentHtml: string): string {
if (/^\s*<!doctype html|^\s*<html[\s>]/i.test(contentHtml)) {
return contentHtml
}
return [
'<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8" />',
`<style>${DOCUMENT_PAPER_CSS}</style></head>`,
`<body class="doc-paper">${contentHtml}</body></html>`,
].join('')
}