瀏覽代碼

[Mod 0000] 修改张家峁系统概览页面样式

wangkeyi 1 周之前
父節點
當前提交
bb19f23571

+ 0 - 0
src/assets/images/vent/home/selfIgnition/select-bg.png → src/assets/images/vent/home/selfIgnition/card-bg.png


二進制
src/assets/images/vent/home/selfIgnition/overall-bar-glow.png


二進制
src/assets/images/vent/home/selfIgnition/overall-label-bg.png


二進制
src/assets/images/vent/home/selfIgnition/risk-bar.png


二進制
src/assets/images/vent/home/selfIgnition/tab-active-bg.png


+ 176 - 144
src/views/vent/home/selfIgnition/components/OverviewView.vue

@@ -3,7 +3,7 @@
     <!-- 左:矿井采空区概览 -->
     <ModuleCommon
       class="overview-module"
-      :show-style="panelShowStyle(20, 105, 334, 436)"
+      :show-style="panelShowStyle(20, 114, 353, 456)"
       :module-data="EMPTY_MODULE_DATA"
       module-name="矿井采空区概览"
       device-type="ignition_goaf_overview"
@@ -24,22 +24,24 @@
     <!-- 左下:安装设备情况 -->
     <ModuleCommon
       class="install-module"
-      :show-style="panelShowStyle(20, 568, 334, 472)"
+      :show-style="panelShowStyle(20, 602, 353, 456)"
       :module-data="EMPTY_MODULE_DATA"
       module-name="安装设备情况"
       device-type="ignition_device_install"
       :data="{}"
       :visible="true"
     >
-      <div class="install-panel">
+      <div class="install-panel" :style="{ '--install-count': devices.length }">
         <div v-for="device in devices" :key="device.name" class="install-item">
           <span class="install-square"></span>
           <span class="install-name">{{ device.name }}</span>
           <span class="install-metric"
-            >安装:<em>{{ device.installed }}套</em></span
+            >安装:<em>{{ device.installed }}</em
+            >套</span
           >
           <span class="install-metric"
-            >运行:<em>{{ device.running }}套</em></span
+            >运行:<em>{{ device.running }}</em
+            >套</span
           >
         </div>
       </div>
@@ -47,7 +49,8 @@
 
     <!-- 中下:整体预警等级 -->
     <ModuleCommon
-      :show-style="panelShowStyle(413, 683, 343, 357)"
+      class="overall-module"
+      :show-style="panelShowStyle(413, 722, 343, 336)"
       :module-data="EMPTY_MODULE_DATA"
       module-name="矿井采空区整体预警等级"
       device-type="ignition_overall_warning"
@@ -56,9 +59,7 @@
     >
       <div class="overall-panel">
         <div class="overall-level" :style="{ color: overall.color }">{{ overall.levelText }} {{ overall.levelName }}</div>
-        <div class="overall-bar">
-          <img src="@/assets/images/vent/home/selfIgnition/risk-bar.png" alt="" />
-        </div>
+        <div class="overall-bar"></div>
         <div class="overall-label">系统采空区总预警</div>
         <div class="overall-total" :style="{ color: overall.color }">{{ overall.total }}</div>
       </div>
@@ -67,7 +68,7 @@
     <!-- 右下:分级预警表 -->
     <ModuleCommon
       class="table-module"
-      :show-style="panelShowStyle(793, 683, 1105, 357)"
+      :show-style="panelShowStyle(793, 722, 1105, 336)"
       :module-data="EMPTY_MODULE_DATA"
       module-name="矿井采空区分级预警"
       device-type="ignition_warning_table"
@@ -84,25 +85,23 @@
             <span class="col-status">状态</span>
           </div>
           <div class="table-body">
-            <div v-for="row in pagedWarnings" :key="row.id" class="table-row">
+            <div v-for="row in warnings" :key="row.id" class="table-row">
               <span class="col-index">{{ row.id }}</span>
               <span class="col-name">{{ row.name }}</span>
               <span class="col-seam">{{ row.seam }}</span>
               <span class="col-level">{{ row.level }}</span>
               <span class="col-status">{{ row.status }}</span>
             </div>
+            <div v-for="n in emptyRowCount" :key="`empty-${n}`" class="table-row table-row-empty"></div>
           </div>
         </div>
-        <div class="table-pager">
-          <i v-for="pageNo in totalPages" :key="pageNo" :class="{ active: pageNo === currentPage }" @click="currentPage = pageNo"></i>
-        </div>
       </div>
     </ModuleCommon>
   </div>
 </template>
 
 <script lang="ts" setup>
-  import { computed, ref } from 'vue';
+  import { computed } from 'vue';
   import ModuleCommon from '../../configurable/components/ModuleCommon.vue';
   import { EMPTY_MODULE_DATA, panelShowStyle } from '../utils';
   import type { DeviceInstallItem, GoafOverviewItem, OverallWarning, WarningRow } from '../data';
@@ -114,15 +113,8 @@
     warnings: WarningRow[];
   }>();
 
-  const PAGE_SIZE = 3;
-  const currentPage = ref(1);
-
-  const totalPages = computed(() => Math.max(1, Math.ceil(props.warnings.length / PAGE_SIZE)));
-
-  const pagedWarnings = computed(() => {
-    const start = (currentPage.value - 1) * PAGE_SIZE;
-    return props.warnings.slice(start, start + PAGE_SIZE);
-  });
+  // 表体固定 5 行视口,数据不足时用空行补足;超过 5 行时在表体内部滚动
+  const emptyRowCount = computed(() => Math.max(0, 5 - props.warnings.length));
 </script>
 
 <style lang="less" scoped>
@@ -132,17 +124,37 @@
   }
 
   :deep(.overview-module .box1-center),
-  :deep(.install-module .box1-center) {
+  :deep(.install-module .box1-center),
+  :deep(.overall-module .box1-center),
+  :deep(.table-module .box1-center) {
     height: calc(100% - 35px) !important;
   }
 
   .overview-panel {
     display: flex;
     flex-direction: column;
-    gap: 34px;
+    gap: 24px;
     height: 100%;
-    padding: 35px 9px 0 18px;
+    padding: 16px 10px;
     box-sizing: border-box;
+    overflow-x: hidden;
+    overflow-y: auto;
+    scrollbar-gutter: stable;
+    scrollbar-width: thin;
+    scrollbar-color: rgba(61, 246, 255, 0.75) transparent;
+
+    &::-webkit-scrollbar {
+      width: 8px;
+    }
+
+    &::-webkit-scrollbar-track {
+      background: transparent;
+    }
+
+    &::-webkit-scrollbar-thumb {
+      border-radius: 4px;
+      background: linear-gradient(180deg, #3df6ff 0%, #0d7fc1 100%);
+    }
   }
 
   .goaf-item {
@@ -150,30 +162,31 @@
     display: flex;
     align-items: center;
     flex: none;
-    height: 46px;
-    padding: 0 14px 0 56px;
+    height: 48px;
+    padding: 0 14px 0 60px;
     box-sizing: border-box;
-    border: 1px solid rgba(61, 246, 255, 0.5);
+    border: none;
     border-radius: 5px;
-    background: linear-gradient(90deg, #07304f 0%, #0a3b5f 42%, #0e4e77 100%);
-    box-shadow: inset 0 0 16px rgba(61, 246, 255, 0.08);
+    overflow: hidden;
+    background-color: #072b49;
+    background-image: url('@/assets/images/vent/home/selfIgnition/card-bg.png');
+    background-repeat: no-repeat;
+    background-size: 100% 100%;
   }
 
   .goaf-icon {
     position: absolute;
-    left: 4px;
-    top: 50%;
-    width: 42px;
-    height: 42px;
-    margin-top: -21px;
+    left: 2px;
+    width: 50px;
+    height: 50px;
     background: url('@/assets/images/vent/home/selfIgnition/list-icon-bg.png') no-repeat center / 100% 100%;
     display: flex;
     align-items: center;
     justify-content: center;
 
     img {
-      width: 21px;
-      height: 14px;
+      width: 20px;
+      height: 15px;
     }
   }
 
@@ -181,18 +194,21 @@
     flex: 1;
     color: #fff;
     font-size: 16px;
-    font-weight: 500;
-    letter-spacing: 0.5px;
+    font-weight: 600;
+    letter-spacing: 0;
   }
 
   .goaf-value {
-    color: #fff;
-    font-family: electronicFont, sans-serif;
-    font-size: 26px;
+    display: inline-block;
+    color: #eaffff;
+    font-family: Arial, sans-serif;
+    font-size: 19px;
+    font-weight: 800;
+    font-style: italic;
     line-height: 1;
-    text-shadow:
-      0 0 10px rgba(255, 255, 255, 0.6),
-      0 0 20px rgba(61, 246, 255, 0.6);
+    letter-spacing: 1px;
+    transform: scaleX(1.2);
+    transform-origin: right center;
   }
 
   .install-panel {
@@ -200,16 +216,33 @@
     display: flex;
     flex-direction: column;
     height: 100%;
-    padding: 24px 9px 0 18px;
+    padding: 0;
     box-sizing: border-box;
+    overflow-x: hidden;
+    overflow-y: auto;
+    scrollbar-width: thin;
+    scrollbar-color: rgba(61, 246, 255, 0.75) transparent;
+
+    &::-webkit-scrollbar {
+      width: 8px;
+    }
+
+    &::-webkit-scrollbar-track {
+      background: transparent;
+    }
+
+    &::-webkit-scrollbar-thumb {
+      border-radius: 4px;
+      background: linear-gradient(180deg, #3df6ff 0%, #0d7fc1 100%);
+    }
 
     &::before {
       content: '';
       position: absolute;
-      top: 24px;
-      bottom: 0;
-      left: 19px;
+      top: 0;
+      left: 18px;
       width: 1px;
+      height: calc(var(--install-count, 5) * 71px);
       background: linear-gradient(180deg, rgba(61, 246, 255, 0), rgba(61, 246, 255, 0.7), rgba(61, 246, 255, 0));
     }
   }
@@ -218,18 +251,28 @@
     position: relative;
     display: flex;
     align-items: center;
-    flex: 1;
+    flex: none;
+    height: 71px;
     min-height: 0;
     gap: 8px;
-    padding: 0 4px 0 26px;
+    padding: 0 4px 0 39px;
     box-sizing: border-box;
-    border-bottom: 1px solid rgba(61, 246, 255, 0.15);
     background: transparent;
+
+    &:not(:last-child)::after {
+      content: '';
+      position: absolute;
+      left: 18px;
+      right: 16px;
+      bottom: 0;
+      height: 1px;
+      background: rgba(61, 246, 255, 0.18);
+    }
   }
 
   .install-square {
     position: absolute;
-    left: 0;
+    left: 14px;
     top: 50%;
     width: 10px;
     height: 10px;
@@ -239,23 +282,32 @@
   }
 
   .install-name {
-    width: 96px;
+    width: 103px;
     flex: none;
     color: #fff;
-    font-size: 15px;
+    font-size: 16px;
+    font-weight: 600;
   }
 
   .install-metric {
     flex: 1;
-    color: #d9f7ff;
-    font-size: 14px;
+    color: #eefcff;
+    font-size: 15px;
+    font-weight: 500;
     white-space: nowrap;
 
+    &:nth-of-type(3) {
+      flex: 0 0 102px;
+    }
+
     em {
+      margin-left: -2px;
       color: #3df6ff;
-      font-style: normal;
-      font-size: 16px;
-      text-shadow: 0 0 8px rgba(61, 246, 255, 0.55);
+      font-family: Arial, sans-serif;
+      font-style: italic;
+      font-size: 18px;
+      font-weight: 700;
+      text-shadow: 0 0 5px rgba(61, 246, 255, 0.45);
     }
   }
 
@@ -263,91 +315,85 @@
     display: flex;
     flex-direction: column;
     align-items: center;
-    justify-content: center;
+    justify-content: flex-start;
     height: 100%;
-    padding: 0 14px;
+    padding: 32px 14px 0;
     box-sizing: border-box;
   }
 
   .overall-level {
-    font-size: 40px;
+    font-size: 42px;
     font-weight: 500;
-    line-height: 1.15;
+    line-height: 42px;
     letter-spacing: 4px;
     white-space: nowrap;
-    text-shadow:
-      0 0 16px currentColor,
-      0 0 30px rgba(255, 157, 28, 0.35);
+    text-shadow: 0 0 8px rgba(255, 157, 28, 0.28);
   }
 
   .overall-bar {
-    position: relative;
     width: 278px;
-    height: 38px;
-    margin-top: 33px;
-    clip-path: polygon(2% 0, 98% 0, 89% 100%, 11% 100%);
-    filter: drop-shadow(0 6px 12px rgba(61, 246, 255, 0.3));
-
-    img {
-      width: 100%;
-      height: 100%;
-      object-fit: fill;
-      opacity: 0.78;
-    }
-
-    &::after {
-      content: '';
-      position: absolute;
-      top: 0;
-      left: 8%;
-      right: 8%;
-      height: 2px;
-      background: linear-gradient(90deg, transparent, #ff9d1c, #ffd15c, #ff9d1c, transparent);
-      box-shadow: 0 0 10px rgba(255, 157, 28, 0.65);
-    }
+    height: 25px;
+    margin-top: 21px;
+    background: url('@/assets/images/vent/home/selfIgnition/overall-bar-glow.png') no-repeat center bottom / 100% 100%;
   }
 
   .overall-label {
-    position: relative;
-    margin-top: 27px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    width: 285px;
+    height: 56px;
+    margin-top: 30px;
     color: #fff;
     font-size: 17px;
+    line-height: 1;
     letter-spacing: 1px;
-
-    &::before {
-      content: '';
-      position: absolute;
-      left: 50%;
-      top: -12px;
-      width: 260px;
-      height: 1px;
-      margin-left: -130px;
-      background: linear-gradient(90deg, transparent, rgba(61, 246, 255, 0.85), transparent);
-      box-shadow: 0 0 8px rgba(61, 246, 255, 0.7);
-    }
+    background: url('@/assets/images/vent/home/selfIgnition/overall-label-bg.png') no-repeat center / 100% 100%;
   }
 
   .overall-total {
-    margin-top: 20px;
-    font-family: electronicFont, sans-serif;
-    font-size: 54px;
+    display: inline-block;
+    margin-top: 24px;
+    font-family: 'douyuFont', sans-serif;
+    font-size: 36px;
     line-height: 1;
     text-shadow: 0 0 14px currentColor;
+    letter-spacing: 6px;
+    transform: translateX(-3px) scaleX(1.45);
+    transform-origin: center;
   }
 
   .warning-table-panel {
     display: flex;
     flex-direction: column;
     height: 100%;
-    padding: 4px 22px 8px;
+    padding: 23px 22px 0;
     box-sizing: border-box;
   }
 
   .warning-table {
-    flex: 1;
+    flex: none;
+    height: 251px;
     min-height: 0;
+    box-sizing: border-box;
+    overflow-y: auto;
     border: 1px solid rgba(61, 246, 255, 0.55);
     background: rgba(6, 30, 52, 0.2);
+    scrollbar-width: thin;
+    scrollbar-color: rgba(61, 246, 255, 0.75) transparent;
+
+    &::-webkit-scrollbar {
+      width: 8px;
+    }
+
+    &::-webkit-scrollbar-track {
+      background: transparent;
+    }
+
+    &::-webkit-scrollbar-thumb {
+      border-radius: 4px;
+      background: linear-gradient(180deg, #3df6ff 0%, #0d7fc1 100%);
+    }
   }
 
   .table-head,
@@ -358,19 +404,25 @@
   }
 
   .table-head {
-    height: 48px;
+    position: sticky;
+    top: 0;
+    z-index: 1;
+    height: 39px;
+    box-sizing: border-box;
     color: #3df6ff;
     font-size: 15px;
     font-weight: 500;
     letter-spacing: 1px;
-    background: linear-gradient(180deg, #0d3b58 0%, #0a2c48 100%);
+    background: #062441;
+    border-bottom: 1px solid rgba(61, 246, 255, 0.5);
   }
 
   .table-row {
-    height: 54px;
+    height: 42px;
+    box-sizing: border-box;
     color: #fff;
     font-size: 15px;
-    background: #0b3355;
+    background: #093354;
     border-top: 1px solid rgba(61, 246, 255, 0.14);
 
     &:nth-child(even) {
@@ -378,24 +430,28 @@
     }
   }
 
+  .table-row-empty {
+    color: transparent;
+  }
+
   .col-index {
-    width: 17%;
+    width: 16.7%;
   }
 
   .col-name {
-    width: 24%;
+    width: 22.9%;
   }
 
   .col-seam {
-    width: 16%;
+    width: 15.5%;
   }
 
   .col-level {
-    width: 21%;
+    width: 24.6%;
   }
 
   .col-status {
-    width: 22%;
+    width: 14.6%;
   }
 
   /* 表格面板较宽,使用短边框图拉伸,保证顶部/底部装饰点居中 */
@@ -408,28 +464,4 @@
     --image-box1-bottom: url('@/assets/images/vent/border/box1-bottom.png');
     background-image: var(--image-box1-bottom) !important;
   }
-
-  .table-pager {
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    gap: 8px;
-    height: 24px;
-    flex: none;
-
-    i {
-      width: 6px;
-      height: 6px;
-      border-radius: 1px;
-      background: rgba(61, 246, 255, 0.35);
-      cursor: pointer;
-      transition: all 0.2s;
-
-      &.active {
-        width: 16px;
-        background: #3df6ff;
-        box-shadow: 0 0 8px rgba(61, 246, 255, 0.85);
-      }
-    }
-  }
 </style>

+ 1 - 1
src/views/vent/home/selfIgnition/components/PanelSelect.vue

@@ -111,7 +111,7 @@
     box-sizing: border-box;
     border: 1px solid rgba(61, 246, 255, 0.42);
     border-radius: 4px;
-    background: url('@/assets/images/vent/home/selfIgnition/select-bg.png') no-repeat center / 100% 100%;
+    background: url('@/assets/images/vent/home/selfIgnition/card-bg.png') no-repeat center / 100% 100%;
     color: #fff;
     font-size: 14px;
     cursor: pointer;

+ 3 - 0
src/views/vent/home/selfIgnition/data.ts

@@ -104,6 +104,7 @@ export const GOAF_OVERVIEW: GoafOverviewItem[] = [
   { label: '回撤工作面采空区数', value: 4 },
   { label: '回采工作面采空区数', value: 12 },
   { label: '停产工作面采空区数', value: 6 },
+  { label: '停产工作面采空区数', value: 6 },
 ];
 
 export const INSTALLED_DEVICES: DeviceInstallItem[] = [
@@ -112,6 +113,8 @@ export const INSTALLED_DEVICES: DeviceInstallItem[] = [
   { name: '密闭监测', installed: 15, running: 13 },
   { name: '风速传感器', installed: 15, running: 13 },
   { name: '风量传感器', installed: 15, running: 13 },
+  { name: '风速传感器', installed: 15, running: 13 },
+  { name: '风量传感器', installed: 15, running: 13 },
 ];
 
 export const OVERALL_WARNING: OverallWarning = {

+ 10 - 11
src/views/vent/home/selfIgnition/index.vue

@@ -143,7 +143,7 @@
     height: 100%;
     overflow: hidden;
     color: #fff;
-    background: linear-gradient(180deg, #0a2037 0%, #09172c 46%, #062441 100%);
+    background: #09172c;
   }
 
   .ignition-stage {
@@ -189,7 +189,7 @@
     display: flex;
     align-items: center;
     justify-content: center;
-    gap: 6px;
+    gap: 12px;
     width: 579px;
     height: 68px;
     padding: 13px 16px 9px;
@@ -202,9 +202,10 @@
     display: flex;
     align-items: center;
     justify-content: center;
-    width: 158px;
+    width: 162px;
     height: 40px;
-    border: 1px solid rgba(61, 246, 255, 0.14);
+    box-sizing: border-box;
+    border: none;
     background: url('@/assets/images/vent/home/selfIgnition/tab-item-bg.png') no-repeat center / 100% 100%;
     color: rgba(255, 255, 255, 0.86);
     font-size: 15px;
@@ -218,23 +219,20 @@
 
     &:hover {
       color: #fff;
-      border-color: rgba(61, 246, 255, 0.4);
     }
 
     &.active {
-      border-color: rgba(61, 246, 255, 0.55);
-      background: linear-gradient(180deg, #2a5985 0%, #1d4773 100%);
-      color: #fff;
-      box-shadow: inset 0 0 12px rgba(61, 246, 255, 0.18);
+      background: url('@/assets/images/vent/home/selfIgnition/tab-active-bg.png') no-repeat center / 100% 100%;
     }
   }
 
   :deep(.box1-top .title) {
     color: #fff;
     font-size: 16px;
-    font-weight: 600;
+    font-weight: 700;
     letter-spacing: 1px;
     text-shadow: 0 0 8px rgba(61, 246, 255, 0.35);
+    transform: translateY(2px);
   }
 
   :deep(.box1-center > .box-container) {
@@ -248,7 +246,8 @@
   html.self-ignition-page {
     .jeecg-layout-header,
     .bottom-side,
-    .menu-show-icon {
+    .menu-show-icon,
+    .ai-assistant-float {
       display: none !important;
     }
   }