SmartBeehive/pages/index/index.vue
2024-07-01 10:06:13 +08:00

715 lines
14 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="page">
<view class="backImg">
<image src="https://api.ccttiot.com/smartmeter/img/static/utkroSMjT09nmCYaA7FT" mode=""></image>
</view>
<view class="tipbox" v-if="haveApiary">
<view class="tip_cont">
<image src="https://api.ccttiot.com/smartmeter/img/static/uKW514Tl8TVUiaJW2ygl" mode=""></image>
<view class="txt">
蜂箱数量:10
</view>
</view>
<view class="tip_cont" style="margin-top: 48rpx;">
<image src="https://api.ccttiot.com/smartmeter/img/static/uBEd8suIZ2vdqOGI8rP6" mode=""></image>
<view class="txt">
蜂箱数量:10
</view>
</view>
<view class="tip_cont" style="margin-top: 48rpx;">
<image src="https://api.ccttiot.com/smartmeter/img/static/ufgkE5w8AND4eLZD94RR" mode=""></image>
<view class="txt">
蜂箱数量:10
</view>
</view>
</view>
<view class="no_cont" v-if="!haveApiary">
<view class="img" @click="addApiary()">
<image src="https://api.ccttiot.com/smartmeter/img/static/uUZ3MF84e3bKgwAei8Rz" mode=""></image>
</view>
<view class="txt">
当前还没有添加蜂场哦,点击跳转添加蜂场
</view>
</view>
<u-loadmore :status="status" :icon-type="iconType" :load-text="loadText" v-if="isLoading" />
<view class="warp_box" v-if="haveApiary">
<swiper class="swiper" :style="{ height: swiperHeight + 'rpx' }" :current='curtitidx'
previous-margin='50rpx' next-margin='50rpx' :circular='true' @change="swiperchange">
<swiper-item>
<view class="swiper-item">
<view class="card_box">
<view class="card">
<view class="card_top">
<view class="top_left">
<image src="https://api.ccttiot.com/smartmeter/img/static/uhsU6Y1K35jxA4aRauzy"
mode=""></image>
近7天蜜蜂总出勤变化
</view>
<view class="top_right">
<view style="width: 1rpx;">
</view>
<view class="txt">
<view class="iconfont icon-xiangyou1"></view>
</view>
</view>
</view>
<view class="echarts">
<uni-ec-canvas class="uni-ec-canvas" id="uni-ec-canvas" ref="canvas4"
canvas-id="uni-ec-canvas" :ec="ec">
</uni-ec-canvas>
</view>
</view>
</view>
</view>
</swiper-item>
<swiper-item>
<view class="swiper-item">
<view class="card_box">
<view class="card">
<view class="card_top">
<view class="top_left">
<image src="https://api.ccttiot.com/smartmeter/img/static/uk7CvwzeU0ukxvS9cBtD"
mode=""></image>
近7天蜂箱总重量变化
</view>
<view class="top_right">
<view style="width: 1rpx;">
</view>
<view class="txt">
<view class="iconfont icon-xiangyou1"></view>
</view>
</view>
</view>
<view class="echarts">
<uni-ec-canvas class="uni-ec-canvas" id="uni-ec-canvas" ref="canvas3"
canvas-id="uni-ec-canvas" :ec="ec">
</uni-ec-canvas>
</view>
</view>
</view>
</view>
</swiper-item>
</swiper>
</view>
<view class="info_cont" v-if="haveApiary">
<view class="cont">
<view class="cont_top">
电量不足
</view>
<view class="cont_bot">
0
</view>
</view>
<view class="cont">
<view class="cont_top">
出勤异常
</view>
<view class="cont_bot">
0
</view>
</view>
<view class="cont">
<view class="cont_top">
重量异常
</view>
<view class="cont_bot">
0
</view>
</view>
<view class="cont">
<view class="cont_top">
温度异常
</view>
<view class="cont_bot">
0
</view>
</view>
<view class="cont">
<view class="cont_top">
湿度异常
</view>
<view class="cont_bot">
0
</view>
</view>
<view class="cont">
<view class="cont_top">
声音异常
</view>
<view class="cont_bot">
0
</view>
</view>
</view>
<tab-bar :indexs='0'></tab-bar>
</view>
</template>
<script>
import uniEcCanvas from '@/components/uni-ec-canvas/uni-ec-canvas.vue'
import * as echarts from '@/components/uni-ec-canvas/echarts'
let chart = null
export default {
components: {
uniEcCanvas
},
data() {
return {
ec: {
lazyLoad: true
},
bgc: {
backgroundColor: "#F7FAFE",
},
iconType: 'flower',
status: 'loadmore',
loadText: {
loadmore: '轻轻上拉',
loading: '努力加载中',
nomore: '实在没有了'
},
curtitidx: 0,
swiperHeight: 426,
activeSwiperHeight: 500, // 激活的swiper高度
swiperItems: [1, 2, ], // Placeholder for swiper items
numdata:[],
haveApiary:true
}
},
onShow() {
this.ishave()
// setTimeout(() => {
// this.$refs.canvas4.init(this.initChart4)
// }, 200);
},
onPullDownRefresh() {
},
methods: {
addApiary(){
uni.navigateTo({
url:'/pages/Apiary/AddApiary'
})
},
ishave(){
let data ={
pageNum:1,
pageSize:0
}
this.$u.get('/farm/apiary/list?',data ).then((res) => {
if (res.code === 200) {
if(res.total>1){
this.getnum()
}else{
this.haveApiary=false
}
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
})
},
swiperchange(e) {
this.curtitidx = e.detail.current
// console.log(e, 'aaaa');
},
getnum(){
const currentDate = new Date();
// 获取前七天的日期
const sevenDaysAgoDate = new Date();
sevenDaysAgoDate.setDate(currentDate.getDate() - 7);
// 格式化日期为 'YYYY-MM-DD'
const formatDate = (date) => {
const year = date.getFullYear();
const month = (date.getMonth() + 1).toString().padStart(2, '0');
const day = date.getDate().toString().padStart(2, '0');
return `${year}-${month}-${day}`;
};
const currentDateString = formatDate(currentDate);
const sevenDaysAgoDateString = formatDate(sevenDaysAgoDate);
// 赋值给 data 中的 dateRange
let data = {
dateRange: `${sevenDaysAgoDateString},${currentDateString}`
};
this.$u.get('/farmer/report/ioCount?',data ).then((res) => {
if (res.code === 200) {
this.numdata=res.data
this.$refs.canvas3.init(this.initChart4)
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
})
},
// 进出量
initChart4(canvas, width, height, canvasDpr) {
let that = this
const option = {
grid: {
left: '4%',
right: '4%',
bottom: '3%',
top: '4%',
containLabel: true
},
xAxis: {
show: true,
type: 'category',
boundaryGap: false,
axisLine: {
show: false // 隐藏X轴线
},
axisTick: {
show: false // 隐藏X轴刻度
},
axisLabel: {
show: false // 隐藏X轴标签
},
axisLabel: {
show: true,
color: '#ccc',
fontSize: 11,
rotate: 0,
},
splitLine: {
show: false,
},
// data: that.chartday,
},
yAxis: {
show: true,
axisLine: {
show: false,
},
axisTick: {
show: false,
},
axisLabel: {
show: true,
color: '#ccc',
fontSize: 11,
formatter: function(value) {
// 保留两位小数没有小数时显示00
return value + '只'
},
},
splitLine: {
show: true, // 显示X轴网格线
lineStyle: {
type: 'dashed', // 设置网格线为虚线
color: '#ccc', // 可以设置虚线的颜色
width: 1 // 可以设置虚线的宽度
}
}
},
visualMap: {
type: 'piecewise',
show: false,
dimension: 0,
seriesIndex: 0,
pieces: [{
gt: 1,
lt: 3,
color: 'RGBA(255, 241, 201, 1)',
},
{
gt: 5,
lt: 7,
color: 'RGBA(255, 241, 201, 1)',
},
],
},
series: [{
type: 'line',
smooth: 0.6,
symbol: 'none',
lineStyle: {
color: '#FFE28C',
width: 4,
},
areaStyle: {
normal: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
offset: 0,
color: '#FFF1C9'
}, ]),
},
},
data: that.numdata.map(item => item.value),
}],
};
chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: canvasDpr
})
canvas.setChart(chart)
chart.setOption(option)
return chart
},
//重量
initChart3(canvas, width, height, canvasDpr) {
let that = this
const option = {
grid: {
left: '2%',
right: '10%',
bottom: '3%',
top: '4%',
containLabel: true
},
xAxis: {
show: true,
type: 'category',
boundaryGap: false,
axisLine: {
show: false // 隐藏X轴线
},
axisTick: {
show: false // 隐藏X轴刻度
},
axisLabel: {
show: false // 隐藏X轴标签
},
axisLabel: {
show: true,
color: '#ccc',
fontSize: 11,
rotate: 0,
},
splitLine: {
show: false,
},
// data: that.chartday,
// data: that.numdata.map(item => item.date)
},
yAxis: {
show: true,
axisLine: {
show: false,
},
axisTick: {
show: false,
},
axisLabel: {
show: true,
color: '#ccc',
fontSize: 11,
formatter: function(value) {
// 保留两位小数没有小数时显示00
return value + 'Kg'
},
},
splitLine: {
show: true, // 显示X轴网格线
lineStyle: {
type: 'dashed', // 设置网格线为虚线
color: '#ccc', // 可以设置虚线的颜色
width: 1 // 可以设置虚线的宽度
}
}
},
visualMap: {
type: 'piecewise',
show: false,
dimension: 0,
seriesIndex: 0,
pieces: [{
gt: 1,
lt: 3,
color: 'RGBA(255, 241, 201, 1)',
},
{
gt: 5,
lt: 7,
color: 'RGBA(255, 241, 201, 1)',
},
],
},
series: [{
type: 'line',
smooth: 0.6,
symbol: 'none',
lineStyle: {
color: '#FFE28C',
width: 4,
},
areaStyle: {
normal: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
offset: 0,
color: '#FFF1C9'
}, ]),
},
},
data: that.numdata.map(item => item.value),
}],
};
chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: canvasDpr
})
canvas.setChart(chart)
chart.setOption(option)
return chart
},
// 获取设备详情
}
}
</script>
<style lang="scss">
page {
background-color: #F7FAFE;
}
.page {
width: 750rpx;
.backImg {
position: fixed;
top: 0;
z-index: -1;
image {
width: 750rpx;
height: 870rpx;
}
}
.no_cont {
margin: 500rpx auto 0;
width: 432rpx;
.img {
image {
width: 432rpx;
height: 432rpx;
}
}
.txt {
margin-top: 50rpx;
width: 100%;
text-align: center;
font-weight: 500;
font-size: 32rpx;
color: #808080;
}
}
.info_cont {
display: flex;
flex-wrap: wrap;
// justify-content: space-around;
padding: 38rpx 74rpx 28rpx 74rpx;
margin: 32rpx auto;
width: 638rpx;
height: 256rpx;
background: #FFFFFF;
box-shadow: 0rpx 0rpx 8rpx 0rpx rgba(0, 0, 0, 0.15);
border-radius: 20rpx 20rpx 20rpx 20rpx;
.cont:nth-child(3n) {
margin-right: 0rpx;
}
.cont {
margin-right: 100rpx;
width: 96rpx;
display: flex;
flex-wrap: wrap;
justify-content: center;
.cont_top {
font-weight: 400;
font-size: 24rpx;
color: #808080;
}
.cont_bot {
margin-top: 4rpx;
width: 96rpx;
text-align: center;
font-weight: 500;
font-size: 32rpx;
color: #3D3D3D;
}
}
}
.warp_box {
margin-top: 128rpx;
.swiper {
.swiper-item {
display: flex;
justify-content: center;
transition: height 0.3s ease-in-out;
&.active {
height: 500rpx; // 激活状态的高度
}
&:not(.active) {
height: 426rpx; // 非激活状态的高度
}
.card_box {
display: flex;
flex-wrap: wrap;
.card {
padding: 18rpx;
width: 638rpx;
height: 426rpx;
background: #FFFFFF;
box-shadow: 0rpx 0rpx 8rpx 0rpx rgba(0, 0, 0, 0.15);
border-radius: 28rpx 28rpx 28rpx 28rpx;
.card_top {
display: flex;
align-items: center;
.top_left {
display: flex;
align-items: center;
font-weight: 400;
font-size: 36rpx;
color: #3D3D3D;
image {
margin-right: 24rpx;
margin-left: 28rpx;
width: 25.03rpx;
height: 34rpx;
}
}
.top_cont {
width: 33.33%;
text-align: center;
font-weight: 600;
font-size: 36rpx;
color: #3D3D3D;
}
.top_right {
margin-left: auto;
display: flex;
align-items: center;
.txt {
display: flex;
align-items: center;
flex-wrap: nowrap;
margin-left: auto;
font-weight: 400;
font-size: 32rpx;
color: #4D4D4D;
.icon-xiangyou1 {
margin-top: 4rpx;
margin-left: 8rpx;
}
}
}
}
.echarts {
margin-top: 24rpx;
width: 100%;
// height: 80%;
height: 344rpx;
}
}
}
}
}
}
.tipbox {
width: 300rpx;
display: flex;
flex-wrap: wrap;
// position: relative;
margin-top: 186rpx;
margin-left: 56rpx;
.tip_cont {
display: flex;
flex-wrap: nowrap;
align-items: center;
image {
margin-right: 6rpx;
width: 38rpx;
height: 38rpx;
}
// display: inline-flexbox;
flex-wrap: nowrap;
padding: 8rpx 22rpx;
background: rgba(61, 61, 61, 0.5);
box-shadow: 0rpx 0rpx 8rpx 0rpx rgba(0, 0, 0, 0.15);
border-radius: 20rpx 20rpx 20rpx 20rpx;
font-weight: 500;
font-size: 32rpx;
color: #FAFDFD;
}
}
}
</style>