You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
219 lines
4.7 KiB
219 lines
4.7 KiB
import Konva from "konva";
|
|
import {daoduo} from "@/api/zyjh";
|
|
|
|
const baifang=function (option={}) {
|
|
const width=option.width,height=option.height,slList=option.dw,image=require('@/assets/gb.png')
|
|
const _width=width*0.4-50,_height=height*0.81
|
|
const container=function (){
|
|
const x=width*0.6+40,y=190
|
|
|
|
const group=new Konva.Group({
|
|
x:x,
|
|
y:y,
|
|
width:_width,
|
|
height:_height
|
|
})
|
|
|
|
// const rect=createRect(x,y)
|
|
// group.add(rect)
|
|
|
|
return group
|
|
}
|
|
|
|
const createRect=function (){
|
|
const rect=new Konva.Rect({
|
|
x:0,
|
|
y:0,
|
|
width:_width,
|
|
height:_height,
|
|
stroke:'black',
|
|
strokeWidth:1,
|
|
})
|
|
return rect
|
|
}
|
|
|
|
let slGroup=container()
|
|
|
|
const thatHeight=height
|
|
const gangban=function (index,item){
|
|
const group=new Konva.Group({
|
|
x:0,
|
|
y:thatHeight-260-index*40,
|
|
draggable:true
|
|
})
|
|
|
|
group.setAttr('item',item)
|
|
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
|
|
}
|
|
})
|
|
const movedList=[]
|
|
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
|
|
})
|
|
const movedIndex=movedList.indexOf(child)
|
|
if (movedIndex===-1){
|
|
movedList.push(child)
|
|
}else {
|
|
slList.splice(movedIndex, 1);
|
|
movedList.push(child)
|
|
}
|
|
this.startPos={
|
|
x:x,
|
|
y:thisY
|
|
}
|
|
}
|
|
}
|
|
})
|
|
|
|
group.on('dragend',function (){
|
|
const index=this.getAttr('index')
|
|
const item=this.getAttr('item')
|
|
const mList=[]
|
|
for (const it of movedList) {
|
|
mList.push(it.getAttr('item'))
|
|
}
|
|
console.log(mList)
|
|
const data={
|
|
id:item.id,
|
|
lastCeng:item.ceng,
|
|
lastDuo:item.dwId,
|
|
ceng:_index,
|
|
duo:item.dwId,
|
|
movedList:mList
|
|
}
|
|
const element = slList.splice(index-1, 1)[0];
|
|
slList.splice(_index-1, 0, element);
|
|
this.setAttr('index',_index)
|
|
_index=0
|
|
handler(slList)
|
|
// daoduo(data).then(res=>{
|
|
// if (res.success){
|
|
// const element = slList.splice(index-1, 1)[0];
|
|
// slList.splice(_index-1, 0, element);
|
|
// this.setAttr('index',_index)
|
|
// _index=0
|
|
// handler(slList)
|
|
// }else {
|
|
//
|
|
// }
|
|
// })
|
|
})
|
|
|
|
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: 60,
|
|
y: 0,
|
|
width: imgSize,
|
|
height:40,
|
|
image: imageObj,
|
|
});
|
|
group.add(shape)
|
|
const gbText=new Konva.Text({
|
|
x: 60,
|
|
y: 0,
|
|
width: imgSize,
|
|
height:40,
|
|
fill:'black',
|
|
text:`${item.wph||''},${item.wpgg}`,
|
|
align:'center',
|
|
verticalAlign:'middle',
|
|
})
|
|
group.add(gbText)
|
|
}
|
|
|
|
const concent=new Konva.Text({
|
|
x: imgSize+60,
|
|
y: 0,
|
|
width: imgSize+40,
|
|
height:40,
|
|
fill:'black',
|
|
text:`${item.czbh},${item.pl},${item.fd}\n上料:${item.bfrq||''},切割:${item.qgjhrq||''}`,
|
|
align:'center',
|
|
verticalAlign:'middle',
|
|
})
|
|
group.add(concent)
|
|
|
|
}
|
|
|
|
function handler(slList){
|
|
slGroup.destroyChildren()
|
|
const rect=createRect()
|
|
slGroup.add(rect)
|
|
for (let i = 1; i <= slList.length; i++) {
|
|
const item=slList[i-1]
|
|
gangban(i,item)
|
|
}
|
|
}
|
|
|
|
handler(slList)
|
|
|
|
return {
|
|
container,slGroup,handler
|
|
}
|
|
}
|
|
|
|
export default baifang
|