@guodun/antdv 1.7.11 → 1.7.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es/components/contract-signing-location/src/ContractSigningLocation.vue.mjs +370 -294
- package/dist/es/components/contract-signing-location/src/ContractSigningLocationCanvas.vue.mjs +219 -202
- package/dist/es/components/contract-signing-location/src/ContractSigningTemplatePage.vue.mjs +18 -18
- package/dist/es/components/contract-signing-location/src/template-source.mjs +62 -49
- package/dist/es/components/index.mjs +1 -0
- package/dist/es/components/pro-contract-template-designer/index.mjs +1 -0
- package/dist/es/components/pro-contract-template-designer/src/ContractTemplatePreviewPage.vue.mjs +37 -42
- package/dist/es/components/pro-contract-template-designer/src/ContractTemplateRendererPage.vue.mjs +69 -55
- package/dist/es/components/pro-contract-template-designer/src/ContractTemplateSingleRenderer.vue.mjs +278 -270
- package/dist/es/components/pro-contract-template-designer/src/DesignerPage.vue.mjs +344 -343
- package/dist/es/components/pro-contract-template-designer/src/ProContractTemplateDesigner.vue.mjs +1046 -1000
- package/dist/es/components/pro-contract-template-designer/src/ProContractTemplateRenderer.vue.mjs +120 -74
- package/dist/es/components/pro-contract-template-designer/src/composables/use-template-designer.mjs +133 -132
- package/dist/es/components/pro-contract-template-designer/src/constants.mjs +7 -7
- package/dist/es/components/pro-contract-template-designer/src/utils/contract-layout-check.mjs +239 -0
- package/dist/es/components/pro-contract-template-designer/src/utils/contract-print-document.mjs +99 -75
- package/dist/es/components/pro-contract-template-designer/src/utils/page-decorations.mjs +67 -76
- package/dist/es/components/pro-contract-template-designer/src/utils/template-renderer.mjs +96 -83
- package/dist/es/components/pro-contract-template-designer/src/utils/template-variable-render.mjs +23 -15
- package/dist/es/components/pro-contract-template-designer/style/index.css +1 -1
- package/dist/es/contract-print-css/index.mjs +473 -0
- package/dist/es/contract-print.mjs +2 -0
- package/dist/es/index.mjs +21 -20
- package/dist/lib/components/contract-signing-location/src/ContractSigningLocation.vue.cjs +1 -1
- package/dist/lib/components/contract-signing-location/src/ContractSigningLocationCanvas.vue.cjs +1 -1
- package/dist/lib/components/contract-signing-location/src/ContractSigningTemplatePage.vue.cjs +1 -1
- package/dist/lib/components/contract-signing-location/src/template-source.cjs +1 -1
- package/dist/lib/components/index.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/index.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/src/ContractTemplatePreviewPage.vue.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateRendererPage.vue.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateSingleRenderer.vue.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/src/DesignerPage.vue.cjs +2 -2
- package/dist/lib/components/pro-contract-template-designer/src/ProContractTemplateDesigner.vue.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/src/ProContractTemplateRenderer.vue.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/src/composables/use-template-designer.cjs +4 -4
- package/dist/lib/components/pro-contract-template-designer/src/constants.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/src/utils/contract-layout-check.cjs +1 -0
- package/dist/lib/components/pro-contract-template-designer/src/utils/contract-print-document.cjs +52 -30
- package/dist/lib/components/pro-contract-template-designer/src/utils/page-decorations.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/src/utils/template-renderer.cjs +5 -5
- package/dist/lib/components/pro-contract-template-designer/src/utils/template-variable-render.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/style/index.css +1 -1
- package/dist/lib/contract-print-css/index.cjs +413 -0
- package/dist/lib/contract-print.cjs +1 -0
- package/dist/lib/index.cjs +1 -1
- package/dist/theme/icon.css +1 -1
- package/dist/theme/index.css +1 -1
- package/dist/types/components/contract-signing-location/src/ContractSigningLocation.vue.d.ts +9 -0
- package/dist/types/components/contract-signing-location/src/ContractSigningLocationCanvas.vue.d.ts +7 -0
- package/dist/types/components/contract-signing-location/src/template-source.d.ts +6 -0
- package/dist/types/components/pro-contract-template-designer/index.d.ts +1 -0
- package/dist/types/components/pro-contract-template-designer/src/ContractTemplateSingleRenderer.vue.d.ts +2 -0
- package/dist/types/components/pro-contract-template-designer/src/ProContractTemplateDesigner.vue.d.ts +5 -1
- package/dist/types/components/pro-contract-template-designer/src/ProContractTemplateRenderer.vue.d.ts +7 -2
- package/dist/types/components/pro-contract-template-designer/src/composables/use-template-designer.d.ts +2 -2
- package/dist/types/components/pro-contract-template-designer/src/types.d.ts +36 -0
- package/dist/types/components/pro-contract-template-designer/src/utils/contract-layout-check.d.ts +104 -0
- package/dist/types/components/pro-contract-template-designer/src/utils/contract-print-document.d.ts +4 -1
- package/dist/types/components/pro-contract-template-designer/src/utils/page-decorations.d.ts +2 -8
- package/dist/types/components/pro-contract-template-designer/src/utils/template-renderer.d.ts +6 -1
- package/dist/types/contract-print-css/index.d.ts +99 -0
- package/dist/types/contract-print.d.ts +2 -0
- package/package.json +16 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../../
|
|
1
|
+
const e=require(`../../../contract-print-css/index.cjs`),t=require(`./utils/signing-mark.cjs`);var n=e.CONTRACT_PRINT_FONT_FAMILY,r=[{label:`合同宋体`,value:n},{label:`文档黑体`,value:e.CONTRACT_PRINT_SANS_FONT_FAMILY}],i=[12,14,16,18,20,24,28,32],a=[{label:`左对齐`,value:`left`},{label:`居中对齐`,value:`center`},{label:`右对齐`,value:`right`}],o=[{format:`paragraph`,label:`正文`,fontSize:14,bold:!1,marginTop:0,marginBottom:10},{format:1,label:`标题 1`,fontSize:28,bold:!0,marginTop:20,marginBottom:12},{format:2,label:`标题 2`,fontSize:24,bold:!0,marginTop:16,marginBottom:10},{format:3,label:`标题 3`,fontSize:20,bold:!0,marginTop:14,marginBottom:8},{format:4,label:`标题 4`,fontSize:18,bold:!0,marginTop:12,marginBottom:8},{format:5,label:`标题 5`,fontSize:16,bold:!0,marginTop:10,marginBottom:6},{format:6,label:`标题 6`,fontSize:14,bold:!0,marginTop:8,marginBottom:6}];function s(e){return o.find(t=>t.format===e)}var c=[{key:`contractTitle`,label:`合同标题`,headingLevel:1,fontSize:26,fontFamily:n,textAlign:`center`,bold:!0,italic:!1,underline:!1},{key:`clauseTitle`,label:`条款标题`,headingLevel:2,fontSize:18,fontFamily:n,textAlign:`left`,bold:!0,italic:!1,underline:!1},{key:`bodyClause`,label:`正文条款`,paragraph:!0,fontSize:14,fontFamily:n,textAlign:`left`,bold:!1,italic:!1,underline:!1},{key:`appendixTitle`,label:`附件标题`,headingLevel:2,fontSize:20,fontFamily:n,textAlign:`center`,bold:!0,italic:!1,underline:!1}];function l(e){return[e.paragraph?{type:`set-paragraph`}:{type:`set-heading`,level:e.headingLevel??2},{type:`set-text-align`,value:e.textAlign},{type:`set-font-family`,value:e.fontFamily},{type:`set-font-size`,value:e.fontSize},e.bold?{type:`set-bold`}:{type:`unset-bold`},e.italic?{type:`set-italic`}:{type:`unset-italic`},e.underline?{type:`set-underline`}:{type:`unset-underline`}]}var u=Object.fromEntries(c.map(e=>[e.key,l(e)]));function d(e){return c.find(t=>t.key===e)}function f(e){return(u[e]??[]).map(e=>({...e}))}function p(e){return String(e||``).replace(/["']/g,``).replace(/\s*,\s*/g,`,`).trim().toLowerCase()}function m(e,t=`append`){let n=t===`replace`?e??r:[...r,...e??[]],i=new Map;return n.forEach(e=>{e?.value&&i.set(p(e.value),e)}),Array.from(i.values())}var h=[`seal`,`signature`,`date`,`area`,`line`].map(e=>({markType:e,label:t.SIGNING_MARK_TYPE_LABELS[e]}));exports.CONTRACT_BLOCK_STYLES=o,exports.CONTRACT_TEXT_STYLE_PRESETS=c,exports.CONTRACT_TEXT_STYLE_PRESET_COMMANDS=u,exports.DEFAULT_CONTRACT_FONT_FAMILY=n,exports.DEFAULT_FONT_FAMILY_OPTIONS=r,exports.DEFAULT_FONT_SIZE_PRESETS=i,exports.DEFAULT_TEXT_ALIGN_OPTIONS=a,exports.SIGNING_MARK_TOOL_ITEMS=h,exports.getContractBlockStyle=s,exports.getContractTextStylePreset=d,exports.normalizeFontFamilyValue=p,exports.resolveContractTextStylePresetCommands=f,exports.resolveFontFamilyOptions=m;
|
package/dist/lib/components/pro-contract-template-designer/src/utils/contract-layout-check.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require(`../../../../contract-print-css/index.cjs`),t=require(`./contract-print-document.cjs`),n=require(`./page-decorations.cjs`),r=require(`./template-renderer.cjs`);var i=class extends Error{constructor(e){super(e),this.name=`ContractTemplateLayoutMeasureError`}},a=256;function o(t,r){let i=e.resolveContractPagePadding(n.normalizePageDecorations(t.pageDecorations),r.pageNumber),a={pageIndex:r.pageIndex,pageNumber:r.pageNumber,pageId:t.id,pageFormat:t.format,width:t.width,height:t.height,paddingTop:i.top,paddingBottom:i.bottom,classNames:n.buildPageDecorationClassNames(t.pageDecorations,r.pageNumber),decorationsHtml:n.buildPageDecorationsHtml(t.pageDecorations,r.pageNumber,r.totalPages,t.decorationVariables,t.decorationValues),contentHtml:t.contentHtml};return{...r.fileId===void 0?{}:{fileId:r.fileId},...a,key:s(a)}}function s(t){return JSON.stringify([e.CONTRACT_PRINT_STYLE_VERSION,t.width,t.height,t.pageFormat,t.paddingTop,t.paddingBottom,t.classNames,t.decorationsHtml,t.contentHtml])}function c(e){if(e.layoutPages)return e.layoutPages;let t=e.template,n=Array.isArray(t?.pages)?t.pages:[],i=r.normalizeRenderValues(t,e.values);return n.flatMap((a,s)=>{let c=r.buildTemplateRenderPages({...t,pages:[a]},i,{mode:`display`})[0];return c?[o(c,{...e.fileId===void 0?{}:{fileId:e.fileId},pageIndex:s,pageNumber:s+1,totalPages:n.length})]:[]})}var l;async function u(e,t={}){let n=d(t);try{return await n.check(e,t)}finally{n.dispose()}}function d(e={}){let t=Math.max(1,Math.floor(e.cacheLimit??a)),n=new Map,r=new Set,o=!1;S();function s(){return e.measure??l??T}function u(e){let t=n.get(e);return t&&(n.delete(e),n.set(e,t)),t}function d(e,r){for(n.delete(e),n.set(e,r);n.size>t;){let e=n.keys().next().value;if(e===void 0)break;n.delete(e)}}async function m(e,t,n){let r=u(e.key);if(r)return f(e,r);let a=n?.(e.key);if(a&&h(a))return d(e.key,a),f(e,a);let o;try{o=await s()(e,t)}catch(n){if(t.aborted)throw v();return p(e,n)}return h(o)?(d(e.key,o),f(e,o)):p(e,new i(`合同排版度量结果无效`))}return{async check(e,t={}){if(o)throw v();let n=new AbortController;r.add(n);let i=t.signal,a=()=>n.abort();i?.aborted?n.abort():i?.addEventListener(`abort`,a,{once:!0});try{let r=[];for(let i of e)for(let e of c(i)){g(n.signal);let i=await m(e,n.signal,t.reuse);g(n.signal),i&&r.push(i),t.onPage?.(e,i)}return r}finally{r.delete(n),i?.removeEventListener(`abort`,a)}},clear(){n.clear()},dispose(){o||(o=!0,r.forEach(e=>e.abort()),r.clear(),n.clear(),C())}}}function f(e,t){let n=t.overflowHeight>1,r=t.overflowWidth>1;if(!(!n&&!r))return{...m(e),kind:`overflow`,overflowHeight:n?t.overflowHeight:0,overflowWidth:r?t.overflowWidth:0}}function p(e,t){return{...m(e),kind:`measure-failed`,overflowHeight:0,overflowWidth:0,error:t instanceof Error&&t.message?t.message:String(t||`合同排版度量失败`)}}function m(e){return{...e.fileId===void 0?{}:{fileId:e.fileId},pageIndex:e.pageIndex,pageNumber:e.pageNumber,pageId:e.pageId}}function h(e){return e?Number.isFinite(e.overflowHeight)&&Number.isFinite(e.overflowWidth)&&e.overflowHeight>=0&&e.overflowWidth>=0:!1}function g(e){if(e.aborted)throw v()}function _(e){return!!(e&&typeof e==`object`&&e.name===`AbortError`)}function v(){if(typeof DOMException<`u`)return new DOMException(`合同排版校验已取消`,`AbortError`);let e=Error(`合同排版校验已取消`);return e.name=`AbortError`,e}var y,b=0,x=Promise.resolve();function S(){b+=1}function C(){b=Math.max(0,b-1),b===0&&(y?.remove(),y=void 0)}function w(){if(y?.isConnected)return y;let e=document.createElement(`iframe`);return e.setAttribute(`aria-hidden`,`true`),e.setAttribute(`tabindex`,`-1`),e.setAttribute(`title`,`合同排版校验`),e.setAttribute(`referrerpolicy`,`no-referrer`),e.setAttribute(`sandbox`,`allow-scripts allow-same-origin`),e.style.cssText=`position:fixed;left:-100000px;top:0;border:0;pointer-events:none;`,document.body.append(e),y=e,e}function T(e,t){let n=x.then(()=>E(e,t));return x=n.catch(()=>void 0),n}function E(e,n){if(n?.aborted)return Promise.reject(v());if(typeof window>`u`||typeof document>`u`||!document.body)return Promise.reject(new i(`当前运行环境不是浏览器环境,无法执行合同排版校验`));let r=w(),a=D(),o=t.buildContractPrintDocument({messageId:a,parentOrigin:window.location.origin,pageId:e.pageId,pageFormat:e.pageFormat,width:e.width,height:e.height,paddingTop:e.paddingTop,paddingBottom:e.paddingBottom,classNames:e.classNames,decorationsHtml:e.decorationsHtml,contentHtml:e.contentHtml});return new Promise((s,c)=>{let l,u=e=>{l!==void 0&&clearTimeout(l),t.unsubscribeContractPrintFrameMessages(f),n?.removeEventListener(`abort`,d),e()},d=()=>u(()=>c(v())),f=e=>{let n=e.data;if(e.source!==r.contentWindow||e.origin!==window.location.origin||!t.isContractPrintFrameMessage(n)||n.messageId!==a)return;if(n.type===`error`){u(()=>c(new i(n.error||`合同排版度量校验失败`)));return}let o=n.metrics;o&&u(()=>s(o))};l=setTimeout(()=>{u(()=>c(new i(`合同排版度量校验超时(${t.CONTRACT_PRINT_FRAME_TIMEOUT_MS}ms)`)))},t.CONTRACT_PRINT_FRAME_TIMEOUT_MS),t.subscribeContractPrintFrameMessages(f),n?.addEventListener(`abort`,d,{once:!0}),r.style.width=`${e.width}px`,r.style.height=`${e.height}px`,r.srcdoc=o})}function D(){return typeof crypto<`u`&&`randomUUID`in crypto?`gd-contract-print-${crypto.randomUUID()}`:`gd-contract-print-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function O(e,t=`generate`){let n=`第 ${e.pageNumber} 页`;if(e.kind===`measure-failed`)return[`${n}无法确认排版(${k(e.error)}),请稍后重试`];let r=[];if(e.overflowHeight>1){let i=Math.ceil(e.overflowHeight);r.push(t===`design`?`${n}按打印样式超出 ${i} px,生成合同时将被拦截`:`${n}正文超出纸张 ${i} px,请调整模板后再生成合同`)}if(e.overflowWidth>1){let i=Math.ceil(e.overflowWidth);r.push(t===`design`?`${n}按打印样式超出纸张宽度 ${i} px,生成合同时将被拦截`:`${n}正文超出纸张宽度 ${i} px,请调整模板后再生成合同`)}return r}function k(e){let t=e??``;return t.includes(`超时`)?`排版校验超时`:t.includes(`合同图片加载失败`)?`底图图片未能加载`:t.includes(`浏览器环境`)?`当前环境无法执行排版校验`:`字体或排版度量未通过`}exports.checkContractTemplateLayout=u,exports.createContractTemplateLayoutChecker=d,exports.createContractTemplateLayoutPage=o,exports.describeContractTemplateLayoutIssue=O,exports.isContractTemplateLayoutAbortError=_;
|
package/dist/lib/components/pro-contract-template-designer/src/utils/contract-print-document.cjs
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
require(`../../../../_virtual/_rolldown/runtime.cjs`);
|
|
1
|
+
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../../contract-print-css/index.cjs`);let t=require(`vue`);var n=`gd-contract-print`,r=.5,i=`合同签署位置:甲方(Company A)编号 2026-08-31。`,a=e.CONTRACT_PRINT_FONT_TIMEOUT_MS+1e3,o=new Set;function s(e){o.forEach(t=>t(e))}function c(e){o.size||window.addEventListener(`message`,s),o.add(e)}function l(e){o.delete(e),o.size||window.removeEventListener(`message`,s)}var u=`合同签署位置甲乙双方`,d=`:,()。;`,f=`20260831`,p={textWidth:379.546875,sansTextWidth:393,variableRowHeight:28},m=`合同排版度量校验失败,禁止生成签署坐标`,h=`合同图片加载失败`,g=(0,t.shallowRef)(``);function _(e){g.value=(e?.baseUrl?.trim()??``).replace(/\/+$/,``)}function v(e){let t=e?.trim();return t?t.replace(/\/+$/,``):g.value.trim().replace(/\/+$/,``)}function y(e,t=typeof window>`u`?``:window.location.origin){let n=e.trim().replace(/\/+$/,``);return n?/^https?:\/\//i.test(n)?n:t?new URL(n.startsWith(`/`)?n:`/${n}`,`${t.replace(/\/+$/,``)}/`).href.replace(/\/+$/,``):n.startsWith(`/`)?n:`/${n}`:``}function b(t){let a=`gd-contract-print-${t.messageId}`,o=e.buildContractPrintCss({width:t.width,height:t.height,pages:[{id:t.pageId,pageSize:{width:t.width,height:t.height}}]}),s=JSON.stringify({messageId:t.messageId,parentOrigin:t.parentOrigin,pageId:t.pageId,pageHeight:t.height,timeoutMs:e.CONTRACT_PRINT_FONT_TIMEOUT_MS,imageErrorMessage:h,fontFamily:e.CONTRACT_PRINT_FONT_FAMILY,sansFontFamily:e.CONTRACT_PRINT_SANS_FONT_FAMILY,latinFontFamily:`"GD Contract Latin", serif`,metricNormalizeCss:e.CONTRACT_PRINT_METRIC_NORMALIZE_CSS.replace(/\s+/g,` `).trim(),sample:i,hanziSample:u,punctSample:d,digitSample:f,hanziAdvance:16,punctAdvance:16,digitAdvance:8,baseline:p,tolerance:r}).replace(/</g,`\\u003c`),c=`width:${t.width}px;min-height:${t.height}px;padding-top:${t.paddingTop}px;padding-bottom:${t.paddingBottom}px`;return`<!doctype html>
|
|
2
2
|
<html lang="zh-CN">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8">
|
|
5
5
|
<meta name="color-scheme" content="light">
|
|
6
|
-
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; base-uri 'none'; object-src 'none'; form-action 'none'; connect-src 'none'; frame-src 'none'; worker-src 'none'; img-src data: blob: http: https:; font-src data: blob: http: https:; style-src 'unsafe-inline'; script-src 'nonce-${
|
|
6
|
+
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; base-uri 'none'; object-src 'none'; form-action 'none'; connect-src 'none'; frame-src 'none'; worker-src 'none'; img-src data: blob: http: https:; font-src data: blob: http: https:; style-src 'unsafe-inline'; script-src 'nonce-${S(a)}'">
|
|
7
7
|
<style data-contract-render-style="true">
|
|
8
|
-
${
|
|
8
|
+
${x(o)}
|
|
9
9
|
</style>
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
12
|
-
<section class="${
|
|
13
|
-
${
|
|
14
|
-
<div class="gd-contract-template-page__content">${
|
|
12
|
+
<section class="${S(t.classNames)}" data-page-id="${S(t.pageId)}" data-page-format="${S(t.pageFormat??`Custom`)}" data-page-width="${t.width}" data-page-height="${t.height}" style="${c}">
|
|
13
|
+
${t.decorationsHtml}
|
|
14
|
+
<div class="gd-contract-template-page__content">${t.contentHtml}</div>
|
|
15
15
|
</section>
|
|
16
|
-
<script nonce="${
|
|
16
|
+
<script nonce="${S(a)}">
|
|
17
17
|
(() => {
|
|
18
18
|
'use strict'
|
|
19
19
|
const config = ${s}
|
|
@@ -89,6 +89,7 @@ ${e.decorationsHtml}
|
|
|
89
89
|
if (message.command.scroll)
|
|
90
90
|
firstMatch?.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'center' })
|
|
91
91
|
})
|
|
92
|
+
const measureLayout = ${e.measureContractPageLayout.toString()}
|
|
92
93
|
const measure = () => {
|
|
93
94
|
if (!page)
|
|
94
95
|
throw new Error('合同打印页节点不存在')
|
|
@@ -133,10 +134,7 @@ ${e.decorationsHtml}
|
|
|
133
134
|
})
|
|
134
135
|
: []
|
|
135
136
|
const metrics = {
|
|
136
|
-
|
|
137
|
-
pageHeight: page.offsetHeight,
|
|
138
|
-
contentHeight: page.scrollHeight,
|
|
139
|
-
overflowHeight: Math.max(0, page.scrollHeight - config.pageHeight),
|
|
137
|
+
...measureLayout(page, { width: ${t.width}, height: config.pageHeight }),
|
|
140
138
|
paddingTop: Number.parseFloat(pageStyle.paddingTop),
|
|
141
139
|
paddingBottom: Number.parseFloat(pageStyle.paddingBottom),
|
|
142
140
|
paddingLeft: Number.parseFloat(pageStyle.paddingLeft),
|
|
@@ -176,13 +174,45 @@ ${e.decorationsHtml}
|
|
|
176
174
|
throw new Error('合同排版度量不一致:' + key + ' expected=' + expected + ' actual=' + actual + ' tolerance=' + config.tolerance)
|
|
177
175
|
}
|
|
178
176
|
}
|
|
179
|
-
const
|
|
180
|
-
promise,
|
|
181
|
-
new Promise((_, reject) => setTimeout(() => reject(new Error('合同排版度量校验超时(' + config.timeoutMs + 'ms)')), config.timeoutMs)),
|
|
182
|
-
])
|
|
183
|
-
const start = async () => {
|
|
177
|
+
const waitForAssets = async () => {
|
|
184
178
|
if (document.fonts)
|
|
185
|
-
await
|
|
179
|
+
await document.fonts.ready
|
|
180
|
+
await Promise.all(Array.from(document.images).map(async image => {
|
|
181
|
+
image.loading = 'eager'
|
|
182
|
+
if (!image.complete)
|
|
183
|
+
await new Promise((resolve, reject) => {
|
|
184
|
+
image.addEventListener('load', resolve, { once: true })
|
|
185
|
+
image.addEventListener('error', () => reject(new Error(config.imageErrorMessage)), { once: true })
|
|
186
|
+
})
|
|
187
|
+
if (!image.naturalWidth)
|
|
188
|
+
throw new Error(config.imageErrorMessage)
|
|
189
|
+
if (image.decode)
|
|
190
|
+
await image.decode()
|
|
191
|
+
}))
|
|
192
|
+
}
|
|
193
|
+
// 字体与图片共用同一个截止时间,两段等待累计不超过 config.timeoutMs;父侧超时必须大于它。
|
|
194
|
+
const waitWithSharedDeadline = (promise) => {
|
|
195
|
+
let timer
|
|
196
|
+
const deadline = new Promise((_, reject) => {
|
|
197
|
+
timer = setTimeout(() => reject(new Error('合同排版度量校验超时(' + config.timeoutMs + 'ms)')), config.timeoutMs)
|
|
198
|
+
})
|
|
199
|
+
return Promise.race([promise, deadline]).finally(() => clearTimeout(timer))
|
|
200
|
+
}
|
|
201
|
+
// 布局度量异常必须经 error 消息回到父页,不能在 ResizeObserver 或 fonts 事件里变成未捕获异常。
|
|
202
|
+
const reportMetrics = () => {
|
|
203
|
+
if (!ready)
|
|
204
|
+
return
|
|
205
|
+
try {
|
|
206
|
+
post('metrics', { metrics: measure() })
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
ready = false
|
|
210
|
+
observer?.disconnect()
|
|
211
|
+
post('error', { error: error instanceof Error ? error.message : String(error) })
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
const start = async () => {
|
|
215
|
+
await waitWithSharedDeadline(waitForAssets())
|
|
186
216
|
const metrics = measure()
|
|
187
217
|
try {
|
|
188
218
|
assertMetrics(metrics)
|
|
@@ -193,19 +223,11 @@ ${e.decorationsHtml}
|
|
|
193
223
|
}
|
|
194
224
|
ready = true
|
|
195
225
|
post('ready', { metrics })
|
|
196
|
-
observer = new ResizeObserver(
|
|
197
|
-
if (!ready)
|
|
198
|
-
return
|
|
199
|
-
try {
|
|
200
|
-
post('metrics', { metrics: measure() })
|
|
201
|
-
}
|
|
202
|
-
catch (error) {
|
|
203
|
-
ready = false
|
|
204
|
-
observer?.disconnect()
|
|
205
|
-
post('error', { error: error instanceof Error ? error.message : String(error) })
|
|
206
|
-
}
|
|
207
|
-
})
|
|
226
|
+
observer = new ResizeObserver(reportMetrics)
|
|
208
227
|
observer.observe(page)
|
|
228
|
+
const content = page.querySelector('.gd-contract-template-page__content')
|
|
229
|
+
if (content) observer.observe(content)
|
|
230
|
+
document.fonts?.addEventListener('loadingdone', reportMetrics)
|
|
209
231
|
}
|
|
210
232
|
start().catch((error) => {
|
|
211
233
|
post('error', { error: error instanceof Error ? error.message : String(error) })
|
|
@@ -214,4 +236,4 @@ ${e.decorationsHtml}
|
|
|
214
236
|
})()
|
|
215
237
|
<\/script>
|
|
216
238
|
</body>
|
|
217
|
-
</html>`}function
|
|
239
|
+
</html>`}function x(e){return e.replace(/<\/style/gi,`<\\/style`)}function S(e){return String(e).replace(/&/g,`&`).replace(/"/g,`"`).replace(/</g,`<`).replace(/>/g,`>`)}function C(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.namespace===`gd-contract-print`&&typeof t.messageId==`string`&&/^gd-contract-print-[A-Za-z0-9-]{8,160}$/.test(t.messageId)&&(t.type===`ready`||t.type===`metrics`||t.type===`error`||t.type===`interaction`)?t.type===`error`?typeof t.error==`string`&&t.error.length<=2e3:t.type===`interaction`?w(t.interaction):T(t.metrics):!1}function w(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.key!=`string`||!/^[A-Za-z][A-Za-z0-9_]{1,63}$/.test(t.key)||typeof t.pageId!=`string`||!t.pageId||t.pageId.length>256?!1:t.kind===`select`?!0:t.kind===`input`&&(t.value===void 0||typeof t.value==`string`&&t.value.length<=1e6||typeof t.value==`number`&&Number.isFinite(t.value)||typeof t.value==`boolean`)}function T(e){if(!e||typeof e!=`object`)return!1;let t=e;if(![`pageWidth`,`pageHeight`,`contentHeight`,`overflowHeight`,`overflowWidth`,`paddingTop`,`paddingBottom`,`paddingLeft`,`paddingRight`,`fontSize`,`lineHeight`,`textWidth`,`sansTextWidth`,`variableRowHeight`].every(e=>{let n=t[e];return typeof n==`number`&&Number.isFinite(n)&&n>=0&&n<=1e7})||!(t.pageWidth>0)||!(t.pageHeight>0)||!(t.fontSize>0)||!(t.lineHeight>0)||typeof t.fontFamily!=`string`||t.fontFamily.length>1e3||!t.probeOffsets||typeof t.probeOffsets!=`object`)return!1;let n=Object.values(t.probeOffsets);return n.length>1e3||!n.every(e=>Number.isFinite(e)&&e>=-1e7&&e<=1e7)||!Array.isArray(t.blocks)||t.blocks.length>1e4?!1:t.blocks.every(e=>!!e&&typeof e.text==`string`&&e.text.length<=1e3&&Number.isFinite(e.top)&&Math.abs(e.top)<=1e7&&Number.isFinite(e.lineCount)&&e.lineCount>=0&&e.lineCount<=1e6)}exports.CONTRACT_PRINT_FONT_UNCONFIGURED_MESSAGE=m,exports.CONTRACT_PRINT_FRAME_TIMEOUT_MS=a,exports.CONTRACT_PRINT_IMAGE_ERROR_MESSAGE=h,exports.CONTRACT_PRINT_MESSAGE_NAMESPACE=n,exports.buildContractPrintDocument=b,exports.configureContractPrintFonts=_,exports.isContractPrintFrameMessage=C,exports.resolveContractFontBaseUrl=v,exports.subscribeContractPrintFrameMessages=c,exports.toAbsoluteContractFontBaseUrl=y,exports.unsubscribeContractPrintFrameMessages=l;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../constants.cjs`),t=require(`./html.cjs`),n=require(`./template-variable-render.cjs`);var r={top:54,right:64,bottom:54,left:64},i={sparse:{columns:2,rows:3},normal:{columns:3,rows:4},dense:{columns:4,rows:6}},a={header:{enabled:!1,text:``,textAlign:`center`,slots:{left:``,center:``,right:``},showOnFirstPage:!0,fontFamily:e.DEFAULT_CONTRACT_FONT_FAMILY,fontSize:12,fontWeight:400,color:`#565b66`,offset:24,divider:{enabled:!1,color:`#d8dadd`}},footer:{enabled:!1,text:`第 {pageNumber} / {totalPages} 页`,textAlign:`center`,slots:{left:``,center:`第 {pageNumber} / {totalPages} 页`,right:``},showOnFirstPage:!0,fontFamily:e.DEFAULT_CONTRACT_FONT_FAMILY,fontSize:12,fontWeight:400,color:`#565b66`,offset:24,divider:{enabled:!1,color:`#d8dadd`}},watermark:{enabled:!1,text:``,fontSize:36,color:`#7a818b`,opacity:.14,rotation:-30,showOnFirstPage:!0,layout:`single`,density:`normal`},pageNumbering:{countFirstPage:!0}},o=/^#[\da-f]{6}$/i,s=/^[A-Za-z][A-Za-z0-9_]{1,63}$/,c=/\$\{\{[\s\S]*?\}\}|\$\{\{|\$\{[^{}]*\}|\{[A-Za-z][A-Za-z0-9]*\}/g;function l(e){return{header:E(e?.header,a.header),footer:E(e?.footer,a.footer),watermark:D(e?.watermark),pageNumbering:{countFirstPage:e?.pageNumbering?.countFirstPage!==!1}}}function u(e){let t=l();return e===`none`?t:(t.footer=E({...t.footer,enabled:!0,slots:{left:``,center:`第 {pageNumber} / {totalPages} 页`,right:``}},a.footer),(e===`internal-review`||e===`draft`)&&(t.watermark=D({...t.watermark,enabled:!0,text:e===`internal-review`?`内部审阅`:`草稿`,layout:`tiled`,density:`normal`})),t)}function d(e){let t=JSON.stringify(l(e));return[`none`,`page-number`,`internal-review`,`draft`].find(e=>JSON.stringify(u(e))===t)??`custom`}function f(e,t=1){let n=l(e).header;return F(n,t)}function p(e,t=1){let n=l(e).footer;return F(n,t)}function m(e,t=1){let n=l(e).watermark;return n.enabled&&!!n.text.trim()&&(t!==1||n.showOnFirstPage)}function h(e,t,n=!0){let r=Math.max(1,Math.floor(e||1)),i=Math.max(0,Math.floor(t||0));return{pageNumber:n?String(r):r===1?``:String(r-1),totalPages:String(n?i:Math.max(0,i-1))}}function g(e,t=[],n=!1){let r=[],i=[],a=new Map(t.map(e=>[e.key,e])),o=0;c.lastIndex=0;let l=c.exec(e);for(;l;){l.index>o&&r.push({type:`text`,value:e.slice(o,l.index)});let t=l[0];if(t===`{pageNumber}`)r.push({type:`pageNumber`});else if(t===`{totalPages}`)r.push({type:`totalPages`});else if(t.startsWith("${{")&&t.endsWith(`}}`)){let e=t.slice(3,-2),o=e.trim();if(e!==o||!s.test(o))i.push({code:`DECORATION_TOKEN_MALFORMED`,message:`页面装饰变量令牌 ${t} 格式错误`,token:t,offset:l.index}),r.push({type:`text`,value:t});else{let e=a.get(o);n&&!e?i.push({code:`DECORATION_VARIABLE_UNKNOWN`,message:`页面装饰引用了未知变量 ${o}`,token:t,offset:l.index}):e?.type===`image`&&i.push({code:`DECORATION_VARIABLE_IMAGE_UNSUPPORTED`,message:`图片变量 ${o} 不能用于页面装饰`,token:t,offset:l.index}),r.push({type:`variable`,key:o,raw:t})}}else i.push({code:`DECORATION_TOKEN_MALFORMED`,message:`页面装饰令牌 ${t} 格式错误`,token:t,offset:l.index}),r.push({type:`text`,value:t});o=l.index+t.length,l=c.exec(e)}return o<e.length&&r.push({type:`text`,value:e.slice(o)}),{tokens:r,issues:i}}function _(e){let t=l(e),n=new Set;return N(t,e=>{g(e).tokens.forEach(e=>{e.type===`variable`&&n.add(e.key)}),L(e).forEach(e=>n.add(e.key))}),n}function v(e,t){let n=l(e),r=[];return N(n,(e,n)=>{g(e,t,!0).issues.forEach((e,t)=>{r.push({type:`variable`,id:`${n}-${e.offset}-${t}`,variableKey:e.code===`DECORATION_VARIABLE_UNKNOWN`?e.token.slice(3,-2).trim():void 0,code:e.code,message:`${P(n)}:${e.message}`})})}),r}function y(e){if(!e.code?.startsWith(`DECORATION_`))return;let t=e.id.replace(/-\d+-\d+$/,``);if(/^(?:header|footer)\.slots\.(?:left|center|right)$/.test(t)||t===`watermark.text`)return t}function b(e,t,n){let r=l(e),i=e=>R(e,t,n);return r.header.slots=I(r.header.slots,i),r.footer.slots=I(r.footer.slots,i),r.watermark.text=i(r.watermark.text),r.header=E(r.header,a.header),r.footer=E(r.footer,a.footer),r}function x(e,t,n,r,i,a){if(e.type===`text`)return e.value;let o=h(r,i,a);if(e.type===`pageNumber`)return o.pageNumber;if(e.type===`totalPages`)return o.totalPages;let s=t.find(t=>t.key===e.key);return!s||s.type===`image`?e.raw:M(s,n?.[e.key])}function S(e){return i[e]??i.normal}function C(e){let t=E(e,a.header);return Math.max(80,t.offset+Math.ceil(t.fontSize*1.5)+20)}function w(e,t=1){return[`gd-contract-template-page`,f(e,t)?`has-contract-header`:``,p(e,t)?`has-contract-footer`:``].filter(Boolean).join(` `)}function T(e,t,n,r=[],i){let a=l(e),o=[];return m(a,t)&&o.push(A(a.watermark,r,i,t,n,a.pageNumbering.countFirstPage)),f(a,t)&&o.push(k(`header`,a.header,r,i,t,n,a.pageNumbering.countFirstPage)),p(a,t)&&o.push(k(`footer`,a.footer,r,i,t,n,a.pageNumbering.countFirstPage)),o.join(``)}function E(e,t){let n=z(e?.textAlign,t.textAlign),r=O(e,t,n),i=r[n].trim()?n:r.center.trim()?`center`:r.left.trim()?`left`:r.right.trim()?`right`:n;return{enabled:!!e?.enabled,text:r[i],textAlign:i,slots:r,showOnFirstPage:e?.showOnFirstPage!==!1,fontFamily:H(e?.fontFamily,t.fontFamily),fontSize:U(e?.fontSize,10,24,t.fontSize),fontWeight:e?.fontWeight===600?600:400,color:V(e?.color,t.color),offset:U(e?.offset,12,48,t.offset),divider:{enabled:!!e?.divider?.enabled,color:V(e?.divider?.color,t.divider.color)}}}function D(e){let t=a.watermark;return{enabled:!!e?.enabled,text:B(e?.text,t.text),fontSize:U(e?.fontSize,12,72,t.fontSize),color:V(e?.color,t.color),opacity:U(e?.opacity,.04,.5,t.opacity),rotation:U(e?.rotation,-90,90,t.rotation),showOnFirstPage:e?.showOnFirstPage!==!1,layout:e?.layout===`tiled`?`tiled`:`single`,density:e?.density===`sparse`||e?.density===`dense`?e.density:`normal`}}function O(e,t,n){if(e?.slots&&typeof e.slots==`object`)return{left:B(e.slots.left,``),center:B(e.slots.center,``),right:B(e.slots.right,``)};let r={left:``,center:``,right:``};return r[n]=B(e?.text,t.text),r}function k(e,n,r,i,a,o,s){let c=C(n),l=n.divider.enabled?`;border-${e===`header`?`bottom`:`top`}:1px solid ${t.escapeHtmlAttribute(n.divider.color)}`:``,u=`color:${t.escapeHtmlAttribute(n.color)};font-family:${t.escapeHtmlAttribute(n.fontFamily)};font-size:${n.fontSize}px;font-weight:${n.fontWeight};${e===`header`?`top`:`bottom`}:${n.offset}px${l}`,d=[`left`,`center`,`right`].map(e=>`<div class="gd-contract-template-page__decoration-slot is-${e}">${j(n.slots[e],r,i,a,o,s)}</div>`).join(``);return`<div class="gd-contract-template-page__${e}" data-decoration-offset="${n.offset}" data-decoration-font-size="${n.fontSize}" data-decoration-safe-padding="${c}" style="${u}">${d}</div>`}function A(e,n,r,i,a,o){let s=S(e.density),c=e.layout===`tiled`?s.columns*s.rows:1,l=j(e.text,n,r,i,a,o),u=Array.from({length:c},()=>`<div class="gd-contract-template-page__watermark-item" style="color:${t.escapeHtmlAttribute(e.color)};font-size:${e.fontSize}px;opacity:${e.opacity};transform:rotate(${e.rotation}deg)">${l}</div>`).join(``),d=e.layout===`tiled`?`--gd-watermark-columns:${s.columns};--gd-watermark-rows:${s.rows}`:``;return`<div class="gd-contract-template-page__watermark is-${e.layout} density-${e.density}" data-watermark-layout="${e.layout}" data-watermark-density="${e.density}" aria-hidden="true" style="${d}">${u}</div>`}function j(e,n,r,i,a,o){let s=h(i,a,o),c=new Map(n.map(e=>[e.key,e]));return g(e).tokens.map(e=>{if(e.type===`text`)return t.escapeHtmlText(e.value);if(e.type===`pageNumber`)return t.escapeHtmlText(s.pageNumber);if(e.type===`totalPages`)return t.escapeHtmlText(s.totalPages);let n=c.get(e.key);return r!==void 0&&n&&n.type!==`image`?t.escapeHtmlText(M(n,r[e.key])):`<span class="gd-contract-template-page__variable" data-template-variable="true" data-key="${t.escapeHtmlAttribute(e.key)}" data-label="${t.escapeHtmlAttribute(n?.label??e.key)}" data-variable-type="${t.escapeHtmlAttribute(n?.type??`text`)}">\${{${t.escapeHtmlText(e.key)}}}</span>`}).join(``)}function M(e,t){let r=t==null?e.defaultValue??``:String(t);return n.resolveTemplateVariablePresentation({type:e.type,defaultValue:r,placeholder:e.placeholder,format:e.format,precision:e.precision,useGrouping:e.useGrouping,checkedText:e.checkedText,uncheckedText:e.uncheckedText,style:e.style}).displayText||e.placeholder||e.label||e.key}function N(e,t){[`left`,`center`,`right`].forEach(n=>{t(e.header.slots[n],`header.slots.${n}`),t(e.footer.slots[n],`footer.slots.${n}`)}),t(e.watermark.text,`watermark.text`)}function P(e){return{"header.slots.left":`页眉左栏`,"header.slots.center":`页眉中栏`,"header.slots.right":`页眉右栏`,"footer.slots.left":`页脚左栏`,"footer.slots.center":`页脚中栏`,"footer.slots.right":`页脚右栏`,"watermark.text":`水印内容`}[e]??`页面装饰`}function F(e,t){return e.enabled&&Object.values(e.slots).some(e=>e.trim())&&(t!==1||e.showOnFirstPage)}function I(e,t){return{left:t(e.left),center:t(e.center),right:t(e.right)}}function L(e){let t=[],n=/\$\{\{([\s\S]*?)\}\}|\$\{\{\s*([A-Za-z][A-Za-z0-9_]{1,63})(?![A-Za-z0-9_])/g,r=n.exec(e);for(;r;){let i=(r[1]??r[2]??``).trim();i&&t.push({key:i,raw:r[0],start:r.index,end:r.index+r[0].length}),r=n.exec(e)}return t}function R(e,t,n){let r=L(e);if(!r.length)return e;let i=``,a=0;return r.forEach(r=>{i+=e.slice(a,r.start),i+=r.key===t?n?`\${{${n}}}`:``:r.raw,a=r.end}),i+e.slice(a)}function z(e,t){return e===`left`||e===`right`||e===`center`?e:t}function B(e,t){return(typeof e==`string`?e:t).slice(0,240)}function V(e,t){return typeof e==`string`&&o.test(e)?e:t}function H(e,t){return typeof e==`string`&&e.replace(/[;{}<>]/g,``).trim().slice(0,120)||t}function U(e,t,n,r){let i=Number(e);return Number.isFinite(i)?Math.min(n,Math.max(t,i)):r}exports.CONTRACT_PAGE_BASE_PADDING=r,exports.buildPageDecorationClassNames=w,exports.buildPageDecorationsHtml=T,exports.collectPageDecorationVariableKeys=_,exports.createPageDecorationPreset=u,exports.getPageDecorationSafePadding=C,exports.getWatermarkDensityGrid=S,exports.hasEnabledPageFooter=p,exports.hasEnabledPageHeader=f,exports.hasEnabledPageWatermark=m,exports.normalizePageDecorations=l,exports.parsePageDecorationText=g,exports.resolvePageDecorationPreset=d,exports.resolvePageDecorationTokenText=x,exports.resolvePageDecorationValidationPath=y,exports.rewritePageDecorationVariableTokens=b,exports.validatePageDecorations=v;
|
|
1
|
+
const e=require(`../../../../contract-print-css/index.cjs`),t=require(`../constants.cjs`),n=require(`./html.cjs`),r=require(`./template-variable-render.cjs`);var i={sparse:{columns:2,rows:3},normal:{columns:3,rows:4},dense:{columns:4,rows:6}},a={header:{enabled:!1,text:``,textAlign:`center`,slots:{left:``,center:``,right:``},showOnFirstPage:!0,fontFamily:t.DEFAULT_CONTRACT_FONT_FAMILY,fontSize:12,fontWeight:400,color:`#565b66`,offset:24,divider:{enabled:!1,color:`#d8dadd`}},footer:{enabled:!1,text:`第 {pageNumber} / {totalPages} 页`,textAlign:`center`,slots:{left:``,center:`第 {pageNumber} / {totalPages} 页`,right:``},showOnFirstPage:!0,fontFamily:t.DEFAULT_CONTRACT_FONT_FAMILY,fontSize:12,fontWeight:400,color:`#565b66`,offset:24,divider:{enabled:!1,color:`#d8dadd`}},watermark:{enabled:!1,text:``,fontSize:36,color:`#7a818b`,opacity:.14,rotation:-30,showOnFirstPage:!0,layout:`single`,density:`normal`},pageNumbering:{countFirstPage:!0}},o=/^#[\da-f]{6}$/i,s=/^[A-Za-z][A-Za-z0-9_]{1,63}$/,c=/\$\{\{[\s\S]*?\}\}|\$\{\{|\$\{[^{}]*\}|\{[A-Za-z][A-Za-z0-9]*\}/g;function l(e){return{header:T(e?.header,a.header),footer:T(e?.footer,a.footer),watermark:E(e?.watermark),pageNumbering:{countFirstPage:e?.pageNumbering?.countFirstPage!==!1}}}function u(e){let t=l();return e===`none`?t:(t.footer=T({...t.footer,enabled:!0,slots:{left:``,center:`第 {pageNumber} / {totalPages} 页`,right:``}},a.footer),(e===`internal-review`||e===`draft`)&&(t.watermark=E({...t.watermark,enabled:!0,text:e===`internal-review`?`内部审阅`:`草稿`,layout:`tiled`,density:`normal`})),t)}function d(e){let t=JSON.stringify(l(e));return[`none`,`page-number`,`internal-review`,`draft`].find(e=>JSON.stringify(u(e))===t)??`custom`}function f(e,t=1){let n=l(e).header;return P(n,t)}function p(e,t=1){let n=l(e).footer;return P(n,t)}function m(e,t=1){let n=l(e).watermark;return n.enabled&&!!n.text.trim()&&(t!==1||n.showOnFirstPage)}function h(e,t,n=!0){let r=Math.max(1,Math.floor(e||1)),i=Math.max(0,Math.floor(t||0));return{pageNumber:n?String(r):r===1?``:String(r-1),totalPages:String(n?i:Math.max(0,i-1))}}function g(e,t=[],n=!1){let r=[],i=[],a=new Map(t.map(e=>[e.key,e])),o=0;c.lastIndex=0;let l=c.exec(e);for(;l;){l.index>o&&r.push({type:`text`,value:e.slice(o,l.index)});let t=l[0];if(t===`{pageNumber}`)r.push({type:`pageNumber`});else if(t===`{totalPages}`)r.push({type:`totalPages`});else if(t.startsWith("${{")&&t.endsWith(`}}`)){let e=t.slice(3,-2),o=e.trim();if(e!==o||!s.test(o))i.push({code:`DECORATION_TOKEN_MALFORMED`,message:`页面装饰变量令牌 ${t} 格式错误`,token:t,offset:l.index}),r.push({type:`text`,value:t});else{let e=a.get(o);n&&!e?i.push({code:`DECORATION_VARIABLE_UNKNOWN`,message:`页面装饰引用了未知变量 ${o}`,token:t,offset:l.index}):e?.type===`image`&&i.push({code:`DECORATION_VARIABLE_IMAGE_UNSUPPORTED`,message:`图片变量 ${o} 不能用于页面装饰`,token:t,offset:l.index}),r.push({type:`variable`,key:o,raw:t})}}else i.push({code:`DECORATION_TOKEN_MALFORMED`,message:`页面装饰令牌 ${t} 格式错误`,token:t,offset:l.index}),r.push({type:`text`,value:t});o=l.index+t.length,l=c.exec(e)}return o<e.length&&r.push({type:`text`,value:e.slice(o)}),{tokens:r,issues:i}}function _(e){let t=l(e),n=new Set;return M(t,e=>{g(e).tokens.forEach(e=>{e.type===`variable`&&n.add(e.key)}),I(e).forEach(e=>n.add(e.key))}),n}function v(e,t){let n=l(e),r=[];return M(n,(e,n)=>{g(e,t,!0).issues.forEach((e,t)=>{r.push({type:`variable`,id:`${n}-${e.offset}-${t}`,variableKey:e.code===`DECORATION_VARIABLE_UNKNOWN`?e.token.slice(3,-2).trim():void 0,code:e.code,message:`${N(n)}:${e.message}`})})}),r}function y(e){if(!e.code?.startsWith(`DECORATION_`))return;let t=e.id.replace(/-\d+-\d+$/,``);if(/^(?:header|footer)\.slots\.(?:left|center|right)$/.test(t)||t===`watermark.text`)return t}function b(e,t,n){let r=l(e),i=e=>L(e,t,n);return r.header.slots=F(r.header.slots,i),r.footer.slots=F(r.footer.slots,i),r.watermark.text=i(r.watermark.text),r.header=T(r.header,a.header),r.footer=T(r.footer,a.footer),r}function x(e,t,n,r,i,a){if(e.type===`text`)return e.value;let o=h(r,i,a);if(e.type===`pageNumber`)return o.pageNumber;if(e.type===`totalPages`)return o.totalPages;let s=t.find(t=>t.key===e.key);return!s||s.type===`image`?e.raw:j(s,n?.[e.key])}function S(e){return i[e]??i.normal}function C(e,t=1){return[`gd-contract-template-page`,f(e,t)?`has-contract-header`:``,p(e,t)?`has-contract-footer`:``].filter(Boolean).join(` `)}function w(e,t,n,r=[],i){let a=l(e),o=[];return m(a,t)&&o.push(k(a.watermark,r,i,t,n,a.pageNumbering.countFirstPage)),f(a,t)&&o.push(O(`header`,a.header,r,i,t,n,a.pageNumbering.countFirstPage)),p(a,t)&&o.push(O(`footer`,a.footer,r,i,t,n,a.pageNumbering.countFirstPage)),o.join(``)}function T(e,t){let n=R(e?.textAlign,t.textAlign),r=D(e,t,n),i=r[n].trim()?n:r.center.trim()?`center`:r.left.trim()?`left`:r.right.trim()?`right`:n;return{enabled:!!e?.enabled,text:r[i],textAlign:i,slots:r,showOnFirstPage:e?.showOnFirstPage!==!1,fontFamily:V(e?.fontFamily,t.fontFamily),fontSize:H(e?.fontSize,10,24,t.fontSize),fontWeight:e?.fontWeight===600?600:400,color:B(e?.color,t.color),offset:H(e?.offset,12,48,t.offset),divider:{enabled:!!e?.divider?.enabled,color:B(e?.divider?.color,t.divider.color)}}}function E(e){let t=a.watermark;return{enabled:!!e?.enabled,text:z(e?.text,t.text),fontSize:H(e?.fontSize,12,72,t.fontSize),color:B(e?.color,t.color),opacity:H(e?.opacity,.04,.5,t.opacity),rotation:H(e?.rotation,-90,90,t.rotation),showOnFirstPage:e?.showOnFirstPage!==!1,layout:e?.layout===`tiled`?`tiled`:`single`,density:e?.density===`sparse`||e?.density===`dense`?e.density:`normal`}}function D(e,t,n){if(e?.slots&&typeof e.slots==`object`)return{left:z(e.slots.left,``),center:z(e.slots.center,``),right:z(e.slots.right,``)};let r={left:``,center:``,right:``};return r[n]=z(e?.text,t.text),r}function O(t,r,i,a,o,s,c){let l=e.resolveContractDecorationSafePadding(r),u=r.divider.enabled?`;border-${t===`header`?`bottom`:`top`}:1px solid ${n.escapeHtmlAttribute(r.divider.color)}`:``,d=`color:${n.escapeHtmlAttribute(r.color)};font-family:${n.escapeHtmlAttribute(r.fontFamily)};font-size:${r.fontSize}px;font-weight:${r.fontWeight};${t===`header`?`top`:`bottom`}:${r.offset}px${u}`,f=[`left`,`center`,`right`].map(e=>`<div class="gd-contract-template-page__decoration-slot is-${e}">${A(r.slots[e],i,a,o,s,c)}</div>`).join(``);return`<div class="gd-contract-template-page__${t}" data-decoration-offset="${r.offset}" data-decoration-font-size="${r.fontSize}" data-decoration-safe-padding="${l}" style="${d}">${f}</div>`}function k(e,t,r,i,a,o){let s=S(e.density),c=e.layout===`tiled`?s.columns*s.rows:1,l=A(e.text,t,r,i,a,o),u=Array.from({length:c},()=>`<div class="gd-contract-template-page__watermark-item" style="color:${n.escapeHtmlAttribute(e.color)};font-size:${e.fontSize}px;opacity:${e.opacity};transform:rotate(${e.rotation}deg)">${l}</div>`).join(``),d=e.layout===`tiled`?`--gd-watermark-columns:${s.columns};--gd-watermark-rows:${s.rows}`:``;return`<div class="gd-contract-template-page__watermark is-${e.layout} density-${e.density}" data-watermark-layout="${e.layout}" data-watermark-density="${e.density}" aria-hidden="true" style="${d}">${u}</div>`}function A(e,t,r,i,a,o){let s=h(i,a,o),c=new Map(t.map(e=>[e.key,e]));return g(e).tokens.map(e=>{if(e.type===`text`)return n.escapeHtmlText(e.value);if(e.type===`pageNumber`)return n.escapeHtmlText(s.pageNumber);if(e.type===`totalPages`)return n.escapeHtmlText(s.totalPages);let t=c.get(e.key);return r!==void 0&&t&&t.type!==`image`?n.escapeHtmlText(j(t,r[e.key])):`<span class="gd-contract-template-page__variable" data-template-variable="true" data-key="${n.escapeHtmlAttribute(e.key)}" data-label="${n.escapeHtmlAttribute(t?.label??e.key)}" data-variable-type="${n.escapeHtmlAttribute(t?.type??`text`)}">\${{${n.escapeHtmlText(e.key)}}}</span>`}).join(``)}function j(e,t){let n=t==null?e.defaultValue??``:String(t);return r.resolveTemplateVariablePresentation({type:e.type,defaultValue:n,placeholder:e.placeholder,format:e.format,precision:e.precision,useGrouping:e.useGrouping,checkedText:e.checkedText,uncheckedText:e.uncheckedText,style:e.style}).displayText||e.placeholder||e.label||e.key}function M(e,t){[`left`,`center`,`right`].forEach(n=>{t(e.header.slots[n],`header.slots.${n}`),t(e.footer.slots[n],`footer.slots.${n}`)}),t(e.watermark.text,`watermark.text`)}function N(e){return{"header.slots.left":`页眉左栏`,"header.slots.center":`页眉中栏`,"header.slots.right":`页眉右栏`,"footer.slots.left":`页脚左栏`,"footer.slots.center":`页脚中栏`,"footer.slots.right":`页脚右栏`,"watermark.text":`水印内容`}[e]??`页面装饰`}function P(t,n){return e.isContractPageDecorationVisible(t,n)}function F(e,t){return{left:t(e.left),center:t(e.center),right:t(e.right)}}function I(e){let t=[],n=/\$\{\{([\s\S]*?)\}\}|\$\{\{\s*([A-Za-z][A-Za-z0-9_]{1,63})(?![A-Za-z0-9_])/g,r=n.exec(e);for(;r;){let i=(r[1]??r[2]??``).trim();i&&t.push({key:i,raw:r[0],start:r.index,end:r.index+r[0].length}),r=n.exec(e)}return t}function L(e,t,n){let r=I(e);if(!r.length)return e;let i=``,a=0;return r.forEach(r=>{i+=e.slice(a,r.start),i+=r.key===t?n?`\${{${n}}}`:``:r.raw,a=r.end}),i+e.slice(a)}function R(e,t){return e===`left`||e===`right`||e===`center`?e:t}function z(e,t){return(typeof e==`string`?e:t).slice(0,240)}function B(e,t){return typeof e==`string`&&o.test(e)?e:t}function V(e,t){return typeof e==`string`&&e.replace(/[;{}<>]/g,``).trim().slice(0,120)||t}function H(e,t,n,r){let i=Number(e);return Number.isFinite(i)?Math.min(n,Math.max(t,i)):r}exports.buildPageDecorationClassNames=C,exports.buildPageDecorationsHtml=w,exports.collectPageDecorationVariableKeys=_,exports.createPageDecorationPreset=u,exports.getWatermarkDensityGrid=S,exports.hasEnabledPageFooter=p,exports.hasEnabledPageHeader=f,exports.hasEnabledPageWatermark=m,exports.normalizePageDecorations=l,exports.parsePageDecorationText=g,exports.resolvePageDecorationPreset=d,exports.resolvePageDecorationTokenText=x,exports.resolvePageDecorationValidationPath=y,exports.rewritePageDecorationVariableTokens=b,exports.validatePageDecorations=v;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const e=require(`./html.cjs`),t=require(`./template-variable-render.cjs`),n=require(`./page-decorations.cjs`),r=require(`../types.cjs`),i=require(`./advanced-controls.cjs`),a=require(`../composables/use-template-designer.cjs`),o=require(`./image-url.cjs`);function s(e){let t=Array.isArray(e?.variables)?e.variables:[],n=t.map(e=>c(e)),r={};return t.forEach(e=>{let t=typeof e?.key==`string`?e.key:``;if(t){if(e.type===`checkbox`){r[t]=!1;return}if(e.type===`number`){let n=typeof e.defaultValue==`string`?e.defaultValue.trim().length>0:e.defaultValue!==void 0,i=Number(e.defaultValue);r[t]=n&&Number.isFinite(i)?i:``;return}r[t]=e.defaultValue??``}}),{values:r,variables:n}}function c(e){return JSON.parse(JSON.stringify(e))}var l=new Set([`action`,`formaction`,`href`,`src`,`xlink:href`]),u=/<[^>]+data-template-variable=["']true["'][^>]*>/gi,d=100,f=6e3,p=6,m=/^data:image\/(?:png|jpe?g|webp|gif);base64,[A-Za-z0-9+/=]+$/i;function h(e){let t={};return(Array.isArray(e?.variables)?e.variables:[]).forEach(e=>{e?.key&&(t[e.key]=
|
|
2
|
-
`)}function
|
|
3
|
-
`)}return e.replaceTemplateVariableSpans(a,(t,a)=>{let o=e.getHtmlAttribute(a,`data-key`);return o?
|
|
4
|
-
`:``;return`<textarea class="${m}" ${p} ${f} placeholder="${e.escapeHtmlAttribute(n.placeholder||``)}">${t}${e.escapeHtmlText(l)}</textarea>`}return`<input class="${m}" ${p} type="text" ${f} value="${e.escapeHtmlAttribute(l)}" placeholder="${e.escapeHtmlAttribute(n?.placeholder||``)}">`}function
|
|
5
|
-
`,tab:` `})[t.toLowerCase()]??``).trim().replace(/[\u0000-\u0020\u007F]+/g,``);return/^(?:javascript|vbscript|data:text\/html)/i.test(t)}function
|
|
1
|
+
const e=require(`./html.cjs`),t=require(`./template-variable-render.cjs`),n=require(`./page-decorations.cjs`),r=require(`../types.cjs`),i=require(`./advanced-controls.cjs`),a=require(`../composables/use-template-designer.cjs`),o=require(`./image-url.cjs`);function s(e){let t=Array.isArray(e?.variables)?e.variables:[],n=t.map(e=>c(e)),r={};return t.forEach(e=>{let t=typeof e?.key==`string`?e.key:``;if(t){if(e.type===`checkbox`){r[t]=!1;return}if(e.type===`number`){let n=typeof e.defaultValue==`string`?e.defaultValue.trim().length>0:e.defaultValue!==void 0,i=Number(e.defaultValue);r[t]=n&&Number.isFinite(i)?i:``;return}r[t]=e.defaultValue??``}}),{values:r,variables:n}}function c(e){return JSON.parse(JSON.stringify(e))}var l=new Set([`action`,`formaction`,`href`,`src`,`xlink:href`]),u=/<[^>]+data-template-variable=["']true["'][^>]*>/gi,d=100,f=6e3,p=6,m=/^data:image\/(?:png|jpe?g|webp|gif);base64,[A-Za-z0-9+/=]+$/i;function h(e){let t={};return(Array.isArray(e?.variables)?e.variables:[]).forEach(e=>{e?.key&&(t[e.key]=j(e))}),t}function g(e,t){return{...h(e),...t??{}}}function _(e,t,n){let a={...t};return(Array.isArray(e?.variables)?e.variables:[]).forEach(e=>{if(!e?.key||!r.isContractTemplateFieldType(e.type??`text`))return;let t=e.componentKey||e.type||``,o=t?n?.[t]:void 0;if(o?.toDisplayText)try{a[e.key]=o.toDisplayText(a[e.key],{variable:e,config:i.normalizeContractTemplateJsonObject(e.componentConfig)})}catch{}}),a}function v(e,t){let n=x(e);if(!e)return n;let r=Array.isArray(e.variables)?e.variables:[],i=new Set(r.map(e=>e?.key).filter(Boolean));return Object.keys(t).forEach(e=>{i.has(e)||n.push({type:`variable`,id:e,variableKey:e,message:`提交值 ${e} 不属于模板变量`,code:`VARIABLE_TYPE_INVALID`})}),r.forEach(e=>{if(!e?.key)return;let r=G(e,t[e.key]),i=e.label||e.key;if(e.required&&w(r)){n.push({type:`variable`,id:e.id,variableKey:e.key,message:`请填写${i}`,code:`VARIABLE_REQUIRED`});return}if(w(r))return;let a=e.type??`text`;a===`number`&&!K(r,e.precision,e.format)&&n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${i} 不是合法数字或超出精度`,code:`VARIABLE_TYPE_INVALID`}),a===`checkbox`&&!J(r)&&n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${i} 不是合法勾选值`,code:`VARIABLE_TYPE_INVALID`}),a===`date`&&!q(r)&&n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${i} 不是合法日期`,code:`VARIABLE_TYPE_INVALID`}),a===`image`&&!Y(String(r).trim())&&n.push({type:`security`,id:e.id,variableKey:e.key,message:`${i} 必须使用安全的图片 data URL`,code:`UNSAFE_IMAGE_URL`}),n.push(...y(e,r)),X(a)&&(Z(r,a!==`radio`&&!!e.multiple)?P(e)&&!F(e,r)&&n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${i} 不在可选项中`,code:`VARIABLE_TYPE_INVALID`}):n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${i} 不是合法选择值`,code:`VARIABLE_TYPE_INVALID`}))}),n}function y(e,t){if((e.type??`text`)!==`text`)return[];let n=G(e,t);if(w(n)||!Q(e,String(n)))return[];let r=e.label||e.key;return[{type:`variable`,id:e.id,variableKey:e.key,message:e.multiline?`${r} 内容超出正文预留的${e.rows??3}行,请缩短内容或调整模板行数`:`${r} 内容超出变量范围`,code:`VARIABLE_OVERFLOW`}]}function b(e,t,n){return v(e,t)}function x(e){if(!e)return[{type:`page`,id:`template`,message:`缺少可渲染的合同模板`,code:`TEMPLATE_MISSING`}];let t=[],i=Array.isArray(e.pages)?e.pages:[],o=Array.isArray(e.variables)?e.variables:[];(!Array.isArray(e.pages)||i.length===0)&&t.push({type:`page`,id:`template-pages`,message:`模板至少需要一个合法页面`,code:`TEMPLATE_PAGES_INVALID`}),Array.isArray(e.variables)||t.push({type:`variable`,id:`template-variables`,message:`模板变量列表格式无效`,code:`TEMPLATE_VARIABLES_INVALID`}),$(e.pageSize)||t.push({type:`page`,id:`template-page-size`,message:`模板默认页面尺寸必须在 ${d} ~ ${f} CSS px 之间`,code:`TEMPLATE_PAGE_SIZE_INVALID`});let s=new Map;o.forEach((e,n)=>{if(!e||typeof e.key!=`string`||!e.key.trim()){t.push({type:`variable`,id:e?.id||`variable-${n}`,message:`第 ${n+1} 个变量缺少有效 key`,code:`VARIABLE_KEY_MISSING`});return}let i=e.key.trim(),c=o.some(t=>t?.id!==e.id&&typeof t?.key==`string`&&t.key.trim()===i),l=a.validateContractTemplateVariableKey(e.key,o,e.id),u=!a.CONTRACT_TEMPLATE_VARIABLE_KEY_PATTERN.test(i)||a.CONTRACT_TEMPLATE_RESERVED_VARIABLE_KEYS.has(i);l&&(u||!c||e.key!==i)&&t.push({type:`variable`,id:e.id||`variable-${n}`,variableKey:e.key,message:`${e.label||e.key}:${l}`,code:`VARIABLE_KEY_INVALID`}),s.set(i,(s.get(i)??0)+1),r.isContractTemplateFieldType(e.type??`text`)||t.push({type:`variable`,id:e.id,variableKey:e.key,message:`${e.label||e.key} 不是正文填写变量`,code:`VARIABLE_TYPE_UNSUPPORTED`})}),s.forEach((e,n)=>{e>1&&t.push({type:`variable`,id:n,variableKey:n,message:`变量 key ${n} 重复`,code:`VARIABLE_KEY_DUPLICATED`})});let c=new Set;i.forEach((e,n)=>{if(!e||typeof e.id!=`string`||!e.id.trim()||typeof e.contentHtml!=`string`){t.push({type:`page`,id:e?.id||`page-${n}`,pageId:e?.id,message:`第 ${n+1} 页结构无效,已跳过渲染`,code:`PAGE_INVALID`});return}e.pageSize!==void 0&&!$(e.pageSize)&&t.push({type:`page`,id:`${e.id}-page-size`,pageId:e.id,message:`${e.title||`第 ${n+1} 页`}:页面尺寸必须在 ${d} ~ ${f} CSS px 之间`,code:`PAGE_SIZE_INVALID`}),B(e.contentHtml).forEach(e=>c.add(e)),V(e.contentHtml).forEach((r,i)=>{t.push({type:`security`,id:`${e.id}-security-${i}`,pageId:e.id,message:`${e.title||`第 ${n+1} 页`}:${r}`,code:`HTML_UNSAFE`})})}),c.forEach(e=>{s.has(e)||t.push({type:`variable`,id:e,variableKey:e,message:`正文引用的变量 ${e} 缺少配置`,code:`VARIABLE_CONFIG_MISSING`})});let l=n.collectPageDecorationVariableKeys(e.pageDecorations);return s.forEach((e,n)=>{!c.has(n)&&!l.has(n)&&t.push({type:`variable`,id:n,variableKey:n,message:`变量 ${n} 缺少正文节点`,code:`VARIABLE_NODE_MISSING`})}),t.push(...n.validatePageDecorations(e.pageDecorations,o)),t}function S(t,r,i={}){if(!t||!Array.isArray(t.pages))return[];let o=Array.isArray(t.variables)?t.variables:[],s=new Map(o.filter(e=>e?.key).map(e=>[e.key,e])),c=e.hasPositivePageSize(t.pageSize)?t.pageSize:a.DEFAULT_PAGE_SIZE;return t.pages.flatMap(e=>{if(!e||typeof e.id!=`string`||!e.id.trim()||typeof e.contentHtml!=`string`)return[];let l=a.resolvePageSize(e.pageSize,c);return[{id:e.id,title:e.title||`未命名页面`,format:l.format??`Custom`,width:l.width,height:l.height,contentHtml:T(e.contentHtml,s,r,i),...t.pageDecorations?{pageDecorations:n.normalizePageDecorations(t.pageDecorations)}:{},decorationVariables:o,decorationValues:r}]})}function C(t,r,i={}){return S(t,r,i).map((t,r,i)=>{let a=n.buildPageDecorationsHtml(t.pageDecorations,r+1,i.length,t.decorationVariables,t.decorationValues);return`<section class="${n.buildPageDecorationClassNames(t.pageDecorations,r+1)}" data-page-id="${e.escapeHtmlAttribute(t.id)}" data-page-format="${e.escapeHtmlAttribute(t.format)}" data-page-width="${t.width}" data-page-height="${t.height}" style="width:${t.width}px;min-height:${t.height}px">${a}<div class="gd-contract-template-page__content">${t.contentHtml}</div></section>`}).join(`
|
|
2
|
+
`)}function w(e){return e==null||e===``||Array.isArray(e)&&e.length===0}function T(t,n,r,i){if(!t)return t;let a=z(t);if(e.canUseDomHtml()){let e=new DOMParser().parseFromString(a,`text/html`);return e.querySelectorAll(`[data-template-variable]`).forEach(e=>{E(e,n,r,i)}),e.body.innerHTML.replace(/(<textarea\b[^>]*data-contract-render-control="true"[^>]*>)(?=[\r\n])/gi,`$1
|
|
3
|
+
`)}return e.replaceTemplateVariableSpans(a,(t,a)=>{let o=e.getHtmlAttribute(a,`data-key`);return o?D(n.get(o),o,r[o],i):t})}function E(e,t,n,r){let i=e.dataset.key||``,a=t.get(i);if(!i||!a)return;let o=new DOMParser().parseFromString(D(a,i,n[i],r),`text/html`).body.firstElementChild;o&&(o.tagName===`TEXTAREA`&&(o.textContent=I(A(a,n[i]))),e.replaceWith(o))}function D(e,t,n,r){return r.mode===`display`?O(e,t,n,r):k(e,t,n,r)}function O(n,r,a,s){let c=n?.type??`text`,l=A(n,a),u=c===`image`&&!w(l)&&!o.isSafeContractImageUrl(String(l))?``:l,d=L(u),f=t.resolveTemplateVariablePresentation({type:c,width:n?.width,height:n?.height,placeholder:n?.placeholder??``,defaultValue:d,format:n?.format??``,precision:n?.precision,useGrouping:n?.useGrouping,checkedText:n?.checkedText??``,uncheckedText:n?.uncheckedText??``,multiline:n?.multiline,rows:n?.rows,lineHeight:n?.lineHeight,style:n?.style}),p=f.displayText||n?.placeholder||n?.label||r,m=[`class="${e.escapeHtmlAttribute([`gd-contract-template-renderer__control`,`gd-contract-template-renderer__preview-control`,...f.classes,s.activeKey===r?`is-active`:``,w(u)?`is-empty`:``].filter(Boolean).join(` `))}"`,`style="${e.escapeHtmlAttribute(f.styleText)}"`,`data-contract-render-wrapper="true"`,`data-contract-render-preview="true"`,`data-key="${e.escapeHtmlAttribute(r)}"`,`data-variable-type="${e.escapeHtmlAttribute(c)}"`,`aria-label="${e.escapeHtmlAttribute(n?.label||r)}"`,s.disabled?``:`role="button"`,s.disabled?``:`tabindex="0"`].filter(Boolean).join(` `);return c===`checkbox`?`<span ${m}><span class="gd-contract-template-renderer__checkbox-mark" aria-hidden="true">${R(u)?`✓`:``}</span>${e.escapeHtmlText(p)}</span>`:c===`radio`?`<span ${m}>${i.buildRadioOptionsHtml(n?.options,M(u))||e.escapeHtmlText(n?.placeholder||p)}</span>`:c===`select`?`<span ${m}>${e.escapeHtmlText(N(n,u)||p)}</span>`:c===`image`&&!w(u)?`<span ${m}></span>`:`<span ${m}>${e.escapeHtmlText(p)}</span>`}function k(n,r,a,o){let s=n?.type??`text`,c=!!o.readonly,l=I(A(n,a)),u=t.resolveTemplateVariablePresentation({type:s,width:n?.width,height:n?.height,placeholder:n?.placeholder??``,defaultValue:c?l:``,format:n?.format??``,precision:n?.precision,useGrouping:n?.useGrouping,checkedText:n?.checkedText??``,uncheckedText:n?.uncheckedText??``,multiline:n?.multiline,rows:n?.rows,lineHeight:n?.lineHeight,style:n?.style}),d=o.disabled||c,f=[`data-contract-render-control="true"`,`data-key="${e.escapeHtmlAttribute(r)}"`,`data-variable-type="${e.escapeHtmlAttribute(s)}"`,`aria-label="${e.escapeHtmlAttribute(n?.label||r)}"`,d?`disabled`:``,c?`readonly`:``].filter(Boolean).join(` `),p=`style="${e.escapeHtmlAttribute(u.styleText)}"`,m=e.escapeHtmlAttribute([`gd-contract-template-renderer__control`,...u.classes].join(` `));if(s===`checkbox`)return`<label class="${m}" ${p} data-contract-render-wrapper="true" data-key="${e.escapeHtmlAttribute(r)}"><input type="checkbox" ${f} ${R(l)?`checked`:``}>${e.escapeHtmlText(n?.checkedText||n?.label||r)}</label>`;if(s===`radio`){let t=A(n,a),o=i.buildRadioOptionsHtml(n?.options,M(t))||e.escapeHtmlText(u.displayText||n?.placeholder||``);return`<span class="${m}" ${p} data-contract-render-wrapper="true" data-key="${e.escapeHtmlAttribute(r)}">${o}</span>`}if(c)return`<span class="${m}" ${p} data-contract-render-wrapper="true" data-key="${e.escapeHtmlAttribute(r)}">${e.escapeHtmlText(u.displayText||l)}</span>`;if(s===`number`)return`<input class="${m}" ${p} type="number" ${f} value="${e.escapeHtmlAttribute(l)}" placeholder="${e.escapeHtmlAttribute(n?.placeholder||``)}">`;if(s===`date`)return`<input class="${m}" ${p} type="date" ${f} value="${e.escapeHtmlAttribute(l)}" placeholder="${e.escapeHtmlAttribute(n?.placeholder||``)}">`;if(s===`select`||s.endsWith(`-selector`)||s===`custom`){let t=A(n,a),o=s===`select`?N(n,t):i.formatContractTemplateRenderValue(t);return`<span class="${m}" ${p} data-contract-render-wrapper="true" data-key="${e.escapeHtmlAttribute(r)}">${e.escapeHtmlText(o)}</span>`}if(n?.multiline){let t=/^[\r\n]/.test(l)?`
|
|
4
|
+
`:``;return`<textarea class="${m}" ${p} ${f} placeholder="${e.escapeHtmlAttribute(n.placeholder||``)}">${t}${e.escapeHtmlText(l)}</textarea>`}return`<input class="${m}" ${p} type="text" ${f} value="${e.escapeHtmlAttribute(l)}" placeholder="${e.escapeHtmlAttribute(n?.placeholder||``)}">`}function A(e,t){if(!(e?.type===`select`&&e.multiple&&w(t)))return t??j(e)}function j(e){if(!e)return``;if(e.type===`checkbox`)return R(e.defaultValue);if(e.type===`number`&&e.defaultValue!==void 0){let t=Number(e.defaultValue);return Number.isFinite(t)?t:e.defaultValue}if(e.type===`select`||e.type===`radio`){if(e.type===`select`&&e.multiple||!e.defaultValue)return;let t=(e.options??[]).find(t=>String(t.value)===String(e.defaultValue));return t?{value:t.value,label:t.label,type:t.type||e.type}:void 0}if(!e.type?.endsWith(`-selector`))return e.defaultValue??``}function M(e){if(!Array.isArray(e)){if(i.isContractTemplateSelectionValue(e))return e.value;if(typeof e==`string`||typeof e==`number`)return e}}function N(e,t){let n=Array.isArray(t)?t:[t];if(n.length&&n.every(e=>i.isContractTemplateSelectionValue(e)))return i.formatContractTemplateRenderValue(t);let r=n.flatMap(t=>{let n=typeof t==`string`||typeof t==`number`?t:void 0;if(n===void 0)return[];let r=e?.options?.find(e=>String(e.value)===String(n));return r?.label?[r.label]:[]});return r.length?r.join(`、`):i.formatContractTemplateRenderValue(t)}function P(e){return(e.type===`select`||e.type===`radio`)&&!e.dataSource&&Array.isArray(e.options)&&e.options.length>0}function F(e,t){let n=Array.isArray(t)?t:[t];return n.length>0&&n.every(t=>i.isContractTemplateSelectionValue(t)&&(e.options??[]).some(e=>String(e.value)===String(t.value)))}function I(e){return typeof e==`boolean`?e?`true`:``:e==null?``:i.formatContractTemplateRenderValue(e)}function L(e){return typeof e==`boolean`?e?`true`:`false`:e==null?``:i.formatContractTemplateRenderValue(e)}function R(e){return e===!0||e===`true`||e===`1`||e===`yes`||e===`是`||e===`已选`}function z(t){if(e.canParseHtmlDocument()){let e=new DOMParser().parseFromString(t,`text/html`);return e.querySelectorAll(`script,style,meta,link,iframe,object,embed`).forEach(e=>e.remove()),e.querySelectorAll(`*`).forEach(e=>{Array.from(e.attributes).forEach(t=>{let n=t.name.toLowerCase();(n.startsWith(`on`)||n===`srcdoc`||l.has(n)&&H(t.value)||n===`style`&&W(t.value))&&e.removeAttribute(t.name)})}),e.body.innerHTML}return t.replace(/<\s*(script|style|iframe|object|embed)\b[^>]*>[\s\S]*?<\s*\/\s*\1\s*>/gi,``).replace(/<\s*\/?\s*(?:script|style|meta|link|iframe|object|embed)\b[^>]*>/gi,``).replace(/\s+on[a-z]+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi,``).replace(/\s+srcdoc\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi,``).replace(/\s+(action|formaction|href|src|xlink:href)\s*=\s*(?:(["'])(.*?)\2|([^\s>]+))/gi,(e,t,n,r,i)=>{let a=r??i??``;return H(a)?``:n?` ${t}=${n}${a}${n}`:` ${t}=${a}`}).replace(/\s+style\s*=\s*(["'])(.*?)\1/gi,(e,t,n)=>W(n)?``:` style=${t}${n}${t}`)}function B(t){return e.collectFromHtmlTags(t,u,t=>e.getHtmlAttribute(t,`data-key`))}function V(e){let t=[];return/<\s*(script|style|meta|link|iframe|object|embed)\b/i.test(e)&&t.push(`正文包含已移除的危险标签`),/\s(?:on[a-z]+|srcdoc)\s*=/i.test(e)&&t.push(`正文包含已移除的事件或嵌入属性`),(U(e)||/style\s*=\s*["'][^"']*(?:expression\s*\(|url\s*\(\s*["']?\s*(?:javascript|vbscript|data:text\/html))/i.test(e))&&t.push(`正文包含已移除的危险 URL 或样式`),t}function H(e){let t=e.replace(/&#(?:x([\da-f]+)|(\d+));?/gi,(e,t,n)=>{let r=Number.parseInt(t??n??``,t?16:10);try{return Number.isFinite(r)?String.fromCodePoint(r):e}catch{return e}}).replace(/&(colon|tab|newline);/gi,(e,t)=>({colon:`:`,newline:`
|
|
5
|
+
`,tab:` `})[t.toLowerCase()]??``).trim().replace(/[\u0000-\u0020\u007F]+/g,``);return/^(?:javascript|vbscript|data:text\/html)/i.test(t)}function U(e){let t=/\s+(?:action|formaction|href|src|xlink:href)\s*=\s*(?:(["'])(.*?)\1|([^\s>]+))/gi,n=t.exec(e);for(;n;){if(H(n[2]??n[3]??``))return!0;n=t.exec(e)}return!1}function W(e){return/expression\s*\(|url\s*\(\s*["']?\s*(?:javascript|vbscript|data:text\/html)/i.test(e)}function G(e,t){return w(t)?e.type===`select`||e.type===`radio`?j(e):w(e.defaultValue)?t:e.defaultValue:t}function K(e,t,n){if(typeof e==`boolean`||typeof e!=`number`&&typeof e!=`string`)return!1;let r=String(e).trim();if(!/^-?(?:\d+)(?:\.\d+)?$/.test(r))return!1;let i=Number(r);if(!Number.isFinite(i))return!1;if(t!==void 0){let e=r.split(`.`)[1]?.length??0,i=t+(n===`percent`?2:0);if(!Number.isInteger(t)||t<0||t>p||e>i)return!1}return!0}function q(e){if(typeof e!=`string`&&typeof e!=`number`)return!1;let t=String(e).trim(),n=/^(\d{4})[-/年](\d{1,2})[-/月](\d{1,2})(?:日)?(?:[T\s].*)?$/.exec(t);if(!n)return!1;let r=Number(n[1]),i=Number(n[2]),a=Number(n[3]),o=new Date(Date.UTC(r,i-1,a));return o.getUTCFullYear()===r&&o.getUTCMonth()===i-1&&o.getUTCDate()===a}function J(e){return typeof e==`boolean`?!0:[`1`,`true`,`yes`,`checked`,`是`,`已选`,`0`,`false`,`no`,`unchecked`,`否`,`未选`].includes(String(e).trim().toLowerCase())}function Y(e){return m.test(e)}function X(e){return e===`select`||e===`radio`||e===`user-selector`||e===`dept-selector`||e===`role-selector`||e===`org-selector`}function Z(e,t){return t?Array.isArray(e)&&e.every(i.isContractTemplateSelectionValue):i.isContractTemplateSelectionValue(e)}function Q(e,t){let n=e.width;if(!Number.isFinite(n)||n<=0)return!1;let r=Math.max(10,Number.isFinite(e.style?.fontSize)&&(e.style?.fontSize??0)>0?e.style.fontSize:14),i=Math.max(1,n-12)/r,a=e=>Array.from(e).reduce((e,t)=>e+(/[^\x00-\x7f]/.test(t)?1:.55),0);return e.multiline?t.split(/\r?\n/).reduce((e,t)=>e+Math.max(1,Math.ceil(a(t)/i)),0)>(e.rows??3):a(t)>i}function $(e){if(!e||typeof e!=`object`)return!1;let{width:t,height:n}=e;return typeof t==`number`&&typeof n==`number`&&Number.isFinite(t)&&Number.isFinite(n)&&t>=d&&n>=d&&t<=f&&n<=f}exports.buildInitialRenderValues=h,exports.buildTemplateRenderHtml=C,exports.buildTemplateRenderPages=S,exports.buildTemplateVariableData=s,exports.isEmptyRenderValue=w,exports.normalizeRenderValues=g,exports.resolveTemplateDisplayValues=_,exports.resolveTemplateRenderSubmitErrors=b,exports.sanitizeContractRendererHtml=z,exports.validateTemplateRenderStructure=x,exports.validateTemplateRenderValues=v,exports.validateTemplateTextOverflow=y;
|
package/dist/lib/components/pro-contract-template-designer/src/utils/template-variable-render.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../constants.cjs`);function t(t){let r=t.type===void 0?`text`:String(t.type),i=Math.max(24,
|
|
1
|
+
const e=require(`../constants.cjs`);function t(t){let r=t.type===void 0?`text`:String(t.type),i=Math.max(24,c(t.width,160)),a=Math.max(24,c(t.height,32)),o=t.style?.border??t.border??r===`image`,l=t.style?.underline??t.underline??(r!==`image`&&r!==`checkbox`),u=t.style?.color||t.color||`#1f2937`,d=t.style?.background||t.background||`transparent`,f=Math.max(10,c(t.style?.fontSize??t.fontSize,14)),p=t.style?.fontFamily||t.fontFamily||e.DEFAULT_CONTRACT_FONT_FAMILY,m=t.style?.placeholderColor||t.placeholderColor||`#7a818b`,h=t.style?.lineColor||t.lineColor||`#565b66`,g=t.style?.textAlign||t.textAlign||`left`,_=t.style?.borderStyle||t.borderStyle||`solid`,v=t.style?.objectFit||t.objectFit||`contain`,y=!!t.multiline,b=Math.max(1,c(t.rows,3)),x=Math.max(18,c(t.lineHeight,28)),S=b*x,C=v===`fill`?`100% 100%`:v,w=g===`right`?`flex-end`:g===`center`?`center`:`flex-start`,T=r===`select`&&t.multiple?``:String(t.defaultValue||``),E=n({type:r,defaultValue:T,placeholder:t.placeholder||``,format:t.format||``,precision:t.precision,useGrouping:t.useGrouping,checkedText:t.checkedText||``,uncheckedText:t.uncheckedText||``,options:t.options,multiple:t.multiple}),D=T.trim().length>0,O=!D&&E.trim().length>0,k=r===`checkbox`&&s(T),A=r===`image`&&D?`;--gd-contract-variable-image:url('${T.replaceAll(`'`,`%27`)}')`:``;return{type:r,width:i,height:a,border:o,underline:l,color:u,background:d,fontSize:f,fontFamily:p,placeholderColor:m,lineColor:h,textAlign:g,borderStyle:_,objectFit:v,displayText:E,hasDefaultValue:D,isPlaceholder:O,isChecked:k,classes:[`gd-contract-template-variable`,`is-${r}`,o?`has-border`:``,l?`has-underline`:``,y?`is-multiline`:``,O?`is-placeholder`:``,D?`has-value`:``,k?`is-checked`:``].filter(Boolean),styleText:`--gd-contract-variable-width:${i}px;--gd-contract-variable-height:${a}px;--gd-contract-variable-rows:${b};--gd-contract-variable-line-height:${x}px;--gd-contract-variable-multiline-height:${S}px;--gd-contract-variable-color:${u};--gd-contract-variable-background:${d};--gd-contract-variable-font-size:${f}px;--gd-contract-variable-font-family:${p};--gd-contract-variable-placeholder-color:${m};--gd-contract-variable-line-color:${h};--gd-contract-variable-text-align:${g};--gd-contract-variable-justify-content:${w};--gd-contract-variable-border-style:${_};--gd-contract-variable-object-fit:${C}${A}`}}function n(e){let t=e.type||`text`,n=t===`select`&&e.multiple?``:e.defaultValue||``,i=e.placeholder||``;if(t===`checkbox`)return n?s(n)?e.checkedText||i:e.uncheckedText||i:i;if(!n)return i;if(t===`date`)return r(n,e.format||``);if(t===`number`)return o(n,{format:e.format||``,precision:e.precision,useGrouping:e.useGrouping});if(t===`image`)return i;if(t===`select`){let t=e.options?.find(e=>String(e.value??``)===n);if(t?.label)return t.label;if(e.options?.length)return i}return n}function r(e,t){if(!t)return e;let n=i(e);return n?t.replaceAll(`YYYY`,n.year).replaceAll(`MM`,n.month).replaceAll(`DD`,n.day):e}function i(e){let t=String(e).trim(),n=/^(\d{4})[-/年](\d{1,2})[-/月](\d{1,2})(?:日)?(?:[T\s].*)?$/.exec(t);if(!n)return;let r=Number(n[1]),i=Number(n[2]),a=Number(n[3]),o=new Date(Date.UTC(r,i-1,a));if(!(o.getUTCFullYear()!==r||o.getUTCMonth()!==i-1||o.getUTCDate()!==a))return{year:String(o.getUTCFullYear()),month:String(o.getUTCMonth()+1).padStart(2,`0`),day:String(o.getUTCDate()).padStart(2,`0`)}}var a=[{value:`decimal`,label:`常规数字`},{value:`percent`,label:`百分比`},{value:`currency`,label:`人民币金额`}];function o(e,t){let n=Number(e);if(!e.trim()||!Number.isFinite(n))return e;let r=typeof t.precision==`number`&&Number.isInteger(t.precision)&&t.precision>=0&&t.precision<=20?t.precision:void 0,i=n.toLocaleString(`zh-CN`,{style:t.format===`percent`?`percent`:`decimal`,useGrouping:t.useGrouping===!0,minimumFractionDigits:r??0,maximumFractionDigits:r??20});return t.format===`currency`?`¥${i}`:i}function s(e){return[`1`,`true`,`yes`,`checked`,`是`,`已选`].includes(e.trim().toLowerCase())}function c(e,t){if(e==null||e===``)return t;let n=Number(e);return Number.isFinite(n)?n:t}exports.TEMPLATE_NUMBER_FORMAT_OPTIONS=a,exports.resolveTemplateVariablePresentation=t;
|