updata.vue 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. <template>
  2. <view class="content">
  3. <view style="padding: 10px;">
  4. <button class="uni-button" type="default" @click="updataWithLoading">带loading的更新</button>
  5. </view>
  6. <view style="padding: 10px;">
  7. <button class="uni-button" type="default" @click="updataWithOutLoading">不显示loading的更新</button>
  8. </view>
  9. <qiun-title-bar title="仪表盘实时更新"/>
  10. <view class="charts-box">
  11. <qiun-data-charts type="gauge" :opts="gaugeOpts" :optsWatch="false" :chartData="chartsDataGauge1"/>
  12. </view>
  13. <qiun-title-bar title="localdata数据更新"/>
  14. <view class="charts-box">
  15. <qiun-data-charts type="column" :localdata="chartsDatalocaldata"/>
  16. </view>
  17. <qiun-title-bar title="chartData数据更新"/>
  18. <view class="charts-box">
  19. <qiun-data-charts type="line" :chartData="chartsDataLine"/>
  20. </view>
  21. <qiun-title-bar title="opts配置更新"/>
  22. <view class="charts-box">
  23. <qiun-data-charts type="ring" :opts="ringopts" :chartData="chartsDataRing"/>
  24. </view>
  25. <view style="padding: 10px;">
  26. <button class="uni-button" type="default" @click="updataWithLoading">带loading的更新</button>
  27. </view>
  28. <view style="padding: 10px;">
  29. <button class="uni-button" type="default" @click="updataWithOutLoading">不显示loading的更新</button>
  30. </view>
  31. <qiun-title-bar title="滚动条拖动更新"/>
  32. <view class="charts-box">
  33. <!-- 注意,开启动态打点opts中update需要赋值为true,来启用uCharts的updateData方法来更新视图 -->
  34. <qiun-data-charts type="column" canvasId="scrollcolumnid" :opts="{update:true,enableScroll:true,xAxis:{scrollShow:true,itemCount:4,disableGrid:true,scrollAlign:'current'}}" :ontouch="true" :canvas2d="true" :chartData="chartsDataColumn" @scrollRight="scrollRight"/>
  35. </view>
  36. </view>
  37. </template>
  38. <script>
  39. //下面是演示数据,您的项目不需要引用,数据需要您从服务器自行获取
  40. import demodata from '@/mockdata/demodata.json';
  41. var timec = null;
  42. export default {
  43. data() {
  44. return {
  45. //注意如果使用localdata数据格式,默认值的类型应该是数组
  46. chartsDatalocaldata:[],
  47. gaugeOpts:{update:true,duration:500,title:{name: '60Km/H',color: '#2fc25b',fontSize: 25,offsetY:50},subtitle: {name: '实时速度',color: '#666666',fontSize: 15,offsetY:-50}},
  48. //注意如果使用chartsData数据格式,默认值的类型应该是对象
  49. chartsDataLine:{},
  50. chartsDataRing:{},
  51. chartsDataColumn:{},
  52. chartsDataGauge1:{},
  53. ringopts:{},
  54. scrollLoadingStatus:false
  55. };
  56. },
  57. onReady() {
  58. this.getServerData()
  59. },
  60. methods: {
  61. getServerData() {
  62. //模拟从服务器获取数据的过程,请替换为您封装好的request的API
  63. setTimeout(() => {
  64. //变更图表绑定的数据,一定要整体改变chartData或者localdata,否则会导致多次重新渲染或者监听不到变化的问题
  65. this.chartsDatalocaldata=JSON.parse(JSON.stringify(demodata.localdata))
  66. this.chartsDataLine=JSON.parse(JSON.stringify(demodata.Line))
  67. this.chartsDataRing=JSON.parse(JSON.stringify(demodata.PieA))
  68. this.chartsDataColumn=JSON.parse(JSON.stringify(demodata.Column))
  69. //这里演示圆环图标题和副标题动态变化
  70. let tmpopts = {
  71. title:{
  72. name:this.chartsDataRing.series[0].data[0].name
  73. },
  74. subtitle:{
  75. name:this.chartsDataRing.series[0].data[0].value + "人"
  76. }
  77. }
  78. this.ringopts = tmpopts;
  79. }, 1500);
  80. timec = setInterval(() => {
  81. const value = Math.random();
  82. this.gaugeOpts.title.name = (value * 100).toFixed(0) + 'Km/H';
  83. this.chartsDataGauge1 = {
  84. categories: [{"value":0.2,"color":"#1890ff"},{"value":0.8,"color":"#2fc25b"},{"value":1,"color":"#f04864"}],
  85. series: [
  86. {
  87. name: "完成率",
  88. data: value
  89. }
  90. ]
  91. };
  92. }, 1000)
  93. },
  94. updataWithLoading(){
  95. //为了展示loading状态,需要把当前绑定的数据先处理一下
  96. //1:localdata格式的图表数据,展示loading状态需要将绑定数据复位为空数组
  97. this.chartsDatalocaldata=[];
  98. //2:chartData格式的图表数据,展示loading状态需要将绑定数据的series复位为空数组
  99. this.chartsDataLine.series=[];
  100. this.chartsDataRing.series=[];
  101. //模拟从服务器获取数据的过程,请替换为您封装好的request的API
  102. setTimeout(()=>{
  103. //变更图表绑定的数据,一定要【整体改变】【整体改变】【整体改变】chartData或者localdata,否则会导致多次重新渲染或者监听不到变化的问题
  104. //为了和原始数据不一样,我这里模拟构造一下随机数字。这里应该是您拼接chartData或者localdata的逻辑
  105. let resLocaldata = this.randomLocalData(JSON.parse(JSON.stringify(demodata.localdata)))
  106. let resLinedata = this.randomChartData(JSON.parse(JSON.stringify(demodata.Line)))
  107. let resRingdata = this.randomChartData(JSON.parse(JSON.stringify(demodata.PieA)))
  108. //这里演示圆环图标题和副标题动态变化
  109. let tmpopts = {
  110. title:{
  111. name:resRingdata.series[0].data[0].name
  112. },
  113. subtitle:{
  114. name:resRingdata.series[0].data[0].value + "人"
  115. }
  116. }
  117. //变更图表绑定的数据,一定要【整体改变】【整体改变】【整体改变】chartData或者localdata
  118. this.chartsDatalocaldata = resLocaldata;
  119. this.chartsDataLine = resLinedata;
  120. this.chartsDataRing = resRingdata;
  121. this.ringopts = tmpopts;
  122. },1000)
  123. },
  124. updataWithOutLoading(){
  125. //模拟从服务器获取数据的过程,请替换为您封装好的request的API
  126. setTimeout(()=>{
  127. //变更图表绑定的数据,一定要【整体改变】【整体改变】【整体改变】chartData或者localdata,否则会导致多次重新渲染或者监听不到变化的问题
  128. //为了和原始数据不一样,我这里模拟构造一下随机数字。这里应该是您拼接chartData或者localdata的逻辑
  129. let resLocaldata = this.randomLocalData(JSON.parse(JSON.stringify(demodata.localdata)))
  130. let resLinedata = this.randomChartData(JSON.parse(JSON.stringify(demodata.Line)))
  131. let resRingdata = this.randomChartData(JSON.parse(JSON.stringify(demodata.PieA)))
  132. //这里演示圆环图标题和副标题动态变化
  133. let tmpopts = {
  134. title:{
  135. name:resRingdata.series[0].data[0].name
  136. },
  137. subtitle:{
  138. name:resRingdata.series[0].data[0].value + "人"
  139. }
  140. }
  141. //变更图表绑定的数据,一定要【整体改变】【整体改变】【整体改变】chartData或者localdata
  142. this.chartsDatalocaldata = resLocaldata;
  143. this.chartsDataLine = resLinedata;
  144. this.chartsDataRing = resRingdata;
  145. this.ringopts = tmpopts;
  146. },200)
  147. },
  148. //滚动条加载更新
  149. scrollRight(e){
  150. //scrollLoadingStatus防抖方法
  151. if(this.scrollLoadingStatus === true){
  152. return;
  153. }else{
  154. this.scrollLoadingStatus = true
  155. console.log(e);
  156. this.getNewServerData();
  157. }
  158. },
  159. //模拟滚动条加载,从服务器获取数据后拼接数据
  160. getNewServerData(){
  161. //模拟从服务器获取数据的过程,请替换为您封装好的request的API
  162. setTimeout(()=>{
  163. let tmpdata = this.chartsDataColumn;
  164. tmpdata.categories = tmpdata.categories.concat(JSON.parse(JSON.stringify(demodata.Column.categories)))
  165. for (var i = 0; i < tmpdata.series.length; i++) {
  166. tmpdata.series[i].data=tmpdata.series[i].data.concat(JSON.parse(JSON.stringify(demodata.Column.series[i].data)))
  167. }
  168. //以上是我模拟的拼接增加的数据
  169. this.chartsDataColumn=JSON.parse(JSON.stringify(tmpdata))
  170. //防抖复位,下次触发可以继续加载
  171. this.scrollLoadingStatus = false
  172. },200)
  173. },
  174. //构造随机数字,模拟用,不必理会
  175. randomLocalData(data){
  176. for (var i = 0; i < data.length; i++) {
  177. data[i].value = Math.floor(Math.random() * 100)
  178. }
  179. return data;
  180. },
  181. randomChartData(data){
  182. for (var i = 0; i < data.series.length; i++) {
  183. for (var j = 0; j < data.series[i].data.length; j++) {
  184. if(typeof data.series[i].data[j] === 'number'){
  185. data.series[i].data[j] = Math.floor(Math.random() * 100)
  186. }else{
  187. data.series[i].data[j].value = Math.floor(Math.random() * 100)
  188. }
  189. }
  190. }
  191. return data;
  192. }
  193. }
  194. };
  195. </script>
  196. <style>
  197. .content {
  198. display: flex;
  199. flex-direction: column;
  200. flex: 1;
  201. }
  202. .charts-box {
  203. width: 100%;
  204. height: 300px;
  205. }
  206. </style>