@vtj/renderer 0.10.13 → 0.10.15
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/README.md +65 -0
- package/dist/index.cjs +5 -5
- package/dist/index.mjs +55 -47
- package/package.json +23 -6
- package/types/plugins/access.d.ts +3 -0
- package/types/version.d.ts +2 -2
- package/types/components/Startup.d.ts +0 -13
- package/types/components/index.d.ts +0 -2
package/README.md
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
<div align="center">
|
2
|
+
|
3
|
+
[](https://gitee.com/newgateway/vtj)
|
4
|
+
[](https://www.npmjs.com/package/@vtj/pro)
|
5
|
+
[](https://npm-stat.com/charts.html?package=@vtj/pro)
|
6
|
+
[](LICENSE)
|
7
|
+
|
8
|
+
</div>
|
9
|
+
|
10
|
+
# VTJ.PRO
|
11
|
+
|
12
|
+
VTJ 是一款基于 Vue3 + Typescript 的低代码页面可视化设计器。内置低代码引擎、渲染器和代码生成器,面向前端开发者,开箱即用。 无缝嵌入本地开发工程,不改变前端开发流程和编码习惯。
|
13
|
+
|
14
|
+
- **官方文档**:[https://vtj.pro](https://vtj.pro)
|
15
|
+
- **在线应用开发平台**:[https://lcdp.vtj.pro](https://lcdp.vtj.pro)
|
16
|
+
|
17
|
+
## 特性
|
18
|
+
|
19
|
+
- 🔥 **流行的技术栈**: Vue3、Typescript、Vite、EelementPlus、VueUse、Axios、ECharts、Lodash、Monaco Editor、Prettier 等。
|
20
|
+
|
21
|
+
- 🛠️ **自由个性化**: 低代码设计器支持源码级别的自定义,可轻松适配个性化需求,理论上写代码开发能实现的在设计器上都能完成。
|
22
|
+
|
23
|
+
- 🚩 **低学习成本**: 专为前端开发者设计,无需改变您熟悉的前端开发流程和编码习惯。只需了解Vue,即可轻松上手,实现无缝对接,真正做到零学习成本。
|
24
|
+
|
25
|
+
- 🚀️ **高扩展性**: 配备了先进的内置低代码引擎,通过配置化构建方式,赋予您对所有部件的完全自定义能力。您可以单独运用此引擎,自主打造专属的低代码平台。
|
26
|
+
|
27
|
+
- 📦 **无污染,可二开**: 设计器无缝嵌入本地项目开发环境,既安全又便捷,轻松接入。同时,采用创新的设计器和渲染器分离模式,确保项目代码保持纯净,不受任何污染,并且产物支持二次开发。
|
28
|
+
|
29
|
+
- ✨ **物料丰富**: 此外,还内置了多款常用、功能强大的组件库以及丰富的页面模板,不仅支持高度定制,还提供了可复用的区块组件,助您高效构建出色的应用。
|
30
|
+
|
31
|
+
## 体验
|
32
|
+
|
33
|
+
### 在线体验
|
34
|
+
|
35
|
+
- [https://lcdp.vtj.pro](https://lcdp.vtj.pro)
|
36
|
+
|
37
|
+
访问Vtj专属低代码开发平台,创建应用可以体验设计器和出码功能
|
38
|
+
|
39
|
+
### 离线本地体验(推荐:功能全, 性能最佳)
|
40
|
+
|
41
|
+
使用VTJ提供的项目脚手架,可快速创建开发项目工程。 命令:
|
42
|
+
|
43
|
+
1. Web应用(PC端)
|
44
|
+
|
45
|
+
```sh
|
46
|
+
npm create vtj@latest --registry=https://registry.npmmirror.com -- -t app
|
47
|
+
```
|
48
|
+
|
49
|
+
1. H5应用(移动端)
|
50
|
+
|
51
|
+
```sh
|
52
|
+
npm create vtj@latest --registry=https://registry.npmmirror.com -- -t h5
|
53
|
+
```
|
54
|
+
|
55
|
+
1. uni-app(跨端应用)
|
56
|
+
|
57
|
+
```sh
|
58
|
+
npm create vtj@latest --registry=https://registry.npmmirror.com -- -t uniapp
|
59
|
+
```
|
60
|
+
|
61
|
+
1. 物料开发项目
|
62
|
+
|
63
|
+
```sh
|
64
|
+
npm create vtj@latest --registry=https://registry.npmmirror.com -- -t material
|
65
|
+
```
|
package/dist/index.cjs
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const R=require("@vtj/core"),l=require("@vtj/utils"),S=require("vue"),re=require("vue-router");function Be(r){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(r){for(const t in r)if(t!=="default"){const s=Object.getOwnPropertyDescriptor(r,t);Object.defineProperty(e,t,s.get?s:{enumerable:!0,get:()=>r[t]})}}return e.default=r,Object.freeze(e)}const B=Be(S);/**!
|
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.15
|
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(n){if(l.logger.error("parseExpression.error",n,r,e?.__self??e),s)throw n}}function D(r,e,t=!1,s=!1){const n=M(r,e,t,s);if(typeof n!="function"&&(l.logger.error("parseFunction.error","not a function",r,e?.__self??e),s))throw new Error(`"${r.value}" not a function`);return n}function w(r){return r&&r.type==="JSExpression"}function T(r){return typeof r=="object"&&r&&r.type==="JSFunction"}function ye(r){return w(r)||T(r)}function qe(r){return ye(r)?r.value:JSON.stringify(r)}const ze={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 _e{options;data=null;mode=y.Raw;constructor(e){this.options=Object.assign({},ze,e),this.loadData()}connect(e){const{mode:t,router:s,request:n}=e;this.mode=t,s&&this.mode===y.Raw&&this.setGuard(s),n&&this.setRequest(n)}login(e){const{storageKey:t,storagePrefix:s,session:n,authKey:o}=this.options;this.setData(e),this.data&&(l.storage.save(t,e,{type:"local",prefix:s}),n&&l.cookie.set(o,this.data.token))}clear(){const{storageKey:e,storagePrefix:t,session:s,authKey:n}=this.options;this.data=null,l.storage.remove(e,{type:"local",prefix:t}),s&&l.cookie.remove(n)}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 n=t.split("#")[1]||t;return e.path===n}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(n=>l.unRSA(n,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===C){const t=e.params.id;return t&&this.can(t)}return!0}setGuard(e){e.beforeEach((t,s,n)=>this.guard(t,n))}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:n=!1}=this.options;return await this.showTip(s),l.isFunction(n)?(n(),t(!1)):l.isString(n)?t(n):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 Se(){return S.inject(W,null)}function Ke(r={}){const{notify:e,loading:t,settings:s={},Startup:n,access:o,remote:a="https://lcdp.vtj.pro"}=r;let i=null;return{request:l.createRequest({settings:{type:"form",validSuccess:!0,originResponse:!1,loading:!0,validate:u=>u.data?.code===0||!!u.data?.success,failMessage:!0,showError:u=>{e&&e(u||"未知错误")},showLoading:()=>{i&&i.close(),t&&(i=t())},hideLoading:()=>{i&&(i.close(),i=null)},...s}}),jsonp:l.jsonp,notify:e,loading:t,startupComponent:n,remote:a,access:o?we(o):void 0}}function we(r={}){const e={storageKey:"RRO_IDE_ACCESS_STORAGE__",auth:"https://lcdp.vtj.pro/auth.html",privateKey:"MIIBOgIBAAJBAKoIzmn1FYQ1YOhOBw9EhABxZ+PySAIaydI+zdhoKflrdgJ4A5E4/5gbQmRpk09hPWG8nvX7h+l/QLU8kXxAIBECAwEAAQJAAlgpxQY6sByLsXqzJcthC8LSGsLf2JEJkHwlnpwFqlEV8UCkoINpuZ2Wzl+aftURu5rIfAzRCQBvHmeOTW9/zQIhAO5ufWDmnSLyfAAsNo5JRNpVuLFCFodR8Xm+ulDlosR/AiEAtpAltyP9wmCABKG/v/hrtTr3mcvFNGCjoGa9bUAok28CIHbrVs9w1ijrBlvTsXYwJw46uP539uKRRT4ymZzlm9QjAiB+1KH/G9f9pEEL9rtaSOG7JF5D0JcOjlze4MGVFs+ZrQIhALKOUFBNr2zEsyJIjw2PlvEucdlG77UniszjXTROHSPd"};return new _e(Object.assign(e,r))}function Ee(r,e){const{jsonp:t,request:s}=e;if(r.method==="jsonp")return(n={})=>t(r.url,{...r.jsonpOptions,query:n});{const n=r.headers?M(r.headers,{},!0):void 0,o={url:r.url,method:r.method,settings:{...r.settings,headers:n}};return(a,i)=>(delete o.data,s.send(l.merge(o,i||{},{data:a})))}}function je(r,e){const{metaQuery:t}=e;if(!t)return;const{code:s,queryCode:n}=r;return(o,a)=>{if(!t){console.warn("adapter.metaQuery is not defined!");return}return t(s,n,o,a)}}function Pe(r=[],e=[],t){const s={};for(const n of r)s[n.id]=Ee(n,t);for(const n of e)s[n.id]=je(n,t);return s}async function Ae(r=[],e=window){const t=$(e);t&&(Q(e),r.forEach(s=>Re(t,s)))}function be(r,e=window){const t=T(r.mockTemplate)&&r.mockTemplate.value?D(r.mockTemplate,{},!0):void 0,s=$(e);return async(...n)=>{let o={};if(t)try{o=await t.apply(t,n)}catch(a){l.logger.warn("模拟数据模版异常",a)}return s?.mock(o)}}function Re(r,e){if(!e.mock)return;const{url:t,mockTemplate:s}=e;if(t&&s){const n=l.pathToRegexp(`${t}(.*)`),o=l.pathToRegexpMatch(t,{decode:decodeURIComponent}),a=M(s,{},!0);r.mock(n,i=>{const c=l.url.parse(i.url)||{},u=i.body instanceof FormData?l.formDataToJson(i.body):i.body,h=o(i.url)?.params;return Object.assign(i,{data:u,params:c,query:h}),r.mock(a(i))})}}function Q(r=window){const e=$(r);e&&(e._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:n}=e;this.__mode=t,s&&(this.__id=s.id||null,this.__transform=s.transform||{}),n&&Object.assign(this,n)}setup(e,t=B){const s=t.getCurrentInstance();if(!s)return;this.__refs={},this.$refs={},this.context={},this.__contextRefs={},this.__instance=s.proxy;const n=s.appContext.config.globalProperties;Object.assign(this,n),Object.assign(this,e||{}),this.__proxy(),t.onMounted(()=>{this.__proxy()}),t.onUnmounted(()=>{this.__cleanup()}),t.onBeforeUpdate(()=>{this.__reset()})}__proxy(){this.__instance&&z.forEach(e=>{this[e]=this.__instance?.[e]})}__cleanup(){z.forEach(e=>{this[e]=null}),this.__reset()}__reset(){this.__refs={},this.$refs={},this.__contextRefs={},this.context={}}__parseFunction(e){if(e)if(this.__mode===y.Runtime){const{id:t,type:s}=e,n=t?this.__transform[t]??e.value:e.value;return D({type:s,value:n},this)}else return D(e,this)}__parseExpression(e){if(e)if(this.__mode===y.Runtime){const{id:t,type:s}=e,n=t?this.__transform[t]??e.value:e.value;return M({type:s,value:n},this)}else return M(e,this)}__ref(e=null,t){if(this.__mode!==y.VNode)return e&&e!==this.__id&&(this.__contextRefs[e]=this),async s=>{await l.delay(0);let n=s?.$vtjEl||s?.$el||s?._?.vnode?.el||s;if(!n){typeof t=="string"&&(delete this.$refs[t],e&&delete this.__refs[e]);return}return n.nodeType===3&&n.nextSibling&&(n=n.nextSibling),n.__vtj__=e,y.Design===this.__mode&&(n.__context__=this,n.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 n=e[t];if(n&&s!==n){const o=new Set([].concat(n,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 H(r){const{Vue:e=B,mode:t=y.Runtime,components:s={},libs:n={},apis:o={},loader:a}=r,i=e.computed(()=>r.dsl),c={$components:s,$libs:n,$apis:o},u=new Ce({mode:t,dsl:i.value,attrs:c}),h=e.defineComponent({name:i.value.name,props:{...Ve(i.value.props??[],u)},setup(d){u.$props=d,u.props=d,i.value.id&&V(r.window||window,i.value.id,i.value.css||""),u.state=We(e,i.value.state??{},u);const g=Qe(e,i.value.computed??{},u),m=Ye(i.value.methods??{},u),f=Xe(e,i.value.inject,u),p=$e(i.value.dataSources||{},u),E={...f,...g,...m,...p};return u.setup(E,e),Ze(e,i.value.watch??[],u),{vtj:u}},emits:Ge(i.value.emits),expose:["vtj"],render(){if(!i.value.nodes)return null;const d=i.value.nodes||[];return d.length===1?I(d[0],u,e,a):d.map(g=>I(g,u,e,a))},...et(i.value.lifeCycles??{},u)});return{renderer:e.markRaw(h),context:u}}function Ge(r=[]){return r.map(e=>l.isString(e)?e:e.name)}function Ve(r=[],e){const t=s=>s?(Array.isArray(s)?s:[s]).map(o=>oe[o]):void 0;return r.map(s=>l.isString(s)?{name:s}:{name:s.name,type:s.type,required:s.required,default:w(s.default)?e.__parseExpression(s.default):s.default}).reduce((s,n)=>(s[n.name]={type:t(n.type),required:n.required,default:n.default},s),{})}function We(r,e,t){return r.reactive(Object.keys(e||{}).reduce((s,n)=>{let o=e[n];return w(o)?o=t.__parseExpression(o):T(o)&&(o=t.__parseFunction(o)),s[n]=o,s},{}))}function Qe(r,e,t){return Object.entries(e??{}).reduce((s,[n,o])=>(s[n]=r.computed(t.__parseFunction(o)),s),{})}function Ye(r,e){return Object.entries(r??{}).reduce((t,[s,n])=>(t[s]=e.__parseFunction(n),t),{})}function Xe(r,e=[],t){return e.reduce((s,n)=>{const{name:o,from:a}=n||{};n.default;const i=w(a)?t.__parseExpression(a)||o:a??o,c=w(n.default)?t.__parseExpression(n.default):n.default??null;return s[o]=r.inject(i,c),s},{})}function $e(r,e){return Object.keys(r).reduce((t,s)=>{const n=r[s];if(n.type==="mock")t[s]=be(n);else if(n.ref){const o=e.$apis[n.ref],a=T(n.transform)?n.transform.value?e.__parseFunction(n.transform):void 0:n.transform;t[s]=async(...i)=>{const c=await o.apply(e,i);return a?a(c):c}}return t},{})}function Ze(r,e=[],t){e.forEach(s=>{r.watch(t.__parseExpression(s.source),t.__parseFunction(s.handler),{deep:s.deep,immediate:s.immediate})})}function et(r,e){return Object.entries(r??{}).reduce((t,[s,n])=>(t[s]=e.__parseFunction(n),t),{})}let q=[],b={};const Me=r=>r;async function Y(r,e=window){const{urls:t=[],library:s}=r,n=t.filter(i=>U(i));if(n.length===0||!s)return null;const o=t.filter(i=>N(i));return o.length&&fe(o,e),await he(n,s,e).catch(i=>(console.warn("loadScriptUrl error",n,s,i),null))}function x(r){const{getDsl:e,getDslByUrl:t,options:s}=r;return s.window&&(q.forEach(n=>{delete s.window[n]}),q=[]),(n,o,a=B)=>{if(!o||typeof o=="string")return n;if(o.type==="Schema"&&o.id){let i=b[o.id];return i||(i=b[o.id]=a.defineAsyncComponent(async()=>{const c=await e(o.id);return c&&(c.name=n),c?H({...s,Vue:a,dsl:c,mode:y.Runtime,loader:x(r)}).renderer:null}),i)}if(o.type==="UrlSchema"&&o.url){let i=b[o.url];return i||(i=b[o.url]=a.defineAsyncComponent(async()=>{const c=await t(o.url);return c&&(c.name=n),c?H({...s,Vue:a,dsl:c,mode:y.Runtime,loader:x(r)}).renderer:null}),i)}if(o.type==="Plugin"){let i=o.library?b[o.library]:null;return i||(o.library&&q.push(o.library),i=b[o.library||Symbol()]=a.defineAsyncComponent(async()=>{const c=await Y(o,s.window);return c||(console.warn("getPlugin result is null",o),null)}),i)}return n}}function tt(){b={}}function I(r,e,t=B,s=Me){if(!r||!r.name||r.invisible)return null;const n=t.getCurrentInstance()?.appContext,{id:o=null,directives:a=[]}=r,{vIf:i,vFor:c,vShow:u,vModels:h,vBind:d,vHtml:g,others:m}=rt(a);if(i&&!nt(i,e))return null;const f=p=>{const E=p.$components,v=(()=>{if(r.name==="component")return ot(p,r.props?.is);if(r.name==="slot")return r.name;const P=s(r.name,r.from,t);return l.isString(P)?ge(P)||ve(P)?P:E[P]??n?.app?.component(P)??P:P})(),j=it(o,r.props??{},p),He=at(t,r.events??{},p);if(r.name==="slot")return ct(t,r,j,p,s);d&&Object.assign(j,p.__parseExpression(d.value)),u&&(j.style=Object.assign(j.style??{},ut(u,p))),g&&Object.assign(j,pt(g,p)),h.forEach(P=>{Object.assign(j,dt(t,P,p))});const xe=ft(t,r.children??[],p,s,r);let J=t.createVNode(v,{...j,...He},xe);const te=n?st(n,m,p):[];return te.length&&(J=t.withDirectives(J,te)),J};return c?gt(c,f,e):f(e)}function st(r,e,t){const s=r.app;return e.map(n=>{const o=typeof n.name=="string"?s.directive(n.name):t.__parseExpression(n.name);if(!o)return null;const a=[o];return n.value&&a.push(t.__parseExpression(n.value)),n.arg&&a.push(n.arg),n.modifiers&&a.push(n.modifiers),a}).filter(n=>!!n)}function rt(r=[]){const e=r.find(c=>l.camelCase(c.name)==="vIf"),t=r.find(c=>l.camelCase(c.name)==="vFor"),s=r.find(c=>l.camelCase(c.name)==="vShow"),n=r.find(c=>l.camelCase(c.name)==="vBind"),o=r.find(c=>l.camelCase(c.name)==="vHtml"),a=r.filter(c=>l.camelCase(c.name)==="vModel"),i=r.filter(c=>!ne.includes(l.camelCase(c.name)));return{vIf:e,vFor:t,vShow:s,vModels:a,vBind:n,others:i,vHtml:o}}function nt(r,e){return!!e.__parseExpression(r.value)}function ot(r,e){return e?w(e)?r.__parseExpression(e):e:"div"}function it(r,e,t){const s=K(e,t);return s.ref=t.__ref(r,s.ref),s}function K(r,e){return w(r)?e.__parseExpression(r):T(r)?e.__parseFunction(r):Array.isArray(r)?r.map(t=>K(t,e)):typeof r=="object"?Object.keys(r||{}).reduce((t,s)=>{let n=r[s];return t[s]=K(n,e),t},{}):r}function at(r,e,t){const s=["passive","capture","once"],n={capture:"Capture",once:"Once",passive:"OnceCapture"};return Object.keys(e||{}).reduce((o,a)=>{const i=e[a],c=X(i.modifiers),u=c.find(g=>s.includes(g)),h="on"+l.upperFirst(a)+(u&&n[u]||""),d=t.__parseFunction(i.handler);return d&&(o[h]=r.withModifiers(d,c)),o},{})}function X(r={},e=!1){const t=Object.keys(r);return e?t.map(s=>"."+s):t}function ct(r,e,t,s,n){const{children:o}=e,a=lt(e,s),i=s.$slots?.[a.name];return i?i(t):o?l.isString(o)?r.createTextVNode(o):w(o)?r.createTextVNode(G(s.__parseExpression(o))):Array.isArray(o)?o.map(c=>I(c,s,r,n)):null:null}function lt(r,e){const{props:t}=r,s=t?.name||"default";return{name:w(s)?e.__parseExpression(s):s,params:[]}}function ut(r,e){return e.__parseExpression(r.value)?{}:{display:"none"}}function pt(r,e){return{innerHTML:e.__parseExpression(r.value)||""}}function dt(r,e,t){const s={type:"JSFunction",value:e.value?.value?`(v) => {
|
7
|
+
*/const A="0.10.15";var y=(r=>(r.Runtime="Runtime",r.Design="Design",r.Raw="Raw",r.VNode="VNode",r))(y||{});const z=["$el","$emit","$nextTick","$parent","$root","$attrs","$slots","$watch","$props","$options","$forceUpdate"],Ne=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeUnmount","unmounted","errorCaptured","renderTracked","renderTriggered","activated","deactivated"],ne=["vIf","vShow","vModel","vFor","vBind","vHtml"],ie={String,Number,Boolean,Array,Object,Function,Date},C="VtjPage",k="VtjHomepage",oe="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(r,e){return r.map(t=>l.isUrl(t)||t.startsWith("/")?t:`${e}${t}`)}function N(r){return/\.css$/.test(r)}function U(r){return/\.js$/.test(r)}function ce(r){return/\.json$/.test(r)}function Ue(r){return r.map(e=>`<script src="${l.url.append(e,{v:A})}"><\/script>`).join("")}function Le(r=[]){return r.map(e=>`<link rel="stylesheet" href="${l.url.append(e,{v:A})}" />`).join("")}function le(r,e=!1){return e&&r.endsWith(".prod.js")?r.replace(".prod.js",".js"):r}function ue(r,e,t=!1){const s=r.filter(g=>!!g.enabled),n=[],i=[],a=[],o=[],c={},u={},h=[],d={};return s.forEach(({urls:g,assetsUrl:m,library:f,assetsLibrary:p,localeLibrary:j})=>{g?.forEach(v=>{U(v)&&n.push(le(v,t)),N(v)&&i.push(v)}),f&&(o.push(f),c[f]=T(g||[],e),j&&(u[f]=j)),m&&a.push(m),p&&h.push(p),f&&p&&(d[p]=f)}),{scripts:T(n,e),css:T(i,e),materials:T(a,e),libraryExports:o,materialExports:l.dedupArray(h),materialMapLibrary:d,libraryMap:c,libraryLocaleMap:u}}function pe(r,e){const{name:t,parent:s,alias:n}=r;return s?e[s]?.[n||t]:e[n||t]}function G(r){return l.isString(r)?r:JSON.stringify(r)}function V(r,e,t){const s=r.CSSStyleSheet;if(s.prototype.replaceSync){const n=new s;n.id=e,n.replaceSync(t);const i=r.document,a=i.adoptedStyleSheets,o=Array.from(a).filter(c=>c.id!==e);i.adoptedStyleSheets=[...o,n]}else{const n=r.document;let i=n.getElementById(e);i?i.innerHTML=t:(i=n.createElement("style"),i.id=e,i.innerHTML=t,n.head.appendChild(i))}}async function de(r,e){const t=await window.fetch(e).then(s=>s.text()).catch(()=>"");t&&V(window,r,t)}function fe(r,e=window){const t=e.document,s=e.document.head;for(const n of r)if(!t.getElementById(n)){const a=t.createElement("link");a.rel="stylesheet",a.id=n,a.href=n,s.appendChild(a)}}async function he(r,e,t=window){const s=t.document,n=t.document.head;let i=t[e];return i?i.default||i:new Promise((a,o)=>{for(const c of r){const u=s.createElement("script");u.src=c,u.onload=()=>{i=t[e],i?a(i.default||i):o(null)},u.onerror=h=>{o(h)},n.appendChild(u)}})}function me(r){return l.isFunction(r)||l.isFunction(r?.install)}function ge(r){return ae.includes(r)}function ve(r){return oe.includes(r)}function $(r=window){const e=window?.Mock;if(e)return e;const t=r?.Mock;if(t&&window)return window.Mock=t,t}function Je(r,e,t){Object.assign(e.meta,t.meta);const s=r?._container;t?.type==="page"&&s.classList.add("is-page"),t?.pure&&s.classList.add("is-pure")}function M(r,e,t=!1,s=!1){try{const n=['"use strict";',"var __self = arguments[0];"];n.push("return ");let i=(r.value||"").trim();i=i.replace(/this(\W|$)/g,(o,c)=>`__self${c}`),i=n.join(`
|
8
|
+
`)+i;const a=`with(${t?"{}":"$scope || {}"}) { ${i} }`;return new Function("$scope",a)(e)}catch(n){if(l.logger.error("parseExpression.error",n,r,e?.__self??e),s)throw n}}function D(r,e,t=!1,s=!1){const n=M(r,e,t,s);if(typeof n!="function"&&(l.logger.error("parseFunction.error","not a function",r,e?.__self??e),s))throw new Error(`"${r.value}" not a function`);return n}function w(r){return r&&r.type==="JSExpression"}function I(r){return typeof r=="object"&&r&&r.type==="JSFunction"}function ye(r){return w(r)||I(r)}function qe(r){return ye(r)?r.value:JSON.stringify(r)}const ze={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 _e{options;data=null;mode=y.Raw;interceptResponse=!0;constructor(e){this.options=Object.assign({},ze,e),this.loadData()}enableIntercept(){this.interceptResponse=!0}disableIntercept(){this.interceptResponse=!1}connect(e){const{mode:t,router:s,request:n}=e;this.mode=t,s&&this.mode===y.Raw&&this.setGuard(s),n&&this.setRequest(n)}login(e){const{storageKey:t,storagePrefix:s,session:n,authKey:i}=this.options;this.setData(e),this.data&&(l.storage.save(t,e,{type:"local",prefix:s}),n&&l.cookie.set(i,this.data.token))}clear(){const{storageKey:e,storagePrefix:t,session:s,authKey:n}=this.options;this.data=null,l.storage.remove(e,{type:"local",prefix:t}),s&&l.cookie.remove(n)}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(i=>s[i]||s[t+"."+i])}some(e){const{appName:t}=this.options,{permissions:s={}}=this.data||{};return l.toArray(e).some(i=>s[i]||s[t+"."+i])}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 n=t.split("#")[1]||t;return e.path===n}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(n=>l.unRSA(n,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===C){const t=e.params.id;return t&&this.can(t)}return!0}setGuard(e){e.beforeEach((t,s,n)=>this.guard(t,n))}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:n=!1}=this.options;return await this.showTip(s),l.isFunction(n)?(n(),t(!1)):l.isString(n)?t(n):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=>(this.interceptResponse&&await this.showUnauthorizedAlert(t),t),async t=>{if(!this.interceptResponse)return Promise.reject(t);const s=t.response||t||{};return await this.showUnauthorizedAlert(s),Promise.reject(t)})}}function Se(){return S.inject(W,null)}function Ke(r={}){const{notify:e,loading:t,settings:s={},Startup:n,access:i,remote:a="https://lcdp.vtj.pro"}=r;let o=null;return{request:l.createRequest({settings:{type:"form",validSuccess:!0,originResponse:!1,loading:!0,validate:u=>u.data?.code===0||!!u.data?.success,failMessage:!0,showError:u=>{e&&e(u||"未知错误")},showLoading:()=>{o&&o.close(),t&&(o=t())},hideLoading:()=>{o&&(o.close(),o=null)},...s}}),jsonp:l.jsonp,notify:e,loading:t,startupComponent:n,remote:a,access:i?we(i):void 0}}function we(r={}){const e={storageKey:"RRO_IDE_ACCESS_STORAGE__",auth:"https://lcdp.vtj.pro/auth.html",privateKey:"MIIBOgIBAAJBAKoIzmn1FYQ1YOhOBw9EhABxZ+PySAIaydI+zdhoKflrdgJ4A5E4/5gbQmRpk09hPWG8nvX7h+l/QLU8kXxAIBECAwEAAQJAAlgpxQY6sByLsXqzJcthC8LSGsLf2JEJkHwlnpwFqlEV8UCkoINpuZ2Wzl+aftURu5rIfAzRCQBvHmeOTW9/zQIhAO5ufWDmnSLyfAAsNo5JRNpVuLFCFodR8Xm+ulDlosR/AiEAtpAltyP9wmCABKG/v/hrtTr3mcvFNGCjoGa9bUAok28CIHbrVs9w1ijrBlvTsXYwJw46uP539uKRRT4ymZzlm9QjAiB+1KH/G9f9pEEL9rtaSOG7JF5D0JcOjlze4MGVFs+ZrQIhALKOUFBNr2zEsyJIjw2PlvEucdlG77UniszjXTROHSPd"};return new _e(Object.assign(e,r))}function je(r,e){const{jsonp:t,request:s}=e;if(r.method==="jsonp")return(n={})=>t(r.url,{...r.jsonpOptions,query:n});{const n=r.headers?M(r.headers,{},!0):void 0,i={url:r.url,method:r.method,settings:{...r.settings,headers:n}};return(a,o)=>(delete i.data,s.send(l.merge(i,o||{},{data:a})))}}function Ee(r,e){const{metaQuery:t}=e;if(!t)return;const{code:s,queryCode:n}=r;return(i,a)=>{if(!t){console.warn("adapter.metaQuery is not defined!");return}return t(s,n,i,a)}}function Pe(r=[],e=[],t){const s={};for(const n of r)s[n.id]=je(n,t);for(const n of e)s[n.id]=Ee(n,t);return s}async function Re(r=[],e=window){const t=$(e);t&&(Q(e),r.forEach(s=>Ae(t,s)))}function be(r,e=window){const t=I(r.mockTemplate)&&r.mockTemplate.value?D(r.mockTemplate,{},!0):void 0,s=$(e);return async(...n)=>{let i={};if(t)try{i=await t.apply(t,n)}catch(a){l.logger.warn("模拟数据模版异常",a)}return s?.mock(i)}}function Ae(r,e){if(!e.mock)return;const{url:t,mockTemplate:s}=e;if(t&&s){const n=l.pathToRegexp(`${t}(.*)`),i=l.pathToRegexpMatch(t,{decode:decodeURIComponent}),a=M(s,{},!0);r.mock(n,o=>{const c=l.url.parse(o.url)||{},u=o.body instanceof FormData?l.formDataToJson(o.body):o.body,h=i(o.url)?.params;return Object.assign(o,{data:u,params:c,query:h}),r.mock(a(o))})}}function Q(r=window){const e=$(r);e&&(e._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:n}=e;this.__mode=t,s&&(this.__id=s.id||null,this.__transform=s.transform||{}),n&&Object.assign(this,n)}setup(e,t=B){const s=t.getCurrentInstance();if(!s)return;this.__refs={},this.$refs={},this.context={},this.__contextRefs={},this.__instance=s.proxy;const n=s.appContext.config.globalProperties;Object.assign(this,n),Object.assign(this,e||{}),this.__proxy(),t.onMounted(()=>{this.__proxy()}),t.onUnmounted(()=>{this.__cleanup()}),t.onBeforeUpdate(()=>{this.__reset()})}__proxy(){this.__instance&&z.forEach(e=>{this[e]=this.__instance?.[e]})}__cleanup(){z.forEach(e=>{this[e]=null}),this.__reset()}__reset(){this.__refs={},this.$refs={},this.__contextRefs={},this.context={}}__parseFunction(e){if(e)if(this.__mode===y.Runtime){const{id:t,type:s}=e,n=t?this.__transform[t]??e.value:e.value;return D({type:s,value:n},this)}else return D(e,this)}__parseExpression(e){if(e)if(this.__mode===y.Runtime){const{id:t,type:s}=e,n=t?this.__transform[t]??e.value:e.value;return M({type:s,value:n},this)}else return M(e,this)}__ref(e=null,t){if(this.__mode!==y.VNode)return e&&e!==this.__id&&(this.__contextRefs[e]=this),async s=>{await l.delay(0);let n=s?.$vtjEl||s?.$el||s?._?.vnode?.el||s;if(!n){typeof t=="string"&&(delete this.$refs[t],e&&delete this.__refs[e]);return}return n.nodeType===3&&n.nextSibling&&(n=n.nextSibling),n.__vtj__=e,y.Design===this.__mode&&(n.__context__=this,n.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 n=e[t];if(n&&s!==n){const i=new Set([].concat(n,s));return Array.from(i)}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 H(r){const{Vue:e=B,mode:t=y.Runtime,components:s={},libs:n={},apis:i={},loader:a}=r,o=e.computed(()=>r.dsl),c={$components:s,$libs:n,$apis:i},u=new Ce({mode:t,dsl:o.value,attrs:c}),h=e.defineComponent({name:o.value.name,props:{...Ve(o.value.props??[],u)},setup(d){u.$props=d,u.props=d,o.value.id&&V(r.window||window,o.value.id,o.value.css||""),u.state=We(e,o.value.state??{},u);const g=Qe(e,o.value.computed??{},u),m=Ye(o.value.methods??{},u),f=Xe(e,o.value.inject,u),p=$e(o.value.dataSources||{},u),j={...f,...g,...m,...p};return u.setup(j,e),Ze(e,o.value.watch??[],u),{vtj:u}},emits:Ge(o.value.emits),expose:["vtj"],render(){if(!o.value.nodes)return null;const d=o.value.nodes||[];return d.length===1?F(d[0],u,e,a):d.map(g=>F(g,u,e,a))},...et(o.value.lifeCycles??{},u)});return{renderer:e.markRaw(h),context:u}}function Ge(r=[]){return r.map(e=>l.isString(e)?e:e.name)}function Ve(r=[],e){const t=s=>s?(Array.isArray(s)?s:[s]).map(i=>ie[i]):void 0;return r.map(s=>l.isString(s)?{name:s}:{name:s.name,type:s.type,required:s.required,default:w(s.default)?e.__parseExpression(s.default):s.default}).reduce((s,n)=>(s[n.name]={type:t(n.type),required:n.required,default:n.default},s),{})}function We(r,e,t){return r.reactive(Object.keys(e||{}).reduce((s,n)=>{let i=e[n];return w(i)?i=t.__parseExpression(i):I(i)&&(i=t.__parseFunction(i)),s[n]=i,s},{}))}function Qe(r,e,t){return Object.entries(e??{}).reduce((s,[n,i])=>(s[n]=r.computed(t.__parseFunction(i)),s),{})}function Ye(r,e){return Object.entries(r??{}).reduce((t,[s,n])=>(t[s]=e.__parseFunction(n),t),{})}function Xe(r,e=[],t){return e.reduce((s,n)=>{const{name:i,from:a}=n||{};n.default;const o=w(a)?t.__parseExpression(a)||i:a??i,c=w(n.default)?t.__parseExpression(n.default):n.default??null;return s[i]=r.inject(o,c),s},{})}function $e(r,e){return Object.keys(r).reduce((t,s)=>{const n=r[s];if(n.type==="mock")t[s]=be(n);else if(n.ref){const i=e.$apis[n.ref],a=I(n.transform)?n.transform.value?e.__parseFunction(n.transform):void 0:n.transform;t[s]=async(...o)=>{const c=await i.apply(e,o);return a?a(c):c}}return t},{})}function Ze(r,e=[],t){e.forEach(s=>{r.watch(t.__parseExpression(s.source),t.__parseFunction(s.handler),{deep:s.deep,immediate:s.immediate})})}function et(r,e){return Object.entries(r??{}).reduce((t,[s,n])=>(t[s]=e.__parseFunction(n),t),{})}let q=[],b={};const Me=r=>r;async function Y(r,e=window){const{urls:t=[],library:s}=r,n=t.filter(o=>U(o));if(n.length===0||!s)return null;const i=t.filter(o=>N(o));return i.length&&fe(i,e),await he(n,s,e).catch(o=>(console.warn("loadScriptUrl error",n,s,o),null))}function x(r){const{getDsl:e,getDslByUrl:t,options:s}=r;return s.window&&(q.forEach(n=>{delete s.window[n]}),q=[]),(n,i,a=B)=>{if(!i||typeof i=="string")return n;if(i.type==="Schema"&&i.id){let o=b[i.id];return o||(o=b[i.id]=a.defineAsyncComponent(async()=>{const c=await e(i.id);return c&&(c.name=n),c?H({...s,Vue:a,dsl:c,mode:y.Runtime,loader:x(r)}).renderer:null}),o)}if(i.type==="UrlSchema"&&i.url){let o=b[i.url];return o||(o=b[i.url]=a.defineAsyncComponent(async()=>{const c=await t(i.url);return c&&(c.name=n),c?H({...s,Vue:a,dsl:c,mode:y.Runtime,loader:x(r)}).renderer:null}),o)}if(i.type==="Plugin"){let o=i.library?b[i.library]:null;return o||(i.library&&q.push(i.library),o=b[i.library||Symbol()]=a.defineAsyncComponent(async()=>{const c=await Y(i,s.window);return c||(console.warn("getPlugin result is null",i),null)}),o)}return n}}function tt(){b={}}function F(r,e,t=B,s=Me){if(!r||!r.name||r.invisible)return null;const n=t.getCurrentInstance()?.appContext,{id:i=null,directives:a=[]}=r,{vIf:o,vFor:c,vShow:u,vModels:h,vBind:d,vHtml:g,others:m}=rt(a);if(o&&!nt(o,e))return null;const f=p=>{const j=p.$components,v=(()=>{if(r.name==="component")return it(p,r.props?.is);if(r.name==="slot")return r.name;const P=s(r.name,r.from,t);return l.isString(P)?ge(P)||ve(P)?P:j[P]??n?.app?.component(P)??P:P})(),E=ot(i,r.props??{},p),He=at(t,r.events??{},p);if(r.name==="slot")return ct(t,r,E,p,s);d&&Object.assign(E,p.__parseExpression(d.value)),u&&(E.style=Object.assign(E.style??{},ut(u,p))),g&&Object.assign(E,pt(g,p)),h.forEach(P=>{Object.assign(E,dt(t,P,p))});const xe=ft(t,r.children??[],p,s,r);let J=t.createVNode(v,{...E,...He},xe);const te=n?st(n,m,p):[];return te.length&&(J=t.withDirectives(J,te)),J};return c?gt(c,f,e):f(e)}function st(r,e,t){const s=r.app;return e.map(n=>{const i=typeof n.name=="string"?s.directive(n.name):t.__parseExpression(n.name);if(!i)return null;const a=[i];return n.value&&a.push(t.__parseExpression(n.value)),n.arg&&a.push(n.arg),n.modifiers&&a.push(n.modifiers),a}).filter(n=>!!n)}function rt(r=[]){const e=r.find(c=>l.camelCase(c.name)==="vIf"),t=r.find(c=>l.camelCase(c.name)==="vFor"),s=r.find(c=>l.camelCase(c.name)==="vShow"),n=r.find(c=>l.camelCase(c.name)==="vBind"),i=r.find(c=>l.camelCase(c.name)==="vHtml"),a=r.filter(c=>l.camelCase(c.name)==="vModel"),o=r.filter(c=>!ne.includes(l.camelCase(c.name)));return{vIf:e,vFor:t,vShow:s,vModels:a,vBind:n,others:o,vHtml:i}}function nt(r,e){return!!e.__parseExpression(r.value)}function it(r,e){return e?w(e)?r.__parseExpression(e):e:"div"}function ot(r,e,t){const s=K(e,t);return s.ref=t.__ref(r,s.ref),s}function K(r,e){return w(r)?e.__parseExpression(r):I(r)?e.__parseFunction(r):Array.isArray(r)?r.map(t=>K(t,e)):typeof r=="object"?Object.keys(r||{}).reduce((t,s)=>{let n=r[s];return t[s]=K(n,e),t},{}):r}function at(r,e,t){const s=["passive","capture","once"],n={capture:"Capture",once:"Once",passive:"OnceCapture"};return Object.keys(e||{}).reduce((i,a)=>{const o=e[a],c=X(o.modifiers),u=c.find(g=>s.includes(g)),h="on"+l.upperFirst(a)+(u&&n[u]||""),d=t.__parseFunction(o.handler);return d&&(i[h]=r.withModifiers(d,c)),i},{})}function X(r={},e=!1){const t=Object.keys(r);return e?t.map(s=>"."+s):t}function ct(r,e,t,s,n){const{children:i}=e,a=lt(e,s),o=s.$slots?.[a.name];return o?o(t):i?l.isString(i)?r.createTextVNode(i):w(i)?r.createTextVNode(G(s.__parseExpression(i))):Array.isArray(i)?i.map(c=>F(c,s,r,n)):null:null}function lt(r,e){const{props:t}=r,s=t?.name||"default";return{name:w(s)?e.__parseExpression(s):s,params:[]}}function ut(r,e){return e.__parseExpression(r.value)?{}:{display:"none"}}function pt(r,e){return{innerHTML:e.__parseExpression(r.value)||""}}function dt(r,e,t){const s={type:"JSFunction",value:e.value?.value?`(v) => {
|
9
9
|
${e.value.value} = v;
|
10
|
-
}`:"(v) => {}"},n=t.__parseFunction(s),o=X(w(e.modifiers)?t.__parseExpression(e.modifiers):e.modifiers),a=w(e.arg)?t.__parseExpression(e.arg):e.arg||"modelValue";return{[a]:t.__parseExpression(e.value),[`onUpdate:${a}`]:o.length&&n?r.withModifiers(n,o):n}}function ft(r,e,t,s,n){if(!e)return null;if(l.isString(e))return{default:()=>e};if(w(e))return{default:()=>G(t.__parseExpression(e))};if(Array.isArray(e)&&e.length>0){const o=ht(e),a=i=>!i||!n?{}:n?.id&&Object.keys(i).length?{[`scope_${n.id}`]:i}:{};return Object.entries(o).reduce((i,[c,{nodes:u,params:h}])=>(i[c]=d=>{const g=h.length?l.pick(d??{},h):a(d);return u.map(m=>I(m,t.__clone(g),r,s))},i),{})}return null}function ht(r){const e={default:{params:[],nodes:[]}};for(const t of r){const s=mt(t.slot),n=s.name;e[n]?(e[n].nodes.push(t),e[n].params=e[n].params.concat(s.params)):e[n]={nodes:[t],params:s.params}}return e}function mt(r="default"){return l.isString(r)?{name:r,params:[]}:{params:[],...r}}function gt(r,e,t){const{value:s,iterator:n}=r,{item:o="item",index:a="index"}=n||{};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`),[])}const se=S.defineComponent({name:"VtjPageContainer",async setup(){const r=ee(),e=re.useRoute(),t=e.params.id,s=t?r.getPage(t):r.getHomepage(),n=s?await r.getRenderComponent(s.id):null,o=S.ref(Symbol());if(s){Object.assign(e.meta,s.meta||{},{cache:s.cache});const{useTitle:a}=r?.adapter;a&&a(s.title||"VTJ")}return{provider:r,component:n,file:s,query:e.query,meta:e.meta,sid:o,route:e}},render(){const{component:r,query:e,sid:t}=this;return r?S.h(r,{...e,key:t}):S.h("div","页面不存在")},activated(){this.meta.cache===!1&&(this.sid=Symbol())}}),vt=S.defineComponent({name:"VtjStartupContainer",render(){return S.h("div","page not found!")}}),Z=Symbol("Provider");var Te=(r=>(r.Production="production",r.Development="development",r))(Te||{});class ke extends A.Base{constructor(e){super(),this.options=e;const{service:t,mode:s=y.Raw,dependencies:n,materials:o,project:a={},adapter:i={},globals:c={},modules:u={},router:h=null,materialPath:d="./",nodeEnv:g="development"}=e;this.mode=s,this.modules=u,this.service=t,this.router=h,this.materialPath=d,this.nodeEnv=g,n&&(this.dependencies=n),o&&(this.materials=o),Object.assign(this.globals,c),Object.assign(this.adapter,i);const{access:m,request:f}=this.adapter;m&&m.connect({mode:s,router:h,request:f}),a&&s!==y.Design?this.load(a):this.project=a}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(o){l.logger.warn("模拟数据模版异常",o)}return $()?.mock(s)}}async load(e){const t=this.modules[`.vtj/projects/${e.id}.json`]||this.modules[`/src/.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:n=[]}=this.project,o=window;o&&(o.CKEDITOR_VERSION=void 0),this.mode===y.Raw?await this.loadDependencies(o):await this.loadAssets(o),this.initMock(o),this.apis=Pe(s,n,this.adapter),Q(o),Ae(s,o),e.platform!=="uniapp"&&this.initRouter(),this.triggerReady()}initMock(e){const t=$(e);t&&t.setup({timeout:"50-500"})}async loadDependencies(e){const t=Object.entries(this.dependencies);for(const[s,n]of t)e[s]||(e[s]=this.library[s]=await n())}async loadAssets(e){const{dependencies:t=[]}=this.project,{dependencies:s,library:n,components:o,materialPath:a,nodeEnv:i}=this,{libraryExports:c,libraryMap:u,materials:h,materialExports:d,materialMapLibrary:g}=ue(t,a,i==="development");for(const m of c){const f=s[m],p=e[m];if(p)n[m]=p;else if(f)e[m]=n[m]=await f();else{const E=u[m]||[];for(const v of E)N(v)&&await de(m,l.url.append(v,{v:R})),U(v)&&await l.loadScript(l.url.append(v,{v:R}));n[m]=e[m]}}if(i==="development"){for(const f of h)await l.loadScript(l.url.append(f,{v:R}));const m=this.materials||{};for(const f of d){const p=e[g[f]],E=A.BUILT_IN_COMPONENTS[f];if(E)p&&E.forEach(v=>{o[v]=p[v]});else{const v=m[f]?(await m[f]()).default:e[f];v&&p&&(v.components||[]).forEach(j=>{o[j.name]=pe(j,p)})}}}}initRouter(){const{router:e,project:t,options:s,adapter:n}=this;if(!e)return;const o=t?.platform==="uniapp"?"pages":"page",{routeAppendTo:a,pageRouteName:i=o,routeMeta:c}=s,u=a?"":"/",h={path:`${u}${i}/:id`,name:C,component:se},d={path:u,name:F,component:t?.homepage?se:n.startupComponent||vt,meta:c};e.hasRoute(C)&&e.removeRoute(C),e.hasRoute(F)&&e.removeRoute(F),a?(e.addRoute(a,h),e.addRoute(a,d)):(e.addRoute(h),e.addRoute(d))}install(e){const t=e.config.globalProperties.installed||{};for(const[s,n]of Object.entries(this.library))!t[s]&&me(n)&&(e.use(n),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.$provider=this,e.config.globalProperties.installed=t,this.mode===y.Design&&(e.config.errorHandler=(s,n,o)=>{const a=n?.$options.name,i=typeof s=="string"?s:s?.message||s?.msg||"未知错误",c=`[ ${a} ] ${i} ${o}`;console.error("[VTJ Error]:",{err:s,instance:n,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=(n,o=[])=>{for(const a of o){if(a.id===n)return a;if(a.children&&a.children.length){const i=s(n,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`]||this.modules[`/src/.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.adapter.request?this.urlDslCaches[e]=this.adapter.request.send({url:e,method:"get",settings:{validSuccess:!1,originResponse:!0}}).then(s=>s.data).catch(()=>null):null)}createDslRenderer(e,t={}){const{library:s,components:n,mode:o,apis:a}=this,i={mode:o,Vue:s.Vue,components:n,libs:s,apis:a,window,...t},c=x({getDsl:async u=>await this.getDsl(u)||null,getDslByUrl:async u=>await this.getDslByUrl(u)||null,options:i});return H({...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 n=`.vtj/vue/${e}.vue`,o=this.modules[n]||this.modules[`/src/pages/${e}.vue`];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 S.defineAsyncComponent(async()=>{const s=await this.getDslByUrl(e);return s?(s.name=t||s.name,this.createDslRenderer(s).renderer):null})}definePluginComponent(e){return S.defineAsyncComponent(async()=>await Y(e,window))}}function yt(r){const e=new ke(r);return{provider:e,onReady:s=>e.ready(s)}}function ee(r={}){const e=S.inject(Z,null);if(!e)throw new Error("Can not find provider");if(e.nodeEnv==="development"){const{id:t,version:s}=r;t&&s&&(async()=>{const n=await e.getDsl(t);n?.__VERSION__!==s&&e.adapter.notify&&e.adapter.notify(`[ ${n?.name} ] 组件源码版本与运行时版本不一致,请重新发布组件`,"版本不一致","warning")})()}return e}const Fe={type:"json",validSuccess:!0,originResponse:!1,failMessage:!0,validate:r=>r.data?.code===0},_t=(r,e="/__vtj__/api/:type.json")=>(t,s,n)=>r.send({url:e,method:"post",params:{type:t},query:n,data:{type:t,data:s},settings:Fe}),St=(r,e="/__vtj__/api/uploader.json")=>async(t,s)=>await r.send({url:e,method:"post",data:{files:t,projectId:s},settings:{...Fe,type:"data"}}).then(n=>n&&n[0]?n[0]:null).catch(()=>null);function wt(r){return l.createRequest({settings:{type:"json",validSuccess:!0,originResponse:!1,failMessage:!0,validate:e=>e.data?.code===0,showError:e=>{r&&r(e||"未知错误")}}})}class L{api;pluginCaches={};uploader;constructor(e=l.request){this.api=_t(e),this.uploader=St(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 n=this.pluginCaches[s];return n||(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 _=new l.Storage({type:"local",expired:0,prefix:"__VTJ_"});class Et extends L{init(e){const t=new A.ProjectModel(e),s=_.get(`project_${t.id}`),n=Object.assign(t.toDsl(),s||{});return _.save(`project_${t.id}`,n),Promise.resolve(n)}saveProject(e){const t=new A.ProjectModel(e);return _.save(`project_${t.id}`,t.toDsl()),Promise.resolve(!0)}saveMaterials(e,t){return _.save(`materials_${e.id}`,l.mapToObject(t)),Promise.resolve(!0)}saveFile(e){return _.save(`file_${e.id}`,e),Promise.resolve(!0)}getFile(e){const t=_.get(`file_${e}`);return t?Promise.resolve(t):Promise.reject(null)}removeFile(e){return _.remove(`file_${e}`),Promise.resolve(!0)}saveHistory(e){return _.save(`history_${e.id}`,e),Promise.resolve(!0)}removeHistory(e){const t=_.get(`history_${e}`);if(t){const n=(t.items||[]).map(o=>o.id);this.removeHistoryItem(e,n),_.remove(`history_${e}`)}return Promise.resolve(!0)}getHistory(e){const t=_.get(`history_${e}`),s=new A.HistoryModel(t||{id:e});return Promise.resolve(s.toDsl())}getHistoryItem(e,t){const s=_.get(`history_${e}_${t}`);return Promise.resolve(s)}saveHistoryItem(e,t){return _.save(`history_${e}_${t.id}`,t),Promise.resolve(!0)}removeHistoryItem(e,t){return t.forEach(s=>{_.remove(`history_${e}_${s}`)}),Promise.resolve(!0)}}class Ie extends L{projects={};materials={};files={};histories={};historyItems={};init(e){const t=new A.ProjectModel(e),s=this.projects[t.id]||{},n=Object.assign(t.toDsl(),s);return this.projects[n.id]=n,Promise.resolve(n)}saveProject(e){const t=new A.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 n=(t.items||[]).map(o=>o.id);this.removeHistoryItem(e,n),delete this.historyItems[e]}return Promise.resolve(!0)}getHistory(e){const t=this.histories[e],s=new A.HistoryModel(t||{id:e});return Promise.resolve(s)}getHistoryItem(e,t){const s=`${e}_${t}`,n=this.historyItems[s]||{};return Promise.resolve(n)}saveHistoryItem(e,t){const s=`${e}_${t.id}`;return this.historyItems[s]=t,Promise.resolve(!0)}removeHistoryItem(e,t){return t.forEach(s=>{const n=`${e}_${s}`;delete this.historyItems[n]}),Promise.resolve(!0)}}let O=null;function jt(){return O||(O=new Ie,O)}class Pt 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(r,e,t=[]){return t.map(s=>{const{id:n,title:o,icon:a,children:i,hidden:c}=s;return{id:n,title:o,icon:a,hidden:c,url:`${r}/${e}/${n}`,children:i&&i.length?Oe(r,e,i):void 0}})}function De(r,e){if(!e)return r;let t=[];for(const s of r)if(s.children&&s.children.length){const n=De(s.children,e);n.length&&(s.children=n,t.push(s))}else e.can(s.id.toString())&&t.push(s);return t}function At(r){const{menuPathPrefix:e="",pageRouteName:t="page",disableMenusFilter:s=!1}=r||{},n=ee(),o=re.useRoute(),a=Se(),i=S.ref(!1),c=S.ref(!1),u=n.project;S.watchEffect(()=>{const{name:g,params:m,meta:f}=o;if(g===C){const p=n.getPage(m.id);i.value=!p?.mask,c.value=!!p?.pure}else if(g===F){const p=n.getHomepage();i.value=!p?.mask,c.value=!!p?.pure}else i.value=!f.mask,c.value=!!f.pure});const h=Oe(e,t,u?.pages),d=u?.config;return{disabled:i,logo:d?.logo,themeSwitchable:d?.themeSwitchable,title:d?.title||u?.description||u?.name||"VTJ App",menus:s?h:De(h,a),pure:c}}exports.ACCESS_KEY=W;exports.Access=_e;exports.BUILD_IN_TAGS=ae;exports.BUILT_IN_DIRECTIVES=ne;exports.BaseService=L;exports.CONTEXT_HOST=z;exports.Context=Ce;exports.ContextMode=y;exports.DATA_TYPES=oe;exports.HOMEPAGE_ROUTE_NAME=F;exports.HTML_TAGS=ie;exports.JSCodeToString=qe;exports.LIFE_CYCLES_LIST=Ne;exports.LocalService=Pt;exports.MemoryService=Ie;exports.NodeEnv=Te;exports.PAGE_ROUTE_NAME=C;exports.Provider=ke;exports.StorageService=Et;exports.VTJ_RENDERER_VERSION=R;exports.adoptedStyleSheets=V;exports.clearLoaderCache=tt;exports.createAccess=we;exports.createAdapter=Ke;exports.createAssetScripts=Ue;exports.createAssetsCss=Le;exports.createDataSources=$e;exports.createLoader=x;exports.createMemoryService=jt;exports.createMetaApi=je;exports.createMock=be;exports.createProvider=yt;exports.createRenderer=H;exports.createSchemaApi=Ee;exports.createSchemaApis=Pe;exports.createServiceRequest=wt;exports.defaultLoader=Me;exports.fillBasePath=k;exports.getMock=$;exports.getModifiers=X;exports.getPlugin=Y;exports.getRawComponent=pe;exports.isBuiltInTag=ge;exports.isCSSUrl=N;exports.isJSCode=ye;exports.isJSExpression=w;exports.isJSFunction=T;exports.isJSON=ce;exports.isJSUrl=U;exports.isNativeTag=ve;exports.isVuePlugin=me;exports.loadCss=de;exports.loadCssUrl=fe;exports.loadScriptUrl=he;exports.mockApi=Re;exports.mockApis=Ae;exports.mockCleanup=Q;exports.nodeRender=I;exports.parseDeps=ue;exports.parseExpression=M;exports.parseFunction=D;exports.providerKey=Z;exports.removeProdFlag=le;exports.setupPageSetting=Je;exports.toString=G;exports.useAccess=Se;exports.useMask=At;exports.useProvider=ee;
|
10
|
+
}`:"(v) => {}"},n=t.__parseFunction(s),i=X(w(e.modifiers)?t.__parseExpression(e.modifiers):e.modifiers),a=w(e.arg)?t.__parseExpression(e.arg):e.arg||"modelValue";return{[a]:t.__parseExpression(e.value),[`onUpdate:${a}`]:i.length&&n?r.withModifiers(n,i):n}}function ft(r,e,t,s,n){if(!e)return null;if(l.isString(e))return{default:()=>e};if(w(e))return{default:()=>G(t.__parseExpression(e))};if(Array.isArray(e)&&e.length>0){const i=ht(e),a=o=>!o||!n?{}:n?.id&&Object.keys(o).length?{[`scope_${n.id}`]:o}:{};return Object.entries(i).reduce((o,[c,{nodes:u,params:h}])=>(o[c]=d=>{const g=h.length?l.pick(d??{},h):a(d);return u.map(m=>F(m,t.__clone(g),r,s))},o),{})}return null}function ht(r){const e={default:{params:[],nodes:[]}};for(const t of r){const s=mt(t.slot),n=s.name;e[n]?(e[n].nodes.push(t),e[n].params=e[n].params.concat(s.params)):e[n]={nodes:[t],params:s.params}}return e}function mt(r="default"){return l.isString(r)?{name:r,params:[]}:{params:[],...r}}function gt(r,e,t){const{value:s,iterator:n}=r,{item:i="item",index:a="index"}=n||{};let o=t.__parseExpression(s)||[];return Number.isInteger(o)&&(o=new Array(o).fill(!0).map((c,u)=>u+1)),Array.isArray(o)?o.map((c,u)=>e(t.__clone({[i]:c,[a]:u}))):(console.warn("[vForRender]:",`${s?.value} is not a Arrary`),[])}const se=S.defineComponent({name:"VtjPageContainer",async setup(){const r=ee(),e=re.useRoute(),t=e.params.id,s=t?r.getPage(t):r.getHomepage(),n=s?await r.getRenderComponent(s.id):null,i=S.ref(Symbol());if(s){Object.assign(e.meta,s.meta||{},{cache:s.cache});const{useTitle:a}=r?.adapter;a&&a(s.title||"VTJ")}return{provider:r,component:n,file:s,query:e.query,meta:e.meta,sid:i,route:e}},render(){const{component:r,query:e,sid:t}=this;return r?S.h(r,{...e,key:t}):S.h("div","页面不存在")},activated(){this.meta.cache===!1&&(this.sid=Symbol())}}),vt=S.defineComponent({name:"VtjStartupContainer",render(){return S.h("div","page not found!")}}),Z=Symbol("Provider");var Ie=(r=>(r.Production="production",r.Development="development",r))(Ie||{});class Te extends R.Base{constructor(e){super(),this.options=e;const{service:t,mode:s=y.Raw,dependencies:n,materials:i,project:a={},adapter:o={},globals:c={},modules:u={},router:h=null,materialPath:d="./",nodeEnv:g="development"}=e;this.mode=s,this.modules=u,this.service=t,this.router=h,this.materialPath=d,this.nodeEnv=g,n&&(this.dependencies=n),i&&(this.materials=i),Object.assign(this.globals,c),Object.assign(this.adapter,o);const{access:m,request:f}=this.adapter;m&&m.connect({mode:s,router:h,request:f}),a&&s!==y.Design?this.load(a):this.project=a}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(i){l.logger.warn("模拟数据模版异常",i)}return $()?.mock(s)}}async load(e){const t=this.modules[`.vtj/projects/${e.id}.json`]||this.modules[`/src/.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:n=[]}=this.project,i=window;i&&(i.CKEDITOR_VERSION=void 0),this.mode===y.Raw?await this.loadDependencies(i):await this.loadAssets(i),this.initMock(i),this.apis=Pe(s,n,this.adapter),Q(i),Re(s,i),e.platform!=="uniapp"&&this.initRouter(),this.triggerReady()}initMock(e){const t=$(e);t&&t.setup({timeout:"50-500"})}async loadDependencies(e){const t=Object.entries(this.dependencies);for(const[s,n]of t)e[s]||(e[s]=this.library[s]=await n())}async loadAssets(e){const{dependencies:t=[]}=this.project,{dependencies:s,library:n,components:i,materialPath:a,nodeEnv:o}=this,{libraryExports:c,libraryMap:u,materials:h,materialExports:d,materialMapLibrary:g}=ue(t,a,o==="development");for(const m of c){const f=s[m],p=e[m];if(p)n[m]=p;else if(f)e[m]=n[m]=await f();else{const j=u[m]||[];for(const v of j)N(v)&&await de(m,l.url.append(v,{v:A})),U(v)&&await l.loadScript(l.url.append(v,{v:A}));n[m]=e[m]}}if(o==="development"){for(const f of h)await l.loadScript(l.url.append(f,{v:A}));const m=this.materials||{};for(const f of d){const p=e[g[f]],j=R.BUILT_IN_COMPONENTS[f];if(j)p&&j.forEach(v=>{i[v]=p[v]});else{const v=m[f]?(await m[f]()).default:e[f];v&&p&&(v.components||[]).forEach(E=>{i[E.name]=pe(E,p)})}}}}initRouter(){const{router:e,project:t,options:s,adapter:n}=this;if(!e)return;const i=t?.platform==="uniapp"?"pages":"page",{routeAppendTo:a,pageRouteName:o=i,routeMeta:c}=s,u=a?"":"/",h={path:`${u}${o}/:id`,name:C,component:se},d={path:u,name:k,component:t?.homepage?se:n.startupComponent||vt,meta:c};e.hasRoute(C)&&e.removeRoute(C),e.hasRoute(k)&&e.removeRoute(k),a?(e.addRoute(a,h),e.addRoute(a,d)):(e.addRoute(h),e.addRoute(d))}install(e){const t=e.config.globalProperties.installed||{};for(const[s,n]of Object.entries(this.library))!t[s]&&me(n)&&(e.use(n),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.$provider=this,e.config.globalProperties.installed=t,this.mode===y.Design&&(e.config.errorHandler=(s,n,i)=>{const a=n?.$options.name,o=typeof s=="string"?s:s?.message||s?.msg||"未知错误",c=`[ ${a} ] ${o} ${i}`;console.error("[VTJ Error]:",{err:s,instance:n,info:i},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=(n,i=[])=>{for(const a of i){if(a.id===n)return a;if(a.children&&a.children.length){const o=s(n,a.children);if(o)return o}}};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`]||this.modules[`/src/.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.adapter.request?this.urlDslCaches[e]=this.adapter.request.send({url:e,method:"get",settings:{validSuccess:!1,originResponse:!0}}).then(s=>s.data).catch(()=>null):null)}createDslRenderer(e,t={}){const{library:s,components:n,mode:i,apis:a}=this,o={mode:i,Vue:s.Vue,components:n,libs:s,apis:a,window,...t},c=x({getDsl:async u=>await this.getDsl(u)||null,getDslByUrl:async u=>await this.getDslByUrl(u)||null,options:o});return H({...o,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 n=`.vtj/vue/${e}.vue`,i=this.modules[n]||this.modules[`/src/pages/${e}.vue`];if(i)return(await i())?.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 S.defineAsyncComponent(async()=>{const s=await this.getDslByUrl(e);return s?(s.name=t||s.name,this.createDslRenderer(s).renderer):null})}definePluginComponent(e){return S.defineAsyncComponent(async()=>await Y(e,window))}}function yt(r){const e=new Te(r);return{provider:e,onReady:s=>e.ready(s)}}function ee(r={}){const e=S.inject(Z,null);if(!e)throw new Error("Can not find provider");if(e.nodeEnv==="development"){const{id:t,version:s}=r;t&&s&&(async()=>{const n=await e.getDsl(t);n?.__VERSION__!==s&&e.adapter.notify&&e.adapter.notify(`[ ${n?.name} ] 组件源码版本与运行时版本不一致,请重新发布组件`,"版本不一致","warning")})()}return e}const ke={type:"json",validSuccess:!0,originResponse:!1,failMessage:!0,validate:r=>r.data?.code===0},_t=(r,e="/__vtj__/api/:type.json")=>(t,s,n)=>r.send({url:e,method:"post",params:{type:t},query:n,data:{type:t,data:s},settings:ke}),St=(r,e="/__vtj__/api/uploader.json")=>async(t,s)=>await r.send({url:e,method:"post",data:{files:t,projectId:s},settings:{...ke,type:"data"}}).then(n=>n&&n[0]?n[0]:null).catch(()=>null);function wt(r){return l.createRequest({settings:{type:"json",validSuccess:!0,originResponse:!1,failMessage:!0,validate:e=>e.data?.code===0,showError:e=>{r&&r(e||"未知错误")}}})}class L{api;pluginCaches={};uploader;constructor(e=l.request){this.api=_t(e),this.uploader=St(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(i=>ce(i))[0];if(!s)return null;const n=this.pluginCaches[s];return n||(this.pluginCaches[s]=l.request.send({url:s,method:"get",settings:{validSuccess:!1,originResponse:!0}}).then(i=>i.data).catch(()=>null))}async genSource(e){return console.log("BaseService.genSource",e),""}}const _=new l.Storage({type:"local",expired:0,prefix:"__VTJ_"});class jt extends L{init(e){const t=new R.ProjectModel(e),s=_.get(`project_${t.id}`),n=Object.assign(t.toDsl(),s||{});return _.save(`project_${t.id}`,n),Promise.resolve(n)}saveProject(e){const t=new R.ProjectModel(e);return _.save(`project_${t.id}`,t.toDsl()),Promise.resolve(!0)}saveMaterials(e,t){return _.save(`materials_${e.id}`,l.mapToObject(t)),Promise.resolve(!0)}saveFile(e){return _.save(`file_${e.id}`,e),Promise.resolve(!0)}getFile(e){const t=_.get(`file_${e}`);return t?Promise.resolve(t):Promise.reject(null)}removeFile(e){return _.remove(`file_${e}`),Promise.resolve(!0)}saveHistory(e){return _.save(`history_${e.id}`,e),Promise.resolve(!0)}removeHistory(e){const t=_.get(`history_${e}`);if(t){const n=(t.items||[]).map(i=>i.id);this.removeHistoryItem(e,n),_.remove(`history_${e}`)}return Promise.resolve(!0)}getHistory(e){const t=_.get(`history_${e}`),s=new R.HistoryModel(t||{id:e});return Promise.resolve(s.toDsl())}getHistoryItem(e,t){const s=_.get(`history_${e}_${t}`);return Promise.resolve(s)}saveHistoryItem(e,t){return _.save(`history_${e}_${t.id}`,t),Promise.resolve(!0)}removeHistoryItem(e,t){return t.forEach(s=>{_.remove(`history_${e}_${s}`)}),Promise.resolve(!0)}}class Fe extends L{projects={};materials={};files={};histories={};historyItems={};init(e){const t=new R.ProjectModel(e),s=this.projects[t.id]||{},n=Object.assign(t.toDsl(),s);return this.projects[n.id]=n,Promise.resolve(n)}saveProject(e){const t=new R.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 n=(t.items||[]).map(i=>i.id);this.removeHistoryItem(e,n),delete this.historyItems[e]}return Promise.resolve(!0)}getHistory(e){const t=this.histories[e],s=new R.HistoryModel(t||{id:e});return Promise.resolve(s)}getHistoryItem(e,t){const s=`${e}_${t}`,n=this.historyItems[s]||{};return Promise.resolve(n)}saveHistoryItem(e,t){const s=`${e}_${t.id}`;return this.historyItems[s]=t,Promise.resolve(!0)}removeHistoryItem(e,t){return t.forEach(s=>{const n=`${e}_${s}`;delete this.historyItems[n]}),Promise.resolve(!0)}}let O=null;function Et(){return O||(O=new Fe,O)}class Pt 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(r,e,t=[]){return t.map(s=>{const{id:n,title:i,icon:a,children:o,hidden:c}=s;return{id:n,title:i,icon:a,hidden:c,url:`${r}/${e}/${n}`,children:o&&o.length?Oe(r,e,o):void 0}})}function De(r,e){if(!e)return r;let t=[];for(const s of r)if(s.children&&s.children.length){const n=De(s.children,e);n.length&&(s.children=n,t.push(s))}else e.can(s.id.toString())&&t.push(s);return t}function Rt(r){const{menuPathPrefix:e="",pageRouteName:t="page",disableMenusFilter:s=!1}=r||{},n=ee(),i=re.useRoute(),a=Se(),o=S.ref(!1),c=S.ref(!1),u=n.project;S.watchEffect(()=>{const{name:g,params:m,meta:f}=i;if(g===C){const p=n.getPage(m.id);o.value=!p?.mask,c.value=!!p?.pure}else if(g===k){const p=n.getHomepage();o.value=!p?.mask,c.value=!!p?.pure}else o.value=!f.mask,c.value=!!f.pure});const h=Oe(e,t,u?.pages),d=u?.config;return{disabled:o,logo:d?.logo,themeSwitchable:d?.themeSwitchable,title:d?.title||u?.description||u?.name||"VTJ App",menus:s?h:De(h,a),pure:c}}exports.ACCESS_KEY=W;exports.Access=_e;exports.BUILD_IN_TAGS=ae;exports.BUILT_IN_DIRECTIVES=ne;exports.BaseService=L;exports.CONTEXT_HOST=z;exports.Context=Ce;exports.ContextMode=y;exports.DATA_TYPES=ie;exports.HOMEPAGE_ROUTE_NAME=k;exports.HTML_TAGS=oe;exports.JSCodeToString=qe;exports.LIFE_CYCLES_LIST=Ne;exports.LocalService=Pt;exports.MemoryService=Fe;exports.NodeEnv=Ie;exports.PAGE_ROUTE_NAME=C;exports.Provider=Te;exports.StorageService=jt;exports.VTJ_RENDERER_VERSION=A;exports.adoptedStyleSheets=V;exports.clearLoaderCache=tt;exports.createAccess=we;exports.createAdapter=Ke;exports.createAssetScripts=Ue;exports.createAssetsCss=Le;exports.createDataSources=$e;exports.createLoader=x;exports.createMemoryService=Et;exports.createMetaApi=Ee;exports.createMock=be;exports.createProvider=yt;exports.createRenderer=H;exports.createSchemaApi=je;exports.createSchemaApis=Pe;exports.createServiceRequest=wt;exports.defaultLoader=Me;exports.fillBasePath=T;exports.getMock=$;exports.getModifiers=X;exports.getPlugin=Y;exports.getRawComponent=pe;exports.isBuiltInTag=ge;exports.isCSSUrl=N;exports.isJSCode=ye;exports.isJSExpression=w;exports.isJSFunction=I;exports.isJSON=ce;exports.isJSUrl=U;exports.isNativeTag=ve;exports.isVuePlugin=me;exports.loadCss=de;exports.loadCssUrl=fe;exports.loadScriptUrl=he;exports.mockApi=Ae;exports.mockApis=Re;exports.mockCleanup=Q;exports.nodeRender=F;exports.parseDeps=ue;exports.parseExpression=M;exports.parseFunction=D;exports.providerKey=Z;exports.removeProdFlag=le;exports.setupPageSetting=Je;exports.toString=G;exports.useAccess=Se;exports.useMask=Rt;exports.useProvider=ee;
|
package/dist/index.mjs
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import { Base as Ae, BUILT_IN_COMPONENTS as Ce, ProjectModel as T, HistoryModel as ce } from "@vtj/core";
|
2
|
-
import { isUrl as Fe, url as b, dedupArray as
|
2
|
+
import { isUrl as Fe, url as b, dedupArray as Ie, isString as $, isFunction as J, logger as P, storage as N, cookie as U, toArray as se, unRSA as re, delay as le, createRequest as ue, jsonp as pe, merge as ke, pathToRegexp as Me, pathToRegexpMatch as Oe, formDataToJson as He, camelCase as E, upperFirst as Te, pick as De, request as q, loadScript as ne, Storage as xe, mapToObject as X } from "@vtj/utils";
|
3
3
|
import * as x from "vue";
|
4
4
|
import { inject as de, defineComponent as fe, h as z, ref as K, defineAsyncComponent as ie, watchEffect as Be } from "vue";
|
5
5
|
import { useRoute as he } from "vue-router";
|
@@ -7,10 +7,10 @@ import { useRoute as he } from "vue-router";
|
|
7
7
|
* Copyright (c) 2025, VTJ.PRO All rights reserved.
|
8
8
|
* @name @vtj/renderer
|
9
9
|
* @author CHC chenhuachun1549@dingtalk.com
|
10
|
-
* @version 0.10.
|
10
|
+
* @version 0.10.15
|
11
11
|
* @license <a href="https://vtj.pro/license.html">MIT License</a>
|
12
12
|
*/
|
13
|
-
const A = "0.10.
|
13
|
+
const A = "0.10.15";
|
14
14
|
var y = /* @__PURE__ */ ((r) => (r.Runtime = "Runtime", r.Design = "Design", r.Raw = "Raw", r.VNode = "VNode", r))(y || {});
|
15
15
|
const oe = [
|
16
16
|
"$el",
|
@@ -94,7 +94,7 @@ function Ke(r, e, t = !1) {
|
|
94
94
|
css: M(i, e),
|
95
95
|
materials: M(a, e),
|
96
96
|
libraryExports: o,
|
97
|
-
materialExports:
|
97
|
+
materialExports: Ie(f),
|
98
98
|
materialMapLibrary: p,
|
99
99
|
libraryMap: c,
|
100
100
|
libraryLocaleMap: l
|
@@ -169,7 +169,7 @@ function Qt(r, e, t) {
|
|
169
169
|
const s = r?._container;
|
170
170
|
t?.type === "page" && s.classList.add("is-page"), t?.pure && s.classList.add("is-pure");
|
171
171
|
}
|
172
|
-
function
|
172
|
+
function I(r, e, t = !1, s = !1) {
|
173
173
|
try {
|
174
174
|
const n = ['"use strict";', "var __self = arguments[0];"];
|
175
175
|
n.push("return ");
|
@@ -179,13 +179,13 @@ function k(r, e, t = !1, s = !1) {
|
|
179
179
|
const a = `with(${t ? "{}" : "$scope || {}"}) { ${i} }`;
|
180
180
|
return new Function("$scope", a)(e);
|
181
181
|
} catch (n) {
|
182
|
-
if (
|
182
|
+
if (P.error("parseExpression.error", n, r, e?.__self ?? e), s)
|
183
183
|
throw n;
|
184
184
|
}
|
185
185
|
}
|
186
186
|
function G(r, e, t = !1, s = !1) {
|
187
|
-
const n =
|
188
|
-
if (typeof n != "function" && (
|
187
|
+
const n = I(r, e, t, s);
|
188
|
+
if (typeof n != "function" && (P.error(
|
189
189
|
"parseFunction.error",
|
190
190
|
"not a function",
|
191
191
|
r,
|
@@ -197,11 +197,11 @@ function G(r, e, t = !1, s = !1) {
|
|
197
197
|
function _(r) {
|
198
198
|
return r && r.type === "JSExpression";
|
199
199
|
}
|
200
|
-
function
|
200
|
+
function k(r) {
|
201
201
|
return typeof r == "object" && r && r.type === "JSFunction";
|
202
202
|
}
|
203
203
|
function et(r) {
|
204
|
-
return _(r) ||
|
204
|
+
return _(r) || k(r);
|
205
205
|
}
|
206
206
|
function Xt(r) {
|
207
207
|
return et(r) ? r.value : JSON.stringify(r);
|
@@ -223,9 +223,16 @@ class st {
|
|
223
223
|
options;
|
224
224
|
data = null;
|
225
225
|
mode = y.Raw;
|
226
|
+
interceptResponse = !0;
|
226
227
|
constructor(e) {
|
227
228
|
this.options = Object.assign({}, tt, e), this.loadData();
|
228
229
|
}
|
230
|
+
enableIntercept() {
|
231
|
+
this.interceptResponse = !0;
|
232
|
+
}
|
233
|
+
disableIntercept() {
|
234
|
+
this.interceptResponse = !1;
|
235
|
+
}
|
229
236
|
connect(e) {
|
230
237
|
const { mode: t, router: s, request: n } = e;
|
231
238
|
this.mode = t, s && this.mode === y.Raw && this.setGuard(s), n && this.setRequest(n);
|
@@ -352,8 +359,9 @@ class st {
|
|
352
359
|
}
|
353
360
|
setRequest(e) {
|
354
361
|
e.useRequest((t) => (this.data?.token && (t.headers[this.options.authKey] = this.data?.token), t)), e.useResponse(
|
355
|
-
async (t) => (await this.showUnauthorizedAlert(t), t),
|
362
|
+
async (t) => (this.interceptResponse && await this.showUnauthorizedAlert(t), t),
|
356
363
|
async (t) => {
|
364
|
+
if (!this.interceptResponse) return Promise.reject(t);
|
357
365
|
const s = t.response || t || {};
|
358
366
|
return await this.showUnauthorizedAlert(s), Promise.reject(t);
|
359
367
|
}
|
@@ -418,7 +426,7 @@ function it(r, e) {
|
|
418
426
|
query: n
|
419
427
|
});
|
420
428
|
{
|
421
|
-
const n = r.headers ?
|
429
|
+
const n = r.headers ? I(r.headers, {}, !0) : void 0, i = {
|
422
430
|
url: r.url,
|
423
431
|
method: r.method,
|
424
432
|
settings: {
|
@@ -426,7 +434,7 @@ function it(r, e) {
|
|
426
434
|
headers: n
|
427
435
|
}
|
428
436
|
};
|
429
|
-
return (a, o) => (delete i.data, s.send(
|
437
|
+
return (a, o) => (delete i.data, s.send(ke(i, o || {}, { data: a })));
|
430
438
|
}
|
431
439
|
}
|
432
440
|
function ot(r, e) {
|
@@ -454,14 +462,14 @@ async function ct(r = [], e = window) {
|
|
454
462
|
t && (ye(e), r.forEach((s) => ut(t, s)));
|
455
463
|
}
|
456
464
|
function lt(r, e = window) {
|
457
|
-
const t =
|
465
|
+
const t = k(r.mockTemplate) && r.mockTemplate.value ? G(r.mockTemplate, {}, !0) : void 0, s = F(e);
|
458
466
|
return async (...n) => {
|
459
467
|
let i = {};
|
460
468
|
if (t)
|
461
469
|
try {
|
462
470
|
i = await t.apply(t, n);
|
463
471
|
} catch (a) {
|
464
|
-
|
472
|
+
P.warn("模拟数据模版异常", a);
|
465
473
|
}
|
466
474
|
return s?.mock(i);
|
467
475
|
};
|
@@ -470,7 +478,7 @@ function ut(r, e) {
|
|
470
478
|
if (!e.mock) return;
|
471
479
|
const { url: t, mockTemplate: s } = e;
|
472
480
|
if (t && s) {
|
473
|
-
const n = Me(`${t}(.*)`), i = Oe(t, { decode: decodeURIComponent }), a =
|
481
|
+
const n = Me(`${t}(.*)`), i = Oe(t, { decode: decodeURIComponent }), a = I(s, {}, !0);
|
474
482
|
r.mock(n, (o) => {
|
475
483
|
const c = b.parse(o.url) || {}, l = o.body instanceof FormData ? He(o.body) : o.body, f = i(o.url)?.params;
|
476
484
|
return Object.assign(o, { data: l, params: c, query: f }), r.mock(a(o));
|
@@ -548,9 +556,9 @@ class pt {
|
|
548
556
|
if (e)
|
549
557
|
if (this.__mode === y.Runtime) {
|
550
558
|
const { id: t, type: s } = e, n = t ? this.__transform[t] ?? e.value : e.value;
|
551
|
-
return
|
559
|
+
return I({ type: s, value: n }, this);
|
552
560
|
} else
|
553
|
-
return
|
561
|
+
return I(e, this);
|
554
562
|
}
|
555
563
|
__ref(e = null, t) {
|
556
564
|
if (this.__mode !== y.VNode)
|
@@ -660,7 +668,7 @@ function ht(r, e, t) {
|
|
660
668
|
Object.keys(e || {}).reduce(
|
661
669
|
(s, n) => {
|
662
670
|
let i = e[n];
|
663
|
-
return _(i) ? i = t.__parseExpression(i) :
|
671
|
+
return _(i) ? i = t.__parseExpression(i) : k(i) && (i = t.__parseFunction(i)), s[n] = i, s;
|
664
672
|
},
|
665
673
|
{}
|
666
674
|
)
|
@@ -696,7 +704,7 @@ function yt(r, e) {
|
|
696
704
|
if (n.type === "mock")
|
697
705
|
t[s] = lt(n);
|
698
706
|
else if (n.ref) {
|
699
|
-
const i = e.$apis[n.ref], a =
|
707
|
+
const i = e.$apis[n.ref], a = k(n.transform) ? n.transform.value ? e.__parseFunction(n.transform) : void 0 : n.transform;
|
700
708
|
t[s] = async (...o) => {
|
701
709
|
const c = await i.apply(e, o);
|
702
710
|
return a ? a(c) : c;
|
@@ -725,7 +733,7 @@ function wt(r, e) {
|
|
725
733
|
{}
|
726
734
|
);
|
727
735
|
}
|
728
|
-
let L = [],
|
736
|
+
let L = [], R = {};
|
729
737
|
const St = (r) => r;
|
730
738
|
async function _e(r, e = window) {
|
731
739
|
const { urls: t = [], library: s } = r, n = t.filter((o) => Z(o));
|
@@ -742,8 +750,8 @@ function W(r) {
|
|
742
750
|
}), L = []), (n, i, a = x) => {
|
743
751
|
if (!i || typeof i == "string") return n;
|
744
752
|
if (i.type === "Schema" && i.id) {
|
745
|
-
let o =
|
746
|
-
return o || (o =
|
753
|
+
let o = R[i.id];
|
754
|
+
return o || (o = R[i.id] = a.defineAsyncComponent(async () => {
|
747
755
|
const c = await e(i.id);
|
748
756
|
return c && (c.name = n), c ? V({
|
749
757
|
...s,
|
@@ -755,8 +763,8 @@ function W(r) {
|
|
755
763
|
}), o);
|
756
764
|
}
|
757
765
|
if (i.type === "UrlSchema" && i.url) {
|
758
|
-
let o =
|
759
|
-
return o || (o =
|
766
|
+
let o = R[i.url];
|
767
|
+
return o || (o = R[i.url] = a.defineAsyncComponent(async () => {
|
760
768
|
const c = await t(i.url);
|
761
769
|
return c && (c.name = n), c ? V({
|
762
770
|
...s,
|
@@ -768,8 +776,8 @@ function W(r) {
|
|
768
776
|
}), o);
|
769
777
|
}
|
770
778
|
if (i.type === "Plugin") {
|
771
|
-
let o = i.library ?
|
772
|
-
return o || (i.library && L.push(i.library), o =
|
779
|
+
let o = i.library ? R[i.library] : null;
|
780
|
+
return o || (i.library && L.push(i.library), o = R[i.library || Symbol()] = a.defineAsyncComponent(
|
773
781
|
async () => {
|
774
782
|
const c = await _e(i, s.window);
|
775
783
|
return c || (console.warn("getPlugin result is null", i), null);
|
@@ -780,7 +788,7 @@ function W(r) {
|
|
780
788
|
};
|
781
789
|
}
|
782
790
|
function Zt() {
|
783
|
-
|
791
|
+
R = {};
|
784
792
|
}
|
785
793
|
function D(r, e, t = x, s = St) {
|
786
794
|
if (!r || !r.name || r.invisible) return null;
|
@@ -790,27 +798,27 @@ function D(r, e, t = x, s = St) {
|
|
790
798
|
const d = (u) => {
|
791
799
|
const w = u.$components, g = (() => {
|
792
800
|
if (r.name === "component")
|
793
|
-
return
|
801
|
+
return Rt(u, r.props?.is);
|
794
802
|
if (r.name === "slot") return r.name;
|
795
803
|
const j = s(r.name, r.from, t);
|
796
804
|
return $(j) ? Ye(j) || Ze(j) ? j : w[j] ?? n?.app?.component(j) ?? j : j;
|
797
|
-
})(), S = bt(i, r.props ?? {}, u), be =
|
805
|
+
})(), S = bt(i, r.props ?? {}, u), be = Pt(t, r.events ?? {}, u);
|
798
806
|
if (r.name === "slot")
|
799
807
|
return At(t, r, S, u, s);
|
800
808
|
p && Object.assign(S, u.__parseExpression(p.value)), l && (S.style = Object.assign(
|
801
809
|
S.style ?? {},
|
802
810
|
Ft(l, u)
|
803
|
-
)), m && Object.assign(S,
|
804
|
-
Object.assign(S,
|
811
|
+
)), m && Object.assign(S, It(m, u)), f.forEach((j) => {
|
812
|
+
Object.assign(S, kt(t, j, u));
|
805
813
|
});
|
806
|
-
const
|
814
|
+
const Pe = Mt(
|
807
815
|
t,
|
808
816
|
r.children ?? [],
|
809
817
|
u,
|
810
818
|
s,
|
811
819
|
r
|
812
820
|
);
|
813
|
-
let B = t.createVNode(g, { ...S, ...be },
|
821
|
+
let B = t.createVNode(g, { ...S, ...be }, Pe);
|
814
822
|
const te = n ? jt(n, h, u) : [];
|
815
823
|
return te.length && (B = t.withDirectives(B, te)), B;
|
816
824
|
};
|
@@ -844,7 +852,7 @@ function $t(r = []) {
|
|
844
852
|
function Et(r, e) {
|
845
853
|
return !!e.__parseExpression(r.value);
|
846
854
|
}
|
847
|
-
function
|
855
|
+
function Rt(r, e) {
|
848
856
|
return e ? _(e) ? r.__parseExpression(e) : e : "div";
|
849
857
|
}
|
850
858
|
function bt(r, e, t) {
|
@@ -852,7 +860,7 @@ function bt(r, e, t) {
|
|
852
860
|
return s.ref = t.__ref(r, s.ref), s;
|
853
861
|
}
|
854
862
|
function Q(r, e) {
|
855
|
-
return _(r) ? e.__parseExpression(r) :
|
863
|
+
return _(r) ? e.__parseExpression(r) : k(r) ? e.__parseFunction(r) : Array.isArray(r) ? r.map((t) => Q(t, e)) : typeof r == "object" ? Object.keys(r || {}).reduce(
|
856
864
|
(t, s) => {
|
857
865
|
let n = r[s];
|
858
866
|
return t[s] = Q(n, e), t;
|
@@ -860,7 +868,7 @@ function Q(r, e) {
|
|
860
868
|
{}
|
861
869
|
) : r;
|
862
870
|
}
|
863
|
-
function
|
871
|
+
function Pt(r, e, t) {
|
864
872
|
const s = ["passive", "capture", "once"], n = {
|
865
873
|
capture: "Capture",
|
866
874
|
once: "Once",
|
@@ -898,12 +906,12 @@ function Ft(r, e) {
|
|
898
906
|
display: "none"
|
899
907
|
};
|
900
908
|
}
|
901
|
-
function
|
909
|
+
function It(r, e) {
|
902
910
|
return {
|
903
911
|
innerHTML: e.__parseExpression(r.value) || ""
|
904
912
|
};
|
905
913
|
}
|
906
|
-
function
|
914
|
+
function kt(r, e, t) {
|
907
915
|
const s = {
|
908
916
|
type: "JSFunction",
|
909
917
|
value: e.value?.value ? `(v) => {
|
@@ -1038,7 +1046,7 @@ class Bt extends Ae {
|
|
1038
1046
|
try {
|
1039
1047
|
s = await e.apply(e, t);
|
1040
1048
|
} catch (i) {
|
1041
|
-
|
1049
|
+
P.warn("模拟数据模版异常", i);
|
1042
1050
|
}
|
1043
1051
|
return F()?.mock(s);
|
1044
1052
|
};
|
@@ -1202,13 +1210,13 @@ class Bt extends Ae {
|
|
1202
1210
|
async getRenderComponent(e, t) {
|
1203
1211
|
const s = this.getFile(e);
|
1204
1212
|
if (!s)
|
1205
|
-
return
|
1213
|
+
return P.warn(`Can not find file: ${e}`), null;
|
1206
1214
|
t && t(s);
|
1207
1215
|
const n = `.vtj/vue/${e}.vue`, i = this.modules[n] || this.modules[`/src/pages/${e}.vue`];
|
1208
1216
|
if (i)
|
1209
1217
|
return (await i())?.default;
|
1210
1218
|
const a = await this.getDsl(s.id);
|
1211
|
-
return a ? this.createDslRenderer(a).renderer : (
|
1219
|
+
return a ? this.createDslRenderer(a).renderer : (P.warn(`Can not find dsl: ${e}`), null);
|
1212
1220
|
}
|
1213
1221
|
defineUrlSchemaComponent(e, t) {
|
1214
1222
|
return ie(async () => {
|
@@ -1568,12 +1576,12 @@ function Ee(r, e, t = []) {
|
|
1568
1576
|
};
|
1569
1577
|
});
|
1570
1578
|
}
|
1571
|
-
function
|
1579
|
+
function Re(r, e) {
|
1572
1580
|
if (!e) return r;
|
1573
1581
|
let t = [];
|
1574
1582
|
for (const s of r)
|
1575
1583
|
if (s.children && s.children.length) {
|
1576
|
-
const n =
|
1584
|
+
const n = Re(s.children, e);
|
1577
1585
|
n.length && (s.children = n, t.push(s));
|
1578
1586
|
} else
|
1579
1587
|
e.can(s.id.toString()) && t.push(s);
|
@@ -1606,7 +1614,7 @@ function is(r) {
|
|
1606
1614
|
logo: p?.logo,
|
1607
1615
|
themeSwitchable: p?.themeSwitchable,
|
1608
1616
|
title: p?.title || l?.description || l?.name || "VTJ App",
|
1609
|
-
menus: s ? f :
|
1617
|
+
menus: s ? f : Re(f, a),
|
1610
1618
|
pure: c
|
1611
1619
|
};
|
1612
1620
|
}
|
@@ -1657,7 +1665,7 @@ export {
|
|
1657
1665
|
Y as isCSSUrl,
|
1658
1666
|
et as isJSCode,
|
1659
1667
|
_ as isJSExpression,
|
1660
|
-
|
1668
|
+
k as isJSFunction,
|
1661
1669
|
qe as isJSON,
|
1662
1670
|
Z as isJSUrl,
|
1663
1671
|
Ze as isNativeTag,
|
@@ -1670,7 +1678,7 @@ export {
|
|
1670
1678
|
ye as mockCleanup,
|
1671
1679
|
D as nodeRender,
|
1672
1680
|
Ke as parseDeps,
|
1673
|
-
|
1681
|
+
I as parseExpression,
|
1674
1682
|
G as parseFunction,
|
1675
1683
|
Se as providerKey,
|
1676
1684
|
ze as removeProdFlag,
|
package/package.json
CHANGED
@@ -1,18 +1,35 @@
|
|
1
1
|
{
|
2
2
|
"name": "@vtj/renderer",
|
3
3
|
"private": false,
|
4
|
-
"version": "0.10.
|
4
|
+
"version": "0.10.15",
|
5
5
|
"type": "module",
|
6
|
+
"keywords": [
|
7
|
+
"低代码引擎",
|
8
|
+
"LowCode Engine",
|
9
|
+
"Vue3低代码",
|
10
|
+
"低代码渲染器",
|
11
|
+
"低代码设计器",
|
12
|
+
"代码生成器",
|
13
|
+
"代码可视化"
|
14
|
+
],
|
15
|
+
"description": "VTJ 是一款基于 Vue3 + Typescript 的低代码页面可视化设计器。内置低代码引擎、渲染器和代码生成器,面向前端开发者,开箱即用。 无缝嵌入本地开发工程,不改变前端开发流程和编码习惯。",
|
16
|
+
"repository": {
|
17
|
+
"type": "git",
|
18
|
+
"url": "https://gitee.com/newgateway/vtj.git"
|
19
|
+
},
|
20
|
+
"homepage": "https://gitee.com/newgateway/vtj",
|
21
|
+
"author": "chenhuachun",
|
22
|
+
"license": "MIT",
|
6
23
|
"dependencies": {
|
7
|
-
"@vtj/core": "~0.10.
|
8
|
-
"@vtj/utils": "~0.10.
|
24
|
+
"@vtj/core": "~0.10.15",
|
25
|
+
"@vtj/utils": "~0.10.15"
|
9
26
|
},
|
10
27
|
"devDependencies": {
|
11
28
|
"vue": "~3.5.5",
|
12
29
|
"vue-router": "~4.5.0",
|
13
|
-
"@vtj/cli": "~0.10.
|
14
|
-
"@vtj/
|
15
|
-
"@vtj/
|
30
|
+
"@vtj/cli": "~0.10.4",
|
31
|
+
"@vtj/ui": "~0.10.15",
|
32
|
+
"@vtj/icons": "~0.10.15"
|
16
33
|
},
|
17
34
|
"exports": {
|
18
35
|
".": {
|
@@ -92,7 +92,10 @@ export declare class Access {
|
|
92
92
|
options: AccessOptions;
|
93
93
|
private data;
|
94
94
|
private mode?;
|
95
|
+
private interceptResponse;
|
95
96
|
constructor(options: Partial<AccessOptions>);
|
97
|
+
enableIntercept(): void;
|
98
|
+
disableIntercept(): void;
|
96
99
|
connect(params: AccessConnectParams): void;
|
97
100
|
login(data: AccessData | string | string[]): void;
|
98
101
|
clear(): void;
|
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.10.
|
5
|
+
* @version 0.10.14
|
6
6
|
* @license <a href="https://vtj.pro/license.html">MIT License</a>
|
7
7
|
*/
|
8
|
-
export declare const version = "0.10.
|
8
|
+
export declare const version = "0.10.14";
|
@@ -1,13 +0,0 @@
|
|
1
|
-
import { DefineComponent, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
|
2
|
-
export interface Props {
|
3
|
-
name?: string;
|
4
|
-
tagline?: string;
|
5
|
-
actionText?: string;
|
6
|
-
link?: string | (() => void);
|
7
|
-
}
|
8
|
-
declare const _default: DefineComponent<Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<Props> & Readonly<{}>, {
|
9
|
-
name: string;
|
10
|
-
tagline: string;
|
11
|
-
actionText: string;
|
12
|
-
}, {}, {}, {}, string, ComponentProvideOptions, false, {}, HTMLDivElement>;
|
13
|
-
export default _default;
|