Browse Source

(*)水利大屏提交

master
peng.peng 2 years ago
parent
commit
6df4b3b593
  1. BIN
      super-screen/client/assets/images/homepage/fire/alarm1.png
  2. BIN
      super-screen/client/assets/images/homepage/fire/alarm2.png
  3. BIN
      super-screen/client/assets/images/homepage/fire/alarmbg.png
  4. BIN
      super-screen/client/assets/images/homepage/fire/alarmtime.png
  5. BIN
      super-screen/client/assets/images/homepage/fire/bg3.png
  6. BIN
      super-screen/client/assets/images/homepage/fire/iconhome.png
  7. BIN
      super-screen/client/assets/images/homepage/fire/lefticon1.png
  8. BIN
      super-screen/client/assets/images/homepage/fire/lefticon2.png
  9. BIN
      super-screen/client/assets/images/homepage/fire/lefticon3.png
  10. BIN
      super-screen/client/assets/images/homepage/fire/lefticon4.png
  11. BIN
      super-screen/client/assets/images/homepage/fire/position.png
  12. BIN
      super-screen/client/assets/images/homepage/fire/rightbgbig.png
  13. BIN
      super-screen/client/assets/images/homepage/fire/rightbgsmall.png
  14. BIN
      super-screen/client/assets/images/homepage/fire/secondbg.png
  15. BIN
      super-screen/client/assets/images/homepage/fire/triangle1.png
  16. BIN
      super-screen/client/assets/images/homepage/fire/triangle2.png
  17. BIN
      super-screen/client/assets/images/homepage/water/down.png
  18. BIN
      super-screen/client/assets/images/homepage/water/normal.png
  19. BIN
      super-screen/client/assets/images/homepage/water/up.png
  20. BIN
      super-screen/client/assets/images/homepage/water/warning.png
  21. 116
      super-screen/client/assets/images/map1.svg
  22. BIN
      super-screen/client/assets/images/ring_bg.png
  23. BIN
      super-screen/client/assets/images/ring_chart_bg.png
  24. 9
      super-screen/client/src/components/index.js
  25. 33
      super-screen/client/src/components/public/carousel-list.js
  26. 108
      super-screen/client/src/components/public/index.less
  27. 18
      super-screen/client/src/components/public/noData.js
  28. 469
      super-screen/client/src/components/public/scrollBoard/index.js
  29. 44
      super-screen/client/src/components/public/scrollBoard/style.less
  30. 45
      super-screen/client/src/components/public/table-card.js
  31. 2
      super-screen/client/src/sections/community-safty/components/basic-info.js
  32. 2
      super-screen/client/src/sections/community-safty/components/city-safty.js
  33. 2
      super-screen/client/src/sections/community-safty/components/infrastructure.js
  34. 2
      super-screen/client/src/sections/community-safty/components/population-dynamics.js
  35. 2
      super-screen/client/src/sections/community-safty/components/special-person.js
  36. 12
      super-screen/client/src/sections/community-safty/components/style.less
  37. 2
      super-screen/client/src/sections/community-safty/components/traffic-ranking.js
  38. 2
      super-screen/client/src/sections/community-safty/containers/gis.js
  39. 49
      super-screen/client/src/sections/fire-control/components/item-left.js
  40. 33
      super-screen/client/src/sections/fire-control/components/item-right.js
  41. 27
      super-screen/client/src/sections/fire-control/components/left-bottom.js
  42. 2
      super-screen/client/src/sections/fire-control/components/left-middle.js
  43. 2
      super-screen/client/src/sections/fire-control/components/left-top.js
  44. 2
      super-screen/client/src/sections/fire-control/components/right-bottom.js
  45. 167
      super-screen/client/src/sections/fire-control/components/right-middle.js
  46. 2
      super-screen/client/src/sections/fire-control/components/right-top.js
  47. 239
      super-screen/client/src/sections/fire-control/components/style.less
  48. 4
      super-screen/client/src/sections/fire-control/containers/gis.js
  49. 2
      super-screen/client/src/sections/homePage/components/accessData.js
  50. 2
      super-screen/client/src/sections/homePage/components/alarmList.js
  51. 2
      super-screen/client/src/sections/homePage/components/dataShare.js
  52. 2
      super-screen/client/src/sections/homePage/components/dataTop5.js
  53. 2
      super-screen/client/src/sections/homePage/components/hotspotData.js
  54. 2
      super-screen/client/src/sections/homePage/components/nodeResource.js
  55. 2
      super-screen/client/src/sections/homePage/containers/homePage.js
  56. 49
      super-screen/client/src/sections/water-prevention/components/abnormalMonitoring.js
  57. 36
      super-screen/client/src/sections/water-prevention/components/accessData.js
  58. 52
      super-screen/client/src/sections/water-prevention/components/alarmList.js
  59. 19
      super-screen/client/src/sections/water-prevention/components/centerTop.js
  60. 78
      super-screen/client/src/sections/water-prevention/components/charts/constants.js
  61. 122
      super-screen/client/src/sections/water-prevention/components/charts/ring.js
  62. 54
      super-screen/client/src/sections/water-prevention/components/dataShare.js
  63. 262
      super-screen/client/src/sections/water-prevention/components/dataTop5.js
  64. 55
      super-screen/client/src/sections/water-prevention/components/emergency-left-bottom.js
  65. 13
      super-screen/client/src/sections/water-prevention/components/emergency-left-top.js
  66. 37
      super-screen/client/src/sections/water-prevention/components/emergency-right-bottom.js
  67. 43
      super-screen/client/src/sections/water-prevention/components/emergency-right-top.js
  68. 42
      super-screen/client/src/sections/water-prevention/components/hotspotData.js
  69. 58
      super-screen/client/src/sections/water-prevention/components/left-bottom.js
  70. 30
      super-screen/client/src/sections/water-prevention/components/left-top.js
  71. 39
      super-screen/client/src/sections/water-prevention/components/nodeResource.js
  72. 41
      super-screen/client/src/sections/water-prevention/components/public/index.less
  73. 27
      super-screen/client/src/sections/water-prevention/components/public/table-card.js
  74. 35
      super-screen/client/src/sections/water-prevention/components/right-bottom.js
  75. 38
      super-screen/client/src/sections/water-prevention/components/right-top.js
  76. 836
      super-screen/client/src/sections/water-prevention/components/style.less
  77. 955
      super-screen/client/src/sections/water-prevention/containers/data.js
  78. 530
      super-screen/client/src/sections/water-prevention/containers/gis.js
  79. 434
      super-screen/client/src/sections/water-prevention/containers/gis.less
  80. 93
      super-screen/client/src/sections/water-prevention/containers/homePage.js
  81. 221
      super-screen/client/src/sections/water-prevention/containers/style.less

BIN
super-screen/client/assets/images/homepage/fire/alarm1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
super-screen/client/assets/images/homepage/fire/alarm2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
super-screen/client/assets/images/homepage/fire/alarmbg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
super-screen/client/assets/images/homepage/fire/alarmtime.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
super-screen/client/assets/images/homepage/fire/bg3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

BIN
super-screen/client/assets/images/homepage/fire/iconhome.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
super-screen/client/assets/images/homepage/fire/lefticon1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
super-screen/client/assets/images/homepage/fire/lefticon2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
super-screen/client/assets/images/homepage/fire/lefticon3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

BIN
super-screen/client/assets/images/homepage/fire/lefticon4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
super-screen/client/assets/images/homepage/fire/position.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 534 B

BIN
super-screen/client/assets/images/homepage/fire/rightbgbig.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
super-screen/client/assets/images/homepage/fire/rightbgsmall.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 671 B

BIN
super-screen/client/assets/images/homepage/fire/secondbg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

BIN
super-screen/client/assets/images/homepage/fire/triangle1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 B

BIN
super-screen/client/assets/images/homepage/fire/triangle2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 B

BIN
super-screen/client/assets/images/homepage/water/down.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 403 B

BIN
super-screen/client/assets/images/homepage/water/normal.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
super-screen/client/assets/images/homepage/water/up.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 414 B

BIN
super-screen/client/assets/images/homepage/water/warning.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

116
super-screen/client/assets/images/map1.svg

@ -0,0 +1,116 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="596px" height="933px" viewBox="0 0 596 933" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>南昌县</title>
<defs>
<linearGradient x1="55.4759948%" y1="15.5271184%" x2="47.1019145%" y2="89.3253371%" id="linearGradient-1">
<stop stop-color="#0067FF" stop-opacity="0.4" offset="0%"></stop>
<stop stop-color="#0067FF" stop-opacity="0.2" offset="51.6629733%"></stop>
<stop stop-color="#0067FF" stop-opacity="0.4" offset="100%"></stop>
</linearGradient>
<linearGradient x1="0%" y1="50%" x2="100%" y2="50%" id="linearGradient-2">
<stop stop-color="#B7CBFF" offset="0%"></stop>
<stop stop-color="#80A4FF" offset="49.8188579%"></stop>
<stop stop-color="#82A6FF" offset="79.1018737%"></stop>
<stop stop-color="#B7CBFF" offset="100%"></stop>
</linearGradient>
<polygon id="path-3" points="0 525.246305 4.20300752 554.660099 33.6240602 600.881773 33.6240602 621.891626 12.6090226 684.921182 46.2330827 718.536946 58.8421053 756.35468 54.6390977 798.374384 67.2481203 806.778325 75.6541353 827.788177 88.2631579 819.384236 100.87218 794.172414 109.278195 794.172414 113.481203 810.980296 117.684211 798.374384 130.293233 794.172414 163.917293 819.384236 151.308271 836.192118 155.511278 840.394089 172.323308 840.394089 184.932331 831.990148 184.932331 823.586207 197.541353 823.586207 201.744361 836.192118 210.150376 840.394089 247.977444 819.384236 264.789474 819.384236 281.601504 823.586207 311.022556 853 302.616541 823.586207 315.225564 806.778325 311.022556 798.374384 285.804511 794.172414 285.804511 777.364532 268.992481 777.364532 273.195489 760.55665 252.180451 747.950739 239.571429 731.142857 235.368421 705.931034 247.977444 680.719212 243.774436 651.305419 235.368421 638.699507 256.383459 605.083744 273.195489 609.285714 290.007519 600.881773 327.834586 626.093596 353.052632 613.487685 361.458647 596.679803 365.661654 542.054187 374.067669 529.448276 437.112782 483.226601 437.112782 474.82266 470.736842 428.600985 504.360902 424.399015 521.172932 411.793103 525.37594 390.783251 500.157895 378.17734 491.75188 361.369458 529.578947 315.147783 521.172932 294.137931 550.593985 273.128079 559 256.320197 554.796992 239.512315 529.578947 210.098522 516.969925 214.300493 504.360902 197.492611 474.93985 197.492611 466.533835 180.684729 474.93985 155.472906 462.330827 134.463054 466.533835 121.857143 487.548872 109.251232 533.781955 113.453202 521.172932 84.0394089 495.954887 67.2315271 500.157895 42.0197044 487.548872 4.20197044 474.93985 0 441.315789 25.2118227 437.112782 21.0098522 407.691729 29.4137931 386.676692 79.8374384 374.067669 92.4433498 357.255639 88.2413793 348.849624 75.635468 319.428571 96.6453202 281.601504 84.0394089 273.195489 88.2413793 243.774436 117.655172 235.368421 155.472906 210.150376 151.270936 163.917293 184.8867 159.714286 205.896552 189.135338 214.300493 189.135338 222.704433 138.699248 268.926108 134.496241 281.53202 138.699248 289.935961 163.917293 277.330049 180.729323 277.330049 205.947368 289.935961 226.962406 289.935961 235.368421 298.339901 222.759398 306.743842 218.556391 315.147783 226.962406 323.551724 222.759398 319.349754 214.353383 327.753695 201.744361 365.571429 210.150376 365.571429 218.556391 382.37931 235.368421 394.985222 256.383459 373.975369 256.383459 394.985222 264.789474 407.591133 260.586466 432.802956 252.180451 432.802956 252.180451 441.206897 218.556391 466.418719 189.135338 453.812808 184.932331 462.216749 163.917293 449.610837 138.699248 453.812808 126.090226 445.408867 105.075188 466.418719 105.075188 453.812808 88.2631579 441.206897 88.2631579 432.802956 63.0451128 432.802956 54.6390977 424.399015 42.0300752 432.802956 25.2180451 424.399015 12.6090226 445.408867 0 521.044335"></polygon>
<filter x="-6.3%" y="-3.9%" width="112.6%" height="113.2%" filterUnits="objectBoundingBox" id="filter-4">
<feMorphology radius="7" operator="dilate" in="SourceAlpha" result="shadowSpreadOuter1"></feMorphology>
<feOffset dx="0" dy="20" in="shadowSpreadOuter1" result="shadowOffsetOuter1"></feOffset>
<feComposite in="shadowOffsetOuter1" in2="SourceAlpha" operator="out" result="shadowOffsetOuter1"></feComposite>
<feColorMatrix values="0 0 0 0 0.141176471 0 0 0 0 0.862745098 0 0 0 0 0.968627451 0 0 0 1 0" type="matrix" in="shadowOffsetOuter1" result="shadowMatrixOuter1"></feColorMatrix>
<feMorphology radius="5" operator="dilate" in="SourceAlpha" result="shadowSpreadOuter2"></feMorphology>
<feOffset dx="0" dy="0" in="shadowSpreadOuter2" result="shadowOffsetOuter2"></feOffset>
<feGaussianBlur stdDeviation="2.5" in="shadowOffsetOuter2" result="shadowBlurOuter2"></feGaussianBlur>
<feComposite in="shadowBlurOuter2" in2="SourceAlpha" operator="out" result="shadowBlurOuter2"></feComposite>
<feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.5 0" type="matrix" in="shadowBlurOuter2" result="shadowMatrixOuter2"></feColorMatrix>
<feMorphology radius="6" operator="dilate" in="SourceAlpha" result="shadowSpreadOuter3"></feMorphology>
<feOffset dx="0" dy="2" in="shadowSpreadOuter3" result="shadowOffsetOuter3"></feOffset>
<feGaussianBlur stdDeviation="2" in="shadowOffsetOuter3" result="shadowBlurOuter3"></feGaussianBlur>
<feComposite in="shadowBlurOuter3" in2="SourceAlpha" operator="out" result="shadowBlurOuter3"></feComposite>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0.238491245 0 0 0 0 1 0 0 0 0.1 0" type="matrix" in="shadowBlurOuter3" result="shadowMatrixOuter3"></feColorMatrix>
<feMorphology radius="7" operator="dilate" in="SourceAlpha" result="shadowSpreadOuter4"></feMorphology>
<feOffset dx="0" dy="20" in="shadowSpreadOuter4" result="shadowOffsetOuter4"></feOffset>
<feGaussianBlur stdDeviation="4" in="shadowOffsetOuter4" result="shadowBlurOuter4"></feGaussianBlur>
<feComposite in="shadowBlurOuter4" in2="SourceAlpha" operator="out" result="shadowBlurOuter4"></feComposite>
<feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.2 0" type="matrix" in="shadowBlurOuter4" result="shadowMatrixOuter4"></feColorMatrix>
<feMerge>
<feMergeNode in="shadowMatrixOuter1"></feMergeNode>
<feMergeNode in="shadowMatrixOuter2"></feMergeNode>
<feMergeNode in="shadowMatrixOuter3"></feMergeNode>
<feMergeNode in="shadowMatrixOuter4"></feMergeNode>
</feMerge>
</filter>
<filter x="-3.8%" y="-2.2%" width="107.6%" height="109.9%" filterUnits="objectBoundingBox" id="filter-5">
<feMorphology radius="2" operator="erode" in="SourceAlpha" result="shadowSpreadInner1"></feMorphology>
<feGaussianBlur stdDeviation="2" in="shadowSpreadInner1" result="shadowBlurInner1"></feGaussianBlur>
<feOffset dx="0" dy="0" in="shadowBlurInner1" result="shadowOffsetInner1"></feOffset>
<feComposite in="shadowOffsetInner1" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowInnerInner1"></feComposite>
<feColorMatrix values="0 0 0 0 0.00298628156 0 0 0 0 0.470276468 0 0 0 0 0.538846223 0 0 0 0.4 0" type="matrix" in="shadowInnerInner1"></feColorMatrix>
</filter>
<linearGradient x1="0%" y1="50%" x2="100%" y2="50%" id="linearGradient-6">
<stop stop-color="#FFFFFF" offset="0%"></stop>
<stop stop-color="#80A4FF" offset="49.8188579%"></stop>
<stop stop-color="#FFFFFF" offset="100%"></stop>
</linearGradient>
<polygon id="path-7" points="0 525.246305 4.20300752 554.660099 33.6240602 600.881773 33.6240602 621.891626 12.6090226 684.921182 46.2330827 718.536946 58.8421053 756.35468 54.6390977 798.374384 67.2481203 806.778325 75.6541353 827.788177 88.2631579 819.384236 100.87218 794.172414 109.278195 794.172414 113.481203 810.980296 117.684211 798.374384 130.293233 794.172414 163.917293 819.384236 151.308271 836.192118 155.511278 840.394089 172.323308 840.394089 184.932331 831.990148 184.932331 823.586207 197.541353 823.586207 201.744361 836.192118 210.150376 840.394089 247.977444 819.384236 264.789474 819.384236 281.601504 823.586207 311.022556 853 302.616541 823.586207 315.225564 806.778325 311.022556 798.374384 285.804511 794.172414 285.804511 777.364532 268.992481 777.364532 273.195489 760.55665 252.180451 747.950739 239.571429 731.142857 235.368421 705.931034 247.977444 680.719212 243.774436 651.305419 235.368421 638.699507 256.383459 605.083744 273.195489 609.285714 290.007519 600.881773 327.834586 626.093596 353.052632 613.487685 361.458647 596.679803 365.661654 542.054187 374.067669 529.448276 437.112782 483.226601 437.112782 474.82266 470.736842 428.600985 504.360902 424.399015 521.172932 411.793103 525.37594 390.783251 500.157895 378.17734 491.75188 361.369458 529.578947 315.147783 521.172932 294.137931 550.593985 273.128079 559 256.320197 554.796992 239.512315 529.578947 210.098522 516.969925 214.300493 504.360902 197.492611 474.93985 197.492611 466.533835 180.684729 474.93985 155.472906 462.330827 134.463054 466.533835 121.857143 487.548872 109.251232 533.781955 113.453202 521.172932 84.0394089 495.954887 67.2315271 500.157895 42.0197044 487.548872 4.20197044 474.93985 0 441.315789 25.2118227 437.112782 21.0098522 407.691729 29.4137931 386.676692 79.8374384 374.067669 92.4433498 357.255639 88.2413793 348.849624 75.635468 319.428571 96.6453202 281.601504 84.0394089 273.195489 88.2413793 243.774436 117.655172 235.368421 155.472906 210.150376 151.270936 163.917293 184.8867 159.714286 205.896552 189.135338 214.300493 189.135338 222.704433 138.699248 268.926108 134.496241 281.53202 138.699248 289.935961 163.917293 277.330049 180.729323 277.330049 205.947368 289.935961 226.962406 289.935961 235.368421 298.339901 222.759398 306.743842 218.556391 315.147783 226.962406 323.551724 222.759398 319.349754 214.353383 327.753695 201.744361 365.571429 210.150376 365.571429 218.556391 382.37931 235.368421 394.985222 256.383459 373.975369 256.383459 394.985222 264.789474 407.591133 260.586466 432.802956 252.180451 432.802956 252.180451 441.206897 218.556391 466.418719 189.135338 453.812808 184.932331 462.216749 163.917293 449.610837 138.699248 453.812808 126.090226 445.408867 105.075188 466.418719 105.075188 453.812808 88.2631579 441.206897 88.2631579 432.802956 63.0451128 432.802956 54.6390977 424.399015 42.0300752 432.802956 25.2180451 424.399015 12.6090226 445.408867 0 521.044335"></polygon>
<filter x="-6.3%" y="-3.9%" width="112.6%" height="113.2%" filterUnits="objectBoundingBox" id="filter-8">
<feMorphology radius="7" operator="dilate" in="SourceAlpha" result="shadowSpreadOuter1"></feMorphology>
<feOffset dx="0" dy="24" in="shadowSpreadOuter1" result="shadowOffsetOuter1"></feOffset>
<feComposite in="shadowOffsetOuter1" in2="SourceAlpha" operator="out" result="shadowOffsetOuter1"></feComposite>
<feColorMatrix values="0 0 0 0 0.141176471 0 0 0 0 0.862745098 0 0 0 0 0.968627451 0 0 0 1 0" type="matrix" in="shadowOffsetOuter1" result="shadowMatrixOuter1"></feColorMatrix>
<feMorphology radius="5" operator="dilate" in="SourceAlpha" result="shadowSpreadOuter2"></feMorphology>
<feOffset dx="0" dy="0" in="shadowSpreadOuter2" result="shadowOffsetOuter2"></feOffset>
<feGaussianBlur stdDeviation="2.5" in="shadowOffsetOuter2" result="shadowBlurOuter2"></feGaussianBlur>
<feComposite in="shadowBlurOuter2" in2="SourceAlpha" operator="out" result="shadowBlurOuter2"></feComposite>
<feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.5 0" type="matrix" in="shadowBlurOuter2" result="shadowMatrixOuter2"></feColorMatrix>
<feMorphology radius="6" operator="dilate" in="SourceAlpha" result="shadowSpreadOuter3"></feMorphology>
<feOffset dx="0" dy="2" in="shadowSpreadOuter3" result="shadowOffsetOuter3"></feOffset>
<feGaussianBlur stdDeviation="2" in="shadowOffsetOuter3" result="shadowBlurOuter3"></feGaussianBlur>
<feComposite in="shadowBlurOuter3" in2="SourceAlpha" operator="out" result="shadowBlurOuter3"></feComposite>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0.238491245 0 0 0 0 1 0 0 0 0.1 0" type="matrix" in="shadowBlurOuter3" result="shadowMatrixOuter3"></feColorMatrix>
<feMorphology radius="7" operator="dilate" in="SourceAlpha" result="shadowSpreadOuter4"></feMorphology>
<feOffset dx="0" dy="20" in="shadowSpreadOuter4" result="shadowOffsetOuter4"></feOffset>
<feGaussianBlur stdDeviation="4" in="shadowOffsetOuter4" result="shadowBlurOuter4"></feGaussianBlur>
<feComposite in="shadowBlurOuter4" in2="SourceAlpha" operator="out" result="shadowBlurOuter4"></feComposite>
<feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.2 0" type="matrix" in="shadowBlurOuter4" result="shadowMatrixOuter4"></feColorMatrix>
<feMerge>
<feMergeNode in="shadowMatrixOuter1"></feMergeNode>
<feMergeNode in="shadowMatrixOuter2"></feMergeNode>
<feMergeNode in="shadowMatrixOuter3"></feMergeNode>
<feMergeNode in="shadowMatrixOuter4"></feMergeNode>
</feMerge>
</filter>
<filter x="-3.8%" y="-2.2%" width="107.6%" height="109.9%" filterUnits="objectBoundingBox" id="filter-9">
<feMorphology radius="2" operator="erode" in="SourceAlpha" result="shadowSpreadInner1"></feMorphology>
<feGaussianBlur stdDeviation="2" in="shadowSpreadInner1" result="shadowBlurInner1"></feGaussianBlur>
<feOffset dx="0" dy="0" in="shadowBlurInner1" result="shadowOffsetInner1"></feOffset>
<feComposite in="shadowOffsetInner1" in2="SourceAlpha" operator="arithmetic" k2="-1" k3="1" result="shadowInnerInner1"></feComposite>
<feColorMatrix values="0 0 0 0 0.00298628156 0 0 0 0 0.470276468 0 0 0 0 0.538846223 0 0 0 0.4 0" type="matrix" in="shadowInnerInner1"></feColorMatrix>
</filter>
</defs>
<g id="水利" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Apple-TV" transform="translate(-623.000000, -65.000000)">
<g id="编组" transform="translate(-133.000000, -45.000000)">
<g id="南昌县" transform="translate(774.000000, 127.000000)">
<g>
<use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-3"></use>
<use fill="url(#linearGradient-1)" fill-rule="evenodd" xlink:href="#path-3"></use>
<use fill="black" fill-opacity="1" filter="url(#filter-5)" xlink:href="#path-3"></use>
<path stroke="url(#linearGradient-2)" stroke-width="4" d="M474.578242,-2.2286392 L489.129894,2.62071457 L502.212374,41.858472 L498.140345,66.284621 L522.776891,82.7049326 L536.941979,115.748649 L488.017914,111.302105 L468.197129,123.191641 L464.51917,134.222796 L477.128192,155.232649 L468.693248,180.531237 L476.175781,195.492611 L505.360754,195.492611 L517.70491,211.947425 L530.22218,207.776031 L556.622697,238.569033 L561.119781,256.552934 L552.160544,274.466986 L523.61315,294.852951 L531.874359,315.500877 L494.120134,361.633544 L501.64846,376.686481 L527.636784,389.677437 L522.984165,412.934792 L505.135847,426.317727 L471.844525,430.478116 L439.112782,475.473158 L439.112782,484.240226 L375.53543,530.852113 L367.615656,542.728843 L363.422691,597.223936 L354.543196,614.978544 L327.690928,628.401365 L289.86386,603.189543 L273.428126,611.405382 L257.308768,607.376537 L237.748963,638.664503 L245.690142,650.573333 L250.045728,681.054916 L237.448166,706.243823 L241.463995,730.332849 L253.545213,746.437166 L275.495301,759.603969 L271.554187,775.364532 L287.804511,775.364532 L287.804511,792.478091 L312.355801,796.568963 L317.56736,806.989508 L304.812515,823.991771 L315.066165,859.870689 L280.579178,825.392211 L264.543321,821.384236 L248.495584,821.384236 L210.199487,842.654596 L200.10908,837.610637 L196.099947,825.586207 L186.932331,825.586207 L186.932331,833.060662 L172.928735,842.394089 L154.682996,842.394089 L148.66724,836.379817 L161.116962,819.784284 L129.931626,796.401053 L119.265232,799.95564 L113.206686,818.126794 L107.716736,796.172414 L102.108112,796.172414 L89.8143418,820.753887 L74.7126922,830.81917 L65.6219913,808.098025 L52.529356,799.371755 L56.8094505,756.581371 L44.4851151,719.617488 L10.3206507,685.461453 L31.6240602,621.566994 L31.6240602,601.464296 L2.28414507,555.370092 L-2,525.388476 L-2,520.87877 L10.6987031,444.705351 L24.456024,421.782141 L41.8864163,430.495186 L54.8938965,421.825672 L63.8733954,430.802956 L90.2631579,430.802956 L90.2631579,440.206748 L107.075188,452.81266 L107.075188,461.591135 L125.835427,442.835525 L139.150493,451.710045 L164.314767,447.517034 L184.109426,459.390899 L188.18994,451.231885 L218.281477,464.125076 L250.180451,440.206748 L250.180451,430.802956 L258.892281,430.802956 L262.686616,408.04256 L254.383459,395.590897 L254.383459,378.802954 L235.556067,397.6257 L216.978822,383.696203 L208.914444,367.571429 L198.969293,367.571429 L212.605416,326.673153 L219.930622,319.349754 L216.12268,315.542751 L221.208215,305.374191 L232.228688,298.029022 L226.134123,291.935961 L205.475337,291.935961 L180.257292,279.330049 L164.389325,279.330049 L137.804909,292.618977 L132.336827,281.685511 L136.965867,267.801818 L187.135338,221.824483 L187.135338,215.809198 L157.391299,207.312998 L162.109375,183.728441 L209.652222,149.160357 L233.827369,153.188554 L241.948472,116.652608 L272.010955,86.5975422 L281.448076,81.880146 L319.094905,94.4259923 L349.367902,72.8077582 L358.490674,86.4885389 L373.454274,90.2285158 L384.982825,78.7028092 L406.216203,27.7552753 L437.69477,18.7636183 L441.503436,22.5713446 L474.578242,-2.2286392 Z"></path>
<path stroke-opacity="0.1" stroke="#0089FF" stroke-width="4" d="M474.578242,-2.2286392 L489.129894,2.62071457 L502.212374,41.858472 L498.140345,66.284621 L522.776891,82.7049326 L536.941979,115.748649 L488.017914,111.302105 L468.197129,123.191641 L464.51917,134.222796 L477.128192,155.232649 L468.693248,180.531237 L476.175781,195.492611 L505.360754,195.492611 L517.70491,211.947425 L530.22218,207.776031 L556.622697,238.569033 L561.119781,256.552934 L552.160544,274.466986 L523.61315,294.852951 L531.874359,315.500877 L494.120134,361.633544 L501.64846,376.686481 L527.636784,389.677437 L522.984165,412.934792 L505.135847,426.317727 L471.844525,430.478116 L439.112782,475.473158 L439.112782,484.240226 L375.53543,530.852113 L367.615656,542.728843 L363.422691,597.223936 L354.543196,614.978544 L327.690928,628.401365 L289.86386,603.189543 L273.428126,611.405382 L257.308768,607.376537 L237.748963,638.664503 L245.690142,650.573333 L250.045728,681.054916 L237.448166,706.243823 L241.463995,730.332849 L253.545213,746.437166 L275.495301,759.603969 L271.554187,775.364532 L287.804511,775.364532 L287.804511,792.478091 L312.355801,796.568963 L317.56736,806.989508 L304.812515,823.991771 L315.066165,859.870689 L280.579178,825.392211 L264.543321,821.384236 L248.495584,821.384236 L210.199487,842.654596 L200.10908,837.610637 L196.099947,825.586207 L186.932331,825.586207 L186.932331,833.060662 L172.928735,842.394089 L154.682996,842.394089 L148.66724,836.379817 L161.116962,819.784284 L129.931626,796.401053 L119.265232,799.95564 L113.206686,818.126794 L107.716736,796.172414 L102.108112,796.172414 L89.8143418,820.753887 L74.7126922,830.81917 L65.6219913,808.098025 L52.529356,799.371755 L56.8094505,756.581371 L44.4851151,719.617488 L10.3206507,685.461453 L31.6240602,621.566994 L31.6240602,601.464296 L2.28414507,555.370092 L-2,525.388476 L-2,520.87877 L10.6987031,444.705351 L24.456024,421.782141 L41.8864163,430.495186 L54.8938965,421.825672 L63.8733954,430.802956 L90.2631579,430.802956 L90.2631579,440.206748 L107.075188,452.81266 L107.075188,461.591135 L125.835427,442.835525 L139.150493,451.710045 L164.314767,447.517034 L184.109426,459.390899 L188.18994,451.231885 L218.281477,464.125076 L250.180451,440.206748 L250.180451,430.802956 L258.892281,430.802956 L262.686616,408.04256 L254.383459,395.590897 L254.383459,378.802954 L235.556067,397.6257 L216.978822,383.696203 L208.914444,367.571429 L198.969293,367.571429 L212.605416,326.673153 L219.930622,319.349754 L216.12268,315.542751 L221.208215,305.374191 L232.228688,298.029022 L226.134123,291.935961 L205.475337,291.935961 L180.257292,279.330049 L164.389325,279.330049 L137.804909,292.618977 L132.336827,281.685511 L136.965867,267.801818 L187.135338,221.824483 L187.135338,215.809198 L157.391299,207.312998 L162.109375,183.728441 L209.652222,149.160357 L233.827369,153.188554 L241.948472,116.652608 L272.010955,86.5975422 L281.448076,81.880146 L319.094905,94.4259923 L349.367902,72.8077582 L358.490674,86.4885389 L373.454274,90.2285158 L384.982825,78.7028092 L406.216203,27.7552753 L437.69477,18.7636183 L441.503436,22.5713446 L474.578242,-2.2286392 Z"></path>
</g>
<g opacity="0.526457287">
<g>
<use fill="black" fill-opacity="1" filter="url(#filter-8)" xlink:href="#path-7"></use>
<use fill="url(#linearGradient-1)" fill-rule="evenodd" xlink:href="#path-7"></use>
<use fill="black" fill-opacity="1" filter="url(#filter-9)" xlink:href="#path-7"></use>
<path stroke="url(#linearGradient-6)" stroke-width="4" d="M474.578242,-2.2286392 L489.129894,2.62071457 L502.212374,41.858472 L498.140345,66.284621 L522.776891,82.7049326 L536.941979,115.748649 L488.017914,111.302105 L468.197129,123.191641 L464.51917,134.222796 L477.128192,155.232649 L468.693248,180.531237 L476.175781,195.492611 L505.360754,195.492611 L517.70491,211.947425 L530.22218,207.776031 L556.622697,238.569033 L561.119781,256.552934 L552.160544,274.466986 L523.61315,294.852951 L531.874359,315.500877 L494.120134,361.633544 L501.64846,376.686481 L527.636784,389.677437 L522.984165,412.934792 L505.135847,426.317727 L471.844525,430.478116 L439.112782,475.473158 L439.112782,484.240226 L375.53543,530.852113 L367.615656,542.728843 L363.422691,597.223936 L354.543196,614.978544 L327.690928,628.401365 L289.86386,603.189543 L273.428126,611.405382 L257.308768,607.376537 L237.748963,638.664503 L245.690142,650.573333 L250.045728,681.054916 L237.448166,706.243823 L241.463995,730.332849 L253.545213,746.437166 L275.495301,759.603969 L271.554187,775.364532 L287.804511,775.364532 L287.804511,792.478091 L312.355801,796.568963 L317.56736,806.989508 L304.812515,823.991771 L315.066165,859.870689 L280.579178,825.392211 L264.543321,821.384236 L248.495584,821.384236 L210.199487,842.654596 L200.10908,837.610637 L196.099947,825.586207 L186.932331,825.586207 L186.932331,833.060662 L172.928735,842.394089 L154.682996,842.394089 L148.66724,836.379817 L161.116962,819.784284 L129.931626,796.401053 L119.265232,799.95564 L113.206686,818.126794 L107.716736,796.172414 L102.108112,796.172414 L89.8143418,820.753887 L74.7126922,830.81917 L65.6219913,808.098025 L52.529356,799.371755 L56.8094505,756.581371 L44.4851151,719.617488 L10.3206507,685.461453 L31.6240602,621.566994 L31.6240602,601.464296 L2.28414507,555.370092 L-2,525.388476 L-2,520.87877 L10.6987031,444.705351 L24.456024,421.782141 L41.8864163,430.495186 L54.8938965,421.825672 L63.8733954,430.802956 L90.2631579,430.802956 L90.2631579,440.206748 L107.075188,452.81266 L107.075188,461.591135 L125.835427,442.835525 L139.150493,451.710045 L164.314767,447.517034 L184.109426,459.390899 L188.18994,451.231885 L218.281477,464.125076 L250.180451,440.206748 L250.180451,430.802956 L258.892281,430.802956 L262.686616,408.04256 L254.383459,395.590897 L254.383459,378.802954 L235.556067,397.6257 L216.978822,383.696203 L208.914444,367.571429 L198.969293,367.571429 L212.605416,326.673153 L219.930622,319.349754 L216.12268,315.542751 L221.208215,305.374191 L232.228688,298.029022 L226.134123,291.935961 L205.475337,291.935961 L180.257292,279.330049 L164.389325,279.330049 L137.804909,292.618977 L132.336827,281.685511 L136.965867,267.801818 L187.135338,221.824483 L187.135338,215.809198 L157.391299,207.312998 L162.109375,183.728441 L209.652222,149.160357 L233.827369,153.188554 L241.948472,116.652608 L272.010955,86.5975422 L281.448076,81.880146 L319.094905,94.4259923 L349.367902,72.8077582 L358.490674,86.4885389 L373.454274,90.2285158 L384.982825,78.7028092 L406.216203,27.7552753 L437.69477,18.7636183 L441.503436,22.5713446 L474.578242,-2.2286392 Z"></path>
<path stroke-opacity="0.1" stroke="#0089FF" stroke-width="4" d="M474.578242,-2.2286392 L489.129894,2.62071457 L502.212374,41.858472 L498.140345,66.284621 L522.776891,82.7049326 L536.941979,115.748649 L488.017914,111.302105 L468.197129,123.191641 L464.51917,134.222796 L477.128192,155.232649 L468.693248,180.531237 L476.175781,195.492611 L505.360754,195.492611 L517.70491,211.947425 L530.22218,207.776031 L556.622697,238.569033 L561.119781,256.552934 L552.160544,274.466986 L523.61315,294.852951 L531.874359,315.500877 L494.120134,361.633544 L501.64846,376.686481 L527.636784,389.677437 L522.984165,412.934792 L505.135847,426.317727 L471.844525,430.478116 L439.112782,475.473158 L439.112782,484.240226 L375.53543,530.852113 L367.615656,542.728843 L363.422691,597.223936 L354.543196,614.978544 L327.690928,628.401365 L289.86386,603.189543 L273.428126,611.405382 L257.308768,607.376537 L237.748963,638.664503 L245.690142,650.573333 L250.045728,681.054916 L237.448166,706.243823 L241.463995,730.332849 L253.545213,746.437166 L275.495301,759.603969 L271.554187,775.364532 L287.804511,775.364532 L287.804511,792.478091 L312.355801,796.568963 L317.56736,806.989508 L304.812515,823.991771 L315.066165,859.870689 L280.579178,825.392211 L264.543321,821.384236 L248.495584,821.384236 L210.199487,842.654596 L200.10908,837.610637 L196.099947,825.586207 L186.932331,825.586207 L186.932331,833.060662 L172.928735,842.394089 L154.682996,842.394089 L148.66724,836.379817 L161.116962,819.784284 L129.931626,796.401053 L119.265232,799.95564 L113.206686,818.126794 L107.716736,796.172414 L102.108112,796.172414 L89.8143418,820.753887 L74.7126922,830.81917 L65.6219913,808.098025 L52.529356,799.371755 L56.8094505,756.581371 L44.4851151,719.617488 L10.3206507,685.461453 L31.6240602,621.566994 L31.6240602,601.464296 L2.28414507,555.370092 L-2,525.388476 L-2,520.87877 L10.6987031,444.705351 L24.456024,421.782141 L41.8864163,430.495186 L54.8938965,421.825672 L63.8733954,430.802956 L90.2631579,430.802956 L90.2631579,440.206748 L107.075188,452.81266 L107.075188,461.591135 L125.835427,442.835525 L139.150493,451.710045 L164.314767,447.517034 L184.109426,459.390899 L188.18994,451.231885 L218.281477,464.125076 L250.180451,440.206748 L250.180451,430.802956 L258.892281,430.802956 L262.686616,408.04256 L254.383459,395.590897 L254.383459,378.802954 L235.556067,397.6257 L216.978822,383.696203 L208.914444,367.571429 L198.969293,367.571429 L212.605416,326.673153 L219.930622,319.349754 L216.12268,315.542751 L221.208215,305.374191 L232.228688,298.029022 L226.134123,291.935961 L205.475337,291.935961 L180.257292,279.330049 L164.389325,279.330049 L137.804909,292.618977 L132.336827,281.685511 L136.965867,267.801818 L187.135338,221.824483 L187.135338,215.809198 L157.391299,207.312998 L162.109375,183.728441 L209.652222,149.160357 L233.827369,153.188554 L241.948472,116.652608 L272.010955,86.5975422 L281.448076,81.880146 L319.094905,94.4259923 L349.367902,72.8077582 L358.490674,86.4885389 L373.454274,90.2285158 L384.982825,78.7028092 L406.216203,27.7552753 L437.69477,18.7636183 L441.503436,22.5713446 L474.578242,-2.2286392 Z"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 28 KiB

BIN
super-screen/client/assets/images/ring_bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
super-screen/client/assets/images/ring_chart_bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

9
super-screen/client/src/components/index.js

@ -7,12 +7,17 @@ import NoResource from './no-resource';
import ExportAndImport from './export';
import ButtonGroup from './buttonGroup';
import UploadLocal from './UploadLocal';
import Box from './public/table-card';
import CarouselList from './public/carousel-list';
import NoData from './public/noData'
export {
Upload,
Uploads,
NoResource,
ExportAndImport,
ButtonGroup,
UploadLocal
UploadLocal,
Box,
CarouselList,
NoData
};

33
super-screen/client/src/components/public/carousel-list.js

@ -0,0 +1,33 @@
/* 轮播列表组件 */
import React from 'react';
import ScrollBoard from './scrollBoard';
import NoData from './noData';
import './index.less';
function CarouselList(props) {
const {
header = [], data = [], rowNum = 4, height, columnWidth, multiellipsis, waitTime = 2000, marginTop, ...restProps
} = props;
const config = {
header,
rowNum,
headerBGC: 'rgba(81, 200, 247, 0.2)',
oddRowBGC: 'transparent',
evenRowBGC: 'transparent',
headerHeight: 30,
data,
waitTime,
columnWidth: columnWidth || [],
};
return data.length > 0 ? (
<ScrollBoard
config={config}
style={{ height }}
className={multiellipsis ? 'scroll-board-multi' : 'scroll-board'}
{...restProps}
/>
) : <NoData marginTop={marginTop || 0} />;
}
export default CarouselList;

108
super-screen/client/src/components/public/index.less

@ -0,0 +1,108 @@
.opcityBackground {
background-color: rgba(8, 27, 55, 0.6);
}
.card-title {
height: 31px;
font-family: YouSheBiaoTiHei;
font-size: 24px;
color: #FFFFFF;
letter-spacing: 2px;
padding-left: 15px;
}
/* 滚动列表 */
.scroll-board {
width: 533px;
height: 220px;
margin-top: 10px;
margin-left: 6px;
.header {
height: 30px;
border-top: 1px solid #0047ba;
border-bottom: 1px solid #0047ba;
.header-item {
// background: rgba(12, 49, 110, 0.3);
margin-right: 10px;
}
}
.rows {
.row-item {
font-size: 16px;
}
.row-item:hover {
background: linear-gradient(270deg, rgba(17, 183, 247, 0) 0%, rgba(17, 183, 247, 0.85) 100%);
color: #9ac8fc;
}
}
}
.scroll-board-multi {
padding: 5px 0px 5px;
color: rgba(204, 228, 255, 1) !important;
.header {
display: flex;
flex-direction: row;
font-size: 12px !important;
color: rgba(204, 228, 255, 1) !important;
// border-bottom: 1px solid #124C79 !important;
}
.rows {
color: rgba(204, 228, 255, 1) !important;
.row-item {
border-bottom: 1px solid #124C79 !important;
}
.row-item:hover {
background: linear-gradient(270deg, rgba(17, 183, 247, 0) 0%, rgba(17, 183, 247, 0.85) 100%);
color: #9ac8fc;
}
}
}
._sorrow {
display: inline-block;
width: 15px;
height: 15px;
background: url('/assets/images/homePage/bigscreen/sorrow.png');
background-repeat: no-repeat;
background-size: 100% 100%;
margin-left: 13px;
}
.subtitle_ {
float: right;
margin-top: 12px;
margin-right: 20px;
width: 200px;
text-align: center;
._item_select {
width: 60px;
height: 20px;
display: inline-block;
font-size: 14px;
color: #24DCF7;
border: 1px solid #12B2E5;
background-color: rgba(91, 193, 255, 0.2);
margin-right: 3px;
}
._item {
width: 60px;
height: 20px;
display: inline-block;
font-size: 14px;
color: #4C9FFF;
border: 1px solid #0B6AEA;
background-color: rgba(35, 108, 254, 0.3);
margin-right: 3px;
}
}

18
super-screen/client/src/components/public/noData.js

@ -0,0 +1,18 @@
/* 公共模块暂无数据组件 */
import React from 'react';
import { Empty } from 'antd';
function NoData({ height = 180, marginTop = 0 }) {
return (
<Empty
image="/assets/images/homePage/bigscreen/empty.png"
imageStyle={{
height,
marginTop
}}
description={false}
/>
);
}
export default NoData;

469
super-screen/client/src/components/public/scrollBoard/index.js

@ -0,0 +1,469 @@
import React, {
useEffect, useState, useRef, useMemo, forwardRef,
} from 'react';
import PropTypes from 'prop-types';
import classnames from 'classnames';
import { deepMerge } from '@jiaminghi/charts/lib/util/index';
import { deepClone } from '@jiaminghi/c-render/lib/plugin/util';
import { useAutoResize, co } from '@jiaminghi/data-view-react';
import './style.less';
const defaultConfig = {
/**
* @description Board header
* @type {Array<String>}
* @default header = []
* @example header = ['column1', 'column2', 'column3']
*/
header: [],
/**
* @description Board data
* @type {Array<Array>}
* @default data = []
*/
data: [],
/**
* @description Row num
* @type {Number}
* @default rowNum = 5
*/
rowNum: 5,
/**
* @description Header background color
* @type {String}
* @default headerBGC = '#00BAFF'
*/
headerBGC: '#00BAFF',
/**
* @description Odd row background color
* @type {String}
* @default oddRowBGC = '#003B51'
*/
oddRowBGC: '#003B51',
/**
* @description Even row background color
* @type {String}
* @default evenRowBGC = '#003B51'
*/
evenRowBGC: '#0A2732',
/**
* @description Scroll wait time
* @type {Number}
* @default waitTime = 2000
*/
waitTime: 2000,
/**
* @description Header height
* @type {Number}
* @default headerHeight = 35
*/
headerHeight: 35,
/**
* @description Column width
* @type {Array<Number>}
* @default columnWidth = []
*/
columnWidth: [],
/**
* @description Column align
* @type {Array<String>}
* @default align = []
* @example align = ['left', 'center', 'right']
*/
align: [],
/**
* @description Show index
* @type {Boolean}
* @default index = false
*/
index: false,
/**
* @description index Header
* @type {String}
* @default indexHeader = '#'
*/
indexHeader: '#',
/**
* @description Carousel type
* @type {String}
* @default carousel = 'single'
* @example carousel = 'single' | 'page'
*/
carousel: 'single',
/**
* @description Pause scroll when mouse hovered
* @type {Boolean}
* @default hoverPause = true
* @example hoverPause = true | false
*/
hoverPause: true,
};
function calcHeaderData({ header, index, indexHeader }) {
if (!header.length) {
return [];
}
header = [...header];
if (index) header.unshift(indexHeader);
return header;
}
function calcRows({
data, index, headerBGC, rowNum,
}) {
if (index) {
data = data.map((row, i) => {
row = [...row];
const indexTag = `<span class="index" style="background-color: ${headerBGC};">${i
+ 1}</span>`;
row.unshift(indexTag);
return row;
});
}
data = data.map((ceils, i) => ({ ceils, rowIndex: i }));
const rowLength = data.length;
if (rowLength > rowNum && rowLength < 2 * rowNum) {
data = [...data, ...data];
}
return data.map((d, i) => ({ ...d, scroll: i }));
}
function calcAligns(mergedConfig, header) {
const columnNum = header.length;
const aligns = new Array(columnNum).fill('left');
const { align } = mergedConfig;
return deepMerge(aligns, align);
}
const ScrollBoard = forwardRef(({
onClick, config = {}, className, style, onMouseOver,
}, ref) => {
const { width, height, domRef } = useAutoResize(ref);
const [state, setState] = useState({
mergedConfig: null,
header: [],
rows: [],
rowsShow: [],
widths: [],
heights: [],
aligns: [],
});
const {
mergedConfig, header, rows, widths, heights, aligns, rowsShow,
} = state;
const stateRef = useRef({
...state,
rowsData: [],
avgHeight: 0,
animationIndex: 0,
});
Object.assign(stateRef.current, state);
function onResize() {
if (!mergedConfig) return;
const widths = calcWidths(mergedConfig, stateRef.current.rowsData);
const heights = calcHeights(mergedConfig, header);
const data = { widths, heights };
Object.assign(stateRef.current, data);
setState((state) => ({ ...state, ...data }));
}
const [init, setInit] = useState(true);
function calcData() {
// const mergedConfig = deepMerge(
// deepClone(defaultConfig, true),
// config || {},
// );
const mergedConfig = {
...defaultConfig,
...config,
};
const header = calcHeaderData(mergedConfig);
const rows = calcRows(mergedConfig);
const widths = calcWidths(mergedConfig, stateRef.current.rowsData);
const heights = calcHeights(mergedConfig, header);
const aligns = calcAligns(mergedConfig, header);
const data = {
mergedConfig,
header,
rows,
widths,
aligns,
heights: init ? heights : state.heights.concat(heights),
rowsShow: init ? rows : state.rowsShow,
};
setInit(false);
Object.assign(stateRef.current, data, {
rowsData: rows,
animationIndex: stateRef.current.animationIndex,
});
setState((state) => ({ ...state, ...data }));
}
function calcWidths({ columnWidth, header }, rowsData) {
const usedWidth = columnWidth.reduce((all, w) => all + w, 0);
let columnNum = 0;
if (rowsData[0]) {
columnNum = rowsData[0].ceils.length;
} else if (header.length) {
columnNum = header.length;
}
const avgWidth = (width - usedWidth) / (columnNum - columnWidth.length);
const widths = new Array(columnNum).fill(avgWidth);
return deepMerge(widths, columnWidth);
}
function calcHeights({ headerHeight, rowNum, data }, header) {
let allHeight = height;
if (header.length) allHeight -= headerHeight;
const avgHeight = allHeight / rowNum;
Object.assign(stateRef.current, { avgHeight });
return new Array(data.length).fill(avgHeight);
}
function* animation(start = false) {
let {
avgHeight,
animationIndex,
mergedConfig: { waitTime, carousel, rowNum },
rowsData,
} = stateRef.current;
const rowLength = rowsData.length;
if (start) yield new Promise((resolve) => setTimeout(resolve, waitTime));
const animationNum = carousel === 'single' ? 1 : rowNum;
let rows = rowsData.slice(animationIndex);
rows.push(...rowsData.slice(0, animationIndex));
rows = rows.slice(0, carousel === 'page' ? rowNum * 2 : rowNum + 1);
const heights = new Array(rowLength).fill(avgHeight);
setState((state) => ({
...state, rows, heights, rowsShow: rows,
}));
yield new Promise((resolve) => setTimeout(resolve, 300));
animationIndex += animationNum;
const back = animationIndex - rowLength;
if (back >= 0) animationIndex = back;
const newHeights = [...heights];
newHeights.splice(0, animationNum, ...new Array(animationNum).fill(0));
Object.assign(stateRef.current, { animationIndex });
setState((state) => ({ ...state, heights: newHeights }));
}
function emitEvent(handle, ri, ci, row, ceil) {
const { ceils, rowIndex } = row;
handle && handle({
row: ceils, ceil, rowIndex, columnIndex: ci,
});
}
function handleHover(enter, ri, ci, row, ceil) {
if (enter) emitEvent(onMouseOver, ri, ci, row, ceil);
if (!mergedConfig.hoverPause) return;
const { pause, resume } = task.current;
enter && pause && resume ? pause() : resume && resume();
}
// updateRows(rows, animationIndex) {
// const { mergedConfig, animationHandler, animation } = this
// this.mergedConfig = {
// ...mergedConfig,
// data: [...rows]
// }
// this.needCalc = true
// if (typeof animationIndex === 'number') this.animationIndex = animationIndex
// if (!animationHandler) animation(true)
// }
const getBackgroundColor = (rowIndex) => mergedConfig[rowIndex % 2 === 0 ? 'evenRowBGC' : 'oddRowBGC'];
const task = useRef({});
useEffect(() => {
calcData();
let start = true;
function* loop() {
while (true) {
yield* animation(start);
start = false;
const { waitTime } = stateRef.current.mergedConfig;
yield new Promise((resolve) => setTimeout(resolve, waitTime - 300));
}
}
const {
mergedConfig: { rowNum },
rows: rowsData,
} = stateRef.current;
const rowLength = rowsData.length;
if (rowNum >= rowLength) {
setState((prestate) => ({
...prestate, rowsShow: state.rows,
}));
return;
}
task.current = co(loop);
return task.current.end;
}, [config, domRef.current]);
useEffect(onResize, [width, height, domRef.current]);
const classNames = useMemo(() => classnames('dv-scroll-board', className), [
className,
]);
return (
<div className={classNames} style={style} ref={domRef}>
{!!header.length && !!mergedConfig && (
<div
className="header"
style={{ backgroundColor: `${mergedConfig.headerBGC}` }}
>
{header.map((headerItem, i) => (
<div
className="header-item"
key={`${headerItem}-${i}`}
style={{
height: `${mergedConfig.headerHeight}px`,
lineHeight: `${mergedConfig.headerHeight}px`,
width: `${widths[i]}px`,
}}
align={aligns[i]}
dangerouslySetInnerHTML={{ __html: headerItem }}
/>
))}
</div>
)}
{!!mergedConfig && (
<div
className="rows"
style={{
height: `${height
- (header.length ? mergedConfig.headerHeight : 0)}px`,
}}
>
{rowsShow.map((row, ri) => (
<div
className="row-item"
key={`${row.toString()}-${row.scroll}`}
style={{
height: `${heights[ri]}px`,
lineHeight: `${heights[ri]}px`,
backgroundColor: `${getBackgroundColor(row.rowIndex)}`,
}}
>
{row.ceils.map((ceil, ci) => {
if (typeof (ceil) === 'string') {
return (
<div
className="ceil"
key={`${ceil}-${ri}-${ci}`}
style={{ width: `${widths[ci]}px` }}
align={aligns[ci]}
dangerouslySetInnerHTML={{ __html: ceil }}
onClick={() => emitEvent(onClick, ri, ci, row, ceil)}
onMouseEnter={() => handleHover(true, ri, ci, row, ceil)}
onMouseLeave={() => handleHover(false)}
/>
);
}
return (
<div
className="ceil"
style={{ width: `${widths[ci]}px` }}
align={aligns[ci]}
key={`${ri}-${ci}`}
onMouseEnter={() => handleHover(true, ri, ci, row, ceil)}
onMouseLeave={() => handleHover(false)}
>
{ceil}
</div>
);
})}
</div>
))}
</div>
)}
</div>
);
});
ScrollBoard.propTypes = {
config: PropTypes.object,
onClick: PropTypes.func,
onMouseOver: PropTypes.func,
className: PropTypes.string,
style: PropTypes.object,
};
export default ScrollBoard;

44
super-screen/client/src/components/public/scrollBoard/style.less

@ -0,0 +1,44 @@
.dv-scroll-board {
position: relative;
width: 100%;
height: 100%;
color: #fff;
.text {
padding: 0 10px;
box-sizing: border-box;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.header {
display: flex;
flex-direction: row;
font-size: 15px;
.header-item {
.text;
transition: all 0.3s;
}
}
.rows {
overflow: hidden;
.row-item {
display: flex;
font-size: 14px;
transition: all 0.3s;
}
.ceil {
.text;
}
.index {
border-radius: 3px;
padding: 0px 3px;
}
}
}

45
super-screen/client/src/components/public/table-card.js

@ -0,0 +1,45 @@
'use strict'
import React from 'react'
import './index.less'
class Box extends React.Component {
render() {
const { title, height = '100%', children, margin, overflow, subtitle, subtitleSelect } = this.props
const headerbg = {
background: 'url(/assets/images/homePage/bigscreen/headertitlebg.png) no-repeat',
backgroundSize: '100% 100%',
}
return (
<div style={{ height, width: '100%', margin: margin || "0px 0px 28px" }}>
<div style={{
height: height, listStyle: 'none', overflow: overflow || 'hidden',
}}>
<div style={{ height: 42, paddingTop: '4px', wordBreak: 'keep-all', whiteSpace: 'nowrap', width: '100%', ...headerbg, }}>
<span className='card-title'>{title}</span>
{subtitle && <div className='subtitle_'>
<div className='_item_select'>本周</div>
<div className='_item'>本月</div>
<div className='_item'>本年</div>
</div>}
{subtitleSelect && <div className='subtitle_' style={{ textAlign: 'right' }}>
{subtitleSelect}
</div>}
</div>
<div style={{
height: 'calc(100% - 42px)',
backgroundImage: 'linear-gradient(180deg, #04377ecc 1%, #001241 100%)',
}}>
{children}
</div>
</div>
</div>
)
}
}
export default Box

2
super-screen/client/src/sections/community-safty/components/basic-info.js

@ -1,5 +1,5 @@
import React from 'react'
import Box from './public/table-card';
import { Box } from '$components';
function BasicInfo() {

2
super-screen/client/src/sections/community-safty/components/city-safty.js

@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react'
import Box from './public/table-card';
import { Box } from '$components';
import './style.less';
function CitySafty(props) {

2
super-screen/client/src/sections/community-safty/components/infrastructure.js

@ -1,5 +1,5 @@
import React from 'react'
import Box from './public/table-card';
import { Box } from '$components';
function Infrastructure(props) {

2
super-screen/client/src/sections/community-safty/components/population-dynamics.js

@ -1,5 +1,5 @@
import React from 'react'
import Box from './public/table-card';
import { Box } from '$components';
function PopulationDynamics() {

2
super-screen/client/src/sections/community-safty/components/special-person.js

@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react'
import Box from './public/table-card';
import { Box } from '$components';
import './style.less';
function SpecialPerson(props) {

12
super-screen/client/src/sections/community-safty/components/style.less

@ -136,7 +136,7 @@
._person_tends_item2 {
width: calc(100% - 123.5px);
padding-left: 21px;
padding-top: 30px;
padding-top: 22px;
._person_text {
margin-bottom: 10%;
@ -289,8 +289,6 @@
//小区人流量排名
._traffic_ranking {
height: 100%;
overflow: auto;
._rank_title {
height: 34.64px;
@ -319,7 +317,13 @@
}
}
.rank_content_overflow {
height: calc(100% - 35px);
overflow: auto;
}
._rank_content {
margin-top: 12px;
height: 34.64px;
background: url('/assets/images/homePage/communtity/rankcontent.png');
background-repeat: no-repeat;
@ -375,7 +379,7 @@
}
._traffic_ranking::-webkit-scrollbar {
.rank_content_overflow::-webkit-scrollbar {
width: 0 !important
}

2
super-screen/client/src/sections/community-safty/components/traffic-ranking.js

@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react'
import Box from './public/table-card';
import { Box } from '$components';
import './style.less';

2
super-screen/client/src/sections/community-safty/containers/gis.js

@ -424,7 +424,7 @@ function Map(props) {
<>
{/* 延缓加载遮罩 */}
{delay && <div style={{
width: '100%', height: '100%', left: 0, top: 0, zIndex: 1000, background: '#02152f', position: 'absolute',
width: '100%', height: '100%', left: 0, top: 0, zIndex: 1000, background: '#000000', position: 'absolute',
display: 'flex', alignItems: 'center', justifyContent: 'center'
}}>
</div>}

49
super-screen/client/src/sections/fire-control/components/item-left.js

@ -1,13 +1,58 @@
import React from 'react'
import Box from './public/table-card';
import { Box } from '$components';
import './style.less'
function BasicInfo(props) {
return <Box title={"事件概况"} >
<div className='item_left-container '>
<div className='alarm_time'>
22:02:45
</div>
<div className='end_event' onClick={() => { props.endEvent() }}>结束案件</div>
</div>
<div className='event_title'><div className='event_title_left' /><span>南昌县第一消防大队</span><div className='event_title_right' /></div>
<div className='left_second_bg'>
</div>
<div className='left_third_bg'>
<div className='left_item_left1'>
<div></div>
</div>
<div className='left_item_right1'>
<div className='flex-row '><span style={{ marginRight: 30 }}>案件名称</span><span></span></div>
<div className='flex-row '><span style={{ marginRight: 30 }}>火灾扑救</span><span>2023-06-16 12:30:30</span></div>
</div>
</div>
<div className='left_third_bg'>
<div className='left_item_left2'>
<div></div>
</div>
<div className='left_item_right1'>
<div className='flex-row '><span style={{ marginRight: 30 }}>案件名称</span><span></span></div>
<div className='flex-row '><span style={{ marginRight: 30 }}>火灾扑救</span><span>2023-06-16 12:30:30</span></div>
</div>
</div>
<div className='left_third_bg'>
<div className='left_item_left3'>
<div></div>
</div>
<div className='left_item_right1'>
<div className='flex-row '><span style={{ marginRight: 30 }}>案件名称</span><span></span></div>
<div className='flex-row '><span style={{ marginRight: 30 }}>火灾扑救</span><span>2023-06-16 12:30:30</span></div>
</div>
</div>
<div className='left_third_bg'>
<div className='left_item_left4'>
<div></div>
</div>
<div className='left_item_right1'>
<div className='flex-row '><span style={{ marginRight: 30 }}>案件名称</span><span></span></div>
<div className='flex-row '><span style={{ marginRight: 30 }}>火灾扑救</span><span>2023-06-16 12:30:30</span></div>
</div>
</div>
</div>
</Box>
}

33
super-screen/client/src/sections/fire-control/components/item-right.js

@ -1,10 +1,39 @@
import React from 'react'
import Box from './public/table-card';
import { Box } from '$components';
function BasicInfo() {
return <Box title={"避难场所"} >
dd
<div className='fire_item_right_container'>
{
[1, 2, 3, 4, 5, 6, 7].map((s, index) => {
return <div className='fire_right_item'>
<div className='item_left'></div>
<div className='item_right'>
<div className='flex-row'>
<div className='item_right_left'>场所名称</div>
<div className='item_right_right'>南昌县人民公园中心市场</div>
</div>
<div className='flex-row'>
<div className='item_right_left'>场所地点</div>
<div className='item_right_right'>南昌县中心街道人民路168号
人民路168号人民路168号</div>
</div>
<div className='flex-row'>
<div className='item_right_left'>承载人数</div>
<div className='item_right_right'>2000 </div>
</div>
<div className='flex-row'>
<div className='item_right_left'>目标距离</div>
<div className='item_right_right'>2.5 Km</div>
</div>
</div>
<div className='position_bg'><div className='position_icon' /> <span>场所{index + 1}</span> </div>
</div>
})
}
</div>
</Box>
}

27
super-screen/client/src/sections/fire-control/components/left-bottom.js

@ -1,11 +1,32 @@
import React from 'react'
import Box from './public/table-card';
import { Box } from '$components';
function Infrastructure(props) {
return <Box title={"基础设施"} >
return <Box title={"今日实时警情"} >
<div className='today_real_alarm'>
<div className='today_item'>
<div className='column1_alarm1'>14:22</div>
<div className='text_blue'><div className='_icon1' />红花岗区大队</div>
<div className='text_blue'><div className='_icon2' />划龙桥路77号</div>
</div>
<div className='today_item'>
<div className='column1_alarm2'>14:22</div>
<div className='text_blue'><div className='_icon1' />红花岗区大队</div>
<div className='text_blue'><div className='_icon2' />划龙桥路77号</div>
</div>
<div className='today_item'>
<div className='column1_alarm1'>14:22</div>
<div className='text_blue'><div className='_icon1' />红花岗区大队</div>
<div className='text_blue'><div className='_icon2' />划龙桥路77号</div>
</div>
<div className='today_item'>
<div className='column1_alarm2'>14:22</div>
<div className='text_blue'><div className='_icon1' />红花岗区大队</div>
<div className='text_blue'><div className='_icon2' />划龙桥路77号</div>
</div>
</div>
</Box>
}

2
super-screen/client/src/sections/fire-control/components/left-middle.js

@ -1,5 +1,5 @@
import React from 'react'
import Box from './public/table-card';
import { Box } from '$components';
import ReactEcharts from 'echarts-for-react';
function PopulationDynamics() {

2
super-screen/client/src/sections/fire-control/components/left-top.js

@ -1,5 +1,5 @@
import React from 'react'
import Box from './public/table-card';
import { Box } from '$components';
function BasicInfo() {

2
super-screen/client/src/sections/fire-control/components/right-bottom.js

@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react'
import Box from './public/table-card';
import { Box } from '$components';
import './style.less';

167
super-screen/client/src/sections/fire-control/components/right-middle.js

@ -1,15 +1,166 @@
import React, { useEffect, useState } from 'react'
import Box from './public/table-card';
import './style.less';
import React from 'react'
import { Box } from '$components';
import ReactEcharts from 'echarts-for-react';
import * as echarts from 'echarts';
function PopulationDynamics() {
function SpecialPerson(props) {
let xaxisData = ["民用建筑", "工业建筑", "森林", "地下建筑", "水上"];
let yaxisData = [150, 150, 150, 150, 150];
return <Box title={"特殊人群统计"}>
const getSymbolData = (datas) => {
let arr = [];
for (var i = 0; i < datas.length; i++) {
arr.push({
value: datas[i],
symbolPosition: "end",
});
}
return arr;
};
let option = {
tooltip: {
trigger: "axis",
axisPointer: {
type: "shadow",
},
backgroundColor: "rgba(255,255,255,0.75)",
extraCssText: "box-shadow: 2px 2px 4px 0px rgba(0,0,0,0.3);",
textStyle: {
fontSize: 14,
color: "#000",
},
formatter: (params) => {
const item = params[0];
return item.name + " : " + item.value + " 条";
},
},
legend: {
top: 10,
itemWidth: 20,
itemHeight: 10,
// icon: "roundRect",
left: "center",
padding: 0,
textStyle: {
color: "#E6E6E7",
fontSize: 14,
padding: [2, 0, 0, 0],
},
},
grid: {
left: 25,
right: 25,
top: 50,
bottom: 10,
containLabel: true,
},
xAxis: [
{
type: "category",
axisLabel: {
interval: 0,
color: "rgba(195, 230, 255, 1)",
fontSize: 12,
},
axisLine: {
show: true,
lineStyle: {
type: 'solid',
//y轴网格线设置
color: "rgba(184, 185, 188, 0.5)",
width: 1,
},
},
axisTick: {
show: false,
},
data: xaxisData,
},
],
yAxis: [
{
max: 225,
interval: 25,
type: "value",
name: "单位:次",
nameGap: 30,
nameTextStyle: {
color: "rgba(195, 230, 255, 1)",
fontWeight: 400,
fontSize: 14,
padding: [-20, 20, 0, 0]
},
axisTick: {
show: false,
},
axisLine: {
show: false,
},
splitLine: {
show: true,
lineStyle: {
type: 'dashed',
color: 'rgba(89, 153, 200, 0.5)'
}
},
axisLabel: {
show: true,
fontSize: 12,
color: "rgba(195, 230, 255, 1)",
},
},
],
series: [
{
type: "bar",
barWidth: 16,
label: {
show: false,
position: "top",
color: "#00A8FF",
},
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: "#00A8FF",
},
{
offset: 1,
color: "rgba(0, 122, 255, 0)",
},
]),
},
data: yaxisData,
},
{
type: "pictorialBar",
symbol: "react",
symbolSize: [18, 8],
symbolOffset: [0, -5],
z: 12,
itemStyle: {
color: "#fff",
},
data: getSymbolData(yaxisData),
},
],
};
return <Box title={"火灾分类"} subtitle>
<ReactEcharts
option={option}
notMerge
lazyUpdate
style={{ height: '100%' }}
/>
</Box>
}
export default SpecialPerson;
export default PopulationDynamics;

2
super-screen/client/src/sections/fire-control/components/right-top.js

@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react'
import Box from './public/table-card';
import { Box } from '$components';
import './style.less';
function CitySafty(props) {

239
super-screen/client/src/sections/fire-control/components/style.less

@ -2,7 +2,23 @@
display: flex;
width: 100%;
height: 100%;
justify-content: center;
text-align: center;
flex-direction: column;
align-items: center;
overflow: auto;
.alarm_time {
width: 98%;
height: 225px;
background: url('/assets/images/homePage/fire/alarmtime.png') no-repeat;
background-size: 100% 100%;
display: flex;
justify-content: center;
align-items: center;
font-family: YouSheBiaoTiHei;
font-size: 48px;
color: #ECF7FF;
}
.end_event {
width: 202px;
@ -16,10 +32,174 @@
align-items: center;
color: #ECF7FF;
justify-content: center;
font-size: 18px;
}
.event_title {
color: #fff;
font-size: 16px;
display: flex;
justify-content: space-around;
align-items: center;
width: 81%;
margin-top: 30px;
margin-bottom: 10px;
.event_title_left {
width: 70px;
height: 2.37px;
background-image: linear-gradient(90deg, rgba(0, 102, 255, 0) 0%, #377EE8 97%);
}
.event_title_right {
width: 70px;
height: 2.37px;
transform: scaleX(-1);
background-image: linear-gradient(90deg, rgba(0, 102, 255, 0) 0%, #377EE8 97%);
}
}
.left_second_bg {
width: 95%;
height: 160px;
background: url('/assets/images/homePage/fire/secondbg.png') no-repeat;
background-size: 100% 100%;
}
.left_third_bg {
width: 95%;
height: 80px;
background: url('/assets/images/homePage/fire/bg3.png') no-repeat;
background-size: 100% 100%;
display: flex;
align-items: center;
justify-content: space-around;
margin-bottom: 20px;
.left_item_left1 {
width: 50px;
height: 50px;
background: url('/assets/images/homePage/fire/lefticon1.png') no-repeat;
background-size: 100% 100%;
}
.left_item_left2 {
width: 50px;
height: 50px;
background: url('/assets/images/homePage/fire/lefticon2.png') no-repeat;
background-size: 100% 100%;
}
.left_item_left3 {
width: 50px;
height: 50px;
background: url('/assets/images/homePage/fire/lefticon3.png') no-repeat;
background-size: 100% 100%;
}
.left_item_left4 {
width: 50px;
height: 50px;
background: url('/assets/images/homePage/fire/lefticon4.png') no-repeat;
background-size: 100% 100%;
}
.left_item_right1 {
width: calc(100% - 70px);
color: rgba(236, 247, 255, 1);
}
}
}
.fire_item_right_container {
display: flex;
width: 100%;
height: 100%;
text-align: center;
flex-direction: column;
align-items: center;
overflow: auto;
padding-top: 24px;
.fire_right_item {
width: 95%;
height: 183px;
background: url('/assets/images/homePage/fire/rightbgbig.png') no-repeat;
background-size: 100% 100%;
display: flex;
justify-content: center;
align-items: center;
color: #ECF7FF;
position: relative;
margin-bottom: 20px;
.item_left {
width: 50px;
height: 50px;
background: url('/assets/images/homePage/fire/iconhome.png') no-repeat;
background-size: 100% 100%;
}
.item_right {
width: calc(100% - 100px);
display: flex;
flex-wrap: wrap;
.item_right_left {
width: 100px;
font-size: 14px;
color: #ECF7FF;
font-family: '';
}
.item_right_right {
width: 180px;
font-size: 14px;
color: #9CF2FF;
letter-spacing: 0;
font-family: '';
text-align: left;
}
}
.position_bg {
position: absolute;
left: 0%;
bottom: 0%;
width: 85px;
height: 30px;
background: rgba(31, 237, 255, 0.1);
background-image: linear-gradient(180deg, rgba(0, 0, 0, 0) 80%, rgba(0, 255, 244, 0.98) 100%);
border-radius: 0 20px 0 0;
display: flex;
justify-content: space-evenly;
align-items: center;
.position_icon {
width: 12px;
height: 12px;
background: url('/assets/images/homePage/fire/position.png') no-repeat;
background-size: 100% 100%;
}
}
}
}
.fire_item_right_container::-webkit-scrollbar {
width: 0 !important
}
.item_left-container::-webkit-scrollbar {
width: 0 !important
}
//警情数据分析
.alarm_data_analysis {
width: 100%;
@ -207,4 +387,61 @@
}
}
}
.today_real_alarm {
width: 100%;
height: 100%;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
.today_item {
width: 91%;
height: 41px;
background: url('/assets/images/homePage/fire/alarmbg.png') no-repeat;
background-size: 100% 100%;
display: flex;
justify-content: space-around;
align-items: center;
font-size: 14px;
color: #ECF7FF;
overflow: auto;
.column1_alarm1 {
width: 83px;
height: 24px;
background: url('/assets/images/homePage/fire/alarm1.png') no-repeat;
background-size: 100% 100%;
padding-left: 27px;
}
.column1_alarm2 {
width: 83px;
height: 24px;
background: url('/assets/images/homePage/fire/alarm2.png') no-repeat;
background-size: 100% 100%;
padding-left: 27px;
}
.text_blue {
width: 100px;
display: flex;
._icon1 {
width: 8px;
height: 8px;
background: url('/assets/images/homePage/fire/triangle1.png') no-repeat;
background-size: 100% 100%;
}
._icon2 {
width: 8px;
height: 8px;
background: url('/assets/images/homePage/fire/triangle2.png') no-repeat;
background-size: 100% 100%;
}
}
}
}

4
super-screen/client/src/sections/fire-control/containers/gis.js

@ -300,7 +300,7 @@ function Map(props) {
}
const renderAlarms = () => {
map.clearMap();
const alarms = [
{ lng: 115.92365, lat: 28.557404, type: 'device', name: '廉租房1', kind: 'markeralarm' },
]
@ -425,7 +425,7 @@ function Map(props) {
<>
{/* 延缓加载遮罩 */}
{delay && <div style={{
width: '100%', height: '100%', left: 0, top: 0, zIndex: 1000, background: '#02152f', position: 'absolute',
width: '100%', height: '100%', left: 0, top: 0, zIndex: 1000, background: '#000000', position: 'absolute',
display: 'flex', alignItems: 'center', justifyContent: 'center'
}}>
</div>}

2
super-screen/client/src/sections/homePage/components/accessData.js

@ -1,5 +1,5 @@
import React from 'react'
import Box from './public/table-card';
import { Box } from '$components';
import { useFsRequest } from '$utils';
import { mathRound } from './util'
function AccessData() {

2
super-screen/client/src/sections/homePage/components/alarmList.js

@ -1,5 +1,5 @@
import React from 'react'
import Box from './public/table-card';
import { Box } from '$components';
import CarouselList from './public/carousel-list';
import { Tooltip } from 'antd';
import moment from 'moment';

2
super-screen/client/src/sections/homePage/components/dataShare.js

@ -1,5 +1,5 @@
import React from 'react'
import Box from './public/table-card';
import { Box } from '$components';
import { useFsRequest } from '$utils';
import { mathRound } from './util';
function DataShare(props) {

2
super-screen/client/src/sections/homePage/components/dataTop5.js

@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react'
import Box from './public/table-card';
import { Box } from '$components';
import ReactEcharts from 'echarts-for-react';
import './style.less';
import { useFsRequest } from '$utils';

2
super-screen/client/src/sections/homePage/components/hotspotData.js

@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react'
import Box from './public/table-card';
import { Box } from '$components';
import NoData from './public/noData';
import './style.less';
import { ApiTable, useFsRequest } from '$utils';

2
super-screen/client/src/sections/homePage/components/nodeResource.js

@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react'
import Box from './public/table-card';
import { Box } from '$components';
import { ApiTable, useFsRequest } from '$utils';
import './style.less';
function NodeResource(props) {

2
super-screen/client/src/sections/homePage/containers/homePage.js

@ -15,7 +15,7 @@ function homePage(props) {
</div>
<div className='_enter_row2'>
<div className='_row2_item1' onClick={() => {
// dispatch(push('/waterprevention'))
dispatch(push('/waterprevention'))
}}></div>
<div className='_row2_item2' onClick={() => { dispatch(push('/communitysafty')) }}></div>
<div className='_row2_item3' onClick={() => { dispatch(push('/firecontrol')) }}></div>

49
super-screen/client/src/sections/water-prevention/components/abnormalMonitoring.js

@ -1,49 +0,0 @@
import React, { useEffect, useState } from 'react'
import CarouselList from './public/carousel-list';
import { Tooltip } from 'antd';
import { ApiTable, useFsRequest } from '$utils';
import moment from 'moment';
function AbnormalMonitoring(props) {
const { data: logs = {} } = useFsRequest({
url: ApiTable.getLogs,
query: {
logState: false,
startTime: moment().subtract(7, 'days').format('YYYY-MM-DD HH:mm:ss'),
endTime: moment().format('YYYY-MM-DD HH:mm:ss')
},
pollingInterval: 1000 * 60
});
const dataSource = logs?.rows ? logs?.rows?.map(s => {
return [
<div style={{ color: '#fff' }}>
<Tooltip placement="top" title={s?.acquisitionTask?.taskName}>
{s?.acquisitionTask?.taskName?.length > 20 ? s?.acquisitionTask?.taskNamesubstring(0, 20) + '...' : s?.acquisitionTask?.taskName}
</Tooltip>
</div>,
moment(s?.startTime).format('YYYY-MM-DD HH:mm:ss'),
moment(s?.endTime).valueOf() - moment(s?.startTime).valueOf() + '毫秒',
<div style={{ color: 'rgba(245, 27, 27, 1)' }}>
<Tooltip placement="top" title={s?.details}>
{s?.details?.length > 20 ? s?.details.substring(0, 20) + '...' : s?.details}
</Tooltip>
</div>
]
}) : []
return <div style={{ height: 149, border: '1px solid #50c9d74d', backgroundImage: 'linear-gradient(180deg, rgba(0, 32, 74, 0) 3%, rgba(80, 201, 247, 0.1) 100%)' }}>
<div className='center-card-title' style={{ marginBottom: 6 }}><div className='_icon_left' />异常监控<div className='_icon_right' /></div>
<CarouselList
header={['任务名称', '采集时间', '耗时', '异常日志']}
data={dataSource}
rowNum={2}
height={100}
multiellipsis
marginTop={-50}
/>
</div>
}
export default AbnormalMonitoring;

36
super-screen/client/src/sections/water-prevention/components/accessData.js

@ -1,36 +0,0 @@
import React from 'react'
import Box from './public/table-card';
import { useFsRequest } from '$utils';
import { mathRound } from './util'
function AccessData() {
const { data: accessdata = [] } = useFsRequest({
url: 'homepage/accessdata',
pollingInterval: 1000 * 60,
cacheKey: 'accessdata',
});
const renderBody = () => {
return <div className='access_data'>
<div className='_img'></div>
<div className='data_unit'>
数据单位<div className='data_number'>{!accessdata?.projects ? '-' : accessdata?.projects?.split(',')?.length}</div>
</div>
<div className='data_today'>
今日数据<div className='data_number'>{!accessdata?.res?.stat?.today ? '-' : accessdata?.res?.stat?.today > 1000 ? mathRound(accessdata?.res?.stat?.today) : accessdata?.res?.stat?.today}</div>{accessdata?.res?.stat?.today > 1000 ? '' : ''}
</div>
<div className='data_total'>
数据总量<div className='data_number'>{accessdata?.res?.stat?.datas ? Math.round(accessdata?.res?.stat?.datas / 10000) : '-'}</div>
</div>
</div>
}
return <Box title={"接入数据统计"} >
{renderBody()}
</Box>
}
export default AccessData;

52
super-screen/client/src/sections/water-prevention/components/alarmList.js

@ -1,52 +0,0 @@
import React from 'react'
import Box from './public/table-card';
import CarouselList from './public/carousel-list';
import { Tooltip } from 'antd';
import moment from 'moment';
import NoData from './public/noData';
import { useFsRequest } from '$utils';
function AlarmList(props) {
const { cardContentHeight } = props;
const { data: alarms = [] } = useFsRequest({
url: 'homepage/alarms',
pollingInterval: 1000 * 60,
cacheKey: 'alarms',
});
const data = alarms.map(s => {
return [
s.content,
s.level == 1 ? '一级' : s.level == 2 ? '二级' : s.level == 3 ? '三级' : '四级',
moment(s.time).format('YYYY-MM-DD HH:mm:ss')
]
})
const renderBody = () => {
return <CarouselList
header={['预警内容', '预警等级', '预警时间']}
data={data?.map(s => {
return [
<Tooltip placement="top" title={s[0]}>
{s[0].length > 20 ? s[0]?.substring(0, 20) + '...' : s[0]}
</Tooltip>,
<div style={{ color: s[1] == '一级' ? 'rgba(245, 27, 27, 1)' : s[1] == '二级' ? '#FF7900' : s[1] == '三级' ? '#FFCD00' : '#00DA9F' }}>{s[1]}</div>,
s[2]
]
})}
rowNum={6}
height={cardContentHeight}
multiellipsis
columnWidth={[180, 80, 150]}
/>
}
return <Box title={"预警列表"}>
{alarms?.length > 0 ? renderBody() : <NoData />}
</Box>
}
export default AlarmList;

19
super-screen/client/src/sections/water-prevention/components/centerTop.js

@ -1,19 +0,0 @@
import React from 'react'
import './style.less'
function CenterTop(props) {
return <div className='_top'>
<div className='center_top_data'>
<div className='_center_card1'>共享交换</div>
<div className='_center_card2'>数据监控</div>
<div className='_center_card3'>数据治理</div>
<div className='_center_card4'>数据采集</div>
</div>
</div>
}
export default CenterTop;

78
super-screen/client/src/sections/water-prevention/components/charts/constants.js

@ -0,0 +1,78 @@
export const RING_COLORS = [
{ linearGradientTo: 'rgba(2, 14, 35, 1)', linearGradientFrom: 'rgba(23, 106, 231, 1)' },
{ linearGradientTo: 'rgba(50, 40, 2, 1)', linearGradientFrom: 'rgba(255, 175, 0, 1)' },
{ linearGradientTo: 'rgba(2, 71, 119, 1)', linearGradientFrom: 'rgba(0, 169, 255, 1)' },
{ linearGradientTo: 'rgba(3, 56, 26, 1)', linearGradientFrom: 'rgba(0, 255, 110, 1)' },
{ linearGradientTo: 'rgba(0, 48, 64, 1)', linearGradientFrom: 'rgba(0, 227, 255, 1)' },
{ linearGradientTo: 'rgba(57, 2, 4, 1)', linearGradientFrom: 'rgba(254, 142, 145, 1)' },
];
export const tooltip = {
backgroundColor: 'rgba(3, 65, 118, 0.8)',
borderColor: 'rgba(3, 65, 118, 0.8)',
textStyle: {
color: '#fff',
},
};
export const COMMON_COLOR = {
lineColor: '#2F5384',
labelColor: '#fff',
axisLineColor: '#0D4892',
splitLineColor: '#0D4892',
};
const getAreaColor = (color) => ({
fromColor: color.replace('1)', '0)'),
toColor: color.replace('1)', '1)'),
});
export const DEFAULT_COLOR = ['rgba(9,203,240, 1)', 'rgba(16,127,222, 1)', 'rgba(17,187,112, 1)', 'rgba(255, 143, 145, 1)', 'rgba(0, 168, 251, 1)', 'rgba(7, 246, 109, 1)', 'rgba(246, 136, 7, 1)'];
export const DEFAULT_AREA_COLOR = DEFAULT_COLOR.map((color) => ({
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: getAreaColor(color).fromColor, // 0% 处的颜色
}, {
offset: 1, color: getAreaColor(color).toColor, // 100% 处的颜色
}],
global: false, // 缺省为 false
}));
export const YAXIS_BLUE = {
axisTick: {
show: true,
lineStyle: {
color: 'rgba(0, 133, 246, 1)',
dashOffset: 10,
type: 'dashed',
},
inside: true,
},
axisLine: {
show: true,
lineStyle: {
color: 'rgba(0, 133, 246, 1)',
},
},
nameTextStyle: {
color: '#FFFFFF',
},
axisLabel: {
color: '#FFFFFF',
fontSize: 14,
},
splitLine: {
lineStyle: {
type: 'dashed',
color: 'rgba(91, 180, 218, 0.1)',
},
},
};
export default {
RING_COLORS, tooltip, COMMON_COLOR, DEFAULT_COLOR, DEFAULT_AREA_COLOR, YAXIS_BLUE,
};

122
super-screen/client/src/sections/water-prevention/components/charts/ring.js

@ -0,0 +1,122 @@
import React from 'react';
import ReactEcharts from 'echarts-for-react';
import * as echarts from 'echarts';
import { RING_COLORS, tooltip } from './constants';
/**
* props
* height: 图表高度
*/
function RingChart(props) {
const { data, image = {} } = props;
// eslint-disable-next-line react/destructuring-assignment
const colors = props.colors || RING_COLORS;
const max = data.reduce((pre, cur) => pre + cur.value, 0);
const getOption = () => {
const option = {
graphic: {
type: 'image',
style: {
image: image.url,
width: image.width,
height: image.height,
},
left: 'center',
top: 'center',
},
title: {
text: max,
subtext: '站点总数',
textStyle: {
color: '#E2F8FF',
fontSize: 25,
align: 'center',
fontFamily: 'DINMediumItalic',
fontWeight: 'Italic',
letterSpacing: '2.08px',
},
subtextStyle: {
fontSize: 14,
fontWeight: 400,
color: ['#E6EFFF'],
},
x: 'center',
y: 'center',
top: '35%',
},
tooltip: {
...tooltip,
trigger: 'item',
formatter: '{b} : {c}个 ({d}%)',
position: ['10%', '40%'],
},
// 渐变色
color: colors.map((s) => {
const cs = new echarts.graphic.LinearGradient(1, 1, 0, 0, [
{ offset: 0, color: s.linearGradientFrom },
{ offset: 0.9, color: s.linearGradientTo },
]);
return cs;
}),
series: [
{
type: 'pie',
radius: ['66%', '80%'],
avoidLabelOverlap: false,
itemStyle: {
// 环图间隙
borderColor: '#0A1024',
borderWidth: 3,
},
label: {
show: false,
position: 'center',
},
emphasis: {
label: {
show: false,
fontSize: '40',
fontWeight: 'bold',
},
},
labelLine: {
show: false,
},
data,
},
],
};
return option;
};
const { height, width } = props;
const options = getOption();
const renderList = () => data.map((s, index) => (
<div key={s.name || index} className="type-leagle-item flex-row flex-item-center">
<div className="flex-row flex-item-center">
<div className="type-leagle-dot" style={{ background: `linear-gradient(16deg, ${colors[index].linearGradientFrom} 0%, ${colors[index].linearGradientTo} 100%)` }} />
<div className="type-leagle-label">{s.name}</div>
</div>
<div className="type-leagle-value">{s.value}</div>
</div>
));
return (
<div style={{ height: '100%' }} className="flex-column flex-item-center">
<div className="type-chart-wrapper">
<ReactEcharts
option={options}
notMerge
lazyUpdate
style={{ height: height || '174px', margin: '0', width: width || 'auto' }}
/>
</div>
<div className="type-leagle-wrapper flex-row flex-content-between">
{renderList()}
</div>
</div>
);
}
export default RingChart;

54
super-screen/client/src/sections/water-prevention/components/dataShare.js

@ -1,54 +0,0 @@
import React from 'react'
import Box from './public/table-card';
import { useFsRequest } from '$utils';
import { mathRound } from './util';
function DataShare(props) {
const { data: dataTotal = {} } = useFsRequest({
url: 'homepage/datatotal/top5',
pollingInterval: 1000 * 60,
cacheKey: 'datatotal',
});
const { data: restfulInfo = {} } = useFsRequest({
url: 'homepage/restful/info',
pollingInterval: 1000 * 60,
cacheKey: 'restfulInfo',
});
const renderItem = (s) => {
return <div className='_item_content'>
<div className={'_item_icon' + s.key} />
<div className='_item_text'>
{s.title}
<div className='number_container'>
<span className='_number'>{s.data}</span>{s.unit}
</div>
</div>
</div>
}
const leftData = [
{ key: '1', data: mathRound(dataTotal?.total), unit: '万条', title: '共享库数据总量' },
{ key: '2', data: restfulInfo?.total, unit: '次', title: '访问接口总次数' },
{ key: '3', data: restfulInfo?.totalUser, unit: '个', title: '访问接口用户总数' }]
const rightData = [
{ key: '2', data: restfulInfo?.todayTotal, unit: '次', title: '接口访问次数' },
{ key: '3', data: restfulInfo?.todayUser, unit: '个', title: '访问接口用户总数' }]
return <Box title={"数据共享"} >
<div className='data_share'>
<div className='_left_content'>
{leftData.map(s => renderItem(s))}
</div>
<div className='_right_content'>
<div className='_today_text'>今日</div>
{rightData.map(s => renderItem(s))}
</div>
</div>
</Box>
}
export default DataShare;

262
super-screen/client/src/sections/water-prevention/components/dataTop5.js

@ -1,262 +0,0 @@
import React, { useEffect, useState } from 'react'
import Box from './public/table-card';
import ReactEcharts from 'echarts-for-react';
import './style.less';
import { useFsRequest } from '$utils';
import { mathRound } from './util';
import NoData from './public/noData';
function DataTop5(props) {
const { cardContentHeight } = props;
const { data: dataTotal = {} } = useFsRequest({
url: 'homepage/datatotal/top5',
pollingInterval: 1000 * 60,
cacheKey: 'datatotal',
});
const renderBody = () => {
let chartData = dataTotal?.top5?.map(x => {
return {
name: x?.dataSource?.resourceCatalog?.name,
value: mathRound(x.dbRecordCount),
}
}) || []
let options = {
xAxis: {
splitLine: {
show: false,
},
axisLabel: {
show: false,
},
axisTick: {
show: false,
},
splitArea: { show: false },
axisLine: {
show: false,
},
},
tooltip: {
confine: true,
trigger: 'axis',
axisPointer: {
type: 'shadow',
},
backgroundColor: 'rgba(13,30,44, 0.7)',
borderColor: 'rgba(3, 65, 118, 0.8)',
textStyle: {
color: '#fff',
},
formatter: function (params) {
var name = params[0].name
if (name.length > 20) {
name = name.replace(/(.{20})/g, '$1<br>') // 每 30 个字符添加一个换行符
}
var content = name
return content + ' : <b>' + params[0].value + '</b>万条'
}
},
grid: {
top: 13,
bottom: -10,
left: '5%',
},
yAxis: {
inverse: true,
axisLine: {
show: false,
},
axisTick: {
show: false,
},
axisLabel: {
textStyle: {
color: '#fff',
padding: [-5, 0, 35, 18],
},
formatter(value, index) {
let str = '', num = 'TOP' + (index + 1)
let valueHandle = value.length > 10 ? value.substring(0, 10) + '...' : value
if (index === 0) {
str = '{a| ' + num + '}{title| ' + valueHandle + '}'
} else if (index === 1) {
str = '{b| ' + num + '}{title| ' + valueHandle + '}'
} else if (index === 2) {
str = '{c| ' + num + '}{title| ' + valueHandle + '}'
} else {
str = '{d| ' + num + '}{title| ' + valueHandle + '}'
}
return str
},
rich: {
a: {
borderColor: '#EE6F7C',
borderWidth: 1,
borderRadius: [0, 10, 10, 0],
padding: [3.5, 10, 1, -13],
backgroundColor: 'rgba(238, 111, 124, 0.8)',
},
b: {
borderColor: '#FFCF5F',
borderWidth: 1,
borderRadius: [0, 10, 10, 0],
padding: [3.5, 10, 1, -13],
backgroundColor: 'rgba(255, 207, 95, 0.7)',
},
c: {
borderColor: '#00E8FF',
borderWidth: 1,
borderRadius: [0, 10, 10, 0],
padding: [3.5, 10, 1, -13],
backgroundColor: 'rgba(0, 232, 255, 0.7)',
},
d: {
borderColor: '#1A90FF',
borderWidth: 1,
borderRadius: [0, 10, 10, 0],
padding: [3.5, 10, 1, -13],
backgroundColor: 'rgba(26, 144, 255, 0.7)',
},
title: {
padding: [0, 0, 0, 3],
},
},
align: 'left',
},
data: chartData.map((item) => item.name),
},
series: [
{
type: 'pictorialBar',
symbol: 'rect',
symbolRotate: 30,
symbolRepeat: 'fixed',
symbolClip: true,
symbolOffset: [0, -1.5],
symbolSize: [2, 12],
symbolMargin: '3',
itemStyle: {
normal: {
color: '#000726',
},
},
label: {
show: true,
color: '#C8F0FF',
fontFamily: 'Bebas',
fontSize: 12,
offset: [-9, 1],
position: 'right',
formatter(params) {
let result = ''
switch (params.dataIndex) {
case 0:
result = '{img|}{index0|' + params.value + '}{unit|}'
break
case 1:
result = '{img|}{index1|' + params.value + '}{unit|}'
break
case 2:
result = '{img|}{index2|' + params.value + '}{unit|}'
break
default:
result = '{img|}{index3|' + params.value + '}{unit|}'
break
}
return result
},
rich: {
img: {
height: 18,
width: 20,
// backgroundColor: { image: arrow },这个图片自己切,这里上传不了(加了一个尾巴的形状)
},
unit: {
color: '#C8F0FF',
fontSize: 11,
},
index0: {
color: '#FFF',
fontFamily: 'Bebas',
padding: [-2, 2, 0, 0],
fontWeight: 'bold',
fontSize: 16,
},
index1: {
color: '#FFF',
fontFamily: 'Bebas',
padding: [-2, 2, 0, 0],
fontWeight: 'bold',
fontSize: 16,
},
index2: {
color: '#FFF',
fontFamily: 'Bebas',
padding: [-2, 2, 0, 0],
fontWeight: 'bold',
fontSize: 16,
},
index3: {
color: '#FFF',
fontFamily: 'Bebas',
padding: [-2, 2, 0, 0],
fontWeight: 'bold',
fontSize: 16,
},
},
},
symbolBoundingData: Math.max(...chartData.map((item) => item.value)) * 1.3,
data: chartData.map((item) => item.value),
z: 2,
},
{
type: 'bar',
barWidth: 10,
data: chartData.map((item) => item.value),
itemStyle: {
normal: {
color: '#54DEFA',
},
},
z: 1,
},
{
type: 'bar',
barGap: '-125%', // 设置外框粗细
data: chartData.map((items) => Math.max(...chartData.map((item) => item.value)) * 1.3),
barWidth: 15,
itemStyle: {
color: 'none',
borderColor: '#979797',
},
z: 0,
},
],
};
return <ReactEcharts
option={options}
notMerge
lazyUpdate
style={{ height: cardContentHeight }}
/>
}
return <Box title={"数据量TOP5单位"} bodyPaddingTop={1} >
{
dataTotal?.top5?.length > 0 ?
<>
<div className='data_top5_unit'>数据量万条</div>
{renderBody()}
</>
: <NoData />
}
</Box>
}
export default DataTop5;

55
super-screen/client/src/sections/water-prevention/components/emergency-left-bottom.js

@ -0,0 +1,55 @@
import React from 'react'
import { Box } from '$components';
function Infrastructure(props) {
return <Box title={"预警统计"} >
<div className='_city_safty'>
<div className='alarm_handle'>
<div className='handle_img' />
<div className='alarm_content'>
<div className='alarm_bg'>
<div className='alarm_title1'>2023-06-20 170000</div>
<div className='alarm_title2' style={{ color: '#FFEA00' }}>二级预警</div>
</div>
<div className='alarm_text'>萌萌小区25栋305等等等等等发生等等火灾扥大哥大呢个</div>
</div>
</div>
<div className='alarm_unhandle'>
<div className='handle_img' />
<div className='alarm_content'>
<div className='alarm_bg'>
<div className='alarm_title1'>2023-06-20 170000</div>
<div className='alarm_title2' style={{ color: '#FF2C2C' }}>一级预警</div>
</div>
<div className='alarm_text'>萌萌小区25栋305等等等等等发生等等火灾扥大哥大呢个</div>
</div>
</div>
<div className='alarm_unhandle'>
<div className='handle_img' />
<div className='alarm_content'>
<div className='alarm_bg'>
<div className='alarm_title1'>2023-06-20 170000</div>
<div className='alarm_title2' style={{ color: '#FF2C2C' }}>二级预警</div>
</div>
<div className='alarm_text'>萌萌小区25栋305等等等等等发生等等火灾扥大哥大呢个</div>
</div>
</div>
<div className='alarm_unhandle'>
<div className='handle_img' />
<div className='alarm_content'>
<div className='alarm_bg'>
<div className='alarm_title1'>2023-06-20 170000</div>
<div className='alarm_title2' style={{ color: '#FF2C2C' }}>二级预警</div>
</div>
<div className='alarm_text'>萌萌小区25栋305等等等等等发生等等火灾扥大哥大呢个</div>
</div>
</div>
</div>
</Box>
}
export default Infrastructure;

13
super-screen/client/src/sections/water-prevention/components/emergency-left-top.js

@ -0,0 +1,13 @@
import React from 'react'
import { Box } from '$components';
function BasicInfo() {
return <Box title={"防汛预案"} subtitle={true} >
</Box>
}
export default BasicInfo;

37
super-screen/client/src/sections/water-prevention/components/emergency-right-bottom.js

@ -0,0 +1,37 @@
import React, { useEffect, useState } from 'react'
import { Box } from '$components';
import './style.less';
function DataTop5(props) {
return <Box title={"周边小区"} bodyPaddingTop={1} >
<div className='_traffic_ranking'>
<div className='_rank_title'>
<div className='_rank_item1'>排名</div>
<div className='_rank_item2'>小区名称</div>
<div className='_rank_item3'>人流量<span style={{ fontSize: 14 }}>/</span></div>
</div>
<div className='rank_content_overflow'>
{[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map(s => {
return <div className='_rank_content'>
<div className={`_rank_item1`}>
<div className={`topbg${s}`}>
<div style={{ marginTop: -9 }}>{s}</div>
</div>
</div>
<div className='_rank_item2'>小区名称{s}</div>
<div className='_rank_item3'>{1400 - s}</div>
</div>
})}
</div>
</div>
</Box>
}
export default DataTop5;

43
super-screen/client/src/sections/water-prevention/components/emergency-right-top.js

@ -0,0 +1,43 @@
import React, { useEffect, useState } from 'react'
import { Box } from '$components';
import './style.less';
function CitySafty(props) {
return <Box title={"避难场所"} >
<div className='fire_item_right_container'>
{
[1, 2, 3, 4, 5, 6, 7].map((s, index) => {
return <div className='fire_right_item'>
<div className='item_left'></div>
<div className='item_right'>
<div className='flex-row'>
<div className='item_right_left'>场所名称</div>
<div className='item_right_right'>南昌县人民公园中心市场</div>
</div>
<div className='flex-row'>
<div className='item_right_left'>场所地点</div>
<div className='item_right_right'>南昌县中心街道人民路168号
人民路168号人民路168号</div>
</div>
<div className='flex-row'>
<div className='item_right_left'>承载人数</div>
<div className='item_right_right'>2000 </div>
</div>
<div className='flex-row'>
<div className='item_right_left'>目标距离</div>
<div className='item_right_right'>2.5 Km</div>
</div>
</div>
<div className='position_bg'><div className='position_icon' /> <span>场所{index + 1}</span> </div>
</div>
})
}
</div>
</Box>
}
export default CitySafty;

42
super-screen/client/src/sections/water-prevention/components/hotspotData.js

@ -1,42 +0,0 @@
import React, { useEffect, useState } from 'react'
import Box from './public/table-card';
import NoData from './public/noData';
import './style.less';
import { ApiTable, useFsRequest } from '$utils';
function HotspotData(props) {
const { data: restfulInfo = {} } = useFsRequest({
url: 'homepage/restful/info',
pollingInterval: 1000 * 60,
cacheKey: 'restfulInfo',
});
const top3 = restfulInfo?.top3
return <Box title={"热点数据"} bodyPaddingTop={25} >
{top3?.length > 0 ?
<div className='hotspot_data_container'>
<div className='_img'></div>
<div className='_top1'>
<span className='hotspot_title' title={top3[0].name}>{top3[0].name?.length > 8 ? top3[0].name.substring(0, 8) + '...' : top3[0].name}</span>
<div className='hotspot_data_number'>{top3[0].count}</div>
</div>
<div className='_top2'>
{top3?.length > 2 && <>
<span className='hotspot_title' title={top3[2].name}>{top3[2].name?.length > 8 ? top3[2].name.substring(0, 8) + '...' : top3[2].name}</span>
<div className='hotspot_data_number'>{top3[2].count}</div>
</>}
</div>
<div className='_top3'>
{top3?.length > 1 && <>
<span className='hotspot_title' title={top3[1].name}>{top3[1].name?.length > 8 ? top3[1].name.substring(0, 8) + '...' : top3[1].name}</span>
<div className='hotspot_data_number'>{top3[1].count}</div>
</>}
</div>
</div> : <NoData />
}
</Box>
}
export default HotspotData;

58
super-screen/client/src/sections/water-prevention/components/left-bottom.js

@ -0,0 +1,58 @@
import React from 'react'
import { Box } from '$components';
import RingChart from './charts/ring'
function LeftBottom(props) {
const colors = [
{
linearGradientTo: 'rgba(5, 207, 247, 0)',
linearGradientFrom: 'rgba(5, 207, 247, 1)',
},
{
linearGradientTo: 'rgba(23, 123, 238, 1)',
linearGradientFrom: 'rgba(23, 123, 238, 0)',
},
{
linearGradientTo: 'rgba(234, 185, 102, 1)',
linearGradientFrom: 'rgba(234, 185, 102, 0)',
},
{
linearGradientTo: 'rgba(108, 208, 106, 0)',
linearGradientFrom: 'rgba(108, 208, 106, 1)',
},
{
linearGradientTo: 'rgba(194, 208, 213, 0)',
linearGradientFrom: 'rgba(194, 208, 213, 1)',
},
{
linearGradientTo: 'rgba(213, 204, 92, 0)',
linearGradientFrom: 'rgba(213, 204, 92, 1)',
},
];
const data = [
{ name: '泵站站点', value: 2560 },
{ name: '雨量站点', value: 1560 },
{ name: '水位站点', value: 3560 }
]
return <Box title={"建设数据"} >
<RingChart
data={data}
colors={colors}
width="100%"
height="100%"
image={
{
url: '/assets/images/ring_bg.png',
width: 106,
height: 106,
}
}
/>
</Box>
}
export default LeftBottom;

30
super-screen/client/src/sections/water-prevention/components/left-top.js

@ -0,0 +1,30 @@
import React from 'react'
import { Box } from '$components';
import { Select } from 'antd';
const { Option } = Select;
function BasicInfo() {
const renderSubtitle = () => (
<Select
className="gis-search-select"
popupClassName="super-dropdownClassName"
style={{ width: 120, height: 24 }}
showSearch={false}
optionFilterProp="children"
key={Math.random()}
defaultValue={'小蓝经开区'}
>
<Option key={'小蓝经开区'} value={'小蓝经开区'}>小蓝经开区</Option>
<Option key={'东新乡'} value={'东新乡'}>东新乡</Option>
<Option key={'莲塘镇'} value={'莲塘镇'}>莲塘镇</Option>
</Select>
);
return <Box title={"实时态势"} subtitleSelect={renderSubtitle()}>
</Box>
}
export default BasicInfo;

39
super-screen/client/src/sections/water-prevention/components/nodeResource.js

@ -1,39 +0,0 @@
import React, { useEffect, useState } from 'react'
import Box from './public/table-card';
import { ApiTable, useFsRequest } from '$utils';
import './style.less';
function NodeResource(props) {
const { data: cluters = {} } = useFsRequest({
url: 'homepage/datatotal/cluters',
pollingInterval: 1000 * 20,
});
const renderBody = () => {
return <div className='node-resource-container'>
<div className='_item'>
<div className='_noderesource_data'>{cluters?.disk}<span className='_percent'>%</span></div>
<div className='_noderesource_title'>硬盘</div>
<div className='disk_icon' />
</div>
<div className='_item'>
<div className='_noderesource_data'>{cluters?.memory}<span className='_percent'>%</span></div>
<div className='_noderesource_title'>内存</div>
<div className='memory_icon' />
</div>
<div className='_item'>
<div className='_noderesource_data'>{cluters?.cpu}<span className='_percent'>%</span></div>
<div className='_noderesource_title'>CPU</div>
<div className='cpu_icon' />
</div>
</div>
}
return <Box title={"节点资源"} >
{renderBody()}
</Box>
}
export default NodeResource;

41
super-screen/client/src/sections/water-prevention/components/public/index.less

@ -3,14 +3,11 @@
}
.card-title {
// background: linear-gradient(to bottom, #fafafb, #92cbff);
// background-clip: border-box;
// -webkit-background-clip: text;
color: #fff;
font-size: 22px;
height: 31px;
font-family: YouSheBiaoTiHei;
padding-left: 20px;
// font-weight: 600;
font-size: 24px;
color: #FFFFFF;
letter-spacing: 2px;
}
/* 滚动列表 */
@ -77,4 +74,34 @@
background-repeat: no-repeat;
background-size: 100% 100%;
margin-left: 13px;
}
.subtitle_ {
float: right;
margin-top: 12px;
margin-right: 20px;
width: 200px;
text-align: center;
._item_select {
width: 60px;
height: 20px;
display: inline-block;
font-size: 14px;
color: #24DCF7;
border: 1px solid #12B2E5;
background-color: rgba(91, 193, 255, 0.2);
margin-right: 3px;
}
._item {
width: 60px;
height: 20px;
display: inline-block;
font-size: 14px;
color: #4C9FFF;
border: 1px solid #0B6AEA;
background-color: rgba(35, 108, 254, 0.3);
margin-right: 3px;
}
}

27
super-screen/client/src/sections/water-prevention/components/public/table-card.js

@ -4,7 +4,7 @@ import React from 'react'
import './index.less'
class Box extends React.Component {
render() {
const { title, height = '100%', children, bodyPaddingTop = 1, titlePaddingTop, margin, overflow } = this.props
const { title, height = '100%', children, bodyPaddingTop = 1, titlePaddingTop, margin, overflow, subtitle } = this.props
const headerbg = {
background: 'url(/assets/images/homePage/bigscreen/headertitlebg.png) no-repeat',
@ -14,17 +14,24 @@ class Box extends React.Component {
<div style={{ height, width: '100%', margin: margin || "0px 0px 28px" }}>
<div style={{
height: height, listStyle: 'none', overflow: overflow || 'hidden',
backgroundImage: 'linear-gradient(180deg, #00204a00 3%, #50c9f71a 100%)',
}}>
<div style={{ height: 42, paddingLeft: 24, paddingTop: '4px', wordBreak: 'keep-all', whiteSpace: 'nowrap', width: '100%', ...headerbg }}>
<span className='card-title'>{title}</span><div className='_sorrow' />
<div style={{ height: 42, paddingTop: '4px', wordBreak: 'keep-all', whiteSpace: 'nowrap', width: '100%', ...headerbg, }}>
<span className='card-title'>{title}</span>
{subtitle && <div className='subtitle_'>
<div className='_item_select'>本周</div>
<div className='_item'>本月</div>
<div className='_item'>本年</div>
</div>}
</div>
<div
style={{
width: '100%', height: 2,
marginTop: titlePaddingTop || 10, marginBottom: bodyPaddingTop || 25,
}} />
{children}
<div style={{
height: 'calc(100% - 42px)',
backgroundImage: 'linear-gradient(180deg, #04377ecc 1%, #001241 100%)',
}}>
{children}
</div>
</div>
</div>
)

35
super-screen/client/src/sections/water-prevention/components/right-bottom.js

@ -0,0 +1,35 @@
import React, { useEffect, useState } from 'react'
import { Box } from '$components';
import './style.less';
function DataTop5(props) {
return <Box title={"视频监控"} bodyPaddingTop={1} >
<div className='water_video_container'>
<div className='_item'>
<div className='video_bottom'><span>南昌大道</span><span>14:12:32</span></div>
</div>
<div className='_item'>
<div className='video_bottom'><span>南昌大道</span><span>11:34:12</span></div>
</div>
<div className='_item'>
<div className='video_bottom'><span>南昌大道</span><span>08:34:12</span></div>
</div>
<div className='_item'>
<div className='video_bottom'><span>南昌大道</span><span>09:12:34</span></div>
</div>
<div className='_item'>
<div className='video_bottom'><span>南昌大道</span><span>08:34:12</span></div>
</div>
<div className='_item'>
<div className='video_bottom'><span>南昌大道</span><span>09:12:34</span></div>
</div>
</div>
</Box>
}
export default DataTop5;

38
super-screen/client/src/sections/water-prevention/components/right-top.js

@ -0,0 +1,38 @@
import React, { useEffect, useState } from 'react'
import { Box } from '$components';
import './style.less';
function CitySafty(props) {
return <Box title={"水位趋势预测图"} >
<div className='water_traffic_ranking'>
<div className='_rank_title'>
<div className='_rank_item1'>点位名称</div>
<div className='_rank_item2'>时间</div>
<div className='_rank_item3'>水位</div>
<div className='_rank_item4'>未来1小时趋势</div>
</div>
<div className='rank_content_overflow'>
{[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map((s, index) => {
return <div className='_rank_content'>
<div className={`_rank_item1`}>
点位{index + 1}
</div>
<div className='_rank_item2'>2023-01-02 12:12:12</div>
<div className='_rank_item3'>111 <div className={index % 2 == 0 ? '_upicon' : '_downicon'} /> </div>
<div className='_rank_item4'>
<div className={index % 2 == 0 ? 'normalbg' : 'warningbg'} >
{index % 2 == 0 ? '正常' : '告警'}
</div>
</div>
</div>
})}
</div>
</div>
</Box>
}
export default CitySafty;

836
super-screen/client/src/sections/water-prevention/components/style.less

@ -1,373 +1,661 @@
@card-height: calc(100% - 42px - 13px); //左右卡片内容高度定义 目前卡片为等高
//节点资源
.node-resource-container {
.item_left-container {
display: flex;
height: @card-height;
width: 100%;
height: 100%;
text-align: center;
flex-direction: column;
align-items: center;
overflow: auto;
._item {
width: 33%;
.alarm_time {
width: 98%;
height: 225px;
background: url('/assets/images/homePage/fire/alarmtime.png') no-repeat;
background-size: 100% 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
font-family: YouSheBiaoTiHei;
font-size: 48px;
color: #ECF7FF;
}
._noderesource_data {
font-family: D-DINExp-Bold;
font-weight: 600;
font-size: 24px;
color: #FFFFFF;
line-height: 43.2px;
display: flex;
align-items: center;
.end_event {
width: 202px;
height: 39px;
background-image: linear-gradient(180deg, #711313 0%, #b3000063 52%, #711313 100%);
border: 1.5px solid #A20000;
box-shadow: inset 0 1px 14px 0 #ff525259;
border-radius: 2px;
display: flex;
justify-self: center;
align-items: center;
color: #ECF7FF;
justify-content: center;
font-size: 18px;
}
._percent {
opacity: 0.8;
font-family: PingFangSC-Regular;
font-weight: 400;
font-size: 12px;
color: #C8F0FF;
text-align: left;
line-height: 24px;
}
.event_title {
color: #fff;
font-size: 16px;
display: flex;
justify-content: space-around;
align-items: center;
width: 81%;
margin-top: 30px;
margin-bottom: 10px;
.event_title_left {
width: 70px;
height: 2.37px;
background-image: linear-gradient(90deg, rgba(0, 102, 255, 0) 0%, #377EE8 97%);
}
._noderesource_title {
font-family: YouSheBiaoTiHei;
font-size: 20px;
color: #D8F0FF;
letter-spacing: 1.54px;
text-align: center;
text-shadow: 0 0 10px rgba(0, 145, 255, 0.5);
margin-bottom: 17px;
.event_title_right {
width: 70px;
height: 2.37px;
transform: scaleX(-1);
background-image: linear-gradient(90deg, rgba(0, 102, 255, 0) 0%, #377EE8 97%);
}
}
.left_second_bg {
width: 95%;
height: 160px;
background: url('/assets/images/homePage/fire/secondbg.png') no-repeat;
background-size: 100% 100%;
}
.left_third_bg {
width: 95%;
height: 80px;
background: url('/assets/images/homePage/fire/bg3.png') no-repeat;
background-size: 100% 100%;
display: flex;
align-items: center;
justify-content: space-around;
margin-bottom: 20px;
.left_item_left1 {
width: 50px;
height: 50px;
background: url('/assets/images/homePage/fire/lefticon1.png') no-repeat;
background-size: 100% 100%;
}
.disk_icon {
width: 68.73px;
height: 62.77px;
background: url('/assets/images/homePage/bigscreen/disk.png');
background-repeat: no-repeat;
.left_item_left2 {
width: 50px;
height: 50px;
background: url('/assets/images/homePage/fire/lefticon2.png') no-repeat;
background-size: 100% 100%;
}
.cpu_icon {
width: 68.73px;
height: 62.77px;
background: url('/assets/images/homePage/bigscreen/cpu.png');
background-repeat: no-repeat;
.left_item_left3 {
width: 50px;
height: 50px;
background: url('/assets/images/homePage/fire/lefticon3.png') no-repeat;
background-size: 100% 100%;
}
.memory_icon {
width: 68.73px;
height: 62.77px;
background: url('/assets/images/homePage/bigscreen/memory.png');
background-repeat: no-repeat;
.left_item_left4 {
width: 50px;
height: 50px;
background: url('/assets/images/homePage/fire/lefticon4.png') no-repeat;
background-size: 100% 100%;
}
.left_item_right1 {
width: calc(100% - 70px);
color: rgba(236, 247, 255, 1);
}
}
}
//接入数据统计
.access_data {
.fire_item_right_container {
display: flex;
height: @card-height;
width: 100%;
justify-content: center;
height: 100%;
text-align: center;
flex-direction: column;
align-items: center;
overflow: auto;
padding-top: 24px;
.fire_right_item {
padding-top: 16px;
padding-bottom: 16px;
width: 95%;
height: 183px;
background: url('/assets/images/homePage/fire/rightbgbig.png') no-repeat;
background-size: 100% 100%;
display: flex;
justify-content: center;
align-items: center;
color: #ECF7FF;
position: relative;
margin-bottom: 20px;
.item_left {
width: 50px;
height: 50px;
background: url('/assets/images/homePage/fire/iconhome.png') no-repeat;
background-size: 100% 100%;
}
font-family: PingFangSC-Regular;
font-weight: 400;
font-size: 14px;
color: #FFFFFF;
.item_right {
width: calc(100% - 100px);
display: flex;
flex-wrap: wrap;
._img {
width: 230px;
height: 95%;
background: url('/assets/images/homePage/bigscreen/accessdata.png');
background-repeat: no-repeat;
background-size: 100% 100%;
}
.data_unit {
position: absolute;
top: 27%;
right: 21%;
.item_right_left {
width: 100px;
font-size: 14px;
color: #ECF7FF;
font-family: '';
}
.data_number {
line-height: 25px;
font-family: D-DINExp-Bold;
font-weight: 700;
font-size: 20px;
color: #3E86FF;
letter-spacing: 0;
}
}
.item_right_right {
width: 180px;
font-size: 14px;
color: #9CF2FF;
letter-spacing: 0;
font-family: '';
text-align: left;
}
.data_today {
position: absolute;
bottom: 13%;
right: 79%;
text-align: right;
.data_number {
line-height: 25px;
font-family: D-DINExp-Bold;
font-weight: 700;
font-size: 20px;
color: #00F6E4;
letter-spacing: 0;
}
}
.data_total {
position: absolute;
bottom: 13%;
left: 79%;
.position_bg {
position: absolute;
left: 0%;
bottom: 0%;
width: 85px;
height: 30px;
background: rgba(31, 237, 255, 0.1);
background-image: linear-gradient(180deg, rgba(0, 0, 0, 0) 80%, rgba(0, 255, 244, 0.98) 100%);
border-radius: 0 20px 0 0;
display: flex;
justify-content: space-evenly;
align-items: center;
.data_number {
line-height: 25px;
font-family: D-DINExp-Bold;
font-weight: 700;
font-size: 20px;
color: #FFDC4E;
letter-spacing: 0;
.position_icon {
width: 12px;
height: 12px;
background: url('/assets/images/homePage/fire/position.png') no-repeat;
background-size: 100% 100%;
}
}
}
}
.data_top5_unit {
position: absolute;
right: 4%;
top: 18%;
font-family: PingFangSC-Regular;
font-weight: 400;
font-size: 12px;
color: #C8F0FF;
.fire_item_right_container::-webkit-scrollbar {
width: 0 !important
}
.hotspot_data_container {
display: flex;
height: @card-height;
.item_left-container::-webkit-scrollbar {
width: 0 !important
}
//警情数据分析
.alarm_data_analysis {
width: 100%;
justify-content: center;
height: 100%;
display: flex;
justify-content: space-around;
align-items: center;
font-family: PingFangSC-Regular;
font-weight: 400;
font-size: 14px;
color: #FFFFFF;
._item_left {
width: 209px;
height: 100%;
._img {
width: 203px;
height: 80%;
background: url('/assets/images/homePage/bigscreen/hotspotdatabg.png');
background-repeat: no-repeat;
background-size: 100% 100%;
}
._img {
width: 209px;
height: 209px;
background: url('/assets/images/homepage/fire/realalarmbg.png') no-repeat;
background-size: 100% 100%;
display: flex;
align-items: center;
justify-content: center;
font-family: D-DINExp-Italic;
font-weight: Italic;
font-size: 48px;
color: #FFFFFF;
letter-spacing: 0;
}
.hotspot_title {
padding: 2px;
padding-left: 6px;
padding-right: 6px;
background: rgba(77, 241, 227, 0.08);
border: 1px solid rgba(77, 241, 227, 0.1);
box-shadow: inset 0 0 20px 0 rgba(28, 185, 196, 0.23);
._text {
font-family: YouSheBiaoTiHei;
font-size: 20px;
color: #FFFFFF;
letter-spacing: 0;
margin-top: -30px;
text-align: center;
}
}
._item_right {
width: 200px;
.hotspot_data_number {
font-family: D-DINExp-Bold;
font-weight: 700;
font-size: 18px;
color: #FFFFFF;
}
._iconphone {
width: 50.96px;
height: 45px;
background: url('/assets/images/homepage/fire/iconphone.png') no-repeat;
background-size: 100% 100%;
}
._top1 {
position: absolute;
top: 25%;
right: 63%;
text-align: right;
}
._iconreal {
width: 50.96px;
height: 45px;
background: url('/assets/images/homepage/fire/iconreal.png') no-repeat;
background-size: 100% 100%;
}
._top2 {
position: absolute;
bottom: 22%;
right: 67%;
text-align: center;
}
._iconmistake {
width: 50.96px;
height: 45px;
background: url('/assets/images/homepage/fire/iconmistake.png') no-repeat;
background-size: 100% 100%;
}
._top3 {
position: absolute;
bottom: 34%;
left: 73%;
}
}
.right_item_right {
width: 155px;
margin-left: 16px;
//数据共享
.data_share {
display: flex;
height: @card-height;
.alarm_title {
font-size: 14px;
color: #ECF7FF;
letter-spacing: 0;
}
._left_content {
width: 50%;
height: 90%;
padding-left: 30px;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.alarm_number {
font-family: D-DINExp-Italic;
font-weight: Italic;
font-size: 28px;
color: #24DCF7;
letter-spacing: 0;
margin-right: 50px;
}
._right_content {
._today_text {
font-family: YouSheBiaoTiHei;
font-size: 24px;
color: #FFFFFF;
letter-spacing: 0.5px;
position: absolute;
right: 6%;
top: 21%;
.alarm_unit {
font-size: 14px;
color: #5999C8;
letter-spacing: 0;
}
}
padding-top: 23px;
}
}
//实时数据
.realtime_data {
height: 100%;
padding: 12px 30px 12px 30px;
.realtime_item {
display: flex;
flex-direction: column;
width: 47%;
height: 95%;
background: url(/assets/images/homePage/bigscreen/todaybg.png);
background-repeat: no-repeat;
background: url('/assets/images/homePage/fire/realtimebg.png') no-repeat;
background-size: 100% 100%;
justify-content: space-evenly;
height: 45%;
width: 100%;
margin-bottom: 5%;
align-items: center;
// padding: 16px 22px 16px 22px;
._icon1 {
width: 80px;
height: 80px;
background: url('/assets/images/homePage/fire/icon1.png') no-repeat;
background-size: 100% 100%;
}
._icon2 {
width: 80px;
height: 80px;
background: url('/assets/images/homePage/fire/icon2.png') no-repeat;
background-size: 100% 100%;
}
._text {
width: calc(100% - 100px);
display: flex;
flex-direction: column;
._row1 {
color: #C3E6FF;
width: 100%;
height: 22px;
background: rgba(0, 88, 204, 0.5);
justify-content: space-around;
display: flex;
}
._row2 {
font-size: 14px;
color: #00FF87;
justify-content: space-around;
display: flex;
height: 42px;
._number {
font-family: D-DIN-Italic;
font-weight: Italic;
font-size: 28px;
color: #ECF7FF;
margin-right: 6px;
}
}
}
}
}
._item_content {
display: flex;
.realtime_data::-webkit-scrollbar {
width: 0 !important
}
.water_video_container {
width: 100%;
height: 100%;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
._item {
width: 46%;
height: 32%;
background: url('/assets/images/homePage/fire/videobg.png') no-repeat;
background-size: 100% 100%;
position: relative;
.video_bottom {
position: absolute;
bottom: 9%;
left: 4%;
width: 91%;
height: 20px;
background: rgba(0, 0, 0, 0.4);
font-size: 12px;
color: #C3E6FF;
display: flex;
justify-content: space-between;
._item_icon1 {
width: 52px;
height: 52px;
background: url('/assets/images/homePage/bigscreen/1.png');
background-repeat: no-repeat;
background-size: 100% 100%;
}
}
}
.today_real_alarm {
width: 100%;
height: 100%;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
._item_icon2 {
width: 52px;
height: 52px;
background: url('/assets/images/homePage/bigscreen/2.png');
background-repeat: no-repeat;
.today_item {
width: 91%;
height: 41px;
background: url('/assets/images/homePage/fire/alarmbg.png') no-repeat;
background-size: 100% 100%;
display: flex;
justify-content: space-around;
align-items: center;
font-size: 14px;
color: #ECF7FF;
overflow: auto;
.column1_alarm1 {
width: 83px;
height: 24px;
background: url('/assets/images/homePage/fire/alarm1.png') no-repeat;
background-size: 100% 100%;
padding-left: 27px;
}
._item_icon3 {
width: 52px;
height: 52px;
background: url('/assets/images/homePage/bigscreen/3.png');
background-repeat: no-repeat;
.column1_alarm2 {
width: 83px;
height: 24px;
background: url('/assets/images/homePage/fire/alarm2.png') no-repeat;
background-size: 100% 100%;
padding-left: 27px;
}
._item_text {
color: #C8F0FF;
padding-left: 6px;
.text_blue {
width: 100px;
display: flex;
.number_container {
._number {
font-family: D-DINExp-Bold;
font-weight: 700;
font-size: 22px;
color: #FFFFFF;
}
._icon1 {
width: 8px;
height: 8px;
background: url('/assets/images/homePage/fire/triangle1.png') no-repeat;
background-size: 100% 100%;
}
display: flex;
align-items: center;
justify-content: space-evenly;
width: 112px;
height: 28px;
background-image: linear-gradient(227deg, #3196AB 0%, #2091cd00 100%);
._icon2 {
width: 8px;
height: 8px;
background: url('/assets/images/homePage/fire/triangle2.png') no-repeat;
background-size: 100% 100%;
}
}
}
}
//大屏中间上部分
.center_top_data {
._center_card1 {
width: 353px;
height: 74px;
font-family: YouSheBiaoTiHei;
font-size: 22px;
color: #FFFFFF;
letter-spacing: 0.46px;
text-align: center;
position: absolute;
top: -3%;
left: 32%;
background: url(/assets/images/homePage/bigscreen/centerdatabg1.png);
//小区人流量排名
.water_traffic_ranking {
height: 100%;
padding: 14px 8px 14px 8px;
._rank_title {
height: 34.64px;
background: url('/assets/images/homePage/communtity/ranktitle.png');
background-repeat: no-repeat;
background-size: 100% 100%;
color: #FFFFFF;
font-size: 16px;
display: flex;
align-items: center;
justify-content: center;
justify-content: space-around;
._rank_item1 {
text-align: center;
width: 25%;
}
._rank_item2 {
text-align: center;
width: 20%;
}
._rank_item3 {
text-align: right;
width: 25%;
}
._rank_item4 {
text-align: center;
width: 35%;
}
}
._center_card2 {
width: 146px;
height: 35px;
font-family: YouSheBiaoTiHei;
font-size: 16px;
color: #35D0FF;
letter-spacing: 0.46px;
text-align: center;
position: absolute;
top: 26%;
left: 42%;
background: url(/assets/images/homePage/bigscreen/centerdatabg2.png);
.rank_content_overflow {
height: calc(100% - 35px);
overflow: auto;
}
._rank_content {
margin-top: 12px;
height: 34.64px;
background: url('/assets/images/homePage/communtity/rankcontent.png');
background-repeat: no-repeat;
background-size: 100% 100%;
color: #E2F8FF;
font-size: 14px;
display: flex;
align-items: center;
justify-content: center;
justify-content: space-around;
._rank_item1 {
text-align: center;
width: 15%;
}
._rank_item2 {
// text-align: center;
width: 40%;
}
._rank_item3 {
// text-align: center;
width: 20%;
._upicon {
background: url('/assets/images/homePage/water/up.png');
background-repeat: no-repeat;
background-size: 100% 100%;
width: 13px;
height: 13px;
display: inline-block;
margin-left: 3px;
}
._downicon {
background: url('/assets/images/homePage/water/down.png');
background-repeat: no-repeat;
background-size: 100% 100%;
width: 13px;
height: 13px;
display: inline-block;
margin-left: 3px;
}
}
._rank_item4 {
// text-align: center;
width: 20%;
padding-top: 8px;
.normalbg {
background: url('/assets/images/homePage/water/normal.png');
background-repeat: no-repeat;
background-size: 100% 100%;
width: 70px;
height: 21.64px;
padding-left: 30px;
line-height: 9px;
color: #24DCF7;
}
.warningbg {
background: url('/assets/images/homePage/water/warning.png');
background-repeat: no-repeat;
background-size: 100% 100%;
width: 70px;
height: 21.64px;
color: #FAC46E;
padding-left: 30px;
line-height: 9px;
}
}
}
._center_card3 {
width: 146px;
height: 35px;
font-family: YouSheBiaoTiHei;
font-size: 16px;
color: #35D0FF;
letter-spacing: 0.46px;
text-align: center;
position: absolute;
top: 52%;
left: 42%;
background: url(/assets/images/homePage/bigscreen/centerdatabg2.png);
.topbg1 {
width: 28px;
height: 10px;
background: url('/assets/images/homePage/communtity/top1.png');
background-repeat: no-repeat;
background-size: 100% 100%;
display: flex;
align-items: center;
justify-content: center;
display: inline-block;
}
._center_card4 {
width: 146px;
height: 35px;
font-family: YouSheBiaoTiHei;
font-size: 16px;
color: #35D0FF;
letter-spacing: 0.46px;
text-align: center;
position: absolute;
top: 74%;
left: 42%;
background: url(/assets/images/homePage/bigscreen/centerdatabg2.png);
.topbg2 {
width: 28px;
height: 10px;
background: url('/assets/images/homePage/communtity/top2.png');
background-repeat: no-repeat;
background-size: 100% 100%;
display: flex;
align-items: center;
justify-content: center;
display: inline-block;
}
.topbg3 {
width: 28px;
height: 10px;
background: url('/assets/images/homePage/communtity/top3.png');
background-repeat: no-repeat;
background-size: 100% 100%;
display: inline-block;
}
}
//建设数据
.type-chart-wrapper {
width: 220px;
height: 220px;
background-image: url("/assets/images/ring_chart_bg.png");
background-size: 100% 100%;
}
.type-leagle-wrapper {
padding-left: 30px;
padding-right: 36px;
width: 100%;
height: 100px;
flex-wrap: wrap;
align-content: space-between;
.type-leagle-item {
width: 157px;
height: 24px;
background-image: linear-gradient(90deg, #19222F 0%, rgba(30, 41, 56, 0) 100%);
padding: 0 30px 0 8px;
justify-content: space-between;
.type-leagle-dot {
width: 8px;
height: 8px;
margin-right: 6px;
}
.type-leagle-label {
color: rgba(212, 237, 253, 0.6);
font-size: 14px;
font-weight: 400;
letter-spacing: 0;
}
.type-leagle-value {
color: rgba(216, 240, 255, 1);
font-size: 16px;
font-weight: 400;
letter-spacing: 0;
}
}
}
.gis-search-select {
.ant-select-selector {
background-color: rgba(36, 220, 247, 0.3) !important;
border: rgba(36, 220, 247, 1) 1px solid !important;
height: 24px !important;
}
.ant-select-selection-item {
color: rgba(36, 220, 247, 1) !important;
line-height: 24px !important;
}
.ant-select-arrow {
color: inherit;
color: rgba(36, 220, 247, 1) !important;
}
}

955
super-screen/client/src/sections/water-prevention/containers/data.js

@ -0,0 +1,955 @@
'use strict';
export const data = {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"count": 1
},
"geometry": {
"type": "Point",
"coordinates": [
115.882756, 28.515483
]
}
},
{
"type": "Feature",
"properties": {
"count": 1
},
"geometry": {
"type": "Point",
"coordinates": [
115.876061, 28.534185
]
}
},
{
"type": "Feature",
"properties": {
"count": 1
},
"geometry": {
"type": "Point",
"coordinates": [
115.897176, 28.545646
]
}
},
{
"type": "Feature",
"properties": {
"count": 1
},
"geometry": {
"type": "Point",
"coordinates": [
115.940155, 28.559386
]
}
},
{
"type": "Feature",
"properties": {
"count": 1
},
"geometry": {
"type": "Point",
"coordinates": [
115.874271, 28.412145
]
}
},
{
"type": "Feature",
"properties": {
"count": 1
},
"geometry": {
"type": "Point",
"coordinates": [
115.866911, 28.416826
]
}
},
{
"type": "Feature",
"properties": {
"count": 1
},
"geometry": {
"type": "Point",
"coordinates": [
115.835812, 28.597065
]
}
},
{
"type": "Feature",
"properties": {
"count": 1
},
"geometry": {
"type": "Point",
"coordinates": [
115.853493, 28.596462
]
}
},
{
"type": "Feature",
"properties": {
"count": 1
},
"geometry": {
"type": "Point",
"coordinates": [
115.965947, 28.445532
]
}
},
{
"type": "Feature",
"properties": {
"count": 1
},
"geometry": {
"type": "Point",
"coordinates": [
115.908495, 28.521435
]
}
},
{
"type": "Feature",
"properties": {
"count": 1
},
"geometry": {
"type": "Point",
"coordinates": [
115.861763, 28.530276
]
}
},
{
"type": "Feature",
"properties": {
"count": 1
},
"geometry": {
"type": "Point",
"coordinates": [
115.871634, 28.534348
]
}
},
{
"type": "Feature",
"properties": {
"count": 1
},
"geometry": {
"type": "Point",
"coordinates": [
115.90219, 28.55938
]
}
},
{
"type": "Feature",
"properties": {
"count": 1
},
"geometry": {
"type": "Point",
"coordinates": [
116.168147, 28.649128
]
}
},
{
"type": "Feature",
"properties": {
"count": 1
},
"geometry": {
"type": "Point",
"coordinates": [
116.16584, 28.648912
]
}
},
{
"type": "Feature",
"properties": {
"count": 1
},
"geometry": {
"type": "Point",
"coordinates": [
116.169467, 28.646074
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.92344, 28.561176
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.870911, 28.536749
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.876233, 28.512466
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.920693, 28.499945
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.958459, 28.511712
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.955369, 28.508393
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.954296, 28.560894
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.943288, 28.560309
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.868006, 28.41507
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.861397, 28.411485
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.840533, 28.595369
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.852592, 28.597178
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.970474, 28.448221
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.9688, 28.447702
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.865064, 28.557025
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.879959, 28.526732
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.881762, 28.562395
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.923647, 28.558626
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.856614, 28.595408
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.9484, 28.504994
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.941405, 28.502354
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.954022, 28.511066
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.953078, 28.520191
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
115.929474, 28.506013
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
116.070607, 28.798914
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
116.068397, 28.798176
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
116.143577, 28.657257
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
116.136303, 28.654546
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
116.110161, 28.654753
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
116.151446, 28.650158
]
}
},
{
"type": "Feature",
"properties": {
"count": 3
},
"geometry": {
"type": "Point",
"coordinates": [
115.939748, 28.551979
]
}
},
{
"type": "Feature",
"properties": {
"count": 3
},
"geometry": {
"type": "Point",
"coordinates": [
115.949189, 28.572182
]
}
},
{
"type": "Feature",
"properties": {
"count": 3
},
"geometry": {
"type": "Point",
"coordinates": [
115.92344, 28.561176
]
}
},
{
"type": "Feature",
"properties": {
"count": 3
},
"geometry": {
"type": "Point",
"coordinates": [
115.930306, 28.541122
]
}
},
{
"type": "Feature",
"properties": {
"count": 3
},
"geometry": {
"type": "Point",
"coordinates": [
115.949146, 28.559932
]
}
},
{
"type": "Feature",
"properties": {
"count": 3
},
"geometry": {
"type": "Point",
"coordinates": [
115.940155, 28.559386
]
}
},
{
"type": "Feature",
"properties": {
"count": 3
},
"geometry": {
"type": "Point",
"coordinates": [
115.864508, 28.41843
]
}
},
{
"type": "Feature",
"properties": {
"count": 3
},
"geometry": {
"type": "Point",
"coordinates": [
115.840533, 28.595369
]
}
},
{
"type": "Feature",
"properties": {
"count": 3
},
"geometry": {
"type": "Point",
"coordinates": [
115.860016, 28.61029
]
}
},
{
"type": "Feature",
"properties": {
"count": 3
},
"geometry": {
"type": "Point",
"coordinates": [
115.971493, 28.449494
]
}
},
{
"type": "Feature",
"properties": {
"count": 3
},
"geometry": {
"type": "Point",
"coordinates": [
115.881887, 28.559889
]
}
},
{
"type": "Feature",
"properties": {
"count": 3
},
"geometry": {
"type": "Point",
"coordinates": [
115.874334, 28.541946
]
}
},
{
"type": "Feature",
"properties": {
"count": 3
},
"geometry": {
"type": "Point",
"coordinates": [
115.864549, 28.553104
]
}
},
{
"type": "Feature",
"properties": {
"count": 3
},
"geometry": {
"type": "Point",
"coordinates": [
115.908495, 28.521435
]
}
},
{
"type": "Feature",
"properties": {
"count": 4
},
"geometry": {
"type": "Point",
"coordinates": [
115.950219, 28.55605
]
}
},
{
"type": "Feature",
"properties": {
"count": 4
},
"geometry": {
"type": "Point",
"coordinates": [
115.836713, 28.606522
]
}
},
{
"type": "Feature",
"properties": {
"count": 4
},
"geometry": {
"type": "Point",
"coordinates": [
115.899053, 28.538176
]
}
},
{
"type": "Feature",
"properties": {
"count": 4
},
"geometry": {
"type": "Point",
"coordinates": [
115.89871, 28.556874
]
}
},
{
"type": "Feature",
"properties": {
"count": 4
},
"geometry": {
"type": "Point",
"coordinates": [
115.884337, 28.522433
]
}
},
{
"type": "Feature",
"properties": {
"count": 4
},
"geometry": {
"type": "Point",
"coordinates": [
115.868287, 28.524017
]
}
},
{
"type": "Feature",
"properties": {
"count": 4
},
"geometry": {
"type": "Point",
"coordinates": [
115.868287, 28.524017
]
}
},
{
"type": "Feature",
"properties": {
"count": 5
},
"geometry": {
"type": "Point",
"coordinates": [
115.945584, 28.573991
]
}
},
{
"type": "Feature",
"properties": {
"count": 5
},
"geometry": {
"type": "Point",
"coordinates": [
115.896661, 28.520309
]
}
},
{
"type": "Feature",
"properties": {
"count": 5
},
"geometry": {
"type": "Point",
"coordinates": [
115.844304, 28.577308
]
}
},
{
"type": "Feature",
"properties": {
"count": 5
},
"geometry": {
"type": "Point",
"coordinates": [
115.927045, 28.540217
]
}
},
{
"type": "Feature",
"properties": {
"count": 5
},
"geometry": {
"type": "Point",
"coordinates": [
115.901982, 28.539614
]
}
},
{
"type": "Feature",
"properties": {
"count": 5
},
"geometry": {
"type": "Point",
"coordinates": [
115.949575, 28.558726
]
}
},
{
"type": "Feature",
"properties": {
"count": 5
},
"geometry": {
"type": "Point",
"coordinates": [
115.845039, 28.601888
]
}
},
{
"type": "Feature",
"properties": {
"count": 5
},
"geometry": {
"type": "Point",
"coordinates": [
115.851047, 28.605317
]
}
},
{
"type": "Feature",
"properties": {
"count": 5
},
"geometry": {
"type": "Point",
"coordinates": [
115.867527, 28.595181
]
}
},
{
"type": "Feature",
"properties": {
"count": 5
},
"geometry": {
"type": "Point",
"coordinates": [
115.857828, 28.594503
]
}
},
{
"type": "Feature",
"properties": {
"count": 2
},
"geometry": {
"type": "Point",
"coordinates": [
116.072222, 28.799295
]
}
},
{
"type": "Feature",
"properties": {
"count": 5
},
"geometry": {
"type": "Point",
"coordinates": [
115.857007, 28.607604
]
}
},
]
}

530
super-screen/client/src/sections/water-prevention/containers/gis.js

@ -0,0 +1,530 @@
import React, { useEffect, useState } from 'react';
import { connect } from 'react-redux';
import { render } from 'react-dom';
import { data as heatmapData } from './data'
import './gis.less'
const MAPDOMID = 'fs-amap-container1';
let map = null;
let heatmap = null;
let loca = null;
let interval = null;
const MARKER_IMG_NAME = {
markergreen: '回迁房',
markerblue: '城中村',
markeryellow: '廉租房',
}
function Map(props) {
const [delay, setDelay] = useState(true)
const [tab, setTab] = useState('overview')
// 地图初始化
const loadMap = () => {
// 图片图层 实现瓦片地图中国地图样式 bounds 第一个点为左下角 第二个点为右上角
const imageLayer = new AMap.ImageLayer({
url: '/assets/images/map1.svg',
bounds: new AMap.Bounds(
[115.800221, 28.225659],
[116.334849, 28.973298],
),
zooms: [3, 14],
});
map = new AMap.Map(MAPDOMID, {
center: [116.054664, 28.538966],
zoomEnable: true,
dragEnable: true,
viewMode: '3D',
pitch: 22.9,
labelzIndex: 130,
zoom: 10.3,
cursor: 'pointer',
mapStyle: 'amap://styles/300b147a96946a4f1c1b1b8eb1f92f76',
layers: [
AMap.createDefaultLayer(),
imageLayer,
],
});
map.on('complete', () => {
setTimeout(() => {
setDelay(false)
}, 1500);
});
map.on('click', (e) => {
if (!e && !e.lnglat) {
return
}
const zoom = map.getZoom();
const pitch = map.getPitch();
const center = map.getCenter();
const Rotation = map.getRotation();
console.log('zoom' + zoom)
console.log('pitch' + pitch)
console.log('center' + center)
console.log('Rotation' + Rotation)
console.log('e.lnglat' + e.lnglat)
})
loca = new Loca.Container({ map: map })
createText()
};
const createText = () => {
var text = new AMap.Text({
text: '南昌县',
anchor: 'center', // 设置文本标记锚点
draggable: false,
// cursor: 'pointer',
zooms: [3, 11],
style: {
'padding': '.75rem 1.25rem',
'margin-bottom': '1rem',
'border-radius': '.25rem',
'background-color': 'rgba(238,77,90,0.001)',
'width': '8rem',
'border-width': 0,
//'box-shadow': '0 2px 6px 0 rgba(255, 255, 255, .1)',
'text-align': 'center',
'font-size': '14px',
'color': '#AFEFFF',
'opacity': 1,
// 'font-weight': 'bold'
},
position: [115.934664, 28.538966]
});
text.setMap(map);
}
const drawBounds = () => {
let district = null;
let polygons = [];
//加载行政区划插件
if (!district) {
//实例化DistrictSearch
let opts = {
subdistrict: 0, //获取边界不需要返回下级行政区
extensions: 'all', //返回行政区边界坐标组等具体信息
level: 'district' //查询行政级别为 市
};
district = new AMap.DistrictSearch(opts);
}
//行政区查询
district.setLevel('district')
district.search('南昌县', function (status, result) {
map.remove(polygons)//清除上次结果
polygons = [];
let bounds = result.districtList[0].boundaries;
if (bounds) {
for (let i = 0, l = bounds.length; i < l; i++) {
//生成行政区划polygon
let polygon = new AMap.Polygon({
strokeWeight: 1,
path: bounds[i],
fillOpacity: 0.4,
fillColor: '#1F2F4D',
strokeColor: '#DE7B35',
fillOpacity: 0.35, //填充透明度
});
polygons.push(polygon);
}
}
map.add(polygons)
// map.setFitView(polygons);//视口自适应
});
}
// 初始化GIS 组件销毁清空定时器
useEffect(() => {
loadMap();
}, []);
const renderMarkers = () => {
map.clearMap();
map.setZoom(10.3)
map.setCenter([116.054664, 28.538966])
map.setPitch(22.9)
map.setRotation(1.7000)
if (loca && heatmap) loca.remove(heatmap)
if (tab == 'person') {
var geo = new Loca.GeoJSONSource({
data: heatmapData
});
heatmap = new Loca.HeatMapLayer({
// loca,
zIndex: 10,
opacity: 1,
visible: true,
zooms: [2, 22],
});
heatmap.setSource(geo, {
radius: 20,
unit: 'px',
height: 10,
// radius: 10,
// unit: 'px',
// height: 10,
gradient: {
0.1: 'rgba(50,48,118,1)',
0.2: 'rgba(127,60,255,1)',
0.4: 'rgba(166,53,219,1)',
0.6: 'rgba(254,64,95,1)',
0.8: 'rgba(255,98,4,1)',
1: 'rgba(236,220,79,1)',
},
value: function (index, feature) {
return feature.properties.count;
},
min: 0,
max: 10, //4.6
heightBezier: [0, .53, .37, .98],
});
loca.add(heatmap);
map.on('click', (e) => {
const feat = heatmap.queryFeature(e.pixel.toArray());
const random = Math.random()
if (feat) {
let infowindow = new AMap.InfoWindow({
isCustom: true, //使用自定义窗体
content: `<div id="map-content" class="personinfowindow">
<div style="height:${330}px;" id="contentidheatmap${random}"></div></div>`,
offset: new AMap.Pixel(133, 260)
});
let position = map.getCenter();
infowindow.open(map, position);
setTimeout(() => {
if (document.getElementById(`contentidheatmap${random}`)) {
render(<div>
<div className='gis_exit' onClick={() => {
map.clearInfoWindow();
}} />
<div className='gis_item'>
<span className='gis_title'>小区名称</span>
<span className='gis_text'>小区名称</span>
</div>
<div className='gis_item'>
<span className='gis_title'>人口</span>
<span className='gis_text'>2344</span>
</div>
<div className='gis_item'>
<span className='gis_title'>新生儿</span>
<span className='gis_text'>23</span>
</div>
<div className='gis_item'>
<span className='gis_title'>老人</span>
<span className='gis_text'>342</span>
</div>
</div>,
document.getElementById(`contentidheatmap${random}`));
}
}, 50)
}
});
} else {
//初始层级 zoom14以下显示聚合点
const data = [
{ lng: 116.117906, lat: 28.678096, type: 'home', name: '廉租房1', kind: 'markergreen' },
{ lng: 116.195238, lat: 28.842114, type: 'home', name: '廉租房2', kind: 'markerblue' },
{ lng: 116.037227, lat: 28.558811, type: 'home', name: '廉租房3', kind: 'markeryellow' },
{ lng: 115.925856, lat: 28.558811, type: 'home', name: '廉租房4', kind: 'markergreen' },
{ lng: 115.989847, lat: 28.484411, type: 'home', name: '廉租房5', kind: 'markergreen' },
{ lng: 116.054664, lat: 28.538966, type: 'device', name: '廉租房1', kind: 'markergreen' },
{ lng: 116.074711, lat: 28.746745, type: 'device', name: '廉租房2', kind: 'markerblue' },
{ lng: 116.111632, lat: 28.56532, type: 'device', name: '廉租房3', kind: 'markeryellow' },
{ lng: 115.978519, lat: 28.56532, type: 'device', name: '廉租房4', kind: 'markergreen' },
{ lng: 115.95792, lat: 28.417395, type: 'device', name: '廉租房5', kind: 'markergreen' },
]
//zoom14以上显示详情
const databig = [
{ lng: 115.924246, lat: 28.554835, type: 'device', name: '廉租房1', kind: 'markergreenbig' },
{ lng: 115.921495, lat: 28.553053, type: 'device', name: '廉租房2', kind: 'markerbluebig' },
{ lng: 115.919115, lat: 28.557256, type: 'device', name: '廉租房3', kind: 'markeryellowbig' },
]
//初始点位显示
data.filter(s => s.type == tab).map((x, index) => {
var marker = new AMap.Marker({
position: new AMap.LngLat(x.lng, x.lat),
// 将一张图片的地址设置为 icon
icon: '/assets/images/homepage/communtity/' + x.kind + '.png',
// 设置了 icon 以后,设置 icon 的偏移量,以 icon 的 [center bottom] 为原点
offset: new AMap.Pixel(-13, -30),
zooms: [3, 14],
});
marker.setTitle(x.name);
map.add(marker);
marker.on('click', () => {
map.setZoom(17.4)
map.setCenter([115.922069, 28.554867])
map.setPitch(47.30)
map.setRotation(1.7000)
})
})
//下钻点位显示
databig.map((x, index) => {
var marker = new AMap.Marker({
position: new AMap.LngLat(x.lng, x.lat),
// 将一张图片的地址设置为 icon
icon: '/assets/images/homepage/communtity/' + x.kind + '.png',
// 设置了 icon 以后,设置 icon 的偏移量,以 icon 的 [center bottom] 为原点
offset: new AMap.Pixel(-13, -30),
zooms: [15, 19],
});
marker.setTitle(x.name);
map.add(marker);
let infowindow = new AMap.InfoWindow({
isCustom: true, //使用自定义窗体
content: `<div id="map-content" class="gis-infowindow">
<div style="height:${360}px;" id="contentid${x.name}"></div></div>`,
offset: new AMap.Pixel(233, 260)
});
marker.on('click', () => {
let position = marker.getPosition ? marker.getPosition() : marker.getCenter();
infowindow.open(map, position);
map.setCenter(position)
setTimeout(() => {
if (document.getElementById(`contentid${x.name}`)) {
render(<div>
<div className='gis_exit' onClick={() => {
map.setCenter([115.922069, 28.554867])
map.clearInfoWindow();
}} />
<div className='gis_item'>
<span className='gis_title'>小区名称</span>
<span className='gis_text'>{x.name}</span>
</div>
<div className='gis_item'>
<span className='gis_title'>人流量</span>
<span className='gis_text'>123</span>
<span className='gis_title' style={{ marginLeft: 20 }}>房龄</span>
<span className='gis_text'>9</span>
</div>
<div className='gis_item'>
<span className='gis_title'>租赁中房屋</span>
<span className='gis_text'>165</span>
</div>
<div className='gis_item'>
<span className='gis_title'>网格员</span>
<span className='gis_text'>张三</span>
</div>
<div className='gis_item'>
<span className='gis_title'>手机号码</span>
<span className='gis_text'>15765845845</span>
</div>
</div>,
document.getElementById(`contentid${x.name}`));
}
}, 50)
})
})
if (tab == 'device') {
const data = [
{ lng: 115.921895, lat: 28.556351, type: 'device', name: '廉租房1', kind: 'devicemarker' },
{ lng: 115.920839, lat: 28.555323, type: 'device', name: '廉租房2', kind: 'devicemarker' },
{ lng: 115.918329, lat: 28.55445, type: 'device', name: '廉租房3', kind: 'devicemarker' },
{ lng: 115.919309, lat: 28.553166, type: 'device', name: '廉租房1', kind: 'devicemarker' },
{ lng: 115.921585, lat: 28.553925, type: 'device', name: '廉租房2', kind: 'devicemarker' },
{ lng: 115.92565, lat: 28.556996, type: 'device', name: '廉租房3', kind: 'devicemarker' },
{ lng: 115.922671, lat: 28.558769, type: 'device', name: '廉租房1', kind: 'devicemarker' },
]
data.filter(s => s.type == tab).map((x, index) => {
var marker = new AMap.Marker({
position: new AMap.LngLat(x.lng, x.lat),
// 将一张图片的地址设置为 icon
icon: '/assets/images/homepage/communtity/' + x.kind + '.png',
// 设置了 icon 以后,设置 icon 的偏移量,以 icon 的 [center bottom] 为原点
offset: new AMap.Pixel(-13, -30),
zooms: [15, 19],
});
marker.setTitle(x.name);
map.add(marker);
})
}
}
}
const renderAlarms = () => {
if (tab == 'person') {
return;
}
const alarms = [
{ lng: 115.92365, lat: 28.557404, type: 'device', name: '廉租房1', kind: 'markeralarm' },
]
alarms.map((x, index) => {
var marker = new AMap.Marker({
position: new AMap.LngLat(x.lng, x.lat),
// 将一张图片的地址设置为 icon
icon: '/assets/images/homepage/communtity/' + x.kind + '.png',
// 设置了 icon 以后,设置 icon 的偏移量,以 icon 的 [center bottom] 为原点
offset: new AMap.Pixel(-13, -30),
zooms: [15, 19],
});
marker.setTitle(x.name);
map.add(marker);
let infowindow = new AMap.InfoWindow({
isCustom: true, //使用自定义窗体
content: `<div id="map-content" class="gis-infowindow gis-infowindow-alarm">
<div style="height:${360}px;" id="alarmcontentid${x.name}"></div></div>`,
offset: new AMap.Pixel(233, 260)
});
let alarmOk = new AMap.InfoWindow({
isCustom: true, //使用自定义窗体
// content: `<div id="map-content" class="gis-infowindow gis-infowindow-alarm">
// <div style="height:${360}px;" id="contentid${x.name}"></div></div>`,
offset: new AMap.Pixel(233, 440)
});
marker.on('click', () => {
let position = marker.getPosition ? marker.getPosition() : marker.getCenter();
infowindow.open(map, position);
map.setCenter(position)
setTimeout(() => {
if (document.getElementById(`alarmcontentid${x.name}`)) {
render(<div>
<div className='gis_exit' onClick={() => {
map.setCenter([115.922069, 28.554867])
map.clearInfoWindow();
}} />
<div className='gis_item'>
<span className='gis_title'>小区名称</span>
<span className='gis_text'>{x.name}</span>
</div>
<div className='gis_item'>
<span className='gis_title'>人流量</span>
<span className='gis_text'>123</span>
<span className='gis_title' style={{ marginLeft: 20 }}>房龄</span>
<span className='gis_text'>9</span>
</div>
<div className='gis_item'>
<span className='gis_title'>租赁中房屋</span>
<span className='gis_text'>165</span>
</div>
<div className='gis_item'>
<span className='gis_title'>网格员</span>
<span className='gis_text'>张三</span>
</div>
<div className='gis_item'>
<span className='gis_title'>手机号码</span>
<span className='gis_text'>15765845845</span>
</div>
<div><span className='confirm_text'>人流量较大确认是否安装消防设施</span></div>
<div className='alarm_confirm'>
<div className='alarm_cancel'></div>
<div className='alarm_ok'></div>
</div>
</div>,
document.getElementById(`alarmcontentid${x.name}`));
}
}, 50)
})
})
}
const renderLeftTop = () => {
return tab == 'person' ?
<div className='home_left'>
<div className='hometotalbg'>区域总人数</div>
<div className='home_total_number'>455 <span style={{ fontSize: 12 }}></span></div>
<div className='hqtotal'>新生儿总数</div>
<div className='home_total_number'>45<span style={{ fontSize: 12 }}></span></div>
<div className='cztotal'>老人总数</div>
<div className='home_total_number'>45<span style={{ fontSize: 12 }}></span></div>
</div> :
<div className='home_left'>
<div className='hometotalbg'>租赁房屋总数</div>
<div className='home_total_number'>4556</div>
<div className='hqtotal'>回迁房总数</div>
<div className='home_total_number'>4556</div>
<div className='cztotal'>城中村总数</div>
<div className='home_total_number'>4556</div>
<div className='lztotal'>廉租房</div>
<div className='home_total_number'>4556</div>
</div>
}
const renderRightBottom = () => {
return <div className='home_right'>
<div className='_lz'>
<div className='_icon' />
<span>廉租房</span>
</div>
<div className='_hq'>
<div className='_icon' />
<span>回迁房</span>
</div>
<div className='_cz'>
<div className='_icon' />
<span>城中村</span>
</div>
</div>
}
return (
<>
{/* 延缓加载遮罩 */}
{delay && <div id='delaydiv' style={{
width: '100%', height: '100%', left: 0, top: 0, zIndex: 1000, background: '#000000', position: 'absolute',
display: 'flex', alignItems: 'center', justifyContent: 'center'
}}>
</div>}
{/* 地图容器 */}
<div className="gis" id={MAPDOMID} />
{map && renderMarkers()}
{map && renderAlarms()}
{/* 底部按钮 */}
{!delay && [
{ name: '房屋分布', tab: 'overview' },
// { name: '人口分布', tab: 'person' },
{ name: '基础设施', tab: 'emergency' }
].map((s, index) => {
return <div className={'water-gis-button' + (index + 1)}
onClick={() => {
setTab(s.tab)
props.changeTab(s.tab)
}}
>
<div className={`button_img ${tab == s.tab ? 'button_img_select' : ''}`} />
<div>{s.name}</div>
</div>
})
}
{/* 左上角图例 */}
{renderLeftTop()}
{renderRightBottom()}
{/* 四周遮罩 */}
<div className='gis-left'></div>
<div className='gis-right'></div>
<div className='gis-top'></div>
<div className='gis-bottom'></div>
</>
);
}
export default connect()(Map);

434
super-screen/client/src/sections/water-prevention/containers/gis.less

@ -0,0 +1,434 @@
.gis-left {
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 20%;
background: linear-gradient(270deg, rgba(0, 19, 46, 0) 0%, #000000 100%);
}
.gis-right {
position: absolute;
right: 0;
top: 0;
height: 100%;
width: 20%;
background: linear-gradient(90deg, rgba(0, 19, 46, 0) 0%, #000000 100%);
}
.gis-top {
position: absolute;
left: 0;
top: 0;
height: 5%;
width: 100%;
background: linear-gradient(0deg, rgba(0, 19, 46, 0) 0%, #000000 100%);
}
.gis-bottom {
position: absolute;
left: 0;
bottom: 0;
height: 10%;
width: 100%;
background: linear-gradient(180deg, rgba(0, 19, 46, 0) 0%, #000000 100%);
}
.water-gis-button1 {
position: absolute;
left: 39%;
bottom: -5%;
font-family: YouSheBiaoTiHei;
font-size: 12px;
color: #ECF7FF;
letter-spacing: 0;
width: 76.95px;
text-align: center;
cursor: pointer;
z-index: 999;
.button_img {
background: url('/assets/images/homePage/communtity/home.png');
background-repeat: no-repeat;
background-size: 100% 100%;
width: 76.95px;
height: 64px;
}
.button_img_select {
background: url('/assets/images/homePage/communtity/homeselect.png');
}
}
.water-gis-button2 {
position: absolute;
left: 57%;
bottom: -5%;
font-family: YouSheBiaoTiHei;
font-size: 12px;
color: #ECF7FF;
letter-spacing: 0;
width: 76.95px;
text-align: center;
cursor: pointer;
z-index: 999;
.button_img {
background: url('/assets/images/homePage/communtity/devicebutton.png');
background-repeat: no-repeat;
background-size: 100% 100%;
width: 76.95px;
height: 64px;
}
.button_img_select {
background: url('/assets/images/homePage/communtity/devicebuttonselect.png');
}
}
.gis-infowindow {
width: 302px;
height: 420px;
background: url('/assets/images/homepage/communtity/infowindowbg.png') no-repeat;
background-size: 100% 100%;
opacity: 0.8;
padding-left: 69px;
padding-left: 22px;
padding-top: 157px;
color: #fff;
.gis_exit {
cursor: pointer;
position: absolute;
right: 9px;
top: 42px;
width: 30.75px;
height: 23px;
background: url('/assets/images/homepage/communtity/exit.png') no-repeat;
background-size: 100% 100%;
}
.gis_item {
height: 35px;
background-image: linear-gradient(180deg, #0555a791 0%, #022a6f91 100%);
width: 93%;
display: flex;
align-items: center;
padding-left: 20px;
.gis_title {
font-family: SourceHanSansCN-Regular;
font-weight: 400;
font-size: 14px;
color: #C3E6FF;
letter-spacing: 0;
margin-right: 12px;
}
.gis_text {
font-family: SourceHanSansCN-Regular;
font-weight: 400;
font-size: 14px;
color: #FFFFFF;
letter-spacing: 0;
line-height: 21px;
}
}
}
.personinfowindow {
width: 302px;
height: 420px;
background: url('/assets/images/homepage/communtity/personinfowindow.png') no-repeat;
background-size: 100% 100%;
opacity: 0.8;
padding-left: 69px;
padding-left: 22px;
padding-top: 157px;
color: #fff;
.gis_exit {
cursor: pointer;
position: absolute;
right: 9px;
top: 42px;
width: 30.75px;
height: 23px;
background: url('/assets/images/homepage/communtity/exit.png') no-repeat;
background-size: 100% 100%;
}
.gis_item {
height: 35px;
background-image: linear-gradient(180deg, #0555a791 0%, #022a6f91 100%);
width: 93%;
display: flex;
align-items: center;
padding-left: 20px;
.gis_title {
font-family: SourceHanSansCN-Regular;
font-weight: 400;
font-size: 14px;
color: #C3E6FF;
letter-spacing: 0;
margin-right: 12px;
}
.gis_text {
font-family: SourceHanSansCN-Regular;
font-weight: 400;
font-size: 14px;
color: #FFFFFF;
letter-spacing: 0;
line-height: 21px;
}
}
}
.gis-infowindow-alarm {
background: url('/assets/images/homepage/communtity/alarminfowindow.png') no-repeat;
height: 432px;
width: 311px;
padding-top: 107px;
.gis_exit {
cursor: pointer;
position: absolute;
right: 2px;
top: 15px;
width: 30.75px;
height: 23px;
background: url('/assets/images/homepage/communtity/exitalarm.png') no-repeat;
background-size: 100% 100%;
}
.gis_item {
margin-bottom: 10px;
height: 35px;
background-image: linear-gradient(180deg, #a7050591 0%, #48010191 100%);
;
}
.confirm_text {
font-family: SourceHanSansCN-Medium;
font-weight: 500;
font-size: 16px;
color: #FFFFFF;
letter-spacing: 0;
line-height: 21px;
}
.alarm_confirm {
width: 100%;
display: flex;
justify-content: space-around;
margin-top: 15px;
.alarm_cancel {
width: 81px;
height: 30px;
background-image: linear-gradient(180deg, #C50000 1%, #b600006e 52%, #C50000 100%);
box-shadow: inset 0 1px 14px 0 #ff2b2b59;
border-radius: 4px;
font-family: SourceHanSansCN-Medium;
font-weight: 500;
font-size: 14px;
color: #FFE8E8;
text-align: center;
line-height: 30px;
background: url('/assets/images/homepage/communtity/alarmcancel.png') no-repeat;
background-size: 100% 100%;
cursor: pointer;
}
.alarm_ok {
text-align: center;
line-height: 30px;
width: 81px;
height: 30px;
background-image: linear-gradient(180deg, #C50000 1%, #b600006e 52%, #C50000 100%);
box-shadow: inset 0 1px 14px 0 #ff2b2b59;
border-radius: 4px;
font-family: SourceHanSansCN-Medium;
font-weight: 500;
font-size: 14px;
color: #FFFFFF;
cursor: pointer;
}
}
.alarm_button {
width: 103px;
height: 30px;
margin-top: 24px;
display: flex;
align-items: center;
justify-content: center;
font-family: SourceHanSansCN-Medium;
font-weight: 500;
font-size: 14px;
color: #FFFFFF;
letter-spacing: 0;
background: url('/assets/images/homepage/communtity/alarmbutton.png') no-repeat;
background-size: 100% 100%;
margin-left: 89px;
cursor: pointer;
.alarm_icon {
width: 18px;
height: 18px;
background: url('/assets/images/homepage/communtity/alarmicon.png') no-repeat;
background-size: 100% 100%;
}
}
}
.home_left {
position: absolute;
left: 26%;
top: 3%;
z-index: 999;
font-family: YouSheBiaoTiHei;
font-size: 16px;
color: #FFFFFF;
letter-spacing: 1.33px;
text-shadow: -2px 0 0 #0C5FA6;
.hometotalbg {
width: 126.45px;
height: 26.23px;
padding-left: 24px;
background: url('/assets/images/homepage/communtity/total.png') no-repeat;
background-size: 100% 100%;
}
.home_total_number {
font-family: D-DIN-Italic;
font-weight: Italic;
font-size: 28px;
color: #EAF2FF;
letter-spacing: 0;
margin-left: 40px;
}
.hqtotal {
width: 126.45px;
height: 26.23px;
padding-left: 24px;
background: url('/assets/images/homepage/communtity/hqtotal.png') no-repeat;
background-size: 100% 100%;
}
.cztotal {
width: 126.45px;
height: 26.23px;
padding-left: 24px;
background: url('/assets/images/homepage/communtity/cztotal.png') no-repeat;
background-size: 100% 100%;
}
.lztotal {
width: 126.45px;
height: 26.23px;
padding-left: 24px;
background: url('/assets/images/homepage/communtity/lztotal.png') no-repeat;
background-size: 100% 100%;
}
}
.home_right {
position: absolute;
right: 26%;
bottom: 7%;
z-index: 999;
font-family: YouSheBiaoTiHei;
font-size: 14px;
background: #021d33ad;
// border: 1px solid rgba(2, 29, 51, 0.68);
padding: 7px 14px 7px 14px;
border: 1px solid;
border-image: linear-gradient(133deg, rgba(0, 197, 255, 0.53) 0%, rgba(0, 138, 255, 0.62)) 1;
._lz {
display: flex;
align-items: center;
._icon {
display: inline-block;
width: 15px;
height: 15px;
background: url('/assets/images/homepage/communtity/lzicon.png') no-repeat;
background-size: 100% 100%;
margin-right: 4px;
}
span {
font-family: YouSheBiaoTiHei;
font-size: 14px;
letter-spacing: 0;
background: linear-gradient(180deg, rgba(255, 255, 255, 1) 1%, rgba(250, 196, 110, 1) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
}
._hq {
display: flex;
align-items: center;
margin-top: 10px;
._icon {
display: inline-block;
width: 15px;
height: 15px;
background: url('/assets/images/homepage/communtity/hqicon.png') no-repeat;
background-size: 100% 100%;
margin-right: 4px;
}
span {
font-family: YouSheBiaoTiHei;
font-size: 14px;
background: linear-gradient(180deg, rgba(255, 255, 255, 1) 1%, rgba(36, 220, 247, 1) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
letter-spacing: 0;
}
}
._cz {
display: flex;
align-items: center;
margin-top: 10px;
._icon {
display: inline-block;
width: 15px;
height: 15px;
background: url('/assets/images/homepage/communtity/czicon.png') no-repeat;
background-size: 100% 100%;
margin-right: 4px;
}
span {
font-family: YouSheBiaoTiHei;
font-size: 14px;
background: linear-gradient(180deg, rgba(255, 255, 255, 1) 1%, rgba(1, 140, 255, 1) 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
letter-spacing: 0;
}
}
}

93
super-screen/client/src/sections/water-prevention/containers/homePage.js

@ -1,60 +1,69 @@
import React, { useEffect, useState } from 'react'
import { connect } from 'react-redux';
import { push } from 'react-router-redux';
import AccessData from '../components/accessData'
import AlarmList from '../components/alarmList'
import DataShare from '../components/dataShare'
import DataTop5 from '../components/dataTop5'
import HotspotData from '../components/hotspotData'
import NodeResource from '../components/nodeResource'
import AbnormalMonitoring from '../components/abnormalMonitoring'
import CenterTop from '../components/centerTop'
import LeftTop from '../components/left-top'
import LeftBottom from '../components/left-bottom'
import RightTop from '../components/right-top'
import RightBottom from '../components/right-bottom'
import EmergencyLeftTop from '../components/emergency-left-top'
import EmergencyLeftBottom from '../components/emergency-left-bottom'
import EmergencyRightTop from '../components/emergency-right-top'
import EmergencyRightBottom from '../components/emergency-right-bottom'
import Gis from './gis';
import './style.less'
function homePage(props) {
const { dispatch } = props;
const childStyle = { height: '32%', color: '#fff', marginBottom: 17 }
const childStyle = { height: '49%', color: '#fff', marginBottom: 17 }
const cardHeight = document.body.clientHeight * 0.896 * 0.32
const cardContentHeight = cardHeight - 42 - 13
return <div className='homepage'>
<div className='_title'>
<div onClick={() => { dispatch(push('/metadataManagement/latestMetadata')) }} className='_exit' ><div className='_icon' />进入后台</div>
</div>
<div className='homepage-left homepage-left-left'>
<div className="list">
<div className='child' style={childStyle}>
<AccessData />
</div>
<div className='child' style={childStyle}>
<NodeResource />
</div>
<div className='child' style={childStyle}>
<AlarmList cardContentHeight={cardContentHeight} />
const [tab, setTab] = useState('overview');// overview emergency
const SCREEN_COMPONENTS = {
overview: { leftTop: LeftTop, leftBottom: LeftBottom, rightTop: RightTop, rightBottom: RightBottom },
emergency: { leftTop: EmergencyLeftTop, leftBottom: EmergencyLeftBottom, rightTop: EmergencyRightTop, rightBottom: EmergencyRightBottom }
}
const currentContainer = SCREEN_COMPONENTS[tab];
return <>
<div className='homepage'>
<div className='_title'>
<div className='water_title_text'>
水务防汛实时监测预警系统
</div>
<div onClick={() => { dispatch(push('/metadataManagement/latestMetadata')) }} className='_exit' >返回平台</div>
</div>
</div>
<div className='homepage-center'>
<CenterTop />
<div className="list">
<div className='child-top'>
<AbnormalMonitoring />
<div className='homepage-left homepage-left-left'>
<div div className="list">
<div className='child' style={childStyle}>
<currentContainer.leftTop />
</div>
<div className='child' style={childStyle}>
<currentContainer.leftBottom />
</div>
</div>
</div>
</div>
<div className='homepage-left homepage-left-right'>
<div className="list">
<div className='child-right' style={childStyle}>
<DataShare />
</div>
<div className='child-right' style={childStyle}>
<DataTop5 cardContentHeight={cardContentHeight} />
</div>
<div className='child-right' style={childStyle}>
<HotspotData />
<div className='homepage-center'>
<Gis
changeTab={(e) => {
setTab(e)
}}
/>
</div>
<div className='homepage-left homepage-left-right'>
<div div className="list">
<div className='child-right' style={childStyle}>
<currentContainer.rightTop />
</div>
<div className='child-right' style={childStyle}>
<currentContainer.rightBottom />
</div>
</div>
</div>
</div>
</div>
</div >
</>
}

221
super-screen/client/src/sections/water-prevention/containers/style.less

@ -4,117 +4,40 @@
position: absolute;
top: 0;
left: 0;
background: url('/assets/images/homePage/enter/bg.png');
background: url('/assets/images/homePage/communtity/bg.png');
background-repeat: no-repeat;
background-size: 100% 100%;
overflow: hidden;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
// display: flex;
// flex-direction: column;
// justify-content: center;
// align-items: center;
padding-top: 5%;
._enter_row1 {
height: 302px;
._row1_item {
width: 1434px;
height: 241px;
// opacity: 0.8;
background: url('/assets/images/homePage/enter/row1.png');
background-repeat: no-repeat;
background-size: 100% 100%;
cursor: pointer;
}
._row1_item:hover {
width: 1434px;
height: 302.6px;
background: url('/assets/images/homePage/enter/row1-select.png');
background-repeat: no-repeat;
background-size: 100% 100%;
cursor: pointer;
}
}
._enter_row2 {
height: 427px;
display: flex;
.water_title_text {
position: absolute;
top: 0%;
width: 100%;
padding-left: 4%;
._row2_item1 {
width: 454px;
height: 371px;
// opacity: 0.8;
background: url('/assets/images/homePage/enter/row2-1.png');
background-repeat: no-repeat;
background-size: 100% 100%;
cursor: pointer;
margin-left: 60px;
}
._row2_item1:hover {
background: url('/assets/images/homePage/enter/row2-1-select.png');
background-repeat: no-repeat;
background-size: 100% 100%;
cursor: pointer;
}
._row2_item2 {
margin-left: 60px;
width: 454px;
height: 371px;
// opacity: 0.8;
background: url('/assets/images/homePage/enter/row2-2.png');
background-repeat: no-repeat;
background-size: 100% 100%;
cursor: pointer;
}
._row2_item2:hover {
background: url('/assets/images/homePage/enter/row2-2-select.png');
background-repeat: no-repeat;
background-size: 100% 100%;
cursor: pointer;
}
._row2_item3 {
margin-left: 60px;
width: 454px;
height: 371px;
// opacity: 0.8;
background: url('/assets/images/homePage/enter/row2-3.png');
background-repeat: no-repeat;
background-size: 100% 100%;
cursor: pointer;
}
height: 62px;
font-family: YouSheBiaoTiHei;
font-size: 48px;
color: #FFFFFF;
letter-spacing: 1px;
z-index: 300;
display: flex;
align-items: center;
justify-content: center;
._row2_item3:hover {
background: url('/assets/images/homePage/enter/row2-3-select.png');
background-repeat: no-repeat;
background-size: 100% 100%;
cursor: pointer;
._title_dot {
display: inline-block;
width: 8px;
height: 8px;
background-image: linear-gradient(180deg, #FFFFFF 0%, #0d71ef00 100%);
margin-left: 14px;
margin-right: 14px;
border-radius: 4px;
}
}
._enter_title {
position: absolute;
top: 4%;
left: 3%;
width: 575.35px;
height: 78px;
background: url('/assets/images/homePage/enter/title.png');
background-repeat: no-repeat;
background-size: 100% 100%;
}
._title {
width: 100%;
height: 88px;
background: url('/assets/images/homePage/bigscreen/top.png');
background-repeat: no-repeat;
background-size: 100% 100%;
}
._exit {
@ -124,35 +47,33 @@
cursor: pointer;
color: #C8F0FF;
display: flex;
._icon {
display: inline-block;
width: 28px;
height: 28px;
background: url('/assets/images/homePage/bigscreen/exit.png');
background-repeat: no-repeat;
background-size: 100% 100%;
margin-right: 3px;
}
width: 102px;
height: 33px;
background: url('/assets/images/homePage/bigscreen/exit.png');
background-repeat: no-repeat;
background-size: 100% 100%;
padding-left: 35px;
align-items: center;
z-index: 400;
}
.homepage-left {
width: 21.8%;
height: 89.6%;
height: 84.6%;
position: absolute;
top: 8.2%;
top: 10.1%;
z-index: 300;
}
.homepage-center {
width: 49.16%;
height: 89.6%;
width: 93.9%;
height: 84%;
position: absolute;
bottom: 2.4%;
left: 25.5%;
top: 10.4%;
left: 58px;
padding-left: 16px;
padding-right: 16px;
z-index: 400;
z-index: 200;
._top {
margin-top: 5%;
@ -165,11 +86,11 @@
}
.homepage-left-left {
left: 48px;
left: 58px;
}
.homepage-left-right {
right: 48px;
right: 58px;
}
}
@ -321,4 +242,62 @@
margin-right: 11px;
margin-left: 10px;
}
}
.gis {
position: absolute;
width: 100vw;
height: calc(~"100% - 114px");
left: 0;
top: 114px;
z-index: 0;
display: flex;
justify-content: center;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
/* flex 基本布局样式 */
.flex-column {
display: flex;
flex-direction: column;
}
.flex-row {
display: flex;
flex-direction: row;
}
.flex-content-between {
justify-content: space-between;
}
.flex-content-around {
justify-content: space-around;
}
.flex-content-start {
justify-content: flex-start;
}
.flex-content-end {
justify-content: flex-end;
}
.flex-item-center {
align-items: center;
}
.flex-item-start {
align-items: flex-start;
}
.flex-item-end {
align-items: flex-end;
}
.flex-item-stretch {
align-items: stretch;
}
Loading…
Cancel
Save