From e1c27f8a1fa128c0c5671759f5980ee7047f28ed Mon Sep 17 00:00:00 2001 From: xpz2018 <107107461@qq.com> Date: Mon, 30 Aug 2021 15:37:14 +0800 Subject: [PATCH] no message --- xtends/libs/u-charts.js | 163 +++++++++++++++++++++++++++++----------- 1 file changed, 118 insertions(+), 45 deletions(-) diff --git a/xtends/libs/u-charts.js b/xtends/libs/u-charts.js index 9a364e2..3cd3af2 100644 --- a/xtends/libs/u-charts.js +++ b/xtends/libs/u-charts.js @@ -19,7 +19,7 @@ 'use strict'; var config = { - version: 'v2.2.0-20210529', + version: 'v2.3.3-20210706', yAxisWidth: 15, yAxisSplit: 5, xAxisHeight: 22, @@ -471,7 +471,7 @@ function getDataRange(minData, maxData) { function measureText(text, fontSize, context) { var width = 0; text = String(text); - // #ifdef MP-ALIPAY || MP-BAIDU + // #ifdef MP-ALIPAY || MP-BAIDU || APP-NVUE context = false; // #endif if (context !== false && context !== undefined && context.setFontSize && context.measureText) { @@ -920,6 +920,9 @@ function findRoseChartCurrentIndex(currentPoints, pieData, opts) { if (pieData && pieData.center && isInExactPieChartArea(currentPoints, pieData.center, pieData.radius)) { var angle = Math.atan2(pieData.center.y - currentPoints.y, currentPoints.x - pieData.center.x); angle = -angle; + if(opts.extra.rose && opts.extra.rose.offsetAngle){ + angle = angle - opts.extra.rose.offsetAngle * Math.PI / 180; + } for (var i = 0, len = series.length; i < len; i++) { if (isInAngleRange(angle, series[i]._start_, series[i]._start_ + series[i]._rose_proportion_ * 2 * Math.PI)) { currentIndex = i; @@ -930,12 +933,18 @@ function findRoseChartCurrentIndex(currentPoints, pieData, opts) { return currentIndex; } -function findPieChartCurrentIndex(currentPoints, pieData) { +function findPieChartCurrentIndex(currentPoints, pieData, opts) { var currentIndex = -1; var series = getPieDataPoints(pieData.series); if (pieData && pieData.center && isInExactPieChartArea(currentPoints, pieData.center, pieData.radius)) { var angle = Math.atan2(pieData.center.y - currentPoints.y, currentPoints.x - pieData.center.x); angle = -angle; + if(opts.extra.pie && opts.extra.pie.offsetAngle){ + angle = angle - opts.extra.pie.offsetAngle * Math.PI / 180; + } + if(opts.extra.ring && opts.extra.ring.offsetAngle){ + angle = angle - opts.extra.ring.offsetAngle * Math.PI / 180; + } for (var i = 0, len = series.length; i < len; i++) { if (isInAngleRange(angle, series[i]._start_, series[i]._start_ + series[i]._proportion_ * 2 * Math.PI)) { currentIndex = i; @@ -1269,6 +1278,7 @@ function getRadarDataPoints(angleList, center, radius, series, opts) { let tmp = {}; tmp.angle = angleList[index]; tmp.proportion = item / maxData; + tmp.value = item; tmp.position = convertCoordinateOrigin(radius * tmp.proportion * process * Math.cos(tmp.angle), radius * tmp.proportion * process * Math.sin(tmp.angle), center); listItem.data.push(tmp); }); @@ -1813,8 +1823,8 @@ function getYAxisTextList(series, opts, config, stack, yData) { maxData += rangeSpan; } var dataRange = getDataRange(minData, maxData); - var minRange = yData.min === undefined ? dataRange.minRange : yData.min; - var maxRange = yData.max === undefined ? dataRange.maxRange : yData.max; + var minRange = yData.min === undefined || yData.min === null ? dataRange.minRange : yData.min; + var maxRange = yData.max === undefined || yData.min === null ? dataRange.maxRange : yData.max; var range = []; var eachRange = (maxRange - minRange) / opts.yAxis.splitNumber; for (var i = 0; i <= opts.yAxis.splitNumber; i++) { @@ -1942,7 +1952,7 @@ function calTooltipYAxisData(point, series, opts, config, eachSpacing) { let maxVal = ranges[i].shift(); let minVal = ranges[i].pop(); let item = maxVal - (maxVal - minVal) * (point - minAxis) / spacingValid; - item = opts.yAxis.data[i].formatter ? opts.yAxis.data[i].formatter(Number(item)) : item.toFixed(0); + item = opts.yAxis.data[i].formatter ? opts.yAxis.data[i].formatter(item) : item.toFixed(0); items.push(String(item)) } return items; @@ -2350,7 +2360,7 @@ function drawMarkLine(opts, config, context) { context.stroke(); context.setLineDash([]); if (item.showLabel) { - let labelText = opts.yAxis.formatter ? opts.yAxis.formatter(Number(item.value)) : item.value; + let labelText = opts.yAxis.formatter ? opts.yAxis.formatter(item.value) : item.value; context.setFontSize(config.fontSize); let textWidth = measureText(labelText, config.fontSize, context); let yAxisWidth = opts.chartData.yAxisData.yAxisWidth[0].width; @@ -2659,18 +2669,11 @@ function drawColumnDataPoints(series, opts, config, context) { columnOption.barBorderRadius = [width / 2, width / 2, 0, 0]; } let [r0, r1, r2, r3] = columnOption.barBorderRadius; - if (r0 + r2 > height) { - r0 = height; - r2 = 0; - r1 = height; - r3 = 0; - } - if (r0 + r2 > width / 2) { - r0 = width / 2; - r2 = 0; - r1 = width / 2; - r3 = 0; - } + let minRadius = Math.min(width/2,height/2); + r0 = r0 > minRadius ? minRadius : r0; + r1 = r1 > minRadius ? minRadius : r1; + r2 = r2 > minRadius ? minRadius : r2; + r3 = r3 > minRadius ? minRadius : r3; r0 = r0 < 0 ? 0 : r0; r1 = r1 < 0 ? 0 : r1; r2 = r2 < 0 ? 0 : r2; @@ -2733,19 +2736,43 @@ function drawColumnDataPoints(series, opts, config, context) { context.setFillStyle(columnOption.meterFillColor); var startX = item.x - item.width / 2; var height = opts.height - item.y - opts.area[2]; - context.moveTo(startX, item.y); - context.fillRect(startX, item.y, item.width, height); - context.closePath(); - context.fill(); + if (columnOption.barBorderCircle) { + var barBorderRadius = (item.width - columnOption.meterBorder*2) / 2; + if(barBorderRadius>height){ + barBorderRadius = height; + } + context.moveTo(startX + columnOption.meterBorder, opts.height - opts.area[2]); + context.lineTo(startX + columnOption.meterBorder, item.y + barBorderRadius); + context.arc(startX + item.width/2, item.y + barBorderRadius, barBorderRadius, -Math.PI, 0); + context.lineTo(startX + item.width - columnOption.meterBorder , opts.height - opts.area[2]); + context.lineTo(startX, opts.height - opts.area[2]); + context.fill(); + }else{ + context.moveTo(startX, item.y); + context.fillRect(startX, item.y, item.width, height); + context.closePath(); + context.fill(); + } //画边框线 if (columnOption.meterBorder > 0) { context.beginPath(); context.setStrokeStyle(eachSeries.color); context.setLineWidth(columnOption.meterBorder * opts.pix); - context.moveTo(startX + columnOption.meterBorder * 0.5, item.y + height); - context.lineTo(startX + columnOption.meterBorder * 0.5, item.y + columnOption.meterBorder * 0.5); - context.lineTo(startX + item.width - columnOption.meterBorder * 0.5, item.y + columnOption.meterBorder * 0.5); - context.lineTo(startX + item.width - columnOption.meterBorder * 0.5, item.y + height); + if (columnOption.barBorderCircle) { + var barBorderRadius = (item.width - columnOption.meterBorder)/ 2; + if(barBorderRadius>height){ + barBorderRadius = height; + } + context.moveTo(startX + columnOption.meterBorder * 0.5, opts.height - opts.area[2]); + context.lineTo(startX + columnOption.meterBorder * 0.5, item.y + barBorderRadius); + context.arc(startX + item.width/2, item.y + barBorderRadius - columnOption.meterBorder * 0.5, barBorderRadius, -Math.PI, 0); + context.lineTo(startX + item.width - columnOption.meterBorder * 0.5, opts.height - opts.area[2]); + }else{ + context.moveTo(startX + columnOption.meterBorder * 0.5, item.y + height); + context.lineTo(startX + columnOption.meterBorder * 0.5, item.y + columnOption.meterBorder * 0.5); + context.lineTo(startX + item.width - columnOption.meterBorder * 0.5, item.y + columnOption.meterBorder * 0.5); + context.lineTo(startX + item.width - columnOption.meterBorder * 0.5, item.y + height); + } context.stroke(); } } @@ -2758,10 +2785,23 @@ function drawColumnDataPoints(series, opts, config, context) { context.setFillStyle(item.color || eachSeries.color); var startX = item.x - item.width / 2; var height = opts.height - item.y - opts.area[2]; - context.moveTo(startX, item.y); - context.fillRect(startX, item.y, item.width, height); - context.closePath(); - context.fill(); + if (columnOption.barBorderCircle) { + var barBorderRadius = item.width / 2; + if(barBorderRadius>height){ + barBorderRadius = height; + } + context.moveTo(startX, opts.height - opts.area[2]); + context.arc(startX + barBorderRadius, item.y + barBorderRadius, barBorderRadius, -Math.PI, -Math.PI / 2); + context.arc(startX + item.width - barBorderRadius, item.y + barBorderRadius, barBorderRadius, -Math.PI / 2, 0); + context.lineTo(startX + item.width, opts.height - opts.area[2]); + context.lineTo(startX, opts.height - opts.area[2]); + context.fill(); + }else{ + context.moveTo(startX, item.y); + context.fillRect(startX, item.y, item.width, height); + context.closePath(); + context.fill(); + } } }; } @@ -3617,18 +3657,11 @@ function drawMixDataPoints(series, opts, config, context) { columnOption.barBorderRadius = [width / 2, width / 2, 0, 0]; } let [r0, r1, r2, r3] = columnOption.barBorderRadius; - if (r0 + r2 > height) { - r0 = height; - r2 = 0; - r1 = height; - r3 = 0; - } - if (r0 + r2 > width / 2) { - r0 = width / 2; - r2 = 0; - r1 = width / 2; - r3 = 0; - } + let minRadius = Math.min(width/2,height/2); + r0 = r0 > minRadius ? minRadius : r0; + r1 = r1 > minRadius ? minRadius : r1; + r2 = r2 > minRadius ? minRadius : r2; + r3 = r3 > minRadius ? minRadius : r3; r0 = r0 < 0 ? 0 : r0; r1 = r1 < 0 ? 0 : r1; r2 = r2 < 0 ? 0 : r2; @@ -3935,7 +3968,7 @@ function drawXAxis(categories, opts, config, context) { }); } else { newCategories.forEach(function(item, index) { - var xitem = opts.xAxis.formatter ? opts.xAxis.formatter(Number(item)) : item; + var xitem = opts.xAxis.formatter ? opts.xAxis.formatter(item) : item; context.save(); context.beginPath(); context.setFontSize(xAxisFontSize); @@ -4855,6 +4888,42 @@ function drawRadarDataPoints(series, opts, config, context) { }); // draw label text drawRadarLabel(coordinateAngle, radius, centerPosition, opts, config, context); + + // draw dataLabel + if (opts.dataLabel !== false && process === 1) { + radarDataPoints.forEach(function(eachSeries, seriesIndex) { + context.beginPath(); + var fontSize = eachSeries.textSize * opts.pix || config.fontSize; + context.setFontSize(fontSize); + context.setFillStyle(eachSeries.textColor || opts.fontColor); + eachSeries.data.forEach(function(item, index) { + //如果是中心点垂直的上下点位 + if(Math.abs(item.position.x - centerPosition.x)<2){ + //如果在上面 + if(item.position.y < centerPosition.y){ + context.setTextAlign('center'); + context.fillText(item.value, item.position.x, item.position.y - 4); + }else{ + context.setTextAlign('center'); + context.fillText(item.value, item.position.x, item.position.y + fontSize + 2); + } + }else{ + //如果在左侧 + if(item.position.x < centerPosition.x){ + context.setTextAlign('right'); + context.fillText(item.value, item.position.x - 4, item.position.y + fontSize / 2 - 2); + }else{ + context.setTextAlign('left'); + context.fillText(item.value, item.position.x + 4, item.position.y + fontSize / 2 - 2); + } + } + }); + context.closePath(); + context.stroke(); + }); + context.setTextAlign('left'); + } + return { center: centerPosition, radius: radius, @@ -6259,6 +6328,10 @@ var uCharts = function uCharts(opts) { } this.context.draw = function() {} } + //兼容NVUEsetLineDash + if(!this.context.setLineDash){ + this.context.setLineDash = function(e) {} + } opts.chartData = {}; this.uevent = new uChartsEvent(); this.scrollOption = { @@ -6378,7 +6451,7 @@ uCharts.prototype.getCurrentDataIndex = function(e) { return findPieChartCurrentIndex({ x: _touches$.x, y: _touches$.y - }, this.opts.chartData.pieData); + }, this.opts.chartData.pieData, this.opts); } else if (this.opts.type === 'rose') { return findRoseChartCurrentIndex({ x: _touches$.x,