echart流程图-工序及状态

echart流程图-工序及状态参考了一下资料 流程图可以实现当前在那个工序流程图 还需求展示当前状态 可以用色来标记 还有返工的流程在里面 默认是弧线

先看效果图
在这里插入图片描述
参考了一下资料,流程图可以实现当前在那个工序流程图,还需求展示当前状态(可以用色来标记),还有返工的流程在里面(默认是弧线)。希望能够帮助大家,直接上代码:

initChart() { 
    this.$nextTick(() => { 
    this.flowItemChart = echarts.init(document.getElementById('ProcessflowItemChart')) this.setChart() }) }, async setChart(){ 
    let apis=[ { 
   targetName:null,id:"1",Uri:"高温静置24H",Status:"0",target:null}, { 
   targetName:null,id:"2",Uri:"高温负压化成(4H)",Status:"0",target:null}, ] let xn = 6; let ynj = [100, 300, 500, 700, 900, 1100] let yno = [1100, 900, 700, 500, 300, 100]; //数据换行处理 apis.forEach( item =>{ 
    if(item.Uri.indexOf('/') != -1){ 
    item.Uri= item.Uri.replace(/\//g,'\n') } }) //去重复ID let obj = { 
   }; apis = apis.reduce(function (item, next) { 
    obj[next.id] ? '' : obj[next.id] = true && item.push(next); return item; }, []); let data = apis.map((el, ei) => { 
    let rn = Math.floor(ei / xn); let statusColors='#1890ff'; //0当前 :蓝色- 1经过: 绿色-2未经过:灰色 if(el.Status == 1){ 
    statusColors='#00b96b' }else if(el.Status == 2){ 
    statusColors='#C0C4CC' }else{ 
    statusColors='#1890ff' } return { 
    id:el.id, name: el.Uri, draggable: false, //value:[100,100], //symbol: el.bol, // 节点显示形状 value: (rn + 1) % 2 !== 0 ? [ynj[ei % xn], 150 * (rn + 1)] // 奇数行 : [yno[ei % xn], 150 * (rn + 1)], // 偶数行 //symbolSize: el.symbolSize, //symbolOffset:el.symbolOffset, itemStyle: { 
    normal: { 
    borderColor: "#FFFFFF", borderWidth: 1, shadowBlur: 1, shadowColor: statusColors, color: statusColors, }, }, }; }); let links = apis.map((el, ei) => { 
    if (ei + 1 < apis.length) { 
    return { 
    source: el.id, value:"", target: apis[ei + 1].id, }; } else{ 
    return { 
   }; } }); //增加NG复测 apis.map((el, ei) =>{ 
    if (el.targetName){ 
    links.push({ 
    source: el.id, target: el.target, islink: true, name: el.targetName, lineStyle: { 
    normal: { 
    curveness: 0.2, type: "dashed", }, }, label: { 
    normal: { 
    fontSize: 14, formatter: function (params, ticket, callback) { 
    params.name = params.data.name; return params.name; }, show: true, }, }, }) } }) this.chartoptios={ 
    grid: [ { 
    left:10, top:10, width: "auto", height: "auto", tooltip: { 
    trigger: "item", formatter: "{a}", }, }, ], tooltip: { 
    trigger: "axis", }, xAxis: [ { 
    gridIndex: 0, type: "value", show: false }, { 
    gridIndex: 0, type: "value", show: false }, ], yAxis: [ { 
    gridIndex: 0, type: "category", axisTick: { 
    show: false }, axisLine: { 
    show: false }, }, { 
    gridIndex: 0, show: false, type: "value", inverse: true, max: 600 }, ], axisPointer: { 
    label: { 
    backgroundColor: "#777", }, }, //数据更新动画的时长。 animationDurationUpdate: 1500, //数据更新动画的缓动效果。 animationEasingUpdate: "quinticInOut", series: [ { 
    type: "graph", //layout: "none", coordinateSystem: "cartesian2d", // 使用二维的直角坐标系 legendHoverLink: false, hoverAnimation: true, nodeScaleRatio: false, symbol: "rect", // 节点显示形状 symbolOffset: [0, 0], symbolSize: 95, // 节点大小 edgeSymbol: ["none", "arrow"], // 线两边的标记 edgeSymbolSize: [0, 8], // 标记大小 edgeLabel: { 
    show: false, normal: { 
    show: true, position: "middle", textStyle: { 
    fontSize: 12 }, formatter: "{c}", }, }, focusNodeAdjacency: true, // 鼠标移到节点上突出显示节点以及节点的边和邻接节点 roam: false, // 关闭鼠标缩放 itemStyle: { 
    normal: { 
    label: { 
    show: true, textStyle: { 
    color: "#fff", fontSize: 12, }, }, nodeStyle: { 
    brushType: "both", borderColor: "rgba(255,215,0,0.4)", borderWidth: 1, }, }, }, lineStyle: { 
    normal: { 
    width: 1, shadowColor: "none", color: "#000000", }, }, tooltip: { 
    formatter: "{b}", }, xAxisIndex: 1, yAxisIndex: 1, zlevel: 10, data: data, links: links, }, ], } this.flowItemChart.setOption(this.chartoptios,true) }, 

图中返工的连接线的版本需要写一点位计算方法,这部分比较复杂。有4个位置点连接线,可以看一下相关文稿。
如下:

<template> <div v-loading="cLoading" id="ProcessflowItemChart" class="ProcessflowItemChart"></div> </template> <script> import echarts from 'echarts' export default { 
    data() { 
    return { 
    flowItemChart:null, cLoading:false, }; }, mounted() { 
    this.$nextTick(() => { 
    this.initChart() }) }, beforeDestroy() { 
    if (!this.flowItemChart) { 
    return; } this.flowItemChart.dispose(); this.flowItemChart = null; }, methods: { 
    //连接点 getTdata(data,target ){ 
    let obj={ 
   } data.map(item=>{ 
    if(item.uid ==target ){ 
    obj = item } }) return obj }, //查起点 getIdData(sarr,earr){ 
    let s=[] earr.map(item=>{ 
    let obj2={ 
   } sarr.map(jtem=>{ 
    if(item.eid == jtem.uid){ 
    obj2.name=item.name+'2' obj2.startName=jtem.name obj2.targetName=item.targetName obj2.sid=jtem.uid obj2.symbolSize=0 obj2.x=jtem.x obj2.y=jtem.y+60 s.push(obj2) } }) }) return s }, //查终点 getENDlist(arr){ 
    let e=[] arr.map(item=>{ 
    let obj={ 
   } if(item.target && item.target != item.uid){ 
    let rowData=this.getTdata(arr,item.target) //console.log(rowData,'rowData') if(item.y == rowData.y){ 
    obj.name=item.name+'1' obj.x=item.x obj.y=item.y + 60 obj.symbolSize=0 obj.eid=item.target obj.targetName=item.targetName e.push(obj) }else{ 
    obj.name=item.name+'1' obj.x=item.x obj.y=item.y - 60 obj.symbolSize=0 obj.eid=item.target obj.targetName=item.targetName e.push(obj) } } }) return e }, dataFormat(arr){ 
    let datalist=arr //数据换行处理 datalist.forEach( item =>{ 
    if(item.Uri.indexOf('/') != -1){ 
    item.Uri= item.Uri.replace(/\//g,'\n') } }) //去重 // datalist = datalist.reduce(function (item, next) { 
    // let obj = {}; // obj[next.name] ? '' : obj[next.name] = true && item.push(next); // return item; // }, []); return datalist }, //增加坐标 Addw(apis){ 
    let datalist=[] let xn = 6; let ynj = [200, 400, 600, 800, 1000, 1200] let yno = [ 1200, 1000, 800, 600, 400, 200]; datalist=apis.map((el, ei) => { 
    let rn = Math.floor(ei / xn); let statusColors='#1890ff'; //0当前 :蓝色- 1经过: 绿色-2未经过(默认值):灰色 if(el.Status == 1){ 
    statusColors='#00b96b' }else if(el.Status == 2){ 
    statusColors='#C0C4CC' }else{ 
    statusColors='#1890ff' } return { 
    uid:el.id, name: el.Uri, //draggable: false, //fixed: true, target:el.target, targetName:el.targetName, //symbol: el.bol, // 节点显示形状 x:(rn + 1) % 2 !== 0 ?ynj[ei % xn]:yno[ei % xn], y:150 * (rn + 1), //symbolSize: el.symbolSize, itemStyle: { 
    //color: statusColors, normal: { 
    borderColor: "#FFFFFF", borderWidth: 1, shadowBlur: 5, shadowColor: statusColors, color: statusColors, }, }, }; }); return datalist }, async setChart(){ 
    let apis=[ { 
   targetName:null,id:"1",Uri:"高温静置24H",Status:"0",target:null}, { 
   targetName:null,id:"2",Uri:"高温负压化成(4H)",Status:"0",target:null}, ] this.cLoading=true let gid='' if(this.$route.query.Id == '' || !this.$route.query.Id){ 
    //console.log(this.listQuery.CraftsRoute_GuID,'id') gid=this.listQuery.CraftsRoute_GuID }else{ 
    gid=this.$route.query.Id } let data = this.Addw(apis) let links = data.map((el, ei) => { 
    if (ei + 1 < data.length) { 
    return { 
    source: el.name, value:"", target: data[ei + 1].name, }; } else{ 
    return { 
   }; } }); //增加NG复测 let endList=[]; let startList=[]; endList=this.getENDlist(data); startList=this.getIdData(data,endList) //console.log(startList,'startList',endList) data=[...data,...endList,...startList] //data增加2个位- symbolSize: 0,  //复测增加2个点位-源:目标 //links增加4个位 - symbol: "none", data.map(item =>{ 
    let linkObj1 ={ 
    source: '', target: '', islink: true, name: '', lineStyle: { 
    normal: { 
    curveness: 0, type: "dotted", }, }, label: { 
    normal: { 
    fontSize: 14, formatter: function (params, ticket, callback) { 
    params.name = params.data.name; return params.name; }, show: true, }, }, } let linkObj2 ={ 
    source: '', target: '', islink: true, name: '', lineStyle: { 
    normal: { 
    curveness: 0, type: "dotted", }, }, label: { 
    normal: { 
    fontSize: 14, formatter: function (params, ticket, callback) { 
    params.name = params.data.name; return params.name; }, show: true, }, }, } let linkObj3 ={ 
    source: '', target: '', islink: true, name: '', lineStyle: { 
    normal: { 
    curveness: 0, type: "dotted", }, }, label: { 
    normal: { 
    fontSize: 14, formatter: function (params, ticket, callback) { 
    params.name = params.data.name; return params.name; }, show: true, }, }, } if (item.targetName && item.target != item.uid){ 
    // console.log(item,'linksitem') //s1-s2-t2-t1 linkObj1.source=item.name linkObj1.target=item.name+'1' linkObj1.symbol="none" links.push(linkObj1) linkObj2.source=item.name+'1' linkObj2.target=item.name+'12' linkObj2.name=item.targetName; linkObj2.symbol="none" links.push(linkObj2) } if(item.startName){ 
    //console.log(item,'linksitem') linkObj3.source=item.name linkObj3.target=item.startName links.push(linkObj3) } }) this.chartoptios={ 
    grid: [ { 
    left:10, top:10, width: "auto", height: "auto", tooltip: { 
    trigger: "item", formatter: "{a}", }, }, ], tooltip: { 
    trigger: "axis", }, xAxis: [ { 
    gridIndex: 0, type: "value", show: false }, { 
    gridIndex: 0, type: "value", show: false }, ], yAxis: [ { 
    gridIndex: 0, type: "category", axisTick: { 
    show: false }, axisLine: { 
    show: false }, }, { 
    gridIndex: 0, show: false, type: "value", inverse: true, max: 600 }, ], axisPointer: { 
    label: { 
    backgroundColor: "#777", }, }, //数据更新动画的时长。 animationDurationUpdate: 1500, //数据更新动画的缓动效果。 animationEasingUpdate: "quinticInOut", series: [ { 
    type: "graph", //layout: "none", // coordinateSystem: "cartesian2d", // 使用二维的直角坐标系 // legendHoverLink: false, // hoverAnimation: true, // nodeScaleRatio: false, symbol: "rect", // 节点显示形状 symbolOffset: [0, 0], symbolSize: 95, // 节点大小 edgeSymbol: ["none", "arrow"], // 线两边的标记 edgeSymbolSize: [0, 8], // 标记大小 edgeLabel: { 
    show: false, normal: { 
    show: true, position: "middle", textStyle: { 
    fontSize: 12 }, formatter: "{c}", }, }, focusNodeAdjacency: true, // 鼠标移到节点上突出显示节点以及节点的边和邻接节点 roam: false, // 关闭鼠标缩放 itemStyle: { 
    normal: { 
    label: { 
    show: true, textStyle: { 
    color: "#fff", fontSize: 12, }, }, nodeStyle: { 
    brushType: "both", borderColor: "rgba(255,215,0,0.4)", borderWidth: 1, }, }, }, lineStyle: { 
    normal: { 
    width: 1, shadowColor: "none", color: "#000000", }, }, tooltip: { 
    formatter: "{b}", }, xAxisIndex: 1, yAxisIndex: 1, zlevel: 10, data: data, links: links, }, ], } this.flowItemChart.setOption(this.chartoptios,true) }, } } </script> 
今天的文章 echart流程图-工序及状态分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2025-01-05 08:57
下一篇 2025-01-05 08:51

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/102603.html