@vtj/renderer 0.10.0 → 0.10.1-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +14 -11
- package/dist/index.mjs +80 -73
- package/package.json +5 -5
- package/types/version.d.ts +2 -2
package/dist/index.cjs
CHANGED
@@ -2,12 +2,12 @@
|
|
2
2
|
* Copyright (c) 2025, VTJ.PRO All rights reserved.
|
3
3
|
* @name @vtj/renderer
|
4
4
|
* @author CHC chenhuachun1549@dingtalk.com
|
5
|
-
* @version 0.10.
|
5
|
+
* @version 0.10.1-alpha.1
|
6
6
|
* @license <a href="https://vtj.pro/license.html">MIT License</a>
|
7
|
-
*/const
|
8
|
-
`)+o;const a=`with(${t?"{}":"$scope || {}"}) { ${o} }`;return new Function("$scope",a)(e)}catch(r){if(l.logger.error("parseExpression.error",r,n,e?.__self??e),s)throw r}}function I(n,e,t=!1,s=!1){const r=x(n,e,t,s);if(typeof r!="function"&&(l.logger.error("parseFunction.error","not a function",n,e?.__self??e),s))throw new Error(`"${n.value}" not a function`);return r}function S(n){return n&&n.type==="JSExpression"}function A(n){return typeof n=="object"&&n&&n.type==="JSFunction"}function ye(n){return S(n)||A(n)}function qe(n){return ye(n)?n.value:JSON.stringify(n)}const Je={session:!1,authKey:"Authorization",storageKey:"ACCESS_STORAGE",storagePrefix:"__VTJ_",unauthorized:void 0,auth:"/#/login",redirectParam:"r",unauthorizedCode:401,unauthorizedMessage:"登录已经失效,请重新登录!",noPermissionMessage:"无权限访问该页面",appName:""},W=Symbol("access");class Ve{options;data=null;mode=_.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&&this.mode===_.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&&(l.storage.save(t,e,{type:"local",prefix:s}),r&&l.cookie.set(o,this.data.token))}clear(){const{storageKey:e,storagePrefix:t,session:s,authKey:r}=this.options;this.data=null,l.storage.remove(e,{type:"local",prefix:t}),s&&l.cookie.remove(r)}logout(){this.clear(),this.toLogin()}getData(){return this.data?this.data:(this.loadData(),this.data)}getToken(){return this.data||this.loadData(),this.data?.token}can(e){const{appName:t}=this.options,{permissions:s={}}=this.data||{};return typeof e=="function"?e(s):l.toArray(e).every(o=>s[o]||s[t+"."+o])}some(e){const{appName:t}=this.options,{permissions:s={}}=this.data||{};return l.toArray(e).some(o=>s[o]||s[t+"."+o])}install(e){e.config.globalProperties.$access||(e.config.globalProperties.$access=this),e.provide(W,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)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=>l.unRSA(r,t));this.data=JSON.parse(s.join(""));return}if(typeof e=="string")try{const s=t?l.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=l.storage.get(e,{type:"local",prefix:t});this.setData(s||null)}isLogined(){const{session:e,authKey:t}=this.options;return e&&t?!!l.cookie.get(t):!!this.getToken()}hasRoutePermission(e){if(e.name===k){const t=e.params.id;return t&&this.can(t)}return!0}setGuard(e){e.beforeEach((t,s,r)=>this.guard(t,r))}async guard(e,t){if(this.isWhiteList(e)||this.isAuthPath(e))return t();if(this.isLogined()){if(this.hasRoutePermission(e))return t();{const{noPermissionMessage:s="无权限访问",unauthorized:r=!1}=this.options;return await this.showTip(s),l.isFunction(r)?(r(),t(!1)):l.isString(r)?t(r):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;return t?(await l.delay(150),await t(e,{title:"提示",type:"warning"}).catch(()=>!1)):!1}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 _e(){return d.inject(W,null)}function ze(n={}){const{notify:e,loading:t,settings:s={}}=n;let r=null;return{request:l.createRequest({settings:{type:"form",validSuccess:!0,originResponse:!1,loading:!0,validate:a=>a.data?.code===0||!!a.data?.success,failMessage:!0,showError:a=>{e&&e(a||"未知错误")},showLoading:()=>{r&&r.close(),t&&(r=t())},hideLoading:()=>{r&&(r.close(),r=null)},...s}}),jsonp:l.jsonp,notify:e,loading:t}}function we(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?x(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(l.merge(o,i||{},{data:a})))}}function Se(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 be(n=[],e=[],t){const s={};for(const r of n)s[r.id]=we(r,t);for(const r of e)s[r.id]=Se(r,t);return s}async function je(n=[]){P&&(Y(),n.forEach(e=>$e(P,e)))}function Ee(n){const e=A(n.mockTemplate)&&n.mockTemplate.value?I(n.mockTemplate,{},!0):void 0;return async(...t)=>{let s={};if(e)try{s=await e.apply(e,t)}catch(r){l.logger.warn("模拟数据模版异常",r)}return P.mock(s)}}function $e(n,e){if(!e.mock)return;const{url:t,mockTemplate:s}=e;if(t&&s){const r=l.pathToRegexp(`${t}(.*)`),o=l.pathToRegexpMatch(t,{decode:decodeURIComponent}),a=x(s,{},!0);n.mock(r,i=>{const c=l.url.parse(i.url)||{},u=i.body instanceof FormData?l.formDataToJson(i.body):i.body,m=o(i.url)?.params;return Object.assign(i,{data:u,params:c,query:m}),n.mock(a(i))})}}function Y(){P&&(P._mocked={})}class Ce{__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=N){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.__reset()})}__proxy(){this.__instance&&V.forEach(e=>{this[e]=this.__instance?.[e]})}__cleanup(){V.forEach(e=>{this[e]=null}),this.__reset()}__reset(){this.__refs={},this.$refs={},this.__contextRefs={},this.context={}}__parseFunction(e){if(e)if(this.__mode===_.Runtime){const{id:t,type:s}=e,r=t?this.__transform[t]??e.value:e.value;return I({type:s,value:r},this)}else return I(e,this)}__parseExpression(e){if(e)if(this.__mode===_.Runtime){const{id:t,type:s}=e,r=t?this.__transform[t]??e.value:e.value;return x({type:s,value:r},this)}else return x(e,this)}__ref(e=null,t){if(this.__mode!==_.VNode)return e&&e!==this.__id&&(this.__contextRefs[e]=this),async s=>{await l.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}return r.nodeType===3&&r.nextSibling&&(r=r.nextSibling),r.__vtj__=e,_.Design===this.__mode&&(r.__context__=this,r.draggable=!0),e&&(this.__refs[e]=this.__getRefEl(this.__refs,e,s)),typeof t=="function"?t(s):t&&(this.$refs[t]=this.__getRefEl(this.$refs,t,s)),s}}__getRefEl(e,t,s){const r=e[t];if(r&&s!==r){const o=new Set([].concat(r,s));return Array.from(o)}else return s}__clone(e={}){const t={...this.context,...e},s={...t,context:t};return s.context.__proto__=this.context,s.__proto__=this,s}}function D(n){const{Vue:e=N,mode:t=_.Runtime,components:s={},libs:r={},apis:o={},loader:a}=n,i=e.computed(()=>n.dsl),c={$components:s,$libs:r,$apis:o},u=new Ce({mode:t,dsl:i.value,attrs:c}),m=e.defineComponent({name:i.value.name,props:{...Ge(i.value.props??[],u)},setup(p){u.$props=p,u.props=p,i.value.id&&G(n.window||window,i.value.id,i.value.css||""),u.state=We(e,i.value.state??{},u);const f=Ye(e,i.value.computed??{},u),g=Qe(i.value.methods??{},u),v=Xe(e,i.value.inject,u),h=Pe(i.value.dataSources||{},u),b={...v,...f,...g,...h};return u.setup(b,e),Ze(e,i.value.watch??[],u),{vtj:u}},emits:Ke(i.value.emits),expose:["vtj"],render(){if(!i.value.nodes)return null;const p=i.value.nodes||[];return p.length===1?F(p[0],u,e,a):p.map(f=>F(f,u,e,a))},...et(i.value.lifeCycles??{},u)});return{renderer:e.markRaw(m),context:u}}function Ke(n=[]){return n.map(e=>l.isString(e)?e:e.name)}function Ge(n=[],e){const t=s=>s?(Array.isArray(s)?s:[s]).map(o=>oe[o]):void 0;return n.map(s=>l.isString(s)?{name:s}:{name:s.name,type:s.type,required:s.required,default:S(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 S(o)?o=t.__parseExpression(o):A(o)&&(o=t.__parseFunction(o)),s[r]=o,s},{}))}function Ye(n,e,t){return Object.entries(e??{}).reduce((s,[r,o])=>(s[r]=n.computed(t.__parseFunction(o)),s),{})}function Qe(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=S(a)?t.__parseExpression(a)||o:a??o,c=S(r.default)?t.__parseExpression(r.default):r.default??null;return s[o]=n.inject(i,c),s},{})}function Pe(n,e){return Object.keys(n).reduce((t,s)=>{const r=n[s];if(r.type==="mock")t[s]=Ee(r);else if(r.ref){const o=e.$apis[r.ref],a=A(r.transform)?r.transform.value?e.__parseFunction(r.transform):void 0:r.transform;t[s]=async(...i)=>{const c=await o.apply(e,i);return a?a(c):c}}return t},{})}function Ze(n,e=[],t){e.forEach(s=>{n.watch(t.__parseExpression(s.source),t.__parseFunction(s.handler),{deep:s.deep,immediate:s.immediate})})}function et(n,e){return Object.entries(n??{}).reduce((t,[s,r])=>(t[s]=e.__parseFunction(r),t),{})}let J=[],C={};const Re=n=>n;async function Q(n,e=window){const{urls:t=[],library:s}=n,r=t.filter(i=>U(i));if(r.length===0||!s)return null;const o=t.filter(i=>B(i));return o.length&&fe(o,e),await he(r,s,e).catch(i=>(console.warn("loadScriptUrl error",r,s,i),null))}function H(n){const{getDsl:e,getDslByUrl:t,options:s}=n;return s.window&&(J.forEach(r=>{delete s.window[r]}),J=[]),(r,o,a=N)=>{if(!o||typeof o=="string")return r;if(o.type==="Schema"&&o.id){let i=C[o.id];return i||(i=C[o.id]=a.defineAsyncComponent(async()=>{const c=await e(o.id);return c&&(c.name=r),c?D({...s,Vue:a,dsl:c,mode:_.Runtime,loader:H(n)}).renderer:null}),i)}if(o.type==="UrlSchema"&&o.url){let i=C[o.url];return i||(i=C[o.url]=a.defineAsyncComponent(async()=>{const c=await t(o.url);return c&&(c.name=r),c?D({...s,Vue:a,dsl:c,mode:_.Runtime,loader:H(n)}).renderer:null}),i)}if(o.type==="Plugin"){let i=o.library?C[o.library]:null;return i||(o.library&&J.push(o.library),i=C[o.library||Symbol()]=a.defineAsyncComponent(async()=>{const c=await Q(o,s.window);return c||(console.warn("getPlugin result is null",o),null)}),i)}return r}}function tt(){C={}}function F(n,e,t=N,s=Re){if(!n||!n.name||n.invisible)return null;const r=t.getCurrentInstance()?.appContext,{id:o=null,directives:a=[]}=n,{vIf:i,vFor:c,vShow:u,vModels:m,vBind:p,vHtml:f,others:g}=nt(a);if(i&&!rt(i,e))return null;const v=h=>{const b=h.$components,y=(()=>{if(n.name==="component")return ot(h,n.props?.is);if(n.name==="slot")return n.name;const E=s(n.name,n.from,t);return l.isString(E)?ge(E)||ve(E)?E:b[E]??r?.app?.component(E)??E:E})(),j=it(o,n.props??{},h),De=at(t,n.events??{},h);if(n.name==="slot")return ct(t,n,j,h,s);p&&Object.assign(j,h.__parseExpression(p.value)),u&&(j.style=Object.assign(j.style??{},ut(u,h))),f&&Object.assign(j,dt(f,h)),m.forEach(E=>{Object.assign(j,pt(t,E,h))});const He=ft(t,n.children??[],h,s,n);let q=t.createVNode(y,{...j,...De},He);const te=r?st(r,g,h):[];return te.length&&(q=t.withDirectives(q,te)),q};return c?gt(c,v,e):v(e)}function st(n,e,t){const s=n.app;return e.map(r=>{const o=typeof r.name=="string"?s.directive(r.name):t.__parseExpression(r.name);if(!o)return null;const a=[o];return r.value&&a.push(t.__parseExpression(r.value)),r.arg&&a.push(r.arg),r.modifiers&&a.push(r.modifiers),a}).filter(r=>!!r)}function nt(n=[]){const e=n.find(c=>l.camelCase(c.name)==="vIf"),t=n.find(c=>l.camelCase(c.name)==="vFor"),s=n.find(c=>l.camelCase(c.name)==="vShow"),r=n.find(c=>l.camelCase(c.name)==="vBind"),o=n.find(c=>l.camelCase(c.name)==="vHtml"),a=n.filter(c=>l.camelCase(c.name)==="vModel"),i=n.filter(c=>!re.includes(l.camelCase(c.name)));return{vIf:e,vFor:t,vShow:s,vModels:a,vBind:r,others:i,vHtml:o}}function rt(n,e){return!!e.__parseExpression(n.value)}function ot(n,e){return e?S(e)?n.__parseExpression(e):e:"div"}function it(n,e,t){const s=z(e,t);return s.ref=t.__ref(n,s.ref),s}function z(n,e){return S(n)?e.__parseExpression(n):A(n)?e.__parseFunction(n):Array.isArray(n)?n.map(t=>z(t,e)):typeof n=="object"?Object.keys(n||{}).reduce((t,s)=>{let r=n[s];return t[s]=z(r,e),t},{}):n}function at(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],c=X(i.modifiers),u=c.find(f=>s.includes(f)),m="on"+l.upperFirst(a)+(u&&r[u]||""),p=t.__parseFunction(i.handler);return p&&(o[m]=n.withModifiers(p,c)),o},{})}function X(n={},e=!1){const t=Object.keys(n);return e?t.map(s=>"."+s):t}function ct(n,e,t,s,r){const{children:o}=e,a=lt(e,s),i=s.$slots?.[a.name];return i?i(t):o?l.isString(o)?n.createTextVNode(o):S(o)?n.createTextVNode(K(s.__parseExpression(o))):Array.isArray(o)?o.map(c=>F(c,s,n,r)):null:null}function lt(n,e){const{props:t}=n,s=t?.name||"default";return{name:S(s)?e.__parseExpression(s):s,params:[]}}function ut(n,e){return e.__parseExpression(n.value)?{}:{display:"none"}}function dt(n,e){return{innerHTML:e.__parseExpression(n.value)||""}}function pt(n,e,t){const s={type:"JSFunction",value:e.value?.value?`(v) => {
|
7
|
+
*/const k="0.10.1-alpha.1";var _=(n=>(n.Runtime="Runtime",n.Design="Design",n.Raw="Raw",n.VNode="VNode",n))(_||{});const V=["$el","$emit","$nextTick","$parent","$root","$attrs","$slots","$watch","$props","$options","$forceUpdate"],Be=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeUnmount","unmounted","errorCaptured","renderTracked","renderTriggered","activated","deactivated"],re=["vIf","vShow","vModel","vFor","vBind","vHtml"],oe={String,Number,Boolean,Array,Object,Function,Date},R="VtjPage",M="VtjHomepage",ie="html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot".split(","),ae="component,slot".split(",");function T(n,e){return n.map(t=>l.isUrl(t)||t.startsWith("/")?t:`${e}${t}`)}function B(n){return/\.css$/.test(n)}function U(n){return/\.js$/.test(n)}function ce(n){return/\.json$/.test(n)}function Ue(n){return n.map(e=>`<script src="${l.url.append(e,{v:k})}"><\/script>`).join("")}function Le(n=[]){return n.map(e=>`<link rel="stylesheet" href="${l.url.append(e,{v:k})}" />`).join("")}function le(n,e=!1){return e&&n.endsWith(".prod.js")?n.replace(".prod.js",".js"):n}function ue(n,e,t=!1){const s=n.filter(f=>!!f.enabled),r=[],o=[],a=[],i=[],c={},u={},m=[],p={};return s.forEach(({urls:f,assetsUrl:g,library:v,assetsLibrary:h,localeLibrary:b})=>{f?.forEach(y=>{U(y)&&r.push(le(y,t)),B(y)&&o.push(y)}),v&&(i.push(v),c[v]=T(f||[],e),b&&(u[v]=b)),g&&a.push(g),h&&m.push(h),v&&h&&(p[h]=v)}),{scripts:T(r,e),css:T(o,e),materials:T(a,e),libraryExports:i,materialExports:l.dedupArray(m),materialMapLibrary:p,libraryMap:c,libraryLocaleMap:u}}function de(n,e){const{name:t,parent:s,alias:r}=n;return s?e[s]?.[r||t]:e[r||t]}function K(n){return l.isString(n)?n:JSON.stringify(n)}function G(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(c=>c.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 pe(n,e){const t=await window.fetch(e).then(s=>s.text()).catch(()=>"");t&&G(window,n,t)}function fe(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 he(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 c of n){const u=s.createElement("script");u.src=c,u.onload=()=>{o=t[e],o?a(o.default||o):i(null)},u.onerror=m=>{i(m)},r.appendChild(u)}})}function me(n){return l.isFunction(n)||l.isFunction(n?.install)}function ge(n){return ae.includes(n)}function ve(n){return ie.includes(n)}function x(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,c)=>`__self${c}`),o=r.join(`
|
8
|
+
`)+o;const a=`with(${t?"{}":"$scope || {}"}) { ${o} }`;return new Function("$scope",a)(e)}catch(r){if(l.logger.error("parseExpression.error",r,n,e?.__self??e),s)throw r}}function I(n,e,t=!1,s=!1){const r=x(n,e,t,s);if(typeof r!="function"&&(l.logger.error("parseFunction.error","not a function",n,e?.__self??e),s))throw new Error(`"${n.value}" not a function`);return r}function S(n){return n&&n.type==="JSExpression"}function A(n){return typeof n=="object"&&n&&n.type==="JSFunction"}function ye(n){return S(n)||A(n)}function qe(n){return ye(n)?n.value:JSON.stringify(n)}const Je={session:!1,authKey:"Authorization",storageKey:"ACCESS_STORAGE",storagePrefix:"__VTJ_",unauthorized:void 0,auth:"/#/login",redirectParam:"r",unauthorizedCode:401,unauthorizedMessage:"登录已经失效,请重新登录!",noPermissionMessage:"无权限访问该页面",appName:""},W=Symbol("access");class Ve{options;data=null;mode=_.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&&this.mode===_.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&&(l.storage.save(t,e,{type:"local",prefix:s}),r&&l.cookie.set(o,this.data.token))}clear(){const{storageKey:e,storagePrefix:t,session:s,authKey:r}=this.options;this.data=null,l.storage.remove(e,{type:"local",prefix:t}),s&&l.cookie.remove(r)}logout(){this.clear(),this.toLogin()}getData(){return this.data?this.data:(this.loadData(),this.data)}getToken(){return this.data||this.loadData(),this.data?.token}can(e){const{appName:t}=this.options,{permissions:s={}}=this.data||{};return typeof e=="function"?e(s):l.toArray(e).every(o=>s[o]||s[t+"."+o])}some(e){const{appName:t}=this.options,{permissions:s={}}=this.data||{};return l.toArray(e).some(o=>s[o]||s[t+"."+o])}install(e){e.config.globalProperties.$access||(e.config.globalProperties.$access=this),e.provide(W,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)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=>l.unRSA(r,t));this.data=JSON.parse(s.join(""));return}if(typeof e=="string")try{const s=t?l.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=l.storage.get(e,{type:"local",prefix:t});this.setData(s||null)}isLogined(){const{session:e,authKey:t}=this.options;return e&&t?!!l.cookie.get(t):!!this.getToken()}hasRoutePermission(e){if(e.name===R){const t=e.params.id;return t&&this.can(t)}return!0}setGuard(e){e.beforeEach((t,s,r)=>this.guard(t,r))}async guard(e,t){if(this.isWhiteList(e)||this.isAuthPath(e))return t();if(this.isLogined()){if(this.hasRoutePermission(e))return t();{const{noPermissionMessage:s="无权限访问",unauthorized:r=!1}=this.options;return await this.showTip(s),l.isFunction(r)?(r(),t(!1)):l.isString(r)?t(r):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;return t?(await l.delay(150),await t(e,{title:"提示",type:"warning"}).catch(()=>!1)):!1}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 _e(){return d.inject(W,null)}function ze(n={}){const{notify:e,loading:t,settings:s={}}=n;let r=null;return{request:l.createRequest({settings:{type:"form",validSuccess:!0,originResponse:!1,loading:!0,validate:a=>a.data?.code===0||!!a.data?.success,failMessage:!0,showError:a=>{e&&e(a||"未知错误")},showLoading:()=>{r&&r.close(),t&&(r=t())},hideLoading:()=>{r&&(r.close(),r=null)},...s}}),jsonp:l.jsonp,notify:e,loading:t}}function we(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?x(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(l.merge(o,i||{},{data:a})))}}function Se(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 be(n=[],e=[],t){const s={};for(const r of n)s[r.id]=we(r,t);for(const r of e)s[r.id]=Se(r,t);return s}async function je(n=[]){P&&(Y(),n.forEach(e=>$e(P,e)))}function Ee(n){const e=A(n.mockTemplate)&&n.mockTemplate.value?I(n.mockTemplate,{},!0):void 0;return async(...t)=>{let s={};if(e)try{s=await e.apply(e,t)}catch(r){l.logger.warn("模拟数据模版异常",r)}return P.mock(s)}}function $e(n,e){if(!e.mock)return;const{url:t,mockTemplate:s}=e;if(t&&s){const r=l.pathToRegexp(`${t}(.*)`),o=l.pathToRegexpMatch(t,{decode:decodeURIComponent}),a=x(s,{},!0);n.mock(r,i=>{const c=l.url.parse(i.url)||{},u=i.body instanceof FormData?l.formDataToJson(i.body):i.body,m=o(i.url)?.params;return Object.assign(i,{data:u,params:c,query:m}),n.mock(a(i))})}}function Y(){P&&(P._mocked={})}class Ce{__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=N){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.__reset()})}__proxy(){this.__instance&&V.forEach(e=>{this[e]=this.__instance?.[e]})}__cleanup(){V.forEach(e=>{this[e]=null}),this.__reset()}__reset(){this.__refs={},this.$refs={},this.__contextRefs={},this.context={}}__parseFunction(e){if(e)if(this.__mode===_.Runtime){const{id:t,type:s}=e,r=t?this.__transform[t]??e.value:e.value;return I({type:s,value:r},this)}else return I(e,this)}__parseExpression(e){if(e)if(this.__mode===_.Runtime){const{id:t,type:s}=e,r=t?this.__transform[t]??e.value:e.value;return x({type:s,value:r},this)}else return x(e,this)}__ref(e=null,t){if(this.__mode!==_.VNode)return e&&e!==this.__id&&(this.__contextRefs[e]=this),async s=>{await l.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}return r.nodeType===3&&r.nextSibling&&(r=r.nextSibling),r.__vtj__=e,_.Design===this.__mode&&(r.__context__=this,r.draggable=!0),e&&(this.__refs[e]=this.__getRefEl(this.__refs,e,s)),typeof t=="function"?t(s):t&&(this.$refs[t]=this.__getRefEl(this.$refs,t,s)),s}}__getRefEl(e,t,s){const r=e[t];if(r&&s!==r){const o=new Set([].concat(r,s));return Array.from(o)}else return s}__clone(e={}){const t={...this.context,...e},s={...t,context:t};return s.context.__proto__=this.context,s.__proto__=this,s}}function D(n){const{Vue:e=N,mode:t=_.Runtime,components:s={},libs:r={},apis:o={},loader:a}=n,i=e.computed(()=>n.dsl),c={$components:s,$libs:r,$apis:o},u=new Ce({mode:t,dsl:i.value,attrs:c}),m=e.defineComponent({name:i.value.name,props:{...Ge(i.value.props??[],u)},setup(p){u.$props=p,u.props=p,i.value.id&&G(n.window||window,i.value.id,i.value.css||""),u.state=We(e,i.value.state??{},u);const f=Ye(e,i.value.computed??{},u),g=Qe(i.value.methods??{},u),v=Xe(e,i.value.inject,u),h=Pe(i.value.dataSources||{},u),b={...v,...f,...g,...h};return u.setup(b,e),Ze(e,i.value.watch??[],u),{vtj:u}},emits:Ke(i.value.emits),expose:["vtj"],render(){if(!i.value.nodes)return null;const p=i.value.nodes||[];return p.length===1?F(p[0],u,e,a):p.map(f=>F(f,u,e,a))},...et(i.value.lifeCycles??{},u)});return{renderer:e.markRaw(m),context:u}}function Ke(n=[]){return n.map(e=>l.isString(e)?e:e.name)}function Ge(n=[],e){const t=s=>s?(Array.isArray(s)?s:[s]).map(o=>oe[o]):void 0;return n.map(s=>l.isString(s)?{name:s}:{name:s.name,type:s.type,required:s.required,default:S(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 S(o)?o=t.__parseExpression(o):A(o)&&(o=t.__parseFunction(o)),s[r]=o,s},{}))}function Ye(n,e,t){return Object.entries(e??{}).reduce((s,[r,o])=>(s[r]=n.computed(t.__parseFunction(o)),s),{})}function Qe(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=S(a)?t.__parseExpression(a)||o:a??o,c=S(r.default)?t.__parseExpression(r.default):r.default??null;return s[o]=n.inject(i,c),s},{})}function Pe(n,e){return Object.keys(n).reduce((t,s)=>{const r=n[s];if(r.type==="mock")t[s]=Ee(r);else if(r.ref){const o=e.$apis[r.ref],a=A(r.transform)?r.transform.value?e.__parseFunction(r.transform):void 0:r.transform;t[s]=async(...i)=>{const c=await o.apply(e,i);return a?a(c):c}}return t},{})}function Ze(n,e=[],t){e.forEach(s=>{n.watch(t.__parseExpression(s.source),t.__parseFunction(s.handler),{deep:s.deep,immediate:s.immediate})})}function et(n,e){return Object.entries(n??{}).reduce((t,[s,r])=>(t[s]=e.__parseFunction(r),t),{})}let J=[],C={};const ke=n=>n;async function Q(n,e=window){const{urls:t=[],library:s}=n,r=t.filter(i=>U(i));if(r.length===0||!s)return null;const o=t.filter(i=>B(i));return o.length&&fe(o,e),await he(r,s,e).catch(i=>(console.warn("loadScriptUrl error",r,s,i),null))}function H(n){const{getDsl:e,getDslByUrl:t,options:s}=n;return s.window&&(J.forEach(r=>{delete s.window[r]}),J=[]),(r,o,a=N)=>{if(!o||typeof o=="string")return r;if(o.type==="Schema"&&o.id){let i=C[o.id];return i||(i=C[o.id]=a.defineAsyncComponent(async()=>{const c=await e(o.id);return c&&(c.name=r),c?D({...s,Vue:a,dsl:c,mode:_.Runtime,loader:H(n)}).renderer:null}),i)}if(o.type==="UrlSchema"&&o.url){let i=C[o.url];return i||(i=C[o.url]=a.defineAsyncComponent(async()=>{const c=await t(o.url);return c&&(c.name=r),c?D({...s,Vue:a,dsl:c,mode:_.Runtime,loader:H(n)}).renderer:null}),i)}if(o.type==="Plugin"){let i=o.library?C[o.library]:null;return i||(o.library&&J.push(o.library),i=C[o.library||Symbol()]=a.defineAsyncComponent(async()=>{const c=await Q(o,s.window);return c||(console.warn("getPlugin result is null",o),null)}),i)}return r}}function tt(){C={}}function F(n,e,t=N,s=ke){if(!n||!n.name||n.invisible)return null;const r=t.getCurrentInstance()?.appContext,{id:o=null,directives:a=[]}=n,{vIf:i,vFor:c,vShow:u,vModels:m,vBind:p,vHtml:f,others:g}=nt(a);if(i&&!rt(i,e))return null;const v=h=>{const b=h.$components,y=(()=>{if(n.name==="component")return ot(h,n.props?.is);if(n.name==="slot")return n.name;const E=s(n.name,n.from,t);return l.isString(E)?ge(E)||ve(E)?E:b[E]??r?.app?.component(E)??E:E})(),j=it(o,n.props??{},h),De=at(t,n.events??{},h);if(n.name==="slot")return ct(t,n,j,h,s);p&&Object.assign(j,h.__parseExpression(p.value)),u&&(j.style=Object.assign(j.style??{},ut(u,h))),f&&Object.assign(j,dt(f,h)),m.forEach(E=>{Object.assign(j,pt(t,E,h))});const He=ft(t,n.children??[],h,s,n);let q=t.createVNode(y,{...j,...De},He);const te=r?st(r,g,h):[];return te.length&&(q=t.withDirectives(q,te)),q};return c?gt(c,v,e):v(e)}function st(n,e,t){const s=n.app;return e.map(r=>{const o=typeof r.name=="string"?s.directive(r.name):t.__parseExpression(r.name);if(!o)return null;const a=[o];return r.value&&a.push(t.__parseExpression(r.value)),r.arg&&a.push(r.arg),r.modifiers&&a.push(r.modifiers),a}).filter(r=>!!r)}function nt(n=[]){const e=n.find(c=>l.camelCase(c.name)==="vIf"),t=n.find(c=>l.camelCase(c.name)==="vFor"),s=n.find(c=>l.camelCase(c.name)==="vShow"),r=n.find(c=>l.camelCase(c.name)==="vBind"),o=n.find(c=>l.camelCase(c.name)==="vHtml"),a=n.filter(c=>l.camelCase(c.name)==="vModel"),i=n.filter(c=>!re.includes(l.camelCase(c.name)));return{vIf:e,vFor:t,vShow:s,vModels:a,vBind:r,others:i,vHtml:o}}function rt(n,e){return!!e.__parseExpression(n.value)}function ot(n,e){return e?S(e)?n.__parseExpression(e):e:"div"}function it(n,e,t){const s=z(e,t);return s.ref=t.__ref(n,s.ref),s}function z(n,e){return S(n)?e.__parseExpression(n):A(n)?e.__parseFunction(n):Array.isArray(n)?n.map(t=>z(t,e)):typeof n=="object"?Object.keys(n||{}).reduce((t,s)=>{let r=n[s];return t[s]=z(r,e),t},{}):n}function at(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],c=X(i.modifiers),u=c.find(f=>s.includes(f)),m="on"+l.upperFirst(a)+(u&&r[u]||""),p=t.__parseFunction(i.handler);return p&&(o[m]=n.withModifiers(p,c)),o},{})}function X(n={},e=!1){const t=Object.keys(n);return e?t.map(s=>"."+s):t}function ct(n,e,t,s,r){const{children:o}=e,a=lt(e,s),i=s.$slots?.[a.name];return i?i(t):o?l.isString(o)?n.createTextVNode(o):S(o)?n.createTextVNode(K(s.__parseExpression(o))):Array.isArray(o)?o.map(c=>F(c,s,n,r)):null:null}function lt(n,e){const{props:t}=n,s=t?.name||"default";return{name:S(s)?e.__parseExpression(s):s,params:[]}}function ut(n,e){return e.__parseExpression(n.value)?{}:{display:"none"}}function dt(n,e){return{innerHTML:e.__parseExpression(n.value)||""}}function pt(n,e,t){const s={type:"JSFunction",value:e.value?.value?`(v) => {
|
9
9
|
${e.value.value} = v;
|
10
|
-
}`:"(v) => {}"},r=t.__parseFunction(s),o=X(S(e.modifiers)?t.__parseExpression(e.modifiers):e.modifiers),a=S(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 ft(n,e,t,s,r){if(!e)return null;if(l.isString(e))return{default:()=>e};if(S(e))return{default:()=>K(t.__parseExpression(e))};if(Array.isArray(e)&&e.length>0){const o=ht(e),a=i=>!i||!r?{}:r?.id&&Object.keys(i).length?{[`scope_${r.id}`]:i}:{};return Object.entries(o).reduce((i,[c,{nodes:u,params:m}])=>(i[c]=p=>{const f=m.length?l.pick(p??{},m):a(p);return u.map(g=>F(g,t.__clone(f),n,s))},i),{})}return null}function ht(n){const e={default:{params:[],nodes:[]}};for(const t of n){const s=mt(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 mt(n="default"){return l.isString(n)?{name:n,params:[]}:{params:[],...n}}function gt(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((c,u)=>u+1)),Array.isArray(i)?i.map((c,u)=>e(t.__clone({[o]:c,[a]:u}))):(console.warn("[vForRender]:",`${s?.value} is not a Arrary`),[])}function vt(n){return d.getCurrentScope()?(d.onScopeDispose(n),!0):!1}const
|
10
|
+
}`:"(v) => {}"},r=t.__parseFunction(s),o=X(S(e.modifiers)?t.__parseExpression(e.modifiers):e.modifiers),a=S(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 ft(n,e,t,s,r){if(!e)return null;if(l.isString(e))return{default:()=>e};if(S(e))return{default:()=>K(t.__parseExpression(e))};if(Array.isArray(e)&&e.length>0){const o=ht(e),a=i=>!i||!r?{}:r?.id&&Object.keys(i).length?{[`scope_${r.id}`]:i}:{};return Object.entries(o).reduce((i,[c,{nodes:u,params:m}])=>(i[c]=p=>{const f=m.length?l.pick(p??{},m):a(p);return u.map(g=>F(g,t.__clone(f),n,s))},i),{})}return null}function ht(n){const e={default:{params:[],nodes:[]}};for(const t of n){const s=mt(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 mt(n="default"){return l.isString(n)?{name:n,params:[]}:{params:[],...n}}function gt(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((c,u)=>u+1)),Array.isArray(i)?i.map((c,u)=>e(t.__clone({[o]:c,[a]:u}))):(console.warn("[vForRender]:",`${s?.value} is not a Arrary`),[])}function vt(n){return d.getCurrentScope()?(d.onScopeDispose(n),!0):!1}const Re=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const yt=n=>n!=null,_t=()=>{};function wt(n){return d.getCurrentInstance()}function St(n){return Array.isArray(n)?n:[n]}function bt(...n){if(n.length!==1)return d.toRef(...n);const e=n[0];return typeof e=="function"?d.readonly(d.customRef(()=>({get:e,set:_t}))):d.ref(e)}function jt(n,e){wt()&&d.onBeforeUnmount(n,e)}const Et=Re?window:void 0,$t=Re?window.document:void 0;function Ct(n){var e;const t=d.toValue(n);return(e=t?.$el)!=null?e:t}function Pt(){const n=d.ref(!1),e=d.getCurrentInstance();return e&&d.onMounted(()=>{n.value=!0},e),n}function kt(n){const e=Pt();return d.computed(()=>(e.value,!!n()))}function Rt(n,e,t={}){const{window:s=Et,...r}=t;let o;const a=kt(()=>s&&"MutationObserver"in s),i=()=>{o&&(o.disconnect(),o=void 0)},c=d.computed(()=>{const f=d.toValue(n),g=St(f).map(Ct).filter(yt);return new Set(g)}),u=d.watch(()=>c.value,f=>{i(),a.value&&f.size&&(o=new MutationObserver(e),f.forEach(g=>o.observe(g,r)))},{immediate:!0,flush:"post"}),m=()=>o?.takeRecords(),p=()=>{u(),i()};return vt(p),{isSupported:a,stop:p,takeRecords:m}}function xt(n=null,e={}){var t,s,r;const{document:o=$t,restoreOnUnmount:a=p=>p}=e,i=(t=o?.title)!=null?t:"",c=bt((s=n??o?.title)!=null?s:null),u=!!(n&&typeof n=="function");function m(p){if(!("titleTemplate"in e))return p;const f=e.titleTemplate||"%s";return typeof f=="function"?f(p):d.toValue(f).replace(/%s/g,p)}return d.watch(c,(p,f)=>{p!==f&&o&&(o.title=m(p??""))},{immediate:!0}),e.observe&&!e.titleTemplate&&o&&!u&&Rt((r=o.head)==null?void 0:r.querySelector("title"),()=>{o&&o.title!==c.value&&(c.value=m(o.title))},{childList:!0}),jt(()=>{if(a){const p=a(i,c.value||"");p!=null&&o&&(o.title=p)}}),c}const se=d.defineComponent({name:"VtjPageContainer",async setup(){const n=ee(),e=ne.useRoute(),t=e.params.id,s=t?n.getPage(t):n.getHomepage(),r=s?await n.getRenderComponent(s.id):null,o=d.ref(Symbol());return s&&(Object.assign(e.meta,s.meta||{},{cache:s.cache}),xt(s.title||"VTJ")),{provider:n,component:r,file:s,query:e.query,meta:e.meta,sid:o,route:e}},render(){const{component:n,query:e,sid:t}=this;return n?d.h(n,{...e,key:t}):d.h("div","页面不存在")},activated(){this.meta.cache===!1&&(this.sid=Symbol())}}),At={"data-l-h6o7ki7":"",class:"vtj-startup__wrapper"},Tt={"data-l-h6o7ki7":"",class:"vtj-startup"},Mt={"data-l-h6o7ki7":"",class:"vtj-startup__name"},Ft={"data-l-h6o7ki7":""},Ot={"data-l-h6o7ki7":"",class:"vtj-startup__tagline"},It={"data-l-h6o7ki7":"",class:"vtj-startup__actions"},xe=d.defineComponent({__name:"Startup",props:{name:{default:"VTJ.PRO"},tagline:{default:"基于 Vue3 + TypeScript 快速打造高生产力的低代码研发平台"},actionText:{default:"开始设计"},link:{}},setup(n){((r,o)=>{let a=document.getElementById("h6o7ki7");a||(a=document.createElement("style"),a.id="h6o7ki7",document.head.appendChild(a),a.innerHTML=o)})("h6o7ki7",`
|
11
11
|
.vtj-startup[data-l-h6o7ki7]{
|
12
12
|
padding: 20px;
|
13
13
|
border-radius: 4px;
|
@@ -33,7 +33,7 @@
|
|
33
33
|
font-weight: 700;
|
34
34
|
white-space: pre-wrap;
|
35
35
|
}
|
36
|
-
.vtj-startup__name span[data-l-h6o7ki7]{
|
36
|
+
.vtj-startup__name .span[data-l-h6o7ki7]{
|
37
37
|
background: -webkit-linear-gradient(120deg, #bd34fe 30%, #41d1ff);
|
38
38
|
-webkit-background-clip: text;
|
39
39
|
background-clip: text;
|
@@ -56,17 +56,18 @@
|
|
56
56
|
padding: 20px 0 0 0;
|
57
57
|
margin-top: 20px;
|
58
58
|
}
|
59
|
-
.vtj-startup__actions span[data-l-h6o7ki7]{
|
59
|
+
.vtj-startup__actions .span[data-l-h6o7ki7]{
|
60
60
|
color: #e6a23c;
|
61
61
|
}@media (max-width: 768px){
|
62
62
|
|
63
|
-
.vtj-startup__actions span[data-l-h6o7ki7]{
|
63
|
+
.vtj-startup__actions .span[data-l-h6o7ki7]{
|
64
64
|
display: block;
|
65
65
|
text-align: center;
|
66
66
|
width: 100%;
|
67
67
|
}
|
68
68
|
}
|
69
|
-
.vtj-startup__actions button[data-l-h6o7ki7]{
|
69
|
+
.vtj-startup__actions .button[data-l-h6o7ki7]{
|
70
|
+
height: 40px;
|
70
71
|
padding: 0 20px;
|
71
72
|
border-radius: 20px;
|
72
73
|
background-color: #409eff;
|
@@ -74,13 +75,15 @@
|
|
74
75
|
color: #fff;
|
75
76
|
font-weight: 600;
|
76
77
|
cursor: pointer;
|
78
|
+
display: inline-block;
|
79
|
+
line-height: 40px;
|
77
80
|
}@media (max-width: 768px){
|
78
81
|
|
79
|
-
.vtj-startup__actions button[data-l-h6o7ki7]{
|
82
|
+
.vtj-startup__actions .button[data-l-h6o7ki7]{
|
80
83
|
width: 100%;
|
81
84
|
margin-top: 20px;
|
82
85
|
}
|
83
86
|
}
|
84
|
-
.vtj-startup__actions button[data-l-h6o7ki7]:hover{
|
87
|
+
.vtj-startup__actions .button[data-l-h6o7ki7]:hover{
|
85
88
|
opacity: 0.7;
|
86
|
-
}`);const t=n,s=()=>{if(typeof window<"u"){if(t.link){typeof t.link=="function"?t.link():window.location.href=t.link;return}let o=(window.__VTJ_LINK__||{}).href||window.location.pathname+"__vtj__/#/";window.location.href=o}};return(r,o)=>(d.openBlock(),d.createElementBlock("div",At,[d.createElementVNode("div",Tt,[d.createElementVNode("h1",Mt,[d.createElementVNode("span",Ft,d.toDisplayString(t.name),1)]),d.createElementVNode("div",Ot,d.toDisplayString(t.tagline),1),d.createElementVNode("div",It,[o[0]||(o[0]=d.createElementVNode("span",{"data-l-h6o7ki7":""},"设置项目主页后,将替换此页面显示",-1)),d.createElementVNode("button",{"data-l-h6o7ki7":"",onClick:s},d.toDisplayString(t.actionText),1)])])]))}}),Dt=d.defineComponent({name:"VtjStartupContainer",render(){return d.h(xe)}}),Z=Symbol("Provider");var Ae=(n=>(n.Production="production",n.Development="development",n))(Ae||{});class Te extends $.Base{constructor(e){super(),this.options=e;const{service:t,mode:s=_.Raw,dependencies:r,materials:o,project:a={},adapter:i={},globals:c={},modules:u={},router:m=null,materialPath:p="./",nodeEnv:f="development"}=e;this.mode=s,this.modules=u,this.service=t,this.router=m,this.materialPath=p,this.nodeEnv=f,r&&(this.dependencies=r),o&&(this.materials=o),Object.assign(this.globals,c),Object.assign(this.adapter,i);const{access:g,request:v}=this.adapter;g&&g.connect({mode:s,router:m,request:v}),a&&s!==_.Design?this.load(a):this.project=a,P.setup({timeout:"50-500"})}mode;globals={};modules={};adapter={request:l.request,jsonp:l.jsonp};apis={};dependencies={};materials={};library={};service;project=null;components={};nodeEnv="development";router=null;materialPath="./";urlDslCaches={};createMock(e){return async(...t)=>{let s={};if(e)try{s=await e.apply(e,t)}catch(r){l.logger.warn("模拟数据模版异常",r)}return P.mock(s)}}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.mode===_.Raw?await this.loadDependencies(o):await this.loadAssets(o),this.apis=be(s,r,this.adapter),Y(),je(s),e.platform!=="uniapp"&&this.initRouter(),this.triggerReady()}async loadDependencies(e){const t=Object.entries(this.dependencies);for(const[s,r]of t)e[s]||(e[s]=this.library[s]=await r())}async loadAssets(e){const{dependencies:t=[]}=this.project,{dependencies:s,library:r,components:o,materialPath:a,nodeEnv:i}=this,{libraryExports:c,libraryMap:u,materials:m,materialExports:p,materialMapLibrary:f}=ue(t,a,i==="development");for(const g of c){const v=s[g],h=e[g];if(h)r[g]=h;else if(v)e[g]=r[g]=await v();else{const b=u[g]||[];for(const y of b)B(y)&&await pe(g,l.url.append(y,{v:R})),U(y)&&await l.loadScript(l.url.append(y,{v:R}));r[g]=e[g]}}if(i==="development"){for(const v of m)await l.loadScript(l.url.append(v,{v:R}));const g=this.materials||{};for(const v of p){const h=e[f[v]],b=$.BUILT_IN_COMPONENTS[v];if(b)h&&b.forEach(y=>{o[y]=h[y]});else{const y=g[v]?(await g[v]()).default:e[v];y&&h&&(y.components||[]).forEach(j=>{o[j.name]=de(j,h)})}}}}initRouter(){const{router:e,project:t,options:s,adapter:r}=this;if(!e)return;const{routeAppendTo:o,pageRouteName:a="page",routeMeta:i}=s,c=o?"":"/",u={path:`${c}${a}/:id`,name:k,component:se},m={path:c,name:M,component:t?.homepage?se:r.startupComponent||Dt,meta:i};e.hasRoute(k)&&e.removeRoute(k),e.hasRoute(M)&&e.removeRoute(M),o?(e.addRoute(o,u),e.addRoute(o,m)):(e.addRoute(u),e.addRoute(m))}install(e){const t=e.config.globalProperties.installed||{};for(const[s,r]of Object.entries(this.library))!t[s]&&me(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(Z,this),e.config.globalProperties.installed=t,this.mode===_.Design&&(e.config.errorHandler=(s,r,o)=>{const a=r?.$options.name,i=typeof s=="string"?s:s?.message||s?.msg||"未知错误",c=`[ ${a} ] ${i} ${o}`;console.error("[VTJ Error]:",{err:s,instance:r,info:o},s?.stack),this.adapter.notify&&this.adapter.notify(c,"组件渲染错误","error")})}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,this.project||void 0).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},c=H({getDsl:async u=>await this.getDsl(u)||null,getDslByUrl:async u=>await this.getDslByUrl(u)||null,options:i});return D({...i,dsl:e,loader:c})}async getRenderComponent(e,t){const s=this.getFile(e);if(!s)return l.logger.warn(`Can not find file: ${e}`),null;t&&t(s);const r=`.vtj/vue/${e}.vue`,o=this.modules[r];if(o)return(await o())?.default;const a=await this.getDsl(s.id);return a?this.createDslRenderer(a).renderer:(l.logger.warn(`Can not find dsl: ${e}`),null)}defineUrlSchemaComponent(e,t){return d.defineAsyncComponent(async()=>{const s=await this.getDslByUrl(e);return s?(s.name=t||s.name,this.createDslRenderer(s).renderer):null})}definePluginComponent(e){return d.defineAsyncComponent(async()=>await Q(e,window))}}function Ht(n){const e=new Te(n);return{provider:e,onReady:s=>e.ready(s)}}function ee(n={}){const e=d.inject(Z);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&&e.adapter.notify&&e.adapter.notify(`[ ${r?.name} ] 组件源码版本与运行时版本不一致,请重新发布组件`,"版本不一致","warning")})()}return e}const Me={type:"json",validSuccess:!0,originResponse:!1,failMessage:!0,validate:n=>n.data?.code===0},Nt=(n,e="/__vtj__/api/:type.json")=>(t,s,r)=>n.send({url:e,method:"post",params:{type:t},query:r,data:{type:t,data:s},settings:Me}),Bt=(n,e="/__vtj__/api/uploader.json")=>async(t,s)=>await n.send({url:e,method:"post",data:{files:t,projectId:s},settings:{...Me,type:"data"}}).then(r=>r&&r[0]?r[0]:null).catch(()=>null);function Ut(n){return l.createRequest({settings:{type:"json",validSuccess:!0,originResponse:!1,failMessage:!0,validate:e=>e.data?.code===0,showError:e=>{n&&n(e||"未知错误")}}})}class L{api;pluginCaches={};uploader;constructor(e=l.request){this.api=Nt(e),this.uploader=Bt(e)}async getExtension(){console.log("BaseService.getExtension")}async init(e){return console.log("BaseService.init",e),{}}async saveProject(e,t){return!!await this.api("saveProject",e,{type:t}).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=>ce(o))[0];if(!s)return null;const r=this.pluginCaches[s];return r||(this.pluginCaches[s]=l.request.send({url:s,method:"get",settings:{validSuccess:!1,originResponse:!0}}).then(o=>o.data).catch(()=>null))}async genSource(e){return console.log("BaseService.genSource",e),""}}const w=new l.Storage({type:"local",expired:0,prefix:"__VTJ_"});class Lt extends L{init(e){const t=new $.ProjectModel(e),s=w.get(`project_${t.id}`),r=Object.assign(t.toDsl(),s||{});return w.save(`project_${t.id}`,r),Promise.resolve(r)}saveProject(e){const t=new $.ProjectModel(e);return w.save(`project_${t.id}`,t.toDsl()),Promise.resolve(!0)}saveMaterials(e,t){return w.save(`materials_${e.id}`,l.mapToObject(t)),Promise.resolve(!0)}saveFile(e){return w.save(`file_${e.id}`,e),Promise.resolve(!0)}getFile(e){const t=w.get(`file_${e}`);return t?Promise.resolve(t):Promise.reject(null)}removeFile(e){return w.remove(`file_${e}`),Promise.resolve(!0)}saveHistory(e){return w.save(`history_${e.id}`,e),Promise.resolve(!0)}removeHistory(e){const t=w.get(`history_${e}`);if(t){const r=(t.items||[]).map(o=>o.id);this.removeHistoryItem(e,r),w.remove(`history_${e}`)}return Promise.resolve(!0)}getHistory(e){const t=w.get(`history_${e}`),s=new $.HistoryModel(t||{id:e});return Promise.resolve(s.toDsl())}getHistoryItem(e,t){const s=w.get(`history_${e}_${t}`);return Promise.resolve(s)}saveHistoryItem(e,t){return w.save(`history_${e}_${t.id}`,t),Promise.resolve(!0)}removeHistoryItem(e,t){return t.forEach(s=>{w.remove(`history_${e}_${s}`)}),Promise.resolve(!0)}}class Fe extends L{projects={};materials={};files={};histories={};historyItems={};init(e){const t=new $.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 $.ProjectModel(e);return this.projects[t.id]=t.toDsl(),Promise.resolve(!0)}saveMaterials(e,t){return e.id&&(this.materials[e.id]=l.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 $.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 O=null;function qt(){return O||(O=new Fe,O)}class Jt extends L{getFileCaches={};async getExtension(){return await this.api("getExtension",{}).catch(()=>{})}async init(e){return await this.api("init",e).catch(()=>null)||{}}async saveProject(e,t){return!!await this.api("saveProject",e,{type:t}).catch(()=>!1)}async saveMaterials(e,t){return!!await this.api("saveMaterials",{project:e,materials:l.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 Oe(n,e,t=[]){return t.map(s=>{const{id:r,title:o,icon:a,children:i,hidden:c}=s;return{id:r,title:o,icon:a,hidden:c,url:`${n}/${e}/${r}`,children:i&&i.length?Oe(n,e,i):void 0}})}function Ie(n,e){if(!e)return n;let t=[];for(const s of n)if(s.children&&s.children.length){const r=Ie(s.children,e);r.length&&(s.children=r,t.push(s))}else e.can(s.id.toString())&&t.push(s);return t}function Vt(n){const{menuPathPrefix:e="",pageRouteName:t="page",disableMenusFilter:s=!1}=n||{},r=ee(),o=ne.useRoute(),a=_e(),i=d.ref(!1),c=d.ref(!1),u=r.project;d.watchEffect(()=>{const{name:f,params:g,meta:v}=o;if(f===k){const h=r.getPage(g.id);i.value=!h?.mask,c.value=!!h?.pure}else if(f===M){const h=r.getHomepage();i.value=!h?.mask,c.value=!!h?.pure}else i.value=!v.mask,c.value=!!v.pure});const m=Oe(e,t,u?.pages),p=u?.config;return{disabled:i,logo:p?.logo,themeSwitchable:p?.themeSwitchable,title:p?.title||u?.description||u?.name||"VTJ App",menus:s?m:Ie(m,a),pure:c}}exports.ACCESS_KEY=W;exports.Access=Ve;exports.BUILD_IN_TAGS=ae;exports.BUILT_IN_DIRECTIVES=re;exports.BaseService=L;exports.CONTEXT_HOST=V;exports.Context=Ce;exports.ContextMode=_;exports.DATA_TYPES=oe;exports.HOMEPAGE_ROUTE_NAME=M;exports.HTML_TAGS=ie;exports.JSCodeToString=qe;exports.LIFE_CYCLES_LIST=Be;exports.LocalService=Jt;exports.MemoryService=Fe;exports.NodeEnv=Ae;exports.PAGE_ROUTE_NAME=k;exports.Provider=Te;exports.Startup=xe;exports.StorageService=Lt;exports.VTJ_RENDERER_VERSION=R;exports.adoptedStyleSheets=G;exports.clearLoaderCache=tt;exports.createAdapter=ze;exports.createAssetScripts=Ue;exports.createAssetsCss=Le;exports.createDataSources=Pe;exports.createLoader=H;exports.createMemoryService=qt;exports.createMetaApi=Se;exports.createMock=Ee;exports.createProvider=Ht;exports.createRenderer=D;exports.createSchemaApi=we;exports.createSchemaApis=be;exports.createServiceRequest=Ut;exports.defaultLoader=Re;exports.fillBasePath=T;exports.getModifiers=X;exports.getPlugin=Q;exports.getRawComponent=de;exports.isBuiltInTag=ge;exports.isCSSUrl=B;exports.isJSCode=ye;exports.isJSExpression=S;exports.isJSFunction=A;exports.isJSON=ce;exports.isJSUrl=U;exports.isNativeTag=ve;exports.isVuePlugin=me;exports.loadCss=pe;exports.loadCssUrl=fe;exports.loadScriptUrl=he;exports.mockApi=$e;exports.mockApis=je;exports.mockCleanup=Y;exports.nodeRender=F;exports.parseDeps=ue;exports.parseExpression=x;exports.parseFunction=I;exports.providerKey=Z;exports.removeProdFlag=le;exports.toString=K;exports.useAccess=_e;exports.useMask=Vt;exports.useProvider=ee;
|
89
|
+
}`);const t=n,s=()=>{if(typeof window<"u"){if(t.link){typeof t.link=="function"?t.link():window.location.href=t.link;return}let o=(window.__VTJ_LINK__||{}).href||window.location.pathname+"__vtj__/#/";window.location.href=o}};return(r,o)=>(d.openBlock(),d.createElementBlock("div",At,[d.createElementVNode("div",Tt,[d.createElementVNode("h1",Mt,[d.createElementVNode("span",Ft,d.toDisplayString(t.name),1)]),d.createElementVNode("div",Ot,d.toDisplayString(t.tagline),1),d.createElementVNode("div",It,[o[0]||(o[0]=d.createElementVNode("span",{"data-l-h6o7ki7":"",class:"span"},"设置项目主页后,将替换此页面显示",-1)),d.createElementVNode("span",{"data-l-h6o7ki7":"",class:"button",onClick:s},d.toDisplayString(t.actionText),1)])])]))}}),Dt=d.defineComponent({name:"VtjStartupContainer",render(){return d.h(xe)}}),Z=Symbol("Provider");var Ae=(n=>(n.Production="production",n.Development="development",n))(Ae||{});class Te extends $.Base{constructor(e){super(),this.options=e;const{service:t,mode:s=_.Raw,dependencies:r,materials:o,project:a={},adapter:i={},globals:c={},modules:u={},router:m=null,materialPath:p="./",nodeEnv:f="development"}=e;this.mode=s,this.modules=u,this.service=t,this.router=m,this.materialPath=p,this.nodeEnv=f,r&&(this.dependencies=r),o&&(this.materials=o),Object.assign(this.globals,c),Object.assign(this.adapter,i);const{access:g,request:v}=this.adapter;g&&g.connect({mode:s,router:m,request:v}),a&&s!==_.Design?this.load(a):this.project=a,P.setup({timeout:"50-500"})}mode;globals={};modules={};adapter={request:l.request,jsonp:l.jsonp};apis={};dependencies={};materials={};library={};service;project=null;components={};nodeEnv="development";router=null;materialPath="./";urlDslCaches={};createMock(e){return async(...t)=>{let s={};if(e)try{s=await e.apply(e,t)}catch(r){l.logger.warn("模拟数据模版异常",r)}return P.mock(s)}}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.mode===_.Raw?await this.loadDependencies(o):await this.loadAssets(o),this.apis=be(s,r,this.adapter),Y(),je(s),e.platform!=="uniapp"&&this.initRouter(),this.triggerReady()}async loadDependencies(e){const t=Object.entries(this.dependencies);for(const[s,r]of t)e[s]||(e[s]=this.library[s]=await r())}async loadAssets(e){const{dependencies:t=[]}=this.project,{dependencies:s,library:r,components:o,materialPath:a,nodeEnv:i}=this,{libraryExports:c,libraryMap:u,materials:m,materialExports:p,materialMapLibrary:f}=ue(t,a,i==="development");for(const g of c){const v=s[g],h=e[g];if(h)r[g]=h;else if(v)e[g]=r[g]=await v();else{const b=u[g]||[];for(const y of b)B(y)&&await pe(g,l.url.append(y,{v:k})),U(y)&&await l.loadScript(l.url.append(y,{v:k}));r[g]=e[g]}}if(i==="development"){for(const v of m)await l.loadScript(l.url.append(v,{v:k}));const g=this.materials||{};for(const v of p){const h=e[f[v]],b=$.BUILT_IN_COMPONENTS[v];if(b)h&&b.forEach(y=>{o[y]=h[y]});else{const y=g[v]?(await g[v]()).default:e[v];y&&h&&(y.components||[]).forEach(j=>{o[j.name]=de(j,h)})}}}}initRouter(){const{router:e,project:t,options:s,adapter:r}=this;if(!e)return;const{routeAppendTo:o,pageRouteName:a="page",routeMeta:i}=s,c=o?"":"/",u={path:`${c}${a}/:id`,name:R,component:se},m={path:c,name:M,component:t?.homepage?se:r.startupComponent||Dt,meta:i};e.hasRoute(R)&&e.removeRoute(R),e.hasRoute(M)&&e.removeRoute(M),o?(e.addRoute(o,u),e.addRoute(o,m)):(e.addRoute(u),e.addRoute(m))}install(e){const t=e.config.globalProperties.installed||{};for(const[s,r]of Object.entries(this.library))!t[s]&&me(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(Z,this),e.config.globalProperties.installed=t,this.mode===_.Design&&(e.config.errorHandler=(s,r,o)=>{const a=r?.$options.name,i=typeof s=="string"?s:s?.message||s?.msg||"未知错误",c=`[ ${a} ] ${i} ${o}`;console.error("[VTJ Error]:",{err:s,instance:r,info:o},s?.stack),this.adapter.notify&&this.adapter.notify(c,"组件渲染错误","error")})}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,this.project||void 0).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},c=H({getDsl:async u=>await this.getDsl(u)||null,getDslByUrl:async u=>await this.getDslByUrl(u)||null,options:i});return D({...i,dsl:e,loader:c})}async getRenderComponent(e,t){const s=this.getFile(e);if(!s)return l.logger.warn(`Can not find file: ${e}`),null;t&&t(s);const r=`.vtj/vue/${e}.vue`,o=this.modules[r];if(o)return(await o())?.default;const a=await this.getDsl(s.id);return a?this.createDslRenderer(a).renderer:(l.logger.warn(`Can not find dsl: ${e}`),null)}defineUrlSchemaComponent(e,t){return d.defineAsyncComponent(async()=>{const s=await this.getDslByUrl(e);return s?(s.name=t||s.name,this.createDslRenderer(s).renderer):null})}definePluginComponent(e){return d.defineAsyncComponent(async()=>await Q(e,window))}}function Ht(n){const e=new Te(n);return{provider:e,onReady:s=>e.ready(s)}}function ee(n={}){const e=d.inject(Z);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&&e.adapter.notify&&e.adapter.notify(`[ ${r?.name} ] 组件源码版本与运行时版本不一致,请重新发布组件`,"版本不一致","warning")})()}return e}const Me={type:"json",validSuccess:!0,originResponse:!1,failMessage:!0,validate:n=>n.data?.code===0},Nt=(n,e="/__vtj__/api/:type.json")=>(t,s,r)=>n.send({url:e,method:"post",params:{type:t},query:r,data:{type:t,data:s},settings:Me}),Bt=(n,e="/__vtj__/api/uploader.json")=>async(t,s)=>await n.send({url:e,method:"post",data:{files:t,projectId:s},settings:{...Me,type:"data"}}).then(r=>r&&r[0]?r[0]:null).catch(()=>null);function Ut(n){return l.createRequest({settings:{type:"json",validSuccess:!0,originResponse:!1,failMessage:!0,validate:e=>e.data?.code===0,showError:e=>{n&&n(e||"未知错误")}}})}class L{api;pluginCaches={};uploader;constructor(e=l.request){this.api=Nt(e),this.uploader=Bt(e)}async getExtension(){console.log("BaseService.getExtension")}async init(e){return console.log("BaseService.init",e),{}}async saveProject(e,t){return!!await this.api("saveProject",e,{type:t}).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=>ce(o))[0];if(!s)return null;const r=this.pluginCaches[s];return r||(this.pluginCaches[s]=l.request.send({url:s,method:"get",settings:{validSuccess:!1,originResponse:!0}}).then(o=>o.data).catch(()=>null))}async genSource(e){return console.log("BaseService.genSource",e),""}}const w=new l.Storage({type:"local",expired:0,prefix:"__VTJ_"});class Lt extends L{init(e){const t=new $.ProjectModel(e),s=w.get(`project_${t.id}`),r=Object.assign(t.toDsl(),s||{});return w.save(`project_${t.id}`,r),Promise.resolve(r)}saveProject(e){const t=new $.ProjectModel(e);return w.save(`project_${t.id}`,t.toDsl()),Promise.resolve(!0)}saveMaterials(e,t){return w.save(`materials_${e.id}`,l.mapToObject(t)),Promise.resolve(!0)}saveFile(e){return w.save(`file_${e.id}`,e),Promise.resolve(!0)}getFile(e){const t=w.get(`file_${e}`);return t?Promise.resolve(t):Promise.reject(null)}removeFile(e){return w.remove(`file_${e}`),Promise.resolve(!0)}saveHistory(e){return w.save(`history_${e.id}`,e),Promise.resolve(!0)}removeHistory(e){const t=w.get(`history_${e}`);if(t){const r=(t.items||[]).map(o=>o.id);this.removeHistoryItem(e,r),w.remove(`history_${e}`)}return Promise.resolve(!0)}getHistory(e){const t=w.get(`history_${e}`),s=new $.HistoryModel(t||{id:e});return Promise.resolve(s.toDsl())}getHistoryItem(e,t){const s=w.get(`history_${e}_${t}`);return Promise.resolve(s)}saveHistoryItem(e,t){return w.save(`history_${e}_${t.id}`,t),Promise.resolve(!0)}removeHistoryItem(e,t){return t.forEach(s=>{w.remove(`history_${e}_${s}`)}),Promise.resolve(!0)}}class Fe extends L{projects={};materials={};files={};histories={};historyItems={};init(e){const t=new $.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 $.ProjectModel(e);return this.projects[t.id]=t.toDsl(),Promise.resolve(!0)}saveMaterials(e,t){return e.id&&(this.materials[e.id]=l.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 $.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 O=null;function qt(){return O||(O=new Fe,O)}class Jt extends L{getFileCaches={};async getExtension(){return await this.api("getExtension",{}).catch(()=>{})}async init(e){return await this.api("init",e).catch(()=>null)||{}}async saveProject(e,t){return!!await this.api("saveProject",e,{type:t}).catch(()=>!1)}async saveMaterials(e,t){return!!await this.api("saveMaterials",{project:e,materials:l.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 Oe(n,e,t=[]){return t.map(s=>{const{id:r,title:o,icon:a,children:i,hidden:c}=s;return{id:r,title:o,icon:a,hidden:c,url:`${n}/${e}/${r}`,children:i&&i.length?Oe(n,e,i):void 0}})}function Ie(n,e){if(!e)return n;let t=[];for(const s of n)if(s.children&&s.children.length){const r=Ie(s.children,e);r.length&&(s.children=r,t.push(s))}else e.can(s.id.toString())&&t.push(s);return t}function Vt(n){const{menuPathPrefix:e="",pageRouteName:t="page",disableMenusFilter:s=!1}=n||{},r=ee(),o=ne.useRoute(),a=_e(),i=d.ref(!1),c=d.ref(!1),u=r.project;d.watchEffect(()=>{const{name:f,params:g,meta:v}=o;if(f===R){const h=r.getPage(g.id);i.value=!h?.mask,c.value=!!h?.pure}else if(f===M){const h=r.getHomepage();i.value=!h?.mask,c.value=!!h?.pure}else i.value=!v.mask,c.value=!!v.pure});const m=Oe(e,t,u?.pages),p=u?.config;return{disabled:i,logo:p?.logo,themeSwitchable:p?.themeSwitchable,title:p?.title||u?.description||u?.name||"VTJ App",menus:s?m:Ie(m,a),pure:c}}exports.ACCESS_KEY=W;exports.Access=Ve;exports.BUILD_IN_TAGS=ae;exports.BUILT_IN_DIRECTIVES=re;exports.BaseService=L;exports.CONTEXT_HOST=V;exports.Context=Ce;exports.ContextMode=_;exports.DATA_TYPES=oe;exports.HOMEPAGE_ROUTE_NAME=M;exports.HTML_TAGS=ie;exports.JSCodeToString=qe;exports.LIFE_CYCLES_LIST=Be;exports.LocalService=Jt;exports.MemoryService=Fe;exports.NodeEnv=Ae;exports.PAGE_ROUTE_NAME=R;exports.Provider=Te;exports.Startup=xe;exports.StorageService=Lt;exports.VTJ_RENDERER_VERSION=k;exports.adoptedStyleSheets=G;exports.clearLoaderCache=tt;exports.createAdapter=ze;exports.createAssetScripts=Ue;exports.createAssetsCss=Le;exports.createDataSources=Pe;exports.createLoader=H;exports.createMemoryService=qt;exports.createMetaApi=Se;exports.createMock=Ee;exports.createProvider=Ht;exports.createRenderer=D;exports.createSchemaApi=we;exports.createSchemaApis=be;exports.createServiceRequest=Ut;exports.defaultLoader=ke;exports.fillBasePath=T;exports.getModifiers=X;exports.getPlugin=Q;exports.getRawComponent=de;exports.isBuiltInTag=ge;exports.isCSSUrl=B;exports.isJSCode=ye;exports.isJSExpression=S;exports.isJSFunction=A;exports.isJSON=ce;exports.isJSUrl=U;exports.isNativeTag=ve;exports.isVuePlugin=me;exports.loadCss=pe;exports.loadCssUrl=fe;exports.loadScriptUrl=he;exports.mockApi=$e;exports.mockApis=je;exports.mockCleanup=Y;exports.nodeRender=F;exports.parseDeps=ue;exports.parseExpression=x;exports.parseFunction=I;exports.providerKey=Z;exports.removeProdFlag=le;exports.toString=K;exports.useAccess=_e;exports.useMask=Vt;exports.useProvider=ee;
|
package/dist/index.mjs
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { Base as Me, BUILT_IN_COMPONENTS as De, ProjectModel as O, HistoryModel as
|
1
|
+
import { Base as Me, BUILT_IN_COMPONENTS as De, ProjectModel as O, HistoryModel as de } from "@vtj/core";
|
2
2
|
import { isUrl as He, url as P, dedupArray as Oe, isString as j, isFunction as V, logger as x, storage as L, cookie as q, toArray as ie, unRSA as ae, delay as fe, createRequest as he, jsonp as me, merge as Be, pathToRegexp as Ne, pathToRegexpMatch as Ue, formDataToJson as Le, camelCase as $, upperFirst as qe, pick as Je, request as K, loadScript as ce, Storage as ze, mapToObject as Z } from "@vtj/utils";
|
3
3
|
import * as N from "vue";
|
4
4
|
import { inject as ge, toRef as Ve, readonly as Ke, ref as F, customRef as We, onBeforeUnmount as Ge, getCurrentScope as Ye, onScopeDispose as Qe, getCurrentInstance as ve, watch as ye, toValue as ee, computed as _e, onMounted as Xe, defineComponent as te, h as W, createElementBlock as Ze, openBlock as et, createElementVNode as E, toDisplayString as J, defineAsyncComponent as le, watchEffect as tt } from "vue";
|
@@ -8,10 +8,10 @@ import { useRoute as we } from "vue-router";
|
|
8
8
|
* Copyright (c) 2025, VTJ.PRO All rights reserved.
|
9
9
|
* @name @vtj/renderer
|
10
10
|
* @author CHC chenhuachun1549@dingtalk.com
|
11
|
-
* @version 0.10.
|
11
|
+
* @version 0.10.1-alpha.1
|
12
12
|
* @license <a href="https://vtj.pro/license.html">MIT License</a>
|
13
13
|
*/
|
14
|
-
const C = "0.10.
|
14
|
+
const C = "0.10.1-alpha.1";
|
15
15
|
var y = /* @__PURE__ */ ((n) => (n.Runtime = "Runtime", n.Design = "Design", n.Raw = "Raw", n.VNode = "VNode", n))(y || {});
|
16
16
|
const ue = [
|
17
17
|
"$el",
|
@@ -83,12 +83,12 @@ function at(n, e = !1) {
|
|
83
83
|
return e && n.endsWith(".prod.js") ? n.replace(".prod.js", ".js") : n;
|
84
84
|
}
|
85
85
|
function ct(n, e, t = !1) {
|
86
|
-
const s = n.filter((
|
86
|
+
const s = n.filter((p) => !!p.enabled), r = [], o = [], a = [], i = [], c = {}, l = {}, f = [], u = {};
|
87
87
|
return s.forEach(
|
88
|
-
({ urls:
|
89
|
-
|
88
|
+
({ urls: p, assetsUrl: h, library: m, assetsLibrary: d, localeLibrary: w }) => {
|
89
|
+
p?.forEach((g) => {
|
90
90
|
ne(g) && r.push(at(g, t)), se(g) && o.push(g);
|
91
|
-
}), m && (i.push(m), c[m] = M(
|
91
|
+
}), m && (i.push(m), c[m] = M(p || [], e), w && (l[m] = w)), h && a.push(h), d && f.push(d), m && d && (u[d] = m);
|
92
92
|
}
|
93
93
|
), {
|
94
94
|
scripts: M(r, e),
|
@@ -127,7 +127,7 @@ async function ut(n, e) {
|
|
127
127
|
const t = await window.fetch(e).then((s) => s.text()).catch(() => "");
|
128
128
|
t && be(window, n, t);
|
129
129
|
}
|
130
|
-
function
|
130
|
+
function pt(n, e = window) {
|
131
131
|
const t = e.document, s = e.document.head;
|
132
132
|
for (const r of n)
|
133
133
|
if (!t.getElementById(r)) {
|
@@ -135,7 +135,7 @@ function dt(n, e = window) {
|
|
135
135
|
a.rel = "stylesheet", a.id = r, a.href = r, s.appendChild(a);
|
136
136
|
}
|
137
137
|
}
|
138
|
-
async function
|
138
|
+
async function dt(n, e, t = window) {
|
139
139
|
const s = t.document, r = t.document.head;
|
140
140
|
let o = t[e];
|
141
141
|
return o ? o.default || o : new Promise((a, i) => {
|
@@ -576,14 +576,14 @@ function Y(n) {
|
|
576
576
|
i.value.id,
|
577
577
|
i.value.css || ""
|
578
578
|
), l.state = Pt(e, i.value.state ?? {}, l);
|
579
|
-
const
|
579
|
+
const p = xt(e, i.value.computed ?? {}, l), h = Ct(i.value.methods ?? {}, l), m = At(e, i.value.inject, l), d = Ft(
|
580
580
|
i.value.dataSources || {},
|
581
581
|
l
|
582
582
|
), w = {
|
583
583
|
...m,
|
584
|
-
...
|
584
|
+
...p,
|
585
585
|
...h,
|
586
|
-
...
|
586
|
+
...d
|
587
587
|
};
|
588
588
|
return l.setup(w, e), Tt(e, i.value.watch ?? [], l), {
|
589
589
|
vtj: l
|
@@ -594,7 +594,7 @@ function Y(n) {
|
|
594
594
|
render() {
|
595
595
|
if (!i.value.nodes) return null;
|
596
596
|
const u = i.value.nodes || [];
|
597
|
-
return u.length === 1 ? B(u[0], l, e, a) : u.map((
|
597
|
+
return u.length === 1 ? B(u[0], l, e, a) : u.map((p) => B(p, l, e, a));
|
598
598
|
},
|
599
599
|
...It(i.value.lifeCycles ?? {}, l)
|
600
600
|
});
|
@@ -700,7 +700,7 @@ async function Ee(n, e = window) {
|
|
700
700
|
const { urls: t = [], library: s } = n, r = t.filter((i) => ne(i));
|
701
701
|
if (r.length === 0 || !s) return null;
|
702
702
|
const o = t.filter((i) => se(i));
|
703
|
-
return o.length &&
|
703
|
+
return o.length && pt(o, e), await dt(r, s, e).catch(
|
704
704
|
(i) => (console.warn("loadScriptUrl error", r, s, i), null)
|
705
705
|
);
|
706
706
|
}
|
@@ -753,34 +753,34 @@ function Ms() {
|
|
753
753
|
}
|
754
754
|
function B(n, e, t = N, s = Mt) {
|
755
755
|
if (!n || !n.name || n.invisible) return null;
|
756
|
-
const r = t.getCurrentInstance()?.appContext, { id: o = null, directives: a = [] } = n, { vIf: i, vFor: c, vShow: l, vModels: f, vBind: u, vHtml:
|
756
|
+
const r = t.getCurrentInstance()?.appContext, { id: o = null, directives: a = [] } = n, { vIf: i, vFor: c, vShow: l, vModels: f, vBind: u, vHtml: p, others: h } = Ht(a);
|
757
757
|
if (i && !Ot(i, e))
|
758
758
|
return null;
|
759
|
-
const m = (
|
760
|
-
const w =
|
759
|
+
const m = (d) => {
|
760
|
+
const w = d.$components, g = (() => {
|
761
761
|
if (n.name === "component")
|
762
|
-
return Bt(
|
762
|
+
return Bt(d, n.props?.is);
|
763
763
|
if (n.name === "slot") return n.name;
|
764
764
|
const b = s(n.name, n.from, t);
|
765
765
|
return j(b) ? ht(b) || mt(b) ? b : w[b] ?? r?.app?.component(b) ?? b : b;
|
766
|
-
})(), S = Nt(o, n.props ?? {},
|
766
|
+
})(), S = Nt(o, n.props ?? {}, d), Te = Ut(t, n.events ?? {}, d);
|
767
767
|
if (n.name === "slot")
|
768
|
-
return Lt(t, n, S,
|
769
|
-
u && Object.assign(S,
|
768
|
+
return Lt(t, n, S, d, s);
|
769
|
+
u && Object.assign(S, d.__parseExpression(u.value)), l && (S.style = Object.assign(
|
770
770
|
S.style ?? {},
|
771
|
-
Jt(l,
|
772
|
-
)),
|
773
|
-
Object.assign(S, Vt(t, b,
|
771
|
+
Jt(l, d)
|
772
|
+
)), p && Object.assign(S, zt(p, d)), f.forEach((b) => {
|
773
|
+
Object.assign(S, Vt(t, b, d));
|
774
774
|
});
|
775
775
|
const Ie = Kt(
|
776
776
|
t,
|
777
777
|
n.children ?? [],
|
778
|
-
|
778
|
+
d,
|
779
779
|
s,
|
780
780
|
n
|
781
781
|
);
|
782
782
|
let U = t.createVNode(g, { ...S, ...Te }, Ie);
|
783
|
-
const oe = r ? Dt(r, h,
|
783
|
+
const oe = r ? Dt(r, h, d) : [];
|
784
784
|
return oe.length && (U = t.withDirectives(U, oe)), U;
|
785
785
|
};
|
786
786
|
return c ? Yt(c, m, e) : m(e);
|
@@ -837,7 +837,7 @@ function Ut(n, e, t) {
|
|
837
837
|
};
|
838
838
|
return Object.keys(e || {}).reduce(
|
839
839
|
(o, a) => {
|
840
|
-
const i = e[a], c = ke(i.modifiers), l = c.find((
|
840
|
+
const i = e[a], c = ke(i.modifiers), l = c.find((p) => s.includes(p)), f = "on" + qe(a) + (l && r[l] || ""), u = t.__parseFunction(i.handler);
|
841
841
|
return u && (o[f] = n.withModifiers(u, c)), o;
|
842
842
|
},
|
843
843
|
{}
|
@@ -899,9 +899,9 @@ function Kt(n, e, t, s, r) {
|
|
899
899
|
[`scope_${r.id}`]: i
|
900
900
|
} : {};
|
901
901
|
return Object.entries(o).reduce((i, [c, { nodes: l, params: f }]) => (i[c] = (u) => {
|
902
|
-
const
|
902
|
+
const p = f.length ? Je(u ?? {}, f) : a(u);
|
903
903
|
return l.map(
|
904
|
-
(h) => B(h, t.__clone(
|
904
|
+
(h) => B(h, t.__clone(p), n, s)
|
905
905
|
);
|
906
906
|
}, i), {});
|
907
907
|
}
|
@@ -975,12 +975,12 @@ function ls(n, e, t = {}) {
|
|
975
975
|
const a = cs(() => s && "MutationObserver" in s), i = () => {
|
976
976
|
o && (o.disconnect(), o = void 0);
|
977
977
|
}, c = _e(() => {
|
978
|
-
const
|
978
|
+
const p = ee(n), h = ts(p).map(is).filter(Xt);
|
979
979
|
return new Set(h);
|
980
980
|
}), l = ye(
|
981
981
|
() => c.value,
|
982
|
-
(
|
983
|
-
i(), a.value &&
|
982
|
+
(p) => {
|
983
|
+
i(), a.value && p.size && (o = new MutationObserver(e), p.forEach((h) => o.observe(h, r)));
|
984
984
|
},
|
985
985
|
{ immediate: !0, flush: "post" }
|
986
986
|
), f = () => o?.takeRecords(), u = () => {
|
@@ -1001,13 +1001,13 @@ function us(n = null, e = {}) {
|
|
1001
1001
|
function f(u) {
|
1002
1002
|
if (!("titleTemplate" in e))
|
1003
1003
|
return u;
|
1004
|
-
const
|
1005
|
-
return typeof
|
1004
|
+
const p = e.titleTemplate || "%s";
|
1005
|
+
return typeof p == "function" ? p(u) : ee(p).replace(/%s/g, u);
|
1006
1006
|
}
|
1007
1007
|
return ye(
|
1008
1008
|
c,
|
1009
|
-
(u,
|
1010
|
-
u !==
|
1009
|
+
(u, p) => {
|
1010
|
+
u !== p && o && (o.title = f(u ?? ""));
|
1011
1011
|
},
|
1012
1012
|
{ immediate: !0 }
|
1013
1013
|
), e.observe && !e.titleTemplate && o && !l && ls(
|
@@ -1023,7 +1023,7 @@ function us(n = null, e = {}) {
|
|
1023
1023
|
}
|
1024
1024
|
}), c;
|
1025
1025
|
}
|
1026
|
-
const
|
1026
|
+
const pe = te({
|
1027
1027
|
name: "VtjPageContainer",
|
1028
1028
|
async setup() {
|
1029
1029
|
const n = xe(), e = we(), t = e.params.id, s = t ? n.getPage(t) : n.getHomepage(), r = s ? await n.getRenderComponent(s.id) : null, o = F(Symbol());
|
@@ -1044,10 +1044,10 @@ const de = te({
|
|
1044
1044
|
activated() {
|
1045
1045
|
this.meta.cache === !1 && (this.sid = Symbol());
|
1046
1046
|
}
|
1047
|
-
}),
|
1047
|
+
}), ps = {
|
1048
1048
|
"data-l-h6o7ki7": "",
|
1049
1049
|
class: "vtj-startup__wrapper"
|
1050
|
-
},
|
1050
|
+
}, ds = {
|
1051
1051
|
"data-l-h6o7ki7": "",
|
1052
1052
|
class: "vtj-startup"
|
1053
1053
|
}, fs = {
|
@@ -1097,7 +1097,7 @@ const de = te({
|
|
1097
1097
|
font-weight: 700;
|
1098
1098
|
white-space: pre-wrap;
|
1099
1099
|
}
|
1100
|
-
.vtj-startup__name span[data-l-h6o7ki7]{
|
1100
|
+
.vtj-startup__name .span[data-l-h6o7ki7]{
|
1101
1101
|
background: -webkit-linear-gradient(120deg, #bd34fe 30%, #41d1ff);
|
1102
1102
|
-webkit-background-clip: text;
|
1103
1103
|
background-clip: text;
|
@@ -1120,17 +1120,18 @@ const de = te({
|
|
1120
1120
|
padding: 20px 0 0 0;
|
1121
1121
|
margin-top: 20px;
|
1122
1122
|
}
|
1123
|
-
.vtj-startup__actions span[data-l-h6o7ki7]{
|
1123
|
+
.vtj-startup__actions .span[data-l-h6o7ki7]{
|
1124
1124
|
color: #e6a23c;
|
1125
1125
|
}@media (max-width: 768px){
|
1126
1126
|
|
1127
|
-
.vtj-startup__actions span[data-l-h6o7ki7]{
|
1127
|
+
.vtj-startup__actions .span[data-l-h6o7ki7]{
|
1128
1128
|
display: block;
|
1129
1129
|
text-align: center;
|
1130
1130
|
width: 100%;
|
1131
1131
|
}
|
1132
1132
|
}
|
1133
|
-
.vtj-startup__actions button[data-l-h6o7ki7]{
|
1133
|
+
.vtj-startup__actions .button[data-l-h6o7ki7]{
|
1134
|
+
height: 40px;
|
1134
1135
|
padding: 0 20px;
|
1135
1136
|
border-radius: 20px;
|
1136
1137
|
background-color: #409eff;
|
@@ -1138,14 +1139,16 @@ const de = te({
|
|
1138
1139
|
color: #fff;
|
1139
1140
|
font-weight: 600;
|
1140
1141
|
cursor: pointer;
|
1142
|
+
display: inline-block;
|
1143
|
+
line-height: 40px;
|
1141
1144
|
}@media (max-width: 768px){
|
1142
1145
|
|
1143
|
-
.vtj-startup__actions button[data-l-h6o7ki7]{
|
1146
|
+
.vtj-startup__actions .button[data-l-h6o7ki7]{
|
1144
1147
|
width: 100%;
|
1145
1148
|
margin-top: 20px;
|
1146
1149
|
}
|
1147
1150
|
}
|
1148
|
-
.vtj-startup__actions button[data-l-h6o7ki7]:hover{
|
1151
|
+
.vtj-startup__actions .button[data-l-h6o7ki7]:hover{
|
1149
1152
|
opacity: 0.7;
|
1150
1153
|
}`);
|
1151
1154
|
const t = n, s = () => {
|
@@ -1158,16 +1161,20 @@ const de = te({
|
|
1158
1161
|
window.location.href = o;
|
1159
1162
|
}
|
1160
1163
|
};
|
1161
|
-
return (r, o) => (et(), Ze("div",
|
1162
|
-
E("div",
|
1164
|
+
return (r, o) => (et(), Ze("div", ps, [
|
1165
|
+
E("div", ds, [
|
1163
1166
|
E("h1", fs, [
|
1164
1167
|
E("span", hs, J(t.name), 1)
|
1165
1168
|
]),
|
1166
1169
|
E("div", ms, J(t.tagline), 1),
|
1167
1170
|
E("div", gs, [
|
1168
|
-
o[0] || (o[0] = E("span", {
|
1169
|
-
E("button", {
|
1171
|
+
o[0] || (o[0] = E("span", {
|
1170
1172
|
"data-l-h6o7ki7": "",
|
1173
|
+
class: "span"
|
1174
|
+
}, "设置项目主页后,将替换此页面显示", -1)),
|
1175
|
+
E("span", {
|
1176
|
+
"data-l-h6o7ki7": "",
|
1177
|
+
class: "button",
|
1171
1178
|
onClick: s
|
1172
1179
|
}, J(t.actionText), 1)
|
1173
1180
|
])
|
@@ -1195,10 +1202,10 @@ class ws extends Me {
|
|
1195
1202
|
modules: l = {},
|
1196
1203
|
router: f = null,
|
1197
1204
|
materialPath: u = "./",
|
1198
|
-
nodeEnv:
|
1205
|
+
nodeEnv: p = "development"
|
1199
1206
|
/* Development */
|
1200
1207
|
} = e;
|
1201
|
-
this.mode = s, this.modules = l, this.service = t, this.router = f, this.materialPath = u, this.nodeEnv =
|
1208
|
+
this.mode = s, this.modules = l, this.service = t, this.router = f, this.materialPath = u, this.nodeEnv = p, r && (this.dependencies = r), o && (this.materials = o), Object.assign(this.globals, c), Object.assign(this.adapter, i);
|
1202
1209
|
const { access: h, request: m } = this.adapter;
|
1203
1210
|
h && h.connect({ mode: s, router: f, request: m }), a && s !== y.Design ? this.load(a) : this.project = a, R.setup({
|
1204
1211
|
timeout: "50-500"
|
@@ -1249,7 +1256,7 @@ class ws extends Me {
|
|
1249
1256
|
libraryMap: l,
|
1250
1257
|
materials: f,
|
1251
1258
|
materialExports: u,
|
1252
|
-
materialMapLibrary:
|
1259
|
+
materialMapLibrary: p
|
1253
1260
|
} = ct(
|
1254
1261
|
t,
|
1255
1262
|
a,
|
@@ -1257,9 +1264,9 @@ class ws extends Me {
|
|
1257
1264
|
/* Development */
|
1258
1265
|
);
|
1259
1266
|
for (const h of c) {
|
1260
|
-
const m = s[h],
|
1261
|
-
if (
|
1262
|
-
r[h] =
|
1267
|
+
const m = s[h], d = e[h];
|
1268
|
+
if (d)
|
1269
|
+
r[h] = d;
|
1263
1270
|
else if (m)
|
1264
1271
|
e[h] = r[h] = await m();
|
1265
1272
|
else {
|
@@ -1274,15 +1281,15 @@ class ws extends Me {
|
|
1274
1281
|
await ce(P.append(m, { v: C }));
|
1275
1282
|
const h = this.materials || {};
|
1276
1283
|
for (const m of u) {
|
1277
|
-
const
|
1284
|
+
const d = e[p[m]], w = De[m];
|
1278
1285
|
if (w)
|
1279
|
-
|
1280
|
-
o[g] =
|
1286
|
+
d && w.forEach((g) => {
|
1287
|
+
o[g] = d[g];
|
1281
1288
|
});
|
1282
1289
|
else {
|
1283
1290
|
const g = h[m] ? (await h[m]()).default : e[m];
|
1284
|
-
g &&
|
1285
|
-
o[S.name] = lt(S,
|
1291
|
+
g && d && (g.components || []).forEach((S) => {
|
1292
|
+
o[S.name] = lt(S, d);
|
1286
1293
|
});
|
1287
1294
|
}
|
1288
1295
|
}
|
@@ -1294,11 +1301,11 @@ class ws extends Me {
|
|
1294
1301
|
const { routeAppendTo: o, pageRouteName: a = "page", routeMeta: i } = s, c = o ? "" : "/", l = {
|
1295
1302
|
path: `${c}${a}/:id`,
|
1296
1303
|
name: A,
|
1297
|
-
component:
|
1304
|
+
component: pe
|
1298
1305
|
}, f = {
|
1299
1306
|
path: c,
|
1300
1307
|
name: H,
|
1301
|
-
component: t?.homepage ?
|
1308
|
+
component: t?.homepage ? pe : r.startupComponent || ys,
|
1302
1309
|
meta: i
|
1303
1310
|
};
|
1304
1311
|
e.hasRoute(A) && e.removeRoute(A), e.hasRoute(H) && e.removeRoute(H), o ? (e.addRoute(o, l), e.addRoute(o, f)) : (e.addRoute(l), e.addRoute(f));
|
@@ -1599,7 +1606,7 @@ class Os extends re {
|
|
1599
1606
|
return Promise.resolve(!0);
|
1600
1607
|
}
|
1601
1608
|
getHistory(e) {
|
1602
|
-
const t = v.get(`history_${e}`), s = new
|
1609
|
+
const t = v.get(`history_${e}`), s = new de(t || { id: e });
|
1603
1610
|
return Promise.resolve(s.toDsl());
|
1604
1611
|
}
|
1605
1612
|
getHistoryItem(e, t) {
|
@@ -1654,7 +1661,7 @@ class js extends re {
|
|
1654
1661
|
return Promise.resolve(!0);
|
1655
1662
|
}
|
1656
1663
|
getHistory(e) {
|
1657
|
-
const t = this.histories[e], s = new
|
1664
|
+
const t = this.histories[e], s = new de(t || { id: e });
|
1658
1665
|
return Promise.resolve(s);
|
1659
1666
|
}
|
1660
1667
|
getHistoryItem(e, t) {
|
@@ -1764,13 +1771,13 @@ function Us(n) {
|
|
1764
1771
|
disableMenusFilter: s = !1
|
1765
1772
|
} = n || {}, r = xe(), o = we(), a = yt(), i = F(!1), c = F(!1), l = r.project;
|
1766
1773
|
tt(() => {
|
1767
|
-
const { name:
|
1768
|
-
if (
|
1769
|
-
const
|
1770
|
-
i.value = !
|
1771
|
-
} else if (
|
1772
|
-
const
|
1773
|
-
i.value = !
|
1774
|
+
const { name: p, params: h, meta: m } = o;
|
1775
|
+
if (p === A) {
|
1776
|
+
const d = r.getPage(h.id);
|
1777
|
+
i.value = !d?.mask, c.value = !!d?.pure;
|
1778
|
+
} else if (p === H) {
|
1779
|
+
const d = r.getHomepage();
|
1780
|
+
i.value = !d?.mask, c.value = !!d?.pure;
|
1774
1781
|
} else
|
1775
1782
|
i.value = !m.mask, c.value = !!m.pure;
|
1776
1783
|
});
|
@@ -1840,8 +1847,8 @@ export {
|
|
1840
1847
|
mt as isNativeTag,
|
1841
1848
|
ft as isVuePlugin,
|
1842
1849
|
ut as loadCss,
|
1843
|
-
|
1844
|
-
|
1850
|
+
pt as loadCssUrl,
|
1851
|
+
dt as loadScriptUrl,
|
1845
1852
|
$t as mockApi,
|
1846
1853
|
bt as mockApis,
|
1847
1854
|
$e as mockCleanup,
|
package/package.json
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
{
|
2
2
|
"name": "@vtj/renderer",
|
3
3
|
"private": false,
|
4
|
-
"version": "0.10.
|
4
|
+
"version": "0.10.1-alpha.1",
|
5
5
|
"type": "module",
|
6
6
|
"dependencies": {
|
7
7
|
"mockjs": "~1.1.0",
|
8
|
-
"@vtj/
|
9
|
-
"@vtj/
|
8
|
+
"@vtj/utils": "~0.10.1-alpha.1",
|
9
|
+
"@vtj/core": "~0.10.1-alpha.1"
|
10
10
|
},
|
11
11
|
"devDependencies": {
|
12
12
|
"vue": "~3.5.5",
|
13
13
|
"vue-router": "~4.5.0",
|
14
|
+
"@vtj/icons": "~0.10.1-alpha.1",
|
14
15
|
"@vtj/cli": "~0.10.0",
|
15
|
-
"@vtj/ui": "~0.10.
|
16
|
-
"@vtj/icons": "~0.10.0"
|
16
|
+
"@vtj/ui": "~0.10.1-alpha.1"
|
17
17
|
},
|
18
18
|
"exports": {
|
19
19
|
".": {
|
package/types/version.d.ts
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
* Copyright (c) 2025, VTJ.PRO All rights reserved.
|
3
3
|
* @name @vtj/renderer
|
4
4
|
* @author CHC chenhuachun1549@dingtalk.com
|
5
|
-
* @version 0.
|
5
|
+
* @version 0.10.1-alpha.0
|
6
6
|
* @license <a href="https://vtj.pro/license.html">MIT License</a>
|
7
7
|
*/
|
8
|
-
export declare const version = "0.
|
8
|
+
export declare const version = "0.10.1-alpha.0";
|