From 306ef09707d6bcf9ffa67de55f86ab6f4362deee Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期五, 18 七月 2025 10:04:01 +0800
Subject: [PATCH] 2025.7.18 动态溯源-测试版本
---
src/components/monitor/FactorLegend.vue | 166 +++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 124 insertions(+), 42 deletions(-)
diff --git a/src/components/monitor/FactorLegend.vue b/src/components/monitor/FactorLegend.vue
index 56fc697..caba203 100644
--- a/src/components/monitor/FactorLegend.vue
+++ b/src/components/monitor/FactorLegend.vue
@@ -1,32 +1,66 @@
<template>
- <BaseCard>
+ <transition
+ name="el-zoom-in-left"
+ @before-enter="onBeforeEnter"
+ @after-leave="onAfterLeave"
+ >
+ <BaseCard v-show="show">
+ <template #content>
+ <el-row justify="space-between" align="middle">
+ <el-row align="middle">
+ <img src="@/assets/mipmap/data_chart.png" class="ff-img m-r-4" />
+ <span>璧拌埅鍥句緥</span>
+ <span v-if="factor.factorName">锛坽{ factor.factorName }}锛�</span>
+ </el-row>
+ <span @click="show = !show" class="btn-show">
+ <el-icon v-if="show"><ArrowLeftBold /></el-icon>
+ <el-icon v-else><ArrowRightBold /></el-icon>
+ </span>
+ </el-row>
+ <div
+ v-for="(item, index) in legends"
+ :key="index"
+ class="flexbox align-items margin-top"
+ >
+ <div
+ class="rectangle"
+ :style="'background-color: ' + item.color"
+ ></div>
+ <el-row v-if="item.max">
+ <span class="w-40 text-right">{{ item.min }}</span>
+ <span class="w-20 text-center">~</span>
+ <span class="w-40 text-right">{{ item.max }}</span>
+ <span class="w-60 m-l-8">{{ item.unit }}</span>
+ </el-row>
+ <el-row v-else>
+ <span class="w-40 text-right"></span>
+ <span class="w-20 text-center">></span>
+ <span class="w-40 text-right">{{ item.min }}</span>
+ <span class="w-60 m-l-8">{{ item.unit }}</span>
+ </el-row>
+ </div>
+ <div>
+ 鍒囨崲缁樺浘妯″紡锛�
+ <el-switch
+ v-model="legendType"
+ width="60"
+ inline-prompt
+ style=""
+ active-text="鍔ㄦ��"
+ inactive-text="鏍囧噯"
+ @change="handleChange"
+ />
+ </div>
+ </template>
+ </BaseCard>
+ </transition>
+ <BaseCard v-show="btnShow">
<template #content>
- <el-row justify="space-between" align="middle">
- <el-row align="middle">
- <img src="@/assets/mipmap/data_chart.png" class="ff-img m-r-4" />
- <span>璧拌埅鍥句緥</span>
- </el-row>
- <span>{{ factor.factorName }}</span>
- </el-row>
- <div
- v-for="(item, index) in legends"
- :key="index"
- class="flexbox align-items margin-top"
- >
- <div class="rectangle" :style="'background-color: ' + item.color"></div>
- <el-row v-if="item.max">
- <span class="w-40 text-right">{{ item.min }}</span>
- <span class="w-20 text-center">~</span>
- <span class="w-40 text-right">{{ item.max }}</span>
- <span class="w-60 m-l-8">{{ item.unit }}</span>
- </el-row>
- <el-row v-else>
- <span class="w-40 text-right"></span>
- <span class="w-20 text-center">></span>
- <span class="w-40 text-right">{{ item.min }}</span>
- <span class="w-60 m-l-8">{{ item.unit }}</span>
- </el-row>
- </div>
+ <span @click="show = !show" class="btn-show">
+ <img src="@/assets/mipmap/data_chart.png" class="ff-img m-r-4" />
+ <el-icon v-if="show"><ArrowLeftBold /></el-icon>
+ <el-icon v-else><ArrowRightBold /></el-icon>
+ </span>
</template>
</BaseCard>
</template>
@@ -43,21 +77,40 @@
default: () => new Factor()
}
},
+ emits: ['change'],
data() {
- return {};
+ return {
+ // 缁樺浘妯″紡锛宖alse: 鏍囧噯妯″紡锛泃rue锛氬姩鎬佹ā寮�
+ legendType: false,
+ legends: [],
+ show: true,
+ btnShow: false
+ };
+ },
+ watch: {
+ factor(nValue, oValue) {
+ if (nValue != oValue && nValue) {
+ this.legends = this.refreshLegend(
+ nValue.factorName,
+ nValue.legendType,
+ nValue.min,
+ nValue.max
+ );
+ }
+ }
},
computed: {
- legends() {
- const res = this.factor
- ? this.refreshLegend(
- this.factor.factorName,
- this.factor.legendType,
- this.factor.min,
- this.factor.max
- )
- : [];
- return res;
- }
+ // legends() {
+ // const res = this.factor
+ // ? this.refreshLegend(
+ // this.factor.factorName,
+ // this.factor.legendType,
+ // this.factor.min,
+ // this.factor.max
+ // )
+ // : [];
+ // return res;
+ // }
},
methods: {
/**
@@ -99,15 +152,33 @@
', ' +
color[3] +
')';
+ const { scale = 1, unit = '' } = factorUnit[name];
legendList.push({
color: bgColor,
- min: r[0],
- max: nextR ? nextR[0] : undefined,
- unit: factorUnit[name] ? factorUnit[name].unit : ''
+ min: r[0] * scale,
+ max: nextR ? nextR[0] * scale : undefined,
+ unit: unit
});
}
return legendList;
+ },
+
+ handleChange(value) {
+ this.$emit('change', value, () => {
+ this.legends = this.refreshLegend(
+ this.factor.factorName,
+ this.factor.legendType,
+ this.factor.min,
+ this.factor.max
+ );
+ });
+ },
+ onBeforeEnter() {
+ this.btnShow = false;
+ },
+ onAfterLeave() {
+ this.btnShow = true;
}
}
};
@@ -120,4 +191,15 @@
.text-center {
text-align: center;
}
+
+.el-switch {
+ --el-switch-on-color: #1f9956;
+ --el-switch-off-color: #8b8b8b;
+}
+.btn-show {
+ cursor: pointer;
+}
+.btn-show:hover {
+ color: #23dad1;
+}
</style>
--
Gitblit v1.9.3