import Konva from "konva"; const baifang=function (option={}) { const width=option.width,height=option.height,slList=option.dw,image=require('@/assets/gb.png') const _width=width*0.25,_height=height*0.67 const container=function (){ const x=width*0.30+30,y=300 const group=new Konva.Group({ x:x, y:y, width:_width, height:_height }) const rect=new Konva.Rect({ x:0, y:0, width:_width, height:_height, stroke:'black', strokeWidth:1, }) group.add(rect) return group } const slGroup=container() const thatHeight=height const gangban=function (index,str){ const group=new Konva.Group({ x:0, y:thatHeight-310-index*40, draggable:true }) group.setAttr('index',index) slGroup.add(group) const {x}=group.absolutePosition() group.dragBoundFunc(function (pos){ return { x:x, y:pos.y } }) let _index=0 group.on('dragstart',function (){ const {x,y}=this.absolutePosition() this.startPos={ x:x, y:y } }) group.on('dragmove',function (){ if(_index===0){ _index=this.getAttr('index') } this.zIndex(999) const {y:thisY}=this.absolutePosition() const dir=thisY-this.startPos.y>0?-40:40 const children=slGroup.children for (const child of children) { if (child===this){ return } const {y:thatY}=child.absolutePosition() const moveDir=child.getAttr('moveDir')||0 if (thisY>=thatY&&thisY<=thatY+40&&moveDir!==dir){ child.setAttr('moveDir',dir); _index+=dir>0?1:-1 child.move({ y:dir }) this.startPos={ x:x, y:thisY } } } }) group.on('dragend',function (){ const index=this.getAttr('index') const element = slList.splice(index-1, 1)[0]; slList.splice(_index-1, 0, element); this.setAttr('index',_index) _index=0 slGroup.destroyChildren() handler(slList) }) const indexRect=new Konva.Rect({ x:0, y:0, width:40, height:40, stroke:'black', strokeWidth:1, }) //group.add(indexRect) const indexText=new Konva.Text({ x:0, y:0, width:40, height:40, fill:'black', text:index, align:'center', verticalAlign:'middle', }) group.add(indexText) //层 规格,套料图 船号,上料日期,计划切割日期 const imageObj = new Image(); const imgSize=200 imageObj.src = image; imageObj.onload = function () { const shape = new Konva.Image({ x: 40, y: 0, width: imgSize, height:40, image: imageObj, }); group.add(shape) const gbText=new Konva.Text({ x: 40, y: 0, width: imgSize, height:40, fill:'black', text:str+',12*2830*13090', align:'center', verticalAlign:'middle', }) group.add(gbText) } const concent=new Konva.Text({ x: imgSize+60, y: 0, width: imgSize-20, height:40, fill:'black', text:'G175K-4,001,2302\n上料:2024/07/01,切割:2024/07/04', align:'center', verticalAlign:'middle', }) group.add(concent) return group } function handler(slList){ for (let i = 1; i <= slList.length; i++) { const item=slList[i-1] const _group=gangban(i,item,item.length) slGroup.add(_group) } } handler(slList) return { container,slGroup,handler } } export default baifang