Просмотр исходного кода

[Mod 0000]公司端过渡页初版

wangkeyi 3 недель назад
Родитель
Сommit
dc99e40e9d

BIN
src/assets/images/overHaul/rootPage/alarm-content-bg.png


+ 9 - 0
src/assets/images/overHaul/rootPage/alarm-icon-1.svg

@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="38.338" height="27.895" viewBox="0 0 38.338 27.895">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" y1="1" x2="0.5" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#6ea0ff"/>
+      <stop offset="1" stop-color="#2c70f0"/>
+    </linearGradient>
+  </defs>
+  <path id="瓦斯等级" d="M42.094,56.935A12.3,12.3,0,0,1,29.81,44.653v-13.7a1.914,1.914,0,1,1,3.828,0v13.7a8.455,8.455,0,0,0,16.91,0V42.22a5.325,5.325,0,1,1,10.65,0v6.44a1.915,1.915,0,1,1-3.83,0V42.22a1.5,1.5,0,1,0-2.993,0v2.433A12.3,12.3,0,0,1,42.094,56.935Zm24.14-6.36a1.914,1.914,0,0,1-1.914-1.916V42.22a8.447,8.447,0,1,0-16.895,0v2.433a5.332,5.332,0,1,1-10.664,0v-13.7a1.915,1.915,0,1,1,3.83,0v13.7a1.5,1.5,0,1,0,3.006,0V42.22a12.275,12.275,0,1,1,24.55,0v6.44a1.914,1.914,0,0,1-1.914,1.916Z" transform="translate(-29.81 -29.041)" fill="url(#linear-gradient)"/>
+</svg>

+ 9 - 0
src/assets/images/overHaul/rootPage/alarm-icon-2.svg

@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="29.001" height="33.424" viewBox="0 0 29.001 33.424">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" y1="1" x2="0.5" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#6ea0ff"/>
+      <stop offset="1" stop-color="#2c70f0"/>
+    </linearGradient>
+  </defs>
+  <path id="煤层自燃倾向性" d="M119.152,87.824c-2.213-4.658-1.048-7.337.7-9.783a15.889,15.889,0,0,0,2.329-5.474,6.213,6.213,0,0,1,.932,4.891,12.854,12.854,0,0,0,2.679-9.317c5.823,4.076,8.385,13.044,5.008,19.566,17.935-10.249,4.426-25.505,2.1-27.136.815,1.747.932,4.658-.7,6.056C129.517,56.38,122.879,54.4,122.879,54.4c.815,5.241-2.8,10.947-6.289,15.256a11.063,11.063,0,0,0-1.4-5.59c-.233,3.843-3.144,6.871-3.96,10.714-1.048,5.241.815,8.968,7.919,13.044Z" transform="translate(-110.962 -54.4)" fill="url(#linear-gradient)"/>
+</svg>

+ 9 - 0
src/assets/images/overHaul/rootPage/alarm-icon-3.svg

@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="33.426" height="33.426" viewBox="0 0 33.426 33.426">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" y1="1" x2="0.5" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#6ea0ff"/>
+      <stop offset="1" stop-color="#2c70f0"/>
+    </linearGradient>
+  </defs>
+  <path id="联网" d="M84.991,89.58H79.808a14.344,14.344,0,0,0,0,7.865h5.183a23.852,23.852,0,0,1,0-7.865Zm2,0a21.669,21.669,0,0,0,0,7.865H92.53V89.58H86.991ZM89.871,107.3a18.889,18.889,0,0,1-4.44-7.886h-4.9a14.289,14.289,0,0,0,9.34,7.886Zm2.658-.138V99.411H87.482a17.277,17.277,0,0,0,5.047,7.751ZM89.871,79.73a14.289,14.289,0,0,0-9.34,7.885h4.9a18.889,18.889,0,0,1,4.438-7.887Zm2.658.138a17.24,17.24,0,0,0-5.047,7.747H92.53V79.867Zm9.5,9.713a23.853,23.853,0,0,1,0,7.865h5.185a14.344,14.344,0,0,0,0-7.865h-5.183Zm-2,0H94.5v7.865h5.539a21.669,21.669,0,0,0,0-7.865ZM97.154,107.3a14.289,14.289,0,0,0,9.34-7.886h-4.9a18.889,18.889,0,0,1-4.438,7.886ZM94.5,107.16a17.277,17.277,0,0,0,5.047-7.749H94.5v7.751ZM97.154,79.73a18.889,18.889,0,0,1,4.44,7.885h4.9a14.288,14.288,0,0,0-9.34-7.887Zm-2.658.138v7.747h5.047A17.277,17.277,0,0,0,94.5,79.863Zm-.983,30.358a16.713,16.713,0,1,1,16.713-16.713A16.713,16.713,0,0,1,93.513,110.226Z" transform="translate(-76.8 -76.801)" fill="url(#linear-gradient)"/>
+</svg>

+ 9 - 0
src/assets/images/overHaul/rootPage/alarm-icon-4.svg

@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30.811" height="30.811" viewBox="0 0 30.811 30.811">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" y1="1" x2="0.5" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#6ea0ff"/>
+      <stop offset="1" stop-color="#2c70f0"/>
+    </linearGradient>
+  </defs>
+  <path id="永久密闭数量" d="M15.405,0A15.405,15.405,0,1,1,0,15.405,15.451,15.451,0,0,1,15.405,0Zm0,5.777a9.536,9.536,0,0,0-9.628,9.628,9.536,9.536,0,0,0,9.628,9.628,9.536,9.536,0,0,0,9.628-9.628,9.536,9.536,0,0,0-9.628-9.628Zm0,3.851a5.777,5.777,0,1,1-5.777,5.777A5.777,5.777,0,0,1,15.405,9.628Z" fill="url(#linear-gradient)"/>
+</svg>

+ 9 - 0
src/assets/images/overHaul/rootPage/alarm-icon-5.svg

@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30.172" height="30.199" viewBox="0 0 30.172 30.199">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" y1="1" x2="0.5" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#6ea0ff"/>
+      <stop offset="1" stop-color="#2c70f0"/>
+    </linearGradient>
+  </defs>
+  <path id="报警数量" d="M25.346,28.862a1.871,1.871,0,0,0-.955-.513.467.467,0,0,1-.38-.457V17.051a8.493,8.493,0,1,0-16.987-.065V27.892a.467.467,0,0,1-.38.457A1.888,1.888,0,0,0,5.136,30.2H25.9a1.893,1.893,0,0,0-.551-1.336Zm-8.2-15.179-.572,5.111H18.82l-4.931,7.157.572-5.111H12.214Zm-1.631-7.55a.943.943,0,0,1-.944-.944V.944a.944.944,0,1,1,1.887,0V5.19A.943.943,0,0,1,15.517,6.134Zm-6.842,2.6a.944.944,0,0,1-1.289-.345L5.263,4.71A.943.943,0,0,1,6.9,3.766L9.02,7.443A.945.945,0,0,1,8.675,8.732Zm13.684,0a.944.944,0,0,0,1.289-.345L25.77,4.71a.943.943,0,0,0-1.634-.944L22.013,7.443A.945.945,0,0,0,22.358,8.732ZM6.389,13.12a.942.942,0,0,1-1.156.666l-4.1-1.1a.943.943,0,1,1,.487-1.823l4.1,1.1A.942.942,0,0,1,6.389,13.12Zm18.255,0a.942.942,0,0,0,1.156.666l4.1-1.1a.944.944,0,0,0-.49-1.823l-4.1,1.1A.947.947,0,0,0,24.644,13.12Z" transform="translate(-0.43)" fill="url(#linear-gradient)"/>
+</svg>

+ 9 - 0
src/assets/images/overHaul/rootPage/alarm-icon-6.svg

@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="35.025" height="33.441" viewBox="0 0 35.025 33.441">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" y1="1" x2="0.5" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#6ea0ff"/>
+      <stop offset="1" stop-color="#2c70f0"/>
+    </linearGradient>
+  </defs>
+  <path id="报警原因" d="M30.062,31.5l.118.1.174.172a.97.97,0,0,1,.283.818.95.95,0,0,1-.477.713l-.086.048a4.149,4.149,0,0,1-1.888.427,4.273,4.273,0,0,1-1.667-.325l-.245-.114-.148-.084a.886.886,0,0,1-.415-.565.916.916,0,0,1,.118-.7l.058-.08.068-.072.234-.234a.966.966,0,0,1,.88-.259l.14.038.1.04a2.1,2.1,0,0,0,.88.174,2.385,2.385,0,0,0,.659-.09l.13-.046.1-.042a.968.968,0,0,1,.99.084ZM28.184,18.555a5.1,5.1,0,0,1,5.062,4.694l.016.275v.4a8.766,8.766,0,0,0,.864,4.008,3.9,3.9,0,0,0,.387.6l.128.148.136.134.327.218a.954.954,0,0,1,.413.631.98.98,0,0,1-.164.744.97.97,0,0,1-.635.4l-.154.012H21.8a.936.936,0,0,1-.679-.277,1,1,0,0,1-.291-.7.974.974,0,0,1,.323-.723l.108-.084.313-.2.088-.082.054-.054a3.607,3.607,0,0,0,.521-.75,8.331,8.331,0,0,0,.85-3.555l.014-.449v-.261a5.1,5.1,0,0,1,5.08-5.121ZM18.548.5a1.122,1.122,0,0,1,.323.311l8.417,12.225a1.178,1.178,0,0,1,.2.856,1.152,1.152,0,0,1-.449.744l-.437.323a1.08,1.08,0,0,1-1.539-.269l-6.73-9.768a.271.271,0,0,0-.459.018L4.788,27.161a.3.3,0,0,0,0,.291.275.275,0,0,0,.24.146h12.45a1.126,1.126,0,0,1,1.1,1.146V29.3a1.126,1.126,0,0,1-1.1,1.146H1.613a1.1,1.1,0,0,1-.964-.585A1.182,1.182,0,0,1,.669,28.7L17.045.887A1.082,1.082,0,0,1,18.548.5ZM28.186,20.74a2.93,2.93,0,0,0-2.918,2.94,11.917,11.917,0,0,1-.816,4.654l-.046.1a.148.148,0,0,0,0,.138.136.136,0,0,0,.116.066h7.309a.136.136,0,0,0,.116-.066.148.148,0,0,0,0-.138l-.056-.128a11.247,11.247,0,0,1-.786-3.84l-.016-.5v-.4a2.93,2.93,0,0,0-2.9-2.826ZM18.835,21.9a1.126,1.126,0,0,1,1.1,1.146V23.6a1.126,1.126,0,0,1-1.1,1.146H18.3a1.126,1.126,0,0,1-1.1-1.146v-.553A1.126,1.126,0,0,1,18.3,21.9h.539Zm0-9.959a1.126,1.126,0,0,1,1.1,1.146v6.245a1.126,1.126,0,0,1-1.1,1.146H18.3a1.126,1.126,0,0,1-1.1-1.146V13.088a1.126,1.126,0,0,1,1.1-1.146Z" transform="translate(-0.508 -0.338)" fill="url(#linear-gradient)"/>
+</svg>

+ 13 - 0
src/assets/images/overHaul/rootPage/alarm-icon-7.svg

@@ -0,0 +1,13 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="33.472" height="33.473" viewBox="0 0 33.472 33.473">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" y1="1" x2="0.5" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#6ea0ff"/>
+      <stop offset="1" stop-color="#2c70f0"/>
+    </linearGradient>
+  </defs>
+  <g id="开始时间" transform="translate(-200.738 -63.814)">
+    <path id="路径_56377" data-name="路径 56377" d="M223.669,618.758a1.057,1.057,0,0,1-.943-.586,17.94,17.94,0,0,1-.922-2.283,1.047,1.047,0,0,1,1.99-.649,16.519,16.519,0,0,0,.817,1.99,1.058,1.058,0,0,1-.461,1.4,1.1,1.1,0,0,1-.482.126Z" transform="translate(-20.228 -530.186)" fill="url(#linear-gradient)"/>
+    <path id="路径_56378" data-name="路径 56378" d="M217.5,97.286a16.685,16.685,0,0,1-6.766-1.424,16.86,16.86,0,0,1-5.446-3.854,1.052,1.052,0,1,1,1.529-1.445,14.593,14.593,0,0,0,4.755,3.372,14.317,14.317,0,0,0,5.907,1.257,14.648,14.648,0,1,0-14.641-14.641,1.047,1.047,0,0,1-2.095,0,16.462,16.462,0,0,1,1.32-6.514,16.735,16.735,0,0,1,15.416-10.222,16.462,16.462,0,0,1,6.514,1.32A16.735,16.735,0,0,1,234.21,80.551a16.462,16.462,0,0,1-1.32,6.514,16.731,16.731,0,0,1-8.9,8.9,16.361,16.361,0,0,1-6.493,1.32Z" transform="translate(0 0)" fill="url(#linear-gradient)"/>
+    <path id="路径_56379" data-name="路径 56379" d="M494.739,308.163a.945.945,0,0,1-.524-.147,1.056,1.056,0,0,1-.524-.9v-14.39a1.056,1.056,0,0,1,.524-.9,1.04,1.04,0,0,1,1.047,0l12.463,7.206a1.036,1.036,0,0,1,0,1.8l-12.463,7.206a1.076,1.076,0,0,1-.524.126Z" transform="translate(-282.041 -219.381)" fill="url(#linear-gradient)"/>
+  </g>
+</svg>

+ 15 - 0
src/assets/images/overHaul/rootPage/alarm-icon-8.svg

@@ -0,0 +1,15 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="33.472" height="33.473" viewBox="0 0 33.472 33.473">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" y1="1" x2="0.5" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#6ea0ff"/>
+      <stop offset="1" stop-color="#2c70f0"/>
+    </linearGradient>
+  </defs>
+  <g id="最新监测时间" transform="translate(-313.106 -873.637)">
+    <path id="路径_56380" data-name="路径 56380" d="M14.731,3.82A10.914,10.914,0,1,0,25.647,14.734,10.917,10.917,0,0,0,14.731,3.82ZM23.13,15.5a.6.6,0,0,1-.6.607h-7.9v.61a.608.608,0,0,1-1.215,0V16.1H12.8a.607.607,0,0,1,0-1.213h.61v-7.9a.608.608,0,0,1,1.215,0v7.9h7.9a.606.606,0,0,1,.6.607Z" transform="translate(315.175 875.639)" fill="url(#linear-gradient)"/>
+    <g id="组_16839" data-name="组 16839" transform="translate(112.368 809.822)">
+      <path id="路径_56377" data-name="路径 56377" d="M223.669,618.758a1.057,1.057,0,0,1-.943-.586,17.94,17.94,0,0,1-.922-2.283,1.047,1.047,0,0,1,1.99-.649,16.519,16.519,0,0,0,.817,1.99,1.058,1.058,0,0,1-.461,1.4,1.1,1.1,0,0,1-.482.126Z" transform="translate(-20.228 -530.186)" fill="url(#linear-gradient)"/>
+      <path id="路径_56378" data-name="路径 56378" d="M217.5,97.286a16.685,16.685,0,0,1-6.766-1.424,16.86,16.86,0,0,1-5.446-3.854,1.052,1.052,0,1,1,1.529-1.445,14.593,14.593,0,0,0,4.755,3.372,14.317,14.317,0,0,0,5.907,1.257,14.648,14.648,0,1,0-14.641-14.641,1.047,1.047,0,0,1-2.095,0,16.462,16.462,0,0,1,1.32-6.514,16.735,16.735,0,0,1,15.416-10.222,16.462,16.462,0,0,1,6.514,1.32A16.735,16.735,0,0,1,234.21,80.551a16.462,16.462,0,0,1-1.32,6.514,16.731,16.731,0,0,1-8.9,8.9,16.361,16.361,0,0,1-6.493,1.32Z" transform="translate(0 0)" fill="url(#linear-gradient)"/>
+    </g>
+  </g>
+</svg>

BIN
src/assets/images/overHaul/rootPage/alarm-icon-bg.png


BIN
src/assets/images/overHaul/rootPage/chart-title-bg.png


+ 6 - 0
src/assets/images/overHaul/rootPage/data-break-icon.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="39.066" height="39.067" viewBox="0 0 39.066 39.067">
+  <g id="组_16817" data-name="组 16817" transform="translate(-12.266 -12.269)">
+    <path id="路径_56343" data-name="路径 56343" d="M206.629,217.763a6.829,6.829,0,0,1-4.844-2l-4.241-4.241a6.85,6.85,0,0,1,0-9.687l4.241-4.241a6.858,6.858,0,0,1,9.687,0l4.287,4.287.043.05a8.77,8.77,0,0,1,1.6,2.98,6.385,6.385,0,0,1-1.694,6.611l-2.619-2.619a2.685,2.685,0,0,0,.794-2.832,5.163,5.163,0,0,0-.859-1.683l-4.175-4.175a3.15,3.15,0,0,0-4.45,0l-4.241,4.241a3.146,3.146,0,0,0,0,4.449l4.241,4.241a3.15,3.15,0,0,0,4.45,0l2.619,2.619A6.829,6.829,0,0,1,206.629,217.763Zm16.888,16.891a6.8,6.8,0,0,1-4.844-2.006l-4.287-4.287-.043-.05a8.77,8.77,0,0,1-1.6-2.98,6.385,6.385,0,0,1,1.694-6.611l2.619,2.619a2.7,2.7,0,0,0-.768,2.92,5.264,5.264,0,0,0,.832,1.593l4.177,4.177a3.15,3.15,0,0,0,4.449,0l4.241-4.241a3.15,3.15,0,0,0,0-4.449l-4.241-4.241a3.146,3.146,0,0,0-4.449,0l-2.619-2.619a6.8,6.8,0,0,1,4.843-2.006h0a6.8,6.8,0,0,1,4.844,2.006l4.241,4.241a6.858,6.858,0,0,1,0,9.687l-4.241,4.241A6.8,6.8,0,0,1,223.517,234.654Z" transform="translate(-183.272 -183.318)" fill="#d5c702"/>
+    <path id="路径_56344" data-name="路径 56344" d="M239.229,230.342a1.852,1.852,0,0,1-1.309-3.161L245,220.095a1.852,1.852,0,0,1,2.619,2.619l-7.085,7.085A1.846,1.846,0,0,1,239.229,230.342Zm7.026-.212a1.852,1.852,0,0,1-.8-3.522l4.519-2.167a1.852,1.852,0,0,1,1.6,3.34l-4.519,2.167A1.845,1.845,0,0,1,246.255,230.13Zm-6.8-6.827a1.853,1.853,0,0,1-1.686-2.617l2.069-4.563a1.852,1.852,0,0,1,3.373,1.529l-2.069,4.563A1.852,1.852,0,0,1,239.452,223.3Zm-21.593,19.172a1.852,1.852,0,0,1-.8-3.522l4.518-2.166a1.852,1.852,0,1,1,1.6,3.34l-4.518,2.166A1.844,1.844,0,0,1,217.859,242.474Zm9.247,9.347a1.853,1.853,0,0,1-1.686-2.617l2.069-4.563a1.852,1.852,0,0,1,3.373,1.529l-2.069,4.563A1.852,1.852,0,0,1,227.106,251.821Zm-4.791-4.566a1.852,1.852,0,0,1-1.309-3.161l7.085-7.085a1.852,1.852,0,0,1,2.619,2.619l-7.085,7.085A1.847,1.847,0,0,1,222.315,247.255Z" transform="translate(-202.476 -201.565)" fill="#ffdc00"/>
+  </g>
+</svg>

+ 3 - 0
src/assets/images/overHaul/rootPage/data-quality-icon.svg

@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="45.528" height="45.943" viewBox="0 0 45.528 45.943">
+  <path id="路径_56345" data-name="路径 56345" d="M77.917,81.156h3.626l7.327-6.31a19.225,19.225,0,0,0-1.083-2.175l-9.719,8.352ZM72.67,63.517V66.49l2.984-2.576a19.006,19.006,0,0,0-2.984-.4M88.016,81.156l2.113-1.822a17.67,17.67,0,0,0-.591-2.6L84.4,81.156ZM81.958,66.545,72.67,74.527v3.119l11.206-9.658a17.7,17.7,0,0,0-1.919-1.442M77.836,64.5,72.67,68.949v3.119l7.569-6.522a18.778,18.778,0,0,0-2.4-1.043m8.908,6.592a18.308,18.308,0,0,0-1.5-1.8L72.67,80.107v1.052h2.4ZM65.238,64a20.535,20.535,0,0,0-15.23,33.181l15.232-13.1V64Zm4.145,24.384-15.66,13.465A21.028,21.028,0,0,0,90.038,88.386H69.383Z" transform="translate(-45.136 -63.018)" fill="#0070ff" stroke="rgba(0,0,0,0)" stroke-miterlimit="10" stroke-width="1"/>
+</svg>

+ 3 - 0
src/assets/images/overHaul/rootPage/over-limit-icon.svg

@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="43.971" height="43.936" viewBox="0 0 43.971 43.936">
+  <path id="路径_56346" data-name="路径 56346" d="M35.855,41.036a2.661,2.661,0,0,0-1.359-.73.664.664,0,0,1-.541-.65V24.243A12.076,12.076,0,1,0,9.8,24.151V39.657a.664.664,0,0,1-.541.65,2.685,2.685,0,0,0-2.143,2.629H36.639a2.692,2.692,0,0,0-.784-1.9ZM24.2,19.455l-.813,7.266h3.191L19.565,36.9l.813-7.266h-3.2ZM21.88,8.721A1.34,1.34,0,0,1,20.538,7.38V1.342a1.342,1.342,0,0,1,2.683,0V7.38A1.34,1.34,0,0,1,21.88,8.721Zm-9.728,3.694a1.342,1.342,0,0,1-1.832-.491L7.3,6.7A1.341,1.341,0,0,1,9.624,5.354l3.019,5.229A1.343,1.343,0,0,1,12.152,12.415Zm19.455,0a1.342,1.342,0,0,0,1.832-.491L36.459,6.7a1.341,1.341,0,1,0-2.323-1.342l-3.019,5.229A1.343,1.343,0,0,0,31.607,12.415ZM8.9,18.654a1.34,1.34,0,0,1-1.644.948l-5.832-1.56a1.341,1.341,0,1,1,.692-2.591l5.832,1.564A1.339,1.339,0,0,1,8.9,18.654Zm25.954,0A1.34,1.34,0,0,0,36.5,19.6l5.832-1.564a1.342,1.342,0,0,0-.7-2.591L35.8,17.011A1.346,1.346,0,0,0,34.857,18.654Z" transform="translate(0.106 0.5)" fill="red" stroke="rgba(0,0,0,0)" stroke-miterlimit="10" stroke-width="1"/>
+</svg>

+ 972 - 53
src/views/dashboard/Overhaul/components/RootPage.vue

@@ -1,58 +1,309 @@
 <template>
   <div class="dashboard-container">
-    <div class="info-card">
-      <div class="card-title">
-        <div class="info-details">
-          <div class="label">{{ mineStore.getRoot }}</div>
-          <!-- <div class="value">西川煤矿分公司</div> -->
-          <!-- <div class="tag" :style="{ backgroundColor: getAlarmColor(basicInfo.alarmLevel), color: '#fff' }">
-            {{ getRiskText(basicInfo.alarmLevel) }}
-          </div> -->
+    <div class="content-area" v-if="isDataLoaded">
+      <!-- 顶部信息卡片 -->
+      <div class="top-info">
+        <!-- {{ mineStore.getRoot }} -->
+        <div class="info-card">
+            <div class="card-title">
+              <div class="info-details">
+                <div class="label">{{ mineStore.getRoot?.departName }}</div>
+                <!-- <div class="tag" :style="{ backgroundColor: getAlarmColor(mineStore.alarmLevel), color: '#fff' }">{{ getRiskText(mineStore.alarmLevel) }}</div> -->
+              </div>
+              <div>
+                <a-button class="btn" @click="handleGoToPageQuery('/basicinfo/access-statistics')">接入详情</a-button>
+              </div>
+              <div class="info-border">
+                <div class="info-border-icon"></div>
+                <div class="info-border-line"></div>
+                <div class="info-border-icon"></div>
+              </div>
+            </div>
+
+            <div class="card-details">
+              <div v-for="value in accessStatics" :key="value.id" class="card-item">
+                <div class="item-cont">
+                  组织机构:{{ value.name }}
+                </div>
+                <div class="item-cont">
+                  应接入:{{ value.yjNum }} 
+                </div>
+                <div class="item-cont">
+                  在线:{{ value.yjNum }}
+                </div>
+                <div class="item-cont">
+                  中断:{{ value.yjNum }}
+                </div>
+                <div class="item-cont">
+                  未接入:{{ value.yjNum }}
+                </div>
+                <div class="item-cont">
+                  接入密闭数:{{ value.yjNum }}
+                </div> 
+                <div class="bg-line">
+                </div>
+                <div class="bg-icon"></div>
+              </div>
+            </div>
+          </div>
+      </div>
+
+      <!-- 预警统计 -->
+      <div class="warning-statistics">
+        <div class="statistics-header">
+          <div class="title">实时预警统计</div>
+          <div class="btn-group">
+            <!-- <button class="btn">预警级别</button> -->
+          </div>
+        </div>
+        <div class="statistics-content">
+          <div class="stat-item high-risk">
+            <div class="icon">
+              <div class="icon-top"></div>
+              <div class="icon-bottom"></div>
+            </div>
+            <div class="text">超限异常报警</div>
+            <div class="count">{{ realtimeWarning.overLimitCount }}</div>
+          </div>
+          <div class="stat-item medium-risk">
+            <div class="icon">
+              <div class="icon-top"></div>
+              <div class="icon-bottom"></div>
+            </div>
+            <div class="text">预测预警</div>
+            <div class="count">{{ realtimeWarning.alarmInfoCount }}</div>
+          </div>
+          <div class="stat-item normal-risk">
+            <div class="icon">
+              <div class="icon-top"></div>
+              <div class="icon-bottom"></div>
+            </div>
+            <div class="text">数据中断</div>
+            <div class="count">{{ realtimeWarning.dataBreakCount }}</div>
+          </div>
+          <div class="stat-item low-risk">
+            <div class="icon">
+              <div class="icon-top"></div>
+              <div class="icon-bottom"></div>
+            </div>
+            <div class="text">数据质量</div>
+            <div class="count">{{ realtimeWarning.dataQualityCount }}</div>
+          </div>
+        </div>
+      </div>
+
+      <!-- 预警数据详情 -->
+      <div class="warning-details">
+        <div class="details-header">
+          <div class="title">预警数据详情</div>
+          <div class="btn-group">
+            <button class="btn"  @click="handleShowDetail({deptId:mineStore.getRootId})">展开详情</button>
+          </div>
+        </div>
+        <div class="details-content">
+          <div 
+            v-for="(item, index) in mineData?.records" 
+            :key="index" 
+            class="warning-item"
+          >
+            <div class="item-header">
+              <div class="header-left">
+                <div class="icon"></div>
+                <div class="name">煤矿名称: {{ item.mineName }}</div>
+                <div 
+                  class="risk-level" 
+                  :style="{ backgroundColor: getAlarmColor(item.alarmLevel), color: '#fff' }"
+                >
+                  {{ getRiskText(item.alarmLevel) }}
+                </div>
+              </div>
+              <a-button 
+                class="expand-btn"
+                @click="handleShowDetail(item)"
+              >
+                详情
+              </a-button>
+            </div>
+            <div class="item-body">
+              <div class="data-row">
+                <div 
+                  v-for="(col, colIndex) in dataColumns" 
+                  :key="colIndex" 
+                  class="data-col"
+                  :class="{
+                    'col-first-row': colIndex < 5, 
+                    'col-second-row': colIndex >= 5,
+                    'col-span-3': colIndex === 5 
+                  }"
+                >
+                <div class="col-icon">
+                  <div class="icon-item" :class="`alarm-icon-${(colIndex % 8) + 1}`"></div>
+                </div>
+                <div class="col-cont">
+                  <div class="col-title">{{ col.label }}</div>
+                  <div 
+                    class="col-value" 
+                    :style="{ color: getColValueColor(col, item) }"
+                  >
+                    <span 
+                      v-if="col.showPoint" 
+                      class="status-dot" 
+                      :style="{ 
+                        backgroundColor: getColValueColor(col, item), 
+                        boxShadow: `0 0 10px ${getColValueColor(col, item)}`
+                      }"
+                    ></span>
+                    {{ getColDisplayText(col, item) }}
+                  </div>
+                </div>
+
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+
+      <!-- 近半年报警统计 -->
+      <div class="half-year-statistics">
+        <div class="statistics-header">
+          <div class="title">近半年预测预报统计</div>
+          <div class="btn-group">
+            <button class="btn" @click="toggleChartVisibility">
+              {{ isChartVisible ? '收起图表' : '展开图表' }}
+            </button>
+          </div>
+        </div>
+        <div class="statistics-content" v-show="isChartVisible">
+          <!-- 左侧饼图区域 -->
+          <div class="chart-item pie-chart">
+            <div class="chart-title">预测预报类型统计</div>
+            <Pie :chart-data="alarmType"></Pie>
+          </div>
+          <!-- 右侧柱状图区域 -->
+          <div class="chart-item bar-chart">
+            <div class="chart-title">重点矿井报警次数统计</div>
+            <Bar :chart-data="historyAlarmNum"></Bar>
+          </div>
         </div>
       </div>
     </div>
-    <a-card>
-      <title>{{ mineStore.getRoot?.departName }}</title>
-      <span v-for="value in accessStatics" :key="value.id">
-        组织机构:{{ value.name }} 应接入:{{ value.yjNum }} 在线:{{ value.yjNum }} 中断:{{ value.yjNum }} 未接入:{{ value.yjNum }} 接入密闭数:{{
-          value.yjNum
-        }}
-      </span>
-    </a-card>
-
-    <a-card title="实时预警统计">
-      {{ realtimeWarning }}
-    </a-card>
-
-    <a-card title="预警数据详情">
-      {{ mineData }}
-    </a-card>
-
-    <a-card title="近半年报警统计">
-      <a-row>
-        <a-col :span="12">
-          {{ alarmType }}
-          <Pie :chart-data="alarmType"></Pie>
-        </a-col>
-        <a-col :span="12">
-          {{ historyAlarmNum }}
-          <Bar :chart-data="historyAlarmNum"></Bar>
-        </a-col>
-      </a-row>
-    </a-card>
+
+    <!-- 实时数据表格 -->
+    <BasicModal
+      v-model:open="isDetailModalVisible"
+      title="实时数据详情"
+      width="70%"
+      centered
+      :footer="null"
+      @cancel="handleModalClose"
+    >
+      <BasicTable @register="registerRealtimeTable" />
+
+    </BasicModal>
+
   </div>
 </template>
 <script setup lang="ts">
+  import { useRouter, useRoute } from 'vue-router';
   import { onMounted, ref } from 'vue';
-  import { getAlarmType, getGoafAccessCount, getHistoryAlarmNum, getMineData, getRealAlarmNum } from '../overhaul.api';
+  import { getAlarmType, getGoafAccessCount, getHistoryAlarmNum, getMineData, getRealAlarmNum, getGoafData } from '../overhaul.api';
+  import { columns } from '../overhaul.data';
   import { useMineDepartmentStore } from '/@/store/modules/mine';
+  import { useListPage } from '/@/hooks/system/useListPage';
   import dayjs from 'dayjs';
   import Pie from '/@/components/chart/Pie.vue';
   import Bar from '/@/components/chart/Bar.vue';
+  import { StatusColorEnum } from '/@/enums/jeecgEnum';
+  import { BasicTable } from '/@/components/Table';
+  import { BasicModal } from '/@/components/Modal';
+    // 处理矿名选择器相关的逻辑
+  const isDetailModalVisible = ref(false);
+  const currentDeptId = ref<string | number>('');
 
-  const mineStore = useMineDepartmentStore();
+  const getDynamicTableData = (params: any) => {
+    // 如果 currentDeptId 存在,则覆盖 params 中的 deptId
+    if (currentDeptId.value) {
+      params.deptId = currentDeptId.value;
+    } else {
+      // 默认使用 rootId,防止初始加载时无数据
+      params.deptId = mineStore.getRootId;
+    }
+    return getGoafData(params);
+  };
+   // 注册实时数据表格
+  const { tableContext: ctxRealtime, onExportXls: onExportXlsTime } = useListPage({
+    tableProps: {
+      api: getDynamicTableData,
+      columns,
+      showIndexColumn: false,
+      scroll: { x: 'max-content', y: 500 }, 
+      useSearchForm: false,       // 隐藏搜索表单
+      showActionButtonGroup: false, 
+    },
+
+    pagination: false,
+    exportConfig: {
+      url: '/ventanaly-province/province/device/exportGoafReal',
+      name: '老空区永久密闭监测数据',
+      // params: {
+      //   goafId,
+      // },
+    },
+  });
+  const [registerRealtimeTable, realtimeTable] = ctxRealtime;
+
+  const handleShowDetail = (item: any) => {
+    // 设置当前选中的 deptId
+    currentDeptId.value = item.deptId;
+    // 显示弹框
+    isDetailModalVisible.value = true;
+    
+    // 关键:手动触发表格刷新,因为 api 依赖的 ref 变化可能不会自动触发 BasicTable 的内部重载
+    // 使用 nextTick 确保 DOM 更新后再重载,或者直接在 modal 的 open 事件中处理
+    setTimeout(() => {
+      realtimeTable?.reload();
+    }, 100);
+  };
 
+  const handleModalClose = () => {
+    isDetailModalVisible.value = false;
+    currentDeptId.value = ''; // 可选:清空状态
+  };
+
+  // 路由实例
+  const router = useRouter();
+  const mineStore = useMineDepartmentStore();
+  // 数据加载状态
+  const isDataLoaded = ref(false);
   const accessStatics = ref<any[]>([]);
+  // 控制图表显示/隐藏的状态
+  const isChartVisible = ref(true);
+
+  const dataColumns = [
+    { label: '瓦斯等级', key: 'gasLevelName', type: 'alarm', showPoint: true },
+    { label: '煤层自燃倾向性', key: 'coalSeamLevel', type: 'text'  },
+    { label: '联网', key: 'status', colorKey: 'status', type: 'status',showPoint: true },
+    { label: '永久密闭数量', key: 'goafNum', type: 'text'  },
+    { label: '报警数量', key: 'alarmCount', type: 'custom_count'  },
+    { label: '报警原因', key: 'alarmReasons', type: 'custom_reasons'  },
+    { label: '开始时间', key: 'createTime', type: 'text' },
+    { label: '最新监测时间', key: '-',type: 'text' },
+  ];
+  const alartTypeColumns = [
+    'fireAlarm',
+    'fireAlarmOut',
+    'explosionAlarm',
+    'sourcePressureAlarm',
+    'leakageAlarm',
+    'unsealAlarm',
+    // {key: 'fireAlarm', label: '闭内自燃发火'},
+    // {key: 'fireAlarmOut', label: '闭外自燃发火'},
+    // {key: 'explosionAlarm', label: '爆炸预警'},
+    // {key: 'sourcePressureAlarm', label: '压差隐患'},
+    // {key: 'leakageAlarm', label: '漏风'},
+    // {key: 'unsealAlarm', label: '密闭启封'},
+  ];
   async function fetchAccessStatics() {
     accessStatics.value = await getGoafAccessCount({ deptId: mineStore.getRootId });
   }
@@ -95,12 +346,133 @@
     });
   }
 
-  onMounted(() => {
-    fetchAccessStatics();
-    fetchRealtimeWarning();
-    fetchAlarmType();
-    fetchHistoryAlarmNum();
-    fetchMineData();
+    /**
+   * 风险等级映射配置
+   */
+  const RISK_LEVEL_MAP: Record<string, { text: string; color: string }> = {
+    '4': { text: '高风险', color: StatusColorEnum.red },
+    '3': { text: '较高风险', color: StatusColorEnum.gold },
+    '2': { text: '一般风险', color: StatusColorEnum.yellow },
+    '1': { text: '低风险', color: StatusColorEnum.blue },
+    '0': { text: '无风险', color: '#333' }, // 假设 0 为无风险或默认
+  };
+    /**
+   * 获取报警颜色
+   * @param level 报警级别 '1', '2', '3', '4'
+   */
+  const getAlarmColor = (level?: string | number) => {
+    if (!level && level !== 0) return '#333'; // 默认颜色
+    return RISK_LEVEL_MAP[String(level)]?.color;
+  };
+     /**
+   * 获取风险等级对应的文本
+   * @param level 报警级别 '1', '2', '3', '4'
+   */
+  const getRiskText = (level?: string | number) => {
+    if (!level && level !== 0) return '-';
+    return RISK_LEVEL_MAP[String(level)]?.text || '未知';
+  };
+
+   /**
+   * 通用页面跳转方法
+   * @param record 当前行数据
+   * @param path 目标路径
+   */
+  function handleGoToPageQuery(path: string) {
+
+    router.push({
+      path,
+    }).catch(err => {
+      console.error('跳转失败:', err);
+    });
+  }
+
+    /**
+   * 获取列显示的颜色
+   */
+  const getColValueColor = (col: any, item: any) => {
+
+    if (col.key === 'gasLevelName') {
+      const val = getDataValue(item, col.key);
+      if (!val || val === '-') return '#000';
+      
+      const strVal = String(val);
+      if (strVal.includes('突出')) {
+        return StatusColorEnum.red; // 红色
+      } else if (strVal.includes('高瓦斯')) {
+        return StatusColorEnum.gold; // 橙色/金色
+      } else if (strVal.includes('低瓦斯')) {
+        return StatusColorEnum.blue; // 蓝色
+      }
+      return '#000';
+    }
+    // 如果是报警类型,使用原有的报警颜色逻辑
+    if (col.type === 'alarm' && col.colorKey) {
+      return getAlarmColor(getDataValue(item, col.colorKey));
+    }
+    
+    // 如果是设备状态类型,使用状态颜色逻辑
+    if (col.type === 'status') {
+      return getlinkStatusInfo(getDataValue(item, col.key)).color;
+    }
+    
+    // 默认黑色
+    return '#000';
+  };
+
+    /**
+   * 根据点分字符串路径获取对象值 (例如: 'fireAlarm.alarmName')
+   * @param item 数据对象
+   * @param path 路径字符串
+   * @param defaultValue 默认值
+   */
+  const getDataValue = (item: any, path: string, defaultValue: string = '-') => {
+    if (!item || !path) return defaultValue;
+    const val = path.split('.').reduce((acc, part) => acc && acc[part], item);
+    return val ?? defaultValue;
+  };
+
+  /**
+   * 获取设备状态信息 (文本和颜色)
+   * @param status 0: 断开, 1: 正常
+   */
+  const getlinkStatusInfo = (status?: number | string) => {
+    if (status === 1 || status === '1') {
+      return { text: '正常', color: '#52c41a' }; // 绿色
+    }
+    return { text: '断开', color: '#ff4d4f' }; // 红色
+  };
+
+  /**
+   * 获取列显示的文本
+   */
+  const getColDisplayText = (col: any, item: any) => {
+    const rawValue = getDataValue(item, col.key);
+    
+    if (col.type === 'status') {
+      return getlinkStatusInfo(rawValue).text;
+    }
+
+    // 默认直接返回原始值或经过 getDataValue 处理后的值
+    return rawValue;
+  };
+
+  // 切换图表显示状态
+  const toggleChartVisibility = () => {
+    isChartVisible.value = !isChartVisible.value;
+  };
+
+
+  onMounted(async() => {
+    console.log(mineStore.getRoot)
+    await Promise.all([
+      fetchAccessStatics(),
+      fetchRealtimeWarning(),
+      fetchAlarmType(),
+      fetchHistoryAlarmNum(),
+      fetchMineData(),
+    ]);
+    isDataLoaded.value = true;
   });
 </script>
 <style lang="less" scoped>
@@ -110,24 +482,571 @@
     height: 100%;
     overflow: scroll;
   }
+
+  .content-area {
+    flex: 1;
+    padding: 20px;
+    background-color: #f0f8ff;
+  }
+
+  // 顶部信息总览样式
+  .top-info {
+    width: 100%;
+    height: 200px;
+    margin-bottom: 20px;
+    flex-shrink: 0;
+  }
+
   .info-card {
     width: 100%;
     height: 100%;
     display: flex;
     flex-direction: row;
-    background-image: url('/@/assets/images/overHaul/leafgPage/info-card-bg.png');
+    background-image: url('/@/assets/images/overHaul/leafPage/info-card-bg.png');
     background-repeat: no-repeat;
     background-size: 100%;
     border-radius: 8px;
     padding: 20px;
+  }
+
+  .card-title {
+    width: 20%;
+    position: relative;
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+    padding: 8px 10px 8px 50px;
+
+    .btn {
+      color: #fff;
+      background-color: #2b6ff0;
+
+      &:hover {
+        background-color: #397af3;
+      }
+    }
+  }
+  .info-border {
+    position: absolute;
+    top: 20px;
+    left: 20px;
+    .info-border-icon {
+      width: 16px;
+      height: 16px;
+      background-image: url('/@/assets/images/overHaul/leafPage/info-card-icon1.svg');
+      background-repeat: no-repeat;
+      background-size: 100%;
+
+    }
+    .info-border-line {
+      width: 1px;
+      height: 95px;
+      border-left: 2px dotted #397af3;
+      margin-left: 7px;
+    }
+  }
+  .info-details {
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+    padding: 8px 0;
+    
+    .label {
+      font-size: 16px;
+      color: #000;
+    }
+
+    .value {
+      font-size: 16px;
+      color: #000;
+    }
+
+    .tag {
+      width: fit-content;
+      height: 24px;
+      padding: 2px 8px;
+      border-radius: 15px;
+      font-size: 12px;
+      background-color: #ff6b6b;
+      color: white;
+    }
+  }
+
+  .card-details {
+    width: 80%;
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+    overflow-y: scroll;
+    gap: 15px;
+  }
+  .card-item {
+    position: relative;
+    display: flex;
+    justify-content: space-between;
+    background-color: #f1f7ff;
+    height: 40px;
+    align-items: center;
+    box-sizing: border-box;
+    flex-shrink: 0;
+    padding: 0 0 0 20px;
+    overflow: hidden;
+
+    .item-cont {
+      color: #000;
+      font-weight: 500;
+      background-color: #f1f7ff;
+      z-index: 1;
+      padding: 0 10px;
+    }
+    .bg-line {
+      position: absolute;
+      width: 100%;
+      height: 1px;
+      border-top: 2px dotted #397af3;
+
+    }
+
+    .bg-icon {
+      width: 15px;
+      height: 15px;
+      position: absolute;
+      left: 10px;
+      background-image: url('/@/assets/images/overHaul/leafPage/info-card-icon.svg');
+      background-repeat: no-repeat;
+      background-size: 100%;
+      z-index: 1;
+    }
+
+  }
+
+// 预警统计样式
+.warning-statistics {
+  background-color: #ffffff;
+  margin-bottom: 20px;
+  padding: 10px 12px;
+  border-radius: 4px;
+
+  .statistics-header {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-bottom: 10px;
+  }
+
+  .title {
+    font-size: 16px;
+    font-weight: bold;
+    color: #333;
+  }
+
+  .btn-group {
+    display: flex;
+    gap: 8px;
+  }
+
+  .btn {
+    color: #2b6ff0;
+    padding: 6px 12px;
+    border: 1px solid #2b6ff0;
+    border-radius: 4px;
+    background-color: #E9F0FE;
+    cursor: pointer;
+    font-size: 12px;
+  }
+
+  .btn:hover {
+    background-color: #f5f5f5;
+  }
+
+  .statistics-content {
+    display: flex;
+    gap: 50px;
+  }
+
+  .stat-item {
+    flex: 1;
+    padding: 16px 50px 10px 90px;
+    text-align: left;
+    position: relative;
+    overflow: hidden;
+    background-image: url('/@/assets/images/overHaul/leafPage/high-risk-bg.png');
+    background-repeat: no-repeat;
+    background-size: 100%;
+
+    .icon {
+      position: absolute;
+      top: 15px;
+      left: 20px;
+    }
+    .text {
+      font-size: 16px;
+      color: #000;
+      font-weight: bold;
+      .text-sub {
+        font-size: 12px;
+        color: #989587;
+      }
+    }
+    .count {
+      font-size: 24px;
+      font-weight: bold;
+    }
 
-    .card-title {
-      width: 20%;
-      position: relative;
-      display: flex;
-      flex-direction: column;
-      justify-content: space-between;
-      padding: 8px 10px 8px 50px;
+    .icon-top{
+      width: 40px;
+      height: 40px;
+      background-image: url('/@/assets/images/overHaul/leafPage/high-risk-icon1.svg');
+      background-repeat: no-repeat;
+      background-size: 100%;;
     }
+    .icon-bottom{
+      width: 40px;
+      height: 20px;
+      background-image: url('/@/assets/images/overHaul/leafPage/high-risk-icon2.png');
+      background-repeat: no-repeat;
+      background-size: 100%;
+      margin-top: -5px;
+    }
+  }
+
+  .stat-item.high-risk {
+    background-image: url('/@/assets/images/overHaul/leafPage/high-risk-bg.png');
+    .icon-top {
+      background-image: url('/@/assets/images/overHaul/rootPage/over-limit-icon.svg');
+    }
+    .icon-bottom {
+      background-image: url('/@/assets/images/overHaul/leafPage/high-risk-icon2.png');
+    }
+    .count {
+      color: #FF0000;
+    }
+  }
+
+  .stat-item.medium-risk {
+    background-image: url('/@/assets/images/overHaul/leafPage/medium-risk-bg.png');
+    .icon-top {
+      background-image: url('/@/assets/images/overHaul/leafPage/medium-risk-icon1.svg');
+    }
+    .icon-bottom {
+      background-image: url('/@/assets/images/overHaul/leafPage/medium-risk-icon2.png');
+    }
+    .count {
+      color: #FF7700;
+    }
+  }
+
+  .stat-item.normal-risk {
+    background-image: url('/@/assets/images/overHaul/leafPage/normal-risk-bg.png');
+    .icon-top {
+      background-image: url('/@/assets/images/overHaul/rootPage/data-break-icon.svg');
+    }
+    .icon-bottom {
+      background-image: url('/@/assets/images/overHaul/leafPage/normal-risk-icon2.png');
+    }
+    .count {
+      color: #D5C702;
+    }
+  }
+
+  .stat-item.low-risk {
+    background-image: url('/@/assets/images/overHaul/leafPage/low-risk-bg.png');
+    .icon-top {
+      background-image: url('/@/assets/images/overHaul/rootPage/data-quality-icon.svg');
+    }
+    .icon-bottom {
+      background-image: url('/@/assets/images/overHaul/leafPage/low-risk-icon2.png');
+    }
+    .count {
+      color: #0070FF;
+    }
+  }
+
+}
+
+
+//  预警详情样式
+.warning-details {
+  background-color: #ffffff;
+  margin-bottom: 20px;
+  padding: 10px 12px;
+  border-radius: 4px;
+}
+
+.details-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 16px;
+
+  .title {
+    font-size: 16px;
+    font-weight: bold;
+    color: #333;
+  }
+
+  .btn-group {
+    display: flex;
+    gap: 8px;
+  }
+}
+
+
+.warning-item {
+  margin-bottom: 20px;
+  background-color: rgba(218, 234, 251, 0.5);
+  border-radius: 8px;
+  padding: 16px;
+}
+
+.item-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding-bottom: 10px;
+  margin-bottom: 16px;
+  border-bottom: 1px solid rgba(43, 111, 240, 0.2); 
+
+  .icon {
+    width: 16px;
+    height: 16px;
+    background-image: url('/@/assets/images/overHaul/leafPage/info-card-icon1.svg');
+    background-repeat: no-repeat;
+    background-size: 100%;
+  }
+  .name {
+    font-size: 16px;
+    font-weight: bold;
+    color: #333;
+    margin: 0 15px 0px 5px;
+  }
+
+  .risk-level {
+    width: fit-content;
+    height: 24px;
+    padding: 2px 8px;
+    border-radius: 15px;
+    font-size: 12px;
+    background-color: #ff6b6b;
+    color: white;
+  }
+
+  
+  .header-left {
+    display: flex;
+    align-items: center;
+  }
+
+  .expand-btn {
+    color: #2b6ff0;
+    display: flex;
+    align-items: center;
+    gap: 4px;
+    padding: 6px 12px;
+    border: 1px solid #2b6ff0;
+    border-radius: 4px;
+    background-color: #E9F0FE;
+    cursor: pointer;
+    font-size: 12px;
+  }
+
+  .expand-btn:hover {
+    color: #1a5cc8;
+  }
+
+  .arrow-icon-wrapper {
+    width: 16px;
+    height: 16px;
+    position: relative;
+    display: inline-block;
+  }
+
+  .arrow-icon {
+    width: 16px;
+    height: 16px;
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    transform: translate(-50%, -50%);
+    background-image: url('/@/assets/images/overHaul/leafPage/icon-down.png');
+    background-repeat: no-repeat;
+    background-size: 100% 100%;
+    transition: transform 0.3s ease;
   }
+
+  .arrow-icon.rotate {
+    transform: translate(-50%, -50%) rotate(180deg);
+  }
+
+
+}
+
+.btn-group {
+  display: flex;
+  gap: 8px;
+}
+
+.btn {
+  color: #2b6ff0;
+  padding: 6px 12px;
+  border: 1px solid #2b6ff0;
+  border-radius: 4px;
+  background-color: #E9F0FE;
+  cursor: pointer;
+  font-size: 12px;
+}
+
+.data-row {
+  display: grid;
+  grid-template-columns: repeat(5, 1fr);
+  gap: 12px;
+  margin-bottom: 8px;
+}
+
+.data-col {
+  width: 100%;
+  height: 50px;
+  position: relative;
+  display: flex;
+  flex-direction: row;
+  align-items: start;
+  justify-content: center ;
+  padding: 0 16px 0 30px;
+  border-radius: 4px;
+  font-size: 12px;
+
+  .col-icon {
+    width: 50px;
+    height: 50px;
+    background-image: url('/@/assets/images/overHaul/rootPage/alarm-icon-bg.png');
+    background-repeat: no-repeat;
+    background-size: 100% 100%;
+    align-items: center;
+    display: flex;
+    justify-content: center;
+
+    .icon-item {
+      width: 25px;
+      height: 25px;
+      background-image: url('/@/assets/images/overHaul/rootPage/alarm-icon-1.svg');
+      background-repeat: no-repeat;
+      background-size: 100% 100%;
+      z-index: 1;
+    }
+    .alarm-icon-1 {
+      background-image: url('@/assets/images/overHaul/rootPage/alarm-icon-1.svg');
+    }
+    .alarm-icon-2 {
+      background-image: url('@/assets/images/overHaul/rootPage/alarm-icon-2.svg');
+    }
+    .alarm-icon-3 {
+      background-image: url('@/assets/images/overHaul/rootPage/alarm-icon-3.svg');
+    }
+    .alarm-icon-4 {
+      background-image: url('@/assets/images/overHaul/rootPage/alarm-icon-4.svg');
+    }
+    .alarm-icon-5 {
+      background-image: url('@/assets/images/overHaul/rootPage/alarm-icon-5.svg');
+    }
+    .alarm-icon-6 {
+      background-image: url('@/assets/images/overHaul/rootPage/alarm-icon-6.svg');
+    }
+    .alarm-icon-7 {
+      background-image: url('@/assets/images/overHaul/rootPage/alarm-icon-7.svg');
+    }
+    .alarm-icon-8 {
+      background-image: url('@/assets/images/overHaul/rootPage/alarm-icon-8.svg');
+    }
+  }
+  .col-cont {
+    width: calc(100% - 50px);
+    height: 50px;
+    background-image: url('/@/assets/images/overHaul/rootPage/alarm-content-bg.png');
+    background-repeat: no-repeat;
+    background-size: 100% 100%;
+    padding: 0 20px;
+  }
+
+  .col-title {
+    color: #000;
+    font-size: 14px;
+    margin-bottom: 5px;
+  }
+  .col-value {
+    color: #000;
+    font-size: 14px;
+
+    .status-dot {
+      width: 8px;
+      height: 8px;
+      border-radius: 50%;
+      display: inline-block;
+    }
+  }
+
+  .col-first-row {
+    grid-column: span 1;
+  }
+  .col-second-row:nth-child(6) {
+    grid-column: 1 / span 3; // 占据第 1 到第 3 列
+  }
+
+  .col-second-row:nth-child(7) {
+    grid-column: span 1; // 占据第 4 列
+  }
+
+  .col-second-row:nth-child(8) {
+    grid-column: span 1; // 占据第 5 列
+  }
+}
+
+.half-year-statistics {
+  background-color: #ffffff;
+  margin-bottom: 20px;
+  padding: 10px 12px;
+  border-radius: 4px;
+
+  .statistics-header {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-bottom: 10px;
+  }
+
+  .title {
+    font-size: 16px;
+    font-weight: bold;
+    color: #333;
+  }
+
+  .statistics-content {
+    display: flex;
+    gap: 20px; // 图表之间的间距
+  }
+
+  .chart-item {
+    flex: 1;
+    min-width: 0;
+    padding: 10px;
+    border-radius: 4px;
+    background-color: #ecf4fd;
+    align-items: center;
+    display: flex;
+    flex-direction: column;
+  }
+
+  .chart-title {
+    min-width: 400px;
+    font-size: 14px;
+    font-weight: bold;
+    color: #333;
+    text-align: center;
+    background-image: url('/@/assets/images/overHaul/rootPage/chart-title-bg.png');
+    background-repeat: no-repeat;
+    background-size: 100% 100%;
+    
+  }
+}
+
+  
 </style>

+ 297 - 0
src/views/dashboard/Overhaul/overhaul.data.ts

@@ -0,0 +1,297 @@
+
+import { BasicColumn } from '/@/components/Table';
+import { h } from 'vue';
+import { StatusColorEnum } from '/@/enums/jeecgEnum';
+
+const riskMap = {
+  '1': '低风险',
+  '2': '一般风险',
+  '3': '较高风险',
+  '4': '高风险',
+};
+const linkMap = {
+  '0': '断线',
+  '1': '正常',
+  '2': '标校',
+};
+// 实时数据相关
+export const columns: BasicColumn[] = [
+  // {
+  //   title: '序号',
+  //   dataIndex: 'orderNo',
+  //   width: 60,
+  // },
+  // {
+  //   title: '区域',
+  //   dataIndex: 'coalSeamName',
+  //   width: 80,
+  // },
+  {
+    title: '矿井名称',
+    dataIndex: 'mineName',
+    width: 200,
+  },
+  {
+    title: '老空区永久密闭名称',
+    dataIndex: 'devicePos',
+    width: 200,
+  },
+  {
+    title: '所属煤层',
+    dataIndex: 'coalSeamName',
+    width: 100,
+  },
+  {
+    title: '自燃倾向性',
+    dataIndex: 'coalSeamLevel',
+    width: 100,
+  },
+  {
+    title: '瓦斯等级',
+    dataIndex: 'gasLevelName',
+    width: 100,
+  },
+  {
+    title: '生产状态',
+    dataIndex: 'gjMineStatus',
+    width: 100,
+    // customRender({ text }) {
+    //   // 从动态映射取值,兜底未知状态
+    //   const label = dictMap.find((item) => item.value == text)?.label || '-';
+    //   // 渲染带颜色的文字
+    //   return h(
+    //     'span',
+    //     {
+    //       color: get({ '0': StatusColorEnum.green, '1': StatusColorEnum.blue }, text),
+    //     },
+    //     label
+    //   );
+    // },
+  },
+  {
+    title: '预警等级',
+    dataIndex: 'alarmLevel',
+    width: 100,
+    customRender({ record }) {
+      return alarmCellRender(record, (r) => riskMap[r.alarmLevel] || r.alarmLevel);
+    },
+  },
+  {
+    title: '闭内自燃发火隐患等级',
+    dataIndex: 'fireAlarm',
+    width: 100,
+    customRender({ record }) {
+      return alarmCellRender(record.fireAlarm);
+    },
+  },
+  {
+    title: '闭外自燃发火隐患等级',
+    dataIndex: 'fireAlarmOut',
+    width: 100,
+    customRender({ record }) {
+      return alarmCellRender(record.fireAlarmOut);
+    },
+  },
+  {
+    title: '爆炸预警等级',
+    dataIndex: 'alarmLevel',
+    width: 100,
+    customRender({ record }) {
+      return alarmCellRender(record.explosionAlarm);
+    },
+  },
+  {
+    title: '压差隐患等级',
+    dataIndex: 'sourcePressureAlarm',
+    width: 100,
+    customRender({ record }) {
+      return alarmCellRender(record.sourcePressureAlarm);
+    },
+  },
+  {
+    title: '是否漏风',
+    dataIndex: 'leakageAlarm',
+    width: 100,
+    customRender({ record }) {
+      // return alarmTextRender(record.leakageAlarm?.alarmLevel, record.leakageAlarm?.split('-')[0]);
+      return alarmCellRender(record.leakageAlarm, (r) => r.alarmName.split('-')[1]);
+    },
+  },
+  {
+    title: '密闭启封判定',
+    dataIndex: 'unsealAlarm',
+    width: 100,
+    customRender({ record }) {
+      return alarmCellRender(record.unsealAlarm);
+    },
+  },
+  {
+    title: '设备状态',
+    dataIndex: 'linkStatus',
+    width: 100,
+    customRender({ record }) {
+      return alarmCellRender(
+        record.linkStatus,
+        (r) => linkMap[r],
+        (r) => String(r)
+      );
+    },
+  },
+  {
+    title: '压差(Pa)',
+    dataIndex: 'sourcePressure',
+    width: 100,
+  },
+  {
+    title: 'CO(ppm)',
+    width: 100,
+    children: [
+      {
+        title: '闭内',
+        dataIndex: 'coVal',
+        width: 100,
+      },
+      {
+        title: '闭外',
+        dataIndex: 'coValOut',
+        width: 100,
+      },
+    ],
+  },
+  {
+    title: 'CO2(%)',
+    width: 100,
+    children: [
+      {
+        title: '闭内',
+        dataIndex: 'co2Val',
+        width: 100,
+      },
+      {
+        title: '闭外',
+        dataIndex: 'co2ValOut',
+        width: 100,
+      },
+    ],
+  },
+  {
+    title: 'CH4(%)',
+    width: 100,
+    children: [
+      {
+        title: '闭内',
+        dataIndex: 'ch4Val',
+        width: 100,
+      },
+      {
+        title: '闭外',
+        dataIndex: 'ch4ValOut',
+        width: 100,
+      },
+    ],
+  },
+  {
+    title: 'C2H2(ppm)',
+    width: 100,
+    children: [
+      {
+        title: '闭内',
+        dataIndex: 'c2h2Val',
+        width: 100,
+      },
+      {
+        title: '闭外',
+        dataIndex: 'c2h2ValOut',
+        width: 100,
+      },
+    ],
+  },
+  {
+    title: 'C2H4(ppm)',
+    width: 100,
+    children: [
+      {
+        title: '闭内',
+        dataIndex: 'c2h4Val',
+        width: 100,
+      },
+      {
+        title: '闭外',
+        dataIndex: 'c2h4ValOut',
+        width: 100,
+      },
+    ],
+  },
+  {
+    title: 'O2(%)',
+    width: 100,
+    children: [
+      {
+        title: '闭内',
+        dataIndex: 'o2Val',
+        width: 100,
+      },
+      {
+        title: '闭外',
+        dataIndex: 'o2ValOut',
+        width: 100,
+      },
+    ],
+  },
+  {
+    title: '温度(℃)',
+    width: 100,
+    children: [
+      {
+        title: '闭内',
+        dataIndex: 'temperature',
+        width: 100,
+      },
+      {
+        title: '闭外',
+        dataIndex: 'temperatureOut',
+        width: 100,
+      },
+    ],
+  },
+  // {
+  //   title: '爆炸危险性',
+  //   dataIndex: 'explosionHazard',
+  //   width: 80,
+  // },
+  {
+    title: '更新时间',
+    dataIndex: 'readTime',
+    width: 100,
+  },
+];
+
+function getTagColor(level: string) {
+  switch (level) {
+    case '4':
+      return StatusColorEnum.red;
+    case '3':
+      return StatusColorEnum.gold;
+    case '2':
+      return StatusColorEnum.yellow;
+    case '1':
+      return StatusColorEnum.blue;
+    case '0':
+      return StatusColorEnum.red;
+    default:
+      return 'inhert';
+  }
+}
+
+export function alarmCellRender(
+  record: any,
+  valFn: (record: any) => string = (r) => r.alarmName,
+  lvFn: (record: any) => string = (r) => r.alarmLevel
+) {
+  // if (!record) return h(Tag, { bordered: false, color: 'default' }, () => '-');
+  // return h(Tag, { bordered: false, color: getTagColor(record.alarmLevel) }, () => record.alarmName);
+  if (!record) return h('span', '-');
+  const val = valFn(record);
+  const lv = lvFn(record);
+  return h('span', { style: { color: getTagColor(lv) } }, val);
+}