|
|
@@ -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>
|