@10yun/cv-mobile-ui 0.5.62 → 0.5.64

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/other/uCharts-uniapp/index.js +2 -0
  2. package/other/uCharts-uniapp/package.json +42 -0
  3. package/other/{qiun-data-charts/js_sdk → uCharts-uniapp}/u-charts/config-echarts.js +421 -421
  4. package/other/{qiun-data-charts → uCharts-uniapp/u-charts}/license.md +201 -201
  5. package/other/uCharts-uniapp/u-charts/package.json +19 -0
  6. package/other/{qiun-data-charts/readme.md → uCharts-uniapp/u-charts/readme-npm.md} +57 -63
  7. package/other/{qiun-data-charts/js_sdk → uCharts-uniapp}/u-charts/readme.md +4 -4
  8. package/other/{qiun-data-charts/js_sdk → uCharts-uniapp}/u-charts/u-charts.js +7661 -7661
  9. package/other/{qiun-data-charts/js_sdk → uCharts-uniapp}/u-charts/u-charts.min.js +1 -1
  10. package/package.json +1 -1
  11. package/plugins/uni-extend.js +10 -10
  12. package/ui-cv/components/cv-filter-hm/cv-filter-hm.vue +134 -167
  13. package/ui-fireui/components/u-action-sheet/u-action-sheet.vue +46 -16
  14. package/ui-fireui/components/u-alert/u-alert.vue +11 -5
  15. package/ui-fireui/components/u-badge/u-badge.vue +52 -69
  16. package/ui-fireui/components/u-bottom-navigation/u-bottom-navigation.vue +28 -20
  17. package/ui-fireui/components/u-bottom-popup/u-bottom-popup.vue +40 -11
  18. package/ui-fireui/components/u-bubble-popup/u-bubble-popup.vue +3 -6
  19. package/ui-fireui/components/u-button/u-button.vue +262 -259
  20. package/ui-fireui/components/u-calendar/u-calendar.vue +227 -44
  21. package/ui-fireui/components/u-calendar/u-calendar2.js +562 -0
  22. package/ui-fireui/components/u-card/u-card.vue +50 -32
  23. package/ui-fireui/components/u-cascade-selection/u-cascade-selection.vue +197 -74
  24. package/ui-fireui/components/u-circular-progress/u-circular-progress.vue +324 -0
  25. package/ui-fireui/components/u-clipboard2/tui-clipboard.js +53 -0
  26. package/ui-fireui/components/u-collapse/u-collapse.vue +8 -8
  27. package/ui-fireui/components/u-config/index.js +129 -0
  28. package/ui-fireui/components/u-count-down/u-count-down.vue +124 -19
  29. package/ui-fireui/components/u-datetime/u-datetime.vue +416 -176
  30. package/ui-fireui/components/u-divider/u-divider.vue +3 -3
  31. package/ui-fireui/components/u-drawer/u-drawer.vue +55 -12
  32. package/ui-fireui/components/u-dropdown-list/u-dropdown-list.vue +103 -0
  33. package/ui-fireui/components/u-fab/u-fab.vue +344 -0
  34. package/ui-fireui/components/u-footer/u-footer.vue +148 -0
  35. package/ui-fireui/components/u-grid/u-grid.vue +2 -8
  36. package/ui-fireui/components/u-grid-item/u-grid-item.vue +22 -5
  37. package/ui-fireui/components/u-icon/u-icon-new.js +190 -0
  38. package/ui-fireui/components/u-icon/u-icon-new.vue +100 -0
  39. package/ui-fireui/components/u-image-cropper/u-image-cropper.vue +1144 -0
  40. package/ui-fireui/components/u-image-group/u-image-group.vue +164 -0
  41. package/ui-fireui/components/u-keyboard/u-keyboard.vue +3 -2
  42. package/ui-fireui/components/u-keyboard-input/u-keyboard-input.vue +1 -1
  43. package/ui-fireui/components/u-list-cell/u-list-cell.vue +82 -72
  44. package/ui-fireui/components/u-list-view/u-list-view.vue +33 -8
  45. package/ui-fireui/components/u-loading/u-loading.vue +107 -27
  46. package/ui-fireui/components/u-loadmore/u-loadmore.vue +21 -3
  47. package/ui-fireui/components/u-modal/u-modal.vue +140 -176
  48. package/ui-fireui/components/u-navigation-bar/u-navigation-bar.vue +121 -28
  49. package/ui-fireui/components/u-no-data/u-no-data.vue +58 -20
  50. package/ui-fireui/components/u-nomore/u-nomore.vue +5 -4
  51. package/ui-fireui/components/u-numberbox/u-numberbox.vue +88 -45
  52. package/ui-fireui/components/u-picture-cropper/u-picture-cropper.vue +94 -36
  53. package/ui-fireui/components/u-picture-cropper/u-picture-cropper.wxs +27 -17
  54. package/ui-fireui/components/u-rate/u-rate.vue +197 -0
  55. package/ui-fireui/components/u-round-progress/u-round-progress.vue +62 -42
  56. package/ui-fireui/components/u-scroll-top/u-scroll-top.vue +4 -3
  57. package/ui-fireui/components/u-section/u-section.vue +149 -0
  58. package/ui-fireui/components/u-skeleton/u-skeleton.vue +37 -6
  59. package/ui-fireui/components/u-steps/u-steps.vue +110 -27
  60. package/ui-fireui/components/u-sticky/u-sticky.vue +35 -21
  61. package/ui-fireui/components/u-sticky-wxs/u-sticky-wxs.vue +7 -4
  62. package/ui-fireui/components/u-sticky-wxs/u-sticky.wxs +39 -36
  63. package/ui-fireui/components/u-swipe-action/u-swipe-action.vue +76 -19
  64. package/ui-fireui/components/u-tabbar/u-tabbar.vue +71 -38
  65. package/ui-fireui/components/u-tabs/u-tabs.vue +133 -51
  66. package/ui-fireui/components/u-tag/u-tag.vue +109 -226
  67. package/ui-fireui/components/u-time-axis/u-time-axis.vue +1 -1
  68. package/ui-fireui/components/u-timeaxis-item/u-timeaxis-item.vue +1 -1
  69. package/ui-fireui/components/u-tips/u-tips.vue +35 -15
  70. package/ui-fireui/components/u-toast/u-toast.vue +9 -5
  71. package/ui-fireui/components/u-top-dropdown/u-top-dropdown.vue +8 -6
  72. package/ui-fireui/components/u-upload/u-upload-old.vue +462 -0
  73. package/ui-fireui/components/u-upload/u-upload.vue +648 -446
  74. package/ui-fireui/components/u-white-space/u-white-space.vue +68 -0
  75. package/ui-fireui/components/u-wing-blank/u-wing-blank.vue +100 -0
  76. package/uview-plus/libs/ctocode/index.js +1 -0
  77. package/uview-plus/libs/ctocode/richText.js +0 -1
  78. package/other/qiun-data-charts/changelog.md +0 -320
  79. package/other/qiun-data-charts/components/qiun-data-charts/qiun-data-charts.vue +0 -1618
  80. package/other/qiun-data-charts/components/qiun-error/qiun-error.vue +0 -46
  81. package/other/qiun-data-charts/components/qiun-loading/loading1.vue +0 -162
  82. package/other/qiun-data-charts/components/qiun-loading/loading2.vue +0 -170
  83. package/other/qiun-data-charts/components/qiun-loading/loading3.vue +0 -173
  84. package/other/qiun-data-charts/components/qiun-loading/loading4.vue +0 -222
  85. package/other/qiun-data-charts/components/qiun-loading/loading5.vue +0 -229
  86. package/other/qiun-data-charts/components/qiun-loading/qiun-loading.vue +0 -36
  87. package/other/qiun-data-charts/js_sdk2/app-echarts.min.js +0 -23
  88. package/other/qiun-data-charts/js_sdk2/h5-echarts.min.js +0 -23
  89. package/other/qiun-data-charts/package.json +0 -81
  90. package/other/qiun-data-charts/static/app-plus/echarts.min.js +0 -23
  91. package/other/qiun-data-charts/static/h5/echarts.min.js +0 -23
  92. package/other/qiun-data-charts_2.5.0-20230101_example/App.vue +0 -20
  93. package/other/qiun-data-charts_2.5.0-20230101_example/common/uni-icons.css +0 -542
  94. package/other/qiun-data-charts_2.5.0-20230101_example/common/uni.css +0 -246
  95. package/other/qiun-data-charts_2.5.0-20230101_example/components/qiun-title-bar/qiun-title-bar.vue +0 -51
  96. package/other/qiun-data-charts_2.5.0-20230101_example/components/test-charts/test-charts.vue +0 -48
  97. package/other/qiun-data-charts_2.5.0-20230101_example/main.js +0 -13
  98. package/other/qiun-data-charts_2.5.0-20230101_example/manifest.json +0 -75
  99. package/other/qiun-data-charts_2.5.0-20230101_example/mockdata/demodata.json +0 -448
  100. package/other/qiun-data-charts_2.5.0-20230101_example/mockdata/mapdata.json +0 -1
  101. package/other/qiun-data-charts_2.5.0-20230101_example/pages/canvas/canvas.vue +0 -142
  102. package/other/qiun-data-charts_2.5.0-20230101_example/pages/echarts/echarts.vue +0 -228
  103. package/other/qiun-data-charts_2.5.0-20230101_example/pages/format-e/format-e.vue +0 -113
  104. package/other/qiun-data-charts_2.5.0-20230101_example/pages/format-u/format-u.vue +0 -110
  105. package/other/qiun-data-charts_2.5.0-20230101_example/pages/index/index.vue +0 -58
  106. package/other/qiun-data-charts_2.5.0-20230101_example/pages/layout/layout.vue +0 -174
  107. package/other/qiun-data-charts_2.5.0-20230101_example/pages/other/other.vue +0 -233
  108. package/other/qiun-data-charts_2.5.0-20230101_example/pages/tab/tab.vue +0 -115
  109. package/other/qiun-data-charts_2.5.0-20230101_example/pages/ucharts/ucharts.vue +0 -339
  110. package/other/qiun-data-charts_2.5.0-20230101_example/pages/unicloud/unicloud.vue +0 -117
  111. package/other/qiun-data-charts_2.5.0-20230101_example/pages/updata/updata.vue +0 -212
  112. package/other/qiun-data-charts_2.5.0-20230101_example/pages.json +0 -79
  113. package/other/qiun-data-charts_2.5.0-20230101_example/static/logo.png +0 -0
  114. package/other/qiun-data-charts_2.5.0-20230101_example/uni.scss +0 -76
  115. package/other/qiun-data-charts_2.5.0-20230101_example/uniCloud-aliyun/database/db_init.json +0 -455
  116. package/other/qiun-data-charts_2.5.0-20230101_example/uniCloud-aliyun/database/qiun-charts-demo.schema.json +0 -76
  117. package/other/u-charts/config.js +0 -503
  118. package/other/u-charts/data.json +0 -1143
  119. package/other/u-charts/demodata.json +0 -267
  120. package/other/u-charts/mapdata.json +0 -41
  121. package/other/u-charts/u-charts.js +0 -5687
  122. package/other/u-charts/u-charts.min.js +0 -1
  123. package/other/u-charts/u-charts.vue +0 -466
  124. /package/other/{qiun-data-charts/js_sdk → uCharts-uniapp}/u-charts/config-ucharts.js +0 -0
@@ -1,1618 +0,0 @@
1
- <!--
2
- * qiun-data-charts 秋云高性能跨全端图表组件
3
- * Copyright (c) 2021 QIUN® 秋云 https://www.ucharts.cn All rights reserved.
4
- * Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
5
- * 复制使用请保留本段注释,感谢支持开源!
6
- * 为方便更多开发者使用,如有更好的建议请提交码云 Pull Requests !
7
- *
8
- * uCharts®官方网站
9
- * https://www.uCharts.cn
10
- *
11
- * 开源地址:
12
- * https://gitee.com/uCharts/uCharts
13
- *
14
- * uni-app插件市场地址:
15
- * http://ext.dcloud.net.cn/plugin?id=271
16
- *
17
- -->
18
- <template>
19
- <view class="chartsview" :id="'ChartBoxId'+cid">
20
- <view v-if="mixinDatacomLoading">
21
- <!-- 自定义加载状态,请改这里 -->
22
- <qiun-loading :loadingType="loadingType" />
23
- </view>
24
- <view v-if="mixinDatacomErrorMessage && errorShow" @tap="reloading">
25
- <!-- 自定义错误提示,请改这里 -->
26
- <qiun-error :errorMessage="errorMessage" />
27
- </view>
28
- <!-- APP和H5采用renderjs渲染图表 -->
29
- <!-- #ifdef APP-VUE || H5 -->
30
- <block v-if="echarts">
31
- <view
32
- :style="{ background: background }"
33
- style="width: 100%;height: 100%;"
34
- :data-directory="directory"
35
- :id="'EC'+cid"
36
- :prop="echartsOpts"
37
- :change:prop="rdcharts.ecinit"
38
- :resize="echartsResize"
39
- :change:resize="rdcharts.ecresize"
40
- v-show="showchart"
41
- />
42
- </block>
43
- <block v-else>
44
- <view
45
- v-on:tap="rdcharts.tap"
46
- v-on:mousemove="rdcharts.mouseMove"
47
- v-on:mousedown="rdcharts.mouseDown"
48
- v-on:mouseup="rdcharts.mouseUp"
49
- v-on:touchstart="rdcharts.touchStart"
50
- v-on:touchmove="rdcharts.touchMove"
51
- v-on:touchend="rdcharts.touchEnd"
52
- :id="'UC'+cid"
53
- :prop="uchartsOpts"
54
- :change:prop="rdcharts.ucinit"
55
- >
56
- <canvas
57
- :id="cid"
58
- :canvasId="cid"
59
- :style="{ width: cWidth + 'px', height: cHeight + 'px', background: background }"
60
- :disable-scroll="disableScroll"
61
- @error="_error"
62
- v-show="showchart"
63
- />
64
- </view>
65
- </block>
66
- <!-- #endif -->
67
- <!-- 支付宝小程序 -->
68
- <!-- #ifdef MP-ALIPAY -->
69
- <block v-if="ontouch">
70
- <canvas
71
- :id="cid"
72
- :canvasId="cid"
73
- :width="cWidth * pixel"
74
- :height="cHeight * pixel"
75
- :style="{ width: cWidth + 'px', height: cHeight + 'px', background: background }"
76
- :disable-scroll="disScroll"
77
- @tap="_tap"
78
- @touchstart="_touchStart"
79
- @touchmove="_touchMove"
80
- @touchend="_touchEnd"
81
- @error="_error"
82
- v-show="showchart"
83
- />
84
- </block>
85
- <block v-if="!ontouch">
86
- <canvas
87
- :id="cid"
88
- :canvasId="cid"
89
- :width="cWidth * pixel"
90
- :height="cHeight * pixel"
91
- :style="{ width: cWidth + 'px', height: cHeight + 'px', background: background }"
92
- :disable-scroll="disScroll"
93
- @tap="_tap"
94
- @error="_error"
95
- v-show="showchart"
96
- />
97
- </block>
98
- <!-- #endif -->
99
- <!-- 其他小程序通过vue渲染图表 -->
100
- <!-- #ifdef MP-WEIXIN || MP-BAIDU || MP-QQ || MP-TOUTIAO || MP-KUAISHOU || MP-LARK || MP-JD || MP-360 -->
101
- <block v-if="type2d">
102
- <view v-if="ontouch" @tap="_tap">
103
- <canvas
104
- :id="cid"
105
- :canvasId="cid"
106
- :style="{ width: cWidth + 'px', height: cHeight + 'px', background: background }"
107
- type="2d"
108
- :disable-scroll="disScroll"
109
- @touchstart="_touchStart"
110
- @touchmove="_touchMove"
111
- @touchend="_touchEnd"
112
- @error="_error"
113
- v-show="showchart"
114
- />
115
- </view>
116
- <view v-if="!ontouch" @tap="_tap">
117
- <canvas
118
- :id="cid"
119
- :canvasId="cid"
120
- :style="{ width: cWidth + 'px', height: cHeight + 'px', background: background }"
121
- type="2d"
122
- :disable-scroll="disScroll"
123
- @error="_error"
124
- v-show="showchart"
125
- />
126
- </view>
127
- </block>
128
- <block v-if="!type2d">
129
- <view v-if="ontouch" @tap="_tap">
130
- <canvas
131
- :id="cid"
132
- :canvasId="cid"
133
- :style="{ width: cWidth + 'px', height: cHeight + 'px', background: background }"
134
- @touchstart="_touchStart"
135
- @touchmove="_touchMove"
136
- @touchend="_touchEnd"
137
- :disable-scroll="disScroll"
138
- @error="_error"
139
- v-if="showchart"
140
- />
141
- </view>
142
- <view v-if="!ontouch" >
143
- <canvas
144
- :id="cid"
145
- :canvasId="cid"
146
- :style="{ width: cWidth + 'px', height: cHeight + 'px', background: background }"
147
- :disable-scroll="disScroll"
148
- @tap="_tap"
149
- @error="_error"
150
- v-if="showchart"
151
- />
152
- </view>
153
- </block>
154
- <!-- #endif -->
155
- </view>
156
- </template>
157
-
158
- <script>
159
- import uCharts from '../../js_sdk/u-charts/u-charts.js';
160
- import cfu from '../../js_sdk/u-charts/config-ucharts.js';
161
- // #ifdef APP-VUE || H5
162
- import cfe from '../../js_sdk/u-charts/config-echarts.js';
163
- // #endif
164
-
165
- function deepCloneAssign(origin = {}, ...args) {
166
- for (let i in args) {
167
- for (let key in args[i]) {
168
- if (args[i].hasOwnProperty(key)) {
169
- origin[key] = args[i][key] && typeof args[i][key] === 'object' ? deepCloneAssign(Array.isArray(args[i][key]) ? [] : {}, origin[key], args[i][key]) : args[i][key];
170
- }
171
- }
172
- }
173
- return origin;
174
- }
175
-
176
- function formatterAssign(args,formatter) {
177
- for (let key in args) {
178
- if(args.hasOwnProperty(key) && args[key] !== null && typeof args[key] === 'object'){
179
- formatterAssign(args[key],formatter)
180
- }else if(key === 'format' && typeof args[key] === 'string'){
181
- args['formatter'] = formatter[args[key]] ? formatter[args[key]] : undefined;
182
- }
183
- }
184
- return args;
185
- }
186
-
187
- // 时间转换函数,为了匹配uniClinetDB读取出的时间与categories不同
188
- function getFormatDate(date) {
189
- var seperator = "-";
190
- var year = date.getFullYear();
191
- var month = date.getMonth() + 1;
192
- var strDate = date.getDate();
193
- if (month >= 1 && month <= 9) {
194
- month = "0" + month;
195
- }
196
- if (strDate >= 0 && strDate <= 9) {
197
- strDate = "0" + strDate;
198
- }
199
- var currentdate = year + seperator + month + seperator + strDate;
200
- return currentdate;
201
- }
202
-
203
- var lastMoveTime = null;
204
- /**
205
- * 防抖
206
- *
207
- * @param { Function } fn 要执行的方法
208
- * @param { Number } wait 防抖多少毫秒
209
- *
210
- * 在 vue 中使用(注意:不能使用箭头函数,否则this指向不对,并且不能再次封装如:
211
- * move(){ // 错误调用方式
212
- * debounce(function () {
213
- * console.log(this.title);
214
- * }, 1000)});
215
- * 应该直接使用:// 正确调用方式
216
- * move: debounce(function () {
217
- * console.log(this.title);
218
- * }, 1000)
219
- */
220
- function debounce(fn, wait) {
221
- let timer = false;
222
- return function() {
223
- clearTimeout(timer);
224
- timer && clearTimeout(timer);
225
- timer = setTimeout(() => {
226
- timer = false;
227
- fn.apply(this, arguments); // 把参数传进去
228
- }, wait);
229
- };
230
- }
231
-
232
- export default {
233
- name: 'qiun-data-charts',
234
- mixins: [uniCloud.mixinDatacom],
235
- props: {
236
- type: {
237
- type: String,
238
- default: null
239
- },
240
- canvasId: {
241
- type: String,
242
- default: 'uchartsid'
243
- },
244
- canvas2d: {
245
- type: Boolean,
246
- default: false
247
- },
248
- background: {
249
- type: String,
250
- default: 'rgba(0,0,0,0)'
251
- },
252
- animation: {
253
- type: Boolean,
254
- default: true
255
- },
256
- chartData: {
257
- type: Object,
258
- default() {
259
- return {
260
- categories: [],
261
- series: []
262
- };
263
- }
264
- },
265
- opts: {
266
- type: Object,
267
- default() {
268
- return {};
269
- }
270
- },
271
- eopts: {
272
- type: Object,
273
- default() {
274
- return {};
275
- }
276
- },
277
- loadingType: {
278
- type: Number,
279
- default: 2
280
- },
281
- errorShow: {
282
- type: Boolean,
283
- default: true
284
- },
285
- errorReload: {
286
- type: Boolean,
287
- default: true
288
- },
289
- errorMessage: {
290
- type: String,
291
- default: null
292
- },
293
- inScrollView: {
294
- type: Boolean,
295
- default: false
296
- },
297
- reshow: {
298
- type: Boolean,
299
- default: false
300
- },
301
- reload: {
302
- type: Boolean,
303
- default: false
304
- },
305
- disableScroll: {
306
- type: Boolean,
307
- default: false
308
- },
309
- optsWatch: {
310
- type: Boolean,
311
- default: true
312
- },
313
- onzoom: {
314
- type: Boolean,
315
- default: false
316
- },
317
- ontap: {
318
- type: Boolean,
319
- default: true
320
- },
321
- ontouch: {
322
- type: Boolean,
323
- default: false
324
- },
325
- onmouse: {
326
- type: Boolean,
327
- default: true
328
- },
329
- onmovetip: {
330
- type: Boolean,
331
- default: false
332
- },
333
- echartsH5: {
334
- type: Boolean,
335
- default: false
336
- },
337
- echartsApp: {
338
- type: Boolean,
339
- default: false
340
- },
341
- tooltipShow: {
342
- type: Boolean,
343
- default: true
344
- },
345
- tooltipFormat: {
346
- type: String,
347
- default: undefined
348
- },
349
- tooltipCustom: {
350
- type: Object,
351
- default: undefined
352
- },
353
- startDate: {
354
- type: String,
355
- default: undefined
356
- },
357
- endDate: {
358
- type: String,
359
- default: undefined
360
- },
361
- textEnum: {
362
- type: Array,
363
- default () {
364
- return []
365
- }
366
- },
367
- groupEnum: {
368
- type: Array,
369
- default () {
370
- return []
371
- }
372
- },
373
- pageScrollTop: {
374
- type: Number,
375
- default: 0
376
- },
377
- directory: {
378
- type: String,
379
- default: '/'
380
- },
381
- tapLegend: {
382
- type: Boolean,
383
- default: true
384
- },
385
- menus: {
386
- type: Array,
387
- default () {
388
- return []
389
- }
390
- }
391
- },
392
- data() {
393
- return {
394
- cid: 'uchartsid',
395
- inWx: false,
396
- inAli: false,
397
- inTt: false,
398
- inBd: false,
399
- inH5: false,
400
- inApp: false,
401
- inWin: false,
402
- type2d: true,
403
- disScroll: false,
404
- openmouse: false,
405
- pixel: 1,
406
- cWidth: 375,
407
- cHeight: 250,
408
- showchart: false,
409
- echarts: false,
410
- echartsResize:{
411
- state:false
412
- },
413
- uchartsOpts: {},
414
- echartsOpts: {},
415
- drawData:{},
416
- lastDrawTime:null,
417
- };
418
- },
419
- created(){
420
- this.cid = this.canvasId
421
- if (this.canvasId == 'uchartsid' || this.canvasId == '') {
422
- let t = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
423
- let len = t.length
424
- let id = ''
425
- for (let i = 0; i < 32; i++) {
426
- id += t.charAt(Math.floor(Math.random() * len))
427
- }
428
- this.cid = id
429
- }
430
- const systemInfo = uni.getSystemInfoSync()
431
- if(systemInfo.platform === 'windows' || systemInfo.platform === 'mac'){
432
- this.inWin = true;
433
- }
434
- // #ifdef MP-WEIXIN
435
- this.inWx = true;
436
- if (this.canvas2d === false || systemInfo.platform === 'windows' || systemInfo.platform === 'mac') {
437
- this.type2d = false;
438
- }else{
439
- this.type2d = true;
440
- this.pixel = systemInfo.pixelRatio;
441
- }
442
- // #endif
443
- //非微信小程序端强制关闭canvas2d模式
444
- // #ifndef MP-WEIXIN
445
- this.type2d = false;
446
- // #endif
447
- // #ifdef MP-TOUTIAO || MP-LARK || MP-ALIPAY
448
- this.type2d = this.canvas2d;
449
- // #endif
450
- // #ifdef MP-ALIPAY
451
- this.inAli = true;
452
- this.pixel = systemInfo.pixelRatio;
453
- // #endif
454
- // #ifdef MP-BAIDU
455
- this.inBd = true;
456
- // #endif
457
- // #ifdef MP-TOUTIAO
458
- this.inTt = true;
459
- // #endif
460
- this.disScroll = this.disableScroll;
461
- },
462
- mounted() {
463
- // #ifdef APP-VUE
464
- this.inApp = true;
465
- if (this.echartsApp === true) {
466
- this.echarts = true;
467
- this.openmouse = false;
468
- }
469
- // #endif
470
- // #ifdef APP-NVUE
471
- this.inApp = true;
472
- this.mixinDatacomLoading = false
473
- this.mixinDatacomErrorMessage = "暂不支持NVUE"
474
- // #endif
475
- // #ifdef H5
476
- this.inH5 = true;
477
- if(this.inWin === true){
478
- this.openmouse = this.onmouse;
479
- }
480
- if (this.echartsH5 === true) {
481
- this.echarts = true;
482
- }
483
- // #endif
484
- this.$nextTick(()=>{
485
- this.beforeInit();
486
- })
487
- // #ifndef MP-ALIPAY || MP-BAIDU || MP-TOUTIAO || APP-VUE
488
- const time = this.inH5 ? 500 : 200;
489
- const _this = this;
490
- uni.onWindowResize(
491
- debounce(function(res) {
492
- if (_this.mixinDatacomLoading == true) {
493
- return;
494
- }
495
- let errmsg = _this.mixinDatacomErrorMessage;
496
- if (errmsg !== null && errmsg !== 'null' && errmsg !== '') {
497
- return;
498
- }
499
- if (_this.echarts) {
500
- _this.echartsResize.state = !_this.echartsResize.state;
501
- } else {
502
- _this.resizeHandler();
503
- }
504
- }, time)
505
- );
506
- // #endif
507
- },
508
- destroyed(){
509
- if(this.echarts === true){
510
- delete cfe.option[this.cid]
511
- delete cfe.instance[this.cid]
512
- }else{
513
- delete cfu.option[this.cid]
514
- delete cfu.instance[this.cid]
515
- }
516
- // #ifndef MP-ALIPAY || MP-BAIDU || MP-TOUTIAO
517
- uni.offWindowResize(()=>{})
518
- // #endif
519
- },
520
- watch: {
521
- chartDataProps: {
522
- handler(val, oldval) {
523
- if (typeof val === 'object') {
524
- if (JSON.stringify(val) !== JSON.stringify(oldval)) {
525
- this._clearChart();
526
- if (val.series && val.series.length > 0) {
527
- this.beforeInit();
528
- }else{
529
- this.mixinDatacomLoading = true;
530
- this.showchart = false;
531
- this.mixinDatacomErrorMessage = null;
532
- }
533
- }
534
- } else {
535
- this.mixinDatacomLoading = false;
536
- this._clearChart();
537
- this.showchart = false;
538
- this.mixinDatacomErrorMessage = '参数错误:chartData数据类型错误';
539
- }
540
- },
541
- immediate: false,
542
- deep: true
543
- },
544
- localdata:{
545
- handler(val, oldval) {
546
- if (JSON.stringify(val) !== JSON.stringify(oldval)) {
547
- if (val.length > 0) {
548
- this.beforeInit();
549
- }else{
550
- this.mixinDatacomLoading = true;
551
- this._clearChart();
552
- this.showchart = false;
553
- this.mixinDatacomErrorMessage = null;
554
- }
555
- }
556
- },
557
- immediate: false,
558
- deep: true
559
- },
560
- optsProps: {
561
- handler(val, oldval) {
562
- if (typeof val === 'object') {
563
- if (JSON.stringify(val) !== JSON.stringify(oldval) && this.echarts === false && this.optsWatch == true) {
564
- this.checkData(this.drawData);
565
- }
566
- } else {
567
- this.mixinDatacomLoading = false;
568
- this._clearChart();
569
- this.showchart = false;
570
- this.mixinDatacomErrorMessage = '参数错误:opts数据类型错误';
571
- }
572
- },
573
- immediate: false,
574
- deep: true
575
- },
576
- eoptsProps: {
577
- handler(val, oldval) {
578
- if (typeof val === 'object') {
579
- if (JSON.stringify(val) !== JSON.stringify(oldval) && this.echarts === true) {
580
- this.checkData(this.drawData);
581
- }
582
- } else {
583
- this.mixinDatacomLoading = false;
584
- this.showchart = false;
585
- this.mixinDatacomErrorMessage = '参数错误:eopts数据类型错误';
586
- }
587
- },
588
- immediate: false,
589
- deep: true
590
- },
591
- reshow(val, oldval) {
592
- if (val === true && this.mixinDatacomLoading === false) {
593
- setTimeout(() => {
594
- this.mixinDatacomErrorMessage = null;
595
- this.echartsResize.state = !this.echartsResize.state;
596
- this.checkData(this.drawData);
597
- }, 200);
598
- }
599
- },
600
- reload(val, oldval) {
601
- if (val === true) {
602
- this.showchart = false;
603
- this.mixinDatacomErrorMessage = null;
604
- this.reloading();
605
- }
606
- },
607
- mixinDatacomErrorMessage(val, oldval) {
608
- if (val) {
609
- this.emitMsg({name: 'error', params: {type:"error", errorShow: this.errorShow, msg: val, id: this.cid}});
610
- if(this.errorShow){
611
- console.log('[秋云图表组件]' + val);
612
- }
613
- }
614
- },
615
- errorMessage(val, oldval) {
616
- if (val && this.errorShow && val !== null && val !== 'null' && val !== '') {
617
- this.showchart = false;
618
- this.mixinDatacomLoading = false;
619
- this.mixinDatacomErrorMessage = val;
620
- } else {
621
- this.showchart = false;
622
- this.mixinDatacomErrorMessage = null;
623
- this.reloading();
624
- }
625
- }
626
- },
627
- computed: {
628
- optsProps() {
629
- return JSON.parse(JSON.stringify(this.opts));
630
- },
631
- eoptsProps() {
632
- return JSON.parse(JSON.stringify(this.eopts));
633
- },
634
- chartDataProps() {
635
- return JSON.parse(JSON.stringify(this.chartData));
636
- },
637
- },
638
- methods: {
639
- beforeInit(){
640
- this.mixinDatacomErrorMessage = null;
641
- if (typeof this.chartData === 'object' && this.chartData != null && this.chartData.series !== undefined && this.chartData.series.length > 0) {
642
- //拷贝一下chartData,为了opts变更后统一数据来源
643
- this.drawData = deepCloneAssign({}, this.chartData);
644
- this.mixinDatacomLoading = false;
645
- this.showchart = true;
646
- this.checkData(this.chartData);
647
- }else if(this.localdata.length>0){
648
- this.mixinDatacomLoading = false;
649
- this.showchart = true;
650
- this.localdataInit(this.localdata);
651
- }else if(this.collection !== ''){
652
- this.mixinDatacomLoading = false;
653
- this.getCloudData();
654
- }else{
655
- this.mixinDatacomLoading = true;
656
- }
657
- },
658
- localdataInit(resdata){
659
- //替换enum类型为正确的描述
660
- if(this.groupEnum.length>0){
661
- for (let i = 0; i < resdata.length; i++) {
662
- for (let j = 0; j < this.groupEnum.length; j++) {
663
- if(resdata[i].group === this.groupEnum[j].value){
664
- resdata[i].group = this.groupEnum[j].text
665
- }
666
- }
667
- }
668
- }
669
- if(this.textEnum.length>0){
670
- for (let i = 0; i < resdata.length; i++) {
671
- for (let j = 0; j < this.textEnum.length; j++) {
672
- if(resdata[i].text === this.textEnum[j].value){
673
- resdata[i].text = this.textEnum[j].text
674
- }
675
- }
676
- }
677
- }
678
- let needCategories = false;
679
- let tmpData = {categories:[], series:[]}
680
- let tmpcategories = []
681
- let tmpseries = [];
682
- //拼接categories
683
- if(this.echarts === true){
684
- needCategories = cfe.categories.includes(this.type)
685
- }else{
686
- needCategories = cfu.categories.includes(this.type)
687
- }
688
- if(needCategories === true){
689
- //如果props中的chartData带有categories,则优先使用chartData的categories
690
- if(this.chartData && this.chartData.categories && this.chartData.categories.length>0){
691
- tmpcategories = this.chartData.categories
692
- }else{
693
- //如果是日期类型的数据,不管是本地数据还是云数据,都按起止日期自动拼接categories
694
- if(this.startDate && this.endDate){
695
- let idate = new Date(this.startDate)
696
- let edate = new Date(this.endDate)
697
- while (idate <= edate) {
698
- tmpcategories.push(getFormatDate(idate))
699
- idate = idate.setDate(idate.getDate() + 1)
700
- idate = new Date(idate)
701
- }
702
- //否则从结果中去重并拼接categories
703
- }else{
704
- let tempckey = {};
705
- resdata.map(function(item, index) {
706
- if (item.text != undefined && !tempckey[item.text]) {
707
- tmpcategories.push(item.text)
708
- tempckey[item.text] = true
709
- }
710
- });
711
- }
712
- }
713
- tmpData.categories = tmpcategories
714
- }
715
- //拼接series
716
- let tempskey = {};
717
- resdata.map(function(item, index) {
718
- if (item.group != undefined && !tempskey[item.group]) {
719
- tmpseries.push({ name: item.group, data: [] });
720
- tempskey[item.group] = true;
721
- }
722
- });
723
- //如果没有获取到分组名称(可能是带categories的数据,也可能是不带的饼图类)
724
- if (tmpseries.length == 0) {
725
- tmpseries = [{ name: '默认分组', data: [] }];
726
- //如果是需要categories的图表类型
727
- if(needCategories === true){
728
- for (let j = 0; j < tmpcategories.length; j++) {
729
- let seriesdata = 0;
730
- for (let i = 0; i < resdata.length; i++) {
731
- if (resdata[i].text == tmpcategories[j]) {
732
- seriesdata = resdata[i].value;
733
- }
734
- }
735
- tmpseries[0].data.push(seriesdata);
736
- }
737
- //如果是饼图类的图表类型
738
- }else{
739
- for (let i = 0; i < resdata.length; i++) {
740
- tmpseries[0].data.push({"name": resdata[i].text,"value": resdata[i].value});
741
- }
742
- }
743
- //如果有分组名
744
- } else {
745
- for (let k = 0; k < tmpseries.length; k++) {
746
- //如果有categories
747
- if (tmpcategories.length > 0) {
748
- for (let j = 0; j < tmpcategories.length; j++) {
749
- let seriesdata = 0;
750
- for (let i = 0; i < resdata.length; i++) {
751
- if (tmpseries[k].name == resdata[i].group && resdata[i].text == tmpcategories[j]) {
752
- seriesdata = resdata[i].value;
753
- }
754
- }
755
- tmpseries[k].data.push(seriesdata);
756
- }
757
- //如果传了group而没有传text,即没有categories(正常情况下这种数据是不符合数据要求规范的)
758
- } else {
759
- for (let i = 0; i < resdata.length; i++) {
760
- if (tmpseries[k].name == resdata[i].group) {
761
- tmpseries[k].data.push(resdata[i].value);
762
- }
763
- }
764
- }
765
- }
766
- }
767
- tmpData.series = tmpseries
768
- //拷贝一下chartData,为了opts变更后统一数据来源
769
- this.drawData = deepCloneAssign({}, tmpData);
770
- this.checkData(tmpData)
771
- },
772
- reloading() {
773
- if(this.errorReload === false){
774
- return;
775
- }
776
- this.showchart = false;
777
- this.mixinDatacomErrorMessage = null;
778
- if (this.collection !== '') {
779
- this.mixinDatacomLoading = false;
780
- this.onMixinDatacomPropsChange(true);
781
- } else {
782
- this.beforeInit();
783
- }
784
- },
785
- checkData(anyData) {
786
- let cid = this.cid
787
- //复位opts或eopts
788
- if(this.echarts === true){
789
- cfe.option[cid] = deepCloneAssign({}, this.eopts);
790
- cfe.option[cid].id = cid;
791
- cfe.option[cid].type = this.type;
792
- }else{
793
- if (this.type && cfu.type.includes(this.type)) {
794
- cfu.option[cid] = deepCloneAssign({}, cfu[this.type], this.opts);
795
- cfu.option[cid].canvasId = cid;
796
- } else {
797
- this.mixinDatacomLoading = false;
798
- this.showchart = false;
799
- this.mixinDatacomErrorMessage = '参数错误:props参数中type类型不正确';
800
- }
801
- }
802
- //挂载categories和series
803
- let newData = deepCloneAssign({}, anyData);
804
- if (newData.series !== undefined && newData.series.length > 0) {
805
- this.mixinDatacomErrorMessage = null;
806
- if (this.echarts === true) {
807
- cfe.option[cid].chartData = newData;
808
- this.$nextTick(()=>{
809
- this.init()
810
- })
811
- }else{
812
- cfu.option[cid].categories = newData.categories;
813
- cfu.option[cid].series = newData.series;
814
- this.$nextTick(()=>{
815
- this.init()
816
- })
817
- }
818
- }
819
- },
820
- resizeHandler() {
821
- //渲染防抖
822
- let currTime = Date.now();
823
- let lastDrawTime = this.lastDrawTime?this.lastDrawTime:currTime-3000;
824
- let duration = currTime - lastDrawTime;
825
- if (duration < 1000) return;
826
- let chartdom = uni
827
- .createSelectorQuery()
828
- // #ifndef MP-ALIPAY
829
- .in(this)
830
- // #endif
831
- .select('#ChartBoxId'+this.cid)
832
- .boundingClientRect(data => {
833
- this.showchart = true;
834
- if (data.width > 0 && data.height > 0) {
835
- if (data.width !== this.cWidth || data.height !== this.cHeight) {
836
- this.checkData(this.drawData)
837
- }
838
- }
839
- })
840
- .exec();
841
- },
842
- getCloudData() {
843
- if (this.mixinDatacomLoading == true) {
844
- return;
845
- }
846
- this.mixinDatacomLoading = true;
847
- this.mixinDatacomGet()
848
- .then(res => {
849
- this.mixinDatacomResData = res.result.data;
850
- this.localdataInit(this.mixinDatacomResData);
851
- })
852
- .catch(err => {
853
- this.mixinDatacomLoading = false;
854
- this.showchart = false;
855
- this.mixinDatacomErrorMessage = '请求错误:' + err;
856
- });
857
- },
858
- onMixinDatacomPropsChange(needReset, changed) {
859
- if (needReset == true && this.collection !== '') {
860
- this.showchart = false;
861
- this.mixinDatacomErrorMessage = null;
862
- this._clearChart();
863
- this.getCloudData();
864
- }
865
- },
866
- _clearChart() {
867
- let cid = this.cid
868
- if (this.echarts !== true && cfu.option[cid] && cfu.option[cid].context) {
869
- const ctx = cfu.option[cid].context;
870
- if(typeof ctx === "object" && !!!cfu.option[cid].update){
871
- ctx.clearRect(0, 0, this.cWidth*this.pixel, this.cHeight*this.pixel);
872
- ctx.draw();
873
- }
874
- }
875
- },
876
- init() {
877
- let cid = this.cid
878
- let chartdom = uni
879
- .createSelectorQuery()
880
- // #ifndef MP-ALIPAY
881
- .in(this)
882
- // #endif
883
- .select('#ChartBoxId'+cid)
884
- .boundingClientRect(data => {
885
- if (data.width > 0 && data.height > 0) {
886
- this.mixinDatacomLoading = false;
887
- this.showchart = true;
888
- this.lastDrawTime = Date.now();
889
- this.cWidth = data.width;
890
- this.cHeight = data.height;
891
- if(this.echarts !== true){
892
- cfu.option[cid].background = this.background == 'rgba(0,0,0,0)' ? '#FFFFFF' : this.background;
893
- cfu.option[cid].canvas2d = this.type2d;
894
- cfu.option[cid].pixelRatio = this.pixel;
895
- cfu.option[cid].animation = this.animation;
896
- cfu.option[cid].width = data.width * this.pixel;
897
- cfu.option[cid].height = data.height * this.pixel;
898
- cfu.option[cid].onzoom = this.onzoom;
899
- cfu.option[cid].ontap = this.ontap;
900
- cfu.option[cid].ontouch = this.ontouch;
901
- cfu.option[cid].onmouse = this.openmouse;
902
- cfu.option[cid].onmovetip = this.onmovetip;
903
- cfu.option[cid].tooltipShow = this.tooltipShow;
904
- cfu.option[cid].tooltipFormat = this.tooltipFormat;
905
- cfu.option[cid].tooltipCustom = this.tooltipCustom;
906
- cfu.option[cid].inScrollView = this.inScrollView;
907
- cfu.option[cid].lastDrawTime = this.lastDrawTime;
908
- cfu.option[cid].tapLegend = this.tapLegend;
909
- }
910
- //如果是H5或者App端,采用renderjs渲染图表
911
- if (this.inH5 || this.inApp) {
912
- if (this.echarts == true) {
913
- cfe.option[cid].ontap = this.ontap;
914
- cfe.option[cid].onmouse = this.openmouse;
915
- cfe.option[cid].tooltipShow = this.tooltipShow;
916
- cfe.option[cid].tooltipFormat = this.tooltipFormat;
917
- cfe.option[cid].tooltipCustom = this.tooltipCustom;
918
- cfe.option[cid].lastDrawTime = this.lastDrawTime;
919
- this.echartsOpts = deepCloneAssign({}, cfe.option[cid]);
920
- } else {
921
- cfu.option[cid].rotateLock = cfu.option[cid].rotate;
922
- this.uchartsOpts = deepCloneAssign({}, cfu.option[cid]);
923
- }
924
- //如果是小程序端,采用uCharts渲染
925
- } else {
926
- cfu.option[cid] = formatterAssign(cfu.option[cid],cfu.formatter)
927
- this.mixinDatacomErrorMessage = null;
928
- this.mixinDatacomLoading = false;
929
- this.showchart = true;
930
- this.$nextTick(()=>{
931
- if (this.type2d === true) {
932
- const query = uni.createSelectorQuery().in(this)
933
- query
934
- .select('#' + cid)
935
- .fields({ node: true, size: true })
936
- .exec(res => {
937
- if (res[0]) {
938
- const canvas = res[0].node;
939
- const ctx = canvas.getContext('2d');
940
- cfu.option[cid].context = ctx;
941
- cfu.option[cid].rotateLock = cfu.option[cid].rotate;
942
- if(cfu.instance[cid] && cfu.option[cid] && cfu.option[cid].update === true){
943
- this._updataUChart(cid)
944
- }else{
945
- canvas.width = data.width * this.pixel;
946
- canvas.height = data.height * this.pixel;
947
- canvas._width = data.width * this.pixel;
948
- canvas._height = data.height * this.pixel;
949
- setTimeout(()=>{
950
- cfu.option[cid].context.restore();
951
- cfu.option[cid].context.save();
952
- this._newChart(cid)
953
- },100)
954
- }
955
- } else {
956
- this.showchart = false;
957
- this.mixinDatacomErrorMessage = '参数错误:开启2d模式后,未获取到dom节点,canvas-id:' + cid;
958
- }
959
- });
960
- } else {
961
- if(this.inAli){
962
- cfu.option[cid].rotateLock = cfu.option[cid].rotate;
963
- }
964
- cfu.option[cid].context = uni.createCanvasContext(cid, this);
965
- if(cfu.instance[cid] && cfu.option[cid] && cfu.option[cid].update === true){
966
- this._updataUChart(cid)
967
- }else{
968
- setTimeout(()=>{
969
- cfu.option[cid].context.restore();
970
- cfu.option[cid].context.save();
971
- this._newChart(cid)
972
- },100)
973
- }
974
- }
975
- })
976
- }
977
- } else {
978
- this.mixinDatacomLoading = false;
979
- this.showchart = false;
980
- if (this.reshow == true) {
981
- this.mixinDatacomErrorMessage = '布局错误:未获取到父元素宽高尺寸!canvas-id:' + cid;
982
- }
983
- }
984
- })
985
- .exec();
986
- },
987
- saveImage(){
988
- uni.canvasToTempFilePath({
989
- canvasId: this.cid,
990
- success: res=>{
991
- //#ifdef H5
992
- var a = document.createElement("a");
993
- a.href = res.tempFilePath;
994
- a.download = this.cid;
995
- a.target = '_blank'
996
- a.click();
997
- //#endif
998
- //#ifndef H5
999
- uni.saveImageToPhotosAlbum({
1000
- filePath: res.tempFilePath,
1001
- success: function () {
1002
- uni.showToast({
1003
- title: '保存成功',
1004
- duration: 2000
1005
- });
1006
- }
1007
- });
1008
- //#endif
1009
- }
1010
- },this);
1011
- },
1012
- getImage(){
1013
- if(this.type2d == false){
1014
- uni.canvasToTempFilePath({
1015
- canvasId: this.cid,
1016
- success: res=>{
1017
- this.emitMsg({name: 'getImage', params: {type:"getImage", base64: res.tempFilePath}});
1018
- }
1019
- },this);
1020
- }else{
1021
- const query = uni.createSelectorQuery().in(this)
1022
- query
1023
- .select('#' + this.cid)
1024
- .fields({ node: true, size: true })
1025
- .exec(res => {
1026
- if (res[0]) {
1027
- const canvas = res[0].node;
1028
- this.emitMsg({name: 'getImage', params: {type:"getImage", base64: canvas.toDataURL('image/png')}});
1029
- }
1030
- });
1031
- }
1032
- },
1033
- // #ifndef APP-VUE || H5
1034
- _newChart(cid) {
1035
- if (this.mixinDatacomLoading == true) {
1036
- return;
1037
- }
1038
- this.showchart = true;
1039
- cfu.instance[cid] = new uCharts(cfu.option[cid]);
1040
- cfu.instance[cid].addEventListener('renderComplete', () => {
1041
- this.emitMsg({name: 'complete', params: {type:"complete", complete: true, id: cid, opts: cfu.instance[cid].opts}});
1042
- cfu.instance[cid].delEventListener('renderComplete')
1043
- });
1044
- cfu.instance[cid].addEventListener('scrollLeft', () => {
1045
- this.emitMsg({name: 'scrollLeft', params: {type:"scrollLeft", scrollLeft: true, id: cid, opts: cfu.instance[cid].opts}});
1046
- });
1047
- cfu.instance[cid].addEventListener('scrollRight', () => {
1048
- this.emitMsg({name: 'scrollRight', params: {type:"scrollRight", scrollRight: true, id: cid, opts: cfu.instance[cid].opts}});
1049
- });
1050
- },
1051
- _updataUChart(cid) {
1052
- cfu.instance[cid].updateData(cfu.option[cid])
1053
- },
1054
- _tooltipDefault(item, category, index, opts) {
1055
- if (category) {
1056
- let data = item.data
1057
- if(typeof item.data === "object"){
1058
- data = item.data.value
1059
- }
1060
- return category + ' ' + item.name + ':' + data;
1061
- } else {
1062
- if (item.properties && item.properties.name) {
1063
- return item.properties.name;
1064
- } else {
1065
- return item.name + ':' + item.data;
1066
- }
1067
- }
1068
- },
1069
- _showTooltip(e) {
1070
- let cid = this.cid
1071
- let tc = cfu.option[cid].tooltipCustom
1072
- if (tc && tc !== undefined && tc !== null) {
1073
- let offset = undefined;
1074
- if (tc.x >= 0 && tc.y >= 0) {
1075
- offset = { x: tc.x, y: tc.y + 10 };
1076
- }
1077
- cfu.instance[cid].showToolTip(e, {
1078
- index: tc.index,
1079
- offset: offset,
1080
- textList: tc.textList,
1081
- formatter: (item, category, index, opts) => {
1082
- if (typeof cfu.option[cid].tooltipFormat === 'string' && cfu.formatter[cfu.option[cid].tooltipFormat]) {
1083
- return cfu.formatter[cfu.option[cid].tooltipFormat](item, category, index, opts);
1084
- } else {
1085
- return this._tooltipDefault(item, category, index, opts);
1086
- }
1087
- }
1088
- });
1089
- } else {
1090
- cfu.instance[cid].showToolTip(e, {
1091
- formatter: (item, category, index, opts) => {
1092
- if (typeof cfu.option[cid].tooltipFormat === 'string' && cfu.formatter[cfu.option[cid].tooltipFormat]) {
1093
- return cfu.formatter[cfu.option[cid].tooltipFormat](item, category, index, opts);
1094
- } else {
1095
- return this._tooltipDefault(item, category, index, opts);
1096
- }
1097
- }
1098
- });
1099
- }
1100
- },
1101
- _tap(e,move) {
1102
- let cid = this.cid
1103
- let currentIndex = null;
1104
- let legendIndex = null;
1105
- if (this.inScrollView === true || this.inAli) {
1106
- let chartdom = uni
1107
- .createSelectorQuery()
1108
- // #ifndef MP-ALIPAY
1109
- .in(this)
1110
- .select('#ChartBoxId'+cid)
1111
- // #endif
1112
- // #ifdef MP-ALIPAY
1113
- .select('#'+this.cid)
1114
- // #endif
1115
- .boundingClientRect(data => {
1116
- e.changedTouches=[];
1117
- if (this.inAli) {
1118
- e.changedTouches.unshift({ x: e.detail.clientX - data.left, y: e.detail.clientY - data.top});
1119
- }else{
1120
- e.changedTouches.unshift({ x: e.detail.x - data.left, y: e.detail.y - data.top - this.pageScrollTop});
1121
- }
1122
- if(move){
1123
- if (this.tooltipShow === true) {
1124
- this._showTooltip(e);
1125
- }
1126
- }else{
1127
- currentIndex = cfu.instance[cid].getCurrentDataIndex(e);
1128
- legendIndex = cfu.instance[cid].getLegendDataIndex(e);
1129
- if(this.tapLegend === true){
1130
- cfu.instance[cid].touchLegend(e);
1131
- }
1132
- if (this.tooltipShow === true) {
1133
- this._showTooltip(e);
1134
- }
1135
- this.emitMsg({name: 'getIndex', params: { type:"getIndex", event:{ x: e.detail.x - data.left, y: e.detail.y - data.top }, currentIndex: currentIndex, legendIndex: legendIndex, id: cid, opts: cfu.instance[cid].opts}});
1136
- }
1137
- })
1138
- .exec();
1139
- } else {
1140
- if(move){
1141
- if (this.tooltipShow === true) {
1142
- this._showTooltip(e);
1143
- }
1144
- }else{
1145
- e.changedTouches=[];
1146
- e.changedTouches.unshift({ x: e.detail.x - e.currentTarget.offsetLeft, y: e.detail.y - e.currentTarget.offsetTop });
1147
- currentIndex = cfu.instance[cid].getCurrentDataIndex(e);
1148
- legendIndex = cfu.instance[cid].getLegendDataIndex(e);
1149
- if(this.tapLegend === true){
1150
- cfu.instance[cid].touchLegend(e);
1151
- }
1152
- if (this.tooltipShow === true) {
1153
- this._showTooltip(e);
1154
- }
1155
- this.emitMsg({name: 'getIndex', params: {type:"getIndex", event:{ x: e.detail.x, y: e.detail.y - e.currentTarget.offsetTop }, currentIndex: currentIndex, legendIndex: legendIndex, id: cid, opts: cfu.instance[cid].opts}});
1156
- }
1157
- }
1158
- },
1159
- _touchStart(e) {
1160
- let cid = this.cid
1161
- lastMoveTime=Date.now();
1162
- if(cfu.option[cid].enableScroll === true && e.touches.length == 1){
1163
- cfu.instance[cid].scrollStart(e);
1164
- }
1165
- this.emitMsg({name:'getTouchStart', params:{type:"touchStart", event:e.changedTouches[0], id:cid, opts: cfu.instance[cid].opts}});
1166
- },
1167
- _touchMove(e) {
1168
- let cid = this.cid
1169
- let currMoveTime = Date.now();
1170
- let duration = currMoveTime - lastMoveTime;
1171
- let touchMoveLimit = cfu.option[cid].touchMoveLimit || 24;
1172
- if (duration < Math.floor(1000 / touchMoveLimit)) return;//每秒60帧
1173
- lastMoveTime = currMoveTime;
1174
- if(cfu.option[cid].enableScroll === true && e.changedTouches.length == 1){
1175
- cfu.instance[cid].scroll(e);
1176
- }
1177
- if(this.ontap === true && cfu.option[cid].enableScroll === false && this.onmovetip === true){
1178
- this._tap(e,true)
1179
- }
1180
- if(this.ontouch === true && cfu.option[cid].enableScroll === true && this.onzoom === true && e.changedTouches.length == 2){
1181
- cfu.instance[cid].dobuleZoom(e);
1182
- }
1183
- this.emitMsg({name: 'getTouchMove', params: {type:"touchMove", event:e.changedTouches[0], id: cid, opts: cfu.instance[cid].opts}});
1184
- },
1185
- _touchEnd(e) {
1186
- let cid = this.cid
1187
- if(cfu.option[cid].enableScroll === true && e.touches.length == 0){
1188
- cfu.instance[cid].scrollEnd(e);
1189
- }
1190
- this.emitMsg({name:'getTouchEnd', params:{type:"touchEnd", event:e.changedTouches[0], id:cid, opts: cfu.instance[cid].opts}});
1191
- if(this.ontap === true && cfu.option[cid].enableScroll === false && this.onmovetip === true){
1192
- this._tap(e,true)
1193
- }
1194
- },
1195
- // #endif
1196
- _error(e) {
1197
- this.mixinDatacomErrorMessage = e.detail.errMsg;
1198
- },
1199
- emitMsg(msg) {
1200
- this.$emit(msg.name, msg.params);
1201
- },
1202
- getRenderType() {
1203
- //防止如果开启echarts且父元素为v-if的情况renderjs监听不到prop变化的问题
1204
- if(this.echarts===true && this.mixinDatacomLoading===false){
1205
- this.beforeInit()
1206
- }
1207
- },
1208
- toJSON(){
1209
- return this
1210
- }
1211
- }
1212
- };
1213
- </script>
1214
-
1215
- <!-- #ifdef APP-VUE || H5 -->
1216
- <script module="rdcharts" lang="renderjs">
1217
- import uChartsRD from '../../js_sdk/u-charts/u-charts.js';
1218
- import cfu from '../../js_sdk/u-charts/config-ucharts.js';
1219
- import cfe from '../../js_sdk/u-charts/config-echarts.js';
1220
-
1221
- var that = {};
1222
- var rootdom = null;
1223
-
1224
- function rddeepCloneAssign(origin = {}, ...args) {
1225
- for (let i in args) {
1226
- for (let key in args[i]) {
1227
- if (args[i].hasOwnProperty(key)) {
1228
- origin[key] = args[i][key] && typeof args[i][key] === 'object' ? rddeepCloneAssign(Array.isArray(args[i][key]) ? [] : {}, origin[key], args[i][key]) : args[i][key];
1229
- }
1230
- }
1231
- }
1232
- return origin;
1233
- }
1234
-
1235
- function rdformatterAssign(args,formatter) {
1236
- for (let key in args) {
1237
- if(args.hasOwnProperty(key) && args[key] !== null && typeof args[key] === 'object'){
1238
- rdformatterAssign(args[key],formatter)
1239
- }else if(key === 'format' && typeof args[key] === 'string'){
1240
- args['formatter'] = formatter[args[key]] ? formatter[args[key]] : undefined;
1241
- }
1242
- }
1243
- return args;
1244
- }
1245
-
1246
- export default {
1247
- data() {
1248
- return {
1249
- rid:null
1250
- }
1251
- },
1252
- mounted() {
1253
- rootdom = {top:0,left:0}
1254
- // #ifdef H5
1255
- let dm = document.querySelectorAll('uni-main')[0]
1256
- if(dm === undefined){
1257
- dm = document.querySelectorAll('uni-page-wrapper')[0]
1258
- }
1259
- rootdom = {top:dm.offsetTop,left:dm.offsetLeft}
1260
- // #endif
1261
- setTimeout(()=>{
1262
- if(this.rid === null){
1263
- this.$ownerInstance && this.$ownerInstance.callMethod('getRenderType')
1264
- }
1265
- },200)
1266
- },
1267
- destroyed(){
1268
- delete cfu.option[this.rid]
1269
- delete cfu.instance[this.rid]
1270
- delete cfe.option[this.rid]
1271
- delete cfe.instance[this.rid]
1272
- },
1273
- methods: {
1274
- //==============以下是ECharts的方法====================
1275
- ecinit(newVal, oldVal, owner, instance){
1276
- let cid = JSON.stringify(newVal.id)
1277
- this.rid = cid
1278
- that[cid] = this.$ownerInstance || instance
1279
- let eopts = JSON.parse(JSON.stringify(newVal))
1280
- let type = eopts.type;
1281
- //载入并覆盖默认配置
1282
- if (type && cfe.type.includes(type)) {
1283
- cfe.option[cid] = rddeepCloneAssign({}, cfe[type], eopts);
1284
- }else{
1285
- cfe.option[cid] = rddeepCloneAssign({}, eopts);
1286
- }
1287
- let newData = eopts.chartData;
1288
- if(newData){
1289
- //挂载categories和series
1290
- if(cfe.option[cid].xAxis && cfe.option[cid].xAxis.type && cfe.option[cid].xAxis.type === 'category'){
1291
- cfe.option[cid].xAxis.data = newData.categories
1292
- }
1293
- if(cfe.option[cid].yAxis && cfe.option[cid].yAxis.type && cfe.option[cid].yAxis.type === 'category'){
1294
- cfe.option[cid].yAxis.data = newData.categories
1295
- }
1296
- cfe.option[cid].series = []
1297
- for (var i = 0; i < newData.series.length; i++) {
1298
- cfe.option[cid].seriesTemplate = cfe.option[cid].seriesTemplate ? cfe.option[cid].seriesTemplate : {}
1299
- let Template = rddeepCloneAssign({},cfe.option[cid].seriesTemplate,newData.series[i])
1300
- cfe.option[cid].series.push(Template)
1301
- }
1302
- }
1303
-
1304
- if (typeof window.echarts === 'object') {
1305
- this.newEChart()
1306
- }else{
1307
- const script = document.createElement('script')
1308
- // #ifdef APP-VUE
1309
- script.src = './uni_modules/qiun-data-charts/static/app-plus/echarts.min.js'
1310
- // #endif
1311
- // #ifdef H5
1312
- const rooturl = window.location.origin
1313
- const directory = instance.getDataset().directory
1314
- script.src = rooturl + directory + 'uni_modules/qiun-data-charts/static/h5/echarts.min.js'
1315
- // #endif
1316
- script.onload = this.newEChart
1317
- document.head.appendChild(script)
1318
- }
1319
- },
1320
- ecresize(newVal, oldVal, owner, instance){
1321
- if(cfe.instance[this.rid]){
1322
- cfe.instance[this.rid].resize()
1323
- }
1324
- },
1325
- newEChart(){
1326
- let cid = this.rid
1327
- if(cfe.instance[cid] === undefined){
1328
- cfe.instance[cid] = echarts.init(that[cid].$el.children[0])
1329
- //ontap开启后才触发click事件
1330
- if(cfe.option[cid].ontap === true){
1331
- cfe.instance[cid].on('click', resdata => {
1332
- let event = JSON.parse(JSON.stringify({
1333
- x:resdata.event.offsetX,y:resdata.event.offsetY
1334
- }))
1335
- that[cid].callMethod('emitMsg',{name:"getIndex", params:{type:"getIndex", event:event, currentIndex:resdata.dataIndex, value:resdata.data, seriesName: resdata.seriesName,id:cid}})
1336
- })
1337
- // 增加ECharts的highlight消息,实现按下移动返回索引功能。add by onefish 创建于 2021-12-11 09:50
1338
- cfe.instance[cid].on('highlight', resdata => {
1339
- that[cid].callMethod('emitMsg',{name:"getHighlight", params:{type:"highlight", res:resdata, id:cid}})
1340
- })
1341
- }
1342
- this.updataEChart(cid,cfe.option[cid])
1343
- }else{
1344
- this.updataEChart(cid,cfe.option[cid])
1345
- }
1346
- },
1347
- updataEChart(cid,option){
1348
- //替换option内format属性为formatter的预定义方法
1349
- option = rdformatterAssign(option,cfe.formatter)
1350
- if(option.tooltip){
1351
- option.tooltip.show = option.tooltipShow?true:false;
1352
- option.tooltip.position = this.tooltipPosition()
1353
- //tooltipFormat方法,替换组件的tooltipFormat为config-echarts.js内对应的方法
1354
- if (typeof option.tooltipFormat === 'string' && cfe.formatter[option.tooltipFormat]) {
1355
- option.tooltip.formatter = option.tooltip.formatter ? option.tooltip.formatter : cfe.formatter[option.tooltipFormat]
1356
- }
1357
- }
1358
- // 颜色渐变添加的方法
1359
- if (option.series) {
1360
- for (let i in option.series) {
1361
- let linearGradient = option.series[i].linearGradient
1362
- if (linearGradient) {
1363
- option.series[i].color = new echarts.graphic.LinearGradient(linearGradient[0],linearGradient[1],linearGradient[2],linearGradient[3],linearGradient[4])
1364
- }
1365
- }
1366
- }
1367
- cfe.instance[cid].setOption(option, option.notMerge)
1368
- cfe.instance[cid].on('finished', function(){
1369
- that[cid].callMethod('emitMsg',{name:"complete",params:{type:"complete",complete:true,id:cid}})
1370
- if(cfe.instance[cid]){
1371
- cfe.instance[cid].off('finished')
1372
- }
1373
- });
1374
-
1375
- //修复init初始化实例获取宽高不正确问题
1376
- if(
1377
- typeof that[cid].$el.children[0].clientWidth != 'undefined' &&
1378
- (
1379
- Math.abs( that[cid].$el.children[0].clientWidth - cfe.instance[cid].getWidth() )>3 ||
1380
- Math.abs( that[cid].$el.children[0].clientHeight - cfe.instance[cid].getHeight() )>3
1381
- )
1382
- ){this.ecresize();}
1383
- },
1384
- tooltipPosition(){
1385
- return (point, params, dom, rect, size) => {
1386
- let x = point[0]
1387
- let y = point[1]
1388
- let viewWidth = size.viewSize[0]
1389
- let viewHeight = size.viewSize[1]
1390
- let boxWidth = size.contentSize[0]
1391
- let boxHeight = size.contentSize[1]
1392
- let posX = x + 30
1393
- let posY = y + 30
1394
- if (posX + boxWidth > viewWidth) {
1395
- posX = x - boxWidth - 30
1396
- }
1397
- if (posY + boxHeight > viewHeight) {
1398
- posY = y - boxHeight - 30
1399
- }
1400
- return [posX, posY]
1401
- }
1402
- },
1403
- //==============以下是uCharts的方法====================
1404
- ucinit(newVal, oldVal, owner, instance){
1405
- if(JSON.stringify(newVal) == JSON.stringify(oldVal)){
1406
- return;
1407
- }
1408
- if(!newVal.canvasId){
1409
- return;
1410
- }
1411
- let cid = JSON.parse(JSON.stringify(newVal.canvasId))
1412
- this.rid = cid
1413
- that[cid] = this.$ownerInstance || instance
1414
- cfu.option[cid] = JSON.parse(JSON.stringify(newVal))
1415
- cfu.option[cid] = rdformatterAssign(cfu.option[cid],cfu.formatter)
1416
- let canvasdom = document.getElementById(cid)
1417
- if(canvasdom && canvasdom.children[0]){
1418
- cfu.option[cid].context = canvasdom.children[0].getContext("2d")
1419
- if(cfu.instance[cid] && cfu.option[cid] && cfu.option[cid].update === true){
1420
- this.updataUChart()
1421
- }else{
1422
- setTimeout(()=>{
1423
- cfu.option[cid].context.restore();
1424
- cfu.option[cid].context.save();
1425
- this.newUChart()
1426
- },100)
1427
- }
1428
- }
1429
- },
1430
- newUChart() {
1431
- let cid = this.rid
1432
- cfu.instance[cid] = new uChartsRD(cfu.option[cid])
1433
- cfu.instance[cid].addEventListener('renderComplete', () => {
1434
- that[cid].callMethod('emitMsg',{name:"complete",params:{type:"complete",complete:true,id:cid, opts: cfu.instance[cid].opts}})
1435
- cfu.instance[cid].delEventListener('renderComplete')
1436
- });
1437
- cfu.instance[cid].addEventListener('scrollLeft', () => {
1438
- that[cid].callMethod('emitMsg',{name:"scrollLeft",params:{type:"scrollLeft",scrollLeft:true,id:cid, opts: cfu.instance[cid].opts}})
1439
- });
1440
- cfu.instance[cid].addEventListener('scrollRight', () => {
1441
- that[cid].callMethod('emitMsg',{name:"scrollRight",params:{type:"scrollRight",scrollRight:true,id:cid, opts: cfu.instance[cid].opts}})
1442
- });
1443
- },
1444
- updataUChart() {
1445
- let cid = this.rid
1446
- cfu.instance[cid].updateData(cfu.option[cid])
1447
- },
1448
- tooltipDefault(item, category, index, opts) {
1449
- if (category) {
1450
- let data = item.data
1451
- if(typeof item.data === "object"){
1452
- data = item.data.value
1453
- }
1454
- return category + ' ' + item.name + ':' + data;
1455
- } else {
1456
- if (item.properties && item.properties.name) {
1457
- return item.properties.name ;
1458
- } else {
1459
- return item.name + ':' + item.data;
1460
- }
1461
- }
1462
- },
1463
- showTooltip(e,cid) {
1464
- let tc = cfu.option[cid].tooltipCustom
1465
- if (tc && tc !== undefined && tc !== null) {
1466
- let offset = undefined;
1467
- if (tc.x >= 0 && tc.y >= 0) {
1468
- offset = { x: tc.x, y: tc.y + 10 };
1469
- }
1470
- cfu.instance[cid].showToolTip(e, {
1471
- index: tc.index,
1472
- offset: offset,
1473
- textList: tc.textList,
1474
- formatter: (item, category, index, opts) => {
1475
- if (typeof cfu.option[cid].tooltipFormat === 'string' && cfu.formatter[cfu.option[cid].tooltipFormat]) {
1476
- return cfu.formatter[cfu.option[cid].tooltipFormat](item, category, index, opts);
1477
- } else {
1478
- return this.tooltipDefault(item, category, index, opts);
1479
- }
1480
- }
1481
- });
1482
- } else {
1483
- cfu.instance[cid].showToolTip(e, {
1484
- formatter: (item, category, index, opts) => {
1485
- if (typeof cfu.option[cid].tooltipFormat === 'string' && cfu.formatter[cfu.option[cid].tooltipFormat]) {
1486
- return cfu.formatter[cfu.option[cid].tooltipFormat](item, category, index, opts);
1487
- } else {
1488
- return this.tooltipDefault(item, category, index, opts);
1489
- }
1490
- }
1491
- });
1492
- }
1493
- },
1494
- tap(e) {
1495
- let cid = this.rid
1496
- let ontap = cfu.option[cid].ontap
1497
- let tooltipShow = cfu.option[cid].tooltipShow
1498
- let tapLegend = cfu.option[cid].tapLegend
1499
- if(ontap == false) return;
1500
- let currentIndex=null
1501
- let legendIndex=null
1502
- let rchartdom = document.getElementById('UC'+cid).getBoundingClientRect()
1503
- let tmpe = {}
1504
- if(e.detail.x){//tap或者click的事件
1505
- tmpe = { x: e.detail.x - rchartdom.left, y:e.detail.y - rchartdom.top + rootdom.top}
1506
- }else{//mouse的事件
1507
- tmpe = { x: e.clientX - rchartdom.left, y:e.clientY - rchartdom.top + rootdom.top}
1508
- }
1509
- e.changedTouches = [];
1510
- e.changedTouches.unshift(tmpe)
1511
- currentIndex=cfu.instance[cid].getCurrentDataIndex(e)
1512
- legendIndex=cfu.instance[cid].getLegendDataIndex(e)
1513
- if(tapLegend === true){
1514
- cfu.instance[cid].touchLegend(e);
1515
- }
1516
- if(tooltipShow==true){
1517
- this.showTooltip(e,cid)
1518
- }
1519
- that[cid].callMethod('emitMsg',{name:"getIndex",params:{type:"getIndex",event:tmpe,currentIndex:currentIndex,legendIndex:legendIndex,id:cid, opts: cfu.instance[cid].opts}})
1520
- },
1521
- touchStart(e) {
1522
- let cid = this.rid
1523
- let ontouch = cfu.option[cid].ontouch
1524
- if(ontouch == false) return;
1525
- if(cfu.option[cid].enableScroll === true && e.touches.length == 1){
1526
- cfu.instance[cid].scrollStart(e);
1527
- }
1528
- that[cid].callMethod('emitMsg',{name:"getTouchStart",params:{type:"touchStart",event:e.changedTouches[0],id:cid, opts: cfu.instance[cid].opts}})
1529
- },
1530
- touchMove(e) {
1531
- let cid = this.rid
1532
- let ontouch = cfu.option[cid].ontouch
1533
- if(ontouch == false) return;
1534
- if(cfu.option[cid].enableScroll === true && e.changedTouches.length == 1){
1535
- cfu.instance[cid].scroll(e);
1536
- }
1537
- if(cfu.option[cid].ontap === true && cfu.option[cid].enableScroll === false && cfu.option[cid].onmovetip === true){
1538
- let rchartdom = document.getElementById('UC'+cid).getBoundingClientRect()
1539
- let tmpe = { x: e.changedTouches[0].clientX - rchartdom.left, y:e.changedTouches[0].clientY - rchartdom.top + rootdom.top}
1540
- e.changedTouches.unshift(tmpe)
1541
- if(cfu.option[cid].tooltipShow === true){
1542
- this.showTooltip(e,cid)
1543
- }
1544
- }
1545
- if(ontouch === true && cfu.option[cid].enableScroll === true && cfu.option[cid].onzoom === true && e.changedTouches.length == 2){
1546
- cfu.instance[cid].dobuleZoom(e);
1547
- }
1548
- that[cid].callMethod('emitMsg',{name:"getTouchMove",params:{type:"touchMove",event:e.changedTouches[0],id:cid, opts: cfu.instance[cid].opts}})
1549
- },
1550
- touchEnd(e) {
1551
- let cid = this.rid
1552
- let ontouch = cfu.option[cid].ontouch
1553
- if(ontouch == false) return;
1554
- if(cfu.option[cid].enableScroll === true && e.touches.length == 0){
1555
- cfu.instance[cid].scrollEnd(e);
1556
- }
1557
- that[cid].callMethod('emitMsg',{name:"getTouchEnd",params:{type:"touchEnd",event:e.changedTouches[0],id:cid, opts: cfu.instance[cid].opts}})
1558
- },
1559
- mouseDown(e) {
1560
- let cid = this.rid
1561
- let onmouse = cfu.option[cid].onmouse
1562
- if(onmouse == false) return;
1563
- let rchartdom = document.getElementById('UC'+cid).getBoundingClientRect()
1564
- let tmpe = {}
1565
- tmpe = { x: e.clientX - rchartdom.left, y:e.clientY - rchartdom.top + rootdom.top}
1566
- e.changedTouches = [];
1567
- e.changedTouches.unshift(tmpe)
1568
- cfu.instance[cid].scrollStart(e)
1569
- cfu.option[cid].mousedown=true;
1570
- that[cid].callMethod('emitMsg',{name:"getTouchStart",params:{type:"mouseDown",event:tmpe,id:cid, opts: cfu.instance[cid].opts}})
1571
- },
1572
- mouseMove(e) {
1573
- let cid = this.rid
1574
- let onmouse = cfu.option[cid].onmouse
1575
- let tooltipShow = cfu.option[cid].tooltipShow
1576
- if(onmouse == false) return;
1577
- let rchartdom = document.getElementById('UC'+cid).getBoundingClientRect()
1578
- let tmpe = {}
1579
- tmpe = { x: e.clientX - rchartdom.left, y:e.clientY - rchartdom.top + rootdom.top}
1580
- e.changedTouches = [];
1581
- e.changedTouches.unshift(tmpe)
1582
- if(cfu.option[cid].mousedown){
1583
- cfu.instance[cid].scroll(e)
1584
- that[cid].callMethod('emitMsg',{name:"getTouchMove",params:{type:"mouseMove",event:tmpe,id:cid, opts: cfu.instance[cid].opts}})
1585
- }else if(cfu.instance[cid]){
1586
- if(tooltipShow==true){
1587
- this.showTooltip(e,cid)
1588
- }
1589
- }
1590
- },
1591
- mouseUp(e) {
1592
- let cid = this.rid
1593
- let onmouse = cfu.option[cid].onmouse
1594
- if(onmouse == false) return;
1595
- let rchartdom = document.getElementById('UC'+cid).getBoundingClientRect()
1596
- let tmpe = {}
1597
- tmpe = { x: e.clientX - rchartdom.left, y:e.clientY - rchartdom.top + rootdom.top}
1598
- e.changedTouches = [];
1599
- e.changedTouches.unshift(tmpe)
1600
- cfu.instance[cid].scrollEnd(e)
1601
- cfu.option[cid].mousedown=false;
1602
- that[cid].callMethod('emitMsg',{name:"getTouchEnd",params:{type:"mouseUp",event:tmpe,id:cid, opts: cfu.instance[cid].opts}})
1603
- },
1604
- }
1605
- }
1606
- </script>
1607
- <!-- #endif -->
1608
-
1609
- <style scoped>
1610
- .chartsview {
1611
- width: 100%;
1612
- height: 100%;
1613
- display: flex;
1614
- flex: 1;
1615
- justify-content: center;
1616
- align-items: center;
1617
- }
1618
- </style>