@guodun/antdv 1.7.3 → 1.7.4
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 +313 -308
- package/dist/es/components/pro-contract-template-designer/src/ContractTemplateSingleRenderer.mjs +5 -0
- package/dist/es/components/pro-contract-template-designer/src/ContractTemplateSingleRenderer.vue.mjs +796 -0
- package/dist/es/components/pro-contract-template-designer/src/DesignerPage.vue.mjs +16 -5
- package/dist/es/components/pro-contract-template-designer/src/ProContractTemplateDesigner.vue.mjs +3 -1
- package/dist/es/components/pro-contract-template-designer/src/ProContractTemplateRenderer.vue.mjs +123 -710
- package/dist/es/components/pro-contract-template-designer/src/composables/use-renderer-files.mjs +80 -0
- package/dist/es/components/pro-contract-template-designer/src/composables/use-template-designer.mjs +172 -134
- package/dist/es/components/pro-contract-template-designer/src/composables/use-toolbar-overflow.mjs +11 -9
- package/dist/es/components/pro-contract-template-designer/src/utils/template-renderer.mjs +136 -76
- package/dist/es/components/pro-contract-template-designer/src/utils/toolbar-overflow.mjs +10 -9
- package/dist/es/components/pro-contract-template-designer/style/index.css +1 -1
- package/dist/lib/components/contract-signing-location/src/ContractSigningLocation.vue.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateSingleRenderer.cjs +1 -0
- package/dist/lib/components/pro-contract-template-designer/src/ContractTemplateSingleRenderer.vue.cjs +1 -0
- package/dist/lib/components/pro-contract-template-designer/src/DesignerPage.vue.cjs +2 -2
- package/dist/lib/components/pro-contract-template-designer/src/ProContractTemplateDesigner.vue.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/src/ProContractTemplateRenderer.vue.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/src/composables/use-renderer-files.cjs +1 -0
- package/dist/lib/components/pro-contract-template-designer/src/composables/use-template-designer.cjs +4 -4
- package/dist/lib/components/pro-contract-template-designer/src/composables/use-toolbar-overflow.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/src/utils/template-renderer.cjs +3 -3
- package/dist/lib/components/pro-contract-template-designer/src/utils/toolbar-overflow.cjs +1 -1
- package/dist/lib/components/pro-contract-template-designer/style/index.css +1 -1
- package/dist/theme/icon.css +1 -1
- package/dist/theme/index.css +1 -1
- package/dist/types/components/pro-contract-template-designer/src/ContractTemplateSingleRenderer.vue.d.ts +89 -0
- package/dist/types/components/pro-contract-template-designer/src/DesignerPage.vue.d.ts +2 -0
- package/dist/types/components/pro-contract-template-designer/src/ProContractTemplateRenderer.vue.d.ts +388 -10
- package/dist/types/components/pro-contract-template-designer/src/composables/use-renderer-files.d.ts +14 -0
- package/dist/types/components/pro-contract-template-designer/src/composables/use-template-designer.d.ts +9 -2
- package/dist/types/components/pro-contract-template-designer/src/types.d.ts +16 -2
- package/dist/types/components/pro-contract-template-designer/src/utils/template-renderer.d.ts +3 -3
- package/dist/types/components/pro-contract-template-designer/src/utils/toolbar-overflow.d.ts +2 -0
- package/package.json +4 -4
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`),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
|
+
require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`./utils/template-renderer.cjs`),t=require(`./utils/file-tabs.cjs`),n=require(`./ContractTemplateSingleRenderer.cjs`),r=require(`./composables/use-renderer-files.cjs`);let i=require(`vue`);var a={class:`gd-contract-template-renderer__files`,"aria-label":`合同文件`},o={class:`gd-contract-template-renderer__file-tabs`,role:`tablist`,"aria-label":`合同文件列表`},s=[`data-renderer-file-id`,`aria-selected`,`tabindex`,`disabled`,`onClick`,`onKeydown`],c=(0,i.defineComponent)({name:`ProContractTemplateRenderer`,__name:`ProContractTemplateRenderer`,props:{files:{},activeFileId:{},valuesByFile:{},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:activeFileId`,`update:valuesByFile`,`update:values`,`change`,`validate`,`submit`,`update:zoom`,`control-warning`],setup(c,{expose:l,emit:u}){let d=c,f=u,p=(0,i.ref)(),{enabled:m,files:h,activeId:g,activeFile:_,values:v,fileErrors:y,select:b,update:x,getAllValues:S,validateAll:C}=r.useRendererFiles(d,e=>f(`update:activeFileId`,e),e=>f(`update:valuesByFile`,e));function w(e){m.value?x(e):f(`update:values`,e)}function T(e){f(`validate`,m.value?e.map(e=>({...e,fileId:g.value||void 0})):e)}function E(){let t=p.value?.validate()??e.validateTemplateRenderValues(d.template,d.values??{});return m.value?t.map(e=>({...e,fileId:g.value||void 0})):t}function D(){if(!m.value)return E();let e=C();f(`validate`,e);let t=e[0];return t?.fileId&&h.value.some(e=>e.id===t.fileId)&&!d.disabled?(b(t.fileId),(0,i.nextTick)(()=>{g.value===t.fileId&&(p.value?.showValidation(e.filter(e=>e.fileId===g.value)),p.value?.focusError(t))})):p.value?.showValidation(e.filter(e=>!e.fileId||e.fileId===g.value)),e}function O(e,n){if(d.disabled)return;let r=t.resolveContractTemplateFileTabTargetIndex(n,e.key,h.value.length),a=r===void 0?void 0:h.value[r];a&&(e.preventDefault(),b(a.id),(0,i.nextTick)(()=>{let e=(p.value?.$el)?.querySelectorAll(`[data-renderer-file-id]`)??[];Array.from(e).find(e=>e.dataset.rendererFileId===a.id)?.focus()}))}return l({getAllValues:S,validateAll:D,getValues:()=>p.value?.getValues()??{},setValues:e=>{(!m.value||!d.disabled)&&p.value?.setValues(e)},resetValues:()=>m.value&&d.disabled?p.value?.getValues()??{}:p.value?.resetValues()??{},validate:E,submit:()=>p.value?.submit()??!1,scrollToVariable:e=>p.value?.scrollToVariable(e),scrollToPage:e=>p.value?.scrollToPage(e),setZoom:e=>p.value?.setZoom(e)??1,resetZoom:()=>p.value?.resetZoom()??1,getZoom:()=>p.value?.getZoom()??1,fitWidth:()=>p.value?.fitWidth()??1}),(e,t)=>((0,i.openBlock)(),(0,i.createBlock)(n.default,(0,i.mergeProps)({key:(0,i.unref)(m)?`file:${(0,i.unref)(g)}`:`single`,ref_key:`renderer`,ref:p},d,{class:{"is-multi-file":(0,i.unref)(m)},template:(0,i.unref)(m)?(0,i.unref)(_)?.template:c.template,values:(0,i.unref)(m)?(0,i.unref)(v)[(0,i.unref)(g)]:d.values,"onUpdate:values":w,onChange:t[0]||=e=>f(`change`,e),onValidate:T,onSubmit:t[1]||=e=>f(`submit`,e),"onUpdate:zoom":t[2]||=e=>f(`update:zoom`,e),onControlWarning:t[3]||=e=>f(`control-warning`,e)}),(0,i.createSlots)({_:2},[(0,i.unref)(m)?{name:`fileBar`,fn:(0,i.withCtx)(()=>[(0,i.createElementVNode)(`nav`,a,[(0,i.createElementVNode)(`div`,o,[((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)((0,i.unref)(h),(e,t)=>((0,i.openBlock)(),(0,i.createElementBlock)(`button`,{key:e.id,type:`button`,role:`tab`,class:`gd-contract-template-renderer__file-tab`,"data-renderer-file-id":e.id,"aria-selected":(0,i.unref)(g)===e.id,tabindex:(0,i.unref)(g)===e.id?0:-1,disabled:c.disabled,onClick:t=>(0,i.unref)(b)(e.id),onKeydown:e=>O(e,t)},(0,i.toDisplayString)(e.name||e.id),41,s))),128))]),((0,i.openBlock)(!0),(0,i.createElementBlock)(i.Fragment,null,(0,i.renderList)((0,i.unref)(y),e=>((0,i.openBlock)(),(0,i.createElementBlock)(`p`,{key:e.id,class:`gd-contract-template-renderer__file-error`,role:`alert`},(0,i.toDisplayString)(e.message),1))),128))])]),key:`0`}:void 0,e.$slots.field?{name:`field`,fn:(0,i.withCtx)(t=>[(0,i.renderSlot)(e.$slots,`field`,(0,i.normalizeProps)((0,i.guardReactiveProps)(t)))]),key:`1`}:void 0,e.$slots.headerExtra?{name:`headerExtra`,fn:(0,i.withCtx)(()=>[(0,i.renderSlot)(e.$slots,`headerExtra`)]),key:`2`}:void 0]),1040,[`class`,`template`,`values`]))}});exports.default=c;
|
package/dist/lib/components/pro-contract-template-designer/src/composables/use-renderer-files.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../utils/template-renderer.cjs`),t=require(`./use-template-files.cjs`);let n=require(`vue`),r=require(`lodash-es`);function i(i,a,o){let s=(0,n.computed)(()=>i.files!==void 0),c=(0,n.computed)(()=>{let e=[],t=[];if(!s.value)return{files:t,errors:e};if(!Array.isArray(i.files)||!i.files.length)return e.push({type:`page`,id:`files`,code:`FILES_EMPTY`,message:`缺少可填写的合同文件`}),{files:t,errors:e};let n=new Map;return i.files.forEach(e=>n.set(e?.id,(n.get(e?.id)??0)+1)),i.files.forEach((r,i)=>{let a=r?.id;typeof a!=`string`||!a.trim()||a!==a.trim()||n.get(a)>1?e.push({type:`page`,id:`file:${i}`,fileId:typeof a==`string`&&a?a:void 0,code:`FILE_ID_INVALID`,message:`第 ${i+1} 份文件的 id 缺失、含首尾空格或重复`}):t.push(r)}),{files:t,errors:e}}),l=(0,n.computed)(()=>c.value.files),u=(0,n.ref)(``),d=(0,n.ref)({}),f=(0,n.computed)(()=>l.value.find(e=>e.id===u.value));(0,n.watch)(l,t=>{d.value=Object.fromEntries(t.map(t=>[t.id,(0,r.cloneDeep)(e.normalizeRenderValues(t.template,Object.hasOwn(d.value,t.id)?d.value[t.id]:i.valuesByFile?.[t.id]))]))},{deep:!0,immediate:!0}),(0,n.watch)(()=>i.valuesByFile,t=>{d.value=Object.fromEntries(l.value.map(n=>[n.id,(0,r.cloneDeep)(e.normalizeRenderValues(n.template,t?.[n.id]))]))},{deep:!0}),(0,n.watch)([l,()=>i.activeFileId],()=>{let e=t.resolveContractTemplateActiveFileId(l.value,i.activeFileId??u.value);e!==u.value&&(u.value=e,a(e))},{immediate:!0});function p(e){i.disabled||e===u.value||!l.value.some(t=>t.id===e)||(u.value=e,a(e))}function m(){return(0,r.cloneDeep)(d.value)}function h(e){!f.value||i.disabled||(d.value={...d.value,[u.value]:(0,r.cloneDeep)(e)},o(m()))}function g(){return[...c.value.errors,...l.value.flatMap(t=>e.validateTemplateRenderValues(t.template,d.value[t.id]??{}).map(e=>({...e,fileId:t.id})))]}return{enabled:s,files:l,activeId:u,activeFile:f,values:d,fileErrors:(0,n.computed)(()=>c.value.errors),select:p,update:h,getAllValues:m,validateAll:g}}exports.useRendererFiles=i;
|
package/dist/lib/components/pro-contract-template-designer/src/composables/use-template-designer.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const e=require(`../constants.cjs`),t=require(`../utils/html.cjs`),n=require(`../utils/template-variable-render.cjs`),r=require(`../utils/page-decorations.cjs`),i=require(`../types.cjs`),a=require(`../utils/advanced-controls.cjs`);var o=[{format:`A0`,width:3178,height:4493,label:`A0`},{format:`A1`,width:2245,height:3178,label:`A1`},{format:`A2`,width:1587,height:2245,label:`A2`},{format:`A3`,width:1123,height:1587,label:`A3`},{format:`A4`,width:794,height:1123,label:`A4`},{format:`A5`,width:559,height:794,label:`A5`},{format:`Letter`,width:816,height:1056,label:`Letter`},{format:`Legal`,width:816,height:1344,label:`Legal`}],s={...o[4]},c={color:`#1f2937`,background:`transparent`,fontSize:14,fontFamily:e.DEFAULT_CONTRACT_FONT_FAMILY,placeholderColor:`#7a818b`,lineColor:`#565b66`,textAlign:`left`,borderStyle:`solid`,objectFit:`contain`},ee=3,
|
|
2
|
-
`)}function
|
|
3
|
-
`)}function
|
|
4
|
-
`)}function R(e){let t=new Map(e.variables.map(e=>[e.key,e]));return e.pages.map(e=>({page:{...e,...e.pageSize?{pageSize:{...e.pageSize}}:{}},contentHtml:fe(e.contentHtml,t)}))}var z=class extends Error{constructor(e){super(e[0]?.message||`页面装饰配置无效`),this.errors=e,this.name=`ContractTemplatePageDecorationValidationError`}};function se(e){let t=r.validatePageDecorations(e.pageDecorations,e.variables);if(t.length)throw new z(t);let n=S(e);return n.pageDecorations&&=r.normalizePageDecorations(n.pageDecorations),{...n,rendererVersion:u,styleVersion:d,html:L(n)}}function ce(e,t={}){let n=[],i=new Set;typeof t.maxPages==`number`&&e.pages.length>t.maxPages&&n.push({type:`page`,id:e.pages[t.maxPages]?.id??e.pages.at(-1)?.id??``,pageId:e.pages[t.maxPages]?.id,code:`PAGE_LIMIT_EXCEEDED`,message:`合同共 ${e.pages.length} 页,超过最多 ${t.maxPages} 页限制`}),e.variables.forEach(t=>{let r=m(t.key,e.variables,t.id),a=!!t.key?.trim()&&e.variables.some(e=>e.id!==t.id&&e.key.trim()===t.key.trim());r&&(!a||t.key!==t.key.trim())&&n.push({type:`variable`,id:t.id,variableKey:t.key,message:t.key?.trim()?r:`${t.label||`变量`} 缺少变量标识`,code:t.key?.trim()?`VARIABLE_KEY_INVALID`:`VARIABLE_KEY_MISSING`}),t.key&&(i.has(t.key)&&n.push({type:`variable`,id:t.id,variableKey:t.key,message:`变量标识 ${t.key} 重复`,code:`VARIABLE_KEY_DUPLICATED`}),i.add(t.key)),I(t.type)&&n.push({type:`variable`,id:t.id,variableKey:t.key,message:`${t.label||t.key||`变量`} 不是正文填写变量`,code:`VARIABLE_TYPE_UNSUPPORTED`})});let a=new Set(e.variables.map(e=>e.key).filter(Boolean)),o=new Set,s=r.collectPageDecorationVariableKeys(e.pageDecorations);return e.pages.forEach(e=>{B(e).forEach(t=>{o.add(t),a.has(t)||n.push({type:`variable`,id:e.id,message:`正文模板变量 ${t} 没有对应变量配置`})})}),e.variables.forEach(e=>{e.key&&!o.has(e.key)&&!s.has(e.key)&&n.push({type:`variable`,id:e.id,message:`${e.label||e.key} 缺少对应正文变量节点`})}),n.push(...r.validatePageDecorations(e.pageDecorations,e.variables)),n}function B(e){let t=new Set;function n(e){if(!e||typeof e!=`object`)return;let r=e;V(r.type)&&r.attrs?.key&&t.add(r.attrs.key),r.content?.forEach(n)}n(e.contentJson);let r=e.contentHtml||``,i=/data-template-variable=["']true["'][^>]*data-key=["']([^"']+)["']|data-key=["']([^"']+)["'][^>]*data-template-variable=["']true["']/g,a=i.exec(r);for(;a;){let e=a[1]||a[2];e&&t.add(e),a=i.exec(r)}return t}function V(e){return e===`templateVariable`||e===`templateField`}function H(e){let t=new Set;return e.pages.forEach(e=>{B(e).forEach(e=>t.add(e))}),t}function U(e){let t=H(e),n=r.collectPageDecorationVariableKeys(e.pageDecorations);return{...e,variables:e.variables.filter(r=>m(r.key,e.variables,r.id)?!0:t.has(r.key)||n.has(r.key))}}function W(e,t,n){let r=e??[];if(r.length<=1||n<=0)return;let i=Math.min(r.length,t.length),a=-1;for(let e=0;e<i;e+=1){let r=t[e];if(r.top+r.height>n+1){a=e;break}}if(!(a<=0))return{splitIndex:a,currentContent:r.slice(0,a),overflowContent:r.slice(a)}}function G(e,t,n,i,a){let o=r.buildPageDecorationsHtml(e.pageDecorations,n+1,e.pages.length,e.variables,a);return`<section ${K(t,e.pageSize,e.pageDecorations,n+1)}>${o}<div class="gd-contract-template-page__content">${i}</div></section>`}function K(e,n,i,a=1){let o=T(e.pageSize,n);return[`class="${r.buildPageDecorationClassNames(i,a)}"`,`data-page-id="${t.escapeHtmlAttribute(e.id)}"`,`data-page-format="${t.escapeHtmlAttribute(o.format??`Custom`)}"`,`data-page-label="${t.escapeHtmlAttribute(o.label??o.format??`自定义`)}"`,`data-page-width="${o.width}"`,`data-page-height="${o.height}"`].join(` `)}var le=/<span\b[^>]*data-template-variable=["']true["'][^>]*>/g;function ue(e){let n=new Map;function r(e){if(!e.key)return;let t=n.get(e.key);(!t||I(e.type)&&!I(t.type))&&n.set(e.key,e)}function i(e){if(!e||typeof e!=`object`)return;let t=e;t.type===`templateVariable`&&typeof t.attrs?.key==`string`&&r(de(t.attrs,t.attrs.key)),t.content?.forEach(i)}i(e.contentJson);let a=e.contentHtml||``;return t.canUseDomHtml()?new DOMParser().parseFromString(a,`text/html`).querySelectorAll(`[data-template-variable]`).forEach(e=>{r(q(t.createElementAttributeReader(e)))}):t.forEachHtmlTag(a,le,e=>{r(q(t.createTagAttributeReader(e)))}),Array.from(n.values())}function q(e){let n=e(`data-key`)??``,r=e(`data-variable-type`),i=e(`data-precision`),o=e(`data-use-grouping`);return{key:n,label:e(`data-label`)??n,type:r??`text`,placeholder:e(`data-placeholder`)??``,width:t.readNumberAttribute(e(`data-width`),160),height:t.readNumberAttribute(e(`data-height`),32),required:e(`data-required`)===`true`,defaultValue:e(`data-default-value`)??``,format:e(`data-format`)??``,precision:i?Number(i):void 0,useGrouping:o?o===`true`:void 0,checkedText:e(`data-checked-text`)??``,uncheckedText:e(`data-unchecked-text`)??``,options:a.decodeContractTemplateJsonAttribute(e(`data-control-options`))??[],dataSource:a.decodeContractTemplateJsonAttribute(e(`data-control-source`)),multiple:e(`data-multiple`)===`true`,componentKey:e(`data-component-key`)??``,componentConfig:a.decodeContractTemplateJsonAttribute(e(`data-component-config`))??{},multiline:e(`data-multiline`)===`true`,rows:t.readNumberAttribute(e(`data-rows`),3),lineHeight:t.readNumberAttribute(e(`data-line-height`),28),style:{border:t.readOptionalBoolean(e(`data-border`)),underline:t.readOptionalBoolean(e(`data-underline`)),color:e(`data-color`),background:e(`data-background`),fontSize:t.readNumberAttribute(e(`data-font-size`),14),fontFamily:e(`data-font-family`),placeholderColor:e(`data-placeholder-color`),lineColor:e(`data-line-color`),textAlign:Z(e(`data-text-align`)),borderStyle:Q(e(`data-border-style`)),objectFit:$(e(`data-object-fit`))}}}function de(e,n){let r=t=>typeof e[t]==`string`?e[t]:void 0;return{key:n,label:r(`label`)??n,type:e.type===void 0?`text`:e.type,placeholder:r(`placeholder`)??``,width:t.readNumberAttribute(e.width,160),height:t.readNumberAttribute(e.height,32),required:e.required===!0,defaultValue:r(`defaultValue`)??``,format:r(`format`)??``,precision:typeof e.precision==`number`?e.precision:void 0,useGrouping:typeof e.useGrouping==`boolean`?e.useGrouping:void 0,checkedText:r(`checkedText`)??``,uncheckedText:r(`uncheckedText`)??``,options:Array.isArray(e.options)?e.options:[],dataSource:e.dataSource,multiple:e.multiple===!0,componentKey:r(`componentKey`)??``,componentConfig:e.componentConfig,multiline:e.multiline===!0,rows:t.readNumberAttribute(e.rows,3),lineHeight:t.readNumberAttribute(e.lineHeight,28),style:{border:typeof e.border==`boolean`?e.border:void 0,underline:typeof e.underline==`boolean`?e.underline:void 0,color:r(`color`),background:r(`background`),fontSize:t.readNumberAttribute(e.fontSize,14),fontFamily:r(`fontFamily`),placeholderColor:r(`placeholderColor`),lineColor:r(`lineColor`),textAlign:Z(e.textAlign),borderStyle:Q(e.borderStyle),objectFit:$(e.objectFit)}}}function fe(e,n){if(!e)return e;if(t.canUseDomHtml()){let t=new DOMParser().parseFromString(e,`text/html`);return pe(t),t.querySelectorAll(`[data-template-variable]`).forEach(e=>{me(e,n)}),t.body.innerHTML}return t.replaceTemplateVariableSpans(ge(e),(e,r)=>{let i=t.createTagAttributeReader(r);return i(`data-key`)?he(i,n):e})}function pe(e){e.querySelectorAll(`script,style,meta,link`).forEach(e=>e.remove()),e.querySelectorAll(`*`).forEach(e=>{Array.from(e.attributes).forEach(t=>{let n=t.name.toLowerCase(),r=t.value;if(n.startsWith(`on`)||n===`srcdoc`){e.removeAttribute(t.name);return}if((n===`href`||n===`src`)&&Y(r)){e.removeAttribute(t.name);return}n===`style`&&X(r)&&e.removeAttribute(t.name)})})}function J(e,r){let i=e(`data-key`)??``,a=r.get(i),o=a?.type??e(`data-variable-type`)??`text`,s=ve(o,a?.defaultValue??e(`data-default-value`)??``),c=n.resolveTemplateVariablePresentation({type:o,width:a?.width??e(`data-width`),height:a?.height??e(`data-height`),defaultValue:s,placeholder:a?.placeholder??e(`data-placeholder`)??``,format:a?.format??e(`data-format`)??``,precision:a?.precision??t.readOptionalNumber(e(`data-precision`)),useGrouping:a?.useGrouping??t.readOptionalBoolean(e(`data-use-grouping`)),checkedText:a?.checkedText??e(`data-checked-text`)??``,uncheckedText:a?.uncheckedText??e(`data-unchecked-text`)??``,multiline:a?.multiline??t.readOptionalBoolean(e(`data-multiline`))??!1,rows:a?.rows??e(`data-rows`),lineHeight:a?.lineHeight??e(`data-line-height`),style:_e(a,e)});return{key:i,label:a?.label??e(`data-label`)??i,presentation:c,text:c.type===`image`&&c.hasDefaultValue?` `:c.displayText||` `}}function me(e,n){let{key:r,label:i,presentation:a,text:o}=J(t.createElementAttributeReader(e),n);e.setAttribute(`data-template-variable`,`true`),e.setAttribute(`data-key`,r),e.setAttribute(`data-label`,i),e.setAttribute(`data-variable-type`,a.type),e.setAttribute(`data-width`,String(a.width)),e.setAttribute(`data-height`,String(a.height)),e.setAttribute(`data-border`,String(a.border)),e.setAttribute(`data-underline`,String(a.underline)),e.setAttribute(`data-color`,a.color),e.setAttribute(`data-background`,a.background),e.setAttribute(`data-font-size`,String(a.fontSize)),e.setAttribute(`data-font-family`,a.fontFamily),e.setAttribute(`data-placeholder-color`,a.placeholderColor),e.setAttribute(`data-line-color`,a.lineColor),e.setAttribute(`data-text-align`,a.textAlign),e.setAttribute(`data-border-style`,a.borderStyle),e.setAttribute(`data-object-fit`,a.objectFit),e.className=a.classes.join(` `),e.setAttribute(`style`,a.styleText),e.textContent=o}function he(e,n){let{key:r,label:i,presentation:a,text:o}=J(e,n);return`<span data-template-variable="true" data-key="${t.escapeHtmlAttribute(r)}" data-label="${t.escapeHtmlAttribute(i)}" data-variable-type="${t.escapeHtmlAttribute(a.type)}" data-width="${a.width}" data-height="${a.height}" data-border="${a.border}" data-underline="${a.underline}" data-font-family="${t.escapeHtmlAttribute(a.fontFamily)}" class="${t.escapeHtmlAttribute(a.classes.join(` `))}" style="${t.escapeHtmlAttribute(a.styleText)}">${t.escapeHtmlText(o)}</span>`}function ge(e){return e.replace(/<\s*(script|style|meta|link)\b[\s\S]*?<\s*\/\s*\1\s*>/gi,``).replace(/<\s*(meta|link)\b[^>]*>/gi,``).replace(/\s+on[a-z]+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi,``).replace(/\s+srcdoc\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi,``).replace(/\s+(href|src)\s*=\s*(["'])(.*?)\2/gi,(e,t,n,r)=>Y(r)?``:` ${t}=${n}${r}${n}`).replace(/\s+style\s*=\s*(["'])(.*?)\1/gi,(e,t,n)=>X(n)?``:` style=${t}${n}${t}`)}function _e(e,n){return{border:e?.style?.border??t.readOptionalBoolean(n(`data-border`)),underline:e?.style?.underline??t.readOptionalBoolean(n(`data-underline`)),color:e?.style?.color??n(`data-color`),background:e?.style?.background??n(`data-background`),fontSize:e?.style?.fontSize??t.readOptionalNumber(n(`data-font-size`)),fontFamily:e?.style?.fontFamily??n(`data-font-family`),placeholderColor:e?.style?.placeholderColor??n(`data-placeholder-color`),lineColor:e?.style?.lineColor??n(`data-line-color`),textAlign:e?.style?.textAlign??Z(n(`data-text-align`)),borderStyle:e?.style?.borderStyle??Q(n(`data-border-style`)),objectFit:e?.style?.objectFit??$(n(`data-object-fit`))}}function ve(e,t){return e===`image`&&Y(t)?``:t}function Y(e){let t=e.trim().replace(/[\u0000-\u001F\s]+/g,``).toLowerCase();return t.startsWith(`javascript:`)||t.startsWith(`vbscript:`)||t.startsWith(`data:`)&&!t.startsWith(`data:image/`)}function X(e){return/expression\s*\(|javascript:|vbscript:/i.test(e)}function ye(e){if(!e)return e;if(t.canUseDomHtml()){let t=new DOMParser().parseFromString(e,`text/html`);return t.querySelectorAll(`[data-template-variable]`).forEach(e=>{let t=e.dataset.key||``;t&&(e.textContent=`\${{${t}}}`)}),t.body.innerHTML}return t.replaceTemplateVariableSpans(e,(e,n)=>{let r=t.createTagAttributeReader(n)(`data-key`);return r?`<span${n}>\${{${r}}}</span>`:e})}function be(e){return e===`left`||e===`center`||e===`right`}function xe(e){return e===`solid`||e===`dashed`}function Se(e){return e===`contain`||e===`cover`||e===`fill`}function Z(e){return be(e)?e:void 0}function Q(e){return xe(e)?e:void 0}function $(e){return Se(e)?e:void 0}exports.ALL_DEFAULT_FIELD_TYPES=y,exports.CONTRACT_TEMPLATE_RENDERER_VERSION=u,exports.CONTRACT_TEMPLATE_RESERVED_VARIABLE_KEYS=p,exports.CONTRACT_TEMPLATE_STYLE_VERSION=d,exports.CONTRACT_TEMPLATE_VARIABLE_KEY_PATTERN=f,exports.ContractTemplatePageDecorationValidationError=z,exports.DEFAULT_ADVANCED_CHOICE_FIELD_TYPES=g,exports.DEFAULT_BUILTIN_SELECTOR_FIELD_TYPES=_,exports.DEFAULT_CUSTOM_FIELD_TYPES=v,exports.DEFAULT_FIELD_STYLE=c,exports.DEFAULT_FIELD_TYPES=h,exports.DEFAULT_MULTILINE_LINE_HEIGHT=l,exports.DEFAULT_MULTILINE_ROWS=ee,exports.DEFAULT_PAGE_SIZE=s,exports.PAGE_SIZE_OPTIONS=o,exports.buildTemplateExpressionHtml=L,exports.buildTemplateHtml=ae,exports.buildTemplatePreviewHtml=oe,exports.buildTemplatePreviewPages=R,exports.cloneTemplateValue=S,exports.collectTemplateValueVariableKeys=H,exports.collectTemplateVariableKeys=B,exports.constrainTemplatePageSizes=ne,exports.createBlankPage=j,exports.createBlankTemplate=re,exports.createDefaultPage=A,exports.createDefaultTemplate=M,exports.createDesignerId=x,exports.createTemplateVariable=P,exports.exportTemplateValue=se,exports.findPageSizeOption=O,exports.getFieldOption=N,exports.getPageSizeKey=E,exports.getPageSizeOption=C,exports.inferPageFormat=w,exports.normalizeContractTemplateMaxPages=te,exports.normalizePageSizeOptions=D,exports.normalizeTemplateValue=ie,exports.resolvePageSize=T,exports.splitPageContentByMeasurements=W,exports.syncTemplateVariablesWithPages=U,exports.validateContractTemplateVariableKey=m,exports.validateTemplateValue=ce;
|
|
1
|
+
const e=require(`../constants.cjs`),t=require(`../utils/html.cjs`),n=require(`../utils/template-variable-render.cjs`),r=require(`../utils/page-decorations.cjs`),i=require(`../types.cjs`),a=require(`../utils/advanced-controls.cjs`);var o=[{format:`A0`,width:3178,height:4493,label:`A0`},{format:`A1`,width:2245,height:3178,label:`A1`},{format:`A2`,width:1587,height:2245,label:`A2`},{format:`A3`,width:1123,height:1587,label:`A3`},{format:`A4`,width:794,height:1123,label:`A4`},{format:`A5`,width:559,height:794,label:`A5`},{format:`Letter`,width:816,height:1056,label:`Letter`},{format:`Legal`,width:816,height:1344,label:`Legal`}],s={...o[4]},c={color:`#1f2937`,background:`transparent`,fontSize:14,fontFamily:e.DEFAULT_CONTRACT_FONT_FAMILY,placeholderColor:`#7a818b`,lineColor:`#565b66`,textAlign:`left`,borderStyle:`solid`,objectFit:`contain`},ee=3,te=28,l=`contract-template-renderer-1.0.0`,u=`contract-render-css-1.0.0`,d=/^[A-Za-z][A-Za-z0-9_]{1,63}$/,f=new Set([`pageNumber`,`totalPages`,`rendererVersion`]);function p(e,t,n){let r=typeof e==`string`?e.trim():``;return r?d.test(r)?f.has(r)?`${r} 是系统保留标识`:t.some(e=>e.id!==n&&e.key.trim()===r)?`变量标识 ${r} 已存在`:``:`变量标识需以字母开头,仅包含字母、数字和下划线,长度为 2~64 位`:`请输入变量标识`}function ne(e){let t=Number(e);return Number.isFinite(t)&&t>=1?Math.max(1,Math.floor(t)):20}var m=[{type:`text`,label:`输入框`,defaultWidth:160,defaultHeight:32},{type:`date`,label:`日期`,defaultWidth:140,defaultHeight:32},{type:`number`,label:`数字`,defaultWidth:120,defaultHeight:32},{type:`image`,label:`图片`,defaultWidth:160,defaultHeight:96},{type:`checkbox`,label:`复选框`,defaultWidth:96,defaultHeight:28}],h=[{type:`select`,label:`下拉框`,defaultWidth:180,defaultHeight:32},{type:`radio`,label:`单选框`,defaultWidth:220,defaultHeight:32}],g=[{type:`user-selector`,label:`用户选择器`,defaultWidth:240,defaultHeight:36},{type:`dept-selector`,label:`部门选择器`,defaultWidth:240,defaultHeight:36},{type:`role-selector`,label:`角色选择器`,defaultWidth:240,defaultHeight:36},{type:`org-selector`,label:`组织架构`,defaultWidth:240,defaultHeight:36}],_=[{type:`custom`,label:`自定义控件`,defaultWidth:200,defaultHeight:36}],v=[...m,...h,...g,..._],y=0;function b(e){return y+=1,`${e}-${Date.now().toString(36)}-${y.toString(36)}`}function x(e){return JSON.parse(JSON.stringify(e))}function S(e){return o.find(t=>t.format===e)}function C(e){if(e)return e.format&&e.format!==`Custom`?e.format:o.find(t=>t.width===e.width&&t.height===e.height)?.format}function w(e,t=s){let n=C(t)??t.format,r=e?.format??C(e)??n??`Custom`,i=r===`Custom`?void 0:S(r),a=O(i?.width??e?.width,t.width),o=O(i?.height??e?.height,t.height);return{format:i?.format??r,width:a,height:o,label:e?.label??i?.label??t.label??r}}function T(e){return`${e.format??`Custom`}:${e.width}:${e.height}`}function E(e){let t=(Array.isArray(e)?e:o).map(e=>{let t=Number(e?.width),n=Number(e?.height);if(!Number.isFinite(t)||t<=0||!Number.isFinite(n)||n<=0)return;let r=e?.format;if(r&&r!==`Custom`){let t=S(r);return t?{...t,label:e.label??t.label}:void 0}let i=r?void 0:C(e),a=i?S(i):void 0;if(a)return{...a,label:e.label??a.label};if(r!==`Custom`)return;let o=Math.round(t),s=Math.round(n);if(!(o<=0||s<=0))return{format:`Custom`,width:o,height:s,label:e.label??`Custom`}}).filter(Boolean),n=new Set,r=t.filter(e=>{let t=T(e);return n.has(t)?!1:(n.add(t),!0)});return(r.length?r:o).map(e=>({...e}))}function D(e,t){let n=T(e);return t.find(e=>T(e)===n)}function re(e,t){let n=E(t),r=n[0],i=w(e.pageSize,r),a=D(i,n)??r,o=new Map,s=e.pages.map(e=>{let t=w(e.pageSize,i),a=D(t,n)??r;return T(t)!==T(a)&&o.set(e.id,{source:t,target:a}),{...e,pageSize:{...a}}});return{...e,pageSize:{...a},pages:s}}function O(e,t){let n=Number(e);return!Number.isFinite(n)||n<=0?t:Math.round(n)}function k(e=1,t){return{id:b(`page`),title:`第 ${e} 页`,pageSize:t?w(t):void 0,contentHtml:`<p>请输入合同正文。</p>`}}function A(e=1,t,n=`<p></p>`,r){return{id:b(`page`),title:`第 ${e} 页`,pageSize:t?w(t):void 0,contentHtml:n,contentJson:r}}function j(e=s){let t=w(e);return{pages:[k(1,t)],variables:[],pageSize:t}}function ie(e=s){let t=w(e);return{pages:[A(1,t,`<p></p>`)],variables:[],pageSize:t}}function M(e,t=m){return t.find(t=>t.type===e)??v.find(t=>t.type===e)??m[0]}function N(e,t=m,n={}){let r=e.type===void 0?`text`:e.type,i=M(r,t),a=P(r);return{id:e.id??b(`variable`),key:e.key,label:e.label??i.label??e.key,type:r,placeholder:e.placeholder??a.placeholder??``,width:Math.max(24,Math.round(e.width??i.defaultWidth??140)),height:Math.max(24,Math.round(e.height??a.height??i.defaultHeight??32)),required:e.required??!1,defaultValue:e.defaultValue??``,format:e.format??a.format??``,precision:e.precision??a.precision,useGrouping:e.useGrouping??a.useGrouping,checkedText:e.checkedText??a.checkedText??``,uncheckedText:e.uncheckedText??a.uncheckedText??``,options:Array.isArray(e.options)?e.options.map(e=>({...e})):[],dataSource:e.dataSource?{...e.dataSource}:void 0,multiple:e.multiple??!1,componentKey:e.componentKey??``,componentConfig:e.componentConfig?{...e.componentConfig}:{},multiline:e.multiline??!1,rows:Math.max(1,Math.round(e.rows??3)),lineHeight:Math.max(18,Math.round(e.lineHeight??28)),style:{...c,...a.style,...n,...e.style}}}function P(e){return e===`date`?{placeholder:`年 月 日`,format:`YYYY年MM月DD日`,style:{border:!1,underline:!0}}:e===`number`?{placeholder:`0`,format:`decimal`,useGrouping:!0,style:{border:!1,underline:!0,textAlign:`right`}}:e===`image`?{placeholder:`图片`,height:96,style:{border:!0,underline:!1,borderStyle:`dashed`,background:`transparent`,lineColor:`#d9dce0`,textAlign:`center`,objectFit:`contain`}}:e===`checkbox`?{height:28,checkedText:`已选`,uncheckedText:``,style:{border:!1,underline:!1}}:e===`select`||e===`radio`?{placeholder:e===`select`?`请选择`:`请选择一项`,multiple:!1,style:{border:!0,underline:!1}}:e===`user-selector`||e===`dept-selector`||e===`role-selector`||e===`org-selector`||e===`custom`?{placeholder:`请选择`,multiple:!1,style:{border:!0,underline:!1}}:{style:{border:!1,underline:!0}}}function F(e){return e!==void 0&&!i.isContractTemplateFieldType(e)}function ae(e,t=s){if(!e)return j(t);let n=w(e.pageSize,t),i=(e.pages?.length?e.pages:[k(1,n)]).map((e,t)=>({id:e.id||b(`page`),title:e.title||`第 ${t+1} 页`,pageSize:w(e.pageSize,n),contentHtml:e.contentHtml||`<p></p>`,contentJson:e.contentJson})),a=[],o=new Map;return Object.fromEntries(i.map(e=>[e.id,w(e.pageSize,n)])),(e.variables??[]).forEach(e=>{let t=N({...e,id:e.id||b(`variable`)});a.push(t),t.key&&o.set(t.key,t)}),i.forEach(e=>{pe(e).forEach(e=>{if(!e.key)return;let t=o.get(e.key);if(!t){let t=N(e);a.push(t),o.set(e.key,t);return}if(F(e.type)){let n=N({...t,type:e.type});o.set(e.key,n);let r=a.findIndex(e=>e.id===t.id);r>=0&&(a[r]=n)}})}),{pages:i,variables:a,pageSize:n,...e.pageDecorations?{pageDecorations:r.normalizePageDecorations(e.pageDecorations)}:{}}}function oe(e){return e.pages.map((t,n)=>W(e,t,n,t.contentHtml,{})).join(`
|
|
2
|
+
`)}function I(e){return e.pages.map((t,n)=>W(e,t,n,xe(t.contentHtml))).join(`
|
|
3
|
+
`)}function se(e){return L(e).map(({page:t,contentHtml:n},i)=>{let a=w(t.pageSize,e.pageSize),o=r.buildPageDecorationsHtml(e.pageDecorations,i+1,e.pages.length,e.variables,{});return`<section ${G(t,e.pageSize,e.pageDecorations,i+1)} style="width:${a.width}px;min-height:${a.height}px">${o}<div class="gd-contract-template-page__content">${n}</div></section>`}).join(`
|
|
4
|
+
`)}function L(e){let t=new Map(e.variables.map(e=>[e.key,e]));return e.pages.map(e=>({page:{...e,...e.pageSize?{pageSize:{...e.pageSize}}:{}},contentHtml:he(e.contentHtml,t)}))}var R=class extends Error{constructor(e){super(e[0]?.message||`页面装饰配置无效`),this.errors=e,this.name=`ContractTemplatePageDecorationValidationError`}};function ce(e){let t=r.validatePageDecorations(e.pageDecorations,e.variables);if(t.length)throw new R(t);let n=x(e);return n.pageDecorations&&=r.normalizePageDecorations(n.pageDecorations),{...n,rendererVersion:l,styleVersion:u,html:I(n)}}function le(e,t={}){let n=[],i=new Set;typeof t.maxPages==`number`&&e.pages.length>t.maxPages&&n.push({type:`page`,id:e.pages[t.maxPages]?.id??e.pages.at(-1)?.id??``,pageId:e.pages[t.maxPages]?.id,code:`PAGE_LIMIT_EXCEEDED`,message:`合同共 ${e.pages.length} 页,超过最多 ${t.maxPages} 页限制`}),e.variables.forEach(t=>{let r=p(t.key,e.variables,t.id),a=!!t.key?.trim()&&e.variables.some(e=>e.id!==t.id&&e.key.trim()===t.key.trim());r&&(!a||t.key!==t.key.trim())&&n.push({type:`variable`,id:t.id,variableKey:t.key,message:t.key?.trim()?r:`${t.label||`变量`} 缺少变量标识`,code:t.key?.trim()?`VARIABLE_KEY_INVALID`:`VARIABLE_KEY_MISSING`}),t.key&&(i.has(t.key)&&n.push({type:`variable`,id:t.id,variableKey:t.key,message:`变量标识 ${t.key} 重复`,code:`VARIABLE_KEY_DUPLICATED`}),i.add(t.key)),F(t.type)&&n.push({type:`variable`,id:t.id,variableKey:t.key,message:`${t.label||t.key||`变量`} 不是正文填写变量`,code:`VARIABLE_TYPE_UNSUPPORTED`})});let a=new Set(e.variables.map(e=>e.key).filter(Boolean)),o=new Set,s=r.collectPageDecorationVariableKeys(e.pageDecorations);return e.pages.forEach(e=>{z(e).forEach(t=>{o.add(t),a.has(t)||n.push({type:`variable`,id:e.id,message:`正文模板变量 ${t} 没有对应变量配置`})})}),e.variables.forEach(e=>{e.key&&!o.has(e.key)&&!s.has(e.key)&&n.push({type:`variable`,id:e.id,message:`${e.label||e.key} 缺少对应正文变量节点`})}),n.push(...r.validatePageDecorations(e.pageDecorations,e.variables)),n}function z(e){let t=new Set;function n(e){if(!e||typeof e!=`object`)return;let r=e;B(r.type)&&r.attrs?.key&&t.add(r.attrs.key),r.content?.forEach(n)}n(e.contentJson);let r=e.contentHtml||``,i=/data-template-variable=["']true["'][^>]*data-key=["']([^"']+)["']|data-key=["']([^"']+)["'][^>]*data-template-variable=["']true["']/g,a=i.exec(r);for(;a;){let e=a[1]||a[2];e&&t.add(e),a=i.exec(r)}return t}function B(e){return e===`templateVariable`||e===`templateField`}function V(e){let t=new Set;return e.pages.forEach(e=>{z(e).forEach(e=>t.add(e))}),t}function H(e){let t=V(e),n=r.collectPageDecorationVariableKeys(e.pageDecorations);return{...e,variables:e.variables.filter(r=>p(r.key,e.variables,r.id)?!0:t.has(r.key)||n.has(r.key))}}function U(e,t){for(let n=0;n<t;n+=1){let r=e[n]?.content??[];for(let e of r){let r=Math.max(1,Number(e.attrs?.rowspan)||1);if(n+r>t)return!1}}return!0}function ue(e,t,n){let r=e.content??[],i=t.tableRows??[],a=Math.min(r.length,i.length),o=n-Math.max(0,t.trailingTextBlockHeight??0),s=0;for(let e=0;e<a;e+=1){let t=i[e];if(t.top+t.height>o+1)break;s=e+1}if(s<=0||s>=r.length)return;let c=s;for(;c>0&&!U(r,c);)--c;if(!(c<=0||c>=r.length))return{currentTable:{...e,content:r.slice(0,c)},overflowTable:{...e,content:r.slice(c)}}}function de(e,t,n){let r=e??[];if(!r.length||n<=0)return;let i=Math.min(r.length,t.length),a=-1;for(let e=0;e<i;e+=1){let r=t[e];if(r.top+r.height>n+1){a=e;break}}if(a<0)return;let o=r[a],s=o?.type===`table`?ue(o,t[a],n):void 0;if(s)return{splitIndex:a,currentContent:[...r.slice(0,a),s.currentTable],overflowContent:[s.overflowTable,...r.slice(a+1)]};if(!(a<=0))return{splitIndex:a,currentContent:r.slice(0,a),overflowContent:r.slice(a)}}function W(e,t,n,i,a){let o=r.buildPageDecorationsHtml(e.pageDecorations,n+1,e.pages.length,e.variables,a);return`<section ${G(t,e.pageSize,e.pageDecorations,n+1)}>${o}<div class="gd-contract-template-page__content">${i}</div></section>`}function G(e,n,i,a=1){let o=w(e.pageSize,n);return[`class="${r.buildPageDecorationClassNames(i,a)}"`,`data-page-id="${t.escapeHtmlAttribute(e.id)}"`,`data-page-format="${t.escapeHtmlAttribute(o.format??`Custom`)}"`,`data-page-label="${t.escapeHtmlAttribute(o.label??o.format??`自定义`)}"`,`data-page-width="${o.width}"`,`data-page-height="${o.height}"`].join(` `)}var fe=/<span\b[^>]*data-template-variable=["']true["'][^>]*>/g;function pe(e){let n=new Map;function r(e){if(!e.key)return;let t=n.get(e.key);(!t||F(e.type)&&!F(t.type))&&n.set(e.key,e)}function i(e){if(!e||typeof e!=`object`)return;let t=e;t.type===`templateVariable`&&typeof t.attrs?.key==`string`&&r(me(t.attrs,t.attrs.key)),t.content?.forEach(i)}i(e.contentJson);let a=e.contentHtml||``;return t.canUseDomHtml()?new DOMParser().parseFromString(a,`text/html`).querySelectorAll(`[data-template-variable]`).forEach(e=>{r(K(t.createElementAttributeReader(e)))}):t.forEachHtmlTag(a,fe,e=>{r(K(t.createTagAttributeReader(e)))}),Array.from(n.values())}function K(e){let n=e(`data-key`)??``,r=e(`data-variable-type`),i=e(`data-precision`),o=e(`data-use-grouping`);return{key:n,label:e(`data-label`)??n,type:r??`text`,placeholder:e(`data-placeholder`)??``,width:t.readNumberAttribute(e(`data-width`),160),height:t.readNumberAttribute(e(`data-height`),32),required:e(`data-required`)===`true`,defaultValue:e(`data-default-value`)??``,format:e(`data-format`)??``,precision:i?Number(i):void 0,useGrouping:o?o===`true`:void 0,checkedText:e(`data-checked-text`)??``,uncheckedText:e(`data-unchecked-text`)??``,options:a.decodeContractTemplateJsonAttribute(e(`data-control-options`))??[],dataSource:a.decodeContractTemplateJsonAttribute(e(`data-control-source`)),multiple:e(`data-multiple`)===`true`,componentKey:e(`data-component-key`)??``,componentConfig:a.decodeContractTemplateJsonAttribute(e(`data-component-config`))??{},multiline:e(`data-multiline`)===`true`,rows:t.readNumberAttribute(e(`data-rows`),3),lineHeight:t.readNumberAttribute(e(`data-line-height`),28),style:{border:t.readOptionalBoolean(e(`data-border`)),underline:t.readOptionalBoolean(e(`data-underline`)),color:e(`data-color`),background:e(`data-background`),fontSize:t.readNumberAttribute(e(`data-font-size`),14),fontFamily:e(`data-font-family`),placeholderColor:e(`data-placeholder-color`),lineColor:e(`data-line-color`),textAlign:Z(e(`data-text-align`)),borderStyle:Q(e(`data-border-style`)),objectFit:$(e(`data-object-fit`))}}}function me(e,n){let r=t=>typeof e[t]==`string`?e[t]:void 0;return{key:n,label:r(`label`)??n,type:e.type===void 0?`text`:e.type,placeholder:r(`placeholder`)??``,width:t.readNumberAttribute(e.width,160),height:t.readNumberAttribute(e.height,32),required:e.required===!0,defaultValue:r(`defaultValue`)??``,format:r(`format`)??``,precision:typeof e.precision==`number`?e.precision:void 0,useGrouping:typeof e.useGrouping==`boolean`?e.useGrouping:void 0,checkedText:r(`checkedText`)??``,uncheckedText:r(`uncheckedText`)??``,options:Array.isArray(e.options)?e.options:[],dataSource:e.dataSource,multiple:e.multiple===!0,componentKey:r(`componentKey`)??``,componentConfig:e.componentConfig,multiline:e.multiline===!0,rows:t.readNumberAttribute(e.rows,3),lineHeight:t.readNumberAttribute(e.lineHeight,28),style:{border:typeof e.border==`boolean`?e.border:void 0,underline:typeof e.underline==`boolean`?e.underline:void 0,color:r(`color`),background:r(`background`),fontSize:t.readNumberAttribute(e.fontSize,14),fontFamily:r(`fontFamily`),placeholderColor:r(`placeholderColor`),lineColor:r(`lineColor`),textAlign:Z(e.textAlign),borderStyle:Q(e.borderStyle),objectFit:$(e.objectFit)}}}function he(e,n){if(!e)return e;if(t.canUseDomHtml()){let t=new DOMParser().parseFromString(e,`text/html`);return ge(t),t.querySelectorAll(`[data-template-variable]`).forEach(e=>{_e(e,n)}),t.body.innerHTML}return t.replaceTemplateVariableSpans(ye(e),(e,r)=>{let i=t.createTagAttributeReader(r);return i(`data-key`)?ve(i,n):e})}function ge(e){e.querySelectorAll(`script,style,meta,link`).forEach(e=>e.remove()),e.querySelectorAll(`*`).forEach(e=>{Array.from(e.attributes).forEach(t=>{let n=t.name.toLowerCase(),r=t.value;if(n.startsWith(`on`)||n===`srcdoc`){e.removeAttribute(t.name);return}if((n===`href`||n===`src`)&&Y(r)){e.removeAttribute(t.name);return}n===`style`&&X(r)&&e.removeAttribute(t.name)})})}function q(e,r){let i=e(`data-key`)??``,a=r.get(i),o=a?.type??e(`data-variable-type`)??`text`,s=be(o,a?.defaultValue??e(`data-default-value`)??``),c=n.resolveTemplateVariablePresentation({type:o,width:a?.width??e(`data-width`),height:a?.height??e(`data-height`),defaultValue:s,placeholder:a?.placeholder??e(`data-placeholder`)??``,format:a?.format??e(`data-format`)??``,precision:a?.precision??t.readOptionalNumber(e(`data-precision`)),useGrouping:a?.useGrouping??t.readOptionalBoolean(e(`data-use-grouping`)),checkedText:a?.checkedText??e(`data-checked-text`)??``,uncheckedText:a?.uncheckedText??e(`data-unchecked-text`)??``,multiline:a?.multiline??t.readOptionalBoolean(e(`data-multiline`))??!1,rows:a?.rows??e(`data-rows`),lineHeight:a?.lineHeight??e(`data-line-height`),style:J(a,e)});return{key:i,label:a?.label??e(`data-label`)??i,presentation:c,text:c.type===`image`&&c.hasDefaultValue?` `:c.displayText||` `}}function _e(e,n){let{key:r,label:i,presentation:a,text:o}=q(t.createElementAttributeReader(e),n);e.setAttribute(`data-template-variable`,`true`),e.setAttribute(`data-key`,r),e.setAttribute(`data-label`,i),e.setAttribute(`data-variable-type`,a.type),e.setAttribute(`data-width`,String(a.width)),e.setAttribute(`data-height`,String(a.height)),e.setAttribute(`data-border`,String(a.border)),e.setAttribute(`data-underline`,String(a.underline)),e.setAttribute(`data-color`,a.color),e.setAttribute(`data-background`,a.background),e.setAttribute(`data-font-size`,String(a.fontSize)),e.setAttribute(`data-font-family`,a.fontFamily),e.setAttribute(`data-placeholder-color`,a.placeholderColor),e.setAttribute(`data-line-color`,a.lineColor),e.setAttribute(`data-text-align`,a.textAlign),e.setAttribute(`data-border-style`,a.borderStyle),e.setAttribute(`data-object-fit`,a.objectFit),e.className=a.classes.join(` `),e.setAttribute(`style`,a.styleText),e.textContent=o}function ve(e,n){let{key:r,label:i,presentation:a,text:o}=q(e,n);return`<span data-template-variable="true" data-key="${t.escapeHtmlAttribute(r)}" data-label="${t.escapeHtmlAttribute(i)}" data-variable-type="${t.escapeHtmlAttribute(a.type)}" data-width="${a.width}" data-height="${a.height}" data-border="${a.border}" data-underline="${a.underline}" data-font-family="${t.escapeHtmlAttribute(a.fontFamily)}" class="${t.escapeHtmlAttribute(a.classes.join(` `))}" style="${t.escapeHtmlAttribute(a.styleText)}">${t.escapeHtmlText(o)}</span>`}function ye(e){return e.replace(/<\s*(script|style|meta|link)\b[\s\S]*?<\s*\/\s*\1\s*>/gi,``).replace(/<\s*(meta|link)\b[^>]*>/gi,``).replace(/\s+on[a-z]+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi,``).replace(/\s+srcdoc\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi,``).replace(/\s+(href|src)\s*=\s*(["'])(.*?)\2/gi,(e,t,n,r)=>Y(r)?``:` ${t}=${n}${r}${n}`).replace(/\s+style\s*=\s*(["'])(.*?)\1/gi,(e,t,n)=>X(n)?``:` style=${t}${n}${t}`)}function J(e,n){return{border:e?.style?.border??t.readOptionalBoolean(n(`data-border`)),underline:e?.style?.underline??t.readOptionalBoolean(n(`data-underline`)),color:e?.style?.color??n(`data-color`),background:e?.style?.background??n(`data-background`),fontSize:e?.style?.fontSize??t.readOptionalNumber(n(`data-font-size`)),fontFamily:e?.style?.fontFamily??n(`data-font-family`),placeholderColor:e?.style?.placeholderColor??n(`data-placeholder-color`),lineColor:e?.style?.lineColor??n(`data-line-color`),textAlign:e?.style?.textAlign??Z(n(`data-text-align`)),borderStyle:e?.style?.borderStyle??Q(n(`data-border-style`)),objectFit:e?.style?.objectFit??$(n(`data-object-fit`))}}function be(e,t){return e===`image`&&Y(t)?``:t}function Y(e){let t=e.trim().replace(/[\u0000-\u001F\s]+/g,``).toLowerCase();return t.startsWith(`javascript:`)||t.startsWith(`vbscript:`)||t.startsWith(`data:`)&&!t.startsWith(`data:image/`)}function X(e){return/expression\s*\(|javascript:|vbscript:/i.test(e)}function xe(e){if(!e)return e;if(t.canUseDomHtml()){let t=new DOMParser().parseFromString(e,`text/html`);return t.querySelectorAll(`[data-template-variable]`).forEach(e=>{let t=e.dataset.key||``;t&&(e.textContent=`\${{${t}}}`)}),t.body.innerHTML}return t.replaceTemplateVariableSpans(e,(e,n)=>{let r=t.createTagAttributeReader(n)(`data-key`);return r?`<span${n}>\${{${r}}}</span>`:e})}function Se(e){return e===`left`||e===`center`||e===`right`}function Ce(e){return e===`solid`||e===`dashed`}function we(e){return e===`contain`||e===`cover`||e===`fill`}function Z(e){return Se(e)?e:void 0}function Q(e){return Ce(e)?e:void 0}function $(e){return we(e)?e:void 0}exports.ALL_DEFAULT_FIELD_TYPES=v,exports.CONTRACT_TEMPLATE_RENDERER_VERSION=l,exports.CONTRACT_TEMPLATE_RESERVED_VARIABLE_KEYS=f,exports.CONTRACT_TEMPLATE_STYLE_VERSION=u,exports.CONTRACT_TEMPLATE_VARIABLE_KEY_PATTERN=d,exports.ContractTemplatePageDecorationValidationError=R,exports.DEFAULT_ADVANCED_CHOICE_FIELD_TYPES=h,exports.DEFAULT_BUILTIN_SELECTOR_FIELD_TYPES=g,exports.DEFAULT_CUSTOM_FIELD_TYPES=_,exports.DEFAULT_FIELD_STYLE=c,exports.DEFAULT_FIELD_TYPES=m,exports.DEFAULT_MULTILINE_LINE_HEIGHT=te,exports.DEFAULT_MULTILINE_ROWS=ee,exports.DEFAULT_PAGE_SIZE=s,exports.PAGE_SIZE_OPTIONS=o,exports.buildTemplateExpressionHtml=I,exports.buildTemplateHtml=oe,exports.buildTemplatePreviewHtml=se,exports.buildTemplatePreviewPages=L,exports.cloneTemplateValue=x,exports.collectTemplateValueVariableKeys=V,exports.collectTemplateVariableKeys=z,exports.constrainTemplatePageSizes=re,exports.createBlankPage=A,exports.createBlankTemplate=ie,exports.createDefaultPage=k,exports.createDefaultTemplate=j,exports.createDesignerId=b,exports.createTemplateVariable=N,exports.exportTemplateValue=ce,exports.findPageSizeOption=D,exports.getFieldOption=M,exports.getPageSizeKey=T,exports.getPageSizeOption=S,exports.inferPageFormat=C,exports.normalizeContractTemplateMaxPages=ne,exports.normalizePageSizeOptions=E,exports.normalizeTemplateValue=ae,exports.resolvePageSize=w,exports.splitPageContentByMeasurements=de,exports.syncTemplateVariablesWithPages=H,exports.validateContractTemplateVariableKey=p,exports.validateTemplateValue=le;
|
package/dist/lib/components/pro-contract-template-designer/src/composables/use-toolbar-overflow.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../utils/toolbar-overflow.cjs`);let t=require(`vue`);var n=43,r=6,i=4;function a(a){let o=(0,t.ref)([]),s=new Map,c=0,l,u=(0,t.computed)(()=>o.value.length>0);function d(e){return o.value.includes(e)}function f(e,t){let n=o.value;n.length===e.length&&e.every(e=>n.includes(e))||(o.value=e,e.length||(a.toolbarMoreOpen.value=!1),!(t>=i)&&p(t+1))}function p(e=0){(0,t.nextTick)(()=>{if(!(a.isDisposed()||!a.toolbarMainElement.value)){if(typeof window>`u`){m(e);return}l!==void 0&&window.cancelAnimationFrame(l),l=window.requestAnimationFrame(()=>{l=void 0,a.isDisposed()||m(e)})}})}function m(t=0){let i=a.toolbarMainElement.value;if(!i)return;if(typeof window<`u`&&window.matchMedia(`(max-width: 760px)`).matches){f([],t);return}let o=i.clientWidth;if(
|
|
1
|
+
require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../utils/toolbar-overflow.cjs`);let t=require(`vue`);var n=43,r=6,i=4;function a(a){let o=(0,t.ref)([]),s=new Map,c=0,l,u=(0,t.computed)(()=>o.value.length>0);function d(e){return o.value.includes(e)}function f(e,t){let n=o.value;n.length===e.length&&e.every(e=>n.includes(e))||(o.value=e,e.length||(a.toolbarMoreOpen.value=!1),!(t>=i)&&p(t+1))}function p(e=0){(0,t.nextTick)(()=>{if(!(a.isDisposed()||!a.toolbarMainElement.value)){if(typeof window>`u`){m(e);return}l!==void 0&&window.cancelAnimationFrame(l),l=window.requestAnimationFrame(()=>{l=void 0,a.isDisposed()||m(e)})}})}function m(t=0){let i=a.toolbarMainElement.value;if(!i)return;if(typeof window<`u`&&window.matchMedia(`(max-width: 760px)`).matches){f([],t);return}let o=window.getComputedStyle(i),l=Number.parseFloat(o.paddingLeft)+Number.parseFloat(o.paddingRight),u=i.clientWidth-l;if(u<=0)return;let d=Number.parseFloat(o.columnGap)||0,p=a.toolbarMoreElement.value,m=0,h=0;for(let e of Array.from(i.children)){if(!(e instanceof HTMLElement))continue;if(e===p){e.offsetWidth>0&&(c=e.offsetWidth);continue}let t=e.dataset.toolbarOverflowKey;if(t){e.offsetWidth>0&&s.set(t,e.offsetWidth);continue}m+=e.offsetWidth,h+=1}let g=Object.fromEntries(e.CONTRACT_TEMPLATE_TOOLBAR_OVERFLOW_PRIORITY.map(e=>[e,s.get(e)??0]));f(e.resolveContractTemplateToolbarOverflowKeys({availableWidth:u,fixedWidth:m,fixedItemCount:h,groupWidths:g,moreWidth:c||n,itemGap:d,buffer:r}),t)}(0,t.watch)(()=>a.measureDependencies(),()=>{p()},{immediate:!0}),(0,t.onMounted)(()=>{p(),typeof document<`u`&&document.fonts?.ready&&document.fonts.ready.then(()=>{a.isDisposed()||!a.toolbarMainElement.value||p()})}),(0,t.onBeforeUnmount)(()=>{typeof window<`u`&&l!==void 0&&window.cancelAnimationFrame(l),!(typeof document>`u`)&&document.removeEventListener(`mousedown`,h,!0)});function h(e){let t=e.target instanceof HTMLElement?e.target:null;t&&(t.closest(`.gd-contract-template-designer__toolbar-more, .ant-popover, .ant-select-dropdown, .ant-modal-root`)||(a.toolbarMoreOpen.value=!1))}return(0,t.watch)(a.toolbarMoreOpen,e=>{typeof document>`u`||(e?document.addEventListener(`mousedown`,h,!0):document.removeEventListener(`mousedown`,h,!0))}),{toolbarOverflowKeys:o,toolbarHasOverflow:u,isToolbarGroupOverflowed:d,measureToolbarOverflow:m}}exports.useToolbarOverflow=a;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
const e=require(`./html.cjs`),t=require(`./template-variable-render.cjs`),n=require(`./page-decorations.cjs`),r=require(`../types.cjs`),i=require(`./advanced-controls.cjs`),a=require(`../composables/use-template-designer.cjs`),o=require(`./image-url.cjs`);function s(e){let t=Array.isArray(e?.variables)?e.variables:[],n=t.map(e=>c(e)),r={};return t.forEach(e=>{let t=typeof e?.key==`string`?e.key:``;if(t){if(e.type===`checkbox`){r[t]=!1;return}if(e.type===`number`){let n=typeof e.defaultValue==`string`?e.defaultValue.trim().length>0:e.defaultValue!==void 0,i=Number(e.defaultValue);r[t]=n&&Number.isFinite(i)?i:``;return}r[t]=e.defaultValue??``}}),{values:r,variables:n}}function c(e){return JSON.parse(JSON.stringify(e))}var l=new Set([`action`,`formaction`,`href`,`src`,`xlink:href`]),u=/<[^>]+data-template-variable=["']true["'][^>]*>/gi;function
|
|
2
|
-
`)}function
|
|
3
|
-
`,tab:` `})[t.toLowerCase()]??``).trim().replace(/[\u0000-\u0020\u007F]+/g,``);return/^(?:javascript|vbscript|data:text\/html)/i.test(t)}function
|
|
1
|
+
const e=require(`./html.cjs`),t=require(`./template-variable-render.cjs`),n=require(`./page-decorations.cjs`),r=require(`../types.cjs`),i=require(`./advanced-controls.cjs`),a=require(`../composables/use-template-designer.cjs`),o=require(`./image-url.cjs`);function s(e){let t=Array.isArray(e?.variables)?e.variables:[],n=t.map(e=>c(e)),r={};return t.forEach(e=>{let t=typeof e?.key==`string`?e.key:``;if(t){if(e.type===`checkbox`){r[t]=!1;return}if(e.type===`number`){let n=typeof e.defaultValue==`string`?e.defaultValue.trim().length>0:e.defaultValue!==void 0,i=Number(e.defaultValue);r[t]=n&&Number.isFinite(i)?i:``;return}r[t]=e.defaultValue??``}}),{values:r,variables:n}}function c(e){return JSON.parse(JSON.stringify(e))}var l=new Set([`action`,`formaction`,`href`,`src`,`xlink:href`]),u=/<[^>]+data-template-variable=["']true["'][^>]*>/gi,d=100,f=6e3,p=6,m=/^data:image\/(?:png|jpe?g|webp|gif);base64,[A-Za-z0-9+/=]+$/i;function h(e){let t={};return(Array.isArray(e?.variables)?e.variables:[]).forEach(e=>{e?.key&&(t[e.key]=O(e))}),t}function g(e,t){return{...h(e),...t??{}}}function _(e,t){let n=y(e);if(!e)return n;let r=Array.isArray(e.variables)?e.variables:[],i=new Set(r.map(e=>e?.key).filter(Boolean));return Object.keys(t).forEach(e=>{i.has(e)||n.push({type:`variable`,id:e,variableKey:e,message:`提交值 ${e} 不属于模板变量`,code:`VARIABLE_TYPE_INVALID`})}),r.forEach(e=>{if(!e?.key)return;let r=R(e,t[e.key]),i=e.label||e.key;if(e.required&&S(r)){n.push({type:`variable`,id:e.id,variableKey:e.key,message:`请填写${i}`,code:`VARIABLE_REQUIRED`});return}if(S(r))return;let a=e.type??`text`;a===`number`&&!z(r,e.precision)&&n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${i} 不是合法数字或超出精度`,code:`VARIABLE_TYPE_INVALID`}),a===`checkbox`&&!V(r)&&n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${i} 不是合法勾选值`,code:`VARIABLE_TYPE_INVALID`}),a===`date`&&!B(r)&&n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${i} 不是合法日期`,code:`VARIABLE_TYPE_INVALID`}),a===`image`&&!H(String(r).trim())&&n.push({type:`security`,id:e.id,variableKey:e.key,message:`${i} 必须使用安全的图片 data URL`,code:`UNSAFE_IMAGE_URL`}),a===`text`&&G(e,String(r))&&n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${i} 内容超出变量范围`,code:`VARIABLE_OVERFLOW`}),U(a)&&(W(r,a!==`radio`&&!!e.multiple)||n.push({type:`variable`,id:e.id,variableKey:e.key,message:`${i} 不是合法选择值`,code:`VARIABLE_TYPE_INVALID`}))}),n}function v(e,t,n){return _(e,t)}function y(e){if(!e)return[{type:`page`,id:`template`,message:`缺少可渲染的合同模板`,code:`TEMPLATE_MISSING`}];let t=[],i=Array.isArray(e.pages)?e.pages:[],o=Array.isArray(e.variables)?e.variables:[];(!Array.isArray(e.pages)||i.length===0)&&t.push({type:`page`,id:`template-pages`,message:`模板至少需要一个合法页面`,code:`TEMPLATE_PAGES_INVALID`}),Array.isArray(e.variables)||t.push({type:`variable`,id:`template-variables`,message:`模板变量列表格式无效`,code:`TEMPLATE_VARIABLES_INVALID`}),K(e.pageSize)||t.push({type:`page`,id:`template-page-size`,message:`模板默认页面尺寸必须在 ${d} ~ ${f} CSS px 之间`,code:`TEMPLATE_PAGE_SIZE_INVALID`});let s=new Map;o.forEach((e,n)=>{if(!e||typeof e.key!=`string`||!e.key.trim()){t.push({type:`variable`,id:e?.id||`variable-${n}`,message:`第 ${n+1} 个变量缺少有效 key`,code:`VARIABLE_KEY_MISSING`});return}let i=e.key.trim(),c=o.some(t=>t?.id!==e.id&&typeof t?.key==`string`&&t.key.trim()===i),l=a.validateContractTemplateVariableKey(e.key,o,e.id),u=!a.CONTRACT_TEMPLATE_VARIABLE_KEY_PATTERN.test(i)||a.CONTRACT_TEMPLATE_RESERVED_VARIABLE_KEYS.has(i);l&&(u||!c||e.key!==i)&&t.push({type:`variable`,id:e.id||`variable-${n}`,variableKey:e.key,message:`${e.label||e.key}:${l}`,code:`VARIABLE_KEY_INVALID`}),s.set(i,(s.get(i)??0)+1),r.isContractTemplateFieldType(e.type??`text`)||t.push({type:`variable`,id:e.id,variableKey:e.key,message:`${e.label||e.key} 不是正文填写变量`,code:`VARIABLE_TYPE_UNSUPPORTED`})}),s.forEach((e,n)=>{e>1&&t.push({type:`variable`,id:n,variableKey:n,message:`变量 key ${n} 重复`,code:`VARIABLE_KEY_DUPLICATED`})});let c=new Set;i.forEach((e,n)=>{if(!e||typeof e.id!=`string`||!e.id.trim()||typeof e.contentHtml!=`string`){t.push({type:`page`,id:e?.id||`page-${n}`,pageId:e?.id,message:`第 ${n+1} 页结构无效,已跳过渲染`,code:`PAGE_INVALID`});return}e.pageSize!==void 0&&!K(e.pageSize)&&t.push({type:`page`,id:`${e.id}-page-size`,pageId:e.id,message:`${e.title||`第 ${n+1} 页`}:页面尺寸必须在 ${d} ~ ${f} CSS px 之间`,code:`PAGE_SIZE_INVALID`}),N(e.contentHtml).forEach(e=>c.add(e)),P(e.contentHtml).forEach((r,i)=>{t.push({type:`security`,id:`${e.id}-security-${i}`,pageId:e.id,message:`${e.title||`第 ${n+1} 页`}:${r}`,code:`HTML_UNSAFE`})})}),c.forEach(e=>{s.has(e)||t.push({type:`variable`,id:e,variableKey:e,message:`正文引用的变量 ${e} 缺少配置`,code:`VARIABLE_CONFIG_MISSING`})});let l=n.collectPageDecorationVariableKeys(e.pageDecorations);return s.forEach((e,n)=>{!c.has(n)&&!l.has(n)&&t.push({type:`variable`,id:n,variableKey:n,message:`变量 ${n} 缺少正文节点`,code:`VARIABLE_NODE_MISSING`})}),t.push(...n.validatePageDecorations(e.pageDecorations,o)),t}function b(t,r,i={}){if(!t||!Array.isArray(t.pages))return[];let o=Array.isArray(t.variables)?t.variables:[],s=new Map(o.filter(e=>e?.key).map(e=>[e.key,e])),c=e.hasPositivePageSize(t.pageSize)?t.pageSize:a.DEFAULT_PAGE_SIZE;return t.pages.flatMap(e=>{if(!e||typeof e.id!=`string`||!e.id.trim()||typeof e.contentHtml!=`string`)return[];let l=a.resolvePageSize(e.pageSize,c);return[{id:e.id,title:e.title||`未命名页面`,format:l.format??`Custom`,width:l.width,height:l.height,contentHtml:C(e.contentHtml,s,r,i),...t.pageDecorations?{pageDecorations:n.normalizePageDecorations(t.pageDecorations)}:{},decorationVariables:o,decorationValues:r}]})}function x(t,r,i={}){return b(t,r,i).map((t,r,i)=>{let a=n.buildPageDecorationsHtml(t.pageDecorations,r+1,i.length,t.decorationVariables,t.decorationValues);return`<section class="${n.buildPageDecorationClassNames(t.pageDecorations,r+1)}" data-page-id="${e.escapeHtmlAttribute(t.id)}" data-page-format="${e.escapeHtmlAttribute(t.format)}" data-page-width="${t.width}" data-page-height="${t.height}" style="width:${t.width}px;min-height:${t.height}px">${a}<div class="gd-contract-template-page__content">${t.contentHtml}</div></section>`}).join(`
|
|
2
|
+
`)}function S(e){return e==null||e===``||Array.isArray(e)&&e.length===0}function C(t,n,r,i){if(!t)return t;let a=M(t);if(e.canUseDomHtml()){let e=new DOMParser().parseFromString(a,`text/html`);return e.querySelectorAll(`[data-template-variable]`).forEach(e=>{w(e,n,r,i)}),e.body.innerHTML}return e.replaceTemplateVariableSpans(a,(t,a)=>{let o=e.getHtmlAttribute(a,`data-key`);return o?T(n.get(o),o,r[o],i):t})}function w(e,t,n,r){let i=e.dataset.key||``,a=t.get(i);if(!i||!a)return;let o=new DOMParser().parseFromString(T(a,i,n[i],r),`text/html`).body.firstElementChild;o&&e.replaceWith(o)}function T(e,t,n,r){return r.mode===`display`?E(e,t,n,r):D(e,t,n,r)}function E(n,r,i,a){let s=n?.type??`text`,c=i??O(n),l=s===`image`&&!S(c)&&!o.isSafeContractImageUrl(String(c))?``:c,u=A(l),d=t.resolveTemplateVariablePresentation({type:s,width:n?.width,height:n?.height,placeholder:n?.placeholder??``,defaultValue:u,format:n?.format??``,precision:n?.precision,useGrouping:n?.useGrouping,checkedText:n?.checkedText??``,uncheckedText:n?.uncheckedText??``,multiline:n?.multiline,rows:n?.rows,lineHeight:n?.lineHeight,style:n?.style}),f=d.displayText||n?.placeholder||n?.label||r,p=[`class="${e.escapeHtmlAttribute([`gd-contract-template-renderer__control`,`gd-contract-template-renderer__preview-control`,...d.classes,a.activeKey===r?`is-active`:``,S(l)?`is-empty`:``].filter(Boolean).join(` `))}"`,`style="${e.escapeHtmlAttribute(d.styleText)}"`,`data-contract-render-wrapper="true"`,`data-contract-render-preview="true"`,`data-key="${e.escapeHtmlAttribute(r)}"`,`data-variable-type="${e.escapeHtmlAttribute(s)}"`,`aria-label="${e.escapeHtmlAttribute(n?.label||r)}"`,a.disabled?``:`role="button"`,a.disabled?``:`tabindex="0"`].filter(Boolean).join(` `);return s===`checkbox`?`<span ${p}><span class="gd-contract-template-renderer__checkbox-mark" aria-hidden="true">${j(l)?`✓`:``}</span>${e.escapeHtmlText(f)}</span>`:s===`image`&&!S(l)?`<span ${p}></span>`:`<span ${p}>${e.escapeHtmlText(f)}</span>`}function D(n,r,a,o){let s=n?.type??`text`,c=!!o.readonly,l=k(a??O(n)),u=t.resolveTemplateVariablePresentation({type:s,width:n?.width,height:n?.height,placeholder:n?.placeholder??``,defaultValue:c?l:``,format:n?.format??``,precision:n?.precision,useGrouping:n?.useGrouping,checkedText:n?.checkedText??``,uncheckedText:n?.uncheckedText??``,multiline:n?.multiline,rows:n?.rows,lineHeight:n?.lineHeight,style:n?.style}),d=o.disabled||c,f=[`data-contract-render-control="true"`,`data-key="${e.escapeHtmlAttribute(r)}"`,`data-variable-type="${e.escapeHtmlAttribute(s)}"`,`aria-label="${e.escapeHtmlAttribute(n?.label||r)}"`,d?`disabled`:``,c?`readonly`:``].filter(Boolean).join(` `),p=`style="${e.escapeHtmlAttribute(u.styleText)}"`,m=e.escapeHtmlAttribute([`gd-contract-template-renderer__control`,...u.classes].join(` `));return s===`checkbox`?`<label class="${m}" ${p} data-contract-render-wrapper="true" data-key="${e.escapeHtmlAttribute(r)}"><input type="checkbox" ${f} ${j(l)?`checked`:``}>${e.escapeHtmlText(n?.checkedText||n?.label||r)}</label>`:c?`<span class="${m}" ${p} data-contract-render-wrapper="true" data-key="${e.escapeHtmlAttribute(r)}">${e.escapeHtmlText(u.displayText||l)}</span>`:s===`number`?`<input class="${m}" ${p} type="number" ${f} value="${e.escapeHtmlAttribute(l)}" placeholder="${e.escapeHtmlAttribute(n?.placeholder||``)}">`:s===`date`?`<input class="${m}" ${p} type="date" ${f} value="${e.escapeHtmlAttribute(l)}" placeholder="${e.escapeHtmlAttribute(n?.placeholder||``)}">`:s===`select`||s===`radio`||s.endsWith(`-selector`)||s===`custom`?`<span class="${m}" ${p} data-contract-render-wrapper="true" data-key="${e.escapeHtmlAttribute(r)}">${e.escapeHtmlText(i.formatContractTemplateRenderValue(a))}</span>`:n?.multiline?`<textarea class="${m}" ${p} ${f} placeholder="${e.escapeHtmlAttribute(n.placeholder||``)}">${e.escapeHtmlText(l)}</textarea>`:`<input class="${m}" ${p} type="text" ${f} value="${e.escapeHtmlAttribute(l)}" placeholder="${e.escapeHtmlAttribute(n?.placeholder||``)}">`}function O(e){if(!e)return``;if(e.type===`checkbox`)return j(e.defaultValue);if(e.type===`number`&&e.defaultValue!==void 0){let t=Number(e.defaultValue);return Number.isFinite(t)?t:e.defaultValue}if(!(e.type===`select`||e.type===`radio`||e.type?.endsWith(`-selector`)))return e.defaultValue??``}function k(e){return typeof e==`boolean`?e?`true`:``:e==null?``:i.formatContractTemplateRenderValue(e)}function A(e){return typeof e==`boolean`?e?`true`:`false`:e==null?``:i.formatContractTemplateRenderValue(e)}function j(e){return e===!0||e===`true`||e===`1`||e===`yes`||e===`是`||e===`已选`}function M(t){if(e.canParseHtmlDocument()){let e=new DOMParser().parseFromString(t,`text/html`);return e.querySelectorAll(`script,style,meta,link,iframe,object,embed`).forEach(e=>e.remove()),e.querySelectorAll(`*`).forEach(e=>{Array.from(e.attributes).forEach(t=>{let n=t.name.toLowerCase();(n.startsWith(`on`)||n===`srcdoc`||l.has(n)&&F(t.value)||n===`style`&&L(t.value))&&e.removeAttribute(t.name)})}),e.body.innerHTML}return t.replace(/<\s*(script|style|iframe|object|embed)\b[^>]*>[\s\S]*?<\s*\/\s*\1\s*>/gi,``).replace(/<\s*\/?\s*(?:script|style|meta|link|iframe|object|embed)\b[^>]*>/gi,``).replace(/\s+on[a-z]+\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi,``).replace(/\s+srcdoc\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi,``).replace(/\s+(action|formaction|href|src|xlink:href)\s*=\s*(?:(["'])(.*?)\2|([^\s>]+))/gi,(e,t,n,r,i)=>{let a=r??i??``;return F(a)?``:n?` ${t}=${n}${a}${n}`:` ${t}=${a}`}).replace(/\s+style\s*=\s*(["'])(.*?)\1/gi,(e,t,n)=>L(n)?``:` style=${t}${n}${t}`)}function N(t){return e.collectFromHtmlTags(t,u,t=>e.getHtmlAttribute(t,`data-key`))}function P(e){let t=[];return/<\s*(script|style|meta|link|iframe|object|embed)\b/i.test(e)&&t.push(`正文包含已移除的危险标签`),/\s(?:on[a-z]+|srcdoc)\s*=/i.test(e)&&t.push(`正文包含已移除的事件或嵌入属性`),(I(e)||/style\s*=\s*["'][^"']*(?:expression\s*\(|url\s*\(\s*["']?\s*(?:javascript|vbscript|data:text\/html))/i.test(e))&&t.push(`正文包含已移除的危险 URL 或样式`),t}function F(e){let t=e.replace(/&#(?:x([\da-f]+)|(\d+));?/gi,(e,t,n)=>{let r=Number.parseInt(t??n??``,t?16:10);try{return Number.isFinite(r)?String.fromCodePoint(r):e}catch{return e}}).replace(/&(colon|tab|newline);/gi,(e,t)=>({colon:`:`,newline:`
|
|
3
|
+
`,tab:` `})[t.toLowerCase()]??``).trim().replace(/[\u0000-\u0020\u007F]+/g,``);return/^(?:javascript|vbscript|data:text\/html)/i.test(t)}function I(e){let t=/\s+(?:action|formaction|href|src|xlink:href)\s*=\s*(?:(["'])(.*?)\1|([^\s>]+))/gi,n=t.exec(e);for(;n;){if(F(n[2]??n[3]??``))return!0;n=t.exec(e)}return!1}function L(e){return/expression\s*\(|url\s*\(\s*["']?\s*(?:javascript|vbscript|data:text\/html)/i.test(e)}function R(e,t){return S(t)&&!S(e.defaultValue)?e.defaultValue:t}function z(e,t){if(typeof e==`boolean`||typeof e!=`number`&&typeof e!=`string`)return!1;let n=String(e).trim();if(!/^-?(?:\d+)(?:\.\d+)?$/.test(n))return!1;let r=Number(n);if(!Number.isFinite(r))return!1;if(t!==void 0){let e=n.split(`.`)[1]?.length??0;if(!Number.isInteger(t)||t<0||t>p||e>t)return!1}return!0}function B(e){if(typeof e!=`string`&&typeof e!=`number`)return!1;let t=String(e).trim(),n=/^(\d{4})[-/年](\d{1,2})[-/月](\d{1,2})(?:日)?(?:[T\s].*)?$/.exec(t);if(!n)return!1;let r=Number(n[1]),i=Number(n[2]),a=Number(n[3]),o=new Date(Date.UTC(r,i-1,a));return o.getUTCFullYear()===r&&o.getUTCMonth()===i-1&&o.getUTCDate()===a}function V(e){return typeof e==`boolean`?!0:[`1`,`true`,`yes`,`checked`,`是`,`已选`,`0`,`false`,`no`,`unchecked`,`否`,`未选`].includes(String(e).trim().toLowerCase())}function H(e){return m.test(e)}function U(e){return e===`select`||e===`radio`||e===`user-selector`||e===`dept-selector`||e===`role-selector`||e===`org-selector`}function W(e,t){return t?Array.isArray(e)&&e.every(i.isContractTemplateSelectionValue):i.isContractTemplateSelectionValue(e)}function G(e,t){let n=e.width;if(!Number.isFinite(n)||n<=0)return!1;let r=Math.max(10,Number.isFinite(e.style?.fontSize)&&(e.style?.fontSize??0)>0?e.style.fontSize:14),i=Math.max(1,n-12)/r,a=e=>Array.from(e).reduce((e,t)=>e+(/[^\x00-\x7f]/.test(t)?1:.55),0);return e.multiline?t.split(/\r?\n/).reduce((e,t)=>e+Math.max(1,Math.ceil(a(t)/i)),0)>(e.rows??3):a(t)>i}function K(e){if(!e||typeof e!=`object`)return!1;let{width:t,height:n}=e;return typeof t==`number`&&typeof n==`number`&&Number.isFinite(t)&&Number.isFinite(n)&&t>=d&&n>=d&&t<=f&&n<=f}exports.buildInitialRenderValues=h,exports.buildTemplateRenderHtml=x,exports.buildTemplateRenderPages=b,exports.buildTemplateVariableData=s,exports.isEmptyRenderValue=S,exports.normalizeRenderValues=g,exports.resolveTemplateRenderSubmitErrors=v,exports.sanitizeContractRendererHtml=M,exports.validateTemplateRenderStructure=y,exports.validateTemplateRenderValues=_;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=[`table`,`cleanup`,`list`,`font-family`,`alignment`,`font-appearance`,`signing`,`insert`];function t(t){let n=t.
|
|
1
|
+
var e=[`table`,`cleanup`,`list`,`font-family`,`alignment`,`font-appearance`,`signing`,`insert`];function t(t,n,r){let i=new Set(n),a=e.filter(e=>!i.has(e)),o=t.fixedItemCount+a.length+ +!!r,s=a.reduce((e,n)=>e+(t.groupWidths[n]??0),0),c=Math.max(0,o-1)*(t.itemGap??0);return t.fixedWidth+s+(r?t.moreWidth:0)+c}function n(n){let r=n.buffer??0;if(t(n,[],!1)+r<=n.availableWidth)return[];let i=[];for(let a of e)if(i.push(a),t(n,i,!0)+r<=n.availableWidth)break;return i}exports.CONTRACT_TEMPLATE_TOOLBAR_OVERFLOW_PRIORITY=e,exports.resolveContractTemplateToolbarOverflowKeys=n;
|