UNPKG

goldpankit

Version:

GoldPanKit是一款极速研发套件,可在套件中快速构建各类技术框架和项目。开源作者可发布自己的项目,并为其设定金额,实现开源项目的盈利。

2 lines 60.3 kB
var _e=Object.defineProperty;var fe=(e,t,i)=>t in e?_e(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i;var b=(e,t,i)=>(fe(e,typeof t!="symbol"?t+"":t,i),i),q=(e,t,i)=>{if(!t.has(e))throw TypeError("Cannot "+i)};var Y=(e,t,i)=>(q(e,t,"read from private field"),i?i.call(e):t.get(e)),j=(e,t,i)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,i)},ee=(e,t,i,a)=>(q(e,t,"write to private field"),a?a.call(e,i):t.set(e,i),i);var te=(e,t,i)=>(q(e,t,"access private method"),i);import{_ as S,r as f,o as c,h as A,w as y,b as u,c as p,g as x,F as O,a7 as F,k as M,a as r,t as L,j as V,y as be,P as pe,B as $,K as ie,J as G,X as z,m as U,aa as le,ab as ne,A as ae,e as N,ac as Te,p as H,l as W,z as Q,E as ye,i as se,ad as ve,ae as Le,af as Ce,D as we,a9 as Ie,U as Ee}from"./index-d9f3c27d.js";import{a as De,I as Oe}from"./InnerRouterViewWindow-b5dcb824.js";const k={join:{color:"#eee",hoverColor:"#faa5aa",selectedColor:"#FC777D"},aggregate:{color:"#FFE957",hoverColor:"#faa5aa",selectedColor:"#FC777D"}},Ae={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 i=this.$refs.line.getNode();if(e)t?(i.setAttr("stroke",k[this.lineType].selectedColor),i.zIndex(101)):(i.setAttr("stroke",k[this.lineType].hoverColor),i.zIndex(100)),i.setAttr("strokeWidth",5);else{if(i.zIndex(1),t)return;i.setAttr("stroke",k[this.lineType].color),i.setAttr("strokeWidth",4)}},init(){this.lineConfig.stroke=k[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 Re(e,t,i,a,n,l){const o=f("v-line");return c(),A(o,{ref:"line",config:n.lineConfig,onMouseenter:t[0]||(t[0]=m=>l.highlight(!0,i.selected)),onMouseleave:t[1]||(t[1]=m=>l.highlight(!1,i.selected)),onClick:l.handleSelect},null,8,["config","onClick"])}const oe=S(Ae,[["render",Re],["__scopeId","data-v-6a26c54d"]]),Se={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 xe(e,t,i,a,n,l){const o=f("v-rect"),m=f("v-text"),_=f("v-layer");return c(),A(_,{ref:"table",config:n.layerConfig},{default:y(()=>[u(o,{ref:"background",config:l.backgroundConfig},null,8,["config"]),u(o,{config:l.tableHeaderConfig,onMouseover:l.handleHeaderMouseover,onMouseleave:l.handleHeaderMouseleave,onClick:l.selectTable,onDblclick:l.previewTable},null,8,["config","onMouseover","onMouseleave","onClick","onDblclick"]),u(m,{config:l.tableNameConfig,onMouseover:l.handleHeaderMouseover,onMouseleave:l.handleHeaderMouseleave,onClick:l.selectTable,onDblclick:l.previewTable},null,8,["config","onMouseover","onMouseleave","onClick","onDblclick"]),(c(!0),p(O,null,x(l.visibleFields,(g,s)=>(c(),A(o,{key:g.name,config:{y:s*i.fieldHeight+l.tableHeaderConfig.height,width:200,height:i.fieldHeight,fill:"#fff"},onMousedown:h=>l.handleFieldMouseDown(g),onMouseup:h=>l.handleFieldMouseUp(g)},null,8,["config","onMousedown","onMouseup"]))),128)),(c(!0),p(O,null,x(l.visibleFields,(g,s)=>(c(),A(m,{key:g,config:{text:g.name,x:10,y:s*i.fieldHeight+l.tableHeaderConfig.height+10,fontSize:13,fill:"#333"},onMousedown:h=>l.handleFieldMouseDown(g),onMouseup:h=>l.handleFieldMouseUp(g)},null,8,["config","onMousedown","onMouseup"]))),128))]),_:1},8,["config"])}const re=S(Se,[["render",xe]]);const Ve={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(a=>a.id===e.table.id),i=this.model.tables.find(a=>a.id===e.targetTable.id);for(const a of e.ons){const n=this.__getFieldPosition(t,a.field),l=this.__getFieldPosition(i,a.targetField,!1);n==null||l==null||this.relationLines.push({id:F(),start:n,end:l,type:"join",table:e.table,field:a.field,targetTable:e.targetTable,targetField:a.targetField})}}for(const e of this.model.aggregates){const t=this.__getFieldPosition(e.table,e.field),i=this.__getFieldPosition(e.targetTable,e.targetField,!1);t==null||i==null||this.relationLines.push({id:F(),start:t,end:i,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 i=this.$refs.stage.getNode();i.setPointersPositions(e);const a=i.getPointerPosition(),n={width:200,height:(this.model.dragData.fields.length+1)*this.fieldHeight},l={...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:a.x-n.width/2,y:a.y-n.height/2,id:F(),joins:[]};this.model.tables.push(l),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(i){i.preventDefault()}),t.addEventListener("drop",i=>{i.preventDefault(),this.handleDrop(i,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(n=>n.table.id===e.table.id&&n.targetTable.id===e.targetTable.id),i=this.model.joins[t],a=i.ons.findIndex(n=>n.field.name===e.field.name&&n.targetField.name===e.targetField.name);a!==-1&&i.ons.splice(a,1),i.ons.length===0&&this.model.joins.splice(t,1)}else{const t=this.model.aggregates.findIndex(i=>i.table.id===e.table.id&&i.targetTable.id===e.targetTable.id&&i.field.name===e.field.name&&i.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(a=>a.id===this.model.selectedTableId),t=this.model.tables[e];let i=Promise.resolve();t.type==="MAIN"&&this.model.tables.length>1&&(i=this.deleteConfirm("Deleting the main table will delete all the schedules and associations. Are you sure to delete it?")),i.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(a=>!(a.table.id===this.model.selectedTableId||a.targetTable.id===this.model.selectedTableId)),this.model.aggregates=this.model.aggregates.filter(a=>!(a.table.id===this.model.selectedTableId||a.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,i=!0){const n=this.$refs.stage.getNode().getAbsolutePosition();let l=e.fields.findIndex(g=>g.visible&&g.name===t.name);if(l===-1)return null;let o=l;for(let g=0;g<o;g++)e.fields[g].visible||l--;if(l===-1)return null;const m=e.x+(i?200:0)-n.x,_=e.y+this.fieldHeight+(l+1)*this.fieldHeight-15-n.y;return{x:m,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()})}},Ne={class:"wrap"};function Me(e,t,i,a,n,l){const o=f("Table"),m=f("RelationLine"),_=f("v-layer"),g=f("v-stage");return c(),p(O,null,[i.model.tables.length===0?(c(),p("div",{key:0,class:"empty-tip",onDragover:t[1]||(t[1]=M(()=>{},["prevent"])),onDrop:t[2]||(t[2]=s=>l.handleDrop(s,1))},[r("div",Ne,[r("p",null,L(e.$t("database.dragTip")),1),r("p",null,L(e.$t("common.or")),1),r("p",null,[r("em",{onClick:t[0]||(t[0]=(...s)=>l.confirmCreateVirtualTable&&l.confirmCreateVirtualTable(...s))},L(e.$t("database.createVirtualTableTip")),1)])])],32)):V("",!0),r("div",{class:"stage-wrap",tabindex:"-1",onKeyup:t[5]||(t[5]=be((...s)=>l.handleDelete&&l.handleDelete(...s),["delete"]))},[n.rendered?(c(),A(g,{key:0,ref:"stage",config:n.configKonva,onMouseup:t[4]||(t[4]=s=>e.$refs.stage.getNode().draggable(!0)),onClick:l.globalClick},{default:y(()=>[(c(!0),p(O,null,x(i.model.tables,s=>(c(),A(o,{ref_for:!0,ref:s.id,key:s.name,"field-height":i.fieldHeight,x:s.x,y:s.y,table:s,relations:i.model.joins,selected:i.model.selectedTableId===s.id,onDragmove:l.moveTable,"onField:mousedown":l.handleFieldMouseDown,"onField:mouseup":l.handleFieldMouseUp,"onTable:select":l.handleTableSelect,"onTable:preview":l.handleTablePreview},null,8,["field-height","x","y","table","relations","selected","onDragmove","onField:mousedown","onField:mouseup","onTable:select","onTable:preview"]))),128)),u(_,null,{default:y(()=>[(c(!0),p(O,null,x(n.relationLines,s=>(c(),A(m,{key:s.id,"line-type":s.type,start:s.start,end:s.end,selected:i.model.selectedLineId===s.id,onSelect:h=>l.handleLineSelect(s),onUnselect:t[3]||(t[3]=h=>i.model.selectedLineId=null)},null,8,["line-type","start","end","selected","onSelect"]))),128))]),_:1})]),_:1},8,["config","onClick"])):V("",!0)],32)],64)}const Fe=S(Ve,[["render",Me],["__scopeId","data-v-dd89d219"]]);const Be={name:"SQLLine",props:{type:{},indent:{default:0},visible:{default:!0}}},ke={class:"code"},$e={class:"opera"},Pe={key:0};function Ue(e,t,i,a,n,l){const o=f("el-button");return c(),p("div",{class:G(["sql-line",{"sql-line__hide":!i.visible}]),style:z({"padding-left":i.indent+"px"})},[r("p",ke,[pe(e.$slots,"default",{},void 0,!0)]),r("ul",$e,[i.type==="field"?(c(),p("li",Pe,[$(u(o,{icon:"View",onClick:t[0]||(t[0]=m=>e.$emit("update:visible",!1))},null,512),[[ie,i.visible]]),$(u(o,{icon:"Hide",onClick:t[1]||(t[1]=m=>e.$emit("update:visible",!0))},null,512),[[ie,!i.visible]])])):V("",!0)])],6)}const K=S(Be,[["render",Ue],["__scopeId","data-v-6cb65a6a"]]);const He={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 We(e,t,i,a,n,l){return c(),p("div",{class:"dynamic-width-input",contenteditable:!0,onInput:t[0]||(t[0]=(...o)=>l.handleInput&&l.handleInput(...o)),onBlur:t[1]||(t[1]=(...o)=>l.handleBlur&&l.handleBlur(...o))},L(i.modelValue),33)}const J=S(He,[["render",We],["__scopeId","data-v-04b6211d"]]);const qe={name:"SQLLineKeywordSelect",props:{width:{default:"120px"},data:{type:Array,required:!0}}};function je(e,t,i,a,n,l){const o=f("el-option"),m=f("el-select");return c(),A(m,{class:"sql-line-keyword-select",size:"default",style:z({width:i.width})},{default:y(()=>[(c(!0),p(O,null,x(i.data,_=>(c(),A(o,{key:_,value:_,label:_},null,8,["value","label"]))),128))]),_:1},8,["style"])}const X=S(qe,[["render",je],["__scopeId","data-v-b739087d"]]);const Ge={name:"ErrorWindow",data(){return{visible:!1,title:"错误",message:""}},methods:{open({title:e,message:t}){this.title=e,this.message=t,this.visible=!0}}},ze={class:"error-message"};function Qe(e,t,i,a,n,l){const o=f("el-dialog");return c(),A(o,{title:n.title,modelValue:n.visible,"onUpdate:modelValue":t[0]||(t[0]=m=>n.visible=m),class:"error-window",width:"550px","append-to-body":""},{default:y(()=>[r("pre",ze,L(n.message),1)]),_:1},8,["title","modelValue"])}const Ke=S(Ge,[["render",Qe]]);const Je={name:"QueryResultPreview",components:{ErrorWindow:Ke},data(){return{loading:!1,visible:!1,pagination:{page:1,capacity:100,total:0},sql:"",columns:[],result:[]}},computed:{...U(["currentProject","currentDatabase"])},methods:{open(e,t){this.sql=t,this.fetchList().then(()=>{this.visible=!0,this.loading=!0,this.columns=e.map(i=>i.substring(1,i.length-1)),this.result=[]}).catch(i=>{this.$refs.errorWindow.open({title:"SQL错误",message:i.message})})},fetchList(){return new Promise((e,t)=>{le({projectId:this.currentProject,databaseId:this.currentDatabase,sql:this.__getCountSql()}).then(i=>(e(),this.pagination.total=i[0].total,this.pagination.total>0?le({projectId:this.currentProject,databaseId:this.currentDatabase,sql:this.__getPaginationSql()}):[])).then(i=>{this.result=i}).catch(i=>{t(i)}).finally(()=>{this.loading=!1})})},getColumnWidth(e){let t=ne(e)+24,i=t;const a=this.result[0];if(a!=null){const n=a[e];n!=null&&(i=ne(n)+24)}return Math.max(t,i)},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`}}},Xe={class:"toolbar"};function Ze(e,t,i,a,n,l){const o=f("el-pagination"),m=f("el-table-column"),_=f("el-table"),g=f("el-dialog"),s=f("ErrorWindow"),h=ae("loading");return c(),p(O,null,[u(g,{class:"sql-preview",title:e.$t("database.queryResult"),width:"1000px",modelValue:n.visible,"onUpdate:modelValue":t[0]||(t[0]=d=>n.visible=d),"append-to-body":""},{default:y(()=>[r("div",Xe,[u(o,{background:"","page-sizes":[10,20,50,100,200,500],"default-page-size":100,layout:"total, prev, pager, next, sizes",total:n.pagination.total,onCurrentChange:l.handleCurrentChange,onSizeChange:l.handleSizeChange},null,8,["total","onCurrentChange","onSizeChange"])]),$((c(),A(_,{data:n.result,border:""},{default:y(()=>[(c(!0),p(O,null,x(n.columns,d=>(c(),A(m,{key:d,prop:d,label:d,"min-width":l.getColumnWidth(d)},null,8,["prop","label","min-width"]))),128))]),_:1},8,["data"])),[[h,n.loading]])]),_:1},8,["title","modelValue"]),u(s,{ref:"errorWindow"},null,512)],64)}const Ye=S(Je,[["render",Ze]]),et={name:"SQLJoin",components:{DynamicWidthInput:J,SQLLine:K,SQLLineKeywordSelect:X},props:{table:{required:!0},joins:{required:!0},indentLevel:{default:1}},computed:{indent(){return`${(this.indentLevel-1)*20}px`}},methods:{handleChange(){this.$emit("change")}}},tt={class:"hidden"},it=r("em",null,"ON",-1),lt={class:"join-ons"},nt=r("span",null,".",-1),at=r("span",null,"=",-1),st=r("span",null,".",-1);function ot(e,t,i,a,n,l){const o=f("SQLLineKeywordSelect"),m=f("DynamicWidthInput"),_=f("SQLLine");return c(),p("ul",{class:"joins",style:z({"padding-left":l.indent})},[(c(!0),p(O,null,x(i.joins,g=>(c(),p("li",null,[u(_,null,{default:y(()=>[u(o,{modelValue:g.joinType,"onUpdate:modelValue":s=>g.joinType=s,width:"105px",data:["INNER JOIN","LEFT JOIN","RIGHT JOIN","OUTER JOIN"],class:"keyword",onChange:l.handleChange},null,8,["modelValue","onUpdate:modelValue","onChange"]),r("span",tt,L(g.joinType),1),r("span",null,L(g.targetTable.name),1),u(m,{modelValue:g.targetTable.alias,"onUpdate:modelValue":s=>g.targetTable.alias=s,onChange:l.handleChange},null,8,["modelValue","onUpdate:modelValue","onChange"]),it,u(o,{modelValue:g.relation,"onUpdate:modelValue":s=>g.relation=s,width:"130px",data:["ONE-TO-ONE","ONE-TO-MANY","MANY-TO-ONE"],class:"relation",onChange:l.handleChange},null,8,["modelValue","onUpdate:modelValue","onChange"])]),_:2},1024),r("ul",lt,[(c(!0),p(O,null,x(g.ons,(s,h)=>(c(),A(_,{indent:"20"},{default:y(()=>[h!==0?(c(),A(o,{key:0,modelValue:s.relation,"onUpdate:modelValue":d=>s.relation=d,data:["AND","OR"],width:"45px",onChange:l.handleChange},null,8,["modelValue","onUpdate:modelValue","onChange"])):V("",!0),u(m,{modelValue:s.table.alias,"onUpdate:modelValue":d=>s.table.alias=d,onChange:l.handleChange},null,8,["modelValue","onUpdate:modelValue","onChange"]),nt,r("span",null,L(s.field.name),1),at,u(m,{modelValue:s.targetTable.alias,"onUpdate:modelValue":d=>s.targetTable.alias=d,onChange:l.handleChange},null,8,["modelValue","onUpdate:modelValue","onChange"]),st,r("span",null,L(s.targetField.name),1)]),_:2},1024))),256))])]))),256))],4)}const rt=S(et,[["render",ot]]),dt={name:"SQL",components:{SQLJoin:rt,DynamicWidthInput:J,SQLLine:K,SQLLineKeywordSelect:X},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:i}){const a=this.model.tables.find(n=>n.id===e.id);if(a.type==="MAIN"){this.$emit("field:change");return}for(const n of a.fields)n.alias===`${t}_${n.name}`&&(n.alias=`${i}_${n.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(i=>i.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]}}},ut={class:"sql"},ht=r("em",null,"SELECT",-1),ct=r("em",null,"SELECT",-1),gt={class:"hidden"},mt=r("span",null,"(",-1),_t=r("span",null,".",-1),ft=r("span",null,")",-1),bt=r("em",null,"FROM",-1),pt=r("span",null,")",-1),Tt=r("span",null,"AS",-1),yt=r("span",{class:"comment"},"#",-1),vt=r("span",null,".",-1),Lt=r("span",null,"AS",-1),Ct=r("span",null,"AS",-1),wt=r("span",{class:"comment"},"#",-1),It=r("em",null,"FROM",-1),Et=r("span",null,"AS",-1);function Dt(e,t,i,a,n,l){const o=f("SQLLine"),m=f("SQLLineKeywordSelect"),_=f("DynamicWidthInput"),g=f("SQLJoin");return c(),p("div",ut,[u(o,{type:"select","onField:create":l.createVirtualField},{default:y(()=>[ht]),_:1},8,["onField:create"]),(c(!0),p(O,null,x(i.visibleFields,(s,h)=>(c(),p(O,null,[l.getAggregate(s)?(c(),p(O,{key:0},[u(o,{indent:"20",visible:s.visible},{default:y(()=>[N("(")]),_:2},1032,["visible"]),u(o,{indent:"40",visible:s.visible},{default:y(()=>[ct]),_:2},1032,["visible"]),u(o,{indent:"60",visible:s.visible},{default:y(()=>[u(m,{modelValue:l.getAggregate(s).function,"onUpdate:modelValue":d=>l.getAggregate(s).function=d,data:["COUNT","SUM","AVG","MAX","MIN"],width:`${l.__getAggregateFunctionWidth(l.getAggregate(s).function)}px`,onChange:l.handleChange},null,8,["modelValue","onUpdate:modelValue","width","onChange"]),r("span",gt,L(l.getAggregate(s).function),1),mt,u(_,{modelValue:l.getAggregate(s).targetTable.alias,"onUpdate:modelValue":d=>l.getAggregate(s).targetTable.alias=d,onChange:l.handleChange},null,8,["modelValue","onUpdate:modelValue","onChange"]),_t,r("span",null,L(l.getAggregate(s).targetField.name),1),ft]),_:2},1032,["visible"]),u(o,{indent:"40",visible:s.visible},{default:y(()=>[bt,r("span",null,L(l.getAggregate(s).targetTable.name),1),u(_,{modelValue:l.getAggregate(s).targetTable.alias,"onUpdate:modelValue":d=>l.getAggregate(s).targetTable.alias=d,onChange:l.handleChange},null,8,["modelValue","onUpdate:modelValue","onChange"])]),_:2},1032,["visible"]),u(g,{"indent-level":3,joins:i.repairedJoins,table:l.getAggregate(s).targetTable},null,8,["joins","table"]),u(o,{indent:"20",type:s.isVirtual?"virtual-field":"field",visible:s.visible,"onUpdate:visible":[d=>s.visible=d,l.fieldVisibleChange],"onField:delete":d=>l.deleteVirtualField(h)},{default:y(()=>[pt,Tt,u(_,{modelValue:s.alias,"onUpdate:modelValue":d=>s.alias=d},null,8,["modelValue","onUpdate:modelValue"]),r("span",null,L(i.visibleFields.length===h+1?"":","),1),s.isVirtual?(c(),p(O,{key:0},[yt,u(_,{modelValue:s.type,"onUpdate:modelValue":d=>s.type=d,class:"comment",onChange:l.handleChange},null,8,["modelValue","onUpdate:modelValue","onChange"]),u(_,{modelValue:s.comment,"onUpdate:modelValue":d=>s.comment=d,class:"comment",onChange:l.handleChange},null,8,["modelValue","onUpdate:modelValue","onChange"])],64)):V("",!0)]),_:2},1032,["type","visible","onUpdate:visible","onField:delete"])],64)):(c(),A(o,{key:s.name,type:s.isVirtual?"virtual-field":"field",visible:s.visible,"onUpdate:visible":[d=>s.visible=d,l.fieldVisibleChange],indent:"20","onField:delete":d=>l.deleteVirtualField(h)},{default:y(()=>[u(_,{modelValue:s.table.alias,"onUpdate:modelValue":d=>s.table.alias=d,onChange:d=>l.handleTableAliasChange(s.table,d)},null,8,["modelValue","onUpdate:modelValue","onChange"]),vt,s.isVirtual?(c(),p(O,{key:1},[u(_,{"model-value":s.name,"blur-model-value":s.name,"onUpdate:blurModelValue":d=>s.name=d,onBlur:l.handleChange},null,8,["model-value","blur-model-value","onUpdate:blurModelValue","onBlur"]),Ct,u(_,{"model-value":s.alias,"blur-model-value":s.alias,"onUpdate:blurModelValue":d=>s.alias=d,onBlur:l.handleChange},null,8,["model-value","blur-model-value","onUpdate:blurModelValue","onBlur"]),r("span",null,L(i.visibleFields.length===h+1?"":","),1),wt,u(_,{modelValue:s.type,"onUpdate:modelValue":d=>s.type=d,class:"comment",onChange:l.handleChange},null,8,["modelValue","onUpdate:modelValue","onChange"]),u(_,{modelValue:s.comment,"onUpdate:modelValue":d=>s.comment=d,class:"comment",onChange:l.handleChange},null,8,["modelValue","onUpdate:modelValue","onChange"])],64)):(c(),p(O,{key:0},[r("span",null,L(s.name),1),Lt,u(_,{modelValue:s.alias,"onUpdate:modelValue":d=>s.alias=d,onChange:l.handleChange},null,8,["modelValue","onUpdate:modelValue","onChange"]),r("span",null,L(i.visibleFields.length===h+1?"":","),1)],64))]),_:2},1032,["type","visible","onUpdate:visible","onField:delete"]))],64))),256)),i.table.isVirtual?V("",!0):(c(),A(o,{key:0},{default:y(()=>[It,r("span",null,L(i.table.name),1),Et,u(_,{modelValue:i.table.alias,"onUpdate:modelValue":t[0]||(t[0]=s=>i.table.alias=s),onChange:l.handleChange},null,8,["modelValue","onChange"])]),_:1})),u(g,{joins:i.repairedJoins,table:i.table,onChange:l.handleChange},null,8,["joins","table","onChange"])])}const de=S(dt,[["render",Dt]]);const Ot={name:"TableSetting",components:{SQL:de,QueryResultPreview:Ye,SQLLineKeywordSelect:X,DynamicWidthInput:J,SQLLine:K},props:{visible:{default:!0},model:{required:!0},table:{},joins:{type:Array},aggregates:{type:Array}},computed:{...U(["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 i of t.table.fields)i.table=t.table,e.add(i);for(const i of t.targetTable.fields)i.table=t.targetTable,e.add(i)}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 i={...t};if(t.table.id===this.table.id){e.push(i);continue}if(t.targetTable.id===this.table.id){const n=i.table;i.targetTable=i.table,i.table=n,e.push(i);continue}if(e.find(n=>n.targetTable.id===i.targetTable.id)){const n=i.table;i.targetTable=i.table,i.table=n}e.push(i)}return e}},methods:{copy(){Te({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 i of this.visibleFields){if(!i.visible)continue;const a=this.getAggregate(i);a!=null?(e.push("(SELECT"),e.push(`${a.function}(${a.targetTable.alias}.${a.targetField.name})`),e.push(`FROM \`${a.targetTable.name}\` AS \`${a.targetTable.alias}\``),e=e.concat(this.__getJoinSql(a.targetTable,this.repairedJoins)),e.push(`) AS \`${a.field.alias}\`,`),t.push(`\`${a.field.alias}\``)):(e.push(`\`${i.table.alias}\`.\`${i.name}\` AS \`${i.alias}\`,`),t.push(`\`${i.alias}\``))}return e[e.length-1]=e[e.length-1].substring(0,e[e.length-1].length-1),this.table.isVirtual||e.push(`FROM \`${this.table.name}\` AS \`${this.table.alias}\``),e=e.concat(this.__getJoinSql(this.table,this.repairedJoins)),{fields:t,sql:e.join(` `)}},__getJoinSql(e,t){const i=[];for(const a of t){i.push(`${a.joinType} \`${a.targetTable.name}\` \`${a.targetTable.alias}\``);for(let n=0;n<a.ons.length;n++){const l=a.ons[n];let o=n===0?"ON ":`${l.relation} `;i.push(`${o}\`${l.table.alias}\`.\`${l.field.name}\` = \`${l.targetTable.alias}\`.\`${l.targetField.name}\``)}}return i},getAggregate(e){const t=this.aggregates.find(i=>i.field.name===e.name);return t??null}}},At=e=>(H("data-v-29d0d050"),e=e(),W(),e),Rt={class:"toolbar"},St=At(()=>r("h2",null,"SQL预览",-1)),xt={class:"opera"},Vt={key:0,class:"wrap"};function Nt(e,t,i,a,n,l){const o=f("el-button"),m=f("SQL"),_=f("QueryResultPreview");return c(),p("div",{class:G(["table-setting",{visible:i.visible}])},[r("div",Rt,[St,r("div",xt,[u(o,{type:"primary",size:"default",class:"button-copy",onClick:l.copy},{default:y(()=>[N("复制")]),_:1},8,["onClick"]),u(o,{type:"primary",size:"default",onClick:l.execute},{default:y(()=>[N("执行语句")]),_:1},8,["onClick"])])]),i.table!=null?(c(),p("div",Vt,[u(m,{model:i.model,table:i.table,"repaired-joins":l.repairedJoins,aggregates:i.aggregates,"visible-fields":l.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"])])):V("",!0),u(_,{ref:"queryResultPreview"},null,512)],2)}const ue=S(Ot,[["render",Nt],["__scopeId","data-v-29d0d050"]]);function Mt(e){return Q.post("/project/database/model/create",e)}function he(e){return Q.post("/project/database/model/update",e)}function Ft(e){return Q.post("/project/database/model/delete",e)}function Bt(e,t,i,a){if(!/^[a-zA-Z][a-zA-Z0-9_]+$/.test(t)){i(new Error(a));return}i()}function Ai(e,t,i,a){if(!/^(?!0)(\d+)\.(\d+)\.(\d+)/.test(t)){i(new Error(a));return}i()}const kt={name:"TableLibrary",components:{Empty:ye,InnerRouterView:De,InnerRouterViewWindow:Oe},props:{currentModel:{}},data(){return{newModel:{name:"",comment:"",tables:[],joins:[],aggregates:[],__lineType:"join",__visibleSQLPreviewWindow:!1},editModel:{id:null,name:"",comment:""},modelTemplate:null}},computed:{...U(["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,i)=>Bt(e,t,i,"模型名称必须以字母开头,长度必须大于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&&he({projectId:this.currentProject,databaseId:this.currentDatabase,model:this.editModel}).then(()=>{Object.assign(this.currentModel,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 i in this.newModel)i.startsWith("__")&&delete t[i];Mt({projectId:this.currentProject,databaseId:this.currentDatabase,model:t}).then(i=>{const a=JSON.parse(JSON.stringify(this.newModel));a.id=i,this.models.unshift(a),this.selectModel(a),this.$refs.routerViewWindow.back()}).catch(i=>{this.$tip.apiFailed(i)})})},deleteModel(e){this.deleteConfirm(this.$t("database.deleteModelTip",{modelName:e.name})).then(()=>{Ft({projectId:this.currentProject,databaseId:this.currentDatabase,modelId:e.id}).then(()=>{const t=this.models.findIndex(i=>i.id===e.id);if(t!==-1){const i=this.models[t];this.models.splice(t,1),this.$emit("deleted",i)}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}}},ce=e=>(H("data-v-46299fe7"),e=e(),W(),e),$t={class:"table-library"},Pt={class:"block"},Ut={class:"header",slot:"title"},Ht=ce(()=>r("h4",null,"查询模型",-1)),Wt={key:0,class:"model-list"},qt=["onClick"],jt=["onClick"],Gt=["onClick"],zt={class:"create-model-form"},Qt={class:"opera"},Kt={class:"create-model-form"},Jt={class:"opera"},Xt={class:"block table-list-wrap"},Zt={class:"header"},Yt=ce(()=>r("h4",null,"数据库表",-1)),ei={class:"table-list"},ti=["onDragstart"];function ii(e,t,i,a,n,l){const o=f("el-button"),m=f("Edit"),_=f("el-icon"),g=f("Delete"),s=f("Empty"),h=f("InnerRouterView"),d=f("el-input"),w=f("el-form-item"),E=f("el-form"),T=f("InnerRouterViewWindow"),C=ae("loading");return c(),p("div",$t,[r("div",Pt,[u(T,{ref:"routerViewWindow",default:"query-models"},{default:y(()=>[u(h,{name:"query-models"},{default:y(()=>[r("div",Ut,[Ht,u(o,{type:"primary",size:"default",icon:"Plus",class:"button-icon",onClick:l.createQueryModel},null,8,["onClick"])]),e.models.length>0?(c(),p("ul",Wt,[(c(!0),p(O,null,x(e.models,v=>(c(),p("li",{key:v.id,class:G({selected:i.currentModel!=null&&i.currentModel.id===v.id}),onClick:R=>l.selectModel(v)},[r("label",null,L(v.name),1),r("p",null,L(v.comment),1),r("div",null,[r("span",{onClick:M(R=>l.updateModel(v),["stop"])},[u(_,null,{default:y(()=>[u(m)]),_:1})],8,jt),r("span",{onClick:M(R=>l.deleteModel(v),["stop"])},[u(_,null,{default:y(()=>[u(g)]),_:1})],8,Gt)])],10,qt))),128))])):(c(),A(s,{key:1}))]),_:1}),u(h,{name:"create-model",title:e.$t("database.createNewModel")},{default:y(()=>[r("div",zt,[u(E,{ref:"createForm",model:n.newModel,rules:l.getRules(),onSubmit:t[2]||(t[2]=M(()=>{},["prevent"]))},{default:y(()=>[u(w,{label:e.$t("common.name"),prop:"name",required:""},{default:y(()=>[u(d,{modelValue:n.newModel.name,"onUpdate:modelValue":t[0]||(t[0]=v=>n.newModel.name=v)},null,8,["modelValue"])]),_:1},8,["label"]),u(w,{label:e.$t("common.remark"),prop:"comment"},{default:y(()=>[u(d,{modelValue:n.newModel.comment,"onUpdate:modelValue":t[1]||(t[1]=v=>n.newModel.comment=v),type:"textarea",rows:2},null,8,["modelValue"])]),_:1},8,["label"])]),_:1},8,["model","rules"]),r("div",Qt,[u(o,{size:"default",onClick:t[3]||(t[3]=v=>e.$refs.routerViewWindow.back())},{default:y(()=>[N(L(e.$t("common.cancel")),1)]),_:1}),u(o,{type:"primary",size:"default",onClick:l.confirmCreate},{default:y(()=>[N(L(e.$t("common.confirmAdd")),1)]),_:1},8,["onClick"])])])]),_:1},8,["title"]),u(h,{name:"update-model",title:e.$t("database.updateModelTitle")},{default:y(()=>[r("div",Kt,[u(E,{ref:"editForm",model:n.editModel,rules:l.getRules(),onSubmit:t[6]||(t[6]=M(()=>{},["prevent"]))},{default:y(()=>[u(w,{label:e.$t("common.name"),prop:"name",required:""},{default:y(()=>[u(d,{modelValue:n.editModel.name,"onUpdate:modelValue":t[4]||(t[4]=v=>n.editModel.name=v)},null,8,["modelValue"])]),_:1},8,["label"]),u(w,{label:e.$t("common.remark"),prop:"comment"},{default:y(()=>[u(d,{modelValue:n.editModel.comment,"onUpdate:modelValue":t[5]||(t[5]=v=>n.editModel.comment=v),type:"textarea",rows:2},null,8,["modelValue"])]),_:1},8,["label"])]),_:1},8,["model","rules"]),r("div",Jt,[u(o,{size:"default",onClick:t[7]||(t[7]=v=>e.$refs.routerViewWindow.back())},{default:y(()=>[N(L(e.$t("common.cancel")),1)]),_:1}),u(o,{type:"primary",size:"default",onClick:l.confirmUpdate},{default:y(()=>[N(L(e.$t("common.confirmUpdate")),1)]),_:1},8,["onClick"])])])]),_:1},8,["title"])]),_:1},512)]),r("div",Xt,[r("div",Zt,[Yt,u(o,{class:"button-icon",size:"default",type:"primary",icon:"Refresh",onClick:e.fetchTables},null,8,["onClick"])]),$((c(),p("ul",ei,[(c(!0),p(O,null,x(e.tables,v=>(c(),p("li",{key:v.name,draggable:"true",onDragstart:R=>l.handleDragStart(v.name)},[r("label",null,L(v.name),1),r("p",null,L(v.comment),1)],40,ti))),128))])),[[C,e.globalLoading.tables]])])])}const li=S(kt,[["render",ii],["__scopeId","data-v-46299fe7"]]);var ni=ve();const D=Le(ni);var B,P,ge;class ai{constructor(t,i=3500,a=2e3){j(this,P);j(this,B,"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:i,targetField:a,table:n,targetTable:l,targetFieldBackgroundRect:o})=>new Promise((m,_)=>{try{t=t||Y(this,B);const g=this.elementLayer.findOne(`#${n.id}`),s=this.elementLayer.findOne(`#${l.id}`),h=g.findOne(`#${i.name}`),d=s.findOne(`#${a.name}`);if(h.__lines&&h.__lines.length>0)for(const C of h.__lines){if(C.table===g&&C.targetTable===s&&C.field1===h&&C.field2===d)return _(new Error("请勿重复关联!"));if(C.table===s&&C.targetTable===g&&C.field1===d&&C.field2===h)return _(new Error("请勿重复关联!"))}const w=this.computeLinePoints({table:g,field1:h,targetTable:s,field2:d}),E=this.computeLineControlPoints({linePoints:w,table:g,targetTable:s});h.__lines=h.__lines||[],d.__lines=d.__lines||[];const T={lineType:t,table:g,field1:h,targetTable:s,field2:d,line:new D.Line({name:`field_line_${Math.round(Math.random()*1e4)}`,points:w,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})};h.__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=h.__lines.indexOf(T);C!==-1&&h.__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:i,targetField:a,table:n,targetTable:l})}),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(),m()}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=i,this.stageHeight=a,te(this,P,ge).call(this)}createBackground(){const t=new D.Layer;this.stage.add(t);const i=80,a=1;let n=(this.stage.width()-i*a*2)/(i+1);for(let l=0;l<i;l++)for(let o=0;o<i;o++){const m=new D.Circle({x:(n+a*2)*o+n,y:(n+a*2)*l+n,radius:a,fill:this.BACKGROUND_ITEM_COLOR,draggable:!0,zIndex:1});t.add(m)}}createTable(t,i,a,n=!1){const l=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:i,y:a,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});l.add(o);const m=new D.Circle({x:l.width()-15,y:-10,radius:5,fill:this.TABLE_BUTTON_BACKGROUND_COLOR,draggable:!1});m.on("click",()=>{this.events["table:delete"]&&this.events["table:delete"]({table:t,tableGroup:l})}),m.on("mouseover",()=>{m.fill(this.TABLE_BUTTON_HOVER_BACKGROUND_COLOR)}),m.on("mouseout",()=>{m.fill(this.TABLE_BUTTON_BACKGROUND_COLOR)}),l.add(m);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 h=t.fields[s],d=new D.Group({id:h.name,name:"field",x:0,y:_.height()+this.TABLE_FIELD_HEIGHT*s});let w=[0,0,0,0];s===t.fields.length-1&&(w=[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:w,cornerStrokeWidth:.5,cornerStroke:"#ccc"}),T=new D.Text({x:25,y:0,text:h.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",()=>{l.draggable(!1),this.stage.draggable(!1),this.isDragEnd=!1,this.currentDragField=h,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:h,targetFieldBackgroundRect:E}).then(()=>{try{this.events["line:created"]&&this.events["line:created"]({table:this.currentDragTable,field:this.currentDragField,targetTable:t,targetField:h})}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),l.add(d);const v=l.height()+this.TABLE_FIELD_HEIGHT;l.height(v),o.height(v)}return l.add(_),l.add(g),l.on("mouseleave",()=>{this.stage.container().style.cursor="default"}),l.on("mouseover",s=>{s.target instanceof D.Circle?this.stage.container().style.cursor="pointer":this.stage.container().style.cursor="move"}),l.on("dragmove",()=>{l.find(".field").forEach(h=>{if(h.__lines&&h.__lines.length>0)for(const d of h.__lines){const w=this.computeLinePoints(d);d.line.points(w);const E=this.computeLineControlPoints({linePoints:w,...d});d.control.position(E)}}),t.x=l.absolutePosition().x,t.y=l.absolutePosition().y}),l.on("dragend",()=>{this.events.change&&this.events.change(t)}),l.on("dblclick",s=>{this.events["table:dblclick"]&&this.events["table:dblclick"]({event:s,table:t,tableGroup:l})}),this.tables.push(l),this.elementLayer.add(l),this.redrawPreview(),n&&this.events.change&&this.events.change(),l}deleteTable(t){try{const i=this.elementLayer.findOne(`#${t.id}`);if(i==null){console.warn("删除表,但在设计器中找到表元素!",t);return}const a=i.find(".field");for(const n of a)if(!(!n.__lines||n.__lines.length===0)){for(const l of n.__lines)l.line.destroy(),l.control.destroy();n.__lines=[]}this.tables=this.tables.filter(n=>n!==i),i.destroy(),this.redrawPreview()}catch(i){console.error(i)}}lineType(t){if(t==null)return this.lineType;ee(this,B,t)}createPreview(t,i=200,a=150){this.previewStage=new D.Stage({container:t,width:i,height:a,scaleX:i/this.stageWidth,scaleY:a/this.stageHeight}),this.redrawPreview(),this.stage.on("dragmove",()=>{this.elementLayer.children.forEach(n=>{const l=this.cloneElementLayer.findOne("."+n.name());l instanceof D.Line?(l.points(n.points()),l.strokeWidth(2)):l.position(n.position())})})}initAutoSize(){this.stage.on("wheel",i=>{if(!i.evt.ctrlKey)return;i.evt.preventDefault();const a=this.elementLayer.scaleX(),n=this.stage.getPointerPosition(),l={x:(n.x-this.elementLayer.x())/a,y:(n.y-this.elementLayer.y())/a},o=i.evt.deltaY>0?a*1.05:a/1.05;if(o>3||o<.2)return;this.elementLayer.scale({x:o,y:o}),this.cloneElementLayer.scale({x:o,y:o});const m={x:n.x-l.x*o,y:n.y-l.y*o};this.elementLayer.position(m),this.cloneElementLayer.position(m)})}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:i,table:a,targetTable:n}){let l=a,o=a;a.absolutePosition().x>n.absolutePosition().x&&(l=n),a.absolutePosition().y>n.absolutePosition().y&&(o=n);let m=o.absolutePosition(),_=t,g=i;t.absolutePosition().x>i.absolutePosition().x&&(_=i,g=t);const s=_.absolutePosition(),h=g.absolutePosition(),d=h.x-s.x-this.TABLE_WIDTH,w=[0,s.y+15];d>=this.TABLE_MIN_DISTANCE?w[0]=s.x+this.TABLE_WIDTH:w[0]=s.x;let E=[...w],T=[...w],C=[...w],v=[...w];E=[s.x+this.TABLE_WIDTH+d/2,s.y+15],T=[...E],C=[...E],s.x+this.TABLE_WIDTH+this.TABLE_MIN_DISTANCE>h.x&&(E[0]=s.x-30,T[0]=E[0],T[1]=m.y-50),s.x+this.TABLE_WIDTH+this.TABLE_MIN_DISTANCE>h.x&&(C[0]=h.x+this.TABLE_WIDTH+30,C[1]=T[1]),v=[s.x+this.TABLE_WIDTH+d/2,h.y+15],s.x+this.TABLE_WIDTH+this.TABLE_MIN_DISTANCE>h.x&&(v[0]=h.x+this.TABLE_WIDTH+30);const R=[0,h.y+15];return s.x+this.TABLE_WIDTH+this.TABLE_MIN_DISTANCE>h.x?R[0]=h.x+this.TABLE_WIDTH:R[0]=h.x,R[0]>l.absolutePosition().x&&R[0]<l.absolutePosition().x+l.width()&&R[1]>l.absolutePosition().y&&R[1]<l.absolutePosition().y+l.height()&&(w[0]=s.x+this.TABLE_WIDTH,R[0]=h.x+this.TABLE_WIDTH,E[0]=h.x+this.TABLE_WIDTH+30,T[0]=h.x+this.TABLE_WIDTH+30),[...w,...E,...T,...C,...v,...R]}computeLineControlPoints({linePoints:t,table:i,targetTable:a}){const n=t[0];let l=i;i.absolutePosition().x>a.absolutePosition().x&&(l=a);let o=n>=l.absolutePosition().x+this.TABLE_WIDTH?20:-20;return{x:t[0]+o,y:t[1]}}on(t,i){this.events[t]=i}}B=new WeakMap,P=new WeakSet,ge=function(){this.stage=new D.Stage({container:this.stageContainer,width:this.stageWidth,height:this.stageHeight,draggable:!1}),this.redraw(),this.stage.on("click",t=>{this.events["stage:click"]&&this.events["stage:click"](t)}),this.stage.on("mousemove",()=>{if(this.isDragEnd||!this.currentDragTable||!this.currentDragField)return;const t=this.elementLayer.findOne(`#${this.currentDragTable.id}`);if(t==null)return;const i=t.findOne(`#${this.currentDragField.name}`);if(i==null)return;const a=this.stage.getPointerPosition();this.dashLine.zIndex(this.MAX_Z_INDEX),this.dashLine.opacity(1),this.dashLine.points