当前位置:   article > 正文

使用vue3实现数据大屏展示_vue3数据大屏

vue3数据大屏

1、前提

有后端数据接口和数据库,并且能够使用axios访问接口获取数据

2、安装依赖包

npm i vue-router echarts axios less

vue-router,我们有多个页面进行展示数据,所以使用路由

echarts,用来进行数据展示

axios,用来发送数据请求,获取数据

3、数据库数据

这个案例使用了四个数据表进行数据展示,数据表如下图所示

hosts

gold

lengths 

watchnumpv 

 

以上四个数据表都有四个不同区域的分类

后端接口返回的数据格式为下图所示(数组包含多个对象的形式)

4、路由配置 

假设有四组数据需要用echarts进行展示,所以设置了四个路由分别进行展示

在src下新建router文件夹,router文件夹下新建index.js

路由配置(router/index.js)

  1. import { createRouter,createWebHistory } from "vue-router";
  2. const router=createRouter({
  3. history:createWebHistory(),
  4. routes:[
  5. {
  6. component:()=>import('../components/gold.vue'),
  7. name:'gold',
  8. path:'/gold'
  9. },
  10. {
  11. component:()=>import('../components/host.vue'),
  12. name:'host',
  13. path:'/host'
  14. },
  15. {
  16. component:()=>import('../components/length.vue'),
  17. name:'length',
  18. path:'/length'
  19. },
  20. {
  21. component:()=>import('../components/watchnum.vue'),
  22. name:'watchnum',
  23. path:'/watchnum'
  24. },
  25. {
  26. //实现路由重定向,当进入网页时,路由自动跳转到/student路由
  27. redirect:'/gold',
  28. path:'/'
  29. }
  30. ]
  31. })
  32. export default router

 注册路由(main.js)

  1. import { createApp } from 'vue'
  2. import App from './App.vue'
  3. import './assets/main.css'
  4. import router from './router'
  5. createApp(App).use(router).mount('#app')

使用路由(app.vue)

  1. <template>
  2. <header class="main">
  3. <div><router-link to="/gold">主播获取金币TOP10</router-link></div>
  4. <div><router-link to="/host">主播热度TOP10</router-link></div>
  5. <div><router-link to="/length">主播被观看时长TOp10</router-link></div>
  6. <div><router-link to="/watchnum">主播被观看次数TOP10</router-link></div>
  7. </header>
  8. <router-view></router-view>
  9. </template>
  10. <script setup>
  11. </script>
  12. <style scoped lang="less">
  13. .main{
  14. width: 100%;
  15. height: 50px;
  16. align-items: center;
  17. display: flex;
  18. justify-content: center;
  19. background-color: pink;
  20. div{
  21. padding: 0 50px;
  22. }
  23. }
  24. </style>

效果展示

5、echarts绘制数据图表

 5、1主播获取金币TOP10(饼图绘制)

假设获取数据的接口为http://localhost:8088/api/areagold/ausgoldlist

  1. <template>
  2. <!-- 定义标题按钮,用来切换地区 -->
  3. <div class="title" @click="changeSelect">
  4. <!-- 给按钮配置data-index,当点击时用来区分点击的是哪个 -->
  5. <button data-index='ausgoldlist'>CT</button>
  6. <button data-index='actgoldlist'>US</button>
  7. <button data-index='anggoldlist'>NG</button>
  8. </div>
  9. <!-- 定义容器 -->
  10. <div class="big">
  11. <div id="main">
  12. </div>
  13. </div>
  14. </template>
  15. <script setup>
  16. // 引入echarts,axios,onMounted
  17. import * as echarts from 'echarts'
  18. import axios from 'axios'
  19. import { onMounted } from 'vue';
  20. // 提前定义myCharts
  21. let myChart = null
  22. onMounted(() => {
  23. // 获取dom节点
  24. myChart = echarts.init(document.getElementById('main'))
  25. // 获取数据
  26. getdata('ausgoldlist')
  27. })
  28. const getdata = async(gold) => {
  29. // 拿到返回的数据
  30. let result = await axios.get(`http://localhost:8088/api/areagold/${gold}`)
  31. // 将数据传给函数,用来划图
  32. toecharts(result.data)
  33. }
  34. const toecharts=(result)=>{
  35. // 设置配置对象
  36. let option = {
  37. title: {
  38. left: 'center'
  39. },
  40. tooltip: {
  41. trigger: 'item'
  42. },
  43. dataset: { source: result },
  44. series: [
  45. {
  46. name: '主播的uid',
  47. type: 'pie',
  48. radius: '50%',
  49. emphasis: {
  50. itemStyle: {
  51. itemName: 'uid',
  52. value: 'gold',
  53. shadowBlur: 10,
  54. shadowOffsetX: 0,
  55. shadowColor: 'rgba(0, 0, 0, 0.5)'
  56. }
  57. }
  58. }
  59. ]
  60. };
  61. // 划图
  62. myChart.setOption(option);
  63. }
  64. // 获取点击按钮
  65. const changeSelect=(e)=>{
  66. let {index}=e.target.dataset
  67. // 将选择的参数发送给getdata,获取数据
  68. getdata(index)
  69. }
  70. </script>
  71. <style scoped lang="less">
  72. #main {
  73. width: 700px;
  74. height: 500px;
  75. border:blue 1px solid
  76. }
  77. .big{
  78. display: flex;
  79. justify-content: center;
  80. align-items: center;
  81. }
  82. .title{
  83. margin-top: 50px;
  84. text-align: center;
  85. button{
  86. font-size: 40px;
  87. }
  88. }
  89. </style>

结果展示,通过点击按钮获取不同区域的数据,用于展示

 5.2主播热度TOP10(柱状图)

 假设接口地址为http://localhost:8088/api/areagold/aushostslist

代码实现

  1. <template>
  2. <!-- 定义标题按钮,用来切换地区 -->
  3. <div class="title" @click="changeSelect">
  4. <!-- 给按钮配置data-index,当点击时用来区分点击的是哪个 -->
  5. <button data-index='aushostslist'>CT</button>
  6. <button data-index='acthostslist'>US</button>
  7. <button data-index='anghostslist'>NG</button>
  8. </div>
  9. <!-- 定义容器 -->
  10. <div class="big">
  11. <div id="hosts">
  12. </div>
  13. </div>
  14. </template>
  15. <script setup>
  16. // 引入echarts,axios,onMounted
  17. import * as echarts from 'echarts'
  18. import axios from 'axios'
  19. import { onMounted } from 'vue';
  20. // 提前定义myCharts
  21. let myChart = null
  22. onMounted(() => {
  23. // 获取dom节点
  24. myChart = echarts.init(document.getElementById('hosts'))
  25. // 获取数据
  26. getdata('aushostslist')
  27. })
  28. const getdata = async(gold) => {
  29. // 拿到返回的数据
  30. let result = await axios.get(`http://localhost:8088/api/areahosts/${gold}`)
  31. let dataX = []
  32. let data = []
  33. result.data.forEach(item => {
  34. dataX.push(item.uid.slice(-3))
  35. data.push(item.hots)
  36. });
  37. // 将数据传给函数,用来划图
  38. toecharts(dataX, data)
  39. }
  40. const toecharts=(dataX, data)=>{
  41. // 设置配置对象
  42. let option = {
  43. tooltip: {
  44. trigger: 'axis',
  45. axisPointer: {
  46. type: 'shadow'
  47. }
  48. },
  49. grid: {
  50. left: '3%',
  51. right: '4%',
  52. bottom: '3%',
  53. containLabel: true
  54. },
  55. xAxis: [
  56. {
  57. type: 'category',
  58. data: dataX,
  59. axisTick: {
  60. alignWithLabel: true
  61. }
  62. }
  63. ],
  64. yAxis: [
  65. {
  66. type: 'value'
  67. }
  68. ],
  69. series: [
  70. {
  71. name: '视频观看时长',
  72. type: 'bar',
  73. barWidth: '60%',
  74. data
  75. }
  76. ]
  77. };
  78. // 划图
  79. myChart.setOption(option);
  80. }
  81. // 获取点击按钮
  82. const changeSelect=(e)=>{
  83. let {index}=e.target.dataset
  84. // 将选择的参数发送给getdata,获取数据
  85. getdata(index)
  86. }
  87. </script>
  88. <style scoped lang="less">
  89. #hosts {
  90. width: 700px;
  91. height: 500px;
  92. border:blue 1px solid
  93. }
  94. .big{
  95. display: flex;
  96. justify-content: center;
  97. align-items: center;
  98. }
  99. .title{
  100. margin-top: 50px;
  101. text-align: center;
  102. button{
  103. font-size: 40px;
  104. }
  105. }
  106. </style>

成果展示

 剩下的两个图表可以根据金币和热度进行参考

 6、总结

使用echarts主要的是数据请求,数据修改展示等等,简单易上手

仓库地址datashow: 数据大屏的展示

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/435937
推荐阅读
相关标签
  

闽ICP备14008679号