|
@@ -1,5 +1,5 @@
|
|
|
<template>
|
|
<template>
|
|
|
- <div class="page-container">
|
|
|
|
|
|
|
+ <div class="min-h-screen p-4 bg-[#3a6fa3] flex flex-col">
|
|
|
<el-row :gutter="16" class="summary">
|
|
<el-row :gutter="16" class="summary">
|
|
|
<!-- 原有的统计卡片部分保持不变 -->
|
|
<!-- 原有的统计卡片部分保持不变 -->
|
|
|
<el-col v-loading="loading" :sm="3" :xs="24">
|
|
<el-col v-loading="loading" :sm="3" :xs="24">
|
|
@@ -96,7 +96,7 @@
|
|
|
gap: 6px;
|
|
gap: 6px;
|
|
|
"
|
|
"
|
|
|
>
|
|
>
|
|
|
- <div ref="statusChartRef" style="width: 100%; max-width: 200px; height: 170px"></div>
|
|
|
|
|
|
|
+ <div ref="statusChartRef" style="width: 100%; height: 170px; max-width: 200px"></div>
|
|
|
<div class="text-[12px] h-[100px] w-[90%] flex flex-col justify-between items-center">
|
|
<div class="text-[12px] h-[100px] w-[90%] flex flex-col justify-between items-center">
|
|
|
<div v-for="item in legendData" :key="item.name" class="flex">
|
|
<div v-for="item in legendData" :key="item.name" class="flex">
|
|
|
<div class="flex items-center gap-1">
|
|
<div class="flex items-center gap-1">
|
|
@@ -123,25 +123,23 @@
|
|
|
</template>
|
|
</template>
|
|
|
<div
|
|
<div
|
|
|
style="
|
|
style="
|
|
|
- min-height: 295px;
|
|
|
|
|
display: flex;
|
|
display: flex;
|
|
|
|
|
+ min-height: 295px;
|
|
|
flex-direction: column;
|
|
flex-direction: column;
|
|
|
align-items: center;
|
|
align-items: center;
|
|
|
gap: 8px;
|
|
gap: 8px;
|
|
|
"
|
|
"
|
|
|
>
|
|
>
|
|
|
- <div ref="domesticChartRef" style="width: 100%; max-width: 420px; height: 200px"></div>
|
|
|
|
|
|
|
+ <div ref="domesticChartRef" style="width: 100%; height: 200px; max-width: 420px"></div>
|
|
|
<div
|
|
<div
|
|
|
class="domestic-legend"
|
|
class="domestic-legend"
|
|
|
style="
|
|
style="
|
|
|
|
|
+ display: flex;
|
|
|
width: 100%;
|
|
width: 100%;
|
|
|
max-width: 520px;
|
|
max-width: 520px;
|
|
|
- display: flex;
|
|
|
|
|
|
|
+ font-size: 12px;
|
|
|
flex-wrap: wrap;
|
|
flex-wrap: wrap;
|
|
|
-
|
|
|
|
|
gap: 1px;
|
|
gap: 1px;
|
|
|
-
|
|
|
|
|
- font-size: 12px;
|
|
|
|
|
"
|
|
"
|
|
|
>
|
|
>
|
|
|
<div
|
|
<div
|
|
@@ -163,12 +161,12 @@
|
|
|
<span
|
|
<span
|
|
|
class="legend-name"
|
|
class="legend-name"
|
|
|
style="
|
|
style="
|
|
|
- color: #fff;
|
|
|
|
|
|
|
+ display: inline-block;
|
|
|
max-width: 150px;
|
|
max-width: 150px;
|
|
|
overflow: hidden;
|
|
overflow: hidden;
|
|
|
|
|
+ color: #fff;
|
|
|
text-overflow: ellipsis;
|
|
text-overflow: ellipsis;
|
|
|
white-space: nowrap;
|
|
white-space: nowrap;
|
|
|
- display: inline-block;
|
|
|
|
|
"
|
|
"
|
|
|
>{{ item.dept }}</span
|
|
>{{ item.dept }}</span
|
|
|
>
|
|
>
|
|
@@ -178,7 +176,8 @@
|
|
|
</el-card>
|
|
</el-card>
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<el-col :span="8" :xs="24">
|
|
<el-col :span="8" :xs="24">
|
|
|
- <el-card class="chart-card" shadow="never">
|
|
|
|
|
|
|
+ <WorkloadChart />
|
|
|
|
|
+ <!-- <el-card class="chart-card" shadow="never">
|
|
|
<template #header>
|
|
<template #header>
|
|
|
<div class="flex items-center justify-between">
|
|
<div class="flex items-center justify-between">
|
|
|
<span class="text-base font-medium" style="color: #b6c8da">{{
|
|
<span class="text-base font-medium" style="color: #b6c8da">{{
|
|
@@ -187,14 +186,22 @@
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
<div ref="qxRef" class="h-[290px]"></div>
|
|
<div ref="qxRef" class="h-[290px]"></div>
|
|
|
- </el-card>
|
|
|
|
|
|
|
+ </el-card> -->
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ </el-row>
|
|
|
|
|
+ <el-row :gutter="16" class="mb-4">
|
|
|
|
|
+ <el-col class="mb-4" :span="12" :xs="24">
|
|
|
|
|
+ <AvailabilityChart />
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ <el-col class="mb-4" :span="12" :xs="24">
|
|
|
|
|
+ <ExceptionChart />
|
|
|
</el-col>
|
|
</el-col>
|
|
|
</el-row>
|
|
</el-row>
|
|
|
-
|
|
|
|
|
<el-row :gutter="16" class="mb-4">
|
|
<el-row :gutter="16" class="mb-4">
|
|
|
- <!-- 备件更换情况部分保持不变 -->
|
|
|
|
|
<el-col :span="12" :xs="24">
|
|
<el-col :span="12" :xs="24">
|
|
|
- <el-card class="chart-card" shadow="never">
|
|
|
|
|
|
|
+ <UtilizationChart />
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ <!-- <el-card class="chart-card" shadow="never">
|
|
|
<template #header>
|
|
<template #header>
|
|
|
<div style="display: flex; flex-direction: row; justify-content: space-between">
|
|
<div style="display: flex; flex-direction: row; justify-content: space-between">
|
|
|
<span class="text-base font-medium" style="color: #b6c8da">{{
|
|
<span class="text-base font-medium" style="color: #b6c8da">{{
|
|
@@ -214,37 +221,37 @@
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
- <!-- 添加两个卡片 -->
|
|
|
|
|
- <!-- <div class="flex justify-between mb-2">-->
|
|
|
|
|
- <!-- <el-card class="stat-card">-->
|
|
|
|
|
- <!-- <div class="flex flex-row justify-evenly">-->
|
|
|
|
|
- <!-- <div>-->
|
|
|
|
|
- <!-- <Icon icon="fa-solid:award" size="30" color="blue" />-->
|
|
|
|
|
- <!-- </div>-->
|
|
|
|
|
- <!-- <div class="flex flex-col items-center">-->
|
|
|
|
|
- <!-- <span class="text-sm " style="color: #101010">{{t('stat.spareCount')}}</span>-->
|
|
|
|
|
- <!-- <span class="text-lg font-bold">{{ totalMaterialCount }}</span>-->
|
|
|
|
|
- <!-- </div>-->
|
|
|
|
|
- <!-- </div>-->
|
|
|
|
|
- <!-- </el-card>-->
|
|
|
|
|
- <!-- <el-card class="stat-card">-->
|
|
|
|
|
- <!-- <div class="flex flex-row justify-evenly">-->
|
|
|
|
|
- <!-- <div>-->
|
|
|
|
|
- <!-- <Icon icon="fa-solid:yen-sign" size="30" color="orange" />-->
|
|
|
|
|
- <!-- </div>-->
|
|
|
|
|
- <!-- <div class="flex flex-col items-center">-->
|
|
|
|
|
- <!-- <span class="text-sm " style="color: #101010">{{t('stat.spareAmount')}}</span>-->
|
|
|
|
|
- <!-- <span class="text-lg font-bold">{{ totalMaterialCost }}</span>-->
|
|
|
|
|
- <!-- </div>-->
|
|
|
|
|
- <!-- </div>-->
|
|
|
|
|
- <!-- </el-card>-->
|
|
|
|
|
- <!-- </div>-->
|
|
|
|
|
- <!-- <div ref="sparePartRef" class="h-[330px]"></div>-->
|
|
|
|
|
|
|
+
|
|
|
<div class="table-container">
|
|
<div class="table-container">
|
|
|
<div ref="utilizationRef" style="width: 100%; height: 360px"></div>
|
|
<div ref="utilizationRef" style="width: 100%; height: 360px"></div>
|
|
|
</div>
|
|
</div>
|
|
|
- </el-card>
|
|
|
|
|
- </el-col>
|
|
|
|
|
|
|
+ </el-card> -->
|
|
|
|
|
+ <!-- 添加两个卡片 -->
|
|
|
|
|
+ <!-- <div class="flex justify-between mb-2">-->
|
|
|
|
|
+ <!-- <el-card class="stat-card">-->
|
|
|
|
|
+ <!-- <div class="flex flex-row justify-evenly">-->
|
|
|
|
|
+ <!-- <div>-->
|
|
|
|
|
+ <!-- <Icon icon="fa-solid:award" size="30" color="blue" />-->
|
|
|
|
|
+ <!-- </div>-->
|
|
|
|
|
+ <!-- <div class="flex flex-col items-center">-->
|
|
|
|
|
+ <!-- <span class="text-sm " style="color: #101010">{{t('stat.spareCount')}}</span>-->
|
|
|
|
|
+ <!-- <span class="text-lg font-bold">{{ totalMaterialCount }}</span>-->
|
|
|
|
|
+ <!-- </div>-->
|
|
|
|
|
+ <!-- </div>-->
|
|
|
|
|
+ <!-- </el-card>-->
|
|
|
|
|
+ <!-- <el-card class="stat-card">-->
|
|
|
|
|
+ <!-- <div class="flex flex-row justify-evenly">-->
|
|
|
|
|
+ <!-- <div>-->
|
|
|
|
|
+ <!-- <Icon icon="fa-solid:yen-sign" size="30" color="orange" />-->
|
|
|
|
|
+ <!-- </div>-->
|
|
|
|
|
+ <!-- <div class="flex flex-col items-center">-->
|
|
|
|
|
+ <!-- <span class="text-sm " style="color: #101010">{{t('stat.spareAmount')}}</span>-->
|
|
|
|
|
+ <!-- <span class="text-lg font-bold">{{ totalMaterialCost }}</span>-->
|
|
|
|
|
+ <!-- </div>-->
|
|
|
|
|
+ <!-- </div>-->
|
|
|
|
|
+ <!-- </el-card>-->
|
|
|
|
|
+ <!-- </div>-->
|
|
|
|
|
+ <!-- <div ref="sparePartRef" class="h-[330px]"></div>-->
|
|
|
<!-- 月度工作量表 -->
|
|
<!-- 月度工作量表 -->
|
|
|
<el-col :span="12" :xs="24">
|
|
<el-col :span="12" :xs="24">
|
|
|
<el-card class="chart-card" shadow="never">
|
|
<el-card class="chart-card" shadow="never">
|
|
@@ -353,6 +360,12 @@
|
|
|
</el-col>
|
|
</el-col>
|
|
|
<!-- 月度工作量表结束 -->
|
|
<!-- 月度工作量表结束 -->
|
|
|
</el-row>
|
|
</el-row>
|
|
|
|
|
+ <ConstructionBriefing />
|
|
|
|
|
+ <!-- <el-row :gutter="16" class="mb-4">
|
|
|
|
|
+ <el-col :span="24" :xs="24">
|
|
|
|
|
+
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ </el-row> -->
|
|
|
</div>
|
|
</div>
|
|
|
<el-dialog
|
|
<el-dialog
|
|
|
v-model="teamDialogVisible"
|
|
v-model="teamDialogVisible"
|
|
@@ -511,6 +524,11 @@ import { CanvasRenderer } from 'echarts/renderers'
|
|
|
import { IotStatApi } from '@/api/pms/stat'
|
|
import { IotStatApi } from '@/api/pms/stat'
|
|
|
import { ref, onMounted, computed, watch, nextTick, reactive } from 'vue'
|
|
import { ref, onMounted, computed, watch, nextTick, reactive } from 'vue'
|
|
|
import { useLocaleStore } from '@/store/modules/locale'
|
|
import { useLocaleStore } from '@/store/modules/locale'
|
|
|
|
|
+import WorkloadChart from './rdkb/workload.vue'
|
|
|
|
|
+import UtilizationChart from './rdkb/utilization.vue'
|
|
|
|
|
+import AvailabilityChart from './rdkb/availability.vue'
|
|
|
|
|
+import ExceptionChart from './rdkb/exception.vue'
|
|
|
|
|
+import ConstructionBriefing from './rdkb/constructionBriefing.vue'
|
|
|
|
|
|
|
|
/** 会员统计 */
|
|
/** 会员统计 */
|
|
|
defineOptions({ name: 'IotRdStat' })
|
|
defineOptions({ name: 'IotRdStat' })
|
|
@@ -640,6 +658,14 @@ const fill = ref({
|
|
|
filledCount: undefined,
|
|
filledCount: undefined,
|
|
|
unfilledCount: undefined
|
|
unfilledCount: undefined
|
|
|
})
|
|
})
|
|
|
|
|
+const abnormalDevice = ref({
|
|
|
|
|
+ total: undefined,
|
|
|
|
|
+ today: undefined
|
|
|
|
|
+})
|
|
|
|
|
+const outliers = ref({
|
|
|
|
|
+ total: undefined,
|
|
|
|
|
+ today: undefined
|
|
|
|
|
+})
|
|
|
const inspect = ref({
|
|
const inspect = ref({
|
|
|
finished: 0,
|
|
finished: 0,
|
|
|
todo: 0
|
|
todo: 0
|
|
@@ -1458,27 +1484,27 @@ const projectDataRowClick = (row, column, event) => {
|
|
|
const domesticData = ref<any[]>([
|
|
const domesticData = ref<any[]>([
|
|
|
{
|
|
{
|
|
|
index: 1,
|
|
index: 1,
|
|
|
- dept: '公滩',
|
|
|
|
|
|
|
+ dept: '公摊',
|
|
|
count: 13,
|
|
count: 13,
|
|
|
orig_value: 1506.88,
|
|
orig_value: 1506.88,
|
|
|
net_value: 559.95,
|
|
net_value: 559.95,
|
|
|
- orig_ratio: '3%'
|
|
|
|
|
|
|
+ orig_ratio: '2.77%'
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
index: 2,
|
|
index: 2,
|
|
|
dept: '新疆项目部',
|
|
dept: '新疆项目部',
|
|
|
count: 58,
|
|
count: 58,
|
|
|
orig_value: 5118.1,
|
|
orig_value: 5118.1,
|
|
|
- net_value: 1182.91,
|
|
|
|
|
- orig_ratio: '11%'
|
|
|
|
|
|
|
+ net_value: 1182.49,
|
|
|
|
|
+ orig_ratio: '9.40%'
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
index: 3,
|
|
index: 3,
|
|
|
dept: '青海项目',
|
|
dept: '青海项目',
|
|
|
count: 33,
|
|
count: 33,
|
|
|
- orig_value: 14082.33,
|
|
|
|
|
- net_value: 736.94,
|
|
|
|
|
- orig_ratio: '29%'
|
|
|
|
|
|
|
+ orig_value: 7004.23,
|
|
|
|
|
+ net_value: 1758.8,
|
|
|
|
|
+ orig_ratio: '12.86%'
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
index: 4,
|
|
index: 4,
|
|
@@ -1486,55 +1512,55 @@ const domesticData = ref<any[]>([
|
|
|
count: 49,
|
|
count: 49,
|
|
|
orig_value: 5273.54,
|
|
orig_value: 5273.54,
|
|
|
net_value: 683.58,
|
|
net_value: 683.58,
|
|
|
- orig_ratio: '11%'
|
|
|
|
|
|
|
+ orig_ratio: '9.68%'
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
index: 5,
|
|
index: 5,
|
|
|
dept: '西南连油项目部',
|
|
dept: '西南连油项目部',
|
|
|
count: 24,
|
|
count: 24,
|
|
|
- orig_value: 4070.12,
|
|
|
|
|
- net_value: 743.99,
|
|
|
|
|
- orig_ratio: '8%'
|
|
|
|
|
|
|
+ orig_value: 4059.36,
|
|
|
|
|
+ net_value: 743.24,
|
|
|
|
|
+ orig_ratio: '7.45%'
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
index: 6,
|
|
index: 6,
|
|
|
dept: '西南压裂项目部',
|
|
dept: '西南压裂项目部',
|
|
|
count: 47,
|
|
count: 47,
|
|
|
- orig_value: 14602.44,
|
|
|
|
|
- net_value: 6031.39,
|
|
|
|
|
- orig_ratio: '30'
|
|
|
|
|
|
|
+ orig_value: 14591.62,
|
|
|
|
|
+ net_value: 6030.84,
|
|
|
|
|
+ orig_ratio: '26.79%'
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
index: 7,
|
|
index: 7,
|
|
|
dept: '伊拉克 哈法亚连油',
|
|
dept: '伊拉克 哈法亚连油',
|
|
|
count: 120,
|
|
count: 120,
|
|
|
orig_value: 694.78,
|
|
orig_value: 694.78,
|
|
|
- net_value: 94.44,
|
|
|
|
|
- orig_ratio: '1%'
|
|
|
|
|
|
|
+ net_value: 91.26,
|
|
|
|
|
+ orig_ratio: '9.07%'
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
index: 8,
|
|
index: 8,
|
|
|
dept: '伊拉克 哈法亚压裂',
|
|
dept: '伊拉克 哈法亚压裂',
|
|
|
count: 132,
|
|
count: 132,
|
|
|
orig_value: 1008.92,
|
|
orig_value: 1008.92,
|
|
|
- net_value: 587.07,
|
|
|
|
|
- orig_ratio: '2%'
|
|
|
|
|
|
|
+ net_value: 575.91,
|
|
|
|
|
+ orig_ratio: '13.17%%'
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
index: 9,
|
|
index: 9,
|
|
|
dept: '伊拉克 B9增产',
|
|
dept: '伊拉克 B9增产',
|
|
|
count: 27,
|
|
count: 27,
|
|
|
orig_value: 304.72,
|
|
orig_value: 304.72,
|
|
|
- net_value: 128.63,
|
|
|
|
|
- orig_ratio: '1%'
|
|
|
|
|
|
|
+ net_value: 124.1,
|
|
|
|
|
+ orig_ratio: '3.98%'
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
index: 10,
|
|
index: 10,
|
|
|
dept: '利比亚连油8队',
|
|
dept: '利比亚连油8队',
|
|
|
count: 22,
|
|
count: 22,
|
|
|
orig_value: 2025.52,
|
|
orig_value: 2025.52,
|
|
|
- net_value: 1961.69,
|
|
|
|
|
- orig_ratio: '4%'
|
|
|
|
|
|
|
+ net_value: 1731.79,
|
|
|
|
|
+ orig_ratio: '4.85%'
|
|
|
}
|
|
}
|
|
|
])
|
|
])
|
|
|
|
|
|
|
@@ -1744,11 +1770,29 @@ onMounted(async () => {
|
|
|
})
|
|
})
|
|
|
</script>
|
|
</script>
|
|
|
<style lang="scss" scoped>
|
|
<style lang="scss" scoped>
|
|
|
-/*最外层透明*/
|
|
|
|
|
|
|
+@media (width <= 768px) {
|
|
|
|
|
+ .page-container {
|
|
|
|
|
+ padding: 10px;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+@media (width <= 520px) {
|
|
|
|
|
+ .status-legend-item {
|
|
|
|
|
+ min-width: 100%;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .status-legend {
|
|
|
|
|
+ justify-content: flex-start;
|
|
|
|
|
+ max-height: none;
|
|
|
|
|
+ overflow: visible;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
::v-deep .el-table,
|
|
::v-deep .el-table,
|
|
|
::v-deep .el-table__expanded-cell {
|
|
::v-deep .el-table__expanded-cell {
|
|
|
background-color: transparent !important;
|
|
background-color: transparent !important;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
/* 表格内背景颜色 */
|
|
/* 表格内背景颜色 */
|
|
|
|
|
|
|
|
::v-deep .el-table tr,
|
|
::v-deep .el-table tr,
|
|
@@ -1769,13 +1813,15 @@ onMounted(async () => {
|
|
|
margin-bottom: 1rem;
|
|
margin-bottom: 1rem;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
.stat-card {
|
|
.stat-card {
|
|
|
width: 48%;
|
|
width: 48%;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
.page-container {
|
|
.page-container {
|
|
|
- background-color: #3a6fa3;
|
|
|
|
|
min-height: 100vh;
|
|
min-height: 100vh;
|
|
|
padding: 20px;
|
|
padding: 20px;
|
|
|
|
|
+ background-color: #3a6fa3;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.summary {
|
|
.summary {
|
|
@@ -1783,32 +1829,32 @@ onMounted(async () => {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
::v-deep .chart-card {
|
|
::v-deep .chart-card {
|
|
|
- background-color: rgba(0, 0, 0, 0.3);
|
|
|
|
|
|
|
+ background-color: rgb(0 0 0 / 30%);
|
|
|
|
|
+ border: none;
|
|
|
border-radius: 8px;
|
|
border-radius: 8px;
|
|
|
- box-shadow: 0 2px 12px rgba(0, 0, 0, 0.5);
|
|
|
|
|
|
|
+ box-shadow: 0 2px 12px rgb(0 0 0 / 50%);
|
|
|
transition: all 0.3s ease;
|
|
transition: all 0.3s ease;
|
|
|
- border: none;
|
|
|
|
|
|
|
|
|
|
&:hover {
|
|
&:hover {
|
|
|
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
|
|
|
|
|
|
|
+ box-shadow: 0 4px 16px rgb(0 0 0 / 8%);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 安全生产天数卡片样式
|
|
// 安全生产天数卡片样式
|
|
|
.safety-days-card {
|
|
.safety-days-card {
|
|
|
.safety-days-content {
|
|
.safety-days-content {
|
|
|
|
|
+ position: relative;
|
|
|
display: flex;
|
|
display: flex;
|
|
|
|
|
+ height: 150px;
|
|
|
flex-direction: column;
|
|
flex-direction: column;
|
|
|
align-items: center;
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
justify-content: center;
|
|
|
- height: 150px;
|
|
|
|
|
- position: relative;
|
|
|
|
|
|
|
|
|
|
.days-number {
|
|
.days-number {
|
|
|
font-size: 58px;
|
|
font-size: 58px;
|
|
|
font-weight: bold;
|
|
font-weight: bold;
|
|
|
- color: darkorange;
|
|
|
|
|
line-height: 1;
|
|
line-height: 1;
|
|
|
|
|
+ color: darkorange;
|
|
|
transition: all 0.3s ease;
|
|
transition: all 0.3s ease;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -1817,36 +1863,32 @@ onMounted(async () => {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.days-label {
|
|
.days-label {
|
|
|
|
|
+ margin-top: 8px;
|
|
|
font-size: 20px;
|
|
font-size: 20px;
|
|
|
color: white;
|
|
color: white;
|
|
|
- margin-top: 8px;
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.safety-desc {
|
|
.safety-desc {
|
|
|
- font-size: 14px;
|
|
|
|
|
- color: #999;
|
|
|
|
|
position: absolute;
|
|
position: absolute;
|
|
|
bottom: 10px;
|
|
bottom: 10px;
|
|
|
- text-align: center;
|
|
|
|
|
width: 90%;
|
|
width: 90%;
|
|
|
|
|
+ font-size: 14px;
|
|
|
|
|
+ color: #999;
|
|
|
|
|
+ text-align: center;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-@media (max-width: 768px) {
|
|
|
|
|
- .page-container {
|
|
|
|
|
- padding: 10px;
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
::v-deep .el-card__header {
|
|
::v-deep .el-card__header {
|
|
|
- border-bottom: none !important;
|
|
|
|
|
padding-bottom: 0;
|
|
padding-bottom: 0;
|
|
|
|
|
+ border-bottom: none !important;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
.table-container {
|
|
.table-container {
|
|
|
- padding: 16px;
|
|
|
|
|
height: 420px;
|
|
height: 420px;
|
|
|
- box-sizing: border-box;
|
|
|
|
|
|
|
+ padding: 16px;
|
|
|
overflow: auto;
|
|
overflow: auto;
|
|
|
|
|
+ box-sizing: border-box;
|
|
|
|
|
|
|
|
// 滚动条样式优化
|
|
// 滚动条样式优化
|
|
|
&::-webkit-scrollbar {
|
|
&::-webkit-scrollbar {
|
|
@@ -1855,7 +1897,7 @@ onMounted(async () => {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
&::-webkit-scrollbar-thumb {
|
|
&::-webkit-scrollbar-thumb {
|
|
|
- background-color: rgba(255, 255, 255, 0.2);
|
|
|
|
|
|
|
+ background-color: rgb(255 255 255 / 20%);
|
|
|
border-radius: 3px;
|
|
border-radius: 3px;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -1866,63 +1908,71 @@ onMounted(async () => {
|
|
|
|
|
|
|
|
// 修复表格hover样式
|
|
// 修复表格hover样式
|
|
|
::v-deep .el-table__row:hover > td {
|
|
::v-deep .el-table__row:hover > td {
|
|
|
- background-color: rgba(255, 255, 255, 0.05) !important;
|
|
|
|
|
|
|
+ background-color: rgb(255 255 255 / 5%) !important;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
.custom-scroll-dialog {
|
|
.custom-scroll-dialog {
|
|
|
/* 可选:限制对话框整体最大高度(避免超出屏幕) */
|
|
/* 可选:限制对话框整体最大高度(避免超出屏幕) */
|
|
|
max-height: 90vh;
|
|
max-height: 90vh;
|
|
|
overflow: hidden; /* 隐藏整体溢出,避免出现双重滚动条 */
|
|
overflow: hidden; /* 隐藏整体溢出,避免出现双重滚动条 */
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
/* 滚动内容容器:核心样式 */
|
|
/* 滚动内容容器:核心样式 */
|
|
|
.dialog-scroll-content {
|
|
.dialog-scroll-content {
|
|
|
max-height: 60vh; /* 固定最大高度(可根据需求调整,如500px) */
|
|
max-height: 60vh; /* 固定最大高度(可根据需求调整,如500px) */
|
|
|
- overflow-y: auto; /* 垂直方向溢出时显示滚动条 */
|
|
|
|
|
padding-right: 8px; /* 避免滚动条遮挡内容(可选) */
|
|
padding-right: 8px; /* 避免滚动条遮挡内容(可选) */
|
|
|
|
|
+ overflow-y: auto; /* 垂直方向溢出时显示滚动条 */
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/* 优化滚动条样式(可选,提升UI体验) */
|
|
/* 优化滚动条样式(可选,提升UI体验) */
|
|
|
.dialog-scroll-content::-webkit-scrollbar {
|
|
.dialog-scroll-content::-webkit-scrollbar {
|
|
|
width: 6px; /* 滚动条宽度 */
|
|
width: 6px; /* 滚动条宽度 */
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
.dialog-scroll-content::-webkit-scrollbar-thumb {
|
|
.dialog-scroll-content::-webkit-scrollbar-thumb {
|
|
|
background-color: #e5e7eb; /* 滚动条滑块颜色 */
|
|
background-color: #e5e7eb; /* 滚动条滑块颜色 */
|
|
|
border-radius: 3px; /* 滚动条圆角 */
|
|
border-radius: 3px; /* 滚动条圆角 */
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
.dialog-scroll-content::-webkit-scrollbar-thumb:hover {
|
|
.dialog-scroll-content::-webkit-scrollbar-thumb:hover {
|
|
|
background-color: #d1d5db; /* hover时滑块颜色 */
|
|
background-color: #d1d5db; /* hover时滑块颜色 */
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
.custom-table :deep .el-table__row {
|
|
.custom-table :deep .el-table__row {
|
|
|
height: 50px !important; /* 高度根据需求调整 */
|
|
height: 50px !important; /* 高度根据需求调整 */
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/* 设备状态图例自适应样式 */
|
|
/* 设备状态图例自适应样式 */
|
|
|
.status-legend {
|
|
.status-legend {
|
|
|
- width: 100%;
|
|
|
|
|
display: flex;
|
|
display: flex;
|
|
|
|
|
+ width: 100%;
|
|
|
|
|
+ max-height: 90px; /* 限制高度,超出显示滚动 */
|
|
|
|
|
+ padding: 6px 0;
|
|
|
|
|
+ overflow-y: auto;
|
|
|
|
|
+ box-sizing: border-box;
|
|
|
flex-wrap: wrap;
|
|
flex-wrap: wrap;
|
|
|
justify-content: center;
|
|
justify-content: center;
|
|
|
gap: 8px;
|
|
gap: 8px;
|
|
|
- padding: 6px 0;
|
|
|
|
|
- box-sizing: border-box;
|
|
|
|
|
- max-height: 90px; /* 限制高度,超出显示滚动 */
|
|
|
|
|
- overflow-y: auto;
|
|
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
.status-legend-item {
|
|
.status-legend-item {
|
|
|
display: flex;
|
|
display: flex;
|
|
|
|
|
+ max-width: 100%;
|
|
|
|
|
+ min-width: 120px;
|
|
|
|
|
+ padding: 6px 10px;
|
|
|
|
|
+ box-sizing: border-box;
|
|
|
align-items: center;
|
|
align-items: center;
|
|
|
justify-content: space-between;
|
|
justify-content: space-between;
|
|
|
gap: 12px;
|
|
gap: 12px;
|
|
|
- padding: 6px 10px;
|
|
|
|
|
- min-width: 120px;
|
|
|
|
|
- max-width: 100%;
|
|
|
|
|
- box-sizing: border-box;
|
|
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
.status-legend-left {
|
|
.status-legend-left {
|
|
|
display: flex;
|
|
display: flex;
|
|
|
align-items: center;
|
|
align-items: center;
|
|
|
gap: 8px;
|
|
gap: 8px;
|
|
|
min-width: 0;
|
|
min-width: 0;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
.status-legend-color {
|
|
.status-legend-color {
|
|
|
display: inline-block;
|
|
display: inline-block;
|
|
|
width: 12px;
|
|
width: 12px;
|
|
@@ -1930,35 +1980,30 @@ onMounted(async () => {
|
|
|
border-radius: 50%;
|
|
border-radius: 50%;
|
|
|
flex: 0 0 12px;
|
|
flex: 0 0 12px;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
.status-legend-name {
|
|
.status-legend-name {
|
|
|
max-width: calc(100% - 60px);
|
|
max-width: calc(100% - 60px);
|
|
|
overflow: hidden;
|
|
overflow: hidden;
|
|
|
|
|
+ color: #fff;
|
|
|
text-overflow: ellipsis;
|
|
text-overflow: ellipsis;
|
|
|
white-space: nowrap;
|
|
white-space: nowrap;
|
|
|
- color: #fff;
|
|
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
.status-legend-right {
|
|
.status-legend-right {
|
|
|
display: flex;
|
|
display: flex;
|
|
|
align-items: center;
|
|
align-items: center;
|
|
|
gap: 8px;
|
|
gap: 8px;
|
|
|
flex-shrink: 0;
|
|
flex-shrink: 0;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
.status-legend-value {
|
|
.status-legend-value {
|
|
|
font-weight: 700;
|
|
font-weight: 700;
|
|
|
color: #fff;
|
|
color: #fff;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
.status-legend-percent {
|
|
.status-legend-percent {
|
|
|
color: #fff;
|
|
color: #fff;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-@media (max-width: 520px) {
|
|
|
|
|
- .status-legend-item {
|
|
|
|
|
- min-width: 100%;
|
|
|
|
|
- }
|
|
|
|
|
- .status-legend {
|
|
|
|
|
- justify-content: flex-start;
|
|
|
|
|
- max-height: none;
|
|
|
|
|
- overflow: visible;
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
|
|
+/* 最外层透明 */
|
|
|
</style>
|
|
</style>
|