当前位置:   article > 正文

uni-app中使用图表eacharts_l-echart

l-echart

参考:uni插件链接uni插件链接

npm install echarts

在uni_modules文件夹导入lime-echart包:git地址  或者uni直接导入uni地址

使用

vue3

配置参考echarts官网

  1. <template>
  2. <view class="ech">
  3. <l-echart ref="chartdom"></l-echart>
  4. </view>
  5. </template>
  6. <style lang="scss">
  7. //设置大小
  8. .ech {
  9. width: 116rpx;
  10. height: 86rpx;
  11. }
  12. </style>

 js

  1. import * as echarts from 'echarts'
  2. import {
  3. ref,
  4. reactive,
  5. toRefs,
  6. onMounted
  7. } from 'vue'
  8. import {
  9. onReady,
  10. onLoad,
  11. onShow,
  12. onHide
  13. } from '@dcloudio/uni-app'
  14. let optionEch = reactive({
  15. data: {
  16. animation: true,//折线图动画
  17. toolbox: {
  18. show: true,
  19. feature: {
  20. // dataZoom: {
  21. // yAxisIndex: 'none'
  22. // },
  23. // dataView: { readOnly: false },
  24. // magicType: { type: ['line', 'bar'] },
  25. restore: {},
  26. // saveAsImage: {}//下载我没整好
  27. }
  28. },
  29. title: {
  30. show: true, //false
  31. text: "累计收益走势图", //主标题文本
  32. textStyle: {
  33. fontSize: 12,
  34. }
  35. },
  36. tooltip: {
  37. show: true,
  38. trigger: 'axis',
  39. backgroundColor: "rgba(0,0,0,0.4)",
  40. textStyle: {
  41. color: "#fff",
  42. fontSize: "12",
  43. },
  44. },
  45. legend: {
  46. data: ['单位净值', '累计净值']
  47. },
  48. grid: {
  49. left: 10,
  50. right: 10,
  51. bottom: 55,
  52. top: 40,
  53. containLabel: true
  54. },
  55. xAxis: [{
  56. show: true,
  57. type: 'category',
  58. boundaryGap: false,
  59. data: [1, 2, 3],
  60. axisLabel: {
  61. rotate: 50
  62. }
  63. }],
  64. yAxis: [{
  65. show: true,
  66. axisLine: {
  67. show: true
  68. },
  69. axisTick: {
  70. show: true
  71. },
  72. type: 'value',
  73. axisLabel: {
  74. formatter: function(value, index) {
  75. return value.toFixed(3);
  76. }
  77. },
  78. min: function(value) {
  79. return value.min * 0.999;
  80. },
  81. max: function(value) {
  82. return value.max * 1.002;
  83. },
  84. scale: true, //自适应
  85. }],
  86. dataZoom: [{
  87. type: "slider",
  88. xAxisIndex: 0,
  89. filterMode: "none"
  90. },
  91. {
  92. type: "inside",
  93. xAxisIndex: 0,
  94. filterMode: "none"
  95. }
  96. ],
  97. series: [{
  98. name: '单位净值',
  99. type: 'line',
  100. smooth: false,
  101. colorBy: "series",
  102. data: [4, 5, 6],
  103. color: '#00aaff', //改变折线点的颜色
  104. lineStyle: {
  105. color: '#00aaff' //改变折线颜色
  106. },
  107. },
  108. {
  109. name: '累计净值',
  110. type: 'line',
  111. smooth: false,
  112. colorBy: "series",
  113. data: [7, 8, 9],
  114. color: '#c20000', //改变折线点的颜色
  115. lineStyle: {
  116. color: '#c20000' //改变折线颜色
  117. }
  118. },
  119. ]
  120. }
  121. })
  122. let chartdom = ref(null)
  123. onMounted(() => {
  124. // 把 echarts 传入
  125. chartdom.value.init(echarts, chartdom => {//初始化调用函数,第一个参数是传入echarts,第二个参数是回调函数,回调函数的参数是 chart 实例
  126. chartdom.setOption(optionEch.data);
  127. })
  128. })

 在接口数据请求到之后初始化折线图

  1. onMounted(() => {
  2. // 把 echarts 传入
  3. // chartdom.value.init(echarts, chartdom => {
  4. // chartdom.setOption(optionEch.data);
  5. // })
  6. setTimeout(() => {
  7. fundValuePost();
  8. }, 200)
  9. })
  10. const fundValuePost = () => {
  11. //将图表配置对象复制一份
  12. let chartres = JSON.parse(JSON.stringify(optionEch.data))
  13. chartres.xAxis[0].data = []
  14. chartres.series.forEach((item) => {
  15. item.data = []
  16. })
  17. //调用接口
  18. fundValueApi(fundValuePage).then((res) => {
  19. res.data.data.forEach((item) => {
  20. chartres.xAxis[0].data.push(item.fundValueDate)
  21. chartres.series[0].data.push(item.unitFundValue)
  22. chartres.series[1].data.push(item.accrueFundValue)
  23. })
  24. optionEch.data = JSON.parse(JSON.stringify(chartres));
  25. // 使用请求到的数据,初始化图表
  26. chartdom.value.init(echarts, chartdom => {
  27. chartdom.setOption(optionEch.data);
  28. })
  29. }).catch((err) => {
  30. console.log(err, '收益曲线err')
  31. });
  32. }

一个页面使用多个折线图

  1. <template>
  2. <view class="ech">
  3. <l-echart ref="chartdom"></l-echart>
  4. </view>
  5. <view class="ech">
  6. <l-echart ref="chartdom"></l-echart>
  7. </view>
  8. </template>

js

  1. let chartdom = ref(null)//页面有多个chartdom时,chartdom为数组
  2. onMounted(async () => {
  3. let productGe = await productGetListFun()//获取产品列表productGetListDatas.data
  4. setTimeout(() => {
  5. fundValuePost();
  6. }, 100)
  7. })
  8. let fundValuePage = reactive({
  9. month: "1",
  10. orderBy: "asc",
  11. productId: null
  12. })
  13. const fundValuePost = () => {
  14. let chartArr = []
  15. productGetListDatas.data.forEach((items, indexs) => {//productGetListDatas.data为提前请求拿到的产品列表,然后拿id去请求折线图的数据
  16. let chartres = JSON.parse(JSON.stringify(optionEch.data))
  17. let indexx = indexs
  18. // console.log('chartres',chartres )
  19. chartres.xAxis[0].data = []
  20. chartres.series.forEach((item) => {
  21. item.data = []
  22. })//数据全部清空
  23. fundValuePage.productId = items.productId//拿id去请求折线图的数据
  24. fundValueApi(fundValuePage).then((res) => {
  25. // console.log(indexx, '收益曲线res', res)
  26. res.data.data.forEach((item) => {
  27. chartres.xAxis[0].data.push(item.fundValueDate)
  28. chartres.series[0].data.push(item.accrueFundValue)
  29. })
  30. let objArr = {
  31. ind: indexx,//对应产品数组的index
  32. chartresData: chartres
  33. }
  34. chartArr.push(objArr)//把拿到的所有的折线图数据,全部放入chartArr数组
  35. if (chartArr.length == productGetListDatas.data.length) {
  36. chartArr.forEach((item, index) => {//所有的产品数据全部拿到后,用图表数据的indexx对应产品数组的index,进行遍历,初始化对应图表
  37. chartdom.value[item.ind].init(echarts, chartdom => {
  38. chartdom.setOption(item.chartresData);
  39. })
  40. })
  41. }
  42. }).catch((err) => {
  43. console.log(err, '收益曲线err')
  44. });
  45. })
  46. }

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

闽ICP备14008679号