180 lines
4.8 KiB
Vue
180 lines
4.8 KiB
Vue
<template>
|
|
<div class="irrigation-charts">
|
|
<div class="charts-content">
|
|
<div class="water-droplet-bg" :style="{ 'background-image': 'url(' + getAssetsFile('images/plant/bg5.png') + ')' }">
|
|
<div class="water-droplet">
|
|
<custom-echart-water-droplet height="100%" :option="option" />
|
|
</div>
|
|
</div>
|
|
<div class="water-droplet-warp">
|
|
<template v-for="(n, index) in itemlist" :key="index">
|
|
<div class="water-droplet-item" :style="{ height: 'calc((100% - 20px) / ' + itemlist.length + ')' }">
|
|
<div class="title" :style="{ 'background-image': 'url(' + getAssetsFile(n.bg1) + ')' }">
|
|
<div class="title-val" :style="{ color: n.color }">{{ n.title }}</div>
|
|
</div>
|
|
<div class="tips" :style="{ 'background-image': 'url(' + getAssetsFile(n.bg2) + ')' }">
|
|
<span class="tips-val">{{ n.tips }}</span>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
<script setup>
|
|
import { ref, reactive, onMounted } from 'vue';
|
|
import { isEmpty, getAssetsFile } from '@/utils';
|
|
let percent = ref(0.6);
|
|
let itemlist = reactive([
|
|
{ title: '智能灌溉', bg1: 'images/plant/bg8.png', bg2: 'images/plant/bg7.png', tips: '去浇水', color: '#4a90e2ff' },
|
|
{ title: '智能施肥', bg1: 'images/plant/bg9.png', bg2: 'images/plant/bg7.png', tips: '去施肥', color: '#50e3c2ff' },
|
|
]);
|
|
const option = reactive({
|
|
backgroundColor: 'transparent', //背景色
|
|
series: [
|
|
{
|
|
name: '预估量',
|
|
type: 'liquidFill',
|
|
radius: '80%',
|
|
center: ['50%', '50%'],
|
|
backgroundStyle: {
|
|
color: 'transparent',
|
|
},
|
|
data: [percent.value, percent.value],
|
|
amplitude: 12, //水波振幅
|
|
label: {
|
|
//标签设置
|
|
position: ['50%', '45%'],
|
|
formatter: percent.value * 100 + '%', //显示文本,
|
|
textStyle: {
|
|
fontSize: '20px', //文本字号,
|
|
color: '#fff',
|
|
},
|
|
},
|
|
outline: {
|
|
borderDistance: 3,
|
|
itemStyle: {
|
|
borderWidth: 1,
|
|
borderColor: {
|
|
type: 'linear',
|
|
x: 1,
|
|
y: 0,
|
|
x2: 0,
|
|
y2: 0,
|
|
colorStops: [
|
|
{
|
|
offset: 0,
|
|
color: 'rgba(255, 255, 255, 0.8)',
|
|
},
|
|
{
|
|
offset: 0.6,
|
|
color: 'rgba(255, 255, 255, 0.8)',
|
|
},
|
|
{
|
|
offset: 1,
|
|
color: 'rgba(255, 255, 255, 0.8)',
|
|
},
|
|
],
|
|
globalCoord: false,
|
|
},
|
|
},
|
|
},
|
|
itemStyle: {
|
|
color: {
|
|
type: 'linear', // 线性渐变
|
|
x: 0,
|
|
y: 0,
|
|
x2: 0,
|
|
y2: 1,
|
|
colorStops: [
|
|
{ offset: 0, color: '#45bfe9' },
|
|
{ offset: 1, color: '#01589c' },
|
|
],
|
|
global: false, // 默认为 false
|
|
},
|
|
},
|
|
},
|
|
],
|
|
});
|
|
|
|
onMounted(() => {});
|
|
</script>
|
|
<style lang="scss" scoped>
|
|
.irrigation-charts {
|
|
height: 100%;
|
|
.charts-content {
|
|
display: inline-flex;
|
|
justify-content: space-between;
|
|
width: 100%;
|
|
height: 100%;
|
|
.water-droplet-bg {
|
|
display: inline-block;
|
|
width: 40%;
|
|
background-size: contain;
|
|
background-repeat: no-repeat;
|
|
background-position: center bottom;
|
|
position: relative;
|
|
.water-droplet {
|
|
position: absolute;
|
|
left: 50%;
|
|
top: 10%;
|
|
transform: translateX(-50%);
|
|
}
|
|
}
|
|
|
|
.water-droplet-warp {
|
|
width: 60%;
|
|
padding: 0 10px;
|
|
display: inline-flex;
|
|
vertical-align: middle;
|
|
flex-direction: column;
|
|
.water-droplet-item {
|
|
width: 100%;
|
|
}
|
|
.title,
|
|
.tips {
|
|
display: inline-block;
|
|
color: #fff;
|
|
vertical-align: top;
|
|
.tips-val {
|
|
display: inline-flex;
|
|
line-height: 42px;
|
|
text-align: center;
|
|
font-size: 14px;
|
|
font-weight: bold;
|
|
transform: skewX(-13deg) translateY(-50%);
|
|
background: linear-gradient(to bottom, '#ff7e5f', '#548fff');
|
|
-webkit-background-clip: text;
|
|
color: #fff;
|
|
letter-spacing: 2px;
|
|
text-shadow: -6px 0 0 1px #add8f1;
|
|
position: absolute;
|
|
left: 0;
|
|
top: 50%;
|
|
}
|
|
}
|
|
.title {
|
|
width: 40%;
|
|
height: 100%;
|
|
background-size: contain;
|
|
background-position: left bottom;
|
|
background-repeat: no-repeat;
|
|
.title-val {
|
|
width: 100%;
|
|
text-align: center;
|
|
line-height: 32px;
|
|
}
|
|
}
|
|
.tips {
|
|
width: 60%;
|
|
height: 100%;
|
|
background-size: 100% auto;
|
|
background-repeat: no-repeat;
|
|
background-position: left center;
|
|
position: relative;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style>
|