
<script lang="ts" setup>
bus.on('sendReportData', (res: any) => {
const otherScoreList = (res.reportTeamIndexScoreBoList || []).map((item: any) => item.otherScore);
const selfScoreList = (res.reportTeamIndexScoreBoList || []).map((item: any) => item.selfScore);
const maxScore = Math.max(...otherScoreList, ...selfScoreList);
const multiple = maxScore;
let mW = 700;
let mH = 500;
let otherScoreData = <any>[];
let selfScoreData = <any>[];
res.reportTeamIndexScoreBoList.forEach((item: any) => {
otherScoreData.push([item.indicatorName, item.otherScore]);
selfScoreData.push([item.indicatorName, item.selfScore]);
});
console.log('otherScoreData:', otherScoreData);
console.log('selfScoreData:', selfScoreData);
let mCount = otherScoreData.length;
let xCenter = mW / 2;
let yCenter = mH / 2;
let mRadius = xCenter - 180;
let mAngle = (Math.PI * 2) / mCount;
let mCtx = <any>null;
let mColorPolygon = 'rgba(184, 184, 184, 0.7)';
let mColorLines = '#B8B8B8';
let mColorText = '#000000';
(function () {
var canvas = <any>document.getElementById('canvasDom');
canvas.height = mH;
canvas.width = mW;
mCtx = canvas.getContext('2d');
drawPolygon(mCtx);
drawPolygon2(mCtx);
drawLines(mCtx);
drawText(mCtx);
drawCircle(mCtx);
drawCircleLines(mCtx);
drawCircleData(mCtx);
drawCircle2(mCtx);
drawCircleLines2(mCtx);
drawCircleData2(mCtx);
})();
function drawPolygon(ctx: CanvasRenderingContext2D) {
ctx.save();
ctx.strokeStyle = mColorPolygon;
var r = mRadius / mCount + 23;
for (var i = 0; i < 3; i++) {
ctx.beginPath();
var currR = r * (i + 1);
for (var j = 0; j < mCount; j++) {
var x = xCenter + currR * Math.cos(mAngle * j);
var y = yCenter + currR * Math.sin(mAngle * j);
ctx.setLineDash([3]);
ctx.lineTo(x, y);
}
ctx.closePath();
ctx.stroke();
}
ctx.restore();
}
function drawPolygon2(ctx: CanvasRenderingContext2D) {
ctx.save();
ctx.beginPath();
for (var i = 0; i < mCount; i++) {
var x = xCenter + mRadius * Math.cos(mAngle * i);
var y = yCenter + mRadius * Math.sin(mAngle * i);
ctx.lineTo(x, y);
}
ctx.closePath();
ctx.strokeStyle = mColorPolygon;
ctx.stroke();
ctx.restore();
}
function drawLines(ctx: CanvasRenderingContext2D) {
ctx.save();
ctx.beginPath();
ctx.strokeStyle = mColorLines;
for (var i = 0; i < mCount; i++) {
var x = xCenter + mRadius * Math.cos(mAngle * i);
var y = yCenter + mRadius * Math.sin(mAngle * i);
ctx.moveTo(xCenter, yCenter);
ctx.lineTo(x, y);
}
ctx.strokeStyle = 'rgba(184, 184, 184, 0.5)';
ctx.stroke();
ctx.restore();
}
function drawText(ctx: CanvasRenderingContext2D) {
ctx.save();
var fontSize = 18;
ctx.font = fontSize + 'px Microsoft Yahei';
ctx.fillStyle = mColorText;
for (var i = 0; i < mCount; i++) {
var x = xCenter + mRadius * Math.cos(mAngle * i);
var y = yCenter + mRadius * Math.sin(mAngle * i);
if (mAngle * i >= 0 && mAngle * i <= Math.PI / 2) {
ctx.fillText(otherScoreData[i][0], x + 10, y + 20);
} else if (mAngle * i > Math.PI / 2 && mAngle * i <= Math.PI) {
ctx.fillText(otherScoreData[i][0], x - ctx.measureText(otherScoreData[i][0]).width, y + 25);
} else if (mAngle * i > Math.PI && mAngle * i <= (Math.PI * 3) / 2) {
ctx.fillText(otherScoreData[i][0], x - ctx.measureText(otherScoreData[i][0]).width, y - 10);
} else {
ctx.fillText(otherScoreData[i][0], x + 10, y - 10);
}
}
ctx.restore();
}
function drawCircle(ctx: CanvasRenderingContext2D) {
ctx.save();
var r = 3;
for (var i = 0; i < mCount; i++) {
var x = xCenter + (mRadius * Math.cos(mAngle * i) * otherScoreData[i][1]) / multiple;
var y = yCenter + (mRadius * Math.sin(mAngle * i) * otherScoreData[i][1]) / multiple;
console.log('x:', x, 'y:', y);
ctx.beginPath();
ctx.arc(x, y, r, 0, Math.PI * 2);
ctx.fillStyle = 'rgba(37, 170, 173, 0.8)';
ctx.fill();
}
ctx.restore();
}
function drawCircleLines(ctx: CanvasRenderingContext2D) {
ctx.save();
ctx.beginPath();
for (var i = 0; i < mCount; i++) {
var x = xCenter + (mRadius * Math.cos(mAngle * i) * otherScoreData[i][1]) / multiple;
var y = yCenter + (mRadius * Math.sin(mAngle * i) * otherScoreData[i][1]) / multiple;
ctx.lineTo(x, y);
}
ctx.closePath();
ctx.strokeStyle = 'rgba(37, 170, 173, 0.8)';
ctx.stroke();
ctx.restore();
}
function drawCircleData(ctx: CanvasRenderingContext2D) {
ctx.save();
var fontSize = 16;
ctx.font = fontSize + 'px Microsoft Yahei';
ctx.fillStyle = 'rgba(37, 170, 173, 0.8)';
for (var i = 0; i < mCount; i++) {
var x = xCenter + (mRadius * Math.cos(mAngle * i) * otherScoreData[i][1]) / multiple;
var y = yCenter + (mRadius * Math.sin(mAngle * i) * otherScoreData[i][1]) / multiple;
if (mAngle * i >= 0 && mAngle * i <= Math.PI / 2) {
ctx.fillText(otherScoreData[i][1], x + 5, y + fontSize);
} else if (mAngle * i > Math.PI / 2 && mAngle * i <= Math.PI) {
ctx.fillText(otherScoreData[i][1], x - ctx.measureText(otherScoreData[i][1]).width - 5, y + fontSize - 5);
} else if (mAngle * i > Math.PI && mAngle * i <= (Math.PI * 3) / 2) {
ctx.fillText(otherScoreData[i][1], x - ctx.measureText(otherScoreData[i][1]).width - 5, y - 5);
} else {
ctx.fillText(otherScoreData[i][1], x + 5, y - 5);
}
}
ctx.restore();
}
function drawCircle2(ctx: CanvasRenderingContext2D) {
ctx.save();
var r = xCenter / 50;
for (var i = 0; i < mCount; i++) {
var x = xCenter + (mRadius * Math.cos(mAngle * i) * selfScoreData[i][1]) / multiple;
var y = yCenter + (mRadius * Math.sin(mAngle * i) * selfScoreData[i][1]) / multiple;
ctx.beginPath();
ctx.fillStyle = 'rgba(244, 112, 112, 0.8)';
ctx.fillRect(x - 3, y - 3, 6, 6);
ctx.fill();
ctx.stroke();
}
ctx.restore();
}
function drawCircleLines2(ctx: CanvasRenderingContext2D) {
ctx.save();
ctx.beginPath();
for (var i = 0; i < mCount; i++) {
var x = xCenter + (mRadius * Math.cos(mAngle * i) * selfScoreData[i][1]) / multiple;
var y = yCenter + (mRadius * Math.sin(mAngle * i) * selfScoreData[i][1]) / multiple;
ctx.lineTo(x, y);
}
ctx.closePath();
ctx.strokeStyle = 'rgba(244, 112, 112, 0.8)';
ctx.stroke();
ctx.restore();
}
function drawCircleData2(ctx: CanvasRenderingContext2D) {
ctx.save();
var fontSize = 16;
ctx.font = fontSize + 'px Microsoft Yahei';
ctx.fillStyle = 'rgba(244, 112, 112, 0.8)';
for (var i = 0; i < mCount; i++) {
var x = xCenter + (mRadius * Math.cos(mAngle * i) * selfScoreData[i][1]) / multiple;
var y = yCenter + (mRadius * Math.sin(mAngle * i) * selfScoreData[i][1]) / multiple;
if (mAngle * i >= 0 && mAngle * i <= Math.PI / 2) {
ctx.fillText(selfScoreData[i][1], x - 25, y + fontSize - 10);
} else if (mAngle * i > Math.PI / 2 && mAngle * i <= Math.PI) {
ctx.fillText(selfScoreData[i][1], x - ctx.measureText(selfScoreData[i][1]).width + 25, y + fontSize - 10);
} else if (mAngle * i > Math.PI && mAngle * i <= (Math.PI * 3) / 2) {
ctx.fillText(selfScoreData[i][1], x - ctx.measureText(selfScoreData[i][1]).width + 25, y + 10);
} else {
ctx.fillText(selfScoreData[i][1], x - 25, y + 10);
}
}
ctx.restore();
}
})
</script>