AnalysisSystemForRadionucli.../src/utils/chartHelper.js

118 lines
2.6 KiB
JavaScript

/**
* 根据位置获取这个点在图表的哪个轴线上
* @param offsetX
* @param offsetY
*/
export function getXAxisAndYAxisByPosition(chart, offsetX, offsetY, seriesIndex = 0) {
const pointInPixel = [offsetX, offsetY]
if (
chart.containPixel(
{
seriesIndex: 0
},
pointInPixel
)
) {
const [xAxis, yAxis] = chart.convertFromPixel({ seriesIndex }, pointInPixel)
return [xAxis, yAxis]
}
return null
}
/**
* 将图表导出为图片
* @param {import("echarts").ECharts} chartInstance
* @param {'png' | 'jpeg' | 'svg'} type
*/
export function exportEchartImg(chartInstance, type = 'png', backgroundColor = '#022024') {
const dataURL = chartInstance.getDataURL({
type,
pixelRatio: 2,
backgroundColor
});
const link = document.createElement('a')
link.style.display = 'none'
link.href = dataURL
link.setAttribute('download', 'export.png')
document.body.appendChild(link)
link.click()
document.body.removeChild(link) //下载完成移除元素
}
/**
* 按份数分割轴线
* @param {Number} max
* @param {Number} min
* @param {Number} cnt
* @param {Number} maxBoundaryGap
*/
export function splitAxis(max, min, cnt, maxBoundaryGap = 1.1) {
const _min = Math.floor(min)
const interval = Math.ceil((Math.ceil(max * maxBoundaryGap) - _min) / cnt)
const _max = _min + interval * cnt
return {
min: _min,
interval,
max: _max
}
}
/**
* 构建线形series
* @param {*} name
* @param {*} data
* @param {*} color
* @param {*} extra
* @returns
*/
export function buildLineSeries(name, data, color, extra = {}) {
return {
name,
type: 'line',
data,
itemStyle: {
color
},
lineStyle: {
width: 1
},
symbol: 'none',
symbolSize: 1,
emphasis: {
disabled: true
},
animation: false,
...extra
}
}
// 根据name查找series
export function findSeriesByName(series, seriesName) {
return series.find(item => item.name == seriesName)
}
/**
* 限定数字在一定范围
* @param {Number} min
* @param {Number} max
* @returns {(num: number) => number }
*/
export function rangeNumber(min, max) {
return num => {
return num > max ? max : num < min ? min : num
}
}
/**
* 获取图表某条轴线的最大值
* @param {import("echarts").ECharts} chartInstance
* @param {'xAxis' | 'yAxis'} axis
* @returns
*/
export function getAxisMax(chartInstance, axis) {
return chartInstance.getModel().getComponent(axis).axis.scale._extent[1]
}