zoukankan      html  css  js  c++  java
  • 微信小程序之使用ecarts---详细步骤

    由于第一次接触ecarts,而这次的需求又是在小程序上整个ecarts报表,所以踩了不少坑,下面做个简单记录。

      首先,下载echarts微信版 地址:https://github.com/ecomfe/echarts-for-weixin

      下载之后是这样的如下图所示:

      

    将下载好的文件中 ec-canvas目录 放在小程序项目目录中即可。如下图所示:

      

    然后开始搭建页面结构,我做的效果图如下:

    1.wxml代码:

      <view class="container">

                <ec-canvas id="mychart-dom-bar" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>
           </view>

     2.wxss代码:

      
      ec-canvas {
       100%;
      height: 100%;
      }
      /* 解决搬运代码之后页面变成空白 */
      .container {
      position: absolute;
      top: 0;
      bottom: 0;
      left: 0;
      right: 0;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: space-between;
      box-sizing: border-box;
      }
      .picker-pos{
      margin-top: -130rpx;
      margin-left: 150rpx;
      color: blueviolet
    }

    3.json代码:

      
      {
      "usingComponents": {
      "ec-canvas": "../../ec-canvas/ec-canvas"
        }
      }
     

    4.js代码:  

    import * as echarts from '../../ec-canvas/echarts';
    let App = getApp();
    var proname = [];//费用项名称
    var curvalue_sum = [];//当月总金额
    var audvalue = [];//批复金额

    let chart = null;

    Page({
    data: {
    ec: {
    onInit: function (canvas, width, height) {
    //初始化echarts元素,绑定到全局变量,方便更改数据
    chart = echarts.init(canvas, null, {
    width,
    height: height
    });
    canvas.setChart(chart);
    return chart;
    }
    }
    },
    //调取费控统计接口
    otherCostReport: function () {
    var that = this;
    wx.showLoading({
    title: '加载中',
    });
    wx.request({
    url: App.globalData.PubUrl + "/Api/OtherCost/OtherCostReport?conn=" + App.globalData.conn,
    data: {
    "platform": App.globalData.conn,
    "Code": wx.getStorageSync('Code'),
    "UserCode": wx.getStorageSync('userCode'),
    "ck": wx.getStorageSync('ck'),
    "time": wx.getStorageSync('cdata')
    },
    header: {
    'content-type': 'application/json'
    },
    method: 'POST',
    success(res) {
    if (res.data.Code == 1 && res.data.WsCode == 1) {
    let oc_list = res.data.Data.oc_list;
    oc_list.map(ele => {
    proname.push(ele.proname);
    curvalue_sum.push(ele.curvalue_sum);
    audvalue.push(ele.audvalue);
    })
    // 绘制图表
    chart.setOption({
    color: ['#37a2da', '#9acd34'],
    tooltip: {
    trigger: 'axis',
    axisPointer: { // 坐标轴指示器,坐标轴触发有效
    type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
    }
    },
    legend: {
    textStyle: { //图例文字的样式
    color: '#000',
    fontSize: 14
    },
    data: ['消费金额', '批复金额']
    },
    grid: {
    left: 10,
    right: 20,
    bottom: 15,
    top: 40,
    containLabel: true
    },
    toolbox: {
    show: true,
    },
    calculable: true,
    //X轴数值
    xAxis: [
    {
    type: 'value'
    }
    ],
    yAxis: [
    //Y轴数据
    {
    type: 'category',
    data: proname
    }
    ],
    //给图表设置滚轮
    dataZoom: [
    {
    type: 'slider',
    show: true,
    yAxisIndex: [0],
    left: '94%',
    fontSize: 12,
    start: 0, //数据窗口范围的起始百分比
    end: 50
    },
    {
    type: 'inside',
    yAxisIndex: [0],
    fontSize: 14,
    start: 0,
    end: 50
    }
    ],
    series: [
    {
    name: '消费金额',
    type: 'bar',
    stack: '总量',
    itemStyle: {
    normal: {
    label: { show: true, position: 'insidetop', fontSize: 12,rich: {} }
    }
    },
    data: curvalue_sum
    },
    {
    name: '批复金额',
    type: 'bar',
    stack: '总量',
    itemStyle: {
    normal: {
    label: { show: true, position: 'right',formatter: function (p) { return p.value > 0 ? (p.value + ' ') : ''; }, fontSize: 10,rich: {}}
    } },
    data: audvalue
    }
    ]
    },true)
    //解决页面二次渲染重复数据问题
    proname = [];//费用项名称
    curvalue_sum = [];//当月总金额
    audvalue = [];//批复金额
    }

    wx.hideLoading();
    },
    fail(res) {
    setTimeout(function () {
    wx.hideLoading();
    }, 2000);
    }
    })

    },
     
    /**
    * 生命周期函数--监听页面加载
    */
    onLoad: function (options) {

    },
    /**
    * 生命周期函数--监听页面初次渲染完成
    */
    onReady() {
    setTimeout(this.otherCostReport, 500);
    }
    });
     

    到这一步就完成了,我是通过调用后台接口获取的动态数据然后进行图表渲染;

     

      

  • 相关阅读:
    Nhibernate 在一个项目中连接不同的数据库。记录
    sql2005 向2000导入数据。一些注意事项
    iis发布系统问题总结 .....关于handler的重写的应用
    ExecutorService 线程池
    Spring Boot 访问静态资源
    spring boot的核心注解
    日期处理工具类
    Json解析工具类
    (技能篇)Mysql在linux下的全量热备份
    Linux相关命令
  • 原文地址:https://www.cnblogs.com/txya/p/11427859.html
Copyright © 2011-2022 走看看