|
@@ -1,10 +1,4 @@
|
|
|
-import React, { useEffect, useRef, useState } from "react";
|
|
|
-import styles from "./index.module.scss";
|
|
|
-import {
|
|
|
- DataResTabListTabCutType,
|
|
|
- DataResTabListType,
|
|
|
- columnsObj,
|
|
|
-} from "../data";
|
|
|
+import React, { useEffect, useRef } from "react";
|
|
|
|
|
|
import * as echarts from "echarts/core";
|
|
|
import { TitleComponent } from "echarts/components";
|
|
@@ -22,6 +16,14 @@ import {
|
|
|
} from "echarts/components";
|
|
|
import { BarChart } from "echarts/charts";
|
|
|
import { CanvasRenderer } from "echarts/renderers";
|
|
|
+import {
|
|
|
+ DataResTabListTabCutType,
|
|
|
+ DataResTabListType,
|
|
|
+ DataResType,
|
|
|
+ colorRes,
|
|
|
+ echResData,
|
|
|
+ echResMax,
|
|
|
+} from "./data";
|
|
|
|
|
|
echarts.use([
|
|
|
ToolboxComponent,
|
|
@@ -37,31 +39,12 @@ echarts.use([
|
|
|
LabelLayout,
|
|
|
]);
|
|
|
|
|
|
-type DataResType = {
|
|
|
- name: string;
|
|
|
- value: number;
|
|
|
- index: string;
|
|
|
- bai: string;
|
|
|
- customDesc: string[];
|
|
|
-};
|
|
|
-
|
|
|
type Props = {
|
|
|
type: DataResTabListTabCutType;
|
|
|
info: DataResTabListType;
|
|
|
+ hidden: boolean;
|
|
|
};
|
|
|
|
|
|
-const colorRes = [
|
|
|
- "#5470c6",
|
|
|
- "#91cc75",
|
|
|
- "#fac858",
|
|
|
- "#ee6666",
|
|
|
- "#73c0de",
|
|
|
- "#3ba272",
|
|
|
- "#fc8452",
|
|
|
- "#9a60b4",
|
|
|
- "#ea7ccc",
|
|
|
-];
|
|
|
-
|
|
|
const optionObjFu = (type: DataResTabListTabCutType, arr: DataResType[]) => {
|
|
|
const arr1 = arr.map((v) => v.index);
|
|
|
const arr2 = arr.map((v) => v.value);
|
|
@@ -145,14 +128,9 @@ const optionObjFu = (type: DataResTabListTabCutType, arr: DataResType[]) => {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
-function EchBox({ type, info }: Props) {
|
|
|
- const [dataRes, setDataRes] = useState<DataResType[]>([]);
|
|
|
-
|
|
|
+function EchBox({ type, info, hidden }: Props) {
|
|
|
const oldDataFlagId = useRef(0);
|
|
|
|
|
|
- // 总得分 和 总数
|
|
|
- const [maxNum, setMaxNum] = useState(0);
|
|
|
-
|
|
|
useEffect(() => {
|
|
|
// 防止多次渲染
|
|
|
if (oldDataFlagId.current === info.id) return;
|
|
@@ -164,27 +142,10 @@ function EchBox({ type, info }: Props) {
|
|
|
const flag = info.type === "排序";
|
|
|
|
|
|
// 获取总数
|
|
|
- const max = lodArr
|
|
|
- .map((v) => (flag ? v.score || 0 : v.pcs))
|
|
|
- .reduce(function (prev, curr) {
|
|
|
- return prev + curr;
|
|
|
- });
|
|
|
-
|
|
|
- setMaxNum(max);
|
|
|
-
|
|
|
- const arr: DataResType[] = lodArr.map((v, i) => ({
|
|
|
- name: v.name,
|
|
|
- value: flag ? v.score || 0 : v.pcs,
|
|
|
- index: v.name === "其他" ? "自定义回答" : Reflect.get(columnsObj, i),
|
|
|
- bai: Math.round(((flag ? v.score || 0 : v.pcs) / max) * 100) + "%",
|
|
|
- customDesc:
|
|
|
- v.name === "其他"
|
|
|
- ? (v.customDesc || "").split(";").filter((v) => v)
|
|
|
- : ([] as string[]),
|
|
|
- }));
|
|
|
-
|
|
|
- setDataRes(arr);
|
|
|
- // console.log(arr);
|
|
|
+ const max = echResMax(lodArr, flag);
|
|
|
+
|
|
|
+ const arr: DataResType[] = echResData(lodArr, flag, max);
|
|
|
+ // console.log("11111111111", arr);
|
|
|
|
|
|
const dom = EchBox1.current;
|
|
|
if (dom) {
|
|
@@ -197,48 +158,14 @@ function EchBox({ type, info }: Props) {
|
|
|
const EchBox1 = useRef<HTMLDivElement>(null);
|
|
|
|
|
|
return (
|
|
|
- <div className={styles.EchBox}>
|
|
|
- <div className="EchBox1" ref={EchBox1}></div>
|
|
|
+ <div
|
|
|
+ hidden={hidden}
|
|
|
+ className="EchBox1"
|
|
|
+ ref={EchBox1}
|
|
|
+ style={{ width: "600px", height: "300px" }}
|
|
|
+ >
|
|
|
{/* 右侧的数据 */}
|
|
|
- <div className="EchBox2">
|
|
|
- <div
|
|
|
- className="EchBox2Num"
|
|
|
- hidden={dataRes.length <= 0 || maxNum === 0}
|
|
|
- >
|
|
|
- {info.type === "排序" ? "总得分" : "总数"}:{maxNum}
|
|
|
- </div>
|
|
|
- {dataRes.map((v, i) => (
|
|
|
- <div key={i} className="EchBox2Son">
|
|
|
- {v.name === "其他" ? (
|
|
|
- <div className="EchBox2Son1">
|
|
|
- <div className="EchBox2Son1_1" style={{ color: colorRes[i] }}>
|
|
|
- 自定义回答:
|
|
|
- </div>
|
|
|
- <div className="EchBox2Son1_2" style={{ color: colorRes[i] }}>
|
|
|
- {v.value}({v.bai})
|
|
|
- </div>
|
|
|
- <div className="EchBox2Son1_3">
|
|
|
- {v.customDesc.map((v2, i2) => (
|
|
|
- <div key={i2}>
|
|
|
- {i2 + 1}:{v2}
|
|
|
- </div>
|
|
|
- ))}
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- ) : (
|
|
|
- <div className="EchBox2Son1">
|
|
|
- <div className="EchBox2Son1_1" style={{ color: colorRes[i] }}>
|
|
|
- {v.index}:
|
|
|
- </div>
|
|
|
- <div className="EchBox2Son1_2" style={{ color: colorRes[i] }}>
|
|
|
- {v.value}({v.bai})
|
|
|
- </div>
|
|
|
- <div className="EchBox2Son1_3">{v.name}</div>
|
|
|
- </div>
|
|
|
- )}
|
|
|
- </div>
|
|
|
- ))}
|
|
|
- </div>
|
|
|
+ <div className="EchBox2"></div>
|
|
|
</div>
|
|
|
);
|
|
|
}
|