小程序循环多个图表

.xml

<view >
  <van-row style="margin:15px">
    <van-col span="24">
      <van-field  readonly value="{{ name }}"  border="{{ false }}" disabled is-link bindtap="showPopup"   label="传感器类别:"/>
      <van-popup show="{{show}}" position="top">
    <van-picker columns="{{categoryArr}}" show-toolbar bind:cancel="categoryOnClose" bind:confirm="onConfirm"
      value-key="name" />
  </van-popup>
    </van-col>
    <!-- <van-col span="4">
      <van-button type="primary" size="small" style="  line-height: 90rpx;" bindtap="getCategoryArr">查询</van-button>
    </van-col>  -->
  </van-row> 
  <van-row> 
  <van-col span="9"> <pickerYMDHM class="fl" placeholder="{{placeholder}}" date="{{date}}" disabled="{{disabled}}"
    bind:onPickerChange="onPickerChange" startDate="{{startDate}}" endDate="{{endDate}}">
  </pickerYMDHM> </van-col>
  <van-col span="9"><pickerYMDHM   class="fl" placeholder="{{placeholder1}}" date="{{date1}}" disabled="{{disabled}}"
    bind:onPickerChange="onPickerChange1" startDate="{{startDate1}}" endDate="{{endDate1}}">
  </pickerYMDHM></van-col>
  <van-col span="6"><van-button type="primary" size="small" style="line-height: 40px;margin-left:20px" bindtap="getCategoryArrqqqqq">查询</van-button></van-col>
</van-row> 

  <!-- 循环多个图表 -->
  <view class="boxxx" wx:for="{{ecLine}}" wx:key="index">
    <ec-canvas wx:if="{{!show}}" id="{{'myecharts' + index}}" canvas-id="{{'myecharts' + index}}" ec="{{ ecLine[index] }}"></ec-canvas>
  </view>
  
</view>

.js

const api = require('../../utils/api.js') // 引入api接口管理文件
import * as echarts from '../../ec-canvas/echarts';
var lessonChart = null;
function getOption(xAxis, yAxis1, yAxis2, yAxis3,nameN) {
  var option = {
      title: {
        text: nameN,
        left: 'center',
        textStyle: {
            fontSize: 14,
            color: '#696969'
        }, 
    }, 
    legend: {
      data: ['最大值', '最小值', '典型值'],
      top: 25,
      left: 'center',
      z: 0
    },
    xAxis: {
      type: 'category',
      boundaryGap: false,
      data: xAxis,
      axisLabel: {
        interval: 2, //x轴间隔多少显示刻度
        fontSize: 8,
      }
    },
    yAxis: {
      type: 'value'
    },
    series: [{
      name: '最大值',
      type: 'line',
      smooth: true,
      data: yAxis1,
    }, {
      name: '最小值',
      type: 'line',
      smooth: true,
      data: yAxis2,
    }, {
      name: '典型值',
      type: 'line',
      smooth: true,
      data: yAxis3,
    }]
  };
  return option;
}
Page({
  data: {  
    categoryArr: [],
    ecLine: [], 
    // //弹出层控制
    show: false,
    id: '',
    name: '', 
    date: '2021-11-20 9:00',
    disabled: false, //设置是否能点击 false可以 true不能点击
    startDate: '2021-11-20 9:00',
    endDate: '2028-03-12 12:38',
    placeholder: '查询开始时间',
    date1: '2021-11-20 9:00',
    startDate1:'2021-11-20 9:00',
    endDate1: '2028-03-12 12:38', 
    placeholder1: '查询结束时间',
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (option) {
    this.getinfo() ;
  },
  onPickerChange: function (e) { 
    this.setData({
      date: e.detail.dateString, 
    }) 
  }, 
   onPickerChange1: function (e) {
    console.log(e.detail);
    this.setData({
      date1: e.detail.dateString
    }) 
  },
  //按时间查询 这个先不用管
  getCategoryArrqqqqq(){
    var _this = this;
    // 模拟请求后台接口之后返回的数据
    if(this.data.id ==""){
      wx.showToast({
        title: '请选择传感器类别!',
        icon: 'none',
        duration: 2000
      })
      return false
    } 
    api._get('/oil/tranInfoMax/'+this.data.id, {
      starTime:this.data.date,
      endTime:this.data.date1
    }).then(res => { 
      let ecLineArr = []; 
      // 先清掉旧的canvas的缓存
      _this.setData({
        ecLine: ecLineArr
      }) 
      let dataArr = res.paramList; 
      let nameList = res.nameList; 
      var arr = []; //定义数组
      //字符串转数组
      for (var i in dataArr) {
        arr.push(dataArr[i]);
      } 
      for (let i = 0; i < arr.length; i++) {
        let objAttr = {}; 
        for (let j = 0; j < arr[i].length; j++) {
          //给对象赋属性名,属性值
          if (0 == j) {
            var key = "yAxis1";
            var value = arr[i][j]
            objAttr[key] = value; 
          }
          if (1 == j) {
            var key = "yAxis2";
            var value = arr[i][j]
            objAttr[key] = value; 
          }
          if (2 == j) {
            var key = "yAxis3";
            var value = arr[i][j]
            objAttr[key] = value;
          }
          if (3 == j) {
            var key = "xAxis";
            var value = arr[i][j]; 
            var arryTime=[];
            value.forEach(element => {
              var element= element.substring(5,10);
              arryTime.push(element)
            });
            objAttr[key] = arryTime;
          } 
        } 
        let obj = { 
          onInit: function (canvas, width, height) { 
            //初始化echarts元素 
            lessonChart = echarts.init(canvas, null, {
              width: width,
              height: height
            });      
            canvas.setChart(lessonChart); 
         
            var option = getOption(objAttr.xAxis, objAttr.yAxis1, objAttr.yAxis2, objAttr.yAxis3,nameList[i].title); 
            console.log(objAttr.yAxis3, )
            lessonChart.clear();  
            lessonChart.setOption(option,true);  
            return lessonChart;  
          }
           
        }
        ecLineArr.push(obj);
      }
      _this.setData({
        ecLine: ecLineArr
      })
    }).catch(e => {
      console.log(e)
    })
  },
  getDetail: function () {
    var _this = this;
    // 模拟请求后台接口之后返回的数据
    let dataArrone = [
      //   {
      //     xAxis: ['02-11', '02-13', '02-15', '02-17', '02-23', '02-25', '02-28'],
      //     yAxis1: [1.4, 1.3, 1.6, 1.9, 1.8, 1.6, 2.0],
      //     yAxis2: [1.8, 1.6, 1.7, 1.8, 1.0, 1.6, 3.0],
      //     yAxis3: [2.4, 2.3, 2.6, 1.9, 1.8, 2.6, 2.0],
      //   },
      //   {
      //     xAxis: ['03-11', '03-13', '03-15', '03-17', '03-23', '03-25', '03-28'],
      //     yAxis1: [2.4, 2.3, 2.6, 1.9, 1.8, 2.6, 2.0],
      //     yAxis2: [1.8, 1.6, 1.7, 1.8, 1.0, 1.6, 3.0],
      //     yAxis3: [1.4, 1.3, 1.6, 1.9, 1.8, 1.6, 2.0],
      //   }
    ]
//类别查询
    api._get('/oil/tranInfoMax/'+this.data.id, ).then(res => {

      let ecLineArr = [];
      // 先清掉旧的canvas的缓存
      _this.setData({
        ecLine: ecLineArr
      })
      let dataArr = res.paramList; 
      let nameList = res.nameList; 
      var arr = []; //定义数组
      //字符串转数组
      for (var i in dataArr) {
        arr.push(dataArr[i]);
      }
      console.log(2)
      for (let i = 0; i < arr.length; i++) {
        let objAttr = {}; 
        for (let j = 0; j < arr[i].length; j++) {
          //给对象赋属性名,属性值
          if (0 == j) {
            var key = "yAxis1";
            var value = arr[i][j]
            objAttr[key] = value; 
          }
          if (1 == j) {
            var key = "yAxis2";
            var value = arr[i][j]
            objAttr[key] = value; 
          }
          if (2 == j) {
            var key = "yAxis3";
            var value = arr[i][j]
            objAttr[key] = value;
          }
          if (3 == j) {
            var key = "xAxis";
            var value = arr[i][j]; 
            var arryTime=[];
            value.forEach(element => {
              var element= element.substring(5,10);
              arryTime.push(element)
            });
            objAttr[key] = arryTime;
          }
        } 
        let obj = {
          onInit: function (canvas, width, height) {
            //初始化echarts元素 
            console.log(lessonChart)
            lessonChart = echarts.init(canvas, null, {
              width: width,
              height: height
            });      
            canvas.setChart(lessonChart); 
            // debugger //这里只执行了一次
            console.log(3)
            var option = getOption(objAttr.xAxis, objAttr.yAxis1, objAttr.yAxis2, objAttr.yAxis3,nameList[i].title);
            lessonChart.setOption(option,true); 
            console.log(4)
            return lessonChart;
          }
        } 
        ecLineArr.push(obj);
        console.log("ecLineArr",ecLineArr)
      }
      _this.setData({
        ecLine: ecLineArr
      })  
    }).catch(e => {
      console.log(e)
    })
  },
  // 获取 下拉框信息 
  getinfo() {
    api._get('/oil/queryTranList/' + wx.getStorageSync('userId'), {}).then(res => {
      this.setData({ 
        categoryArr: Object.assign([], res.tranList),
      })
    }).catch(e => {
      console.log(e)
    })
  },

  // 查询获取
  getCategoryArr() {
    if(this.data.id ==""){
      wx.showToast({
        title: '请选择传感器类别!',
        icon: 'none',
        duration: 2000
      })
      return false
    }
    api._get('/oil/tranInfo/' + this.data.id, ).then(res => {
      let arr = []
      res.bodyList.forEach((item, index) => {
        for (const key in item) {
          item[key] = item[key] ? item[key] : '-'
        }
        arr.push(item)
      })
      this.setData({
        headerList: Object.assign([], res.headerList),
        bodyList: Object.assign([], res.bodyList),
      })
      var _this = this;
      console.log(1)
      _this.getDetail();
    }).catch(e => {
      console.log(e)
    })
  },
  //选择器 点击完成按钮时触发
  onConfirm(event) {
    this.setData({
      'id': event.detail.value.id,
      'name': event.detail.value.name,
      show: false,
    });
    this.getCategoryArr();
  },
  //选择器 点击取消按钮时触发
  categoryOnClose() {
    this.setData({
      show: false
    });
  },
  //点击触发弹出框
  showPopup() {
    this.setData({
      show: true
    });
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载 
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值