| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381 | // pages/data/index.jsimport http from '../../utils/http'import util from '../../utils/util'import api from '../../utils/api'const app = getApp()import * as echarts from '../../ec-canvas/echarts';let chart = null;let option = {}function initChart(canvas, width, height, dpr) {  chart = echarts.init(canvas, null, {    width: width,    height: height,    devicePixelRatio: dpr // new  });  canvas.setChart(chart);  option = {    legend: {      data: []    },    xAxis: {      type: 'category',      data: []    },    yAxis: {      type: 'value',      show: false    },    series: [{      data: [],      type: 'bar'    }]  };  chart.setOption(option);  return chart;}Page({  /**   * 页面的初始数据   */  data: {    projects: [],    project_ids: [],    project_names: '',    total_money: '0',    month_money: '0',    projectShow: false,    index: 0,    show: false,    isSearch: true,    charts: [{      name: '柱状图',      type: 'bar'    }, {      name: '折线图',      type: 'line'    }, {      name: '饼状图',      type: 'pie'    }, {      name: '明细图',      type: 'detail'    }, {      name: '雷达图',      type: 'radar'    }],    chartIndex: 0,    dateTypes: [{      name: '按年',      type: 'year'    }, {      name: '按月',      type: 'month'    }],    dateIndex: 0,    dateShow: false,    years_months: [],    date: '',    start: '',    end: '',    max_date: '',    min_date: '',    filter: {},    data: [],    ec: {      onInit: initChart    },    detail_data: []  },  /**   * 生命周期函数--监听页面加载   */  onLoad: function (options) {    var that = this    api.getByName(this, 'projects/getAll', 'projects', {}, function (res) {      that.getData()    });    // api.getByName(this, 'data/getYearsAndMonths', 'years_months');    // var maxDate = (new Date()).getTime()    // var minDate = (new Date()).getTime() - 2 * 365 * 24 * 3600 * 1000    // this.setData({    //   minDate,    //   maxDate    // })    this.getDateInfo()    app.resetDataFilter()  },  switchCheck: function (e) {    var index = e.currentTarget.dataset.index    var projects = this.data.projects    projects[index].checked = projects[index].checked ? false : true    this.setData({      projects    })  },  closeProject: function (e) {    var project_ids = []    var project_names = []    var projects = this.data.projects    for (var i = 0; i < projects.length; ++i) {      if (projects[i].checked) {        project_ids.push(projects[i].id)        project_names.push(projects[i].name)      }    }    project_names = project_names.join(',')    this.setData({      project_ids,      project_names    })    this.switchShow(e)    this.getData()    this.getTotalInfo()  },  getSearchItems: function () {    var ids = this.data.project_ids    if (ids.length <= 0) return false    var filter = this.data.filter    var chart_type = this.data.charts[this.data.chartIndex]    // var chat     return {      project_ids: ids,      start_date: this.data.start_date,      end_date: this.data.end_date,      date: this.data.date,      type: this.data.dateIndex == 0 ? 'year' : 'month',      device_ids: filter.device_ids,      device_name_ids: filter.device_name_ids,      spec_ids: filter.spec_ids,      rent_type_ids: filter.rent_type_ids,      chart_type: chart_type.type    }  },  getTotalInfo() {    var data = this.getSearchItems()    var that = this    http({      url: 'data/getTotalInfo',      data: data,      success: function (res) {        if (res.code == 0) {          that.setData(res.data)        }      }    })  },  getDetailData() {    var data = this.getSearchItems()    var that = this    http({      url: 'data/getDetailData',      data: data,      success: function (res) {        if (res.code == 0) {          that.setData({            detail_data: res.data          })        }      }    })  },  getData() {    var data = this.getSearchItems()    var that = this    if (!data.project_ids || data.project_ids.length <= 0) return false    var chart_type = this.data.charts[this.data.chartIndex]    http({      url: 'data/getStat',      data: data,      success: function (res) {        if (res.code == 0) {          if (chart_type == 'detail') {            that.setData({              detail_data: res.data            })          } else {            that.setData({              data: res.data            })            that.updateChart()          }        }      }    })  },  getDateInfo() {    var that = this    http({      url: 'data/getDateInfo',      data: {},      success: function (res) {        if (res.code == 0) {          that.setData(res.data)        }      }    })  },  onChange: function (e) {    var value = e.detail.value    var name = e.currentTarget.dataset.name    if (this.data[name] == value) return false;    this.setData({      [name]: value    })    if (name == 'chartIndex') {      var chart = this.data.charts[this.data.chartIndex]      if (chart.type == 'detail') {        this.getDetailData()      } else {        this.getData()      }    } else if (name == 'date') {      this.getTotalInfo()    }  },  updateChart: function () {    var data = this.data.data    option.xAxis.data = data.names;    option.legend = {      data: data.legends    }    var type = this.data.charts[this.data.chartIndex].type    if (type == 'pie') {      option.series = [{        data: data.data,        type: type,        label: {          position: 'inner',          formatter: '{b}\n{d}%'        }      }]      option.xAxis.show = false    } else if (type == 'radar') {      option.xAxis.show = false      option.radar = {        // shape: 'circle',        indicator: data.indicator      }      option.series = [{        type: type,        data: data.data      }]    } else {      option.xAxis.show = true      var values = data.values      for (var i = 0; i < values.length; ++i) {        option.series[i] = {          label: {            show: true,            position: 'top'          },          name: data.legends[i],          type: type,          data: values[i]        }      }    }    chart.setOption(option)  },  radioChange: function (e) {    var dateIndex = e.currentTarget.dataset.index    if (dateIndex == this.data.dateIndex) return false    var start_date = this.data.start_date    var end_date = this.data.end_date    var start_date = dateIndex == 1 ? start_date + '-01' : start_date.substr(0, 7)    var end_date = dateIndex == 1 ? end_date + '-01' : end_date.substr(0, 7)    this.setData({      dateIndex,      start_date,      end_date    })  },  switchShow: function (e) {    var name = e.currentTarget.dataset.name    var show = e.currentTarget.dataset.show ? e.currentTarget.dataset.show : !this.data[name]    this.setData({      [name]: show    })    if (name == 'dateShow' && !show) {      this.getData()    }  },  /**   * 生命周期函数--监听页面初次渲染完成   */  onReady: function () {  },  /**   * 生命周期函数--监听页面显示   */  onShow: function () {    // this.getTabBar().init();    var filter = wx.getStorageSync('sg-data-filters')    this.setData({      filter: filter    })    this.getData()  },  navigate: function (e) {    var url = e.currentTarget.dataset.url    wx.navigateTo({      url: url,    })  },  /**   * 生命周期函数--监听页面隐藏   */  onHide: function () {  },  /**   * 生命周期函数--监听页面卸载   */  onUnload: function () {  },  /**   * 页面相关事件处理函数--监听用户下拉动作   */  onPullDownRefresh: function () {  },  /**   * 页面上拉触底事件的处理函数   */  onReachBottom: function () {  },  /**   * 用户点击右上角分享   */  onShareAppMessage: function () {  }})
 |