From 2e389e43c64dcfc7454a937eabd8a2958219ec12 Mon Sep 17 00:00:00 2001 From: Aifeilong <2993607249@qq.com> Date: Mon, 9 Oct 2023 15:49:10 +0800 Subject: [PATCH] fix --- package.json | 1 + src/App.js | 2 + src/App.less | 1 + src/assets/High.png | Bin 0 -> 7112 bytes src/assets/Low.png | Bin 0 -> 11837 bytes src/assets/anti-Hadleycell.png | Bin 0 -> 7467 bytes src/assets/anticyclone.png | Bin 0 -> 1695 bytes src/assets/cyclone.png | Bin 0 -> 2122 bytes src/assets/updraft.png | Bin 0 -> 1717 bytes src/assets/waterwapor.png | Bin 0 -> 1243 bytes src/components/common/CustomToolbar/index.jsx | 211 +- .../common/CustomToolbar/index.module.less | 54 + src/components/common/TextInfoPanel/index.jsx | 3 +- src/components/domain/Five/ChartPanel.jsx | 115 + src/components/domain/Five/CustomFlyTo.jsx | 11 + src/components/domain/Five/FormPanel.jsx | 133 + src/components/domain/Five/index.jsx | 35 + src/components/domain/Four/FormPanel.jsx | 47 +- src/components/domain/Four/Legend.jsx | 42 + src/components/domain/Four/index.jsx | 16 +- src/components/domain/One/Barotorpic.jsx | 8 +- src/components/domain/One/ChartPanel.jsx | 2 +- src/components/domain/One/CustomFlyTo.jsx | 4 +- src/components/domain/One/Cyclone.jsx | 52 +- src/components/domain/One/EntityLegend.jsx | 59 + .../domain/One/LabradorImageLayer.jsx | 1 - src/components/domain/One/Point.jsx | 10 +- src/components/domain/One/Updraft.jsx | 2 +- src/components/domain/One/WaterVaporPath.jsx | 38 + src/components/domain/One/WavePoints.jsx | 2 +- src/components/domain/One/index.jsx | 4 + src/components/domain/Three/index.jsx | 62 +- src/components/domain/Two/Circles.jsx | 155 + src/components/domain/Two/CustomFlyTo.jsx | 2 +- src/components/domain/Two/EntityLegend.jsx | 61 + src/components/domain/Two/Legend.jsx | 4 +- src/components/domain/Two/Point.jsx | 1 - src/components/domain/Two/index.jsx | 4 + src/components/home/Layout/NavBar.jsx | 10 +- src/components/home/Layout/index.module.less | 2 +- src/components/map/Layout/Picker.jsx | 25 +- src/components/map/Layout/index.jsx | 23 +- src/components/map/Layout/index.module.less | 39 + yarn.lock | 31089 +++++++++------- 44 files changed, 19026 insertions(+), 13304 deletions(-) create mode 100644 src/assets/High.png create mode 100644 src/assets/Low.png create mode 100644 src/assets/anti-Hadleycell.png create mode 100644 src/assets/anticyclone.png create mode 100644 src/assets/cyclone.png create mode 100644 src/assets/updraft.png create mode 100644 src/assets/waterwapor.png create mode 100644 src/components/common/CustomToolbar/index.module.less create mode 100644 src/components/domain/Five/ChartPanel.jsx create mode 100644 src/components/domain/Five/CustomFlyTo.jsx create mode 100644 src/components/domain/Five/FormPanel.jsx create mode 100644 src/components/domain/Five/index.jsx create mode 100644 src/components/domain/Four/Legend.jsx create mode 100644 src/components/domain/One/EntityLegend.jsx create mode 100644 src/components/domain/One/WaterVaporPath.jsx create mode 100644 src/components/domain/Two/Circles.jsx create mode 100644 src/components/domain/Two/EntityLegend.jsx diff --git a/package.json b/package.json index 9fcbe6d..d4b2bee 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "dependencies": { "@ant-design/aliyun-theme": "^0.0.5", "@ant-design/colors": "^7.0.0", + "@ant-design/icons": "^4.7.0", "@craco/craco": "^7.1.0", "@rematch/core": "^2.2.0", "@rematch/loading": "^2.1.2", diff --git a/src/App.js b/src/App.js index 59a2029..5b02128 100644 --- a/src/App.js +++ b/src/App.js @@ -4,6 +4,7 @@ import DomainOne from "@/components/domain/One"; import DomainTwo from "@/components/domain/Two"; import DomainThree from "@/components/domain/Three"; import DomainFour from "@/components/domain/Four"; +import DomainFive from "./components/domain/Five"; import "./App.less"; function App() { @@ -14,6 +15,7 @@ function App() { }> }> }> + }> } /> ); diff --git a/src/App.less b/src/App.less index 5cd42f5..0222a74 100644 --- a/src/App.less +++ b/src/App.less @@ -5,4 +5,5 @@ body, #root { height: 100%; width: 100%; + font-family: sans-serif !important; } diff --git a/src/assets/High.png b/src/assets/High.png new file mode 100644 index 0000000000000000000000000000000000000000..43bd71adb9aa00eb959d509070bc6eeeb3aee88a GIT binary patch literal 7112 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 yK~mRYH`)e(0Di<@W>9YWs-<`U0000h|p{uH~ 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 literal 0 HcmV?d00001 diff --git a/src/assets/anti-Hadleycell.png b/src/assets/anti-Hadleycell.png new file mode 100644 index 0000000000000000000000000000000000000000..ec3e9e308c68c368fef9e4e12107ac0282d09877 GIT binary patch literal 7467 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 literal 0 HcmV?d00001 diff --git a/src/assets/cyclone.png b/src/assets/cyclone.png new file mode 100644 index 0000000000000000000000000000000000000000..3bf61e03569b2f03bced6932c22c7a5440b11ac6 GIT binary patch literal 2122 zcmV-Q2(|Z#P)_g}fV*=MBfRG;~i+OYyJ@ejsC#6&!FweH!PsXgND_;tkKa!LCRyn=&4JE!V2OSAn*O=VsZ zv59-)6&##ikib)gYm({sCQ^7u-oU}&Z4;QxFRJx{g}<}ZxeFbi;KZ!|=(3Y6&7Rf# zey$Kz+|4(%qF=vx0|$fGcNrfOVVoLpH}Lxfn3>Q-jg|_R=2PiA-cDJ3f^!?zBIyec@OH_;fwsAH$ggx7$B_ljUByJ45&L;-ACH9yO=ugVg2t=+_a_m&83{O8 zTbxIsDYcF3-JVl|zV1*zchWaBnD}fiD&$IDUWgazS;VzBV{<%a_W}VQKc0Z!p{p zo^a;R9Q5BfieO?M$gT>6u5EmE*ST=u+ZkzHUE^L;K?88X>?XO%;5l#?Otr4g9FS~C zq?7Y#G>-omqjLvZS9{r3*Qj5JwXHH}8oIFMX5|ujENcC_VD9P1W+wUS!Nh{{$WPUf z$CS_@M=fS>on$)x8~Ko3Yc5sV_Ag>1zFnNv{omI4yMF%dwEXPXR;FURj0mAPC==t!pH&xo_;Q0f#@ zT&S(J=dlP|PEgG8>zRVLI!mrTe1Aa3uw27$@>27>Eh#_m+(SO$j@C@p8*RCJEP=T3YNGK5MEg)No9sU!X!9M)-xk3@DJCb&zN z2hK7$jDYFJnm_KzEr64!)f_?i5v+|#3vPm5OsDdI0vp`tR^vw4;3|Dx*;F>(QM$}| zj!jr(;DRm{$m0dqbq>z=fbj*rk9gH8kY+Ztp7}MX$BH&0rw2@&QW>GvG*0%-X zh2q)>IMxi=L~vcGDZOoQEd$f>R#sMT!A*?7J(4VnwxA4VUZE~e&IP!g4L^6h)l}%~ zVb+2%x`K{aDBG&+Lkz-7i7+bPN}O^ar&b%~4jdxRl#R&;VAc0cSIX1F=g_Lei|5aD z?JD17#@Y?dP3ld?pqWhlZr!~yy~XWpL~sKeaF{==O%3+-J`YDczA7vWjNK_kvWE&B z%3-s~DT>d>mADb z#|n>mc$ZaZxXCzFfxAL($geen6D&N2m|cpgZ7blQu}2PO(TNSX5a2QTl33qThfVu_ zuj)cEkk}=Tz+`IQ5eO7qP7KbtNY4s5hgxT4G9MtgTbmmMx<=nP(7NX#K;dTK4vC>z zK7VZK`B1f1lY#{_R)QRKTz@r-C`0=@JKPSU(+%qCln`eUX> z*_h0sS8&o+`ZQ8-9RUygRP1XTI+=S1SIQ3y+H^9F18?9P_5kieBQ|Z>4+5ODX8h;D z{Nzo+A@#ox2Nf!?chcD0sA@R)ck8^rK-IuczF{S+8w2n0 zKlviE?RO~~IY53KFK?)I-oZ5yAG2&1`C-Al1xE+3c%VXTU|MjK2sEw&;K0F?%sIx( zzafkF21o#l62l*f+=$EA-W?APoC0D8Vt@ZPad4BRl)rmn`oevv;=KWuAPeb(i?OH? zaaG`;D61b*Qpv`HYh~1e;~O*)yf>hg(OTfX0)Q)LYPX4C@&Et;07*qoM6N<$f^zT% A#sB~S literal 0 HcmV?d00001 diff --git a/src/assets/updraft.png b/src/assets/updraft.png new file mode 100644 index 0000000000000000000000000000000000000000..2c10cb0eb14cecb2a1092e96c7bbf87efe74ab5d GIT binary patch literal 1717 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 FV1g6NLSz5{ literal 0 HcmV?d00001 diff --git a/src/components/common/CustomToolbar/index.jsx b/src/components/common/CustomToolbar/index.jsx index 3d4598c..c384d11 100644 --- a/src/components/common/CustomToolbar/index.jsx +++ b/src/components/common/CustomToolbar/index.jsx @@ -1,117 +1,130 @@ -import { useCallback, useState } from "react"; +import { useCallback, useEffect, useState } from "react"; import { useDispatch, useSelector } from "react-redux"; -import { useNavigate } from "react-router-dom"; +import { useLocation, useNavigate } from "react-router-dom"; import { useCesium } from "resium"; -import { Select } from "antd"; +import { Button, Drawer, List, Select } from "antd"; +import { HomeOutlined, MenuUnfoldOutlined } from "@ant-design/icons"; +import { useMouse } from "ahooks"; +import styles from "./index.module.less"; function CustomToolbar() { const { viewer } = useCesium(); const navigate = useNavigate(); const dispatch = useDispatch(); + const location = useLocation(); const { toolbar } = useSelector((state) => state.data); const [value, setValue] = useState("sideview"); - const handleChange = (value) => { - setValue(value); - const pointEntity = viewer.entities.getById("point"); - if (!viewer) return; - if (value === "overhead") { - // 俯视 - viewer.trackedEntity = pointEntity; - const destination = pointEntity.position.getValue( - viewer.clock.currentTime - ); - if (!destination) return; - const newDestination = new Cesium.Cartesian3(); - newDestination.x = destination.x; - newDestination.y = destination.y + 13000000; - newDestination.z = destination.z; - viewer.camera.flyTo({ - destination: newDestination, - }); - } else if (value === "sideview") { - // 侧视 - // viewer.trackedEntity = pointEntity; - viewer.trackedEntity = undefined; - viewer.camera.flyTo({ - destination: Cesium.Cartesian3.fromDegrees(130, -10.5, 20000000), - }); - } else { - // 跟随mftata - viewer.trackedEntity = pointEntity; - const destination = pointEntity.position.getValue( - viewer.clock.currentTimes - ); - if (!destination) return; - const newDestination = Cesium.Cartesian3.clone(destination); - newDestination.y = destination.y + 1000000; - viewer.camera.flyTo({ - destination: newDestination, - orientation: { - heading: Cesium.Math.toRadians(0.0), - pitch: -Cesium.Math.PI_OVER_FOUR, - roll: 0.0, - }, - duration: 0, - }); - } - }; + const [mouseX, setMouseX] = useState(0); + const [drawerOpen, setDrawerOpen] = useState(false); - const navigateHandler = useCallback(() => { - navigate("/home", { replace: true }); - dispatch.data.resetState(); - }, [navigate, dispatch]); - - const showPanelHandler = useCallback( - (value) => { - dispatch.data.updateToolbar({ - showPanel: value, - }); + const mapList = [ + { + label: "首页", + value: "/", + icon: , + onClick: () => { + navigate("/home", { replace: true }); + }, }, - [dispatch] - ); + { + label: "两极协同—拉布拉多海海温偏暖控制夏季高原年代际增温", + value: "/map/1", + icon: , + onClick: () => { + navigate("/map/1", { replace: true }); + }, + }, + { + label: "两极协同—南极涛动有效调节青藏高原降水和加热", + value: "/map/2", + icon: , + onClick: () => { + navigate("/map/2", { replace: true }); + }, + }, + { + label: "两极协同—连接南极和北极的热带大西洋经向模的媒介作用", + value: "/map/3", + icon: , + onClick: () => { + navigate("/map/3", { replace: true }); + }, + }, + { + label: "三极联动影响青藏高原上层温度", + value: "/map/4", + icon: , + onClick: () => { + navigate("/map/4", { replace: true }); + }, + }, + { + label: "三级联动影响东亚夏季风", + value: "/map/5", + icon: , + onClick: () => { + navigate("/map/5", { replace: true }); + }, + }, + ]; + + useEffect(() => { + const handleMouseMove = (event) => { + setMouseX(event.clientX); + }; + + document.addEventListener("mousemove", handleMouseMove); + + return () => { + document.removeEventListener("mousemove", handleMouseMove); + }; + }, []); + + const isAtRightEdge = mouseX >= window.innerWidth - 10; + const iaClose = mouseX + 320 <= window.innerWidth; + + useEffect(() => { + if (isAtRightEdge && !drawerOpen) { + setDrawerOpen(true); + } else if (iaClose && drawerOpen) { + setDrawerOpen(false); + } + }, [isAtRightEdge, iaClose]); + + const onDrawerClose = useCallback(() => { + setDrawerOpen(false); + }, []); return ( -

-
- 返回首页 -
- {/* node} - options={[ - { - value: true, - label: "开启展板", - }, - { - value: false, - label: "关闭展板", - }, - ]} - /> +
+ + { + return ( + + + + ); + }} + > +
); } diff --git a/src/components/common/CustomToolbar/index.module.less b/src/components/common/CustomToolbar/index.module.less new file mode 100644 index 0000000..fa8a2d4 --- /dev/null +++ b/src/components/common/CustomToolbar/index.module.less @@ -0,0 +1,54 @@ +.drawerToolbar :global { + transition: all 0.3s ease; + + .ant-drawer-content-wrapper { + .ant-drawer-content { + background-color: #1f4856; + + .ant-drawer-body { + padding: 0; + + .ant-list { + .ant-list-item { + .ant-list-item-meta { + // justify-content: center; + align-items: center; + + .ant-list-item-meta-avatar { + font-size: 24px; + color: aliceblue; + margin-left: 16px; + } + + .ant-list-item-meta-content { + .ant-list-item-meta-title { + font-size: 1.2rem; + color: aliceblue; + } + } + } + + &:hover { + cursor: pointer; + background-color: #94bebf; + + .ant-list-item-meta-avatar { + color: #1f4856; + } + + .ant-list-item-meta-content { + .ant-list-item-meta-title { + color: #1f4856; + } + } + } + } + + .active-item { + background-color: cadetblue !important; + } + } + } + } + } +} diff --git a/src/components/common/TextInfoPanel/index.jsx b/src/components/common/TextInfoPanel/index.jsx index 42754b5..a9f31e5 100644 --- a/src/components/common/TextInfoPanel/index.jsx +++ b/src/components/common/TextInfoPanel/index.jsx @@ -4,7 +4,8 @@ import { Scrollbars } from "react-custom-scrollbars-2"; import { useInterval } from "ahooks"; let index = 0; -function TextInfoPanel({ title, content }) { + +function TextInfoPanel({ content }) { const showNumberPerTimes = 1; const { toolbar } = useSelector((state) => state.data); diff --git a/src/components/domain/Five/ChartPanel.jsx b/src/components/domain/Five/ChartPanel.jsx new file mode 100644 index 0000000..4197b77 --- /dev/null +++ b/src/components/domain/Five/ChartPanel.jsx @@ -0,0 +1,115 @@ +import ReactECharts from "echarts-for-react"; + +const years = []; + +for (let year = 2011; year <= 2020; year++) { + years.push(year); +} + +const observedData = [ + -0.90765893, 0.14846958, 1.6577014, -0.32029018, -1.2422978, 0.44113398, + -0.45218363, 1.897564, -0.6926195, -0.529819, +]; + +const predictedData = [ + -0.20760797, 0.206235, 0.85673275, 0.13969683, -0.39370838, 0.23775028, + -0.34866039, 0.93110625, 0.19143088, 0.5760311, +]; + +function ChartPanel() { + const option = { + title: { + // text: "Stacked Line", + }, + tooltip: { + trigger: "axis", + }, + legend: { + data: ["观测结果", "预测结果"], + textStyle: { color: "#04fbfd", cursor: "point" }, + }, + animationDuration: years.length * 1000, + animationEasing: "cubicInOut", + grid: { + left: "3%", + right: "4%", + bottom: "3%", + containLabel: true, + }, + // toolbox: { + // feature: { + // // 下载 + // saveAsImage: {}, + // }, + // }, + xAxis: { + type: "category", + boundaryGap: false, + data: years, + axisLine: { + onZero: false, + symbol: ["none", "arrow"], + symbolOffser: [0, 10], + }, + }, + yAxis: { + type: "value", + min: -2.0, + max: 2.0, + interval: 0.5, + splitNumber: 5, + splitLine: { show: false }, + axisLine: { + onZero: false, + show: true, + symbol: ["none", "arrow"], + symbolOffset: [0, 10], + }, + axisLabel: { + show: true, + }, + axisTick: { show: true }, + scale: true, + }, + dataZoom: { type: "inside", start: 0, end: 100 }, + series: [ + { + name: "观测结果", + type: "line", + stack: "Total", + data: observedData, + color: "black", + symbol: "none", + itemStyle: { + color: "black", + }, + }, + { + name: "预测结果", + type: "line", + // stack: "Total", + data: predictedData, + color: "red", + symbol: "none", + itemStyle: { + color: "red", + }, + }, + ], + }; + + return ( +
+ +
+ ); +} + +export default ChartPanel; diff --git a/src/components/domain/Five/CustomFlyTo.jsx b/src/components/domain/Five/CustomFlyTo.jsx new file mode 100644 index 0000000..9b37ed6 --- /dev/null +++ b/src/components/domain/Five/CustomFlyTo.jsx @@ -0,0 +1,11 @@ +import { Cartesian3 } from "cesium"; +import { CameraFlyTo } from "resium"; + +export default function CustomFlyTo() { + return ( + + ); +} diff --git a/src/components/domain/Five/FormPanel.jsx b/src/components/domain/Five/FormPanel.jsx new file mode 100644 index 0000000..4e30750 --- /dev/null +++ b/src/components/domain/Five/FormPanel.jsx @@ -0,0 +1,133 @@ +import { Button, Form, Input, Select } from "antd"; + +const layout = { + labelCol: { span: 6 }, + wrapperCol: { span: 16 }, +}; +const tailLayout = { + wrapperCol: { offset: 6, span: 16 }, +}; + +const { Option } = Select; + +export default function FormPanel({ setShow }) { + const [form] = Form.useForm(); + + return ( +
+
{ + console.log("Success:", values); + setShow(true); + }} + > + + + + + + + +
+
+ ); +} diff --git a/src/components/domain/Five/index.jsx b/src/components/domain/Five/index.jsx new file mode 100644 index 0000000..16ddca8 --- /dev/null +++ b/src/components/domain/Five/index.jsx @@ -0,0 +1,35 @@ +import MapLayout from "@/components/map/Layout"; +import CustomToolbar from "@/components/common/CustomToolbar"; +import CustomClock from "@/components/common/CustomClock"; +import TextInfoPanel from "@/components/common/TextInfoPanel"; +import CustomFlyTo from "./CustomFlyTo"; +import FormPanel from "./FormPanel"; +import ChartPanel from "./ChartPanel"; +// import RectangleLayer from "./RectangleLayer"; +import { useState } from "react"; + +export default function DomainFive() { + const [show, setShow] = useState(false); + + return ( + +
三极联动影响东亚夏季风
+ + + +
+ +
+
+
+ +
+
{show && }
+
+ {/* */} +
+ ); +} diff --git a/src/components/domain/Four/FormPanel.jsx b/src/components/domain/Four/FormPanel.jsx index cf066d2..b1aec62 100644 --- a/src/components/domain/Four/FormPanel.jsx +++ b/src/components/domain/Four/FormPanel.jsx @@ -1,14 +1,16 @@ import { Button, Form, Input, Select } from "antd"; const layout = { - labelCol: { span: 8 }, + labelCol: { span: 6 }, wrapperCol: { span: 16 }, }; const tailLayout = { - wrapperCol: { offset: 8, span: 16 }, + wrapperCol: { offset: 6, span: 16 }, }; -export default function FormPanel() { +const { Option } = Select; + +export default function FormPanel({ setShow }) { const [form] = Form.useForm(); return ( @@ -18,21 +20,52 @@ export default function FormPanel() { form={form} name="control-hooks" initialValues={{ - sic: "sic_s", + sic: ["sic_s"], + sce: ["sc_ea", "sc_tp"], + st: [ + "ts_1", + "ts_2", + "ts_3", + "ts_4", + "ts_5", + "ts_6", + "ts_7", + "ts_8", + "ts_9", + "ts_10", + "ts_11", + "ts_12", + ], + }} + onFinish={(values) => { + console.log("Success:", values); + setShow(true); }} > - + - + - +