feat: ntrp逻辑变更 & 替换海报二维码

This commit is contained in:
2025-10-06 14:52:31 +08:00
parent f2e9d20094
commit 05b941613c
11 changed files with 430 additions and 207 deletions

View File

@@ -3,9 +3,9 @@ import { View, Canvas, Button } from "@tarojs/components";
import { useEffect, useRef, forwardRef, useImperativeHandle } from "react";
const RadarChart: React.FC = forwardRef((props, ref) => {
const { data } = props
const { data } = props;
const renderFnRef = useRef()
const renderFnRef = useRef();
// const labels = [
// "正手球质",
// "正手控制",
@@ -25,22 +25,25 @@ const RadarChart: React.FC = forwardRef((props, ref) => {
useEffect(() => {
if (data.length > 0) {
const {texts, vals} = data.reduce((res, item) => {
const [text, val] = item
return {
texts: [...res.texts, text],
vals: [...res.vals, val]
}
}, { texts: [], vals: [] })
renderFnRef.current && renderFnRef.current(texts, vals)
const { texts, vals } = data.reduce(
(res, item) => {
const [text, val] = item;
return {
texts: [...res.texts, text],
vals: [...res.vals, val],
};
},
{ texts: [], vals: [] }
);
renderFnRef.current && renderFnRef.current(texts, vals);
}
}, [data])
}, [data]);
useReady(() => {
renderFnRef.current = renderCanvas
renderFnRef.current = renderCanvas;
});
function renderCanvas (labels, values) {
function renderCanvas(labels, values) {
const query = Taro.createSelectorQuery();
query
.select("#radarCanvas")
@@ -48,7 +51,7 @@ const RadarChart: React.FC = forwardRef((props, ref) => {
.exec((res) => {
const canvas = res[0].node as HTMLCanvasElement;
const ctx = canvas.getContext("2d") as CanvasRenderingContext2D;
const dpr = Taro.getSystemInfoSync().pixelRatio;
const dpr = Taro.getWindowInfo().pixelRatio;
canvas.width = res[0].width * dpr;
canvas.height = res[0].height * dpr;
ctx.scale(dpr, dpr);
@@ -88,7 +91,10 @@ const RadarChart: React.FC = forwardRef((props, ref) => {
ctx.fillStyle = "#333";
ctx.textBaseline = "middle";
if (Math.abs(angle) < 0.01 || Math.abs(Math.abs(angle) - Math.PI) < 0.01) {
if (
Math.abs(angle) < 0.01 ||
Math.abs(Math.abs(angle) - Math.PI) < 0.01
) {
ctx.textAlign = "center";
} else if (angle > -Math.PI / 2 && angle < Math.PI / 2) {
ctx.textAlign = "left";
@@ -119,22 +125,23 @@ const RadarChart: React.FC = forwardRef((props, ref) => {
}
useImperativeHandle(ref, () => ({
generateImage: () => new Promise((resolve, reject) => {
const query = Taro.createSelectorQuery()
query.select("#radarCanvas")
.fields({ node: true, size: true })
.exec((res) => {
const canvas = res[0].node
// ⚠️ 关键:传 canvas而不是 canvasId
Taro.canvasToTempFilePath({
canvas,
success: (res) => resolve(res.tempFilePath),
fail: (err) => reject(err),
})
})
})
}))
generateImage: () =>
new Promise((resolve, reject) => {
const query = Taro.createSelectorQuery();
query
.select("#radarCanvas")
.fields({ node: true, size: true })
.exec((res) => {
const canvas = res[0].node;
// ⚠️ 关键:传 canvas而不是 canvasId
Taro.canvasToTempFilePath({
canvas,
success: (res) => resolve(res.tempFilePath),
fail: (err) => reject(err),
});
});
}),
}));
// 保存为图片
const saveImage = () => {