echarts.vue 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. <template>
  2. <view class="content">
  3. <!-- config-echarts.js中的seriesTemplate为option.series模板,可以作为series中的默认配置,:chartData.series中的配置如果有相同的,会覆盖掉 seriesTemplate 中的配置 -->
  4. <qiun-title-bar title="柱状图+动态更新数据" />
  5. <view class="charts-box">
  6. <!-- 如果发布到二级或者多级目录中,需要配置 directory 属性 -->
  7. <!-- <qiun-data-charts type="column" :chartData="chartsDataColumn1" :echartsH5="true" :echartsApp="true" directory="/h5/" @complete="complete"/> -->
  8. <qiun-data-charts type="column" :chartData="chartsDataColumn1" :echartsH5="true" :echartsApp="true" @complete="complete"/>
  9. </view>
  10. <qiun-title-bar title="堆叠柱状图+点击获取索引" />
  11. <view class="charts-box">
  12. <!-- 注意:这里的opts是uCharts的配置,eopts是ECharts的配置,不要搞混,如果不需要用在各种小程序端,是不需要传uCharts的opts的,只需要传eopts即可!!! -->
  13. <qiun-data-charts type="column" :opts="{extra:{column:{type:'stack'}}}" :eopts="{xAxis:{axisLabel:{color:'#FF0000'}}}" :chartData="chartsDataColumn2" :echartsH5="true" :echartsApp="true" @getIndex="getIndex"/>
  14. </view>
  15. <qiun-title-bar title="柱状图+渐变色" />
  16. <view class="charts-box">
  17. <qiun-data-charts type="column" :chartData="chartsDataColumn3" :echartsH5="true" :echartsApp="true"/>
  18. </view>
  19. <qiun-title-bar title="圆角柱状图" />
  20. <view class="charts-box">
  21. <!-- 此处改变的是 seriesTemplate 模板中的默认配置,不必每个series都传itemStyle,将会覆盖:chartData.series 实现更低的代码量 -->
  22. <qiun-data-charts type="column" :eopts="{seriesTemplate:{itemStyle:{normal:{barBorderRadius:[30, 30, 0, 0]}}}}" :chartData="chartsDataColumn4" :echartsH5="true" :echartsApp="true"/>
  23. </view>
  24. <qiun-title-bar title="横向柱状图(仅ECharts)" />
  25. <view class="charts-box">
  26. <qiun-data-charts type="column" :eopts="columneopts" :chartData="chartsDataColumn5" :echartsH5="true" :echartsApp="true"/>
  27. </view>
  28. <qiun-title-bar title="折线图" />
  29. <view class="charts-box">
  30. <qiun-data-charts type="line" :chartData="chartsDataLine1" :echartsH5="true" :echartsApp="true"/>
  31. </view>
  32. <qiun-title-bar title="曲线图" />
  33. <view class="charts-box">
  34. <!-- 此处改变的是 seriesTemplate 模板中的默认配置,不必每个series都传smooth:true,将会覆盖:chartData.series 实现更低的代码量 -->
  35. <qiun-data-charts type="line" :opts="{extra:{line:{type:'curve'}}}" :eopts="{seriesTemplate:{smooth:true}}" :chartData="chartsDataLine1" :echartsH5="true" :echartsApp="true"/>
  36. </view>
  37. <qiun-title-bar title="区域图" />
  38. <view class="charts-box">
  39. <qiun-data-charts type="area" :eopts="{seriesTemplate:{areaStyle:{opacity:0.2}}}" :chartData="chartsDataLine2" :echartsH5="true" :echartsApp="true"/>
  40. </view>
  41. <qiun-title-bar title="渐变色区域图" />
  42. <view class="charts-box">
  43. <!-- 注意:这里的opts是uCharts的配置,eopts是ECharts的配置,不要搞混,如果不需要用在各种小程序端,是不需要传uCharts的opts的,只需要传eopts即可!!!这里加opts是为了覆盖uCharts的rose图的默认图例配置的位置 -->
  44. <qiun-data-charts type="area" :opts="{yAxis:{data:[{min:0}]},extra:{area:{type:'curve',addLine:true,gradient:true}}}" :chartData="chartsDataLine3" :echartsH5="true" :echartsApp="true"/>
  45. </view>
  46. <qiun-title-bar title="饼图" />
  47. <view class="charts-box">
  48. <qiun-data-charts type="pie" :chartData="chartsDataPie1" :echartsH5="true" :echartsApp="true"/>
  49. </view>
  50. <qiun-title-bar title="环形图+动态更新option"/>
  51. <view class="charts-box">
  52. <!-- 演示动态改变eopts -->
  53. <qiun-data-charts type="ring" :opts="{legend:{position:'bottom'}}" :eopts="ringOpts" :chartData="chartsDataPie2" :echartsH5="true" :echartsApp="true"/>
  54. </view>
  55. <qiun-title-bar title="面积玫瑰图"/>
  56. <view class="charts-box">
  57. <!-- 注意:这里的opts是uCharts的配置,eopts是ECharts的配置,不要搞混,如果不需要用在各种小程序端,是不需要传uCharts的opts的,只需要传eopts即可!!!这里加opts是为了覆盖uCharts的rose图的默认图例配置的位置 -->
  58. <qiun-data-charts type="rose" :opts="{legend:{position:'bottom'}}" :chartData="chartsDataPie3" :echartsH5="true" :echartsApp="true"/>
  59. </view>
  60. <qiun-title-bar title="漏斗图"/>
  61. <view class="charts-box">
  62. <qiun-data-charts type="funnel" :chartData="chartsDataPie4" :echartsH5="true" :echartsApp="true"/>
  63. </view>
  64. </view>
  65. </template>
  66. <script>
  67. //下面是演示数据,您的项目不需要引用,数据需要您从服务器自行获取
  68. import demodata from '@/mockdata/demodata.json';
  69. export default {
  70. data() {
  71. return {
  72. chartsDataColumn1:{},
  73. chartsDataColumn2: {},
  74. chartsDataColumn3:{},
  75. chartsDataColumn4:{},
  76. chartsDataColumn5:{},
  77. chartsDataPie1: {},
  78. chartsDataPie2: {},
  79. chartsDataPie3: {},
  80. chartsDataPie4: {},
  81. chartsDataLine1: {},
  82. chartsDataLine2: {},
  83. chartsDataLine3: {},
  84. ringOpts:{},
  85. //横向柱状图的配置,您也可以把默认配置写在config-echarts.js中
  86. columneopts:{
  87. grid: {
  88. left: '3%',
  89. right: '4%',
  90. bottom: 30,
  91. top:10,
  92. containLabel: true
  93. },
  94. xAxis: {
  95. type: 'value',
  96. boundaryGap: [0, 0.01],
  97. axisLine: {
  98. show: false
  99. },
  100. axisTick: {
  101. show: false
  102. }
  103. },
  104. yAxis: {
  105. type: 'category',
  106. data: []
  107. },
  108. //series模板,会覆盖至chartData中的series中的每一个数组内
  109. seriesTemplate:{
  110. "label": {
  111. "show": true,
  112. "color": "#666666",
  113. "position": 'right',
  114. },
  115. }
  116. }
  117. };
  118. },
  119. onReady() {
  120. setTimeout(() => {
  121. this.getServerData();
  122. }, 1000);
  123. //演示变更数据后显示loading状态,如果不想展示loading状态,则不需要此步,可以注释掉看效果
  124. setTimeout(() => {
  125. this.chartsDataColumn1.series=[];
  126. }, 4000);
  127. setTimeout(() => {
  128. //模拟新的柱状图
  129. this.chartsDataColumn1=JSON.parse(JSON.stringify(demodata.Line));
  130. //测试动态绑定的eopts
  131. this.ringOpts={
  132. color:['#FF00FF','#AAFF11'],
  133. legend:{show:false}
  134. }
  135. }, 5000);
  136. },
  137. methods: {
  138. getServerData() {
  139. //因部分数据格式一样,这里不同图表引用同一数据源的话,需要深拷贝一下构造不同的对象
  140. //开发者需要自行处理服务器返回的数据,应与标准数据格式一致,注意series的data数值应为数字格式
  141. this.chartsDataColumn1=JSON.parse(JSON.stringify(demodata.Column));
  142. let tmpColumn3=JSON.parse(JSON.stringify(demodata.Column));
  143. //series.linearGradient代表渐变色:
  144. //前4个参数用于配置渐变色的起止位置, 这4个参数依次对应右/下/左/上四个方位. 而0 0 0 1则代表渐变色从正上方开始;
  145. //第5个参数为数组, 用于配置颜色的渐变过程. 每一项为一个对象, 包含offset和color两个参数. offset的范围是0 ~ 1, 用于表示位置
  146. tmpColumn3.series[0].linearGradient=[0, 0, 0, 1,[{offset: 0, color: '#0EE2F8'},{offset: 1, color: '#1890FF'}]];
  147. tmpColumn3.series[1].linearGradient=[0, 0, 0, 1,[{offset: 0, color: '#2BDCA8'},{offset: 1, color: '#91CB74'}]];
  148. this.chartsDataColumn3=tmpColumn3;
  149. this.chartsDataColumn4=JSON.parse(JSON.stringify(demodata.Column));
  150. this.chartsDataColumn5=JSON.parse(JSON.stringify(demodata.Column));
  151. this.chartsDataPie1=JSON.parse(JSON.stringify(demodata.PieA))
  152. this.chartsDataPie2=JSON.parse(JSON.stringify(demodata.PieA))
  153. this.chartsDataPie3=JSON.parse(JSON.stringify(demodata.PieA))
  154. this.chartsDataPie4=JSON.parse(JSON.stringify(demodata.PieA))
  155. this.chartsDataLine1=JSON.parse(JSON.stringify(demodata.Line))
  156. //处理堆叠柱状图的series
  157. let duidie = JSON.parse(JSON.stringify(demodata.Column))
  158. for (var i = 0; i < duidie.series.length; i++) {
  159. duidie.series[i].stack = 'one'
  160. duidie.series[i].barWidth = '50%'
  161. duidie.series[i].label = {position: 'inside',color:'#FFFFFF'}
  162. }
  163. //这里需要注意,一定要定义一个临时的变量再统一赋值给chartData,否则chartData具有监听属性,只要有变化就会导致重新渲染
  164. this.chartsDataColumn2=duidie
  165. let areadata = JSON.parse(JSON.stringify(demodata.Line))
  166. areadata.series = areadata.series.reverse()
  167. this.chartsDataLine2=areadata
  168. //渐变色区域图
  169. let linearareadata={
  170. categories: ["2016", "2017", "2018", "2019", "2020", "2021"],
  171. series:[{
  172. name: "成交量A",
  173. smooth:true,
  174. areaStyle:{
  175. color: {
  176. type: 'linear',
  177. x: 0,
  178. y: 0,
  179. x2: 0,
  180. y2: 1,
  181. colorStops: [{
  182. offset: 0, color: '#1890FF' // 0% 处的颜色
  183. }, {
  184. offset: 1, color: '#FFFFFF' // 100% 处的颜色
  185. }],
  186. global: false // 缺省为 false
  187. }
  188. },
  189. data: [100, 80, 95, 150, 112, 132]
  190. }]
  191. }
  192. this.chartsDataLine3=linearareadata
  193. },
  194. complete(e) {
  195. console.log("渲染完成事件",e);
  196. },
  197. getIndex(e){
  198. console.log("获取点击索引事件",e);
  199. }
  200. }
  201. };
  202. </script>
  203. <style>
  204. .content {
  205. display: flex;
  206. flex-direction: column;
  207. flex: 1;
  208. }
  209. .charts-box {
  210. width: 100%;
  211. height: 300px;
  212. }
  213. </style>