element-ui表单前后端数据的交互以及简单的echarts

一.效果以及引入

             Echarts是使用js实现的开源可视化库 与vue高度契合,提供直观,交互丰富,可高度个性化定制的数据可视化图标。Echarts支持全局引入以及局部引入 支持组件封装。

       在main.js中引入

       功能与实际效果

             创建表单,点击表单的每一行 可以将数据传入到echats并画饼状图

二.表单功能创建

                表单部分采用了element组件中的表单单选 ,实现点击每一行传入每一行数据,绘制饼状图。

<template>
  <div class="app-container">
 <div style="text-align:center">    
   <div id="chartPie" :style="{ width: '100%', height: '600px'}" />
</div> 
  <!-- echarts盒子 --> 
     
    <el-table
     
      highlight-current-row
      @current-change="handleCurrentChange"
      v-loading="loading"
      :data="NackNameList"
    >
      <el-table-column label="业务员" align="center" prop="nickName" />
      <el-table-column label="保费总额" align="center" prop="totalPrice" />
      <el-table-column label="保费成本" align="center" prop="totalExpend" />
      <el-table-column label="直返" align="center" prop="totalDirectReturn" />
      <el-table-column label="发票成本" align="center" prop="totalInvoiceCost" />
      <el-table-column label="毛利润" align="center" prop="totalProfit" />
      <el-table-column label="毛利润率" align="center" prop="totalProfitMargin" />
      <el-table-column label="业绩" align="center" prop="totalAchievement" />
    </el-table>
    <!-- 分页 -->
    <pagination
      v-show="total > 0"
      :total="total"
      :page.sync="queryParams.pageNum"
      :limit.sync="queryParams.pageSize"
      @pagination="getList"
    />
  </div>
</template>

           

三.界面交互逻辑部分

               首先需要请求后端接口获取数据 ,并引入接口

 api/inside/salesname.js 

import request from '@/utils/request'

//查询业务员名称
export function nickName(query){
    return request({
        url:'/inside/book/salesmanReport', 
        method:'get',
        params: query
    })
}

界面引入接口

import { nickName } from '@/api/inside/salesname'

模块引入,参数定义,方法创建,

<script>
export default {
  name: 'Radio',
  data() {
    return {
      queryParams: {},
      total: 0,
      chartPie: null,
      pieDate: [],
      NackNameList: [],
      // 业务员参数
      salesName: [],
      // 表单参数
      form: {},
      // 表单校验
      rules: {
      }
    }
  },
mounted: function() {
    // this.drawCharts()
  },
created() {
    // 获取表单数据
    this.getList()
  },
 methods: {
    getList() {
      this.loading = true
      nickName(this.queryParams).then(response => {
        this.NackNameList = response.rows
        this.total = response.total
        this.loading = false
        const data = response.rows[0]
        // 默认选取第一行
        this.$refs.tb.setCurrentRow(response.rows[0])
  this.pieDate[0] = {
          name: '业绩',
          value: data.totalAchievement
        }
        this.pieDate[1] = {
          value: data.totalInvoiceCost,
          name: '成本'
        }
        this.pieDate[2] = {
          value: data.totalDirectReturn,
          name: '直返'
        }
        this.pieDate[3] = {
          value: data.totalProfit,
          name: '毛利润'
        }
   this.drawPieChart()
      })
    },
    handleCurrentChange(val) {
      this.currentRow = val
      this.pieDate[0] = {
        name: '业绩',
        value: this.currentRow.totalAchievement
      }
      this.pieDate[1] = {
        value: this.currentRow.totalInvoiceCost,
        name: '成本'
      }
      this.pieDate[2] = {
        value: this.currentRow.totalDirectReturn,
        name: '直返'
      }
      this.pieDate[3] = {
        value: this.currentRow.totalProfit,
        name: '毛利润'
      }
      this.drawPieChart()
    },
  drawPieChart() {
      this.chartPie = this.$echarts.init(document.getElementById('chartPie'))
      this.chartPie.setOption({
        title: {
          text: '保费总额',
          subtext: '',
          x: 'center'
        },

        tooltip: {
          trigger: 'item',
          formatter: '{a} <br/>{b} : {c} ({d}%)'
        },
        legend: {
          top: 'middle',
          orient: 'vertical',
          left: 50,
          data: ['保费成本', '直返', '发票成本', '毛利润']
        },
        series: [
          {
            name: '保费总额',
            type: 'pie',
            radius: '45%',
            center: ['50%', '60%'],
            data: this.pieDate,
            itemStyle: {
              emphasis: {
                shadowBlur: 10,
                shadowOffsetX: 0,
                shadowColor: 'rgba(0, 0, 0, 0.5)'
              }
            }
          }
        ]
      })
    }
  }
}
</script>

      

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 该项目是个人毕设项目源码,评审分达到95分,都经过严格调试,确保可以运行!放心下载使用。 该项目资源主要针对计算机、自动化等相关专业的学生或从业者下载使用,也可作为期末课程设计、课程大作业、毕业设计等。 具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现类似其他功能。 基于vue2+Mysql+nodejs+express+element-ui前后端分离图书管理系统 使用步骤: 本地运行方法  1.新建一个名为books_manage_system的数据库  2.将node目录下books_manage_system.sql文件导入到该数据库中,  3.在node/sql/booksystem.js文件内根据自己的数据库情况进行修改  4.运行后台  5.运行前台  6.打开提示的网址既可运行  7.如需通过ip地址访问,请在vue.config.js文件中修改配置 打包运行,及线上运行方法:  1.将根目录下books_manage_system.sql文件导入到数据库中  2.在node/sql/booksystem.js文件内根据自己的数据库情况进行修改  3.在books文件夹和node文件夹下分别执行npm install安装插件  4.注释掉books/src/network/request.js文件中的第4行代码  5.在books文件夹下执行npm run build打包前端文件,打包完成后将该目录新增的dist文件夹复制到node文件夹中  6.打包完成后将dist文件夹复制到node文件夹下  7.将node文件夹下baseURL.js文件中的ip地址,修改为自己电脑的IP,否则线上运行时,会导致部分图片无法访问  8.在node文件夹下执行node index.js  9.之后在处于同一网络中的设备下,输入ip及端口号即可访问页面

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值