goldpankit
Version:
GoldPanKit是一款极速研发套件,可在套件中快速构建各类技术框架和项目。开源作者可发布自己的项目,并为其设定金额,实现开源项目的盈利。
2 lines • 61.5 kB
JavaScript
var fe=Object.defineProperty;var be=(e,t,l)=>t in e?fe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:l}):e[t]=l;var b=(e,t,l)=>(be(e,typeof t!="symbol"?t+"":t,l),l),q=(e,t,l)=>{if(!t.has(e))throw TypeError("Cannot "+l)};var ee=(e,t,l)=>(q(e,t,"read from private field"),l?l.call(e):t.get(e)),j=(e,t,l)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,l)},te=(e,t,l,n)=>(q(e,t,"write to private field"),n?n.call(e,l):t.set(e,l),l);var le=(e,t,l)=>(q(e,t,"access private method"),l);import{_ as S,r as f,o as m,h as A,w as y,b as h,c as p,g as V,F as O,a7 as F,k as N,a as u,t as w,j as x,y as pe,P as Te,B,K as ie,J as G,X as z,m as $,aa as ne,ab as ae,A as Q,e as M,ac as ye,p as H,l as W,z as K,E as Le,i as se,ad as ve,ae as Ce,af as we,D as Ie,a9 as Ee,s as De,U as Oe}from"./index-53ed41db.js";import{a as Ae,I as Re}from"./InnerRouterViewWindow-d5948934.js";const P={join:{color:"#eee",hoverColor:"#faa5aa",selectedColor:"#FC777D"},aggregate:{color:"#FFE957",hoverColor:"#faa5aa",selectedColor:"#FC777D"}},Se={name:"RelationLine",props:{start:{required:!0},end:{required:!0},selected:{default:!1},lineType:{required:!0}},data(){return{lineConfig:{x:0,y:0,stroke:"#ccc",strokeWidth:4,lineJoin:"round",lineCap:"round"}}},computed:{position(){return[this.start,this.end]}},watch:{position(){this.init()},selected(){this.selected?this.highlight(!0,this.selected):this.highlight(!1,this.selected)}},methods:{handleSelect(){this.selected?this.$emit("unselect"):this.$emit("select")},highlight(e=!0,t=!1){const l=this.$refs.line.getNode();if(e)t?(l.setAttr("stroke",P[this.lineType].selectedColor),l.zIndex(101)):(l.setAttr("stroke",P[this.lineType].hoverColor),l.zIndex(100)),l.setAttr("strokeWidth",5);else{if(l.zIndex(1),t)return;l.setAttr("stroke",P[this.lineType].color),l.setAttr("strokeWidth",4)}},init(){this.lineConfig.stroke=P[this.lineType].color;const e=[];this.start.y!==this.end.y&&(this.end.x-this.start.x>0?this.end.x-this.start.x<50?(this.start.x-=200,e.push(this.start.x-50),e.push(this.start.y),e.push(this.start.x-50),e.push(this.end.y)):(e.push(this.start.x+(this.end.x-this.start.x)/2),e.push(this.start.y),e.push(this.start.x+(this.end.x-this.start.x)/2),e.push(this.end.y)):Math.abs(this.end.x-this.start.x)<200?(this.start.x-=200,e.push(this.start.x-50),e.push(this.start.y),e.push(this.start.x-50),e.push(this.end.y)):Math.abs(this.end.x-this.start.x)<450?(this.end.x+=200,e.push(this.start.x+50),e.push(this.start.y),e.push(this.start.x+50),e.push(this.end.y)):(this.start.x-=200,this.end.x+=200,e.push(this.start.x-Math.abs(this.end.x-this.start.x)/2),e.push(this.start.y),e.push(this.start.x-Math.abs(this.end.x-this.start.x)/2),e.push(this.end.y))),this.lineConfig.points=[this.start.x,this.start.y,...e,this.end.x,this.end.y]}},created(){this.init()}};function Ve(e,t,l,n,a,i){const o=f("v-line");return m(),A(o,{ref:"line",config:a.lineConfig,onMouseenter:t[0]||(t[0]=c=>i.highlight(!0,l.selected)),onMouseleave:t[1]||(t[1]=c=>i.highlight(!1,l.selected)),onClick:i.handleSelect},null,8,["config","onClick"])}const oe=S(Se,[["render",Ve],["__scopeId","data-v-6a26c54d"]]),xe={name:"Table",props:{x:{default:0},y:{default:0},fieldHeight:{default:30},table:{required:!0},relations:{required:!0},selected:{default:!1}},data(){const e=this;return{layerConfig:{x:e.x,y:e.y,draggable:!1}}},computed:{backgroundConfig(){return{width:200,height:(this.visibleFields.length+1)*this.fieldHeight,fill:"#fafafa"}},tableNameConfig(){return{text:this.table.alias,x:10,y:8,fontSize:15,fill:"#fff"}},tableHeaderConfig(){return{width:200,height:this.fieldHeight,fill:this.table.type==="MAIN"?"#FC777D":"#666"}},relation(){return this.relations.find(e=>e.targetTable===this.table.name)},visibleFields(){return this.table.fields.filter(e=>e.visible===!0)}},watch:{selected(e){if(e){this.select();return}this.select(!1)}},methods:{selectTable(e){this.$emit("table:select",this.table.id)},previewTable(e){this.$emit("table:preview",this.table.id)},select(e=!0){const t=this.$refs.background.getNode();e?(t.setAttr("stroke",(this.table.type==="MAIN","#FC777D")),t.setAttr("strokeWidth",5)):t.setAttr("strokeWidth",0)},handleHeaderMouseover(e){this.getNode().draggable(!0),window.document.body.style.cursor="move"},handleHeaderMouseleave(e){this.getNode().draggable(!1),window.document.body.style.cursor="default"},getNode(){return this.$refs.table.getNode()},handleFieldMouseDown(e){this.getNode().draggable(!1),this.$emit("field:mousedown",{table:this.table,field:e})},handleFieldMouseUp(e){this.getNode().draggable(!0),this.$emit("field:mouseup",{table:this.table,field:e})}}};function Me(e,t,l,n,a,i){const o=f("v-rect"),c=f("v-text"),_=f("v-layer");return m(),A(_,{ref:"table",config:a.layerConfig},{default:y(()=>[h(o,{ref:"background",config:i.backgroundConfig},null,8,["config"]),h(o,{config:i.tableHeaderConfig,onMouseover:i.handleHeaderMouseover,onMouseleave:i.handleHeaderMouseleave,onClick:i.selectTable,onDblclick:i.previewTable},null,8,["config","onMouseover","onMouseleave","onClick","onDblclick"]),h(c,{config:i.tableNameConfig,onMouseover:i.handleHeaderMouseover,onMouseleave:i.handleHeaderMouseleave,onClick:i.selectTable,onDblclick:i.previewTable},null,8,["config","onMouseover","onMouseleave","onClick","onDblclick"]),(m(!0),p(O,null,V(i.visibleFields,(g,s)=>(m(),A(o,{key:g.name,config:{y:s*l.fieldHeight+i.tableHeaderConfig.height,width:200,height:l.fieldHeight,fill:"#fff"},onMousedown:r=>i.handleFieldMouseDown(g),onMouseup:r=>i.handleFieldMouseUp(g)},null,8,["config","onMousedown","onMouseup"]))),128)),(m(!0),p(O,null,V(i.visibleFields,(g,s)=>(m(),A(c,{key:g,config:{text:g.name,x:10,y:s*l.fieldHeight+i.tableHeaderConfig.height+10,fontSize:13,fill:"#333"},onMousedown:r=>i.handleFieldMouseDown(g),onMouseup:r=>i.handleFieldMouseUp(g)},null,8,["config","onMousedown","onMouseup"]))),128))]),_:1},8,["config"])}const re=S(xe,[["render",Me]]);const Ne={name:"QueryModelDesigner",components:{Table:re,RelationLine:oe},props:{model:{},fieldHeight:{default:30}},data(){return{rendered:!0,configKonva:{width:1260,height:1e3,draggable:!0},relationLines:[],relationRuntime:{table:null,field:null,targetTable:null,targetField:null}}},computed:{tableLength(){return this.model.tables.length},reRenderFactors(){return[this.tableLength,this.model]}},watch:{reRenderFactors(){this.render()}},methods:{handleDelete(){if(this.model.selectedLineId!=null){this.__deleteLine();return}this.model.selectedTableId!=null&&this.__deleteTable()},globalClick(e){e.target.nodeType==="Stage"&&(this.model.selectedTableId=null,this.model.previewTableId=null,this.model.selectedLineId=null)},moveTable(){for(const e of this.model.tables){const t=this.$refs[e.id][0].getNode().getAbsolutePosition();e.x=t.x,e.y=t.y}this.computeRelations()},computeRelations(){this.relationLines=[];for(const e of this.model.joins){const t=this.model.tables.find(n=>n.id===e.table.id),l=this.model.tables.find(n=>n.id===e.targetTable.id);for(const n of e.ons){const a=this.__getFieldPosition(t,n.field),i=this.__getFieldPosition(l,n.targetField,!1);a==null||i==null||this.relationLines.push({id:F(),start:a,end:i,type:"join",table:e.table,field:n.field,targetTable:e.targetTable,targetField:n.targetField})}}for(const e of this.model.aggregates){const t=this.__getFieldPosition(e.table,e.field),l=this.__getFieldPosition(e.targetTable,e.targetField,!1);t==null||l==null||this.relationLines.push({id:F(),start:t,end:l,type:"aggregate",table:e.table,field:e.field,targetTable:e.targetTable,targetField:e.targetField})}},handleFieldMouseDown({table:e,field:t}){this.$refs.stage.getNode().draggable(!1),this.relationRuntime.table=e,this.relationRuntime.field=t},handleFieldMouseUp({table:e,field:t}){if(!(this.relationRuntime.table==null||(this.$refs.stage.getNode().draggable(!0),this.relationRuntime.targetTable=e,this.relationRuntime.targetField=t,this.relationRuntime.table.id===this.relationRuntime.targetTable.id))){if(this.model.lineType==="join"){this.__addJoinRelation(),this.$emit("change");return}this.model.lineType==="aggregate"&&(this.__addAggregate(),this.$emit("change"))}},handleTableSelect(e){this.model.selectedTableId=e,this.model.selectedLineId=null,this.model.previewTableId=null},handleLineSelect(e){this.model.selectedLineId=e.id,this.model.selectedTableId=null,this.model.previewTableId=null},handleTablePreview(e){this.model.previewTableId=e},handleDrop(e,t){const l=this.$refs.stage.getNode();l.setPointersPositions(e);const n=l.getPointerPosition(),a={width:200,height:(this.model.dragData.fields.length+1)*this.fieldHeight},i={...this.model.dragData,fields:this.model.dragData.fields.map(o=>({...o,alias:o.name,visible:!0,isVirtual:!1})),isVirtual:!1,type:this.model.tables.length===0?"MAIN":"SUB",x:n.x-a.width/2,y:n.y-a.height/2,id:F(),joins:[]};this.model.tables.push(i),this.$emit("change")},confirmCreateVirtualTable(){const e={width:200,height:this.fieldHeight},t={id:F(),name:this.model.name,alias:this.model.name,comment:this.model.comment,...e,type:"MAIN",isVirtual:!0,x:100,y:100,joins:[],aggregates:[]};t.fields=this.__getVirtualTableDefaultFields(t),this.model.tables.push(t),this.$emit("change")},render(){this.rendered=!1,this.$nextTick(()=>{this.rendered=!0,this.$nextTick(()=>{const t=this.$refs.stage.getNode().container();t.addEventListener("dragover",function(l){l.preventDefault()}),t.addEventListener("drop",l=>{l.preventDefault(),this.handleDrop(l,2)}),this.computeRelations()})})},__getVirtualTableDefaultFields(e){return JSON.parse(JSON.stringify([{name:"field1",alias:"field1",type:"int",length:0,decimal:0,required:!1,isPrimaryKey:!1,isAutoIncrement:!1,comment:"Virtual field 1",isVirtual:!0,visible:!0,table:e},{name:"field2",alias:"field2",type:"int",length:0,decimal:0,required:!1,isPrimaryKey:!1,isAutoIncrement:!1,comment:"Virtual field 2",isVirtual:!0,visible:!0,table:e},{name:"field3",alias:"field3",type:"int",length:0,decimal:0,required:!1,isPrimaryKey:!1,isAutoIncrement:!1,comment:"Virtual field 3",isVirtual:!0,visible:!0,table:e}]))},__deleteLine(){const e=this.relationLines.find(t=>t.id===this.model.selectedLineId);if(e.type==="join"){const t=this.model.joins.findIndex(a=>a.table.id===e.table.id&&a.targetTable.id===e.targetTable.id),l=this.model.joins[t],n=l.ons.findIndex(a=>a.field.name===e.field.name&&a.targetField.name===e.targetField.name);n!==-1&&l.ons.splice(n,1),l.ons.length===0&&this.model.joins.splice(t,1)}else{const t=this.model.aggregates.findIndex(l=>l.table.id===e.table.id&&l.targetTable.id===e.targetTable.id&&l.field.name===e.field.name&&l.targetField.name===e.targetField.name);this.model.aggregates.splice(t,1)}this.model.selectedLineId=null,this.$emit("change"),this.render()},__deleteTable(){const e=this.model.tables.findIndex(n=>n.id===this.model.selectedTableId),t=this.model.tables[e];let l=Promise.resolve();t.type==="MAIN"&&this.model.tables.length>1&&(l=this.deleteConfirm("Deleting the main table will delete all the schedules and associations. Are you sure to delete it?")),l.then(()=>{if(t.type==="MAIN"){this.model.tables=[],this.model.joins=[],this.model.aggregates=[],this.$emit("change");return}this.model.joins=this.model.joins.filter(n=>!(n.table.id===this.model.selectedTableId||n.targetTable.id===this.model.selectedTableId)),this.model.aggregates=this.model.aggregates.filter(n=>!(n.table.id===this.model.selectedTableId||n.targetTable.id===this.model.selectedTableId)),this.model.tables.splice(e,1),this.$emit("change")}).catch(()=>{})},__addJoinRelation(){if(this.relationRuntime.table.id===this.relationRuntime.targetTable.id){this.$tip.warning("The join relationship cannot be created.");return}let e=this.model.joins.find(t=>t.table.id===this.relationRuntime.table.id&&t.targetTable.id===this.relationRuntime.targetTable.id);e==null&&(e={table:this.relationRuntime.table,targetTable:this.relationRuntime.targetTable,joinType:"INNER JOIN",relation:"ONE-TO-ONE",ons:[]},this.model.joins.push(e)),e.ons.push({field:this.relationRuntime.field,targetField:this.relationRuntime.targetField,relation:"AND"}),this.computeRelations()},__addAggregate(){if(this.relationRuntime.table.id===this.relationRuntime.targetTable.id){this.$tip.warning("The aggregate relationship cannot be created.");return}let e=this.model.aggregates.find(t=>t.table.id===this.relationRuntime.table.id&&t.targetTable.id===this.relationRuntime.targetTable.id&&(t.field.name===this.relationRuntime.field.name||t.targetField.name===this.relationRuntime.targetField.name));e==null&&(e={table:this.relationRuntime.table,targetTable:this.relationRuntime.targetTable,field:this.relationRuntime.field,targetField:this.relationRuntime.targetField,function:"COUNT"},this.model.aggregates.push(e)),this.computeRelations()},__getFieldPosition(e,t,l=!0){const a=this.$refs.stage.getNode().getAbsolutePosition();let i=e.fields.findIndex(g=>g.visible&&g.name===t.name);if(i===-1)return null;let o=i;for(let g=0;g<o;g++)e.fields[g].visible||i--;if(i===-1)return null;const c=e.x+(l?200:0)-a.x,_=e.y+this.fieldHeight+(i+1)*this.fieldHeight-15-a.y;return{x:c,y:_}},__computeSize(){const e=document.querySelector(".designer-wrap").getBoundingClientRect();this.configKonva.width=e.width,this.configKonva.height=e.height}},mounted(){this.render(),this.__computeSize(),window.addEventListener("resize",()=>{this.__computeSize()})}},Fe={class:"wrap"};function Be(e,t,l,n,a,i){const o=f("Table"),c=f("RelationLine"),_=f("v-layer"),g=f("v-stage");return m(),p(O,null,[l.model.tables.length===0?(m(),p("div",{key:0,class:"empty-tip",onDragover:t[1]||(t[1]=N(()=>{},["prevent"])),onDrop:t[2]||(t[2]=s=>i.handleDrop(s,1))},[u("div",Fe,[u("p",null,w(e.$t("database.dragTip")),1),u("p",null,w(e.$t("common.or")),1),u("p",null,[u("em",{onClick:t[0]||(t[0]=(...s)=>i.confirmCreateVirtualTable&&i.confirmCreateVirtualTable(...s))},w(e.$t("database.createVirtualTableTip")),1)])])],32)):x("",!0),u("div",{class:"stage-wrap",tabindex:"-1",onKeyup:t[5]||(t[5]=pe((...s)=>i.handleDelete&&i.handleDelete(...s),["delete"]))},[a.rendered?(m(),A(g,{key:0,ref:"stage",config:a.configKonva,onMouseup:t[4]||(t[4]=s=>e.$refs.stage.getNode().draggable(!0)),onClick:i.globalClick},{default:y(()=>[(m(!0),p(O,null,V(l.model.tables,s=>(m(),A(o,{ref_for:!0,ref:s.id,key:s.name,"field-height":l.fieldHeight,x:s.x,y:s.y,table:s,relations:l.model.joins,selected:l.model.selectedTableId===s.id,onDragmove:i.moveTable,"onField:mousedown":i.handleFieldMouseDown,"onField:mouseup":i.handleFieldMouseUp,"onTable:select":i.handleTableSelect,"onTable:preview":i.handleTablePreview},null,8,["field-height","x","y","table","relations","selected","onDragmove","onField:mousedown","onField:mouseup","onTable:select","onTable:preview"]))),128)),h(_,null,{default:y(()=>[(m(!0),p(O,null,V(a.relationLines,s=>(m(),A(c,{key:s.id,"line-type":s.type,start:s.start,end:s.end,selected:l.model.selectedLineId===s.id,onSelect:r=>i.handleLineSelect(s),onUnselect:t[3]||(t[3]=r=>l.model.selectedLineId=null)},null,8,["line-type","start","end","selected","onSelect"]))),128))]),_:1})]),_:1},8,["config","onClick"])):x("",!0)],32)],64)}const ke=S(Ne,[["render",Be],["__scopeId","data-v-dd89d219"]]);const $e={name:"SQLLine",props:{type:{},indent:{default:0},visible:{default:!0}}},Pe={class:"code"},Ue={class:"opera"},He={key:0};function We(e,t,l,n,a,i){const o=f("el-button");return m(),p("div",{class:G(["sql-line",{"sql-line__hide":!l.visible}]),style:z({"padding-left":l.indent+"px"})},[u("p",Pe,[Te(e.$slots,"default",{},void 0,!0)]),u("ul",Ue,[l.type==="field"?(m(),p("li",He,[B(h(o,{icon:"View",onClick:t[0]||(t[0]=c=>e.$emit("update:visible",!1))},null,512),[[ie,l.visible]]),B(h(o,{icon:"Hide",onClick:t[1]||(t[1]=c=>e.$emit("update:visible",!0))},null,512),[[ie,!l.visible]])])):x("",!0)])],6)}const J=S($e,[["render",We],["__scopeId","data-v-6cb65a6a"]]);const qe={name:"DynamicWidthInput",props:{modelValue:{}},data(){return{value:this.modelValue,oldValue:this.modelValue,changeTimeout:null}},watch:{modelValue:{immediate:!0,handler(){this.value=this.modelValue}}},methods:{handleInput(e){this.value=e.target.innerText,this.$emit("update:modelValue",e.target.innerText),this.changeTimeout!=null&&clearTimeout(this.changeTimeout),this.changeTimeout=setTimeout(()=>{this.$emit("change",{oldValue:this.oldValue,newValue:e.target.innerText}),this.oldValue=e.target.innerText},300)},handleBlur(){this.$emit("update:blur-model-value",this.value),this.$emit("blur")}}};function je(e,t,l,n,a,i){return m(),p("div",{class:"dynamic-width-input",contenteditable:!0,onInput:t[0]||(t[0]=(...o)=>i.handleInput&&i.handleInput(...o)),onBlur:t[1]||(t[1]=(...o)=>i.handleBlur&&i.handleBlur(...o))},w(l.modelValue),33)}const X=S(qe,[["render",je],["__scopeId","data-v-04b6211d"]]);const Ge={name:"SQLLineKeywordSelect",props:{modelValue:{},width:{default:"120px"},data:{type:Array,required:!0}},methods:{handleInput(e){this.$emit("update:modelValue",e)}}};function ze(e,t,l,n,a,i){const o=f("el-option"),c=f("el-select");return m(),A(c,{class:"sql-line-keyword-select",size:"default","model-value":l.modelValue,style:z({width:l.width}),"onUpdate:modelValue":i.handleInput,onChange:t[0]||(t[0]=_=>e.$emit("change",_))},{default:y(()=>[(m(!0),p(O,null,V(l.data,_=>(m(),A(o,{key:_,value:_,label:_},null,8,["value","label"]))),128))]),_:1},8,["model-value","style","onUpdate:modelValue"])}const Z=S(Ge,[["render",ze],["__scopeId","data-v-7c607bc6"]]);const Qe={name:"ErrorWindow",data(){return{visible:!1,title:"错误",message:""}},methods:{open({title:e,message:t}){this.title=e,this.message=t,this.visible=!0}}},Ke={class:"error-message"};function Je(e,t,l,n,a,i){const o=f("el-dialog");return m(),A(o,{title:a.title,modelValue:a.visible,"onUpdate:modelValue":t[0]||(t[0]=c=>a.visible=c),class:"error-window",width:"550px","append-to-body":""},{default:y(()=>[u("pre",Ke,w(a.message),1)]),_:1},8,["title","modelValue"])}const Xe=S(Qe,[["render",Je]]);const Ze={name:"QueryResultPreview",components:{ErrorWindow:Xe},data(){return{loading:!1,visible:!1,pagination:{page:1,capacity:100,total:0},sql:"",columns:[],result:[]}},computed:{...$(["currentProject","currentDatabase"])},methods:{open(e,t){this.sql=t,this.fetchList().then(()=>{this.visible=!0,this.loading=!0,this.columns=e.map(l=>l.substring(1,l.length-1)),this.result=[]}).catch(l=>{this.$refs.errorWindow.open({title:"SQL错误",message:l.message})})},fetchList(){return new Promise((e,t)=>{ne({projectId:this.currentProject,databaseId:this.currentDatabase,sql:this.__getCountSql()}).then(l=>(e(),this.pagination.total=l[0].total,this.pagination.total>0?ne({projectId:this.currentProject,databaseId:this.currentDatabase,sql:this.__getPaginationSql()}):[])).then(l=>{this.result=l}).catch(l=>{t(l)}).finally(()=>{this.loading=!1})})},getColumnWidth(e){let t=ae(e)+24,l=t;const n=this.result[0];if(n!=null){const a=n[e];a!=null&&(l=ae(a)+24)}return Math.max(t,l)},handleCurrentChange(e){this.pagination.page=e,this.fetchList()},handleSizeChange(e){this.pagination.capacity=e,this.fetchList()},__getPaginationSql(){let e=(this.pagination.page-1)*this.pagination.capacity;return`${this.sql} LIMIT ${e}, ${this.pagination.capacity}`},__getCountSql(){return`SELECT COUNT(*) AS total FROM (${this.sql}) _count`}}},Ye={class:"toolbar"};function et(e,t,l,n,a,i){const o=f("el-pagination"),c=f("el-table-column"),_=f("el-table"),g=f("el-dialog"),s=f("ErrorWindow"),r=Q("loading");return m(),p(O,null,[h(g,{class:"sql-preview",title:e.$t("database.queryResult"),width:"1000px",modelValue:a.visible,"onUpdate:modelValue":t[0]||(t[0]=d=>a.visible=d),"append-to-body":""},{default:y(()=>[u("div",Ye,[h(o,{background:"","page-sizes":[10,20,50,100,200,500],"default-page-size":100,layout:"total, prev, pager, next, sizes",total:a.pagination.total,onCurrentChange:i.handleCurrentChange,onSizeChange:i.handleSizeChange},null,8,["total","onCurrentChange","onSizeChange"])]),B((m(),A(_,{data:a.result,border:""},{default:y(()=>[(m(!0),p(O,null,V(a.columns,d=>(m(),A(c,{key:d,prop:d,label:d,"min-width":i.getColumnWidth(d)},null,8,["prop","label","min-width"]))),128))]),_:1},8,["data"])),[[r,a.loading]])]),_:1},8,["title","modelValue"]),h(s,{ref:"errorWindow"},null,512)],64)}const tt=S(Ze,[["render",et]]),lt={name:"SQLJoin",components:{DynamicWidthInput:X,SQLLine:J,SQLLineKeywordSelect:Z},props:{table:{required:!0},joins:{required:!0},indentLevel:{default:1}},computed:{indent(){return`${(this.indentLevel-1)*20}px`}},methods:{handleChange(e){this.$emit("change",e)},emitTableAliasChange(e,t){this.$emit("table:alias:change",{table:e,value:t})}}},it=u("em",null,"ON",-1),nt={class:"join-ons"},at=u("span",null,".",-1),st=u("span",null,"=",-1),ot=u("span",null,".",-1);function rt(e,t,l,n,a,i){const o=f("SQLLineKeywordSelect"),c=f("DynamicWidthInput"),_=f("SQLLine");return m(),p("ul",{class:"joins",style:z({"padding-left":i.indent})},[(m(!0),p(O,null,V(l.joins,(g,s)=>(m(),p("li",{key:s},[h(_,null,{default:y(()=>[h(o,{modelValue:g.joinType,"onUpdate:modelValue":r=>g.joinType=r,width:"105px",data:["INNER JOIN","LEFT JOIN","RIGHT JOIN","OUTER JOIN"],class:"keyword",onChange:r=>i.handleChange(r,g)},null,8,["modelValue","onUpdate:modelValue","onChange"]),u("span",null,w(g.targetTable.name),1),h(c,{modelValue:g.targetTable.alias,"onUpdate:modelValue":r=>g.targetTable.alias=r,onChange:r=>i.emitTableAliasChange(g.targetTable,r)},null,8,["modelValue","onUpdate:modelValue","onChange"]),it,h(o,{modelValue:g.relation,"onUpdate:modelValue":r=>g.relation=r,width:"130px",data:["ONE-TO-ONE","ONE-TO-MANY","MANY-TO-ONE"],class:"relation",onChange:i.handleChange},null,8,["modelValue","onUpdate:modelValue","onChange"])]),_:2},1024),u("ul",nt,[(m(!0),p(O,null,V(g.ons,(r,d)=>(m(),A(_,{key:d,indent:"20"},{default:y(()=>[d!==0?(m(),A(o,{key:0,modelValue:r.relation,"onUpdate:modelValue":L=>r.relation=L,data:["AND","OR"],width:"45px",onChange:i.handleChange},null,8,["modelValue","onUpdate:modelValue","onChange"])):x("",!0),h(c,{modelValue:r.table.alias,"onUpdate:modelValue":L=>r.table.alias=L,onChange:L=>i.emitTableAliasChange(r.table,L)},null,8,["modelValue","onUpdate:modelValue","onChange"]),at,u("span",null,w(r.field.name),1),st,h(c,{modelValue:r.targetTable.alias,"onUpdate:modelValue":L=>r.targetTable.alias=L,onChange:L=>i.emitTableAliasChange(r.targetTable,L)},null,8,["modelValue","onUpdate:modelValue","onChange"]),ot,u("span",null,w(r.targetField.name),1)]),_:2},1024))),128))])]))),128))],4)}const dt=S(lt,[["render",rt]]),ut={name:"SQL",components:{SQLJoin:dt,DynamicWidthInput:X,SQLLine:J,SQLLineKeywordSelect:Z},props:{model:{required:!0},table:{required:!0},repairedJoins:{type:Array,required:!0},visibleFields:{type:Array},aggregates:{required:!0}},methods:{handleChange(){this.$emit("field:change")},handleTableAliasChange(e,{oldValue:t,newValue:l}){const n=this.model.tables.find(a=>a.id===e.id);if(n.type==="MAIN"){this.$emit("field:change");return}for(const a of n.fields)a.alias===`${t}_${a.name}`&&(a.alias=`${l}_${a.name}`);this.$emit("field:change")},createVirtualField(){const e={name:"virtual1",alias:"virtual1",type:"int",comment:"虚拟字段",isVirtual:!0,visible:!0};this.table.fields.push(e),this.$emit("field:created",{field:e}),this.$emit("field:change")},getAggregate(e){const t=this.aggregates.find(l=>l.field.name===e.name);return t??null},fieldVisibleChange(){this.$emit("field:change")},deleteVirtualField(e){const t=this.table.fields[e];this.table.fields.splice(e,1),this.$emit("field:deleted",{index:e,field:t}),this.$emit("field:change")},__getAggregateFunctionWidth(e){return{COUNT:65,SUM:44,AVG:42,MAX:44,MIN:40}[e]}}},ht={class:"sql"},ct=u("em",null,"SELECT",-1),gt=u("em",null,"SELECT",-1),mt=u("span",null,"(",-1),_t=u("span",null,".",-1),ft=u("span",null,")",-1),bt=u("em",null,"FROM",-1),pt=u("span",null,")",-1),Tt=u("span",null,"AS",-1),yt=u("span",{class:"comment"},"#",-1),Lt=u("span",null,".",-1),vt=u("span",null,"AS",-1),Ct=u("span",null,"AS",-1),wt=u("span",{class:"comment"},"#",-1),It=u("em",null,"FROM",-1),Et=u("span",null,"AS",-1);function Dt(e,t,l,n,a,i){const o=f("SQLLine"),c=f("SQLLineKeywordSelect"),_=f("DynamicWidthInput"),g=f("SQLJoin");return m(),p("div",ht,[h(o,{type:"select","onField:create":i.createVirtualField},{default:y(()=>[ct]),_:1},8,["onField:create"]),(m(!0),p(O,null,V(l.visibleFields,(s,r)=>(m(),p(O,null,[i.getAggregate(s)?(m(),p(O,{key:0},[h(o,{indent:"20",visible:s.visible},{default:y(()=>[M("(")]),_:2},1032,["visible"]),h(o,{indent:"40",visible:s.visible},{default:y(()=>[gt]),_:2},1032,["visible"]),h(o,{indent:"60",visible:s.visible},{default:y(()=>[h(c,{modelValue:i.getAggregate(s).function,"onUpdate:modelValue":d=>i.getAggregate(s).function=d,data:["COUNT","SUM","AVG","MAX","MIN"],width:`${i.__getAggregateFunctionWidth(i.getAggregate(s).function)}px`,onChange:i.handleChange},null,8,["modelValue","onUpdate:modelValue","width","onChange"]),mt,h(_,{modelValue:i.getAggregate(s).targetTable.alias,"onUpdate:modelValue":d=>i.getAggregate(s).targetTable.alias=d,onChange:i.handleChange},null,8,["modelValue","onUpdate:modelValue","onChange"]),_t,u("span",null,w(i.getAggregate(s).targetField.name),1),ft]),_:2},1032,["visible"]),h(o,{indent:"40",visible:s.visible},{default:y(()=>[bt,u("span",null,w(i.getAggregate(s).targetTable.name),1),h(_,{modelValue:i.getAggregate(s).targetTable.alias,"onUpdate:modelValue":d=>i.getAggregate(s).targetTable.alias=d,onChange:i.handleChange},null,8,["modelValue","onUpdate:modelValue","onChange"])]),_:2},1032,["visible"]),h(g,{"indent-level":3,joins:l.repairedJoins,table:i.getAggregate(s).targetTable},null,8,["joins","table"]),h(o,{indent:"20",type:s.isVirtual?"virtual-field":"field",visible:s.visible,"onUpdate:visible":[d=>s.visible=d,i.fieldVisibleChange],"onField:delete":d=>i.deleteVirtualField(r)},{default:y(()=>[pt,Tt,h(_,{modelValue:s.alias,"onUpdate:modelValue":d=>s.alias=d},null,8,["modelValue","onUpdate:modelValue"]),u("span",null,w(l.visibleFields.length===r+1?"":","),1),s.isVirtual?(m(),p(O,{key:0},[yt,h(_,{modelValue:s.type,"onUpdate:modelValue":d=>s.type=d,class:"comment",onChange:i.handleChange},null,8,["modelValue","onUpdate:modelValue","onChange"]),h(_,{modelValue:s.comment,"onUpdate:modelValue":d=>s.comment=d,class:"comment",onChange:i.handleChange},null,8,["modelValue","onUpdate:modelValue","onChange"])],64)):x("",!0)]),_:2},1032,["type","visible","onUpdate:visible","onField:delete"])],64)):(m(),A(o,{key:s.name,type:s.isVirtual?"virtual-field":"field",visible:s.visible,"onUpdate:visible":[d=>s.visible=d,i.fieldVisibleChange],indent:"20","onField:delete":d=>i.deleteVirtualField(r)},{default:y(()=>[h(_,{modelValue:s.table.alias,"onUpdate:modelValue":d=>s.table.alias=d,onChange:d=>i.handleTableAliasChange(s.table,d)},null,8,["modelValue","onUpdate:modelValue","onChange"]),Lt,s.isVirtual?(m(),p(O,{key:1},[h(_,{"model-value":s.name,"blur-model-value":s.name,"onUpdate:blurModelValue":d=>s.name=d,onBlur:i.handleChange},null,8,["model-value","blur-model-value","onUpdate:blurModelValue","onBlur"]),Ct,h(_,{"model-value":s.alias,"blur-model-value":s.alias,"onUpdate:blurModelValue":d=>s.alias=d,onBlur:i.handleChange},null,8,["model-value","blur-model-value","onUpdate:blurModelValue","onBlur"]),u("span",null,w(l.visibleFields.length===r+1?"":","),1),wt,h(_,{modelValue:s.type,"onUpdate:modelValue":d=>s.type=d,class:"comment",onChange:i.handleChange},null,8,["modelValue","onUpdate:modelValue","onChange"]),h(_,{modelValue:s.comment,"onUpdate:modelValue":d=>s.comment=d,class:"comment",onChange:i.handleChange},null,8,["modelValue","onUpdate:modelValue","onChange"])],64)):(m(),p(O,{key:0},[u("span",null,w(s.name),1),vt,h(_,{modelValue:s.alias,"onUpdate:modelValue":d=>s.alias=d,onChange:i.handleChange},null,8,["modelValue","onUpdate:modelValue","onChange"]),u("span",null,w(l.visibleFields.length===r+1?"":","),1)],64))]),_:2},1032,["type","visible","onUpdate:visible","onField:delete"]))],64))),256)),l.table.isVirtual?x("",!0):(m(),A(o,{key:0},{default:y(()=>[It,u("span",null,w(l.table.name),1),Et,h(_,{modelValue:l.table.alias,"onUpdate:modelValue":t[0]||(t[0]=s=>l.table.alias=s),onChange:i.handleChange},null,8,["modelValue","onChange"])]),_:1})),h(g,{joins:l.repairedJoins,table:l.table,onChange:i.handleChange,"onTable:alias:change":t[1]||(t[1]=s=>i.handleTableAliasChange(s.table,s.value))},null,8,["joins","table","onChange"])])}const de=S(ut,[["render",Dt]]);const Ot={name:"TableSetting",components:{SQL:de,QueryResultPreview:tt,SQLLineKeywordSelect:Z,DynamicWidthInput:X,SQLLine:J},props:{visible:{default:!0},model:{required:!0},table:{},joins:{type:Array},aggregates:{type:Array}},computed:{...$(["currentDatabase"]),visibleFields(){let e=new Set;for(const t of this.table.fields)t.table=this.table,e.add(t);for(const t of this.repairedJoins){for(const l of t.table.fields)l.table=t.table,e.add(l);for(const l of t.targetTable.fields)l.table=t.targetTable,e.add(l)}return[...e]},repairedJoins(){const e=[];if(!this.joins.find(t=>t.table.id===this.table.id||t.targetTable.id===this.table.id))return[];for(const t of this.joins){const l={...t},n=new Proxy(l,{set:(i,o,c)=>(i[o]=c,(o==="joinType"||o==="relation")&&(t[o]=c),!0)});if(t.table.id===this.table.id){e.push(n);continue}if(t.targetTable.id===this.table.id){const i=n.table;n.table=n.targetTable,n.targetTable=i,e.push(n);continue}if(e.find(i=>i.targetTable.id===n.targetTable.id)){const i=n.table;n.table=n.targetTable,n.targetTable=i}e.push(n)}return e}},methods:{copy(){ye({sql:this.__getSql().sql}).then(e=>navigator.clipboard.writeText(e)).then(()=>{this.$tip.success(this.$t("common.copySuccessfully"))}).catch(e=>{this.$tip.apiFailed(e)})},execute(){const e=this.__getSql();this.$refs.queryResultPreview.open(e.fields,e.sql,[])},__getSql(){if(this.table==null)return{fields:[],sql:""};let e=[];const t=[];e.push("SELECT");for(const l of this.visibleFields){if(!l.visible)continue;const n=this.getAggregate(l);n!=null?(e.push("(SELECT"),e.push(`${n.function}(${n.targetTable.alias}.${n.targetField.name})`),e.push(`FROM \`${n.targetTable.name}\` AS \`${n.targetTable.alias}\``),e=e.concat(this.__getJoinSql(n.targetTable,this.repairedJoins)),e.push(`) AS \`${n.field.alias}\`,`),t.push(`\`${n.field.alias}\``)):(e.push(`\`${l.table.alias}\`.\`${l.name}\` AS \`${l.alias}\`,`),t.push(`\`${l.alias}\``))}if(e[e.length-1]=e[e.length-1].substring(0,e[e.length-1].length-1),!this.table.isVirtual){let l=` AS \`${this.table.alias}\``;this.table.name===this.table.alias&&(l=""),e.push(`FROM \`${this.table.name}\`${l}`)}return e=e.concat(this.__getJoinSql(this.table,this.repairedJoins)),{fields:t,sql:e.join(`
`)}},__getJoinSql(e,t){const l=[];for(const n of t){let a=` \`${n.targetTable.alias}\``;n.targetTable.name===n.targetTable.alias&&(a=""),l.push(`${n.joinType} \`${n.targetTable.name}\`${a}`);for(let i=0;i<n.ons.length;i++){const o=n.ons[i];let c=i===0?"ON ":`${o.relation} `;l.push(`${c}\`${o.table.alias}\`.\`${o.field.name}\` = \`${o.targetTable.alias}\`.\`${o.targetField.name}\``)}}return l},getAggregate(e){const t=this.aggregates.find(l=>l.field.name===e.name);return t??null}}},At=e=>(H("data-v-54a83e06"),e=e(),W(),e),Rt={class:"toolbar"},St=At(()=>u("h2",null,"SQL预览",-1)),Vt={class:"opera"},xt={key:0,class:"wrap"};function Mt(e,t,l,n,a,i){const o=f("el-button"),c=f("SQL"),_=f("QueryResultPreview");return m(),p("div",{class:G(["table-setting",{visible:l.visible}])},[u("div",Rt,[St,u("div",Vt,[h(o,{type:"primary",size:"default",class:"button-copy",onClick:i.copy},{default:y(()=>[M("复制")]),_:1},8,["onClick"]),h(o,{type:"primary",size:"default",onClick:i.execute},{default:y(()=>[M("执行语句")]),_:1},8,["onClick"])])]),l.table!=null?(m(),p("div",xt,[h(c,{model:l.model,table:l.table,"repaired-joins":i.repairedJoins,aggregates:l.aggregates,"visible-fields":i.visibleFields,"onField:change":t[0]||(t[0]=g=>e.$emit("field:change",g)),"onField:created":t[1]||(t[1]=g=>e.$emit("field:created",g)),"onField:deleted":t[2]||(t[2]=g=>e.$emit("field:deleted",g))},null,8,["model","table","repaired-joins","aggregates","visible-fields"])])):x("",!0),h(_,{ref:"queryResultPreview"},null,512)],2)}const ue=S(Ot,[["render",Mt],["__scopeId","data-v-54a83e06"]]);function he(e){return K.post("/project/database/model/create",e)}function ce(e){return K.post("/project/database/model/update",e)}function Nt(e){return K.post("/project/database/model/delete",e)}function Ft(e,t,l,n){if(!/^[a-zA-Z][a-zA-Z0-9_]+$/.test(t)){l(new Error(n));return}l()}function Ol(e,t,l,n){if(!/^(?!0)(\d+)\.(\d+)\.(\d+)/.test(t)){l(new Error(n));return}l()}const Bt={name:"TableLibrary",components:{Empty:Le,InnerRouterView:Ae,InnerRouterViewWindow:Re},props:{currentModel:{}},data(){return{newModel:{name:"",comment:"",tables:[],joins:[],aggregates:[],__lineType:"join",__visibleSQLPreviewWindow:!1},editModel:{id:null,name:"",comment:""},modelTemplate:null}},computed:{...$(["tables","models","currentProject","currentDatabase","globalLoading"])},methods:{...se(["fetchTables"]),getRules(){return{name:[{required:!0,message:this.$t("form.isRequired",{value:this.$t("database.modelName")})},{validator:(e,t,l)=>Ft(e,t,l,"模型名称必须以字母开头,长度必须大于1,且只能包含字母、数字和下划线!")}]}},handleDragStart(e){this.$emit("table:drag",e)},createQueryModel(){this.$refs.routerViewWindow.push("create-model");for(const e in this.newModel)this.newModel[e]=this.modelTemplate[e];this.$nextTick(()=>{this.$refs.createForm.clearValidate()})},updateModel(e){for(const t in this.editModel)this.editModel[t]=e[t];this.$refs.routerViewWindow.push("update-model"),this.$nextTick(()=>{this.$refs.editForm.clearValidate()})},confirmUpdate(){this.$refs.editForm.validate(e=>{e&&ce({projectId:this.currentProject,databaseId:this.currentDatabase,model:this.editModel}).then(()=>{const t=this.models.find(l=>l.id===this.editModel.id);Object.assign(t,this.editModel),this.$refs.routerViewWindow.back()}).catch(t=>{this.$tip.apiFailed(t)})})},confirmCreate(){this.$refs.createForm.validate(e=>{if(!e)return;const t=JSON.parse(JSON.stringify(this.newModel));for(const l in this.newModel)l.startsWith("__")&&delete t[l];he({projectId:this.currentProject,databaseId:this.currentDatabase,model:t}).then(l=>{const n=JSON.parse(JSON.stringify(this.newModel));n.id=l,this.models.unshift(n),this.selectModel(n),this.$refs.routerViewWindow.back()}).catch(l=>{this.$tip.apiFailed(l)})})},deleteModel(e){this.deleteConfirm(this.$t("database.deleteModelTip",{modelName:e.name})).then(()=>{Nt({projectId:this.currentProject,databaseId:this.currentDatabase,modelId:e.id}).then(()=>{const t=this.models.findIndex(l=>l.id===e.id);if(t!==-1){const l=this.models[t];this.models.splice(t,1),this.$emit("deleted",l)}this.$tip.success(this.$t("common.deleteSuccessfully"))}).catch(t=>{this.$tip.apiFailed(t)})}).catch(()=>{})},selectModel(e){this.$emit("update:currentModel",e)}},created(){this.modelTemplate={...this.newModel}}},ge=e=>(H("data-v-557cfe69"),e=e(),W(),e),kt={class:"table-library"},$t={class:"block"},Pt={class:"header",slot:"title"},Ut=ge(()=>u("h4",null,"查询模型",-1)),Ht={key:0,class:"model-list"},Wt=["onClick"],qt=["onClick"],jt=["onClick"],Gt={class:"create-model-form"},zt={class:"opera"},Qt={class:"create-model-form"},Kt={class:"opera"},Jt={class:"block table-list-wrap"},Xt={class:"header"},Zt=ge(()=>u("h4",null,"数据库表",-1)),Yt={class:"table-list"},el=["onDragstart"];function tl(e,t,l,n,a,i){const o=f("el-button"),c=f("Edit"),_=f("el-icon"),g=f("Delete"),s=f("Empty"),r=f("InnerRouterView"),d=f("el-input"),L=f("el-form-item"),E=f("el-form"),T=f("InnerRouterViewWindow"),C=Q("loading");return m(),p("div",kt,[u("div",$t,[h(T,{ref:"routerViewWindow",default:"query-models"},{default:y(()=>[h(r,{name:"query-models"},{default:y(()=>[u("div",Pt,[Ut,h(o,{type:"primary",size:"default",icon:"Plus",class:"button-icon",onClick:i.createQueryModel},null,8,["onClick"])]),e.models.length>0?(m(),p("ul",Ht,[(m(!0),p(O,null,V(e.models,v=>(m(),p("li",{key:v.id,class:G({selected:l.currentModel!=null&&l.currentModel.id===v.id}),onClick:R=>i.selectModel(v)},[u("label",null,w(v.name),1),u("p",null,w(v.comment),1),u("div",null,[u("span",{onClick:N(R=>i.updateModel(v),["stop"])},[h(_,null,{default:y(()=>[h(c)]),_:1})],8,qt),u("span",{onClick:N(R=>i.deleteModel(v),["stop"])},[h(_,null,{default:y(()=>[h(g)]),_:1})],8,jt)])],10,Wt))),128))])):(m(),A(s,{key:1}))]),_:1}),h(r,{name:"create-model",title:e.$t("database.createNewModel")},{default:y(()=>[u("div",Gt,[h(E,{ref:"createForm",model:a.newModel,rules:i.getRules(),onSubmit:t[2]||(t[2]=N(()=>{},["prevent"]))},{default:y(()=>[h(L,{label:e.$t("common.name"),prop:"name",required:""},{default:y(()=>[h(d,{modelValue:a.newModel.name,"onUpdate:modelValue":t[0]||(t[0]=v=>a.newModel.name=v)},null,8,["modelValue"])]),_:1},8,["label"]),h(L,{label:e.$t("common.remark"),prop:"comment"},{default:y(()=>[h(d,{modelValue:a.newModel.comment,"onUpdate:modelValue":t[1]||(t[1]=v=>a.newModel.comment=v),type:"textarea",rows:2},null,8,["modelValue"])]),_:1},8,["label"])]),_:1},8,["model","rules"]),u("div",zt,[h(o,{size:"default",onClick:t[3]||(t[3]=v=>e.$refs.routerViewWindow.back())},{default:y(()=>[M(w(e.$t("common.cancel")),1)]),_:1}),h(o,{type:"primary",size:"default",onClick:i.confirmCreate},{default:y(()=>[M(w(e.$t("common.confirmAdd")),1)]),_:1},8,["onClick"])])])]),_:1},8,["title"]),h(r,{name:"update-model",title:e.$t("database.updateModelTitle")},{default:y(()=>[u("div",Qt,[h(E,{ref:"editForm",model:a.editModel,rules:i.getRules(),onSubmit:t[6]||(t[6]=N(()=>{},["prevent"]))},{default:y(()=>[h(L,{label:e.$t("common.name"),prop:"name",required:""},{default:y(()=>[h(d,{modelValue:a.editModel.name,"onUpdate:modelValue":t[4]||(t[4]=v=>a.editModel.name=v)},null,8,["modelValue"])]),_:1},8,["label"]),h(L,{label:e.$t("common.remark"),prop:"comment"},{default:y(()=>[h(d,{modelValue:a.editModel.comment,"onUpdate:modelValue":t[5]||(t[5]=v=>a.editModel.comment=v),type:"textarea",rows:2},null,8,["modelValue"])]),_:1},8,["label"])]),_:1},8,["model","rules"]),u("div",Kt,[h(o,{size:"default",onClick:t[7]||(t[7]=v=>e.$refs.routerViewWindow.back())},{default:y(()=>[M(w(e.$t("common.cancel")),1)]),_:1}),h(o,{type:"primary",size:"default",onClick:i.confirmUpdate},{default:y(()=>[M(w(e.$t("common.confirmUpdate")),1)]),_:1},8,["onClick"])])])]),_:1},8,["title"])]),_:1},512)]),u("div",Jt,[u("div",Xt,[Zt,h(o,{class:"button-icon",size:"default",type:"primary",icon:"Refresh",onClick:e.fetchTables},null,8,["onClick"])]),B((m(),p("ul",Yt,[(m(!0),p(O,null,V(e.tables,v=>(m(),p("li",{key:v.name,draggable:"true",onDragstart:R=>i.handleDragStart(v.name)},[u("label",null,w(v.name),1),u("p",null,w(v.comment),1)],40,el))),128))])),[[C,e.globalLoading.tables]])])])}const ll=S(Bt,[["render",tl],["__scopeId","data-v-557cfe69"]]);var il=ve();const D=Ce(il);var k,U,me;class nl{constructor(t,l=3500,n=2e3){j(this,U);j(this,k,"join");b(this,"BACKGROUND_ITEM_COLOR","#555");b(this,"TABLE_MIN_DISTANCE",50);b(this,"TABLE_WIDTH",200);b(this,"TABLE_TITLE_HEIGHT",40);b(this,"TABLE_FIELD_HEIGHT",30);b(this,"TABLE_TITLE_BACKGROUND_COLOR","#fc6a70");b(this,"SUB_TABLE_TITLE_BACKGROUND_COLOR","#2e3444");b(this,"TABLE_FIELD_BACKGROUND_COLOR","#fff");b(this,"TABLE_FIELD_BORDER_COLOR","#ccc");b(this,"TABLE_FIELD_HOVER_BACKGROUND_COLOR","#f0f0f0");b(this,"TABLE_FIELD_DRAG_BALL_BACKGROUND_COLOR","#4a536e");b(this,"TABLE_FIELD_DRAG_BALL_HOVER_BACKGROUND_COLOR","#90a1d7");b(this,"TABLE_OPERA_BACKGROUND_COLOR","#f7f7f7");b(this,"TABLE_BUTTON_BACKGROUND_COLOR","#cb5053");b(this,"TABLE_BUTTON_HOVER_BACKGROUND_COLOR","#fc6a70");b(this,"TABLE_Z_INDEX",100);b(this,"LINE_COLOR","#394054");b(this,"LINE_HOVER_COLOR","#fc6a70");b(this,"LINE_CONTROL_COLOR","#999");b(this,"LINE_CONTROL_HOVER_COLOR","#fc6a70");b(this,"LINE_AGG_CONTROL_COLOR","#3e74ea");b(this,"DEFAULT_FONT_COLOR","#333");b(this,"MAX_Z_INDEX",1e4);b(this,"REVERSE_FONT_COLOR","#fff");b(this,"FONT_SIZE_TITLE",16);b(this,"stageWidth",null);b(this,"stageHeight",null);b(this,"stageContainer",null);b(this,"stage",null);b(this,"dashLine",null);b(this,"tables",[]);b(this,"elementLayer",null);b(this,"previewStage",null);b(this,"cloneElementLayer",null);b(this,"currentDragField",null);b(this,"currentDragTable",null);b(this,"isDragEnd",!1);b(this,"events",{});b(this,"createLine",({lineType:t,field:l,targetField:n,table:a,targetTable:i,targetFieldBackgroundRect:o})=>new Promise((c,_)=>{try{t=t||ee(this,k);const g=this.elementLayer.findOne(`#${a.id}`),s=this.elementLayer.findOne(`#${i.id}`),r=g.findOne(`#${l.name}`),d=s.findOne(`#${n.name}`);if(r.__lines&&r.__lines.length>0)for(const C of r.__lines){if(C.table===g&&C.targetTable===s&&C.field1===r&&C.field2===d)return _(new Error("请勿重复关联!"));if(C.table===s&&C.targetTable===g&&C.field1===d&&C.field2===r)return _(new Error("请勿重复关联!"))}const L=this.computeLinePoints({table:g,field1:r,targetTable:s,field2:d}),E=this.computeLineControlPoints({linePoints:L,table:g,targetTable:s});r.__lines=r.__lines||[],d.__lines=d.__lines||[];const T={lineType:t,table:g,field1:r,targetTable:s,field2:d,line:new D.Line({name:`field_line_${Math.round(Math.random()*1e4)}`,points:L,stroke:this.LINE_COLOR,strokeWidth:2,lineCap:"round",lineJoin:"round",zIndex:1}),control:new D.Circle({name:`field_line_control_${Math.round(Math.random()*1e4)}`,x:E.x,y:E.y,radius:10,fill:t==="join"?this.LINE_CONTROL_COLOR:this.LINE_AGG_CONTROL_COLOR,draggable:!1,zIndex:2})};r.__lines.push(T),d.__lines.push(T),this.elementLayer.add(T.line),this.elementLayer.add(T.control),T.control.on("click",()=>{T.line.destroy(),T.control.destroy();const C=r.__lines.indexOf(T);C!==-1&&r.__lines.splice(C,1);const v=d.__lines.indexOf(T);v!==-1&&d.__lines.splice(v,1),this.redrawPreview(),this.events["line:deleted"]&&this.events["line:deleted"]({field:l,targetField:n,table:a,targetTable:i})}),T.control.on("mouseover",()=>{T.line.stroke(this.LINE_HOVER_COLOR),T.line.zIndex(this.MAX_Z_INDEX),T.control.zIndex(this.MAX_Z_INDEX),T.control.fill(this.LINE_CONTROL_HOVER_COLOR),T.table.zIndex(this.MAX_Z_INDEX),T.targetTable.zIndex(this.MAX_Z_INDEX),this.stage.container().style.cursor="pointer"}),T.control.on("mouseout",()=>{T.line.stroke(this.LINE_COLOR),T.line.zIndex(1),T.line.dash([]),T.control.zIndex(2),T.control.fill(T.lineType==="join"?this.LINE_CONTROL_COLOR:this.LINE_AGG_CONTROL_COLOR),T.table.zIndex(this.TABLE_Z_INDEX),T.targetTable.zIndex(this.TABLE_Z_INDEX),this.stage.container().style.cursor="default"}),o&&o.fill(this.TABLE_FIELD_BACKGROUND_COLOR),this.tables.forEach(C=>C.zIndex(this.TABLE_Z_INDEX)),this.redrawPreview(),c()}catch(g){o&&o.fill(this.TABLE_FIELD_BACKGROUND_COLOR),_(g)}}));b(this,"redrawPreview",()=>{this.cloneElementLayer&&this.cloneElementLayer.destroy(),this.cloneElementLayer=this.elementLayer.clone(),this.previewStage.add(this.cloneElementLayer)});this.stageContainer=t,this.stageWidth=l,this.stageHeight=n,le(this,U,me).call(this)}createBackground(){const t=new D.Layer;this.stage.add(t);const l=80,n=1;let a=(this.stage.width()-l*n*2)/(l+1);for(let i=0;i<l;i++)for(let o=0;o<l;o++){const c=new D.Circle({x:(a+n*2)*o+a,y:(a+n*2)*i+a,radius:n,fill:this.BACKGROUND_ITEM_COLOR,draggable:!0,zIndex:1});t.add(c)}}createTable(t,l,n,a=!1){const i=new D.Group({id:t.id,name:`table_${t.name}_${Math.round(Math.random()*1e4)}`,width:this.TABLE_WIDTH,height:this.TABLE_TITLE_HEIGHT+20,x:l,y:n,draggable:!0,zIndex:this.TABLE_Z_INDEX}),o=new D.Rect({width:this.TABLE_WIDTH,height:this.TABLE_TITLE_HEIGHT+20,x:0,y:-20,fill:this.TABLE_OPERA_BACKGROUND_COLOR,stroke:this.TABLE_FIELD_BORDER_COLOR,strokeWidth:1,cornerRadius:[10,10,10,10],cornerStrokeWidth:1,cornerStroke:this.TABLE_FIELD_BORDER_COLOR});i.add(o);const c=new D.Circle({x:i.width()-15,y:-10,radius:5,fill:this.TABLE_BUTTON_BACKGROUND_COLOR,draggable:!1});c.on("click",()=>{this.events["table:delete"]&&this.events["table:delete"]({table:t,tableGroup:i})}),c.on("mouseover",()=>{c.fill(this.TABLE_BUTTON_HOVER_BACKGROUND_COLOR)}),c.on("mouseout",()=>{c.fill(this.TABLE_BUTTON_BACKGROUND_COLOR)}),i.add(c);const _=new D.Rect({x:-2,y:0,width:this.TABLE_WIDTH+4,height:this.TABLE_TITLE_HEIGHT,fill:t.type==="MAIN"?this.TABLE_TITLE_BACKGROUND_COLOR:this.SUB_TABLE_TITLE_BACKGROUND_COLOR,stroke:t.type==="MAIN"?this.TABLE_TITLE_BACKGROUND_COLOR:this.SUB_TABLE_TITLE_BACKGROUND_COLOR,strokeWidth:1}),g=new D.Text({x:10,y:5,text:t.name,fontSize:this.FONT_SIZE_TITLE,fontStyle:"bold",fill:this.REVERSE_FONT_COLOR,width:this.TABLE_WIDTH,height:this.TABLE_TITLE_HEIGHT,lineHeight:2});for(let s=0;s<t.fields.length;s++){const r=t.fields[s],d=new D.Group({id:r.name,name:"field",x:0,y:_.height()+this.TABLE_FIELD_HEIGHT*s});let L=[0,0,0,0];s===t.fields.length-1&&(L=[0,0,10,10]);const E=new D.Rect({name:"background",x:0,y:0,width:this.TABLE_WIDTH,height:this.TABLE_FIELD_HEIGHT,fill:this.TABLE_FIELD_BACKGROUND_COLOR,stroke:this.TABLE_FIELD_BORDER_COLOR,strokeWidth:.5,cornerRadius:L,cornerStrokeWidth:.5,cornerStroke:"#ccc"}),T=new D.Text({x:25,y:0,text:r.name,fontSize:14,fontFamily:"Calibri",fill:this.DEFAULT_FONT_COLOR,height:this.TABLE_FIELD_HEIGHT,lineHeight:2}),C=new D.Circle({name:"a"+Math.round(Math.random()*1e4),x:15,y:15,radius:4,fill:this.TABLE_FIELD_DRAG_BALL_BACKGROUND_COLOR});C.on("mousedown",()=>{i.draggable(!1),this.stage.draggable(!1),this.isDragEnd=!1,this.currentDragField=r,this.currentDragTable=t}),C.on("mouseover",()=>{C.fill(this.TABLE_FIELD_DRAG_BALL_HOVER_BACKGROUND_COLOR)}),C.on("mouseout",()=>{C.fill(this.TABLE_FIELD_DRAG_BALL_BACKGROUND_COLOR)}),d.on("mouseover",()=>{this.currentDragField&&this.currentDragTable!==t&&E.fill(this.TABLE_FIELD_HOVER_BACKGROUND_COLOR)}),d.on("mouseout",()=>{this.currentDragField&&E.fill(this.TABLE_FIELD_BACKGROUND_COLOR)}),d.on("mouseup",()=>{!this.currentDragField||this.currentDragTable===t||this.createLine({table:this.currentDragTable,field:this.currentDragField,targetTable:t,targetField:r,targetFieldBackgroundRect:E}).then(()=>{try{this.events["line:created"]&&this.events["line:created"]({table:this.currentDragTable,field:this.currentDragField,targetTable:t,targetField:r})}catch(R){throw R}}).catch(R=>{console.error("创建关联线出现错误",R),this.events["line:create:error"]&&this.events["line:create:error"](R)})}),d.add(E),d.add(T),d.add(C),i.add(d);const v=i.height()+this.TABLE_FIELD_HEIGHT;i.height(v),o.height(v)}return i.add(_),i.add(g),i.on("mouseleave",()=>{this.stage.container().style.cursor="default"}),i.on("mouseover",s=>{s.target instanceof D.Circle?this.stage.container().style.cursor="pointer":this.stage.container().style.cursor="move"}),i.on("dragmove",()=>{i.find(".field").forEach(r=>{if(r.__lines&&r.__lines.length>0)for(const d of r.__lines){const L=this.computeLinePoints(d);d.line.points(L);const E=this.computeLineControlPoints({linePoints:L,...d});d.control.position(E)}}),t.x=i.absolutePosition().x,t.y=i.absolutePosition().y,i.zIndex(this.TABLE_Z_INDEX)}),i.on("dragend",()=>{this.events.change&&this.events.change(t)}),i.on("dblclick",s=>{this.events["table:dblclick"]&&this.events["table:dblclick"]({event:s,table:t,tableGroup:i})}),this.tables.push(i),this.elementLayer.add(i),this.redrawPreview(),a&&this.events.change&&this.events.change(),i}deleteTable(t){try{const l=this.elementLayer.findOne(`#${t.id}`);if(l==null){console.warn("删除表,但在设计器中找到表元素!",t);return}const n=l.find(".field");for(const a of n)if(!(!a.__lines||a.__lines.length===0)){for(const i of a.__lines)i.line.destroy(),i.control.destroy();a.__lines=[]}this.tables=this.tables.filter(a=>a!==l),l.destroy(),this.redrawPreview()}catch(l){console.error(l)}}lineType(t){if(t==null)return this.lineType;te(this,k,t)}createPreview(t,l=200,n=150){this.previewStage=new D.Stage({container:t,width:l,height:n,scaleX:l/this.stageWidth,scaleY:n/this.stageHeight}),this.redrawPreview(),this.stage.on("dragmove",()=>{this.elementLayer.children.forEach(a=>{const i=this.cloneElementLayer.findOne("."+a.name());i instanceof D.Line?(i.points(a.points()),i.strokeWidth(2)):i.position(a.position())})})}initAutoSize(){this.stage.on("wheel",l=>{if(!l.evt.ctrlKey)return;l.evt.preventDefault();const n=this.elementLayer.scaleX(),a=this.stage.getPointerPosition(),i={x:(a.x-this.elementLayer.x())/n,y:(a.y-this.elementLayer.y())/n},o=l.evt.deltaY>0?n*1.05:n/1.05;if(o>3||o<.2)return;this.elementLayer.scale({x:o,y:o}),this.cloneElementLayer.scale({x:o,y:o});const c={x:a.x-i.x*o,y:a.y-i.y*o};this.elementLayer.position(c),this.cloneElementLayer.position(c)})}redraw(){this.tables=[],this.elementLayer&&this.elementLayer.destroy(),this.elementLayer=new D.Layer,this.stage.add(this.elementLayer),this.dashLine=new D.Line({name:"dash_line",points:[0,0,0,0],stroke:"#fc6a70",strokeWidth:1,opacity:0,lineCap:"round",lineJoin:"round",dash:[10,10]}),this.elementLayer.add(this.dashLine)}computeLinePoints({field1:t,field2:l,table:n,targetTable:a}){let i=n,o=n;n.absolutePosition().x>a.absolutePosition().x&&(i=a),n.absolutePosition().y>a.absolutePosition().y&&(o=a);let c=o.absolutePosition(),_=t,g=l;t.absolutePosition().x>l.absolutePosition().x&&(_=l,g=t);const s=_.absolutePosition(),r=g.absolutePosition(),d=r.x-s.x-this.TABLE_WIDTH,L=[0,s.y+15];d>=this.TABLE_MIN_DISTANCE?L[0]=s.x+this.TABLE_WIDTH:L[0]=s.x;let E=[...L],T=[...L],C=[...L],v=[...L];E=[s.x+this.TABLE_WIDTH+d/2,s.y+15],T=[...E],C=[...E],s.x+this.TABLE_WIDTH+this.TABLE_MIN_DISTANCE>r.x&&(E[0]=s.x-30,T[0]=E[0],T[1]=c.y-50),s.x+this.TABLE_WIDTH+this.TABLE_MIN_DISTANCE>r.x&&(C[0]=r.x+this.TABLE_WIDTH+30,C[1]=T[1]),v=[s.x+this.TABLE_WIDTH+d/2,r.y+15],s.x+this.TABLE_WIDTH+this.TABLE_MIN_DISTANCE>r.x&&(v[0]=r.x+this.TABLE_WIDTH+30);const R=[0,r.y+15];return s.x+this.TABLE_WIDTH+this.TABLE_MIN_DISTANCE>r.x?R[0]=r.x+this.TABLE_WIDTH:R[0]=r.x,R[0]>i.absolutePosition().x&&R[0]<i.absolutePosition().x+i.width()&&R[1]>i.absolutePosition().y&&R[1]<i.absolutePosition().y+i.height()&&(L[0]=s.x+this.TABLE_WIDTH,R[0]=r.x+this.TABLE_WIDTH,E[0]=r.x+this.TABLE_WIDTH+30,T[0]=r.x+this.TABLE_WIDTH+30),[...L,...E,...T,...C,...v,...R]}computeLineControlPoints({linePoints:t,table:l,targetTable:n}){const a=t[0];let i=l;l.absolutePosition().x>n.absolutePosition().x&&(i=n);let o=a>=i.absolutePosition().x+this.TABLE_WIDTH?20:-20;return{x:t[0]+o,y:t[1]}}on(t,l){this