UNPKG

uni-render-logic

Version:

uni-app renderjs 逻辑层和视图层跨层调用 mixin

13 lines (9 loc) 2.3 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var vue = require('vue'); var i=t=>{let e=Math.random().toString(16).slice(2,t+2),s=t-e.length;return s?`${e}${i(s)}`:e};var a=vue.defineComponent({data(){return {jobMap:new Map}},methods:{createId:()=>`id_${i(8)}`,dispatchJob(t){t.forEach(e=>{let{id:s,status:r}=e;this.jobMap.has(s)||r!=="init"||(this.jobMap.set(s,e),this.handleJob(e));});},async handleJob(t){let{key:e,params:s}=t;if(!(e in this)){t.status="fail",t.message="job key error",this.emitJob(t);return}if(typeof this[e]=="function"){try{let r=await this[e](s);t.status="success",t.data=r,this.emitJob(t);}catch(r){t.status="fail",t.message=r.message,this.emitJob(t);}return}this[e]=s,t.status="success",this.emitJob(t);},emitJob(t){this.$ownerInstance&&(this.jobMap.delete(t.id),this.$ownerInstance.callMethod("receiveJob",t));},emitEvent(...t){this.$ownerInstance&&this.$ownerInstance.callMethod("receiveEvent",t);},emitData(...t){this.$ownerInstance&&this.$ownerInstance.callMethod("receiveData",t);},emitMethod(...t){this.$ownerInstance&&this.$ownerInstance.callMethod("receiveMethod",t);}}});var c=vue.defineComponent({data(){return {jobs:[]}},methods:{createId:()=>`id_${i(8)}`,createJob(t,e){let s=this.createId();return vue.ref({id:s,key:t,status:"init",message:"",data:void 0,params:e})},removeJob(t){let e=this.jobs.findIndex(s=>s.id===t);e!==-1&&this.jobs.splice(e,1);},addJob(t,e){let s=this.createJob(t,e);return this.jobs.push(s.value),new Promise((r,d)=>{vue.watch(()=>s.value.status,()=>{let{status:n,id:o,message:h,key:u,data:m}=s.value;if(n!=="init"){if(n==="success"){this.removeJob(o),r(m);return}if(n==="fail"){this.removeJob(o),d(new Error(`${u} failed: [${h}]`));return}}});})},receiveJob(t){let e=this.jobs.find(s=>s.id===t.id);e&&(e.data=t.data,e.message=t.message,e.status=t.status);},receiveEvent(t){this.$emit(...t);},receiveData(t){let[e,s]=t;if(e in this){this[e]=s;return}throw new Error(`${e} is not a property`)},receiveMethod(t){let[e,...s]=t;if(e in this&&typeof this[e]=="function"){this[e](...s);return}throw new Error(`${e} is not a function`)}}});var E={logicMixin:a,renderMixin:c}; exports.default = E; exports.logicMixin = a; exports.renderMixin = c; //# sourceMappingURL=out.js.map //# sourceMappingURL=index.js.map