228 lines
5.5 KiB
Vue
228 lines
5.5 KiB
Vue
<template>
|
|
<view>
|
|
<u-sticky :h5NavHeight="h5NavHeightP">
|
|
<view class="bg-white">
|
|
<SearchForm
|
|
:schemas="searchFormSchema"
|
|
@submit="handleSubmit"
|
|
></SearchForm>
|
|
</view>
|
|
</u-sticky>
|
|
<view>
|
|
<view
|
|
class="bg-white my-20rpx shadow shadow-lg pb-20rpx"
|
|
v-for="(item, i) in chatList"
|
|
:key="i"
|
|
>
|
|
<div class="p-20rpx text-32rpx">
|
|
{{ item.lable }}
|
|
</div>
|
|
<qiun-data-charts type="area" :opts="opts" :chartData="item.chatOpt" />
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
<script>
|
|
import SearchForm from '@/components/search-form'
|
|
import { http } from '@/api/index.js'
|
|
import { formatDataByObject } from '@/utils/index.js'
|
|
import QiunDataCharts from '@/components/qiun-data-charts/qiun-data-charts.vue'
|
|
const tagMenus = [
|
|
{
|
|
lable: '大气湿度',
|
|
value: 'air_humidity',
|
|
unit: '',
|
|
},
|
|
{
|
|
lable: '大气气温',
|
|
value: 'air_temperature',
|
|
unit: '',
|
|
},
|
|
{
|
|
lable: '蓄电池电压',
|
|
value: 'battery_vol',
|
|
unit: '',
|
|
},
|
|
{
|
|
lable: '充电电压',
|
|
value: 'charging_vol',
|
|
unit: '',
|
|
},
|
|
{
|
|
lable: '高压值',
|
|
value: 'high_vol',
|
|
unit: '',
|
|
},
|
|
{
|
|
lable: '杀虫数',
|
|
value: 'killed_num',
|
|
unit: '',
|
|
},
|
|
]
|
|
|
|
export default {
|
|
components: {
|
|
SearchForm,
|
|
QiunDataCharts,
|
|
},
|
|
data() {
|
|
return {
|
|
filterParmas: {},
|
|
searchFormSchema: [
|
|
{
|
|
field: 'base',
|
|
label: '基地',
|
|
component: 'ApiSelect',
|
|
componentProps: ({ formActionType }) => {
|
|
return {
|
|
api: async (e) => {
|
|
const { data } = await http.get(
|
|
'/api/agricultural-device-basic',
|
|
{
|
|
params: e,
|
|
}
|
|
)
|
|
return data.data
|
|
},
|
|
onOptionsChange: (options) => {
|
|
const { setFieldsValue } = formActionType
|
|
if (options.length) {
|
|
setFieldsValue({
|
|
base: options[0].value,
|
|
})
|
|
}
|
|
},
|
|
labelField: 'name',
|
|
valueField: 'id',
|
|
params: {
|
|
device_type: 7,
|
|
},
|
|
}
|
|
},
|
|
},
|
|
{
|
|
field: 'device_id',
|
|
component: 'ApiSelect',
|
|
label: '监控点',
|
|
componentProps: ({ formModel, formActionType }) => {
|
|
return {
|
|
placeholder: '监控点',
|
|
api: async (e) => {
|
|
if (e.agricultural_basic == null) return []
|
|
const { data } = await http.get(
|
|
`/api/agricultural-device-point/${e.agricultural_basic}`,
|
|
{
|
|
params: e,
|
|
}
|
|
)
|
|
return formatDataByObject(data.data)
|
|
},
|
|
onOptionsChange: (options) => {
|
|
const { setFieldsValue } = formActionType
|
|
|
|
if (options.length)
|
|
setFieldsValue({
|
|
device_id: options[0].value,
|
|
})
|
|
},
|
|
params: {
|
|
device_type: 7,
|
|
agricultural_basic: formModel.base,
|
|
},
|
|
labelField: 'label',
|
|
valueField: 'value',
|
|
}
|
|
},
|
|
},
|
|
{
|
|
field: '[start_time, end_time]',
|
|
label: '日期',
|
|
component: 'Calendar',
|
|
defaultValue: [
|
|
this.$u.timeFormat(
|
|
new Date().getTime() - 1000 * 60 * 60 * 24 * 7,
|
|
'yyyy-mm-dd'
|
|
),
|
|
this.$u.timeFormat(new Date().getTime(), 'yyyy-mm-dd'),
|
|
],
|
|
componentProps: {
|
|
mode: 'range',
|
|
placeholder: ['开始时间', '结束时间'],
|
|
},
|
|
},
|
|
],
|
|
chatList: [],
|
|
opts: {
|
|
dataLabel: false, //显示数据
|
|
padding: [15, 15, 15, 15],
|
|
xAxis: {
|
|
disableGrid: true,
|
|
labelCount: 7,
|
|
rotateLabel: true,
|
|
rotateAngle: 30,
|
|
},
|
|
yAxis: {
|
|
gridType: 'dash',
|
|
data: [
|
|
{
|
|
min: 0,
|
|
},
|
|
],
|
|
},
|
|
legend: {
|
|
show: false,
|
|
},
|
|
extra: {
|
|
area: {
|
|
type: 'curve',
|
|
opacity: 0.9,
|
|
addLine: true,
|
|
gradient: true,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
},
|
|
methods: {
|
|
handleSubmit(e) {
|
|
this.filterParmas = e
|
|
this.getData()
|
|
},
|
|
async getData() {
|
|
this.chatList = []
|
|
if (!this.filterParmas.device_id){
|
|
return this.$u.toast('没有关联基地')
|
|
}
|
|
const { data } = await http.get('/api/monitoring-data', {
|
|
params: this.filterParmas,
|
|
})
|
|
const { data: resData } = data
|
|
|
|
const arr = []
|
|
Object.keys(resData).forEach((key) => {
|
|
const item = tagMenus.find((item) => item.value === key)
|
|
if (item) {
|
|
let res = {
|
|
categories: Object.keys(resData[key]).map((item) => {
|
|
return this.$u.date(item, 'yyyy-mm-dd')
|
|
}),
|
|
series: [
|
|
{
|
|
name: item.lable,
|
|
data: Object.values(resData[key]),
|
|
},
|
|
],
|
|
}
|
|
arr.push({
|
|
...item,
|
|
chatOpt: JSON.parse(JSON.stringify(res)),
|
|
})
|
|
}
|
|
})
|
|
console.log(arr)
|
|
this.chatList = arr
|
|
},
|
|
},
|
|
}
|
|
</script>
|