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.

267 lines
6.6 KiB

import Konva from "konva";
import {zx} from "@/api/zyjh";
import { VXETable } from 'vxe-table'
const baifang=function (option={}) {
const width=option.width,height=option.height,image=require('@/assets/gb.png')
const _width=width*0.25,_height=height*0.67
const x=width*0.30+30,y=300
const bg=function (){
const group=new Konva.Group({
x:x,
y:y,
width:_width,
height:_height
})
const imageObj = new Image();
imageObj.src = require('@/assets/sliao/personbg.png');
imageObj.onload = function () {
const shape = new Konva.Image({
x: 0,
y: 0,
width: _width,
height:_height,
image: this,
});
bgGroup.add(shape)
shape.zIndex(0)
}
return group
}
const container=function (){
return new Konva.Group({
x:0,
y:0,
width:_width,
height:_height
})
}
const bgGroup=bg();
const slGroup=container()
bgGroup.add(slGroup)
slGroup.zIndex(1)
const thatHeight=height
let currSllist=null
const gangban=function (index,item,slList){
const group=new Konva.Group({
x:0,
y:thatHeight-310-index*40,
// draggable:true
})
group.setAttr('index',index)
group.setAttr('item',item)
slGroup.add(group)
const {x}=group.absolutePosition()
group.dragBoundFunc(function (pos){
return {
x:x,
y:pos.y
}
})
let _index=0
let touchingFlag=false;
group.on('mousedown touchstart',function (evt){
const layer=this.parent.parent.parent
touchingFlag=true
const {x,y}=evt.evt
setTimeout(()=>{
const moving=this.isDragging()
if (!moving){
if (touchingFlag){
this.draggable(false)
const tmpGroup=this.clone()
tmpGroup.x(x-10)
tmpGroup.y(y-10)
layer.add(tmpGroup)
tmpGroup.draggable(true)
tmpGroup.dragBoundFunc(function (pos){
return{...pos}
})
tmpGroup.startDrag()
const that=this
tmpGroup.on('dragend',function (){
const {x:thisX,y:thisY}=this.absolutePosition()
for (const item of layer.children) {
if(item.attrs.id==='csd'){
const {x,y}=item.absolutePosition()
const worker=JSON.parse(window.localStorage.getItem('worker'))
if ((thisX>=x&&thisY>=y)&&!!worker){
const info=this.getAttr('item')
const zyjh=JSON.parse(window.localStorage.getItem('zyjh'))
if (!zyjh){
VXETable.modal.message({content: '请先选择待反馈的派工单', status: 'warning'})
this.remove()
that.visible(true)
return
}
zx({
field:'pwfkrq',
zxZtName:'PWFK',
list:[{
id:zyjh.id,
pwfkry: worker.userCode
}],
ycldwInfo:info
}).then(res=>{
if (res.success){
window.localStorage.removeItem('zyjh')
}
})
this.scaleX(0.7)
const image=this.find('Image')[0]
image.x(5)
image.y(800)
image.scaleX(0.90)
image.moveTo(item.children[0].children[0])
// this.moveTo(item.children[0].children[0])
image.zIndex(2)
image.setAttr('_ad','sdf')
this.remove()
that.remove()
}else{
this.remove()
that.visible(true)
}
}
}
})
this.visible(false)
}
}
},500)
})
group.on('mouseup touchend',function (){
touchingFlag=false
})
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(7)
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 = currSllist.splice(index-1, 1)[0];
currSllist.splice(_index-1, 0, element);
this.setAttr('index',_index)
_index=0
slGroup.destroyChildren()
handler(currSllist)
})
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:`${item.wph||''},${item.wpgg}`,
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:`${item.czbh},${item.pl},${item.fd}\n上料:${item.bfrq||''},切割:${item.qgjhrq||''}`,
align:'center',
verticalAlign:'middle',
})
group.add(concent)
return group
}
function handler(slList){
currSllist=slList
for (let i = 1; i <= slList.length; i++) {
const item=slList[i-1]
const _group=gangban(i,item,item.length,slList)
slGroup.add(_group)
}
}
return {
container,slGroup,handler,bgGroup
}
}
export default baifang