• Vue + ElementUI的电商管理系统实例16 数据报表


    1、创建数据报表分支report并push到远程

    创建分支:

    git checkout -b report

    推送到远程:(以前码云中没有该分支,所以要加-u,如果码云中有该分支,则不需要加-u)

    git push -u origin report

    2、通过路由加载数据报表组件

    新建report文件夹和Report.vue文件:

    <template>
    <div>报表组件</div>
    </template>
    
    <script>
    export default {
    
    }
    </script>
    
    <style lang="less" scoped>
    
    </style>

    添加路由:

    import Report from '../components/report/Report.vue'
    
    const routes = [
      { path: '/', redirect: '/login' }, // 重定向
      { path: '/login', component: Login },
      {
        path: '/home',
        component: Home,
        redirect: '/welcome', // 重定向
        children: [ // 子路由
          { path: '/welcome', component: Welcome },
          { path: '/users', component: Users }, // 用户列表
          { path: '/rights', component: Rights }, // 权限列表
          { path: '/roles', component: Roles }, // 角色列表
          { path: '/categories', component: Cate }, // 商品分类
          { path: '/params', component: Params }, // 分类参数
          { path: '/goods', component: List }, // 商品列表
          { path: '/goods/add', component: Add }, // 添加商品
          { path: '/orders', component: Order }, // 订单列表
          { path: '/reports', component: Report } // 数据报表
        ]
      }
    ]

    点击左侧菜单的商品分类的效果如图:

    3、绘制数据报表组件的基本布局

    还是面包屑和card视图:

    <template>
    <div>
      <!--面包屑导航区域-->
      <el-breadcrumb separator-class="el-icon-arrow-right">
          <el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
          <el-breadcrumb-item>数据统计</el-breadcrumb-item>
          <el-breadcrumb-item>数据报表</el-breadcrumb-item>
      </el-breadcrumb>
      <!--卡片视图区域-->
      <el-card>
        11
      </el-card>
    </div>
    </template>

    4、安装Echarts并渲染Demo图表

    打开可视化工具,点击项目依赖--添加依赖--运行依赖 中搜索:echarts,然后进行安装。

    回到Report.vue文件,导入echarts:

    import echarts from 'echarts'

    然后添加 echarts 区域:

    <!--卡片视图区域-->
    <el-card>
        <!-- 2.为ECharts准备一个具备大小(宽高)的Dom -->
        <div id="main" style=" 600px;height:400px;"></div>
    </el-card>
    
    <script>
    // 1.导入 echarts
    import echarts from 'echarts'
    export default {
      // 此时页面上的元素,已经被渲染完毕
      mounted() {
        // 3.基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'))
    
        // 4.指定图表的配置项和数据
        var option = {
          title: {
            text: 'ECharts 入门示例'
          },
          tooltip: {},
          legend: {
            data: ['销量']
          },
          xAxis: {
            data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
          },
          yAxis: {},
          series: [{
            name: '销量',
            type: 'bar',
            data: [5, 20, 36, 10, 10, 20]
          }]
        }
    
        // 5.使用刚指定的配置项和数据显示图表。
        myChart.setOption(option)
      }
    }
    </script>

    此时刷新页面:

    5、获取折线图数据并渲染图表

    发起请求,调用api的基于时间统计的折线图接口,请求路径:reports/type/1,请求方法:get,不需要传递参数。

    // 此时页面上的元素,已经被渲染完毕
      async mounted() {
        // 3.基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'))
    
        const { data: res } = await this.$http.get('reports/type/1')
        if (res.meta.status !== 200) {
          return this.$message.error('获取折线图数据失败')
        }
        console.log(res)
    
        // 4.指定图表的配置项和数据
        // var option = {
        //   title: {
        //     text: 'ECharts 入门示例'
        //   },
        //   tooltip: {},
        //   legend: {
        //     data: ['销量']
        //   },
        //   xAxis: {
        //     data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
        //   },
        //   yAxis: {},
        //   series: [{
        //     name: '销量',
        //     type: 'bar',
        //     data: [5, 20, 36, 10, 10, 20]
        //   }]
        // }
    
        // 5.使用刚指定的配置项和数据显示图表。
        myChart.setOption(res.data)
      }

    此时刷新可以看到效果图:

    但是缺少了鼠标跟随的效果,下面进行添加。

    需要将返回的数据和 option 进行合并,然后把合并后的结果给图表

    import _ from 'lodash'
    export default {
      data () {
        return {
          // 需要合并的数据
          options: {
            title: {
              text: '用户来源'
            },
            tooltip: {
              trigger: 'axis',
              axisPointer: {
                type: 'cross',
                label: {
                  backgroundColor: '#E9EEF3'
                }
              }
            },
            grid: {
              left: '3%',
              right: '4%',
              bottom: '3%',
              containLabel: true
            },
            xAxis: [
              {
                boundaryGap: false
              }
            ],
            yAxis: [
              {
                type: 'value'
              }
            ]
          }
        }
      },
      // 此时页面上的元素,已经被渲染完毕
      async mounted() {
        、、、
        // 4.指定图表的配置项和数据
        // merge 函数,可以合并两个对象
        const result = _.merge(res.data, this.options)
    
        // 5.使用刚指定的配置项和数据显示图表。
        myChart.setOption(result)
      }
    }
    </script>

    如果觉得图表比较小,可以调整宽和高:

    <!-- 2.为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style=" 750px;height:400px;"></div>

    此时效果图:

    可以提交代码了:

    git add .
    git commit -m "完成了报表功能的开发"
    git push
    
    git checkout master
    git merge report
    git push
  • 相关阅读:
    对jquery的 attr()和prop()理解
    你真的了解javascript吗
    js代码的一些小技巧
    导出导入数据库
    Mysql授权root用户远程登录
    Centos 忘记root密码怎么办?
    linux挂载概念简述:
    centos7防火墙设置
    centos 防火墙
    centos共享目录
  • 原文地址:https://www.cnblogs.com/joe235/p/12610909.html
Copyright © 2020-2023  润新知