@vtj/renderer 0.8.171 → 0.8.172

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/index.cjs CHANGED
@@ -2,9 +2,9 @@
2
2
  * Copyright (c) 2024, VTJ.PRO All rights reserved.
3
3
  * @name @vtj/renderer
4
4
  * @author CHC chenhuachun1549@dingtalk.com
5
- * @version 0.8.171
5
+ * @version 0.8.172
6
6
  * @license <a href="https://vtj.pro/license.html">MIT License</a>
7
- */const b="0.8.171";var w=(n=>(n.Runtime="Runtime",n.Design="Design",n.Raw="Raw",n.VNode="VNode",n))(w||{});const B=["$el","$emit","$nextTick","$parent","$root","$attrs","$slots","$watch","$props","$options","$forceUpdate"],Ue=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeUnmount","unmounted","errorCaptured","renderTracked","renderTriggered","activated","deactivated"],ne=["vIf","vShow","vModel","vFor","vBind"],re={String,Number,Boolean,Array,Object,Function,Date},q="VtjPage",oe="VtjHomepage";function A(n,e){return n.map(t=>c.isUrl(t)||t.startsWith("/")?t:`${e}${t}`)}function H(n){return/\.css$/.test(n)}function k(n){return/\.js$/.test(n)}function ie(n){return/\.json$/.test(n)}function Ne(n){return n.map(e=>`<script src="${c.url.append(e,{v:b})}"><\/script>`).join("")}function Be(n=[]){return n.map(e=>`<link rel="stylesheet" href="${c.url.append(e,{v:b})}" />`).join("")}function ae(n,e=!1){return e&&n.endsWith(".prod.js")?n.replace(".prod.js",".js"):n}function ce(n,e,t=!1){const s=n.filter(f=>!!f.enabled),r=[],o=[],a=[],i=[],l={},u={},h=[],d={};return s.forEach(({urls:f,assetsUrl:v,library:p,assetsLibrary:g,localeLibrary:E})=>{f?.forEach(y=>{k(y)&&r.push(ae(y,t)),H(y)&&o.push(y)}),p&&(i.push(p),l[p]=A(f||[],e),E&&(u[p]=E)),v&&a.push(v),g&&h.push(g),p&&g&&(d[g]=p)}),{scripts:A(r,e),css:A(o,e),materials:A(a,e),libraryExports:i,materialExports:c.dedupArray(h),materialMapLibrary:d,libraryMap:l,libraryLocaleMap:u}}function ue(n,e){const{name:t,parent:s,alias:r}=n;return s?e[s]?.[r||t]:e[r||t]}function J(n){return c.isString(n)?n:JSON.stringify(n)}function V(n,e,t){const s=n.CSSStyleSheet;if(s.prototype.replaceSync){const r=new s;r.id=e,r.replaceSync(t);const o=n.document,a=o.adoptedStyleSheets,i=Array.from(a).filter(l=>l.id!==e);o.adoptedStyleSheets=[...i,r]}else{const r=n.document;let o=r.getElementById(e);o?o.innerHTML=t:(o=r.createElement("style"),o.id=e,o.innerHTML=t,r.head.appendChild(o))}}async function le(n,e){const t=await window.fetch(e).then(s=>s.text()).catch(()=>"");t&&V(window,n,t)}function de(n,e=window){const t=e.document,s=e.document.head;for(const r of n)if(!t.getElementById(r)){const a=t.createElement("link");a.rel="stylesheet",a.id=r,a.href=r,s.appendChild(a)}}async function fe(n,e,t=window){const s=t.document,r=t.document.head;let o=t[e];return o?o.default||o:new Promise((a,i)=>{for(const l of n){const u=s.createElement("script");u.src=l,u.onload=()=>{o=t[e],o?a(o.default||o):i(null)},u.onerror=h=>{i(h)},r.appendChild(u)}})}function pe(n){return c.isFunction(n)||c.isFunction(n?.install)}function R(n,e,t=!1,s=!1){try{const r=['"use strict";',"var __self = arguments[0];"];r.push("return ");let o=(n.value||"").trim();o=o.replace(/this(\W|$)/g,(i,l)=>`__self${l}`),o=r.join(`
8
- `)+o;const a=`with(${t?"{}":"$scope || {}"}) { ${o} }`;return new Function("$scope",a)(e)}catch(r){if(c.logger.error("parseExpression.error",r,n,e?.__self??e),s)throw r}}function L(n,e,t=!1,s=!1){const r=R(n,e,t,s);if(typeof r!="function"&&(c.logger.error("parseFunction.error","not a function",n,e?.__self??e),s))throw new Error(`"${n.value}" not a function`);return r}function j(n){return n&&n.type==="JSExpression"}function M(n){return typeof n=="object"&&n&&n.type==="JSFunction"}function he(n){return j(n)||M(n)}function Le(n){return he(n)?n.value:JSON.stringify(n)}let $=null;const qe=c.createRequest({settings:{type:"form",validSuccess:!0,originResponse:!1,loading:!0,validate:n=>n.data?.code===0||!!n.data?.success,failMessage:!0,showError:n=>{F.ElNotification.error({message:n||"未知错误"})},showLoading:()=>{$&&$.close(),$=F.ElLoading.service({lock:!0,text:"Loading",background:"rgba(0, 0, 0, 0.05)"})},hideLoading:()=>{$&&($.close(),$=null)}}});let C;function me(n,e){const{jsonp:t,request:s}=e;if(n.method==="jsonp")return(r={})=>t(n.url,{...n.jsonpOptions,query:r});{const r=n.headers?R(n.headers,{},!0):void 0,o={url:n.url,method:n.method,settings:{...n.settings,headers:r}};return(a,i)=>(delete o.data,s.send(c.merge(o,i||{},{data:a})))}}function ge(n,e){const{metaQuery:t}=e;if(!t)return;const{code:s,queryCode:r}=n;return(o,a)=>{if(!t){console.warn("adapter.metaQuery is not defined!");return}return t(s,r,o,a)}}function ve(n=[],e=[],t){const s={};for(const r of n)s[r.id]=me(r,t);for(const r of e)s[r.id]=ge(r,t);return s}async function ye(n=[]){C=await import("mockjs").then(e=>e.default||e),C&&(C.setup({timeout:"50-500"}),K(),n.forEach(e=>_e(C,e)))}function _e(n,e){if(!e.mock)return;const{url:t,mockTemplate:s}=e;if(t&&s){const r=c.pathToRegexp(`${t}(.*)`),o=c.pathToRegexpMatch(t,{decode:decodeURIComponent}),a=R(s,{},!0);n.mock(r,i=>{const l=c.url.parse(i.url)||{},u=i.body instanceof FormData?c.formDataToJson(i.body):i.body,h=o(i.url)?.params;return Object.assign(i,{data:u,params:l,query:h}),n.mock(a(i))})}}function K(){C&&(C._mocked={})}const Je={session:!1,authKey:"Authorization",storageKey:"ACCESS_STORAGE",storagePrefix:"__VTJ__",unauthorized:"/unauthorized",auth:"/#/login",redirectParam:"r",unauthorizedCode:401,unauthorizedMessage:"登录已经失效,请重新登录!"},z=Symbol("access");class Ve{options;data=null;mode=w.Raw;constructor(e){this.options=Object.assign({},Je,e),this.loadData()}connect(e){const{mode:t,router:s,request:r}=e;this.mode=t,s&&t===w.Raw&&this.setGuard(s),r&&this.setRequest(r)}login(e){const{storageKey:t,storagePrefix:s,session:r,authKey:o}=this.options;this.setData(e),this.data&&(c.storage.save(t,e,{type:"local",prefix:s}),r&&c.cookie.set(o,this.data.token))}clear(){const{storageKey:e,storagePrefix:t,session:s,authKey:r}=this.options;this.data=null,c.storage.remove(e,{type:"local",prefix:t}),s&&c.cookie.remove(r)}logout(){this.clear(),this.toLogin()}getData(){return this.data}can(e){const{permissions:t={}}=this.data||{};return typeof e=="function"?e(t):c.toArray(e).every(r=>t[r])}some(e){const{permissions:t={}}=this.data||{};return c.toArray(e).some(r=>t[r])}install(e){e.config.globalProperties.$access||(e.config.globalProperties.$access=this),e.provide(z,this)}isAuthPath(e){const{auth:t,isAuth:s}=this.options;if(s)return s(e);if(e.path&&typeof t=="string"){const r=t.split("#")[1]||t;return e.path===r}return!1}toLogin(){const{auth:e,redirectParam:t}=this.options;if(!e||this.mode!==w.Raw)return;const s=t?`?${t}=${encodeURIComponent(location.href)}`:"";typeof e=="function"?e(s):location.href=t?`${e}${s}`:e}setData(e){const{privateKey:t}=this.options;if(Array.isArray(e)&&t){const s=e.map(r=>c.unRSA(r,t));this.data=JSON.parse(s.join(""));return}if(typeof e=="string")try{const s=t?c.unRSA(e,t):e;s?this.data=JSON.parse(s):console.warn("RSA解密失败或登录信息缺失")}catch(s){console.warn(s)}else this.data=e}loadData(){const{storageKey:e,storagePrefix:t}=this.options,s=c.storage.get(e,{type:"local",prefix:t});this.setData(s)}isLogined(){const{session:e,authKey:t}=this.options;return e&&t?!!c.cookie.get(t):!!this.data}hasRoutePermission(e){if(e.name===q){const t=e.params.id;return t&&this.can(t)}return!0}setGuard(e){e.beforeEach((t,s,r)=>this.guard(t,r))}guard(e,t){if(this.isWhiteList(e)||this.isAuthPath(e))return t();if(this.isLogined())return this.hasRoutePermission(e)?t():(this.showTip("无权限访问该页面"),t(!1));t(!1),this.toLogin()}isWhiteList(e){const{whiteList:t}=this.options;return t?Array.isArray(t)?t.some(s=>e.fullPath.startsWith(s)):t(e):!1}isUnauthorized(e){const{unauthorizedCode:t=401}=this.options;return e.status===t||e.data.code===t}async showUnauthorizedAlert(e){const{unauthorizedMessage:t="登录已失效"}=this.options;this.isUnauthorized(e)&&(await this.showTip(t),this.toLogin())}async showTip(e){const{alert:t}=this.options;t&&(await c.delay(150),await t(e,{title:"提示",type:"warning"}).catch(s=>s))}setRequest(e){e.useRequest(t=>(this.data?.token&&(t.headers[this.options.authKey]=this.data?.token),t)),e.useResponse(async t=>(await this.showUnauthorizedAlert(t),t),async t=>{const s=t.response||t||{};return await this.showUnauthorizedAlert(s),Promise.reject(t)})}}function Se(){return m.inject(z,null)}class we{__id=null;__mode;__instance=null;__contextRefs={};__refs={};context={};state={};props={};$props={};$refs={};$el=null;$emit=null;$nextTick=null;$parent=null;$root=null;$attrs=null;$slots=null;$watch=null;$options=null;$forceUpdate=null;$components={};$libs={};$apis={};__transform={};constructor(e){const{mode:t,dsl:s,attrs:r}=e;this.__mode=t,s&&(this.__id=s.id||null,this.__transform=s.transform||{}),r&&Object.assign(this,r)}setup(e,t=x){const s=t.getCurrentInstance();if(!s)return;this.__refs={},this.$refs={},this.context={},this.__contextRefs={},this.__instance=s.proxy;const r=s.appContext.config.globalProperties;Object.assign(this,r),Object.assign(this,e||{}),this.__proxy(),t.onMounted(()=>{this.__proxy()}),t.onUnmounted(()=>{this.__cleanup()}),t.onBeforeUpdate(()=>{this.__refs={},this.$refs={},this.__contextRefs={},this.context={}})}__proxy(){this.__instance&&B.forEach(e=>{this[e]=this.__instance?.[e]})}__cleanup(){B.forEach(e=>{this[e]=null})}__parseFunction(e){if(e)if(this.__mode===w.Runtime){const{id:t,type:s}=e,r=t?this.__transform[t]??e.value:e.value;return L({type:s,value:r},this)}else return L(e,this)}__parseExpression(e){if(e)if(this.__mode===w.Runtime){const{id:t,type:s}=e,r=t?this.__transform[t]??e.value:e.value;return R({type:s,value:r},this)}else return R(e,this)}__ref(e=null,t){if(this.__mode!==w.VNode)return e&&e!==this.__id&&(this.__contextRefs[e]=this),async s=>{await c.delay(0);let r=s?.$vtjEl||s?.$el||s?._?.vnode?.el||s;if(!r){typeof t=="string"&&(delete this.$refs[t],e&&delete this.__refs[e]);return}if(r.nodeType===3&&r.nextSibling&&(r=r.nextSibling),r.__vtj__=e,w.Design===this.__mode&&(r.__context__=this,r.draggable=!0),e&&(this.__refs[e]=s),typeof t=="function")t(s);else if(t){const o=this.$refs[t];if(o&&s!==o){const a=new Set([].concat(o,s));this.$refs[t]=Array.from(a)}else this.$refs[t]=s}return s}}__clone(e={}){const t={...this.context,...e},s={...t,context:t};return s.context.__proto__=this.context,s.__proto__=this,s}}function T(n){const{Vue:e=x,mode:t=w.Runtime,components:s={},libs:r={},apis:o={},loader:a}=n,i=e.computed(()=>n.dsl),l={$components:s,$libs:r,$apis:o},u=new we({mode:t,dsl:i.value,attrs:l}),h=e.defineComponent({name:i.value.name,props:{...ze(i.value.props??[],u)},setup(d){u.$props=d,u.props=d,i.value.id&&V(n.window||window,i.value.id,i.value.css||""),u.state=We(e,i.value.state??{},u);const f=Ge(e,i.value.computed??{},u),v=Ye(i.value.methods??{},u),p=Xe(e,i.value.inject,u),g=Ee(i.value.dataSources||{},u),E={...p,...f,...v,...g};return u.setup(E,e),Qe(e,i.value.watch??[],u),{vtj:u}},emits:Ke(i.value.emits),expose:["vtj"],render(){if(!i.value.nodes)return null;const d=i.value.nodes||[];return d.length===1?O(d[0],u,e,a):d.map(f=>O(f,u,e,a))},...Ze(i.value.lifeCycles??{},u)});return{renderer:e.markRaw(h),context:u}}function Ke(n=[]){return n.map(e=>c.isString(e)?e:e.name)}function ze(n=[],e){const t=s=>s?(Array.isArray(s)?s:[s]).map(o=>re[o]):void 0;return n.map(s=>c.isString(s)?{name:s}:{name:s.name,type:s.type,required:s.required,default:j(s.default)?e.__parseExpression(s.default):s.default}).reduce((s,r)=>(s[r.name]={type:t(r.type),required:r.required,default:r.default},s),{})}function We(n,e,t){return n.reactive(Object.keys(e||{}).reduce((s,r)=>{let o=e[r];return j(o)?o=t.__parseExpression(o):M(o)&&(o=t.__parseFunction(o)),s[r]=o,s},{}))}function Ge(n,e,t){return Object.entries(e??{}).reduce((s,[r,o])=>(s[r]=n.computed(t.__parseFunction(o)),s),{})}function Ye(n,e){return Object.entries(n??{}).reduce((t,[s,r])=>(t[s]=e.__parseFunction(r),t),{})}function Xe(n,e=[],t){return e.reduce((s,r)=>{const{name:o,from:a}=r||{};r.default;const i=j(a)?t.__parseExpression(a)||o:a??o,l=j(r.default)?t.__parseExpression(r.default):r.default??null;return s[o]=n.inject(i,l),s},{})}function Ee(n,e){return Object.keys(n).reduce((t,s)=>{const r=n[s],o=e.$apis[r.ref],a=M(r.transform)?r.transform.value?e.__parseFunction(r.transform):void 0:r.transform;return t[s]=async(...i)=>{const l=await o.apply(e,i);return a?a(l):l},t},{})}function Qe(n,e=[],t){e.forEach(s=>{n.watch(t.__parseExpression(s.source),t.__parseFunction(s.handler),{deep:s.deep,immediate:s.immediate})})}function Ze(n,e){return Object.entries(n??{}).reduce((t,[s,r])=>(t[s]=e.__parseFunction(r),t),{})}let N=[];const je=n=>n;async function W(n,e=window){const{urls:t=[],library:s}=n,r=t.filter(i=>k(i));if(r.length===0||!s)return null;const o=t.filter(i=>H(i));return o.length&&de(o,e),await fe(r,s,e).catch(i=>(console.warn("loadScriptUrl error",r,s,i),null))}function D(n){const{getDsl:e,getDslByUrl:t,options:s}=n;return s.window&&(N.forEach(r=>{delete s.window[r]}),N=[]),(r,o,a=x)=>!o||typeof o=="string"?r:o.type==="Schema"&&o.id?a.defineAsyncComponent(async()=>{const i=await e(o.id);return i&&(i.name=r),i?T({...s,Vue:a,dsl:i,mode:w.Runtime,loader:D(n)}).renderer:null}):o.type==="UrlSchema"&&o.url?a.defineAsyncComponent(async()=>{const i=await t(o.url);return i&&(i.name=r),i?T({...s,Vue:a,dsl:i,mode:w.Runtime,loader:D(n)}).renderer:null}):o.type==="Plugin"?(o.library&&N.push(o.library),a.defineAsyncComponent(async()=>{const i=await W(o,s.window);return i||(console.warn("getPlugin result is null",o),null)})):r}function O(n,e,t=x,s=je){if(!n||!n.name||n.invisible)return null;const{id:r=null,directives:o=[]}=n,{vIf:a,vFor:i,vShow:l,vModels:u,vBind:h}=et(o);if(a&&!tt(a,e))return null;const d=f=>{const v=f.$components,p=(()=>{if(n.name==="component")return st(f,n.props?.is);if(n.name==="slot")return n.name;const _=s(n.name,n.from,t);return c.isString(_)?v[_]??_:_})(),g=nt(r,n.props??{},f),E=rt(t,n.events??{},f);if(n.name==="slot")return ot(t,n,g,f,s);h&&Object.assign(g,f.__parseExpression(h.value)),l&&(g.style=Object.assign(g.style??{},at(l,f))),u.forEach(_=>{Object.assign(g,ct(t,_,f))});const y=ut(t,n.children??[],f,s,n);return t.createVNode(p,{...g,...E},y)};return i?ft(i,d,e):d(e)}function et(n=[]){const e=n.find(i=>c.camelCase(i.name)==="vIf"),t=n.find(i=>c.camelCase(i.name)==="vFor"),s=n.find(i=>c.camelCase(i.name)==="vShow"),r=n.find(i=>c.camelCase(i.name)==="vBind"),o=n.filter(i=>c.camelCase(i.name)==="vModel"),a=n.filter(i=>!ne.includes(c.camelCase(i.name)));return{vIf:e,vFor:t,vShow:s,vModels:o,vBind:r,others:a}}function tt(n,e){return!!e.__parseExpression(n.value)}function st(n,e){return e?j(e)?n.__parseExpression(e):e:"div"}function nt(n,e,t){const s=Object.keys(e||{}).reduce((r,o)=>{let a=e[o];return j(a)?a=t.__parseExpression(a):M(a)&&(a=t.__parseFunction(a)),r[o]=a,r},{});return s.ref=t.__ref(n,s.ref),s}function rt(n,e,t){const s=["passive","capture","once"],r={capture:"Capture",once:"Once",passive:"OnceCapture"};return Object.keys(e||{}).reduce((o,a)=>{const i=e[a],l=G(i.modifiers),u=l.find(f=>s.includes(f)),h="on"+c.upperFirst(a)+(u&&r[u]||""),d=t.__parseFunction(i.handler);return d&&(o[h]=n.withModifiers(d,l)),o},{})}function G(n={},e=!1){const t=Object.keys(n);return e?t.map(s=>"."+s):t}function ot(n,e,t,s,r){const{children:o}=e,a=it(e,s),i=s.$slots?.[a.name];return i?i(t):o?c.isString(o)?n.createTextVNode(o):j(o)?n.createTextVNode(J(s.__parseExpression(o))):Array.isArray(o)?o.map(l=>O(l,s,n,r)):null:null}function it(n,e){const{props:t}=n,s=t?.name||"default";return{name:j(s)?e.__parseExpression(s):s,params:[]}}function at(n,e){return e.__parseExpression(n.value)?{}:{display:"none"}}function ct(n,e,t){const s={type:"JSFunction",value:e.value?.value?`(v) => {
7
+ */const b="0.8.172";var w=(n=>(n.Runtime="Runtime",n.Design="Design",n.Raw="Raw",n.VNode="VNode",n))(w||{});const B=["$el","$emit","$nextTick","$parent","$root","$attrs","$slots","$watch","$props","$options","$forceUpdate"],Ue=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeUnmount","unmounted","errorCaptured","renderTracked","renderTriggered","activated","deactivated"],ne=["vIf","vShow","vModel","vFor","vBind"],re={String,Number,Boolean,Array,Object,Function,Date},q="VtjPage",oe="VtjHomepage";function A(n,e){return n.map(t=>c.isUrl(t)||t.startsWith("/")?t:`${e}${t}`)}function H(n){return/\.css$/.test(n)}function k(n){return/\.js$/.test(n)}function ie(n){return/\.json$/.test(n)}function Ne(n){return n.map(e=>`<script src="${c.url.append(e,{v:b})}"><\/script>`).join("")}function Be(n=[]){return n.map(e=>`<link rel="stylesheet" href="${c.url.append(e,{v:b})}" />`).join("")}function ae(n,e=!1){return e&&n.endsWith(".prod.js")?n.replace(".prod.js",".js"):n}function ce(n,e,t=!1){const s=n.filter(f=>!!f.enabled),r=[],o=[],a=[],i=[],l={},u={},h=[],d={};return s.forEach(({urls:f,assetsUrl:v,library:p,assetsLibrary:g,localeLibrary:E})=>{f?.forEach(y=>{k(y)&&r.push(ae(y,t)),H(y)&&o.push(y)}),p&&(i.push(p),l[p]=A(f||[],e),E&&(u[p]=E)),v&&a.push(v),g&&h.push(g),p&&g&&(d[g]=p)}),{scripts:A(r,e),css:A(o,e),materials:A(a,e),libraryExports:i,materialExports:c.dedupArray(h),materialMapLibrary:d,libraryMap:l,libraryLocaleMap:u}}function ue(n,e){const{name:t,parent:s,alias:r}=n;return s?e[s]?.[r||t]:e[r||t]}function J(n){return c.isString(n)?n:JSON.stringify(n)}function V(n,e,t){const s=n.CSSStyleSheet;if(s.prototype.replaceSync){const r=new s;r.id=e,r.replaceSync(t);const o=n.document,a=o.adoptedStyleSheets,i=Array.from(a).filter(l=>l.id!==e);o.adoptedStyleSheets=[...i,r]}else{const r=n.document;let o=r.getElementById(e);o?o.innerHTML=t:(o=r.createElement("style"),o.id=e,o.innerHTML=t,r.head.appendChild(o))}}async function le(n,e){const t=await window.fetch(e).then(s=>s.text()).catch(()=>"");t&&V(window,n,t)}function de(n,e=window){const t=e.document,s=e.document.head;for(const r of n)if(!t.getElementById(r)){const a=t.createElement("link");a.rel="stylesheet",a.id=r,a.href=r,s.appendChild(a)}}async function fe(n,e,t=window){const s=t.document,r=t.document.head;let o=t[e];return o?o.default||o:new Promise((a,i)=>{for(const l of n){const u=s.createElement("script");u.src=l,u.onload=()=>{o=t[e],o?a(o.default||o):i(null)},u.onerror=h=>{i(h)},r.appendChild(u)}})}function pe(n){return c.isFunction(n)||c.isFunction(n?.install)}function R(n,e,t=!1,s=!1){try{const r=['"use strict";',"var __self = arguments[0];"];r.push("return ");let o=(n.value||"").trim();o=o.replace(/this(\W|$)/g,(i,l)=>`__self${l}`),o=r.join(`
8
+ `)+o;const a=`with(${t?"{}":"$scope || {}"}) { ${o} }`;return new Function("$scope",a)(e)}catch(r){if(c.logger.error("parseExpression.error",r,n,e?.__self??e),s)throw r}}function L(n,e,t=!1,s=!1){const r=R(n,e,t,s);if(typeof r!="function"&&(c.logger.error("parseFunction.error","not a function",n,e?.__self??e),s))throw new Error(`"${n.value}" not a function`);return r}function j(n){return n&&n.type==="JSExpression"}function M(n){return typeof n=="object"&&n&&n.type==="JSFunction"}function he(n){return j(n)||M(n)}function Le(n){return he(n)?n.value:JSON.stringify(n)}let $=null;const qe=c.createRequest({settings:{type:"form",validSuccess:!0,originResponse:!1,loading:!0,validate:n=>n.data?.code===0||!!n.data?.success,failMessage:!0,showError:n=>{F.ElNotification.error({message:n||"未知错误"})},showLoading:()=>{$&&$.close(),$=F.ElLoading.service({lock:!0,text:"Loading",background:"rgba(0, 0, 0, 0.05)"})},hideLoading:()=>{$&&($.close(),$=null)}}});let C;function me(n,e){const{jsonp:t,request:s}=e;if(n.method==="jsonp")return(r={})=>t(n.url,{...n.jsonpOptions,query:r});{const r=n.headers?R(n.headers,{},!0):void 0,o={url:n.url,method:n.method,settings:{...n.settings,headers:r}};return(a,i)=>(delete o.data,s.send(c.merge(o,i||{},{data:a})))}}function ge(n,e){const{metaQuery:t}=e;if(!t)return;const{code:s,queryCode:r}=n;return(o,a)=>{if(!t){console.warn("adapter.metaQuery is not defined!");return}return t(s,r,o,a)}}function ve(n=[],e=[],t){const s={};for(const r of n)s[r.id]=me(r,t);for(const r of e)s[r.id]=ge(r,t);return s}async function ye(n=[]){C=await import("mockjs").then(e=>e.default||e),C&&(C.setup({timeout:"50-500"}),K(),n.forEach(e=>_e(C,e)))}function _e(n,e){if(!e.mock)return;const{url:t,mockTemplate:s}=e;if(t&&s){const r=c.pathToRegexp(`${t}(.*)`),o=c.pathToRegexpMatch(t,{decode:decodeURIComponent}),a=R(s,{},!0);n.mock(r,i=>{const l=c.url.parse(i.url)||{},u=i.body instanceof FormData?c.formDataToJson(i.body):i.body,h=o(i.url)?.params;return Object.assign(i,{data:u,params:l,query:h}),n.mock(a(i))})}}function K(){C&&(C._mocked={})}const Je={session:!1,authKey:"Authorization",storageKey:"ACCESS_STORAGE",storagePrefix:"__VTJ_",unauthorized:"/unauthorized",auth:"/#/login",redirectParam:"r",unauthorizedCode:401,unauthorizedMessage:"登录已经失效,请重新登录!",noPermissionMessage:"无权限访问该页面"},z=Symbol("access");class Ve{options;data=null;mode=w.Raw;constructor(e){this.options=Object.assign({},Je,e),this.loadData()}connect(e){const{mode:t,router:s,request:r}=e;this.mode=t,s&&t===w.Raw&&this.setGuard(s),r&&this.setRequest(r)}login(e){const{storageKey:t,storagePrefix:s,session:r,authKey:o}=this.options;this.setData(e),this.data&&(c.storage.save(t,e,{type:"local",prefix:s}),r&&c.cookie.set(o,this.data.token))}clear(){const{storageKey:e,storagePrefix:t,session:s,authKey:r}=this.options;this.data=null,c.storage.remove(e,{type:"local",prefix:t}),s&&c.cookie.remove(r)}logout(){this.clear(),this.toLogin()}getData(){return this.data}can(e){const{permissions:t={}}=this.data||{};return typeof e=="function"?e(t):c.toArray(e).every(r=>t[r])}some(e){const{permissions:t={}}=this.data||{};return c.toArray(e).some(r=>t[r])}install(e){e.config.globalProperties.$access||(e.config.globalProperties.$access=this),e.provide(z,this)}isAuthPath(e){const{auth:t,isAuth:s}=this.options;if(s)return s(e);if(e.path&&typeof t=="string"){const r=t.split("#")[1]||t;return e.path===r}return!1}toLogin(){const{auth:e,redirectParam:t}=this.options;if(!e||this.mode!==w.Raw)return;const s=t?`?${t}=${encodeURIComponent(location.href)}`:"";typeof e=="function"?e(s):location.href=t?`${e}${s}`:e}setData(e){const{privateKey:t}=this.options;if(Array.isArray(e)&&t){const s=e.map(r=>c.unRSA(r,t));this.data=JSON.parse(s.join(""));return}if(typeof e=="string")try{const s=t?c.unRSA(e,t):e;s?this.data=JSON.parse(s):console.warn("RSA解密失败或登录信息缺失")}catch(s){console.warn(s)}else this.data=e}loadData(){const{storageKey:e,storagePrefix:t}=this.options,s=c.storage.get(e,{type:"local",prefix:t});this.setData(s)}isLogined(){const{session:e,authKey:t}=this.options;return e&&t?!!c.cookie.get(t):!!this.data}hasRoutePermission(e){if(e.name===q){const t=e.params.id;return t&&this.can(t)}return!0}setGuard(e){e.beforeEach((t,s,r)=>this.guard(t,r))}guard(e,t){if(this.isWhiteList(e)||this.isAuthPath(e))return t();if(this.isLogined()){if(this.hasRoutePermission(e))return t();{const s=this.options.noPermissionMessage||"无权限访问";return this.showTip(s),t(!1)}}t(!1),this.toLogin()}isWhiteList(e){const{whiteList:t}=this.options;return t?Array.isArray(t)?t.some(s=>e.fullPath.startsWith(s)):t(e):!1}isUnauthorized(e){const{unauthorizedCode:t=401}=this.options;return e.status===t||e.data.code===t}async showUnauthorizedAlert(e){const{unauthorizedMessage:t="登录已失效"}=this.options;this.isUnauthorized(e)&&(await this.showTip(t),this.toLogin())}async showTip(e){const{alert:t}=this.options;t&&(await c.delay(150),await t(e,{title:"提示",type:"warning"}).catch(s=>s))}setRequest(e){e.useRequest(t=>(this.data?.token&&(t.headers[this.options.authKey]=this.data?.token),t)),e.useResponse(async t=>(await this.showUnauthorizedAlert(t),t),async t=>{const s=t.response||t||{};return await this.showUnauthorizedAlert(s),Promise.reject(t)})}}function Se(){return m.inject(z,null)}class we{__id=null;__mode;__instance=null;__contextRefs={};__refs={};context={};state={};props={};$props={};$refs={};$el=null;$emit=null;$nextTick=null;$parent=null;$root=null;$attrs=null;$slots=null;$watch=null;$options=null;$forceUpdate=null;$components={};$libs={};$apis={};__transform={};constructor(e){const{mode:t,dsl:s,attrs:r}=e;this.__mode=t,s&&(this.__id=s.id||null,this.__transform=s.transform||{}),r&&Object.assign(this,r)}setup(e,t=x){const s=t.getCurrentInstance();if(!s)return;this.__refs={},this.$refs={},this.context={},this.__contextRefs={},this.__instance=s.proxy;const r=s.appContext.config.globalProperties;Object.assign(this,r),Object.assign(this,e||{}),this.__proxy(),t.onMounted(()=>{this.__proxy()}),t.onUnmounted(()=>{this.__cleanup()}),t.onBeforeUpdate(()=>{this.__refs={},this.$refs={},this.__contextRefs={},this.context={}})}__proxy(){this.__instance&&B.forEach(e=>{this[e]=this.__instance?.[e]})}__cleanup(){B.forEach(e=>{this[e]=null})}__parseFunction(e){if(e)if(this.__mode===w.Runtime){const{id:t,type:s}=e,r=t?this.__transform[t]??e.value:e.value;return L({type:s,value:r},this)}else return L(e,this)}__parseExpression(e){if(e)if(this.__mode===w.Runtime){const{id:t,type:s}=e,r=t?this.__transform[t]??e.value:e.value;return R({type:s,value:r},this)}else return R(e,this)}__ref(e=null,t){if(this.__mode!==w.VNode)return e&&e!==this.__id&&(this.__contextRefs[e]=this),async s=>{await c.delay(0);let r=s?.$vtjEl||s?.$el||s?._?.vnode?.el||s;if(!r){typeof t=="string"&&(delete this.$refs[t],e&&delete this.__refs[e]);return}if(r.nodeType===3&&r.nextSibling&&(r=r.nextSibling),r.__vtj__=e,w.Design===this.__mode&&(r.__context__=this,r.draggable=!0),e&&(this.__refs[e]=s),typeof t=="function")t(s);else if(t){const o=this.$refs[t];if(o&&s!==o){const a=new Set([].concat(o,s));this.$refs[t]=Array.from(a)}else this.$refs[t]=s}return s}}__clone(e={}){const t={...this.context,...e},s={...t,context:t};return s.context.__proto__=this.context,s.__proto__=this,s}}function T(n){const{Vue:e=x,mode:t=w.Runtime,components:s={},libs:r={},apis:o={},loader:a}=n,i=e.computed(()=>n.dsl),l={$components:s,$libs:r,$apis:o},u=new we({mode:t,dsl:i.value,attrs:l}),h=e.defineComponent({name:i.value.name,props:{...ze(i.value.props??[],u)},setup(d){u.$props=d,u.props=d,i.value.id&&V(n.window||window,i.value.id,i.value.css||""),u.state=We(e,i.value.state??{},u);const f=Ge(e,i.value.computed??{},u),v=Ye(i.value.methods??{},u),p=Xe(e,i.value.inject,u),g=Ee(i.value.dataSources||{},u),E={...p,...f,...v,...g};return u.setup(E,e),Qe(e,i.value.watch??[],u),{vtj:u}},emits:Ke(i.value.emits),expose:["vtj"],render(){if(!i.value.nodes)return null;const d=i.value.nodes||[];return d.length===1?O(d[0],u,e,a):d.map(f=>O(f,u,e,a))},...Ze(i.value.lifeCycles??{},u)});return{renderer:e.markRaw(h),context:u}}function Ke(n=[]){return n.map(e=>c.isString(e)?e:e.name)}function ze(n=[],e){const t=s=>s?(Array.isArray(s)?s:[s]).map(o=>re[o]):void 0;return n.map(s=>c.isString(s)?{name:s}:{name:s.name,type:s.type,required:s.required,default:j(s.default)?e.__parseExpression(s.default):s.default}).reduce((s,r)=>(s[r.name]={type:t(r.type),required:r.required,default:r.default},s),{})}function We(n,e,t){return n.reactive(Object.keys(e||{}).reduce((s,r)=>{let o=e[r];return j(o)?o=t.__parseExpression(o):M(o)&&(o=t.__parseFunction(o)),s[r]=o,s},{}))}function Ge(n,e,t){return Object.entries(e??{}).reduce((s,[r,o])=>(s[r]=n.computed(t.__parseFunction(o)),s),{})}function Ye(n,e){return Object.entries(n??{}).reduce((t,[s,r])=>(t[s]=e.__parseFunction(r),t),{})}function Xe(n,e=[],t){return e.reduce((s,r)=>{const{name:o,from:a}=r||{};r.default;const i=j(a)?t.__parseExpression(a)||o:a??o,l=j(r.default)?t.__parseExpression(r.default):r.default??null;return s[o]=n.inject(i,l),s},{})}function Ee(n,e){return Object.keys(n).reduce((t,s)=>{const r=n[s],o=e.$apis[r.ref],a=M(r.transform)?r.transform.value?e.__parseFunction(r.transform):void 0:r.transform;return t[s]=async(...i)=>{const l=await o.apply(e,i);return a?a(l):l},t},{})}function Qe(n,e=[],t){e.forEach(s=>{n.watch(t.__parseExpression(s.source),t.__parseFunction(s.handler),{deep:s.deep,immediate:s.immediate})})}function Ze(n,e){return Object.entries(n??{}).reduce((t,[s,r])=>(t[s]=e.__parseFunction(r),t),{})}let N=[];const je=n=>n;async function W(n,e=window){const{urls:t=[],library:s}=n,r=t.filter(i=>k(i));if(r.length===0||!s)return null;const o=t.filter(i=>H(i));return o.length&&de(o,e),await fe(r,s,e).catch(i=>(console.warn("loadScriptUrl error",r,s,i),null))}function D(n){const{getDsl:e,getDslByUrl:t,options:s}=n;return s.window&&(N.forEach(r=>{delete s.window[r]}),N=[]),(r,o,a=x)=>!o||typeof o=="string"?r:o.type==="Schema"&&o.id?a.defineAsyncComponent(async()=>{const i=await e(o.id);return i&&(i.name=r),i?T({...s,Vue:a,dsl:i,mode:w.Runtime,loader:D(n)}).renderer:null}):o.type==="UrlSchema"&&o.url?a.defineAsyncComponent(async()=>{const i=await t(o.url);return i&&(i.name=r),i?T({...s,Vue:a,dsl:i,mode:w.Runtime,loader:D(n)}).renderer:null}):o.type==="Plugin"?(o.library&&N.push(o.library),a.defineAsyncComponent(async()=>{const i=await W(o,s.window);return i||(console.warn("getPlugin result is null",o),null)})):r}function O(n,e,t=x,s=je){if(!n||!n.name||n.invisible)return null;const{id:r=null,directives:o=[]}=n,{vIf:a,vFor:i,vShow:l,vModels:u,vBind:h}=et(o);if(a&&!tt(a,e))return null;const d=f=>{const v=f.$components,p=(()=>{if(n.name==="component")return st(f,n.props?.is);if(n.name==="slot")return n.name;const _=s(n.name,n.from,t);return c.isString(_)?v[_]??_:_})(),g=nt(r,n.props??{},f),E=rt(t,n.events??{},f);if(n.name==="slot")return ot(t,n,g,f,s);h&&Object.assign(g,f.__parseExpression(h.value)),l&&(g.style=Object.assign(g.style??{},at(l,f))),u.forEach(_=>{Object.assign(g,ct(t,_,f))});const y=ut(t,n.children??[],f,s,n);return t.createVNode(p,{...g,...E},y)};return i?ft(i,d,e):d(e)}function et(n=[]){const e=n.find(i=>c.camelCase(i.name)==="vIf"),t=n.find(i=>c.camelCase(i.name)==="vFor"),s=n.find(i=>c.camelCase(i.name)==="vShow"),r=n.find(i=>c.camelCase(i.name)==="vBind"),o=n.filter(i=>c.camelCase(i.name)==="vModel"),a=n.filter(i=>!ne.includes(c.camelCase(i.name)));return{vIf:e,vFor:t,vShow:s,vModels:o,vBind:r,others:a}}function tt(n,e){return!!e.__parseExpression(n.value)}function st(n,e){return e?j(e)?n.__parseExpression(e):e:"div"}function nt(n,e,t){const s=Object.keys(e||{}).reduce((r,o)=>{let a=e[o];return j(a)?a=t.__parseExpression(a):M(a)&&(a=t.__parseFunction(a)),r[o]=a,r},{});return s.ref=t.__ref(n,s.ref),s}function rt(n,e,t){const s=["passive","capture","once"],r={capture:"Capture",once:"Once",passive:"OnceCapture"};return Object.keys(e||{}).reduce((o,a)=>{const i=e[a],l=G(i.modifiers),u=l.find(f=>s.includes(f)),h="on"+c.upperFirst(a)+(u&&r[u]||""),d=t.__parseFunction(i.handler);return d&&(o[h]=n.withModifiers(d,l)),o},{})}function G(n={},e=!1){const t=Object.keys(n);return e?t.map(s=>"."+s):t}function ot(n,e,t,s,r){const{children:o}=e,a=it(e,s),i=s.$slots?.[a.name];return i?i(t):o?c.isString(o)?n.createTextVNode(o):j(o)?n.createTextVNode(J(s.__parseExpression(o))):Array.isArray(o)?o.map(l=>O(l,s,n,r)):null:null}function it(n,e){const{props:t}=n,s=t?.name||"default";return{name:j(s)?e.__parseExpression(s):s,params:[]}}function at(n,e){return e.__parseExpression(n.value)?{}:{display:"none"}}function ct(n,e,t){const s={type:"JSFunction",value:e.value?.value?`(v) => {
9
9
  ${e.value.value} = v;
10
10
  }`:"(v) => {}"},r=t.__parseFunction(s),o=G(e.modifiers),a=j(e.arg)?t.__parseExpression(e.arg):e.arg||"modelValue";return{[a]:t.__parseExpression(e.value),[`onUpdate:${a}`]:o.length&&r?n.withModifiers(r,o):r}}function ut(n,e,t,s,r){if(!e)return null;if(c.isString(e))return{default:()=>e};if(j(e))return{default:()=>J(t.__parseExpression(e))};if(Array.isArray(e)&&e.length>0){const o=lt(e),a=i=>!i||!r?{}:r?.id&&Object.keys(i).length?{[`scope_${r.id}`]:i}:{};return Object.entries(o).reduce((i,[l,{nodes:u,params:h}])=>(i[l]=d=>{const f=h.length?c.pick(d??{},h):a(d);return u.map(v=>O(v,t.__clone(f),n,s))},i),{})}return null}function lt(n){const e={default:{params:[],nodes:[]}};for(const t of n){const s=dt(t.slot),r=s.name;e[r]?(e[r].nodes.push(t),e[r].params=e[r].params.concat(s.params)):e[r]={nodes:[t],params:s.params}}return e}function dt(n="default"){return c.isString(n)?{name:n,params:[]}:{params:[],...n}}function ft(n,e,t){const{value:s,iterator:r}=n,{item:o="item",index:a="index"}=r||{};let i=t.__parseExpression(s)||[];return Number.isInteger(i)&&(i=new Array(i).fill(!0).map((l,u)=>u+1)),Array.isArray(i)?i.map((l,u)=>e(t.__clone({[o]:l,[a]:u}))):(console.warn("[vForRender]:",`${s?.value} is not a Arrary`),[])}function pt(n){return m.getCurrentScope()?(m.onScopeDispose(n),!0):!1}function Y(n){return typeof n=="function"?n():m.unref(n)}const Pe=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const ht=n=>n!=null,mt=()=>{};function gt(n){return m.getCurrentInstance()}function vt(...n){if(n.length!==1)return m.toRef(...n);const e=n[0];return typeof e=="function"?m.readonly(m.customRef(()=>({get:e,set:mt}))):m.ref(e)}function yt(n,e){gt()&&m.onBeforeUnmount(n,e)}const _t=Pe?window:void 0,St=Pe?window.document:void 0;function wt(n){var e;const t=Y(n);return(e=t?.$el)!=null?e:t}function Et(){const n=m.ref(!1),e=m.getCurrentInstance();return e&&m.onMounted(()=>{n.value=!0},e),n}function jt(n){const e=Et();return m.computed(()=>(e.value,!!n()))}function Pt(n,e,t={}){const{window:s=_t,...r}=t;let o;const a=jt(()=>s&&"MutationObserver"in s),i=()=>{o&&(o.disconnect(),o=void 0)},l=m.computed(()=>{const f=Y(n),v=(Array.isArray(f)?f:[f]).map(wt).filter(ht);return new Set(v)}),u=m.watch(()=>l.value,f=>{i(),a.value&&f.size&&(o=new MutationObserver(e),f.forEach(v=>o.observe(v,r)))},{immediate:!0,flush:"post"}),h=()=>o?.takeRecords(),d=()=>{u(),i()};return pt(d),{isSupported:a,stop:d,takeRecords:h}}function $t(n=null,e={}){var t,s,r;const{document:o=St,restoreOnUnmount:a=d=>d}=e,i=(t=o?.title)!=null?t:"",l=vt((s=n??o?.title)!=null?s:null),u=n&&typeof n=="function";function h(d){if(!("titleTemplate"in e))return d;const f=e.titleTemplate||"%s";return typeof f=="function"?f(d):Y(f).replace(/%s/g,d)}return m.watch(l,(d,f)=>{d!==f&&o&&(o.title=h(typeof d=="string"?d:""))},{immediate:!0}),e.observe&&!e.titleTemplate&&o&&!u&&Pt((r=o.head)==null?void 0:r.querySelector("title"),()=>{o&&o.title!==l.value&&(l.value=h(o.title))},{childList:!0}),yt(()=>{if(a){const d=a(i,l.value||"");d!=null&&o&&(o.title=d)}}),l}const te=m.defineComponent({name:"VtjPageContainer",async setup(){const n=Q(),e=se.useRoute(),t=e.params.id,s=t?n.getPage(t):n.getHomepage(),r=s?await n.getRenderComponent(s.id):null;return s&&$t(s.title||"VTJ"),{provider:n,component:r,file:s,query:e.query}},render(){return this.component?m.h(this.component,this.query):m.h("div","页面不存在")}}),Ct=m.defineComponent({name:"VtjStartupContainer",render(){return m.h(He.XStartup)}}),X=Symbol("Provider");var $e=(n=>(n.Production="production",n.Development="development",n))($e||{});class Ce extends P.Base{constructor(e){super(),this.options=e;const{service:t,mode:s=w.Raw,dependencies:r,materials:o,project:a={},adapter:i={},globals:l={},modules:u={},router:h=null,materialPath:d="./",nodeEnv:f="development"}=e;this.mode=s,this.modules=u,this.service=t,this.router=h,this.materialPath=d,this.nodeEnv=f,r&&(this.dependencies=r),o&&(this.materials=o),Object.assign(this.globals,l),Object.assign(this.adapter,i);const{access:v,request:p}=this.adapter;v&&v.connect({mode:s,router:h,request:p}),s!==w.Design&&this.load(a)}mode;globals={};modules={};adapter={request:qe,jsonp:c.jsonp};apis={};dependencies={};materials={};library={};service;project=null;components={};nodeEnv="development";router=null;materialPath="./";urlDslCaches={};async load(e){const t=this.modules[`.vtj/projects/${e.id}.json`];if(this.project=t?await t():await this.service.init(e),!this.project)throw new Error("project is null");const{apis:s=[],meta:r=[]}=this.project,o=window;o.CKEDITOR_VERSION=void 0,this.nodeEnv!=="production"?await this.loadAssets(o):await this.loadDependencies(o),this.apis=ve(s,r,this.adapter),K(),this.project.config?.mock&&ye(s),this.initRouter(),this.triggerReady()}async loadDependencies(e){const t=Object.entries(this.dependencies);for(const[s,r]of t)e[s]||(e[s]=await r())}async loadAssets(e){const{dependencies:t=[]}=this.project,{dependencies:s,library:r,components:o,materialPath:a,nodeEnv:i}=this,{libraryExports:l,libraryMap:u,materials:h,materialExports:d,materialMapLibrary:f}=ce(t,a,i==="development");for(const p of l){const g=s[p],E=e[p];if(E)r[p]=E;else if(g)e[p]=r[p]=await g();else{const y=u[p]||[];for(const _ of y)H(_)&&await le(p,c.url.append(_,{v:b})),k(_)&&await c.loadScript(c.url.append(_,{v:b}));r[p]=e[p]}}for(const p of h)await c.loadScript(c.url.append(p,{v:b}));const v=this.materials||{};for(const p of d){const g=e[f[p]],E=P.BUILT_IN_COMPONENTS[p];if(E)g&&E.forEach(y=>{o[y]=g[y]});else{const y=v[p]?(await v[p]()).default:e[p];y&&g&&(y.components||[]).forEach(_=>{o[_.name]=ue(_,g)})}}}initRouter(){const{router:e,project:t}=this;e&&(e.addRoute({path:"/page/:id",name:q,component:te}),e.addRoute({path:"/",name:oe,component:t?.homepage?te:Ct}))}install(e){const t=e.config.globalProperties.installed||{};for(const[s,r]of Object.entries(this.library))!t[s]&&pe(r)&&(e.use(r),t[s]=!0);this.options.install&&e.use(this.options.install),this.adapter.access&&e.use(this.adapter.access),e.provide(X,this),e.config.globalProperties.installed=t,this.nodeEnv==="development"&&(e.config.errorHandler=(s,r,o)=>{const a=r?.$options.name,i=typeof s=="string"?s:s?.message||s?.msg||"未知错误",l=`[ ${a} ] ${i} ${o}`;console.error("[VTJ Error]:",{err:s,instance:r,info:o},s?.stack),F.ElNotification.error({title:"未处理的异常:请在控制台查看详情",message:l})})}getFile(e){const{blocks:t=[]}=this.project||{};return this.getPage(e)||t.find(s=>s.id===e)||null}getPage(e){const{pages:t=[]}=this.project||{},s=(r,o=[])=>{for(const a of o){if(a.id===r)return a;if(a.children&&a.children.length){const i=s(r,a.children);if(i)return i}}};return s(e,t)||null}getHomepage(){const{homepage:e}=this.project||{};return e?this.getPage(e):null}async getDsl(e){const t=this.modules[`.vtj/files/${e}.json`];return t?await t():this.service.getFile(e).catch(()=>null)}async getDslByUrl(e){const t=this.urlDslCaches[e];return t||(this.urlDslCaches[e]=this.adapter.request.send({url:e,method:"get",settings:{validSuccess:!1,originResponse:!0}}).then(s=>s.data).catch(()=>null))}createDslRenderer(e,t={}){const{library:s,components:r,mode:o,apis:a}=this,i={mode:o,Vue:s.Vue,components:r,libs:s,apis:a,window,...t},l=D({getDsl:async u=>await this.getDsl(u)||null,getDslByUrl:async u=>await this.getDslByUrl(u)||null,options:i});return T({...i,dsl:e,loader:l})}async getRenderComponent(e){const t=this.getFile(e);if(!t)return c.logger.warn(`Can not find file: ${e}`),null;const s=`.vtj/vue/${e}.vue`,r=this.modules[s];if(r)return(await r())?.default;const o=await this.getDsl(t.id);return o?this.createDslRenderer(o).renderer:(c.logger.warn(`Can not find dsl: ${e}`),null)}defineUrlSchemaComponent(e,t){return m.defineAsyncComponent(async()=>{const s=await this.getDslByUrl(e);return s?(s.name=t||s.name,this.createDslRenderer(s).renderer):null})}definePluginComponent(e){return m.defineAsyncComponent(async()=>await W(e,window))}}function bt(n){const e=new Ce(n);return{provider:e,onReady:s=>e.ready(s)}}function Q(n={}){const e=m.inject(X);if(!e)throw new Error("Can not find provider");if(e.nodeEnv==="development"){const{id:t,version:s}=n;t&&s&&(async()=>{const r=await e.getDsl(t);r?.__VERSION__!==s&&F.ElNotification.warning({title:r?.name,message:"当前组件源码版本与运行时版本不一致,请重新发布组件"})})()}return e}const Z=new c.Request({settings:{type:"json",validSuccess:!0,originResponse:!1,failMessage:!0,validate:n=>n.data?.code===0,showError:n=>{F.ElNotification.error({message:n||"未知错误"})}}}),Rt=(n="/__vtj__/api/:type.json")=>(e,t)=>Z.send({url:n,method:"post",params:{type:e},data:{type:e,data:t}}),At=(n="/__vtj__/api/uploader.json")=>async(e,t)=>await Z.send({url:n,method:"post",data:{files:e,projectId:t},settings:{type:"data"}}).then(s=>s&&s[0]?s[0]:null).catch(()=>null);class U{api;pluginCaches={};uploader;constructor(){this.api=Rt(),this.uploader=At()}async getExtension(){console.log("BaseService.getExtension")}async init(e){return console.log("BaseService.init",e),{}}async saveProject(e){return!!await this.api("saveProject",e).catch(()=>!1)}async saveMaterials(e,t){return console.log("BaseService.saveMaterials",e,t),!1}async saveFile(e){return console.log("BaseService.saveFile",e),!1}async getFile(e){return console.log("BaseService.getFile",e),{}}async removeFile(e){return console.log("BaseService.removeFile",e),!1}async saveHistory(e){return console.log("BaseService.saveHistory",e),!1}async removeHistory(e){return console.log("BaseService.removeHistory",e),!1}async getHistory(e){return console.log("BaseService.getHistory",e),{}}async getHistoryItem(e,t){return console.log("BaseService.getHistoryItem",e,t),{}}async saveHistoryItem(e,t){return console.log("BaseService.saveHistoryItem",e,t),!1}async removeHistoryItem(e,t){return console.log("BaseService.removeHistoryItem",e,t),!1}async publish(e){return!!await this.api("publish",e).catch(()=>!1)}async publishFile(e,t){return!!await this.api("publishFile",{project:e,file:t}).catch(()=>!1)}async genVueContent(e,t){return await this.api("genVueContent",{project:e,dsl:t}).catch(()=>"")}async createRawPage(e){return await this.api("createRawPage",e).catch(()=>"")}async removeRawPage(e){return await this.api("removeRawPage",e).catch(()=>"")}async uploadStaticFile(e,t){return await this.uploader(e,t).catch(()=>null)}async getStaticFiles(e){return await this.api("getStaticFiles",e).catch(()=>[])}async removeStaticFile(e,t){return await this.api("removeStaticFile",{name:e,projectId:t}).catch(()=>"")}async clearStaticFiles(e){return await this.api("clearStaticFiles",e).catch(()=>"")}async getPluginMaterial(e){const{urls:t=[]}=e,s=t.filter(o=>ie(o))[0];if(!s)return null;const r=this.pluginCaches[s];return r||(this.pluginCaches[s]=Z.send({url:s,method:"get",settings:{validSuccess:!1,originResponse:!0}}).then(o=>o.data).catch(()=>null))}}const S=new c.Storage({type:"local",expired:0,prefix:"__VTJ_"});class Ft extends U{init(e){const t=new P.ProjectModel(e),s=S.get(`project_${t.id}`),r=Object.assign(t.toDsl(),s||{});return S.save(`project_${t.id}`,r),Promise.resolve(r)}saveProject(e){const t=new P.ProjectModel(e);return S.save(`project_${t.id}`,t.toDsl()),Promise.resolve(!0)}saveMaterials(e,t){return S.save(`materials_${e.id}`,c.mapToObject(t)),Promise.resolve(!0)}saveFile(e){return S.save(`file_${e.id}`,e),Promise.resolve(!0)}getFile(e){const t=S.get(`file_${e}`);return t?Promise.resolve(t):Promise.reject(null)}removeFile(e){return S.remove(`file_${e}`),Promise.resolve(!0)}saveHistory(e){return S.save(`history_${e.id}`,e),Promise.resolve(!0)}removeHistory(e){const t=S.get(`history_${e}`);if(t){const r=(t.items||[]).map(o=>o.id);this.removeHistoryItem(e,r),S.remove(`history_${e}`)}return Promise.resolve(!0)}getHistory(e){const t=S.get(`history_${e}`),s=new P.HistoryModel(t||{id:e});return Promise.resolve(s.toDsl())}getHistoryItem(e,t){const s=S.get(`history_${e}_${t}`);return Promise.resolve(s)}saveHistoryItem(e,t){return S.save(`history_${e}_${t.id}`,t),Promise.resolve(!0)}removeHistoryItem(e,t){return t.forEach(s=>{S.remove(`history_${e}_${s}`)}),Promise.resolve(!0)}}class be extends U{projects={};materials={};files={};histories={};historyItems={};init(e){const t=new P.ProjectModel(e),s=this.projects[t.id]||{},r=Object.assign(t.toDsl(),s);return this.projects[r.id]=r,Promise.resolve(r)}saveProject(e){const t=new P.ProjectModel(e);return this.projects[t.id]=t.toDsl(),Promise.resolve(!0)}saveMaterials(e,t){return e.id&&(this.materials[e.id]=c.mapToObject(t)),Promise.resolve(!0)}saveFile(e){return this.files[e.id]=e,Promise.resolve(!0)}getFile(e){const t=this.files[e];return t?Promise.resolve(t):Promise.reject(null)}removeFile(e){return delete this.files[e],Promise.resolve(!0)}saveHistory(e){return this.histories[e.id]=e,Promise.resolve(!0)}removeHistory(e){const t=this.histories[e];if(t){const r=(t.items||[]).map(o=>o.id);this.removeHistoryItem(e,r),delete this.historyItems[e]}return Promise.resolve(!0)}getHistory(e){const t=this.histories[e],s=new P.HistoryModel(t||{id:e});return Promise.resolve(s)}getHistoryItem(e,t){const s=`${e}_${t}`,r=this.historyItems[s]||{};return Promise.resolve(r)}saveHistoryItem(e,t){const s=`${e}_${t.id}`;return this.historyItems[s]=t,Promise.resolve(!0)}removeHistoryItem(e,t){return t.forEach(s=>{const r=`${e}_${s}`;delete this.historyItems[r]}),Promise.resolve(!0)}}let I=null;function Ot(){return I||(I=new be,I)}class Mt extends U{getFileCaches={};async getExtension(){return await this.api("getExtension",{}).catch(()=>{})}async init(e){return await this.api("init",e).catch(()=>null)||{}}async saveProject(e){return!!await this.api("saveProject",e).catch(()=>!1)}async saveMaterials(e,t){return!!await this.api("saveMaterials",{project:e,materials:c.mapToObject(t)}).catch(()=>!1)}async saveFile(e){return!!await this.api("saveFile",e).catch(()=>!1)}async getFile(e){const t=this.getFileCaches[e];return t||(this.getFileCaches[e]=this.api("getFile",e).catch(()=>null)).finally(()=>{delete this.getFileCaches[e]})}async removeFile(e){return!!await this.api("removeFile",e).catch(()=>!1)}async saveHistory(e){return!!await this.api("saveHistory",e).catch(()=>!1)}async removeHistory(e){return!!await this.api("removeHistory",e).catch(()=>!1)}async getHistory(e){return await this.api("getHistory",e).catch(()=>null)||{}}async getHistoryItem(e,t){return await this.api("getHistoryItem",{fId:e,id:t}).catch(()=>null)||{}}async saveHistoryItem(e,t){return!!await this.api("saveHistoryItem",{fId:e,item:t}).catch(()=>!1)}async removeHistoryItem(e,t){return!!await this.api("removeHistoryItem",{fId:e,ids:t}).catch(()=>!1)}}function Re(n=[]){return n.map(e=>{const{id:t,title:s,icon:r,children:o,hidden:a}=e;return{id:t,title:s,icon:r,hidden:a,url:`/page/${t}`,children:o&&o.length?Re(o):void 0}})}function Ae(n,e){if(!e)return n;let t=[];for(const s of n)if(s.children&&s.children.length){const r=Ae(s.children,e);r.length&&(s.children=r,t.push(s))}else e[s.id]&&t.push(s);return t}function It(){const n=Q(),e=se.useRoute(),t=Se(),s=m.ref(!1),r=t?.getData(),o=n.project;m.watchEffect(()=>{const{name:l,params:u,meta:h}=e;if(l==="VtjPage"){const d=n.getPage(u.id);s.value=!d?.mask}else if(l==="VtjHomepage"){const d=n.getHomepage();s.value=!d?.mask}else s.value=!h.mask});const a=Re(o?.pages),i=o?.config;return{disabled:s,logo:i?.logo,themeSwitchable:i?.themeSwitchable,title:i?.title||o?.description||o?.name||"VTJ App",menus:Ae(a,r?.permissions)}}exports.ACCESS_KEY=z;exports.Access=Ve;exports.BUILT_IN_DIRECTIVES=ne;exports.BaseService=U;exports.CONTEXT_HOST=B;exports.Context=we;exports.ContextMode=w;exports.DATA_TYPES=re;exports.HOMEPAGE_ROUTE_NAME=oe;exports.JSCodeToString=Le;exports.LIFE_CYCLES_LIST=Ue;exports.LocalService=Mt;exports.MemoryService=be;exports.NodeEnv=$e;exports.PAGE_ROUTE_NAME=q;exports.Provider=Ce;exports.StorageService=Ft;exports.VTJ_RENDERER_VERSION=b;exports.adoptedStyleSheets=V;exports.createAssetScripts=Ne;exports.createAssetsCss=Be;exports.createDataSources=Ee;exports.createLoader=D;exports.createMemoryService=Ot;exports.createMetaApi=ge;exports.createProvider=bt;exports.createRenderer=T;exports.createSchemaApi=me;exports.createSchemaApis=ve;exports.defaultLoader=je;exports.fillBasePath=A;exports.getModifiers=G;exports.getPlugin=W;exports.getRawComponent=ue;exports.isCSSUrl=H;exports.isJSCode=he;exports.isJSExpression=j;exports.isJSFunction=M;exports.isJSON=ie;exports.isJSUrl=k;exports.isVuePlugin=pe;exports.loadCss=le;exports.loadCssUrl=de;exports.loadScriptUrl=fe;exports.mockApi=_e;exports.mockApis=ye;exports.mockCleanup=K;exports.nodeRender=O;exports.parseDeps=ce;exports.parseExpression=R;exports.parseFunction=L;exports.providerKey=X;exports.removeProdFlag=ae;exports.toString=J;exports.useAccess=Se;exports.useMask=It;exports.useProvider=Q;
package/dist/index.mjs CHANGED
@@ -1,18 +1,18 @@
1
1
  import { Base as Ee, BUILT_IN_COMPONENTS as Pe, ProjectModel as I, HistoryModel as re } from "@vtj/core";
2
- import { isUrl as Re, url as R, dedupArray as be, isString as $, isFunction as Y, logger as O, createRequest as Ce, merge as Fe, pathToRegexp as Ae, pathToRegexpMatch as Ie, formDataToJson as Oe, storage as T, cookie as k, toArray as Q, unRSA as X, delay as oe, camelCase as j, upperFirst as xe, pick as De, jsonp as He, loadScript as Z, Request as Me, Storage as Te, mapToObject as q } from "@vtj/utils";
2
+ import { isUrl as Re, url as R, dedupArray as be, isString as $, isFunction as Y, logger as O, createRequest as Ce, merge as Fe, pathToRegexp as Ae, pathToRegexpMatch as Ie, formDataToJson as Oe, storage as T, cookie as k, toArray as Q, unRSA as X, delay as oe, camelCase as j, upperFirst as xe, pick as De, jsonp as Me, loadScript as Z, Request as He, Storage as Te, mapToObject as q } from "@vtj/utils";
3
3
  import * as D from "vue";
4
4
  import { inject as ie, toRef as ke, readonly as Ue, customRef as Be, ref as J, onBeforeUnmount as Ne, getCurrentScope as Le, onScopeDispose as qe, unref as Je, getCurrentInstance as ae, watch as ce, computed as ue, onMounted as Ve, defineComponent as le, h as B, defineAsyncComponent as ee, watchEffect as ze } from "vue";
5
5
  import { useRoute as fe } from "vue-router";
6
- import { ElNotification as H, ElLoading as Ke } from "element-plus";
6
+ import { ElNotification as M, ElLoading as Ke } from "element-plus";
7
7
  import { XStartup as We } from "@vtj/ui";
8
8
  /**!
9
9
  * Copyright (c) 2024, VTJ.PRO All rights reserved.
10
10
  * @name @vtj/renderer
11
11
  * @author CHC chenhuachun1549@dingtalk.com
12
- * @version 0.8.171
12
+ * @version 0.8.172
13
13
  * @license <a href="https://vtj.pro/license.html">MIT License</a>
14
14
  */
15
- const b = "0.8.171";
15
+ const b = "0.8.172";
16
16
  var _ = /* @__PURE__ */ ((n) => (n.Runtime = "Runtime", n.Design = "Design", n.Raw = "Raw", n.VNode = "VNode", n))(_ || {});
17
17
  const te = [
18
18
  "$el",
@@ -172,11 +172,11 @@ function se(n, e, t = !1, s = !1) {
172
172
  function S(n) {
173
173
  return n && n.type === "JSExpression";
174
174
  }
175
- function M(n) {
175
+ function H(n) {
176
176
  return typeof n == "object" && n && n.type === "JSFunction";
177
177
  }
178
178
  function it(n) {
179
- return S(n) || M(n);
179
+ return S(n) || H(n);
180
180
  }
181
181
  function ps(n) {
182
182
  return it(n) ? n.value : JSON.stringify(n);
@@ -191,7 +191,7 @@ const at = Ce({
191
191
  validate: (n) => n.data?.code === 0 || !!n.data?.success,
192
192
  failMessage: !0,
193
193
  showError: (n) => {
194
- H.error({
194
+ M.error({
195
195
  message: n || "未知错误"
196
196
  });
197
197
  },
@@ -270,12 +270,13 @@ const pt = {
270
270
  session: !1,
271
271
  authKey: "Authorization",
272
272
  storageKey: "ACCESS_STORAGE",
273
- storagePrefix: "__VTJ__",
273
+ storagePrefix: "__VTJ_",
274
274
  unauthorized: "/unauthorized",
275
275
  auth: "/#/login",
276
276
  redirectParam: "r",
277
277
  unauthorizedCode: 401,
278
- unauthorizedMessage: "登录已经失效,请重新登录!"
278
+ unauthorizedMessage: "登录已经失效,请重新登录!",
279
+ noPermissionMessage: "无权限访问该页面"
279
280
  }, ve = Symbol("access");
280
281
  class hs {
281
282
  options;
@@ -376,8 +377,14 @@ class hs {
376
377
  guard(e, t) {
377
378
  if (this.isWhiteList(e) || this.isAuthPath(e))
378
379
  return t();
379
- if (this.isLogined())
380
- return this.hasRoutePermission(e) ? t() : (this.showTip("无权限访问该页面"), t(!1));
380
+ if (this.isLogined()) {
381
+ if (this.hasRoutePermission(e))
382
+ return t();
383
+ {
384
+ const s = this.options.noPermissionMessage || "无权限访问";
385
+ return this.showTip(s), t(!1);
386
+ }
387
+ }
381
388
  t(!1), this.toLogin();
382
389
  }
383
390
  isWhiteList(e) {
@@ -590,7 +597,7 @@ function yt(n, e, t) {
590
597
  Object.keys(e || {}).reduce(
591
598
  (s, r) => {
592
599
  let o = e[r];
593
- return S(o) ? o = t.__parseExpression(o) : M(o) && (o = t.__parseFunction(o)), s[r] = o, s;
600
+ return S(o) ? o = t.__parseExpression(o) : H(o) && (o = t.__parseFunction(o)), s[r] = o, s;
594
601
  },
595
602
  {}
596
603
  )
@@ -622,7 +629,7 @@ function St(n, e = [], t) {
622
629
  function $t(n, e) {
623
630
  return Object.keys(n).reduce(
624
631
  (t, s) => {
625
- const r = n[s], o = e.$apis[r.ref], a = M(r.transform) ? r.transform.value ? e.__parseFunction(r.transform) : void 0 : r.transform;
632
+ const r = n[s], o = e.$apis[r.ref], a = H(r.transform) ? r.transform.value ? e.__parseFunction(r.transform) : void 0 : r.transform;
626
633
  return t[s] = async (...i) => {
627
634
  const u = await o.apply(e, i);
628
635
  return a ? a(u) : u;
@@ -707,7 +714,7 @@ function x(n, e, t = D, s = Pt) {
707
714
  )), c.forEach((g) => {
708
715
  Object.assign(h, Dt(t, g, f));
709
716
  });
710
- const v = Ht(
717
+ const v = Mt(
711
718
  t,
712
719
  n.children ?? [],
713
720
  f,
@@ -741,7 +748,7 @@ function Ft(n, e, t) {
741
748
  const s = Object.keys(e || {}).reduce(
742
749
  (r, o) => {
743
750
  let a = e[o];
744
- return S(a) ? a = t.__parseExpression(a) : M(a) && (a = t.__parseFunction(a)), r[o] = a, r;
751
+ return S(a) ? a = t.__parseExpression(a) : H(a) && (a = t.__parseFunction(a)), r[o] = a, r;
745
752
  },
746
753
  {}
747
754
  );
@@ -797,7 +804,7 @@ function Dt(n, e, t) {
797
804
  [`onUpdate:${a}`]: o.length && r ? n.withModifiers(r, o) : r
798
805
  };
799
806
  }
800
- function Ht(n, e, t, s, r) {
807
+ function Mt(n, e, t, s, r) {
801
808
  if (!e) return null;
802
809
  if ($(e))
803
810
  return { default: () => e };
@@ -806,7 +813,7 @@ function Ht(n, e, t, s, r) {
806
813
  default: () => pe(t.__parseExpression(e))
807
814
  };
808
815
  if (Array.isArray(e) && e.length > 0) {
809
- const o = Mt(e), a = (i) => !i || !r ? {} : r?.id && Object.keys(i).length ? {
816
+ const o = Ht(e), a = (i) => !i || !r ? {} : r?.id && Object.keys(i).length ? {
810
817
  [`scope_${r.id}`]: i
811
818
  } : {};
812
819
  return Object.entries(o).reduce((i, [u, { nodes: c, params: p }]) => (i[u] = (l) => {
@@ -818,7 +825,7 @@ function Ht(n, e, t, s, r) {
818
825
  }
819
826
  return null;
820
827
  }
821
- function Mt(n) {
828
+ function Ht(n) {
822
829
  const e = {
823
830
  default: {
824
831
  params: [],
@@ -979,7 +986,7 @@ class es extends Ee {
979
986
  mode;
980
987
  globals = {};
981
988
  modules = {};
982
- adapter = { request: at, jsonp: He };
989
+ adapter = { request: at, jsonp: Me };
983
990
  apis = {};
984
991
  dependencies = {};
985
992
  materials = {};
@@ -1072,7 +1079,7 @@ class es extends Ee {
1072
1079
  info: o
1073
1080
  },
1074
1081
  s?.stack
1075
- ), H.error({
1082
+ ), M.error({
1076
1083
  title: "未处理的异常:请在控制台查看详情",
1077
1084
  message: u
1078
1085
  });
@@ -1170,7 +1177,7 @@ function Se(n = {}) {
1170
1177
  const { id: t, version: s } = n;
1171
1178
  t && s && (async () => {
1172
1179
  const r = await e.getDsl(t);
1173
- r?.__VERSION__ !== s && H.warning({
1180
+ r?.__VERSION__ !== s && M.warning({
1174
1181
  title: r?.name,
1175
1182
  message: "当前组件源码版本与运行时版本不一致,请重新发布组件"
1176
1183
  });
@@ -1178,7 +1185,7 @@ function Se(n = {}) {
1178
1185
  }
1179
1186
  return e;
1180
1187
  }
1181
- const W = new Me({
1188
+ const W = new He({
1182
1189
  settings: {
1183
1190
  type: "json",
1184
1191
  validSuccess: !0,
@@ -1186,7 +1193,7 @@ const W = new Me({
1186
1193
  failMessage: !0,
1187
1194
  validate: (n) => n.data?.code === 0,
1188
1195
  showError: (n) => {
1189
- H.error({
1196
+ M.error({
1190
1197
  message: n || "未知错误"
1191
1198
  });
1192
1199
  }
@@ -1556,7 +1563,7 @@ export {
1556
1563
  V as isCSSUrl,
1557
1564
  it as isJSCode,
1558
1565
  S as isJSExpression,
1559
- M as isJSFunction,
1566
+ H as isJSFunction,
1560
1567
  Xe as isJSON,
1561
1568
  z as isJSUrl,
1562
1569
  ot as isVuePlugin,
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@vtj/renderer",
3
3
  "private": false,
4
- "version": "0.8.171",
4
+ "version": "0.8.172",
5
5
  "type": "module",
6
6
  "dependencies": {
7
7
  "mockjs": "~1.1.0",
8
- "@vtj/core": "~0.8.171",
9
- "@vtj/icons": "~0.8.171",
10
- "@vtj/ui": "~0.8.171",
11
- "@vtj/utils": "~0.8.171"
8
+ "@vtj/core": "~0.8.172",
9
+ "@vtj/ui": "~0.8.172",
10
+ "@vtj/utils": "~0.8.172",
11
+ "@vtj/icons": "~0.8.172"
12
12
  },
13
13
  "devDependencies": {
14
14
  "vue": "~3.5.5",
@@ -55,6 +55,10 @@ export interface AccessOptions {
55
55
  * 未登录提示文本
56
56
  */
57
57
  unauthorizedMessage?: string;
58
+ /**
59
+ * 无权限提示
60
+ */
61
+ noPermissionMessage?: string;
58
62
  /**
59
63
  * RSA解密私钥
60
64
  */
@@ -2,7 +2,7 @@
2
2
  * Copyright (c) 2024, VTJ.PRO All rights reserved.
3
3
  * @name @vtj/renderer
4
4
  * @author CHC chenhuachun1549@dingtalk.com
5
- * @version 0.8.170
5
+ * @version 0.8.171
6
6
  * @license <a href="https://vtj.pro/license.html">MIT License</a>
7
7
  */
8
- export declare const version = "0.8.170";
8
+ export declare const version = "0.8.171";