0


Vue项目实战 —— 后台管理系统( pc端 ) 第三篇

​前期回顾 ​ Vue项目实战 —— 后台管理系统( pc端 ) 第二篇_0.活在风浪里的博客-CSDN博客前期回顾 Vue项目实战 —— 后台管理系统( pc端 ) 第一篇 _0.活在风浪里的博客-CSDN博客此典型项目,与企业级开发很是接近!掌握即可领悟雷电,如果你是大学生,它完全可以作为你毕业设计,毕竟你确实写过,项目开发全程采用组件化思想。适合谁1 、大学即将毕业 或者 自学前端 缺乏项目经验的2 、入职以后需要做vue 后台管理系统的3 、后端开发 没有前端经验 要做vue + java 后台管理项目的4、缺乏vue实战项目经验 基础不是很好的 本教程非常的详细 每一步都总结在md文档里...https://blog.csdn.net/m0_57904695/article/details/124823989?spm=1001.2014.3001.5501

第二篇完成度

  • 接下来模拟数据写图表
  • 使用 Mock可以模拟真实 API 返回,相对一大堆的官方解释,大概率要马冬梅,推荐一篇极简mock使用教程,官方文档自己百度下都有
  • Mock的简单使用点击查看详情

Mock模拟数据

​ 页面响应的数据

​ 源码:

  1. 位置:src/mock.js
  2. import Mock from "mockjs";
  3. let url = "http://localhost:8080";
  4. let list = [];
  5. // 自调用函数
  6. (function() {
  7. for (let i = 0; i < 7; i++) {
  8. list.push({
  9. 苹果: Math.round(Math.random() * (10, 8000)),
  10. vivo: Math.round(Math.random() * (10, 8000)),
  11. oppo: Math.round(Math.random() * (10, 8000)),
  12. 魅族: Math.round(Math.random() * (10, 8000)),
  13. 三星: Math.round(Math.random() * (10, 8000)),
  14. 小米: Math.round(Math.random() * (10, 8000))
  15. })
  16. }
  17. }())
  18. // 或 命名函数手动调用
  19. // fn();
  20. // function fn() {
  21. // for (let i = 0; i < 7; i++) {
  22. // list.push({
  23. // 苹果: Math.round(Math.random() * (10, 8000)),
  24. // vivo: Math.round(Math.random() * (10, 8000)),
  25. // oppo: Math.round(Math.random() * (10, 8000)),
  26. // 魅族: Math.round(Math.random() * (10, 8000)),
  27. // 三星: Math.round(Math.random() * (10, 8000)),
  28. // 小米: Math.round(Math.random() * (10, 8000))
  29. // })
  30. // }
  31. // }
  32. Mock.mock(url, "post", {
  33. code: 200,
  34. data: {
  35. // 表格数据
  36. tableData: [{
  37. name: "oppo",
  38. todayBuy: 500,
  39. monthBuy: 3500,
  40. totalBuy: 22000,
  41. },
  42. {
  43. name: "vivo",
  44. todayBuy: 300,
  45. monthBuy: 2200,
  46. totalBuy: 24000,
  47. },
  48. {
  49. name: "苹果",
  50. todayBuy: 800,
  51. monthBuy: 4500,
  52. totalBuy: 65000,
  53. },
  54. {
  55. name: "小米",
  56. todayBuy: 1200,
  57. monthBuy: 6500,
  58. totalBuy: 45000,
  59. },
  60. {
  61. name: "三星",
  62. todayBuy: 300,
  63. monthBuy: 2000,
  64. totalBuy: 34000,
  65. },
  66. {
  67. name: "魅族",
  68. todayBuy: 350,
  69. monthBuy: 3000,
  70. totalBuy: 22000,
  71. },
  72. ],
  73. // 饼图
  74. tableData: [{
  75. name: "小米",
  76. value: 2999,
  77. },
  78. {
  79. name: "苹果",
  80. value: 5999,
  81. },
  82. {
  83. name: "vivo",
  84. value: 1500,
  85. },
  86. {
  87. name: "oppo",
  88. value: 1999,
  89. },
  90. {
  91. name: "魅族",
  92. value: 2200,
  93. },
  94. {
  95. name: "三星",
  96. value: 4500,
  97. },
  98. ],
  99. // 柱状图
  100. userData: [{
  101. date: "周一",
  102. new: 5,
  103. active: 200,
  104. },
  105. {
  106. date: "周二",
  107. new: 10,
  108. active: 500,
  109. },
  110. {
  111. date: "周三",
  112. new: 12,
  113. active: 550,
  114. },
  115. {
  116. date: "周四",
  117. new: 60,
  118. active: 800,
  119. },
  120. {
  121. date: "周五",
  122. new: 65,
  123. active: 550,
  124. },
  125. {
  126. date: "周六",
  127. new: 53,
  128. active: 770,
  129. },
  130. {
  131. date: "周日",
  132. new: 33,
  133. active: 170,
  134. },
  135. ],
  136. // 折线图
  137. orderData: {
  138. date: [
  139. "20191001",
  140. "20191002",
  141. "20191003",
  142. "20191004",
  143. "20191005",
  144. "20191006",
  145. "20191007",
  146. ],
  147. data: list,
  148. },
  149. },
  150. });
  151. export default url;
  1. 位置:src/main.js
  2. import Vue from "vue";
  3. import App from "./App.vue";
  4. import http from "axios";
  5. import url from "./mock";
  6. import router from "./router";
  7. import store from "./store";
  8. import ElementUI from "element-ui";
  9. import "element-ui/lib/theme-chalk/index.css";
  10. import "assets/common.css";
  11. import "assets/reset.css";
  12. // 全局注册el
  13. Vue.use(ElementUI);
  14. // 挂载到原型上 在页面就可以this.$http(),也可以单独在页面引入
  15. Vue.prototype.$http = http;
  16. // mock公共地址
  17. Vue.prototype.$url = url;
  18. // 时间过滤器
  19. Vue.filter("formateTime", (val) => {
  20. const dt = new Date(val);
  21. const y = dt.getFullYear();
  22. const m = (dt.getMonth() + 1 + "").padStart(2, "0");
  23. const d = (dt.getDate() + "").padStart(2, "0");
  24. const hh = (dt.getHours() + "").padStart(2, "0");
  25. const mm = (dt.getMinutes() + "").padStart(2, "0");
  26. const ss = (dt.getSeconds() + "").padStart(2, "0");
  27. // yyyy-mm-dd hh:mm:ss
  28. return `${y}-${m}-${d} ${hh}:${mm}:${ss}`;
  29. });
  30. //使用过滤器就会保留两位小数 在页面使用 {{price| formatePrice}}
  31. Vue.filter("formatePrice", (val) => {
  32. //console.log(val) // 过滤的数据
  33. return val.toFixed(2);
  34. });
  35. new Vue({
  36. router,
  37. store,
  38. render: (h) => h(App),
  39. }).$mount("#app");

折线图

  • echarts实例需要获取dom,所以需要在mounted中初始化

图例

X轴

series配置数据

  • name和data一样都需要遍历

data=orderData.map(item=>item[key])

源码

  1. mounted() {
  2. //echarts实例需要获取dom,所以需要在mounted中初始化
  3. this.$http.post(this.$url).then((res) => {
  4. // console.log(res);
  5. const { data, code } = res.data;
  6. if (code != 200) {
  7. this.$message.error("获取数据失败");
  8. }
  9. console.log(data);
  10. const orderData = data.orderData.data;
  11. const orderDate = data.orderData.date;
  12. // Object.keys()得到数组的集合
  13. const keyArray = Object.keys(orderData[0]);
  14. // console.log(keyArray);
  15. const series = [];
  16. keyArray.map((key) => {
  17. series.push({
  18. name: key, //series应该和legend图例一样
  19. // line pie bar 线 柱 饼
  20. type: "line",
  21. // data应该与name一样,不一样会报图例与数据不一样,所以循环数据拿到对应的key
  22. data: orderData.map((item) => {
  23. return item[key];
  24. }),
  25. });
  26. });
  27. var myChart = echarts.init(document.getElementById("eacharts"));
  28. // 指定图表的配置项和数据
  29. var option = {
  30. title: {
  31. text: "折线图 ",
  32. },
  33. // 提示框组件
  34. tooltip: {},
  35. // 最上面的X轴图例
  36. legend: {
  37. data: series.name,
  38. },
  39. // X轴
  40. xAxis: {
  41. data: orderDate,
  42. },
  43. // y轴
  44. yAxis: {},
  45. // 所需要展示的数据,需要配置遍历
  46. series: series,
  47. };
  48. // 使用刚指定的配置项和数据显示图表。
  49. myChart.setOption(option);
  50. });
  51. },

柱状图

template

js mounted

饼图

  • 毫无难度的饼图

template

js mounted

完整效果

更新中...

2022/5/19 22:25

祝大家2022越来越强

标签: 开发技巧 vue 项目

本文转载自: https://blog.csdn.net/m0_57904695/article/details/124861409
版权归原作者 0.活在风浪里 所有, 如有侵权,请联系我们删除。

“Vue项目实战 &mdash;&mdash; 后台管理系统( pc端 ) 第三篇”的评论:

还没有评论