@guodun/antdv 1.4.7 → 1.5.1
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 +315 -286
- package/dist/es/components/contract-signing-location/src/ContractSigningLocationCanvas.vue.mjs +316 -285
- package/dist/es/components/contract-signing-location/src/ContractSigningTemplatePage.vue.mjs +62 -54
- package/dist/es/components/contract-signing-location/style/index.css +1 -1
- 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/ContractPrintIframe.mjs +7 -0
- package/dist/es/components/pro-contract-template-designer/src/ContractPrintIframe.vue.mjs +129 -0
- package/dist/es/components/pro-contract-template-designer/src/ContractPrintIframe.vue_vue_type_style_index_0_scoped_a9912ff0_lang.css +1 -0
- package/dist/es/components/pro-contract-template-designer/src/ContractTemplatePreviewModal.vue.mjs +10 -5
- package/dist/es/components/pro-contract-template-designer/src/ContractTemplatePreviewPage.vue.mjs +64 -43
- package/dist/es/components/pro-contract-template-designer/src/ContractTemplateRendererPage.vue.mjs +82 -53
- package/dist/es/components/pro-contract-template-designer/src/DesignerPage.vue.mjs +271 -265
- package/dist/es/components/pro-contract-template-designer/src/ProContractTemplateDesigner.vue.mjs +762 -751
- package/dist/es/components/pro-contract-template-designer/src/ProContractTemplateRenderer.vue.mjs +217 -197
- package/dist/es/components/pro-contract-template-designer/src/constants.mjs +29 -51
- package/dist/es/components/pro-contract-template-designer/src/extensions/template-variable.mjs +103 -103
- package/dist/es/components/pro-contract-template-designer/src/extensions/word-paste.mjs +24 -21
- package/dist/es/components/pro-contract-template-designer/src/utils/contract-print-document.mjs +314 -0
- package/dist/es/components/pro-contract-template-designer/src/utils/page-decorations.mjs +1 -1
- package/dist/es/components/pro-contract-template-designer/src/utils/template-variable-render.mjs +47 -47
- package/dist/es/components/pro-contract-template-designer/src/utils/word-paste.mjs +216 -148
- package/dist/es/components/pro-contract-template-designer/style/index.css +1 -1
- package/dist/es/index.mjs +27 -26
- 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/style/index.css +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/ContractPrintIframe.cjs +1 -0
- package/dist/lib/components/pro-contract-template-designer/src/ContractPrintIframe.vue.cjs +1 -0
- package/dist/lib/components/pro-contract-template-designer/src/ContractPrintIframe.vue_vue_type_style_index_0_scoped_a9912ff0_lang.css +1 -0
- package/dist/lib/components/pro-contract-template-designer/src/ContractTemplatePreviewModal.vue.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/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/constants.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/src/extensions/template-variable.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/src/extensions/word-paste.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/src/utils/contract-print-document.cjs +211 -0
- 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-variable-render.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/src/utils/word-paste.cjs +2 -2
- package/dist/lib/components/pro-contract-template-designer/style/index.css +1 -1
- package/dist/lib/index.cjs +1 -1
- package/dist/theme/contract-signing-location.css +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 +7 -0
- package/dist/types/components/contract-signing-location/src/ContractSigningLocationCanvas.vue.d.ts +4 -0
- package/dist/types/components/contract-signing-location/src/ContractSigningTemplatePage.vue.d.ts +9 -3
- package/dist/types/components/contract-signing-location/src/types.d.ts +5 -0
- package/dist/types/components/pro-contract-template-designer/index.d.ts +1 -0
- package/dist/types/components/pro-contract-template-designer/src/ContractPrintIframe.vue.d.ts +35 -0
- package/dist/types/components/pro-contract-template-designer/src/ContractTemplateDesignerToolbar.vue.d.ts +2 -2
- package/dist/types/components/pro-contract-template-designer/src/ContractTemplatePreviewModal.vue.d.ts +1 -0
- package/dist/types/components/pro-contract-template-designer/src/ContractTemplatePreviewPage.vue.d.ts +1 -0
- package/dist/types/components/pro-contract-template-designer/src/ContractTemplateRendererPage.vue.d.ts +13 -1
- package/dist/types/components/pro-contract-template-designer/src/DesignerPage.vue.d.ts +6 -0
- package/dist/types/components/pro-contract-template-designer/src/ProContractTemplateDesigner.vue.d.ts +1 -0
- package/dist/types/components/pro-contract-template-designer/src/ProContractTemplateRenderer.vue.d.ts +1 -0
- package/dist/types/components/pro-contract-template-designer/src/constants.d.ts +4 -4
- package/dist/types/components/pro-contract-template-designer/src/extensions/word-paste.d.ts +8 -0
- package/dist/types/components/pro-contract-template-designer/src/types.d.ts +10 -0
- package/dist/types/components/pro-contract-template-designer/src/utils/contract-print-document.d.ts +119 -0
- package/dist/types/components/pro-contract-template-designer/src/utils/word-paste.d.ts +2 -0
- package/package.json +2 -1
package/dist/lib/components/pro-contract-template-designer/src/ProContractTemplateRenderer.vue.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`./types.cjs`),t=require(`./utils/advanced-controls.cjs`),n=require(`./utils/template-renderer.cjs`),r=require(`./ContractTemplateRendererField.cjs`),i=require(`./ContractTemplateRendererHeader.cjs`),a=require(`./ContractTemplateRendererPage.cjs`),o=require(`./ContractTemplateRendererValidation.cjs`);let s=require(`vue`),c=require(`ant-design-vue`),l=require(`@vueuse/core`),u=require(`@ant-design/icons-vue`);var ee={key:2,class:`gd-contract-template-renderer__empty`},te=[`data-highlighted-variable-key`],ne={class:`gd-contract-template-renderer__pages`},re=[`aria-label`,`aria-expanded`],ie={class:`gd-contract-template-renderer__panel-clip`},ae={class:`gd-contract-template-renderer__panel`},oe={class:`gd-contract-template-renderer__panel-head`},se={class:`gd-contract-template-renderer__panel-head-row`},ce={class:`gd-contract-template-renderer__panel-head-actions`},le={class:`gd-contract-template-renderer__field-group-head`},ue={class:`gd-contract-template-renderer__field-group-items`},de=[`data-field-key`],fe=.5,pe=1.5,d=.1,me=3e3,f=(0,s.defineComponent)({name:`ProContractTemplateRenderer`,__name:`ProContractTemplateRenderer`,props:{template:{default:void 0},values:{default:void 0},interactionMode:{default:`panel`},readonly:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},title:{default:`合同填写`},showSubmitButton:{type:Boolean,default:!0},validateOnSubmit:{type:Boolean,default:!0},showValidateButton:{type:Boolean,default:!0},showResetButton:{type:Boolean,default:!0},showToolbar:{type:Boolean,default:!0},showPageMeta:{type:Boolean,default:!0},collapsiblePanel:{type:Boolean,default:!0},zoom:{default:1},controlRegistry:{default:()=>({})},optionResolver:{type:Function,default:void 0},requester:{type:Function,default:void 0},allowedRemoteOrigins:{default:()=>[]},remoteRequestTimeoutMs:{default:1e4},remoteOptionsCacheTtlMs:{default:3e4},selectorHttp:{default:void 0},selectorUrlPrefix:{default:``}},emits:[`update:values`,`change`,`validate`,`submit`,`update:zoom`,`control-warning`],setup(f,{expose:he,emit:ge}){let p=f,m=ge,_e=[{label:`全部`,value:`all`},{label:`未填写`,value:`unfilled`},{label:`有错误`,value:`error`}],ve=(0,s.ref)(),h=(0,s.ref)(),g=(0,s.ref)(),_=(0,s.ref)(n.normalizeRenderValues(p.template,p.values)),ye=(0,s.ref)({..._.value}),v=(0,s.ref)(!1),y=(0,s.ref)([]),b=(0,s.ref)(!1),x=(0,s.ref)(!1),S=(0,s.ref)(``),C=(0,s.ref)(``),w=(0,s.ref)(``),T=(0,s.ref)(ft(p.zoom)),E=(0,s.ref)(``),D=(0,s.ref)(`all`),O=(0,s.ref)(!1),k=(0,s.ref)(new Map),A=new Map,j=new Map,M=new Map,N=new Set,{width:be}=(0,l.useElementSize)(h),xe=(0,s.computed)(()=>p.readonly||p.disabled),P=(0,s.computed)(()=>n.validateTemplateRenderStructure(p.template)),F=(0,s.computed)(()=>v.value?y.value:P.value),I=(0,s.computed)(()=>(Array.isArray(p.template?.variables)?p.template.variables:[]).filter(t=>!!t?.key&&e.isContractTemplateFieldType(t.type??`text`))),Se=(0,s.computed)(()=>{let e={..._.value};return I.value.forEach(n=>{let r=Ke(n);if(r?.toDisplayText)try{e[n.key]=r.toDisplayText(e[n.key],{variable:n,config:t.normalizeContractTemplateJsonObject(n.componentConfig)})}catch{}}),e}),Ce=(0,s.computed)(()=>I.value.filter(e=>n.isEmptyRenderValue(_.value[e.key])).length),we=(0,s.computed)(()=>{let e=new Map;return F.value.forEach(t=>{t.variableKey&&e.set(t.variableKey,[...e.get(t.variableKey)??[],t])}),e}),L=(0,s.computed)(()=>{let e=p.interactionMode===`panel`;return n.buildTemplateRenderPages(p.template,e?Se.value:ye.value,{readonly:p.readonly,disabled:p.disabled,mode:e?`display`:`control`,activeKey:e?C.value:``})}),Te=(0,s.computed)(()=>{let e=new Map,t=new Set(I.value.map(e=>e.key));return L.value.forEach(n=>{ot(n.contentHtml).forEach(r=>{t.has(r)&&!e.has(r)&&e.set(r,n.id)})}),e}),R=(0,s.computed)(()=>I.value.filter(tt)),Ee=(0,s.computed)(()=>{let e=L.value.map((e,t)=>({id:`page:${e.id}`,pageId:e.id,title:`第 ${t+1} 页${e.title?` · ${e.title}`:``}`,allVariables:[],variables:[]})),t=new Map(e.map(e=>[e.pageId,e])),n={id:`unlocated`,title:`未定位字段`,allVariables:[],variables:[]};return I.value.forEach(e=>{let r=t.get(Te.value.get(e.key)??``)??n;r.allVariables.push(e),tt(e)&&r.variables.push(e)}),[...e,n].filter(e=>e.variables.length>0).map(e=>({id:e.id,title:e.title,totalCount:e.allVariables.length,variables:e.variables}))}),z=(0,s.computed)(()=>L.value.length>0),B=(0,s.computed)(()=>I.value.filter(e=>!n.isEmptyRenderValue(_.value[e.key])).length),V=(0,s.computed)(()=>I.value.filter(e=>e.required&&n.isEmptyRenderValue(_.value[e.key])).length),De=(0,s.computed)(()=>I.value.length?Math.round(B.value/I.value.length*100):0),Oe=(0,s.computed)(()=>v.value&&y.value.length===0),ke=(0,s.computed)(()=>v.value?Oe.value?`校验通过,模板与填写值均符合规则`:`发现 ${y.value.length} 个模板或填写问题`:P.value.length?`模板存在 ${P.value.length} 个问题,已安全降级展示`:``),Ae=(0,s.computed)(()=>v.value?F.value.length>0||x.value:P.value.length>0);(0,s.watch)(()=>p.template,e=>{H(n.normalizeRenderValues(e,p.values),!1),G();let t=Array.isArray(e?.pages)?e.pages.map(e=>e?.id):[];t.includes(w.value)||(w.value=t.find(Boolean)??``),C.value&&!I.value.some(e=>e.key===C.value)&&He()},{deep:!0}),(0,s.watch)(()=>[p.template?.variables,p.optionResolver,p.requester,p.allowedRemoteOrigins,p.remoteRequestTimeoutMs,p.remoteOptionsCacheTtlMs],()=>{Je()},{deep:!0,immediate:!0}),(0,s.watch)(()=>p.values,e=>{let t=n.normalizeRenderValues(p.template,e);pt(t,_.value)||(H(t,!1),G())},{deep:!0}),(0,s.watch)(()=>p.interactionMode,e=>{e===`inline`&&(ye.value={..._.value})}),(0,s.watch)(()=>p.collapsiblePanel,e=>{e||(O.value=!1)}),(0,s.watch)(()=>p.zoom,e=>T.value=ft(e)),(0,s.watch)(L,e=>{!w.value&&e.length&&(w.value=e[0].id)},{immediate:!0});function H(e,t=!0,n={}){_.value={...e},n.refreshInlineHtml!==!1&&(ye.value={...e}),t&&(m(`update:values`,{..._.value}),m(`change`,{..._.value}))}function U(e,t){!e||xe.value||(H({..._.value,[e]:t},!0,{refreshInlineHtml:p.interactionMode!==`inline`}),v.value&&W())}function je(e){if(p.interactionMode!==`inline`)return;let t=e.target;if(!(t instanceof HTMLInputElement)&&!(t instanceof HTMLTextAreaElement))return;let n=t.dataset.key||``;n&&(t instanceof HTMLInputElement&&t.type===`checkbox`?U(n,t.checked):t instanceof HTMLInputElement&&t.type===`number`?U(n,t.value===``?void 0:t.valueAsNumber):U(n,t.value))}function Me(e){let t=e.target;if(!(t instanceof Element))return;let n=t.closest(`[data-render-page-id]`);n?.dataset.renderPageId&&(w.value=n.dataset.renderPageId);let r=t.closest(`[data-contract-render-wrapper], [data-contract-render-control]`)?.dataset.key||``;r&&Y(r)}function Ne(e){if(e.key!==`Enter`&&e.key!==` `)return;let t=e.target;!(t instanceof HTMLElement)||!t.dataset.key||(e.preventDefault(),Y(t.dataset.key))}function Pe(){return{..._.value}}function Fe(e){H(n.normalizeRenderValues(p.template,e))}function W(){let e=n.validateTemplateRenderValues(p.template,_.value);return ze(e),m(`validate`,e),e}function Ie(){let e=n.resolveTemplateRenderSubmitErrors(p.template,_.value,p.validateOnSubmit);if((p.validateOnSubmit||e.length)&&(ze(e),m(`validate`,e)),e.length)return We(e[0]),!1;let t=Pe();return m(`submit`,t),t}function Le(){return H(n.buildInitialRenderValues(p.template)),G(),Pe()}function Re(){xe.value||c.Modal.confirm({title:`重置填写内容?`,content:`将恢复模板中的默认值,当前未提交的填写内容会被覆盖。`,okText:`确认重置`,cancelText:`取消`,onOk:()=>Le()})}function G(){v.value=!1,y.value=[],b.value=!1,x.value=!1,q()}function ze(e){if(y.value=e,v.value=!0,b.value=!1,e.length){x.value=!1,q();return}Be()}let K;function q(){K&&=(clearTimeout(K),void 0)}function Be(){q(),x.value=!0,K=setTimeout(()=>{x.value=!1,K=void 0},me)}function J(e){Y(e,!0)}function Ve(e){p.interactionMode===`panel`&&(O.value&&=!1,I.value.some(t=>t.key===e)&&!R.value.some(t=>t.key===e)&&nt())}function Y(e,t=!1){e&&(Ve(e),C.value=e,S.value=e,(0,s.nextTick)(()=>{Ue(e);let n=h.value?.querySelector(`[data-key="${$(e)}"]`),r=n?.closest(`[data-render-page-id]`);r?.dataset.renderPageId&&(w.value=r.dataset.renderPageId),t&&n?.scrollIntoView({behavior:`smooth`,block:`center`,inline:`center`}),p.interactionMode===`panel`&&g.value?.querySelector(`[data-field-key="${$(e)}"]`)?.scrollIntoView({behavior:`smooth`,block:`nearest`})}))}function He(){C.value=``,S.value=``,Ue(``)}function Ue(e){h.value?.querySelectorAll(`[data-contract-render-wrapper], [data-contract-render-control]`).forEach(t=>t.classList.toggle(`is-active`,!!e&&t.dataset.key===e))}function We(e){e.variableKey?J(e.variableKey):e.pageId&&dt(e.pageId)}function Ge(e){return we.value.get(e)??[]}function X(e){return k.value.get(e.key)??{options:e.options??[],loading:!1}}function Ke(e){let t=e.componentKey||e.type||``;return t?p.controlRegistry?.[t]:void 0}function Z(e,t){let n=new Map(k.value);n.set(e,t),k.value=n}function qe(e){m(`control-warning`,e)}async function Je(){A.forEach(e=>e.abort()),A.clear(),j.clear(),N.clear();let e=Array.isArray(p.template?.variables)?p.template.variables:[];await Promise.all(e.map(async e=>{if(!e?.key)return;let t=Array.isArray(e.options)?e.options.map(e=>({...e})):[];if(e.dataSource?await Ye(e,t):Z(e.key,{options:t,loading:!1}),e.type===`custom`&&!Ke(e)){let t=e.componentKey||``,n=`${e.key}:${t}`;N.has(n)||(N.add(n),qe({code:`CONTROL_COMPONENT_MISSING`,variableKey:e.key,componentKey:t,message:`${e.label||e.key} 未注册自定义控件 ${t||`(空)`}`}))}}))}async function Ye(e,n){let r=e.dataSource;if(!r)return;let i=new AbortController;A.set(e.key,i),Z(e.key,{options:n,loading:!0});let a=Xe(e),o=Date.now(),s=j.get(a);if(s&&s.expiresAt>o){Z(e.key,{options:s.options,loading:!1}),A.delete(e.key);return}let c=`CONTROL_OPTIONS_LOAD_FAILED`;try{r.kind===`url`&&!t.isAllowedContractTemplateRemoteUrl(r.url,p.allowedRemoteOrigins)&&(c=`CONTROL_REMOTE_URL_BLOCKED`);let o=M.get(a);o||(o=Ze(e,r,c,i),M.set(a,o),o.finally(()=>{M.get(a)===o&&M.delete(a)}).catch(()=>void 0));let s=await o;if(i.signal.aborted)return;let l=Math.max(0,Number(p.remoteOptionsCacheTtlMs)||0);l>0&&j.set(a,{options:s,expiresAt:Date.now()+l}),Z(e.key,{options:s.length?s:n,loading:!1})}catch(t){let r=t instanceof Error&&t.message.startsWith(`高级控件请求超时`);if(i.signal.aborted&&!r)return;let a=t instanceof Error?t.message:`高级控件选项加载失败`;Z(e.key,{options:n,loading:!1,error:a}),qe({code:c,variableKey:e.key,message:`${e.label||e.key}:${a}`,cause:t})}finally{A.get(e.key)===i&&A.delete(e.key)}}function Xe(e){try{return JSON.stringify([e.type,e.dataSource])}catch{return`${e.key}:${e.type}`}}async function Ze(e,n,r,i){let a;if(n.kind===`resolver`){if(!p.optionResolver)throw Error(`缺少 resolver ${n.resolverKey} 的宿主实现`);a=await p.optionResolver({resolverKey:n.resolverKey,params:n.params,variable:e,signal:i.signal})}else{if(!t.isAllowedContractTemplateRemoteUrl(n.url,p.allowedRemoteOrigins))throw Error(`远程地址未在 allowlist 中:${n.url}`);if(!p.requester)throw Error(`缺少宿主 requester,组件库不会直接发起网络请求`);let r=t.normalizeContractTemplateRequestTimeout(n.timeoutMs,p.remoteRequestTimeoutMs);a=await Qe(p.requester({url:n.url,method:n.method||`GET`,params:n.params,headers:n.headers,timeoutMs:r,signal:i.signal,variable:e}),i,r)}return t.normalizeContractTemplateControlOptions(a,n.kind===`url`?n:void 0,e.type||`select`)}function Qe(e,t,n){return new Promise((r,i)=>{let a=()=>{clearTimeout(c),t.signal.removeEventListener(`abort`,s)},o=e=>{a(),e()},s=()=>o(()=>i(Error(`高级控件请求已取消`))),c=setTimeout(()=>{o(()=>i(Error(`高级控件请求超时(${n}ms)`))),t.abort()},n);t.signal.addEventListener(`abort`,s,{once:!0}),e.then(e=>o(()=>r(e)),e=>o(()=>i(e)))})}function $e(e){let t=X(e);return{variable:e,value:_.value[e.key],errors:Ge(e.key),active:C.value===e.key,readonly:p.readonly,disabled:p.disabled,options:t.options,loading:t.loading,loadError:t.error,updateValue:t=>U(e.key,t),focusVariable:()=>J(e.key)}}function et(){let e=I.value;if(!e.length)return;let t=e.findIndex(e=>e.key===C.value),r=t<0?0:t+1;for(let t=0;t<e.length;t+=1){let i=e[(r+t)%e.length];if(n.isEmptyRenderValue(_.value[i.key])){J(i.key);return}}}function tt(e){let t=E.value.trim().toLocaleLowerCase();return!t||e.key.toLocaleLowerCase().includes(t)||(e.label??``).toLocaleLowerCase().includes(t)?D.value===`unfilled`?n.isEmptyRenderValue(_.value[e.key]):D.value===`error`?Ge(e.key).length>0:!0:!1}function nt(){E.value=``,D.value=`all`}function rt(e,t){let n=R.value;if(!n.length)return;let r=n.findIndex(t=>t.key===e),i=n[r<0?0:(r+t+n.length)%n.length]?.key;i&&(J(i),(0,s.nextTick)(()=>it(i)))}function it(e){(g.value?.querySelector(`[data-field-key="${$(e)}"]`))?.querySelector(`input:not([disabled]), textarea:not([disabled]), button:not([disabled])`)?.focus()}function at(e){if(e.key!==`Enter`||e.target instanceof HTMLTextAreaElement)return;let t=e.target;if(!(t instanceof Element))return;let n=t.closest(`[data-field-key]`)?.dataset.fieldKey;n&&(e.preventDefault(),rt(n,e.shiftKey?-1:1))}function ot(e){let t=new Set;if(typeof DOMParser<`u`)return new DOMParser().parseFromString(e,`text/html`).querySelectorAll(`[data-key]`).forEach(e=>{let n=e.getAttribute(`data-key`)?.trim();n&&t.add(n)}),t;let n=/\bdata-key\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s>]+))/gi,r;for(;r=n.exec(e);){let e=(r[1]??r[2]??r[3]??``).trim();e&&t.add(e)}return t}function st(){!p.collapsiblePanel||p.interactionMode!==`panel`||(O.value=!O.value)}function Q(e){let t=ft(e);return T.value=t,m(`update:zoom`,t),t}function ct(){return Q(1)}function lt(){return T.value}function ut(){let e=Math.max(...L.value.map(e=>e.width),1);return Q(Math.max(0,be.value-48)/e)}function dt(e){e&&(w.value=e,(0,s.nextTick)(()=>{h.value?.querySelector(`[data-render-page-id="${$(e)}"]`)?.scrollIntoView({behavior:`smooth`,block:`start`,inline:`center`})}))}function ft(e){let t=Number(e);return Number.isFinite(t)?Math.min(pe,Math.max(fe,Math.round(t*100)/100)):1}function $(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`)}function pt(e,t){let n=new Set([...Object.keys(e),...Object.keys(t)]);return Array.from(n).every(n=>e[n]===t[n])}function mt(e){!(e.ctrlKey||e.metaKey)||!z.value||(e.preventDefault(),Q(e.deltaY>0?T.value-d:T.value+d))}let ht;function gt(){ht?.removeEventListener(`wheel`,mt),ht=void 0}function _t(e){gt(),e&&(e.addEventListener(`wheel`,mt,{passive:!1}),ht=e)}return(0,s.watch)(h,e=>{_t(e)},{immediate:!0}),(0,s.onBeforeUnmount)(()=>{gt(),q(),A.forEach(e=>e.abort()),A.clear()}),he({getValues:Pe,setValues:Fe,validate:W,submit:Ie,resetValues:Le,scrollToVariable:J,setZoom:Q,resetZoom:ct,getZoom:lt,fitWidth:ut,scrollToPage:dt}),(e,t)=>((0,s.openBlock)(),(0,s.createElementBlock)(`section`,{ref_key:`rendererElement`,ref:ve,class:(0,s.normalizeClass)([`gd-contract-template-renderer`,{"is-disabled":f.disabled,"is-readonly":f.readonly,"is-panel":f.interactionMode===`panel`,"is-inline":f.interactionMode===`inline`}]),onClick:Me,onKeydown:Ne,onInput:je,onChange:je},[z.value?((0,s.openBlock)(),(0,s.createBlock)(i.default,{key:0,title:f.title,"filled-count":B.value,"total-count":I.value.length,"required-missing-count":V.value,zoom:T.value,pages:L.value,"active-page-id":w.value,"min-zoom":fe,"max-zoom":pe,"show-toolbar":f.showToolbar,"show-validate-button":f.showValidateButton,"show-reset-button":f.showResetButton,"show-submit-button":f.showSubmitButton,"show-panel-toggle":f.interactionMode===`panel`&&f.collapsiblePanel,"panel-collapsed":O.value,readonly:f.readonly,disabled:f.disabled,onZoomIn:t[0]||=e=>Q(T.value+d),onZoomOut:t[1]||=e=>Q(T.value-d),onResetZoom:ct,onFitWidth:ut,onSelectPage:dt,onValidate:W,onReset:Re,onSubmit:Ie,onTogglePanel:st},{extra:(0,s.withCtx)(()=>[(0,s.renderSlot)(e.$slots,`headerExtra`)]),_:3},8,[`title`,`filled-count`,`total-count`,`required-missing-count`,`zoom`,`pages`,`active-page-id`,`show-toolbar`,`show-validate-button`,`show-reset-button`,`show-submit-button`,`show-panel-toggle`,`panel-collapsed`,`readonly`,`disabled`])):(0,s.createCommentVNode)(``,!0),Ae.value?((0,s.openBlock)(),(0,s.createBlock)(o.default,{key:1,passed:Oe.value,summary:ke.value,errors:F.value,expanded:b.value,onToggle:t[2]||=e=>b.value=!b.value,onFocusError:We},null,8,[`passed`,`summary`,`errors`,`expanded`])):(0,s.createCommentVNode)(``,!0),z.value?((0,s.openBlock)(),(0,s.createElementBlock)(`div`,{key:3,class:(0,s.normalizeClass)([`gd-contract-template-renderer__workspace`,{"is-inline":f.interactionMode===`inline`}])},[(0,s.createElementVNode)(`div`,{ref_key:`pagesViewportElement`,ref:h,class:`gd-contract-template-renderer__pages-viewport`,"data-highlighted-variable-key":S.value},[(0,s.createElementVNode)(`div`,ne,[((0,s.openBlock)(!0),(0,s.createElementBlock)(s.Fragment,null,(0,s.renderList)(L.value,(e,t)=>((0,s.openBlock)(),(0,s.createBlock)(a.default,{key:e.id,page:e,index:t,total:L.value.length,zoom:T.value,"show-meta":f.showPageMeta},null,8,[`page`,`index`,`total`,`zoom`,`show-meta`]))),128))])],8,te),f.interactionMode===`panel`?((0,s.openBlock)(),(0,s.createElementBlock)(`div`,{key:0,class:(0,s.normalizeClass)([`gd-contract-template-renderer__panel-wrap`,{"is-collapsed":O.value&&f.collapsiblePanel}])},[f.collapsiblePanel?((0,s.openBlock)(),(0,s.createBlock)((0,s.unref)(c.Tooltip),{key:0,title:O.value?`展开填写面板`:`收起填写面板`},{default:(0,s.withCtx)(()=>[(0,s.createElementVNode)(`button`,{type:`button`,class:`gd-contract-template-renderer__panel-handle`,"aria-label":O.value?`展开填写面板`:`收起填写面板`,"aria-expanded":!O.value,onClick:t[3]||=e=>O.value=!O.value},[O.value?((0,s.openBlock)(),(0,s.createBlock)((0,s.unref)(u.LeftOutlined),{key:0,"aria-hidden":`true`})):((0,s.openBlock)(),(0,s.createBlock)((0,s.unref)(u.RightOutlined),{key:1,"aria-hidden":`true`}))],8,re)]),_:1},8,[`title`])):(0,s.createCommentVNode)(``,!0),(0,s.createElementVNode)(`div`,ie,[(0,s.createElementVNode)(`aside`,ae,[(0,s.createElementVNode)(`div`,oe,[(0,s.createElementVNode)(`div`,se,[(0,s.createElementVNode)(`div`,null,[t[6]||=(0,s.createElementVNode)(`strong`,null,`填写项`,-1),(0,s.createElementVNode)(`span`,null,(0,s.toDisplayString)(B.value)+` / `+(0,s.toDisplayString)(I.value.length)+` 已填写`,1)]),(0,s.createElementVNode)(`span`,null,(0,s.toDisplayString)(V.value?`${V.value} 项必填未完成`:`必填项已完成`),1)]),(0,s.createVNode)((0,s.unref)(c.Input),{value:E.value,"onUpdate:value":t[4]||=e=>E.value=e,"allow-clear":``,size:`small`,class:`gd-contract-template-renderer__field-search`,placeholder:`搜索字段名称或标识`},{prefix:(0,s.withCtx)(()=>[(0,s.createVNode)((0,s.unref)(u.SearchOutlined),{"aria-hidden":`true`})]),_:1},8,[`value`]),(0,s.createElementVNode)(`div`,ce,[(0,s.createVNode)((0,s.unref)(c.Segmented),{value:D.value,"onUpdate:value":t[5]||=e=>D.value=e,size:`small`,class:`gd-contract-template-renderer__field-filter`,options:_e},null,8,[`value`]),(0,s.createVNode)((0,s.unref)(c.Button),{size:`small`,disabled:!Ce.value,onClick:et},{default:(0,s.withCtx)(()=>[...t[7]||=[(0,s.createTextVNode)(` 下一个未填项 `,-1)]]),_:1},8,[`disabled`])]),(0,s.createVNode)((0,s.unref)(c.Progress),{percent:De.value,size:`small`,"show-info":!1},null,8,[`percent`])]),R.value.length?((0,s.openBlock)(),(0,s.createElementBlock)(`div`,{key:1,ref_key:`fieldListElement`,ref:g,class:`gd-contract-template-renderer__field-list`,onKeydownCapture:at},[((0,s.openBlock)(!0),(0,s.createElementBlock)(s.Fragment,null,(0,s.renderList)(Ee.value,t=>((0,s.openBlock)(),(0,s.createElementBlock)(`div`,{key:t.id,class:`gd-contract-template-renderer__field-group`},[(0,s.createElementVNode)(`div`,le,[(0,s.createElementVNode)(`strong`,null,(0,s.toDisplayString)(t.title),1),(0,s.createElementVNode)(`span`,null,(0,s.toDisplayString)(t.variables.length)+` / `+(0,s.toDisplayString)(t.totalCount)+` 项`,1)]),(0,s.createElementVNode)(`div`,ue,[((0,s.openBlock)(!0),(0,s.createElementBlock)(s.Fragment,null,(0,s.renderList)(t.variables,t=>((0,s.openBlock)(),(0,s.createElementBlock)(`div`,{key:t.id||t.key,"data-field-key":t.key},[(0,s.renderSlot)(e.$slots,`field`,(0,s.mergeProps)({ref_for:!0},$e(t)),()=>[(0,s.createVNode)(r.default,{variable:t,value:_.value[t.key],errors:Ge(t.key),active:C.value===t.key,readonly:f.readonly,disabled:f.disabled,options:X(t).options,loading:X(t).loading,"load-error":X(t).error,registration:Ke(t),"selector-http":f.selectorHttp,"selector-url-prefix":f.selectorUrlPrefix,onUpdateValue:e=>U(t.key,e),onFocusVariable:e=>J(t.key)},null,8,[`variable`,`value`,`errors`,`active`,`readonly`,`disabled`,`options`,`loading`,`load-error`,`registration`,`selector-http`,`selector-url-prefix`,`onUpdateValue`,`onFocusVariable`])])],8,de))),128))])]))),128))],544)):((0,s.openBlock)(),(0,s.createBlock)((0,s.unref)(c.Empty),{key:0,class:`gd-contract-template-renderer__field-empty`,description:I.value.length?`没有符合条件的填写项`:`暂无填写项`,image:(0,s.unref)(c.Empty).PRESENTED_IMAGE_SIMPLE},(0,s.createSlots)({default:(0,s.withCtx)(()=>[E.value||D.value!==`all`?((0,s.openBlock)(),(0,s.createBlock)((0,s.unref)(c.Button),{key:0,type:`link`,size:`small`,onClick:nt},{default:(0,s.withCtx)(()=>[...t[9]||=[(0,s.createTextVNode)(`清除筛选`,-1)]]),_:1})):(0,s.createCommentVNode)(``,!0)]),_:2},[E.value||D.value!==`all`?{name:`description`,fn:(0,s.withCtx)(()=>[t[8]||=(0,s.createElementVNode)(`span`,null,`没有符合条件的填写项`,-1)]),key:`0`}:void 0]),1032,[`description`,`image`]))])])],2)):(0,s.createCommentVNode)(``,!0)],2)):((0,s.openBlock)(),(0,s.createElementBlock)(`div`,ee,[(0,s.createVNode)((0,s.unref)(c.Empty),{description:`暂无可渲染的合同页面`,image:(0,s.unref)(c.Empty).PRESENTED_IMAGE_SIMPLE},null,8,[`image`])]))],34))}});exports.default=f;
|
|
1
|
+
require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`./types.cjs`),t=require(`./utils/advanced-controls.cjs`),n=require(`./utils/template-renderer.cjs`),r=require(`./ContractTemplateRendererField.cjs`),i=require(`./ContractTemplateRendererHeader.cjs`),a=require(`./ContractTemplateRendererPage.cjs`),o=require(`./ContractTemplateRendererValidation.cjs`);let s=require(`vue`),c=require(`ant-design-vue`),ee=require(`@vueuse/core`),l=require(`@ant-design/icons-vue`);var te={key:2,class:`gd-contract-template-renderer__empty`},ne=[`data-highlighted-variable-key`],re={class:`gd-contract-template-renderer__pages`},ie=[`aria-label`,`aria-expanded`],ae={class:`gd-contract-template-renderer__panel-clip`},oe={class:`gd-contract-template-renderer__panel`},se={class:`gd-contract-template-renderer__panel-head`},ce={class:`gd-contract-template-renderer__panel-head-row`},le={class:`gd-contract-template-renderer__panel-head-actions`},ue={class:`gd-contract-template-renderer__field-group-head`},de={class:`gd-contract-template-renderer__field-group-items`},fe=[`data-field-key`],pe=.5,me=1.5,u=.1,he=3e3,d=(0,s.defineComponent)({name:`ProContractTemplateRenderer`,__name:`ProContractTemplateRenderer`,props:{template:{default:void 0},values:{default:void 0},interactionMode:{default:`panel`},readonly:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},title:{default:`合同填写`},showSubmitButton:{type:Boolean,default:!0},validateOnSubmit:{type:Boolean,default:!0},showValidateButton:{type:Boolean,default:!0},showResetButton:{type:Boolean,default:!0},showToolbar:{type:Boolean,default:!0},showPageMeta:{type:Boolean,default:!0},collapsiblePanel:{type:Boolean,default:!0},zoom:{default:1},controlRegistry:{default:()=>({})},optionResolver:{type:Function,default:void 0},requester:{type:Function,default:void 0},allowedRemoteOrigins:{default:()=>[]},remoteRequestTimeoutMs:{default:1e4},remoteOptionsCacheTtlMs:{default:3e4},selectorHttp:{default:void 0},selectorUrlPrefix:{default:``},contractFontBaseUrl:{default:void 0}},emits:[`update:values`,`change`,`validate`,`submit`,`update:zoom`,`control-warning`],setup(d,{expose:ge,emit:_e}){let f=d,p=_e,ve=[{label:`全部`,value:`all`},{label:`未填写`,value:`unfilled`},{label:`有错误`,value:`error`}],ye=(0,s.ref)(),m=(0,s.ref)(),h=(0,s.ref)(),g=(0,s.ref)(n.normalizeRenderValues(f.template,f.values)),_=(0,s.ref)({...g.value}),v=(0,s.ref)(!1),y=(0,s.ref)([]),b=(0,s.ref)(!1),x=(0,s.ref)(!1),S=(0,s.ref)(``),C=(0,s.ref)(``),w=(0,s.ref)(``),be=(0,s.ref)(0),T=(0,s.ref)(mt(f.zoom)),E=(0,s.ref)(``),D=(0,s.ref)(`all`),O=(0,s.ref)(!1),k=(0,s.ref)(new Map),A=new Map,j=new Map,M=new Map,xe=new Set,{width:Se}=(0,ee.useElementSize)(m),Ce=(0,s.computed)(()=>f.readonly||f.disabled),N=(0,s.computed)(()=>n.validateTemplateRenderStructure(f.template)),P=(0,s.computed)(()=>v.value?y.value:N.value),F=(0,s.computed)(()=>(Array.isArray(f.template?.variables)?f.template.variables:[]).filter(t=>!!t?.key&&e.isContractTemplateFieldType(t.type??`text`))),we=(0,s.computed)(()=>{let e={...g.value};return F.value.forEach(n=>{let r=Y(n);if(r?.toDisplayText)try{e[n.key]=r.toDisplayText(e[n.key],{variable:n,config:t.normalizeContractTemplateJsonObject(n.componentConfig)})}catch{}}),e}),Te=(0,s.computed)(()=>F.value.filter(e=>n.isEmptyRenderValue(g.value[e.key])).length),Ee=(0,s.computed)(()=>{let e=new Map;return P.value.forEach(t=>{t.variableKey&&e.set(t.variableKey,[...e.get(t.variableKey)??[],t])}),e}),I=(0,s.computed)(()=>{let e=f.interactionMode===`panel`;return n.buildTemplateRenderPages(f.template,e?we.value:_.value,{readonly:f.readonly,disabled:f.disabled,mode:e?`display`:`control`})}),De=(0,s.computed)(()=>{let e=new Map,t=new Set(F.value.map(e=>e.key));return I.value.forEach(n=>{lt(n.contentHtml).forEach(r=>{t.has(r)&&!e.has(r)&&e.set(r,n.id)})}),e}),L=(0,s.computed)(()=>F.value.filter(it)),Oe=(0,s.computed)(()=>{let e=I.value.map((e,t)=>({id:`page:${e.id}`,pageId:e.id,title:`第 ${t+1} 页${e.title?` · ${e.title}`:``}`,allVariables:[],variables:[]})),t=new Map(e.map(e=>[e.pageId,e])),n={id:`unlocated`,title:`未定位字段`,allVariables:[],variables:[]};return F.value.forEach(e=>{let r=t.get(De.value.get(e.key)??``)??n;r.allVariables.push(e),it(e)&&r.variables.push(e)}),[...e,n].filter(e=>e.variables.length>0).map(e=>({id:e.id,title:e.title,totalCount:e.allVariables.length,variables:e.variables}))}),ke=(0,s.computed)(()=>I.value.length>0),Ae=(0,s.computed)(()=>F.value.filter(e=>!n.isEmptyRenderValue(g.value[e.key])).length),je=(0,s.computed)(()=>F.value.filter(e=>e.required&&n.isEmptyRenderValue(g.value[e.key])).length),Me=(0,s.computed)(()=>F.value.length?Math.round(Ae.value/F.value.length*100):0),Ne=(0,s.computed)(()=>v.value&&y.value.length===0),Pe=(0,s.computed)(()=>v.value?Ne.value?`校验通过,模板与填写值均符合规则`:`发现 ${y.value.length} 个模板或填写问题`:N.value.length?`模板存在 ${N.value.length} 个问题,已安全降级展示`:``),Fe=(0,s.computed)(()=>v.value?P.value.length>0||x.value:N.value.length>0);(0,s.watch)(()=>f.template,e=>{R(n.normalizeRenderValues(e,f.values),!1),H();let t=Array.isArray(e?.pages)?e.pages.map(e=>e?.id):[];t.includes(w.value)||(w.value=t.find(Boolean)??``),C.value&&!F.value.some(e=>e.key===C.value)&&qe()},{deep:!0}),(0,s.watch)(()=>[f.template?.variables,f.optionResolver,f.requester,f.allowedRemoteOrigins,f.remoteRequestTimeoutMs,f.remoteOptionsCacheTtlMs],()=>{Ze()},{deep:!0,immediate:!0}),(0,s.watch)(()=>f.values,e=>{let t=n.normalizeRenderValues(f.template,e);ht(t,g.value)||(R(t,!1,{refreshInlineHtml:f.interactionMode!==`inline`}),H())},{deep:!0}),(0,s.watch)(()=>f.interactionMode,e=>{e===`inline`&&(_.value={...g.value})}),(0,s.watch)(()=>f.collapsiblePanel,e=>{e||(O.value=!1)}),(0,s.watch)(()=>f.zoom,e=>T.value=mt(e)),(0,s.watch)(I,e=>{!w.value&&e.length&&(w.value=e[0].id)},{immediate:!0});function R(e,t=!0,n={}){g.value={...e},n.refreshInlineHtml!==!1&&(_.value={...e}),t&&(p(`update:values`,{...g.value}),p(`change`,{...g.value}))}function z(e,t){!e||Ce.value||(R({...g.value,[e]:t},!0,{refreshInlineHtml:f.interactionMode!==`inline`}),v.value&&V())}function Ie(e){if(f.interactionMode!==`inline`)return;let t=e.target;if(!(t instanceof HTMLInputElement)&&!(t instanceof HTMLTextAreaElement))return;let n=t.dataset.key||``;n&&(t instanceof HTMLInputElement&&t.type===`checkbox`?z(n,t.checked):t instanceof HTMLInputElement&&t.type===`number`?z(n,t.value===``?void 0:t.valueAsNumber):z(n,t.value))}function Le(e){let t=e.target;if(!(t instanceof Element))return;let n=t.closest(`[data-render-page-id]`);n?.dataset.renderPageId&&(w.value=n.dataset.renderPageId);let r=t.closest(`[data-contract-render-wrapper], [data-contract-render-control]`)?.dataset.key||``;r&&K(r)}function Re(e){let t=I.value.find(t=>t.id===e.pageId),n=F.value.some(t=>t.key===e.key);if(!(!t||!n||!lt(t.contentHtml).has(e.key))&&!(e.kind===`input`&&f.interactionMode!==`inline`)){if(w.value=e.pageId,e.kind===`input`){z(e.key,e.value);return}K(e.key)}}function ze(e){if(e.key!==`Enter`&&e.key!==` `)return;let t=e.target;!(t instanceof HTMLElement)||!t.dataset.key||(e.preventDefault(),K(t.dataset.key))}function B(){return{...g.value}}function Be(e){R(n.normalizeRenderValues(f.template,e))}function V(){let e=n.validateTemplateRenderValues(f.template,g.value);return We(e),p(`validate`,e),e}function Ve(){let e=n.resolveTemplateRenderSubmitErrors(f.template,g.value,f.validateOnSubmit);if((f.validateOnSubmit||e.length)&&(We(e),p(`validate`,e)),e.length)return Ye(e[0]),!1;let t=B();return p(`submit`,t),t}function He(){return R(n.buildInitialRenderValues(f.template)),H(),B()}function Ue(){Ce.value||c.Modal.confirm({title:`重置填写内容?`,content:`将恢复模板中的默认值,当前未提交的填写内容会被覆盖。`,okText:`确认重置`,cancelText:`取消`,onOk:()=>He()})}function H(){v.value=!1,y.value=[],b.value=!1,x.value=!1,W()}function We(e){if(y.value=e,v.value=!0,b.value=!1,e.length){x.value=!1,W();return}Ge()}let U;function W(){U&&=(clearTimeout(U),void 0)}function Ge(){W(),x.value=!0,U=setTimeout(()=>{x.value=!1,U=void 0},he)}function G(e){K(e,!0)}function Ke(e){f.interactionMode===`panel`&&(O.value&&=!1,F.value.some(t=>t.key===e)&&!L.value.some(t=>t.key===e)&&at())}function K(e,t=!1){if(!e)return;Ke(e),C.value=e,S.value=e;let n=De.value.get(e);n&&(w.value=n),t&&(be.value+=1),(0,s.nextTick)(()=>{Je(e);let r=n?m.value?.querySelector(`[data-render-page-id="${$(n)}"]`):void 0;t&&r?.scrollIntoView({behavior:`smooth`,block:`center`,inline:`center`}),f.interactionMode===`panel`&&h.value?.querySelector(`[data-field-key="${$(e)}"]`)?.scrollIntoView({behavior:`smooth`,block:`nearest`})})}function qe(){C.value=``,S.value=``,Je(``)}function Je(e){m.value?.querySelectorAll(`[data-contract-render-wrapper], [data-contract-render-control]`).forEach(t=>t.classList.toggle(`is-active`,!!e&&t.dataset.key===e))}function Ye(e){e.variableKey?G(e.variableKey):e.pageId&&Q(e.pageId)}function q(e){return Ee.value.get(e)??[]}function J(e){return k.value.get(e.key)??{options:e.options??[],loading:!1}}function Y(e){let t=e.componentKey||e.type||``;return t?f.controlRegistry?.[t]:void 0}function X(e,t){let n=new Map(k.value);n.set(e,t),k.value=n}function Xe(e){p(`control-warning`,e)}async function Ze(){A.forEach(e=>e.abort()),A.clear(),j.clear(),xe.clear();let e=Array.isArray(f.template?.variables)?f.template.variables:[];await Promise.all(e.map(async e=>{if(!e?.key)return;let t=Array.isArray(e.options)?e.options.map(e=>({...e})):[];if(e.dataSource?await Qe(e,t):X(e.key,{options:t,loading:!1}),e.type===`custom`&&!Y(e)){let t=e.componentKey||``,n=`${e.key}:${t}`;xe.has(n)||(xe.add(n),Xe({code:`CONTROL_COMPONENT_MISSING`,variableKey:e.key,componentKey:t,message:`${e.label||e.key} 未注册自定义控件 ${t||`(空)`}`}))}}))}async function Qe(e,n){let r=e.dataSource;if(!r)return;let i=new AbortController;A.set(e.key,i),X(e.key,{options:n,loading:!0});let a=$e(e),o=Date.now(),s=j.get(a);if(s&&s.expiresAt>o){X(e.key,{options:s.options,loading:!1}),A.delete(e.key);return}let c=`CONTROL_OPTIONS_LOAD_FAILED`;try{r.kind===`url`&&!t.isAllowedContractTemplateRemoteUrl(r.url,f.allowedRemoteOrigins)&&(c=`CONTROL_REMOTE_URL_BLOCKED`);let o=M.get(a);o||(o=et(e,r,c,i),M.set(a,o),o.finally(()=>{M.get(a)===o&&M.delete(a)}).catch(()=>void 0));let s=await o;if(i.signal.aborted)return;let ee=Math.max(0,Number(f.remoteOptionsCacheTtlMs)||0);ee>0&&j.set(a,{options:s,expiresAt:Date.now()+ee}),X(e.key,{options:s.length?s:n,loading:!1})}catch(t){let r=t instanceof Error&&t.message.startsWith(`高级控件请求超时`);if(i.signal.aborted&&!r)return;let a=t instanceof Error?t.message:`高级控件选项加载失败`;X(e.key,{options:n,loading:!1,error:a}),Xe({code:c,variableKey:e.key,message:`${e.label||e.key}:${a}`,cause:t})}finally{A.get(e.key)===i&&A.delete(e.key)}}function $e(e){try{return JSON.stringify([e.type,e.dataSource])}catch{return`${e.key}:${e.type}`}}async function et(e,n,r,i){let a;if(n.kind===`resolver`){if(!f.optionResolver)throw Error(`缺少 resolver ${n.resolverKey} 的宿主实现`);a=await f.optionResolver({resolverKey:n.resolverKey,params:n.params,variable:e,signal:i.signal})}else{if(!t.isAllowedContractTemplateRemoteUrl(n.url,f.allowedRemoteOrigins))throw Error(`远程地址未在 allowlist 中:${n.url}`);if(!f.requester)throw Error(`缺少宿主 requester,组件库不会直接发起网络请求`);let r=t.normalizeContractTemplateRequestTimeout(n.timeoutMs,f.remoteRequestTimeoutMs);a=await tt(f.requester({url:n.url,method:n.method||`GET`,params:n.params,headers:n.headers,timeoutMs:r,signal:i.signal,variable:e}),i,r)}return t.normalizeContractTemplateControlOptions(a,n.kind===`url`?n:void 0,e.type||`select`)}function tt(e,t,n){return new Promise((r,i)=>{let a=()=>{clearTimeout(c),t.signal.removeEventListener(`abort`,s)},o=e=>{a(),e()},s=()=>o(()=>i(Error(`高级控件请求已取消`))),c=setTimeout(()=>{o(()=>i(Error(`高级控件请求超时(${n}ms)`))),t.abort()},n);t.signal.addEventListener(`abort`,s,{once:!0}),e.then(e=>o(()=>r(e)),e=>o(()=>i(e)))})}function nt(e){let t=J(e);return{variable:e,value:g.value[e.key],errors:q(e.key),active:C.value===e.key,readonly:f.readonly,disabled:f.disabled,options:t.options,loading:t.loading,loadError:t.error,updateValue:t=>z(e.key,t),focusVariable:()=>G(e.key)}}function rt(){let e=F.value;if(!e.length)return;let t=e.findIndex(e=>e.key===C.value),r=t<0?0:t+1;for(let t=0;t<e.length;t+=1){let i=e[(r+t)%e.length];if(n.isEmptyRenderValue(g.value[i.key])){G(i.key);return}}}function it(e){let t=E.value.trim().toLocaleLowerCase();return!t||e.key.toLocaleLowerCase().includes(t)||(e.label??``).toLocaleLowerCase().includes(t)?D.value===`unfilled`?n.isEmptyRenderValue(g.value[e.key]):D.value===`error`?q(e.key).length>0:!0:!1}function at(){E.value=``,D.value=`all`}function ot(e,t){let n=L.value;if(!n.length)return;let r=n.findIndex(t=>t.key===e),i=n[r<0?0:(r+t+n.length)%n.length]?.key;i&&(G(i),(0,s.nextTick)(()=>st(i)))}function st(e){(h.value?.querySelector(`[data-field-key="${$(e)}"]`))?.querySelector(`input:not([disabled]), textarea:not([disabled]), button:not([disabled])`)?.focus()}function ct(e){if(e.key!==`Enter`||e.target instanceof HTMLTextAreaElement)return;let t=e.target;if(!(t instanceof Element))return;let n=t.closest(`[data-field-key]`)?.dataset.fieldKey;n&&(e.preventDefault(),ot(n,e.shiftKey?-1:1))}function lt(e){let t=new Set;if(typeof DOMParser<`u`)return new DOMParser().parseFromString(e,`text/html`).querySelectorAll(`[data-key]`).forEach(e=>{let n=e.getAttribute(`data-key`)?.trim();n&&t.add(n)}),t;let n=/\bdata-key\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s>]+))/gi,r;for(;r=n.exec(e);){let e=(r[1]??r[2]??r[3]??``).trim();e&&t.add(e)}return t}function ut(){!f.collapsiblePanel||f.interactionMode!==`panel`||(O.value=!O.value)}function Z(e){let t=mt(e);return T.value=t,p(`update:zoom`,t),t}function dt(){return Z(1)}function ft(){return T.value}function pt(){let e=Math.max(...I.value.map(e=>e.width),1);return Z(Math.max(0,Se.value-48)/e)}function Q(e){e&&(w.value=e,(0,s.nextTick)(()=>{m.value?.querySelector(`[data-render-page-id="${$(e)}"]`)?.scrollIntoView({behavior:`smooth`,block:`start`,inline:`center`})}))}function mt(e){let t=Number(e);return Number.isFinite(t)?Math.min(me,Math.max(pe,Math.round(t*100)/100)):1}function $(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`)}function ht(e,t){let n=new Set([...Object.keys(e),...Object.keys(t)]);return Array.from(n).every(n=>e[n]===t[n])}function gt(e){!(e.ctrlKey||e.metaKey)||!ke.value||(e.preventDefault(),Z(e.deltaY>0?T.value-u:T.value+u))}let _t;function vt(){_t?.removeEventListener(`wheel`,gt),_t=void 0}function yt(e){vt(),e&&(e.addEventListener(`wheel`,gt,{passive:!1}),_t=e)}return(0,s.watch)(m,e=>{yt(e)},{immediate:!0}),(0,s.onBeforeUnmount)(()=>{vt(),W(),A.forEach(e=>e.abort()),A.clear()}),ge({getValues:B,setValues:Be,validate:V,submit:Ve,resetValues:He,scrollToVariable:G,setZoom:Z,resetZoom:dt,getZoom:ft,fitWidth:pt,scrollToPage:Q}),(e,t)=>((0,s.openBlock)(),(0,s.createElementBlock)(`section`,{ref_key:`rendererElement`,ref:ye,class:(0,s.normalizeClass)([`gd-contract-template-renderer`,{"is-disabled":d.disabled,"is-readonly":d.readonly,"is-panel":d.interactionMode===`panel`,"is-inline":d.interactionMode===`inline`}]),onClick:Le,onKeydown:ze,onInput:Ie,onChange:Ie},[ke.value?((0,s.openBlock)(),(0,s.createBlock)(i.default,{key:0,title:d.title,"filled-count":Ae.value,"total-count":F.value.length,"required-missing-count":je.value,zoom:T.value,pages:I.value,"active-page-id":w.value,"min-zoom":pe,"max-zoom":me,"show-toolbar":d.showToolbar,"show-validate-button":d.showValidateButton,"show-reset-button":d.showResetButton,"show-submit-button":d.showSubmitButton,"show-panel-toggle":d.interactionMode===`panel`&&d.collapsiblePanel,"panel-collapsed":O.value,readonly:d.readonly,disabled:d.disabled,onZoomIn:t[0]||=e=>Z(T.value+u),onZoomOut:t[1]||=e=>Z(T.value-u),onResetZoom:dt,onFitWidth:pt,onSelectPage:Q,onValidate:V,onReset:Ue,onSubmit:Ve,onTogglePanel:ut},{extra:(0,s.withCtx)(()=>[(0,s.renderSlot)(e.$slots,`headerExtra`)]),_:3},8,[`title`,`filled-count`,`total-count`,`required-missing-count`,`zoom`,`pages`,`active-page-id`,`show-toolbar`,`show-validate-button`,`show-reset-button`,`show-submit-button`,`show-panel-toggle`,`panel-collapsed`,`readonly`,`disabled`])):(0,s.createCommentVNode)(``,!0),Fe.value?((0,s.openBlock)(),(0,s.createBlock)(o.default,{key:1,passed:Ne.value,summary:Pe.value,errors:P.value,expanded:b.value,onToggle:t[2]||=e=>b.value=!b.value,onFocusError:Ye},null,8,[`passed`,`summary`,`errors`,`expanded`])):(0,s.createCommentVNode)(``,!0),ke.value?((0,s.openBlock)(),(0,s.createElementBlock)(`div`,{key:3,class:(0,s.normalizeClass)([`gd-contract-template-renderer__workspace`,{"is-inline":d.interactionMode===`inline`}])},[(0,s.createElementVNode)(`div`,{ref_key:`pagesViewportElement`,ref:m,class:`gd-contract-template-renderer__pages-viewport`,"data-highlighted-variable-key":S.value},[(0,s.createElementVNode)(`div`,re,[((0,s.openBlock)(!0),(0,s.createElementBlock)(s.Fragment,null,(0,s.renderList)(I.value,(e,t)=>((0,s.openBlock)(),(0,s.createBlock)(a.default,{key:e.id,page:e,index:t,total:I.value.length,zoom:T.value,"show-meta":d.showPageMeta,"font-base-url":d.contractFontBaseUrl,"active-key":S.value,"scroll-request":be.value,onInteraction:Re},null,8,[`page`,`index`,`total`,`zoom`,`show-meta`,`font-base-url`,`active-key`,`scroll-request`]))),128))])],8,ne),d.interactionMode===`panel`?((0,s.openBlock)(),(0,s.createElementBlock)(`div`,{key:0,class:(0,s.normalizeClass)([`gd-contract-template-renderer__panel-wrap`,{"is-collapsed":O.value&&d.collapsiblePanel}])},[d.collapsiblePanel?((0,s.openBlock)(),(0,s.createBlock)((0,s.unref)(c.Tooltip),{key:0,title:O.value?`展开填写面板`:`收起填写面板`},{default:(0,s.withCtx)(()=>[(0,s.createElementVNode)(`button`,{type:`button`,class:`gd-contract-template-renderer__panel-handle`,"aria-label":O.value?`展开填写面板`:`收起填写面板`,"aria-expanded":!O.value,onClick:t[3]||=e=>O.value=!O.value},[O.value?((0,s.openBlock)(),(0,s.createBlock)((0,s.unref)(l.LeftOutlined),{key:0,"aria-hidden":`true`})):((0,s.openBlock)(),(0,s.createBlock)((0,s.unref)(l.RightOutlined),{key:1,"aria-hidden":`true`}))],8,ie)]),_:1},8,[`title`])):(0,s.createCommentVNode)(``,!0),(0,s.createElementVNode)(`div`,ae,[(0,s.createElementVNode)(`aside`,oe,[(0,s.createElementVNode)(`div`,se,[(0,s.createElementVNode)(`div`,ce,[(0,s.createElementVNode)(`div`,null,[t[6]||=(0,s.createElementVNode)(`strong`,null,`填写项`,-1),(0,s.createElementVNode)(`span`,null,(0,s.toDisplayString)(Ae.value)+` / `+(0,s.toDisplayString)(F.value.length)+` 已填写`,1)]),(0,s.createElementVNode)(`span`,null,(0,s.toDisplayString)(je.value?`${je.value} 项必填未完成`:`必填项已完成`),1)]),(0,s.createVNode)((0,s.unref)(c.Input),{value:E.value,"onUpdate:value":t[4]||=e=>E.value=e,"allow-clear":``,size:`small`,class:`gd-contract-template-renderer__field-search`,placeholder:`搜索字段名称或标识`},{prefix:(0,s.withCtx)(()=>[(0,s.createVNode)((0,s.unref)(l.SearchOutlined),{"aria-hidden":`true`})]),_:1},8,[`value`]),(0,s.createElementVNode)(`div`,le,[(0,s.createVNode)((0,s.unref)(c.Segmented),{value:D.value,"onUpdate:value":t[5]||=e=>D.value=e,size:`small`,class:`gd-contract-template-renderer__field-filter`,options:ve},null,8,[`value`]),(0,s.createVNode)((0,s.unref)(c.Button),{size:`small`,disabled:!Te.value,onClick:rt},{default:(0,s.withCtx)(()=>[...t[7]||=[(0,s.createTextVNode)(` 下一个未填项 `,-1)]]),_:1},8,[`disabled`])]),(0,s.createVNode)((0,s.unref)(c.Progress),{percent:Me.value,size:`small`,"show-info":!1},null,8,[`percent`])]),L.value.length?((0,s.openBlock)(),(0,s.createElementBlock)(`div`,{key:1,ref_key:`fieldListElement`,ref:h,class:`gd-contract-template-renderer__field-list`,onKeydownCapture:ct},[((0,s.openBlock)(!0),(0,s.createElementBlock)(s.Fragment,null,(0,s.renderList)(Oe.value,t=>((0,s.openBlock)(),(0,s.createElementBlock)(`div`,{key:t.id,class:`gd-contract-template-renderer__field-group`},[(0,s.createElementVNode)(`div`,ue,[(0,s.createElementVNode)(`strong`,null,(0,s.toDisplayString)(t.title),1),(0,s.createElementVNode)(`span`,null,(0,s.toDisplayString)(t.variables.length)+` / `+(0,s.toDisplayString)(t.totalCount)+` 项`,1)]),(0,s.createElementVNode)(`div`,de,[((0,s.openBlock)(!0),(0,s.createElementBlock)(s.Fragment,null,(0,s.renderList)(t.variables,t=>((0,s.openBlock)(),(0,s.createElementBlock)(`div`,{key:t.id||t.key,"data-field-key":t.key},[(0,s.renderSlot)(e.$slots,`field`,(0,s.mergeProps)({ref_for:!0},nt(t)),()=>[(0,s.createVNode)(r.default,{variable:t,value:g.value[t.key],errors:q(t.key),active:C.value===t.key,readonly:d.readonly,disabled:d.disabled,options:J(t).options,loading:J(t).loading,"load-error":J(t).error,registration:Y(t),"selector-http":d.selectorHttp,"selector-url-prefix":d.selectorUrlPrefix,onUpdateValue:e=>z(t.key,e),onFocusVariable:e=>G(t.key)},null,8,[`variable`,`value`,`errors`,`active`,`readonly`,`disabled`,`options`,`loading`,`load-error`,`registration`,`selector-http`,`selector-url-prefix`,`onUpdateValue`,`onFocusVariable`])])],8,fe))),128))])]))),128))],544)):((0,s.openBlock)(),(0,s.createBlock)((0,s.unref)(c.Empty),{key:0,class:`gd-contract-template-renderer__field-empty`,description:F.value.length?`没有符合条件的填写项`:`暂无填写项`,image:(0,s.unref)(c.Empty).PRESENTED_IMAGE_SIMPLE},(0,s.createSlots)({default:(0,s.withCtx)(()=>[E.value||D.value!==`all`?((0,s.openBlock)(),(0,s.createBlock)((0,s.unref)(c.Button),{key:0,type:`link`,size:`small`,onClick:at},{default:(0,s.withCtx)(()=>[...t[9]||=[(0,s.createTextVNode)(`清除筛选`,-1)]]),_:1})):(0,s.createCommentVNode)(``,!0)]),_:2},[E.value||D.value!==`all`?{name:`description`,fn:(0,s.withCtx)(()=>[t[8]||=(0,s.createElementVNode)(`span`,null,`没有符合条件的填写项`,-1)]),key:`0`}:void 0]),1032,[`description`,`image`]))])])],2)):(0,s.createCommentVNode)(``,!0)],2)):((0,s.openBlock)(),(0,s.createElementBlock)(`div`,te,[(0,s.createVNode)((0,s.unref)(c.Empty),{description:`暂无可渲染的合同页面`,image:(0,s.unref)(c.Empty).PRESENTED_IMAGE_SIMPLE},null,8,[`image`])]))],34))}});exports.default=d;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
require(`../../../_virtual/_rolldown/runtime.cjs`);let e=require(`@guodun/contract-print-css`);var t=e.CONTRACT_PRINT_FONT_FAMILY,n=[{label:`合同宋体`,value:t},{label:`文档黑体`,value:e.CONTRACT_PRINT_SANS_FONT_FAMILY}],r=[12,14,16,18,20,24,28,32],i=[{label:`左对齐`,value:`left`},{label:`居中对齐`,value:`center`},{label:`右对齐`,value:`right`}],a=[{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 o(e){return a.find(t=>t.format===e)}var s=[{key:`contractTitle`,label:`合同标题`,headingLevel:1,fontSize:26,fontFamily:t,textAlign:`center`,bold:!0,italic:!1,underline:!1},{key:`clauseTitle`,label:`条款标题`,headingLevel:2,fontSize:18,fontFamily:t,textAlign:`left`,bold:!0,italic:!1,underline:!1},{key:`bodyClause`,label:`正文条款`,paragraph:!0,fontSize:14,fontFamily:t,textAlign:`left`,bold:!1,italic:!1,underline:!1},{key:`appendixTitle`,label:`附件标题`,headingLevel:2,fontSize:20,fontFamily:t,textAlign:`center`,bold:!0,italic:!1,underline:!1}];function c(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 l=Object.fromEntries(s.map(e=>[e.key,c(e)]));function u(e){return s.find(t=>t.key===e)}function d(e){return(l[e]??[]).map(e=>({...e}))}function f(e){return String(e||``).replace(/["']/g,``).replace(/\s*,\s*/g,`,`).trim().toLowerCase()}function p(e,t=`append`){let r=t===`replace`?e??n:[...n,...e??[]],i=new Map;return r.forEach(e=>{e?.value&&i.set(f(e.value),e)}),Array.from(i.values())}exports.CONTRACT_BLOCK_STYLES=a,exports.CONTRACT_TEXT_STYLE_PRESETS=s,exports.CONTRACT_TEXT_STYLE_PRESET_COMMANDS=l,exports.DEFAULT_CONTRACT_FONT_FAMILY=t,exports.DEFAULT_FONT_FAMILY_OPTIONS=n,exports.DEFAULT_FONT_SIZE_PRESETS=r,exports.DEFAULT_TEXT_ALIGN_OPTIONS=i,exports.getContractBlockStyle=o,exports.getContractTextStylePreset=u,exports.normalizeFontFamilyValue=f,exports.resolveContractTextStylePresetCommands=d,exports.resolveFontFamilyOptions=p;
|
package/dist/lib/components/pro-contract-template-designer/src/extensions/template-variable.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../../../_virtual/_rolldown/runtime.cjs`)
|
|
1
|
+
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../constants.cjs`),t=require(`../utils/template-variable-render.cjs`),n=require(`../utils/advanced-controls.cjs`);let r=require(`@tiptap/core`);function i(e,t,n=``){return{default:n,parseHTML:e=>e.getAttribute(t)??n,renderHTML:n=>({[t]:n[e]})}}function a(e,t,n){return{default:n,parseHTML:e=>Number(e.getAttribute(t)||n),renderHTML:n=>({[t]:n[e]})}}function o(e,t){return{default:!1,parseHTML:e=>e.getAttribute(t)===`true`,renderHTML:n=>({[t]:String(!!n[e])})}}function s(e,t,r){return{default:r,parseHTML:e=>n.decodeContractTemplateJsonAttribute(e.getAttribute(t))??r,renderHTML:r=>r[e]===void 0||r[e]===null?{}:{[t]:n.encodeContractTemplateJsonAttribute(r[e])}}}var c=r.Node.create({name:`templateVariable`,group:`inline`,inline:!0,atom:!0,selectable:!0,draggable:!0,addAttributes(){return{key:i(`key`,`data-key`),label:{default:``,parseHTML:e=>e.getAttribute(`data-label`)??e.textContent??``,renderHTML:e=>({"data-label":e.label})},type:i(`type`,`data-variable-type`,`text`),placeholder:i(`placeholder`,`data-placeholder`),width:a(`width`,`data-width`,160),height:a(`height`,`data-height`,32),required:o(`required`,`data-required`),defaultValue:i(`defaultValue`,`data-default-value`),format:i(`format`,`data-format`),precision:{default:void 0,parseHTML:e=>{let t=e.getAttribute(`data-precision`);return t?Number(t):void 0},renderHTML:e=>e.precision===void 0?{}:{"data-precision":e.precision}},useGrouping:{default:void 0,parseHTML:e=>{let t=e.getAttribute(`data-use-grouping`);return t?t===`true`:void 0},renderHTML:e=>e.useGrouping===void 0?{}:{"data-use-grouping":String(!!e.useGrouping)}},checkedText:i(`checkedText`,`data-checked-text`),uncheckedText:i(`uncheckedText`,`data-unchecked-text`),options:s(`options`,`data-control-options`,[]),dataSource:s(`dataSource`,`data-control-source`,void 0),multiple:o(`multiple`,`data-multiple`),componentKey:i(`componentKey`,`data-component-key`),componentConfig:s(`componentConfig`,`data-component-config`,{}),multiline:o(`multiline`,`data-multiline`),rows:a(`rows`,`data-rows`,3),lineHeight:a(`lineHeight`,`data-line-height`,28),border:o(`border`,`data-border`),underline:o(`underline`,`data-underline`),color:i(`color`,`data-color`,`#1f2937`),background:i(`background`,`data-background`,`transparent`),fontSize:a(`fontSize`,`data-font-size`,14),fontFamily:{default:``,parseHTML:e=>e.getAttribute(`data-font-family`)??``,renderHTML:e=>e.fontFamily?{"data-font-family":e.fontFamily}:{}},placeholderColor:i(`placeholderColor`,`data-placeholder-color`,`#7a818b`),lineColor:i(`lineColor`,`data-line-color`,`#565b66`),textAlign:i(`textAlign`,`data-text-align`,`left`),borderStyle:i(`borderStyle`,`data-border-style`,`solid`),objectFit:i(`objectFit`,`data-object-fit`,`contain`)}},parseHTML(){return[{tag:`span[data-template-variable]`}]},renderHTML({HTMLAttributes:e}){let n=e[`data-border`]??e.border,i=e[`data-precision`]??e.precision,a=i===void 0||i===``?void 0:Number(i),o=e[`data-use-grouping`]??e.useGrouping,s=o===void 0||o===``?void 0:o===!0||o===`true`,c=t.resolveTemplateVariablePresentation({type:String(e[`data-variable-type`]||e.type||`text`),width:e[`data-width`]||e.width||160,height:e[`data-height`]||e.height||32,border:n===!0||n===`true`,underline:e[`data-underline`]===`true`||e.underline===!0,color:String(e[`data-color`]||e.color||`#1f2937`),background:String(e[`data-background`]||e.background||`transparent`),fontSize:e[`data-font-size`]||e.fontSize||14,fontFamily:String(e[`data-font-family`]||e.fontFamily||``),placeholder:String(e[`data-placeholder`]||e.placeholder||``),defaultValue:String(e[`data-default-value`]||e.defaultValue||``),format:String(e[`data-format`]||e.format||``),precision:a,useGrouping:s,checkedText:String(e[`data-checked-text`]||e.checkedText||``),uncheckedText:String(e[`data-unchecked-text`]||e.uncheckedText||``),multiline:e[`data-multiline`]===`true`||e.multiline===!0,rows:e[`data-rows`]||e.rows||3,lineHeight:e[`data-line-height`]||e.lineHeight||28,placeholderColor:String(e[`data-placeholder-color`]||e.placeholderColor||`#7a818b`),lineColor:String(e[`data-line-color`]||e.lineColor||`#565b66`),textAlign:String(e[`data-text-align`]||e.textAlign||`left`),borderStyle:String(e[`data-border-style`]||e.borderStyle||`solid`),objectFit:String(e[`data-object-fit`]||e.objectFit||`contain`)});return[`span`,(0,r.mergeAttributes)(e,{"data-template-variable":`true`,"data-variable-type":c.type,"data-width":String(c.width),"data-height":String(c.height),"data-border":String(c.border),"data-underline":String(c.underline),"data-multiline":String(e[`data-multiline`]===`true`||e.multiline===!0),"data-rows":String(Math.max(1,Number(e[`data-rows`]||e.rows||3))),"data-line-height":String(Math.max(18,Number(e[`data-line-height`]||e.lineHeight||28))),"data-color":c.color,"data-background":c.background,"data-font-size":String(c.fontSize),"data-font-family":c.fontFamily,"data-placeholder-color":c.placeholderColor,"data-line-color":c.lineColor,"data-text-align":c.textAlign,"data-border-style":c.borderStyle,"data-object-fit":c.objectFit,class:c.classes.join(` `),style:c.styleText}),c.type===`image`&&c.hasDefaultValue?` `:c.displayText||` `]}});function l(t){return{key:t.key,label:t.label,type:t.type??`text`,placeholder:t.placeholder||``,width:t.width??160,height:t.height??32,required:!!t.required,defaultValue:t.defaultValue||``,format:t.format||``,precision:t.precision,useGrouping:t.useGrouping,checkedText:t.checkedText||``,uncheckedText:t.uncheckedText||``,options:t.options?.map(e=>({...e}))??[],dataSource:t.dataSource?{...t.dataSource}:void 0,multiple:!!t.multiple,componentKey:t.componentKey||``,componentConfig:t.componentConfig?{...t.componentConfig}:{},multiline:!!t.multiline,rows:Math.max(1,Math.round(t.rows??3)),lineHeight:Math.max(18,Math.round(t.lineHeight??28)),border:t.style?.border??t.type===`image`,underline:t.style?.underline??(t.type!==`image`&&t.type!==`checkbox`),color:t.style?.color||`#1f2937`,background:t.style?.background||`transparent`,fontSize:t.style?.fontSize??14,fontFamily:t.style?.fontFamily||e.DEFAULT_CONTRACT_FONT_FAMILY,placeholderColor:t.style?.placeholderColor||`#7a818b`,lineColor:t.style?.lineColor||`#565b66`,textAlign:t.style?.textAlign||`left`,borderStyle:t.style?.borderStyle||`solid`,objectFit:t.style?.objectFit||`contain`}}function u(e,t,n){if(!e)return!1;let r={type:`templateVariable`,attrs:l(t)},i=e.chain().focus();return typeof n==`number`?i.insertContentAt(n,r).run():i.insertContent(r).run()}exports.TemplateVariable=c,exports.buildTemplateVariableAttrs=l,exports.insertTemplateVariableNode=u;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../utils/html.cjs`),t=require(`../utils/word-paste.cjs`);let n=require(`@tiptap/core`),r=require(`@tiptap/pm/state`);var i=0,a=`application/x-gd-contract-template`,o=`contract-template-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`,s=new r.PluginKey(`contractWordPasteAsyncRange`),c=n.Extension.create({name:`wordPaste`,priority:200,addOptions(){return{}},addStorage(){return{}},transformPastedHTML(e){let n=this.storage.pending,r=t.normalizeWordClipboardHtml(e,{plainText:n?.plainText,rtf:n?.rtf,trustedInternal:n?.trustedInternal});return n&&(n.source=r.source,n.recoveredRtfImages=r.recoveredImageCount),r.html},addProseMirrorPlugins(){let n=this.editor,c=this.storage,
|
|
1
|
+
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../utils/html.cjs`),t=require(`../utils/word-paste.cjs`);let n=require(`@tiptap/core`),r=require(`@tiptap/pm/state`);var i=0,a=`application/x-gd-contract-template`,o=`contract-template-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`,s=new r.PluginKey(`contractWordPasteAsyncRange`),c=n.Extension.create({name:`wordPaste`,priority:200,addOptions(){return{}},addStorage(){return{lastReplacedFontFamilies:[]}},transformPastedHTML(e){let n=this.storage.pending,r=t.normalizeWordClipboardHtml(e,{plainText:n?.plainText,rtf:n?.rtf,trustedInternal:n?.trustedInternal});return n&&(n.source=r.source,n.recoveredRtfImages=r.recoveredImageCount),l(this.editor,this.storage,r.replacedFontFamilies),r.html},addProseMirrorPlugins(){let n=this.editor,c=this.storage,h=this.options.processImageFile;return[new r.Plugin({key:s,state:{init:()=>new Map,apply:(e,t)=>{let n=e.getMeta(s);if(!n&&(!e.docChanged||!t.size))return t;let r=new Map(t);if(n?.type===`set`?r.set(n.token,{token:n.token,from:n.from,to:n.to}):n?.type===`clear`&&r.delete(n.token),!e.docChanged||!r.size)return r;for(let[t,n]of Array.from(r.entries())){let i=n.from===n.to,a=e.mapping.mapResult(n.from,1),o=e.mapping.mapResult(n.to,i?1:-1);a.deletedAcross||o.deletedAcross||a.pos>o.pos?r.delete(t):r.set(t,{token:t,from:a.pos,to:o.pos})}return r}},props:{handleDOMEvents:{copy:(e,t)=>u(e,t,!1),cut:(e,t)=>u(e,t,!0),paste:(e,n)=>{let r=n.clipboardData;if(!r)return!1;let i=r.getData(`text/html`),s={html:i,plainText:r.getData(`text/plain`),rtf:r.getData(`text/rtf`)||r.getData(`application/rtf`),files:p(r),source:t.detectClipboardHtmlSource(i),recoveredRtfImages:0,trustedInternal:r.getData(a)===o||i.includes(`data-gd-contract-copy="${o}"`)||i.includes(`data-gd-contract-copy='${o}'`)};return c.pending=s,queueMicrotask(()=>{c.pending===s&&(c.pending=void 0)}),!1}},handlePaste:(r,a)=>{let o=c.pending;if(!o)return!1;let u=o.files.length?o.files:p(a.clipboardData),g=o.recoveredRtfImages||m(o.rtf),_=u.length>0&&g===0&&!o.trustedInternal;if(c.pending=void 0,!_)return!1;a.preventDefault();let v=`word-paste-${++i}`,y={token:v,from:r.state.selection.from,to:r.state.selection.to};return r.dispatch(r.state.tr.setMeta(s,{type:`set`,...y}).setMeta(`addToHistory`,!1)),t.readClipboardImageFiles(u,h).then(r=>{if(n.isDestroyed)return;let i=s.getState(n.state)?.get(v);if(!i)return;let a=r.filter(e=>!!e),u=o.html?t.normalizeWordClipboardHtml(o.html,{plainText:o.plainText,rtf:o.rtf,clipboardImages:r,preferClipboardImages:!0,trustedInternal:o.trustedInternal}):void 0,d=u?.html||(a.length?`<p>${a.map(t=>`<img src="${e.escapeHtmlAttribute(t)}" alt="">`).join(``)}</p>`:t.plainTextToSafeHtml(o.plainText));u&&l(n,c,u.replacedFontFamilies),f(n,i,d||t.plainTextToSafeHtml(o.plainText))}).catch(()=>{if(n.isDestroyed)return;let e=s.getState(n.state)?.get(v);e?f(n,e,t.plainTextToSafeHtml(o.plainText)):d(n,v)}),!0}}})]}});function l(e,t,n){t.lastReplacedFontFamilies=n,n.length&&e.emit(`contract-word-paste`,{replacedFontFamilies:n})}function u(e,t,n){if(e.state.selection.empty||!t.clipboardData)return!1;let{dom:r,text:i}=e.serializeForClipboard(e.state.selection.content());r.firstElementChild?.setAttribute(`data-gd-contract-copy`,o),t.preventDefault(),t.clipboardData.clearData(),t.clipboardData.setData(`text/html`,r.innerHTML),t.clipboardData.setData(`text/plain`,i);try{t.clipboardData.setData(a,o)}catch{}return n&&e.dispatch(e.state.tr.deleteSelection().scrollIntoView().setMeta(`uiEvent`,`cut`)),!0}function d(e,t){e.isDestroyed||e.view.dispatch(e.state.tr.setMeta(s,{type:`clear`,token:t}).setMeta(`addToHistory`,!1))}function f(e,t,n){e.chain().insertContentAt({from:t.from,to:t.to},n,{updateSelection:!1}).command(({tr:e})=>(e.setMeta(s,{type:`clear`,token:t.token}),e.setMeta(`paste`,!0),e.setMeta(`uiEvent`,`paste`),!0)).run()||d(e,t.token)}function p(e){if(!e)return[];let t=[];for(let n of Array.from(e.items)){if(n.kind!==`file`||!n.type.toLowerCase().startsWith(`image/`))continue;let e=n.getAsFile();e&&t.push(e)}if(!t.length)for(let n of Array.from(e.files))n.type.toLowerCase().startsWith(`image/`)&&t.push(n);return t}function m(e){return t.extractRtfImageDataUrls(e).length}exports.WordPaste=c;
|
package/dist/lib/components/pro-contract-template-designer/src/utils/contract-print-document.cjs
ADDED
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
require(`../../../../_virtual/_rolldown/runtime.cjs`);let e=require(`vue`),t=require(`@guodun/contract-print-css`);var n=`gd-contract-print`,r=.5,i=`合同签署位置:甲方(Company A)编号 2026-08-31。`,a=t.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=(0,e.shallowRef)(``);function g(e){h.value=(e?.baseUrl?.trim()??``).replace(/\/+$/,``)}function _(e){let t=e?.trim();return t?t.replace(/\/+$/,``):h.value.trim().replace(/\/+$/,``)}function v(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 y(e){let a=`gd-contract-print-${e.messageId}`,o=(0,t.buildContractPrintCss)({width:e.width,height:e.height,pages:[{id:e.pageId,pageSize:{width:e.width,height:e.height}}]}),s=JSON.stringify({messageId:e.messageId,parentOrigin:e.parentOrigin,pageId:e.pageId,pageHeight:e.height,timeoutMs:t.CONTRACT_PRINT_FONT_TIMEOUT_MS,fontFamily:t.CONTRACT_PRINT_FONT_FAMILY,sansFontFamily:t.CONTRACT_PRINT_SANS_FONT_FAMILY,latinFontFamily:`"GD Contract Latin", serif`,metricNormalizeCss:t.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:${e.width}px;min-height:${e.height}px;padding-top:${e.paddingTop}px;padding-bottom:${e.paddingBottom}px`;return`<!doctype html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
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-${x(a)}'">
|
|
7
|
+
<style data-contract-render-style="true">
|
|
8
|
+
${b(o)}
|
|
9
|
+
</style>
|
|
10
|
+
</head>
|
|
11
|
+
<body>
|
|
12
|
+
<section class="${x(e.classNames)}" data-page-id="${x(e.pageId)}" data-page-format="${x(e.pageFormat??`Custom`)}" data-page-width="${e.width}" data-page-height="${e.height}" style="${c}">
|
|
13
|
+
${e.decorationsHtml}
|
|
14
|
+
<div class="gd-contract-template-page__content">${e.contentHtml}</div>
|
|
15
|
+
</section>
|
|
16
|
+
<script nonce="${x(a)}">
|
|
17
|
+
(() => {
|
|
18
|
+
'use strict'
|
|
19
|
+
const config = ${s}
|
|
20
|
+
const namespace = ${JSON.stringify(n)}
|
|
21
|
+
const page = document.querySelector('.gd-contract-template-page')
|
|
22
|
+
let ready = false
|
|
23
|
+
let observer
|
|
24
|
+
|
|
25
|
+
const post = (type, payload = {}) => {
|
|
26
|
+
if (!config.parentOrigin)
|
|
27
|
+
return
|
|
28
|
+
parent.postMessage({ namespace, messageId: config.messageId, type, ...payload }, config.parentOrigin)
|
|
29
|
+
}
|
|
30
|
+
const getControl = (target) => target instanceof Element
|
|
31
|
+
? target.closest('[data-contract-render-wrapper], [data-contract-render-control]')
|
|
32
|
+
: null
|
|
33
|
+
const postSelection = (target) => {
|
|
34
|
+
const control = getControl(target)
|
|
35
|
+
const key = control?.getAttribute('data-key') || ''
|
|
36
|
+
if (key)
|
|
37
|
+
post('interaction', { interaction: { kind: 'select', key, pageId: config.pageId } })
|
|
38
|
+
}
|
|
39
|
+
addEventListener('click', event => postSelection(event.target))
|
|
40
|
+
addEventListener('focusin', event => postSelection(event.target))
|
|
41
|
+
addEventListener('keydown', (event) => {
|
|
42
|
+
if (event.key !== 'Enter' && event.key !== ' ')
|
|
43
|
+
return
|
|
44
|
+
if (event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement)
|
|
45
|
+
return
|
|
46
|
+
const key = event.target instanceof HTMLElement ? event.target.getAttribute('data-key') || '' : ''
|
|
47
|
+
if (!key)
|
|
48
|
+
return
|
|
49
|
+
event.preventDefault()
|
|
50
|
+
post('interaction', { interaction: { kind: 'select', key, pageId: config.pageId } })
|
|
51
|
+
})
|
|
52
|
+
const postInput = (event) => {
|
|
53
|
+
const target = event.target
|
|
54
|
+
if (!(target instanceof HTMLInputElement) && !(target instanceof HTMLTextAreaElement))
|
|
55
|
+
return
|
|
56
|
+
const key = target.getAttribute('data-key') || ''
|
|
57
|
+
if (!key)
|
|
58
|
+
return
|
|
59
|
+
let value = target.value
|
|
60
|
+
if (target instanceof HTMLInputElement && target.type === 'checkbox')
|
|
61
|
+
value = target.checked
|
|
62
|
+
else if (target instanceof HTMLInputElement && target.type === 'number')
|
|
63
|
+
value = target.value === '' ? undefined : target.valueAsNumber
|
|
64
|
+
post('interaction', { interaction: { kind: 'input', key, pageId: config.pageId, value } })
|
|
65
|
+
}
|
|
66
|
+
addEventListener('input', postInput)
|
|
67
|
+
addEventListener('change', postInput)
|
|
68
|
+
addEventListener('message', (event) => {
|
|
69
|
+
const message = event.data
|
|
70
|
+
if (event.source !== parent
|
|
71
|
+
|| event.origin !== config.parentOrigin
|
|
72
|
+
|| !message
|
|
73
|
+
|| message.namespace !== namespace
|
|
74
|
+
|| message.messageId !== config.messageId
|
|
75
|
+
|| message.type !== 'command'
|
|
76
|
+
|| message.command?.kind !== 'highlight'
|
|
77
|
+
|| typeof message.command.key !== 'string'
|
|
78
|
+
|| typeof message.command.scroll !== 'boolean')
|
|
79
|
+
return
|
|
80
|
+
const key = message.command.key
|
|
81
|
+
const controls = document.querySelectorAll('[data-contract-render-wrapper], [data-contract-render-control]')
|
|
82
|
+
let firstMatch
|
|
83
|
+
controls.forEach((control) => {
|
|
84
|
+
const active = Boolean(key) && control.getAttribute('data-key') === key
|
|
85
|
+
control.classList.toggle('is-active', active)
|
|
86
|
+
if (active && !firstMatch)
|
|
87
|
+
firstMatch = control
|
|
88
|
+
})
|
|
89
|
+
if (message.command.scroll)
|
|
90
|
+
firstMatch?.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'center' })
|
|
91
|
+
})
|
|
92
|
+
const measure = () => {
|
|
93
|
+
if (!page)
|
|
94
|
+
throw new Error('合同打印页节点不存在')
|
|
95
|
+
const probeStyle = 'position:absolute;visibility:hidden;white-space:nowrap;' + config.metricNormalizeCss + ';'
|
|
96
|
+
const fontProbe = document.createElement('span')
|
|
97
|
+
fontProbe.textContent = config.sample
|
|
98
|
+
fontProbe.style.cssText = probeStyle + 'font:400 16px/28px ' + config.fontFamily
|
|
99
|
+
const sansFontProbe = document.createElement('span')
|
|
100
|
+
sansFontProbe.textContent = config.sample
|
|
101
|
+
sansFontProbe.style.cssText = probeStyle + 'font:400 16px/28px ' + config.sansFontFamily
|
|
102
|
+
const hanziProbe = document.createElement('span')
|
|
103
|
+
hanziProbe.textContent = config.hanziSample
|
|
104
|
+
hanziProbe.style.cssText = probeStyle + 'font:400 16px/28px ' + config.fontFamily
|
|
105
|
+
const punctProbe = document.createElement('span')
|
|
106
|
+
punctProbe.textContent = config.punctSample
|
|
107
|
+
punctProbe.style.cssText = probeStyle + 'font:400 16px/28px ' + config.fontFamily
|
|
108
|
+
const digitProbe = document.createElement('span')
|
|
109
|
+
digitProbe.textContent = config.digitSample
|
|
110
|
+
digitProbe.style.cssText = probeStyle + 'font:400 16px/28px ' + config.latinFontFamily
|
|
111
|
+
const rowProbe = document.createElement('p')
|
|
112
|
+
rowProbe.style.cssText = 'position:absolute;visibility:hidden;width:320px;margin:0;' + config.metricNormalizeCss + ';font:400 16px/28px ' + config.fontFamily
|
|
113
|
+
rowProbe.innerHTML = '甲方:<span class="gd-contract-template-variable" style="--gd-contract-variable-width:96px">变量ABC123</span>,合同编号 2026。'
|
|
114
|
+
document.body.append(fontProbe, sansFontProbe, hanziProbe, punctProbe, digitProbe, rowProbe)
|
|
115
|
+
const pageStyle = getComputedStyle(page)
|
|
116
|
+
const pageTop = page.getBoundingClientRect().top
|
|
117
|
+
const probeOffsets = {}
|
|
118
|
+
page.querySelectorAll('[data-probe]').forEach((probe) => {
|
|
119
|
+
const key = probe.getAttribute('data-probe')
|
|
120
|
+
if (key)
|
|
121
|
+
probeOffsets[key] = probe.getBoundingClientRect().top - pageTop
|
|
122
|
+
})
|
|
123
|
+
const content = page.querySelector('.gd-contract-template-page__content')
|
|
124
|
+
const blocks = content
|
|
125
|
+
? Array.from(content.children).map((block) => {
|
|
126
|
+
const rect = block.getBoundingClientRect()
|
|
127
|
+
const lineHeight = Number.parseFloat(getComputedStyle(block).lineHeight) || 28
|
|
128
|
+
return {
|
|
129
|
+
text: (block.textContent || '').replace(/\\s+/gu, ' ').trim().slice(0, 14),
|
|
130
|
+
top: Math.round((rect.top - pageTop) * 100) / 100,
|
|
131
|
+
lineCount: Math.round(rect.height / lineHeight),
|
|
132
|
+
}
|
|
133
|
+
})
|
|
134
|
+
: []
|
|
135
|
+
const metrics = {
|
|
136
|
+
pageWidth: page.offsetWidth,
|
|
137
|
+
pageHeight: page.offsetHeight,
|
|
138
|
+
contentHeight: page.scrollHeight,
|
|
139
|
+
overflowHeight: Math.max(0, page.scrollHeight - config.pageHeight),
|
|
140
|
+
paddingTop: Number.parseFloat(pageStyle.paddingTop),
|
|
141
|
+
paddingBottom: Number.parseFloat(pageStyle.paddingBottom),
|
|
142
|
+
paddingLeft: Number.parseFloat(pageStyle.paddingLeft),
|
|
143
|
+
paddingRight: Number.parseFloat(pageStyle.paddingRight),
|
|
144
|
+
fontSize: Number.parseFloat(pageStyle.fontSize),
|
|
145
|
+
lineHeight: Number.parseFloat(pageStyle.lineHeight),
|
|
146
|
+
fontFamily: pageStyle.fontFamily,
|
|
147
|
+
textWidth: fontProbe.getBoundingClientRect().width,
|
|
148
|
+
sansTextWidth: sansFontProbe.getBoundingClientRect().width,
|
|
149
|
+
hanziWidth: hanziProbe.getBoundingClientRect().width,
|
|
150
|
+
punctWidth: punctProbe.getBoundingClientRect().width,
|
|
151
|
+
digitWidth: digitProbe.getBoundingClientRect().width,
|
|
152
|
+
variableRowHeight: rowProbe.getBoundingClientRect().height,
|
|
153
|
+
probeOffsets,
|
|
154
|
+
blocks,
|
|
155
|
+
}
|
|
156
|
+
fontProbe.remove()
|
|
157
|
+
sansFontProbe.remove()
|
|
158
|
+
hanziProbe.remove()
|
|
159
|
+
punctProbe.remove()
|
|
160
|
+
digitProbe.remove()
|
|
161
|
+
rowProbe.remove()
|
|
162
|
+
return metrics
|
|
163
|
+
}
|
|
164
|
+
const assertAdvance = (label, actual, expected) => {
|
|
165
|
+
if (!Number.isFinite(actual) || Math.abs(actual - expected) > config.tolerance)
|
|
166
|
+
throw new Error('合同排版度量不一致:' + label + ' expected=' + expected + ' actual=' + actual + ' tolerance=' + config.tolerance)
|
|
167
|
+
}
|
|
168
|
+
const assertMetrics = (metrics) => {
|
|
169
|
+
assertAdvance('hanziWidth', metrics.hanziWidth, config.hanziSample.length * config.hanziAdvance)
|
|
170
|
+
assertAdvance('punctWidth', metrics.punctWidth, config.punctSample.length * config.punctAdvance)
|
|
171
|
+
assertAdvance('digitWidth', metrics.digitWidth, config.digitSample.length * config.digitAdvance)
|
|
172
|
+
for (const key of ['textWidth', 'sansTextWidth', 'variableRowHeight']) {
|
|
173
|
+
const expected = Number(config.baseline[key])
|
|
174
|
+
const actual = Number(metrics[key])
|
|
175
|
+
if (!(expected > 0) || !Number.isFinite(actual) || Math.abs(actual - expected) > config.tolerance)
|
|
176
|
+
throw new Error('合同排版度量不一致:' + key + ' expected=' + expected + ' actual=' + actual + ' tolerance=' + config.tolerance)
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
const withTimeout = (promise) => Promise.race([
|
|
180
|
+
promise,
|
|
181
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('合同排版度量校验超时(' + config.timeoutMs + 'ms)')), config.timeoutMs)),
|
|
182
|
+
])
|
|
183
|
+
const start = async () => {
|
|
184
|
+
if (document.fonts)
|
|
185
|
+
await withTimeout(document.fonts.ready)
|
|
186
|
+
const metrics = measure()
|
|
187
|
+
assertMetrics(metrics)
|
|
188
|
+
ready = true
|
|
189
|
+
post('ready', { metrics })
|
|
190
|
+
observer = new ResizeObserver(() => {
|
|
191
|
+
if (!ready)
|
|
192
|
+
return
|
|
193
|
+
try {
|
|
194
|
+
post('metrics', { metrics: measure() })
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
ready = false
|
|
198
|
+
observer?.disconnect()
|
|
199
|
+
post('error', { error: error instanceof Error ? error.message : String(error) })
|
|
200
|
+
}
|
|
201
|
+
})
|
|
202
|
+
observer.observe(page)
|
|
203
|
+
}
|
|
204
|
+
start().catch((error) => {
|
|
205
|
+
post('error', { error: error instanceof Error ? error.message : String(error) })
|
|
206
|
+
})
|
|
207
|
+
addEventListener('pagehide', () => observer?.disconnect(), { once: true })
|
|
208
|
+
})()
|
|
209
|
+
<\/script>
|
|
210
|
+
</body>
|
|
211
|
+
</html>`}function b(e){return e.replace(/<\/style/gi,`<\\/style`)}function x(e){return String(e).replace(/&/g,`&`).replace(/"/g,`"`).replace(/</g,`<`).replace(/>/g,`>`)}function S(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`?C(t.interaction):w(t.metrics):!1}function C(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 w(e){if(!e||typeof e!=`object`)return!1;let t=e;if(![`pageWidth`,`pageHeight`,`contentHeight`,`overflowHeight`,`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_MESSAGE_NAMESPACE=n,exports.buildContractPrintDocument=y,exports.configureContractPrintFonts=g,exports.isContractPrintFrameMessage=S,exports.resolveContractFontBaseUrl=_,exports.subscribeContractPrintFrameMessages=c,exports.toAbsoluteContractFontBaseUrl=v,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(`../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;
|
package/dist/lib/components/pro-contract-template-designer/src/utils/template-variable-render.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../constants.cjs`);function
|
|
1
|
+
const e=require(`../constants.cjs`);function t(t){let r=t.type===void 0?`text`:String(t.type),i=Math.max(24,o(t.width,160)),s=Math.max(24,o(t.height,32)),c=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,o(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,o(t.rows,3)),x=Math.max(18,o(t.lineHeight,28)),S=b*x,C=v===`fill`?`100% 100%`:v,w=g===`right`?`flex-end`:g===`center`?`center`:`flex-start`,T=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||``}),D=T.trim().length>0,O=!D&&E.trim().length>0,k=r===`checkbox`&&a(T),A=r===`image`&&D?`;--gd-contract-variable-image:url('${T.replaceAll(`'`,`%27`)}')`:``;return{type:r,width:i,height:s,border:c,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}`,c?`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:${s}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=e.defaultValue||``,o=e.placeholder||``;return t===`checkbox`?n?a(n)?e.checkedText||o:e.uncheckedText||o:o:n?t===`date`?r(n,e.format||``):t===`number`?i(n,{format:e.format||``,precision:e.precision,useGrouping:e.useGrouping}):t===`image`?o:n:o}function r(e,t){if(!t)return e;let n=/^(\d{4})[-/年](\d{1,2})[-/月](\d{1,2})/.exec(e);if(!n)return e;let[,r,i,a]=n;return t.replace(`YYYY`,r).replace(`MM`,i.padStart(2,`0`)).replace(`DD`,a.padStart(2,`0`))}function i(e,t){let n=Number(e);if(!Number.isFinite(n))return e;let r=n.toLocaleString(`zh-CN`,{useGrouping:t.useGrouping!==!1,minimumFractionDigits:t.precision,maximumFractionDigits:t.precision});return t.format===`currency`?`¥${r}`:r}function a(e){return[`1`,`true`,`yes`,`checked`,`是`,`已选`].includes(e.trim().toLowerCase())}function o(e,t){if(e==null||e===``)return t;let n=Number(e);return Number.isFinite(n)?n:t}exports.resolveTemplateVariablePresentation=t;
|