|
|
@@ -1,6 +1,5 @@
|
|
|
-import { Select } from "antd";
|
|
|
-import React, { useCallback, useEffect, useState } from "react";
|
|
|
-import { CalendarOutlined } from "@ant-design/icons";
|
|
|
+import { Empty, Select } from "antd";
|
|
|
+import React, { useCallback, useEffect, useRef, useState } from "react";
|
|
|
import styles from "./index.module.scss";
|
|
|
|
|
|
import * as echarts from "echarts/core";
|
|
|
@@ -25,12 +24,15 @@ echarts.use([
|
|
|
function Hot() {
|
|
|
// 日期下拉框
|
|
|
const [select1, setSelect1] = useState<1 | 7 | 30 | "">(7);
|
|
|
+ const select1Ref = useRef<1 | 7 | 30 | "">(7);
|
|
|
|
|
|
// 热门场馆下拉
|
|
|
- const [select2, setSelect2] = useState<"visit" | "star">("visit");
|
|
|
+ const [select2, setSelect2] = useState<"visit" | "star" | "">("visit");
|
|
|
+ const select2Ref = useRef<"visit" | "star" | "">("");
|
|
|
|
|
|
// 热门馆藏下拉
|
|
|
- const [select3, setSelect3] = useState<"visit" | "star">("visit");
|
|
|
+ const [select3, setSelect3] = useState<"visit" | "star" | "">("visit");
|
|
|
+ const select3Ref = useRef<"visit" | "star" | "">("");
|
|
|
|
|
|
// 获取饼图的函数
|
|
|
const getEchartsFu = useCallback(
|
|
|
@@ -49,8 +51,10 @@ function Hot() {
|
|
|
legend: {
|
|
|
orient: "vertical",
|
|
|
left: "center",
|
|
|
- bottom: "20%",
|
|
|
+ bottom: "12%",
|
|
|
data,
|
|
|
+ // 设置间距
|
|
|
+ itemGap: 20,
|
|
|
formatter: (name: string) => {
|
|
|
let resName = "";
|
|
|
data.forEach((v) => {
|
|
|
@@ -68,7 +72,7 @@ function Hot() {
|
|
|
{
|
|
|
name: "",
|
|
|
type: "pie",
|
|
|
- radius: [80, 120],
|
|
|
+ radius: [60, 100],
|
|
|
center: ["50%", "30%"],
|
|
|
// 设置圆角
|
|
|
itemStyle: {
|
|
|
@@ -98,9 +102,11 @@ function Hot() {
|
|
|
[]
|
|
|
);
|
|
|
|
|
|
- // 获取数据
|
|
|
- const getInfoAPIFu = useCallback(() => {
|
|
|
- const data = [
|
|
|
+ // 时间改变的时候 获取3个数据
|
|
|
+ const getInfoAPIFu1 = useCallback(() => {
|
|
|
+ console.log("1获取饼图数据", select1Ref.current);
|
|
|
+
|
|
|
+ const data1 = [
|
|
|
{ value: 124, name: "新闻资讯", icon: "circle" },
|
|
|
{ value: 100, name: "虚拟漫游", icon: "circle" },
|
|
|
{ value: 200, name: "馆藏鉴赏", icon: "circle" },
|
|
|
@@ -108,66 +114,244 @@ function Hot() {
|
|
|
{ value: 70, name: "周边查询", icon: "circle" },
|
|
|
{ value: 155, name: "游客服务", icon: "circle" },
|
|
|
];
|
|
|
- getEchartsFu(data);
|
|
|
+ getEchartsFu(data1);
|
|
|
+
|
|
|
+ // -------------
|
|
|
+ console.log(
|
|
|
+ "2获取场馆数据",
|
|
|
+ select1Ref.current,
|
|
|
+ select2Ref.current ? select2Ref.current : "visit"
|
|
|
+ );
|
|
|
+
|
|
|
+ const data2 = [
|
|
|
+ { id: 1, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ {
|
|
|
+ id: 2,
|
|
|
+ name: "撒大苏打撒旦撒大苏打撒旦sadas撒大苏打撒旦撒大苏打撒旦sadas撒大苏打撒旦撒大苏打撒旦sadas",
|
|
|
+ num: 550,
|
|
|
+ },
|
|
|
+ { id: 3, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 4, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 5, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 6, name: "撒大", num: 550 },
|
|
|
+ { id: 7, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 8, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ ];
|
|
|
+ setList1(data2);
|
|
|
+
|
|
|
+ // ---------------
|
|
|
+
|
|
|
+ console.log(
|
|
|
+ "3获取馆藏数据",
|
|
|
+ select1Ref.current,
|
|
|
+ select3Ref.current ? select3Ref.current : "visit"
|
|
|
+ );
|
|
|
+ const data3 = [
|
|
|
+ { id: 1, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ {
|
|
|
+ id: 2,
|
|
|
+ name: "撒大苏打撒旦撒大打撒旦撒大苏打撒旦sadas",
|
|
|
+ num: 550,
|
|
|
+ },
|
|
|
+ { id: 3, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 4, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 5, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 6, name: "撒大", num: 550 },
|
|
|
+ { id: 7, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 8, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 9, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ {
|
|
|
+ id: 10,
|
|
|
+ name: "撒大苏打撒旦撒大打撒旦撒大苏打撒旦sadas",
|
|
|
+ num: 550,
|
|
|
+ },
|
|
|
+ { id: 11, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 12, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 13, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 14, name: "撒大", num: 550 },
|
|
|
+ ];
|
|
|
+ setList2(data3);
|
|
|
+
|
|
|
+ // 每次变化馆藏盒子滚动到顶部
|
|
|
+ const dom: HTMLDivElement = document.querySelector("#goodsSroolBox")!;
|
|
|
+ if (dom) dom.scrollTop = 0;
|
|
|
}, [getEchartsFu]);
|
|
|
|
|
|
+ // 获取热门场馆数据
|
|
|
+ const [list1, setList1] = useState([
|
|
|
+ { id: 1, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ ]);
|
|
|
+
|
|
|
+ const getInfoAPIFu2 = useCallback(() => {
|
|
|
+ console.log("2获取场馆数据", select1Ref.current, select2Ref.current);
|
|
|
+
|
|
|
+ const data = [
|
|
|
+ { id: 1, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ {
|
|
|
+ id: 2,
|
|
|
+ name: "撒大苏打撒旦撒大苏打撒旦sadas撒大苏打撒旦撒大苏打撒旦sadas撒大苏打撒旦撒大苏打撒旦sadas",
|
|
|
+ num: 550,
|
|
|
+ },
|
|
|
+ { id: 3, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 4, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 5, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 6, name: "撒大", num: 550 },
|
|
|
+ { id: 7, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 8, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ ];
|
|
|
+ setList1(data);
|
|
|
+ }, []);
|
|
|
+
|
|
|
+ // 获取馆藏数据
|
|
|
+
|
|
|
+ const [list2, setList2] = useState([
|
|
|
+ { id: 1, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ ]);
|
|
|
+
|
|
|
+ const getInfoAPIFu3 = useCallback(() => {
|
|
|
+ console.log("3获取馆藏数据", select1Ref.current, select3Ref.current);
|
|
|
+ const data = [
|
|
|
+ { id: 1, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ {
|
|
|
+ id: 2,
|
|
|
+ name: "撒大苏打撒旦撒大打撒旦撒大苏打撒旦sadas",
|
|
|
+ num: 550,
|
|
|
+ },
|
|
|
+ { id: 3, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 4, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 5, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 6, name: "撒大", num: 550 },
|
|
|
+ { id: 7, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 8, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 9, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ {
|
|
|
+ id: 10,
|
|
|
+ name: "撒大苏打撒旦撒大打撒旦撒大苏打撒旦sadas",
|
|
|
+ num: 550,
|
|
|
+ },
|
|
|
+ { id: 11, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 12, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 13, name: "撒大苏打撒旦", num: 550 },
|
|
|
+ { id: 14, name: "撒大", num: 550 },
|
|
|
+ ];
|
|
|
+ setList2(data);
|
|
|
+ }, []);
|
|
|
+
|
|
|
+ // 改变时间选择发送3个请求
|
|
|
+ useEffect(() => {
|
|
|
+ select1Ref.current = select1;
|
|
|
+ getInfoAPIFu1();
|
|
|
+ }, [getInfoAPIFu1, select1]);
|
|
|
+
|
|
|
+ // 热门场馆改变
|
|
|
+ useEffect(() => {
|
|
|
+ // 第一次的时候不发送请求
|
|
|
+ if (!select2Ref.current) select2Ref.current = select2;
|
|
|
+ else {
|
|
|
+ select2Ref.current = select2;
|
|
|
+ getInfoAPIFu2();
|
|
|
+ }
|
|
|
+ }, [getInfoAPIFu2, select2]);
|
|
|
+
|
|
|
+ // 热门馆藏的改变
|
|
|
useEffect(() => {
|
|
|
- getInfoAPIFu();
|
|
|
- }, [getInfoAPIFu]);
|
|
|
+ // 第一次的时候不发送请求
|
|
|
+ if (!select3Ref.current) select3Ref.current = select3;
|
|
|
+ else {
|
|
|
+ select3Ref.current = select3;
|
|
|
+ getInfoAPIFu3();
|
|
|
+ }
|
|
|
+ // 每次变化滚动到顶部
|
|
|
+ const dom: HTMLDivElement = document.querySelector("#goodsSroolBox")!;
|
|
|
+ if (dom) dom.scrollTop = 0;
|
|
|
+ }, [getInfoAPIFu3, select3]);
|
|
|
|
|
|
return (
|
|
|
<div className={styles.Hot}>
|
|
|
- <div className="pageTitle">热度统计</div>
|
|
|
- <div className="hotTopTime">
|
|
|
- <CalendarOutlined />
|
|
|
-  
|
|
|
- <Select
|
|
|
- value={select1}
|
|
|
- style={{ width: 100 }}
|
|
|
- onChange={(e) => setSelect1(e)}
|
|
|
- options={[
|
|
|
- { value: 1, label: "今日" },
|
|
|
- { value: 7, label: "近七天" },
|
|
|
- { value: 30, label: "近三十天" },
|
|
|
- { value: "", label: "全部" },
|
|
|
- ]}
|
|
|
- />
|
|
|
- </div>
|
|
|
- <div className="hotMain">
|
|
|
- <div className="hotBox1">
|
|
|
- <div className="hotBoxTit">热门板块</div>
|
|
|
- {/* 第一个echarts盒子 */}
|
|
|
- <div id="echarts1"></div>
|
|
|
+ <div className="hotTopBox">
|
|
|
+ <div className="pageTitle">热度统计</div>
|
|
|
+ <div className="hotTopTime">
|
|
|
+ <Select
|
|
|
+ value={select1}
|
|
|
+ style={{ width: 100 }}
|
|
|
+ onChange={(e) => setSelect1(e)}
|
|
|
+ options={[
|
|
|
+ { value: 1, label: "今日" },
|
|
|
+ { value: 7, label: "近七天" },
|
|
|
+ { value: 30, label: "近三十天" },
|
|
|
+ { value: "", label: "全部" },
|
|
|
+ ]}
|
|
|
+ />
|
|
|
</div>
|
|
|
- <div className="hotBox2">
|
|
|
- <div className="hotBoxTit">
|
|
|
- 热门场馆
|
|
|
- <div className="hotBoxTitRight">
|
|
|
- <Select
|
|
|
- value={select2}
|
|
|
- style={{ width: 100 }}
|
|
|
- onChange={(e) => setSelect2(e)}
|
|
|
- options={[
|
|
|
- { value: "visit", label: "按浏览" },
|
|
|
- { value: "star", label: "按点赞" },
|
|
|
- ]}
|
|
|
- />
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div className="hotMainBox">
|
|
|
+ <div className="hotMain">
|
|
|
+ <div className="hotBox1">
|
|
|
+ <div className="hotBoxTit">热门板块</div>
|
|
|
+ {/* 第一个echarts盒子 */}
|
|
|
+ <div id="echarts1"></div>
|
|
|
+ </div>
|
|
|
+ <div className="hotBox2">
|
|
|
+ <div className="hotBoxTit">
|
|
|
+ 热门场馆
|
|
|
+ <div className="hotBoxTitRight">
|
|
|
+ <Select
|
|
|
+ value={select2}
|
|
|
+ style={{ width: 100 }}
|
|
|
+ onChange={(e) => setSelect2(e)}
|
|
|
+ options={[
|
|
|
+ { value: "visit", label: "按浏览" },
|
|
|
+ { value: "star", label: "按点赞" },
|
|
|
+ ]}
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ {/* 场馆数据 */}
|
|
|
+ <div className="hotListBox">
|
|
|
+ {list1.map((v) => (
|
|
|
+ <div className="row" key={v.id}>
|
|
|
+ <div className="rowLeft" title={v.name}>
|
|
|
+ {v.name}
|
|
|
+ </div>
|
|
|
+ <div className="rowRight">{v.num}</div>
|
|
|
+ </div>
|
|
|
+ ))}
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <div className="hotBox3">
|
|
|
- <div className="hotBoxTit">
|
|
|
- 热门馆藏
|
|
|
- <div className="hotBoxTitRight">
|
|
|
- <Select
|
|
|
- value={select3}
|
|
|
- style={{ width: 100 }}
|
|
|
- onChange={(e) => setSelect3(e)}
|
|
|
- options={[
|
|
|
- { value: "visit", label: "按浏览" },
|
|
|
- { value: "star", label: "按点赞" },
|
|
|
- ]}
|
|
|
- />
|
|
|
+ <div className="hotBox3">
|
|
|
+ <div className="hotBoxTit">
|
|
|
+ 热门馆藏
|
|
|
+ <div className="hotBoxTitRight">
|
|
|
+ <Select
|
|
|
+ value={select3}
|
|
|
+ style={{ width: 100 }}
|
|
|
+ onChange={(e) => setSelect3(e)}
|
|
|
+ options={[
|
|
|
+ { value: "visit", label: "按浏览" },
|
|
|
+ { value: "star", label: "按点赞" },
|
|
|
+ ]}
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ {/* 馆藏数据 */}
|
|
|
+ <div className="hotListBox" id="goodsSroolBox">
|
|
|
+ {list2.length ? (
|
|
|
+ list2.slice(0, 20).map((v) => (
|
|
|
+ <div className="row" key={v.id}>
|
|
|
+ <div className="rowLeft" title={v.name}>
|
|
|
+ {v.name}
|
|
|
+ </div>
|
|
|
+ <div className="rowRight">{v.num}</div>
|
|
|
+ </div>
|
|
|
+ ))
|
|
|
+ ) : (
|
|
|
+ <div className="noneInfo">
|
|
|
+ <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />
|
|
|
+ </div>
|
|
|
+ )}
|
|
|
+
|
|
|
+ {}
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|