feat: ntrp逻辑变更 & 替换海报二维码
This commit is contained in:
@@ -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 = () => {
|
||||
|
||||
Reference in New Issue
Block a user