From 5f52d35031346d46fe63bb59c0212186691a4257 Mon Sep 17 00:00:00 2001 From: song Date: Thu, 18 Nov 2021 15:23:57 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=AE=8C=E5=96=84=E9=9B=B7=E8=BE=BE?= =?UTF-8?q?=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintignore | 1 + CHANGELOG.md | 3 +- src/common/u-charts.min.js | 3663 +++++++++++++++++ src/components/Evaluated/EvaluatedNLCP.vue | 87 +- .../EvaluationChart/EvaluationChart.vue | 65 - src/components/UCharts/UCharts.vue | 130 + 6 files changed, 3868 insertions(+), 81 deletions(-) create mode 100644 src/common/u-charts.min.js delete mode 100644 src/components/EvaluationChart/EvaluationChart.vue create mode 100644 src/components/UCharts/UCharts.vue diff --git a/.eslintignore b/.eslintignore index 5c40e6a..3117ba1 100644 --- a/.eslintignore +++ b/.eslintignore @@ -9,5 +9,6 @@ postcss.config.js .eslint.js vue.config.js src/common/styles/index.css +src/common/u-charts.min.js src/pages.json src/manifest.json diff --git a/CHANGELOG.md b/CHANGELOG.md index f5e9628..6747d32 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# 0.1.0 (2021-11-17) +# 0.1.0 (2021-11-18) ### 🌟 新功能 范围|描述|commitId @@ -143,6 +143,7 @@ - | 切换到默认项目角色没有激活状态的bug | [438d448](https://dd.tall.wiki/gitea/binbin0314/yanyuan_js/commits/438d448) - | 切换日历时查询小红点 | [7091789](https://dd.tall.wiki/gitea/binbin0314/yanyuan_js/commits/7091789) - | 初始展示角色修改 | [2ac4053](https://dd.tall.wiki/gitea/binbin0314/yanyuan_js/commits/2ac4053) + - | 卸载stylus | [610b465](https://dd.tall.wiki/gitea/binbin0314/yanyuan_js/commits/610b465) - | 定期任务key值修改 | [c6688db](https://dd.tall.wiki/gitea/binbin0314/yanyuan_js/commits/c6688db) - | 定期任务接口 | [aa4981c](https://dd.tall.wiki/gitea/binbin0314/yanyuan_js/commits/aa4981c) - | 定期任务插件 | [92b3254](https://dd.tall.wiki/gitea/binbin0314/yanyuan_js/commits/92b3254) diff --git a/src/common/u-charts.min.js b/src/common/u-charts.min.js new file mode 100644 index 0000000..0599651 --- /dev/null +++ b/src/common/u-charts.min.js @@ -0,0 +1,3663 @@ +'use strict'; +var config = { + yAxisWidth: 15, + yAxisSplit: 5, + xAxisHeight: 22, + xAxisLineHeight: 22, + legendHeight: 15, + yAxisTitleWidth: 15, + padding: [10, 10, 10, 10], + pixelRatio: 1, + rotate: !1, + columePadding: 3, + fontSize: 13, + dataPointShape: ['circle', 'circle', 'circle', 'circle'], + colors: ['#1890ff', '#2fc25b', '#facc14', '#f04864', '#8543e0', '#90ed7d'], + pieChartLinePadding: 15, + pieChartTextPadding: 5, + xAxisTextPadding: 3, + titleColor: '#333333', + titleFontSize: 20, + subtitleColor: '#999999', + subtitleFontSize: 15, + toolTipPadding: 3, + toolTipBackground: '#000000', + toolTipOpacity: 0.7, + toolTipLineHeight: 20, + radarLabelTextMargin: 15, + gaugeLabelTextMargin: 15, +}; +let assign = function (e, ...t) { + function i(e, t) { + for (let a in t) e[a] = e[a] && '[object Object]' === e[a].toString() ? i(e[a], t[a]) : (e[a] = t[a]); + return e; + } + if (null == e) throw new TypeError('Cannot convert undefined or null to object'); + return !t || 0 >= t.length + ? e + : (t.forEach(t => { + e = i(e, t); + }), + e); +}; +var util = { + toFixed: function (e, t) { + return (t = t || 2), this.isFloat(e) && (e = e.toFixed(t)), e; + }, + isFloat: function (e) { + return 0 != e % 1; + }, + approximatelyEqual: function (e, t) { + return 1e-10 > Math.abs(e - t); + }, + isSameSign: function (e, t) { + var i = Math.abs; + return (i(e) === e && i(t) === t) || (i(e) !== e && i(t) !== t); + }, + isSameXCoordinateArea: function (e, t) { + return this.isSameSign(e.x, t.x); + }, + isCollision: function (e, t) { + (e.end = {}), + (e.end.x = e.start.x + e.width), + (e.end.y = e.start.y - e.height), + (t.end = {}), + (t.end.x = t.start.x + t.width), + (t.end.y = t.start.y - t.height); + var i = t.start.x > e.end.x || t.end.x < e.start.x || t.end.y > e.start.y || t.start.y < e.end.y; + return !i; + }, +}; +function getH5Offset(t) { + return (t.mp = { changedTouches: [] }), t.mp.changedTouches.push({ x: t.offsetX, y: t.offsetY }), t; +} +function hexToRgb(e, t) { + var i = e.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i, function (e, t, i, a) { + return t + t + i + i + a + a; + }), + a = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(i), + o = parseInt(a[1], 16), + n = parseInt(a[2], 16), + l = parseInt(a[3], 16); + return 'rgba(' + o + ',' + n + ',' + l + ',' + t + ')'; +} +function findRange(e, t, i) { + if (isNaN(e)) throw new Error('[uCharts] unvalid series data!'); + (i = i || 10), (t = t ? t : 'upper'); + for (var a = 1; 1 > i; ) (i *= 10), (a *= 10); + for (e = 'upper' === t ? Math.ceil(e * a) : Math.floor(e * a); 0 != e % i; ) 'upper' === t ? e++ : e--; + return e / a; +} +function calCandleMA(e, t, i, a) { + let o = []; + for (let n, l = 0; l < e.length; l++) { + n = { data: [], name: t[l], color: i[l] }; + for (let t = 0, i = a.length; t < i; t++) { + if (t < e[l]) { + n.data.push(null); + continue; + } + let i = 0; + for (let o = 0; o < e[l]; o++) i += a[t - o][1]; + n.data.push(+(i / e[l]).toFixed(3)); + } + o.push(n); + } + return o; +} +function calValidDistance(e, t, i, a, o) { + var n = o.width - o.area[1] - o.area[3], + l = i.eachSpacing * (o.chartData.xAxisData.xAxisPoints.length - 1), + r = t; + return 0 <= t ? ((r = 0), e.event.trigger('scrollLeft')) : Math.abs(t) >= l - n && ((r = n - l), e.event.trigger('scrollRight')), r; +} +function isInAngleRange(e, t, i) { + function a(e) { + for (; 0 > e; ) e += 2 * o; + for (; e > 2 * o; ) e -= 2 * o; + return e; + } + var o = Math.PI; + return (e = a(e)), (t = a(t)), (i = a(i)), t > i && ((i += 2 * o), e < t && (e += 2 * o)), e >= t && e <= i; +} +function calRotateTranslate(e, t, i) { + var a = e, + o = i - t, + n = a + (i - o - a) / 1.4142135623730951; + n *= -1; + return { transX: n, transY: (i - o) * (1.4142135623730951 - 1) - (i - o - a) / 1.4142135623730951 }; +} +function createCurveControlPoints(e, t) { + function i(e, t) { + return !!(e[t - 1] && e[t + 1]) && (e[t].y >= l(e[t - 1].y, e[t + 1].y) || e[t].y <= n(e[t - 1].y, e[t + 1].y)); + } + function o(e, t) { + return !!(e[t - 1] && e[t + 1]) && (e[t].x >= l(e[t - 1].x, e[t + 1].x) || e[t].x <= n(e[t - 1].x, e[t + 1].x)); + } + var n = Math.min, + l = Math.max, + r = 0.2, + a = 0.2, + s = null, + d = null, + h = null, + x = null; + if ( + (1 > t + ? ((s = e[0].x + (e[1].x - e[0].x) * r), (d = e[0].y + (e[1].y - e[0].y) * r)) + : ((s = e[t].x + (e[t + 1].x - e[t - 1].x) * r), (d = e[t].y + (e[t + 1].y - e[t - 1].y) * r)), + t > e.length - 3) + ) { + var c = e.length - 1; + (h = e[c].x - (e[c].x - e[c - 1].x) * a), (x = e[c].y - (e[c].y - e[c - 1].y) * a); + } else (h = e[t + 1].x - (e[t + 2].x - e[t].x) * a), (x = e[t + 1].y - (e[t + 2].y - e[t].y) * a); + return ( + i(e, t + 1) && (x = e[t + 1].y), + i(e, t) && (d = e[t].y), + o(e, t + 1) && (h = e[t + 1].x), + o(e, t) && (s = e[t].x), + (d >= l(e[t].y, e[t + 1].y) || d <= n(e[t].y, e[t + 1].y)) && (d = e[t].y), + (x >= l(e[t].y, e[t + 1].y) || x <= n(e[t].y, e[t + 1].y)) && (x = e[t + 1].y), + (s >= l(e[t].x, e[t + 1].x) || s <= n(e[t].x, e[t + 1].x)) && (s = e[t].x), + (h >= l(e[t].x, e[t + 1].x) || h <= n(e[t].x, e[t + 1].x)) && (h = e[t + 1].x), + { ctrA: { x: s, y: d }, ctrB: { x: h, y: x } } + ); +} +function convertCoordinateOrigin(e, t, i) { + return { x: i.x + e, y: i.y - t }; +} +function avoidCollision(e, t) { + if (t) + for (; util.isCollision(e, t); ) 0 < e.start.x ? e.start.y-- : 0 > e.start.x ? e.start.y++ : 0 < e.start.y ? e.start.y++ : e.start.y--; + return e; +} +function fillSeries(e, t, i) { + var a = 0; + return e.map(function (e) { + if ( + (e.color || ((e.color = i.colors[a]), (a = (a + 1) % i.colors.length)), + e.index || (e.index = 0), + e.type || (e.type = t.type), + 'undefined' == typeof e.show && (e.show = !0), + e.type || (e.type = t.type), + e.pointShape || (e.pointShape = 'circle'), + !e.legendShape) + ) + switch (e.type) { + case 'line': + e.legendShape = 'line'; + break; + case 'column': + e.legendShape = 'rect'; + break; + case 'area': + e.legendShape = 'triangle'; + break; + default: + e.legendShape = 'circle'; + } + return e; + }); +} +function getDataRange(e, t) { + var i = 0, + a = t - e; + return ( + (i = + 1e4 <= a + ? 1e3 + : 1e3 <= a + ? 100 + : 100 <= a + ? 10 + : 10 <= a + ? 5 + : 1 <= a + ? 1 + : 0.1 <= a + ? 0.1 + : 0.01 <= a + ? 0.01 + : 0.001 <= a + ? 0.001 + : 1e-4 <= a + ? 1e-4 + : 1e-5 <= a + ? 1e-5 + : 1e-6), + { minRange: findRange(e, 'lower', i), maxRange: findRange(t, 'upper', i) } + ); +} +function measureText(e) { + var t = 1 < arguments.length && arguments[1] !== void 0 ? arguments[1] : config.fontSize; + e = e + ''; + var e = e.split(''), + a = 0; + for (let t, o = 0; o < e.length; o++) + (t = e[o]), + (a += /[a-zA-Z]/.test(t) + ? 7 + : /[0-9]/.test(t) + ? 5.5 + : /\./.test(t) + ? 2.7 + : /-/.test(t) + ? 3.25 + : /[\u4e00-\u9fa5]/.test(t) + ? 10 + : /\(|\)/.test(t) + ? 3.73 + : /\s/.test(t) + ? 2.5 + : /%/.test(t) + ? 8 + : 10); + return (a * t) / 10; +} +function dataCombine(e) { + return e.reduce(function (e, t) { + return (e.data ? e.data : e).concat(t.data); + }, []); +} +function dataCombineStack(e, t) { + for (var o = Array(t), a = 0; a < o.length; a++) o[a] = 0; + for (var n = 0; n < e.length; n++) for (var a = 0; a < o.length; a++) o[a] += e[n].data[a]; + return e.reduce(function (e, t) { + return (e.data ? e.data : e).concat(t.data).concat(o); + }, []); +} +function getTouches(t, i, a) { + let e, o; + return ( + t.clientX + ? i.rotate + ? ((o = i.height - t.clientX * i.pixelRatio), + (e = (t.pageY - a.currentTarget.offsetTop - (i.height / i.pixelRatio / 2) * (i.pixelRatio - 1)) * i.pixelRatio)) + : ((e = t.clientX * i.pixelRatio), + (o = (t.pageY - a.currentTarget.offsetTop - (i.height / i.pixelRatio / 2) * (i.pixelRatio - 1)) * i.pixelRatio)) + : i.rotate + ? ((o = i.height - t.x * i.pixelRatio), (e = t.y * i.pixelRatio)) + : ((e = t.x * i.pixelRatio), (o = t.y * i.pixelRatio)), + { x: e, y: o } + ); +} +function getSeriesDataItem(e, t) { + var i = []; + for (let a, o = 0; o < e.length; o++) + if (((a = e[o]), null !== a.data[t] && 'undefined' != typeof a.data[t] && a.show)) { + let e = {}; + (e.color = a.color), + (e.type = a.type), + (e.style = a.style), + (e.pointShape = a.pointShape), + (e.disableLegend = a.disableLegend), + (e.name = a.name), + (e.show = a.show), + (e.data = a.format ? a.format(a.data[t]) : a.data[t]), + i.push(e); + } + return i; +} +function getMaxTextListLength(e) { + var t = e.map(function (e) { + return measureText(e); + }); + return Math.max.apply(null, t); +} +function getRadarCoordinateSeries(e) { + for (var t = Math.PI, a = [], o = 0; o < e; o++) a.push(((2 * t) / e) * o); + return a.map(function (e) { + return -1 * e + t / 2; + }); +} +function getToolTipData(e, t, a, i) { + var o = 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : {}, + n = e.map(function (e) { + let t = []; + return (t = i ? i : e.data), { text: o.format ? o.format(e, t[a]) : e.name + ': ' + e.data, color: e.color }; + }), + l = [], + r = { x: 0, y: 0 }; + for (let o, n = 0; n < t.length; n++) (o = t[n]), 'undefined' != typeof o[a] && null !== o[a] && l.push(o[a]); + for (let o, n = 0; n < l.length; n++) (o = l[n]), (r.x = Math.round(o.x)), (r.y += o.y); + return (r.y /= l.length), { textList: n, offset: r }; +} +function getMixToolTipData(e, t, a, i) { + var o = 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : {}, + n = e.map(function (e) { + return { text: o.format ? o.format(e, i[a]) : e.name + ': ' + e.data, color: e.color, disableLegend: !!e.disableLegend }; + }); + n = n.filter(function (e) { + if (!0 !== e.disableLegend) return e; + }); + var l = [], + r = { x: 0, y: 0 }; + for (let o, n = 0; n < t.length; n++) (o = t[n]), 'undefined' != typeof o[a] && null !== o[a] && l.push(o[a]); + for (let o, n = 0; n < l.length; n++) (o = l[n]), (r.x = Math.round(o.x)), (r.y += o.y); + return (r.y /= l.length), { textList: n, offset: r }; +} +function getCandleToolTipData(e, t, a, o, i, n) { + 6 < arguments.length && void 0 !== arguments[6] ? arguments[6] : {}; + let l = n.color.upFill, + r = n.color.downFill, + s = [l, l, r, l]; + var d = []; + let h = { text: i[o], color: null }; + d.push(h), + t.map(function (t) { + 0 == o + ? 0 > t.data[1] - t.data[0] + ? (s[1] = r) + : (s[1] = l) + : (t.data[0] < e[o - 1][1] && (s[0] = r), + t.data[1] < t.data[0] && (s[1] = r), + t.data[2] > e[o - 1][1] && (s[2] = l), + t.data[3] < e[o - 1][1] && (s[3] = r)); + let i = { text: '\u5F00\u76D8\uFF1A' + t.data[0], color: s[0] }, + a = { text: '\u6536\u76D8\uFF1A' + t.data[1], color: s[1] }, + n = { text: '\u6700\u4F4E\uFF1A' + t.data[2], color: s[2] }, + h = { text: '\u6700\u9AD8\uFF1A' + t.data[3], color: s[3] }; + d.push(i, a, n, h); + }); + var x = [], + c = { x: 0, y: 0 }; + for (let l, r = 0; r < a.length; r++) (l = a[r]), 'undefined' != typeof l[o] && null !== l[o] && x.push(l[o]); + return (c.x = Math.round(x[0][0].x)), { textList: d, offset: c }; +} +function filterSeries(e) { + let t = []; + for (let a = 0; a < e.length; a++) !0 == e[a].show && t.push(e[a]); + return t; +} +function findCurrentIndex(e, t, a, i) { + var o = 4 < arguments.length && arguments[4] !== void 0 ? arguments[4] : 0, + n = -1, + l = a.chartData.eachSpacing / 2; + let r = []; + if (t && 0 < t.length) { + for (let e = 1; e < a.chartData.xAxisPoints.length; e++) r.push(a.chartData.xAxisPoints[e] - l); + ('line' == a.type || 'area' == a.type) && 'justify' == a.xAxis.boundaryGap && (l = a.chartData.eachSpacing / 2), + a.categories || (l = 0), + isInExactChartArea(e, a, i) && + r.forEach(function (t, i) { + e.x + o + l > t && (n = i); + }); + } + return n; +} +function findLegendIndex(e, t) { + let i = -1; + if (isInExactLegendArea(e, t.area)) { + let a = t.points, + o = -1; + for (let t, n = 0, l = a.length; n < l; n++) { + t = a[n]; + for (let a = 0; a < t.length; a++) { + o += 1; + let n = t[a].area; + if (e.x > n[0] && e.x < n[2] && e.y > n[1] && e.y < n[3]) { + i = o; + break; + } + } + } + return i; + } + return i; +} +function isInExactLegendArea(e, t) { + return e.x > t.start.x && e.x < t.end.x && e.y > t.start.y && e.y < t.end.y; +} +function isInExactChartArea(e, t) { + return e.x <= t.width - t.area[1] + 10 && e.x >= t.area[3] - 10 && e.y >= t.area[0] && e.y <= t.height - t.area[2]; +} +function findRadarChartCurrentIndex(e, t, i) { + var a = Math.PI, + o = (2 * a) / i, + n = -1; + if (isInExactPieChartArea(e, t.center, t.radius)) { + var l = function (e) { + return 0 > e && (e += 2 * a), e > 2 * a && (e -= 2 * a), e; + }, + r = Math.atan2(t.center.y - e.y, e.x - t.center.x); + (r = -1 * r), 0 > r && (r += 2 * a); + var s = t.angleList.map(function (e) { + return (e = l(-1 * e)), e; + }); + s.forEach(function (e, t) { + var i = l(e - o / 2), + s = l(e + o / 2); + s < i && (s += 2 * a), ((r >= i && r <= s) || (r + 2 * a >= i && r + 2 * a <= s)) && (n = t); + }); + } + return n; +} +function findFunnelChartCurrentIndex(e, t) { + for (var a, o = -1, n = 0, l = t.series.length; n < l; n++) + if (((a = t.series[n]), e.x > a.funnelArea[0] && e.x < a.funnelArea[2] && e.y > a.funnelArea[1] && e.y < a.funnelArea[3])) { + o = n; + break; + } + return o; +} +function findWordChartCurrentIndex(e, t) { + for (var a, o = -1, n = 0, l = t.length; n < l; n++) + if (((a = t[n]), e.x > a.area[0] && e.x < a.area[2] && e.y > a.area[1] && e.y < a.area[3])) { + o = n; + break; + } + return o; +} +function findMapChartCurrentIndex(e, t) { + for ( + var a, + o = -1, + n = t.chartData.mapData, + l = t.series, + r = pointToCoordinate(e.y, e.x, n.bounds, n.scale, n.xoffset, n.yoffset), + s = [r.x, r.y], + d = 0, + h = l.length; + d < h; + d++ + ) + if (((a = l[d].geometry.coordinates), isPoiWithinPoly(s, a))) { + o = d; + break; + } + return o; +} +function findPieChartCurrentIndex(e, t) { + var a = -1; + if (isInExactPieChartArea(e, t.center, t.radius)) { + var o = Math.atan2(t.center.y - e.y, e.x - t.center.x); + o = -o; + for (var n, l = 0, r = t.series.length; l < r; l++) + if (((n = t.series[l]), isInAngleRange(o, n._start_, n._start_ + 2 * n._proportion_ * Math.PI))) { + a = l; + break; + } + } + return a; +} +function isInExactPieChartArea(e, t, i) { + var a = Math.pow; + return a(e.x - t.x, 2) + a(e.y - t.y, 2) <= a(i, 2); +} +function splitPoints(e) { + var t = [], + i = []; + return ( + e.forEach(function (e) { + null === e ? (i.length && t.push(i), (i = [])) : i.push(e); + }), + i.length && t.push(i), + t + ); +} +function calLegendData(e, t, i, a) { + var o = Math.max, + n = Math.floor; + let l = { + area: { start: { x: 0, y: 0 }, end: { x: 0, y: 0 }, width: 0, height: 0, wholeWidth: 0, wholeHeight: 0 }, + points: [], + widthArr: [], + heightArr: [], + }; + if (!1 === t.legend.show) return (a.legendData = l), l; + let r = t.legend.padding, + s = t.legend.margin, + d = t.legend.fontSize, + h = 15 * t.pixelRatio, + x = 5 * t.pixelRatio, + c = o(t.legend.lineHeight * t.pixelRatio, d); + if ('top' == t.legend.position || 'bottom' == t.legend.position) { + let a = [], + n = 0, + p = [], + g = []; + for (let o = 0; o < e.length; o++) { + let i = e[o], + l = h + x + measureText(i.name || 'undefined', d) + t.legend.itemGap; + n + l > t.width - t.padding[1] - t.padding[3] ? (a.push(g), p.push(n - t.legend.itemGap), (n = l), (g = [i])) : ((n += l), g.push(i)); + } + if (g.length) { + a.push(g), p.push(n - t.legend.itemGap), (l.widthArr = p); + let e = o.apply(null, p); + switch (t.legend.float) { + case 'left': + (l.area.start.x = t.padding[3]), (l.area.end.x = t.padding[3] + 2 * r); + break; + case 'right': + (l.area.start.x = t.width - t.padding[1] - e - 2 * r), (l.area.end.x = t.width - t.padding[1]); + break; + default: + (l.area.start.x = (t.width - e) / 2 - r), (l.area.end.x = (t.width + e) / 2 + r); + } + (l.area.width = e + 2 * r), + (l.area.wholeWidth = e + 2 * r), + (l.area.height = a.length * c + 2 * r), + (l.area.wholeHeight = a.length * c + 2 * r + 2 * s), + (l.points = a); + } + } else { + let i = e.length, + a = t.height - t.padding[0] - t.padding[2] - 2 * s - 2 * r, + o = Math.min(n(a / c), i); + switch (((l.area.height = o * c + 2 * r), (l.area.wholeHeight = o * c + 2 * r), t.legend.float)) { + case 'top': + (l.area.start.y = t.padding[0] + s), (l.area.end.y = t.padding[0] + s + l.area.height); + break; + case 'bottom': + (l.area.start.y = t.height - t.padding[2] - s - l.area.height), (l.area.end.y = t.height - t.padding[2] - s); + break; + default: + (l.area.start.y = (t.height - l.area.height) / 2), (l.area.end.y = (t.height + l.area.height) / 2); + } + let p = 0 == i % o ? i / o : n(i / o + 1), + g = []; + for (let t, a = 0; a < p; a++) (t = e.slice(a * o, a * o + o)), g.push(t); + if (((l.points = g), g.length)) { + for (let e = 0; e < g.length; e++) { + let i = g[e], + a = 0; + for (let e, o = 0; o < i.length; o++) (e = h + x + measureText(i[o].name || 'undefined', d) + t.legend.itemGap), e > a && (a = e); + l.widthArr.push(a), l.heightArr.push(i.length * c + 2 * r); + } + let e = 0; + for (let t = 0; t < l.widthArr.length; t++) e += l.widthArr[t]; + (l.area.width = e - t.legend.itemGap + 2 * r), (l.area.wholeWidth = l.area.width + r); + } + } + switch (t.legend.position) { + case 'top': + (l.area.start.y = t.padding[0] + s), (l.area.end.y = t.padding[0] + s + l.area.height); + break; + case 'bottom': + (l.area.start.y = t.height - t.padding[2] - l.area.height - s), (l.area.end.y = t.height - t.padding[2] - s); + break; + case 'left': + (l.area.start.x = t.padding[3]), (l.area.end.x = t.padding[3] + l.area.width); + break; + case 'right': + (l.area.start.x = t.width - t.padding[1] - l.area.width), (l.area.end.x = t.width - t.padding[1]); + } + return (a.legendData = l), l; +} +function calCategoriesData(e, t, i, a) { + var o = { angle: 0, xAxisHeight: i.xAxisHeight }, + n = e.map(function (e) { + return measureText(e, t.xAxis.fontSize || i.fontSize); + }), + l = Math.max.apply(this, n); + return ( + !0 == t.xAxis.rotateLabel && + l + 2 * i.xAxisTextPadding > a && + ((o.angle = (45 * Math.PI) / 180), (o.xAxisHeight = 2 * i.xAxisTextPadding + l * Math.sin(o.angle))), + o + ); +} +function getXAxisTextList(e, t) { + var a = Math.min, + o = Math.max, + n = 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : -1, + l = dataCombine(e), + r = []; + (l = l.filter(function (e) { + return 'object' == typeof e && null !== e + ? -1 < e.constructor.toString().indexOf('Array') + ? null !== e + : null !== e.value + : null !== e; + })), + l.map(function (e) { + 'object' == typeof e + ? -1 < e.constructor.toString().indexOf('Array') + ? 'candle' == t.type + ? e.map(function (e) { + r.push(e); + }) + : r.push(e[0]) + : r.push(e.value) + : r.push(e); + }); + var s = 0, + d = 0; + if ( + (0 < r.length && ((s = a.apply(this, r)), (d = o.apply(this, r))), + -1 < n + ? ('number' == typeof t.xAxis.data[n].min && (s = a(t.xAxis.data[n].min, s)), + 'number' == typeof t.xAxis.data[n].max && (d = o(t.xAxis.data[n].max, d))) + : ('number' == typeof t.xAxis.min && (s = a(t.xAxis.min, s)), 'number' == typeof t.xAxis.max && (d = o(t.xAxis.max, d))), + s === d) + ) { + var h = d || 10; + d += h; + } + for (var x = s, c = d, p = [], g = (c - x) / t.xAxis.splitNumber, y = 0; y <= t.xAxis.splitNumber; y++) p.push(x + g * y); + return p; +} +function calXAxisData(e, t, i) { + var a = { angle: 0, xAxisHeight: i.xAxisHeight }; + (a.ranges = getXAxisTextList(e, t, i)), + (a.rangesFormat = a.ranges.map(function (e) { + return (e = t.xAxis.format ? t.xAxis.format(e) : util.toFixed(e, 2)), e; + })); + var o = a.ranges.map(function (e) { + return (e = util.toFixed(e, 2)), (e = t.xAxis.format ? t.xAxis.format(+e) : e), e; + }); + a = Object.assign(a, getXAxisPoints(o, t, i)); + var n = a.eachSpacing, + l = o.map(function (e) { + return measureText(e); + }), + r = Math.max.apply(this, l); + return ( + r + 2 * i.xAxisTextPadding > n && ((a.angle = (45 * Math.PI) / 180), (a.xAxisHeight = 2 * i.xAxisTextPadding + r * Math.sin(a.angle))), + !0 === t.xAxis.disabled && (a.xAxisHeight = 0), + a + ); +} +function getRadarDataPoints(e, t, i, a, o) { + var n = Math.max, + l = 5 < arguments.length && void 0 !== arguments[5] ? arguments[5] : 1, + r = o.extra.radar || {}; + r.max = r.max || 0; + var s = n(r.max, n.apply(null, dataCombine(a))), + d = []; + for (let n = 0; n < a.length; n++) { + let o = a[n], + r = {}; + (r.color = o.color), + (r.legendShape = o.legendShape), + (r.pointShape = o.pointShape), + (r.data = []), + o.data.forEach(function (a, o) { + let n = {}; + (n.angle = e[o]), + (n.proportion = a / s), + (n.position = convertCoordinateOrigin(i * n.proportion * l * Math.cos(n.angle), i * n.proportion * l * Math.sin(n.angle), t)), + r.data.push(n); + }), + d.push(r); + } + return d; +} +function getPieDataPoints(e, t) { + var a = 2 < arguments.length && arguments[2] !== void 0 ? arguments[2] : 1, + o = 0, + n = 0; + for (let a, n = 0; n < e.length; n++) (a = e[n]), (a.data = null === a.data ? 0 : a.data), (o += a.data); + for (let n, l = 0; l < e.length; l++) + (n = e[l]), + (n.data = null === n.data ? 0 : n.data), + (n._proportion_ = 0 === o ? (1 / e.length) * a : (n.data / o) * a), + (n._radius_ = t); + for (let a, o = 0; o < e.length; o++) (a = e[o]), (a._start_ = n), (n += 2 * a._proportion_ * Math.PI); + return e; +} +function getFunnelDataPoints(e, t) { + var a = 2 < arguments.length && arguments[2] !== void 0 ? arguments[2] : 1; + e = e.sort(function (e, t) { + return parseInt(t.data) - parseInt(e.data); + }); + for (let o = 0; o < e.length; o++) (e[o].radius = (e[o].data / e[0].data) * t * a), (e[o]._proportion_ = e[o].data / e[0].data); + return e.reverse(); +} +function getRoseDataPoints(e, t, a, o) { + var n = 4 < arguments.length && arguments[4] !== void 0 ? arguments[4] : 1, + l = 0, + r = 0, + s = []; + for (let n, r = 0; r < e.length; r++) (n = e[r]), (n.data = null === n.data ? 0 : n.data), (l += n.data), s.push(n.data); + var d = Math.min.apply(null, s), + h = Math.max.apply(null, s); + for (let r, s = 0; s < e.length; s++) + (r = e[s]), + (r.data = null === r.data ? 0 : r.data), + 0 === l || 'area' == t + ? ((r._proportion_ = (r.data / l) * n), (r._rose_proportion_ = (1 / e.length) * n)) + : ((r._proportion_ = (r.data / l) * n), (r._rose_proportion_ = (r.data / l) * n)), + (r._radius_ = a + (o - a) * ((r.data - d) / (h - d))); + for (let n, l = 0; l < e.length; l++) (n = e[l]), (n._start_ = r), (r += 2 * n._rose_proportion_ * Math.PI); + return e; +} +function getArcbarDataPoints(e, t) { + var a = 2 < arguments.length && arguments[2] !== void 0 ? arguments[2] : 1; + 1 == a && (a = 0.999999); + for (let o, n = 0; n < e.length; n++) { + (o = e[n]), (o.data = null === o.data ? 0 : o.data); + let i; + (i = 'circle' == t.type ? 2 : t.endAngle < t.startAngle ? 2 + t.endAngle - t.startAngle : t.startAngle - t.endAngle), + (o._proportion_ = i * o.data * a + t.startAngle), + 2 <= o._proportion_ && (o._proportion_ %= 2); + } + return e; +} +function getGaugeAxisPoints(e, t, a) { + let o = t; + for (let n = 0; n < e.length; n++) + (e[n].value = null === e[n].value ? 0 : e[n].value), + (e[n]._startAngle_ = o), + (e[n]._endAngle_ = (t - a + 1) * e[n].value + t), + 2 <= e[n]._endAngle_ && (e[n]._endAngle_ %= 2), + (o = e[n]._endAngle_); + return e; +} +function getGaugeDataPoints(e, t, a) { + let o = 3 < arguments.length && arguments[3] !== void 0 ? arguments[3] : 1; + for (let n, l = 0; l < e.length; l++) { + if (((n = e[l]), (n.data = null === n.data ? 0 : n.data), 'auto' == a.pointer.color)) { + for (let e = 0; e < t.length; e++) + if (n.data <= t[e].value) { + n.color = t[e].color; + break; + } + } else n.color = a.pointer.color; + let i = a.startAngle - a.endAngle + 1; + (n._endAngle_ = i * n.data + a.startAngle), + (n._oldAngle_ = a.oldAngle), + a.oldAngle < a.endAngle && (n._oldAngle_ += 2), + (n._proportion_ = + n.data >= a.oldData ? (n._endAngle_ - n._oldAngle_) * o + a.oldAngle : n._oldAngle_ - (n._oldAngle_ - n._endAngle_) * o), + 2 <= n._proportion_ && (n._proportion_ %= 2); + } + return e; +} +function getPieTextMaxLength(e) { + e = getPieDataPoints(e); + let t = 0; + for (let a = 0; a < e.length; a++) { + let i = e[a], + o = i.format ? i.format(+i._proportion_.toFixed(2)) : util.toFixed(100 * i._proportion_) + '%'; + t = Math.max(t, measureText(o)); + } + return t; +} +function fixColumeData(e, t, i, a, o, n) { + return e.map(function (e) { + return null === e + ? null + : ((e.width = Math.ceil((t - 2 * o.columePadding) / i)), + n.extra.column && n.extra.column.width && 0 < +n.extra.column.width && (e.width = Math.min(e.width, +n.extra.column.width)), + 0 >= e.width && (e.width = 1), + (e.x += (a + 0.5 - i / 2) * e.width), + e); + }); +} +function fixColumeMeterData(e, t, i, a, o, n, l) { + return e.map(function (e) { + return null === e + ? null + : ((e.width = Math.ceil((t - 2 * o.columePadding) / 2)), + n.extra.column && n.extra.column.width && 0 < +n.extra.column.width && (e.width = Math.min(e.width, +n.extra.column.width)), + 0 < a && (e.width -= 2 * l), + e); + }); +} +function fixColumeStackData(e, t, i, a, o, n) { + return e.map(function (e) { + return null === e + ? null + : ((e.width = Math.ceil((t - 2 * o.columePadding) / 2)), + n.extra.column && n.extra.column.width && 0 < +n.extra.column.width && (e.width = Math.min(e.width, +n.extra.column.width)), + e); + }); +} +function getXAxisPoints(e, t) { + var i = t.width - t.area[1] - t.area[3], + a = t.enableScroll ? Math.min(t.xAxis.itemCount, e.length) : e.length; + ('line' == t.type || 'area' == t.type) && 1 < a && 'justify' == t.xAxis.boundaryGap && (a -= 1); + var o = i / a, + n = [], + l = t.area[3], + r = t.width - t.area[1]; + return ( + e.forEach(function (e, t) { + n.push(l + t * o); + }), + 'justify' !== t.xAxis.boundaryGap && (!0 === t.enableScroll ? n.push(l + e.length * o) : n.push(r)), + { xAxisPoints: n, startX: l, endX: r, eachSpacing: o } + ); +} +function getCandleDataPoints(e, t, i, a, o, n) { + var l = Math.round, + r = 7 < arguments.length && void 0 !== arguments[7] ? arguments[7] : 1, + s = [], + d = n.height - n.area[0] - n.area[2]; + return ( + e.forEach(function (e, h) { + if (null === e) s.push(null); + else { + var x = []; + e.forEach(function (e) { + var s = { x: a[h] + l(o / 2) }, + c = e.value || e, + p = (d * (c - t)) / (i - t); + (p *= r), (s.y = n.height - l(p) - n.area[2]), x.push(s); + }), + s.push(x); + } + }), + s + ); +} +function getDataPoints(e, t, i, a, o, n) { + var l = Math.round, + r = 7 < arguments.length && void 0 !== arguments[7] ? arguments[7] : 1, + s = 'center'; + ('line' == n.type || 'area' == n.type) && (s = n.xAxis.boundaryGap); + var d = [], + h = n.height - n.area[0] - n.area[2], + x = n.width - n.area[1] - n.area[3]; + return ( + e.forEach(function (e, c) { + if (null === e) d.push(null); + else { + var p = { color: e.color, x: a[c] }, + g = e; + if ('object' == typeof e && null !== e) + if (-1 < e.constructor.toString().indexOf('Array')) { + let t, i, a; + (t = [].concat(n.chartData.xAxisData.ranges)), + (i = t.shift()), + (a = t.pop()), + (g = e[1]), + (p.x = n.area[3] + (x * (e[0] - i)) / (a - i)); + } else g = e.value; + 'center' == s && (p.x += l(o / 2)); + var y = (h * (g - t)) / (i - t); + (y *= r), (p.y = n.height - l(y) - n.area[2]), d.push(p); + } + }), + d + ); +} +function getStackDataPoints(e, t, i, a, o, n, l, r, s) { + var d = Math.round, + h = 9 < arguments.length && void 0 !== arguments[9] ? arguments[9] : 1, + x = [], + c = n.height - n.area[0] - n.area[2]; + return ( + e.forEach(function (e, l) { + if (null === e) x.push(null); + else { + var p = { color: e.color, x: a[l] + d(o / 2) }; + if (0 < r) { + var g = 0; + for (let e = 0; e <= r; e++) g += s[e].data[l]; + var y = g - e, + f = (c * (g - t)) / (i - t), + u = (c * (y - t)) / (i - t); + } else + var g = e, + f = (c * (g - t)) / (i - t), + u = 0; + var m = u; + (f *= h), (m *= h), (p.y = n.height - d(f) - n.area[2]), (p.y0 = n.height - d(m) - n.area[2]), x.push(p); + } + }), + x + ); +} +function getYAxisTextList(e, t, a, o) { + var n, + l = Math.min, + r = Math.max, + s = 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : -1; + n = 'stack' == o ? dataCombineStack(e, t.categories.length) : dataCombine(e); + var d = []; + (n = n.filter(function (e) { + return 'object' == typeof e && null !== e + ? -1 < e.constructor.toString().indexOf('Array') + ? null !== e + : null !== e.value + : null !== e; + })), + n.map(function (e) { + 'object' == typeof e + ? -1 < e.constructor.toString().indexOf('Array') + ? 'candle' == t.type + ? e.map(function (e) { + d.push(e); + }) + : d.push(e[1]) + : d.push(e.value) + : d.push(e); + }); + var h = 0, + x = 0; + if ( + (0 < d.length && ((h = l.apply(this, d)), (x = r.apply(this, d))), + -1 < s + ? ('number' == typeof t.yAxis.data[s].min && (h = l(t.yAxis.data[s].min, h)), + 'number' == typeof t.yAxis.data[s].max && (x = r(t.yAxis.data[s].max, x))) + : ('number' == typeof t.yAxis.min && (h = l(t.yAxis.min, h)), 'number' == typeof t.yAxis.max && (x = r(t.yAxis.max, x))), + h === x) + ) { + var c = x || 10; + x += c; + } + for ( + var p = getDataRange(h, x), g = p.minRange, y = p.maxRange, f = [], u = (y - g) / t.yAxis.splitNumber, m = 0; + m <= t.yAxis.splitNumber; + m++ + ) + f.push(g + u * m); + return f.reverse(); +} +function calYAxisData(e, t, a) { + var o = Math.max, + n = assign({}, { type: '' }, t.extra.column), + l = t.yAxis.data.length, + r = Array(l); + if (0 < l) { + for (let t = 0; t < l; t++) { + r[t] = []; + for (let i = 0; i < e.length; i++) e[i].index == t && r[t].push(e[i]); + } + var s = Array(l), + d = Array(l), + h = Array(l); + for (let e, x = 0; x < l; x++) { + (e = t.yAxis.data[x]), !0 == t.yAxis.disabled && (e.disabled = !0), (s[x] = getYAxisTextList(r[x], t, a, n.type, x)); + let i = e.fontSize || a.fontSize; + (h[x] = { position: e.position ? e.position : 'left', width: 0 }), + (d[x] = s[x].map(function (t) { + return (t = util.toFixed(t, 6)), (t = e.format ? e.format(+t) : t), (h[x].width = o(h[x].width, measureText(t, i) + 5)), t; + })); + let l = e.calibration ? 4 * t.pixelRatio : 0; + (h[x].width += l + 3 * t.pixelRatio), !0 === e.disabled && (h[x].width = 0); + } + } else { + var s = [,], + d = [,], + h = [,]; + (s[0] = getYAxisTextList(e, t, a, n.type)), (h[0] = { position: 'left', width: 0 }); + var i = t.yAxis.fontSize || a.fontSize; + (d[0] = s[0].map(function (e) { + return ( + (e = util.toFixed(e, 6)), (e = t.yAxis.format ? t.yAxis.format(+e) : e), (h[0].width = o(h[0].width, measureText(e, i) + 5)), e + ); + })), + (h[0].width += 3 * t.pixelRatio), + !0 === t.yAxis.disabled + ? ((h[0] = { position: 'left', width: 0 }), (t.yAxis.data[0] = { disabled: !0 })) + : (t.yAxis.data[0] = { disabled: !1, position: 'left', max: t.yAxis.max, min: t.yAxis.min, format: t.yAxis.format }); + } + return { rangesFormat: d, ranges: s, yAxisWidth: h }; +} +function calTooltipYAxisData(e, t, a) { + let o = [].concat(a.chartData.yAxisData.ranges), + n = a.height - a.area[0] - a.area[2], + l = a.area[0], + r = []; + for (let s = 0; s < o.length; s++) { + let t = o[s].shift(), + i = o[s].pop(), + d = t - ((t - i) * (e - l)) / n; + (d = a.yAxis.data[s].format ? a.yAxis.data[s].format(+d) : d.toFixed(0)), r.push(d + ''); + } + return r; +} +function calMarkLineData(e, t) { + let a, + o, + n = t.height - t.area[0] - t.area[2]; + for (let l = 0; l < e.length; l++) { + e[l].yAxisIndex = e[l].yAxisIndex ? e[l].yAxisIndex : 0; + let i = [].concat(t.chartData.yAxisData.ranges[e[l].yAxisIndex]); + (a = i.pop()), (o = i.shift()); + let r = (n * (e[l].value - a)) / (o - a); + e[l].y = t.height - Math.round(r) - t.area[2]; + } + return e; +} +function contextRotate(e, t) { + var i = Math.PI; + !0 === t.rotateLock + ? !0 !== t._rotate_ && (e.translate(t.height, 0), e.rotate((90 * i) / 180), (t._rotate_ = !0)) + : (e.translate(t.height, 0), e.rotate((90 * i) / 180)); +} +function drawPointShape(e, t, i, a, o) { + a.beginPath(), + 'hollow' == o.dataPointShapeType + ? (a.setStrokeStyle(t), a.setFillStyle(o.background), a.setLineWidth(2 * o.pixelRatio)) + : (a.setStrokeStyle('#ffffff'), a.setFillStyle(t), a.setLineWidth(1 * o.pixelRatio)), + 'diamond' === i + ? e.forEach(function (e) { + null !== e && + (a.moveTo(e.x, e.y - 4.5), + a.lineTo(e.x - 4.5, e.y), + a.lineTo(e.x, e.y + 4.5), + a.lineTo(e.x + 4.5, e.y), + a.lineTo(e.x, e.y - 4.5)); + }) + : 'circle' === i + ? e.forEach(function (e) { + null !== e && (a.moveTo(e.x + 2.5 * o.pixelRatio, e.y), a.arc(e.x, e.y, 3 * o.pixelRatio, 0, 2 * Math.PI, !1)); + }) + : 'rect' === i + ? e.forEach(function (e) { + null !== e && (a.moveTo(e.x - 3.5, e.y - 3.5), a.rect(e.x - 3.5, e.y - 3.5, 7, 7)); + }) + : 'triangle' == i && + e.forEach(function (e) { + null !== e && + (a.moveTo(e.x, e.y - 4.5), a.lineTo(e.x - 4.5, e.y + 4.5), a.lineTo(e.x + 4.5, e.y + 4.5), a.lineTo(e.x, e.y - 4.5)); + }), + a.closePath(), + a.fill(), + a.stroke(); +} +function drawRingTitle(e, t, i, a) { + var o = e.title.fontSize || t.titleFontSize, + n = e.subtitle.fontSize || t.subtitleFontSize, + l = e.title.name || '', + r = e.subtitle.name || '', + s = e.title.color || t.titleColor, + d = e.subtitle.color || t.subtitleColor, + h = l ? o : 0, + x = r ? n : 0, + c = 5; + if (r) { + var p = measureText(r, n), + g = a.x - p / 2 + (e.subtitle.offsetX || 0), + y = a.y + n / 2 + (e.subtitle.offsetY || 0); + l && (y += (h + c) / 2), i.beginPath(), i.setFontSize(n), i.setFillStyle(d), i.fillText(r, g, y), i.closePath(), i.stroke(); + } + if (l) { + var f = measureText(l, o), + u = a.x - f / 2 + (e.title.offsetX || 0), + m = a.y + o / 2 + (e.title.offsetY || 0); + r && (m -= (x + c) / 2), i.beginPath(), i.setFontSize(o), i.setFillStyle(s), i.fillText(l, u, m), i.closePath(), i.stroke(); + } +} +function drawPointText(e, t, i, a) { + var o = t.data; + e.forEach(function (e, n) { + if (null !== e) { + a.beginPath(), a.setFontSize(t.textSize || i.fontSize), a.setFillStyle(t.textColor || '#666666'); + var l = o[n]; + 'object' == typeof o[n] && null !== o[n] && (o[n].constructor == Array ? (l = o[n][1]) : (l = o[n].value)); + var r = t.format ? t.format(l) : l; + a.fillText(r + '', e.x - measureText(r, t.textSize || i.fontSize) / 2, e.y - 4), a.closePath(), a.stroke(); + } + }); +} +function drawGaugeLabel(e, t, i, a, o, n) { + var l = Math.PI; + t -= e.width / 2 + o.gaugeLabelTextMargin; + let r = e.startAngle - e.endAngle + 1, + s = r / e.splitLine.splitNumber, + d = e.endNumber - e.startNumber, + h = d / e.splitLine.splitNumber, + x = e.startAngle, + c = e.startNumber; + for (let r = 0; r < e.splitLine.splitNumber + 1; r++) { + var p = { x: t * Math.cos(x * l), y: t * Math.sin(x * l) }, + g = e.labelFormat ? e.labelFormat(c) : c; + (p.x += i.x - measureText(g) / 2), (p.y += i.y); + var y = p.x, + f = p.y; + n.beginPath(), + n.setFontSize(o.fontSize), + n.setFillStyle(e.labelColor || '#666666'), + n.fillText(g, y, f + o.fontSize / 2), + n.closePath(), + n.stroke(), + (x += s), + 2 <= x && (x %= 2), + (c += h); + } +} +function drawRadarLabel(e, t, i, a, o, n) { + var l = a.extra.radar || {}; + (t += o.radarLabelTextMargin), + e.forEach(function (e, r) { + var s = { x: t * Math.cos(e), y: t * Math.sin(e) }, + d = convertCoordinateOrigin(s.x, s.y, i), + h = d.x, + x = d.y; + util.approximatelyEqual(s.x, 0) + ? (h -= measureText(a.categories[r] || '') / 2) + : 0 > s.x && (h -= measureText(a.categories[r] || '')), + n.beginPath(), + n.setFontSize(o.fontSize), + n.setFillStyle(l.labelColor || '#666666'), + n.fillText(a.categories[r] || '', h, x + o.fontSize / 2), + n.closePath(), + n.stroke(); + }); +} +function drawPieText(e, t, a, o, i, n) { + var l = Math.cos, + r = Math.sin, + s = Math.min, + d = Math.max, + h = Math.PI, + x = a.pieChartLinePadding, + c = [], + p = null, + g = e.map(function (e) { + var t = e.format ? e.format(+e._proportion_.toFixed(2)) : util.toFixed(100 * e._proportion_.toFixed(4)) + '%'; + e._rose_proportion_ && (e._proportion_ = e._rose_proportion_); + var i = 2 * h - (e._start_ + (2 * h * e._proportion_) / 2), + a = e.color, + o = e._radius_; + return { arc: i, text: t, color: a, radius: o, textColor: e.textColor, textSize: e.textSize }; + }); + for (let h = 0; h < g.length; h++) { + let e = g[h], + t = l(e.arc) * (e.radius + x), + i = r(e.arc) * (e.radius + x), + o = l(e.arc) * e.radius, + n = r(e.arc) * e.radius, + y = 0 <= t ? t + a.pieChartTextPadding : t - a.pieChartTextPadding, + f = i, + u = measureText(e.text, e.textSize || a.fontSize), + m = f; + p && + util.isSameXCoordinateArea(p.start, { x: y }) && + (0 < y ? (m = s(f, p.start.y)) : 0 > t ? (m = d(f, p.start.y)) : 0 < f ? (m = d(f, p.start.y)) : (m = s(f, p.start.y))), + 0 > y && (y -= u); + let S = { + lineStart: { x: o, y: n }, + lineEnd: { x: t, y: i }, + start: { x: y, y: m }, + width: u, + height: a.fontSize, + text: e.text, + color: e.color, + textColor: e.textColor, + textSize: e.textSize, + }; + (p = avoidCollision(S, p)), c.push(p); + } + for (let l = 0; l < c.length; l++) { + let e = c[l], + i = convertCoordinateOrigin(e.lineStart.x, e.lineStart.y, n), + r = convertCoordinateOrigin(e.lineEnd.x, e.lineEnd.y, n), + s = convertCoordinateOrigin(e.start.x, e.start.y, n); + o.setLineWidth(1 * t.pixelRatio), + o.setFontSize(a.fontSize), + o.beginPath(), + o.setStrokeStyle(e.color), + o.setFillStyle(e.color), + o.moveTo(i.x, i.y); + let d = 0 > e.start.x ? s.x + e.width : s.x, + x = 0 > e.start.x ? s.x - 5 : s.x + 5; + o.quadraticCurveTo(r.x, r.y, d, s.y), + o.moveTo(i.x, i.y), + o.stroke(), + o.closePath(), + o.beginPath(), + o.moveTo(s.x + e.width, s.y), + o.arc(d, s.y, 2, 0, 2 * h), + o.closePath(), + o.fill(), + o.beginPath(), + o.setFontSize(e.textSize || a.fontSize), + o.setFillStyle(e.textColor || '#666666'), + o.fillText(e.text, x, s.y + 3), + o.closePath(), + o.stroke(), + o.closePath(); + } +} +function drawToolTipSplitLine(e, t, i, a) { + var o = t.extra.tooltip || {}; + (o.gridType = null == o.gridType ? 'solid' : o.gridType), (o.dashLength = null == o.dashLength ? 4 : o.dashLength); + var n = t.area[0], + l = t.height - t.area[2]; + if ( + ('dash' == o.gridType && a.setLineDash([o.dashLength, o.dashLength]), + a.setStrokeStyle(o.gridColor || '#cccccc'), + a.setLineWidth(1 * t.pixelRatio), + a.beginPath(), + a.moveTo(e, n), + a.lineTo(e, l), + a.stroke(), + a.setLineDash([]), + o.xAxisLabel) + ) { + let n = t.categories[t.tooltip.index]; + a.setFontSize(i.fontSize); + let r = measureText(n, i.fontSize), + s = e - 0.5 * r, + d = l; + a.beginPath(), + a.setFillStyle(hexToRgb(o.labelBgColor || i.toolTipBackground, o.labelBgOpacity || i.toolTipOpacity)), + a.setStrokeStyle(o.labelBgColor || i.toolTipBackground), + a.setLineWidth(1 * t.pixelRatio), + a.rect(s - i.toolTipPadding, d, r + 2 * i.toolTipPadding, i.fontSize + 2 * i.toolTipPadding), + a.closePath(), + a.stroke(), + a.fill(), + a.beginPath(), + a.setFontSize(i.fontSize), + a.setFillStyle(o.labelFontColor || i.fontColor), + a.fillText(n + '', s, d + i.toolTipPadding + i.fontSize), + a.closePath(), + a.stroke(); + } +} +function drawMarkLine(e, t, a) { + let o = assign({}, { type: 'solid', dashLength: 4, data: [] }, e.extra.markLine), + n = e.area[3], + l = e.width - e.area[1], + r = calMarkLineData(o.data, e); + for (let s, d = 0; d < r.length; d++) + if ( + ((s = assign( + {}, + { lineColor: '#DE4A42', showLabel: !1, labelFontColor: '#666666', labelBgColor: '#DFE8FF', labelBgOpacity: 0.8, yAxisIndex: 0 }, + r[d], + )), + 'dash' == o.type && a.setLineDash([o.dashLength, o.dashLength]), + a.setStrokeStyle(s.lineColor), + a.setLineWidth(1 * e.pixelRatio), + a.beginPath(), + a.moveTo(n, s.y), + a.lineTo(l, s.y), + a.stroke(), + a.setLineDash([]), + s.showLabel) + ) { + let i = e.yAxis.format ? e.yAxis.format(+s.value) : s.value; + a.setFontSize(t.fontSize); + let o = measureText(i, t.fontSize), + n = e.padding[3] + t.yAxisTitleWidth - t.toolTipPadding, + l = Math.max(e.area[3], o + 2 * t.toolTipPadding), + r = l - n, + d = s.y; + a.setFillStyle(hexToRgb(s.labelBgColor, s.labelBgOpacity)), + a.setStrokeStyle(s.labelBgColor), + a.setLineWidth(1 * e.pixelRatio), + a.beginPath(), + a.rect(n, d - 0.5 * t.fontSize - t.toolTipPadding, r, t.fontSize + 2 * t.toolTipPadding), + a.closePath(), + a.stroke(), + a.fill(), + a.beginPath(), + a.setFontSize(t.fontSize), + a.setFillStyle(s.labelFontColor), + a.fillText(i + '', n + (r - o) / 2, d + 0.5 * t.fontSize), + a.stroke(); + } +} +function drawToolTipHorizentalLine(e, t, a, i) { + var o = Math.max, + n = assign({}, { gridType: 'solid', dashLength: 4 }, e.extra.tooltip), + l = e.area[3], + r = e.width - e.area[1]; + if ( + ('dash' == n.gridType && a.setLineDash([n.dashLength, n.dashLength]), + a.setStrokeStyle(n.gridColor || '#cccccc'), + a.setLineWidth(1 * e.pixelRatio), + a.beginPath(), + a.moveTo(l, e.tooltip.offset.y), + a.lineTo(r, e.tooltip.offset.y), + a.stroke(), + a.setLineDash([]), + n.yAxisLabel) + ) { + let l = calTooltipYAxisData(e.tooltip.offset.y, e.series, e, t, i), + r = e.chartData.yAxisData.yAxisWidth, + s = e.area[3], + d = e.width - e.area[1]; + for (let h = 0; h < l.length; h++) { + a.setFontSize(t.fontSize); + let i, + x, + c, + p = measureText(l[h], t.fontSize); + 'left' == r[h].position + ? ((i = s - r[h].width), (x = o(i, i + p + 2 * t.toolTipPadding))) + : ((i = d), (x = o(i + r[h].width, i + p + 2 * t.toolTipPadding))), + (c = x - i); + let g = i + (c - p) / 2, + y = e.tooltip.offset.y; + a.beginPath(), + a.setFillStyle(hexToRgb(n.labelBgColor || t.toolTipBackground, n.labelBgOpacity || t.toolTipOpacity)), + a.setStrokeStyle(n.labelBgColor || t.toolTipBackground), + a.setLineWidth(1 * e.pixelRatio), + a.rect(i, y - 0.5 * t.fontSize - t.toolTipPadding, c, t.fontSize + 2 * t.toolTipPadding), + a.closePath(), + a.stroke(), + a.fill(), + a.beginPath(), + a.setFontSize(t.fontSize), + a.setFillStyle(n.labelFontColor || t.fontColor), + a.fillText(l[h], g, y + 0.5 * t.fontSize), + a.closePath(), + a.stroke(), + 'left' == r[h].position ? (s -= r[h].width + e.yAxis.padding) : (d += r[h].width + e.yAxis.padding); + } + } +} +function drawToolTipSplitArea(e, t, i, a, o) { + var n = assign({}, { activeBgColor: '#000000', activeBgOpacity: 0.08 }, t.extra.tooltip), + l = t.area[0], + r = t.height - t.area[2]; + a.beginPath(), a.setFillStyle(hexToRgb(n.activeBgColor, n.activeBgOpacity)), a.rect(e - o / 2, l, o, r - l), a.closePath(), a.fill(); +} +function drawToolTip(e, t, i, a, o) { + var n = Math.round, + l = assign({}, { showBox: !0, bgColor: '#000000', bgOpacity: 0.7, fontColor: '#FFFFFF' }, i.extra.tooltip), + r = 4 * i.pixelRatio, + s = 5 * i.pixelRatio, + d = 8 * i.pixelRatio, + h = !1; + ('line' == i.type || 'area' == i.type || 'candle' == i.type || 'mix' == i.type) && drawToolTipSplitLine(i.tooltip.offset.x, i, a, o), + (t = assign({ x: 0, y: 0 }, t)), + (t.y -= 8 * i.pixelRatio); + var x = e.map(function (e) { + return measureText(e.text, a.fontSize); + }), + c = r + s + 4 * a.toolTipPadding + Math.max.apply(null, x), + p = 2 * a.toolTipPadding + e.length * a.toolTipLineHeight; + !1 == l.showBox || + (t.x - Math.abs(i._scrollDistance_) + d + c > i.width && (h = !0), + p + t.y > i.height && (t.y = i.height - p), + o.beginPath(), + o.setFillStyle(hexToRgb(l.bgColor || a.toolTipBackground, l.bgOpacity || a.toolTipOpacity)), + h + ? (o.moveTo(t.x, t.y + 10 * i.pixelRatio), + o.lineTo(t.x - d, t.y + 10 * i.pixelRatio - 5 * i.pixelRatio), + o.lineTo(t.x - d, t.y), + o.lineTo(t.x - d - n(c), t.y), + o.lineTo(t.x - d - n(c), t.y + p), + o.lineTo(t.x - d, t.y + p), + o.lineTo(t.x - d, t.y + 10 * i.pixelRatio + 5 * i.pixelRatio), + o.lineTo(t.x, t.y + 10 * i.pixelRatio)) + : (o.moveTo(t.x, t.y + 10 * i.pixelRatio), + o.lineTo(t.x + d, t.y + 10 * i.pixelRatio - 5 * i.pixelRatio), + o.lineTo(t.x + d, t.y), + o.lineTo(t.x + d + n(c), t.y), + o.lineTo(t.x + d + n(c), t.y + p), + o.lineTo(t.x + d, t.y + p), + o.lineTo(t.x + d, t.y + 10 * i.pixelRatio + 5 * i.pixelRatio), + o.lineTo(t.x, t.y + 10 * i.pixelRatio)), + o.closePath(), + o.fill(), + e.forEach(function (e, i) { + if (null !== e.color) { + o.beginPath(), o.setFillStyle(e.color); + var n = t.x + d + 2 * a.toolTipPadding, + l = t.y + (a.toolTipLineHeight - a.fontSize) / 2 + a.toolTipLineHeight * i + a.toolTipPadding + 1; + h && (n = t.x - c - d + 2 * a.toolTipPadding), o.fillRect(n, l, r, a.fontSize), o.closePath(); + } + }), + e.forEach(function (e, i) { + var n = t.x + d + 2 * a.toolTipPadding + r + s; + h && (n = t.x - c - d + 2 * a.toolTipPadding + +r + s); + var x = t.y + (a.toolTipLineHeight - a.fontSize) / 2 + a.toolTipLineHeight * i + a.toolTipPadding; + o.beginPath(), + o.setFontSize(a.fontSize), + o.setFillStyle(l.fontColor), + o.fillText(e.text, n, x + a.fontSize), + o.closePath(), + o.stroke(); + })); +} +function drawYAxisTitle(e, t, i, a) { + var o = i.xAxisHeight + (t.height - i.xAxisHeight - measureText(e)) / 2; + a.save(), + a.beginPath(), + a.setFontSize(i.fontSize), + a.setFillStyle(t.yAxis.titleFontColor || '#333333'), + a.translate(0, t.height), + a.rotate((-90 * Math.PI) / 180), + a.fillText(e, o, t.padding[3] + 0.5 * i.fontSize), + a.closePath(), + a.stroke(), + a.restore(); +} +function drawColumnDataPoints(e, t, i, a) { + let o = 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1, + n = t.chartData.xAxisData, + l = n.xAxisPoints, + r = n.eachSpacing, + s = assign({}, { type: 'group', width: r / 2, meter: { border: 4, fillColor: '#FFFFFF' } }, t.extra.column), + d = []; + a.save(); + let h = -2, + x = l.length + 2; + return ( + t._scrollDistance_ && + 0 !== t._scrollDistance_ && + !0 === t.enableScroll && + (a.translate(t._scrollDistance_, 0), (h = Math.floor(-t._scrollDistance_ / r) - 2), (x = h + t.xAxis.itemCount + 4)), + t.tooltip && t.tooltip.textList && t.tooltip.textList.length && 1 === o && drawToolTipSplitArea(t.tooltip.offset.x, t, i, a, r), + e.forEach(function (n, c) { + let p, g, y; + (p = [].concat(t.chartData.yAxisData.ranges[n.index])), (g = p.pop()), (y = p.shift()); + var f = n.data; + switch (s.type) { + case 'group': + var u = getDataPoints(f, g, y, l, r, t, i, o), + m = getStackDataPoints(f, g, y, l, r, t, i, c, e, o); + d.push(m), (u = fixColumeData(u, r, e.length, c, i, t)); + for (let e, o = 0; o < u.length; o++) + if (((e = u[o]), null !== e && o > h && o < x)) { + a.beginPath(), a.setStrokeStyle(e.color || n.color), a.setLineWidth(1), a.setFillStyle(e.color || n.color); + var S = e.x - e.width / 2, + A = t.height - e.y - t.area[2]; + a.moveTo(S, e.y), + a.lineTo(S + e.width - 2, e.y), + a.lineTo(S + e.width - 2, t.height - t.area[2]), + a.lineTo(S, t.height - t.area[2]), + a.lineTo(S, e.y), + a.closePath(), + a.stroke(), + a.fill(); + } + break; + case 'stack': + var u = getStackDataPoints(f, g, y, l, r, t, i, c, e, o); + d.push(u), (u = fixColumeStackData(u, r, e.length, c, i, t, e)); + for (let e, o = 0; o < u.length; o++) + if (((e = u[o]), null !== e && o > h && o < x)) { + a.beginPath(), a.setFillStyle(e.color || n.color); + var S = e.x - e.width / 2 + 1, + A = t.height - e.y - t.area[2], + T = t.height - e.y0 - t.area[2]; + 0 < c && (A -= T), a.moveTo(S, e.y), a.fillRect(S, e.y, e.width - 2, A), a.closePath(), a.fill(); + } + break; + case 'meter': + var u = getDataPoints(f, g, y, l, r, t, i, o); + if ((d.push(u), (u = fixColumeMeterData(u, r, e.length, c, i, t, s.meter.border)), 0 == c)) { + for (let e, o = 0; o < u.length; o++) + if (((e = u[o]), null !== e && o > h && o < x)) { + a.beginPath(), a.setFillStyle(s.meter.fillColor); + var S = e.x - e.width / 2, + A = t.height - e.y - t.area[2]; + a.moveTo(S, e.y), + a.fillRect(S, e.y, e.width, A), + a.closePath(), + a.fill(), + 0 < s.meter.border && + (a.beginPath(), + a.setStrokeStyle(n.color), + a.setLineWidth(s.meter.border * t.pixelRatio), + a.moveTo(S + 0.5 * s.meter.border, e.y + A), + a.lineTo(S + 0.5 * s.meter.border, e.y + 0.5 * s.meter.border), + a.lineTo(S + e.width - 0.5 * s.meter.border, e.y + 0.5 * s.meter.border), + a.lineTo(S + e.width - 0.5 * s.meter.border, e.y + A), + a.stroke()); + } + } else + for (let e, o = 0; o < u.length; o++) + if (((e = u[o]), null !== e && o > h && o < x)) { + a.beginPath(), a.setFillStyle(e.color || n.color); + var S = e.x - e.width / 2, + A = t.height - e.y - t.area[2]; + a.moveTo(S, e.y), a.fillRect(S, e.y, e.width, A), a.closePath(), a.fill(); + } + } + }), + !1 !== t.dataLabel && + 1 === o && + e.forEach(function (n, d) { + let h, x, c; + (h = [].concat(t.chartData.yAxisData.ranges[n.index])), (x = h.pop()), (c = h.shift()); + var p = n.data; + switch (s.type) { + case 'group': + var g = getDataPoints(p, x, c, l, r, t, i, o); + (g = fixColumeData(g, r, e.length, d, i, t)), drawPointText(g, n, i, a); + break; + case 'stack': + var g = getStackDataPoints(p, x, c, l, r, t, i, d, e, o); + drawPointText(g, n, i, a); + break; + case 'meter': + var g = getDataPoints(p, x, c, l, r, t, i, o); + drawPointText(g, n, i, a); + } + }), + a.restore(), + { xAxisPoints: l, calPoints: d, eachSpacing: r } + ); +} +function drawCandleDataPoints(e, t, a, i, o) { + var n = 5 < arguments.length && void 0 !== arguments[5] ? arguments[5] : 1, + l = assign({}, { color: {}, average: {} }, a.extra.candle); + (l.color = assign({}, { upLine: '#f04864', upFill: '#f04864', downLine: '#2fc25b', downFill: '#2fc25b' }, l.color)), + (l.average = assign({}, { show: !1, name: [], day: [], color: i.colors }, l.average)), + (a.extra.candle = l); + let r = a.chartData.xAxisData, + s = r.xAxisPoints, + d = r.eachSpacing, + h = []; + o.save(); + let x = -2, + c = s.length + 2, + p = 0, + g = a.width + d; + return ( + a._scrollDistance_ && + 0 !== a._scrollDistance_ && + !0 === a.enableScroll && + (o.translate(a._scrollDistance_, 0), + (x = Math.floor(-a._scrollDistance_ / d) - 2), + (c = x + a.xAxis.itemCount + 4), + (p = -a._scrollDistance_ - d + a.area[3]), + (g = p + (a.xAxis.itemCount + 4) * d)), + (l.average.show || t) && + t.forEach(function (e) { + let t, l, r; + (t = [].concat(a.chartData.yAxisData.ranges[e.index])), (l = t.pop()), (r = t.shift()); + var h = e.data, + x = getDataPoints(h, l, r, s, d, a, i, n), + c = splitPoints(x); + for (let t, a = 0; a < c.length; a++) { + if (((t = c[a]), o.beginPath(), o.setStrokeStyle(e.color), o.setLineWidth(1), 1 === t.length)) + o.moveTo(t[0].x, t[0].y), o.arc(t[0].x, t[0].y, 1, 0, 2 * Math.PI); + else { + o.moveTo(t[0].x, t[0].y); + let e = 0; + for (let i, a = 0; a < t.length; a++) + if (((i = t[a]), 0 == e && i.x > p && (o.moveTo(i.x, i.y), (e = 1)), 0 < a && i.x > p && i.x < g)) { + var y = createCurveControlPoints(t, a - 1); + o.bezierCurveTo(y.ctrA.x, y.ctrA.y, y.ctrB.x, y.ctrB.y, i.x, i.y); + } + o.moveTo(t[0].x, t[0].y); + } + o.closePath(), o.stroke(); + } + }), + e.forEach(function (e) { + let t, r, p; + (t = [].concat(a.chartData.yAxisData.ranges[e.index])), (r = t.pop()), (p = t.shift()); + var g = e.data, + y = getCandleDataPoints(g, r, p, s, d, a, i, n); + h.push(y); + var f = splitPoints(y); + for (let t = 0; t < f[0].length; t++) + if (t > x && t < c) { + let e = f[0][t]; + o.beginPath(), + 0 < g[t][1] - g[t][0] + ? (o.setStrokeStyle(l.color.upLine), + o.setFillStyle(l.color.upFill), + o.setLineWidth(1 * a.pixelRatio), + o.moveTo(e[3].x, e[3].y), + o.lineTo(e[1].x, e[1].y), + o.lineTo(e[1].x - d / 4, e[1].y), + o.lineTo(e[0].x - d / 4, e[0].y), + o.lineTo(e[0].x, e[0].y), + o.lineTo(e[2].x, e[2].y), + o.lineTo(e[0].x, e[0].y), + o.lineTo(e[0].x + d / 4, e[0].y), + o.lineTo(e[1].x + d / 4, e[1].y), + o.lineTo(e[1].x, e[1].y), + o.moveTo(e[3].x, e[3].y)) + : (o.setStrokeStyle(l.color.downLine), + o.setFillStyle(l.color.downFill), + o.setLineWidth(1 * a.pixelRatio), + o.moveTo(e[3].x, e[3].y), + o.lineTo(e[0].x, e[0].y), + o.lineTo(e[0].x - d / 4, e[0].y), + o.lineTo(e[1].x - d / 4, e[1].y), + o.lineTo(e[1].x, e[1].y), + o.lineTo(e[2].x, e[2].y), + o.lineTo(e[1].x, e[1].y), + o.lineTo(e[1].x + d / 4, e[1].y), + o.lineTo(e[0].x + d / 4, e[0].y), + o.lineTo(e[0].x, e[0].y), + o.moveTo(e[3].x, e[3].y)), + o.closePath(), + o.fill(), + o.stroke(); + } + }), + o.restore(), + { xAxisPoints: s, calPoints: h, eachSpacing: d } + ); +} +function drawAreaDataPoints(e, t, i, a) { + var o = 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1, + n = assign({}, { type: 'straight', opacity: 0.2, addLine: !1, width: 2, gradient: !1 }, t.extra.area); + let l = t.chartData.xAxisData, + r = l.xAxisPoints, + s = l.eachSpacing, + d = t.height - t.area[2], + h = []; + a.save(); + let x = 0, + c = t.width + s; + return ( + t._scrollDistance_ && + 0 !== t._scrollDistance_ && + !0 === t.enableScroll && + (a.translate(t._scrollDistance_, 0), (x = -t._scrollDistance_ - s + t.area[3]), (c = x + (t.xAxis.itemCount + 4) * s)), + e.forEach(function (e) { + let l, p, g; + (l = [].concat(t.chartData.yAxisData.ranges[e.index])), (p = l.pop()), (g = l.shift()); + let y = e.data, + f = getDataPoints(y, p, g, r, s, t, i, o); + h.push(f); + let u = splitPoints(f); + for (let o, l = 0; l < u.length; l++) { + if (((o = u[l]), a.beginPath(), a.setStrokeStyle(hexToRgb(e.color, n.opacity)), n.gradient)) { + let i = a.createLinearGradient(0, t.area[0], 0, t.height - t.area[2]); + i.addColorStop('0', hexToRgb(e.color, n.opacity)), i.addColorStop('1.0', hexToRgb('#FFFFFF', 0.1)), a.setFillStyle(i); + } else a.setFillStyle(hexToRgb(e.color, n.opacity)); + if ((a.setLineWidth(n.width * t.pixelRatio), 1 < o.length)) { + let e = o[0], + t = o[o.length - 1]; + a.moveTo(e.x, e.y); + let i = 0; + if ('curve' === n.type) { + for (let e, t = 0; t < o.length; t++) + if (((e = o[t]), 0 == i && e.x > x && (a.moveTo(e.x, e.y), (i = 1)), 0 < t && e.x > x && e.x < c)) { + let i = createCurveControlPoints(o, t - 1); + a.bezierCurveTo(i.ctrA.x, i.ctrA.y, i.ctrB.x, i.ctrB.y, e.x, e.y); + } + } else + for (let e, t = 0; t < o.length; t++) + (e = o[t]), 0 == i && e.x > x && (a.moveTo(e.x, e.y), (i = 1)), 0 < t && e.x > x && e.x < c && a.lineTo(e.x, e.y); + a.lineTo(t.x, d), a.lineTo(e.x, d), a.lineTo(e.x, e.y); + } else { + let e = o[0]; + a.moveTo(e.x - s / 2, e.y), + a.lineTo(e.x + s / 2, e.y), + a.lineTo(e.x + s / 2, d), + a.lineTo(e.x - s / 2, d), + a.moveTo(e.x - s / 2, e.y); + } + if ((a.closePath(), a.fill(), n.addLine)) { + if ('dash' == e.lineType) { + let i = e.dashLength ? e.dashLength : 8; + (i *= t.pixelRatio), a.setLineDash([i, i]); + } + if ((a.beginPath(), a.setStrokeStyle(e.color), a.setLineWidth(n.width * t.pixelRatio), 1 === o.length)) + a.moveTo(o[0].x, o[0].y), a.arc(o[0].x, o[0].y, 1, 0, 2 * Math.PI); + else { + a.moveTo(o[0].x, o[0].y); + let e = 0; + if ('curve' === n.type) { + for (let t, i = 0; i < o.length; i++) + if (((t = o[i]), 0 == e && t.x > x && (a.moveTo(t.x, t.y), (e = 1)), 0 < i && t.x > x && t.x < c)) { + let e = createCurveControlPoints(o, i - 1); + a.bezierCurveTo(e.ctrA.x, e.ctrA.y, e.ctrB.x, e.ctrB.y, t.x, t.y); + } + } else + for (let t, i = 0; i < o.length; i++) + (t = o[i]), 0 == e && t.x > x && (a.moveTo(t.x, t.y), (e = 1)), 0 < i && t.x > x && t.x < c && a.lineTo(t.x, t.y); + a.moveTo(o[0].x, o[0].y); + } + a.stroke(), a.setLineDash([]); + } + } + !1 !== t.dataPointShape && drawPointShape(f, e.color, e.pointShape, a, t); + }), + !1 !== t.dataLabel && + 1 === o && + e.forEach(function (e) { + let n, l, d; + (n = [].concat(t.chartData.yAxisData.ranges[e.index])), (l = n.pop()), (d = n.shift()); + var h = e.data, + x = getDataPoints(h, l, d, r, s, t, i, o); + drawPointText(x, e, i, a); + }), + a.restore(), + { xAxisPoints: r, calPoints: h, eachSpacing: s } + ); +} +function drawLineDataPoints(e, t, i, a) { + var o = 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1, + n = assign({}, { type: 'straight', width: 2 }, t.extra.line); + n.width *= t.pixelRatio; + let l = t.chartData.xAxisData, + r = l.xAxisPoints, + s = l.eachSpacing; + var d = []; + a.save(); + let h = 0, + x = t.width + s; + return ( + t._scrollDistance_ && + 0 !== t._scrollDistance_ && + !0 === t.enableScroll && + (a.translate(t._scrollDistance_, 0), (h = -t._scrollDistance_ - s + t.area[3]), (x = h + (t.xAxis.itemCount + 4) * s)), + e.forEach(function (e) { + let l, c, p; + (l = [].concat(t.chartData.yAxisData.ranges[e.index])), (c = l.pop()), (p = l.shift()); + var g = e.data, + y = getDataPoints(g, c, p, r, s, t, i, o); + d.push(y); + var f = splitPoints(y); + if ('dash' == e.lineType) { + let i = e.dashLength ? e.dashLength : 8; + (i *= t.pixelRatio), a.setLineDash([i, i]); + } + a.beginPath(), + a.setStrokeStyle(e.color), + a.setLineWidth(n.width), + f.forEach(function (e) { + if (1 === e.length) a.moveTo(e[0].x, e[0].y), a.arc(e[0].x, e[0].y, 1, 0, 2 * Math.PI); + else { + a.moveTo(e[0].x, e[0].y); + let i = 0; + if ('curve' === n.type) + for (let o, n = 0; n < e.length; n++) + if (((o = e[n]), 0 == i && o.x > h && (a.moveTo(o.x, o.y), (i = 1)), 0 < n && o.x > h && o.x < x)) { + var t = createCurveControlPoints(e, n - 1); + a.bezierCurveTo(t.ctrA.x, t.ctrA.y, t.ctrB.x, t.ctrB.y, o.x, o.y); + } + if ('straight' === n.type) + for (let t, o = 0; o < e.length; o++) + (t = e[o]), 0 == i && t.x > h && (a.moveTo(t.x, t.y), (i = 1)), 0 < o && t.x > h && t.x < x && a.lineTo(t.x, t.y); + if ('step' === n.type) + for (let t, o = 0; o < e.length; o++) + (t = e[o]), + 0 == i && t.x > h && (a.moveTo(t.x, t.y), (i = 1)), + 0 < o && t.x > h && t.x < x && (a.lineTo(t.x, e[o - 1].y), a.lineTo(t.x, t.y)); + a.moveTo(e[0].x, e[0].y); + } + }), + a.stroke(), + a.setLineDash([]), + !1 !== t.dataPointShape && drawPointShape(y, e.color, e.pointShape, a, t); + }), + !1 !== t.dataLabel && + 1 === o && + e.forEach(function (e) { + let n, l, d; + (n = [].concat(t.chartData.yAxisData.ranges[e.index])), (l = n.pop()), (d = n.shift()); + var h = e.data, + x = getDataPoints(h, l, d, r, s, t, i, o); + drawPointText(x, e, i, a); + }), + a.restore(), + { xAxisPoints: r, calPoints: d, eachSpacing: s } + ); +} +function drawMixDataPoints(e, t, i, a) { + let o = 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1, + n = t.chartData.xAxisData, + l = n.xAxisPoints, + r = n.eachSpacing, + s = t.height - t.area[2], + d = []; + var h = 0, + x = 0; + e.forEach(function (e) { + 'column' == e.type && (x += 1); + }), + a.save(); + let c = -2, + p = l.length + 2, + g = 0, + y = t.width + r; + if ( + (t._scrollDistance_ && + 0 !== t._scrollDistance_ && + !0 === t.enableScroll && + (a.translate(t._scrollDistance_, 0), + (c = Math.floor(-t._scrollDistance_ / r) - 2), + (p = c + t.xAxis.itemCount + 4), + (g = -t._scrollDistance_ - r + t.area[3]), + (y = g + (t.xAxis.itemCount + 4) * r)), + e.forEach(function (e) { + let n, f, u; + (n = [].concat(t.chartData.yAxisData.ranges[e.index])), (f = n.pop()), (u = n.shift()); + var m = e.data, + S = getDataPoints(m, f, u, l, r, t, i, o); + if ((d.push(S), 'column' == e.type)) { + S = fixColumeData(S, r, x, h, i, t); + for (let o, n = 0; n < S.length; n++) + if (((o = S[n]), null !== o && n > c && n < p)) { + a.beginPath(), a.setStrokeStyle(o.color || e.color), a.setLineWidth(1), a.setFillStyle(o.color || e.color); + var A = o.x - o.width / 2, + T = t.height - o.y - t.area[2]; + a.moveTo(A, o.y), + a.moveTo(A, o.y), + a.lineTo(A + o.width - 2, o.y), + a.lineTo(A + o.width - 2, t.height - t.area[2]), + a.lineTo(A, t.height - t.area[2]), + a.lineTo(A, o.y), + a.closePath(), + a.stroke(), + a.fill(), + a.closePath(), + a.fill(); + } + h += 1; + } + if ('area' == e.type) { + let o = splitPoints(S); + for (let n, l = 0; l < o.length; l++) { + if ( + ((n = o[l]), + a.beginPath(), + a.setStrokeStyle(e.color), + a.setFillStyle(hexToRgb(e.color, 0.2)), + a.setLineWidth(2 * t.pixelRatio), + 1 < n.length) + ) { + var b = n[0]; + let t = n[n.length - 1]; + a.moveTo(b.x, b.y); + let i = 0; + if ('curve' === e.style) { + for (let e, t = 0; t < n.length; t++) + if (((e = n[t]), 0 == i && e.x > g && (a.moveTo(e.x, e.y), (i = 1)), 0 < t && e.x > g && e.x < y)) { + var P = createCurveControlPoints(n, t - 1); + a.bezierCurveTo(P.ctrA.x, P.ctrA.y, P.ctrB.x, P.ctrB.y, e.x, e.y); + } + } else + for (let e, t = 0; t < n.length; t++) + (e = n[t]), 0 == i && e.x > g && (a.moveTo(e.x, e.y), (i = 1)), 0 < t && e.x > g && e.x < y && a.lineTo(e.x, e.y); + a.lineTo(t.x, s), a.lineTo(b.x, s), a.lineTo(b.x, b.y); + } else { + let e = n[0]; + a.moveTo(e.x - r / 2, e.y), + a.lineTo(e.x + r / 2, e.y), + a.lineTo(e.x + r / 2, s), + a.lineTo(e.x - r / 2, s), + a.moveTo(e.x - r / 2, e.y); + } + a.closePath(), a.fill(); + } + } + if ('line' == e.type) { + var _ = splitPoints(S); + _.forEach(function (i) { + if ('dash' == e.lineType) { + let i = e.dashLength ? e.dashLength : 8; + (i *= t.pixelRatio), a.setLineDash([i, i]); + } + if ((a.beginPath(), a.setStrokeStyle(e.color), a.setLineWidth(2 * t.pixelRatio), 1 === i.length)) + a.moveTo(i[0].x, i[0].y), a.arc(i[0].x, i[0].y, 1, 0, 2 * Math.PI); + else { + a.moveTo(i[0].x, i[0].y); + let t = 0; + if ('curve' == e.style) { + for (let e, n = 0; n < i.length; n++) + if (((e = i[n]), 0 == t && e.x > g && (a.moveTo(e.x, e.y), (t = 1)), 0 < n && e.x > g && e.x < y)) { + var o = createCurveControlPoints(i, n - 1); + a.bezierCurveTo(o.ctrA.x, o.ctrA.y, o.ctrB.x, o.ctrB.y, e.x, e.y); + } + } else + for (let e, o = 0; o < i.length; o++) + (e = i[o]), 0 == t && e.x > g && (a.moveTo(e.x, e.y), (t = 1)), 0 < o && e.x > g && e.x < y && a.lineTo(e.x, e.y); + a.moveTo(i[0].x, i[0].y); + } + a.stroke(), a.setLineDash([]); + }); + } + 'point' == e.type && (e.addPoint = !0), !0 == e.addPoint && 'column' !== e.type && drawPointShape(S, e.color, e.pointShape, a, t); + }), + !1 !== t.dataLabel && 1 === o) + ) { + var h = 0; + e.forEach(function (e) { + let n, s, d; + (n = [].concat(t.chartData.yAxisData.ranges[e.index])), (s = n.pop()), (d = n.shift()); + var c = e.data, + p = getDataPoints(c, s, d, l, r, t, i, o); + 'column' === e.type ? ((p = fixColumeData(p, r, x, h, i, t)), drawPointText(p, e, i, a), (h += 1)) : drawPointText(p, e, i, a); + }); + } + return a.restore(), { xAxisPoints: l, calPoints: d, eachSpacing: r }; +} +function drawToolTipBridge(e, t, i, a, o, n) { + var l = e.extra.tooltip || {}; + l.horizentalLine && + e.tooltip && + 1 === a && + ('line' == e.type || 'area' == e.type || 'column' == e.type || 'candle' == e.type || 'mix' == e.type) && + drawToolTipHorizentalLine(e, t, i, o, n), + i.save(), + e._scrollDistance_ && 0 !== e._scrollDistance_ && !0 === e.enableScroll && i.translate(e._scrollDistance_, 0), + e.tooltip && + e.tooltip.textList && + e.tooltip.textList.length && + 1 === a && + drawToolTip(e.tooltip.textList, e.tooltip.offset, e, t, i, o, n), + i.restore(); +} +function drawXAxis(e, t, i, a) { + var o = Math.ceil; + let n = t.chartData.xAxisData, + l = n.xAxisPoints, + r = n.startX, + s = n.endX, + d = n.eachSpacing; + var h = 'center'; + ('line' == t.type || 'area' == t.type) && (h = t.xAxis.boundaryGap); + var x = t.height - t.area[2], + c = t.area[0]; + if (t.enableScroll && t.xAxis.scrollShow) { + var p = t.height - t.area[2] + i.xAxisHeight, + g = s - r, + y = d * (l.length - 1), + f = 0; + t._scrollDistance_ && (f = (-t._scrollDistance_ * g) / y), + a.beginPath(), + a.setLineCap('round'), + a.setLineWidth(6 * t.pixelRatio), + a.setStrokeStyle(t.xAxis.scrollBackgroundColor || '#EFEBEF'), + a.moveTo(r, p), + a.lineTo(s, p), + a.stroke(), + a.closePath(), + a.beginPath(), + a.setLineCap('round'), + a.setLineWidth(6 * t.pixelRatio), + a.setStrokeStyle(t.xAxis.scrollColor || '#A6A6A6'), + a.moveTo(r + f, p), + a.lineTo(r + f + (g * g) / y, p), + a.stroke(), + a.closePath(), + a.setLineCap('butt'); + } + if ( + (a.save(), + t._scrollDistance_ && 0 !== t._scrollDistance_ && a.translate(t._scrollDistance_, 0), + !0 === t.xAxis.calibration && + (a.setStrokeStyle(t.xAxis.gridColor || '#cccccc'), + a.setLineCap('butt'), + a.setLineWidth(1 * t.pixelRatio), + l.forEach(function (e, i) { + 0 < i && (a.beginPath(), a.moveTo(e - d / 2, x), a.lineTo(e - d / 2, x + 3 * t.pixelRatio), a.closePath(), a.stroke()); + })), + !0 !== t.xAxis.disableGrid && + (a.setStrokeStyle(t.xAxis.gridColor || '#cccccc'), + a.setLineCap('butt'), + a.setLineWidth(1 * t.pixelRatio), + 'dash' == t.xAxis.gridType && a.setLineDash([t.xAxis.dashLength, t.xAxis.dashLength]), + (t.xAxis.gridEval = t.xAxis.gridEval || 1), + l.forEach(function (e, i) { + 0 == i % t.xAxis.gridEval && (a.beginPath(), a.moveTo(e, x), a.lineTo(e, c), a.stroke()); + }), + a.setLineDash([])), + !0 !== t.xAxis.disabled) + ) { + let n = e.length; + t.xAxis.labelCount && ((n = t.xAxis.itemCount ? o((e.length / t.xAxis.itemCount) * t.xAxis.labelCount) : t.xAxis.labelCount), (n -= 1)); + let r = o(e.length / n), + s = [], + c = e.length; + for (let t = 0; t < c; t++) 0 == t % r ? s.push(e[t]) : s.push(''); + s[c - 1] = e[c - 1]; + var u = t.xAxis.fontSize || i.fontSize; + 0 === i._xAxisTextAngle_ + ? s.forEach(function (e, o) { + var n = -measureText(e + '', u) / 2; + 'center' == h && (n += d / 2); + var r = 0; + t.xAxis.scrollShow && (r = 6 * t.pixelRatio), + a.beginPath(), + a.setFontSize(u), + a.setFillStyle(t.xAxis.fontColor || '#666666'), + a.fillText(e + '', l[o] + n, x + u + (i.xAxisHeight - r - u) / 2), + a.closePath(), + a.stroke(); + }) + : s.forEach(function (e, o) { + a.save(), a.beginPath(), a.setFontSize(u), a.setFillStyle(t.xAxis.fontColor || '#666666'); + var n = measureText(e + '', u), + r = -n; + 'center' == h && (r += d / 2); + var s = calRotateTranslate(l[o] + d / 2, x + u / 2 + 5, t.height), + c = s.transX, + p = s.transY; + a.rotate(-1 * i._xAxisTextAngle_), + a.translate(c, p), + a.fillText(e + '', l[o] + r, x + u + 5), + a.closePath(), + a.stroke(), + a.restore(); + }); + } + a.restore(), + t.xAxis.axisLine && + (a.beginPath(), + a.setStrokeStyle(t.xAxis.axisLineColor), + a.setLineWidth(1 * t.pixelRatio), + a.moveTo(r, t.height - t.area[2]), + a.lineTo(s, t.height - t.area[2]), + a.stroke()); +} +function drawYAxisGrid(e, t, i, a) { + if (!0 === t.yAxis.disableGrid) return; + let o = t.height - t.area[0] - t.area[2], + n = o / t.yAxis.splitNumber, + l = t.area[3], + r = t.chartData.xAxisData.xAxisPoints, + s = t.chartData.xAxisData.eachSpacing, + d = s * (r.length - 1), + h = []; + for (let o = 0; o < t.yAxis.splitNumber + 1; o++) h.push(t.height - t.area[2] - n * o); + a.save(), + t._scrollDistance_ && 0 !== t._scrollDistance_ && a.translate(t._scrollDistance_, 0), + 'dash' == t.yAxis.gridType && a.setLineDash([t.yAxis.dashLength, t.yAxis.dashLength]), + a.setStrokeStyle(t.yAxis.gridColor), + a.setLineWidth(1 * t.pixelRatio), + h.forEach(function (e) { + a.beginPath(), a.moveTo(l, e), a.lineTo(l + d, e), a.stroke(); + }), + a.setLineDash([]), + a.restore(); +} +function drawYAxis(e, t, a, o) { + if (!0 === t.yAxis.disabled) return; + var i = t.height - t.area[0] - t.area[2], + n = i / t.yAxis.splitNumber, + l = t.area[3], + r = t.width - t.area[1], + s = t.height - t.area[2], + d = s + a.xAxisHeight; + t.xAxis.scrollShow && (d -= 3 * t.pixelRatio), + t.xAxis.rotateLabel && (d = t.height - t.area[2] + 3), + o.beginPath(), + o.setFillStyle(t.background || '#ffffff'), + 0 > t._scrollDistance_ && o.fillRect(0, 0, l, d), + !0 == t.enableScroll && o.fillRect(r, 0, t.width, d), + o.closePath(), + o.stroke(); + var h = []; + for (let l = 0; l <= t.yAxis.splitNumber; l++) h.push(t.area[0] + n * l); + let x = t.area[3], + c = t.width - t.area[1]; + for (let n, l = 0; l < t.yAxis.data.length; l++) + if (((n = t.yAxis.data[l]), !0 !== n.disabled)) { + let e = t.chartData.yAxisData.rangesFormat[l], + i = n.fontSize || a.fontSize, + r = t.chartData.yAxisData.yAxisWidth[l]; + if ( + (e.forEach(function (e, a) { + var l = h[a] ? h[a] : s; + o.beginPath(), + o.setFontSize(i), + o.setLineWidth(1 * t.pixelRatio), + o.setStrokeStyle(n.axisLineColor || '#cccccc'), + o.setFillStyle(n.fontColor || '#666666'), + 'left' == r.position + ? (o.fillText(e + '', x - r.width, l + i / 2), !0 == n.calibration && (o.moveTo(x, l), o.lineTo(x - 3 * t.pixelRatio, l))) + : (o.fillText(e + '', c + 4 * t.pixelRatio, l + i / 2), + !0 == n.calibration && (o.moveTo(c, l), o.lineTo(c + 3 * t.pixelRatio, l))), + o.closePath(), + o.stroke(); + }), + !1 !== n.axisLine && + (o.beginPath(), + o.setStrokeStyle(n.axisLineColor || '#cccccc'), + o.setLineWidth(1 * t.pixelRatio), + 'left' == r.position + ? (o.moveTo(x, t.height - t.area[2]), o.lineTo(x, t.area[0])) + : (o.moveTo(c, t.height - t.area[2]), o.lineTo(c, t.area[0])), + o.stroke()), + t.yAxis.showTitle) + ) { + let e = n.titleFontSize || a.fontSize, + i = n.title; + o.beginPath(), + o.setFontSize(e), + o.setFillStyle(n.titleFontColor || '#666666'), + 'left' == r.position + ? o.fillText(i, x - measureText(i, e) / 2, t.area[0] - 10 * t.pixelRatio) + : o.fillText(i, c - measureText(i, e) / 2, t.area[0] - 10 * t.pixelRatio), + o.closePath(), + o.stroke(); + } + 'left' == r.position ? (x -= r.width + t.yAxis.padding) : (c += r.width + t.yAxis.padding); + } +} +function drawLegend(e, t, i, a, o) { + if (!1 === t.legend.show) return; + let n = o.legendData, + l = n.points, + r = n.area, + s = t.legend.padding, + d = t.legend.fontSize, + h = 15 * t.pixelRatio, + x = 5 * t.pixelRatio, + c = t.legend.itemGap, + p = Math.max(t.legend.lineHeight * t.pixelRatio, d); + a.beginPath(), + a.setLineWidth(t.legend.borderWidth), + a.setStrokeStyle(t.legend.borderColor), + a.setFillStyle(t.legend.backgroundColor), + a.moveTo(r.start.x, r.start.y), + a.rect(r.start.x, r.start.y, r.width, r.height), + a.closePath(), + a.fill(), + a.stroke(), + l.forEach(function (e, o) { + let l = 0, + g = 0; + (l = n.widthArr[o]), (g = n.heightArr[o]); + let y = 0, + f = 0; + 'top' == t.legend.position || 'bottom' == t.legend.position + ? ((y = r.start.x + (r.width - l) / 2), (f = r.start.y + s + o * p)) + : ((l = 0 == o ? 0 : n.widthArr[o - 1]), (y = r.start.x + s + l), (f = r.start.y + s + (r.height - g) / 2)), + a.setFontSize(i.fontSize); + for (let n, l = 0; l < e.length; l++) { + switch ( + ((n = e[l]), + (n.area = [0, 0, 0, 0]), + (n.area[0] = y), + (n.area[1] = f), + (n.area[3] = f + p), + a.beginPath(), + a.setLineWidth(1 * t.pixelRatio), + a.setStrokeStyle(n.show ? n.color : t.legend.hiddenColor), + a.setFillStyle(n.show ? n.color : t.legend.hiddenColor), + n.legendShape) + ) { + case 'line': + a.moveTo(y, f + 0.5 * p - 2 * t.pixelRatio), a.fillRect(y, f + 0.5 * p - 2 * t.pixelRatio, 15 * t.pixelRatio, 4 * t.pixelRatio); + break; + case 'triangle': + a.moveTo(y + 7.5 * t.pixelRatio, f + 0.5 * p - 5 * t.pixelRatio), + a.lineTo(y + 2.5 * t.pixelRatio, f + 0.5 * p + 5 * t.pixelRatio), + a.lineTo(y + 12.5 * t.pixelRatio, f + 0.5 * p + 5 * t.pixelRatio), + a.lineTo(y + 7.5 * t.pixelRatio, f + 0.5 * p - 5 * t.pixelRatio); + break; + case 'diamond': + a.moveTo(y + 7.5 * t.pixelRatio, f + 0.5 * p - 5 * t.pixelRatio), + a.lineTo(y + 2.5 * t.pixelRatio, f + 0.5 * p), + a.lineTo(y + 7.5 * t.pixelRatio, f + 0.5 * p + 5 * t.pixelRatio), + a.lineTo(y + 12.5 * t.pixelRatio, f + 0.5 * p), + a.lineTo(y + 7.5 * t.pixelRatio, f + 0.5 * p - 5 * t.pixelRatio); + break; + case 'circle': + a.moveTo(y + 7.5 * t.pixelRatio, f + 0.5 * p), a.arc(y + 7.5 * t.pixelRatio, f + 0.5 * p, 5 * t.pixelRatio, 0, 2 * Math.PI); + break; + case 'rect': + a.moveTo(y, f + 0.5 * p - 5 * t.pixelRatio), + a.fillRect(y, f + 0.5 * p - 5 * t.pixelRatio, 15 * t.pixelRatio, 10 * t.pixelRatio); + break; + default: + a.moveTo(y, f + 0.5 * p - 5 * t.pixelRatio), + a.fillRect(y, f + 0.5 * p - 5 * t.pixelRatio, 15 * t.pixelRatio, 10 * t.pixelRatio); + } + a.closePath(), a.fill(), a.stroke(), (y += h + x); + a.beginPath(), + a.setFontSize(d), + a.setFillStyle(n.show ? t.legend.fontColor : t.legend.hiddenColor), + a.fillText(n.name, y, f + (0.5 * p + 0.5 * d - 2)), + a.closePath(), + a.stroke(), + 'top' == t.legend.position || 'bottom' == t.legend.position + ? ((y += measureText(n.name, d) + c), (n.area[2] = y)) + : ((n.area[2] = y + measureText(n.name, d) + c), (y -= h + x), (f += p)); + } + }); +} +function drawPieDataPoints(e, t, a, o) { + var n = Math.PI, + l = 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1, + r = assign( + {}, + { + activeOpacity: 0.5, + activeRadius: 10 * t.pixelRatio, + offsetAngle: 0, + labelWidth: 15 * t.pixelRatio, + ringWidth: 0, + border: !1, + borderWidth: 2, + borderColor: '#FFFFFF', + }, + t.extra.pie, + ), + s = { x: t.area[3] + (t.width - t.area[1] - t.area[3]) / 2, y: t.area[0] + (t.height - t.area[0] - t.area[2]) / 2 }; + 0 == a.pieChartLinePadding && (a.pieChartLinePadding = r.activeRadius); + var d = Math.min( + (t.width - t.area[1] - t.area[3]) / 2 - a.pieChartLinePadding - a.pieChartTextPadding - a._pieTextMaxLength_, + (t.height - t.area[0] - t.area[2]) / 2 - a.pieChartLinePadding - a.pieChartTextPadding, + ); + e = getPieDataPoints(e, d, l); + var h = r.activeRadius; + if ( + ((e = e.map(function (e) { + return (e._start_ += (r.offsetAngle * n) / 180), e; + })), + e.forEach(function (e, i) { + t.tooltip && + t.tooltip.index == i && + (o.beginPath(), + o.setFillStyle(hexToRgb(e.color, t.extra.pie.activeOpacity || 0.5)), + o.moveTo(s.x, s.y), + o.arc(s.x, s.y, e._radius_ + h, e._start_, e._start_ + 2 * e._proportion_ * n), + o.closePath(), + o.fill()), + o.beginPath(), + o.setLineWidth(r.borderWidth * t.pixelRatio), + (o.lineJoin = 'round'), + o.setStrokeStyle(r.borderColor), + o.setFillStyle(e.color), + o.moveTo(s.x, s.y), + o.arc(s.x, s.y, e._radius_, e._start_, e._start_ + 2 * e._proportion_ * n), + o.closePath(), + o.fill(), + !0 == r.border && o.stroke(); + }), + 'ring' === t.type) + ) { + var x = 0.6 * d; + 'number' == typeof t.extra.pie.ringWidth && 0 < t.extra.pie.ringWidth && (x = Math.max(0, d - t.extra.pie.ringWidth)), + o.beginPath(), + o.setFillStyle(t.background || '#ffffff'), + o.moveTo(s.x, s.y), + o.arc(s.x, s.y, x, 0, 2 * n), + o.closePath(), + o.fill(); + } + if (!1 !== t.dataLabel && 1 === l) { + for (var c = !1, p = 0, g = e.length; p < g; p++) + if (0 < e[p].data) { + c = !0; + break; + } + c && drawPieText(e, t, a, o, d, s); + } + return 1 === l && 'ring' === t.type && drawRingTitle(t, a, o, s), { center: s, radius: d, series: e }; +} +function drawRoseDataPoints(e, t, a, o) { + var n = Math.PI, + l = 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1, + r = assign( + {}, + { + type: 'area', + activeOpacity: 0.5, + activeRadius: 10 * t.pixelRatio, + offsetAngle: 0, + labelWidth: 15 * t.pixelRatio, + border: !1, + borderWidth: 2, + borderColor: '#FFFFFF', + }, + t.extra.rose, + ); + 0 == a.pieChartLinePadding && (a.pieChartLinePadding = r.activeRadius); + var s = { x: t.area[3] + (t.width - t.area[1] - t.area[3]) / 2, y: t.area[0] + (t.height - t.area[0] - t.area[2]) / 2 }, + d = Math.min( + (t.width - t.area[1] - t.area[3]) / 2 - a.pieChartLinePadding - a.pieChartTextPadding - a._pieTextMaxLength_, + (t.height - t.area[0] - t.area[2]) / 2 - a.pieChartLinePadding - a.pieChartTextPadding, + ), + h = r.minRadius || 0.5 * d; + e = getRoseDataPoints(e, r.type, h, d, l); + var x = r.activeRadius; + if ( + ((e = e.map(function (e) { + return (e._start_ += ((r.offsetAngle || 0) * n) / 180), e; + })), + e.forEach(function (e, i) { + t.tooltip && + t.tooltip.index == i && + (o.beginPath(), + o.setFillStyle(hexToRgb(e.color, r.activeOpacity || 0.5)), + o.moveTo(s.x, s.y), + o.arc(s.x, s.y, x + e._radius_, e._start_, e._start_ + 2 * e._rose_proportion_ * n), + o.closePath(), + o.fill()), + o.beginPath(), + o.setLineWidth(r.borderWidth * t.pixelRatio), + (o.lineJoin = 'round'), + o.setStrokeStyle(r.borderColor), + o.setFillStyle(e.color), + o.moveTo(s.x, s.y), + o.arc(s.x, s.y, e._radius_, e._start_, e._start_ + 2 * e._rose_proportion_ * n), + o.closePath(), + o.fill(), + !0 == r.border && o.stroke(); + }), + !1 !== t.dataLabel && 1 === l) + ) { + for (var c = !1, p = 0, g = e.length; p < g; p++) + if (0 < e[p].data) { + c = !0; + break; + } + c && drawPieText(e, t, a, o, d, s); + } + return { center: s, radius: d, series: e }; +} +function drawArcbarDataPoints(e, t, i, a) { + var o = Math.PI, + n = 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1, + l = assign({}, { startAngle: 0.75, endAngle: 0.25, type: 'default', width: 12 * t.pixelRatio, gap: 2 * t.pixelRatio }, t.extra.arcbar); + e = getArcbarDataPoints(e, l, n); + var r = l.center ? l.center : { x: t.width / 2, y: t.height / 2 }; + var s; + l.radius ? (s = l.radius) : ((s = Math.min(r.x, r.y)), (s -= 5 * t.pixelRatio), (s -= l.width / 2)); + for (let n, d = 0; d < e.length; d++) + (n = e[d]), + a.setLineWidth(l.width), + a.setStrokeStyle(l.backgroundColor || '#E9E9E9'), + a.setLineCap('round'), + a.beginPath(), + 'default' == l.type + ? a.arc(r.x, r.y, s - (l.width + l.gap) * d, l.startAngle * o, l.endAngle * o, !1) + : a.arc(r.x, r.y, s - (l.width + l.gap) * d, 0, 2 * o, !1), + a.stroke(), + a.setLineWidth(l.width), + a.setStrokeStyle(n.color), + a.setLineCap('round'), + a.beginPath(), + a.arc(r.x, r.y, s - (l.width + l.gap) * d, l.startAngle * o, n._proportion_ * o, !1), + a.stroke(); + return drawRingTitle(t, i, a, r), { center: r, radius: s, series: e }; +} +function drawGaugeDataPoints(e, t, a, i, o) { + var n = Math.PI, + l = 5 < arguments.length && void 0 !== arguments[5] ? arguments[5] : 1, + r = assign( + {}, + { + type: 'default', + startAngle: 0.75, + endAngle: 0.25, + width: 15, + splitLine: { fixRadius: 0, splitNumber: 10, width: 15, color: '#FFFFFF', childNumber: 5, childWidth: 5 }, + pointer: { width: 15, color: 'auto' }, + }, + a.extra.gauge, + ); + null == r.oldAngle && (r.oldAngle = r.startAngle), + null == r.oldData && (r.oldData = 0), + (e = getGaugeAxisPoints(e, r.startAngle, r.endAngle)); + var s = { x: a.width / 2, y: a.height / 2 }, + d = Math.min(s.x, s.y); + (d -= 5 * a.pixelRatio), (d -= r.width / 2); + var h = d - r.width, + x = 0; + if ('progress' == r.type) { + var c = d - 3 * r.width; + o.beginPath(); + let e = o.createLinearGradient(s.x, s.y - c, s.x, s.y + c); + e.addColorStop('0', hexToRgb(t[0].color, 0.3)), + e.addColorStop('1.0', hexToRgb('#FFFFFF', 0.1)), + o.setFillStyle(e), + o.arc(s.x, s.y, c, 0, 2 * n, !1), + o.fill(), + o.setLineWidth(r.width), + o.setStrokeStyle(hexToRgb(t[0].color, 0.3)), + o.setLineCap('round'), + o.beginPath(), + o.arc(s.x, s.y, h, r.startAngle * n, r.endAngle * n, !1), + o.stroke(), + (x = r.startAngle - r.endAngle + 1); + let i = x / r.splitLine.splitNumber, + p = x / r.splitLine.splitNumber / r.splitLine.childNumber, + g = -d - 0.5 * r.width - r.splitLine.fixRadius, + y = -d - r.width - r.splitLine.fixRadius + r.splitLine.width; + o.save(), o.translate(s.x, s.y), o.rotate((r.startAngle - 1) * n); + let f = r.splitLine.splitNumber * r.splitLine.childNumber + 1, + u = t[0].data * l; + for (let e = 0; e < f; e++) + o.beginPath(), + u > e / f ? o.setStrokeStyle(hexToRgb(t[0].color, 1)) : o.setStrokeStyle(hexToRgb(t[0].color, 0.3)), + o.setLineWidth(3 * a.pixelRatio), + o.moveTo(g, 0), + o.lineTo(y, 0), + o.stroke(), + o.rotate(p * n); + o.restore(), + (t = getArcbarDataPoints(t, r, l)), + o.setLineWidth(r.width), + o.setStrokeStyle(t[0].color), + o.setLineCap('round'), + o.beginPath(), + o.arc(s.x, s.y, h, r.startAngle * n, t[0]._proportion_ * n, !1), + o.stroke(); + let m = d - 2.5 * r.width; + o.save(), o.translate(s.x, s.y), o.rotate((t[0]._proportion_ - 1) * n), o.beginPath(), o.setLineWidth(r.width / 3); + let S = o.createLinearGradient(0, 0.6 * -m, 0, 0.6 * m); + S.addColorStop('0', hexToRgb('#FFFFFF', 0)), + S.addColorStop('0.5', hexToRgb(t[0].color, 1)), + S.addColorStop('1.0', hexToRgb('#FFFFFF', 0)), + o.setStrokeStyle(S), + o.arc(0, 0, m, 0.85 * n, 1.15 * n, !1), + o.stroke(), + o.beginPath(), + o.setLineWidth(1), + o.setStrokeStyle(t[0].color), + o.setFillStyle(t[0].color), + o.moveTo(-m - r.width / 3 / 2, -4), + o.lineTo(-m - r.width / 3 / 2 - 4, 0), + o.lineTo(-m - r.width / 3 / 2, 4), + o.lineTo(-m - r.width / 3 / 2, -4), + o.stroke(), + o.fill(), + o.restore(); + } else { + o.setLineWidth(r.width), o.setLineCap('butt'); + for (let t, a = 0; a < e.length; a++) + (t = e[a]), o.beginPath(), o.setStrokeStyle(t.color), o.arc(s.x, s.y, d, t._startAngle_ * n, t._endAngle_ * n, !1), o.stroke(); + o.save(), (x = r.startAngle - r.endAngle + 1); + let c = x / r.splitLine.splitNumber, + p = x / r.splitLine.splitNumber / r.splitLine.childNumber, + g = -d - 0.5 * r.width - r.splitLine.fixRadius, + y = -d - 0.5 * r.width - r.splitLine.fixRadius + r.splitLine.width, + f = -d - 0.5 * r.width - r.splitLine.fixRadius + r.splitLine.childWidth; + o.translate(s.x, s.y), o.rotate((r.startAngle - 1) * n); + for (let e = 0; e < r.splitLine.splitNumber + 1; e++) + o.beginPath(), + o.setStrokeStyle(r.splitLine.color), + o.setLineWidth(2 * a.pixelRatio), + o.moveTo(g, 0), + o.lineTo(y, 0), + o.stroke(), + o.rotate(c * n); + o.restore(), o.save(), o.translate(s.x, s.y), o.rotate((r.startAngle - 1) * n); + for (let e = 0; e < r.splitLine.splitNumber * r.splitLine.childNumber + 1; e++) + o.beginPath(), + o.setStrokeStyle(r.splitLine.color), + o.setLineWidth(1 * a.pixelRatio), + o.moveTo(g, 0), + o.lineTo(f, 0), + o.stroke(), + o.rotate(p * n); + o.restore(), (t = getGaugeDataPoints(t, e, r, l)); + for (let e, a = 0; a < t.length; a++) + (e = t[a]), + o.save(), + o.translate(s.x, s.y), + o.rotate((e._proportion_ - 1) * n), + o.beginPath(), + o.setFillStyle(e.color), + o.moveTo(r.pointer.width, 0), + o.lineTo(0, -r.pointer.width / 2), + o.lineTo(-h, 0), + o.lineTo(0, r.pointer.width / 2), + o.lineTo(r.pointer.width, 0), + o.closePath(), + o.fill(), + o.beginPath(), + o.setFillStyle('#FFFFFF'), + o.arc(0, 0, r.pointer.width / 6, 0, 2 * n, !1), + o.fill(), + o.restore(); + !1 !== a.dataLabel && drawGaugeLabel(r, d, s, a, i, o); + } + return ( + drawRingTitle(a, i, o, s), + 1 === l && 'gauge' === a.type && ((a.extra.gauge.oldAngle = t[0]._proportion_), (a.extra.gauge.oldData = t[0].data)), + { center: s, radius: d, innerRadius: h, categories: e, totalAngle: x } + ); +} +function drawRadarDataPoints(e, t, a, o) { + var n = Math.cos, + l = Math.sin, + r = 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1, + s = assign({}, { gridColor: '#cccccc', gridType: 'radar', labelColor: '#666666', opacity: 0.2, gridCount: 3 }, t.extra.radar), + d = getRadarCoordinateSeries(t.categories.length), + h = { x: t.area[3] + (t.width - t.area[1] - t.area[3]) / 2, y: t.area[0] + (t.height - t.area[0] - t.area[2]) / 2 }, + x = Math.min(h.x - (getMaxTextListLength(t.categories) + a.radarLabelTextMargin), h.y - a.radarLabelTextMargin); + (x -= t.padding[1]), + o.beginPath(), + o.setLineWidth(1 * t.pixelRatio), + o.setStrokeStyle(s.gridColor), + d.forEach(function (e) { + var t = convertCoordinateOrigin(x * n(e), x * l(e), h); + o.moveTo(h.x, h.y), o.lineTo(t.x, t.y); + }), + o.stroke(), + o.closePath(); + for ( + var c = function (e) { + var i = {}; + if ((o.beginPath(), o.setLineWidth(1 * t.pixelRatio), o.setStrokeStyle(s.gridColor), 'radar' == s.gridType)) + d.forEach(function (t, a) { + var r = convertCoordinateOrigin((x / s.gridCount) * e * n(t), (x / s.gridCount) * e * l(t), h); + 0 === a ? ((i = r), o.moveTo(r.x, r.y)) : o.lineTo(r.x, r.y); + }), + o.lineTo(i.x, i.y); + else { + var a = convertCoordinateOrigin(0.0707372016677029 * ((x / s.gridCount) * e), 0.9974949866040544 * ((x / s.gridCount) * e), h); + o.arc(h.x, h.y, h.y - a.y, 0, 2 * Math.PI, !1); + } + o.stroke(), o.closePath(); + }, + p = 1; + p <= s.gridCount; + p++ + ) + c(p); + var g = getRadarDataPoints(d, h, x, e, t, r); + return ( + g.forEach(function (e) { + if ( + (o.beginPath(), + o.setFillStyle(hexToRgb(e.color, s.opacity)), + e.data.forEach(function (e, t) { + 0 === t ? o.moveTo(e.position.x, e.position.y) : o.lineTo(e.position.x, e.position.y); + }), + o.closePath(), + o.fill(), + !1 !== t.dataPointShape) + ) { + var i = e.data.map(function (e) { + return e.position; + }); + drawPointShape(i, e.color, e.pointShape, o, t); + } + }), + drawRadarLabel(d, x, h, t, a, o), + { center: h, radius: x, angleList: d } + ); +} +function normalInt(e, t, a) { + a = 0 == a ? 1 : a; + for (var o = [], n = 0; n < a; n++) o[n] = Math.random(); + return ( + Math.floor( + (o.reduce(function (e, t) { + return e + t; + }) / + a) * + (t - e), + ) + e + ); +} +function collisionNew(e, t, a, o) { + var n = !1; + for (let l = 0; l < t.length; l++) + if (t[l].area) + if (!(e[3] < t[l].area[1] || e[0] > t[l].area[2] || e[1] > t[l].area[3] || e[2] < t[l].area[0])) { + n = !0; + break; + } else if (0 > e[0] || 0 > e[1] || e[2] > a || e[3] > o) { + n = !0; + break; + } else n = !1; + return n; +} +function getBoundingBox(e) { + var t, + a = {}; + (a.xMin = 180), (a.xMax = 0), (a.yMin = 90), (a.yMax = 0); + for (var o, n = 0; n < e.length; n++) { + o = e[n].geometry.coordinates; + for (var l = 0; l < o.length; l++) { + (t = o[l]), 1 == t.length && (t = t[0]); + for (var r = 0; r < t.length; r++) { + var s = t[r][0], + d = t[r][1], + h = { x: s, y: d }; + (a.xMin = a.xMin < h.x ? a.xMin : h.x), + (a.xMax = a.xMax > h.x ? a.xMax : h.x), + (a.yMin = a.yMin < h.y ? a.yMin : h.y), + (a.yMax = a.yMax > h.y ? a.yMax : h.y); + } + } + } + return a; +} +function coordinateToPoint(e, t, i, a, o, n) { + return { x: (t - i.xMin) * a + o, y: (i.yMax - e) * a + n }; +} +function pointToCoordinate(e, t, i, a, o, n) { + return { x: (t - o) / a + i.xMin, y: i.yMax - (e - n) / a }; +} +function isRayIntersectsSegment(e, t, i) { + if (t[1] == i[1]) return !1; + if (t[1] > e[1] && i[1] > e[1]) return !1; + if (t[1] < e[1] && i[1] < e[1]) return !1; + if (t[1] == e[1] && i[1] > e[1]) return !1; + if (i[1] == e[1] && t[1] > e[1]) return !1; + if (t[0] < e[0] && i[1] < e[1]) return !1; + let a = i[0] - ((i[0] - t[0]) * (i[1] - e[1])) / (i[1] - t[1]); + return !(a < e[0]); +} +function isPoiWithinPoly(e, t) { + let i = 0; + for (let a, o = 0; o < t.length; o++) { + (a = t[o][0]), 1 == t.length && (a = t[o][0]); + for (let t = 0; t < a.length - 1; t++) { + let o = a[t], + n = a[t + 1]; + isRayIntersectsSegment(e, o, n) && (i += 1); + } + } + return !(1 != i % 2); +} +function drawMapDataPoints(e, t, a, o) { + var n, + l, + r = Math.abs, + s = assign( + {}, + { + border: !0, + borderWidth: 1, + borderColor: '#666666', + fillOpacity: 0.6, + activeBorderColor: '#f04864', + activeFillColor: '#facc14', + activeFillOpacity: 1, + }, + t.extra.map, + ), + d = e, + h = getBoundingBox(d), + x = t.width / r(h.xMax - h.xMin), + c = t.height / r(h.yMax - h.yMin), + p = x < c ? x : c, + g = t.width / 2 - (r(h.xMax - h.xMin) / 2) * p, + y = t.height / 2 - (r(h.yMax - h.yMin) / 2) * p; + o.beginPath(), o.clearRect(0, 0, t.width, t.height), o.setFillStyle(t.background || '#FFFFFF'), o.rect(0, 0, t.width, t.height), o.fill(); + for (var f = 0; f < d.length; f++) { + o.beginPath(), + o.setLineWidth(s.borderWidth * t.pixelRatio), + o.setStrokeStyle(s.borderColor), + o.setFillStyle(hexToRgb(e[f].color, s.fillOpacity)), + t.tooltip && + t.tooltip.index == f && + (o.setStrokeStyle(s.activeBorderColor), o.setFillStyle(hexToRgb(s.activeFillColor, s.activeFillOpacity))); + for (var u = d[f].geometry.coordinates, m = 0; m < u.length; m++) { + (n = u[m]), 1 == n.length && (n = n[0]); + for (var S = 0; S < n.length; S++) + (l = coordinateToPoint(n[S][1], n[S][0], h, p, g, y)), 0 == S ? (o.beginPath(), o.moveTo(l.x, l.y)) : o.lineTo(l.x, l.y); + o.fill(), !0 == s.border && o.stroke(); + } + if (!0 == t.dataLabel) { + var A = d[f].properties.centroid; + if (A) { + l = coordinateToPoint(A[1], A[0], h, p, g, y); + let e = d[f].textSize || a.fontSize, + t = d[f].properties.name; + o.beginPath(), + o.setFontSize(e), + o.setFillStyle(d[f].textColor || '#666666'), + o.fillText(t, l.x - measureText(t, e) / 2, l.y + e / 2), + o.closePath(), + o.stroke(); + } + } + } + (t.chartData.mapData = { bounds: h, scale: p, xoffset: g, yoffset: y }), drawToolTipBridge(t, a, o, 1), o.draw(); +} +function getWordCloudPoint(e, t) { + let a = e.series.sort(function (e, t) { + return parseInt(t.textSize) - parseInt(e.textSize); + }); + switch (t) { + case 'normal': + for (let t = 0; t < a.length; t++) { + let i, + o, + n, + l = a[t].name, + r = a[t].textSize, + s = measureText(l, r), + d = 0; + for (;;) { + d++, + (i = normalInt(-e.width / 2, e.width / 2, 5) - s / 2), + (o = normalInt(-e.height / 2, e.height / 2, 5) + r / 2), + (n = [i - 5 + e.width / 2, o - 5 - r + e.height / 2, i + s + 5 + e.width / 2, o + 5 + e.height / 2]); + let t = collisionNew(n, a, e.width, e.height); + if (!t) break; + if (1e3 == d) { + n = [-100, -100, -100, -100]; + break; + } + } + a[t].area = n; + } + break; + case 'vertical': + function o() { + return !!(0.7 < Math.random()); + } + for (let t = 0; t < a.length; t++) { + let i, + n, + l, + r, + s = a[t].name, + d = a[t].textSize, + h = measureText(s, d), + x = o(), + c = 0; + for (;;) { + c++; + let t; + if ( + (x + ? ((i = normalInt(-e.width / 2, e.width / 2, 5) - h / 2), + (n = normalInt(-e.height / 2, e.height / 2, 5) + d / 2), + (l = [n - 5 - h + e.width / 2, -i - 5 + e.height / 2, n + 5 + e.width / 2, -i + d + 5 + e.height / 2]), + (r = [ + e.width - (e.width / 2 - e.height / 2) - (-i + d + 5 + e.height / 2) - 5, + e.height / 2 - e.width / 2 + (n - 5 - h + e.width / 2) - 5, + e.width - (e.width / 2 - e.height / 2) - (-i + d + 5 + e.height / 2) + d, + e.height / 2 - e.width / 2 + (n - 5 - h + e.width / 2) + h + 5, + ]), + (t = collisionNew(r, a, e.height, e.width))) + : ((i = normalInt(-e.width / 2, e.width / 2, 5) - h / 2), + (n = normalInt(-e.height / 2, e.height / 2, 5) + d / 2), + (l = [i - 5 + e.width / 2, n - 5 - d + e.height / 2, i + h + 5 + e.width / 2, n + 5 + e.height / 2]), + (t = collisionNew(l, a, e.width, e.height))), + !t) + ) + break; + if (1e3 == c) { + l = [-1e3, -1e3, -1e3, -1e3]; + break; + } + } + x ? ((a[t].area = r), (a[t].areav = l)) : (a[t].area = l), (a[t].rotate = x); + } + } + return a; +} +function drawWordCloudDataPoints(e, t, i, a) { + let o = 4 < arguments.length && arguments[4] !== void 0 ? arguments[4] : 1, + n = assign({}, { type: 'normal', autoColors: !0 }, t.extra.word); + a.beginPath(), a.setFillStyle(t.background || '#FFFFFF'), a.rect(0, 0, t.width, t.height), a.fill(), a.save(); + let l = t.chartData.wordCloudData; + a.translate(t.width / 2, t.height / 2); + for (let n = 0; n < l.length; n++) { + a.save(), l[n].rotate && a.rotate((90 * Math.PI) / 180); + let e = l[n].name, + i = l[n].textSize, + r = measureText(e, i); + a.beginPath(), + a.setStrokeStyle(l[n].color), + a.setFillStyle(l[n].color), + a.setFontSize(i), + l[n].rotate + ? 0 < l[n].areav[0] && + (t.tooltip + ? t.tooltip.index == n + ? a.strokeText(e, (l[n].areav[0] + 5 - t.width / 2) * o - (r * (1 - o)) / 2, (l[n].areav[1] + 5 + i - t.height / 2) * o) + : a.fillText(e, (l[n].areav[0] + 5 - t.width / 2) * o - (r * (1 - o)) / 2, (l[n].areav[1] + 5 + i - t.height / 2) * o) + : a.fillText(e, (l[n].areav[0] + 5 - t.width / 2) * o - (r * (1 - o)) / 2, (l[n].areav[1] + 5 + i - t.height / 2) * o)) + : 0 < l[n].area[0] && + (t.tooltip + ? t.tooltip.index == n + ? a.strokeText(e, (l[n].area[0] + 5 - t.width / 2) * o - (r * (1 - o)) / 2, (l[n].area[1] + 5 + i - t.height / 2) * o) + : a.fillText(e, (l[n].area[0] + 5 - t.width / 2) * o - (r * (1 - o)) / 2, (l[n].area[1] + 5 + i - t.height / 2) * o) + : a.fillText(e, (l[n].area[0] + 5 - t.width / 2) * o - (r * (1 - o)) / 2, (l[n].area[1] + 5 + i - t.height / 2) * o)), + a.stroke(), + a.restore(); + } + a.restore(); +} +function drawFunnelDataPoints(e, t, i, a) { + let o = 4 < arguments.length && void 0 !== arguments[4] ? arguments[4] : 1, + n = assign( + {}, + { activeWidth: 10, activeOpacity: 0.3, border: !1, borderWidth: 2, borderColor: '#FFFFFF', fillOpacity: 1, labelAlign: 'right' }, + t.extra.funnel, + ), + l = (t.height - t.area[0] - t.area[2]) / e.length, + r = { x: t.area[3] + (t.width - t.area[1] - t.area[3]) / 2, y: t.height - t.area[2] }, + s = n.activeWidth, + d = Math.min((t.width - t.area[1] - t.area[3]) / 2 - s, (t.height - t.area[0] - t.area[2]) / 2 - s); + (e = getFunnelDataPoints(e, d, o)), a.save(), a.translate(r.x, r.y); + for (let o = 0; o < e.length; o++) + 0 == o + ? (t.tooltip && + t.tooltip.index == o && + (a.beginPath(), + a.setFillStyle(hexToRgb(e[o].color, n.activeOpacity)), + a.moveTo(-s, 0), + a.lineTo(-e[o].radius - s, -l), + a.lineTo(e[o].radius + s, -l), + a.lineTo(s, 0), + a.lineTo(-s, 0), + a.closePath(), + a.fill()), + (e[o].funnelArea = [r.x - e[o].radius, r.y - l, r.x + e[o].radius, r.y]), + a.beginPath(), + a.setLineWidth(n.borderWidth * t.pixelRatio), + a.setStrokeStyle(n.borderColor), + a.setFillStyle(hexToRgb(e[o].color, n.fillOpacity)), + a.moveTo(0, 0), + a.lineTo(-e[o].radius, -l), + a.lineTo(e[o].radius, -l), + a.lineTo(0, 0), + a.closePath(), + a.fill(), + !0 == n.border && a.stroke()) + : (t.tooltip && + t.tooltip.index == o && + (a.beginPath(), + a.setFillStyle(hexToRgb(e[o].color, n.activeOpacity)), + a.moveTo(0, 0), + a.lineTo(-e[o - 1].radius - s, 0), + a.lineTo(-e[o].radius - s, -l), + a.lineTo(e[o].radius + s, -l), + a.lineTo(e[o - 1].radius + s, 0), + a.lineTo(0, 0), + a.closePath(), + a.fill()), + (e[o].funnelArea = [r.x - e[o].radius, r.y - l * (o + 1), r.x + e[o].radius, r.y - l * o]), + a.beginPath(), + a.setLineWidth(n.borderWidth * t.pixelRatio), + a.setStrokeStyle(n.borderColor), + a.setFillStyle(hexToRgb(e[o].color, n.fillOpacity)), + a.moveTo(0, 0), + a.lineTo(-e[o - 1].radius, 0), + a.lineTo(-e[o].radius, -l), + a.lineTo(e[o].radius, -l), + a.lineTo(e[o - 1].radius, 0), + a.lineTo(0, 0), + a.closePath(), + a.fill(), + !0 == n.border && a.stroke()), + a.translate(0, -l); + return a.restore(), !1 !== t.dataLabel && 1 === o && drawFunnelText(e, t, a, l, n.labelAlign, s, r), { center: r, radius: d, series: e }; +} +function drawFunnelText(e, t, a, o, n, l, r) { + var s = Math.PI; + for (let d = 0; d < e.length; d++) { + let i, + h, + x, + c, + p = e[d], + g = p.format ? p.format(+p._proportion_.toFixed(2)) : util.toFixed(100 * p._proportion_) + '%'; + 'right' == n + ? ((i = 0 == d ? (p.funnelArea[2] + r.x) / 2 : (p.funnelArea[2] + e[d - 1].funnelArea[2]) / 2), + (h = i + 2 * l), + (x = p.funnelArea[1] + o / 2), + (c = p.textSize || t.fontSize), + a.setLineWidth(1 * t.pixelRatio), + a.setStrokeStyle(p.color), + a.setFillStyle(p.color), + a.beginPath(), + a.moveTo(i, x), + a.lineTo(h, x), + a.stroke(), + a.closePath(), + a.beginPath(), + a.moveTo(h, x), + a.arc(h, x, 2, 0, 2 * s), + a.closePath(), + a.fill(), + a.beginPath(), + a.setFontSize(c), + a.setFillStyle(p.textColor || '#666666'), + a.fillText(g, h + 5, x + c / 2 - 2), + a.closePath(), + a.stroke(), + a.closePath()) + : ((i = 0 == d ? (p.funnelArea[0] + r.x) / 2 : (p.funnelArea[0] + e[d - 1].funnelArea[0]) / 2), + (h = i - 2 * l), + (x = p.funnelArea[1] + o / 2), + (c = p.textSize || t.fontSize), + a.setLineWidth(1 * t.pixelRatio), + a.setStrokeStyle(p.color), + a.setFillStyle(p.color), + a.beginPath(), + a.moveTo(i, x), + a.lineTo(h, x), + a.stroke(), + a.closePath(), + a.beginPath(), + a.moveTo(h, x), + a.arc(h, x, 2, 0, 2 * s), + a.closePath(), + a.fill(), + a.beginPath(), + a.setFontSize(c), + a.setFillStyle(p.textColor || '#666666'), + a.fillText(g, h - 5 - measureText(g), x + c / 2 - 2), + a.closePath(), + a.stroke(), + a.closePath()); + } +} +function drawCanvas(e, t) { + t.draw(); +} +var Timing = { + easeIn: function (e) { + return Math.pow(e, 3); + }, + easeOut: function (e) { + return Math.pow(e - 1, 3) + 1; + }, + easeInOut: function (e) { + var t = Math.pow; + return 1 > (e /= 0.5) ? 0.5 * t(e, 3) : 0.5 * (t(e - 2, 3) + 2); + }, + linear: function (e) { + return e; + }, +}; +function Animation(e) { + (this.isStop = !1), (e.duration = 'undefined' == typeof e.duration ? 1e3 : e.duration), (e.timing = e.timing || 'linear'); + var t = (function () { + return 'undefined' == typeof setTimeout + ? 'undefined' == typeof requestAnimationFrame + ? function (e) { + e(null); + } + : requestAnimationFrame + : function (e, t) { + setTimeout(function () { + var t = +new Date(); + e(t); + }, t); + }; + })(), + i = null, + a = function (o) { + if (null === o || !0 === this.isStop) return e.onProcess && e.onProcess(1), void (e.onAnimationFinish && e.onAnimationFinish()); + if ((null === i && (i = o), o - i < e.duration)) { + var n = (o - i) / e.duration, + l = Timing[e.timing]; + (n = l(n)), e.onProcess && e.onProcess(n), t(a, 17); + } else e.onProcess && e.onProcess(1), e.onAnimationFinish && e.onAnimationFinish(); + }; + (a = a.bind(this)), t(a, 17); +} +Animation.prototype.stop = function () { + this.isStop = !0; +}; +function drawCharts(e, t, a, i) { + var o = this, + n = t.series, + l = t.categories; + n = fillSeries(n, t, a); + var r = t.animation ? t.duration : 0; + o.animationInstance && o.animationInstance.stop(); + var s = null; + if ('candle' == e) { + let e = assign({}, t.extra.candle.average); + e.show + ? ((s = calCandleMA(e.day, e.name, e.color, n[0].data)), (s = fillSeries(s, t, a)), (t.seriesMA = s)) + : t.seriesMA + ? (s = t.seriesMA = fillSeries(t.seriesMA, t, a)) + : (s = n); + } else s = n; + (t._series_ = n = filterSeries(n)), (t.area = [, , , ,]); + for (let o = 0; 4 > o; o++) t.area[o] = t.padding[o]; + var d = calLegendData(s, t, a, t.chartData), + h = d.area.wholeHeight, + x = d.area.wholeWidth; + switch (t.legend.position) { + case 'top': + t.area[0] += h; + break; + case 'bottom': + t.area[2] += h; + break; + case 'left': + t.area[3] += x; + break; + case 'right': + t.area[1] += x; + } + let c = {}, + p = 0; + if ('line' === t.type || 'column' === t.type || 'area' === t.type || 'mix' === t.type || 'candle' === t.type) { + if (((c = calYAxisData(n, t, a)), (p = c.yAxisWidth), t.yAxis.showTitle)) { + let e = 0; + for (let o = 0; o < t.yAxis.data.length; o++) + e = Math.max(e, t.yAxis.data[o].titleFontSize ? t.yAxis.data[o].titleFontSize : a.fontSize); + t.area[0] += (e + 6) * t.pixelRatio; + } + let e = 0, + o = 0; + for (let a = 0; a < p.length; a++) + 'left' == p[a].position + ? ((t.area[3] += 0 < o ? p[a].width + t.yAxis.padding : p[a].width), (o += 1)) + : ((t.area[1] += 0 < e ? p[a].width + t.yAxis.padding : p[a].width), (e += 1)); + } else a.yAxisWidth = p; + if (((t.chartData.yAxisData = c), t.categories && t.categories.length)) { + t.chartData.xAxisData = getXAxisPoints(t.categories, t, a); + let e = calCategoriesData(t.categories, t, a, t.chartData.xAxisData.eachSpacing), + i = e.xAxisHeight, + o = e.angle; + (a.xAxisHeight = i), (a._xAxisTextAngle_ = o), (t.area[2] += i), (t.chartData.categoriesData = e); + } else if ('line' === t.type || 'area' === t.type || 'points' === t.type) { + (t.chartData.xAxisData = calXAxisData(n, t, a)), (l = t.chartData.xAxisData.rangesFormat); + let e = calCategoriesData(l, t, a, t.chartData.xAxisData.eachSpacing), + i = e.xAxisHeight, + o = e.angle; + (a.xAxisHeight = i), (a._xAxisTextAngle_ = o), (t.area[2] += i), (t.chartData.categoriesData = e); + } else t.chartData.xAxisData = { xAxisPoints: [] }; + if (t.enableScroll && 'right' == t.xAxis.scrollAlign && void 0 === t._scrollDistance_) { + let e = 0, + i = t.chartData.xAxisData.xAxisPoints, + a = t.chartData.xAxisData.startX, + n = t.chartData.xAxisData.endX, + l = t.chartData.xAxisData.eachSpacing, + r = l * (i.length - 1); + (e = n - a - r), (o.scrollOption = { currentOffset: e, startTouchX: e, distance: 0, lastMoveTime: 0 }), (t._scrollDistance_ = e); + } + switch ((('pie' === e || 'ring' === e || 'rose' === e) && (a._pieTextMaxLength_ = !1 === t.dataLabel ? 0 : getPieTextMaxLength(s)), e)) { + case 'word': + let d = assign({}, { type: 'normal', autoColors: !0 }, t.extra.word); + (!0 == t.updateData || null == t.updateData) && (t.chartData.wordCloudData = getWordCloudPoint(t, d.type)), + (this.animationInstance = new Animation({ + timing: 'easeInOut', + duration: r, + onProcess: function (e) { + i.clearRect(0, 0, t.width, t.height), t.rotate && contextRotate(i, t), drawWordCloudDataPoints(n, t, a, i, e), drawCanvas(t, i); + }, + onAnimationFinish: function () { + o.event.trigger('renderComplete'); + }, + })); + break; + case 'map': + i.clearRect(0, 0, t.width, t.height), drawMapDataPoints(n, t, a, i); + break; + case 'funnel': + this.animationInstance = new Animation({ + timing: 'easeInOut', + duration: r, + onProcess: function (e) { + i.clearRect(0, 0, t.width, t.height), + t.rotate && contextRotate(i, t), + (t.chartData.funnelData = drawFunnelDataPoints(n, t, a, i, e)), + drawLegend(t.series, t, a, i, t.chartData), + drawToolTipBridge(t, a, i, e), + drawCanvas(t, i); + }, + onAnimationFinish: function () { + o.event.trigger('renderComplete'); + }, + }); + break; + case 'line': + this.animationInstance = new Animation({ + timing: 'easeIn', + duration: r, + onProcess: function (e) { + i.clearRect(0, 0, t.width, t.height), t.rotate && contextRotate(i, t), drawYAxisGrid(l, t, a, i), drawXAxis(l, t, a, i); + var o = drawLineDataPoints(n, t, a, i, e), + r = o.xAxisPoints, + s = o.calPoints, + d = o.eachSpacing; + (t.chartData.xAxisPoints = r), + (t.chartData.calPoints = s), + (t.chartData.eachSpacing = d), + drawYAxis(n, t, a, i), + !1 !== t.enableMarkLine && 1 === e && drawMarkLine(t, a, i), + drawLegend(t.series, t, a, i, t.chartData), + drawToolTipBridge(t, a, i, e, d, r), + drawCanvas(t, i); + }, + onAnimationFinish: function () { + o.event.trigger('renderComplete'); + }, + }); + break; + case 'mix': + this.animationInstance = new Animation({ + timing: 'easeIn', + duration: r, + onProcess: function (e) { + i.clearRect(0, 0, t.width, t.height), t.rotate && contextRotate(i, t), drawYAxisGrid(l, t, a, i), drawXAxis(l, t, a, i); + var o = drawMixDataPoints(n, t, a, i, e), + r = o.xAxisPoints, + s = o.calPoints, + d = o.eachSpacing; + (t.chartData.xAxisPoints = r), + (t.chartData.calPoints = s), + (t.chartData.eachSpacing = d), + drawYAxis(n, t, a, i), + !1 !== t.enableMarkLine && 1 === e && drawMarkLine(t, a, i), + drawLegend(t.series, t, a, i, t.chartData), + drawToolTipBridge(t, a, i, e, d, r), + drawCanvas(t, i); + }, + onAnimationFinish: function () { + o.event.trigger('renderComplete'); + }, + }); + break; + case 'column': + this.animationInstance = new Animation({ + timing: 'easeIn', + duration: r, + onProcess: function (e) { + i.clearRect(0, 0, t.width, t.height), t.rotate && contextRotate(i, t), drawYAxisGrid(l, t, a, i), drawXAxis(l, t, a, i); + var o = drawColumnDataPoints(n, t, a, i, e), + r = o.xAxisPoints, + s = o.calPoints, + d = o.eachSpacing; + (t.chartData.xAxisPoints = r), + (t.chartData.calPoints = s), + (t.chartData.eachSpacing = d), + drawYAxis(n, t, a, i), + !1 !== t.enableMarkLine && 1 === e && drawMarkLine(t, a, i), + drawLegend(t.series, t, a, i, t.chartData), + drawToolTipBridge(t, a, i, e, d, r), + drawCanvas(t, i); + }, + onAnimationFinish: function () { + o.event.trigger('renderComplete'); + }, + }); + break; + case 'area': + this.animationInstance = new Animation({ + timing: 'easeIn', + duration: r, + onProcess: function (e) { + i.clearRect(0, 0, t.width, t.height), t.rotate && contextRotate(i, t), drawYAxisGrid(l, t, a, i), drawXAxis(l, t, a, i); + var o = drawAreaDataPoints(n, t, a, i, e), + r = o.xAxisPoints, + s = o.calPoints, + d = o.eachSpacing; + (t.chartData.xAxisPoints = r), + (t.chartData.calPoints = s), + (t.chartData.eachSpacing = d), + drawYAxis(n, t, a, i), + !1 !== t.enableMarkLine && 1 === e && drawMarkLine(t, a, i), + drawLegend(t.series, t, a, i, t.chartData), + drawToolTipBridge(t, a, i, e, d, r), + drawCanvas(t, i); + }, + onAnimationFinish: function () { + o.event.trigger('renderComplete'); + }, + }); + break; + case 'ring': + case 'pie': + this.animationInstance = new Animation({ + timing: 'easeInOut', + duration: r, + onProcess: function (e) { + i.clearRect(0, 0, t.width, t.height), + t.rotate && contextRotate(i, t), + (t.chartData.pieData = drawPieDataPoints(n, t, a, i, e)), + drawLegend(t.series, t, a, i, t.chartData), + drawToolTipBridge(t, a, i, e), + drawCanvas(t, i); + }, + onAnimationFinish: function () { + o.event.trigger('renderComplete'); + }, + }); + break; + case 'rose': + this.animationInstance = new Animation({ + timing: 'easeInOut', + duration: r, + onProcess: function (e) { + i.clearRect(0, 0, t.width, t.height), + t.rotate && contextRotate(i, t), + (t.chartData.pieData = drawRoseDataPoints(n, t, a, i, e)), + drawLegend(t.series, t, a, i, t.chartData), + drawToolTipBridge(t, a, i, e), + drawCanvas(t, i); + }, + onAnimationFinish: function () { + o.event.trigger('renderComplete'); + }, + }); + break; + case 'radar': + this.animationInstance = new Animation({ + timing: 'easeInOut', + duration: r, + onProcess: function (e) { + i.clearRect(0, 0, t.width, t.height), + t.rotate && contextRotate(i, t), + (t.chartData.radarData = drawRadarDataPoints(n, t, a, i, e)), + drawLegend(t.series, t, a, i, t.chartData), + drawToolTipBridge(t, a, i, e), + drawCanvas(t, i); + }, + onAnimationFinish: function () { + o.event.trigger('renderComplete'); + }, + }); + break; + case 'arcbar': + this.animationInstance = new Animation({ + timing: 'easeInOut', + duration: r, + onProcess: function (e) { + i.clearRect(0, 0, t.width, t.height), + t.rotate && contextRotate(i, t), + (t.chartData.arcbarData = drawArcbarDataPoints(n, t, a, i, e)), + drawCanvas(t, i); + }, + onAnimationFinish: function () { + o.event.trigger('renderComplete'); + }, + }); + break; + case 'gauge': + this.animationInstance = new Animation({ + timing: 'easeInOut', + duration: r, + onProcess: function (e) { + i.clearRect(0, 0, t.width, t.height), + t.rotate && contextRotate(i, t), + (t.chartData.gaugeData = drawGaugeDataPoints(l, n, t, a, i, e)), + drawCanvas(t, i); + }, + onAnimationFinish: function () { + o.event.trigger('renderComplete'); + }, + }); + break; + case 'candle': + this.animationInstance = new Animation({ + timing: 'easeIn', + duration: r, + onProcess: function (e) { + i.clearRect(0, 0, t.width, t.height), t.rotate && contextRotate(i, t), drawYAxisGrid(l, t, a, i), drawXAxis(l, t, a, i); + var o = drawCandleDataPoints(n, s, t, a, i, e), + r = o.xAxisPoints, + d = o.calPoints, + h = o.eachSpacing; + (t.chartData.xAxisPoints = r), + (t.chartData.calPoints = d), + (t.chartData.eachSpacing = h), + drawYAxis(n, t, a, i), + !1 !== t.enableMarkLine && 1 === e && drawMarkLine(t, a, i), + s ? drawLegend(s, t, a, i, t.chartData) : drawLegend(t.series, t, a, i, t.chartData), + drawToolTipBridge(t, a, i, e, h, r), + drawCanvas(t, i); + }, + onAnimationFinish: function () { + o.event.trigger('renderComplete'); + }, + }); + } +} +function Event() { + this.events = {}; +} +(Event.prototype.addEventListener = function (e, t) { + (this.events[e] = this.events[e] || []), this.events[e].push(t); +}), + (Event.prototype.delEventListener = function (e) { + this.events[e] = []; + }), + (Event.prototype.trigger = function () { + for (var e = arguments.length, t = Array(e), i = 0; i < e; i++) t[i] = arguments[i]; + var a = t[0], + o = t.slice(1); + !this.events[a] || + this.events[a].forEach(function (e) { + try { + e.apply(null, o); + } catch (t) { + console.error(t); + } + }); + }); +var Charts = function (e) { + (e.pixelRatio = e.pixelRatio ? e.pixelRatio : 1), + (e.fontSize = e.fontSize ? e.fontSize * e.pixelRatio : 13 * e.pixelRatio), + (e.title = assign({}, e.title)), + (e.subtitle = assign({}, e.subtitle)), + (e.duration = e.duration ? e.duration : 1e3), + (e.yAxis = assign( + {}, + { + data: [], + showTitle: !1, + disabled: !1, + disableGrid: !1, + splitNumber: 5, + gridType: 'solid', + dashLength: 4 * e.pixelRatio, + gridColor: '#cccccc', + padding: 10, + fontColor: '#666666', + }, + e.yAxis, + )), + (e.yAxis.dashLength *= e.pixelRatio), + (e.yAxis.padding *= e.pixelRatio), + (e.xAxis = assign( + {}, + { + rotateLabel: !1, + type: 'calibration', + gridType: 'solid', + dashLength: 4, + scrollAlign: 'left', + boundaryGap: 'center', + axisLine: !0, + axisLineColor: '#cccccc', + }, + e.xAxis, + )), + (e.xAxis.dashLength *= e.pixelRatio), + (e.legend = assign( + {}, + { + show: !0, + position: 'bottom', + float: 'center', + backgroundColor: 'rgba(0,0,0,0)', + borderColor: 'rgba(0,0,0,0)', + borderWidth: 0, + padding: 5, + margin: 5, + itemGap: 10, + fontSize: e.fontSize, + lineHeight: e.fontSize, + fontColor: '#333333', + format: {}, + hiddenColor: '#CECECE', + }, + e.legend, + )), + (e.legend.borderWidth *= e.pixelRatio), + (e.legend.itemGap *= e.pixelRatio), + (e.legend.padding *= e.pixelRatio), + (e.legend.margin *= e.pixelRatio), + (e.extra = assign({}, e.extra)), + (e.rotate = !!e.rotate), + (e.animation = !!e.animation), + (e.rotate = !!e.rotate), + (e.canvas2d = !!e.canvas2d); + let t = JSON.parse(JSON.stringify(config)); + if ( + ((t.colors = e.colors ? e.colors : t.colors), + (t.yAxisTitleWidth = !0 !== e.yAxis.disabled && e.yAxis.title ? t.yAxisTitleWidth : 0), + ('pie' == e.type || 'ring' == e.type) && + (t.pieChartLinePadding = !1 === e.dataLabel ? 0 : e.extra.pie.labelWidth * e.pixelRatio || t.pieChartLinePadding * e.pixelRatio), + 'rose' == e.type && + (t.pieChartLinePadding = !1 === e.dataLabel ? 0 : e.extra.rose.labelWidth * e.pixelRatio || t.pieChartLinePadding * e.pixelRatio), + (t.pieChartTextPadding = !1 === e.dataLabel ? 0 : t.pieChartTextPadding * e.pixelRatio), + (t.yAxisSplit = e.yAxis.splitNumber ? e.yAxis.splitNumber : config.yAxisSplit), + (t.rotate = e.rotate), + e.rotate) + ) { + let t = e.width, + i = e.height; + (e.width = i), (e.height = t); + } + e.padding = e.padding ? e.padding : t.padding; + for (let t = 0; 4 > t; t++) e.padding[t] *= e.pixelRatio; + (t.yAxisWidth = config.yAxisWidth * e.pixelRatio), + (t.xAxisHeight = config.xAxisHeight * e.pixelRatio), + e.enableScroll && e.xAxis.scrollShow && (t.xAxisHeight += 6 * e.pixelRatio), + (t.xAxisLineHeight = config.xAxisLineHeight * e.pixelRatio), + (t.fontSize = e.fontSize), + (t.titleFontSize = config.titleFontSize * e.pixelRatio), + (t.subtitleFontSize = config.subtitleFontSize * e.pixelRatio), + (t.toolTipPadding = config.toolTipPadding * e.pixelRatio), + (t.toolTipLineHeight = config.toolTipLineHeight * e.pixelRatio), + (t.columePadding = config.columePadding * e.pixelRatio), + (this.context = e.context ? e.context : uni.createCanvasContext(e.canvasId, e.$this)), + e.canvas2d && + ((this.context.setStrokeStyle = function (t) { + return (this.strokeStyle = t); + }), + (this.context.setLineWidth = function (t) { + return (this.lineWidth = t); + }), + (this.context.setLineCap = function (t) { + return (this.lineCap = t); + }), + (this.context.setFontSize = function (t) { + return (this.font = t + 'px sans-serif'); + }), + (this.context.setFillStyle = function (t) { + return (this.fillStyle = t); + }), + (this.context.draw = function () {})), + (e.chartData = {}), + (this.event = new Event()), + (this.scrollOption = { currentOffset: 0, startTouchX: 0, distance: 0, lastMoveTime: 0 }), + (this.opts = e), + (this.config = t), + drawCharts.call(this, e.type, e, t, this.context); +}; +(Charts.prototype.updateData = function () { + let e = 0 < arguments.length && arguments[0] !== void 0 ? arguments[0] : {}; + (this.opts = assign({}, this.opts, e)), (this.opts.updateData = !0); + let t = e.scrollPosition || 'current'; + switch (t) { + case 'current': + this.opts._scrollDistance_ = this.scrollOption.currentOffset; + break; + case 'left': + (this.opts._scrollDistance_ = 0), (this.scrollOption = { currentOffset: 0, startTouchX: 0, distance: 0, lastMoveTime: 0 }); + break; + case 'right': + let e = calYAxisData(this.opts.series, this.opts, this.config), + i = e.yAxisWidth; + this.config.yAxisWidth = i; + let a = 0, + o = getXAxisPoints(this.opts.categories, this.opts, this.config), + n = o.xAxisPoints, + l = o.startX, + r = o.endX, + s = o.eachSpacing, + d = s * (n.length - 1); + (a = r - l - d), + (this.scrollOption = { currentOffset: a, startTouchX: a, distance: 0, lastMoveTime: 0 }), + (this.opts._scrollDistance_ = a); + } + drawCharts.call(this, this.opts.type, this.opts, this.config, this.context); +}), + (Charts.prototype.zoom = function () { + var e = Math.round, + t = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : this.opts.xAxis.itemCount; + if (!0 !== this.opts.enableScroll) return void console.log('\u8BF7\u542F\u7528\u6EDA\u52A8\u6761\u540E\u4F7F\u7528\uFF01'); + let i = e(Math.abs(this.scrollOption.currentOffset) / this.opts.chartData.eachSpacing) + e(this.opts.xAxis.itemCount / 2); + (this.opts.animation = !1), (this.opts.xAxis.itemCount = t.itemCount); + let a = calYAxisData(this.opts.series, this.opts, this.config), + o = a.yAxisWidth; + this.config.yAxisWidth = o; + let n = 0, + l = getXAxisPoints(this.opts.categories, this.opts, this.config), + r = l.xAxisPoints, + s = l.startX, + d = l.endX, + h = l.eachSpacing, + x = d - s, + c = x - h * (r.length - 1); + (n = x / 2 - h * i), + 0 < n && (n = 0), + n < c && (n = c), + (this.scrollOption = { currentOffset: n, startTouchX: n, distance: 0, lastMoveTime: 0 }), + (this.opts._scrollDistance_ = n), + drawCharts.call(this, this.opts.type, this.opts, this.config, this.context); + }), + (Charts.prototype.stopAnimation = function () { + this.animationInstance && this.animationInstance.stop(); + }), + (Charts.prototype.addEventListener = function (e, t) { + this.event.addEventListener(e, t); + }), + (Charts.prototype.delEventListener = function (e) { + this.event.delEventListener(e); + }), + (Charts.prototype.getCurrentDataIndex = function (t) { + var e = null; + if (((e = t.changedTouches ? t.changedTouches[0] : t.mp.changedTouches[0]), e)) { + let i = getTouches(e, this.opts, t); + return 'pie' === this.opts.type || 'ring' === this.opts.type || 'rose' === this.opts.type + ? findPieChartCurrentIndex({ x: i.x, y: i.y }, this.opts.chartData.pieData) + : 'radar' === this.opts.type + ? findRadarChartCurrentIndex({ x: i.x, y: i.y }, this.opts.chartData.radarData, this.opts.categories.length) + : 'funnel' === this.opts.type + ? findFunnelChartCurrentIndex({ x: i.x, y: i.y }, this.opts.chartData.funnelData) + : 'map' === this.opts.type + ? findMapChartCurrentIndex({ x: i.x, y: i.y }, this.opts) + : 'word' === this.opts.type + ? findWordChartCurrentIndex({ x: i.x, y: i.y }, this.opts.chartData.wordCloudData) + : findCurrentIndex( + { x: i.x, y: i.y }, + this.opts.chartData.calPoints, + this.opts, + this.config, + Math.abs(this.scrollOption.currentOffset), + ); + } + return -1; + }), + (Charts.prototype.getLegendDataIndex = function (t) { + var e = null; + if (((e = t.changedTouches ? t.changedTouches[0] : t.mp.changedTouches[0]), e)) { + let i = getTouches(e, this.opts, t); + return findLegendIndex({ x: i.x, y: i.y }, this.opts.chartData.legendData); + } + return -1; + }), + (Charts.prototype.touchLegend = function (t) { + var e = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : {}, + i = null; + if (((i = t.changedTouches ? t.changedTouches[0] : t.mp.changedTouches[0]), i)) { + var a = getTouches(i, this.opts, t), + o = this.getLegendDataIndex(t); + 0 <= o && + ((this.opts.series[o].show = !this.opts.series[o].show), + (this.opts.animation = !!e.animation), + (this.opts._scrollDistance_ = this.scrollOption.currentOffset), + drawCharts.call(this, this.opts.type, this.opts, this.config, this.context)); + } + }), + (Charts.prototype.showToolTip = function (t) { + var e = 1 < arguments.length && arguments[1] !== void 0 ? arguments[1] : {}, + i = null; + (i = t.changedTouches ? t.changedTouches[0] : t.mp.changedTouches[0]), i || console.log('touchError'); + var a = getTouches(i, this.opts, t), + o = this.scrollOption.currentOffset, + n = assign({}, this.opts, { _scrollDistance_: o, animation: !1 }); + if ('line' === this.opts.type || 'area' === this.opts.type || 'column' === this.opts.type) { + var l = e.index == null ? this.getCurrentDataIndex(t) : e.index; + if (-1 < l) { + var r = getSeriesDataItem(this.opts.series, l); + if (0 !== r.length) { + var s = getToolTipData(r, this.opts.chartData.calPoints, l, this.opts.categories, e), + d = s.textList, + h = s.offset; + (h.y = a.y), (n.tooltip = { textList: e.textList ? e.textList : d, offset: h, option: e, index: l }); + } + } + drawCharts.call(this, n.type, n, this.config, this.context); + } + if ('mix' === this.opts.type) { + var l = null == e.index ? this.getCurrentDataIndex(t) : e.index; + if (-1 < l) { + var o = this.scrollOption.currentOffset, + n = assign({}, this.opts, { _scrollDistance_: o, animation: !1 }), + r = getSeriesDataItem(this.opts.series, l); + if (0 !== r.length) { + var x = getMixToolTipData(r, this.opts.chartData.calPoints, l, this.opts.categories, e), + d = x.textList, + h = x.offset; + (h.y = a.y), (n.tooltip = { textList: e.textList ? e.textList : d, offset: h, option: e, index: l }); + } + } + drawCharts.call(this, n.type, n, this.config, this.context); + } + if ('candle' === this.opts.type) { + var l = null == e.index ? this.getCurrentDataIndex(t) : e.index; + if (-1 < l) { + var o = this.scrollOption.currentOffset, + n = assign({}, this.opts, { _scrollDistance_: o, animation: !1 }), + r = getSeriesDataItem(this.opts.series, l); + if (0 !== r.length) { + var s = getCandleToolTipData( + this.opts.series[0].data, + r, + this.opts.chartData.calPoints, + l, + this.opts.categories, + this.opts.extra.candle, + e, + ), + d = s.textList, + h = s.offset; + (h.y = a.y), (n.tooltip = { textList: e.textList ? e.textList : d, offset: h, option: e, index: l }); + } + } + drawCharts.call(this, n.type, n, this.config, this.context); + } + if ('pie' === this.opts.type || 'ring' === this.opts.type || 'rose' === this.opts.type || 'funnel' === this.opts.type) { + var l = null == e.index ? this.getCurrentDataIndex(t) : e.index; + if (-1 < l) { + var o = this.scrollOption.currentOffset, + n = assign({}, this.opts, { _scrollDistance_: o, animation: !1 }), + r = this.opts._series_[l], + d = [{ text: e.format ? e.format(r) : r.name + ': ' + r.data, color: r.color }], + h = { x: a.x, y: a.y }; + n.tooltip = { textList: e.textList ? e.textList : d, offset: h, option: e, index: l }; + } + drawCharts.call(this, n.type, n, this.config, this.context); + } + if ('map' === this.opts.type || 'word' === this.opts.type) { + var l = null == e.index ? this.getCurrentDataIndex(t) : e.index; + if (-1 < l) { + var o = this.scrollOption.currentOffset, + n = assign({}, this.opts, { _scrollDistance_: o, animation: !1 }), + r = this.opts._series_[l], + d = [{ text: e.format ? e.format(r) : r.properties.name, color: r.color }], + h = { x: a.x, y: a.y }; + n.tooltip = { textList: e.textList ? e.textList : d, offset: h, option: e, index: l }; + } + (n.updateData = !1), drawCharts.call(this, n.type, n, this.config, this.context); + } + if ('radar' === this.opts.type) { + var l = null == e.index ? this.getCurrentDataIndex(t) : e.index; + if (-1 < l) { + var o = this.scrollOption.currentOffset, + n = assign({}, this.opts, { _scrollDistance_: o, animation: !1 }), + r = getSeriesDataItem(this.opts.series, l); + if (0 !== r.length) { + var d = r.map(function (t) { + return { text: e.format ? e.format(t) : t.name + ': ' + t.data, color: t.color }; + }), + h = { x: a.x, y: a.y }; + n.tooltip = { textList: e.textList ? e.textList : d, offset: h, option: e, index: l }; + } + } + drawCharts.call(this, n.type, n, this.config, this.context); + } + }), + (Charts.prototype.translate = function (e) { + this.scrollOption = { currentOffset: e, startTouchX: e, distance: 0, lastMoveTime: 0 }; + let t = assign({}, this.opts, { _scrollDistance_: e, animation: !1 }); + drawCharts.call(this, this.opts.type, t, this.config, this.context); + }), + (Charts.prototype.scrollStart = function (t) { + var e = null; + e = t.changedTouches ? t.changedTouches[0] : t.mp.changedTouches[0]; + var i = getTouches(e, this.opts, t); + e && !0 === this.opts.enableScroll && (this.scrollOption.startTouchX = i.x); + }), + (Charts.prototype.scroll = function (t) { + 0 === this.scrollOption.lastMoveTime && (this.scrollOption.lastMoveTime = Date.now()); + let e = this.opts.extra.touchMoveLimit || 20, + i = Date.now(), + a = i - this.scrollOption.lastMoveTime; + if (!(a < Math.floor(1e3 / e))) { + this.scrollOption.lastMoveTime = i; + var o = null; + if (((o = t.changedTouches ? t.changedTouches[0] : t.mp.changedTouches[0]), o && !0 === this.opts.enableScroll)) { + var n, + l = getTouches(o, this.opts, t); + n = l.x - this.scrollOption.startTouchX; + var r = this.scrollOption.currentOffset, + s = calValidDistance(this, r + n, this.opts.chartData, this.config, this.opts); + this.scrollOption.distance = n = s - r; + var d = assign({}, this.opts, { _scrollDistance_: r + n, animation: !1 }); + return drawCharts.call(this, d.type, d, this.config, this.context), r + n; + } + } + }), + (Charts.prototype.scrollEnd = function () { + if (!0 === this.opts.enableScroll) { + var e = this.scrollOption, + t = e.currentOffset, + i = e.distance; + (this.scrollOption.currentOffset = t + i), (this.scrollOption.distance = 0); + } + }), + 'object' == typeof module && 'object' == typeof module.exports && (module.exports = Charts); diff --git a/src/components/Evaluated/EvaluatedNLCP.vue b/src/components/Evaluated/EvaluatedNLCP.vue index 15d6ef7..3a7c706 100644 --- a/src/components/Evaluated/EvaluatedNLCP.vue +++ b/src/components/Evaluated/EvaluatedNLCP.vue @@ -1,20 +1,32 @@ @@ -23,7 +35,52 @@ export default { props: { task: { type: Object, default: null } }, data() { - return {}; + return { + cWidth: '', + cHeight: '', + obj: {}, + }; + }, + + mounted() { + this.$nextTick(() => { + const query = uni.createSelectorQuery().in(this); + query + .selectAll('.charts-box') + .boundingClientRect(data => { + this.cWidth = data[0].width; + }) + .exec(); + + this.cHeight = uni.upx2px(400); + this.getData(); + }); + }, + + methods: { + // 生成雷达图参数 + getData() { + const { attentionNum, countNum, directionNum, expressNum, logicNum, memoryNum, viewNum } = this.task.data.mentalTest; + let radarA = { + categories: [ + `注意力${attentionNum}`, + `计算能力${countNum}`, + `定向力${directionNum}`, + `语言能力${expressNum}`, + `逻辑执行${logicNum}`, + `记忆力${memoryNum}`, + `视空间${viewNum}`, + ], + series: [{ data: [attentionNum, countNum, directionNum, expressNum, logicNum, memoryNum, viewNum] }], + }; + + this.obj = { + opts: radarA, + chartType: 'radar', + id: 'aaaa', + max: 1, + }; + }, }, }; diff --git a/src/components/EvaluationChart/EvaluationChart.vue b/src/components/EvaluationChart/EvaluationChart.vue deleted file mode 100644 index e9ee2c7..0000000 --- a/src/components/EvaluationChart/EvaluationChart.vue +++ /dev/null @@ -1,65 +0,0 @@ - - - - - diff --git a/src/components/UCharts/UCharts.vue b/src/components/UCharts/UCharts.vue new file mode 100644 index 0000000..ef96e64 --- /dev/null +++ b/src/components/UCharts/UCharts.vue @@ -0,0 +1,130 @@ + + + + +