echarts-关系图(自己指向自己)
效果图如下
代码如下
var res = {
MSG: 'SUCCESS',
RSP: {
ATTACH: null,
DATA: {
locus: [
{
stop: 587000,
from: '提单人汗克孜.色依提',
to: '新疆IT支撑团队思特奇维护'
},
{
stop: 192000,
from: '新疆IT支撑团队思特奇维护',
to: '新疆IT支撑团队思特奇维护'
},
{
stop: 192000,
from: '新疆IT支撑团队汗克孜.色依提',
to: '新疆IT支撑团队汗克孜.色依提'
},
{
stop: 80149000,
from: '新疆IT支撑团队思特奇维护',
to: '新疆IT支撑团队汗克孜.色依提'
}
]
},
RSP_CODE: '200',
RSP_DESC: 'SUCCESS'
},
STATUS: '0000',
TXID: ''
};
let data = res.RSP.DATA.locus;
let arr = [];
let cons = 0;
let cf = [];
let cfIndex = 0;
for (let i = 0; i < data.length; i++) {
if (data[i].from == data[i].to) {
cf.push({ name: strs(data[i].from), index: i });
data[i].to = (data[i].to + ' ');
}
arr.push({
name: strs(data[i].from),
value: [0, 0]
});
arr.push({
name: strs(data[i].to),
value: [0, 0]
});
}
console.log(data);
function shiftTimeStamp(time) {
function f_m_dispose(min, sec) {
if (min < 10 && sec < 10) {
return '0' + min + ' mins ' + '0' + sec + ' s ';
} else if (min < 10 && sec >= 10) {
return '0' + min + ' mins ' + sec + ' s ';
} else if (min >= 10 && sec < 10) {
return min + ' mins ' + '0' + sec + ' s ';
} else {
return min + ' mins ' + sec + ' s ';
}
}
let hour = Number.parseInt(time / 3600);
let min = Number.parseInt((time - hour * 3600) / 60);
let sec = time - hour * 3600 - min * 60;
if (!hour) {
return f_m_dispose(min, sec);
} else {
if (!min) {
return sec < 10
? hour + ' h ' + '00' + ' mins 0' + sec + ' s '
: hour + ' h ' + '00' + ' mins ' + sec + ' s ';
} else {
return hour + ' h ' + f_m_dispose(min, sec);
}
}
}
var obj = {};
let datas = arr.reduce(function (item, next) {
obj[next.name] ? '' : (obj[next.name] = true && item.push(next));
return item;
}, []);
for (let i = 0; i < datas.length; i++) {
cons += 100;
datas[i].value = [cons, 0];
}
function strs(value) {
var ret = '';
var maxLength = 5;
var valLength = value.length;
var rowN = Math.ceil(valLength / maxLength);
if (rowN > 1) {
for (var i = 0; i < rowN; i++) {
var temp = '';
var start = i * maxLength;
var end = start + maxLength;
temp = value.substring(start, end) + '\n';
ret += temp;
}
return ret;
} else {
return value;
}
}
let LinksData = [];
for (let i = 0; i < data.length; i++) {
LinksData.push({
stop: shiftTimeStamp(data[i].stop / 1000),
source: strs(data[i].from),
target: strs(data[i].to),
lineStyle: {
normal: {
curveness: 0.2
}
}
});
}
option = {
tooltip: {
formatter: function (params) {
if (params.dataType == 'edge') {
let tip = '';
tip = params.name + '<br>' + '停留时间: ' + params.data.stop;
return tip;
}
}
},
grid: {
top: 120,
bottom: 120
},
yAxis: [
{
type: 'category',
boundaryGap: false,
show: false
}
],
xAxis: {
type: 'category',
show: false,
data: []
},
series: [
{
type: 'graph',
layout: 'none',
coordinateSystem: 'cartesian2d',
symbolKeepAspect: false,
symbolSize: 70,
roam: true,
symbol: 'roundRect',
label: {
normal: {
show: true
}
},
edgeSymbol: ['circle', 'arrow'],
edgeSymbolSize: [4, 15],
data: datas,
links: LinksData,
lineStyle: {
normal: {
color: '#2f4554'
}
}
}
]
};