@chase-shao/vue-component-lib 1.2.3 → 1.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),M=require("axios"),K=require("pinia"),z=require("vue-router"),q=K.defineStore("main",()=>({token:e.ref(void 0)})),G=async t=>new Promise(a=>setTimeout(a,t)),J=async(t,a,o,n=void 0)=>{if(t[a]===void 0)try{t[a]=null,t[a]=await o()||n}catch(l){console.error(l),t[a]=void 0}for(;t[a]===null;)await G(100);return t[a]},D="",Q="",L=M.create({baseURL:D,timeout:1e4,headers:{"Content-Type":"application/json"}}),X=async()=>{const t=q();return await J(t,"token",async()=>(await L.get(`${D}/GenerateToken`,{params:{appid:"bpm",appsecret:Q}}))?.data?.token)},h=async()=>{const t=await X();return L.defaults.headers.common.Authorization=`Bearer ${t}`,L},x={CurrentUserEmail:()=>"test.email@dataGetter.ts",CurrentUserPositionCode:()=>888,CurrentDatetime:()=>new Date().toISOString(),ApproverEmail:()=>"test.approver@sanofi.com",ApproverPositionCode:()=>999,RejectReason:()=>"Test Reject Reason"};var B=(t=>(t[t.Create=0]="Create",t[t.Update=1]="Update",t[t.Details=2]="Details",t[t.list=3]="list",t))(B||{});function Y(t){const a={pageType:"",fields:{},globalValidations:[]};return t.__ClassAttributes?.forEach(o=>{o.AttributeType==="UIPageType"?a.pageType=o.Type:o.AttributeType==="UIValidationControl"?a.globalValidations.push({rule:o.RuleName,param:o.RuleParameter,appliesTo:o.PropertyNames||["*"]}):o.AttributeType==="UIControl"&&(a.actions||(a.actions=[]),a.actions.push({isSubmit:o.IsSubmit,requestUrl:o.RequestUrl,redirectUrl:o.RedirectUrl,redirectType:o.RedirectType,title:o.Title,widget:o.Widget}))}),Object.entries(t).forEach(([o,n])=>{if(o==="__ClassAttributes"||o==="ClassName")return;const l={validations:[]},{attributes:d,propertyValue:i}=n;switch(i){case null:l.value="";break;case void 0:l.value="";break;default:l.value=i;break}d?.forEach(r=>{r.order||r.Order?l.order=r.order??r.Order:r.AttributeType==="UIControl"?l.widget={...r,column:!0}:r.AttributeType==="UIValidationControl"?l.validations.push(r):r.AttributeType==="UIListed"?l.widget={...r,column:!0}:r.DependentType&&(l.value=x[r.DependentType]?x[r.DependentType]():"")}),a.fields[o]=l}),a}const S=async(t,a)=>{const n=await(await h()).get(`/General/${t}/page`,{params:a});return Y(n?.data)};async function Z(t,a){const n=await(await h()).get(`/General/${t}/list`,{params:a});return{data:n.data.Data.propertyValue.data,totalCount:n.data.Data.propertyValue.totalCount,actions:n.data.__ClassAttributes.filter(l=>l.AttributeType==="UIControl").map(l=>({redirectUrl:l.RedirectUrl,location:l.Location,attributeType:l.AttributeType,redirectType:l.RedirectType,readonly:l.Readonly,widget:l.Widget,title:l.Title,isSubmit:l.IsSubmit}))}}async function ee(t,a,o){const l=await(await h()).post(o,a,{params:{className:t}});return l.data.length>0?l.data[0]:0}function te(t,a){return t.replace(/{workflowId}/g,a)}async function oe(t,a,o,n){const l=await h(),d=te(n,a);return(await l.put(d,o,{params:{className:t}}))?.data}function ne(t,a){return t.replace(/{WorkflowId}/g,a)}function ae(t,a){return t.replace(/{ApproverEmail}/g,a)}function le(t,a){return t.replace(/{WorkFlowReason}/g,a)}async function re(t,a,o,n,l,d){const i=await h();let r=ne(d,a);return r=ae(r,o),r=le(r,n),(await i.put(r,l,{params:{className:t}}))?.data}async function se(t,a){return((await(await h()).get(t,{params:{value:a}}))?.data).map(d=>({value:d.key,label:d.value}))}const ie=(t,a)=>t.reduce((o,n)=>o&&ce(n,a),!0),ce=(t,a)=>{const{RuleName:o,RuleParameter:n}=t;return ue[o](n,a)},ue={Regex:(t,a)=>new RegExp(t).test(a)},T=e.defineComponent({__name:"InputText",props:{modelValue:{},config:{},readonly:{type:Boolean},validations:{}},emits:["update:modelValue","change","error","input"],setup(t,{emit:a}){const o=t,n=a,l=r=>ie(o.validations,r),d=r=>{n("update:modelValue",r),n("input",r)},i=r=>{const s=l(r);n("update:modelValue",r),n("change",r),n("error",s?"":"Validation Error")};return(r,s)=>{const u=e.resolveComponent("AInput");return e.openBlock(),e.createBlock(u,{"model-value":o.modelValue,clearable:"",disabled:o.readonly||o.config.Readonly,onInput:d,onChange:i},null,8,["model-value","disabled"])}}}),de=e.defineComponent({__name:"InputNumber",props:{modelValue:{},config:{},readonly:{type:Boolean},validations:{}},emits:["update:modelValue","change","error","input"],setup(t,{emit:a}){const o=t,n=a,l=e.ref(100),d=e.ref(0);e.onMounted(()=>{o.validations&&o.validations.forEach(s=>{s.RuleName==="Max"&&(l.value=s.RuleParameter),s.RuleName==="Min"&&(d.value=s.RuleParameter)})});const i=s=>{n("update:modelValue",s),n("input",s)},r=s=>{n("update:modelValue",s),n("change",s)};return(s,u)=>{const c=e.resolveComponent("AInputNumber");return e.openBlock(),e.createBlock(c,{"model-value":o.modelValue,clearable:"",disabled:o.readonly,min:d.value,max:l.value,onInput:i,onChange:r},null,8,["model-value","disabled","min","max"])}}}),E=e.defineComponent({__name:"SelectList",props:{modelValue:{},config:{}},emits:["update:modelValue","change"],setup(t,{emit:a}){const o=t,n=a,l=e.ref(!1),d=e.ref(o.config.options??[]),i=async()=>{d.value=await se(o.config.DataSourceProvider)};e.onMounted(i);const r=s=>{n("update:modelValue",s),n("change",s)};return(s,u)=>{const c=e.resolveComponent("AOption"),f=e.resolveComponent("ASelect");return e.openBlock(),e.createBlock(f,{"model-value":s.modelValue,loading:l.value,"filter-option":!0,"allow-search":!0,onChange:r},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,p=>(e.openBlock(),e.createBlock(c,{key:p.value,value:p.value,label:p.label},null,8,["value","label"]))),128))]),_:1},8,["model-value","loading"])}}}),pe=e.defineComponent({__name:"Cascader",props:{modelValue:{},config:{}},emits:["update:modelValue","change"],setup(t,{emit:a}){const o=t,n=a,l=e.ref(o.config.options??[]),d=r=>{n("update:modelValue",r),n("change",r)};e.onMounted(async()=>{if(o.config){const r=o.config.DataSourceProvider;if(r){const u=await(await h()).get(r);l.value=u.data}}});const i={value:"key",label:"value"};return(r,s)=>{const u=e.resolveComponent("ACascader"),c=e.resolveComponent("ASpace");return e.openBlock(),e.createBlock(c,{direction:"vertical",size:"large"},{default:e.withCtx(()=>[e.createVNode(u,{"field-names":i,"model-value":r.modelValue,options:l.value,style:{width:"320px"},placeholder:"Please select ...",onChange:d},null,8,["model-value","options"])]),_:1})}}}),me=e.defineComponent({__name:"FileUpload",props:{config:{}},emits:["update:modelValue","change"],setup(t,{expose:a,emit:o}){const n=t,l=o,d="",i=e.ref(null),r=e.ref(0),s=e.ref([]);function u(p,m){return p.replace(/{WorkflowId}/g,m)}const c=e.computed(()=>{if(n.config.UploadURL){const p=d+n.config.UploadURL;return u(p,r.value.toString())}return""}),f=p=>{l("change",p)};return a({submit(p){console.log("🚀 ~ submit ~ workflowId:",p),i.value&&(n.config.UploadURL&&(r.value=p),e.nextTick(()=>{i.value.submit()}))}}),(p,m)=>{const v=e.resolveComponent("a-upload");return e.openBlock(),e.createBlock(v,{ref_key:"uploadRef",ref:i,modelValue:s.value,"onUpdate:modelValue":m[0]||(m[0]=b=>s.value=b),"auto-upload":!1,action:c.value,onChange:f},{"start-icon":e.withCtx(()=>m[1]||(m[1]=[])),_:1},8,["modelValue","action"])}}}),fe=e.defineComponent({__name:"TextArea",props:{modelValue:{},config:{},readonly:{type:Boolean},validations:{}},emits:["update:modelValue","change","error","input"],setup(t,{emit:a}){const o=t,n=a,l=i=>{n("update:modelValue",i),n("input",i)},d=i=>{n("update:modelValue",i),n("change",i)};return(i,r)=>{const s=e.resolveComponent("ATextarea");return e.openBlock(),e.createBlock(s,{"model-value":o.modelValue,placeholder:"Please enter something","allow-clear":"",disabled:o.readonly,onInput:l,onChange:d},null,8,["model-value","disabled"])}}}),ge={class:"widget-wrapper"},ve={class:"title mb-1.5"},_e={class:"form-widget"},ke={class:"widget"},we={key:0,class:"err-msg"},he=e.defineComponent({__name:"index",props:{config:{},modelValue:{},readonly:{type:Boolean},validations:{}},emits:["update:modelValue","change","error"],setup(t,{expose:a,emit:o}){const n=t,l=o,d=e.useTemplateRef("widgetRef"),i=e.ref(n.modelValue||n.config?.value);e.watch(i,m=>{l("update:modelValue",m)});const r=e.computed(()=>{switch(n.config?.widget?.Widget){case"TextBox":return T;case"Number":return de;case"SelectList":return E;case"Cascade":return pe;case"File":return me;case"TextArea":return fe;case"DropDown":return E;default:return T}}),s=e.ref(""),u=m=>{s.value=m},c=m=>l("change",m),f=m=>l("update:modelValue",m);function p(){return n.config?.widget?.Widget==="File"}return a({isFileUpload(){return n.config?.widget?.Widget==="File"},submit(m){p()&&d.value.submit(m)}}),(m,v)=>(e.openBlock(),e.createElementBlock("div",ge,[e.createElementVNode("div",ve,e.toDisplayString(n?.config?.widget?.Title),1),e.createElementVNode("div",_e,[e.createElementVNode("div",ke,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(r.value),{ref_key:"widgetRef",ref:d,"model-value":n.modelValue,config:n.config.widget,validations:n.config.validations,onError:u,onChange:c,"onUpdate:modelValue":f},null,40,["model-value","config","validations"]))]),s.value.length>0?(e.openBlock(),e.createElementBlock("div",we,e.toDisplayString(s.value),1)):e.createCommentVNode("",!0)])]))}}),N=(t,a)=>{const o=t.__vccOpts||t;for(const[n,l]of a)o[n]=l;return o},I=N(he,[["__scopeId","data-v-bc0a480b"]]);var k=(t=>(t[t.Submit=0]="Submit",t[t.Link=1]="Link",t))(k||{});const be=e.defineComponent({__name:"SubmitButton",props:{url:{},redirectType:{}},emits:["click"],setup(t,{emit:a}){const o=t,n=a;function l(){n("click",k.Submit,o.url,o.redirectType)}return(d,i)=>{const r=e.resolveComponent("AButton");return e.openBlock(),e.createBlock(r,{onClick:l},{default:e.withCtx(()=>[e.renderSlot(d.$slots,"default")]),_:3})}}}),ye=e.defineComponent({__name:"DetailLink",props:{url:{},redirectType:{}},emits:["click"],setup(t,{emit:a}){const o=t,n=a;function l(){n("click",k.Link,o.url,o.redirectType)}return(d,i)=>{const r=e.resolveComponent("ALink");return e.openBlock(),e.createBlock(r,{onClick:l},{default:e.withCtx(()=>[e.renderSlot(d.$slots,"default")]),_:3})}}}),V=e.defineComponent({__name:"index",props:{config:{}},emits:["click"],setup(t,{emit:a}){const o=t,n=a;function l(s,u,c){n("click",s,u,c)}const d=e.computed(()=>{switch(o.config.widget){case"Submit":return be;case"Link":default:return ye}}),i=e.computed(()=>o.config.widget==="Submit"?o.config.requestUrl??"":o.config.widget==="Link"?o.config.redirectUrl??"":""),r=e.computed(()=>o.config.redirectType??"Details");return(s,u)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(d.value),{url:i.value,"redirect-type":r.value,onClick:l},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o.config.title),1)]),_:1},8,["url","redirect-type"]))}}),R=Symbol("library-router");function U(){const t=e.inject(R,null);return t||z.useRouter()}const Ce={class:"page-container relative h-full"},Ve={class:"page-title p-4 bg-white"},Be={class:"title"},Se={class:"fields grid grid-cols-3 gap-8 bg-white p-4"},Ne={class:"action-row absolute bottom-0 left-0 w-full bg-white p-4 flex justify-end"},Ue=e.defineComponent({__name:"CreateView",props:{className:{}},setup(t){const a=U(),o=t,n=e.ref(),l=e.computed(()=>n.value?.fields?Object.entries(n.value.fields).map(([f,p])=>({fieldKey:f,...p})).filter(f=>f.widget&&f.widget.Widget!=="Hidden").sort((f,p)=>(f.order??0)-(p.order??0)):[]),d=e.computed(()=>n.value?.actions?[...n.value.actions].reverse():[]),i=e.reactive({}),r=e.ref(!0),s=e.useTemplateRef("dataWidgetsRef");e.onMounted(async()=>{r.value=!0,n.value=await S(B.Create,{className:o.className});for(const c in n.value.fields)i[c]=n.value.fields[c].value;r.value=!1});async function u(c,f,p){switch(c){case k.Submit:const m=await ee(o.className,i,f);s.value?.filter(v=>{v?.submit&&v.submit(m)}),a.push({name:"List"});break;case k.Link:p==="List"&&a.push({name:"List"});break;default:console.warn("Unknown action type:",c)}}return(c,f)=>{const p=e.resolveComponent("a-spin");return e.openBlock(),e.createElementBlock("div",Ce,[e.createElementVNode("div",Ve,[e.renderSlot(c.$slots,"title",{},()=>[e.createElementVNode("div",Be,e.toDisplayString(c.className)+" : Create",1)],!0)]),e.createVNode(p,{loading:r.value,class:"page-content p-2"},{default:e.withCtx(()=>[e.createElementVNode("div",Se,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(m,v)=>(e.openBlock(),e.createElementBlock("div",{key:m.fieldKey,class:"field"},[e.createVNode(I,{ref_for:!0,ref_key:"dataWidgetsRef",ref:s,name:v,config:m,modelValue:i[m.fieldKey],"onUpdate:modelValue":b=>i[m.fieldKey]=b},null,8,["name","config","modelValue","onUpdate:modelValue"])]))),128))]),e.renderSlot(c.$slots,"content",{},void 0,!0)]),_:3},8,["loading"]),e.createElementVNode("div",Ne,[e.renderSlot(c.$slots,"action",{},void 0,!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,m=>(e.openBlock(),e.createBlock(V,{key:m.Title,config:m,class:"action",onClick:u},null,8,["config"]))),128))])])}}}),A=N(Ue,[["__scopeId","data-v-48017fe8"]]),$e={class:"page-container relative h-full"},Le={class:"page-title p-4 bg-white"},xe={class:"title"},Re={class:"fields grid grid-cols-3 gap-8 bg-white p-4"},Te={class:"action-row absolute bottom-0 left-0 w-full bg-white p-4 flex justify-end"},Ee=e.defineComponent({__name:"UpdateView",props:{className:{},workflowId:{}},setup(t){const a=U(),o=t,n=e.ref(),l=e.computed(()=>n.value?.fields?Object.entries(n.value.fields).map(([c,f])=>({fieldKey:c,...f})).filter(c=>c.widget&&c.widget.Widget!=="Hidden").sort((c,f)=>(c.order??0)-(f.order??0)):[]),d=e.computed(()=>n.value?.actions?[...n.value.actions].reverse():[]),i=e.reactive({}),r=e.ref(!0);e.onMounted(async()=>{r.value=!0,n.value=await S(B.Update,{workflowId:o.workflowId,className:o.className});for(const u in n.value.fields)i[u]=n.value.fields[u].value;r.value=!1});async function s(u,c,f){switch(u){case k.Submit:await oe(o.className,o.workflowId,i,c),a.push({name:"List"});break;case k.Link:f==="List"&&a.push({name:"List"});break;default:console.warn("Unknown action type:",u)}}return(u,c)=>{const f=e.resolveComponent("a-spin");return e.openBlock(),e.createElementBlock("div",$e,[e.createElementVNode("div",Le,[e.renderSlot(u.$slots,"title",{},()=>[e.createElementVNode("div",xe,e.toDisplayString(u.className)+" : Update",1)],!0)]),e.createVNode(f,{loading:r.value,class:"page-content p-2"},{default:e.withCtx(()=>[e.createElementVNode("div",Re,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(p,m)=>(e.openBlock(),e.createElementBlock("div",{key:p.fieldKey,class:"field"},[e.createVNode(I,{name:m,config:p,modelValue:i[p.fieldKey],"onUpdate:modelValue":v=>i[p.fieldKey]=v},null,8,["name","config","modelValue","onUpdate:modelValue"])]))),128))]),e.renderSlot(u.$slots,"content",{},void 0,!0)]),_:3},8,["loading"]),e.createElementVNode("div",Te,[e.renderSlot(u.$slots,"action",{},void 0,!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,p=>(e.openBlock(),e.createBlock(V,{key:p.Title,config:p,data:i,class:"action",onClick:s},null,8,["config","data"]))),128))])])}}}),H=N(Ee,[["__scopeId","data-v-73c3a6e5"]]),De={class:"page-container relative h-full"},Ie={class:"page-title p-4 bg-white"},Ae={class:"title"},He={class:"bg-white"},Fe={class:"action-row absolute bottom-0 left-0 w-full bg-white p-4 flex justify-end"},Pe=e.defineComponent({__name:"DetailView",props:{className:{},workflowId:{}},setup(t){const a=U(),o=t,n=e.ref();e.computed(()=>n.value?.fields?Object.entries(n.value.fields).map(([u,c])=>({fieldKey:u,...c})).filter(u=>u.widget&&u.widget.Widget!=="Hidden").sort((u,c)=>(u.order??0)-(c.order??0)):[]);const l=e.computed(()=>n.value?.actions?[...n.value.actions].reverse():[]),d=e.reactive([]),i=e.ref(!0);e.onMounted(async()=>{i.value=!0,n.value=await S(B.Details,{workflowId:o.workflowId,className:o.className});for(const[s,u]of Object.entries(n.value.fields))d.push({label:s,value:u.value});i.value=!1});function r(s,u,c){switch(s){case k.Submit:re(o.className,o.workflowId,x.ApproverEmail(),"",d,u),a.push({name:"List"});break;case k.Link:c==="List"&&a.push({name:"List"});break;default:console.warn("Unknown action type:",s)}}return(s,u)=>{const c=e.resolveComponent("a-descriptions"),f=e.resolveComponent("a-spin");return e.openBlock(),e.createElementBlock("div",De,[e.createElementVNode("div",Ie,[e.renderSlot(s.$slots,"title",{},()=>[e.createElementVNode("div",Ae,e.toDisplayString(s.className)+" : Approve",1)],!0)]),e.createVNode(f,{loading:i.value,class:"page-content p-2"},{default:e.withCtx(()=>[e.createElementVNode("div",He,[e.createVNode(c,{data:d,layout:"inline-vertical"},null,8,["data"])]),e.renderSlot(s.$slots,"content",{},void 0,!0)]),_:3},8,["loading"]),e.createElementVNode("div",Fe,[e.renderSlot(s.$slots,"action",{},void 0,!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,p=>(e.openBlock(),e.createBlock(V,{key:p.Title,config:p,data:d,class:"action",onClick:r},null,8,["config","data"]))),128))])])}}}),F=N(Pe,[["__scopeId","data-v-e77c8eef"]]),Oe={class:"page-container relative h-full"},We={class:"page-title p-4 bg-white"},je={class:"title"},P=e.defineComponent({__name:"ListView",props:{className:{}},setup(t){const a=U(),o=t,n=e.ref(),l=e.reactive({current:1,total:0,pageSize:20,defaultPageSize:20,showTotal:!0,showPageSize:!0}),d=e.computed(()=>({PageNumber:l.current-1,PageSize:l.pageSize,Filters:[],Sorts:[]})),i=e.ref([]),r=e.ref([]),s=e.ref(!0),u=e.ref(!0),c=e.ref(),f=g=>{console.log(g),i.value=Object.entries(g).filter(([,_])=>_.widget?.column).map(([_,w])=>({title:w.widget.Title,dataIndex:_.charAt(0).toLowerCase()+_.slice(1),order:w.order})).sort((_,w)=>_.order-w.order),i.value.push({title:"Actions",slotName:"optional"})},p=async()=>{u.value=!0;const g=await Z(o.className,d.value);r.value=g.data,l.total=g.totalCount,c.value=g.actions,u.value=!1};e.onMounted(async()=>{s.value=!0,n.value=await S(3,{className:o.className}),f(n.value.fields),s.value=!1,p()});const m=g=>{l.current=g,p()},v=g=>{l.pageSize=g,p()};function b(g,_,w,$){switch(g){case k.Link:a.push({name:w,params:{workflowId:$}});break;default:console.warn("Unknown action type:",g)}}function W(g,_,w){switch(g){case k.Link:a.push({name:w});break;default:console.warn("Unknown action type:",g)}}return(g,_)=>{const w=e.resolveComponent("ATable"),$=e.resolveComponent("a-spin");return e.openBlock(),e.createElementBlock("div",Oe,[e.createElementVNode("div",We,[e.renderSlot(g.$slots,"title",{},()=>[e.createElementVNode("div",je,e.toDisplayString(g.className)+" : List",1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,y=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:y.title},[y.location==="InOperation"?(e.openBlock(),e.createBlock(V,{key:0,config:y,class:"action",onClick:_[0]||(_[0]=(...C)=>W(...C))},null,8,["config"])):e.createCommentVNode("",!0)],64))),128))])]),e.createVNode($,{loading:s.value,class:"page-conteont p-2"},{default:e.withCtx(()=>[e.renderSlot(g.$slots,"content",{},()=>[e.createVNode(w,{columns:i.value,data:r.value,stripe:"",border:"","page-position":"bl",pagination:l,loading:u.value,onPageChange:m,onPageSizeChange:v},{optional:e.withCtx(({record:y})=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,C=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:C.title},[C.location==="InTable"?(e.openBlock(),e.createBlock(V,{key:0,config:C,class:"action",onClick:(...j)=>b(...j,y.workflowId)},null,8,["config","onClick"])):e.createCommentVNode("",!0)],64))),128))]),_:1},8,["columns","data","pagination","loading"])])]),_:3},8,["loading"])])}}}),O=Symbol("library-pinia"),Me={install(t,a={}){a.router&&t.provide(R,a.router),a.pinia&&t.provide(O,a.pinia),t.component("CreateView",A),t.component("UpdateView",H),t.component("DetailView",F),t.component("ListView",P)}};exports.CreateView=A;exports.DetailView=F;exports.ListView=P;exports.PiniaKey=O;exports.RouterKey=R;exports.UpdateView=H;exports.default=Me;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),M=require("axios"),K=require("pinia"),z=require("vue-router"),q=K.defineStore("main",()=>({token:e.ref(void 0)})),G=async t=>new Promise(a=>setTimeout(a,t)),J=async(t,a,o,n=void 0)=>{if(t[a]===void 0)try{t[a]=null,t[a]=await o()||n}catch(l){console.error(l),t[a]=void 0}for(;t[a]===null;)await G(100);return t[a]},D="",Q="",L=M.create({baseURL:D,timeout:1e4,headers:{"Content-Type":"application/json"}}),X=async()=>{const t=q();return await J(t,"token",async()=>(await L.get(`${D}/GenerateToken`,{params:{appid:"bpm",appsecret:Q}}))?.data?.token)},h=async()=>{const t=await X();return L.defaults.headers.common.Authorization=`Bearer ${t}`,L},x={CurrentUserEmail:()=>"test.email@dataGetter.ts",CurrentUserPositionCode:()=>888,CurrentDatetime:()=>new Date().toISOString(),ApproverEmail:()=>"test.approver@sanofi.com",ApproverPositionCode:()=>999,RejectReason:()=>"Test Reject Reason"};var B=(t=>(t[t.Create=0]="Create",t[t.Update=1]="Update",t[t.Details=2]="Details",t[t.list=3]="list",t))(B||{});function Y(t){const a={pageType:"",fields:{},globalValidations:[]};return t.__ClassAttributes?.forEach(o=>{o.AttributeType==="UIPageType"?a.pageType=o.Type:o.AttributeType==="UIValidationControl"?a.globalValidations.push({rule:o.RuleName,param:o.RuleParameter,appliesTo:o.PropertyNames||["*"]}):o.AttributeType==="UIControl"&&(a.actions||(a.actions=[]),a.actions.push({isSubmit:o.IsSubmit,requestUrl:o.RequestUrl,redirectUrl:o.RedirectUrl,redirectType:o.RedirectType,title:o.Title,widget:o.Widget}))}),Object.entries(t).forEach(([o,n])=>{if(o==="__ClassAttributes"||o==="ClassName")return;const l={validations:[]},{attributes:d,propertyValue:i}=n;switch(i){case null:l.value="";break;case void 0:l.value="";break;default:l.value=i;break}d?.forEach(r=>{r.order||r.Order?l.order=r.order??r.Order:r.AttributeType==="UIControl"?l.widget={...r,column:!0}:r.AttributeType==="UIValidationControl"?l.validations.push(r):r.AttributeType==="UIListed"?l.widget={...r,column:!0}:r.DependentType&&(l.value=x[r.DependentType]?x[r.DependentType]():"")}),a.fields[o]=l}),a}const S=async(t,a)=>{const n=await(await h()).get(`/General/${t}/page`,{params:a});return Y(n?.data)};async function Z(t,a){const n=await(await h()).get(`/General/${t}/list`,{params:a});return{data:n.data.Data.propertyValue.data,totalCount:n.data.Data.propertyValue.totalCount,actions:n.data.__ClassAttributes.filter(l=>l.AttributeType==="UIControl").map(l=>({redirectUrl:l.RedirectUrl,location:l.Location,attributeType:l.AttributeType,redirectType:l.RedirectType,readonly:l.Readonly,widget:l.Widget,title:l.Title,isSubmit:l.IsSubmit}))}}async function ee(t,a,o){const l=await(await h()).post(o,a,{params:{className:t}});return l.data.length>0?l.data[0]:0}function te(t,a){return t.replace(/{workflowId}/g,a)}async function oe(t,a,o,n){const l=await h(),d=te(n,a);return(await l.put(d,o,{params:{className:t}}))?.data}function ne(t,a){return t.replace(/{WorkflowId}/g,a)}function ae(t,a){return t.replace(/{ApproverEmail}/g,a)}function le(t,a){return t.replace(/{WorkFlowReason}/g,a)}async function re(t,a,o,n,l,d){const i=await h();let r=ne(d,a);return r=ae(r,o),r=le(r,n),(await i.put(r,l,{params:{className:t}}))?.data}async function se(t,a){return((await(await h()).get(t,{params:{value:a}}))?.data).map(d=>({value:d.key,label:d.value}))}const ie=(t,a)=>t.reduce((o,n)=>o&&ce(n,a),!0),ce=(t,a)=>{const{RuleName:o,RuleParameter:n}=t;return ue[o](n,a)},ue={Regex:(t,a)=>new RegExp(t).test(a)},T=e.defineComponent({__name:"InputText",props:{modelValue:{},config:{},readonly:{type:Boolean},validations:{}},emits:["update:modelValue","change","error","input"],setup(t,{emit:a}){const o=t,n=a,l=r=>ie(o.validations,r),d=r=>{n("update:modelValue",r),n("input",r)},i=r=>{const s=l(r);n("update:modelValue",r),n("change",r),n("error",s?"":"Validation Error")};return(r,s)=>{const u=e.resolveComponent("AInput");return e.openBlock(),e.createBlock(u,{"model-value":o.modelValue,clearable:"",disabled:o.readonly||o.config.Readonly,onInput:d,onChange:i},null,8,["model-value","disabled"])}}}),de=e.defineComponent({__name:"InputNumber",props:{modelValue:{},config:{},readonly:{type:Boolean},validations:{}},emits:["update:modelValue","change","error","input"],setup(t,{emit:a}){const o=t,n=a,l=e.ref(100),d=e.ref(0);e.onMounted(()=>{o.validations&&o.validations.forEach(s=>{s.RuleName==="Max"&&(l.value=s.RuleParameter),s.RuleName==="Min"&&(d.value=s.RuleParameter)})});const i=s=>{n("update:modelValue",s),n("input",s)},r=s=>{n("update:modelValue",s),n("change",s)};return(s,u)=>{const c=e.resolveComponent("AInputNumber");return e.openBlock(),e.createBlock(c,{"model-value":o.modelValue,clearable:"",disabled:o.readonly,min:d.value,max:l.value,onInput:i,onChange:r},null,8,["model-value","disabled","min","max"])}}}),E=e.defineComponent({__name:"SelectList",props:{modelValue:{},config:{}},emits:["update:modelValue","change"],setup(t,{emit:a}){const o=t,n=a,l=e.ref(!1),d=e.ref(o.config.options??[]),i=async()=>{d.value=await se(o.config.DataSourceProvider)};e.onMounted(i);const r=s=>{n("update:modelValue",s),n("change",s)};return(s,u)=>{const c=e.resolveComponent("AOption"),f=e.resolveComponent("ASelect");return e.openBlock(),e.createBlock(f,{"model-value":s.modelValue,loading:l.value,"filter-option":!0,"allow-search":!0,onChange:r},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,p=>(e.openBlock(),e.createBlock(c,{key:p.value,value:p.value,label:p.label},null,8,["value","label"]))),128))]),_:1},8,["model-value","loading"])}}}),pe=e.defineComponent({__name:"Cascader",props:{modelValue:{},config:{}},emits:["update:modelValue","change"],setup(t,{emit:a}){const o=t,n=a,l=e.ref(o.config.options??[]),d=r=>{n("update:modelValue",r),n("change",r)};e.onMounted(async()=>{if(o.config){const r=o.config.DataSourceProvider;if(r){const u=await(await h()).get(r);l.value=u.data}}});const i={value:"key",label:"value"};return(r,s)=>{const u=e.resolveComponent("ACascader"),c=e.resolveComponent("ASpace");return e.openBlock(),e.createBlock(c,{direction:"vertical",size:"large"},{default:e.withCtx(()=>[e.createVNode(u,{"field-names":i,"model-value":r.modelValue,options:l.value,style:{width:"320px"},placeholder:"Please select ...",onChange:d},null,8,["model-value","options"])]),_:1})}}}),me=e.defineComponent({__name:"FileUpload",props:{config:{}},emits:["update:modelValue","change"],setup(t,{expose:a,emit:o}){const n=t,l=o,d="",i=e.ref(null),r=e.ref(0),s=e.ref([]);function u(p,m){return p.replace(/{WorkflowId}/g,m)}const c=e.computed(()=>{if(n.config.UploadURL){const p=d+n.config.UploadURL;return u(p,r.value.toString())}return""}),f=p=>{l("change",p)};return a({submit(p){console.log("🚀 ~ submit ~ workflowId:",p),i.value&&(n.config.UploadURL&&(r.value=p),e.nextTick(()=>{i.value.submit()}))}}),(p,m)=>{const v=e.resolveComponent("a-upload");return e.openBlock(),e.createBlock(v,{ref_key:"uploadRef",ref:i,modelValue:s.value,"onUpdate:modelValue":m[0]||(m[0]=b=>s.value=b),"auto-upload":!1,action:c.value,onChange:f},{"start-icon":e.withCtx(()=>m[1]||(m[1]=[])),_:1},8,["modelValue","action"])}}}),fe=e.defineComponent({__name:"TextArea",props:{modelValue:{},config:{},readonly:{type:Boolean},validations:{}},emits:["update:modelValue","change","error","input"],setup(t,{emit:a}){const o=t,n=a,l=i=>{n("update:modelValue",i),n("input",i)},d=i=>{n("update:modelValue",i),n("change",i)};return(i,r)=>{const s=e.resolveComponent("ATextarea");return e.openBlock(),e.createBlock(s,{"model-value":o.modelValue,placeholder:"Please enter something","allow-clear":"",disabled:o.readonly,onInput:l,onChange:d},null,8,["model-value","disabled"])}}}),ge={class:"widget-wrapper"},ve={class:"title mb-1.5"},_e={class:"form-widget"},ke={class:"widget"},we={key:0,class:"err-msg"},he=e.defineComponent({__name:"index",props:{config:{},modelValue:{},readonly:{type:Boolean},validations:{}},emits:["update:modelValue","change","error"],setup(t,{expose:a,emit:o}){const n=t,l=o,d=e.useTemplateRef("widgetRef"),i=e.ref(n.modelValue||n.config?.value);e.watch(i,m=>{l("update:modelValue",m)});const r=e.computed(()=>{switch(n.config?.widget?.Widget){case"TextBox":return T;case"Number":return de;case"SelectList":return E;case"Cascade":return pe;case"File":return me;case"TextArea":return fe;case"DropDown":return E;default:return T}}),s=e.ref(""),u=m=>{s.value=m},c=m=>l("change",m),f=m=>l("update:modelValue",m);function p(){return n.config?.widget?.Widget==="File"}return a({isFileUpload(){return n.config?.widget?.Widget==="File"},submit(m){p()&&d.value.submit(m)}}),(m,v)=>(e.openBlock(),e.createElementBlock("div",ge,[e.createElementVNode("div",ve,e.toDisplayString(n?.config?.widget?.Title),1),e.createElementVNode("div",_e,[e.createElementVNode("div",ke,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(r.value),{ref_key:"widgetRef",ref:d,"model-value":n.modelValue,config:n.config.widget,validations:n.config.validations,onError:u,onChange:c,"onUpdate:modelValue":f},null,40,["model-value","config","validations"]))]),s.value.length>0?(e.openBlock(),e.createElementBlock("div",we,e.toDisplayString(s.value),1)):e.createCommentVNode("",!0)])]))}}),N=(t,a)=>{const o=t.__vccOpts||t;for(const[n,l]of a)o[n]=l;return o},I=N(he,[["__scopeId","data-v-bc0a480b"]]);var k=(t=>(t[t.Submit=0]="Submit",t[t.Link=1]="Link",t))(k||{});const be=e.defineComponent({__name:"SubmitButton",props:{url:{},redirectType:{}},emits:["click"],setup(t,{emit:a}){const o=t,n=a;function l(){n("click",k.Submit,o.url,o.redirectType)}return(d,i)=>{const r=e.resolveComponent("AButton");return e.openBlock(),e.createBlock(r,{onClick:l},{default:e.withCtx(()=>[e.renderSlot(d.$slots,"default")]),_:3})}}}),ye=e.defineComponent({__name:"DetailLink",props:{url:{},redirectType:{}},emits:["click"],setup(t,{emit:a}){const o=t,n=a;function l(){n("click",k.Link,o.url,o.redirectType)}return(d,i)=>{const r=e.resolveComponent("ALink");return e.openBlock(),e.createBlock(r,{onClick:l},{default:e.withCtx(()=>[e.renderSlot(d.$slots,"default")]),_:3})}}}),V=e.defineComponent({__name:"index",props:{config:{}},emits:["click"],setup(t,{emit:a}){const o=t,n=a;function l(s,u,c){n("click",s,u,c)}const d=e.computed(()=>{switch(o.config.widget){case"Submit":return be;case"Link":default:return ye}}),i=e.computed(()=>o.config.widget==="Submit"?o.config.requestUrl??"":o.config.widget==="Link"?o.config.redirectUrl??"":""),r=e.computed(()=>o.config.redirectType??"Details");return(s,u)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(d.value),{url:i.value,"redirect-type":r.value,onClick:l},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o.config.title),1)]),_:1},8,["url","redirect-type"]))}}),R=Symbol("library-router");function U(){const t=e.inject(R,null);return t||z.useRouter()}const Ce={class:"page-container relative h-full"},Ve={class:"page-title p-4 bg-white"},Be={class:"title"},Se={class:"fields grid grid-cols-3 gap-8 bg-white p-4"},Ne={class:"action-row absolute bottom-0 left-0 w-full bg-white p-4 flex justify-end"},Ue=e.defineComponent({__name:"CreateView",props:{className:{}},setup(t){const a=U(),o=t,n=e.ref(),l=e.computed(()=>n.value?.fields?Object.entries(n.value.fields).map(([f,p])=>({fieldKey:f,...p})).filter(f=>f.widget&&f.widget.Widget!=="Hidden").sort((f,p)=>(f.order??0)-(p.order??0)):[]),d=e.computed(()=>n.value?.actions?[...n.value.actions].reverse():[]),i=e.reactive({}),r=e.ref(!1),s=e.useTemplateRef("dataWidgetsRef");e.onMounted(async()=>{r.value=!0,n.value=await S(B.Create,{className:o.className});for(const c in n.value.fields)i[c]=n.value.fields[c].value;r.value=!1});async function u(c,f,p){switch(c){case k.Submit:const m=await ee(o.className,i,f);s.value?.filter(v=>{v?.submit&&v.submit(m)}),a.push({name:"List"});break;case k.Link:p==="List"&&a.push({name:"List"});break;default:console.warn("Unknown action type:",c)}}return(c,f)=>{const p=e.resolveComponent("a-spin");return e.openBlock(),e.createElementBlock("div",Ce,[e.createElementVNode("div",Ve,[e.renderSlot(c.$slots,"title",{},()=>[e.createElementVNode("div",Be,e.toDisplayString(c.className)+" : Create",1)],!0)]),e.createVNode(p,{loading:r.value,class:"page-content p-2"},{default:e.withCtx(()=>[e.createElementVNode("div",Se,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(m,v)=>(e.openBlock(),e.createElementBlock("div",{key:m.fieldKey,class:"field"},[e.createVNode(I,{ref_for:!0,ref_key:"dataWidgetsRef",ref:s,name:v,config:m,modelValue:i[m.fieldKey],"onUpdate:modelValue":b=>i[m.fieldKey]=b},null,8,["name","config","modelValue","onUpdate:modelValue"])]))),128))]),e.renderSlot(c.$slots,"content",{},void 0,!0)]),_:3},8,["loading"]),e.createElementVNode("div",Ne,[e.renderSlot(c.$slots,"action",{},void 0,!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,m=>(e.openBlock(),e.createBlock(V,{key:m.Title,config:m,class:"action",onClick:u},null,8,["config"]))),128))])])}}}),A=N(Ue,[["__scopeId","data-v-fcbe0290"]]),$e={class:"page-container relative h-full"},Le={class:"page-title p-4 bg-white"},xe={class:"title"},Re={class:"fields grid grid-cols-3 gap-8 bg-white p-4"},Te={class:"action-row absolute bottom-0 left-0 w-full bg-white p-4 flex justify-end"},Ee=e.defineComponent({__name:"UpdateView",props:{className:{},workflowId:{}},setup(t){const a=U(),o=t,n=e.ref(),l=e.computed(()=>n.value?.fields?Object.entries(n.value.fields).map(([c,f])=>({fieldKey:c,...f})).filter(c=>c.widget&&c.widget.Widget!=="Hidden").sort((c,f)=>(c.order??0)-(f.order??0)):[]),d=e.computed(()=>n.value?.actions?[...n.value.actions].reverse():[]),i=e.reactive({}),r=e.ref(!0);e.onMounted(async()=>{r.value=!0,n.value=await S(B.Update,{workflowId:o.workflowId,className:o.className});for(const u in n.value.fields)i[u]=n.value.fields[u].value;r.value=!1});async function s(u,c,f){switch(u){case k.Submit:await oe(o.className,o.workflowId,i,c),a.push({name:"List"});break;case k.Link:f==="List"&&a.push({name:"List"});break;default:console.warn("Unknown action type:",u)}}return(u,c)=>{const f=e.resolveComponent("a-spin");return e.openBlock(),e.createElementBlock("div",$e,[e.createElementVNode("div",Le,[e.renderSlot(u.$slots,"title",{},()=>[e.createElementVNode("div",xe,e.toDisplayString(u.className)+" : Update",1)],!0)]),e.createVNode(f,{loading:r.value,class:"page-content p-2"},{default:e.withCtx(()=>[e.createElementVNode("div",Re,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,(p,m)=>(e.openBlock(),e.createElementBlock("div",{key:p.fieldKey,class:"field"},[e.createVNode(I,{name:m,config:p,modelValue:i[p.fieldKey],"onUpdate:modelValue":v=>i[p.fieldKey]=v},null,8,["name","config","modelValue","onUpdate:modelValue"])]))),128))]),e.renderSlot(u.$slots,"content",{},void 0,!0)]),_:3},8,["loading"]),e.createElementVNode("div",Te,[e.renderSlot(u.$slots,"action",{},void 0,!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,p=>(e.openBlock(),e.createBlock(V,{key:p.Title,config:p,data:i,class:"action",onClick:s},null,8,["config","data"]))),128))])])}}}),H=N(Ee,[["__scopeId","data-v-73c3a6e5"]]),De={class:"page-container relative h-full"},Ie={class:"page-title p-4 bg-white"},Ae={class:"title"},He={class:"bg-white"},Fe={class:"action-row absolute bottom-0 left-0 w-full bg-white p-4 flex justify-end"},Pe=e.defineComponent({__name:"DetailView",props:{className:{},workflowId:{}},setup(t){const a=U(),o=t,n=e.ref();e.computed(()=>n.value?.fields?Object.entries(n.value.fields).map(([u,c])=>({fieldKey:u,...c})).filter(u=>u.widget&&u.widget.Widget!=="Hidden").sort((u,c)=>(u.order??0)-(c.order??0)):[]);const l=e.computed(()=>n.value?.actions?[...n.value.actions].reverse():[]),d=e.reactive([]),i=e.ref(!0);e.onMounted(async()=>{i.value=!0,n.value=await S(B.Details,{workflowId:o.workflowId,className:o.className});for(const[s,u]of Object.entries(n.value.fields))d.push({label:s,value:u.value});i.value=!1});function r(s,u,c){switch(s){case k.Submit:re(o.className,o.workflowId,x.ApproverEmail(),"",d,u),a.push({name:"List"});break;case k.Link:c==="List"&&a.push({name:"List"});break;default:console.warn("Unknown action type:",s)}}return(s,u)=>{const c=e.resolveComponent("a-descriptions"),f=e.resolveComponent("a-spin");return e.openBlock(),e.createElementBlock("div",De,[e.createElementVNode("div",Ie,[e.renderSlot(s.$slots,"title",{},()=>[e.createElementVNode("div",Ae,e.toDisplayString(s.className)+" : Approve",1)],!0)]),e.createVNode(f,{loading:i.value,class:"page-content p-2"},{default:e.withCtx(()=>[e.createElementVNode("div",He,[e.createVNode(c,{data:d,layout:"inline-vertical"},null,8,["data"])]),e.renderSlot(s.$slots,"content",{},void 0,!0)]),_:3},8,["loading"]),e.createElementVNode("div",Fe,[e.renderSlot(s.$slots,"action",{},void 0,!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,p=>(e.openBlock(),e.createBlock(V,{key:p.Title,config:p,data:d,class:"action",onClick:r},null,8,["config","data"]))),128))])])}}}),F=N(Pe,[["__scopeId","data-v-e77c8eef"]]),Oe={class:"page-container relative h-full"},We={class:"page-title p-4 bg-white"},je={class:"title"},P=e.defineComponent({__name:"ListView",props:{className:{}},setup(t){const a=U(),o=t,n=e.ref(),l=e.reactive({current:1,total:0,pageSize:20,defaultPageSize:20,showTotal:!0,showPageSize:!0}),d=e.computed(()=>({PageNumber:l.current-1,PageSize:l.pageSize,Filters:[],Sorts:[]})),i=e.ref([]),r=e.ref([]),s=e.ref(!0),u=e.ref(!0),c=e.ref(),f=g=>{console.log(g),i.value=Object.entries(g).filter(([,_])=>_.widget?.column).map(([_,w])=>({title:w.widget.Title,dataIndex:_.charAt(0).toLowerCase()+_.slice(1),order:w.order})).sort((_,w)=>_.order-w.order),i.value.push({title:"Actions",slotName:"optional"})},p=async()=>{u.value=!0;const g=await Z(o.className,d.value);r.value=g.data,l.total=g.totalCount,c.value=g.actions,u.value=!1};e.onMounted(async()=>{s.value=!0,n.value=await S(3,{className:o.className}),f(n.value.fields),s.value=!1,p()});const m=g=>{l.current=g,p()},v=g=>{l.pageSize=g,p()};function b(g,_,w,$){switch(g){case k.Link:a.push({name:w,params:{workflowId:$}});break;default:console.warn("Unknown action type:",g)}}function W(g,_,w){switch(g){case k.Link:a.push({name:w});break;default:console.warn("Unknown action type:",g)}}return(g,_)=>{const w=e.resolveComponent("ATable"),$=e.resolveComponent("a-spin");return e.openBlock(),e.createElementBlock("div",Oe,[e.createElementVNode("div",We,[e.renderSlot(g.$slots,"title",{},()=>[e.createElementVNode("div",je,e.toDisplayString(g.className)+" : List",1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,y=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:y.title},[y.location==="InOperation"?(e.openBlock(),e.createBlock(V,{key:0,config:y,class:"action",onClick:_[0]||(_[0]=(...C)=>W(...C))},null,8,["config"])):e.createCommentVNode("",!0)],64))),128))])]),e.createVNode($,{loading:s.value,class:"page-conteont p-2"},{default:e.withCtx(()=>[e.renderSlot(g.$slots,"content",{},()=>[e.createVNode(w,{columns:i.value,data:r.value,stripe:"",border:"","page-position":"bl",pagination:l,loading:u.value,onPageChange:m,onPageSizeChange:v},{optional:e.withCtx(({record:y})=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,C=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:C.title},[C.location==="InTable"?(e.openBlock(),e.createBlock(V,{key:0,config:C,class:"action",onClick:(...j)=>b(...j,y.workflowId)},null,8,["config","onClick"])):e.createCommentVNode("",!0)],64))),128))]),_:1},8,["columns","data","pagination","loading"])])]),_:3},8,["loading"])])}}}),O=Symbol("library-pinia"),Me={install(t,a={}){a.router&&t.provide(R,a.router),a.pinia&&t.provide(O,a.pinia),t.component("CreateView",A),t.component("UpdateView",H),t.component("DetailView",F),t.component("ListView",P)}};exports.CreateView=A;exports.DetailView=F;exports.ListView=P;exports.PiniaKey=O;exports.RouterKey=R;exports.UpdateView=H;exports.default=Me;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/stores/useLibraryMainStore.ts","../src/assets/js/util.ts","../src/services/axios.ts","../src/services/dataGetter.ts","../src/services/dataGen.ts","../src/services/validation.ts","../src/components/data-gen/widgets/InputText.vue","../src/components/data-gen/widgets/InputNumber.vue","../src/components/data-gen/widgets/SelectList.vue","../src/components/data-gen/widgets/Cascader.vue","../src/components/data-gen/widgets/FileUpload.vue","../src/components/data-gen/widgets/TextArea.vue","../src/components/data-gen/widgets/index.vue","../src/components/data-gen/actions/types.ts","../src/components/data-gen/actions/SubmitButton.vue","../src/components/data-gen/actions/DetailLink.vue","../src/components/data-gen/actions/index.vue","../src/composables/useRouter.ts","../src/components/data-gen/views/CreateView.vue","../src/components/data-gen/views/UpdateView.vue","../src/components/data-gen/views/DetailView.vue","../src/components/data-gen/views/ListView.vue","../src/composables/usePinia.ts","../src/main.ts"],"sourcesContent":["import { defineStore } from 'pinia'\nimport { ref } from 'vue'\n\nexport const useLibraryMainStore = defineStore('main', () => {\n const token = ref<string | undefined>(undefined)\n \n return {\n token\n }\n})\n","import type { Store } from 'pinia'\n\n/**\n * 该函数用于创建一个异步的延迟操作,使程序暂停执行指定的毫秒数。\n * @param tick - 延迟的毫秒数。\n * @returns 一个 Promise,在指定的毫秒数后解析。\n */\nexport const sleep = async (tick: number) => new Promise((resolve) => setTimeout(resolve, tick))\n\n/**\n * async get data from store, if store ie empty load from remote.\n * @param store Target Pinia store\n * @param key Data key\n * @param remoteFunction Remote load function\n * @param defaultValue data default value\n * @returns {Promise<*>}\n */\nexport const getStoreData = async (\n store: Record<string, any>,\n key: string,\n remoteFunction: Function,\n defaultValue = undefined\n) => {\n // if store data is undefined, store at initial state.\n // then set store data to null and load from remote\n if (store[key] === undefined) {\n try {\n store[key] = null\n store[key] = (await remoteFunction()) || defaultValue\n } catch (e) {\n // if remote hih uncaught error, then set store data to initial state.\n console.error(e)\n store[key] = undefined\n }\n }\n // if store data is null, then other threads is loading data from remote.\n // wait certain time to until data loaded. Mean to save http resource\n while (store[key] === null) {\n await sleep(100)\n }\n return store[key]\n}\n\n/**\n * Pat a 0 to left if input string length is 1\n * @param str\n * @returns {string}\n */\nexport const patLeft0 = (str: any): string => {\n const s = `0${str}`\n return s.substring(s.length - 2)\n}\n\n/**\n * Format date as input format.\n * @param date input date\n * @param format date format, default as 'yyyy-MM-dd hh:mm:ss'\n * @returns {string|*}\n */\nexport const dateFormatter = (date: Date | string, format = 'yyyy-MM-dd hh:mm:ss'): string => {\n if (!date || (typeof date === 'string' && date.length === 0)) {\n return ''\n }\n\n try {\n const _date = new Date(date)\n const meta = [\n ['yyyy', _date.getFullYear()],\n ['yy', _date.getFullYear().toString().substring(2)],\n ['MM', patLeft0(_date.getMonth() + 1)],\n ['M', _date.getMonth() + 1],\n ['dd', patLeft0(_date.getDate())],\n ['d', _date.getDate()],\n ['hh', patLeft0(_date.getHours())],\n ['h', _date.getHours()],\n ['mm', patLeft0(_date.getMinutes())],\n ['m', _date.getMinutes()],\n ['ss', patLeft0(_date.getSeconds())],\n ['s', _date.getSeconds()]\n ] as [string, string][]\n\n for (const [key, value] of meta) {\n format = format.replace(key, value)\n }\n\n return format\n } catch (e) {\n return date.toLocaleString()\n }\n}\n","import { default as Axios } from 'axios'\nimport { useLibraryMainStore } from '@/stores/useLibraryMainStore'\nimport { getStoreData } from '../assets/js/util'\n\nconst ApiBase = import.meta.env.VITE_BPM_API_BASE || ''\nconst AppSecret = import.meta.env.VITE_BPM_APP_SECRET || ''\n\nconst axios = Axios.create({\n baseURL: ApiBase,\n timeout: 10000, // 10s\n headers: { 'Content-Type': 'application/json' },\n})\n\nexport const getToken = async () => {\n const mainStore = useLibraryMainStore()\n return await getStoreData(mainStore, 'token', async () => {\n const res = await axios.get<{ token: string }>(`${ApiBase}/GenerateToken`, {\n params: {\n appid: 'bpm',\n appsecret: AppSecret,\n },\n })\n\n return res?.data?.token\n })\n}\n\nexport const getAxios = async () => {\n const token = await getToken()\n axios.defaults.headers.common['Authorization'] = `Bearer ${token}`\n return axios\n}\n","export default {\n CurrentUserEmail: () => 'test.email@dataGetter.ts',\n CurrentUserPositionCode: () => 888,\n CurrentDatetime: () => new Date().toISOString(),\n ApproverEmail: () => 'test.approver@sanofi.com',\n ApproverPositionCode: () => 999,\n RejectReason: () => 'Test Reject Reason',\n} as { [key: string]: Function }\n","import type { RedirectType } from '@/types'\nimport { getAxios } from './axios'\nimport { default as dataGetter } from './dataGetter'\n\nexport type SelectOption = {\n value: string | number\n label: string\n [key: string]: unknown\n}\n\nexport type WidgetConfig = {\n Widget: string\n Readonly: boolean\n Title: string\n DataSourceProvider: string\n options?: SelectOption[]\n multiple?: boolean\n remote?: string\n UploadURL?: string\n [key: string]: unknown\n}\n\nexport type ValidationConfig = {\n RuleName: string\n RuleParameter: any\n}\n\nexport type FieldConfig = {\n widget?: WidgetConfig\n order?: number\n validations: ValidationConfig[]\n value?: any\n column?: boolean\n}\n\nexport type ActionConfig = {\n isSubmit?: boolean\n requestUrl?: string\n redirectUrl?: string\n title: string\n widget: string\n redirectType?: RedirectType\n}\n\nexport type PageConfig = {\n pageType: string\n fields: Record<string, FieldConfig>\n actions?: ActionConfig[]\n globalValidations: Array<{\n rule: string\n param?: any\n appliesTo: string[]\n }>\n}\n\ntype FieldData = {\n attributes: Object[]\n propertyValue?: any\n}\n\nexport enum PageActionType {\n Create = 0,\n Update = 1,\n Details = 2,\n list = 3,\n}\n\nfunction mapPageData(input: any): PageConfig {\n const config: PageConfig = {\n pageType: '',\n fields: {},\n globalValidations: [],\n }\n\n // 处理ClassAttributes\n input.__ClassAttributes?.forEach((attr: any) => {\n if (attr.AttributeType === 'UIPageType') {\n config.pageType = attr.Type\n } else if (attr.AttributeType === 'UIValidationControl') {\n config.globalValidations.push({\n rule: attr.RuleName,\n param: attr.RuleParameter,\n appliesTo: attr.PropertyNames || ['*'],\n })\n } else if (attr.AttributeType === 'UIControl') {\n if (!config.actions) {\n config.actions = []\n }\n config.actions.push({\n isSubmit: attr.IsSubmit,\n requestUrl: attr.RequestUrl,\n redirectUrl: attr.RedirectUrl,\n redirectType: attr.RedirectType,\n title: attr.Title,\n widget: attr.Widget,\n })\n }\n })\n\n // 处理字段配置\n Object.entries(input).forEach(([fieldName, fieldData]) => {\n if (fieldName === '__ClassAttributes' || fieldName === 'ClassName') return\n\n const fieldConfig: FieldConfig = {\n validations: [],\n }\n\n const { attributes, propertyValue } = fieldData as FieldData\n\n // 处理字段值\n switch (propertyValue) {\n case null:\n fieldConfig.value = ''\n break\n case undefined:\n fieldConfig.value = ''\n break\n default:\n fieldConfig.value = propertyValue\n break\n }\n\n // 处理控件属性\n attributes?.forEach((attr: any) => {\n if (attr.order || attr.Order) {\n fieldConfig.order = (attr.order ?? attr.Order) as number\n } else if (attr.AttributeType === 'UIControl') {\n // fieldConfig.widget = attr as WidgetConfig\n fieldConfig.widget = {\n ...attr,\n column: true,\n } as WidgetConfig\n } else if (attr.AttributeType === 'UIValidationControl') {\n fieldConfig.validations.push(attr as ValidationConfig)\n } else if (attr.AttributeType === 'UIListed') {\n fieldConfig.widget = {\n ...attr,\n column: true,\n } as WidgetConfig\n } else if (attr.DependentType) {\n fieldConfig.value = dataGetter[attr.DependentType] ? dataGetter[attr.DependentType]() : ''\n }\n })\n\n config.fields[fieldName] = fieldConfig\n })\n\n return config\n}\n\nexport const getPageData = async (\n type: PageActionType,\n opt: {\n className: string\n workflowId?: string\n }\n) => {\n const axios = await getAxios()\n const res = await axios.get(`/General/${type}/page`, { params: opt })\n return mapPageData(res?.data)\n}\n\nexport type Action = {\n redirectUrl: string,\n location: 'InTable' | 'InOperation',\n attributeType: 'UIControl',\n readonly: boolean,\n widget: 'Link',\n title: 'Approve' | 'Create' | 'Update',\n isSubmit: boolean\n}\n\nexport type ListDataRes = {\n __ClassAttributes: {\n RedirectUrl: string,\n Location: 'InTable' | 'InOperation',\n AttributeType: 'UIControl',\n Readonly: boolean,\n Widget: 'Link',\n Title: 'Approve' | 'Create' | 'Update',\n IsSubmit: boolean\n RedirectType: RedirectType,\n }[],\n Data: {\n propertyValue: ListData\n }\n}\n\ntype ListData = {\n data: object[]\n totalCount: number\n}\n\nexport async function getListData(\n className: string,\n opt: {\n Filters: object[]\n Sorts: object[]\n PageNumber: number\n PageSize: number\n }\n) {\n const axios = await getAxios()\n const res = await axios.get<ListDataRes>(`/General/${className}/list`, { params: opt })\n return {\n data: res.data.Data.propertyValue.data,\n totalCount: res.data.Data.propertyValue.totalCount,\n actions: res.data.__ClassAttributes.filter(item=> item.AttributeType === 'UIControl').map((attr) => {\n return {\n redirectUrl: attr.RedirectUrl,\n location: attr.Location,\n attributeType: attr.AttributeType,\n redirectType: attr.RedirectType,\n readonly: attr.Readonly,\n widget: attr.Widget,\n title: attr.Title,\n isSubmit: attr.IsSubmit,\n }\n }\n ),\n }\n}\n\nexport async function createData(className: string, data: object, url: string) {\n const axios = await getAxios()\n const res = await axios.post<number[]>(url, data, {\n params: {\n className,\n },\n })\n return res.data.length > 0 ? res.data[0] : 0\n}\n\nfunction replaceId(url: string, id: string): string {\n return url.replace(/{workflowId}/g, id)\n}\n\nexport async function updateData(className: string, id: string, data: object, url: string) {\n const axios = await getAxios()\n const replacedUrl = replaceId(url, id)\n const res = await axios.put(replacedUrl, data, {\n params: {\n className,\n },\n })\n return res?.data\n}\n\nfunction replaceWorkflowId(url: string, id: string): string {\n return url.replace(/{WorkflowId}/g, id)\n}\n\nfunction replaceEmail(url: string, email: string): string {\n return url.replace(/{ApproverEmail}/g, email)\n}\n\nfunction replaceReason(url: string, reason: string): string {\n return url.replace(/{WorkFlowReason}/g, reason)\n}\n\nexport async function approveData(className: string, id: string, email: string, reason: string, data: object, url: string) {\n const axios = await getAxios()\n let replacedUrl = replaceWorkflowId(url, id)\n replacedUrl = replaceEmail(replacedUrl, email)\n replacedUrl = replaceReason(replacedUrl, reason)\n const res = await axios.put(replacedUrl, data, {\n params: {\n className,\n },\n })\n return res?.data\n}\n\nexport async function getOptions(url: string, value?: string): Promise<SelectOption[]> {\n const axios = await getAxios()\n const res = await axios.get(url, { params: { value } })\n const list = res?.data as { key: string; value: string }[]\n return list.map((item) => ({\n value: item.key,\n label: item.value,\n }))\n}","import type { ValidationConfig } from './dataGen'\n\nexport const validateRules = (configs: ValidationConfig[], value: any) => {\n return configs.reduce((valid, config) => {\n return valid && vallidateRule(config, value)\n }, true)\n}\n\nexport const vallidateRule = (config: ValidationConfig, value: any): boolean => {\n const { RuleName, RuleParameter } = config\n return validations[RuleName](RuleParameter, value as string)\n}\n\nconst validations = {\n Regex: (parameter: string, value: string): boolean => {\n const reg = new RegExp(parameter)\n return reg.test(value)\n },\n} as { [key: string]: Function }\n","<script lang=\"ts\" setup>\nimport type { FormCompProps, FormCompEmits } from './index'\nimport { validateRules } from '@/services/validation'\n\ntype MyEmits = FormCompEmits & {\n (e: 'input', value: any): void\n}\n\nconst props = defineProps<FormCompProps>()\nconst emits = defineEmits<MyEmits>()\n\nconst validate = (v?: string | null) => {\n return validateRules(props.validations!, v)\n}\n\nconst inputHandler = (v?: string | null): void => {\n emits('update:modelValue', v)\n emits('input', v)\n}\n\nconst changeHandler = (v?: string | null): void => {\n const valid = validate(v)\n\n emits('update:modelValue', v)\n emits('change', v)\n emits('error', valid ? '' : 'Validation Error')\n}\n</script>\n\n<template>\n <AInput\n :model-value=\"props.modelValue\"\n clearable\n :disabled=\"props.readonly || props.config.Readonly\"\n @input=\"inputHandler\"\n @change=\"changeHandler\"\n ></AInput>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, onMounted } from 'vue'\nimport type { FormCompProps, FormCompEmits } from './index'\n\ntype MyEmits = FormCompEmits & {\n (e: 'input', value: any): void\n}\n\nconst props = defineProps<FormCompProps>()\nconst emits = defineEmits<MyEmits>()\n\nconst max = ref<number>(100)\nconst min = ref<number>(0)\nonMounted(() => {\n if (props.validations) {\n props.validations.forEach((v) => {\n if (v.RuleName === 'Max') {\n max.value = v.RuleParameter\n }\n if (v.RuleName === 'Min') {\n min.value = v.RuleParameter\n }\n })\n }\n})\n\nconst inputHandler = (v?: number | null): void => {\n emits('update:modelValue', v)\n emits('input', v)\n}\n\nconst changeHandler = (v?: number | null): void => {\n emits('update:modelValue', v)\n emits('change', v)\n}\n</script>\n\n<template>\n <AInputNumber\n :model-value=\"props.modelValue\"\n clearable\n :disabled=\"props.readonly\"\n :min=\"min\"\n :max=\"max\"\n @input=\"inputHandler\"\n @change=\"changeHandler\"\n ></AInputNumber>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, onMounted } from 'vue'\nimport { getOptions } from '@/services/dataGen'\nimport type { WidgetConfig, SelectOption } from '@/services/dataGen'\n\nconst props = defineProps<{\n modelValue: string\n config: WidgetConfig\n}>()\nconst emits = defineEmits<{\n (e: 'update:modelValue', value?: string | number | null): void\n (e: 'change', value?: string | number | null): void\n}>()\n\nconst loading = ref<boolean>(false)\nconst _options = ref<SelectOption[]>(props.config.options ?? [])\nconst loadOptions = async () => {\n _options.value = await getOptions(props.config.DataSourceProvider)\n}\nonMounted(loadOptions)\n\nconst changeHandler = (v?: string | number | null) => {\n emits('update:modelValue', v)\n emits('change', v)\n}\n</script>\n\n<template>\n <ASelect\n :model-value=\"modelValue\"\n :loading=\"loading\"\n :filter-option=\"true\"\n :allow-search=\"true\"\n @change=\"changeHandler\"\n >\n <template v-for=\"item in _options\" :key=\"item.value\">\n <AOption :value=\"item.value\" :label=\"item.label\"></AOption>\n </template>\n </ASelect>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, onMounted } from 'vue'\nimport type { WidgetConfig, SelectOption } from '@/services/dataGen'\nimport { getAxios } from '@/services/axios'\n\nconst props = defineProps<{\n modelValue: string\n config: WidgetConfig\n}>()\nconst emits = defineEmits<{\n (e: 'update:modelValue', value?: string | number | null): void\n (e: 'change', value?: string | number | null): void\n}>()\n\nconst _options = ref<SelectOption[]>(props.config.options ?? [])\n\nconst changeHandler = (v?: string | number | null) => {\n emits('update:modelValue', v)\n emits('change', v)\n}\n\nonMounted(async () => {\n if (props.config) {\n const url = props.config.DataSourceProvider\n if (url) {\n const axios = await getAxios()\n const res = await axios.get(url)\n _options.value = res.data as SelectOption[]\n }\n }\n})\n\nconst fieldNames = { value: 'key', label: 'value' }\n</script>\n\n<template>\n <ASpace direction=\"vertical\" size=\"large\">\n <ACascader\n :field-names=\"fieldNames\"\n :model-value=\"modelValue\"\n :options=\"_options\"\n :style=\"{ width: '320px' }\"\n placeholder=\"Please select ...\"\n @change=\"changeHandler\"\n />\n </ASpace>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, computed,nextTick } from 'vue'\nimport type {UploadInstance, FileItem} from '@arco-design/web-vue'\nimport type { WidgetConfig } from '@/services/dataGen'\n\nconst props = defineProps<{\n config: WidgetConfig\n}>()\nconst emits = defineEmits<{\n (e: 'update:modelValue', value?: string | number | null): void\n (e: 'change', value?: string | number | null): void\n}>()\n\nconst ApiBase = import.meta.env.VITE_BPM_API_BASE || ''\n\nconst uploadRef = ref<UploadInstance | null>(null)\n\nconst id = ref<number>(0)\n\nconst fileList = ref<FileItem[]>([])\n\nfunction replaceId(url: string, workflowId: string): string {\n return url.replace(/{WorkflowId}/g, workflowId)\n}\n\nconst action = computed<string>(() => {\n if(props.config.UploadURL){\n const url = ApiBase + props.config.UploadURL\n return replaceId(url, id.value.toString())\n }\n return ''\n})\n\n//const _options = ref<SelectOption[]>(props.config.options ?? [])\n\nconst changeHandler = (v?: string | number | null) => {\n //emits('update:modelValue', v)\n emits('change', v)\n}\n\ndefineExpose({\n submit(workflowId: number){\n console.log('🚀 ~ submit ~ workflowId:', workflowId)\n if (uploadRef.value) {\n if(props.config.UploadURL){\n id.value = workflowId\n }\n nextTick(() => {\n uploadRef.value.submit()\n })\n }\n }\n})\n</script>\n\n<template>\n <a-upload\n ref=\"uploadRef\"\n v-model=\"fileList\"\n :auto-upload=\"false\"\n :action=\"action\"\n @change=\"changeHandler\"\n >\n <template #start-icon></template>\n </a-upload>\n</template>","<script lang=\"ts\" setup>\nimport type { FormCompProps, FormCompEmits } from './index'\n\ntype MyEmits = FormCompEmits & {\n (e: 'input', value: any): void\n}\n\nconst props = defineProps<FormCompProps>()\nconst emits = defineEmits<MyEmits>()\n\nconst inputHandler = (v?: string | null): void => {\n emits('update:modelValue', v)\n emits('input', v)\n}\n\nconst changeHandler = (v?: string | null): void => {\n emits('update:modelValue', v)\n emits('change', v)\n}\n</script>\n\n<template>\n <ATextarea\n :model-value=\"props.modelValue\"\n placeholder=\"Please enter something\"\n allow-clear\n :disabled=\"props.readonly\"\n @input=\"inputHandler\"\n @change=\"changeHandler\"\n />\n</template>","<script lang=\"ts\" setup>\nimport type { FormCompProps, FormCompEmits } from './index'\nimport type { FieldConfig } from '@/services/dataGen'\nimport { ref, watch, computed, useTemplateRef } from 'vue'\nimport InputText from './InputText.vue'\nimport InputNumber from './InputNumber.vue'\nimport SelectList from './SelectList.vue'\nimport Cascader from './Cascader.vue'\nimport FileUpload from './FileUpload.vue'\nimport TextArea from './TextArea.vue'\n\ntype FieldCompProps = {\n config: FieldConfig\n} & FormCompProps\n\nconst props = defineProps<FieldCompProps>()\nconst emits = defineEmits<FormCompEmits>()\n\nconst widgetRef = useTemplateRef('widgetRef')\n\nconst _value = ref<string | number>(props.modelValue || props.config?.value)\nwatch(_value, (newValue) => {\n emits('update:modelValue', newValue)\n})\n\nconst curComp = computed(() => {\n switch (props.config?.widget?.Widget) {\n case 'TextBox':\n return InputText\n case 'Number':\n return InputNumber\n case 'SelectList':\n return SelectList\n case 'Cascade':\n return Cascader\n case 'File':\n return FileUpload\n case 'TextArea':\n return TextArea\n case 'DropDown':\n return SelectList\n default:\n return InputText\n }\n})\n\nconst errMsg = ref<string>('')\nconst errHandler = (v: string) => {\n errMsg.value = v\n}\n\nconst changeHandler = (v: any): void => emits('change', v)\nconst updateHandler = (v: any): void => emits('update:modelValue', v)\n\nfunction isFileUpload() {\n return props.config?.widget?.Widget === 'File'\n}\n\ndefineExpose({\n isFileUpload(){\n return props.config?.widget?.Widget === 'File'\n },\n submit(workflowId: number) {\n if (isFileUpload()) {\n (widgetRef.value as InstanceType<typeof FileUpload>).submit(workflowId)\n }\n }\n})\n</script>\n\n<template>\n <div class=\"widget-wrapper\">\n <div class=\"title mb-1.5\">{{ props?.config?.widget?.Title }}</div>\n <div class=\"form-widget\">\n <div class=\"widget\">\n <component\n ref=\"widgetRef\"\n :is=\"curComp\"\n :model-value=\"props.modelValue\"\n :config=\"props.config.widget\"\n :validations=\"props.config.validations\"\n @error=\"errHandler\"\n @change=\"changeHandler\"\n @update:modelValue=\"updateHandler\"\n ></component>\n </div>\n <div v-if=\"errMsg.length > 0\" class=\"err-msg\">{{ errMsg }}</div>\n </div>\n </div>\n</template>\n\n<style lang=\"stylus\" scoped>\n.err-msg {\n font-size $size-text-light\n color $color-red\n margin-top $gap-4\n}\n</style>\n","import type { RedirectType } from '@/types'\n\ntype ActionProps = {\n // title: string,\n url: string\n redirectType: RedirectType\n}\n\nenum ActionTypeEnum {\n Submit,\n Link\n}\n\n// type ActionType = 'submit' | 'link'\n\ntype ActionEmits = {\n (e: 'click', type: ActionTypeEnum, url: string, redirectType: RedirectType): void\n}\n\nexport type {\n ActionProps,\n ActionEmits\n}\n\nexport { ActionTypeEnum }","<script setup lang=\"ts\">\nimport type { ActionProps, ActionEmits } from '@/components/data-gen/actions/types'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\n\nconst props = defineProps<ActionProps>()\n\nconst emits = defineEmits<ActionEmits>()\n\nfunction clickHandler() {\n emits('click', ActionTypeEnum.Submit, props.url, props.redirectType)\n}\n</script>\n\n<template>\n <AButton @click=\"clickHandler\">\n <slot></slot>\n </AButton>\n</template>","<script setup lang=\"ts\">\nimport type { ActionProps, ActionEmits } from '@/components/data-gen/actions/types'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\n\nconst props = defineProps<ActionProps>()\n\nconst emits = defineEmits<ActionEmits>()\n\nfunction clickHandler() {\n emits('click', ActionTypeEnum.Link, props.url, props.redirectType)\n}\n</script>\n\n<template>\n<ALink @click=\"clickHandler\">\n <slot></slot>\n</ALink>\n</template>","<script setup lang=\"ts\">\nimport type { ActionConfig } from '@/services/dataGen'\nimport type { ActionEmits } from '@/components/data-gen/actions/types'\nimport { computed } from 'vue'\nimport SubmitButton from '@/components/data-gen/actions/SubmitButton.vue'\nimport DetailLink from '@/components/data-gen/actions/DetailLink.vue'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\nimport type { RedirectType } from '@/types'\n\nconst props = defineProps<{\n config: ActionConfig\n}>()\n\nconst emits = defineEmits<ActionEmits>()\n\nfunction clickHandler(type:ActionTypeEnum, url: string, redirectType: RedirectType) {\n emits('click', type, url, redirectType)\n}\n\nconst curComp = computed(() => {\n switch (props.config.widget) {\n case 'Submit':\n return SubmitButton\n case 'Link':\n default:\n return DetailLink\n }\n})\n\nconst curUrl = computed(() => {\n if (props.config.widget === 'Submit') {\n return props.config.requestUrl ?? ''\n } else if (props.config.widget === 'Link') {\n return props.config.redirectUrl ?? ''\n }\n return ''\n})\n\nconst RedirectType = computed(() => {\n return props.config.redirectType ?? 'Details'\n})\n</script>\n\n<template>\n <component\n :is=\"curComp\"\n :url=\"curUrl\"\n :redirect-type=\"RedirectType\"\n @click=\"clickHandler\"\n >\n {{ props.config.title }}\n </component>\n</template>\n\n<style lang=\"stylus\" scoped></style>\n","import { inject, type InjectionKey } from 'vue'\nimport { useRouter as useVueRouter } from 'vue-router'\nimport type { Router } from 'vue-router'\n\nexport const RouterKey: InjectionKey<Router> = Symbol('library-router')\n\nexport function useLibraryRouter(): Router {\n // 首先尝试从注入中获取宿主提供的 router\n const injectedRouter = inject(RouterKey, null)\n if (injectedRouter) {\n return injectedRouter\n }\n \n // 如果没有注入,回退到标准的 useRouter\n return useVueRouter()\n}\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, reactive, ref, useTemplateRef } from 'vue'\nimport { getPageData, PageActionType, createData, type PageConfig, type FieldConfig } from '@/services/dataGen'\nimport DataWidgets from '@/components/data-gen/widgets/index.vue'\nimport ActionButton from '@/components/data-gen/actions/index.vue'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\nimport { useLibraryRouter } from '@/composables/useRouter'\nimport type { RedirectType } from '@/types'\n\n// 导入 Arco Design 的 Spin 组件来替代 v-loading\nimport { Spin } from '@arco-design/web-vue'\n\nconst router = useLibraryRouter()\n\nconst props = defineProps<{\n className: string\n}>()\n\nconst pageData = ref<PageConfig>()\n\ntype WidgetConfig = {\n fieldKey: string\n} & FieldConfig\nconst _fields = computed(() => {\n if (!pageData.value?.fields) return []\n const list: WidgetConfig[] = Object.entries(pageData.value.fields)\n .map(([key, value]) => {\n return {\n fieldKey: key,\n ...value,\n } as WidgetConfig\n })\n .filter((w) => w.widget && w.widget.Widget !== 'Hidden')\n .sort((a: WidgetConfig, b: WidgetConfig) => (a.order ?? 0) - (b.order ?? 0))\n\n return list\n})\nconst reversedActions = computed(() => {\n if (!pageData.value?.actions) return []\n return [...pageData.value.actions].reverse()\n})\n\nconst _data = reactive<Record<string, any>>({})\nconst loading = ref(true)\nconst dataWidgetsRef = useTemplateRef('dataWidgetsRef')\nonMounted(async () => {\n loading.value = true\n pageData.value = await getPageData(PageActionType.Create, {\n className: props.className,\n })\n for (const key in pageData.value.fields) {\n _data[key] = pageData.value.fields[key].value\n }\n loading.value = false\n})\n\nasync function clickHandler(type: ActionTypeEnum, url: string, redirectType: RedirectType) {\n switch (type) {\n case ActionTypeEnum.Submit:\n const res = await createData(props.className, _data, url)\n dataWidgetsRef.value?.filter((widget) => {\n if (widget?.submit) {\n widget.submit(res)\n }\n })\n router.push({name: 'List'})\n break\n case ActionTypeEnum.Link:\n if(redirectType === 'List') {\n router.push({name: 'List'})\n }\n break\n default:\n console.warn('Unknown action type:', type)\n }\n}\n</script>\n<template>\n <div class=\"page-container relative h-full\">\n <div class=\"page-title p-4 bg-white\">\n <slot name=\"title\">\n <div class=\"title\">{{ className }} : Create</div>\n </slot>\n </div>\n <a-spin :loading=\"loading\" class=\"page-content p-2\">\n <div class=\"fields grid grid-cols-3 gap-8 bg-white p-4\">\n <template v-for=\"(value, key) in _fields\" :key=\"value.fieldKey\">\n <div class=\"field\">\n <DataWidgets ref=\"dataWidgetsRef\" :name=\"key\" :config=\"value\" v-model=\"_data[value.fieldKey]\"></DataWidgets>\n </div>\n </template>\n </div>\n <slot name=\"content\"></slot>\n </a-spin>\n <div class=\"action-row absolute bottom-0 left-0 w-full bg-white p-4 flex justify-end\">\n <slot name=\"action\"></slot>\n <template v-for=\"action in reversedActions\" :key=\"action.Title\">\n <ActionButton :config=\"action\" class=\"action\" @click=\"clickHandler\"/>\n </template>\n </div>\n </div>\n</template>\n\n<style lang=\"stylus\" scoped>\n.page-container {\n .page-title {\n font-size $size-text-heavy\n }\n}\n\n.action-row {\n .action + .action {\n margin-inline-start $gap-8\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, reactive, ref } from 'vue'\nimport { getPageData, updateData, PageActionType, type PageConfig, type FieldConfig } from '@/services/dataGen'\nimport DataWidgets from '@/components/data-gen/widgets/index.vue'\nimport ActionButton from '@/components/data-gen/actions/index.vue'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\nimport { Spin } from '@arco-design/web-vue'\nimport { useLibraryRouter } from '@/composables/useRouter'\nimport type {RedirectType} from '@/types'\n\nconst router = useLibraryRouter()\n\nconst props = defineProps<{\n className: string,\n workflowId: string\n}>()\n\nconst pageData = ref<PageConfig>()\n\ntype WidgetConfig = {\n fieldKey: string\n} & FieldConfig\nconst _fields = computed(() => {\n if (!pageData.value?.fields) return []\n const list: WidgetConfig[] = Object.entries(pageData.value.fields)\n .map(([key, value]) => {\n return {\n fieldKey: key,\n ...value,\n } as WidgetConfig\n })\n .filter((w) => w.widget && w.widget.Widget !== 'Hidden')\n .sort((a: WidgetConfig, b: WidgetConfig) => (a.order ?? 0) - (b.order ?? 0))\n\n return list\n})\nconst reversedActions = computed(() => {\n if (!pageData.value?.actions) return []\n return [...pageData.value.actions].reverse()\n})\n\nconst _data = reactive<Record<string, any>>({})\nconst loading = ref(true)\nonMounted(async () => {\n loading.value = true\n pageData.value = await getPageData(PageActionType.Update, {\n workflowId: props.workflowId,\n className: props.className,\n })\n for (const key in pageData.value.fields) {\n _data[key] = pageData.value.fields[key].value\n }\n loading.value = false\n})\n\nasync function clickHandler(type: ActionTypeEnum, url: string, redirectType: RedirectType) {\n switch (type) {\n case ActionTypeEnum.Submit:\n await updateData(props.className, props.workflowId, _data, url)\n router.push({name: 'List'})\n break\n case ActionTypeEnum.Link:\n if(redirectType === 'List') {\n router.push({name: 'List'})\n }\n break\n default:\n console.warn('Unknown action type:', type)\n }\n}\n</script>\n<template>\n <div class=\"page-container relative h-full\">\n <div class=\"page-title p-4 bg-white\">\n <slot name=\"title\">\n <div class=\"title\">{{ className }} : Update</div>\n </slot>\n </div>\n <a-spin :loading=\"loading\" class=\"page-content p-2\">\n <div class=\"fields grid grid-cols-3 gap-8 bg-white p-4\">\n <template v-for=\"(value, key) in _fields\" :key=\"value.fieldKey\">\n <div class=\"field\">\n <DataWidgets :name=\"key\" :config=\"value\" v-model=\"_data[value.fieldKey]\"></DataWidgets>\n </div>\n </template>\n </div>\n <slot name=\"content\"></slot>\n </a-spin>\n <div class=\"action-row absolute bottom-0 left-0 w-full bg-white p-4 flex justify-end\">\n <slot name=\"action\"></slot>\n <template v-for=\"action in reversedActions\" :key=\"action.Title\">\n <ActionButton :config=\"action\" :data=\"_data\" class=\"action\" @click=\"clickHandler\"/>\n </template>\n </div>\n </div>\n</template>\n\n<style lang=\"stylus\" scoped>\n.page-container {\n .page-title {\n font-size $size-text-heavy\n }\n}\n\n.action-row {\n .action + .action {\n margin-inline-start $gap-8\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, reactive, ref } from 'vue'\nimport { getPageData, approveData, PageActionType, type PageConfig, type FieldConfig } from '@/services/dataGen'\n// import DataWidgets from '@/components/data-gen/widgets/index.vue'\nimport ActionButton from '@/components/data-gen/actions/index.vue'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\nimport type {DescData} from '@arco-design/web-vue'\nimport { Spin } from '@arco-design/web-vue'\nimport { useLibraryRouter } from '@/composables/useRouter'\nimport dataGetter from '@/services/dataGetter'\nimport type {RedirectType} from '@/types'\n\nconst router = useLibraryRouter()\n\nconst props = defineProps<{\n className: string,\n workflowId: string\n}>()\n\nconst pageData = ref<PageConfig>()\n\ntype WidgetConfig = {\n fieldKey: string\n} & FieldConfig\nconst _fields = computed(() => {\n if (!pageData.value?.fields) return []\n const list: WidgetConfig[] = Object.entries(pageData.value.fields)\n .map(([key, value]) => {\n return {\n fieldKey: key,\n ...value,\n } as WidgetConfig\n })\n .filter((w) => w.widget && w.widget.Widget !== 'Hidden')\n .sort((a: WidgetConfig, b: WidgetConfig) => (a.order ?? 0) - (b.order ?? 0))\n\n return list\n})\nconst reversedActions = computed(() => {\n if (!pageData.value?.actions) return []\n return [...pageData.value.actions].reverse()\n})\n\nconst _data = reactive<DescData[]>([])\nconst loading = ref(true)\nonMounted(async () => {\n loading.value = true\n pageData.value = await getPageData(PageActionType.Details, {\n workflowId: props.workflowId,\n className: props.className,\n })\n\n for (const [key, value] of Object.entries(pageData.value.fields)) {\n _data.push({\n label: key,\n value: value.value,\n })\n }\n loading.value = false\n})\n\nfunction clickHandler(type: ActionTypeEnum, url: string, redirectType: RedirectType) {\n switch (type) {\n case ActionTypeEnum.Submit:\n approveData(props.className, props.workflowId, dataGetter.ApproverEmail(), '', _data, url)\n // if(redirectType === 'Approve'){\n // approveData(props.className, props.workflowId, dataGetter.ApproverEmail(), '', _data, url)\n // }else if(redirectType === 'Reject'){\n // approveData(props.className, props.workflowId, dataGetter.ApproverEmail(), dataGetter.RejectReason(), _data, url)\n // }\n router.push({name: 'List'})\n break\n case ActionTypeEnum.Link:\n if(redirectType === 'List'){\n router.push({name: 'List'})\n }\n break\n default:\n console.warn('Unknown action type:', type)\n }\n}\n</script>\n<template>\n <div class=\"page-container relative h-full\">\n <div class=\"page-title p-4 bg-white\">\n <slot name=\"title\">\n <div class=\"title\">{{ className }} : Approve</div>\n </slot>\n </div>\n <a-spin :loading=\"loading\" class=\"page-content p-2\">\n <div class=\"bg-white\">\n <a-descriptions :data=\"_data\" layout=\"inline-vertical\" />\n </div>\n <slot name=\"content\"></slot>\n </a-spin>\n <div class=\"action-row absolute bottom-0 left-0 w-full bg-white p-4 flex justify-end\">\n <slot name=\"action\"></slot>\n <template v-for=\"action in reversedActions\" :key=\"action.Title\">\n <ActionButton :config=\"action\" :data=\"_data\" class=\"action\" @click=\"clickHandler\"/>\n </template>\n </div>\n </div>\n</template>\n\n<style lang=\"stylus\" scoped>\n.page-container {\n .page-title {\n font-size $size-text-heavy\n }\n}\n\n.action-row {\n .action + .action {\n margin-inline-start $gap-8\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, reactive, ref } from 'vue'\nimport { getPageData, getListData, type PageConfig, type FieldConfig, type Action } from '@/services/dataGen'\nimport type {TableColumnData} from '@arco-design/web-vue'\nimport { Spin } from '@arco-design/web-vue'\nimport ActionButton from '@/components/data-gen/actions/index.vue'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\nimport { useLibraryRouter } from '@/composables/useRouter'\nimport type { RedirectType } from '@/types'\n\nconst router = useLibraryRouter()\n\nconst props = defineProps<{\n className: string\n}>()\n\nconst pageData = ref<PageConfig>()\n\nconst paging = reactive({\n current: 1,\n total: 0,\n pageSize: 20,\n defaultPageSize: 20,\n showTotal: true,\n showPageSize: true,\n})\nconst listFilter = computed(() => {\n return {\n PageNumber: paging.current - 1,\n PageSize: paging.pageSize,\n Filters: [],\n Sorts: [],\n }\n})\n\ntype ListColumn = {\n title: string\n dataIndex: string\n order: number\n}\n\nconst _columns = ref<TableColumnData[]>([])\nconst _data = ref<object[]>([])\nconst loadingPage = ref(true)\nconst loadingTable = ref(true)\n\nconst actions = ref<Action[]>()\n\nconst mapColumns = (fields: Record<string, FieldConfig>) => {\n console.log(fields)\n _columns.value = Object.entries(fields)\n .filter(([, item]) => item.widget?.column)\n .map(([key, value]) => {\n return {\n title: value.widget!.Title,\n dataIndex: key.charAt(0).toLowerCase() + key.slice(1),\n order: value.order,\n } as ListColumn\n })\n .sort((a, b) => a.order - b.order)\n\n _columns.value.push({\n title: 'Actions',\n slotName: 'optional',\n })\n}\nconst loadData = async () => {\n loadingTable.value = true\n const res = await getListData(props.className, listFilter.value)\n _data.value = res.data\n paging.total = res.totalCount\n actions.value = res.actions\n loadingTable.value = false\n}\nonMounted(async () => {\n loadingPage.value = true\n pageData.value = await getPageData(3, {\n className: props.className,\n })\n mapColumns(pageData.value.fields)\n loadingPage.value = false\n loadData()\n})\n\nconst pageChangeHandler = (page: number) => {\n paging.current = page\n loadData()\n}\n\nconst pageSizeChangeHandler = (pageSize: number) => {\n paging.pageSize = pageSize\n loadData()\n}\n\nfunction clickHandler(type: ActionTypeEnum, _: string, redirectType: RedirectType, workflowId: string) {\n switch (type) {\n case ActionTypeEnum.Link:\n router.push({name: redirectType, params: { workflowId }})\n // console.log('Link action clicked with URL:', url, title)\n break\n default:\n console.warn('Unknown action type:', type)\n }\n}\n\nfunction createHandler(type: ActionTypeEnum, _: string, redirectType: RedirectType) {\n switch (type) {\n case ActionTypeEnum.Link:\n router.push({name: redirectType})\n // console.log('Link action clicked with URL:', url, title)\n break\n default:\n console.warn('Unknown action type:', type)\n }\n}\n</script>\n\n<template>\n <div class=\"page-container relative h-full\">\n <div class=\"page-title p-4 bg-white\">\n <slot name=\"title\">\n <div class=\"title\">{{ className }} : List</div>\n <template v-for=\"action in actions\" :key=\"action.title\">\n <template v-if=\"action.location === 'InOperation'\">\n <ActionButton :config=\"action\" class=\"action\" @click=\"(...args)=>createHandler(...args)\"/>\n </template>\n </template>\n </slot>\n </div>\n <a-spin :loading=\"loadingPage\" class=\"page-conteont p-2\">\n <slot name=\"content\">\n <ATable\n :columns=\"_columns\"\n :data=\"_data\"\n stripe\n border\n page-position=\"bl\"\n :pagination=\"paging\"\n :loading=\"loadingTable\"\n @page-change=\"pageChangeHandler\"\n @page-size-change=\"pageSizeChangeHandler\"\n >\n <template #optional=\"{ record }\">\n <template v-for=\"action in actions\" :key=\"action.title\">\n <template v-if=\"action.location === 'InTable'\">\n <ActionButton :config=\"action\" class=\"action\" @click=\"(...args)=>clickHandler(...args, record.workflowId)\"/>\n </template>\n </template>\n </template>\n </ATable>\n </slot>\n </a-spin>\n </div>\n</template>\n\n<style lang=\"stylus\" scoped></style>\n","import { inject, type InjectionKey } from 'vue'\nimport type { Pinia } from 'pinia'\n\nexport const PiniaKey: InjectionKey<Pinia> = Symbol('library-pinia')\n\nexport function useLibraryPinia(): Pinia | null {\n // 从注入中获取宿主提供的 pinia\n return inject(PiniaKey, null)\n}\n","import type { App } from 'vue'\nimport type { Router } from 'vue-router'\nimport type { Pinia } from 'pinia'\nimport CreateView from '@/components/data-gen/views/CreateView.vue'\nimport UpdateView from '@/components/data-gen/views/UpdateView.vue'\nimport DetailView from '@/components/data-gen/views/DetailView.vue'\nimport ListView from '@/components/data-gen/views/ListView.vue'\nimport { RouterKey } from '@/composables/useRouter'\nimport { PiniaKey } from '@/composables/usePinia'\n\ninterface PluginOptions {\n router?: Router\n pinia?: Pinia\n [key: string]: any\n}\n\nconst MyPlugin = {\n install(app: App, options: PluginOptions = {}) {\n // 如果宿主提供了 router,注入它以便共享\n if (options.router) {\n app.provide(RouterKey, options.router)\n }\n \n // 如果宿主提供了 pinia,注入它以便共享\n if (options.pinia) {\n app.provide(PiniaKey, options.pinia)\n }\n \n // 注册组件\n app.component('CreateView', CreateView)\n app.component('UpdateView', UpdateView)\n app.component('DetailView', DetailView)\n app.component('ListView', ListView)\n }\n}\n\nexport default MyPlugin\n\nexport { CreateView, UpdateView, DetailView, ListView }\nexport { RouterKey } from '@/composables/useRouter'\nexport { PiniaKey } from '@/composables/usePinia'"],"names":["useLibraryMainStore","defineStore","ref","sleep","tick","resolve","getStoreData","store","key","remoteFunction","defaultValue","e","ApiBase","AppSecret","axios","Axios","getToken","mainStore","getAxios","token","dataGetter","PageActionType","mapPageData","input","config","attr","fieldName","fieldData","fieldConfig","attributes","propertyValue","getPageData","type","opt","res","getListData","className","item","createData","data","url","replaceId","id","updateData","replacedUrl","replaceWorkflowId","replaceEmail","email","replaceReason","reason","approveData","getOptions","value","validateRules","configs","valid","vallidateRule","RuleName","RuleParameter","validations","parameter","props","__props","emits","__emit","validate","v","inputHandler","changeHandler","_createBlock","_component_AInput","max","min","onMounted","_component_AInputNumber","loading","_options","loadOptions","_component_ASelect","modelValue","_createElementBlock","_Fragment","_renderList","_component_AOption","fieldNames","_component_ASpace","_createVNode","_component_ACascader","uploadRef","fileList","workflowId","action","computed","__expose","nextTick","_component_a_upload","$event","_cache","_component_ATextarea","widgetRef","useTemplateRef","_value","watch","newValue","curComp","InputText","InputNumber","SelectList","Cascader","FileUpload","TextArea","errMsg","errHandler","updateHandler","isFileUpload","_openBlock","_hoisted_1","_createElementVNode","_hoisted_2","_toDisplayString","_hoisted_3","_hoisted_4","_resolveDynamicComponent","_hoisted_5","ActionTypeEnum","clickHandler","_component_AButton","_renderSlot","_ctx","_component_ALink","redirectType","SubmitButton","DetailLink","curUrl","RedirectType","RouterKey","useLibraryRouter","injectedRouter","inject","useVueRouter","router","pageData","_fields","w","a","b","reversedActions","_data","reactive","dataWidgetsRef","widget","_component_a_spin","DataWidgets","ActionButton","_component_a_descriptions","paging","listFilter","_columns","loadingPage","loadingTable","actions","mapColumns","fields","loadData","pageChangeHandler","page","pageSizeChangeHandler","pageSize","createHandler","args","_component_ATable","_withCtx","record","PiniaKey","MyPlugin","app","options","CreateView","UpdateView","DetailView","ListView"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/stores/useLibraryMainStore.ts","../src/assets/js/util.ts","../src/services/axios.ts","../src/services/dataGetter.ts","../src/services/dataGen.ts","../src/services/validation.ts","../src/components/data-gen/widgets/InputText.vue","../src/components/data-gen/widgets/InputNumber.vue","../src/components/data-gen/widgets/SelectList.vue","../src/components/data-gen/widgets/Cascader.vue","../src/components/data-gen/widgets/FileUpload.vue","../src/components/data-gen/widgets/TextArea.vue","../src/components/data-gen/widgets/index.vue","../src/components/data-gen/actions/types.ts","../src/components/data-gen/actions/SubmitButton.vue","../src/components/data-gen/actions/DetailLink.vue","../src/components/data-gen/actions/index.vue","../src/composables/useRouter.ts","../src/components/data-gen/views/CreateView.vue","../src/components/data-gen/views/UpdateView.vue","../src/components/data-gen/views/DetailView.vue","../src/components/data-gen/views/ListView.vue","../src/composables/usePinia.ts","../src/main.ts"],"sourcesContent":["import { defineStore } from 'pinia'\nimport { ref } from 'vue'\n\nexport const useLibraryMainStore = defineStore('main', () => {\n const token = ref<string | undefined>(undefined)\n \n return {\n token\n }\n})\n","import type { Store } from 'pinia'\n\n/**\n * 该函数用于创建一个异步的延迟操作,使程序暂停执行指定的毫秒数。\n * @param tick - 延迟的毫秒数。\n * @returns 一个 Promise,在指定的毫秒数后解析。\n */\nexport const sleep = async (tick: number) => new Promise((resolve) => setTimeout(resolve, tick))\n\n/**\n * async get data from store, if store ie empty load from remote.\n * @param store Target Pinia store\n * @param key Data key\n * @param remoteFunction Remote load function\n * @param defaultValue data default value\n * @returns {Promise<*>}\n */\nexport const getStoreData = async (\n store: Record<string, any>,\n key: string,\n remoteFunction: Function,\n defaultValue = undefined\n) => {\n // if store data is undefined, store at initial state.\n // then set store data to null and load from remote\n if (store[key] === undefined) {\n try {\n store[key] = null\n store[key] = (await remoteFunction()) || defaultValue\n } catch (e) {\n // if remote hih uncaught error, then set store data to initial state.\n console.error(e)\n store[key] = undefined\n }\n }\n // if store data is null, then other threads is loading data from remote.\n // wait certain time to until data loaded. Mean to save http resource\n while (store[key] === null) {\n await sleep(100)\n }\n return store[key]\n}\n\n/**\n * Pat a 0 to left if input string length is 1\n * @param str\n * @returns {string}\n */\nexport const patLeft0 = (str: any): string => {\n const s = `0${str}`\n return s.substring(s.length - 2)\n}\n\n/**\n * Format date as input format.\n * @param date input date\n * @param format date format, default as 'yyyy-MM-dd hh:mm:ss'\n * @returns {string|*}\n */\nexport const dateFormatter = (date: Date | string, format = 'yyyy-MM-dd hh:mm:ss'): string => {\n if (!date || (typeof date === 'string' && date.length === 0)) {\n return ''\n }\n\n try {\n const _date = new Date(date)\n const meta = [\n ['yyyy', _date.getFullYear()],\n ['yy', _date.getFullYear().toString().substring(2)],\n ['MM', patLeft0(_date.getMonth() + 1)],\n ['M', _date.getMonth() + 1],\n ['dd', patLeft0(_date.getDate())],\n ['d', _date.getDate()],\n ['hh', patLeft0(_date.getHours())],\n ['h', _date.getHours()],\n ['mm', patLeft0(_date.getMinutes())],\n ['m', _date.getMinutes()],\n ['ss', patLeft0(_date.getSeconds())],\n ['s', _date.getSeconds()]\n ] as [string, string][]\n\n for (const [key, value] of meta) {\n format = format.replace(key, value)\n }\n\n return format\n } catch (e) {\n return date.toLocaleString()\n }\n}\n","import { default as Axios } from 'axios'\nimport { useLibraryMainStore } from '@/stores/useLibraryMainStore'\nimport { getStoreData } from '../assets/js/util'\n\nconst ApiBase = import.meta.env.VITE_BPM_API_BASE || ''\nconst AppSecret = import.meta.env.VITE_BPM_APP_SECRET || ''\n\nconst axios = Axios.create({\n baseURL: ApiBase,\n timeout: 10000, // 10s\n headers: { 'Content-Type': 'application/json' },\n})\n\nexport const getToken = async () => {\n const mainStore = useLibraryMainStore()\n return await getStoreData(mainStore, 'token', async () => {\n const res = await axios.get<{ token: string }>(`${ApiBase}/GenerateToken`, {\n params: {\n appid: 'bpm',\n appsecret: AppSecret,\n },\n })\n\n return res?.data?.token\n })\n}\n\nexport const getAxios = async () => {\n const token = await getToken()\n axios.defaults.headers.common['Authorization'] = `Bearer ${token}`\n return axios\n}\n","export default {\n CurrentUserEmail: () => 'test.email@dataGetter.ts',\n CurrentUserPositionCode: () => 888,\n CurrentDatetime: () => new Date().toISOString(),\n ApproverEmail: () => 'test.approver@sanofi.com',\n ApproverPositionCode: () => 999,\n RejectReason: () => 'Test Reject Reason',\n} as { [key: string]: Function }\n","import type { RedirectType } from '@/types'\nimport { getAxios } from './axios'\nimport { default as dataGetter } from './dataGetter'\n\nexport type SelectOption = {\n value: string | number\n label: string\n [key: string]: unknown\n}\n\nexport type WidgetConfig = {\n Widget: string\n Readonly: boolean\n Title: string\n DataSourceProvider: string\n options?: SelectOption[]\n multiple?: boolean\n remote?: string\n UploadURL?: string\n [key: string]: unknown\n}\n\nexport type ValidationConfig = {\n RuleName: string\n RuleParameter: any\n}\n\nexport type FieldConfig = {\n widget?: WidgetConfig\n order?: number\n validations: ValidationConfig[]\n value?: any\n column?: boolean\n}\n\nexport type ActionConfig = {\n isSubmit?: boolean\n requestUrl?: string\n redirectUrl?: string\n title: string\n widget: string\n redirectType?: RedirectType\n}\n\nexport type PageConfig = {\n pageType: string\n fields: Record<string, FieldConfig>\n actions?: ActionConfig[]\n globalValidations: Array<{\n rule: string\n param?: any\n appliesTo: string[]\n }>\n}\n\ntype FieldData = {\n attributes: Object[]\n propertyValue?: any\n}\n\nexport enum PageActionType {\n Create = 0,\n Update = 1,\n Details = 2,\n list = 3,\n}\n\nfunction mapPageData(input: any): PageConfig {\n const config: PageConfig = {\n pageType: '',\n fields: {},\n globalValidations: [],\n }\n\n // 处理ClassAttributes\n input.__ClassAttributes?.forEach((attr: any) => {\n if (attr.AttributeType === 'UIPageType') {\n config.pageType = attr.Type\n } else if (attr.AttributeType === 'UIValidationControl') {\n config.globalValidations.push({\n rule: attr.RuleName,\n param: attr.RuleParameter,\n appliesTo: attr.PropertyNames || ['*'],\n })\n } else if (attr.AttributeType === 'UIControl') {\n if (!config.actions) {\n config.actions = []\n }\n config.actions.push({\n isSubmit: attr.IsSubmit,\n requestUrl: attr.RequestUrl,\n redirectUrl: attr.RedirectUrl,\n redirectType: attr.RedirectType,\n title: attr.Title,\n widget: attr.Widget,\n })\n }\n })\n\n // 处理字段配置\n Object.entries(input).forEach(([fieldName, fieldData]) => {\n if (fieldName === '__ClassAttributes' || fieldName === 'ClassName') return\n\n const fieldConfig: FieldConfig = {\n validations: [],\n }\n\n const { attributes, propertyValue } = fieldData as FieldData\n\n // 处理字段值\n switch (propertyValue) {\n case null:\n fieldConfig.value = ''\n break\n case undefined:\n fieldConfig.value = ''\n break\n default:\n fieldConfig.value = propertyValue\n break\n }\n\n // 处理控件属性\n attributes?.forEach((attr: any) => {\n if (attr.order || attr.Order) {\n fieldConfig.order = (attr.order ?? attr.Order) as number\n } else if (attr.AttributeType === 'UIControl') {\n // fieldConfig.widget = attr as WidgetConfig\n fieldConfig.widget = {\n ...attr,\n column: true,\n } as WidgetConfig\n } else if (attr.AttributeType === 'UIValidationControl') {\n fieldConfig.validations.push(attr as ValidationConfig)\n } else if (attr.AttributeType === 'UIListed') {\n fieldConfig.widget = {\n ...attr,\n column: true,\n } as WidgetConfig\n } else if (attr.DependentType) {\n fieldConfig.value = dataGetter[attr.DependentType] ? dataGetter[attr.DependentType]() : ''\n }\n })\n\n config.fields[fieldName] = fieldConfig\n })\n\n return config\n}\n\nexport const getPageData = async (\n type: PageActionType,\n opt: {\n className: string\n workflowId?: string\n }\n) => {\n const axios = await getAxios()\n const res = await axios.get(`/General/${type}/page`, { params: opt })\n return mapPageData(res?.data)\n}\n\nexport type Action = {\n redirectUrl: string,\n location: 'InTable' | 'InOperation',\n attributeType: 'UIControl',\n readonly: boolean,\n widget: 'Link',\n title: 'Approve' | 'Create' | 'Update',\n isSubmit: boolean\n}\n\nexport type ListDataRes = {\n __ClassAttributes: {\n RedirectUrl: string,\n Location: 'InTable' | 'InOperation',\n AttributeType: 'UIControl',\n Readonly: boolean,\n Widget: 'Link',\n Title: 'Approve' | 'Create' | 'Update',\n IsSubmit: boolean\n RedirectType: RedirectType,\n }[],\n Data: {\n propertyValue: ListData\n }\n}\n\ntype ListData = {\n data: object[]\n totalCount: number\n}\n\nexport async function getListData(\n className: string,\n opt: {\n Filters: object[]\n Sorts: object[]\n PageNumber: number\n PageSize: number\n }\n) {\n const axios = await getAxios()\n const res = await axios.get<ListDataRes>(`/General/${className}/list`, { params: opt })\n return {\n data: res.data.Data.propertyValue.data,\n totalCount: res.data.Data.propertyValue.totalCount,\n actions: res.data.__ClassAttributes.filter(item=> item.AttributeType === 'UIControl').map((attr) => {\n return {\n redirectUrl: attr.RedirectUrl,\n location: attr.Location,\n attributeType: attr.AttributeType,\n redirectType: attr.RedirectType,\n readonly: attr.Readonly,\n widget: attr.Widget,\n title: attr.Title,\n isSubmit: attr.IsSubmit,\n }\n }\n ),\n }\n}\n\nexport async function createData(className: string, data: object, url: string) {\n const axios = await getAxios()\n const res = await axios.post<number[]>(url, data, {\n params: {\n className,\n },\n })\n return res.data.length > 0 ? res.data[0] : 0\n}\n\nfunction replaceId(url: string, id: string): string {\n return url.replace(/{workflowId}/g, id)\n}\n\nexport async function updateData(className: string, id: string, data: object, url: string) {\n const axios = await getAxios()\n const replacedUrl = replaceId(url, id)\n const res = await axios.put(replacedUrl, data, {\n params: {\n className,\n },\n })\n return res?.data\n}\n\nfunction replaceWorkflowId(url: string, id: string): string {\n return url.replace(/{WorkflowId}/g, id)\n}\n\nfunction replaceEmail(url: string, email: string): string {\n return url.replace(/{ApproverEmail}/g, email)\n}\n\nfunction replaceReason(url: string, reason: string): string {\n return url.replace(/{WorkFlowReason}/g, reason)\n}\n\nexport async function approveData(className: string, id: string, email: string, reason: string, data: object, url: string) {\n const axios = await getAxios()\n let replacedUrl = replaceWorkflowId(url, id)\n replacedUrl = replaceEmail(replacedUrl, email)\n replacedUrl = replaceReason(replacedUrl, reason)\n const res = await axios.put(replacedUrl, data, {\n params: {\n className,\n },\n })\n return res?.data\n}\n\nexport async function getOptions(url: string, value?: string): Promise<SelectOption[]> {\n const axios = await getAxios()\n const res = await axios.get(url, { params: { value } })\n const list = res?.data as { key: string; value: string }[]\n return list.map((item) => ({\n value: item.key,\n label: item.value,\n }))\n}","import type { ValidationConfig } from './dataGen'\n\nexport const validateRules = (configs: ValidationConfig[], value: any) => {\n return configs.reduce((valid, config) => {\n return valid && vallidateRule(config, value)\n }, true)\n}\n\nexport const vallidateRule = (config: ValidationConfig, value: any): boolean => {\n const { RuleName, RuleParameter } = config\n return validations[RuleName](RuleParameter, value as string)\n}\n\nconst validations = {\n Regex: (parameter: string, value: string): boolean => {\n const reg = new RegExp(parameter)\n return reg.test(value)\n },\n} as { [key: string]: Function }\n","<script lang=\"ts\" setup>\nimport type { FormCompProps, FormCompEmits } from './index'\nimport { validateRules } from '@/services/validation'\n\ntype MyEmits = FormCompEmits & {\n (e: 'input', value: any): void\n}\n\nconst props = defineProps<FormCompProps>()\nconst emits = defineEmits<MyEmits>()\n\nconst validate = (v?: string | null) => {\n return validateRules(props.validations!, v)\n}\n\nconst inputHandler = (v?: string | null): void => {\n emits('update:modelValue', v)\n emits('input', v)\n}\n\nconst changeHandler = (v?: string | null): void => {\n const valid = validate(v)\n\n emits('update:modelValue', v)\n emits('change', v)\n emits('error', valid ? '' : 'Validation Error')\n}\n</script>\n\n<template>\n <AInput\n :model-value=\"props.modelValue\"\n clearable\n :disabled=\"props.readonly || props.config.Readonly\"\n @input=\"inputHandler\"\n @change=\"changeHandler\"\n ></AInput>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, onMounted } from 'vue'\nimport type { FormCompProps, FormCompEmits } from './index'\n\ntype MyEmits = FormCompEmits & {\n (e: 'input', value: any): void\n}\n\nconst props = defineProps<FormCompProps>()\nconst emits = defineEmits<MyEmits>()\n\nconst max = ref<number>(100)\nconst min = ref<number>(0)\nonMounted(() => {\n if (props.validations) {\n props.validations.forEach((v) => {\n if (v.RuleName === 'Max') {\n max.value = v.RuleParameter\n }\n if (v.RuleName === 'Min') {\n min.value = v.RuleParameter\n }\n })\n }\n})\n\nconst inputHandler = (v?: number | null): void => {\n emits('update:modelValue', v)\n emits('input', v)\n}\n\nconst changeHandler = (v?: number | null): void => {\n emits('update:modelValue', v)\n emits('change', v)\n}\n</script>\n\n<template>\n <AInputNumber\n :model-value=\"props.modelValue\"\n clearable\n :disabled=\"props.readonly\"\n :min=\"min\"\n :max=\"max\"\n @input=\"inputHandler\"\n @change=\"changeHandler\"\n ></AInputNumber>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, onMounted } from 'vue'\nimport { getOptions } from '@/services/dataGen'\nimport type { WidgetConfig, SelectOption } from '@/services/dataGen'\n\nconst props = defineProps<{\n modelValue: string\n config: WidgetConfig\n}>()\nconst emits = defineEmits<{\n (e: 'update:modelValue', value?: string | number | null): void\n (e: 'change', value?: string | number | null): void\n}>()\n\nconst loading = ref<boolean>(false)\nconst _options = ref<SelectOption[]>(props.config.options ?? [])\nconst loadOptions = async () => {\n _options.value = await getOptions(props.config.DataSourceProvider)\n}\nonMounted(loadOptions)\n\nconst changeHandler = (v?: string | number | null) => {\n emits('update:modelValue', v)\n emits('change', v)\n}\n</script>\n\n<template>\n <ASelect\n :model-value=\"modelValue\"\n :loading=\"loading\"\n :filter-option=\"true\"\n :allow-search=\"true\"\n @change=\"changeHandler\"\n >\n <template v-for=\"item in _options\" :key=\"item.value\">\n <AOption :value=\"item.value\" :label=\"item.label\"></AOption>\n </template>\n </ASelect>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, onMounted } from 'vue'\nimport type { WidgetConfig, SelectOption } from '@/services/dataGen'\nimport { getAxios } from '@/services/axios'\n\nconst props = defineProps<{\n modelValue: string\n config: WidgetConfig\n}>()\nconst emits = defineEmits<{\n (e: 'update:modelValue', value?: string | number | null): void\n (e: 'change', value?: string | number | null): void\n}>()\n\nconst _options = ref<SelectOption[]>(props.config.options ?? [])\n\nconst changeHandler = (v?: string | number | null) => {\n emits('update:modelValue', v)\n emits('change', v)\n}\n\nonMounted(async () => {\n if (props.config) {\n const url = props.config.DataSourceProvider\n if (url) {\n const axios = await getAxios()\n const res = await axios.get(url)\n _options.value = res.data as SelectOption[]\n }\n }\n})\n\nconst fieldNames = { value: 'key', label: 'value' }\n</script>\n\n<template>\n <ASpace direction=\"vertical\" size=\"large\">\n <ACascader\n :field-names=\"fieldNames\"\n :model-value=\"modelValue\"\n :options=\"_options\"\n :style=\"{ width: '320px' }\"\n placeholder=\"Please select ...\"\n @change=\"changeHandler\"\n />\n </ASpace>\n</template>\n","<script lang=\"ts\" setup>\nimport { ref, computed,nextTick } from 'vue'\nimport type {UploadInstance, FileItem} from '@arco-design/web-vue'\nimport type { WidgetConfig } from '@/services/dataGen'\n\nconst props = defineProps<{\n config: WidgetConfig\n}>()\nconst emits = defineEmits<{\n (e: 'update:modelValue', value?: string | number | null): void\n (e: 'change', value?: string | number | null): void\n}>()\n\nconst ApiBase = import.meta.env.VITE_BPM_API_BASE || ''\n\nconst uploadRef = ref<UploadInstance | null>(null)\n\nconst id = ref<number>(0)\n\nconst fileList = ref<FileItem[]>([])\n\nfunction replaceId(url: string, workflowId: string): string {\n return url.replace(/{WorkflowId}/g, workflowId)\n}\n\nconst action = computed<string>(() => {\n if(props.config.UploadURL){\n const url = ApiBase + props.config.UploadURL\n return replaceId(url, id.value.toString())\n }\n return ''\n})\n\n//const _options = ref<SelectOption[]>(props.config.options ?? [])\n\nconst changeHandler = (v?: string | number | null) => {\n //emits('update:modelValue', v)\n emits('change', v)\n}\n\ndefineExpose({\n submit(workflowId: number){\n console.log('🚀 ~ submit ~ workflowId:', workflowId)\n if (uploadRef.value) {\n if(props.config.UploadURL){\n id.value = workflowId\n }\n nextTick(() => {\n uploadRef.value.submit()\n })\n }\n }\n})\n</script>\n\n<template>\n <a-upload\n ref=\"uploadRef\"\n v-model=\"fileList\"\n :auto-upload=\"false\"\n :action=\"action\"\n @change=\"changeHandler\"\n >\n <template #start-icon></template>\n </a-upload>\n</template>","<script lang=\"ts\" setup>\nimport type { FormCompProps, FormCompEmits } from './index'\n\ntype MyEmits = FormCompEmits & {\n (e: 'input', value: any): void\n}\n\nconst props = defineProps<FormCompProps>()\nconst emits = defineEmits<MyEmits>()\n\nconst inputHandler = (v?: string | null): void => {\n emits('update:modelValue', v)\n emits('input', v)\n}\n\nconst changeHandler = (v?: string | null): void => {\n emits('update:modelValue', v)\n emits('change', v)\n}\n</script>\n\n<template>\n <ATextarea\n :model-value=\"props.modelValue\"\n placeholder=\"Please enter something\"\n allow-clear\n :disabled=\"props.readonly\"\n @input=\"inputHandler\"\n @change=\"changeHandler\"\n />\n</template>","<script lang=\"ts\" setup>\nimport type { FormCompProps, FormCompEmits } from './index'\nimport type { FieldConfig } from '@/services/dataGen'\nimport { ref, watch, computed, useTemplateRef } from 'vue'\nimport InputText from './InputText.vue'\nimport InputNumber from './InputNumber.vue'\nimport SelectList from './SelectList.vue'\nimport Cascader from './Cascader.vue'\nimport FileUpload from './FileUpload.vue'\nimport TextArea from './TextArea.vue'\n\ntype FieldCompProps = {\n config: FieldConfig\n} & FormCompProps\n\nconst props = defineProps<FieldCompProps>()\nconst emits = defineEmits<FormCompEmits>()\n\nconst widgetRef = useTemplateRef('widgetRef')\n\nconst _value = ref<string | number>(props.modelValue || props.config?.value)\nwatch(_value, (newValue) => {\n emits('update:modelValue', newValue)\n})\n\nconst curComp = computed(() => {\n switch (props.config?.widget?.Widget) {\n case 'TextBox':\n return InputText\n case 'Number':\n return InputNumber\n case 'SelectList':\n return SelectList\n case 'Cascade':\n return Cascader\n case 'File':\n return FileUpload\n case 'TextArea':\n return TextArea\n case 'DropDown':\n return SelectList\n default:\n return InputText\n }\n})\n\nconst errMsg = ref<string>('')\nconst errHandler = (v: string) => {\n errMsg.value = v\n}\n\nconst changeHandler = (v: any): void => emits('change', v)\nconst updateHandler = (v: any): void => emits('update:modelValue', v)\n\nfunction isFileUpload() {\n return props.config?.widget?.Widget === 'File'\n}\n\ndefineExpose({\n isFileUpload(){\n return props.config?.widget?.Widget === 'File'\n },\n submit(workflowId: number) {\n if (isFileUpload()) {\n (widgetRef.value as InstanceType<typeof FileUpload>).submit(workflowId)\n }\n }\n})\n</script>\n\n<template>\n <div class=\"widget-wrapper\">\n <div class=\"title mb-1.5\">{{ props?.config?.widget?.Title }}</div>\n <div class=\"form-widget\">\n <div class=\"widget\">\n <component\n ref=\"widgetRef\"\n :is=\"curComp\"\n :model-value=\"props.modelValue\"\n :config=\"props.config.widget\"\n :validations=\"props.config.validations\"\n @error=\"errHandler\"\n @change=\"changeHandler\"\n @update:modelValue=\"updateHandler\"\n ></component>\n </div>\n <div v-if=\"errMsg.length > 0\" class=\"err-msg\">{{ errMsg }}</div>\n </div>\n </div>\n</template>\n\n<style lang=\"stylus\" scoped>\n.err-msg {\n font-size $size-text-light\n color $color-red\n margin-top $gap-4\n}\n</style>\n","import type { RedirectType } from '@/types'\n\ntype ActionProps = {\n // title: string,\n url: string\n redirectType: RedirectType\n}\n\nenum ActionTypeEnum {\n Submit,\n Link\n}\n\n// type ActionType = 'submit' | 'link'\n\ntype ActionEmits = {\n (e: 'click', type: ActionTypeEnum, url: string, redirectType: RedirectType): void\n}\n\nexport type {\n ActionProps,\n ActionEmits\n}\n\nexport { ActionTypeEnum }","<script setup lang=\"ts\">\nimport type { ActionProps, ActionEmits } from '@/components/data-gen/actions/types'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\n\nconst props = defineProps<ActionProps>()\n\nconst emits = defineEmits<ActionEmits>()\n\nfunction clickHandler() {\n emits('click', ActionTypeEnum.Submit, props.url, props.redirectType)\n}\n</script>\n\n<template>\n <AButton @click=\"clickHandler\">\n <slot></slot>\n </AButton>\n</template>","<script setup lang=\"ts\">\nimport type { ActionProps, ActionEmits } from '@/components/data-gen/actions/types'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\n\nconst props = defineProps<ActionProps>()\n\nconst emits = defineEmits<ActionEmits>()\n\nfunction clickHandler() {\n emits('click', ActionTypeEnum.Link, props.url, props.redirectType)\n}\n</script>\n\n<template>\n<ALink @click=\"clickHandler\">\n <slot></slot>\n</ALink>\n</template>","<script setup lang=\"ts\">\nimport type { ActionConfig } from '@/services/dataGen'\nimport type { ActionEmits } from '@/components/data-gen/actions/types'\nimport { computed } from 'vue'\nimport SubmitButton from '@/components/data-gen/actions/SubmitButton.vue'\nimport DetailLink from '@/components/data-gen/actions/DetailLink.vue'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\nimport type { RedirectType } from '@/types'\n\nconst props = defineProps<{\n config: ActionConfig\n}>()\n\nconst emits = defineEmits<ActionEmits>()\n\nfunction clickHandler(type:ActionTypeEnum, url: string, redirectType: RedirectType) {\n emits('click', type, url, redirectType)\n}\n\nconst curComp = computed(() => {\n switch (props.config.widget) {\n case 'Submit':\n return SubmitButton\n case 'Link':\n default:\n return DetailLink\n }\n})\n\nconst curUrl = computed(() => {\n if (props.config.widget === 'Submit') {\n return props.config.requestUrl ?? ''\n } else if (props.config.widget === 'Link') {\n return props.config.redirectUrl ?? ''\n }\n return ''\n})\n\nconst RedirectType = computed(() => {\n return props.config.redirectType ?? 'Details'\n})\n</script>\n\n<template>\n <component\n :is=\"curComp\"\n :url=\"curUrl\"\n :redirect-type=\"RedirectType\"\n @click=\"clickHandler\"\n >\n {{ props.config.title }}\n </component>\n</template>\n\n<style lang=\"stylus\" scoped></style>\n","import { inject, type InjectionKey } from 'vue'\nimport { useRouter as useVueRouter } from 'vue-router'\nimport type { Router } from 'vue-router'\n\nexport const RouterKey: InjectionKey<Router> = Symbol('library-router')\n\nexport function useLibraryRouter(): Router {\n // 首先尝试从注入中获取宿主提供的 router\n const injectedRouter = inject(RouterKey, null)\n if (injectedRouter) {\n return injectedRouter\n }\n \n // 如果没有注入,回退到标准的 useRouter\n return useVueRouter()\n}\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, reactive, ref, useTemplateRef } from 'vue'\nimport { getPageData, PageActionType, createData, type PageConfig, type FieldConfig } from '@/services/dataGen'\nimport DataWidgets from '@/components/data-gen/widgets/index.vue'\nimport ActionButton from '@/components/data-gen/actions/index.vue'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\nimport { useLibraryRouter } from '@/composables/useRouter'\nimport type { RedirectType } from '@/types'\n\nconst router = useLibraryRouter()\n\nconst props = defineProps<{\n className: string\n}>()\n\nconst pageData = ref<PageConfig>()\n\ntype WidgetConfig = {\n fieldKey: string\n} & FieldConfig\nconst _fields = computed(() => {\n if (!pageData.value?.fields) return []\n const list: WidgetConfig[] = Object.entries(pageData.value.fields)\n .map(([key, value]) => {\n return {\n fieldKey: key,\n ...value,\n } as WidgetConfig\n })\n .filter((w) => w.widget && w.widget.Widget !== 'Hidden')\n .sort((a: WidgetConfig, b: WidgetConfig) => (a.order ?? 0) - (b.order ?? 0))\n\n return list\n})\nconst reversedActions = computed(() => {\n if (!pageData.value?.actions) return []\n return [...pageData.value.actions].reverse()\n})\n\nconst _data = reactive<Record<string, any>>({})\nconst loading = ref(false)\nconst dataWidgetsRef = useTemplateRef('dataWidgetsRef')\nonMounted(async () => {\n loading.value = true\n pageData.value = await getPageData(PageActionType.Create, {\n className: props.className,\n })\n for (const key in pageData.value.fields) {\n _data[key] = pageData.value.fields[key].value\n }\n loading.value = false\n})\n\nasync function clickHandler(type: ActionTypeEnum, url: string, redirectType: RedirectType) {\n switch (type) {\n case ActionTypeEnum.Submit:\n const res = await createData(props.className, _data, url)\n dataWidgetsRef.value?.filter((widget) => {\n if (widget?.submit) {\n widget.submit(res)\n }\n })\n router.push({name: 'List'})\n break\n case ActionTypeEnum.Link:\n if(redirectType === 'List') {\n router.push({name: 'List'})\n }\n break\n default:\n console.warn('Unknown action type:', type)\n }\n}\n</script>\n<template>\n <div class=\"page-container relative h-full\">\n <div class=\"page-title p-4 bg-white\">\n <slot name=\"title\">\n <div class=\"title\">{{ className }} : Create</div>\n </slot>\n </div>\n <a-spin :loading=\"loading\" class=\"page-content p-2\">\n <div class=\"fields grid grid-cols-3 gap-8 bg-white p-4\">\n <template v-for=\"(value, key) in _fields\" :key=\"value.fieldKey\">\n <div class=\"field\">\n <DataWidgets ref=\"dataWidgetsRef\" :name=\"key\" :config=\"value\" v-model=\"_data[value.fieldKey]\"></DataWidgets>\n </div>\n </template>\n </div>\n <slot name=\"content\"></slot>\n </a-spin>\n <div class=\"action-row absolute bottom-0 left-0 w-full bg-white p-4 flex justify-end\">\n <slot name=\"action\"></slot>\n <template v-for=\"action in reversedActions\" :key=\"action.Title\">\n <ActionButton :config=\"action\" class=\"action\" @click=\"clickHandler\"/>\n </template>\n </div>\n </div>\n</template>\n\n<style lang=\"stylus\" scoped>\n.page-container {\n .page-title {\n font-size $size-text-heavy\n }\n}\n\n.action-row {\n .action + .action {\n margin-inline-start $gap-8\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, reactive, ref } from 'vue'\nimport { getPageData, updateData, PageActionType, type PageConfig, type FieldConfig } from '@/services/dataGen'\nimport DataWidgets from '@/components/data-gen/widgets/index.vue'\nimport ActionButton from '@/components/data-gen/actions/index.vue'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\nimport { Spin } from '@arco-design/web-vue'\nimport { useLibraryRouter } from '@/composables/useRouter'\nimport type {RedirectType} from '@/types'\n\nconst router = useLibraryRouter()\n\nconst props = defineProps<{\n className: string,\n workflowId: string\n}>()\n\nconst pageData = ref<PageConfig>()\n\ntype WidgetConfig = {\n fieldKey: string\n} & FieldConfig\nconst _fields = computed(() => {\n if (!pageData.value?.fields) return []\n const list: WidgetConfig[] = Object.entries(pageData.value.fields)\n .map(([key, value]) => {\n return {\n fieldKey: key,\n ...value,\n } as WidgetConfig\n })\n .filter((w) => w.widget && w.widget.Widget !== 'Hidden')\n .sort((a: WidgetConfig, b: WidgetConfig) => (a.order ?? 0) - (b.order ?? 0))\n\n return list\n})\nconst reversedActions = computed(() => {\n if (!pageData.value?.actions) return []\n return [...pageData.value.actions].reverse()\n})\n\nconst _data = reactive<Record<string, any>>({})\nconst loading = ref(true)\nonMounted(async () => {\n loading.value = true\n pageData.value = await getPageData(PageActionType.Update, {\n workflowId: props.workflowId,\n className: props.className,\n })\n for (const key in pageData.value.fields) {\n _data[key] = pageData.value.fields[key].value\n }\n loading.value = false\n})\n\nasync function clickHandler(type: ActionTypeEnum, url: string, redirectType: RedirectType) {\n switch (type) {\n case ActionTypeEnum.Submit:\n await updateData(props.className, props.workflowId, _data, url)\n router.push({name: 'List'})\n break\n case ActionTypeEnum.Link:\n if(redirectType === 'List') {\n router.push({name: 'List'})\n }\n break\n default:\n console.warn('Unknown action type:', type)\n }\n}\n</script>\n<template>\n <div class=\"page-container relative h-full\">\n <div class=\"page-title p-4 bg-white\">\n <slot name=\"title\">\n <div class=\"title\">{{ className }} : Update</div>\n </slot>\n </div>\n <a-spin :loading=\"loading\" class=\"page-content p-2\">\n <div class=\"fields grid grid-cols-3 gap-8 bg-white p-4\">\n <template v-for=\"(value, key) in _fields\" :key=\"value.fieldKey\">\n <div class=\"field\">\n <DataWidgets :name=\"key\" :config=\"value\" v-model=\"_data[value.fieldKey]\"></DataWidgets>\n </div>\n </template>\n </div>\n <slot name=\"content\"></slot>\n </a-spin>\n <div class=\"action-row absolute bottom-0 left-0 w-full bg-white p-4 flex justify-end\">\n <slot name=\"action\"></slot>\n <template v-for=\"action in reversedActions\" :key=\"action.Title\">\n <ActionButton :config=\"action\" :data=\"_data\" class=\"action\" @click=\"clickHandler\"/>\n </template>\n </div>\n </div>\n</template>\n\n<style lang=\"stylus\" scoped>\n.page-container {\n .page-title {\n font-size $size-text-heavy\n }\n}\n\n.action-row {\n .action + .action {\n margin-inline-start $gap-8\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, reactive, ref } from 'vue'\nimport { getPageData, approveData, PageActionType, type PageConfig, type FieldConfig } from '@/services/dataGen'\n// import DataWidgets from '@/components/data-gen/widgets/index.vue'\nimport ActionButton from '@/components/data-gen/actions/index.vue'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\nimport type {DescData} from '@arco-design/web-vue'\nimport { Spin } from '@arco-design/web-vue'\nimport { useLibraryRouter } from '@/composables/useRouter'\nimport dataGetter from '@/services/dataGetter'\nimport type {RedirectType} from '@/types'\n\nconst router = useLibraryRouter()\n\nconst props = defineProps<{\n className: string,\n workflowId: string\n}>()\n\nconst pageData = ref<PageConfig>()\n\ntype WidgetConfig = {\n fieldKey: string\n} & FieldConfig\nconst _fields = computed(() => {\n if (!pageData.value?.fields) return []\n const list: WidgetConfig[] = Object.entries(pageData.value.fields)\n .map(([key, value]) => {\n return {\n fieldKey: key,\n ...value,\n } as WidgetConfig\n })\n .filter((w) => w.widget && w.widget.Widget !== 'Hidden')\n .sort((a: WidgetConfig, b: WidgetConfig) => (a.order ?? 0) - (b.order ?? 0))\n\n return list\n})\nconst reversedActions = computed(() => {\n if (!pageData.value?.actions) return []\n return [...pageData.value.actions].reverse()\n})\n\nconst _data = reactive<DescData[]>([])\nconst loading = ref(true)\nonMounted(async () => {\n loading.value = true\n pageData.value = await getPageData(PageActionType.Details, {\n workflowId: props.workflowId,\n className: props.className,\n })\n\n for (const [key, value] of Object.entries(pageData.value.fields)) {\n _data.push({\n label: key,\n value: value.value,\n })\n }\n loading.value = false\n})\n\nfunction clickHandler(type: ActionTypeEnum, url: string, redirectType: RedirectType) {\n switch (type) {\n case ActionTypeEnum.Submit:\n approveData(props.className, props.workflowId, dataGetter.ApproverEmail(), '', _data, url)\n // if(redirectType === 'Approve'){\n // approveData(props.className, props.workflowId, dataGetter.ApproverEmail(), '', _data, url)\n // }else if(redirectType === 'Reject'){\n // approveData(props.className, props.workflowId, dataGetter.ApproverEmail(), dataGetter.RejectReason(), _data, url)\n // }\n router.push({name: 'List'})\n break\n case ActionTypeEnum.Link:\n if(redirectType === 'List'){\n router.push({name: 'List'})\n }\n break\n default:\n console.warn('Unknown action type:', type)\n }\n}\n</script>\n<template>\n <div class=\"page-container relative h-full\">\n <div class=\"page-title p-4 bg-white\">\n <slot name=\"title\">\n <div class=\"title\">{{ className }} : Approve</div>\n </slot>\n </div>\n <a-spin :loading=\"loading\" class=\"page-content p-2\">\n <div class=\"bg-white\">\n <a-descriptions :data=\"_data\" layout=\"inline-vertical\" />\n </div>\n <slot name=\"content\"></slot>\n </a-spin>\n <div class=\"action-row absolute bottom-0 left-0 w-full bg-white p-4 flex justify-end\">\n <slot name=\"action\"></slot>\n <template v-for=\"action in reversedActions\" :key=\"action.Title\">\n <ActionButton :config=\"action\" :data=\"_data\" class=\"action\" @click=\"clickHandler\"/>\n </template>\n </div>\n </div>\n</template>\n\n<style lang=\"stylus\" scoped>\n.page-container {\n .page-title {\n font-size $size-text-heavy\n }\n}\n\n.action-row {\n .action + .action {\n margin-inline-start $gap-8\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, onMounted, reactive, ref } from 'vue'\nimport { getPageData, getListData, type PageConfig, type FieldConfig, type Action } from '@/services/dataGen'\nimport type {TableColumnData} from '@arco-design/web-vue'\nimport { Spin } from '@arco-design/web-vue'\nimport ActionButton from '@/components/data-gen/actions/index.vue'\nimport { ActionTypeEnum } from '@/components/data-gen/actions/types'\nimport { useLibraryRouter } from '@/composables/useRouter'\nimport type { RedirectType } from '@/types'\n\nconst router = useLibraryRouter()\n\nconst props = defineProps<{\n className: string\n}>()\n\nconst pageData = ref<PageConfig>()\n\nconst paging = reactive({\n current: 1,\n total: 0,\n pageSize: 20,\n defaultPageSize: 20,\n showTotal: true,\n showPageSize: true,\n})\nconst listFilter = computed(() => {\n return {\n PageNumber: paging.current - 1,\n PageSize: paging.pageSize,\n Filters: [],\n Sorts: [],\n }\n})\n\ntype ListColumn = {\n title: string\n dataIndex: string\n order: number\n}\n\nconst _columns = ref<TableColumnData[]>([])\nconst _data = ref<object[]>([])\nconst loadingPage = ref(true)\nconst loadingTable = ref(true)\n\nconst actions = ref<Action[]>()\n\nconst mapColumns = (fields: Record<string, FieldConfig>) => {\n console.log(fields)\n _columns.value = Object.entries(fields)\n .filter(([, item]) => item.widget?.column)\n .map(([key, value]) => {\n return {\n title: value.widget!.Title,\n dataIndex: key.charAt(0).toLowerCase() + key.slice(1),\n order: value.order,\n } as ListColumn\n })\n .sort((a, b) => a.order - b.order)\n\n _columns.value.push({\n title: 'Actions',\n slotName: 'optional',\n })\n}\nconst loadData = async () => {\n loadingTable.value = true\n const res = await getListData(props.className, listFilter.value)\n _data.value = res.data\n paging.total = res.totalCount\n actions.value = res.actions\n loadingTable.value = false\n}\nonMounted(async () => {\n loadingPage.value = true\n pageData.value = await getPageData(3, {\n className: props.className,\n })\n mapColumns(pageData.value.fields)\n loadingPage.value = false\n loadData()\n})\n\nconst pageChangeHandler = (page: number) => {\n paging.current = page\n loadData()\n}\n\nconst pageSizeChangeHandler = (pageSize: number) => {\n paging.pageSize = pageSize\n loadData()\n}\n\nfunction clickHandler(type: ActionTypeEnum, _: string, redirectType: RedirectType, workflowId: string) {\n switch (type) {\n case ActionTypeEnum.Link:\n router.push({name: redirectType, params: { workflowId }})\n // console.log('Link action clicked with URL:', url, title)\n break\n default:\n console.warn('Unknown action type:', type)\n }\n}\n\nfunction createHandler(type: ActionTypeEnum, _: string, redirectType: RedirectType) {\n switch (type) {\n case ActionTypeEnum.Link:\n router.push({name: redirectType})\n // console.log('Link action clicked with URL:', url, title)\n break\n default:\n console.warn('Unknown action type:', type)\n }\n}\n</script>\n\n<template>\n <div class=\"page-container relative h-full\">\n <div class=\"page-title p-4 bg-white\">\n <slot name=\"title\">\n <div class=\"title\">{{ className }} : List</div>\n <template v-for=\"action in actions\" :key=\"action.title\">\n <template v-if=\"action.location === 'InOperation'\">\n <ActionButton :config=\"action\" class=\"action\" @click=\"(...args)=>createHandler(...args)\"/>\n </template>\n </template>\n </slot>\n </div>\n <a-spin :loading=\"loadingPage\" class=\"page-conteont p-2\">\n <slot name=\"content\">\n <ATable\n :columns=\"_columns\"\n :data=\"_data\"\n stripe\n border\n page-position=\"bl\"\n :pagination=\"paging\"\n :loading=\"loadingTable\"\n @page-change=\"pageChangeHandler\"\n @page-size-change=\"pageSizeChangeHandler\"\n >\n <template #optional=\"{ record }\">\n <template v-for=\"action in actions\" :key=\"action.title\">\n <template v-if=\"action.location === 'InTable'\">\n <ActionButton :config=\"action\" class=\"action\" @click=\"(...args)=>clickHandler(...args, record.workflowId)\"/>\n </template>\n </template>\n </template>\n </ATable>\n </slot>\n </a-spin>\n </div>\n</template>\n\n<style lang=\"stylus\" scoped></style>\n","import { inject, type InjectionKey } from 'vue'\nimport type { Pinia } from 'pinia'\n\nexport const PiniaKey: InjectionKey<Pinia> = Symbol('library-pinia')\n\nexport function useLibraryPinia(): Pinia | null {\n // 从注入中获取宿主提供的 pinia\n return inject(PiniaKey, null)\n}\n","import type { App } from 'vue'\nimport type { Router } from 'vue-router'\nimport type { Pinia } from 'pinia'\nimport CreateView from '@/components/data-gen/views/CreateView.vue'\nimport UpdateView from '@/components/data-gen/views/UpdateView.vue'\nimport DetailView from '@/components/data-gen/views/DetailView.vue'\nimport ListView from '@/components/data-gen/views/ListView.vue'\nimport { RouterKey } from '@/composables/useRouter'\nimport { PiniaKey } from '@/composables/usePinia'\n\n// 导入样式文件\nimport '@/styles/index.styl'\n\ninterface PluginOptions {\n router?: Router\n pinia?: Pinia\n [key: string]: any\n}\n\nconst MyPlugin = {\n install(app: App, options: PluginOptions = {}) {\n // 如果宿主提供了 router,注入它以便共享\n if (options.router) {\n app.provide(RouterKey, options.router)\n }\n \n // 如果宿主提供了 pinia,注入它以便共享\n if (options.pinia) {\n app.provide(PiniaKey, options.pinia)\n }\n \n // 注册组件\n app.component('CreateView', CreateView)\n app.component('UpdateView', UpdateView)\n app.component('DetailView', DetailView)\n app.component('ListView', ListView)\n }\n}\n\nexport default MyPlugin\n\nexport { CreateView, UpdateView, DetailView, ListView }\nexport { RouterKey } from '@/composables/useRouter'\nexport { PiniaKey } from '@/composables/usePinia'"],"names":["useLibraryMainStore","defineStore","ref","sleep","tick","resolve","getStoreData","store","key","remoteFunction","defaultValue","e","ApiBase","AppSecret","axios","Axios","getToken","mainStore","getAxios","token","dataGetter","PageActionType","mapPageData","input","config","attr","fieldName","fieldData","fieldConfig","attributes","propertyValue","getPageData","type","opt","res","getListData","className","item","createData","data","url","replaceId","id","updateData","replacedUrl","replaceWorkflowId","replaceEmail","email","replaceReason","reason","approveData","getOptions","value","validateRules","configs","valid","vallidateRule","RuleName","RuleParameter","validations","parameter","props","__props","emits","__emit","validate","v","inputHandler","changeHandler","_createBlock","_component_AInput","max","min","onMounted","_component_AInputNumber","loading","_options","loadOptions","_component_ASelect","modelValue","_createElementBlock","_Fragment","_renderList","_component_AOption","fieldNames","_component_ASpace","_createVNode","_component_ACascader","uploadRef","fileList","workflowId","action","computed","__expose","nextTick","_component_a_upload","$event","_cache","_component_ATextarea","widgetRef","useTemplateRef","_value","watch","newValue","curComp","InputText","InputNumber","SelectList","Cascader","FileUpload","TextArea","errMsg","errHandler","updateHandler","isFileUpload","_openBlock","_hoisted_1","_createElementVNode","_hoisted_2","_toDisplayString","_hoisted_3","_hoisted_4","_resolveDynamicComponent","_hoisted_5","ActionTypeEnum","clickHandler","_component_AButton","_renderSlot","_ctx","_component_ALink","redirectType","SubmitButton","DetailLink","curUrl","RedirectType","RouterKey","useLibraryRouter","injectedRouter","inject","useVueRouter","router","pageData","_fields","w","a","b","reversedActions","_data","reactive","dataWidgetsRef","widget","_component_a_spin","DataWidgets","ActionButton","_component_a_descriptions","paging","listFilter","_columns","loadingPage","loadingTable","actions","mapColumns","fields","loadData","pageChangeHandler","page","pageSizeChangeHandler","pageSize","createHandler","args","_component_ATable","_withCtx","record","PiniaKey","MyPlugin","app","options","CreateView","UpdateView","DetailView","ListView"],"mappings":"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"}
package/dist/index.css CHANGED
@@ -1 +1 @@
1
- .err-msg[data-v-bc0a480b]{font-size:$size-text-light;color:$color-red;margin-top:$gap-4}.page-container .page-title[data-v-48017fe8]{font-size:$size-text-heavy}.action-row .action+.action[data-v-48017fe8]{margin-inline-start:$gap-8}.page-container .page-title[data-v-73c3a6e5]{font-size:$size-text-heavy}.action-row .action+.action[data-v-73c3a6e5]{margin-inline-start:$gap-8}.page-container .page-title[data-v-e77c8eef]{font-size:$size-text-heavy}.action-row .action+.action[data-v-e77c8eef]{margin-inline-start:$gap-8}
1
+ .err-msg[data-v-bc0a480b]{font-size:.857142rem;color:#fb4b2f;margin-top:.285714rem}.page-container .page-title[data-v-fcbe0290]{font-size:1.285714rem}.action-row .action+.action[data-v-fcbe0290]{margin-inline-start:.571428rem}.page-container .page-title[data-v-73c3a6e5]{font-size:1.285714rem}.action-row .action+.action[data-v-73c3a6e5]{margin-inline-start:.571428rem}.page-container .page-title[data-v-e77c8eef]{font-size:1.285714rem}.action-row .action+.action[data-v-e77c8eef]{margin-inline-start:.571428rem}.page-container .page-title{font-size:1.285714rem}.action-row .action+.action{margin-inline-start:.571428rem}.arco-spin{min-height:200px}
package/dist/index.es.js CHANGED
@@ -526,7 +526,7 @@ const je = { class: "page-container relative h-full" }, Be = { class: "page-titl
526
526
  const n = K(), t = e, a = g(), o = V(() => a.value?.fields ? Object.entries(a.value.fields).map(([f, d]) => ({
527
527
  fieldKey: f,
528
528
  ...d
529
- })).filter((f) => f.widget && f.widget.Widget !== "Hidden").sort((f, d) => (f.order ?? 0) - (d.order ?? 0)) : []), u = V(() => a.value?.actions ? [...a.value.actions].reverse() : []), i = W({}), s = g(!0), l = Q("dataWidgetsRef");
529
+ })).filter((f) => f.widget && f.widget.Widget !== "Hidden").sort((f, d) => (f.order ?? 0) - (d.order ?? 0)) : []), u = V(() => a.value?.actions ? [...a.value.actions].reverse() : []), i = W({}), s = g(!1), l = Q("dataWidgetsRef");
530
530
  x(async () => {
531
531
  s.value = !0, a.value = await B(j.Create, {
532
532
  className: t.className
@@ -595,7 +595,7 @@ const je = { class: "page-container relative h-full" }, Be = { class: "page-titl
595
595
  ]);
596
596
  };
597
597
  }
598
- }), Me = /* @__PURE__ */ E(Fe, [["__scopeId", "data-v-48017fe8"]]), Ge = { class: "page-container relative h-full" }, qe = { class: "page-title p-4 bg-white" }, Je = { class: "title" }, Qe = { class: "fields grid grid-cols-3 gap-8 bg-white p-4" }, Xe = { class: "action-row absolute bottom-0 left-0 w-full bg-white p-4 flex justify-end" }, Ye = /* @__PURE__ */ y({
598
+ }), Me = /* @__PURE__ */ E(Fe, [["__scopeId", "data-v-fcbe0290"]]), Ge = { class: "page-container relative h-full" }, qe = { class: "page-title p-4 bg-white" }, Je = { class: "title" }, Qe = { class: "fields grid grid-cols-3 gap-8 bg-white p-4" }, Xe = { class: "action-row absolute bottom-0 left-0 w-full bg-white p-4 flex justify-end" }, Ye = /* @__PURE__ */ y({
599
599
  __name: "UpdateView",
600
600
  props: {
601
601
  className: {},