美文网首页Vue
vue组建之——模拟K线数据

vue组建之——模拟K线数据

作者: OMYALL | 来源:发表于2019-01-08 17:39 被阅读0次

    子组建:


    <template>

      <div class='chart_cross'>

        <div ref="crossEchart" class="chart"></div>

      </div>

    </template>

    <script>

      // Echart图表

      import Echartfrom 'echarts'

      // VUEX

      import {mapState} from 'vuex'

      // 数组处理

      import _ from 'lodash'

      // Chart假数据

      const legendData = ['当天', '>2min', '1min-2min', '10s-1min', '<10s'];

      //  Chart_Grid配置文件

      const gridConfig = {

        left: '4%',

        right: '3%',

        bottom: '20%'

      };

      // 图表缩放探针配置(X/Y轴)

      const dataZoomConfig = [

        {type: 'inside', start: 50, end: 100},

        {show: true, type: 'slider', y: '90%', start: 50, end: 100}

    ]

      // Chart 颜色配置

      const upColor = '#ec0000';

      const upBorderColor = '#8A0000';

      const downColor = '#00da3c';

      const downBorderColor = '#008F28';

      //

      const chartDataArray = [

            ['2018/12/1', 224,202,123,306],

            ['2018/12/2', 360,232,232,65],

            ['2018/12/3', 204,386,323,402],

            ['2018/12/4', 229,235,654,204],

            ['2018/12/5', 138,245,534,504],

            ['2018/12/6', 197,43,423,324],

            ['2018/12/7', 263,824,124,503],

            ['2018/12/8', 235,234,523,65],

            ['2018/12/9', 223,156,234,424],

            ['2018/12/10', 258,210,654,42],

            ['2018/12/11', 297,324,234,53],

            ['2018/12/12', 290,312,534,76],

            ['2018/12/13', 316,341,654,76],

            ['2018/12/14', 231,299,235,76],

            ['2018/12/15', 357,312,876,65],

            ['2018/12/16', 876,268,234,42],

            ['2018/12/17', 296,312,342,24],

            ['2018/12/18', 426,387,24,42],

            ['2018/12/19', 246,377,543,32],

            ['2018/12/20', 190,367,567,65],

            ['2018/12/21', 193,356,547,34],

            ['2018/12/22', 215,325,125,43],

            ['2018/12/23', 204,245,85,27],

            ['2018/12/24', 252,245,234,24],

            ['2018/12/25', 235,65,237,54],

            ['2018/12/26', 537,266,273,54],

            ['2018/12/27', 634,245,256,24],

            ['2018/12/28', 215,422,423,25],

            ['2018/12/29', 254,234,234,63],

            ['2018/12/30', 297,457,4,35],

            ['2018/12/31', 230,236,54,453]

    ]

      // 数据切割(每天)

      const splitData = (rawData) =>{

        let categoryData = [];

        let values = [];

        _.forEach(rawData, item=>{

          categoryData.push(item.splice(0, 1)[0]);

          values.push(item)

    })

        return {

          categoryData: categoryData,

          values: values

        };

      };

      const chartData = splitData(chartDataArray);

      // 数据切割(自定义条件)

      const calculateMA = (dayCount) =>{

        let result = [];

        for (let i = 0; i < chartData.values.length; i++) {

          if (i < dayCount) {

            result.push('-');

    continue;

          }

          let sum = 0;

          // 计算平均值

          for (let j = 0; j < dayCount; j++) {

            sum += chartData.values[i - j][1];

          }

          result.push(sum / dayCount);

        }

        return result;

      }

      export default {

        // 通话次数趋势K线图

        title: '',

        name: 'login',

        computed: {

          ...mapState({

            // chartData: state => state.vux.chartData

          })

        },

        props: {},

        // 组建刷新

        inject: ['reload'],

        // 挂在组建

        components: {},

        data() {

          return {

            chrossData: []

    }

        },

        // 初始化记载

        created() {

          // 先处理图表数据

          let vue = this;

        },

        // DOM加载完毕执行操作

        mounted() {

          let vue = this;

          vue.initChart();

        },

        // 事件处理

        methods: {

          // 初始化Chart

          initChart() {

            let vue = this;

            vue.chart= Echart.init(vue.$refs.crossEchart);

            vue.chart.setOption({

              tooltip: {

                trigger: 'axis',

                axisPointer: {

                  type: 'cross'

                }

              },

              legend: {

                data: legendData

              },

              grid: gridConfig,

              xAxis: {

                type: 'category',

                data: chartData.categoryData,

                scale: true,

                boundaryGap: false,

                axisLine: {onZero: false},

                splitLine: {show: false},

                splitNumber: 20,

                min: 'dataMin',

                max: 'dataMax'

              },

              yAxis: {

                scale: true,

                splitArea: {

                  show: true

                }

              },

              dataZoom: dataZoomConfig,

              series: [{

                  name: '当天',

                  type: 'candlestick',

                  data: chartData.values,

                  itemStyle: {

                    normal: {

                      color: upColor,

                      color0: downColor,

                      borderColor: upBorderColor,

                      borderColor0: downBorderColor

                    }

    }

              }, {

                name: '>2min',

                type: 'line',

                data: calculateMA(5),

                smooth: true,

                lineStyle: {

                  normal: {opacity: 0.5}

    }

              }, {

                name: '1min-2min',

                type: 'line',

                data: calculateMA(10),

                smooth: true,

                lineStyle: {

                  normal: {opacity: 0.5}

    }

              }, {

                name: '10s-1min',

                type: 'line',

                data: calculateMA(15),

                smooth: true,

                lineStyle: {

                  normal: {opacity: 0.5}

    }

              }, {

                name: '<10s',

                type: 'line',

                data: calculateMA(20),

                smooth: true,

                lineStyle: {

                  normal: {opacity: 0.5}

    }

    }]

    })

          },

          // 图表数据填充

          setChartOptions() {

            let vue = this;

          }

        },

        // 离开路由的操作

        destroyed() {

    }

    }

    </script>

    <style scoped lang='less'>

      .chart_cross {

        width:100%;

        height:250px;

      }

      .chart{width:100%;height:250px}

    </style>


    父组建:     <chartCross></chartCross>


    相关文章

      网友评论

        本文标题:vue组建之——模拟K线数据

        本文链接:https://www.haomeiwen.com/subject/vrybrqtx.html