Procházet zdrojové kódy

feat: animate / 入场动画

@dayan_hjm před 2 roky
rodič
revize
c54df18391

+ 2 - 1
package.json

@@ -25,9 +25,9 @@
25 25
   "dependencies": {
26 26
     "@ant-design/compatible": "^1.1.0",
27 27
     "@ant-design/icons": "^4.7.0",
28
+    "@ant-design/pro-form": "1.48.1",
28 29
     "@ant-design/pro-layout": "^6.27.2",
29 30
     "@ant-design/pro-table": "2.56.8",
30
-    "@ant-design/pro-form": "1.48.1",
31 31
     "@babel/core": "^7.13.14",
32 32
     "@babel/plugin-proposal-decorators": "^7.14.5",
33 33
     "@babel/plugin-syntax-dynamic-import": "^7.8.3",
@@ -36,6 +36,7 @@
36 36
     "@babel/preset-react": "^7.13.13",
37 37
     "@typescript-eslint/eslint-plugin": "^4.22.0",
38 38
     "@typescript-eslint/parser": "^4.22.0",
39
+    "animate.css": "^4.1.1",
39 40
     "antd": "^4.18.3",
40 41
     "antd-img-crop": "^4.0.2",
41 42
     "awesome-typescript-loader": "^5.2.1",

+ 67 - 27
src/assets/css/styleTemplate.less

@@ -2,12 +2,11 @@
2 2
  * @Author: dayan_hjm 茶百道主题样式
3 3
  * @Date: 2022-10-27 10:56:37 
4 4
  * @Last Modified by: dayan_hjm
5
- * @Last Modified time: 2023-10-25 10:41:55
5
+ * @Last Modified time: 2023-10-25 16:42:23
6 6
  */
7 7
 
8 8
 @import url("../../themes/themes.less");
9 9
 
10
-
11 10
 :global {
12 11
   #app {
13 12
     height: inherit;
@@ -227,12 +226,18 @@
227 226
     display: inline-block;
228 227
     border: 1px solid #ececec;
229 228
   }
230
-
231
-  #app .top {
229
+  #app .top2 {
232 230
     background: url(../imgs/dataVimg/topBg.png) no-repeat 0 0 / 100% 100% #0a091e;
233 231
     height: 8%;
232
+    background:#0a091e;
233
+    background-color: #0a091e;
234
+  
235
+  }
236
+  #app .top {
237
+    background: url(../imgs/dataVimg/topBg.png) no-repeat 0 0 / 100% 100% #0a091e;
238
+    height: 100%;
234 239
     position: unset;
235
-
240
+  
236 241
     .title_box {
237 242
       display: flex;
238 243
       align-items: center;
@@ -323,18 +328,21 @@
323 328
     top: 0;
324 329
     width: 100%;
325 330
     height: 100%;
326
-
331
+    .video_box_hide{
332
+      z-index: 12;
333
+    }
327 334
     .video_box {
328 335
       position: absolute;
329 336
       left: 0;
330 337
       top: 0;
331 338
       width: 100%;
332
-      background: url(../imgs/dataVimg/homeBgDataV.png) no-repeat 0 0 / 100% 100% #041b40;
339
+      background: url(../imgs/dataVimg/homeBgDataV.png) no-repeat 0 -10em / 100% 120% #041b40;
333 340
       height: 100%;
334 341
       display: flex;
335 342
       align-items: center;
336 343
       justify-content: center;
337
-      video{
344
+      flex-wrap: wrap;
345
+      video {
338 346
         width: 89%;
339 347
         height: 83%;
340 348
         padding: 1% 0 0 10%;
@@ -358,7 +366,7 @@
358 366
       top: 0;
359 367
       width: 100%;
360 368
       background: unset;
361
-
369
+      z-index: 11;
362 370
       .topMsg_title {
363 371
         background: url(../imgs/dataVimg/tipleBg.png) no-repeat 0 0 / 100% 100%;
364 372
         height: 2em;
@@ -375,14 +383,17 @@
375 383
         width: 28%;
376 384
         height: 88%;
377 385
         z-index: 9;
378
-
379
-        .topMsg {
386
+        .topMsg2{
380 387
           width: 100%;
381 388
           height: 22%;
382 389
           box-shadow: 0 6px 8px 0 rgba(0, 0, 0, 0.04);
383 390
           /* border-radius: 26px; */
384 391
           /* padding: 16px; */
385 392
           margin-bottom: 3%;
393
+        }
394
+        .topMsg {
395
+          width: 100%;
396
+          height: 100%;
386 397
 
387 398
           .topMsg_content {
388 399
             height: calc(100% - 2em);
@@ -429,6 +440,13 @@
429 440
           }
430 441
         }
431 442
 
443
+        .center_box2 {
444
+          width: 100%;
445
+          height: 30%;
446
+          box-shadow: 0 6px 8px 0 rgba(0, 0, 0, 0.04);
447
+          margin-bottom: 3%;
448
+        }
449
+
432 450
         .center_box {
433 451
           .topMsg_content {
434 452
             width: 100%;
@@ -447,18 +465,17 @@
447 465
 
448 466
             }
449 467
           }
450
-
451 468
           width: 100%;
452
-          height: 30%;
453
-          box-shadow: 0 6px 8px 0 rgba(0, 0, 0, 0.04);
454
-          margin-bottom: 3%;
455
-
469
+          height: 100%;
456 470
         }
457 471
 
458
-
459
-        .bottomContent {
472
+        .bottomContent2{
460 473
           width: 100%;
461 474
           height: 35%;
475
+        }
476
+        .bottomContent {
477
+          width: 100%;
478
+          height: 100%;
462 479
 
463 480
           .topMsg_content {
464 481
             width: 100%;
@@ -495,10 +512,14 @@
495 512
         }
496 513
       }
497 514
 
498
-      .rightContent .bottomContent {
515
+      .rightContent .bottomContent2 {
499 516
         width: 100%;
500 517
         height: 28%;
501 518
       }
519
+      .rightContent .bottomContent {
520
+        width: 100%;
521
+        height: 100%;
522
+      }
502 523
 
503 524
       .topMsg_content {
504 525
         width: 100%;
@@ -565,9 +586,16 @@
565 586
         .topMsg_2 .topMsg_content {
566 587
           height: 80%;
567 588
         }
568
-
589
+        .topMsg_22,.topMsg_33{
590
+          width: 100%;
591
+          height: 22%;
592
+          margin-bottom: 3%;
593
+        }
569 594
         .topMsg_2,
570
-        .topMsg_3,
595
+        .topMsg_3{
596
+          width: 100%;
597
+          height: 100%;
598
+        }
571 599
         .topMsg_4 {
572 600
           width: 100%;
573 601
           height: 22%;
@@ -605,11 +633,14 @@
605 633
           }
606 634
 
607 635
         }
608
-
609
-        .topMsg {
636
+        .topMsg2{
610 637
           width: 100%;
611 638
           height: 20%;
612 639
           margin-bottom: 3%;
640
+        }
641
+        .topMsg {
642
+          width: 100%;
643
+          height: 100%;
613 644
 
614 645
           .topMsg_content {
615 646
             height: calc(100% - 1em);
@@ -735,14 +766,23 @@
735 766
         width: calc(100% - 56%);
736 767
         height: 88%;
737 768
         position: relative;
738
-
739
-        .bottomContent {
769
+        .topMsg3{
770
+          width: 100%;
771
+          height: 18%;
772
+          margin-top: 2em;
773
+        }
774
+        .bottomContent3 {
740 775
           height: 30%;
741 776
           width: 100%;
742 777
           position: absolute;
743 778
           left: 0;
744 779
           bottom: 5%;
745 780
 
781
+        }
782
+        .bottomContent {
783
+          height: 100%;
784
+          width: 100%;
785
+
746 786
           .topMsg_content {
747 787
             width: 100%;
748 788
             height: 100%;
@@ -774,7 +814,7 @@
774 814
         .topMsg {
775 815
           background: url(../imgs/dataVimg/toplineleft.png) no-repeat 1.2em 0.2em/ 45px 80%;
776 816
           ;
777
-          height: 18%;
817
+          height: 100%;
778 818
           color: #69FFDE;
779 819
           display: flex;
780 820
           justify-content: center;
@@ -995,7 +1035,7 @@
995 1035
   }
996 1036
 
997 1037
   .leftContent .bottomContent {
998
-    height: 42% !important;
1038
+    height: 100% !important;
999 1039
 
1000 1040
     .eacharView {
1001 1041
       display: flex;

+ 2 - 1
src/pages/frame/component/top/style.less

@@ -5,7 +5,8 @@
5 5
   width: 100%;
6 6
   z-index: 100;
7 7
   height: 50px;
8
-  background-color: #041747;
8
+  background:#0a091e;
9
+  background-color: #0a091e;
9 10
   color: #fff;
10 11
   padding: 0 16px;
11 12
   display: flex;

+ 29 - 53
src/pages/frame/component/top/view.jsx

@@ -28,30 +28,6 @@ import {
28 28
   Popover,
29 29
   Button,
30 30
 } from "antd";
31
-import {
32
-  AreaChartOutlined,
33
-  PieChartOutlined,
34
-  BarChartOutlined,
35
-  DotChartOutlined,
36
-  LineChartOutlined,
37
-  RadarChartOutlined,
38
-  HeatMapOutlined,
39
-  FallOutlined,
40
-  RiseOutlined,
41
-  StockOutlined,
42
-  BoxPlotOutlined,
43
-  FundOutlined,
44
-  SlidersOutlined,
45
-  DatabaseOutlined,
46
-  DollarOutlined,
47
-  ControlOutlined,
48
-  CodeOutlined,
49
-  BarsOutlined,
50
-  AppstoreAddOutlined,
51
-  ApartmentOutlined,
52
-  CloseOutlined,
53
-} from "@ant-design/icons";
54
-import { listUserModuleBulletinsNew } from "@apis/system";
55 31
 
56 32
 import {
57 33
   setMessageWasDeal,
@@ -72,14 +48,12 @@ import {
72 48
 } from "./api.js";
73 49
 
74 50
 import $store from "@store/";
75
-import ResetPassword from "@components/resetPasswordModal/view";
76
-import TreeSearch from "@components/TreeSelectSearch/view";
77 51
 import { dealDiffSheetType, handleClickForUtil, crossMenuClick } from "@utils/util";
78 52
 import { switchPage, getUnionId } from "@apis/common.js";
79
-// import LightMenu from "@components/LightMenu/view.jsx";
80 53
 import Cookie from 'js-cookie';
81 54
 import { toJS } from "mobx";
82 55
 import utils from "@utils/index";
56
+import 'animate.css';
83 57
 
84 58
 
85 59
 const { SubMenu } = Menu;
@@ -795,35 +769,37 @@ export default observer(function (props) {
795 769
     messageSourceName,
796 770
   } = detailMessage || {}; /**解构 当前点击的详情数据 */
797 771
   return (
798
-    <div className={$store.app.styleCommon.theme == 'chaBaiDao' ? [styles.top + ' top'] : styles.top}>
799
-      <div className="title_box">
800
-        <img
801
-          src={require("@assets/imgs/dataVimg/logo.png").default}
802
-          width="17"
803
-         />
804
-         <h1>运营数据中心</h1>
805
-      </div>
806
-      {/* {history.location.pathname === "/home/index" && (
807
-        <>
808
-          <div className="style">
809
-            <span className="iconfont a-switch2x"></span>
810
-            <span className="style_change">风格切换</span>
811
-          </div>
812
-          <span className="split_line">|</span>
813
-        </>
814
-      )} */}
815
-      <div className="contact" style={{ width: '30px' }}>
816
-        {/* <QuestionCircleOutlied onClick={handleContact} /> */}
817
-        {/* <Tooltip placement="bottom" title="切换主题">
772
+    <div class="top2 animate__animated animate__fadeInDown animate__delay-1s">
773
+      <div className={$store.app.styleCommon.theme == 'chaBaiDao' ? [styles.top + ' top'] : styles.top}>
774
+        <div className="title_box">
818 775
           <img
819
-            src={require("@assets/imgs/icon_xitong.png").default}
820
-            alt=""
776
+            src={require("@assets/imgs/dataVimg/logo.png").default}
821 777
             width="17"
822
-            style={{ "marginRight": "10px" }}
823
-            onClick={changeThemesStyle} />
824
-        </Tooltip> */}
825
-      </div>
778
+          />
779
+          <h1>运营数据中心</h1>
780
+        </div>
781
+        {/* {history.location.pathname === "/home/index" && (
782
+          <>
783
+            <div className="style">
784
+              <span className="iconfont a-switch2x"></span>
785
+              <span className="style_change">风格切换</span>
786
+            </div>
787
+            <span className="split_line">|</span>
788
+          </>
789
+        )} */}
790
+        <div className="contact" style={{ width: '30px' }}>
791
+          {/* <QuestionCircleOutlied onClick={handleContact} /> */}
792
+          {/* <Tooltip placement="bottom" title="切换主题">
793
+            <img
794
+              src={require("@assets/imgs/icon_xitong.png").default}
795
+              alt=""
796
+              width="17"
797
+              style={{ "marginRight": "10px" }}
798
+              onClick={changeThemesStyle} />
799
+          </Tooltip> */}
800
+        </div>
826 801
 
802
+      </div>
827 803
     </div>
828 804
   );
829 805
 });

+ 2 - 1
src/pages/frame/style.less

@@ -332,7 +332,8 @@
332 332
 }
333 333
 
334 334
 .frame {
335
-  background-color: #f5f5f5;
335
+  background:#0a091e;
336
+  background-color: #0a091e;
336 337
   position: relative;
337 338
   height: 100%;
338 339
   overflow: hidden;

+ 109 - 0
src/pages/tqcDataVHome/component/mapView.jsx

@@ -0,0 +1,109 @@
1
+/*
2
+ * @Author: dayan_hjm 中部地图 第一段
3
+ * @Date: 2023-10-25 10:32:44 
4
+ * @Last Modified by: dayan_hjm
5
+ * controls 属性 : 值为 controls , 启用控制按钮 , 由于在不同的浏览器中表现不同 , 一般情况下 , 不显示控制按钮 ;
6
+        autoplay 属性 : 值为 autoplay , 在 Chrome 浏览器中 禁用自动播放 , 其它浏览器不禁用自动播放 ;
7
+        如果为视频设置静音播放 , 则可以在 Chrom 浏览器中 设置 autoplay 实现自动播放 ;
8
+        muted 属性 : 值为 muted , 将视频设置为静音播放 ;
9
+        如果为视频设置静音播放 , 则可以在 Chrom 浏览器中 设置 autoplay 实现自动播放 ;
10
+        width 属性 : 值为像素值 , 设置播放器宽度 ; 播放器的宽高建议只设置一个 , 避免失真 ;
11
+        height 属性 : 值为像素值 , 设置播放器高度 ; 播放器的宽高建议只设置一个 , 避免失真 ;
12
+        loop 属性 : 值为 loop , 设置播放器循环播放 ;
13
+        poster 属性 : 值为 图片 url 路径 , 设置视频位置等待加载时的图片 ;
14
+        preload 属性 :
15
+        设置 auto , 表示 预先加载视频 ;
16
+        设置 none , 表示 不预先加载视频 ;
17
+ * @Last Modified time: 2023-10-25 16:42:50
18
+ */
19
+import React, { useState, useEffect, Component } from "react";
20
+import { useHistory, useLocation, withRouter } from "react-router-dom";
21
+import mod from '../mod';
22
+import 'animate.css';
23
+@withRouter
24
+
25
+class MapView extends Component {
26
+  // 构造函数,组件的实例创建时,最先执行
27
+  constructor(props, context) {
28
+    super(props, context);
29
+    this.store = mod;
30
+    this.state = {
31
+      changGif: false,
32
+    };
33
+  }
34
+
35
+  componentDidMount() {
36
+    setTimeout(() => {
37
+      //替换gif
38
+      this.setState({ changGif: true });
39
+      this.videoStart();
40
+    }, 200)
41
+    // setTimeout(() => {
42
+    //   $(".video_box_hide").hide();
43
+    // }, 4000)
44
+  }
45
+  videoStart() {
46
+    /*     Chrome 浏览器的视频自动播放策略
47
+        1.始终允许静音模式下自动播放
48
+        2.在以下的情况中,带声音播放会被允许:
49
+          ①用户已经与当前的域进行了交互(也就是click,tap事件)。
50
+          ②在桌面设备上,用户的媒体参与度指数阈值已经超过,这意味着用户之前播放过有声视频。
51
+          ③用户已经将网站添加到移动设备上的主屏幕或允在桌面上安装了PWA。
52
+        3.顶部帧可以将自动播放权限委派给其iframe,来允许自动播放声音
53
+        
54
+        媒体参与度(Media Engagement)是指用户与媒体内容进行互动的程度,可以通过多个指标来衡量。这些指标主要包括观看时间、观看率、转化率、交互行为等。
55
+        可以通过:chrome://media-engagement/ 查看
56
+     */
57
+    const video = document.querySelector('.video1');
58
+    console.log(video.play());
59
+
60
+    const model = document.querySelector('.model')
61
+    const btn = document.querySelector('button')
62
+    // 第一种方法 引导用户去与页面交互实现播放
63
+    async function play() {
64
+      try {
65
+        await video.play();
66
+        //使用await的原因是因为video.play()方法返回的是一个Promise,所以在这里我们可以对他进行一些处理
67
+        // model.style.display = 'none';
68
+        btn.removeEventListener('click', play);
69
+        // 如果他自动播放了就隐藏按钮,消除点击事件
70
+      } catch (err) {
71
+        // model.style.display = 'block';
72
+        btn.addEventListener('click', play);
73
+        // 如果Promise返回的是error就引导用户点击按钮,在调用play方法
74
+      }
75
+    }
76
+    play();
77
+
78
+    //第二种方法比较主流,类似的有网页版抖音以及B站
79
+    function play() {
80
+      video.muted = true;//设置视频为静音
81
+      video.play();//调用播放方法
82
+      const ctx = new AudioContext();
83
+      const canAutoPlay = ctx.state === 'running'; //通过这个可以判断出视频能不能够自动播放 如何可以它的值就是“running” 否则为"suspended"
84
+      // 如果是不能播放我们就执行下面的逻辑,其实就是类似于第一种方法,让用户与其交互
85
+      ctx.close();
86
+      if (canAutoPlay) {
87
+        video.muted = false;
88
+        model.style.display = 'none';
89
+        btn.removeEventListener('click', play);
90
+      }
91
+      else {
92
+        model.style.display = 'block';
93
+        btn.addEventListener('click', play);
94
+      }
95
+    }
96
+    play()
97
+
98
+  }
99
+
100
+  render() {
101
+    const { changGif } = this.state;
102
+    return (
103
+      <div class="video_box video_box_hide animate__animated animate__fadeOut animate__delay-2s">
104
+          <video src={require("@assets/imgs/dataVImg/homeVideo.mp4").default} autoplay="autoplay" class="video1"></video>
105
+      </div>
106
+    )
107
+  }
108
+}
109
+export default MapView;

+ 84 - 75
src/pages/tqcDataVHome/view.jsx

@@ -2,7 +2,7 @@
2 2
  * @Author: dayan_hjm 
3 3
  * @Date: 2023-10-25 10:32:44 
4 4
  * @Last Modified by: dayan_hjm
5
- * @Last Modified time: 2023-10-25 10:45:33
5
+ * @Last Modified time: 2023-10-25 16:46:16
6 6
  */
7 7
 /*
8 8
  * @Author: dayan_hjm 
@@ -52,7 +52,8 @@ import MoodSendView from "./component/moodSendView.jsx";
52 52
 import LeftMenoyView from "./component/leftMenoyView.jsx";
53 53
 import RightBottomView from "./component/rightBottomView.jsx";
54 54
 import OneQualified from "./component/oneQualified.jsx";
55
-
55
+import MapView from "./component/mapView.jsx";
56
+import 'animate.css';
56 57
 @withRouter
57 58
 
58 59
 class Home extends Component {
@@ -72,7 +73,7 @@ class Home extends Component {
72 73
     }, 200)
73 74
     setTimeout(() => {
74 75
       //替换gif
75
-      this.setState({ changGif: true })
76
+      this.setState({ changGif: true });
76 77
     }, 2000)
77 78
   }
78 79
   videoStart() {
@@ -87,7 +88,7 @@ class Home extends Component {
87 88
         媒体参与度(Media Engagement)是指用户与媒体内容进行互动的程度,可以通过多个指标来衡量。这些指标主要包括观看时间、观看率、转化率、交互行为等。
88 89
         可以通过:chrome://media-engagement/ 查看
89 90
      */
90
-    const video = document.querySelector('video')
91
+    const video = document.querySelector('.video2');
91 92
     console.log(video.play());
92 93
 
93 94
     const model = document.querySelector('.model')
@@ -140,76 +141,76 @@ class Home extends Component {
140 141
     return (
141 142
       <div className={"home_box"}>
142 143
         {/* 视频播放器 */}
144
+        <MapView></MapView>
143 145
         <div className={"video_box"}>
144
-          {/*         controls 属性 : 值为 controls , 启用控制按钮 , 由于在不同的浏览器中表现不同 , 一般情况下 , 不显示控制按钮 ;
145
-        autoplay 属性 : 值为 autoplay , 在 Chrome 浏览器中 禁用自动播放 , 其它浏览器不禁用自动播放 ;
146
-        如果为视频设置静音播放 , 则可以在 Chrom 浏览器中 设置 autoplay 实现自动播放 ;
147
-        muted 属性 : 值为 muted , 将视频设置为静音播放 ;
148
-        如果为视频设置静音播放 , 则可以在 Chrom 浏览器中 设置 autoplay 实现自动播放 ;
149
-        width 属性 : 值为像素值 , 设置播放器宽度 ; 播放器的宽高建议只设置一个 , 避免失真 ;
150
-        height 属性 : 值为像素值 , 设置播放器高度 ; 播放器的宽高建议只设置一个 , 避免失真 ;
151
-        loop 属性 : 值为 loop , 设置播放器循环播放 ;
152
-        poster 属性 : 值为 图片 url 路径 , 设置视频位置等待加载时的图片 ;
153
-        preload 属性 :
154
-        设置 auto , 表示 预先加载视频 ;
155
-        设置 none , 表示 不预先加载视频 ;
156
-        */}
157
-          {/* <video style={{display:!changGif ? 'block' : 'none'}} src={require("@assets/imgs/dataVImg/homeVideo.mp4").default} autoplay="autoplay"></video> */}
158
-          <video src={require("@assets/imgs/dataVImg/homeVideo2.mp4").default} autoplay="autoplay" loop="loop"></video>
159
-          
146
+          <video src={require("@assets/imgs/dataVImg/homeVideo2.mp4").default} autoplay="autoplay" loop="loop" class="video2 center_box2 animate__animated animate__fadeIn animate__delay-2s"></video>
160 147
         </div>
161 148
         <div className={[styles.home + " home cbHome"]}>
162 149
           <div className="leftContent">
163
-            <div className="topMsg">
164
-              <p className="topMsg_title">总产值</p>
165
-              <div className={changGif ? "topMsg_content changBg_topMsg_content" : "topMsg_content"}>
166
-                <span className="topMsg_number" class="shu1">232425.23</span><span className="topMsg_number_2">万元</span>
150
+
151
+            <div class="topMsg2 animate__animated animate__fadeInDown animate__slower">
152
+              <div className="topMsg">
153
+                <p className="topMsg_title">总产值</p>
154
+                <div className={changGif ? "topMsg_content changBg_topMsg_content" : "topMsg_content"}>
155
+                  <span className="topMsg_number" class="shu1">232425.23</span><span className="topMsg_number_2">万元</span>
156
+                </div>
167 157
               </div>
168 158
             </div>
169
-            <div className="center_box">
170
-              <p className="topMsg_title">库存金额</p>
171
-              <div className="topMsg_content">
172
-                <LeftMenoyView></LeftMenoyView>
159
+
160
+            <div class="center_box2 animate__animated animate__fadeInDown animate__slower">
161
+              <div className="center_box">
162
+                <p className="topMsg_title">库存金额</p>
163
+                <div className="topMsg_content">
164
+                  <LeftMenoyView></LeftMenoyView>
165
+                </div>
173 166
               </div>
174 167
             </div>
175
-            <div className="bottomContent bigDivPd">
176
-              <p className="topMsg_title">月度产量/发货量</p>
177
-              <div className="topMsg_content">
178
-                <MoodSendView></MoodSendView>
168
+
169
+            <div class="bottomContent2 animate__animated animate__fadeInDown animate__slower animate__delay-1s">
170
+              <div className="bottomContent bigDivPd">
171
+                <p className="topMsg_title">月度产量/发货量</p>
172
+                <div className="topMsg_content">
173
+                  <MoodSendView></MoodSendView>
174
+                </div>
179 175
               </div>
180 176
             </div>
177
+
181 178
           </div>
182 179
 
183 180
           <div className="centerCon">
184
-            <div className="topMsg">
185
-              <div className="topMsg2">
186
-                <div className="topMsg_content">
187
-                  <div className="center_li">
188
-                    <div className="right_li">
189
-                      <span className="topMsg_number" class="shu1">232425</span>
190
-                      <p className="topMsg_line"></p>
191
-                      <span className="topMsg_tip">年度产量/吨</span>
181
+            <div class="topMsg3 animate__animated animate__fadeInDown animate__slower">
182
+              <div className="topMsg">
183
+                <div className="topMsg2">
184
+                  <div className="topMsg_content">
185
+                    <div className="center_li">
186
+                      <div className="right_li">
187
+                        <span className="topMsg_number" class="shu1">232425</span>
188
+                        <p className="topMsg_line"></p>
189
+                        <span className="topMsg_tip">年度产量/吨</span>
190
+                      </div>
192 191
                     </div>
193
-                  </div>
194
-                  <div className="center_li">
195
-                    <div className="right_li">
196
-                      <span className="topMsg_number" class="shu1">32425</span>
192
+                    <div className="center_li">
193
+                      <div className="right_li">
194
+                        <span className="topMsg_number" class="shu1">32425</span>
195
+                        <p className="topMsg_line"></p>
196
+                        <span className="topMsg_tip">年度发货量/吨</span>
197
+                      </div>
198
+                    </div>
199
+                    <div className="center_li">
200
+                      <span className="topMsg_number" class="shu1">13456</span>
197 201
                       <p className="topMsg_line"></p>
198
-                      <span className="topMsg_tip">年度发货量/吨</span>
202
+                      <span className="topMsg_tip">产品库存/吨</span>
199 203
                     </div>
200 204
                   </div>
201
-                  <div className="center_li">
202
-                    <span className="topMsg_number" class="shu1">13456</span>
203
-                    <p className="topMsg_line"></p>
204
-                    <span className="topMsg_tip">产品库存/吨</span>
205
-                  </div>
206 205
                 </div>
207 206
               </div>
208 207
             </div>
209
-            <div className="bottomContent">
210
-              <p className="topMsg_title">近30天产量</p>
211
-              <div className="topMsg_content">
212
-                <BottomLineForSend></BottomLineForSend>
208
+            <div class="bottomContent3 animate__animated animate__fadeInUp animate__slower">
209
+              <div className="bottomContent">
210
+                <p className="topMsg_title">近30天产量</p>
211
+                <div className="topMsg_content">
212
+                  <BottomLineForSend></BottomLineForSend>
213
+                </div>
213 214
               </div>
214 215
             </div>
215 216
 
@@ -217,37 +218,45 @@ class Home extends Component {
217 218
 
218 219
           {/* 右侧信息栏 */}
219 220
           <div className="rightContent">
220
-            <div className="topMsg bigDivPd">
221
-              <p className="topMsg_title">百万工时损工率</p>
222
-              <div className={changGif ? "topMsg_content changBg_topMsg_content" : "topMsg_content"}>
223
-                <div className="topMsg_box">
224
-                  <span className="topMsg_number" class="shu1">232425.23</span><span className="topMsg_number_2">%</span>
225
-                  <p className="topMsg_number_p">谢洪</p>
221
+            <div class="topMsg2 animate__animated animate__fadeInDown animate__slower">
222
+              <div className="topMsg bigDivPd">
223
+                <p className="topMsg_title">百万工时损工率</p>
224
+                <div className={changGif ? "topMsg_content changBg_topMsg_content" : "topMsg_content"}>
225
+                  <div className="topMsg_box">
226
+                    <span className="topMsg_number" class="shu1">232425.23</span><span className="topMsg_number_2">%</span>
227
+                    <p className="topMsg_number_p">谢洪</p>
228
+                  </div>
226 229
                 </div>
227 230
               </div>
228 231
             </div>
229 232
 
230
-            <div className="topMsg_2">
231
-              <p className="topMsg_title">一次合格率</p>
232
-              <div className="topMsg_content">
233
-                <OneQualified></OneQualified>
233
+            <div class="topMsg_22 animate__animated animate__fadeInDown animate__slower">
234
+              <div className="topMsg_2">
235
+                <p className="topMsg_title">一次合格率</p>
236
+                <div className="topMsg_content">
237
+                  <OneQualified></OneQualified>
238
+                </div>
234 239
               </div>
235 240
             </div>
236 241
 
237
-            <div className="topMsg_3">
238
-              <p className="topMsg_title">产量计划完成率</p>
239
-              <div className={changGif ? "topMsg_content changBg_topMsg_content" : "topMsg_content"}>
240
-                <div className="topMsg_box">
241
-                  <span className="topMsg_number" class="shu1">78.1</span><span className="topMsg_number_2">%</span>
242
-                  <p className="topMsg_number_p">谢洪</p>
242
+            <div class="topMsg_33 animate__animated animate__fadeInDown animate__slower animate__delay-1s">
243
+              <div className="topMsg_3">
244
+                <p className="topMsg_title">产量计划完成率</p>
245
+                <div className={changGif ? "topMsg_content changBg_topMsg_content" : "topMsg_content"}>
246
+                  <div className="topMsg_box">
247
+                    <span className="topMsg_number" class="shu1">78.1</span><span className="topMsg_number_2">%</span>
248
+                    <p className="topMsg_number_p">谢洪</p>
249
+                  </div>
243 250
                 </div>
244 251
               </div>
245 252
             </div>
246
-
247
-            <div className="bottomContent bigDivPd">
248
-              <p className="topMsg_title">碳排放</p>
249
-              <div className="topMsg_content">
250
-                <RightBottomView></RightBottomView>
253
+            
254
+            <div class="bottomContent2 animate__animated animate__fadeInDown animate__slower  animate__delay-1s">
255
+              <div className="bottomContent bigDivPd">
256
+                <p className="topMsg_title">碳排放</p>
257
+                <div className="topMsg_content">
258
+                  <RightBottomView></RightBottomView>
259
+                </div>
251 260
               </div>
252 261
             </div>
253 262
           </div>

+ 5 - 0
yarn.lock

@@ -2793,6 +2793,11 @@ alphanum-sort@^1.0.0:
2793 2793
   resolved "https://registry.npmmirror.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz"
2794 2794
   integrity sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==
2795 2795
 
2796
+animate.css@^4.1.1:
2797
+  version "4.1.1"
2798
+  resolved "https://registry.yarnpkg.com/animate.css/-/animate.css-4.1.1.tgz#614ec5a81131d7e4dc362a58143f7406abd68075"
2799
+  integrity sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==
2800
+
2796 2801
 ansi-colors@^3.0.0:
2797 2802
   version "3.2.4"
2798 2803
   resolved "https://registry.npmmirror.com/ansi-colors/-/ansi-colors-3.2.4.tgz"