|
|
|
@ -2,25 +2,25 @@ |
|
|
|
<section class="menu-box"> |
|
|
|
<el-table |
|
|
|
ref="table" |
|
|
|
:data="menus" |
|
|
|
:data="menusCpd" |
|
|
|
header-cell-class-name="head-row" |
|
|
|
border |
|
|
|
:height="tableHeight" |
|
|
|
style="width: 100%"> |
|
|
|
<el-table-column :label="'需求 ('+menus.length + ')'" class-name="menu-name" width="200"> |
|
|
|
<template slot-scope="scope"> |
|
|
|
<div class="menu">{{scope.row.name}}</div> |
|
|
|
<div class="menu">{{scope.row.menuName}}</div> |
|
|
|
</template> |
|
|
|
</el-table-column> |
|
|
|
<template v-for="(type, tt) in taskState"> |
|
|
|
<template v-for="(type, tt) in taskStateCpd"> |
|
|
|
<el-table-column :label="type.label + '('+ type.number + ')'" :key="tt" width="450"> |
|
|
|
<template slot-scope="scope"> |
|
|
|
<draggable |
|
|
|
:name="scope.row.menuId" |
|
|
|
:sort="false" |
|
|
|
@start="onStart" @end="onEnd" |
|
|
|
:move="onMove" |
|
|
|
:dicts="{group: scope.row.menuId}" |
|
|
|
@move="onMove" |
|
|
|
:options="{group: scope.row.menuId}" |
|
|
|
class="draggable" |
|
|
|
animation="300" |
|
|
|
scroll |
|
|
|
@ -32,7 +32,7 @@ |
|
|
|
<div class="drag-to-box">{{type.label}}</div> |
|
|
|
</template> --> |
|
|
|
<template |
|
|
|
v-if="tasks && tasks[scope.row.menuId][tt].length" |
|
|
|
v-if="tasks && tasksCpd[scope.row.menuId][tt].length" |
|
|
|
> |
|
|
|
<div |
|
|
|
:data-menu-id="scope.row.menuId" |
|
|
|
@ -40,7 +40,7 @@ |
|
|
|
:data-task-state="task.taskState" |
|
|
|
class="task" |
|
|
|
v-for="(task, t) in tasks[scope.row.menuId][tt]" |
|
|
|
:key="task.id" |
|
|
|
:key="task.id+t" |
|
|
|
> |
|
|
|
<span> |
|
|
|
{{task.sortLevel}} |
|
|
|
@ -77,13 +77,15 @@ export default { |
|
|
|
props: ["xmTasks", "tableHeight"], |
|
|
|
data() { |
|
|
|
return { |
|
|
|
|
|
|
|
taskState:[ |
|
|
|
{ label: "待领取", status: 0, number: 0 }, |
|
|
|
{ label: "已领取执行中", status: 1, number: 0 }, |
|
|
|
{ label: "已完工", status: 2, number: 0 }, |
|
|
|
{ label: "已结算", status: 3, number: 0 }, |
|
|
|
{ label: "待领取", status: "0", number: 0 }, |
|
|
|
{ label: "已领取执行中", status: "1", number: 0 }, |
|
|
|
{ label: "已完工", status: "2", number: 0 }, |
|
|
|
{ label: "已结算", status: "3", number: 0 }, |
|
|
|
], |
|
|
|
tasks:{}, |
|
|
|
menus:[], |
|
|
|
drag: { |
|
|
|
menuId: '', |
|
|
|
state: '', |
|
|
|
@ -91,38 +93,30 @@ export default { |
|
|
|
}; |
|
|
|
}, |
|
|
|
components: { draggable }, |
|
|
|
watch: {}, |
|
|
|
computed: { |
|
|
|
menus() { |
|
|
|
let xmTasks = JSON.parse(JSON.stringify(this.xmTasks || [])); |
|
|
|
xmTasks=xmTasks.filter(i=>i.ntype=='0') |
|
|
|
|
|
|
|
let menus = [], menuIds = {}, tasks = {}; |
|
|
|
this.taskState.map(d => { |
|
|
|
d.number = 0; |
|
|
|
return d; |
|
|
|
}) |
|
|
|
xmTasks.forEach((d, i) => { |
|
|
|
if (!menus.length || !menuIds[d.menuId]) { |
|
|
|
menus.push(d); |
|
|
|
menuIds[d.menuId] = true; |
|
|
|
} |
|
|
|
if (!tasks[d.menuId]) { |
|
|
|
tasks[d.menuId] = [[], [], [], []]; |
|
|
|
watch: { |
|
|
|
xmTasks(){ |
|
|
|
this.initData(); |
|
|
|
} |
|
|
|
tasks[d.menuId][parseInt(d.taskState)].push(d); |
|
|
|
this.taskState[parseInt(d.taskState)].number += 1; |
|
|
|
}); |
|
|
|
this.tasks = tasks; |
|
|
|
return menus; |
|
|
|
}, |
|
|
|
computed: { |
|
|
|
menusCpd() { |
|
|
|
return this.menus; |
|
|
|
}, |
|
|
|
tasksCpd(){ |
|
|
|
return this.tasks; |
|
|
|
}, |
|
|
|
taskStateCpd(){ |
|
|
|
return this.taskState; |
|
|
|
} |
|
|
|
|
|
|
|
}, |
|
|
|
methods: { |
|
|
|
onMove(e) { |
|
|
|
console.log('onMove--e==', e); |
|
|
|
debugger; |
|
|
|
let targetEl = { ...e.dragged.dataset }; |
|
|
|
let toEl = { ...e.to.dataset }; |
|
|
|
if (targetEl.menuId === toEl.menuId && targetEl.taskState !== toEl.taskState) { |
|
|
|
if (targetEl.menuId === toEl.menuId && targetEl.taskState != toEl.taskState) { |
|
|
|
console.log('onMove--true'); |
|
|
|
return true; |
|
|
|
} |
|
|
|
@ -141,11 +135,22 @@ export default { |
|
|
|
// targetEl:拖拽的任务数据; toEl拖拽后的位置. |
|
|
|
let targetEl = { ...e.item.dataset }; |
|
|
|
let toEl = { ...e.to.dataset }; |
|
|
|
if (targetEl.menuId === toEl.menuId && targetEl.taskState !== toEl.taskState) { |
|
|
|
if (targetEl.menuId === toEl.menuId && targetEl.taskState != toEl.taskState) { |
|
|
|
let task = this.xmTasks.find(d => d.id === targetEl.taskId); |
|
|
|
let taskIndex = this.xmTasks.findIndex(d => d.id === targetEl.taskId); |
|
|
|
const params = { ...task, taskState: toEl.taskState }; |
|
|
|
editXmTask(params).then(res => { |
|
|
|
//this.$emit('submit'); |
|
|
|
var tips = res.data.tips; |
|
|
|
if(tips.isOk){ |
|
|
|
this.taskState[parseInt(task.taskState)].number=this.taskState[parseInt(task.taskState)].number-1 |
|
|
|
this.taskState[parseInt(params.taskState)].number=this.taskState[parseInt(params.taskState)].number+1 |
|
|
|
task.taskState=params.taskState |
|
|
|
this.$set(this.xmTasks,taskIndex,task) |
|
|
|
}else{ |
|
|
|
this.$notify({showClose:true,message:tips.msg,type:'error'}) |
|
|
|
} |
|
|
|
return res.data.tips.isOk |
|
|
|
}) |
|
|
|
} else { |
|
|
|
return false |
|
|
|
@ -186,9 +191,37 @@ export default { |
|
|
|
respons.showMsg="去设置" |
|
|
|
} |
|
|
|
return respons |
|
|
|
}, |
|
|
|
initData(){ |
|
|
|
let xmTasks = JSON.parse(JSON.stringify(this.xmTasks || [])); |
|
|
|
xmTasks=xmTasks.filter(i=>i.ntype=='0') |
|
|
|
|
|
|
|
let menus = [], menuIds = {}, tasks = {}; |
|
|
|
this.taskState.map(d => { |
|
|
|
d.number = 0; |
|
|
|
return d; |
|
|
|
}) |
|
|
|
xmTasks.forEach((d, i) => { |
|
|
|
if(!d.menuId){ |
|
|
|
d.menuId="noMenuId" |
|
|
|
d.menuName="未关联需求的任务" |
|
|
|
} |
|
|
|
if (!menus.length || !menuIds[d.menuId]) { |
|
|
|
menus.push(d); |
|
|
|
menuIds[d.menuId] = true; |
|
|
|
} |
|
|
|
if (!tasks[d.menuId]) { |
|
|
|
tasks[d.menuId] = [[], [], [], []]; |
|
|
|
} |
|
|
|
tasks[d.menuId][parseInt(d.taskState)].push(d); |
|
|
|
this.taskState[parseInt(d.taskState)].number += 1; |
|
|
|
}); |
|
|
|
this.tasks = tasks; |
|
|
|
this.menus=menus; |
|
|
|
} |
|
|
|
}, |
|
|
|
mounted(){ |
|
|
|
this.initData(); |
|
|
|
} |
|
|
|
}; |
|
|
|
</script> |
|
|
|
|