一、find方法 (返回符合条件的第一个元素 如果没有符合条件的 返回undefined) findIndex方法(返回符合条件的第一个元素位置 如果没有符合条件的返回 -1)
比如:
const modeler = this.$refs.refNode.modeler; const canvas = modeler.get('canvas') console.log("fillColor modeler=",modeler) modeler._definitions.rootElements[0].flowElements.forEach(n => { const completeTask = this.taskList.find(m => m.key === n.id)
要是满足条件的元素有多个,上面返回满足条件的第一个元素,所以即使满足条件有多个,也只返回第一个
二、filter方法 (返回 符合过滤条件的元素组成的新数组)
比如:
const modeler = this.$refs.refNode.modeler; const canvas = modeler.get('canvas') console.log("fillColor modeler=",modeler) modeler._definitions.rootElements[0].flowElements.forEach(n => { const completeTask = this.taskList.filter(m => m.key === n.id)
要是满足上面条件有多个元素,上面方法就返回满足条件的多个元素。
三、实际流程显示的bug修复
对于流程流转过程中,流程对某个节点可能又多次的通过与退回情况,所以就会存在满足一个节点的有多个任务处理情况,原先用find函数就只能返回一个元素,不符合实际情况,所以进行修改,改用filter 如下:
fillColor() { const modeler = this.$refs.refNode.modeler; const canvas = modeler.get('canvas') console.log("fillColor modeler=",modeler) modeler._definitions.rootElements[0].flowElements.forEach(n => { //const completeTask = this.taskList.find(m => m.key === n.id) const completeTask = this.taskList.filter(m => m.key === n.id) const todoTask = this.taskList.find(m => !m.completed) const endTask = this.taskList[this.taskList.length - 1] if (n.$type === 'bpmn:UserTask') { if (completeTask) { canvas.addMarker(n.id, completeTask[completeTask.length-1].completed ? 'highlight' : 'highlight-todo') //canvas.addMarker(n.id, completeTask.completed ? 'highlight' : 'highlight-todo') n.outgoing.forEach(nn => { const targetTask = this.taskList.find(m => m.key === nn.targetRef.id) if (targetTask) { if (todoTask && completeTask.key === todoTask.key && !todoTask.completed) { canvas.addMarker(nn.id, todoTask.completed ? 'highlight' : 'highlight-todo') canvas.addMarker(nn.targetRef.id, todoTask.completed ? 'highlight' : 'highlight-todo') } else { canvas.addMarker(nn.id, targetTask.completed ? 'highlight' : 'highlight-todo') canvas.addMarker(nn.targetRef.id, targetTask.completed ? 'highlight' : 'highlight-todo') } } }) } }
四、效果图如下: