空白格 3 жил өмнө
parent
commit
e9c72d85ec
100 өөрчлөгдсөн 1113 нэмэгдсэн , 12923 устгасан
  1. 1 1
      App.vue
  2. 3 0
      common/apiurl.js
  3. 3 0
      common/config.js
  4. 15 0
      common/http.api.js
  5. 58 0
      common/http.interceptor.js
  6. 0 87
      components/t-table/t-table.vue
  7. 0 69
      components/t-table/t-td.vue
  8. 0 71
      components/t-table/t-th.vue
  9. 0 81
      components/t-table/t-tr.vue
  10. 32 9
      main.js
  11. 6 4
      manifest.json
  12. 39 20
      pages.json
  13. 23 0
      pages/dataOverview/operationalAnalysis/operationalAnalysis.vue
  14. 23 0
      pages/dataOverview/statisticalReport/statisticalReport.vue
  15. 23 0
      pages/dataOverview/todayOverview/todayOverview.vue
  16. 94 0
      pages/index/index.scss
  17. 162 95
      pages/index/index.vue
  18. 18 20
      pages/login/login.scss
  19. 52 52
      pages/login/login.vue
  20. 0 51
      pages/operationOverview/operationOverview.vue
  21. 0 245
      pages/operationOverview/operationOverviewModel/operationOverviewModel.vue
  22. 0 133
      pages/operationOverview/operationalAnalysis/operationalAnalysis.vue
  23. 0 193
      pages/operationOverview/statisticalReport/statisticalReport.vue
  24. 23 0
      pages/orderManagement/arrearageRecord/arrearageRecord.vue
  25. 23 0
      pages/orderManagement/collectionRecord/collectionRecord.vue
  26. 23 0
      pages/orderManagement/feeEvasionRecord/feeEvasionRecord.vue
  27. 23 0
      pages/orderManagement/parkingRecord/parkingRecord.vue
  28. 23 0
      pages/orderManagement/recoveryRecord/recoveryRecord.vue
  29. 23 0
      pages/orderManagement/voidRecord/voidRecord.vue
  30. 0 43
      pages/orderRecords/orderRecords.vue
  31. 0 100
      pages/patrolManagement/abnormalRecords/abnormalRecords.vue
  32. 23 0
      pages/patrolManagement/deviceAbnormalRecords/deviceAbnormalRecords.vue
  33. 0 61
      pages/patrolManagement/patrolManagement.vue
  34. 23 0
      pages/patrolManagement/patrolRecord/patrolRecord.vue
  35. 0 142
      pages/patrolManagement/patrolRecords/patrolRecords.vue
  36. 17 0
      static/icons/arrearage-record-icon.svg
  37. 18 0
      static/icons/collection-record-icon.svg
  38. 17 0
      static/icons/device-error-records-icon.svg
  39. 12 0
      static/icons/fee-evasion-record-icon.svg
  40. 16 0
      static/icons/logout-icon.svg
  41. 24 0
      static/icons/operational-analysis-icon.svg
  42. 17 0
      static/icons/parking-record-icon.svg
  43. 12 0
      static/icons/patrol-manage-icon.svg
  44. 12 0
      static/icons/recovery-record-icon.svg
  45. 23 0
      static/icons/statistical-report-icon.svg
  46. 27 0
      static/icons/today-overview-icon.svg
  47. 12 0
      static/icons/void-record-icon.svg
  48. BIN
      static/images/1.png
  49. BIN
      static/images/2.png
  50. BIN
      static/images/3.png
  51. BIN
      static/images/index-header-bg.png
  52. BIN
      static/images/mana-icon.png
  53. BIN
      static/images/order-icon.png
  54. BIN
      static/images/parking-info-bg.png
  55. BIN
      static/images/running-icon.png
  56. BIN
      static/logo.png
  57. 28 0
      store/$u.mixin.js
  58. 62 0
      store/index.js
  59. 1 78
      uni.scss
  60. 0 177
      uni_modules/qiun-data-charts/changelog.md
  61. 0 1541
      uni_modules/qiun-data-charts/components/qiun-data-charts/qiun-data-charts.vue
  62. 0 42
      uni_modules/qiun-data-charts/components/qiun-error/qiun-error.vue
  63. 0 162
      uni_modules/qiun-data-charts/components/qiun-loading/loading1.vue
  64. 0 170
      uni_modules/qiun-data-charts/components/qiun-loading/loading2.vue
  65. 0 173
      uni_modules/qiun-data-charts/components/qiun-loading/loading3.vue
  66. 0 222
      uni_modules/qiun-data-charts/components/qiun-loading/loading4.vue
  67. 0 229
      uni_modules/qiun-data-charts/components/qiun-loading/loading5.vue
  68. 0 36
      uni_modules/qiun-data-charts/components/qiun-loading/qiun-loading.vue
  69. 0 422
      uni_modules/qiun-data-charts/js_sdk/u-charts/config-echarts.js
  70. 0 584
      uni_modules/qiun-data-charts/js_sdk/u-charts/config-ucharts.js
  71. 0 12
      uni_modules/qiun-data-charts/js_sdk/u-charts/readme.md
  72. 0 6809
      uni_modules/qiun-data-charts/js_sdk/u-charts/u-charts.js
  73. 0 201
      uni_modules/qiun-data-charts/license.md
  74. 0 84
      uni_modules/qiun-data-charts/package.json
  75. 0 451
      uni_modules/qiun-data-charts/readme.md
  76. 0 22
      uni_modules/qiun-data-charts/static/app-plus/echarts.min.js
  77. 0 22
      uni_modules/qiun-data-charts/static/h5/echarts.min.js
  78. 0 0
      uni_modules/uview-ui/LICENSE
  79. 5 0
      uni_modules/uview-ui/README.md
  80. 53 0
      uni_modules/uview-ui/changelog.md
  81. 0 0
      uni_modules/uview-ui/components/u--form/u--form.vue
  82. 8 1
      uni_modules/uview-ui/components/u--image/u--image.vue
  83. 0 0
      uni_modules/uview-ui/components/u--input/u--input.vue
  84. 0 0
      uni_modules/uview-ui/components/u--text/u--text.vue
  85. 0 0
      uni_modules/uview-ui/components/u--textarea/u--textarea.vue
  86. 0 0
      uni_modules/uview-ui/components/u-action-sheet/props.js
  87. 0 0
      uni_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue
  88. 0 0
      uni_modules/uview-ui/components/u-album/props.js
  89. 2 2
      uni_modules/uview-ui/components/u-album/u-album.vue
  90. 0 0
      uni_modules/uview-ui/components/u-alert/props.js
  91. 0 0
      uni_modules/uview-ui/components/u-alert/u-alert.vue
  92. 0 0
      uni_modules/uview-ui/components/u-avatar-group/props.js
  93. 0 0
      uni_modules/uview-ui/components/u-avatar-group/u-avatar-group.vue
  94. 0 0
      uni_modules/uview-ui/components/u-avatar/props.js
  95. 11 6
      uni_modules/uview-ui/components/u-avatar/u-avatar.vue
  96. 0 0
      uni_modules/uview-ui/components/u-back-top/props.js
  97. 0 0
      uni_modules/uview-ui/components/u-back-top/u-back-top.vue
  98. 0 0
      uni_modules/uview-ui/components/u-badge/props.js
  99. 0 0
      uni_modules/uview-ui/components/u-badge/u-badge.vue
  100. 0 0
      uni_modules/uview-ui/components/u-button/nvue.scss

+ 1 - 1
App.vue

@@ -15,5 +15,5 @@
 <style lang="scss">
 	/*每个页面公共css */
 	/*每个页面公共css */
-	@import "@/uview-ui/index.scss";
+	@import "@/uni_modules/uview-ui/index.scss";
 </style>

+ 3 - 0
common/apiurl.js

@@ -0,0 +1,3 @@
+export const apiurl = {
+	loginUrl: '/login/login'
+}

+ 3 - 0
common/config.js

@@ -0,0 +1,3 @@
+export const config = {
+	baseUrl: 'http://localhost:8080'
+}

+ 15 - 0
common/http.api.js

@@ -0,0 +1,15 @@
+import {
+	apiurl
+} from "./apiurl.js"
+
+// vm指向this
+const install = (Vue, vm) => {
+	let loginApi = (params = {}) => vm.$u.http.post(apiurl.loginUrl, params);
+	// 将各个定义的接口名称,统一放进对象挂载到vm.$u.api(因为vm就是this,也即this.$u.api)下
+	vm.$u.api = {
+		loginApi
+	};
+}
+export default {
+	install
+}

+ 58 - 0
common/http.interceptor.js

@@ -0,0 +1,58 @@
+import { config } from '@/common/config.js';
+import store from '@/store/index.js'
+
+// vm指向this
+const install = (Vue, vm) => {
+  uni.$u.http.setConfig({
+    baseURL: config.baseUrl,
+		dataType: 'json',// 设置为json,返回后会对数据进行一次JSON.parse()
+		showLoading: true, // 是否显示请求中的loading
+		loadingText: '请求中...', // 请求loading中的文字提示
+		loadingTime: 500, // 在此时间内,请求还没回来的话,就显示加载中动画,单位ms
+		originalData: false, // 是否在拦截器中返回服务端的原始数据
+		loadingMask: true, // 展示loading的时候,是否给一个透明的蒙层,防止触摸穿透
+		// 配置请求头信息
+		header: {
+			'content-type': 'application/json;charset=UTF-8'
+		}
+  });
+  // 请求拦截,配置Token等参数
+  uni.$u.http.interceptor.request = (config) => {
+    if (vm.vuex_token) {
+      config.header.Authorization = `Bearer ${vm.vuex_token}`;
+    }
+    // url加时间戳
+    config.url = config.url + '?t=' + Date.now()
+    let noTokenList = ['/wechat/h5/user', '/client/auth/verifyCode'];
+    if (noTokenList.includes(config.url)) config.header.noToken = true;
+    return config;
+  }
+  // 响应拦截,判断状态码是否通过
+  uni.$u.http.interceptor.response = (res) => {
+    if (res.code == 200) {
+      return res;
+    } else if (res.msg == "令牌不能为空" || res.code == 401) {
+      const backUrl = location.href
+      const loginUrl = 'phoneLogin'
+      if (backUrl.indexOf(loginUrl) > 0) {} else {
+        localStorage.setItem('backUrl', location.href)
+        store.state.vuex_hasLogin = false;
+        alert('还未登录,即将跳转登录');
+        uni.navigateTo({
+          url: "/pages/phoneLogin/phoneLogin"
+        });
+        return;
+      }
+    } else {
+			uni.showToast({
+				title: res.msg,
+				icon: 'none',
+				duration: 2000
+			})
+		}
+  }
+}
+
+export default {
+  install
+}

+ 0 - 87
components/t-table/t-table.vue

@@ -1,87 +0,0 @@
-<template>
-	<view class="t-table" :style="{ 'border-width': border + 'px', 'border-color': borderColor }">
-		<slot />
-	</view>
-</template>
-
-<script>
-	export default {
-		props: {
-			border: {
-				type: String,
-				default: '1'
-			},
-			borderColor: {
-				type: String,
-				default: '#d0dee5'
-			},
-			isCheck: {
-				type: Boolean,
-				default: false
-			}
-		},
-		provide() {
-			return {
-				table: this
-			};
-		},
-		data() {
-			return {};
-		},
-		created() {
-			this.childrens = [];
-			this.index = 0;
-		},
-		methods: {
-			fire(e, index, len) {
-				let childrens = this.childrens;
-				console.log(childrens);
-				// 全选
-				if (index === 0) {
-					childrens.map((vm, index) => {
-						vm.checkboxData.checked = e;
-						return vm;
-					});
-				} else {
-					let isAll = childrens.find((n, ids) => ids !== 0 && !n.checkboxData.checked);
-					childrens[0].checkboxData.checked = isAll ? false : true;
-				}
-
-				let fireArr = [];
-				for (let i = 0; i < childrens.length; i++) {
-					if (childrens[i].checkboxData.checked && i !== 0) {
-						fireArr.push(childrens[i].checkboxData.value - 1);
-					}
-				}
-				this.$emit('change', {
-					detail: fireArr
-				});
-			}
-		}
-	};
-</script>
-
-<style scoped>
-	.t-table {
-		width: 100%;
-		border: 1px #d0dee5 solid;
-		border-left: none;
-		border-top: none;
-		box-sizing: border-box;
-		overflow-x: scroll;
-	}
-
-	.t-table>>>t-tr {
-		display: flex;
-	}
-
-	.t-table>>>t-tr:nth-child(2n) {
-		background: #f5f5f5;
-	}
-
-	/* #ifdef H5 */
-	.t-table>>>.t-tr:nth-child(2n) {
-		background: #f5f5f5;
-	}
-	/* #endif */
-</style>

+ 0 - 69
components/t-table/t-td.vue

@@ -1,69 +0,0 @@
-<template>
-	<view class="t-td" :style="{ 'border-width': thBorder + 'px','border-color':borderColor ,'font-size':fontSize+'px' ,'color':color,'justify-content':tdAlignCpd}">
-		<slot></slot>
-	</view>
-</template>
-
-<script>
-	export default {
-		props: {
-			align: String
-		},
-		data() {
-			return {
-				thBorder: '1',
-				borderColor: '#d0dee5',
-				fontSize: '14',
-				color: '#555c60',
-				tdAlign: 'center'
-			};
-		},
-		inject: ['table', 'tr'],
-
-		created() {
-			this.thBorder = this.table.border;
-			this.borderColor = this.table.borderColor;
-			this.fontSize = this.tr.fontSize;
-			this.color = this.tr.color;
-			if (this.align) {
-				this.tdAlign = this.align;
-			} else {
-				this.tdAlign = this.tr.align
-			}
-		},
-		computed: {
-			tdAlignCpd() {
-				let nameAlign = '';
-				switch (this.tdAlign) {
-					case 'left':
-						nameAlign = 'flex-start'
-						break;
-					case 'center':
-						nameAlign = 'center'
-						break;
-					case 'right':
-						nameAlign = 'flex-end'
-						break;
-					default:
-						nameAlign = 'center'
-						break;
-				}
-				return nameAlign
-			}
-		}
-	};
-</script>
-
-<style>
-	.t-td {
-		display: flex;
-		align-items: center;
-		border-top: 1px #d0dee5 solid;
-		border-left: 1px #d0dee5 solid;
-		text-align: center;
-		color: #555c60;
-		font-size: 28upx;
-		padding: 14rpx 0;
-		font-size: 26rpx;
-	}
-</style>

+ 0 - 71
components/t-table/t-th.vue

@@ -1,71 +0,0 @@
-<template>
-	<view class="t-th" :style="{ 'border-width': thBorder + 'px' ,'border-color':borderColor,'font-size':fontSize+'px' ,'color':color,'justify-content':thAlignCpd}">
-		<slot></slot>
-	</view>
-</template>
-
-<script>
-	export default {
-		props: {
-			align: String,
-		},
-		data() {
-			return {
-				thBorder: '1',
-				borderColor: '#d0dee5',
-				fontSize: '15',
-				color: '#3b4246',
-				thAlign: 'center'
-			};
-		},
-		inject: ['table', 'tr'],
-
-		created() {
-			this.thBorder = this.table.border;
-			this.borderColor = this.table.borderColor;
-			this.fontSize = this.tr.fontSize;
-			this.color = this.tr.color;
-			if (this.align) {
-				this.thAlign = this.align;
-			} else {
-				this.thAlign = this.tr.align
-			}
-		},
-
-		computed: {
-			thAlignCpd() {
-				let nameAlign = '';
-				switch (this.thAlign) {
-					case 'left':
-						nameAlign = 'flex-start'
-						break;
-					case 'center':
-						nameAlign = 'center'
-						break;
-					case 'right':
-						nameAlign = 'flex-end'
-						break;
-					default:
-						nameAlign = 'center'
-						break;
-				}
-				return nameAlign
-			}
-		}
-	};
-</script>
-
-<style>
-	.t-th {
-		display: flex;
-		align-items: center;
-		font-size: 30upx;
-		font-weight: bold;
-		text-align: center;
-		color: #101010;
-		border-left: 1px #d0dee5 solid;
-		border-top: 1px #d0dee5 solid;
-		padding: 14rpx 0;
-		font-size: 26rpx;
-	}
-</style>

+ 0 - 81
components/t-table/t-tr.vue

@@ -1,81 +0,0 @@
-<template>
-	<view class="t-tr">
-		<view v-if="isCheck" class="t-check-box" :style="{ 'border-width': thBorder + 'px' ,'border-color':borderColor}">
-			<checkbox-group @change="checkboxChange">
-				<checkbox :value="checkboxData.value + ''" :checked="checkboxData.checked" />
-			</checkbox-group>
-		</view>
-		<slot></slot>
-	</view>
-</template>
-
-<script>
-	export default {
-		props: {
-			fontSize: String,
-			color: String,
-			align: String
-		},
-		inject: ['table'],
-		provide() {
-			return {
-				tr: this
-			};
-		},
-		data() {
-			return {
-				isCheck: false,
-				checkboxData: {
-					value: 0,
-					checked: false
-				},
-				checked: false,
-				thBorder: '1',
-				borderColor: '#d0dee5'
-			};
-		},
-		created() {
-			this.thBorder = this.table.border;
-			this.borderColor = this.table.borderColor;
-			this.table.childrens.push(this);
-			this.checkboxData.value = this.table.index++;
-			this.isCheck = this.table.isCheck;
-
-		},
-		methods: {
-			checkboxChange(e) {
-				this.checkboxData.checked = !this.checkboxData.checked;
-				this.table.childrens[this.checkboxData.value] = this;
-				this.table.fire(e.detail.value[0] ? true : false, this.checkboxData.value, this.table.index);
-			}
-		}
-	};
-</script>
-
-<style>
-	.t-tr {
-		width: 100%;
-		display: flex;
-	}
-
-	.t-tr t-th,
-	.t-tr t-td {
-		display: flex;
-		flex: 1;
-	}
-
-	.t-tr .t-check-box {
-		flex-shrink: 0;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		width: 80upx;
-		color: #3b4246;
-		border-left: 1px #d0dee5 solid;
-		border-top: 1px #d0dee5 solid;
-	}
-
-	.t-tr .t-check-box checkbox {
-		transform: scale(0.8);
-	}
-</style>

+ 32 - 9
main.js

@@ -1,22 +1,45 @@
 import App from './App'
-import uView from 'uview-ui'
-Vue.use(uView)
+
 // #ifndef VUE3
 import Vue from 'vue'
 Vue.config.productionTip = false
+
+import uView from '@/uni_modules/uview-ui'
+Vue.use(uView)
+
+import config from 'common/config'
+Vue.prototype.config = config;
+
+import store from '@/store';
+
+// 引入uView提供的对vuex的简写法文件
+let vuexStore = require('@/store/$u.mixin.js');
+Vue.mixin(vuexStore);
+
 App.mpType = 'app'
 const app = new Vue({
-    ...App
+	store,
+	...App
 })
+
+// 引入请求封装
+require('./utils/request/index')(app)
+
+// http接口API抽离,免于写url或者一些固定的参数
+import httpApi from '@/common/http.api.js';
+Vue.use(httpApi, app);
+
 app.$mount()
 // #endif
 
 // #ifdef VUE3
-import { createSSRApp } from 'vue'
+import {
+	createSSRApp
+} from 'vue'
 export function createApp() {
-  const app = createSSRApp(App)
-  return {
-    app
-  }
+	const app = createSSRApp(App)
+	return {
+		app
+	}
 }
-// #endif
+// #endif

+ 6 - 4
manifest.json

@@ -1,7 +1,7 @@
 {
-    "name" : "停车运营端",
-    "appid" : "__UNI__C8DDE6B",
-    "description" : "智慧停车运营端",
+    "name" : "智慧停车运营端",
+    "appid" : "__UNI__EC952D7",
+    "description" : "",
     "versionName" : "1.0.0",
     "versionCode" : "100",
     "transformPx" : false,
@@ -43,7 +43,9 @@
             /* ios打包配置 */
             "ios" : {},
             /* SDK配置 */
-            "sdkConfigs" : {}
+            "sdkConfigs" : {
+                "ad" : {}
+            }
         }
     },
     /* 快应用特有相关 */

+ 39 - 20
pages.json

@@ -1,72 +1,91 @@
 {
-	"easycom": {
-		"^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
-	},
-	"pages": [ // pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
 		{
 			"path": "pages/index/index",
 			"style": {
-				"navigationBarTitleText": "停车运营端",
+				"navigationBarTitleText": "首页",
 				"navigationStyle": "custom"
 			}
 		}, {
 			"path": "pages/login/login",
 			"style": {
 				"navigationBarTitleText": "登录",
+				"enablePullDownRefresh": false,
+				"navigationStyle": "custom"
+			}
+
+		}, {
+			"path": "pages/dataOverview/todayOverview/todayOverview",
+			"style": {
+				"navigationBarTitleText": "今日概况",
 				"enablePullDownRefresh": false
 			}
 
 		}, {
-			"path": "pages/orderRecords/orderRecords",
+			"path": "pages/dataOverview/operationalAnalysis/operationalAnalysis",
 			"style": {
-				"navigationBarTitleText": "订单记录",
+				"navigationBarTitleText": "运营分析",
 				"enablePullDownRefresh": false
 			}
 
 		}, {
-			"path": "pages/operationOverview/operationOverview",
+			"path": "pages/dataOverview/statisticalReport/statisticalReport",
 			"style": {
-				"navigationBarTitleText": "运营概况",
+				"navigationBarTitleText": "统计报表",
 				"enablePullDownRefresh": false
 			}
 
 		}, {
-			"path": "pages/patrolManagement/patrolManagement",
+			"path": "pages/orderManagement/parkingRecord/parkingRecord",
 			"style": {
-				"navigationBarTitleText": "巡检管理",
+				"navigationBarTitleText": "停车记录",
 				"enablePullDownRefresh": false
 			}
 
 		}, {
-			"path": "pages/operationOverview/operationOverviewModel/operationOverviewModel",
+			"path": "pages/orderManagement/arrearageRecord/arrearageRecord",
 			"style": {
-				"navigationBarTitleText": "运营概况",
+				"navigationBarTitleText": "欠费记录",
 				"enablePullDownRefresh": false
 			}
 
 		}, {
-			"path": "pages/operationOverview/statisticalReport/statisticalReport",
+			"path": "pages/orderManagement/collectionRecord/collectionRecord",
 			"style": {
-				"navigationBarTitleText": "统计报表",
+				"navigationBarTitleText": "收款记录",
 				"enablePullDownRefresh": false
 			}
 
 		}, {
-			"path": "pages/operationOverview/operationalAnalysis/operationalAnalysis",
+			"path": "pages/orderManagement/feeEvasionRecord/feeEvasionRecord",
 			"style": {
-				"navigationBarTitleText": "运营分析",
+				"navigationBarTitleText": "逃费记录",
+				"enablePullDownRefresh": false
+			}
+
+		}, {
+			"path": "pages/orderManagement/voidRecord/voidRecord",
+			"style": {
+				"navigationBarTitleText": "作废记录",
+				"enablePullDownRefresh": false
+			}
+
+		}, {
+			"path": "pages/orderManagement/recoveryRecord/recoveryRecord",
+			"style": {
+				"navigationBarTitleText": "追缴记录",
 				"enablePullDownRefresh": false
 			}
 
 		}, {
-			"path": "pages/patrolManagement/patrolRecords/patrolRecords",
+			"path": "pages/patrolManagement/patrolRecord/patrolRecord",
 			"style": {
 				"navigationBarTitleText": "巡检记录",
 				"enablePullDownRefresh": false
 			}
 
 		}, {
-			"path": "pages/patrolManagement/abnormalRecords/abnormalRecords",
+			"path": "pages/patrolManagement/deviceAbnormalRecords/deviceAbnormalRecords",
 			"style": {
 				"navigationBarTitleText": "设备异常记录",
 				"enablePullDownRefresh": false
@@ -76,7 +95,7 @@
 	],
 	"globalStyle": {
 		"navigationBarTextStyle": "black",
-		"navigationBarTitleText": "uni-app",
+		"navigationBarTitleText": "智慧停车运营端",
 		"navigationBarBackgroundColor": "#F8F8F8",
 		"backgroundColor": "#F8F8F8"
 	}

+ 23 - 0
pages/dataOverview/operationalAnalysis/operationalAnalysis.vue

@@ -0,0 +1,23 @@
+<!-- 运营分析 -->
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 23 - 0
pages/dataOverview/statisticalReport/statisticalReport.vue

@@ -0,0 +1,23 @@
+<!-- 统计报表 -->
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 23 - 0
pages/dataOverview/todayOverview/todayOverview.vue

@@ -0,0 +1,23 @@
+<!-- 今日概况 -->
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 94 - 0
pages/index/index.scss

@@ -0,0 +1,94 @@
+.index {
+	font-family: PingFang SC;
+	&-header {
+		height: 219px;
+		padding: 26px 15px;
+		background: linear-gradient(179deg, #2D82FB 0%, #1635E1 100%);
+		&-box {
+			height: 100%;
+			background-image: url(../../static/images/index-header-bg.png);
+			background-size: 178px 182px;
+			background-position: bottom right;
+			background-repeat: no-repeat;
+			&-1 {
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+				font-family: PingFangSC-Heavy, PingFang SC;
+				font-size: 20px;
+				color: #fff;
+				font-weight: bold;
+			}
+			&-2 {
+				margin-top: 24px;
+				line-height: 42px;
+				font-family: PingFangSC-Heavy, PingFang SC;
+				font-size: 30px;
+				color: #fff;
+				font-weight: bold;
+			}
+		}
+	}
+	
+	&-main {
+		padding: 24px 15px;
+		background-color: #EFEFEF;
+		border-radius: 15px;
+		margin-top: -20px;
+		&-menu {
+			&-title {
+				font-size: 18px;
+				font-family: PingFangSC-Regular, PingFang SC;
+			}
+			&-1 {
+				display: flex;
+				justify-content: space-between;
+				.menu-item {
+					width: 30%;
+					height: 96px;
+					text-align: center;
+					background-color: #fff;
+					border-radius: 8px;
+					&-icon {
+						width: 48px;
+						margin: 13px auto 5px;
+					}
+					&-name {
+						color: #787878;
+						font-size: 13px;
+						font-family: PingFangSC-Regular, PingFang SC;
+					}
+				}
+			}
+			
+			&-2 {
+				padding: 16px 15px 0;
+				background-color: #fff;
+				border-radius: 8px;
+				margin-top: 15px;
+				.menu {
+					display: flex;
+					flex-wrap: wrap;
+					padding: 15px 0;
+					&-item {
+						width: 23%;
+						margin-bottom: 24px;
+						text-align: center;
+						margin-right: 2%;
+						&-icon {
+							margin: 0 auto 9px;
+						}
+						&-name {
+							font-size: 12px;
+							color: #787878;
+							font-family: PingFangSC-Regular, PingFang SC;
+						}
+					}
+					&-item:nth-child(4n) {
+						margin-right: 0;
+					}
+				}
+			}
+		}
+	}
+}

+ 162 - 95
pages/index/index.vue

@@ -1,26 +1,67 @@
 <template>
-	<view class="content">
-		<view class="content-header">
-			<view>智慧停车运营系统</view>
-		</view>
-		<view class="content-main">
-			<view class="content-main-item" @click="jumpPage('pages/orderRecords/orderRecords')">
-				<view class="t1">
-					<u-icon name="./../../static/images/order-icon.png" color="#fff" size="65"></u-icon>
+	<view class="index">
+		<view class="index-header">
+			<view class="index-header-box">
+				<view class="index-header-box-1">
+					<view class="left">
+						<text>欢迎你!{{ userInfo.nickname }}</text>
+					</view>
+					<view class="right">
+						<u-icon size="21" name="../../static/icons/logout-icon.svg" @click="logout"></u-icon>
+					</view>
 				</view>
-				<view class="name">订单记录</view>
-			</view>
-			<view class="content-main-item" @click="jumpPage('pages/operationOverview/operationOverview')">
-				<view class="t2">
-					<u-icon name="./../../static/images/running-icon.png" color="#fff" size="65"></u-icon>
+				<view class="index-header-box-2">
+					<text>普定智慧停车<br />运营中心</text>
 				</view>
-				<view class="name">运营概况</view>
 			</view>
-			<view class="content-main-item" @click="jumpPage('pages/patrolManagement/patrolManagement')">
-				<view class="t3">
-					<u-icon name="./../../static/images/mana-icon.png" color="#fff" size="65"></u-icon>
+		</view>
+		<view class="index-main">
+			<view class="index-main-menu">
+				<!-- 数据概览 -->
+				<view class="index-main-menu-1">
+					<view class="menu-item" v-for="(item, index) in analysisMenuList" :key="index" @click="jumpPage(item.url)">
+						<view class="menu-item-icon">
+							<u-icon size="48" :name="item.icon"></u-icon>
+						</view>
+						<view class="menu-item-name">
+							<text>{{ item.name }}</text>
+						</view>
+					</view>
+				</view>
+				<!-- 订单管理 -->
+				<view class="index-main-menu-2">
+					<view class="index-main-menu-title">
+						<text>订单管理</text>
+					</view>
+					<view class="menu">
+						<view class="menu-item" v-for="(item, index) in orderMenuList" :key="index" @click="jumpPage(item.url)">
+							<view class="menu-item-icon" :style="{ width: item.width || '30px' }">
+								<u--image :src="item.icon" :width="item.width || '30px'"
+									:height="item.height || '30px'"></u--image>
+							</view>
+							<view class="menu-item-name">
+								<text>{{ item.name }}</text>
+							</view>
+						</view>
+					</view>
+				</view>
+				<!-- 巡检管理 -->
+				<view class="index-main-menu-2">
+					<view class="index-main-menu-title">
+						<text>巡检管理</text>
+					</view>
+					<view class="menu">
+						<view class="menu-item" v-for="(item, index) in patrolMenuList" :key="index" @click="jumpPage(item.url)">
+							<view class="menu-item-icon" :style="{ width: item.width || '30px' }">
+								<u--image :src="item.icon" :width="item.width || '30px'"
+									:height="item.height || '30px'"></u--image>
+							</view>
+							<view class="menu-item-name">
+								<text>{{ item.name }}</text>
+							</view>
+						</view>
+					</view>
 				</view>
-				<view class="name">巡检管理</view>
 			</view>
 		</view>
 	</view>
@@ -29,93 +70,119 @@
 <script>
 	export default {
 		data() {
-			return {}
-		},
-		onShow() {
-			uni.getStorage({
-				key: 'Token',
-				success: function(res) {
-					console.log(res.data);
-				},
-				error: function(err) {
-					console.log(err)
+			return {
+				userInfo: {
+					nickname: 'XXX'
 				},
-				complete: (e) => {
-					console.log(e)
-					if (e.data) {
-						
-					} else {
-						uni.$u.route({
-							url: 'pages/login/login'
-						})
+				analysisMenuList: [{
+						icon: require('@/static/icons/today-overview-icon.svg'),
+						name: '今日概况',
+						url: 'pages/dataOverview/todayOverview/todayOverview'
+					},
+					{
+						icon: require('@/static/icons/operational-analysis-icon.svg'),
+						name: '运营分析',
+						url: 'pages/dataOverview/operationalAnalysis/operationalAnalysis'
+					},
+					{
+						icon: require('@/static/icons/statistical-report-icon.svg'),
+						name: '统计报表',
+						url: 'pages/dataOverview/statisticalReport/statisticalReport'
 					}
-				}
-			});
+				],
+				// 订单管理
+				orderMenuList: [{
+						icon: require('@/static/icons/parking-record-icon.svg'),
+						name: '停车记录',
+						url: 'pages/orderManagement/parkingRecord/parkingRecord',
+						width: '28px'
+					},
+					{
+						icon: require('@/static/icons/arrearage-record-icon.svg'),
+						name: '欠费记录',
+						url: 'pages/orderManagement/arrearageRecord/arrearageRecord'
+					},
+					{
+						icon: require('@/static/icons/collection-record-icon.svg'),
+						name: '收款记录',
+						url: 'pages/orderManagement/collectionRecord/collectionRecord'
+					},
+					{
+						icon: require('@/static/icons/fee-evasion-record-icon.svg'),
+						name: '逃费记录',
+						url: 'pages/orderManagement/feeEvasionRecord/feeEvasionRecord',
+						width: '33px',
+						height: '26px'
+					},
+					{
+						icon: require('@/static/icons/void-record-icon.svg'),
+						name: '作废记录',
+						url: 'pages/orderManagement/voidRecord/voidRecord',
+						height: '31px'
+					},
+					{
+						icon: require('@/static/icons/recovery-record-icon.svg'),
+						name: '追缴记录',
+						url: 'pages/orderManagement/recoveryRecord/recoveryRecord',
+						height: '32px'
+					}
+				],
+				// 巡检管理
+				patrolMenuList: [{
+						icon: require('@/static/icons/patrol-manage-icon.svg'),
+						name: '巡检记录',
+						url: 'pages/patrolManagement/patrolRecord/patrolRecord',
+						width: '29px',
+						height: '31px'
+					},
+					{
+						icon: require('@/static/icons/device-error-records-icon.svg'),
+						name: '设备异常记录',
+						url: 'pages/patrolManagement/deviceAbnormalRecords/deviceAbnormalRecords',
+						width: '33px',
+						height: '29px'
+					}
+				]
+			}
+		},
+		onLoad() {
+
 		},
 		methods: {
-			jumpPage(url) {
+			/**
+			 * 登出操作
+			 */
+			logout() {
+				uni.showModal({
+					title: '提示',
+					content: '你确认退出登录?',
+					success: (res) => {
+						if (res.confirm) {
+							this.jumpPage('pages/login/login')
+						}
+					}
+				});
+			},
+			/**
+			 * 跳转页面
+			 * @param { String } url
+			 * @param { Object } params
+			 */
+			jumpPage(url, params) {
 				uni.$u.route({
-					url
+					url,
+					params
 				})
 			}
 		}
 	}
 </script>
 
-<style lang="scss" scoped>
-	.content {
-		&-header {
-			height: 400rpx;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			color: #fff;
-			font-size: 64rpx;
-			background: url('../../static/images/parking-info-bg.png') no-repeat center center;
-			background-repeat: no-repeat;
-			background-position: center center;
-			background-size: cover;
-		}
-
-		&-main {
-			padding: 0 54rpx;
-			margin-top: -60rpx;
-
-			&-item {
-				padding: 50rpx 40rpx;
-				border-radius: 20rpx;
-				box-shadow: 0px 1px 30rpx 0px rgba(0, 0, 0, 0.1);
-				background-color: #fff;
-				margin-bottom: 30rpx;
-				display: flex;
-				align-items: center;
-
-				view {
-					&:first-child {
-						width: 130rpx;
-						height: 130rpx;
-						border-radius: 50%;
-						text-align: center;
-						display: flex;
-						justify-content: center;
-						align-items: center;
-					}
-				}
-
-				.name {
-					margin-left: 30rpx;
-				}
-
-				// .t1 {
-				// 	background-color: #436EFD;
-				// }
-				// .t2 {
-				// 	background-color: #62D4A6;
-				// }
-				// .t3 {
-				// 	background-color: #9376F5;
-				// }
-			}
-		}
+<style lang="scss">
+	page {
+		background-color: #EFEFEF;
 	}
 </style>
+<style lang="scss" scoped>
+	@import './index.scss';
+</style>

+ 18 - 20
pages/login/login.scss

@@ -1,31 +1,29 @@
 .login {
-	&-title {
-		margin-bottom: 226rpx;
-		padding: 246rpx 150rpx 0;
-		font-family: 'PingFangSC-bold';
-		color: #50A0FA;
-		font-size: 72rpx;
-		text-align: center;
-		font-weight: bold;
-	}
-	&-form {
-		padding: 0 56rpx;
+	&-box {
 		&-title {
-			font-size: 40rpx;
+			padding: 123px 0 113px;
+			color: #50A0FA;
+			font-size: 36px;
+			text-align: center;
 			font-family: PingFangSC-bold;
-			font-weight: bold;
-			margin-bottom: 50rpx;
 		}
-		&-box {
-			&-button {
-				margin-top: 80rpx;
+		
+		&-form {
+			padding: 0 28px;
+			&-title {
+				font-size: 20px;
+				color: #101010;
+				font-family: PingFangSC-bold;
+				margin-bottom: 25px;
+			}
+			&-btn {
+				margin-top: 43px;
+				margin-bottom: 16px;
 			}
 			&-forget {
-				width: 100%;
 				text-align: right;
-				font-size: 28rpx;
 				color: #999;
-				font-family: PingFangSC-regular;
+				font-size: 14px;
 			}
 		}
 	}

+ 52 - 52
pages/login/login.vue

@@ -1,31 +1,31 @@
-<!-- 登录 -->
 <template>
 	<view class="login">
-		<view class="login-title">智慧停车<br />运营数据系统</view>
-		<view class="login-form">
-			<view class="login-form-title">账号密码登录</view>
-			<view class="login-form-box">
-				<u--form :model="loginForm" :rules="loginRules" ref="loginForm">
-					<u-form-item prop="phoneNumber">
-						<u--input v-model="loginForm.phoneNumber" border="surround" placeholder="请输入手机号码" shape="square"
-							fontSize="30rpx" maxlength="11" type="number" color="#B7B7B7"></u--input>
-					</u-form-item>
-					<u-form-item prop="password">
-						<u--input v-model="loginForm.password" border="surround" :password="true" placeholder="请输入密码"
-							shape="square" fontSize="30rpx" color="#B7B7B7">
-						</u--input>
-					</u-form-item>
-					<u-form-item>
-						<u-button class="login-form-box-button" type="primary" text="登录" @click="handleLogin">
-						</u-button>
-					</u-form-item>
-					<u-form-item>
-						<view class="login-form-box-forget">忘记密码?</view>
-					</u-form-item>
-				</u--form>
+		<view class="login-box">
+			<view class="login-box-title">
+				<text>智慧停车<br />运营数据系统</text>
+			</view>
+			<view class="login-box-form">
+				<view class="login-box-form-title">
+					<text>账号密码登录</text>
+				</view>
+				<view class="login-box-form-box">
+					<u--form :model="form" :rules="rules" ref="uForm">
+						<u-form-item label="" prop="phoneNumber">
+							<u-input v-model="form.phoneNumber" placeholder="请输入手机号" :maxlength="11" type="number"/>
+						</u-form-item>
+						<u-form-item label="" prop="password">
+							<u-input v-model="form.password" placeholder="请输入密码" :password="true"/>
+						</u-form-item>
+					</u--form>
+				</view>
+				<view class="login-box-form-btn">
+					<u-button type="primary" text="登录" :loading="loading" @click="submitLogin"></u-button>
+				</view>
+				<!-- <view class="login-box-form-forget">
+					<text>忘记密码?</text>
+				</view> -->
 			</view>
 		</view>
-		<u-notify ref="uNotify" message="Hi uView"></u-notify>
 	</view>
 </template>
 
@@ -33,54 +33,54 @@
 	export default {
 		data() {
 			return {
-				loginForm: {
-					phoneNumber: '18084288856',
-					password: '123456'
+				form: {
+					phoneNumber: '',
+					password: ''
 				},
-				loginRules: {
-					phoneNumber: [{
+				loading: false,
+				rules: {
+					phoneNumber: [
+						{
 							required: true,
-							message: '请输入手机号码',
-							trigger: ['blur']
+							message: '请输入手机号',
+							trigger: ['change', 'blur']
 						},
 						{
 							validator: (rule, value, callback) => {
 								return uni.$u.test.mobile(value);
 							},
-							message: '手机号不正确',
-							trigger: ['blur']
+							message: '手机号不正确',
+							trigger: ['change', 'blur'],
 						}
 					],
 					password: {
-						type: 'string',
 						required: true,
 						message: '请输入密码',
-						trigger: ['blur']
+						trigger: ['change', 'blur']
 					}
 				}
 			}
 		},
 		methods: {
-			handleLogin() {
-				this.$refs.loginForm.validate().then(res => {
-					uni.setStorage({
-						key: 'Token',
-						data: '456123',
-						success: function() {
-							console.log('success');
-						}
-					});
+			/**
+			 * 登录提交
+			 */
+			submitLogin() {
+				this.$refs.uForm.validate().then(res => {
+					this.loading = true
+					// uni.$u.api.loginApi(this.form).then(res => {
+					// 	console.log(res)
+					// 	uni.$u.route({
+					// 		url: 'pages/index/index'
+					// 	})
+					// }).catch(err => {
+					// 	this.loading = false
+					// })
 					uni.$u.route({
 						url: 'pages/index/index'
 					})
-				}).catch(error => {
-					this.$refs.uNotify.show({
-						top: -1,
-						type: 'warning',
-						message: '请输入手机号/密码',
-						duration: 1000 * 3,
-						fontSize: 20
-					})
+				}).catch(errors => {
+					uni.$u.toast(errors[0].message || '必填项不能为空!')
 				})
 			}
 		}

+ 0 - 51
pages/operationOverview/operationOverview.vue

@@ -1,51 +0,0 @@
-<template>
-	<view class="records">
-		<view class="records-list">
-			<view class="records-list-item" v-for="(item, index) in list" :key="index" @click="jumpPage(item.url)">{{ item.name }}</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				list: [
-					{ name: '运营概况', url: 'pages/operationOverview/operationOverviewModel/operationOverviewModel' },
-					{ name: '统计报表', url: 'pages/operationOverview/statisticalReport/statisticalReport' },
-					{ name: '运营分析', url: 'pages/operationOverview/operationalAnalysis/operationalAnalysis' }
-				]
-			}
-		},
-		methods: {
-			jumpPage(url) {
-				uni.$u.route({
-					url
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-.records {
-	padding: 40rpx 20rpx;
-	&-list {
-		display: flex;
-		flex-wrap: wrap;
-		justify-content: space-between;
-		&-item {
-			width: calc(50% - 18rpx);
-			height: 200rpx;
-			line-height: 200rpx;
-			text-align: center;
-			background-color: #2871FF;
-			border-radius: 10rpx;
-			color: #fff;
-			font-size: 40rpx;
-			font-family: PingFangSC-regular;
-			margin-bottom: 36rpx;
-		}
-	}
-}
-</style>

+ 0 - 245
pages/operationOverview/operationOverviewModel/operationOverviewModel.vue

@@ -1,245 +0,0 @@
-<template>
-	<view class="model">
-		<view class="model-content">
-			<view class="model-content-1">
-				<view class="title">今日营收</view>
-				<view class="total">
-					<view class="total-title">936.67元</view>
-					<view>
-						<u-icon label="" size="53" name="./../../../static/images/1.png"></u-icon>
-					</view>
-				</view>
-			</view>
-			<view class="model-content-2">
-				<view class="model-content-2-item">
-					<view>393 <text>元</text> </view>
-					<view>今日欠费</view>
-				</view>
-				<view class="model-content-2-item">
-					<view>1485 <text>次</text> </view>
-					<view>今日停车</view>
-				</view>
-				<view class="model-content-2-item">
-					<view>85 <text>次</text> </view>
-					<view>今日扫码</view>
-				</view>
-			</view>
-			<view class="model-content-1">
-				<view class="title">路段总数</view>
-				<view class="total">
-					<view class="total-title red">25个</view>
-					<view>
-						<u-icon label="" size="53" name="./../../../static/images/2.png"></u-icon>
-					</view>
-				</view>
-			</view>
-			<view class="model-content-1">
-				<view class="title">泊位总数</view>
-				<view class="total">
-					<view class="total-title orange">1247个</view>
-					<view>
-						<u-icon label="" size="53" name="./../../../static/images/3.png"></u-icon>
-					</view>
-				</view>
-			</view>
-		</view>
-		<view class="model-line">
-			<view class="report-header">
-				<view class="report-header-left">
-					营收趋势分析
-				</view>
-				<view class="report-header-right">
-					<view class="report-header-right-item" :class="{'current': current === 1}" @click="current = 1">日
-					</view>
-					<view class="report-header-right-item" :class="{'current': current === 2}" @click="current = 2">月
-					</view>
-					<view class="report-header-right-item" :class="{'current': current === 3}" @click="current = 3">年
-					</view>
-				</view>
-			</view>
-			<view class="charts-box">
-				<qiun-data-charts type="line" :chartData="chartData" :opts="opts" />
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				current: 3,
-				chartData: {
-					categories: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
-					series: [{
-						name: '收益',
-						data: [0,
-							0,
-							0,
-							0,
-							0,
-							0,
-							0,
-							0,
-							227834.88,
-							279992.99,
-							284646.33,
-							182900.91
-						]
-					}],
-				},
-				opts: {
-					xAxis: {},
-					yAxis: {
-						showTitle: true,
-						splitNumber: 6,
-						data: [{
-							title: '收益(元)',
-							max: 300000,
-							min: 0
-						}]
-					},
-					legend: {
-						show: false
-					},
-					padding: [10, 0, 10, 0],
-					dataLabel: false
-				}
-			}
-		},
-		methods: {
-
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.model {
-		padding: 34rpx;
-		font-family: SourceHanSansSC-regular;
-
-		&-content {
-			background-color: #EAE7E7;
-			border-radius: 20rpx;
-			padding: 22rpx 14rpx;
-
-			&-1 {
-				background-color: #fff;
-				border-radius: 16rpx;
-				padding: 46rpx 30rpx;
-				margin-bottom: 24rpx;
-
-				.title {
-					color: #AEAEB2;
-					font-size: 36rpx;
-				}
-
-				.total {
-					display: flex;
-					justify-content: space-between;
-					align-items: center;
-
-					&-title {
-						color: #5756D7;
-						font-size: 56rpx;
-						font-family: SourceHanSansSC-bold;
-					}
-
-					.red {
-						color: #FF3A30;
-					}
-
-					.orange {
-						color: #FF9502;
-					}
-				}
-			}
-
-			&-2 {
-				background-color: #fff;
-				border-radius: 16rpx;
-				padding: 52rpx 18rpx;
-				margin-bottom: 24rpx;
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
-
-				&-item {
-					border-right: solid 1px #bbb;
-					width: 33%;
-					text-align: center;
-
-					&:last-child {
-						border-right: none;
-					}
-
-					view {
-						font-size: 34rpx;
-						color: #AEAEB2;
-
-						&:first-child {
-							font-size: 46rpx;
-							color: #000;
-							font-family: SourceHanSansSC-bold;
-							font-weight: 600;
-							margin-bottom: 20rpx;
-
-							text {
-								font-size: 34rpx;
-							}
-						}
-					}
-				}
-			}
-		}
-
-		&-line {
-			margin-top: 50rpx;
-			.report-header {
-				display: flex;
-				align-items: center;
-
-				&-left {
-					border-left: solid 4px #EC0D0D;
-					padding-left: 10rpx;
-					color: #101010;
-					font-size: 30rpx;
-					margin-right: 40rpx;
-				}
-
-				&-right {
-					display: flex;
-
-					&-item {
-						width: 100rpx;
-						height: 60rpx;
-						line-height: 60rpx;
-						text-align: center;
-						border: solid 1px #008CFF;
-						border-right: none;
-
-						&:last-child {
-							border-radius: 0 8rpx 8rpx 0;
-							border-right: solid 1px #008CFF;
-						}
-
-						&:first-child {
-							border-radius: 8rpx 0 0 8rpx;
-						}
-					}
-
-					.current {
-						background-color: #008CFF;
-						color: #fff;
-					}
-				}
-			}
-
-			.charts-box {
-				margin-top: 30rpx;
-				width: 100%;
-				height: 700rpx;
-			}
-		}
-	}
-</style>

+ 0 - 133
pages/operationOverview/operationalAnalysis/operationalAnalysis.vue

@@ -1,133 +0,0 @@
-<template>
-	<view class="report">
-		<view class="report-header">
-			<view class="report-header-left">
-				营收趋势分析
-			</view>
-			<view class="report-header-right">
-				<view class="report-header-right-item" :class="{'current': current === 1}" @click="current = 1">日</view>
-				<view class="report-header-right-item" :class="{'current': current === 2}" @click="current = 2">月</view>
-				<view class="report-header-right-item" :class="{'current': current === 3}" @click="current = 3">年</view>
-			</view>
-		</view>
-		<view class="charts-box">
-			<qiun-data-charts type="column" :chartData="chartData" :opts="opts" />
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				current: 3,
-				chartData: {
-					categories: ["党固路",
-						"富强路",
-						"玉兔山路",
-						"顺时路",
-						"本杰路",
-						"可处路",
-						"物资路",
-						"桂花苑路",
-						"丰林路",
-						"教育路"
-					],
-					series: [{
-						data: [100,
-							140,
-							230,
-							100,
-							130,
-							100,
-							100,
-							100,
-							100,
-							100
-						]
-					}],
-				},
-				opts: {
-					xAxis: {
-						rotateLabel: true
-					},
-					yAxis: {
-						showTitle: true,
-						splitNumber: 5,
-						data: [
-							{
-								title: '收益(元)',
-								max: 250
-							}
-						]
-					},
-					legend: {
-						show: false
-					},
-					padding: [10, 0, 10, 0],
-					extra: {
-						column: {
-							width: 20
-						}
-					}
-				}
-			}
-		},
-		methods: {
-
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.report {
-		padding: 28rpx;
-		font-family: PingFangSC-regular;
-
-		&-header {
-			display: flex;
-			align-items: center;
-
-			&-left {
-				border-left: solid 4px #EC0D0D;
-				padding-left: 10rpx;
-				color: #101010;
-				font-size: 30rpx;
-				margin-right: 40rpx;
-			}
-
-			&-right {
-				display: flex;
-
-				&-item {
-					width: 100rpx;
-					height: 60rpx;
-					line-height: 60rpx;
-					text-align: center;
-					border: solid 1px #008CFF;
-					border-right: none;
-
-					&:last-child {
-						border-radius: 0 8rpx 8rpx 0;
-						border-right: solid 1px #008CFF;
-					}
-
-					&:first-child {
-						border-radius: 8rpx 0 0 8rpx;
-					}
-				}
-
-				.current {
-					background-color: #008CFF;
-					color: #fff;
-				}
-			}
-		}
-
-		.charts-box {
-			margin-top: 30rpx;
-			width: 100%;
-			height: 700rpx;
-		}
-	}
-</style>

+ 0 - 193
pages/operationOverview/statisticalReport/statisticalReport.vue

@@ -1,193 +0,0 @@
-<template>
-	<view class="report">
-		<view class="report-header">
-			<view class="report-header-left">
-				收费员业绩统计
-			</view>
-			<view class="report-header-right">
-				<view class="int">
-					<u--input placeholder="开始日期" border="surround" v-model="form.startDate" :readonly="true" @focus="startDateShow = true">
-					</u--input>
-					<u-calendar :show="startDateShow" @confirm="startDateConfirm" @close="startDateShow = false"></u-calendar>
-				</view>至
-				<view class="int">
-					<u--input placeholder="结束日期" border="surround" v-model="form.endDate" :readonly="true" @focus="endDateShow = true"></u--input>
-					<u-calendar :show="endDateShow" @confirm="endDateConfirm" @close="endDateShow = false"></u-calendar>
-				</view>
-			</view>
-		</view>
-		<view class="report-total">
-			<view>应收金额 <text>813013.00</text>元,实收金额 <text>572793.00</text>元,现金收入
-				<text>318.00</text>元,非现金收<text>572475.00</text>元
-			</view>
-		</view>
-		<view class="report-table">
-			<t-table>
-				<t-tr style="width: 1270rpx; background-color: #e6e6e6;">
-					<t-th v-for="(item, index) in table.header" :key="index" style="width: 140rpx;">{{ item }}</t-th>
-				</t-tr>
-				<t-tr style="width: 1270rpx;background-color: #fff;" v-for="(item, index) in table.list" :key="index"
-					:class="{'last-child': index === table.list.length - 1}">
-					<t-td style="width: 140rpx;">{{ item.workNo }}</t-td>
-					<t-td style="width: 140rpx;">{{ item.name }}</t-td>
-					<t-td style="width: 140rpx;">{{ item.roadName }}</t-td>
-					<t-td style="width: 140rpx;">{{ item.shouldMoney }}</t-td>
-					<t-td style="width: 140rpx;">{{ item.realMoney }}</t-td>
-					<t-td style="width: 140rpx;">{{ item.arrearsMoney }}</t-td>
-					<t-td style="width: 140rpx;">{{ item.h5Money }}</t-td>
-					<t-td style="width: 140rpx;">{{ item.pdaMoney }}</t-td>
-					<t-td style="width: 140rpx;">{{ item.cashMoney }}</t-td>
-				</t-tr>
-			</t-table>
-		</view>
-	</view>
-</template>
-
-<script>
-	import tTable from '@/components/t-table/t-table.vue';
-	import tTh from '@/components/t-table/t-th.vue';
-	import tTr from '@/components/t-table/t-tr.vue';
-	import tTd from '@/components/t-table/t-td.vue';
-	export default {
-		components: {
-			tTable,
-			tTh,
-			tTr,
-			tTd
-		},
-		data() {
-			return {
-				form: {
-					startDate: '',
-					endDate: ''
-				},
-				startDateShow: false,
-				endDateShow: false,
-				table: {
-					header: ['工号', '姓名', '所属路段', '应收金额(元)', '实收金额(元)', '欠费金额(元)', '移动端支付(元)', 'PDA扫码收入(元)', '现金收入(元)'],
-					list: [{
-							workNo: '00001',
-							name: '张政林',
-							roadName: '',
-							shouldMoney: '0.00',
-							realMoney: '0.00',
-							arrearsMoney: '0.00',
-							h5Money: '0.00',
-							pdaMoney: '0.00',
-							cashMoney: '0.00'
-						},
-						{
-							workNo: '00008',
-							name: '运维人员',
-							roadName: '书香府邸,文明路,桂花路',
-							shouldMoney: '0.00',
-							realMoney: '0.00',
-							arrearsMoney: '0.00',
-							h5Money: '0.00',
-							pdaMoney: '0.00',
-							cashMoney: '0.00'
-						},
-						{
-							workNo: '00012',
-							name: '园丁路巡查员',
-							roadName: '园丁路',
-							shouldMoney: '0.00',
-							realMoney: '0.00',
-							arrearsMoney: '0.00',
-							h5Money: '0.00',
-							pdaMoney: '0.00',
-							cashMoney: '0.00'
-						},
-						{
-							workNo: '00013',
-							name: '物资路巡查员',
-							roadName: '物资路',
-							shouldMoney: '0.00',
-							realMoney: '0.00',
-							arrearsMoney: '0.00',
-							h5Money: '0.00',
-							pdaMoney: '0.00',
-							cashMoney: '0.00'
-						},
-						{
-							workNo: '00014',
-							name: '丰林路巡查员',
-							roadName: '丰林路',
-							shouldMoney: '0.00',
-							realMoney: '0.00',
-							arrearsMoney: '0.00',
-							h5Money: '0.00',
-							pdaMoney: '0.00',
-							cashMoney: '0.00'
-						},
-						{
-							workNo: '00015',
-							name: '可处路巡查员',
-							roadName: '可处路二段',
-							shouldMoney: '3.00',
-							realMoney: '0.00',
-							arrearsMoney: '0.00',
-							h5Money: '0.00',
-							pdaMoney: '0.00',
-							cashMoney: '3.00'
-						}
-					]
-				}
-			}
-		},
-		methods: {
-			startDateConfirm(val) {
-				console.log(val)
-				this.form.startDate = val[0]
-				this.startDateShow = false
-			},
-			endDateConfirm(val) {
-				console.log(val)
-				this.form.endDate = val[0]
-				this.endDateShow = false
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-
-	.report {
-		padding: 28rpx;
-		font-family: PingFangSC-regular;
-
-		&-header {
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-
-			&-left {
-				border-left: solid 4px #EC0D0D;
-				padding-left: 10rpx;
-				color: #101010;
-				font-size: 30rpx;
-			}
-
-			&-right {
-				display: flex;
-				align-items: center;
-				font-size: 26rpx;
-
-				.int {
-					width: 210rpx;
-				}
-			}
-		}
-
-		&-total {
-			font-size: 28rpx;
-			color: #101010;
-			margin: 40rpx 0;
-			line-height: 40rpx;
-
-			text {
-				color: #FFB253;
-			}
-		}
-	}
-</style>

+ 23 - 0
pages/orderManagement/arrearageRecord/arrearageRecord.vue

@@ -0,0 +1,23 @@
+<!-- 欠费记录 -->
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 23 - 0
pages/orderManagement/collectionRecord/collectionRecord.vue

@@ -0,0 +1,23 @@
+<!-- 收款记录 -->
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 23 - 0
pages/orderManagement/feeEvasionRecord/feeEvasionRecord.vue

@@ -0,0 +1,23 @@
+<!-- 逃费记录 -->
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 23 - 0
pages/orderManagement/parkingRecord/parkingRecord.vue

@@ -0,0 +1,23 @@
+<!-- 停车记录 -->
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 23 - 0
pages/orderManagement/recoveryRecord/recoveryRecord.vue

@@ -0,0 +1,23 @@
+<!-- 追缴记录 -->
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 23 - 0
pages/orderManagement/voidRecord/voidRecord.vue

@@ -0,0 +1,23 @@
+<!-- 作废记录 -->
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 0 - 43
pages/orderRecords/orderRecords.vue

@@ -1,43 +0,0 @@
-<template>
-	<view class="records">
-		<view class="records-list">
-			<view class="records-list-item" v-for="(item, index) in list" :key="index">{{ item }}</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				list: ['停车记录', '欠费记录', '收费记录', '逃费记录', '作废记录', '追缴记录']
-			}
-		},
-		methods: {
-			
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-.records {
-	padding: 40rpx 20rpx;
-	&-list {
-		display: flex;
-		flex-wrap: wrap;
-		justify-content: space-between;
-		&-item {
-			width: calc(50% - 18rpx);
-			height: 200rpx;
-			line-height: 200rpx;
-			text-align: center;
-			background-color: #2871FF;
-			border-radius: 10rpx;
-			color: #fff;
-			font-size: 40rpx;
-			font-family: PingFangSC-regular;
-			margin-bottom: 36rpx;
-		}
-	}
-}
-</style>

+ 0 - 100
pages/patrolManagement/abnormalRecords/abnormalRecords.vue

@@ -1,100 +0,0 @@
-<template>
-	<view class="records">
-		<view class="records-list">
-			<view class="records-list-item" v-for="(item, index) in list" :key="index">
-				<view class="records-list-item-title">
-					<view class="title-left">{{ item.roadName }}</view>
-					<view class="title-right">{{ item.user }}</view>
-				</view>
-				<view class="records-list-item-content">{{ item.content }}</view>
-				<view class="records-list-item-bottom">{{ item.date }}</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				list: [{
-						roadName: '可处路-KC001',
-						user: '张三',
-						content: '挡板不见了,二维码被抹掉,挡板不见了,二维码被抹掉挡板不见了,二维码被抹掉挡板不见了,二维码被抹掉挡板不见了,二维码被抹掉',
-						date: '12-20 12:10'
-					},
-					{
-						roadName: '可处路-KC002',
-						user: '王强',
-						content: '挡板不见了,二维码被抹掉,挡板不见了,二维码被抹掉挡板不见了,二维码被抹掉挡板不见了,二维码被抹掉挡板不见了,二维码被抹掉',
-						date: '12-20 12:00'
-					},
-					{
-						roadName: '可处路-KC003',
-						user: '李爱国',
-						content: '挡板不见了,二维码被抹掉,挡板不见了,二维码被抹掉挡板不见了,二维码被抹掉挡板不见了,二维码被抹掉挡板不见了,二维码被抹掉',
-						date: '12-20 11:04'
-					},
-					{
-						roadName: '可处路-KC004',
-						user: '黄三',
-						content: '挡板不见了,二维码被抹掉,挡板不见了,二维码被抹掉挡板不见了,二维码被抹掉挡板不见了,二维码被抹掉挡板不见了,二维码被抹掉',
-						date: '12-20 09:10'
-					}
-				]
-			}
-		},
-		methods: {
-
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	page {
-		min-height: calc(100vh - 88rpx);
-		background-color: #f8f8f8;
-	}
-
-	.records {
-		font-family: PingFangSC-regular;
-		padding: 34rpx 40rpx;
-
-		&-list {
-			&-item {
-				background-color: #fff;
-				border-radius: 16rpx;
-				margin-bottom: 32rpx;
-
-				&-title {
-					padding: 28rpx;
-					display: flex;
-					justify-content: space-between;
-					align-items: center;
-					font-size: 28rpx;
-					color: #206FFD;
-
-					.title-left {
-						font-size: 40rpx;
-						color: #101010;
-						font-family: PingFangSC-semiBold;
-					}
-				}
-
-				&-content {
-					font-size: 28rpx;
-					color: #101010;
-					padding: 0 28rpx;
-				}
-
-				&-bottom {
-					margin-top: 20rpx;
-					padding: 14rpx 28rpx;
-					font-size: 28rpx;
-					color: #a2a2a2;
-					border-top: solid 1px #e6e6e6;
-				}
-			}
-		}
-	}
-</style>

+ 23 - 0
pages/patrolManagement/deviceAbnormalRecords/deviceAbnormalRecords.vue

@@ -0,0 +1,23 @@
+<!-- 设备异常记录 -->
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 0 - 61
pages/patrolManagement/patrolManagement.vue

@@ -1,61 +0,0 @@
-<template>
-	<view class="records">
-		<view class="records-list">
-			<view class="records-list-item" v-for="(item, index) in list" :key="index" @click="jumpPage(item.url)">{{ item.name }}</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				list: [{
-						name: '巡检记录',
-						url: 'pages/patrolManagement/patrolRecords/patrolRecords'
-					}, {
-						name: '设备异常记录',
-						url: 'pages/patrolManagement/abnormalRecords/abnormalRecords'
-					}, {
-						name: '巡检处置记录',
-						url: ''
-					}, {
-						name: '应急处置记录',
-						url: ''
-					}]
-			}
-		},
-		methods: {
-			jumpPage(url) {
-				uni.$u.route({
-					url
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.records {
-		padding: 40rpx 20rpx;
-	
-	&-list {
-			display: flex;
-			flex-wrap: wrap;
-			justify-content: space-between;
-
-			&-item {
-				width: calc(50% - 18rpx);
-				height: 200rpx;
-				line-height: 200rpx;
-				text-align: center;
-				background-color: #2871FF;
-				border-radius: 10rpx;
-				color: #fff;
-				font-size: 40rpx;
-				font-family: PingFangSC-regular;
-				margin-bottom: 36rpx;
-			}
-		}
-	}
-</style>

+ 23 - 0
pages/patrolManagement/patrolRecord/patrolRecord.vue

@@ -0,0 +1,23 @@
+<!-- 巡检记录 -->
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 0 - 142
pages/patrolManagement/patrolRecords/patrolRecords.vue

@@ -1,142 +0,0 @@
-<!-- 巡检记录 -->
-<template>
-	<view class="records">
-		<view class="records-search">
-			<view class="int">
-				<u--input placeholder="开始日期" border="surround" v-model="form.startDate" :readonly="true"
-					prefixIcon="clock" @focus="startDateShow = true">
-				</u--input>
-				<u-calendar :show="startDateShow" @confirm="startDateConfirm" @close="startDateShow = false">
-				</u-calendar>
-			</view>
-			<text>至</text>
-			<view class="int">
-				<u--input placeholder="结束日期" border="surround" v-model="form.endDate" :readonly="true"
-					prefixIcon="clock" @focus="endDateShow = true"></u--input>
-				<u-calendar :show="endDateShow" @confirm="endDateConfirm" @close="endDateShow = false"></u-calendar>
-			</view>
-		</view>
-		<view class="records-table">
-			<t-table>
-				<t-tr style="width: 1270rpx; background-color: #e6e6e6;">
-					<t-th v-for="(item, index) in table.header" :key="index" style="width: 140rpx;height: 100rpx;">
-						{{ item }}
-					</t-th>
-				</t-tr>
-				<t-tr style="width: 1270rpx;background-color: #fff;height: 100rpx;" v-for="(item, index) in table.list"
-					:key="index" :class="{'last-child': index === table.list.length - 1}">
-					<t-td style="width: 140rpx;">{{ item.user }}</t-td>
-					<t-td style="width: 140rpx;">{{ item.road }}</t-td>
-					<t-td style="width: 140rpx;">{{ item.device }}</t-td>
-					<t-td style="width: 140rpx;">{{ item.situation }}</t-td>
-					<t-td style="width: 140rpx; color: #008CFF;">评价</t-td>
-				</t-tr>
-			</t-table>
-		</view>
-	</view>
-</template>
-
-<script>
-	import tTable from '@/components/t-table/t-table.vue';
-	import tTh from '@/components/t-table/t-th.vue';
-	import tTr from '@/components/t-table/t-tr.vue';
-	import tTd from '@/components/t-table/t-td.vue';
-	export default {
-		components: {
-			tTable,
-			tTh,
-			tTr,
-			tTd
-		},
-		data() {
-			return {
-				form: {
-					startDate: '',
-					endDate: ''
-				},
-				startDateShow: false,
-				endDateShow: false,
-				table: {
-					header: ['巡检人', '巡检路段', '巡检设备', '巡检情况', '详情'],
-					list: [{
-							user: '张刚',
-							road: '丰林路',
-							device: '日常任务',
-							situation: 'FL001、FL002未巡检'
-						}, {
-							user: '张倩',
-							road: '丰林路',
-							device: '日常任务',
-							situation: 'FL001、FL002未巡检'
-						},
-						{
-							user: '运维人员',
-							road: '丰林路',
-							device: '日常任务',
-							situation: 'FL001、FL002未巡检'
-						},
-						{
-							user: '李明',
-							road: '丰林路',
-							device: '日常任务',
-							situation: 'FL001、FL002未巡检'
-						},
-						{
-							user: '陈静',
-							road: '丰林路',
-							device: '日常任务',
-							situation: 'FL001、FL002未巡检'
-						},
-						{
-							user: '孟大顺',
-							road: '丰林路',
-							device: '日常任务',
-							situation: 'FL001、FL002未巡检'
-						},
-						{
-							user: '张强',
-							road: '丰林路',
-							device: '日常任务',
-							situation: 'FL001、FL002未巡检'
-						}
-					]
-				}
-			}
-		},
-		methods: {
-			startDateConfirm(val) {
-				console.log(val)
-				this.form.startDate = val[0]
-				this.startDateShow = false
-			},
-			endDateConfirm(val) {
-				console.log(val)
-				this.form.endDate = val[0]
-				this.endDateShow = false
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.records {
-		padding: 14rpx;
-
-		&-search {
-			display: flex;
-			align-items: center;
-
-			.int {
-				width: 260rpx;
-			}
-
-			text {
-				padding: 0 10rpx;
-			}
-		}
-
-		&-table {
-			margin-top: 40rpx;
-		}
-	}
-</style>

+ 17 - 0
static/icons/arrearage-record-icon.svg

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="61px" height="60px" viewBox="0 0 61 60" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>arrears</title>
+    <defs>
+        <linearGradient x1="27.3276026%" y1="1.62590701%" x2="100%" y2="98.374093%" id="linearGradient-1">
+            <stop stop-color="#FBCE5F" offset="0%"></stop>
+            <stop stop-color="#FD8D09" offset="100%"></stop>
+        </linearGradient>
+    </defs>
+    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="手机" transform="translate(-258.000000, -840.000000)" fill="url(#linearGradient-1)" fill-rule="nonzero">
+            <g id="arrears" transform="translate(258.000000, 840.000000)">
+                <path d="M50.8333453,0 L10.1666547,0 C4.57496593,0 0,4.50003702 0,9.99998823 L0,50.0000118 C0,55.5000335 4.57503764,60 10.1666547,60 L50.8333453,60 C56.4250341,60 61,55.5000335 61,50.0000118 L61,9.99998823 C61,4.50003702 56.4250341,0 50.8333453,0 Z M21.2222066,11.2807138 L25.9800163,11.9047076 C25.3456225,13.4646217 24.7633059,14.9733829 24.2355052,16.4285219 L47.5488298,16.4285219 L47.5488298,20.7963377 L43.9011374,29.3760415 C43.4774192,29.2736653 42.8430255,29.1176668 41.9980279,28.9080461 C40.9399159,28.5960491 40.0949184,28.3888979 39.4605247,28.2840522 L43.108217,20.4843408 L22.3323957,20.4843408 C20.746483,23.8137897 18.8433018,26.8800661 16.6229955,29.6879678 C15.6714049,28.8568227 14.3481732,28.0768304 12.658178,27.3480615 C16.7815939,22.0443254 19.636294,16.6892955 21.2222066,11.2807138 L21.2222066,11.2807138 Z M47.7074282,47.1593722 C47.3902313,47.6785204 47.1771169,48.0417407 47.0730344,48.2513614 C38.2958914,45.4434597 32.7996055,40.7124235 30.5792274,34.0559248 C28.8867217,40.5052723 23.4945184,45.389908 14.4026174,48.7193568 C14.1895029,48.4073599 13.7682236,47.8858128 13.1338299,47.1594428 C12.3929148,46.0139019 11.8105982,45.1826862 11.3893188,44.6635379 C21.5393318,41.6484849 27.0356176,36.3958312 27.8831258,28.9081166 C28.0938013,26.9338294 28.2003227,24.8522977 28.2003227,22.6683193 L32.7995338,22.6683193 C32.7995338,25.3738448 32.7450178,27.2969792 32.6409354,28.4401212 C34.6481274,36.7613798 40.3055223,41.9604113 49.6104659,44.0395441 C49.1868195,44.6634674 48.5524257,45.7018344 47.7074282,47.1593722 Z" id="形状"></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 18 - 0
static/icons/collection-record-icon.svg

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="60px" height="59px" viewBox="0 0 60 59" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>shequguanli_shoufeiguanli</title>
+    <defs>
+        <linearGradient x1="26.6831757%" y1="1.65277778%" x2="100%" y2="98.3472222%" id="linearGradient-1">
+            <stop stop-color="#54C2FF" offset="0%"></stop>
+            <stop stop-color="#0080DB" offset="99.6558129%"></stop>
+            <stop stop-color="#6DCDF8" offset="100%"></stop>
+        </linearGradient>
+    </defs>
+    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="手机" transform="translate(-435.000000, -840.000000)" fill="url(#linearGradient-1)" fill-rule="nonzero">
+            <g id="shequguanli_shoufeiguanli" transform="translate(435.000000, 840.000000)">
+                <path d="M56.2509047,15.9235348 C58.3208685,15.9235348 60,17.6008997 60,19.6686857 L60,19.6686857 L60,31.8440411 L38.8154403,31.8440411 C35.7104946,31.8440411 33.1917973,34.3600884 33.1917973,37.4617674 C33.1917973,40.5634464 35.7104946,43.0794937 38.8154403,43.0794937 L38.8154403,43.0794937 L60,43.0794937 L60,55.2548491 C60,57.3226351 58.3208685,59 56.2509047,59 L56.2509047,59 L3.7490953,59 C1.67913148,59 0,57.3226351 0,55.2548491 L0,55.2548491 L0,19.6686857 C0,17.6008997 1.67913148,15.9235348 3.7490953,15.9235348 L3.7490953,15.9235348 Z M38.5,35 C39.8807119,35 41,36.1192881 41,37.5 C41,38.8807119 39.8807119,40 38.5,40 C37.1192881,40 36,38.8807119 36,37.5 C36,36.1192881 37.1192881,35 38.5,35 Z M41.9493366,0.501900035 C43.7442702,-0.531992969 46.0386007,0.0825588166 47.0735826,1.87560403 L47.0735826,1.87560403 L53.6308806,13.226737 L19.8817853,13.226737 Z" id="形状结合"></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 17 - 0
static/icons/device-error-records-icon.svg

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="65px" height="58px" viewBox="0 0 65 58" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>shebeiyichang</title>
+    <defs>
+        <linearGradient x1="26.5230332%" y1="10.1893491%" x2="82.0456892%" y2="89.8106509%" id="linearGradient-1">
+            <stop stop-color="#FD995F" offset="0%"></stop>
+            <stop stop-color="#F77645" offset="100%"></stop>
+        </linearGradient>
+    </defs>
+    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="手机" transform="translate(-256.000000, -1308.000000)" fill="url(#linearGradient-1)" fill-rule="nonzero">
+            <g id="shebeiyichang-2" transform="translate(256.000000, 1308.000000)">
+                <path d="M60.9375,44 L4.0625,44 C1.81796875,44 0,42.21 0,40 L0,4 C0,1.79 1.81796875,0 4.0625,0 L60.9375,0 C63.18,0 65,1.79 65,4 L65,40 C65,42.21 63.18,44 60.9375,44 Z M46.8629687,12.1 L42.5546875,7.858 L32.5,17.758 L22.4453125,7.858 L18.1370312,12.1 L28.1917187,22 L18.1370312,31.9 L22.4453125,36.142 L32.5,26.242 L42.5546875,36.142 L46.8629687,31.9 L36.8082812,22 L46.8629687,12.1 Z M18.28125,54 L24.375,54 L24.375,48 L40.625,48 L40.625,54 L46.71875,54 C47.84,54 48.75,54.896 48.75,56 C48.75,57.104 47.84,58 46.71875,58 L18.28125,58 C17.16,58 16.25,57.104 16.25,56 C16.25,54.896 17.16,54 18.28125,54 Z" id="形状"></path>
+            </g>
+        </g>
+    </g>
+</svg>

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 12 - 0
static/icons/fee-evasion-record-icon.svg


+ 16 - 0
static/icons/logout-icon.svg

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="41px" height="41px" viewBox="0 0 41 41" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>tuichu-2</title>
+    <defs>
+        <filter id="filter-1">
+            <feColorMatrix in="SourceGraphic" type="matrix" values="0 0 0 0 1.000000 0 0 0 0 1.000000 0 0 0 0 1.000000 0 0 0 1.000000 0"></feColorMatrix>
+        </filter>
+    </defs>
+    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="tuichu-2" transform="translate(-680.000000, -53.000000)" filter="url(#filter-1)">
+            <g transform="translate(680.000000, 53.000000)">
+                <path d="M40.6219086,19.4316054 L33.7933492,10.8901774 C33.461087,10.4777141 32.9684225,10.2485678 32.458572,10.2485678 C32.2695263,10.2485678 32.0804806,10.2772111 31.891435,10.345955 C31.2097247,10.5865586 30.7514322,11.2338969 30.7514322,11.9557077 L30.7514322,17.0828559 L17.0828559,17.0828559 C15.1981277,17.0828559 13.6685762,18.6124074 13.6685762,20.4971357 C13.6685762,22.3818639 15.1981277,23.9114154 17.0828559,23.9114154 L30.7457035,23.9114154 L30.7457035,29.0385636 C30.7457035,29.7661031 31.2039961,30.4077127 31.8857063,30.6483163 C32.0690233,30.7113316 32.2637977,30.7457035 32.4528434,30.7457035 C32.9626939,30.7457035 33.4553584,30.5165572 33.7876205,30.1040939 L40.6219086,21.5626659 C41.1260305,20.9439709 41.1260305,20.0560291 40.6219086,19.4316054 Z M23.9171441,34.1657119 L10.2199245,34.1657119 C8.34665363,34.1657119 6.82855945,32.6361604 6.82855945,30.7514322 L6.82855945,10.2485678 L6.82855945,10.2199245 C6.82855945,8.34665363 8.35811094,6.82855945 10.2485678,6.82855945 L23.9114154,6.82855945 C25.7961436,6.82855945 27.3256951,5.29900796 27.3256951,3.41427973 C27.3256951,1.52955149 25.7961436,0 23.9114154,0 L6.83428811,0 C3.05910298,0 0,3.05910298 0,6.83428811 L0,34.1657119 C0,37.940897 3.05910298,41 6.83428811,41 L23.9171441,41 C25.8018723,41 27.3314238,39.4704485 27.3314238,37.5857203 C27.3314238,35.6952634 25.8018723,34.1657119 23.9171441,34.1657119 L23.9171441,34.1657119 Z" id="形状" fill="#666666" fill-rule="nonzero"></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 24 - 0
static/icons/operational-analysis-icon.svg

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="95px" height="95px" viewBox="0 0 95 95" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>编组 3</title>
+    <defs>
+        <filter id="filter-1">
+            <feColorMatrix in="SourceGraphic" type="matrix" values="0 0 0 0 1.000000 0 0 0 0 1.000000 0 0 0 0 1.000000 0 0 0 1.000000 0"></feColorMatrix>
+        </filter>
+    </defs>
+    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="手机" transform="translate(-328.000000, -530.000000)">
+            <g id="编组备份" transform="translate(268.000000, 505.000000)">
+                <g id="编组-3" transform="translate(60.000000, 25.000000)">
+                    <rect id="矩形" fill="#317FFB" x="0" y="0" width="95" height="95" rx="36"></rect>
+                    <g filter="url(#filter-1)" id="gaikuang">
+                        <g transform="translate(20.000000, 21.000000)" id="fenxitongji" fill="#000000" fill-rule="nonzero">
+                            <path d="M25.5557935,29.146187 C25.2942579,28.8560463 25.1488887,28.4783127 25.1478735,28.0862303 L25.1478735,4.95702496 C25.1478735,4.53744585 24.9825768,4.13505161 24.6883467,3.83836438 C24.3941166,3.54167715 23.9950549,3.375 23.5789507,3.375 L23.4848154,3.375 C10.6818404,4.20897872 0.56289727,14.6434108 0.0225860319,27.5687361 C-0.517725206,40.4940614 8.69449984,51.7501383 21.3824588,53.6675743 C22.6486279,53.8734967 23.9281875,53.9845424 25.2106304,54 C30.9126687,54.0227546 36.4501976,52.0740178 40.8998588,48.4785323 C41.2429594,48.1780576 41.44,47.7423363 41.44,47.2841034 C41.44,46.8258705 41.2429594,46.3901492 40.8998588,46.0896746 L25.5557935,29.146187 Z" id="路径"></path>
+                            <path d="M30.7113527,25.1641998 L52.9902907,25.1641998 C53.438372,25.1659844 53.8664564,24.9809979 54.1693756,24.6546733 C54.4722947,24.3283488 54.6219748,23.8909292 54.5816434,23.4498766 C53.7406008,10.8652068 43.6033494,0.839660197 30.870488,0 L30.7113527,0 C30.2892997,0 29.8845329,0.165701208 29.5860964,0.460651249 C29.2876599,0.755601289 29.12,1.15563939 29.12,1.57276173 L29.12,23.5914251 C29.12,24.0085475 29.2876599,24.4085856 29.5860964,24.7035356 C29.8845329,24.9984857 30.2892997,25.1641998 30.7113527,25.1641998 L30.7113527,25.1641998 Z M54.4702487,28.3097102 L34.2600693,28.3097102 C33.6319058,28.3111744 33.0633922,28.6777081 32.8089084,29.2453066 C32.5544247,29.8129052 32.6615958,30.4753462 33.0824683,30.9362222 L46.6248799,45.6100886 C46.9264802,45.9380318 47.3540759,46.125 47.8024809,46.125 C48.2508859,46.125 48.6784816,45.9380318 48.9800819,45.6100886 C53.1068655,41.3705511 55.5914341,35.830268 55.9979473,29.9611099 C56.019535,29.5412447 55.8701403,29.1303143 55.5831094,28.8200418 C55.2960784,28.5097693 54.8953064,28.3259847 54.4702487,28.3097102 Z" id="形状"></path>
+                        </g>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 17 - 0
static/icons/parking-record-icon.svg

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="55px" height="64px" viewBox="0 0 55 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>tingchejilu</title>
+    <defs>
+        <linearGradient x1="24.95438%" y1="0%" x2="72.1138934%" y2="91.1685001%" id="linearGradient-1">
+            <stop stop-color="#D56CE3" offset="0%"></stop>
+            <stop stop-color="#9760ED" offset="100%"></stop>
+        </linearGradient>
+    </defs>
+    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="手机" transform="translate(-83.000000, -838.000000)" fill="url(#linearGradient-1)" fill-rule="nonzero">
+            <g id="tingchejilu" transform="translate(83.000000, 838.000000)">
+                <path d="M34.375,0.000698454836 L10.3125,0.000698454836 C4.70175078,-0.0642227826 0.0929520143,4.40481788 0,10.0004802 L0,53.9995198 C0.0929520143,59.5951821 4.70175078,64.0642228 10.3125,63.9993015 L44.6875,63.9993015 C50.2952336,64.0566966 54.8995899,59.5919636 55,53.9995198 L55,20.000262 L34.375,0.000698454836 Z M34.375,13.7512555 L34.375,3.33319718 L51.5625,20.000262 L40.8145833,20.000262 C37.3126166,20.0322 34.4389856,17.2436129 34.375,13.7512555 Z M22.9166667,43.428322 L22.9166667,50.2853152 C22.9166667,51.5476528 21.8906526,52.5709796 20.625,52.5709796 C19.3593474,52.5709796 18.3333333,51.5476528 18.3333333,50.2853152 L18.3333333,25.1430068 L27.5,25.1430068 C32.5626101,25.1430068 36.6666665,29.2363141 36.6666665,34.2856644 C36.6666665,39.3350147 32.5626101,43.4283219 27.5,43.428322 L22.9166667,43.428322 Z M22.9166667,29.7143356 L22.9166667,38.8569932 L27.5,38.8569932 C30.0313051,38.8569932 32.0833333,36.8103396 32.0833333,34.2856644 C32.0833333,31.7609892 30.0313051,29.7143356 27.5,29.7143356 L22.9166667,29.7143356 Z" id="形状"></path>
+            </g>
+        </g>
+    </g>
+</svg>

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 12 - 0
static/icons/patrol-manage-icon.svg


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 12 - 0
static/icons/recovery-record-icon.svg


+ 23 - 0
static/icons/statistical-report-icon.svg

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="95px" height="95px" viewBox="0 0 95 95" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>编组 4</title>
+    <defs>
+        <filter id="filter-1">
+            <feColorMatrix in="SourceGraphic" type="matrix" values="0 0 0 0 1.000000 0 0 0 0 1.000000 0 0 0 0 1.000000 0 0 0 1.000000 0"></feColorMatrix>
+        </filter>
+    </defs>
+    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="手机" transform="translate(-566.000000, -530.000000)">
+            <g id="编组备份-2" transform="translate(506.000000, 505.000000)">
+                <g id="编组-4" transform="translate(60.000000, 25.000000)">
+                    <rect id="矩形" fill="#327DFF" x="0" y="0" width="95" height="95" rx="36"></rect>
+                    <g filter="url(#filter-1)" id="tuijianbaobiao2">
+                        <g transform="translate(24.000000, 20.000000)">
+                            <path d="M39.7692308,7.33333333 L32.3540769,7.33333333 C31.5189231,3.14966667 27.871,0 23.5,0 C19.129,0 15.4810769,3.14966667 14.6459231,7.33333333 L7.23076923,7.33333333 C3.23938462,7.33333333 0,10.6186667 0,14.6666667 L0,47.6666667 C0,51.7146667 3.23938462,55 7.23076923,55 L39.7692308,55 C43.7606154,55 47,51.7146667 47,47.6666667 L47,14.6666667 C47,10.6186667 43.7606154,7.33333333 39.7692308,7.33333333 Z M23.5,3.66666667 C25.8536154,3.66666667 27.8059231,5.20666667 28.5579231,7.33333333 L18.4420769,7.33333333 C19.1940769,5.20666667 21.1463846,3.66666667 23.5,3.66666667 Z M34.3461538,44 L12.6538462,44 C11.656,44 10.8461538,43.1786667 10.8461538,42.1666667 C10.8461538,41.1546667 11.656,40.3333333 12.6538462,40.3333333 L34.3461538,40.3333333 C35.344,40.3333333 36.1538462,41.1546667 36.1538462,42.1666667 C36.1538462,43.1786667 35.344,44 34.3461538,44 Z M34.3461538,33 L12.6538462,33 C11.656,33 10.8461538,32.1786667 10.8461538,31.1666667 C10.8461538,30.1546667 11.656,29.3333333 12.6538462,29.3333333 L34.3461538,29.3333333 C35.344,29.3333333 36.1538462,30.1546667 36.1538462,31.1666667 C36.1538462,32.1786667 35.344,33 34.3461538,33 Z M34.3461538,22 L12.6538462,22 C11.656,22 10.8461538,21.1786667 10.8461538,20.1666667 C10.8461538,19.1546667 11.656,18.3333333 12.6538462,18.3333333 L34.3461538,18.3333333 C35.344,18.3333333 36.1538462,19.1546667 36.1538462,20.1666667 C36.1538462,21.1786667 35.344,22 34.3461538,22 Z" id="形状" fill="#000000" fill-rule="nonzero"></path>
+                        </g>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 27 - 0
static/icons/today-overview-icon.svg

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="95px" height="95px" viewBox="0 0 95 95" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>编组 2</title>
+    <defs>
+        <filter id="filter-1">
+            <feColorMatrix in="SourceGraphic" type="matrix" values="0 0 0 0 1.000000 0 0 0 0 1.000000 0 0 0 0 1.000000 0 0 0 1.000000 0"></feColorMatrix>
+        </filter>
+        <linearGradient x1="14.6604997%" y1="0%" x2="50%" y2="100%" id="linearGradient-2">
+            <stop stop-color="#FC995D" offset="0%"></stop>
+            <stop stop-color="#FC732E" offset="100%"></stop>
+        </linearGradient>
+    </defs>
+    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="手机" transform="translate(-90.000000, -530.000000)">
+            <g id="编组" transform="translate(30.000000, 505.000000)">
+                <g id="编组-2" transform="translate(60.000000, 25.000000)">
+                    <rect id="矩形" fill="#337DFE" x="0" y="0" width="95" height="95" rx="36"></rect>
+                    <g filter="url(#filter-1)" id="gaikuang">
+                        <g transform="translate(23.000000, 23.000000)">
+                            <path d="M47.2,0 L2.8,0 C1.23333333,0 0,1.26751167 0,2.80186791 L0,37.1581054 C0,38.7258172 1.26666667,39.9599733 2.8,39.9599733 L47.2,39.9599733 C48.7666667,39.9599733 50,38.6924616 50,37.1581054 L50,2.80186791 C50,1.26751167 48.7333333,0 47.2,0 Z M39.2333333,16.8112075 L30.5333333,25.5170113 C29.8666667,26.1841227 28.8,26.1841227 28.1666667,25.5170113 L20.6333333,17.9786524 L13.1,25.5170113 C12.4333333,26.1841227 11.3666667,26.1841227 10.7333333,25.5170113 C10.1,24.8498999 10.0666667,23.7825217 10.7333333,23.1487658 L19.4333333,14.442962 C20.1,13.7758506 21.1666667,13.7758506 21.8,14.442962 L29.3333333,21.9813209 L36.8666667,14.442962 C37.3,14.0093396 37.9333333,13.8425617 38.5,14.0093396 C39.0666667,14.1761174 39.5333333,14.6097398 39.7,15.2101401 C39.8333333,15.7771848 39.6666667,16.3775851 39.2333333,16.8112075 L39.2333333,16.8112075 Z M6.56666667,46.664443 L43.5,46.664443 C44.4333333,46.664443 45.1666667,47.4316211 45.1666667,48.3322215 C45.1666667,49.2661775 44.4333333,50 43.5,50 L6.56666667,50 C5.63333333,50 4.9,49.2661775 4.9,48.3322215 C4.86666667,47.4316211 5.63333333,46.664443 6.56666667,46.664443 Z" id="形状" fill="url(#linearGradient-2)" fill-rule="nonzero"></path>
+                        </g>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 12 - 0
static/icons/void-record-icon.svg


BIN
static/images/1.png


BIN
static/images/2.png


BIN
static/images/3.png


BIN
static/images/index-header-bg.png


BIN
static/images/mana-icon.png


BIN
static/images/order-icon.png


BIN
static/images/parking-info-bg.png


BIN
static/images/running-icon.png


BIN
static/logo.png


+ 28 - 0
store/$u.mixin.js

@@ -0,0 +1,28 @@
+import {
+	mapState
+} from 'vuex'
+import store from "@/store"
+
+// 尝试将用户在根目录中的store/index.js的vuex的state变量,全部加载到全局变量中
+let $uStoreKey = [];
+try {
+	$uStoreKey = store.state ? Object.keys(store.state) : [];
+} catch (e) {
+
+}
+
+module.exports = {
+	beforeCreate() {
+		// 将vuex方法挂在到$u中
+		uni.$u.vuex = (name, value) => {
+			this.$store.commit('$uStore', {
+				name,
+				value
+			})
+		}
+	},
+	computed: {
+		// 将vuex的state中的所有变量,解构到全局混入的mixin中
+		...mapState($uStoreKey)
+	}
+}

+ 62 - 0
store/index.js

@@ -0,0 +1,62 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+Vue.use(Vuex)
+
+let lifeData = {};
+
+try {
+	// 尝试获取本地是否存在lifeData变量,第一次启动APP时是不存在的
+	lifeData = uni.getStorageSync('lifeData');
+} catch (e) {
+
+}
+
+// 需要永久存储,且下次APP启动需要取出的,在state中的变量名
+
+let saveStateKeys = ['vuex_user', 'vuex_isLogin'];
+
+// 保存变量到本地存储中
+const saveLifeData = function(key, value) {
+	// 判断变量名是否在需要存储的数组中
+	if (saveStateKeys.indexOf(key) != -1) {
+		// 获取本地存储的lifeData对象,将变量添加到对象中
+		let tmp = uni.getStorageSync('lifeData');
+		// 第一次打开APP,不存在lifeData变量,故放一个{}空对象
+		tmp = tmp ? tmp : {};
+		tmp[key] = value;
+		// 执行这一步后,所有需要存储的变量,都挂载在本地的lifeData对象中
+		uni.setStorageSync('lifeData', tmp);
+	}
+}
+const store = new Vuex.Store({
+	state: {
+		// 如果上面从本地获取的lifeData对象下有对应的属性,就赋值给state中对应的变量
+		// 加上vuex_前缀,是防止变量名冲突,也让人一目了然
+		vuex_user: lifeData.vuex_user ? lifeData.vuex_user : {},
+		vuex_isLogin: lifeData.vuex_isLogin ? lifeData.vuex_isLogin : false
+	},
+	mutations: {
+		$uStore(state, payload) {
+			// 判断是否多层级调用,state中为对象存在的情况,诸如user.info.score = 1
+			let nameArr = payload.name.split('.');
+			let saveKey = '';
+			let len = nameArr.length;
+			if (len >= 2) {
+				let obj = state[nameArr[0]];
+				for (let i = 1; i < len - 1; i++) {
+					obj = obj[nameArr[i]];
+				}
+				obj[nameArr[len - 1]] = payload.value;
+				saveKey = nameArr[0];
+			} else {
+				// 单层级变量,在state就是一个普通变量的情况
+				state[payload.name] = payload.value;
+				saveKey = payload.name;
+			}
+			// 保存变量到本地,见顶部函数定义
+			saveLifeData(saveKey, state[saveKey])
+		}
+	}
+})
+
+export default store

+ 1 - 78
uni.scss

@@ -1,78 +1 @@
-/**
- * 这里是uni-app内置的常用样式变量
- *
- * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
- * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
- *
- */
-
-/**
- * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
- *
- * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
- */
-
-/* 颜色变量 */
-
-/* 行为相关颜色 */
-$uni-color-primary: #007aff;
-$uni-color-success: #4cd964;
-$uni-color-warning: #f0ad4e;
-$uni-color-error: #dd524d;
-
-/* 文字基本颜色 */
-$uni-text-color:#333;//基本色
-$uni-text-color-inverse:#fff;//反色
-$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
-$uni-text-color-placeholder: #808080;
-$uni-text-color-disable:#c0c0c0;
-
-/* 背景颜色 */
-$uni-bg-color:#ffffff;
-$uni-bg-color-grey:#f8f8f8;
-$uni-bg-color-hover:#f1f1f1;//点击状态颜色
-$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
-
-/* 边框颜色 */
-$uni-border-color:#c8c7cc;
-
-/* 尺寸变量 */
-
-/* 文字尺寸 */
-$uni-font-size-sm:12px;
-$uni-font-size-base:14px;
-$uni-font-size-lg:16;
-
-/* 图片尺寸 */
-$uni-img-size-sm:20px;
-$uni-img-size-base:26px;
-$uni-img-size-lg:40px;
-
-/* Border Radius */
-$uni-border-radius-sm: 2px;
-$uni-border-radius-base: 3px;
-$uni-border-radius-lg: 6px;
-$uni-border-radius-circle: 50%;
-
-/* 水平间距 */
-$uni-spacing-row-sm: 5px;
-$uni-spacing-row-base: 10px;
-$uni-spacing-row-lg: 15px;
-
-/* 垂直间距 */
-$uni-spacing-col-sm: 4px;
-$uni-spacing-col-base: 8px;
-$uni-spacing-col-lg: 12px;
-
-/* 透明度 */
-$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
-
-/* 文章场景相关 */
-$uni-color-title: #2C405A; // 文章标题颜色
-$uni-font-size-title:20px;
-$uni-color-subtitle: #555555; // 二级标题颜色
-$uni-font-size-subtitle:26px;
-$uni-color-paragraph: #3F536E; // 文章段落颜色
-$uni-font-size-paragraph:15px;
-/* uni.scss */
-@import '@/uview-ui/theme.scss';
+@import '@/uni_modules/uview-ui/theme.scss';

+ 0 - 177
uni_modules/qiun-data-charts/changelog.md

@@ -1,177 +0,0 @@
-## 2.3.6-20211201(2021-12-01)
-- uCharts.js 修复bar条状图开启圆角模式时,值很小时圆角渲染错误的bug
-## 2.3.5-20211014(2021-10-15)
-- uCharts.js 增加vue3的编译支持(仅原生uCharts,qiun-data-charts组件后续会支持,请关注更新)
-## 2.3.4-20211012(2021-10-12)
-- 秋云图表组件 修复 mac os x 系统 mouseover 事件丢失的 bug
-## 2.3.3-20210706(2021-07-06)
-- uCharts.js 增加雷达图开启数据点值(opts.dataLabel)的显示
-## 2.3.2-20210627(2021-06-27)
-- 秋云图表组件 修复tooltipCustom个别情况下传值不正确报错TypeError: Cannot read property 'name' of undefined的bug
-## 2.3.1-20210616(2021-06-16)
-- uCharts.js 修复圆角柱状图使用4角圆角时,当数值过大时不正确的bug
-## 2.3.0-20210612(2021-06-12)
-- uCharts.js 【重要】uCharts增加nvue兼容,可在nvue项目中使用gcanvas组件渲染uCharts,[详见码云uCharts-demo-nvue](https://gitee.com/uCharts/uCharts)
-- 秋云图表组件 增加tapLegend属性,是否开启图例点击交互事件
-- 秋云图表组件 getIndex事件中增加返回uCharts实例中的opts参数,以便在页面中调用参数
-- 示例项目 pages/other/other.vue增加app端自定义tooltip的方法,详见showOptsTooltip方法
-## 2.2.1-20210603(2021-06-03)
-- uCharts.js 修复饼图、圆环图、玫瑰图,当起始角度不为0时,tooltip位置不准确的bug
-- uCharts.js 增加温度计式柱状图开启顶部半圆形的配置
-## 2.2.0-20210529(2021-05-29)
-- uCharts.js 增加条状图type="bar"
-- 示例项目 pages/ucharts/ucharts.vue增加条状图的demo
-## 2.1.7-20210524(2021-05-24)
-- uCharts.js 修复大数据量模式下曲线图不平滑的bug
-## 2.1.6-20210523(2021-05-23)
-- 秋云图表组件 修复小程序端开启滚动条更新数据后滚动条位置不符合预期的bug
-## 2.1.5-2021051702(2021-05-17)
-- uCharts.js 修复自定义Y轴min和max值为0时不能正确显示的bug
-## 2.1.5-20210517(2021-05-17)
-- uCharts.js 修复Y轴自定义min和max时,未按指定的最大值最小值显示坐标轴刻度的bug
-## 2.1.4-20210516(2021-05-16)
-- 秋云图表组件 优化onWindowResize防抖方法
-- 秋云图表组件 修复APP端uCharts更新数据时,清空series显示loading图标后再显示图表,图表抖动的bug
-- uCharts.js 修复开启canvas2d后,x轴、y轴、series自定义字体大小未按比例缩放的bug
-- 示例项目 修复format-e.vue拼写错误导致app端使用uCharts渲染图表
-## 2.1.3-20210513(2021-05-13)
-- 秋云图表组件 修改uCharts变更chartData数据为updateData方法,支持带滚动条的数据动态打点
-- 秋云图表组件 增加onWindowResize防抖方法 fix by ど誓言,如尘般染指流年づ 
-- 秋云图表组件 H5或者APP变更chartData数据显示loading图表时,原数据闪现的bug
-- 秋云图表组件 props增加errorReload禁用错误点击重新加载的方法
-- uCharts.js 增加tooltip显示category(x轴对应点位)标题的功能,opts.extra.tooltip.showCategory,默认为false
-- uCharts.js 修复mix混合图只有柱状图时,tooltip的分割线显示位置不正确的bug
-- uCharts.js 修复开启滚动条,图表在拖动中动态打点,滚动条位置不正确的bug
-- uCharts.js 修复饼图类数据格式为echarts数据格式,series为空数组报错的bug
-- 示例项目 修改uCharts.js更新到v2.1.2版本后,@getIndex方法获取索引值变更为e.currentIndex.index
-- 示例项目 pages/updata/updata.vue增加滚动条拖动更新(数据动态打点)的demo
-- 示例项目 pages/other/other.vue增加errorReload禁用错误点击重新加载的demo
-## 2.1.2-20210509(2021-05-09)
-秋云图表组件 修复APP端初始化时就传入chartData或lacaldata不显示图表的bug
-## 2.1.1-20210509(2021-05-09)
-- 秋云图表组件 变更ECharts的eopts配置在renderjs内执行,支持在config-echarts.js配置文件内写function配置。
-- 秋云图表组件 修复APP端报错Prop being mutated: "onmouse"错误的bug。
-- 秋云图表组件 修复APP端报错Error: Not Found:Page[6][-1,27] at view.umd.min.js:1的bug。
-## 2.1.0-20210507(2021-05-07)
-- 秋云图表组件 修复初始化时就有数据或者数据更新的时候loading加载动画闪动的bug
-- uCharts.js 修复x轴format方法categories为字符串类型时返回NaN的bug
-- uCharts.js 修复series.textColor、legend.fontColor未执行全局默认颜色的bug
-## 2.1.0-20210506(2021-05-06)
-- 秋云图表组件 修复极个别情况下报错item.properties undefined的bug
-- 秋云图表组件 修复极个别情况下关闭加载动画reshow不起作用,无法显示图表的bug
-- 示例项目 pages/ucharts/ucharts.vue 增加时间轴折线图(type="tline")、时间轴区域图(type="tarea")、散点图(type="scatter")、气泡图demo(type="bubble")、倒三角形漏斗图(opts.extra.funnel.type="triangle")、金字塔形漏斗图(opts.extra.funnel.type="pyramid")
-- 示例项目 pages/format-u/format-u.vue 增加X轴format格式化示例
-- uCharts.js 升级至v2.1.0版本
-- uCharts.js 修复 玫瑰图面积模式点击tooltip位置不正确的bug
-- uCharts.js 修复 玫瑰图点击图例,只剩一个类别显示空白的bug
-- uCharts.js 修复 饼图类图点击图例,其他图表tooltip位置某些情况下不准的bug
-- uCharts.js 修复 x轴为矢量轴(时间轴)情况下,点击tooltip位置不正确的bug
-- uCharts.js 修复 词云图获取点击索引偶尔不准的bug
-- uCharts.js 增加 直角坐标系图表X轴format格式化方法(原生uCharts.js用法请使用formatter)
-- uCharts.js 增加 漏斗图扩展配置,倒三角形(opts.extra.funnel.type="triangle"),金字塔形(opts.extra.funnel.type="pyramid")
-- uCharts.js 增加 散点图(opts.type="scatter")、气泡图(opts.type="bubble")
-- 后期计划 完善散点图、气泡图,增加markPoints标记点,增加横向条状图。
-## 2.0.0-20210502(2021-05-02)
-- uCharts.js 修复词云图获取点击索引不正确的bug
-## 2.0.0-20210501(2021-05-01)
-- 秋云图表组件 修复QQ小程序、百度小程序在关闭动画效果情况下,v-for循环使用图表,显示不正确的bug
-## 2.0.0-20210426(2021-04-26)
-- 秋云图表组件 修复QQ小程序不支持canvas2d的bug
-- 秋云图表组件 修复钉钉小程序某些情况点击坐标计算错误的bug
-- uCharts.js 增加 extra.column.categoryGap 参数,柱状图类每个category点位(X轴点)柱子组之间的间距
-- uCharts.js 增加 yAxis.data[i].titleOffsetY 参数,标题纵向偏移距离,负数为向上偏移,正数向下偏移
-- uCharts.js 增加 yAxis.data[i].titleOffsetX 参数,标题横向偏移距离,负数为向左偏移,正数向右偏移
-- uCharts.js 增加 extra.gauge.labelOffset 参数,仪表盘标签文字径向便宜距离,默认13px
-## 2.0.0-20210422-2(2021-04-22)
-秋云图表组件 修复 formatterAssign 未判断 args[key] == null 的情况导致栈溢出的 bug
-## 2.0.0-20210422(2021-04-22)
-- 秋云图表组件 修复H5、APP、支付宝小程序、微信小程序canvas2d模式下横屏模式的bug
-## 2.0.0-20210421(2021-04-21)
-- uCharts.js 修复多行图例的情况下,图例在上方或者下方时,图例float为左侧或者右侧时,第二行及以后的图例对齐方式不正确的bug
-## 2.0.0-20210420(2021-04-20)
-- 秋云图表组件 修复微信小程序开启canvas2d模式后,windows版微信小程序不支持canvas2d模式的bug
-- 秋云图表组件 修改非uni_modules版本为v2.0版本qiun-data-charts组件
-## 2.0.0-20210419(2021-04-19)
-## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧绿色【使用HBuilderX导入插件】即可使用,示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。
-## 初次使用如果提示未注册&lt;qiun-data-charts&gt;组件,请重启HBuilderX,如仍不好用,请重启电脑;
-## 如果是cli项目,请尝试清理node_modules,重新install,还不行就删除项目,再重新install。
-## 此问题已于DCloud官方确认,HBuilderX下个版本会修复。
-## 其他图表不显示问题详见[常见问题选项卡](https://demo.ucharts.cn)
-## <font color=#FF0000> 新手请先完整阅读帮助文档及常见问题3遍,右侧蓝色按钮示例项目请看2遍! </font> 
-## [DEMO演示及在线生成工具(v2.0文档)https://demo.ucharts.cn](https://demo.ucharts.cn)
-## [图表组件在项目中的应用参见 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651) 
-- uCharts.js 修复混合图中柱状图单独设置颜色不生效的bug
-- uCharts.js 修复多Y轴单独设置fontSize时,开启canvas2d后,未对应放大字体的bug
-## 2.0.0-20210418(2021-04-18)
-- 秋云图表组件 增加directory配置,修复H5端history模式下如果发布到二级目录无法正确加载echarts.min.js的bug
-## 2.0.0-20210416(2021-04-16)
-## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧绿色【使用HBuilderX导入插件】即可使用,示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。
-## 初次使用如果提示未注册&lt;qiun-data-charts&gt;组件,请重启HBuilderX,如仍不好用,请重启电脑;
-## 如果是cli项目,请尝试清理node_modules,重新install,还不行就删除项目,再重新install。
-## 此问题已于DCloud官方确认,HBuilderX下个版本会修复。
-## 其他图表不显示问题详见[常见问题选项卡](https://demo.ucharts.cn)
-## <font color=#FF0000> 新手请先完整阅读帮助文档及常见问题3遍,右侧蓝色按钮示例项目请看2遍! </font> 
-## [DEMO演示及在线生成工具(v2.0文档)https://demo.ucharts.cn](https://demo.ucharts.cn)
-## [图表组件在项目中的应用参见 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651) 
-- 秋云图表组件 修复APP端某些情况下报错`Not Found Page`的bug,fix by 高级bug开发技术员
-- 示例项目 修复APP端v-for循环某些情况下报错`Not Found Page`的bug,fix by 高级bug开发技术员
-- uCharts.js 修复非直角坐标系tooltip提示窗右侧超出未变换方向显示的bug
-## 2.0.0-20210415(2021-04-15)
-- 秋云图表组件 修复H5端发布到二级目录下echarts无法加载的bug
-- 秋云图表组件 修复某些情况下echarts.off('finished')移除监听事件报错的bug
-## 2.0.0-20210414(2021-04-14)
-## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧绿色【使用HBuilderX导入插件】即可使用,示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。
-## 初次使用如果提示未注册&lt;qiun-data-charts&gt;组件,请重启HBuilderX,如仍不好用,请重启电脑;
-## 如果是cli项目,请尝试清理node_modules,重新install,还不行就删除项目,再重新install。
-## 此问题已于DCloud官方确认,HBuilderX下个版本会修复。
-## 其他图表不显示问题详见[常见问题选项卡](https://demo.ucharts.cn)
-## <font color=#FF0000> 新手请先完整阅读帮助文档及常见问题3遍,右侧蓝色按钮示例项目请看2遍! </font> 
-## [DEMO演示及在线生成工具(v2.0文档)https://demo.ucharts.cn](https://demo.ucharts.cn)
-## [图表组件在项目中的应用参见 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651) 
-- 秋云图表组件 修复H5端在cli项目下ECharts引用地址错误的bug
-- 示例项目 增加ECharts的formatter用法的示例(详见示例项目format-e.vue)
-- uCharts.js 增加圆环图中心背景色的配置extra.ring.centerColor
-- uCharts.js 修复微信小程序安卓端柱状图开启透明色后显示不正确的bug
-## 2.0.0-20210413(2021-04-13)
-- 秋云图表组件 修复百度小程序多个图表真机未能正确获取根元素dom尺寸的bug
-- 秋云图表组件 修复百度小程序横屏模式方向不正确的bug
-- 秋云图表组件 修改ontouch时,@getTouchStart@getTouchMove@getTouchEnd的触发条件
-- uCharts.js 修复饼图类数据格式series属性不生效的bug
-- uCharts.js 增加时序区域图 详见示例项目中ucharts.vue
-## 2.0.0-20210412-2(2021-04-12)
-## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧绿色【使用HBuilderX导入插件】即可使用,示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。
-## 初次使用如果提示未注册&lt;qiun-data-charts&gt;组件,请重启HBuilderX。如仍不好用,请重启电脑,此问题已于DCloud官方确认,HBuilderX下个版本会修复。
-## [DEMO演示及在线生成工具(v2.0文档)https://demo.ucharts.cn](https://demo.ucharts.cn)
-## [图表组件在uniCloudAdmin中的应用 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651) 
-- 秋云图表组件 修复uCharts在APP端横屏模式下不能正确渲染的bug
-- 示例项目 增加ECharts柱状图渐变色、圆角柱状图、横向柱状图(条状图)的示例
-## 2.0.0-20210412(2021-04-12)
-- 秋云图表组件 修复created中判断echarts导致APP端无法识别,改回mounted中判断echarts初始化
-- uCharts.js 修复2d模式下series.textOffset未乘像素比的bug
-## 2.0.0-20210411(2021-04-11)
-## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧绿色【使用HBuilderX导入插件】即可使用,示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。
-## 初次使用如果提示未注册<qiun-data-charts>组件,请重启HBuilderX,并清空小程序开发者工具缓存。
-## [DEMO演示及在线生成工具(v2.0文档)https://demo.ucharts.cn](https://demo.ucharts.cn)
-## [图表组件在uniCloudAdmin中的应用 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651) 
-- uCharts.js 折线图区域图增加connectNulls断点续连的功能,详见示例项目中ucharts.vue
-- 秋云图表组件 变更初始化方法为created,变更type2d默认值为true,优化2d模式下组件初始化后dom获取不到的bug
-- 秋云图表组件 修复左右布局时,右侧图表点击坐标错误的bug,修复tooltip柱状图自定义颜色显示object的bug
-## 2.0.0-20210410(2021-04-10)
-- 修复左右布局时,右侧图表点击坐标错误的bug,修复柱状图自定义颜色tooltip显示object的bug
-- 增加标记线及柱状图自定义颜色的demo
-## 2.0.0-20210409(2021-04-08)
-## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧【使用HBuilderX导入插件】即可体验,DEMO演示及在线生成工具(v2.0文档)[https://demo.ucharts.cn](https://demo.ucharts.cn)
-## 图表组件在uniCloudAdmin中的应用 [UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651) 
-- uCharts.js 修复钉钉小程序百度小程序measureText不准确的bug,修复2d模式下饼图类activeRadius为按比例放大的bug
-- 修复组件在支付宝小程序端点击位置不准确的bug
-## 2.0.0-20210408(2021-04-07)
-- 修复组件在支付宝小程序端不能显示的bug(目前支付宝小程不能点击交互,后续修复)
-- uCharts.js 修复高分屏下柱状图类,圆弧进度条 自定义宽度不能按比例放大的bug
-## 2.0.0-20210407(2021-04-06)
-## v1.0版本已停更,建议转uni_modules版本组件方式调用,点击右侧【使用HBuilderX导入插件】即可体验,DEMO演示及在线生成工具(v2.0文档)[https://demo.ucharts.cn](https://demo.ucharts.cn)
-## 增加 通过tofix和unit快速格式化y轴的demo add by `howcode`
-## 增加 图表组件在uniCloudAdmin中的应用 [UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651) 
-## 2.0.0-20210406(2021-04-05)
-# 秋云图表组件+uCharts v2.0版本同步上线,使用方法详见https://demo.ucharts.cn帮助页
-## 2.0.0(2021-04-05)
-# 秋云图表组件+uCharts v2.0版本同步上线,使用方法详见https://demo.ucharts.cn帮助页

+ 0 - 1541
uni_modules/qiun-data-charts/components/qiun-data-charts/qiun-data-charts.vue

@@ -1,1541 +0,0 @@
-<!-- 
- * qiun-data-charts 秋云高性能跨全端图表组件 v2.3.6-20211201
- * Copyright (c) 2021 QIUN® 秋云 https://www.ucharts.cn All rights reserved.
- * Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
- * 复制使用请保留本段注释,感谢支持开源!
- * 为方便更多开发者使用,如有更好的建议请提交码云 Pull Requests !
- *
- * uCharts®官方网站
- * https://www.uCharts.cn
- * 
- * 开源地址:
- * https://gitee.com/uCharts/uCharts
- * 
- * uni-app插件市场地址:
- * http://ext.dcloud.net.cn/plugin?id=271
- * 
- -->
-<template>
-  <view class="chartsview" :id="'ChartBoxId'+cid">
-    <view v-if="mixinDatacomLoading">
-      <!-- 自定义加载状态,请改这里 -->
-      <qiun-loading :loadingType="loadingType" />
-    </view>
-    <view v-if="mixinDatacomErrorMessage && errorShow" @tap="reloading">
-      <!-- 自定义错误提示,请改这里 -->
-      <qiun-error :errorMessage="errorMessage" />
-    </view>
-    <!-- APP和H5采用renderjs渲染图表 -->
-    <!-- #ifdef APP-VUE || H5 -->
-    <block v-if="echarts">
-      <view
-        :style="{ background: background }"
-        style="width: 100%;height: 100%;"
-        :data-directory="directory"
-        :id="'EC'+cid" 
-        :prop="echartsOpts" 
-        :change:prop="rdcharts.ecinit" 
-        :resize="echartsResize"
-        :change:resize="rdcharts.ecresize"
-        v-show="showchart"
-      />
-    </block>
-    <block v-else>
-      <view
-        v-on:tap="rdcharts.tap"
-        v-on:mousemove="rdcharts.mouseMove"
-        v-on:mousedown="rdcharts.mouseDown"
-        v-on:mouseup="rdcharts.mouseUp"
-        v-on:touchstart="rdcharts.touchStart"
-        v-on:touchmove="rdcharts.touchMove"
-        v-on:touchend="rdcharts.touchEnd"
-        :id="'UC'+cid"
-        :prop="uchartsOpts"
-        :change:prop="rdcharts.ucinit"
-      >
-        <canvas
-          :id="cid"
-          :canvasId="cid"
-          :style="{ width: cWidth + 'px', height: cHeight + 'px', background: background }"
-          :disable-scroll="disableScroll"
-          @error="_error"
-          v-show="showchart"
-        />
-      </view>
-    </block>
-    <!-- #endif -->
-    <!-- 支付宝小程序 -->
-    <!-- #ifdef MP-ALIPAY -->
-    <block v-if="ontouch">
-      <canvas
-        :id="cid"
-        :canvasId="cid"
-        :width="cWidth * pixel"
-        :height="cHeight * pixel"
-        :style="{ width: cWidth + 'px', height: cHeight + 'px', background: background }"
-        :disable-scroll="disScroll"
-        @tap="_tap"
-        @touchstart="_touchStart"
-        @touchmove="_touchMove"
-        @touchend="_touchEnd"
-        @error="_error"
-        v-show="showchart"
-      />
-    </block>
-    <block v-if="!ontouch">
-      <canvas
-        :id="cid"
-        :canvasId="cid"
-        :width="cWidth * pixel"
-        :height="cHeight * pixel"
-        :style="{ width: cWidth + 'px', height: cHeight + 'px', background: background }"
-        :disable-scroll="disScroll"
-        @tap="_tap"
-        @error="_error"
-        v-show="showchart"
-      />
-    </block>
-    <!-- #endif -->
-    <!-- 其他小程序通过vue渲染图表 -->
-    <!-- #ifdef MP-360 || MP-BAIDU || MP-QQ || MP-TOUTIAO || MP-WEIXIN -->
-    <block v-if="type2d">
-      <view v-if="ontouch" @tap="_tap">
-        <canvas
-          :id="cid"
-          :canvasId="cid"
-          :style="{ width: cWidth + 'px', height: cHeight + 'px', background: background }"
-          type="2d"
-          :disable-scroll="disScroll"
-          @touchstart="_touchStart"
-          @touchmove="_touchMove"
-          @touchend="_touchEnd"
-          @error="_error"
-          v-show="showchart"
-        />
-      </view>
-      <view v-if="!ontouch" @tap="_tap">
-        <canvas
-          :id="cid"
-          :canvasId="cid"
-          :style="{ width: cWidth + 'px', height: cHeight + 'px', background: background }"
-          type="2d"
-          :disable-scroll="disScroll"
-          @error="_error"
-          v-show="showchart"
-        />
-      </view>
-    </block>
-    <block v-if="!type2d">
-      <view v-if="ontouch" @tap="_tap">
-        <canvas
-          :id="cid"
-          :canvasId="cid"
-          :style="{ width: cWidth + 'px', height: cHeight + 'px', background: background }"
-          @touchstart="_touchStart"
-          @touchmove="_touchMove"
-          @touchend="_touchEnd"
-          :disable-scroll="disScroll"
-          @error="_error"
-          v-if="showchart"
-        />
-      </view>
-      <view v-if="!ontouch" >
-        <canvas
-          :id="cid"
-          :canvasId="cid"
-          :style="{ width: cWidth + 'px', height: cHeight + 'px', background: background }"
-          :disable-scroll="disScroll"
-          @tap="_tap"
-          @error="_error"
-          v-if="showchart"
-        />
-      </view>
-    </block>
-    <!-- #endif -->
-  </view>
-</template>
-
-<script>
-import uChartsMp from '../../js_sdk/u-charts/u-charts.js';
-import cfu from '../../js_sdk/u-charts/config-ucharts.js';
-// #ifdef APP-VUE || H5
-import cfe from '../../js_sdk/u-charts/config-echarts.js';
-// #endif
-
-function deepCloneAssign(origin = {}, ...args) {
-  for (let i in args) {
-    for (let key in args[i]) {
-      if (args[i].hasOwnProperty(key)) {
-        origin[key] = args[i][key] && typeof args[i][key] === 'object' ? deepCloneAssign(Array.isArray(args[i][key]) ? [] : {}, origin[key], args[i][key]) : args[i][key];
-      }
-    }
-  }
-  return origin;
-}
-
-function formatterAssign(args,formatter) {
-  for (let key in args) {
-    if(args[key] !== null && typeof args[key] === 'object'){
-      formatterAssign(args[key],formatter)
-    }else if(key === 'format' && typeof args[key] === 'string'){
-      args['formatter'] = formatter[args[key]] ? formatter[args[key]] : undefined;
-    }
-  }
-  return args;
-}
-
-// 时间转换函数,为了匹配uniClinetDB读取出的时间与categories不同
-function getFormatDate(date) {
-	var seperator = "-";
-	var year = date.getFullYear();
-	var month = date.getMonth() + 1;
-	var strDate = date.getDate();
-	if (month >= 1 && month <= 9) {
-			month = "0" + month;
-	}
-	if (strDate >= 0 && strDate <= 9) {
-			strDate = "0" + strDate;
-	}
-	var currentdate = year + seperator + month + seperator + strDate;
-	return currentdate;
-}
-
-var lastMoveTime = null;
-/**
- * 防抖
- *
- * @param { Function } fn 要执行的方法
- * @param { Number } wait  防抖多少毫秒
- *
- * 在 vue 中使用(注意:不能使用箭头函数,否则this指向不对,并且不能再次封装如:
- * move(){  // 错误调用方式
- *   debounce(function () {
- *   console.log(this.title);
- * }, 1000)});
- * 应该直接使用:// 正确调用方式
- * move: debounce(function () {
- *   console.log(this.title);
- * }, 1000)
- */
-function debounce(fn, wait) {
-  let timer = false;
-  return function() {
-    clearTimeout(timer);
-    timer && clearTimeout(timer);
-    timer = setTimeout(() => {
-      timer = false;
-      fn.apply(this, arguments); // 把参数传进去
-    }, wait);
-  };
-}
-
-export default {
-  name: 'qiun-data-charts',
-  mixins: [uniCloud.mixinDatacom],
-  props: {
-    type: {
-      type: String,
-      default: null
-    },
-    canvasId: {
-      type: String,
-      default: 'uchartsid'
-    },
-    canvas2d: {
-      type: Boolean,
-      default: false
-    },
-    background: {
-      type: String,
-      default: 'none'
-    },
-    animation: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      default() {
-        return {
-          categories: [],
-          series: []
-        };
-      }
-    },
-    opts: {
-      type: Object,
-      default() {
-        return {};
-      }
-    },
-    eopts: {
-      type: Object,
-      default() {
-        return {};
-      }
-    },
-    loadingType: {
-      type: Number,
-      default: 2
-    },
-    errorShow: {
-      type: Boolean,
-      default: true
-    },
-    errorReload: {
-      type: Boolean,
-      default: true
-    },
-    errorMessage: {
-      type: String,
-      default: null
-    },
-    inScrollView: {
-      type: Boolean,
-      default: false
-    },
-    reshow: {
-      type: Boolean,
-      default: false
-    },
-    reload: {
-      type: Boolean,
-      default: false
-    },
-    disableScroll: {
-      type: Boolean,
-      default: false
-    },
-    ontap: {
-      type: Boolean,
-      default: true
-    },
-    ontouch: {
-      type: Boolean,
-      default: false
-    },
-    onmouse: {
-      type: Boolean,
-      default: true
-    },
-    onmovetip: {
-      type: Boolean,
-      default: false
-    },
-    echartsH5: {
-      type: Boolean,
-      default: false
-    },
-    echartsApp: {
-      type: Boolean,
-      default: false
-    },
-    tooltipShow: {
-      type: Boolean,
-      default: true
-    },
-    tooltipFormat: {
-      type: String,
-      default: undefined
-    },
-    tooltipCustom: {
-      type: Object,
-      default: undefined
-    },
-    startDate: {
-      type: String,
-      default: undefined
-    },
-    endDate: {
-      type: String,
-      default: undefined
-    },
-    textEnum: {
-      type: Array,
-      default () {
-        return []
-      }
-    },
-    groupEnum: {
-      type: Array,
-      default () {
-        return []
-      }
-    },
-    pageScrollTop: {
-      type: Number,
-      default: 0
-    },
-    directory: {
-      type: String,
-      default: '/'
-    },
-    tapLegend: {
-      type: Boolean,
-      default: true
-    }
-  },
-  data() {
-    return {
-      cid: 'uchartsid',
-      inWx: false,
-      inAli: false,
-      inTt: false,
-      inBd: false,
-      inH5: false,
-      inApp: false,
-      inWin: false,
-      type2d: true,
-      disScroll: false,
-      openmouse: false,
-      pixel: 1,
-      cWidth: 375,
-      cHeight: 250,
-      showchart: false,
-      echarts: false,
-      echartsResize:false,
-      uchartsOpts: {},
-      echartsOpts: {},
-      drawData:{},
-      lastDrawTime:null,
-    };
-  },
-  created(){
-    this.cid = this.canvasId
-    if (this.canvasId == 'uchartsid' || this.canvasId == '') {
-      let t = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
-      let len = t.length
-      let id = ''
-      for (let i = 0; i < 32; i++) {
-        id += t.charAt(Math.floor(Math.random() * len))
-      }
-      this.cid = id
-    }
-    const systemInfo = uni.getSystemInfoSync()
-    if(systemInfo.platform === 'windows' || systemInfo.platform === 'mac'){
-      this.inWin = true;
-    }
-    // #ifdef MP-WEIXIN
-    this.inWx = true;
-    if (this.canvas2d === false || systemInfo.platform === 'windows' || systemInfo.platform === 'mac') {
-      this.type2d = false;
-    }else{
-      this.pixel = systemInfo.pixelRatio;
-      if (this.canvasId === 'uchartsid' || this.canvasId == '') {
-        console.log('[uCharts]:开启canvas2d模式,必须指定canvasId,否则会出现偶尔获取不到dom节点的问题!');
-      }
-    }
-    // #endif
-    //非微信小程序端强制关闭canvas2d模式
-    // #ifndef MP-WEIXIN
-    this.type2d = false;
-    // #endif
-    // #ifdef MP-ALIPAY
-    this.inAli = true;
-    this.pixel = systemInfo.pixelRatio;
-    // #endif
-    // #ifdef MP-BAIDU
-    this.inBd = true;
-    // #endif
-    // #ifdef MP-TOUTIAO
-    this.inTt = true;
-    // #endif
-    this.disScroll = this.disableScroll;
-  },
-  mounted() {
-    // #ifdef APP-VUE
-    this.inApp = true;
-    if (this.echartsApp === true) {
-      this.echarts = true;
-      this.openmouse = false;
-    }
-    // #endif
-    // #ifdef APP-NVUE
-    this.inApp = true;
-    this.mixinDatacomLoading = false
-    this.mixinDatacomErrorMessage = "暂不支持NVUE"
-    // #endif
-    // #ifdef H5
-    this.inH5 = true;
-    if(this.inWin === true){
-      this.openmouse = this.onmouse;
-    }
-    if (this.echartsH5 === true) {
-      this.echarts = true;
-    }
-    // #endif
-    this.$nextTick(()=>{
-      this.beforeInit();
-    })
-    // #ifndef MP-ALIPAY || MP-BAIDU || MP-TOUTIAO || APP-VUE
-    const time = this.inH5 ? 500 : 200;
-    const _this = this;
-    uni.onWindowResize(
-      debounce(function(res) {
-        if (_this.mixinDatacomLoading == true) {
-          return;
-        }
-        let errmsg = _this.mixinDatacomErrorMessage;
-        if (errmsg !== null && errmsg !== 'null' && errmsg !== '') {
-          return;
-        }
-        if (_this.echarts) {
-          _this.echartsResize = !_this.echartsResize;
-        } else {
-          _this.resizeHandler();
-        }
-      }, time)
-    );
-    // #endif
-  },
-  destroyed(){
-    if(this.echarts === true){
-      delete cfe.option[this.cid]
-      delete cfe.instance[this.cid]
-    }else{
-      delete cfu.option[this.cid]
-      delete cfu.instance[this.cid]
-    }
-    // #ifndef MP-ALIPAY || MP-BAIDU || MP-TOUTIAO
-    uni.offWindowResize(()=>{})
-    // #endif
-  },
-  watch: {
-    chartDataProps: {
-      handler(val, oldval) {
-        if (typeof val === 'object') {
-          if (JSON.stringify(val) !== JSON.stringify(oldval)) {
-            if (val.series && val.series.length > 0) {
-              this.beforeInit();
-            }else{
-              this.mixinDatacomLoading = true;
-              this._clearChart();
-              this.showchart = false;
-              this.mixinDatacomErrorMessage = null;
-            }
-          }
-        } else {
-          this.mixinDatacomLoading = false;
-          this._clearChart();
-          this.showchart = false;
-          this.mixinDatacomErrorMessage = '参数错误:chartData数据类型错误';
-        }
-      },
-      immediate: false,
-      deep: true
-    },
-    localdata:{
-      handler(val, oldval) {
-        if (JSON.stringify(val) !== JSON.stringify(oldval)) {
-          if (val.length > 0) {
-            this.beforeInit();
-          }else{
-            this.mixinDatacomLoading = true;
-            this._clearChart();
-            this.showchart = false;
-            this.mixinDatacomErrorMessage = null;
-          }
-        }
-      },
-      immediate: false,
-      deep: true
-    },
-    optsProps: {
-      handler(val, oldval) {
-        if (typeof val === 'object') {
-          if (JSON.stringify(val) !== JSON.stringify(oldval) && this.echarts === false) {
-            this.checkData(this.drawData);
-          }
-        } else {
-          this.mixinDatacomLoading = false;
-          this._clearChart();
-          this.showchart = false;
-          this.mixinDatacomErrorMessage = '参数错误:opts数据类型错误';
-        }
-      },
-      immediate: false,
-      deep: true
-    },
-    eoptsProps: {
-      handler(val, oldval) {
-        if (typeof val === 'object') {
-          if (JSON.stringify(val) !== JSON.stringify(oldval) && this.echarts === true) {
-            this.checkData(this.drawData);
-          }
-        } else {
-          this.mixinDatacomLoading = false;
-          this.showchart = false;
-          this.mixinDatacomErrorMessage = '参数错误:eopts数据类型错误';
-        }
-      },
-      immediate: false,
-      deep: true
-    },
-    reshow(val, oldval) {
-      if (val === true && this.mixinDatacomLoading === false) {
-        setTimeout(() => {
-          this.mixinDatacomErrorMessage = null;
-          this.echartsResize = !this.echartsResize;
-          this.checkData(this.drawData);
-        }, 200);
-      }
-    },
-    reload(val, oldval) {
-      if (val === true) {
-        this.showchart = false;
-        this.mixinDatacomErrorMessage = null;
-        this.reloading();
-      }
-    },
-    mixinDatacomErrorMessage(val, oldval) {
-      if (val) {
-        this.emitMsg({name: 'error', params: {type:"error", errorShow: this.errorShow, msg: val, id: this.cid}});
-        if(this.errorShow){
-          console.log('[秋云图表组件]' + val);
-        }
-      }
-    },
-    errorMessage(val, oldval) {
-      if (val && this.errorShow && val !== null && val !== 'null' && val !== '') {
-        this.showchart = false;
-        this.mixinDatacomLoading = false;
-        this.mixinDatacomErrorMessage = val;
-      } else {
-        this.showchart = false;
-        this.mixinDatacomErrorMessage = null;
-        this.reloading();
-      }
-    }
-  },
-  computed: {
-    optsProps() {
-      return JSON.parse(JSON.stringify(this.opts));
-    },
-    eoptsProps() {
-      return JSON.parse(JSON.stringify(this.eopts));
-    },
-    chartDataProps() {
-      return JSON.parse(JSON.stringify(this.chartData));
-    },
-  },
-  methods: {
-    beforeInit(){
-      this.mixinDatacomErrorMessage = null;
-      if (typeof this.chartData === 'object' && this.chartData != null && this.chartData.series !== undefined && this.chartData.series.length > 0) {
-        //拷贝一下chartData,为了opts变更后统一数据来源
-        this.drawData = deepCloneAssign({}, this.chartData);
-        this.mixinDatacomLoading = false;
-        this.showchart = true;
-        this.checkData(this.chartData);
-      }else if(this.localdata.length>0){
-        this.mixinDatacomLoading = false;
-        this.showchart = true;
-        this.localdataInit(this.localdata);
-      }else if(this.collection !== ''){
-        this.mixinDatacomLoading = false;
-        this.getCloudData();
-      }else{
-        this.mixinDatacomLoading = true;
-      }
-    },
-    localdataInit(resdata){
-      //替换enum类型为正确的描述
-      if(this.groupEnum.length>0){
-        for (let i = 0; i < resdata.length; i++) {
-          for (let j = 0; j < this.groupEnum.length; j++) {
-            if(resdata[i].group === this.groupEnum[j].value){
-              resdata[i].group = this.groupEnum[j].text
-            }
-          }
-        }
-      }
-      if(this.textEnum.length>0){
-        for (let i = 0; i < resdata.length; i++) {
-          for (let j = 0; j < this.textEnum.length; j++) {
-            if(resdata[i].text === this.textEnum[j].value){
-              resdata[i].text = this.textEnum[j].text
-            }
-          }
-        }
-      }
-      let needCategories = false;
-      let tmpData = {categories:[], series:[]}
-      let tmpcategories = []
-      let tmpseries = [];
-      //拼接categories
-      if(this.echarts === true){
-        needCategories = cfe.categories.includes(this.type)
-      }else{
-        needCategories = cfu.categories.includes(this.type)
-      }
-      if(needCategories === true){
-        //如果props中的chartData带有categories,则优先使用chartData的categories
-        if(this.chartData && this.chartData.categories && this.chartData.categories.length>0){
-          tmpcategories = this.chartData.categories
-        }else{
-          //如果是日期类型的数据,不管是本地数据还是云数据,都按起止日期自动拼接categories
-          if(this.startDate && this.endDate){
-            let idate = new Date(this.startDate)
-            let edate = new Date(this.endDate)
-            while (idate <= edate) {
-            	tmpcategories.push(getFormatDate(idate))
-            	idate = idate.setDate(idate.getDate() + 1)
-            	idate = new Date(idate)
-            }
-          //否则从结果中去重并拼接categories
-          }else{
-            let tempckey = {};
-            resdata.map(function(item, index) {
-              if (item.text != undefined && !tempckey[item.text]) {
-                tmpcategories.push(item.text)
-                tempckey[item.text] = true
-              }
-            });
-          }
-        }
-        tmpData.categories = tmpcategories
-      }
-      //拼接series
-      let tempskey = {};
-      resdata.map(function(item, index) {
-        if (item.group != undefined && !tempskey[item.group]) {
-          tmpseries.push({ name: item.group, data: [] });
-          tempskey[item.group] = true;
-        }
-      });
-      //如果没有获取到分组名称(可能是带categories的数据,也可能是不带的饼图类)
-      if (tmpseries.length == 0) {
-        tmpseries = [{ name: '默认分组', data: [] }];
-        //如果是需要categories的图表类型
-        if(needCategories === true){
-          for (let j = 0; j < tmpcategories.length; j++) {
-            let seriesdata = 0;
-            for (let i = 0; i < resdata.length; i++) {
-              if (resdata[i].text == tmpcategories[j]) {
-                seriesdata = resdata[i].value;
-              }
-            }
-            tmpseries[0].data.push(seriesdata);
-          }
-        //如果是饼图类的图表类型
-        }else{
-          for (let i = 0; i < resdata.length; i++) {
-            tmpseries[0].data.push({"name": resdata[i].text,"value": resdata[i].value});
-          }
-        }
-      //如果有分组名
-      } else {
-        for (let k = 0; k < tmpseries.length; k++) {
-          //如果有categories
-          if (tmpcategories.length > 0) {
-            for (let j = 0; j < tmpcategories.length; j++) {
-              let seriesdata = 0;
-              for (let i = 0; i < resdata.length; i++) {
-                if (tmpseries[k].name == resdata[i].group && resdata[i].text == tmpcategories[j]) {
-                  seriesdata = resdata[i].value;
-                }
-              }
-              tmpseries[k].data.push(seriesdata);
-            }
-          //如果传了group而没有传text,即没有categories(正常情况下这种数据是不符合数据要求规范的)
-          } else {
-            for (let i = 0; i < resdata.length; i++) {
-              if (tmpseries[k].name == resdata[i].group) {
-                tmpseries[k].data.push(resdata[i].value);
-              }
-            }
-          }
-        }
-      }
-      tmpData.series = tmpseries
-      //拷贝一下chartData,为了opts变更后统一数据来源
-      this.drawData = deepCloneAssign({}, tmpData);
-      this.checkData(tmpData)
-    },
-    reloading() {
-      if(this.errorReload === false){
-        return;
-      }
-      this.showchart = false;
-      this.mixinDatacomErrorMessage = null;
-      if (this.collection !== '') {
-        this.mixinDatacomLoading = false;
-        this.onMixinDatacomPropsChange(true);
-      } else {
-        this.beforeInit();
-      }
-    },
-    checkData(anyData) {
-      let cid = this.cid
-      //复位opts或eopts
-      if(this.echarts === true){
-        cfe.option[cid] = deepCloneAssign({}, this.eopts);
-        cfe.option[cid].id = cid;
-        cfe.option[cid].type = this.type;
-      }else{
-        if (this.type && cfu.type.includes(this.type)) {
-          cfu.option[cid] = deepCloneAssign({}, cfu[this.type], this.opts);
-          cfu.option[cid].canvasId = cid;
-        } else {
-          this.mixinDatacomLoading = false;
-          this.showchart = false;
-          this.mixinDatacomErrorMessage = '参数错误:props参数中type类型不正确';
-        }
-      }
-      //挂载categories和series
-      let newData = deepCloneAssign({}, anyData);
-      if (newData.series !== undefined && newData.series.length > 0) {
-        this.mixinDatacomErrorMessage = null;
-        if (this.echarts === true) {
-          cfe.option[cid].chartData = newData;
-          this.$nextTick(()=>{
-            this.init()
-          })
-        }else{
-          cfu.option[cid].categories = newData.categories;
-          cfu.option[cid].series = newData.series;
-          this.$nextTick(()=>{
-            this.init()
-          })
-        }
-      }
-    },
-    resizeHandler() {
-      //渲染防抖
-      let currTime = Date.now();
-      let lastDrawTime = this.lastDrawTime?this.lastDrawTime:currTime-3000;
-      let duration = currTime - lastDrawTime;
-      if (duration < 1000) return;
-      let chartdom = uni
-        .createSelectorQuery()
-        // #ifndef MP-ALIPAY
-        .in(this)
-        // #endif
-        .select('#ChartBoxId'+this.cid)
-        .boundingClientRect(data => {
-          this.showchart = true;
-          if (data.width > 0 && data.height > 0) {
-            if (data.width !== this.cWidth || data.height !== this.cHeight) {
-              this.checkData(this.drawData)
-            }
-          }
-        })
-        .exec();
-    },
-    getCloudData() {
-      if (this.mixinDatacomLoading == true) {
-        return;
-      }
-      this.mixinDatacomLoading = true;
-      this.mixinDatacomGet()
-        .then(res => {
-          this.mixinDatacomResData = res.result.data;
-          this.localdataInit(this.mixinDatacomResData);
-        })
-        .catch(err => {
-          this.mixinDatacomLoading = false;
-          this.showchart = false;
-          this.mixinDatacomErrorMessage = '请求错误:' + err;
-        });
-    },
-    onMixinDatacomPropsChange(needReset, changed) {
-      if (needReset == true && this.collection !== '') {
-        this.showchart = false;
-        this.mixinDatacomErrorMessage = null;
-        this._clearChart();
-        this.getCloudData();
-      }
-    },
-    _clearChart() {
-      let cid = this.cid
-      if (this.echrts !== true) {
-        const ctx = uni.createCanvasContext(cid, this);
-        ctx.clearRect(0, 0, this.cWidth, this.cHeight);
-        ctx.draw();
-      }
-    },
-    init() {
-      let cid = this.cid
-      let chartdom = uni
-        .createSelectorQuery()
-        // #ifndef MP-ALIPAY
-        .in(this)
-        // #endif
-        .select('#ChartBoxId'+cid)
-        .boundingClientRect(data => {
-          if (data.width > 0 && data.height > 0) {
-            this.mixinDatacomLoading = false;
-            this.showchart = true;
-            this.lastDrawTime = Date.now();
-            this.cWidth = data.width;
-            this.cHeight = data.height;
-            if(this.echarts !== true){
-              cfu.option[cid].background = this.background == 'none' ? '#FFFFFF' : this.background;
-              cfu.option[cid].canvas2d = this.type2d;
-              cfu.option[cid].pixelRatio = this.pixel;
-              cfu.option[cid].animation = this.animation;
-              cfu.option[cid].width = data.width * this.pixel;
-              cfu.option[cid].height = data.height * this.pixel;
-              cfu.option[cid].ontap = this.ontap;
-              cfu.option[cid].ontouch = this.ontouch;
-              cfu.option[cid].onmouse = this.openmouse;
-              cfu.option[cid].onmovetip = this.onmovetip;
-              cfu.option[cid].tooltipShow = this.tooltipShow;
-              cfu.option[cid].tooltipFormat = this.tooltipFormat;
-              cfu.option[cid].tooltipCustom = this.tooltipCustom;
-              cfu.option[cid].inScrollView = this.inScrollView;
-              cfu.option[cid].lastDrawTime = this.lastDrawTime;
-              cfu.option[cid].tapLegend = this.tapLegend;
-            }
-            //如果是H5或者App端,采用renderjs渲染图表
-            if (this.inH5 || this.inApp) {
-              if (this.echarts == true) {
-                cfe.option[cid].ontap = this.ontap;
-                cfe.option[cid].onmouse = this.openmouse;
-                cfe.option[cid].tooltipShow = this.tooltipShow;
-                cfe.option[cid].tooltipFormat = this.tooltipFormat;
-                cfe.option[cid].tooltipCustom = this.tooltipCustom;
-                cfe.option[cid].lastDrawTime = this.lastDrawTime;
-                this.echartsOpts = deepCloneAssign({}, cfe.option[cid]);
-              } else {
-                cfu.option[cid].rotateLock = cfu.option[cid].rotate;
-                this.uchartsOpts = deepCloneAssign({}, cfu.option[cid]);
-              }
-            //如果是小程序端,采用uCharts渲染
-            } else {
-              cfu.option[cid] = formatterAssign(cfu.option[cid],cfu.formatter)
-              this.mixinDatacomErrorMessage = null;
-              this.mixinDatacomLoading = false;
-              this.showchart = true;
-              this.$nextTick(()=>{
-                if (this.type2d === true) {
-                  const query = uni.createSelectorQuery().in(this)
-                  query
-                    .select('#' + cid)
-                    .fields({ node: true, size: true })
-                    .exec(res => {
-                      if (res[0]) {
-                        const canvas = res[0].node;
-                        const ctx = canvas.getContext('2d');
-                        cfu.option[cid].context = ctx;
-                        canvas.width = data.width * this.pixel;
-                        canvas.height = data.height * this.pixel;
-                        canvas._width = data.width * this.pixel;
-                        canvas._height = data.height * this.pixel;
-                        cfu.option[cid].rotateLock = cfu.option[cid].rotate;
-                        if(cfu.instance[cid] && cfu.option[cid] && cfu.option[cid].update === true){
-                          this._updataUChart(cid)
-                        }else{
-                          setTimeout(()=>{
-                            cfu.option[cid].context.restore();
-                            cfu.option[cid].context.save();
-                            this._newChart(cid)
-                          },100)
-                        }
-                      } else {
-                        this.showchart = false;
-                        this.mixinDatacomErrorMessage = '参数错误:开启2d模式后,未获取到dom节点,canvas-id:' + cid;
-                      }
-                    });
-                } else {
-                  if(this.inAli){
-                    cfu.option[cid].rotateLock = cfu.option[cid].rotate;
-                  }
-                  cfu.option[cid].context = uni.createCanvasContext(cid, this);
-                  if(cfu.instance[cid] && cfu.option[cid] && cfu.option[cid].update === true){
-                    this._updataUChart(cid)
-                  }else{
-                    setTimeout(()=>{
-                      cfu.option[cid].context.restore();
-                      cfu.option[cid].context.save();
-                      this._newChart(cid)
-                    },100)
-                  }
-                }
-              })
-            }
-          } else {
-            this.mixinDatacomLoading = false;
-            this.showchart = false;
-            if (this.reshow == true) {
-              this.mixinDatacomErrorMessage = '布局错误:未获取到父元素宽高尺寸!canvas-id:' + cid;
-            }
-          }
-        })
-        .exec();
-    },
-    saveImage(){
-    	uni.canvasToTempFilePath({
-    	  canvasId: this.cid,
-    	  success: res=>{
-    	    //#ifdef H5
-    			var a = document.createElement("a");
-    			a.href = res.tempFilePath;
-    			a.download = this.cid;
-    			a.target = '_blank'
-    			a.click();
-    	    //#endif
-    	    //#ifndef H5
-    	      uni.saveImageToPhotosAlbum({
-    	          filePath: res.tempFilePath,
-    	          success: function () {
-    	              uni.showToast({
-    	                  title: '保存成功',
-    	                  duration: 2000
-    	              });
-    	          }
-    	      });
-    	    //#endif
-    	  } 
-    	},this);
-    },
-    // #ifndef APP-VUE || H5
-    _newChart(cid) {
-      if (this.mixinDatacomLoading == true) {
-        return;
-      }
-      this.showchart = true;
-      cfu.instance[cid] = new uChartsMp(cfu.option[cid]);
-      cfu.instance[cid].addEventListener('renderComplete', () => {
-        this.emitMsg({name: 'complete', params: {type:"complete", complete: true, id: cid}});
-        cfu.instance[cid].delEventListener('renderComplete')
-      });
-      cfu.instance[cid].addEventListener('scrollLeft', () => {
-        this.emitMsg({name: 'scrollLeft', params: {type:"scrollLeft", scrollLeft: true, id: cid}});
-      });
-      cfu.instance[cid].addEventListener('scrollRight', () => {
-        this.emitMsg({name: 'scrollRight', params: {type:"scrollRight", scrollRight: true, id: cid}});
-      });
-    },
-    _updataUChart(cid) {
-      cfu.instance[cid].updateData(cfu.option[cid])
-    },
-    _tooltipDefault(item, category, index, opts) {
-      if (category) {
-        let data = item.data
-        if(typeof item.data === "object"){
-          data = item.data.value
-        }
-        return category + ' ' + item.name + ':' + data;
-      } else {
-        if (item.properties && item.properties.name) {
-          return item.properties.name;
-        } else {
-          return item.name + ':' + item.data;
-        }
-      }
-    },
-    _showTooltip(e) {
-      let cid = this.cid
-      let tc = cfu.option[cid].tooltipCustom
-      if (tc && tc !== undefined && tc !== null) {
-        let offset = undefined;
-        if (tc.x >= 0 && tc.y >= 0) {
-          offset = { x: tc.x, y: tc.y + 10 };
-        }
-        cfu.instance[cid].showToolTip(e, {
-          index: tc.index,
-          offset: offset,
-          textList: tc.textList,
-          formatter: (item, category, index, opts) => {
-            if (typeof cfu.option[cid].tooltipFormat === 'string' && cfu.formatter[cfu.option[cid].tooltipFormat]) {
-              return cfu.formatter[cfu.option[cid].tooltipFormat](item, category, index, opts);
-            } else {
-              return this._tooltipDefault(item, category, index, opts);
-            }
-          }
-        });
-      } else {
-        cfu.instance[cid].showToolTip(e, {
-          formatter: (item, category, index, opts) => {
-            if (typeof cfu.option[cid].tooltipFormat === 'string' && cfu.formatter[cfu.option[cid].tooltipFormat]) {
-              return cfu.formatter[cfu.option[cid].tooltipFormat](item, category, index, opts);
-            } else {
-              return this._tooltipDefault(item, category, index, opts);
-            }
-          }
-        });
-      }
-    },
-    _tap(e,move) {
-      let cid = this.cid
-      let currentIndex = null;
-      let legendIndex = null;
-      if (this.inScrollView === true || this.inAli) {
-        let chartdom = uni
-          .createSelectorQuery()
-          // #ifndef MP-ALIPAY
-          .in(this)
-          .select('#ChartBoxId'+cid)
-          // #endif
-          // #ifdef MP-ALIPAY
-          .select('#'+this.cid)
-          // #endif
-          .boundingClientRect(data => {
-            e.changedTouches=[];
-            if (this.inAli) {
-              e.changedTouches.unshift({ x: e.detail.clientX - data.left, y: e.detail.clientY - data.top});
-            }else{
-              e.changedTouches.unshift({ x: e.detail.x - data.left, y: e.detail.y - data.top - this.pageScrollTop});
-            }
-            if(move){
-              if (this.tooltipShow === true) {
-                this._showTooltip(e);
-              }
-            }else{
-              currentIndex = cfu.instance[cid].getCurrentDataIndex(e);
-              legendIndex = cfu.instance[cid].getLegendDataIndex(e);
-              if(this.tapLegend === true){
-                cfu.instance[cid].touchLegend(e);
-              }
-              if (this.tooltipShow === true) {
-                this._showTooltip(e);
-              }
-              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}});
-            }
-          })
-          .exec();
-      } else {
-        if(move){
-          if (this.tooltipShow === true) {
-            this._showTooltip(e);
-          }
-        }else{
-          e.changedTouches=[];
-          e.changedTouches.unshift({ x: e.detail.x - e.currentTarget.offsetLeft, y: e.detail.y - e.currentTarget.offsetTop });
-          currentIndex = cfu.instance[cid].getCurrentDataIndex(e);
-          legendIndex = cfu.instance[cid].getLegendDataIndex(e);
-          if(this.tapLegend === true){
-            cfu.instance[cid].touchLegend(e);
-          }
-          if (this.tooltipShow === true) {
-            this._showTooltip(e);
-          }
-          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}});
-        }
-      }
-    },
-    _touchStart(e) {
-      let cid = this.cid
-      lastMoveTime=Date.now();
-      if(cfu.option[cid].enableScroll === true){
-        cfu.instance[cid].scrollStart(e);
-      }
-      this.emitMsg({name:'getTouchStart', params:{type:"touchStart", event:e.changedTouches[0], id:cid}});
-    },
-    _touchMove(e) {
-      let cid = this.cid
-      let currMoveTime = Date.now();
-      let duration = currMoveTime - lastMoveTime;
-      if (duration < Math.floor(1000 / 60)) return;//每秒60帧
-      lastMoveTime = currMoveTime;
-      if(cfu.option[cid].enableScroll === true){
-        cfu.instance[cid].scroll(e);
-      }
-      this.emitMsg({name: 'getTouchMove', params: {type:"touchMove", event:e.changedTouches[0], id: cid}});
-      if(this.ontap === true && cfu.option[cid].enableScroll === false && this.onmovetip === true){
-        this._tap(e,true)
-      }
-    },
-    _touchEnd(e) {
-      let cid = this.cid
-      if(cfu.option[cid].enableScroll === true){
-        cfu.instance[cid].scrollEnd(e);
-      }
-      this.emitMsg({name:'getTouchEnd', params:{type:"touchEnd", event:e.changedTouches[0], id:cid}});
-      if(this.ontap === true && cfu.option[cid].enableScroll === false && this.onmovetip === true){
-        this._tap(e,true)
-      }
-    },
-    // #endif
-    _error(e) {
-      this.mixinDatacomErrorMessage = e.detail.errMsg;
-    },
-    emitMsg(msg) {
-      this.$emit(msg.name, msg.params);
-    },
-    getRenderType() {
-      //防止如果开启echarts且父元素为v-if的情况renderjs监听不到prop变化的问题
-      if(this.echarts===true && this.mixinDatacomLoading===false){
-        this.beforeInit()
-      }
-    },
-    toJSON(){
-      return this
-    }
-  }
-};
-</script>
-
-<!-- #ifdef APP-VUE || H5 -->
-<script module="rdcharts" lang="renderjs">
-import uChartsRD from '../../js_sdk/u-charts/u-charts.js';
-import cfu from '../../js_sdk/u-charts/config-ucharts.js';
-import cfe from '../../js_sdk/u-charts/config-echarts.js';
-
-var that = {};
-var rootdom = null;
-
-function rddeepCloneAssign(origin = {}, ...args) {
-  for (let i in args) {
-    for (let key in args[i]) {
-      if (args[i].hasOwnProperty(key)) {
-        origin[key] = args[i][key] && typeof args[i][key] === 'object' ? rddeepCloneAssign(Array.isArray(args[i][key]) ? [] : {}, origin[key], args[i][key]) : args[i][key];
-      }
-    }
-  }
-  return origin;
-}
-
-function rdformatterAssign(args,formatter) {
-  for (let key in args) {
-    if(args[key] !== null && typeof args[key] === 'object'){
-      rdformatterAssign(args[key],formatter)
-    }else if(key === 'format' && typeof args[key] === 'string'){
-      args['formatter'] = formatter[args[key]] ? formatter[args[key]] : undefined;
-    }
-  }
-  return args;
-}
-
-export default {
-  data() {
-    return {
-      rid:null
-    }
-  },
-  mounted() {
-    rootdom = {top:0,left:0}
-    // #ifdef H5
-    let dm = document.querySelectorAll('uni-main')[0]
-    if(dm === undefined){
-      dm = document.querySelectorAll('uni-page-wrapper')[0]
-    }
-    rootdom = {top:dm.offsetTop,left:dm.offsetLeft}
-    // #endif
-    setTimeout(()=>{
-      if(this.rid === null){
-        this.$ownerInstance.callMethod('getRenderType')
-      }
-    },200)
-  },
-  destroyed(){
-    delete cfu.option[this.rid]
-    delete cfu.instance[this.rid]
-    delete cfe.option[this.rid]
-    delete cfe.instance[this.rid]
-  },
-  methods: {
-    //==============以下是ECharts的方法====================
-    ecinit(newVal, oldVal, owner, instance){
-      let cid = JSON.stringify(newVal.id)
-      this.rid = cid
-      that[cid] = this.$ownerInstance
-      let eopts = JSON.parse(JSON.stringify(newVal))
-      let type = eopts.type;
-      //载入并覆盖默认配置
-      if (type && cfe.type.includes(type)) {
-        cfe.option[cid] = rddeepCloneAssign({}, cfe[type], eopts);
-      }else{
-        cfe.option[cid] = rddeepCloneAssign({}, eopts);
-      }
-      let newData = eopts.chartData;
-      //挂载categories和series
-      if(cfe.option[cid].xAxis && cfe.option[cid].xAxis.type && cfe.option[cid].xAxis.type === 'category'){
-        cfe.option[cid].xAxis.data = newData.categories
-      }
-      if(cfe.option[cid].yAxis && cfe.option[cid].yAxis.type && cfe.option[cid].yAxis.type === 'category'){
-        cfe.option[cid].yAxis.data = newData.categories
-      }
-      cfe.option[cid].series = []
-      for (var i = 0; i < newData.series.length; i++) {
-        cfe.option[cid].seriesTemplate = cfe.option[cid].seriesTemplate ? cfe.option[cid].seriesTemplate : {}
-        let Template = rddeepCloneAssign({},cfe.option[cid].seriesTemplate,newData.series[i])
-        cfe.option[cid].series.push(Template)
-      }
-      if (typeof window.echarts === 'object') {
-          this.newEChart()
-      }else{
-        const script = document.createElement('script')
-        // #ifdef APP-VUE
-        script.src = './uni_modules/qiun-data-charts/static/app-plus/echarts.min.js'
-        // #endif
-        // #ifdef H5
-        const rooturl = window.location.origin 
-        const directory = instance.getDataset().directory
-        script.src = rooturl + directory + 'uni_modules/qiun-data-charts/static/h5/echarts.min.js'
-        // #endif
-        script.onload = this.newEChart
-        document.head.appendChild(script)
-      }
-    },
-    ecresize(newVal, oldVal, owner, instance){
-      if(cfe.instance[this.rid]){
-        cfe.instance[this.rid].resize()
-      }
-    },
-    newEChart(){
-      let cid = this.rid
-      if(cfe.instance[cid] === undefined){
-        cfe.instance[cid] = echarts.init(that[cid].$el.children[0])
-        //ontap开启后才触发click事件
-        if(cfe.option[cid].ontap === true){
-          cfe.instance[cid].on('click', resdata => {
-            let event = JSON.parse(JSON.stringify({
-              x:resdata.event.offsetX,y:resdata.event.offsetY
-            }))
-            that[cid].callMethod('emitMsg',{name:"getIndex", params:{type:"getIndex", event:event, currentIndex:resdata.dataIndex, value:resdata.data, seriesName: resdata.seriesName,id:cid}})
-          })
-        }
-        this.updataEChart(cid,cfe.option[cid])
-      }else{
-        this.updataEChart(cid,cfe.option[cid])
-      }
-    },
-    updataEChart(cid,option){
-      //替换option内format属性为formatter的预定义方法
-      option = rdformatterAssign(option,cfe.formatter)
-      if(option.tooltip){
-        option.tooltip.show = option.tooltipShow?true:false;
-        option.tooltip.position = this.tooltipPosition()
-        //tooltipFormat方法,替换组件的tooltipFormat为config-echarts.js内对应的方法
-        if (typeof option.tooltipFormat === 'string' && cfe.formatter[option.tooltipFormat]) {
-          option.tooltip.formatter = option.tooltip.formatter ? option.tooltip.formatter : cfe.formatter[option.tooltipFormat]
-        }
-      }
-      // 颜色渐变添加的方法
-      if (option.series) {
-      	for (let i in option.series) {
-      		let linearGradient = option.series[i].linearGradient
-      		if (linearGradient) {
-      			option.series[i].color = new echarts.graphic.LinearGradient(linearGradient[0],linearGradient[1],linearGradient[2],linearGradient[3],linearGradient[4])
-      		}
-      	}
-      }
-      cfe.instance[cid].setOption(option, option.notMerge)
-      cfe.instance[cid].on('finished', function(){
-        that[cid].callMethod('emitMsg',{name:"complete",params:{type:"complete",complete:true,id:cid}})
-        if(cfe.instance[cid]){
-          cfe.instance[cid].off('finished')
-        }
-      })
-    },
-    tooltipPosition(){
-      return (point, params, dom, rect, size) => {
-      	let x = point[0]
-      	let y = point[1]
-      	let viewWidth = size.viewSize[0]
-      	let viewHeight = size.viewSize[1]
-      	let boxWidth = size.contentSize[0]
-      	let boxHeight = size.contentSize[1]
-      	let posX = x + 30 
-      	let posY = y + 30 
-      	if (posX + boxWidth > viewWidth) { 
-      		posX = x - boxWidth - 30
-      	}
-      	if (posY + boxHeight > viewHeight) {
-      		posY = y - boxHeight - 30
-      	}
-      	return [posX, posY]
-      }
-    },
-    //==============以下是uCharts的方法====================
-    ucinit(newVal, oldVal, owner, instance){
-      if(JSON.stringify(newVal) == JSON.stringify(oldVal)){
-        return;
-      }
-      let cid = JSON.parse(JSON.stringify(newVal.canvasId))
-      this.rid = cid
-      that[cid] = this.$ownerInstance
-      cfu.option[cid] = JSON.parse(JSON.stringify(newVal))
-      cfu.option[cid] = rdformatterAssign(cfu.option[cid],cfu.formatter)
-      let canvasdom = document.getElementById(cid)
-      if(canvasdom && canvasdom.children[0]){
-        cfu.option[cid].context = canvasdom.children[0].getContext("2d")
-        if(cfu.instance[cid] && cfu.option[cid] && cfu.option[cid].update === true){
-          this.updataUChart()
-        }else{
-          setTimeout(()=>{
-            cfu.option[cid].context.restore();
-            cfu.option[cid].context.save();
-            this.newUChart()
-          },100)
-        }
-      }
-    },
-    newUChart() {
-      let cid = this.rid
-      cfu.instance[cid] = new uChartsRD(cfu.option[cid])
-      cfu.instance[cid].addEventListener('renderComplete', () => {
-        that[cid].callMethod('emitMsg',{name:"complete",params:{type:"complete",complete:true,id:cid}})
-        cfu.instance[cid].delEventListener('renderComplete')
-      });
-      cfu.instance[cid].addEventListener('scrollLeft', () => {
-        that[cid].callMethod('emitMsg',{name:"scrollLeft",params:{type:"scrollLeft",scrollLeft:true,id:cid}})
-      });
-      cfu.instance[cid].addEventListener('scrollRight', () => {
-        that[cid].callMethod('emitMsg',{name:"scrollRight",params:{type:"scrollRight",scrollRight:true,id:cid}})
-      });
-    },
-    updataUChart() {
-      let cid = this.rid
-      cfu.instance[cid].updateData(cfu.option[cid])
-    },
-    tooltipDefault(item, category, index, opts) {
-      if (category) {
-        let data = item.data
-        if(typeof item.data === "object"){
-          data = item.data.value
-        }
-        return category + ' ' + item.name + ':' + data;
-      } else {
-        if (item.properties && item.properties.name) {
-          return item.properties.name ;
-        } else {
-          return item.name + ':' + item.data;
-        }
-      }
-    },
-    showTooltip(e,cid) {
-      let tc = cfu.option[cid].tooltipCustom
-      if (tc && tc !== undefined && tc !== null) {
-        let offset = undefined;
-        if (tc.x >= 0 && tc.y >= 0) {
-          offset = { x: tc.x, y: tc.y + 10 };
-        }
-        cfu.instance[cid].showToolTip(e, {
-          index: tc.index,
-          offset: offset,
-          textList: tc.textList,
-          formatter: (item, category, index, opts) => {
-            if (typeof cfu.option[cid].tooltipFormat === 'string' && cfu.formatter[cfu.option[cid].tooltipFormat]) {
-              return cfu.formatter[cfu.option[cid].tooltipFormat](item, category, index, opts);
-            } else {
-              return this.tooltipDefault(item, category, index, opts);
-            }
-          }
-        });
-      } else {
-        cfu.instance[cid].showToolTip(e, {
-          formatter: (item, category, index, opts) => {
-            if (typeof cfu.option[cid].tooltipFormat === 'string' && cfu.formatter[cfu.option[cid].tooltipFormat]) {
-              return cfu.formatter[cfu.option[cid].tooltipFormat](item, category, index, opts);
-            } else {
-              return this.tooltipDefault(item, category, index, opts);
-            }
-          }
-        });
-      }
-    },
-    tap(e) {
-      let cid = this.rid
-      let ontap = cfu.option[cid].ontap
-      let tooltipShow = cfu.option[cid].tooltipShow
-      let tapLegend = cfu.option[cid].tapLegend
-      if(ontap == false) return;
-      let currentIndex=null
-      let legendIndex=null
-      let rchartdom = document.getElementById('UC'+cid).getBoundingClientRect()
-      let tmpe = {}
-      if(e.detail.x){//tap或者click的事件
-        tmpe = { x: e.detail.x - rchartdom.left, y:e.detail.y - rchartdom.top + rootdom.top}
-      }else{//mouse的事件
-        tmpe = { x: e.clientX - rchartdom.left, y:e.clientY - rchartdom.top + rootdom.top}
-      }
-      e.changedTouches.unshift(tmpe)
-      currentIndex=cfu.instance[cid].getCurrentDataIndex(e)
-      legendIndex=cfu.instance[cid].getLegendDataIndex(e)
-      if(tapLegend === true){
-        cfu.instance[cid].touchLegend(e);
-      }
-      if(tooltipShow==true){
-        this.showTooltip(e,cid)
-      }
-      that[cid].callMethod('emitMsg',{name:"getIndex",params:{type:"getIndex",event:tmpe,currentIndex:currentIndex,legendIndex:legendIndex,id:cid, opts: cfu.instance[cid].opts}})
-    },
-    touchStart(e) {
-      let cid = this.rid
-      let ontouch = cfu.option[cid].ontouch
-      if(ontouch == false) return;
-      cfu.instance[cid].scrollStart(e)
-      that[cid].callMethod('emitMsg',{name:"getTouchStart",params:{type:"touchStart",event:e.changedTouches[0],id:cid}})
-    },
-    touchMove(e) {
-      let cid = this.rid
-      let ontouch = cfu.option[cid].ontouch
-      if(ontouch == false) return;
-      cfu.instance[cid].scroll(e)
-      that[cid].callMethod('emitMsg',{name:"getTouchMove",params:{type:"touchMove",event:e.changedTouches[0],id:cid}})
-      if(cfu.option[cid].ontap === true && cfu.option[cid].enableScroll === false && cfu.option[cid].onmovetip === true){
-        let rchartdom = document.getElementById('UC'+cid).getBoundingClientRect()
-        let tmpe = { x: e.changedTouches[0].clientX - rchartdom.left, y:e.changedTouches[0].clientY - rchartdom.top + rootdom.top}
-        e.changedTouches.unshift(tmpe)
-        if(cfu.option[cid].tooltipShow === true){
-          this.showTooltip(e,cid)
-        }
-      }
-    },
-    touchEnd(e) {
-      let cid = this.rid
-      let ontouch = cfu.option[cid].ontouch
-      if(ontouch == false) return;
-      cfu.instance[cid].scrollEnd(e)
-      that[cid].callMethod('emitMsg',{name:"getTouchEnd",params:{type:"touchEnd",event:e.changedTouches[0],id:cid}})
-    },
-    mouseDown(e) {
-      let cid = this.rid
-      let onmouse = cfu.option[cid].onmouse
-      if(onmouse == false) return;
-      let rchartdom = document.getElementById('UC'+cid).getBoundingClientRect()
-      let tmpe = {}
-      tmpe = { x: e.clientX - rchartdom.left, y:e.clientY - rchartdom.top + rootdom.top}
-      e.changedTouches.unshift(tmpe)
-      cfu.instance[cid].scrollStart(e)
-      cfu.option[cid].mousedown=true;
-      that[cid].callMethod('emitMsg',{name:"getTouchStart",params:{type:"mouseDown",event:tmpe,id:cid}})
-    },
-    mouseMove(e) {
-      let cid = this.rid
-      let onmouse = cfu.option[cid].onmouse
-      let tooltipShow = cfu.option[cid].tooltipShow
-      if(onmouse == false) return;
-      let rchartdom = document.getElementById('UC'+cid).getBoundingClientRect()
-      let tmpe = {}
-      tmpe = { x: e.clientX - rchartdom.left, y:e.clientY - rchartdom.top + rootdom.top}
-      e.changedTouches.unshift(tmpe)
-      if(cfu.option[cid].mousedown){
-        cfu.instance[cid].scroll(e)
-        that[cid].callMethod('emitMsg',{name:"getTouchMove",params:{type:"mouseMove",event:tmpe,id:cid}})
-      }else if(cfu.instance[cid]){
-        if(tooltipShow==true){
-          this.showTooltip(e,cid)
-        }
-      }
-    },
-    mouseUp(e) {
-      let cid = this.rid
-      let onmouse = cfu.option[cid].onmouse
-      if(onmouse == false) return;
-      let rchartdom = document.getElementById('UC'+cid).getBoundingClientRect()
-      let tmpe = {}
-      tmpe = { x: e.clientX - rchartdom.left, y:e.clientY - rchartdom.top + rootdom.top}
-      e.changedTouches.unshift(tmpe)
-      cfu.instance[cid].scrollEnd(e)
-      cfu.option[cid].mousedown=false;
-      that[cid].callMethod('emitMsg',{name:"getTouchEnd",params:{type:"mouseUp",event:tmpe,id:cid}})
-    },
-  }
-}
-</script>
-<!-- #endif -->
-
-<style scoped>
-.chartsview {
-  width: 100%;
-  height: 100%;
-  display: flex;
-  flex: 1;
-  justify-content: center;
-  align-items: center;
-}
-</style>

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 42
uni_modules/qiun-data-charts/components/qiun-error/qiun-error.vue


+ 0 - 162
uni_modules/qiun-data-charts/components/qiun-loading/loading1.vue

@@ -1,162 +0,0 @@
-<template>
-	 <view class="container loading1">
-		<view class="shape shape1"></view>
-		<view class="shape shape2"></view>
-		<view class="shape shape3"></view>
-		<view class="shape shape4"></view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: 'loading1',
-		data() {
-			return {
-				
-			};
-		}
-	}
-</script>
-
-<style scoped="true">
-.container {
-  width: 30px;
-  height: 30px;
-  position: relative;
-}
-.container.loading1 {
-  -webkit-transform: rotate(45deg);
-          transform: rotate(45deg);
-}
-
-.container .shape {
-  position: absolute;
-  width: 10px;
-  height: 10px;
-  border-radius: 1px;
-}
-.container .shape.shape1 {
-  left: 0;
-  background-color: #1890FF;
-}
-.container .shape.shape2 {
-  right: 0;
-  background-color: #91CB74;
-}
-.container .shape.shape3 {
-  bottom: 0;
-  background-color: #FAC858;
-}
-.container .shape.shape4 {
-  bottom: 0;
-  right: 0;
-  background-color: #EE6666;
-}
-
-.loading1 .shape1 {
-  -webkit-animation: animation1shape1 0.5s ease 0s infinite alternate;
-          animation: animation1shape1 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation1shape1 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(16px, 16px);
-            transform: translate(16px, 16px);
-  }
-}
-
-@keyframes animation1shape1 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(16px, 16px);
-            transform: translate(16px, 16px);
-  }
-}
-.loading1 .shape2 {
-  -webkit-animation: animation1shape2 0.5s ease 0s infinite alternate;
-          animation: animation1shape2 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation1shape2 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-16px, 16px);
-            transform: translate(-16px, 16px);
-  }
-}
-
-@keyframes animation1shape2 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-16px, 16px);
-            transform: translate(-16px, 16px);
-  }
-}
-.loading1 .shape3 {
-  -webkit-animation: animation1shape3 0.5s ease 0s infinite alternate;
-          animation: animation1shape3 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation1shape3 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(16px, -16px);
-            transform: translate(16px, -16px);
-  }
-}
-
-@keyframes animation1shape3 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(16px, -16px);
-            transform: translate(16px, -16px);
-  }
-}
-.loading1 .shape4 {
-  -webkit-animation: animation1shape4 0.5s ease 0s infinite alternate;
-          animation: animation1shape4 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation1shape4 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-16px, -16px);
-            transform: translate(-16px, -16px);
-  }
-}
-
-@keyframes animation1shape4 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-16px, -16px);
-            transform: translate(-16px, -16px);
-  }
-}
-
-
-</style>

+ 0 - 170
uni_modules/qiun-data-charts/components/qiun-loading/loading2.vue

@@ -1,170 +0,0 @@
-<template>
-	 <view class="container loading2">
-		<view class="shape shape1"></view>
-		<view class="shape shape2"></view>
-		<view class="shape shape3"></view>
-		<view class="shape shape4"></view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: 'loading2',
-		data() {
-			return {
-				
-			};
-		}
-	}
-</script>
-
-<style scoped="true">
-.container {
-  width: 30px;
-  height: 30px;
-  position: relative;
-}
-
-.container.loading2 {
-  -webkit-transform: rotate(10deg);
-          transform: rotate(10deg);
-}
-.container.loading2 .shape {
-  border-radius: 5px;
-}
-.container.loading2{
-  -webkit-animation: rotation 1s infinite;
-          animation: rotation 1s infinite;
-}
-
-.container .shape {
-  position: absolute;
-  width: 10px;
-  height: 10px;
-  border-radius: 1px;
-}
-.container .shape.shape1 {
-  left: 0;
-  background-color: #1890FF;
-}
-.container .shape.shape2 {
-  right: 0;
-  background-color: #91CB74;
-}
-.container .shape.shape3 {
-  bottom: 0;
-  background-color: #FAC858;
-}
-.container .shape.shape4 {
-  bottom: 0;
-  right: 0;
-  background-color: #EE6666;
-}
-
-
-.loading2 .shape1 {
-  -webkit-animation: animation2shape1 0.5s ease 0s infinite alternate;
-          animation: animation2shape1 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation2shape1 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(20px, 20px);
-            transform: translate(20px, 20px);
-  }
-}
-
-@keyframes animation2shape1 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(20px, 20px);
-            transform: translate(20px, 20px);
-  }
-}
-.loading2 .shape2 {
-  -webkit-animation: animation2shape2 0.5s ease 0s infinite alternate;
-          animation: animation2shape2 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation2shape2 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-20px, 20px);
-            transform: translate(-20px, 20px);
-  }
-}
-
-@keyframes animation2shape2 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-20px, 20px);
-            transform: translate(-20px, 20px);
-  }
-}
-.loading2 .shape3 {
-  -webkit-animation: animation2shape3 0.5s ease 0s infinite alternate;
-          animation: animation2shape3 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation2shape3 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(20px, -20px);
-            transform: translate(20px, -20px);
-  }
-}
-
-@keyframes animation2shape3 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(20px, -20px);
-            transform: translate(20px, -20px);
-  }
-}
-.loading2 .shape4 {
-  -webkit-animation: animation2shape4 0.5s ease 0s infinite alternate;
-          animation: animation2shape4 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation2shape4 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-20px, -20px);
-            transform: translate(-20px, -20px);
-  }
-}
-
-@keyframes animation2shape4 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-20px, -20px);
-            transform: translate(-20px, -20px);
-  }
-}
-
-</style>

+ 0 - 173
uni_modules/qiun-data-charts/components/qiun-loading/loading3.vue

@@ -1,173 +0,0 @@
-<template>
-	 <view class="container loading3">
-		<view class="shape shape1"></view>
-		<view class="shape shape2"></view>
-		<view class="shape shape3"></view>
-		<view class="shape shape4"></view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: 'loading3',
-		data() {
-			return {
-				
-			};
-		}
-	}
-</script>
-
-<style scoped="true">
-.container {
-  width: 30px;
-  height: 30px;
-  position: relative;
-}
-
- .container.loading3 {
-  -webkit-animation: rotation 1s infinite;
-          animation: rotation 1s infinite;
-}
-.container.loading3 .shape1 {
-  border-top-left-radius: 10px;
-}
-.container.loading3 .shape2 {
-  border-top-right-radius: 10px;
-}
-.container.loading3 .shape3 {
-  border-bottom-left-radius: 10px;
-}
-.container.loading3 .shape4 {
-  border-bottom-right-radius: 10px;
-}
-
-.container .shape {
-  position: absolute;
-  width: 10px;
-  height: 10px;
-  border-radius: 1px;
-}
-.container .shape.shape1 {
-  left: 0;
-  background-color: #1890FF;
-}
-.container .shape.shape2 {
-  right: 0;
-  background-color: #91CB74;
-}
-.container .shape.shape3 {
-  bottom: 0;
-  background-color: #FAC858;
-}
-.container .shape.shape4 {
-  bottom: 0;
-  right: 0;
-  background-color: #EE6666;
-}
-
-.loading3 .shape1 {
-  -webkit-animation: animation3shape1 0.5s ease 0s infinite alternate;
-          animation: animation3shape1 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation3shape1 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(5px, 5px);
-            transform: translate(5px, 5px);
-  }
-}
-
-@keyframes animation3shape1 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(5px, 5px);
-            transform: translate(5px, 5px);
-  }
-}
-.loading3 .shape2 {
-  -webkit-animation: animation3shape2 0.5s ease 0s infinite alternate;
-          animation: animation3shape2 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation3shape2 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-5px, 5px);
-            transform: translate(-5px, 5px);
-  }
-}
-
-@keyframes animation3shape2 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-5px, 5px);
-            transform: translate(-5px, 5px);
-  }
-}
-.loading3 .shape3 {
-  -webkit-animation: animation3shape3 0.5s ease 0s infinite alternate;
-          animation: animation3shape3 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation3shape3 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(5px, -5px);
-            transform: translate(5px, -5px);
-  }
-}
-
-@keyframes animation3shape3 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(5px, -5px);
-            transform: translate(5px, -5px);
-  }
-}
-.loading3 .shape4 {
-  -webkit-animation: animation3shape4 0.5s ease 0s infinite alternate;
-          animation: animation3shape4 0.5s ease 0s infinite alternate;
-}
-
-@-webkit-keyframes animation3shape4 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-5px, -5px);
-            transform: translate(-5px, -5px);
-  }
-}
-
-@keyframes animation3shape4 {
-  from {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  to {
-    -webkit-transform: translate(-5px, -5px);
-            transform: translate(-5px, -5px);
-  }
-}
-</style>

+ 0 - 222
uni_modules/qiun-data-charts/components/qiun-loading/loading4.vue

@@ -1,222 +0,0 @@
-<template>
-	 <view class="container loading5">
-		<view class="shape shape1"></view>
-		<view class="shape shape2"></view>
-		<view class="shape shape3"></view>
-		<view class="shape shape4"></view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: 'loading5',
-		data() {
-			return {
-				
-			};
-		}
-	}
-</script>
-
-<style scoped="true">
-.container {
-  width: 30px;
-  height: 30px;
-  position: relative;
-}
-
-.container.loading5 .shape {
-  width: 15px;
-  height: 15px;
-}
-
-.container .shape {
-  position: absolute;
-  width: 10px;
-  height: 10px;
-  border-radius: 1px;
-}
-.container .shape.shape1 {
-  left: 0;
-  background-color: #1890FF;
-}
-.container .shape.shape2 {
-  right: 0;
-  background-color: #91CB74;
-}
-.container .shape.shape3 {
-  bottom: 0;
-  background-color: #FAC858;
-}
-.container .shape.shape4 {
-  bottom: 0;
-  right: 0;
-  background-color: #EE6666;
-}
-
-.loading5 .shape1 {
-  animation: animation5shape1 2s ease 0s infinite reverse;
-}
-
-@-webkit-keyframes animation5shape1 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(0, 15px);
-            transform: translate(0, 15px);
-  }
-  50% {
-    -webkit-transform: translate(15px, 15px);
-            transform: translate(15px, 15px);
-  }
-  75% {
-    -webkit-transform: translate(15px, 0);
-            transform: translate(15px, 0);
-  }
-}
-
-@keyframes animation5shape1 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(0, 15px);
-            transform: translate(0, 15px);
-  }
-  50% {
-    -webkit-transform: translate(15px, 15px);
-            transform: translate(15px, 15px);
-  }
-  75% {
-    -webkit-transform: translate(15px, 0);
-            transform: translate(15px, 0);
-  }
-}
-.loading5 .shape2 {
-  animation: animation5shape2 2s ease 0s infinite reverse;
-}
-
-@-webkit-keyframes animation5shape2 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(-15px, 0);
-            transform: translate(-15px, 0);
-  }
-  50% {
-    -webkit-transform: translate(-15px, 15px);
-            transform: translate(-15px, 15px);
-  }
-  75% {
-    -webkit-transform: translate(0, 15px);
-            transform: translate(0, 15px);
-  }
-}
-
-@keyframes animation5shape2 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(-15px, 0);
-            transform: translate(-15px, 0);
-  }
-  50% {
-    -webkit-transform: translate(-15px, 15px);
-            transform: translate(-15px, 15px);
-  }
-  75% {
-    -webkit-transform: translate(0, 15px);
-            transform: translate(0, 15px);
-  }
-}
-.loading5 .shape3 {
-  animation: animation5shape3 2s ease 0s infinite reverse;
-}
-
-@-webkit-keyframes animation5shape3 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(15px, 0);
-            transform: translate(15px, 0);
-  }
-  50% {
-    -webkit-transform: translate(15px, -15px);
-            transform: translate(15px, -15px);
-  }
-  75% {
-    -webkit-transform: translate(0, -15px);
-            transform: translate(0, -15px);
-  }
-}
-
-@keyframes animation5shape3 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(15px, 0);
-            transform: translate(15px, 0);
-  }
-  50% {
-    -webkit-transform: translate(15px, -15px);
-            transform: translate(15px, -15px);
-  }
-  75% {
-    -webkit-transform: translate(0, -15px);
-            transform: translate(0, -15px);
-  }
-}
-.loading5 .shape4 {
-  animation: animation5shape4 2s ease 0s infinite reverse;
-}
-
-@-webkit-keyframes animation5shape4 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(0, -15px);
-            transform: translate(0, -15px);
-  }
-  50% {
-    -webkit-transform: translate(-15px, -15px);
-            transform: translate(-15px, -15px);
-  }
-  75% {
-    -webkit-transform: translate(-15px, 0);
-            transform: translate(-15px, 0);
-  }
-}
-
-@keyframes animation5shape4 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(0, -15px);
-            transform: translate(0, -15px);
-  }
-  50% {
-    -webkit-transform: translate(-15px, -15px);
-            transform: translate(-15px, -15px);
-  }
-  75% {
-    -webkit-transform: translate(-15px, 0);
-            transform: translate(-15px, 0);
-  }
-}
-
-</style>

+ 0 - 229
uni_modules/qiun-data-charts/components/qiun-loading/loading5.vue

@@ -1,229 +0,0 @@
-<template>
-	 <view class="container loading6">
-		<view class="shape shape1"></view>
-		<view class="shape shape2"></view>
-		<view class="shape shape3"></view>
-		<view class="shape shape4"></view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: 'loading6',
-		data() {
-			return {
-				
-			};
-		}
-	}
-</script>
-<style scoped="true">
-.container {
-  width: 30px;
-  height: 30px;
-  position: relative;
-}
-
-.container.loading6 {
-  -webkit-animation: rotation 1s infinite;
-          animation: rotation 1s infinite;
-}
-.container.loading6 .shape {
-  width: 12px;
-  height: 12px;
-  border-radius: 2px;
-}
-.container .shape {
-  position: absolute;
-  width: 10px;
-  height: 10px;
-  border-radius: 1px;
-}
-.container .shape.shape1 {
-  left: 0;
-  background-color: #1890FF;
-}
-.container .shape.shape2 {
-  right: 0;
-  background-color: #91CB74;
-}
-.container .shape.shape3 {
-  bottom: 0;
-  background-color: #FAC858;
-}
-.container .shape.shape4 {
-  bottom: 0;
-  right: 0;
-  background-color: #EE6666;
-}
-
-
-.loading6 .shape1 {
-  -webkit-animation: animation6shape1 2s linear 0s infinite normal;
-          animation: animation6shape1 2s linear 0s infinite normal;
-}
-
-@-webkit-keyframes animation6shape1 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(0, 18px);
-            transform: translate(0, 18px);
-  }
-  50% {
-    -webkit-transform: translate(18px, 18px);
-            transform: translate(18px, 18px);
-  }
-  75% {
-    -webkit-transform: translate(18px, 0);
-            transform: translate(18px, 0);
-  }
-}
-
-@keyframes animation6shape1 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(0, 18px);
-            transform: translate(0, 18px);
-  }
-  50% {
-    -webkit-transform: translate(18px, 18px);
-            transform: translate(18px, 18px);
-  }
-  75% {
-    -webkit-transform: translate(18px, 0);
-            transform: translate(18px, 0);
-  }
-}
-.loading6 .shape2 {
-  -webkit-animation: animation6shape2 2s linear 0s infinite normal;
-          animation: animation6shape2 2s linear 0s infinite normal;
-}
-
-@-webkit-keyframes animation6shape2 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(-18px, 0);
-            transform: translate(-18px, 0);
-  }
-  50% {
-    -webkit-transform: translate(-18px, 18px);
-            transform: translate(-18px, 18px);
-  }
-  75% {
-    -webkit-transform: translate(0, 18px);
-            transform: translate(0, 18px);
-  }
-}
-
-@keyframes animation6shape2 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(-18px, 0);
-            transform: translate(-18px, 0);
-  }
-  50% {
-    -webkit-transform: translate(-18px, 18px);
-            transform: translate(-18px, 18px);
-  }
-  75% {
-    -webkit-transform: translate(0, 18px);
-            transform: translate(0, 18px);
-  }
-}
-.loading6 .shape3 {
-  -webkit-animation: animation6shape3 2s linear 0s infinite normal;
-          animation: animation6shape3 2s linear 0s infinite normal;
-}
-
-@-webkit-keyframes animation6shape3 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(18px, 0);
-            transform: translate(18px, 0);
-  }
-  50% {
-    -webkit-transform: translate(18px, -18px);
-            transform: translate(18px, -18px);
-  }
-  75% {
-    -webkit-transform: translate(0, -18px);
-            transform: translate(0, -18px);
-  }
-}
-
-@keyframes animation6shape3 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(18px, 0);
-            transform: translate(18px, 0);
-  }
-  50% {
-    -webkit-transform: translate(18px, -18px);
-            transform: translate(18px, -18px);
-  }
-  75% {
-    -webkit-transform: translate(0, -18px);
-            transform: translate(0, -18px);
-  }
-}
-.loading6 .shape4 {
-  -webkit-animation: animation6shape4 2s linear 0s infinite normal;
-          animation: animation6shape4 2s linear 0s infinite normal;
-}
-
-@-webkit-keyframes animation6shape4 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(0, -18px);
-            transform: translate(0, -18px);
-  }
-  50% {
-    -webkit-transform: translate(-18px, -18px);
-            transform: translate(-18px, -18px);
-  }
-  75% {
-    -webkit-transform: translate(-18px, 0);
-            transform: translate(-18px, 0);
-  }
-}
-
-@keyframes animation6shape4 {
-  0% {
-    -webkit-transform: translate(0, 0);
-            transform: translate(0, 0);
-  }
-  25% {
-    -webkit-transform: translate(0, -18px);
-            transform: translate(0, -18px);
-  }
-  50% {
-    -webkit-transform: translate(-18px, -18px);
-            transform: translate(-18px, -18px);
-  }
-  75% {
-    -webkit-transform: translate(-18px, 0);
-            transform: translate(-18px, 0);
-  }
-}
-</style>

+ 0 - 36
uni_modules/qiun-data-charts/components/qiun-loading/qiun-loading.vue

@@ -1,36 +0,0 @@
-<template>
-	<view>
-	 <Loading1 v-if="loadingType==1"/>
-	 <Loading2 v-if="loadingType==2"/>
-	 <Loading3 v-if="loadingType==3"/>
-	 <Loading4 v-if="loadingType==4"/>
-	 <Loading5 v-if="loadingType==5"/>
-	</view>
-</template>
-
-<script>
-	import Loading1 from "./loading1.vue";
-	import Loading2 from "./loading2.vue";
-	import Loading3 from "./loading3.vue";
-	import Loading4 from "./loading4.vue";
-	import Loading5 from "./loading5.vue";
-	export default {
-		components:{Loading1,Loading2,Loading3,Loading4,Loading5},
-		name: 'qiun-loading',
-		props: {
-			loadingType: {
-				type: Number,
-				default: 2
-			},
-		},
-		data() {
-			return {
-				
-			};
-		},
-	}
-</script>
-
-<style>
-
-</style>

+ 0 - 422
uni_modules/qiun-data-charts/js_sdk/u-charts/config-echarts.js

@@ -1,422 +0,0 @@
-/*
- * uCharts®
- * 高性能跨平台图表库,支持H5、APP、小程序(微信/支付宝/百度/头条/QQ/360)、Vue、Taro等支持canvas的框架平台
- * Copyright (c) 2021 QIUN®秋云 https://www.ucharts.cn All rights reserved.
- * Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
- * 复制使用请保留本段注释,感谢支持开源!
- * 
- * uCharts®官方网站
- * https://www.uCharts.cn
- * 
- * 开源地址:
- * https://gitee.com/uCharts/uCharts
- * 
- * uni-app插件市场地址:
- * http://ext.dcloud.net.cn/plugin?id=271
- * 
- */
-
-// 通用配置项
-
-// 主题颜色配置:如每个图表类型需要不同主题,请在对应图表类型上更改color属性
-const color = ['#1890FF', '#91CB74', '#FAC858', '#EE6666', '#73C0DE', '#3CA272', '#FC8452', '#9A60B4', '#ea7ccc'];
-
-const cfe = {
-  //demotype为自定义图表类型
-	"type": ["pie", "ring", "rose", "funnel", "line", "column", "area", "radar", "gauge","candle","demotype"],
-  //增加自定义图表类型,如果需要categories,请在这里加入您的图表类型例如最后的"demotype"
-	"categories": ["line", "column", "area", "radar", "gauge", "candle","demotype"],
-  //instance为实例变量承载属性,option为eopts承载属性,不要删除
-	"instance": {},
-	"option": {},
-  //下面是自定义format配置,因除H5端外的其他端无法通过props传递函数,只能通过此属性对应下标的方式来替换
-  "formatter":{
-    "tooltipDemo1":function(res){
-      let result = ''
-      for (let i in res) {
-      	if (i == 0) {
-      		result += res[i].axisValueLabel + '年销售额'
-      	}
-      	let value = '--'
-      	if (res[i].data !== null) {
-      		value = res[i].data
-      	}
-      	// #ifdef H5
-      	result += '\n' + res[i].seriesName + ':' + value + ' 万元'
-      	// #endif
-      	
-      	// #ifdef APP-PLUS
-      	result += '<br/>' + res[i].marker + res[i].seriesName + ':' + value + ' 万元'
-      	// #endif
-      }
-      return result;
-    },
-    legendFormat:function(name){
-      return "自定义图例+"+name;
-    },
-    yAxisFormatDemo:function (value, index) {
-      return value + '元';
-    },
-    seriesFormatDemo:function(res){
-      return res.name + '年' + res.value + '元';
-    }
-  },
-  //这里演示了自定义您的图表类型的option,可以随意命名,之后在组件上 type="demotype" 后,组件会调用这个花括号里的option,如果组件上还存在eopts参数,会将demotype与eopts中option合并后渲染图表。
-  "demotype":{
-    "color": color,
-    //在这里填写echarts的option即可
-    
-  },
-  //下面是自定义配置,请添加项目所需的通用配置
-	"column": {
-		"color": color,
-		"title": {
-			"text": ''
-		},
-		"tooltip": {
-			"trigger": 'axis'
-		},
-		"grid": {
-			"top": 30,
-			"bottom": 50,
-			"right": 15,
-			"left": 40
-		},
-		"legend": {
-			"bottom": 'left',
-		},
-		"toolbox": {
-			"show": false,
-		},
-		"xAxis": {
-			"type": 'category',
-			"axisLabel": {
-				"color": '#666666'
-			},
-			"axisLine": {
-				"lineStyle": {
-					"color": '#CCCCCC'
-				}
-			},
-			"boundaryGap": true,
-			"data": []
-		},
-		"yAxis": {
-			"type": 'value',
-			"axisTick": {
-				"show": false,
-			},
-			"axisLabel": {
-				"color": '#666666'
-			},
-			"axisLine": {
-				"lineStyle": {
-					"color": '#CCCCCC'
-				}
-			},
-		},
-		"seriesTemplate": {
-			"name": '',
-			"type": 'bar',
-			"data": [],
-			"barwidth": 20,
-			"label": {
-				"show": true,
-        "color": "#666666",
-				"position": 'top',
-			},
-		},
-	},
-	"line": {
-		"color": color,
-		"title": {
-			"text": ''
-		},
-		"tooltip": {
-			"trigger": 'axis'
-		},
-		"grid": {
-			"top": 30,
-			"bottom": 50,
-			"right": 15,
-			"left": 40
-		},
-		"legend": {
-			"bottom": 'left',
-		},
-		"toolbox": {
-			"show": false,
-		},
-		"xAxis": {
-			"type": 'category',
-			"axisLabel": {
-				"color": '#666666'
-			},
-			"axisLine": {
-				"lineStyle": {
-					"color": '#CCCCCC'
-				}
-			},
-			"boundaryGap": true,
-			"data": []
-		},
-		"yAxis": {
-			"type": 'value',
-			"axisTick": {
-				"show": false,
-			},
-			"axisLabel": {
-				"color": '#666666'
-			},
-			"axisLine": {
-				"lineStyle": {
-					"color": '#CCCCCC'
-				}
-			},
-		},
-		"seriesTemplate": {
-			"name": '',
-			"type": 'line',
-			"data": [],
-			"barwidth": 20,
-			"label": {
-				"show": true,
-        "color": "#666666",
-				"position": 'top',
-			},
-		},
-	},
-	"area": {
-		"color": color,
-		"title": {
-			"text": ''
-		},
-		"tooltip": {
-			"trigger": 'axis'
-		},
-		"grid": {
-			"top": 30,
-			"bottom": 50,
-			"right": 15,
-			"left": 40
-		},
-		"legend": {
-			"bottom": 'left',
-		},
-		"toolbox": {
-			"show": false,
-		},
-		"xAxis": {
-			"type": 'category',
-			"axisLabel": {
-				"color": '#666666'
-			},
-			"axisLine": {
-				"lineStyle": {
-					"color": '#CCCCCC'
-				}
-			},
-			"boundaryGap": true,
-			"data": []
-		},
-		"yAxis": {
-			"type": 'value',
-			"axisTick": {
-				"show": false,
-			},
-			"axisLabel": {
-				"color": '#666666'
-			},
-			"axisLine": {
-				"lineStyle": {
-					"color": '#CCCCCC'
-				}
-			},
-		},
-		"seriesTemplate": {
-			"name": '',
-			"type": 'line',
-			"data": [],
-			"areaStyle": {},
-			"label": {
-				"show": true,
-        "color": "#666666",
-				"position": 'top',
-			},
-		},
-	},
-	"pie": {
-		"color": color,
-		"title": {
-			"text": ''
-		},
-		"tooltip": {
-			"trigger": 'item'
-		},
-		"grid": {
-			"top": 40,
-			"bottom": 30,
-			"right": 15,
-			"left": 15
-		},
-		"legend": {
-			"bottom": 'left',
-		},
-		"seriesTemplate": {
-			"name": '',
-			"type": 'pie',
-			"data": [],
-			"radius": '50%',
-			"label": {
-				"show": true,
-        "color": "#666666",
-				"position": 'top',
-			},
-		},
-	},
-	"ring": {
-		"color": color,
-		"title": {
-			"text": ''
-		},
-		"tooltip": {
-			"trigger": 'item'
-		},
-		"grid": {
-			"top": 40,
-			"bottom": 30,
-			"right": 15,
-			"left": 15
-		},
-		"legend": {
-			"bottom": 'left',
-		},
-		"seriesTemplate": {
-			"name": '',
-			"type": 'pie',
-			"data": [],
-			"radius": ['40%', '70%'],
-			"avoidLabelOverlap": false,
-			"label": {
-				"show": true,
-        "color": "#666666",
-				"position": 'top',
-			},
-			"labelLine": {
-				"show": true
-			},
-		},
-	},
-	"rose": {
-		"color": color,
-		"title": {
-			"text": ''
-		},
-		"tooltip": {
-			"trigger": 'item'
-		},
-		"legend": {
-			"top": 'bottom'
-		},
-		"seriesTemplate": {
-			"name": '',
-			"type": 'pie',
-			"data": [],
-			"radius": "55%",
-			"center": ['50%', '50%'],
-			"rosetype": 'area',
-		},
-	},
-	"funnel": {
-		"color": color,
-		"title": {
-			"text": ''
-		},
-		"tooltip": {
-			"trigger": 'item',
-			"formatter": "{b} : {c}%"
-		},
-		"legend": {
-			"top": 'bottom'
-		},
-		"seriesTemplate": {
-			"name": '',
-			"type": 'funnel',
-			"left": '10%',
-			"top": 60,
-			"bottom": 60,
-			"width": '80%',
-			"min": 0,
-			"max": 100,
-			"minSize": '0%',
-			"maxSize": '100%',
-			"sort": 'descending',
-			"gap": 2,
-			"label": {
-				"show": true,
-				"position": 'inside'
-			},
-			"labelLine": {
-				"length": 10,
-				"lineStyle": {
-					"width": 1,
-					"type": 'solid'
-				}
-			},
-			"itemStyle": {
-				"bordercolor": '#fff',
-				"borderwidth": 1
-			},
-			"emphasis": {
-				"label": {
-					"fontSize": 20
-				}
-			},
-			"data": [],
-		},
-	},
-	"gauge": {
-		"color": color,
-		"tooltip": {
-        "formatter": '{a} <br/>{b} : {c}%'
-    },
-		"seriesTemplate": {
-			"name": '业务指标',
-      "type": 'gauge',
-      "detail": {"formatter": '{value}%'},
-      "data": [{"value": 50, "name": '完成率'}]
-		},
-	},
-	"candle": {
-		"xAxis": {
-			"data": []
-		},
-		"yAxis": {},
-		"color": color,
-		"title": {
-			"text": ''
-		},
-		"dataZoom": [{
-				"type": 'inside',
-				"xAxisIndex": [0, 1],
-				"start": 10,
-				"end": 100
-			},
-			{
-				"show": true,
-				"xAxisIndex": [0, 1],
-				"type": 'slider',
-				"bottom": 10,
-				"start": 10,
-				"end": 100
-			}
-		],
-		"seriesTemplate": {
-			"name": '',
-			"type": 'k',
-			"data": [],
-		},
-	}
-}
-
-export default cfe;

+ 0 - 584
uni_modules/qiun-data-charts/js_sdk/u-charts/config-ucharts.js

@@ -1,584 +0,0 @@
-/*
- * uCharts®
- * 高性能跨平台图表库,支持H5、APP、小程序(微信/支付宝/百度/头条/QQ/360)、Vue、Taro等支持canvas的框架平台
- * Copyright (c) 2021 QIUN®秋云 https://www.ucharts.cn All rights reserved.
- * Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
- * 复制使用请保留本段注释,感谢支持开源!
- * 
- * uCharts®官方网站
- * https://www.uCharts.cn
- * 
- * 开源地址:
- * https://gitee.com/uCharts/uCharts
- * 
- * uni-app插件市场地址:
- * http://ext.dcloud.net.cn/plugin?id=271
- * 
- */
-
-// 主题颜色配置:如每个图表类型需要不同主题,请在对应图表类型上更改color属性
-const color = ['#1890FF', '#91CB74', '#FAC858', '#EE6666', '#73C0DE', '#3CA272', '#FC8452', '#9A60B4', '#ea7ccc'];
-
-//事件转换函数,主要用作格式化x轴为时间轴,根据需求自行修改
-const formatDateTime = (timeStamp, returnType)=>{
-  var date = new Date();
-  date.setTime(timeStamp * 1000);
-  var y = date.getFullYear();
-  var m = date.getMonth() + 1;
-  m = m < 10 ? ('0' + m) : m;
-  var d = date.getDate();
-  d = d < 10 ? ('0' + d) : d;
-  var h = date.getHours();
-  h = h < 10 ? ('0' + h) : h;
-  var minute = date.getMinutes();
-  var second = date.getSeconds();
-  minute = minute < 10 ? ('0' + minute) : minute;
-  second = second < 10 ? ('0' + second) : second;
-  if(returnType == 'full'){return y + '-' + m + '-' + d + ' '+ h +':' + minute + ':' + second;}
-  if(returnType == 'y-m-d'){return y + '-' + m + '-' + d;}
-  if(returnType == 'h:m'){return  h +':' + minute;}
-  if(returnType == 'h:m:s'){return  h +':' + minute +':' + second;}
-  return [y, m, d, h, minute, second];
-}
-
-const cfu = {
-  //demotype为自定义图表类型,一般不需要自定义图表类型,只需要改根节点上对应的类型即可
-	"type":["pie","ring","rose","word","funnel","map","arcbar","line","column","bar","area","radar","gauge","candle","mix","tline","tarea","scatter","bubble","demotype"],
-	"range":["饼状图","圆环图","玫瑰图","词云图","漏斗图","地图","圆弧进度条","折线图","柱状图","条状图","区域图","雷达图","仪表盘","K线图","混合图","时间轴折线","时间轴区域","散点图","气泡图","自定义类型"],
-  //增加自定义图表类型,如果需要categories,请在这里加入您的图表类型,例如最后的"demotype"
-  //自定义类型时需要注意"tline","tarea","scatter","bubble"等时间轴(矢量x轴)类图表,没有categories,不需要加入categories
-	"categories":["line","column","bar","area","radar","gauge","candle","mix","demotype"],
-  //instance为实例变量承载属性,不要删除
-  "instance":{},
-  //option为opts及eopts承载属性,不要删除
-  "option":{},
-  //下面是自定义format配置,因除H5端外的其他端无法通过props传递函数,只能通过此属性对应下标的方式来替换
-  "formatter":{
-    "yAxisDemo1":function(val){return val+'元'},
-    "yAxisDemo2":function(val){return val.toFixed(2)},
-    "xAxisDemo1":function(val){return val+'年'},
-    "xAxisDemo2":function(val){return formatDateTime(val,'h:m')},
-    "seriesDemo1":function(val){return val+'元'},
-    "tooltipDemo1":function(item, category, index, opts){
-      if(index==0){
-      	return '随便用'+item.data+'年'
-      }else{
-      	return '其他我没改'+item.data+'天'
-      }
-    },
-    "pieDemo":function(val, index, series){
-      if(index !== undefined){
-        return series[index].name+':'+series[index].data+'元'
-      }
-    },
-  },
-  //这里演示了自定义您的图表类型的option,可以随意命名,之后在组件上 type="demotype" 后,组件会调用这个花括号里的option,如果组件上还存在opts参数,会将demotype与opts中option合并后渲染图表。
-  "demotype":{
-    //我这里把曲线图当做了自定义图表类型,您可以根据需要随意指定类型或配置
-    "type": "line",
-    "color": color,
-    "padding": [15,10,0,15],
-    "xAxis": {
-      "disableGrid": true,
-    },
-    "yAxis": {
-      "gridType": "dash",
-      "dashLength": 2,
-    },
-    "legend": {
-    },
-    "extra": {
-    	"line": {
-    		"type": "curve",
-    		"width": 2
-    	},
-    }
-  },
-  //下面是自定义配置,请添加项目所需的通用配置
-	"pie":{
-		"type": "pie",
-    "color": color,
-		"padding": [5,5,5,5],
-		"extra": {
-			"pie": {
-				"activeOpacity": 0.5,
-				"activeRadius": 10,
-				"offsetAngle": 0,
-				"labelWidth": 15,
-				"border": true,
-				"borderWidth": 3,
-				"borderColor": "#FFFFFF"
-			},
-		}
-	},
-	"ring":{
-		"type": "ring",
-    "color": color,
-		"padding": [5,5,5,5],
-		"rotate": false,
-		"dataLabel": true,
-		"legend": {
-			"show": true,
-			"position": "right",
-      "lineHeight": 25,
-		},
-		"title": {
-			"name": "收益率",
-			"fontSize": 15,
-			"color": "#666666"
-		},
-		"subtitle": {
-			"name": "70%",
-			"fontSize": 25,
-			"color": "#7cb5ec"
-		},
-		"extra": {
-			"ring": {
-				"ringWidth":30,
-				"activeOpacity": 0.5,
-				"activeRadius": 10,
-				"offsetAngle": 0,
-				"labelWidth": 15,
-				"border": true,
-				"borderWidth": 3,
-				"borderColor": "#FFFFFF"
-			},
-		},
-	},
-	"rose":{
-		"type": "rose",
-    "color": color,
-		"padding": [5,5,5,5],
-		"legend": {
-			"show": true,
-			"position": "left",
-      "lineHeight": 25,
-		},
-		"extra": {
-			"rose": {
-				"type": "area",
-				"minRadius": 50,
-				"activeOpacity": 0.5,
-				"activeRadius": 10,
-				"offsetAngle": 0,
-				"labelWidth": 15,
-				"border": false,
-				"borderWidth": 2,
-				"borderColor": "#FFFFFF"
-			},
-		}
-	},
-	"word":{
-		"type": "word",
-    "color": color,
-		"extra": {
-			"word": {
-				"type": "normal",
-				"autoColors": false
-			}
-		}
-	},
-	"funnel":{
-		"type": "funnel",
-    "color": color,
-		"padding": [15,15,0,15],
-		"extra": {
-			"funnel": {
-				"activeOpacity": 0.3,
-				"activeWidth": 10,
-				"border": true,
-				"borderWidth": 2,
-				"borderColor": "#FFFFFF",
-				"fillOpacity": 1,
-				"labelAlign": "right"
-			},
-		}
-	},
-	"map":{
-		"type": "map",
-    "color": color,
-		"padding": [0,0,0,0],
-    "dataLabel": true,
-		"extra": {
-			"map": {
-				"border": true,
-				"borderWidth": 1,
-				"borderColor": "#666666",
-				"fillOpacity": 0.6,
-				"activeBorderColor": "#F04864",
-				"activeFillColor": "#FACC14",
-				"activeFillOpacity": 1
-			},
-		}
-	},
-	"arcbar":{
-		"type": "arcbar",
-    "color": color,
-		"title": {
-			"name": "百分比",
-			"fontSize": 25,
-			"color": "#00FF00"
-		},
-		"subtitle": {
-			"name": "默认标题",
-			"fontSize": 15,
-			"color": "#666666"
-		},
-		"extra": {
-			"arcbar": {
-				"type": "default",
-				"width": 12,
-				"backgroundColor": "#E9E9E9",
-				"startAngle": 0.75,
-				"endAngle": 0.25,
-				"gap": 2
-			}
-		}
-	},
-	"line":{
-		"type": "line",
-    "color": color,
-		"padding": [15,10,0,15],
-		"xAxis": {
-      "disableGrid": true,
-		},
-		"yAxis": {
-      "gridType": "dash",
-      "dashLength": 2,
-		},
-		"legend": {
-		},
-		"extra": {
-			"line": {
-				"type": "straight",
-				"width": 2
-			},
-		}
-	},
-  "tline":{
-  	"type": "line",
-    "color": color,
-  	"padding": [15,10,0,15],
-  	"xAxis": {
-      "disableGrid": false,
-      "boundaryGap":"justify",
-  	},
-  	"yAxis": {
-      "gridType": "dash",
-      "dashLength": 2,
-      "data":[
-        {
-          "min":0,
-          "max":80
-        }
-      ]
-  	},
-  	"legend": {
-  	},
-  	"extra": {
-  		"line": {
-  			"type": "curve",
-  			"width": 2
-  		},
-  	}
-  },
-  "tarea":{
-  	"type": "area",
-    "color": color,
-  	"padding": [15,10,0,15],
-  	"xAxis": {
-      "disableGrid": true,
-      "boundaryGap":"justify",
-  	},
-  	"yAxis": {
-      "gridType": "dash",
-      "dashLength": 2,
-      "data":[
-        {
-          "min":0,
-          "max":80
-        }
-      ]
-  	},
-  	"legend": {
-  	},
-  	"extra": {
-  		"area": {
-  			"type": "curve",
-  			"opacity": 0.2,
-  			"addLine": true,
-  			"width": 2,
-  			"gradient": true
-  		},
-  	}
-  },
-	"column":{
-		"type": "column",
-    "color": color,
-		"padding": [15,15,0,5],
-		"xAxis": {
-      "disableGrid": true,
-		},
-		"yAxis": {
-      "data":[{"min":0}]
-		},
-		"legend": {
-		},
-		"extra": {
-			"column": {
-				"type": "group",
-				"width": 30,
-				"meterBorde": 1,
-				"meterFillColor": "#FFFFFF",
-				"activeBgColor": "#000000",
-				"activeBgOpacity": 0.08
-			},
-		}
-	},
-  "bar":{
-  	"type": "bar",
-    "color": color,
-  	"padding": [15,30,0,5],
-  	"xAxis": {
-      "boundaryGap":"justify",
-      "disableGrid":false,
-      "min":0,
-      "axisLine":false
-  	},
-  	"yAxis": {
-  	},
-  	"legend": {
-  	},
-  	"extra": {
-  		"bar": {
-  			"type": "group",
-  			"width": 30,
-  			"meterBorde": 1,
-  			"meterFillColor": "#FFFFFF",
-  			"activeBgColor": "#000000",
-  			"activeBgOpacity": 0.08
-  		},
-  	}
-  },
-	"area":{
-		"type": "area",
-		"color": color,
-		"padding": [15,15,0,15],
-		"xAxis": {
-      "disableGrid": true,
-		},
-		"yAxis": {
-      "gridType": "dash",
-      "dashLength": 2,
-		},
-		"legend": {
-		},
-		"extra": {
-			"area": {
-				"type": "straight",
-				"opacity": 0.2,
-				"addLine": true,
-				"width": 2,
-				"gradient": false
-			},
-		}
-	},
-	"radar":{
-		"type": "radar",
-		"color": color,
-		"padding": [5,5,5,5],
-    "dataLabel": false,
-		"legend": {
-			"show": true,
-			"position": "right",
-      "lineHeight": 25,
-		},
-		"extra": {
-			"radar": {
-				"gridType": "radar",
-				"gridColor": "#CCCCCC",
-				"gridCount": 3,
-				"opacity": 0.2,
-				"max": 200
-			},
-		}
-	},
-	"gauge":{
-		"type": "gauge",
-		"color": color,
-		"title": {
-			"name": "66Km/H",
-			"fontSize": 25,
-			"color": "#2fc25b",
-			"offsetY": 50
-		},
-		"subtitle": {
-			"name": "实时速度",
-			"fontSize": 15,
-			"color": "#1890ff",
-			"offsetY": -50
-		},
-		"extra": {
-			"gauge": {
-				"type": "default",
-				"width": 30,
-				"labelColor": "#666666",
-				"startAngle": 0.75,
-				"endAngle": 0.25,
-				"startNumber": 0,
-				"endNumber": 100,
-				"labelFormat": "",
-				"splitLine": {
-					"fixRadius": 0,
-					"splitNumber": 10,
-					"width": 30,
-					"color": "#FFFFFF",
-					"childNumber": 5,
-					"childWidth": 12
-				},
-				"pointer": {
-					"width": 24,
-					"color": "auto"
-				}
-			}
-		}
-	},
-	"candle":{
-		"type": "candle",
-		"color": color,
-		"padding": [15,15,0,15],
-		"enableScroll": true,
-		"enableMarkLine": true,
-		"dataLabel": false,
-		"xAxis": {
-			"labelCount": 4,
-			"itemCount": 40,
-			"disableGrid": true,
-			"gridColor": "#CCCCCC",
-			"gridType": "solid",
-			"dashLength": 4,
-			"scrollShow": true,
-			"scrollAlign": "left",
-			"scrollColor": "#A6A6A6",
-			"scrollBackgroundColor": "#EFEBEF"
-		},
-		"yAxis": {
-		},
-		"legend": {
-		},
-		"extra": {
-			"candle": {
-				"color": {
-					"upLine": "#f04864",
-					"upFill": "#f04864",
-					"downLine": "#2fc25b",
-					"downFill": "#2fc25b"
-				},
-				"average": {
-					"show": true,
-					"name": ["MA5","MA10","MA30"],
-					"day": [5,10,20],
-					"color": ["#1890ff","#2fc25b","#facc14"]
-				}
-			},
-			"markLine": {
-				"type": "dash",
-				"dashLength": 5,
-				"data": [
-					{
-						"value": 2150,
-						"lineColor": "#f04864",
-						"showLabel": true
-					},
-					{
-						"value": 2350,
-						"lineColor": "#f04864",
-						"showLabel": true
-					}
-				]
-			}
-		}
-	},
-	"mix":{
-		"type": "mix",
-		"color": color,
-		"padding": [15,15,0,15],
-		"xAxis": {
-      "disableGrid": true,
-		},
-		"yAxis": {
-			"disabled": false,
-			"disableGrid": false,
-			"splitNumber": 5,
-			"gridType": "dash",
-			"dashLength": 4,
-			"gridColor": "#CCCCCC",
-			"padding": 10,
-			"showTitle": true,
-			"data": []
-		},
-		"legend": {
-		},
-		"extra": {
-			"mix": {
-				"column": {
-					"width": 20
-				}
-			},
-		}
-	},
-	"scatter":{
-		"type": "scatter",
-		"color":color,
-		"padding":[15,15,0,15],
-    "dataLabel":false,
-    "xAxis": {
-      "disableGrid": false,
-      "gridType":"dash",
-      "splitNumber":5,
-      "boundaryGap":"justify",
-      "min":0
-    },
-    "yAxis": {
-      "disableGrid": false,
-      "gridType":"dash",
-    },
-    "legend": {
-    },
-    "extra": {
-    	"scatter": {
-    	},
-    }
-	},
-	"bubble":{
-		"type": "bubble",
-		"color":color,
-		"padding":[15,15,0,15],
-    "xAxis": {
-      "disableGrid": false,
-      "gridType":"dash",
-      "splitNumber":5,
-      "boundaryGap":"justify",
-      "min":0,
-      "max":250
-    },
-    "yAxis": {
-      "disableGrid": false,
-      "gridType":"dash",
-      "data":[{
-        "min":0,
-        "max":150
-      }]
-    },
-    "legend": {
-    },
-    "extra": {
-    	"bubble": {
-        "border":2,
-        "opacity": 0.5,
-    	},
-    }
-	}
-}
-
-export default cfu;

+ 0 - 12
uni_modules/qiun-data-charts/js_sdk/u-charts/readme.md

@@ -1,12 +0,0 @@
-# uCharts JSSDK说明
-1、如不使用uCharts组件,可直接引用u-charts.js,打包编译后会`自动压缩`,压缩后体积约为`98kb`。
-2、如果100kb的体积仍需压缩,请手动删除u-charts.js内您不需要的图表类型,如k线图candle。
-3、config-ucharts.js为uCharts组件的用户配置文件,升级前请`自行备份config-ucharts.js`文件,以免被强制覆盖。
-3、config-echarts.js为ECharts组件的用户配置文件,升级前请`自行备份config-echarts.js`文件,以免被强制覆盖。
-
-# v1.0转v2.0注意事项
-1、opts.colors变更为opts.color
-2、ring圆环图的扩展配置由extra.pie变更为extra.ring
-3、混合图借用的扩展配置由extra.column变更为extra.mix.column
-4、全部涉及到format的格式化属性变更为formatter
-5、不需要再传canvasId及$this参数,如果通过uChats获取context,可能会导致this实例混乱,导致小程序开发者工具报错。如果不使用qiun-data-charts官方组件,需要在new uCharts()实例化之前,自行获取canvas的上下文context(ctx),并传入new中的context(opts.context)。为了能跨更多的端,给您带来的不便敬请谅解。

+ 0 - 6809
uni_modules/qiun-data-charts/js_sdk/u-charts/u-charts.js

@@ -1,6809 +0,0 @@
-/*
- * uCharts®
- * 高性能跨平台图表库,支持H5、APP、小程序(微信/支付宝/百度/头条/QQ/360)、Vue、Taro等支持canvas的框架平台
- * Copyright (c) 2021 QIUN®秋云 https://www.ucharts.cn All rights reserved.
- * Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
- * 复制使用请保留本段注释,感谢支持开源!
- * 
- * uCharts®官方网站
- * https://www.uCharts.cn
- * 
- * 开源地址:
- * https://gitee.com/uCharts/uCharts
- * 
- * uni-app插件市场地址:
- * http://ext.dcloud.net.cn/plugin?id=271
- * 
- */
-
-'use strict';
-
-var config = {
-  version: 'v2.3.6-20211201',
-  yAxisWidth: 15,
-  yAxisSplit: 5,
-  xAxisHeight: 22,
-  xAxisLineHeight: 22,
-  legendHeight: 15,
-  yAxisTitleWidth: 15,
-  padding: [10, 10, 10, 10],
-  pixelRatio: 1,
-  rotate: false,
-  columePadding: 3,
-  fontSize: 13,
-  fontColor: '#666666',
-  dataPointShape: ['circle', 'circle', 'circle', 'circle'],
-  color: ['#1890FF', '#91CB74', '#FAC858', '#EE6666', '#73C0DE', '#3CA272', '#FC8452', '#9A60B4', '#ea7ccc'],
-  linearColor: ['#0EE2F8', '#2BDCA8', '#FA7D8D', '#EB88E2', '#2AE3A0', '#0EE2F8', '#EB88E2', '#6773E3', '#F78A85'],
-  pieChartLinePadding: 15,
-  pieChartTextPadding: 5,
-  xAxisTextPadding: 3,
-  titleColor: '#333333',
-  titleFontSize: 20,
-  subtitleColor: '#999999',
-  subtitleFontSize: 15,
-  toolTipPadding: 3,
-  toolTipBackground: '#000000',
-  toolTipOpacity: 0.7,
-  toolTipLineHeight: 20,
-  radarLabelTextMargin: 13,
-  gaugeLabelTextMargin: 13
-};
-
-var assign = function(target, ...varArgs) {
-  if (target == null) {
-    throw new TypeError('[uCharts] Cannot convert undefined or null to object');
-  }
-  if (!varArgs || varArgs.length <= 0) {
-    return target;
-  }
-  // 深度合并对象
-  function deepAssign(obj1, obj2) {
-    for (let key in obj2) {
-      obj1[key] = obj1[key] && obj1[key].toString() === "[object Object]" ?
-        deepAssign(obj1[key], obj2[key]) : obj1[key] = obj2[key];
-    }
-    return obj1;
-  }
-  varArgs.forEach(val => {
-    target = deepAssign(target, val);
-  });
-  return target;
-};
-
-var util = {
-  toFixed: function toFixed(num, limit) {
-    limit = limit || 2;
-    if (this.isFloat(num)) {
-      num = num.toFixed(limit);
-    }
-    return num;
-  },
-  isFloat: function isFloat(num) {
-    return num % 1 !== 0;
-  },
-  approximatelyEqual: function approximatelyEqual(num1, num2) {
-    return Math.abs(num1 - num2) < 1e-10;
-  },
-  isSameSign: function isSameSign(num1, num2) {
-    return Math.abs(num1) === num1 && Math.abs(num2) === num2 || Math.abs(num1) !== num1 && Math.abs(num2) !== num2;
-  },
-  isSameXCoordinateArea: function isSameXCoordinateArea(p1, p2) {
-    return this.isSameSign(p1.x, p2.x);
-  },
-  isCollision: function isCollision(obj1, obj2) {
-    obj1.end = {};
-    obj1.end.x = obj1.start.x + obj1.width;
-    obj1.end.y = obj1.start.y - obj1.height;
-    obj2.end = {};
-    obj2.end.x = obj2.start.x + obj2.width;
-    obj2.end.y = obj2.start.y - obj2.height;
-    var flag = obj2.start.x > obj1.end.x || obj2.end.x < obj1.start.x || obj2.end.y > obj1.start.y || obj2.start.y < obj1.end.y;
-    return !flag;
-  }
-};
-
-//兼容H5点击事件
-function getH5Offset(e) {
-  e.mp = {
-    changedTouches: []
-  };
-  e.mp.changedTouches.push({
-    x: e.offsetX,
-    y: e.offsetY
-  });
-  return e;
-}
-
-// 经纬度转墨卡托
-function lonlat2mercator(longitude, latitude) {
-  var mercator = Array(2);
-  var x = longitude * 20037508.34 / 180;
-  var y = Math.log(Math.tan((90 + latitude) * Math.PI / 360)) / (Math.PI / 180);
-  y = y * 20037508.34 / 180;
-  mercator[0] = x;
-  mercator[1] = y;
-  return mercator;
-}
-
-// 墨卡托转经纬度
-function mercator2lonlat(longitude, latitude) {
-  var lonlat = Array(2)
-  var x = longitude / 20037508.34 * 180;
-  var y = latitude / 20037508.34 * 180;
-  y = 180 / Math.PI * (2 * Math.atan(Math.exp(y * Math.PI / 180)) - Math.PI / 2);
-  lonlat[0] = x;
-  lonlat[1] = y;
-  return lonlat;
-}
-
-// hex 转 rgba
-function hexToRgb(hexValue, opc) {
-  var rgx = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
-  var hex = hexValue.replace(rgx, function(m, r, g, b) {
-    return r + r + g + g + b + b;
-  });
-  var rgb = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
-  var r = parseInt(rgb[1], 16);
-  var g = parseInt(rgb[2], 16);
-  var b = parseInt(rgb[3], 16);
-  return 'rgba(' + r + ',' + g + ',' + b + ',' + opc + ')';
-}
-
-function findRange(num, type, limit) {
-  if (isNaN(num)) {
-    throw new Error('[uCharts] series数据需为Number格式');
-  }
-  limit = limit || 10;
-  type = type ? type : 'upper';
-  var multiple = 1;
-  while (limit < 1) {
-    limit *= 10;
-    multiple *= 10;
-  }
-  if (type === 'upper') {
-    num = Math.ceil(num * multiple);
-  } else {
-    num = Math.floor(num * multiple);
-  }
-  while (num % limit !== 0) {
-    if (type === 'upper') {
-      num++;
-    } else {
-      num--;
-    }
-  }
-  return num / multiple;
-}
-
-function calCandleMA(dayArr, nameArr, colorArr, kdata) {
-  let seriesTemp = [];
-  for (let k = 0; k < dayArr.length; k++) {
-    let seriesItem = {
-      data: [],
-      name: nameArr[k],
-      color: colorArr[k]
-    };
-    for (let i = 0, len = kdata.length; i < len; i++) {
-      if (i < dayArr[k]) {
-        seriesItem.data.push(null);
-        continue;
-      }
-      let sum = 0;
-      for (let j = 0; j < dayArr[k]; j++) {
-        sum += kdata[i - j][1];
-      }
-      seriesItem.data.push(+(sum / dayArr[k]).toFixed(3));
-    }
-    seriesTemp.push(seriesItem);
-  }
-  return seriesTemp;
-}
-
-function calValidDistance(self, distance, chartData, config, opts) {
-  var dataChartAreaWidth = opts.width - opts.area[1] - opts.area[3];
-  var dataChartWidth = chartData.eachSpacing * (opts.chartData.xAxisData.xAxisPoints.length - 1);
-  var validDistance = distance;
-  if (distance >= 0) {
-    validDistance = 0;
-    self.uevent.trigger('scrollLeft');
-    self.scrollOption.position = 'left'
-    opts.xAxis.scrollPosition = 'left';
-  } else if (Math.abs(distance) >= dataChartWidth - dataChartAreaWidth) {
-    validDistance = dataChartAreaWidth - dataChartWidth;
-    self.uevent.trigger('scrollRight');
-    self.scrollOption.position = 'right'
-    opts.xAxis.scrollPosition = 'right';
-  } else {
-    self.scrollOption.position = distance
-    opts.xAxis.scrollPosition = distance;
-  }
-  return validDistance;
-}
-
-function isInAngleRange(angle, startAngle, endAngle) {
-  function adjust(angle) {
-    while (angle < 0) {
-      angle += 2 * Math.PI;
-    }
-    while (angle > 2 * Math.PI) {
-      angle -= 2 * Math.PI;
-    }
-    return angle;
-  }
-  angle = adjust(angle);
-  startAngle = adjust(startAngle);
-  endAngle = adjust(endAngle);
-  if (startAngle > endAngle) {
-    endAngle += 2 * Math.PI;
-    if (angle < startAngle) {
-      angle += 2 * Math.PI;
-    }
-  }
-  return angle >= startAngle && angle <= endAngle;
-}
-
-function calRotateTranslate(x, y, h) {
-  var xv = x;
-  var yv = h - y;
-  var transX = xv + (h - yv - xv) / Math.sqrt(2);
-  transX *= -1;
-  var transY = (h - yv) * (Math.sqrt(2) - 1) - (h - yv - xv) / Math.sqrt(2);
-  return {
-    transX: transX,
-    transY: transY
-  };
-}
-
-function createCurveControlPoints(points, i) {
-  function isNotMiddlePoint(points, i) {
-    if (points[i - 1] && points[i + 1]) {
-      return points[i].y >= Math.max(points[i - 1].y, points[i + 1].y) || points[i].y <= Math.min(points[i - 1].y,
-        points[i + 1].y);
-    } else {
-      return false;
-    }
-  }
-  function isNotMiddlePointX(points, i) {
-    if (points[i - 1] && points[i + 1]) {
-      return points[i].x >= Math.max(points[i - 1].x, points[i + 1].x) || points[i].x <= Math.min(points[i - 1].x,
-        points[i + 1].x);
-    } else {
-      return false;
-    }
-  }
-  var a = 0.2;
-  var b = 0.2;
-  var pAx = null;
-  var pAy = null;
-  var pBx = null;
-  var pBy = null;
-  if (i < 1) {
-    pAx = points[0].x + (points[1].x - points[0].x) * a;
-    pAy = points[0].y + (points[1].y - points[0].y) * a;
-  } else {
-    pAx = points[i].x + (points[i + 1].x - points[i - 1].x) * a;
-    pAy = points[i].y + (points[i + 1].y - points[i - 1].y) * a;
-  }
-
-  if (i > points.length - 3) {
-    var last = points.length - 1;
-    pBx = points[last].x - (points[last].x - points[last - 1].x) * b;
-    pBy = points[last].y - (points[last].y - points[last - 1].y) * b;
-  } else {
-    pBx = points[i + 1].x - (points[i + 2].x - points[i].x) * b;
-    pBy = points[i + 1].y - (points[i + 2].y - points[i].y) * b;
-  }
-  if (isNotMiddlePoint(points, i + 1)) {
-    pBy = points[i + 1].y;
-  }
-  if (isNotMiddlePoint(points, i)) {
-    pAy = points[i].y;
-  }
-  if (isNotMiddlePointX(points, i + 1)) {
-    pBx = points[i + 1].x;
-  }
-  if (isNotMiddlePointX(points, i)) {
-    pAx = points[i].x;
-  }
-  if (pAy >= Math.max(points[i].y, points[i + 1].y) || pAy <= Math.min(points[i].y, points[i + 1].y)) {
-    pAy = points[i].y;
-  }
-  if (pBy >= Math.max(points[i].y, points[i + 1].y) || pBy <= Math.min(points[i].y, points[i + 1].y)) {
-    pBy = points[i + 1].y;
-  }
-  if (pAx >= Math.max(points[i].x, points[i + 1].x) || pAx <= Math.min(points[i].x, points[i + 1].x)) {
-    pAx = points[i].x;
-  }
-  if (pBx >= Math.max(points[i].x, points[i + 1].x) || pBx <= Math.min(points[i].x, points[i + 1].x)) {
-    pBx = points[i + 1].x;
-  }
-  return {
-    ctrA: {
-      x: pAx,
-      y: pAy
-    },
-    ctrB: {
-      x: pBx,
-      y: pBy
-    }
-  };
-}
-
-function convertCoordinateOrigin(x, y, center) {
-  return {
-    x: center.x + x,
-    y: center.y - y
-  };
-}
-
-function avoidCollision(obj, target) {
-  if (target) {
-    // is collision test
-    while (util.isCollision(obj, target)) {
-      if (obj.start.x > 0) {
-        obj.start.y--;
-      } else if (obj.start.x < 0) {
-        obj.start.y++;
-      } else {
-        if (obj.start.y > 0) {
-          obj.start.y++;
-        } else {
-          obj.start.y--;
-        }
-      }
-    }
-  }
-  return obj;
-}
-
-function fixPieSeries(series, opts, config){
-  let pieSeriesArr = [];
-  if(series.length>0 && series[0].data.constructor.toString().indexOf('Array') > -1){
-    opts._pieSeries_ = series;
-    let oldseries = series[0].data;
-    for (var i = 0; i < oldseries.length; i++) {
-      oldseries[i].formatter = series[0].formatter;
-      oldseries[i].data = oldseries[i].value;
-      pieSeriesArr.push(oldseries[i]);
-    }
-    opts.series = pieSeriesArr;
-  }else{
-    pieSeriesArr = series;
-  }
-  return pieSeriesArr;
-}
-
-function fillSeries(series, opts, config) {
-  var index = 0;
-  for (var i = 0; i < series.length; i++) {
-    let item = series[i];
-    if (!item.color) {
-      item.color = config.color[index];
-      index = (index + 1) % config.color.length;
-    }
-    if (!item.linearIndex) {
-      item.linearIndex = i;
-    }
-    if (!item.index) {
-      item.index = 0;
-    }
-    if (!item.type) {
-      item.type = opts.type;
-    }
-    if (typeof item.show == "undefined") {
-      item.show = true;
-    }
-    if (!item.type) {
-      item.type = opts.type;
-    }
-    if (!item.pointShape) {
-      item.pointShape = "circle";
-    }
-    if (!item.legendShape) {
-      switch (item.type) {
-        case 'line':
-          item.legendShape = "line";
-          break;
-        case 'column':
-          item.legendShape = "rect";
-          break;
-        case 'area':
-          item.legendShape = "triangle";
-          break;
-        case 'bar':
-          item.legendShape = "rect";
-          break;
-        default:
-          item.legendShape = "circle";
-      }
-    }
-  }
-  return series;
-}
-
-function fillCustomColor(linearType, customColor, series, config) {
-  var newcolor = customColor || [];
-  if (linearType == 'custom' && newcolor.length == 0 ) {
-    newcolor = config.linearColor;
-  }
-  if (linearType == 'custom' && newcolor.length < series.length) {
-    let chazhi = series.length - newcolor.length;
-    for (var i = 0; i < chazhi; i++) {
-      newcolor.push(config.linearColor[(i + 1) % config.linearColor.length]);
-    }
-  }
-  return newcolor;
-}
-  
-function getDataRange(minData, maxData) {
-  var limit = 0;
-  var range = maxData - minData;
-  if (range >= 10000) {
-    limit = 1000;
-  } else if (range >= 1000) {
-    limit = 100;
-  } else if (range >= 100) {
-    limit = 10;
-  } else if (range >= 10) {
-    limit = 5;
-  } else if (range >= 1) {
-    limit = 1;
-  } else if (range >= 0.1) {
-    limit = 0.1;
-  } else if (range >= 0.01) {
-    limit = 0.01;
-  } else if (range >= 0.001) {
-    limit = 0.001;
-  } else if (range >= 0.0001) {
-    limit = 0.0001;
-  } else if (range >= 0.00001) {
-    limit = 0.00001;
-  } else {
-    limit = 0.000001;
-  }
-  return {
-    minRange: findRange(minData, 'lower', limit),
-    maxRange: findRange(maxData, 'upper', limit)
-  };
-}
-
-function measureText(text, fontSize, context) {
-  var width = 0;
-  text = String(text);
-  // #ifdef MP-ALIPAY || MP-BAIDU || APP-NVUE
-  context = false;
-  // #endif
-  if (context !== false && context !== undefined && context.setFontSize && context.measureText) {
-    context.setFontSize(fontSize);
-    return context.measureText(text).width;
-  } else {
-    var text = text.split('');
-    for (let i = 0; i < text.length; i++) {
-      let item = text[i];
-      if (/[a-zA-Z]/.test(item)) {
-        width += 7;
-      } else if (/[0-9]/.test(item)) {
-        width += 5.5;
-      } else if (/\./.test(item)) {
-        width += 2.7;
-      } else if (/-/.test(item)) {
-        width += 3.25;
-      } else if (/:/.test(item)) {
-        width += 2.5;
-      } else if (/[\u4e00-\u9fa5]/.test(item)) {
-        width += 10;
-      } else if (/\(|\)/.test(item)) {
-        width += 3.73;
-      } else if (/\s/.test(item)) {
-        width += 2.5;
-      } else if (/%/.test(item)) {
-        width += 8;
-      } else {
-        width += 10;
-      }
-    }
-    return width * fontSize / 10;
-  }
-}
-
-function dataCombine(series) {
-  return series.reduce(function(a, b) {
-    return (a.data ? a.data : a).concat(b.data);
-  }, []);
-}
-
-function dataCombineStack(series, len) {
-  var sum = new Array(len);
-  for (var j = 0; j < sum.length; j++) {
-    sum[j] = 0;
-  }
-  for (var i = 0; i < series.length; i++) {
-    for (var j = 0; j < sum.length; j++) {
-      sum[j] += series[i].data[j];
-    }
-  }
-  return series.reduce(function(a, b) {
-    return (a.data ? a.data : a).concat(b.data).concat(sum);
-  }, []);
-}
-
-function getTouches(touches, opts, e) {
-  let x, y;
-  if (touches.clientX) {
-    if (opts.rotate) {
-      y = opts.height - touches.clientX * opts.pix;
-      x = (touches.pageY - e.currentTarget.offsetTop - (opts.height / opts.pix / 2) * (opts.pix - 1)) * opts.pix;
-    } else {
-      x = touches.clientX * opts.pix;
-      y = (touches.pageY - e.currentTarget.offsetTop - (opts.height / opts.pix / 2) * (opts.pix - 1)) * opts.pix;
-    }
-  } else {
-    if (opts.rotate) {
-      y = opts.height - touches.x * opts.pix;
-      x = touches.y * opts.pix;
-    } else {
-      x = touches.x * opts.pix;
-      y = touches.y * opts.pix;
-    }
-  }
-  return {
-    x: x,
-    y: y
-  }
-}
-
-function getSeriesDataItem(series, index, group) {
-  var data = [];
-  var newSeries = [];
-  var indexIsArr = index.constructor.toString().indexOf('Array') > -1;
-  if(indexIsArr){
-    let tempSeries = filterSeries(series);
-    for (var i = 0; i < group.length; i++) {
-      newSeries.push(tempSeries[group[i]]);
-    }
-  }else{
-    newSeries = series;
-  };
-  for (let i = 0; i < newSeries.length; i++) {
-    let item = newSeries[i];
-    let tmpindex = -1;
-    if(indexIsArr){
-      tmpindex = index[i];
-    }else{
-      tmpindex = index;
-    }
-    if (item.data[tmpindex] !== null && typeof item.data[tmpindex] !== 'undefined' && item.show) {
-      let seriesItem = {};
-      seriesItem.color = item.color;
-      seriesItem.type = item.type;
-      seriesItem.style = item.style;
-      seriesItem.pointShape = item.pointShape;
-      seriesItem.disableLegend = item.disableLegend;
-      seriesItem.name = item.name;
-      seriesItem.show = item.show;
-      seriesItem.data = item.formatter ? item.formatter(item.data[tmpindex]) : item.data[tmpindex];
-      data.push(seriesItem);
-    }
-  }
-  return data;
-}
-
-function getMaxTextListLength(list, fontSize, context) {
-  var lengthList = list.map(function(item) {
-    return measureText(item, fontSize, context);
-  });
-  return Math.max.apply(null, lengthList);
-}
-
-function getRadarCoordinateSeries(length) {
-  var eachAngle = 2 * Math.PI / length;
-  var CoordinateSeries = [];
-  for (var i = 0; i < length; i++) {
-    CoordinateSeries.push(eachAngle * i);
-  }
-  return CoordinateSeries.map(function(item) {
-    return -1 * item + Math.PI / 2;
-  });
-}
-
-function getToolTipData(seriesData, opts, index, group, categories) {
-  var option = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
-  var calPoints = opts.chartData.calPoints?opts.chartData.calPoints:[];
-  let points = {};
-  if(group.length > 0){
-    let filterPoints = [];
-    for (let i = 0; i < group.length; i++) {
-      filterPoints.push(calPoints[group[i]])
-    }
-    points = filterPoints[0][index[0]];
-  }else{
-    points = calPoints[0][index];
-  };
-  var textList = seriesData.map(function(item) {
-    let titleText = null;
-    if (opts.categories && opts.categories.length>0) {
-      titleText = categories[index];
-    };
-    return {
-      text: option.formatter ? option.formatter(item, titleText, index, opts) : item.name + ': ' + item.data,
-      color: item.color
-    };
-  });
-  var offset = {
-    x: Math.round(points.x),
-    y: Math.round(points.y)
-  };
-  return {
-    textList: textList,
-    offset: offset
-  };
-}
-
-function getMixToolTipData(seriesData, opts, index, categories) {
-  var option = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
-  var points = opts.chartData.xAxisPoints[index] + opts.chartData.eachSpacing / 2;
-  var textList = seriesData.map(function(item) {
-    return {
-      text: option.formatter ? option.formatter(item, categories[index], index, opts) : item.name + ': ' + item.data,
-      color: item.color,
-      disableLegend: item.disableLegend ? true : false
-    };
-  });
-  textList = textList.filter(function(item) {
-    if (item.disableLegend !== true) {
-      return item;
-    }
-  });
-  var offset = {
-    x: Math.round(points),
-    y: 0
-  };
-  return {
-    textList: textList,
-    offset: offset
-  };
-}
-
-function getCandleToolTipData(series, seriesData, opts, index, categories, extra) {
-  var option = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {};
-  var calPoints = opts.chartData.calPoints;
-  let upColor = extra.color.upFill;
-  let downColor = extra.color.downFill;
-  //颜色顺序为开盘,收盘,最低,最高
-  let color = [upColor, upColor, downColor, upColor];
-  var textList = [];
-  seriesData.map(function(item) {
-    if (index == 0) {
-      if (item.data[1] - item.data[0] < 0) {
-        color[1] = downColor;
-      } else {
-        color[1] = upColor;
-      }
-    } else {
-      if (item.data[0] < series[index - 1][1]) {
-        color[0] = downColor;
-      }
-      if (item.data[1] < item.data[0]) {
-        color[1] = downColor;
-      }
-      if (item.data[2] > series[index - 1][1]) {
-        color[2] = upColor;
-      }
-      if (item.data[3] < series[index - 1][1]) {
-        color[3] = downColor;
-      }
-    }
-    let text1 = {
-      text: '开盘:' + item.data[0],
-      color: color[0]
-    };
-    let text2 = {
-      text: '收盘:' + item.data[1],
-      color: color[1]
-    };
-    let text3 = {
-      text: '最低:' + item.data[2],
-      color: color[2]
-    };
-    let text4 = {
-      text: '最高:' + item.data[3],
-      color: color[3]
-    };
-    textList.push(text1, text2, text3, text4);
-  });
-  var validCalPoints = [];
-  var offset = {
-    x: 0,
-    y: 0
-  };
-  for (let i = 0; i < calPoints.length; i++) {
-    let points = calPoints[i];
-    if (typeof points[index] !== 'undefined' && points[index] !== null) {
-      validCalPoints.push(points[index]);
-    }
-  }
-  offset.x = Math.round(validCalPoints[0][0].x);
-  return {
-    textList: textList,
-    offset: offset
-  };
-}
-
-function filterSeries(series) {
-  let tempSeries = [];
-  for (let i = 0; i < series.length; i++) {
-    if (series[i].show == true) {
-      tempSeries.push(series[i])
-    }
-  }
-  return tempSeries;
-}
-
-function findCurrentIndex(currentPoints, calPoints, opts, config) {
-  var offset = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
-  var current={ index:-1, group:[] };
-  var spacing = opts.chartData.eachSpacing / 2;
-  let xAxisPoints = [];
-  if (calPoints && calPoints.length > 0) {
-    if (!opts.categories) {
-      spacing = 0;
-    }else{
-      for (let i = 1; i < opts.chartData.xAxisPoints.length; i++) {
-        xAxisPoints.push(opts.chartData.xAxisPoints[i] - spacing);
-      }
-      if ((opts.type == 'line' || opts.type == 'area') && opts.xAxis.boundaryGap == 'justify') {
-        xAxisPoints = opts.chartData.xAxisPoints;
-      }
-    }
-    if (isInExactChartArea(currentPoints, opts, config)) {
-      if (!opts.categories) {
-        let timePoints = Array(calPoints.length);
-        for (let i = 0; i < calPoints.length; i++) {
-          timePoints[i] = Array(calPoints[i].length)
-          for (let j = 0; j < calPoints[i].length; j++) {
-            timePoints[i][j] = (Math.abs(calPoints[i][j].x - currentPoints.x));
-          }
-        };
-        let pointValue =  Array(timePoints.length);
-        let pointIndex =  Array(timePoints.length);
-        for (let i = 0; i < timePoints.length; i++) {
-          pointValue[i] = Math.min.apply(null, timePoints[i]);
-          pointIndex[i] = timePoints[i].indexOf(pointValue[i]);
-        }
-        let minValue = Math.min.apply(null, pointValue);
-        current.index = [];
-        for (let i = 0; i < pointValue.length; i++) {
-          if(pointValue[i] == minValue){
-            current.group.push(i);
-            current.index.push(pointIndex[i]);
-          }
-        };
-      }else{
-        xAxisPoints.forEach(function(item, index) {
-          if (currentPoints.x + offset + spacing > item) {
-            current.index = index;
-          }
-        });
-      }
-    }
-  }
-  return current;
-}
-
-function findBarChartCurrentIndex(currentPoints, calPoints, opts, config) {
-  var offset = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
-  var current={ index:-1, group:[] };
-  var spacing = opts.chartData.eachSpacing / 2;
-  let yAxisPoints = opts.chartData.yAxisPoints;
-  if (calPoints && calPoints.length > 0) {
-    if (isInExactChartArea(currentPoints, opts, config)) {
-      yAxisPoints.forEach(function(item, index) {
-        if (currentPoints.y + offset + spacing > item) {
-          current.index = index;
-        }
-      });
-    }
-  }
-  return current;
-}
-
-function findLegendIndex(currentPoints, legendData, opts) {
-  let currentIndex = -1;
-  let gap = 0;
-  if (isInExactLegendArea(currentPoints, legendData.area)) {
-    let points = legendData.points;
-    let index = -1;
-    for (let i = 0, len = points.length; i < len; i++) {
-      let item = points[i];
-      for (let j = 0; j < item.length; j++) {
-        index += 1;
-        let area = item[j]['area'];
-        if (area && currentPoints.x > area[0] - gap && currentPoints.x < area[2] + gap && currentPoints.y > area[1] - gap && currentPoints.y < area[3] + gap) {
-          currentIndex = index;
-          break;
-        }
-      }
-    }
-    return currentIndex;
-  }
-  return currentIndex;
-}
-
-function isInExactLegendArea(currentPoints, area) {
-  return currentPoints.x > area.start.x && currentPoints.x < area.end.x && currentPoints.y > area.start.y && currentPoints.y < area.end.y;
-}
-
-function isInExactChartArea(currentPoints, opts, config) {
-  return currentPoints.x <= opts.width - opts.area[1] + 10 && currentPoints.x >= opts.area[3] - 10 && currentPoints.y >= opts.area[0] && currentPoints.y <= opts.height - opts.area[2];
-}
-
-function findRadarChartCurrentIndex(currentPoints, radarData, count) {
-  var eachAngleArea = 2 * Math.PI / count;
-  var currentIndex = -1;
-  if (isInExactPieChartArea(currentPoints, radarData.center, radarData.radius)) {
-    var fixAngle = function fixAngle(angle) {
-      if (angle < 0) {
-        angle += 2 * Math.PI;
-      }
-      if (angle > 2 * Math.PI) {
-        angle -= 2 * Math.PI;
-      }
-      return angle;
-    };
-    var angle = Math.atan2(radarData.center.y - currentPoints.y, currentPoints.x - radarData.center.x);
-    angle = -1 * angle;
-    if (angle < 0) {
-      angle += 2 * Math.PI;
-    }
-    var angleList = radarData.angleList.map(function(item) {
-      item = fixAngle(-1 * item);
-      return item;
-    });
-    angleList.forEach(function(item, index) {
-      var rangeStart = fixAngle(item - eachAngleArea / 2);
-      var rangeEnd = fixAngle(item + eachAngleArea / 2);
-      if (rangeEnd < rangeStart) {
-        rangeEnd += 2 * Math.PI;
-      }
-      if (angle >= rangeStart && angle <= rangeEnd || angle + 2 * Math.PI >= rangeStart && angle + 2 * Math.PI <= rangeEnd) {
-        currentIndex = index;
-      }
-    });
-  }
-  return currentIndex;
-}
-
-function findFunnelChartCurrentIndex(currentPoints, funnelData) {
-  var currentIndex = -1;
-  for (var i = 0, len = funnelData.series.length; i < len; i++) {
-    var item = funnelData.series[i];
-    if (currentPoints.x > item.funnelArea[0] && currentPoints.x < item.funnelArea[2] && currentPoints.y > item.funnelArea[1] && currentPoints.y < item.funnelArea[3]) {
-      currentIndex = i;
-      break;
-    }
-  }
-  return currentIndex;
-}
-
-function findWordChartCurrentIndex(currentPoints, wordData) {
-  var currentIndex = -1;
-  for (var i = 0, len = wordData.length; i < len; i++) {
-    var item = wordData[i];
-    if (currentPoints.x > item.area[0] && currentPoints.x < item.area[2] && currentPoints.y > item.area[1] && currentPoints.y < item.area[3]) {
-      currentIndex = i;
-      break;
-    }
-  }
-  return currentIndex;
-}
-
-function findMapChartCurrentIndex(currentPoints, opts) {
-  var currentIndex = -1;
-  var cData = opts.chartData.mapData;
-  var data = opts.series;
-  var tmp = pointToCoordinate(currentPoints.y, currentPoints.x, cData.bounds, cData.scale, cData.xoffset, cData.yoffset);
-  var poi = [tmp.x, tmp.y];
-  for (var i = 0, len = data.length; i < len; i++) {
-    var item = data[i].geometry.coordinates;
-    if (isPoiWithinPoly(poi, item, opts.chartData.mapData.mercator)) {
-      currentIndex = i;
-      break;
-    }
-  }
-  return currentIndex;
-}
-
-function findRoseChartCurrentIndex(currentPoints, pieData, opts) {
-  var currentIndex = -1;
-  var series = getRoseDataPoints(opts._series_, opts.extra.rose.type, pieData.radius, pieData.radius);
-  if (pieData && pieData.center && isInExactPieChartArea(currentPoints, pieData.center, pieData.radius)) {
-    var angle = Math.atan2(pieData.center.y - currentPoints.y, currentPoints.x - pieData.center.x);
-    angle = -angle;
-    if(opts.extra.rose && opts.extra.rose.offsetAngle){
-      angle = angle - opts.extra.rose.offsetAngle * Math.PI / 180;
-    }
-    for (var i = 0, len = series.length; i < len; i++) {
-      if (isInAngleRange(angle, series[i]._start_, series[i]._start_ + series[i]._rose_proportion_ * 2 * Math.PI)) {
-        currentIndex = i;
-        break;
-      }
-    }
-  }
-  return currentIndex;
-}
-
-function findPieChartCurrentIndex(currentPoints, pieData, opts) {
-  var currentIndex = -1;
-  var series = getPieDataPoints(pieData.series);
-  if (pieData && pieData.center && isInExactPieChartArea(currentPoints, pieData.center, pieData.radius)) {
-    var angle = Math.atan2(pieData.center.y - currentPoints.y, currentPoints.x - pieData.center.x);
-    angle = -angle;
-    if(opts.extra.pie && opts.extra.pie.offsetAngle){
-      angle = angle - opts.extra.pie.offsetAngle * Math.PI / 180;
-    }
-    if(opts.extra.ring && opts.extra.ring.offsetAngle){
-      angle = angle - opts.extra.ring.offsetAngle * Math.PI / 180;
-    }
-    for (var i = 0, len = series.length; i < len; i++) {
-      if (isInAngleRange(angle, series[i]._start_, series[i]._start_ + series[i]._proportion_ * 2 * Math.PI)) {
-        currentIndex = i;
-        break;
-      }
-    }
-  }
-  return currentIndex;
-}
-
-function isInExactPieChartArea(currentPoints, center, radius) {
-  return Math.pow(currentPoints.x - center.x, 2) + Math.pow(currentPoints.y - center.y, 2) <= Math.pow(radius, 2);
-}
-
-function splitPoints(points,eachSeries) {
-  var newPoints = [];
-  var items = [];
-  points.forEach(function(item, index) {
-    if(eachSeries.connectNulls){
-      if (item !== null) {
-        items.push(item);
-      }
-    }else{
-      if (item !== null) {
-        items.push(item);
-      } else {
-        if (items.length) {
-          newPoints.push(items);
-        }
-        items = [];
-      }
-    }
-    
-  });
-  if (items.length) {
-    newPoints.push(items);
-  }
-  return newPoints;
-}
-
-function calLegendData(series, opts, config, chartData, context) {
-  let legendData = {
-    area: {
-      start: {
-        x: 0,
-        y: 0
-      },
-      end: {
-        x: 0,
-        y: 0
-      },
-      width: 0,
-      height: 0,
-      wholeWidth: 0,
-      wholeHeight: 0
-    },
-    points: [],
-    widthArr: [],
-    heightArr: []
-  };
-  if (opts.legend.show === false) {
-    chartData.legendData = legendData;
-    return legendData;
-  }
-  let padding = opts.legend.padding * opts.pix;
-  let margin = opts.legend.margin * opts.pix;
-  let fontSize = opts.legend.fontSize ? opts.legend.fontSize * opts.pix : config.fontSize;
-  let shapeWidth = 15 * opts.pix;
-  let shapeRight = 5 * opts.pix;
-  let lineHeight = Math.max(opts.legend.lineHeight * opts.pix, fontSize);
-  if (opts.legend.position == 'top' || opts.legend.position == 'bottom') {
-    let legendList = [];
-    let widthCount = 0;
-    let widthCountArr = [];
-    let currentRow = [];
-    for (let i = 0; i < series.length; i++) {
-      let item = series[i];
-      let itemWidth = shapeWidth + shapeRight + measureText(item.name || 'undefined', fontSize, context) + opts.legend.itemGap * opts.pix;
-      if (widthCount + itemWidth > opts.width - opts.area[1] - opts.area[3]) {
-        legendList.push(currentRow);
-        widthCountArr.push(widthCount - opts.legend.itemGap * opts.pix);
-        widthCount = itemWidth;
-        currentRow = [item];
-      } else {
-        widthCount += itemWidth;
-        currentRow.push(item);
-      }
-    }
-    if (currentRow.length) {
-      legendList.push(currentRow);
-      widthCountArr.push(widthCount - opts.legend.itemGap * opts.pix);
-      legendData.widthArr = widthCountArr;
-      let legendWidth = Math.max.apply(null, widthCountArr);
-      switch (opts.legend.float) {
-        case 'left':
-          legendData.area.start.x = opts.area[3];
-          legendData.area.end.x = opts.area[3] + legendWidth + 2 * padding;
-          break;
-        case 'right':
-          legendData.area.start.x = opts.width - opts.area[1] - legendWidth - 2 * padding;
-          legendData.area.end.x = opts.width - opts.area[1];
-          break;
-        default:
-          legendData.area.start.x = (opts.width - legendWidth) / 2 - padding;
-          legendData.area.end.x = (opts.width + legendWidth) / 2 + padding;
-      }
-      legendData.area.width = legendWidth + 2 * padding;
-      legendData.area.wholeWidth = legendWidth + 2 * padding;
-      legendData.area.height = legendList.length * lineHeight + 2 * padding;
-      legendData.area.wholeHeight = legendList.length * lineHeight + 2 * padding + 2 * margin;
-      legendData.points = legendList;
-    }
-  } else {
-    let len = series.length;
-    let maxHeight = opts.height - opts.area[0] - opts.area[2] - 2 * margin - 2 * padding;
-    let maxLength = Math.min(Math.floor(maxHeight / lineHeight), len);
-    legendData.area.height = maxLength * lineHeight + padding * 2;
-    legendData.area.wholeHeight = maxLength * lineHeight + padding * 2;
-    switch (opts.legend.float) {
-      case 'top':
-        legendData.area.start.y = opts.area[0] + margin;
-        legendData.area.end.y = opts.area[0] + margin + legendData.area.height;
-        break;
-      case 'bottom':
-        legendData.area.start.y = opts.height - opts.area[2] - margin - legendData.area.height;
-        legendData.area.end.y = opts.height - opts.area[2] - margin;
-        break;
-      default:
-        legendData.area.start.y = (opts.height - legendData.area.height) / 2;
-        legendData.area.end.y = (opts.height + legendData.area.height) / 2;
-    }
-    let lineNum = len % maxLength === 0 ? len / maxLength : Math.floor((len / maxLength) + 1);
-    let currentRow = [];
-    for (let i = 0; i < lineNum; i++) {
-      let temp = series.slice(i * maxLength, i * maxLength + maxLength);
-      currentRow.push(temp);
-    }
-    legendData.points = currentRow;
-    if (currentRow.length) {
-      for (let i = 0; i < currentRow.length; i++) {
-        let item = currentRow[i];
-        let maxWidth = 0;
-        for (let j = 0; j < item.length; j++) {
-          let itemWidth = shapeWidth + shapeRight + measureText(item[j].name || 'undefined', fontSize, context) + opts.legend.itemGap * opts.pix;
-          if (itemWidth > maxWidth) {
-            maxWidth = itemWidth;
-          }
-        }
-        legendData.widthArr.push(maxWidth);
-        legendData.heightArr.push(item.length * lineHeight + padding * 2);
-      }
-      let legendWidth = 0
-      for (let i = 0; i < legendData.widthArr.length; i++) {
-        legendWidth += legendData.widthArr[i];
-      }
-      legendData.area.width = legendWidth - opts.legend.itemGap * opts.pix + 2 * padding;
-      legendData.area.wholeWidth = legendData.area.width + padding;
-    }
-  }
-  switch (opts.legend.position) {
-    case 'top':
-      legendData.area.start.y = opts.area[0] + margin;
-      legendData.area.end.y = opts.area[0] + margin + legendData.area.height;
-      break;
-    case 'bottom':
-      legendData.area.start.y = opts.height - opts.area[2] - legendData.area.height - margin;
-      legendData.area.end.y = opts.height - opts.area[2] - margin;
-      break;
-    case 'left':
-      legendData.area.start.x = opts.area[3];
-      legendData.area.end.x = opts.area[3] + legendData.area.width;
-      break;
-    case 'right':
-      legendData.area.start.x = opts.width - opts.area[1] - legendData.area.width;
-      legendData.area.end.x = opts.width - opts.area[1];
-      break;
-  }
-  chartData.legendData = legendData;
-  return legendData;
-}
-
-function calCategoriesData(categories, opts, config, eachSpacing, context) {
-  var result = {
-    angle: 0,
-    xAxisHeight: config.xAxisHeight
-  };
-  var categoriesTextLenth = categories.map(function(item) {
-    return measureText(item, opts.xAxis.fontSize * opts.pix || config.fontSize, context);
-  });
-  var maxTextLength = Math.max.apply(this, categoriesTextLenth);
-
-  if (opts.xAxis.rotateLabel == true && maxTextLength + 2 * config.xAxisTextPadding > eachSpacing) {
-    result.angle = 45 * Math.PI / 180;
-    result.xAxisHeight = 2 * config.xAxisTextPadding + maxTextLength * Math.sin(result.angle);
-  }
-  return result;
-}
-
-function getXAxisTextList(series, opts, config, stack) {
-  var index = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1;
-  var data;
-  if (stack == 'stack') {
-    data = dataCombineStack(series, opts.categories.length);
-  } else {
-    data = dataCombine(series);
-  }
-  var sorted = [];
-  // remove null from data
-  data = data.filter(function(item) {
-    //return item !== null;
-    if (typeof item === 'object' && item !== null) {
-      if (item.constructor.toString().indexOf('Array') > -1) {
-        return item !== null;
-      } else {
-        return item.value !== null;
-      }
-    } else {
-      return item !== null;
-    }
-  });
-  data.map(function(item) {
-    if (typeof item === 'object') {
-      if (item.constructor.toString().indexOf('Array') > -1) {
-        if (opts.type == 'candle') {
-          item.map(function(subitem) {
-            sorted.push(subitem);
-          })
-        } else {
-          sorted.push(item[0]);
-        }
-      } else {
-        sorted.push(item.value);
-      }
-    } else {
-      sorted.push(item);
-    }
-  })
-
-  var minData = 0;
-  var maxData = 0;
-  if (sorted.length > 0) {
-    minData = Math.min.apply(this, sorted);
-    maxData = Math.max.apply(this, sorted);
-  }
-  //为了兼容v1.9.0之前的项目
-  if (index > -1) {
-    if (typeof opts.xAxis.data[index].min === 'number') {
-      minData = Math.min(opts.xAxis.data[index].min, minData);
-    }
-    if (typeof opts.xAxis.data[index].max === 'number') {
-      maxData = Math.max(opts.xAxis.data[index].max, maxData);
-    }
-  } else {
-    if (typeof opts.xAxis.min === 'number') {
-      minData = Math.min(opts.xAxis.min, minData);
-    }
-    if (typeof opts.xAxis.max === 'number') {
-      maxData = Math.max(opts.xAxis.max, maxData);
-    }
-  }
-  if (minData === maxData) {
-    var rangeSpan = maxData || 10;
-    maxData += rangeSpan;
-  }
-  //var dataRange = getDataRange(minData, maxData);
-  var minRange = minData;
-  var maxRange = maxData;
-  var range = [];
-  var eachRange = (maxRange - minRange) / opts.xAxis.splitNumber;
-  for (var i = 0; i <= opts.xAxis.splitNumber; i++) {
-    range.push(minRange + eachRange * i);
-  }
-  return range;
-}
-
-function calXAxisData(series, opts, config, context) {
-  //堆叠图重算Y轴
-  var columnstyle = assign({}, {
-    type: ""
-  }, opts.extra.bar);
-  var result = {
-    angle: 0,
-    xAxisHeight: config.xAxisHeight
-  };
-  result.ranges = getXAxisTextList(series, opts, config, columnstyle.type);
-  result.rangesFormat = result.ranges.map(function(item) {
-    //item = opts.xAxis.formatter ? opts.xAxis.formatter(item) : util.toFixed(item, 2);
-    item = util.toFixed(item, 2);
-    return item;
-  });
-  var xAxisScaleValues = result.ranges.map(function(item) {
-    // 如果刻度值是浮点数,则保留两位小数
-    item = util.toFixed(item, 2);
-    // 若有自定义格式则调用自定义的格式化函数
-    //item = opts.xAxis.formatter ? opts.xAxis.formatter(Number(item)) : item;
-    return item;
-  });
-  result = Object.assign(result, getXAxisPoints(xAxisScaleValues, opts, config));
-  // 计算X轴刻度的属性譬如每个刻度的间隔,刻度的起始点\结束点以及总长
-  var eachSpacing = result.eachSpacing;
-  var textLength = xAxisScaleValues.map(function(item) {
-    return measureText(item, opts.xAxis.fontSize * opts.pix || config.fontSize, context);
-  });
-  // get max length of categories text
-  var maxTextLength = Math.max.apply(this, textLength);
-  // 如果刻度值文本内容过长,则将其逆时针旋转45°
-  if (maxTextLength + 2 * config.xAxisTextPadding > eachSpacing) {
-    result.angle = 45 * Math.PI / 180;
-    result.xAxisHeight = 2 * config.xAxisTextPadding + maxTextLength * Math.sin(result.angle);
-  }
-  if (opts.xAxis.disabled === true) {
-    result.xAxisHeight = 0;
-  }
-  return result;
-}
-
-function getRadarDataPoints(angleList, center, radius, series, opts) {
-  var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1;
-  var radarOption = opts.extra.radar || {};
-  radarOption.max = radarOption.max || 0;
-  var maxData = Math.max(radarOption.max, Math.max.apply(null, dataCombine(series)));
-  var data = [];
-  for (let i = 0; i < series.length; i++) {
-    let each = series[i];
-    let listItem = {};
-    listItem.color = each.color;
-    listItem.legendShape = each.legendShape;
-    listItem.pointShape = each.pointShape;
-    listItem.data = [];
-    each.data.forEach(function(item, index) {
-      let tmp = {};
-      tmp.angle = angleList[index];
-      tmp.proportion = item / maxData;
-      tmp.value = item;
-      tmp.position = convertCoordinateOrigin(radius * tmp.proportion * process * Math.cos(tmp.angle), radius * tmp.proportion * process * Math.sin(tmp.angle), center);
-      listItem.data.push(tmp);
-    });
-    data.push(listItem);
-  }
-  return data;
-}
-
-function getPieDataPoints(series, radius) {
-  var process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
-  var count = 0;
-  var _start_ = 0;
-  for (let i = 0; i < series.length; i++) {
-    let item = series[i];
-    item.data = item.data === null ? 0 : item.data;
-    count += item.data;
-  }
-  for (let i = 0; i < series.length; i++) {
-    let item = series[i];
-    item.data = item.data === null ? 0 : item.data;
-    if (count === 0) {
-      item._proportion_ = 1 / series.length * process;
-    } else {
-      item._proportion_ = item.data / count * process;
-    }
-    item._radius_ = radius;
-  }
-  for (let i = 0; i < series.length; i++) {
-    let item = series[i];
-    item._start_ = _start_;
-    _start_ += 2 * item._proportion_ * Math.PI;
-  }
-  return series;
-}
-
-function getFunnelDataPoints(series, radius, type, eachSpacing) {
-  var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
-  series = series.sort(function(a, b) {
-    return parseInt(b.data) - parseInt(a.data);
-  });
-  for (let i = 0; i < series.length; i++) {
-    if(type == 'funnel'){
-      series[i].radius = series[i].data / series[0].data * radius * process;
-    }else{
-      series[i].radius =  (eachSpacing * (series.length - i)) / (eachSpacing * series.length) * radius * process;
-    }
-    series[i]._proportion_ = series[i].data / series[0].data;
-  }
-  if(type !== 'pyramid'){
-    series.reverse();
-  }
-  return series;
-}
-
-function getRoseDataPoints(series, type, minRadius, radius) {
-  var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
-  var count = 0;
-  var _start_ = 0;
-  var dataArr = [];
-  for (let i = 0; i < series.length; i++) {
-    let item = series[i];
-    item.data = item.data === null ? 0 : item.data;
-    count += item.data;
-    dataArr.push(item.data);
-  }
-  var minData = Math.min.apply(null, dataArr);
-  var maxData = Math.max.apply(null, dataArr);
-  var radiusLength = radius - minRadius;
-  for (let i = 0; i < series.length; i++) {
-    let item = series[i];
-    item.data = item.data === null ? 0 : item.data;
-    if (count === 0) {
-      item._proportion_ = 1 / series.length * process;
-      item._rose_proportion_ = 1 / series.length * process;
-    } else {
-      item._proportion_ = item.data / count * process;
-      if(type == 'area'){
-        item._rose_proportion_ = 1 / series.length * process;
-      }else{
-        item._rose_proportion_ = item.data / count * process;
-      }
-    }
-    item._radius_ = minRadius + radiusLength * ((item.data - minData) / (maxData - minData)) || radius;
-  }
-  for (let i = 0; i < series.length; i++) {
-    let item = series[i];
-    item._start_ = _start_;
-    _start_ += 2 * item._rose_proportion_ * Math.PI;
-  }
-  return series;
-}
-
-function getArcbarDataPoints(series, arcbarOption) {
-  var process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
-  if (process == 1) {
-    process = 0.999999;
-  }
-  for (let i = 0; i < series.length; i++) {
-    let item = series[i];
-    item.data = item.data === null ? 0 : item.data;
-    let totalAngle;
-    if (arcbarOption.type == 'circle') {
-      totalAngle = 2;
-    } else {
-      if (arcbarOption.endAngle < arcbarOption.startAngle) {
-        totalAngle = 2 + arcbarOption.endAngle - arcbarOption.startAngle;
-      } else {
-        totalAngle = arcbarOption.startAngle - arcbarOption.endAngle;
-      }
-    }
-    item._proportion_ = totalAngle * item.data * process + arcbarOption.startAngle;
-    if (item._proportion_ >= 2) {
-      item._proportion_ = item._proportion_ % 2;
-    }
-  }
-  return series;
-}
-
-function getGaugeAxisPoints(categories, startAngle, endAngle) {
-  let totalAngle = startAngle - endAngle + 1;
-  let tempStartAngle = startAngle;
-  for (let i = 0; i < categories.length; i++) {
-    categories[i].value = categories[i].value === null ? 0 : categories[i].value;
-    categories[i]._startAngle_ = tempStartAngle;
-    categories[i]._endAngle_ = totalAngle * categories[i].value + startAngle;
-    if (categories[i]._endAngle_ >= 2) {
-      categories[i]._endAngle_ = categories[i]._endAngle_ % 2;
-    }
-    tempStartAngle = categories[i]._endAngle_;
-  }
-  return categories;
-}
-
-function getGaugeDataPoints(series, categories, gaugeOption) {
-  let process = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
-  for (let i = 0; i < series.length; i++) {
-    let item = series[i];
-    item.data = item.data === null ? 0 : item.data;
-    if (gaugeOption.pointer.color == 'auto') {
-      for (let i = 0; i < categories.length; i++) {
-        if (item.data <= categories[i].value) {
-          item.color = categories[i].color;
-          break;
-        }
-      }
-    } else {
-      item.color = gaugeOption.pointer.color;
-    }
-    let totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1;
-    item._endAngle_ = totalAngle * item.data + gaugeOption.startAngle;
-    item._oldAngle_ = gaugeOption.oldAngle;
-    if (gaugeOption.oldAngle < gaugeOption.endAngle) {
-      item._oldAngle_ += 2;
-    }
-    if (item.data >= gaugeOption.oldData) {
-      item._proportion_ = (item._endAngle_ - item._oldAngle_) * process + gaugeOption.oldAngle;
-    } else {
-      item._proportion_ = item._oldAngle_ - (item._oldAngle_ - item._endAngle_) * process;
-    }
-    if (item._proportion_ >= 2) {
-      item._proportion_ = item._proportion_ % 2;
-    }
-  }
-  return series;
-}
-
-function getPieTextMaxLength(series, config, context, opts) {
-  series = getPieDataPoints(series);
-  let maxLength = 0;
-  for (let i = 0; i < series.length; i++) {
-    let item = series[i];
-    let text = item.formatter ? item.formatter(+item._proportion_.toFixed(2)) : util.toFixed(item._proportion_ * 100) + '%';
-    maxLength = Math.max(maxLength, measureText(text, item.textSize * opts.pix || config.fontSize, context));
-  }
-  return maxLength;
-}
-
-function fixColumeData(points, eachSpacing, columnLen, index, config, opts) {
-  return points.map(function(item) {
-    if (item === null) {
-      return null;
-    }
-    var seriesGap = 0;
-    var categoryGap = 0;
-    if (opts.type == 'mix') {
-      seriesGap = opts.extra.mix.column.seriesGap * opts.pix || 0;
-      categoryGap = opts.extra.mix.column.categoryGap * opts.pix || 0;
-    } else {
-      seriesGap = opts.extra.column.seriesGap * opts.pix || 0;
-      categoryGap = opts.extra.column.categoryGap * opts.pix || 0;
-    }
-    seriesGap =  Math.min(seriesGap, eachSpacing / columnLen)
-    categoryGap =  Math.min(categoryGap, eachSpacing / columnLen)
-    item.width = Math.ceil((eachSpacing - 2 * categoryGap - seriesGap * (columnLen - 1)) / columnLen);
-    if (opts.extra.mix && opts.extra.mix.column.width && +opts.extra.mix.column.width > 0) {
-      item.width = Math.min(item.width, +opts.extra.mix.column.width * opts.pix);
-    }
-    if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) {
-      item.width = Math.min(item.width, +opts.extra.column.width * opts.pix);
-    }
-    if (item.width <= 0) {
-      item.width = 1;
-    }
-    item.x += (index + 0.5 - columnLen / 2) * (item.width + seriesGap);
-    return item;
-  });
-}
-
-function fixBarData(points, eachSpacing, columnLen, index, config, opts) {
-  return points.map(function(item) {
-    if (item === null) {
-      return null;
-    }
-    var seriesGap = 0;
-    var categoryGap = 0;
-    seriesGap = opts.extra.bar.seriesGap * opts.pix || 0;
-    categoryGap = opts.extra.bar.categoryGap * opts.pix || 0;
-    seriesGap =  Math.min(seriesGap, eachSpacing / columnLen)
-    categoryGap =  Math.min(categoryGap, eachSpacing / columnLen)
-    item.width = Math.ceil((eachSpacing - 2 * categoryGap - seriesGap * (columnLen - 1)) / columnLen);
-    if (opts.extra.bar && opts.extra.bar.width && +opts.extra.bar.width > 0) {
-      item.width = Math.min(item.width, +opts.extra.bar.width * opts.pix);
-    }
-    if (item.width <= 0) {
-      item.width = 1;
-    }
-    item.y += (index + 0.5 - columnLen / 2) * (item.width + seriesGap);
-    return item;
-  });
-}
-
-function fixColumeMeterData(points, eachSpacing, columnLen, index, config, opts, border) {
-  var categoryGap = opts.extra.column.categoryGap * opts.pix || 0;
-  return points.map(function(item) {
-    if (item === null) {
-      return null;
-    }
-    item.width = Math.ceil(eachSpacing - 2 * categoryGap);
-    if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) {
-      item.width = Math.min(item.width, +opts.extra.column.width * opts.pix);
-    }
-    if (index > 0) {
-      item.width -= 2 * border;
-    }
-    return item;
-  });
-}
-
-function fixColumeStackData(points, eachSpacing, columnLen, index, config, opts, series) {
-  var categoryGap = opts.extra.column.categoryGap * opts.pix || 0;
-  return points.map(function(item, indexn) {
-    if (item === null) {
-      return null;
-    }
-    item.width = Math.ceil(eachSpacing - 2 * categoryGap);
-    if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) {
-      item.width = Math.min(item.width, +opts.extra.column.width * opts.pix);
-    }
-    if (item.width <= 0) {
-      item.width = 1;
-    }
-    return item;
-  });
-}
-
-function fixBarStackData(points, eachSpacing, columnLen, index, config, opts, series) {
-  var categoryGap = opts.extra.bar.categoryGap * opts.pix || 0;
-  return points.map(function(item, indexn) {
-    if (item === null) {
-      return null;
-    }
-    item.width = Math.ceil(eachSpacing - 2 * categoryGap);
-    if (opts.extra.bar && opts.extra.bar.width && +opts.extra.bar.width > 0) {
-      item.width = Math.min(item.width, +opts.extra.bar.width * opts.pix);
-    }
-    if (item.width <= 0) {
-      item.width = 1;
-    }
-    return item;
-  });
-}
-
-function getXAxisPoints(categories, opts, config) {
-  var spacingValid = opts.width - opts.area[1] - opts.area[3];
-  var dataCount = opts.enableScroll ? Math.min(opts.xAxis.itemCount, categories.length) : categories.length;
-  if ((opts.type == 'line' || opts.type == 'area' || opts.type == 'scatter' || opts.type == 'bubble' || opts.type == 'bar') && dataCount > 1 && opts.xAxis.boundaryGap == 'justify') {
-    dataCount -= 1;
-  }
-  var eachSpacing = spacingValid / dataCount;
-  var xAxisPoints = [];
-  var startX = opts.area[3];
-  var endX = opts.width - opts.area[1];
-  categories.forEach(function(item, index) {
-    xAxisPoints.push(startX + index * eachSpacing);
-  });
-  if (opts.xAxis.boundaryGap !== 'justify') {
-    if (opts.enableScroll === true) {
-      xAxisPoints.push(startX + categories.length * eachSpacing);
-    } else {
-      xAxisPoints.push(endX);
-    }
-  }
-  return {
-    xAxisPoints: xAxisPoints,
-    startX: startX,
-    endX: endX,
-    eachSpacing: eachSpacing
-  };
-}
-
-function getCandleDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config) {
-  var process = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 1;
-  var points = [];
-  var validHeight = opts.height - opts.area[0] - opts.area[2];
-  data.forEach(function(item, index) {
-    if (item === null) {
-      points.push(null);
-    } else {
-      var cPoints = [];
-      item.forEach(function(items, indexs) {
-        var point = {};
-        point.x = xAxisPoints[index] + Math.round(eachSpacing / 2);
-        var value = items.value || items;
-        var height = validHeight * (value - minRange) / (maxRange - minRange);
-        height *= process;
-        point.y = opts.height - Math.round(height) - opts.area[2];
-        cPoints.push(point);
-      });
-      points.push(cPoints);
-    }
-  });
-  return points;
-}
-
-function getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config) {
-  var process = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 1;
-  var boundaryGap = 'center';
-  if (opts.type == 'line' || opts.type == 'area' || opts.type == 'scatter' || opts.type == 'bubble' ) {
-    boundaryGap = opts.xAxis.boundaryGap;
-  }
-  var points = [];
-  var validHeight = opts.height - opts.area[0] - opts.area[2];
-  var validWidth = opts.width - opts.area[1] - opts.area[3];
-  data.forEach(function(item, index) {
-    if (item === null) {
-      points.push(null);
-    } else {
-      var point = {};
-      point.color = item.color;
-      point.x = xAxisPoints[index];
-      var value = item;
-      if (typeof item === 'object' && item !== null) {
-        if (item.constructor.toString().indexOf('Array') > -1) {
-          let xranges, xminRange, xmaxRange;
-          xranges = [].concat(opts.chartData.xAxisData.ranges);
-          xminRange = xranges.shift();
-          xmaxRange = xranges.pop();
-          value = item[1];
-          point.x = opts.area[3] + validWidth * (item[0] - xminRange) / (xmaxRange - xminRange);
-          if(opts.type == 'bubble'){
-            point.r = item[2];
-            point.t = item[3];
-          }
-        } else {
-          value = item.value;
-        }
-      }
-      if (boundaryGap == 'center') {
-        point.x += eachSpacing / 2;
-      }
-      var height = validHeight * (value - minRange) / (maxRange - minRange);
-      height *= process;
-      point.y = opts.height - height - opts.area[2];
-      points.push(point);
-    }
-  });
-  return points;
-}
-
-function getBarDataPoints(data, minRange, maxRange, yAxisPoints, eachSpacing, opts, config) {
-  var process = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 1;
-  var points = [];
-  var validHeight = opts.height - opts.area[0] - opts.area[2];
-  var validWidth = opts.width - opts.area[1] - opts.area[3];
-  data.forEach(function(item, index) {
-    if (item === null) {
-      points.push(null);
-    } else {
-      var point = {};
-      point.color = item.color;
-      point.y = yAxisPoints[index];
-      var value = item;
-      if (typeof item === 'object' && item !== null) {
-        value = item.value;
-      }
-      var height = validWidth * (value - minRange) / (maxRange - minRange);
-      height *= process;
-      point.height = height;
-      point.value = value;
-      point.x = height + opts.area[3];
-      points.push(point);
-    }
-  });
-  return points;
-}
-
-function getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, stackSeries) {
-  var process = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : 1;
-  var points = [];
-  var validHeight = opts.height - opts.area[0] - opts.area[2];
-  data.forEach(function(item, index) {
-    if (item === null) {
-      points.push(null);
-    } else {
-      var point = {};
-      point.color = item.color;
-      point.x = xAxisPoints[index] + Math.round(eachSpacing / 2);
-
-      if (seriesIndex > 0) {
-        var value = 0;
-        for (let i = 0; i <= seriesIndex; i++) {
-          value += stackSeries[i].data[index];
-        }
-        var value0 = value - item;
-        var height = validHeight * (value - minRange) / (maxRange - minRange);
-        var height0 = validHeight * (value0 - minRange) / (maxRange - minRange);
-      } else {
-        var value = item;
-        var height = validHeight * (value - minRange) / (maxRange - minRange);
-        var height0 = 0;
-      }
-      var heightc = height0;
-      height *= process;
-      heightc *= process;
-      point.y = opts.height - Math.round(height) - opts.area[2];
-      point.y0 = opts.height - Math.round(heightc) - opts.area[2];
-      points.push(point);
-    }
-  });
-  return points;
-}
-
-function getBarStackDataPoints(data, minRange, maxRange, yAxisPoints, eachSpacing, opts, config, seriesIndex, stackSeries) {
-  var process = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : 1;
-  var points = [];
-  var validHeight = opts.width - opts.area[1] - opts.area[3];
-  data.forEach(function(item, index) {
-    if (item === null) {
-      points.push(null);
-    } else {
-      var point = {};
-      point.color = item.color;
-      point.y = yAxisPoints[index];
-      if (seriesIndex > 0) {
-        var value = 0;
-        for (let i = 0; i <= seriesIndex; i++) {
-          value += stackSeries[i].data[index];
-        }
-        var value0 = value - item;
-        var height = validHeight * (value - minRange) / (maxRange - minRange);
-        var height0 = validHeight * (value0 - minRange) / (maxRange - minRange);
-      } else {
-        var value = item;
-        var height = validHeight * (value - minRange) / (maxRange - minRange);
-        var height0 = 0;
-      }
-      var heightc = height0;
-      height *= process;
-      heightc *= process;
-      point.height = height - heightc;
-      point.x = opts.area[3] + height;
-      point.x0 = opts.area[3] + heightc;
-      points.push(point);
-    }
-  });
-  return points;
-}
-
-function getYAxisTextList(series, opts, config, stack, yData) {
-  var index = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : -1;
-  var data;
-  if (stack == 'stack') {
-    data = dataCombineStack(series, opts.categories.length);
-  } else {
-    data = dataCombine(series);
-  }
-  var sorted = [];
-  // remove null from data
-  data = data.filter(function(item) {
-    //return item !== null;
-    if (typeof item === 'object' && item !== null) {
-      if (item.constructor.toString().indexOf('Array') > -1) {
-        return item !== null;
-      } else {
-        return item.value !== null;
-      }
-    } else {
-      return item !== null;
-    }
-  });
-  data.map(function(item) {
-    if (typeof item === 'object') {
-      if (item.constructor.toString().indexOf('Array') > -1) {
-        if (opts.type == 'candle') {
-          item.map(function(subitem) {
-            sorted.push(subitem);
-          })
-        } else {
-          sorted.push(item[1]);
-        }
-      } else {
-        sorted.push(item.value);
-      }
-    } else {
-      sorted.push(item);
-    }
-  })
-  var minData = yData.min || 0;
-  var maxData = yData.max || 0;
-  if (sorted.length > 0) {
-    minData = Math.min.apply(this, sorted);
-    maxData = Math.max.apply(this, sorted);
-  }
-  //为了兼容v1.9.0之前的项目
-  // if (index > -1) {
-  //   if (typeof opts.yAxis.data[index].min === 'number') {
-  //     minData = Math.min(opts.yAxis.data[index].min, minData);
-  //   }
-  //   if (typeof opts.yAxis.data[index].max === 'number') {
-  //     maxData = Math.max(opts.yAxis.data[index].max, maxData);
-  //   }
-  // } else {
-  //   if (typeof opts.yAxis.min === 'number') {
-  //     minData = Math.min(opts.yAxis.min, minData);
-  //   }
-  //   if (typeof opts.yAxis.max === 'number') {
-  //     maxData = Math.max(opts.yAxis.max, maxData);
-  //   }
-  // }
-  if (minData === maxData) {
-    var rangeSpan = maxData || 10;
-    maxData += rangeSpan;
-  }
-  var dataRange = getDataRange(minData, maxData);
-  var minRange = yData.min === undefined || yData.min === null ? dataRange.minRange : yData.min;
-  var maxRange = yData.max === undefined || yData.min === null ? dataRange.maxRange : yData.max;
-  var range = [];
-  var eachRange = (maxRange - minRange) / opts.yAxis.splitNumber;
-  for (var i = 0; i <= opts.yAxis.splitNumber; i++) {
-    range.push(minRange + eachRange * i);
-  }
-  return range.reverse();
-}
-
-function calYAxisData(series, opts, config, context) {
-  //堆叠图重算Y轴
-  var columnstyle = assign({}, {
-    type: ""
-  }, opts.extra.column);
-  //如果是多Y轴,重新计算
-  var YLength = opts.yAxis.data.length;
-  var newSeries = new Array(YLength);
-  if (YLength > 0) {
-    for (let i = 0; i < YLength; i++) {
-      newSeries[i] = [];
-      for (let j = 0; j < series.length; j++) {
-        if (series[j].index == i) {
-          newSeries[i].push(series[j]);
-        }
-      }
-    }
-    var rangesArr = new Array(YLength);
-    var rangesFormatArr = new Array(YLength);
-    var yAxisWidthArr = new Array(YLength);
-
-    for (let i = 0; i < YLength; i++) {
-      let yData = opts.yAxis.data[i];
-      //如果总开关不显示,强制每个Y轴为不显示
-      if (opts.yAxis.disabled == true) {
-        yData.disabled = true;
-      }
-      if(yData.type === 'categories'){
-        if(!yData.formatter){
-          yData.formatter = (val) => {return val + (yData.unit || '')};
-        }
-        yData.categories = yData.categories || opts.categories;
-        rangesArr[i] = yData.categories;
-      }else{
-        if(!yData.formatter){
-          yData.formatter = (val) => {return val.toFixed(yData.tofix) + (yData.unit || '')};
-        }
-        rangesArr[i] = getYAxisTextList(newSeries[i], opts, config, columnstyle.type, yData, i);
-      }
-      let yAxisFontSizes = yData.fontSize * opts.pix || config.fontSize;
-      yAxisWidthArr[i] = {
-        position: yData.position ? yData.position : 'left',
-        width: 0
-      };
-      rangesFormatArr[i] = rangesArr[i].map(function(items) {
-        items = yData.formatter(items);
-        yAxisWidthArr[i].width = Math.max(yAxisWidthArr[i].width, measureText(items, yAxisFontSizes, context) + 5);
-        return items;
-      });
-      let calibration = yData.calibration ? 4 * opts.pix : 0;
-      yAxisWidthArr[i].width += calibration + 3 * opts.pix;
-      if (yData.disabled === true) {
-        yAxisWidthArr[i].width = 0;
-      }
-    }
-  } else {
-    var rangesArr = new Array(1);
-    var rangesFormatArr = new Array(1);
-    var yAxisWidthArr = new Array(1);
-    if(opts.type === 'bar'){
-      rangesArr[0] = opts.categories;
-      if(!opts.yAxis.formatter){
-        opts.yAxis.formatter = (val) => {return val + (opts.yAxis.unit || '')}
-      }
-    }else{
-      if(!opts.yAxis.formatter){
-        opts.yAxis.formatter = (val) => {return val.toFixed(opts.yAxis.tofix ) + (opts.yAxis.unit || '')}
-      }
-      rangesArr[0] = getYAxisTextList(series, opts, config, columnstyle.type, {});
-    }
-    yAxisWidthArr[0] = {
-      position: 'left',
-      width: 0
-    };
-    var yAxisFontSize = opts.yAxis.fontSize * opts.pix || config.fontSize;
-    rangesFormatArr[0] = rangesArr[0].map(function(item) {
-      item = opts.yAxis.formatter(item);
-      yAxisWidthArr[0].width = Math.max(yAxisWidthArr[0].width, measureText(item, yAxisFontSize, context) + 5);
-      return item;
-    });
-    yAxisWidthArr[0].width += 3 * opts.pix;
-    if (opts.yAxis.disabled === true) {
-      yAxisWidthArr[0] = {
-        position: 'left',
-        width: 0
-      };
-      opts.yAxis.data[0] = {
-        disabled: true
-      };
-    } else {
-      opts.yAxis.data[0] = {
-        disabled: false,
-        position: 'left',
-        max: opts.yAxis.max,
-        min: opts.yAxis.min,
-        formatter: opts.yAxis.formatter
-      };
-      if(opts.type === 'bar'){
-        opts.yAxis.data[0].categories = opts.categories;
-        opts.yAxis.data[0].type = 'categories';
-      }
-    }
-  }
-  return {
-    rangesFormat: rangesFormatArr,
-    ranges: rangesArr,
-    yAxisWidth: yAxisWidthArr
-  };
-}
-
-function calTooltipYAxisData(point, series, opts, config, eachSpacing) {
-  let ranges = [].concat(opts.chartData.yAxisData.ranges);
-  let spacingValid = opts.height - opts.area[0] - opts.area[2];
-  let minAxis = opts.area[0];
-  let items = [];
-  for (let i = 0; i < ranges.length; i++) {
-    let maxVal = ranges[i].shift();
-    let minVal = ranges[i].pop();
-    let item = maxVal - (maxVal - minVal) * (point - minAxis) / spacingValid;
-    item = opts.yAxis.data[i].formatter ? opts.yAxis.data[i].formatter(item) : item.toFixed(0);
-    items.push(String(item))
-  }
-  return items;
-}
-
-function calMarkLineData(points, opts) {
-  let minRange, maxRange;
-  let spacingValid = opts.height - opts.area[0] - opts.area[2];
-  for (let i = 0; i < points.length; i++) {
-    points[i].yAxisIndex = points[i].yAxisIndex ? points[i].yAxisIndex : 0;
-    let range = [].concat(opts.chartData.yAxisData.ranges[points[i].yAxisIndex]);
-    minRange = range.pop();
-    maxRange = range.shift();
-    let height = spacingValid * (points[i].value - minRange) / (maxRange - minRange);
-    points[i].y = opts.height - Math.round(height) - opts.area[2];
-  }
-  return points;
-}
-
-function contextRotate(context, opts) {
-  if (opts.rotateLock !== true) {
-    context.translate(opts.height, 0);
-    context.rotate(90 * Math.PI / 180);
-  } else if (opts._rotate_ !== true) {
-    context.translate(opts.height, 0);
-    context.rotate(90 * Math.PI / 180);
-    opts._rotate_ = true;
-  }
-}
-
-function drawPointShape(points, color, shape, context, opts) {
-  context.beginPath();
-  if (opts.dataPointShapeType == 'hollow') {
-    context.setStrokeStyle(color);
-    context.setFillStyle(opts.background);
-    context.setLineWidth(2 * opts.pix);
-  } else {
-    context.setStrokeStyle("#ffffff");
-    context.setFillStyle(color);
-    context.setLineWidth(1 * opts.pix);
-  }
-  if (shape === 'diamond') {
-    points.forEach(function(item, index) {
-      if (item !== null) {
-        context.moveTo(item.x, item.y - 4.5);
-        context.lineTo(item.x - 4.5, item.y);
-        context.lineTo(item.x, item.y + 4.5);
-        context.lineTo(item.x + 4.5, item.y);
-        context.lineTo(item.x, item.y - 4.5);
-      }
-    });
-  } else if (shape === 'circle') {
-    points.forEach(function(item, index) {
-      if (item !== null) {
-        context.moveTo(item.x + 2.5 * opts.pix, item.y);
-        context.arc(item.x, item.y, 3 * opts.pix, 0, 2 * Math.PI, false);
-      }
-    });
-  } else if (shape === 'square') {
-    points.forEach(function(item, index) {
-      if (item !== null) {
-        context.moveTo(item.x - 3.5, item.y - 3.5);
-        context.rect(item.x - 3.5, item.y - 3.5, 7, 7);
-      }
-    });
-  } else if (shape === 'triangle') {
-    points.forEach(function(item, index) {
-      if (item !== null) {
-        context.moveTo(item.x, item.y - 4.5);
-        context.lineTo(item.x - 4.5, item.y + 4.5);
-        context.lineTo(item.x + 4.5, item.y + 4.5);
-        context.lineTo(item.x, item.y - 4.5);
-      }
-    });
-  } else if (shape === 'triangle') {
-    return;
-  }
-  context.closePath();
-  context.fill();
-  context.stroke();
-}
-
-function drawRingTitle(opts, config, context, center) {
-  var titlefontSize = opts.title.fontSize || config.titleFontSize;
-  var subtitlefontSize = opts.subtitle.fontSize || config.subtitleFontSize;
-  var title = opts.title.name || '';
-  var subtitle = opts.subtitle.name || '';
-  var titleFontColor = opts.title.color || opts.fontColor;
-  var subtitleFontColor = opts.subtitle.color || opts.fontColor;
-  var titleHeight = title ? titlefontSize : 0;
-  var subtitleHeight = subtitle ? subtitlefontSize : 0;
-  var margin = 5;
-  if (subtitle) {
-    var textWidth = measureText(subtitle, subtitlefontSize * opts.pix, context);
-    var startX = center.x - textWidth / 2 + (opts.subtitle.offsetX|| 0) * opts.pix ;
-    var startY = center.y + subtitlefontSize * opts.pix / 2 + (opts.subtitle.offsetY || 0) * opts.pix;
-    if (title) {
-      startY += (titleHeight * opts.pix + margin) / 2;
-    }
-    context.beginPath();
-    context.setFontSize(subtitlefontSize * opts.pix);
-    context.setFillStyle(subtitleFontColor);
-    context.fillText(subtitle, startX, startY);
-    context.closePath();
-    context.stroke();
-  }
-  if (title) {
-    var _textWidth = measureText(title, titlefontSize * opts.pix, context);
-    var _startX = center.x - _textWidth / 2 + (opts.title.offsetX || 0);
-    var _startY = center.y + titlefontSize * opts.pix / 2 + (opts.title.offsetY || 0) * opts.pix;
-    if (subtitle) {
-      _startY -= (subtitleHeight * opts.pix + margin) / 2;
-    }
-    context.beginPath();
-    context.setFontSize(titlefontSize * opts.pix);
-    context.setFillStyle(titleFontColor);
-    context.fillText(title, _startX, _startY);
-    context.closePath();
-    context.stroke();
-  }
-}
-
-function drawPointText(points, series, config, context, opts) {
-  // 绘制数据文案
-  var data = series.data;
-  var textOffset = series.textOffset ? series.textOffset : 0;
-  points.forEach(function(item, index) {
-    if (item !== null) {
-      context.beginPath();
-      var fontSize = series.textSize ? series.textSize * opts.pix : config.fontSize;
-      context.setFontSize(fontSize);
-      context.setFillStyle(series.textColor || opts.fontColor);
-      var value = data[index]
-      if (typeof data[index] === 'object' && data[index] !== null) {
-        if (data[index].constructor.toString().indexOf('Array')>-1) {
-          value = data[index][1];
-        } else {
-          value = data[index].value
-        }
-      }
-      var formatVal = series.formatter ? series.formatter(value,index) : value;
-      context.setTextAlign('center');
-      context.fillText(String(formatVal), item.x, item.y - 4 + textOffset * opts.pix);
-      context.closePath();
-      context.stroke();
-      context.setTextAlign('left');
-    }
-  });
-}
-
-function drawBarPointText(points, series, config, context, opts) {
-  // 绘制数据文案
-  var data = series.data;
-  var textOffset = series.textOffset ? series.textOffset : 0;
-  points.forEach(function(item, index) {
-    if (item !== null) {
-      context.beginPath();
-      var fontSize = series.textSize ? series.textSize * opts.pix : config.fontSize;
-      context.setFontSize(fontSize);
-      context.setFillStyle(series.textColor || opts.fontColor);
-      var value = data[index]
-      if (typeof data[index] === 'object' && data[index] !== null) {
-        value = data[index].value ;
-      }
-      var formatVal = series.formatter ? series.formatter(value,index) : value;
-      context.setTextAlign('left');
-      context.fillText(String(formatVal), item.x + 4 * opts.pix , item.y + fontSize / 2 - 3 );
-      context.closePath();
-      context.stroke();
-    }
-  });
-}
-
-function drawGaugeLabel(gaugeOption, radius, centerPosition, opts, config, context) {
-  radius -= gaugeOption.width / 2 + gaugeOption.labelOffset * opts.pix;
-  let totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1;
-  let splitAngle = totalAngle / gaugeOption.splitLine.splitNumber;
-  let totalNumber = gaugeOption.endNumber - gaugeOption.startNumber;
-  let splitNumber = totalNumber / gaugeOption.splitLine.splitNumber;
-  let nowAngle = gaugeOption.startAngle;
-  let nowNumber = gaugeOption.startNumber;
-  for (let i = 0; i < gaugeOption.splitLine.splitNumber + 1; i++) {
-    var pos = {
-      x: radius * Math.cos(nowAngle * Math.PI),
-      y: radius * Math.sin(nowAngle * Math.PI)
-    };
-    var labelText = gaugeOption.formatter ? gaugeOption.formatter(nowNumber) : nowNumber;
-    pos.x += centerPosition.x - measureText(labelText, config.fontSize, context) / 2;
-    pos.y += centerPosition.y;
-    var startX = pos.x;
-    var startY = pos.y;
-    context.beginPath();
-    context.setFontSize(config.fontSize);
-    context.setFillStyle(gaugeOption.labelColor || opts.fontColor);
-    context.fillText(labelText, startX, startY + config.fontSize / 2);
-    context.closePath();
-    context.stroke();
-    nowAngle += splitAngle;
-    if (nowAngle >= 2) {
-      nowAngle = nowAngle % 2;
-    }
-    nowNumber += splitNumber;
-  }
-
-}
-
-function drawRadarLabel(angleList, radius, centerPosition, opts, config, context) {
-  var radarOption = opts.extra.radar || {};
-  radius += config.radarLabelTextMargin * opts.pix;
-  angleList.forEach(function(angle, index) {
-    var pos = {
-      x: radius * Math.cos(angle),
-      y: radius * Math.sin(angle)
-    };
-    var posRelativeCanvas = convertCoordinateOrigin(pos.x, pos.y, centerPosition);
-    var startX = posRelativeCanvas.x;
-    var startY = posRelativeCanvas.y;
-    if (util.approximatelyEqual(pos.x, 0)) {
-      startX -= measureText(opts.categories[index] || '', config.fontSize, context) / 2;
-    } else if (pos.x < 0) {
-      startX -= measureText(opts.categories[index] || '', config.fontSize, context);
-    }
-    context.beginPath();
-    context.setFontSize(config.fontSize);
-    context.setFillStyle(radarOption.labelColor || opts.fontColor);
-    context.fillText(opts.categories[index] || '', startX, startY + config.fontSize / 2);
-    context.closePath();
-    context.stroke();
-  });
-
-}
-
-function drawPieText(series, opts, config, context, radius, center) {
-  var lineRadius = config.pieChartLinePadding;
-  var textObjectCollection = [];
-  var lastTextObject = null;
-  var seriesConvert = series.map(function(item,index,series) {
-    var text = item.formatter ? item.formatter(item,index,series) : util.toFixed(item._proportion_.toFixed(4) * 100) + '%';
-    var arc = 2 * Math.PI - (item._start_ + 2 * Math.PI * item._proportion_ / 2);
-    if (item._rose_proportion_) {
-      arc = 2 * Math.PI - (item._start_ + 2 * Math.PI * item._rose_proportion_ / 2);
-    }
-    var color = item.color;
-    var radius = item._radius_;
-    return {
-      arc: arc,
-      text: text,
-      color: color,
-      radius: radius,
-      textColor: item.textColor,
-      textSize: item.textSize,
-    };
-  });
-  for (let i = 0; i < seriesConvert.length; i++) {
-    let item = seriesConvert[i];
-    // line end
-    let orginX1 = Math.cos(item.arc) * (item.radius + lineRadius);
-    let orginY1 = Math.sin(item.arc) * (item.radius + lineRadius);
-    // line start
-    let orginX2 = Math.cos(item.arc) * item.radius;
-    let orginY2 = Math.sin(item.arc) * item.radius;
-    // text start
-    let orginX3 = orginX1 >= 0 ? orginX1 + config.pieChartTextPadding : orginX1 - config.pieChartTextPadding;
-    let orginY3 = orginY1;
-    let textWidth = measureText(item.text, item.textSize * opts.pix || config.fontSize, context);
-    let startY = orginY3;
-    if (lastTextObject && util.isSameXCoordinateArea(lastTextObject.start, {
-        x: orginX3
-      })) {
-      if (orginX3 > 0) {
-        startY = Math.min(orginY3, lastTextObject.start.y);
-      } else if (orginX1 < 0) {
-        startY = Math.max(orginY3, lastTextObject.start.y);
-      } else {
-        if (orginY3 > 0) {
-          startY = Math.max(orginY3, lastTextObject.start.y);
-        } else {
-          startY = Math.min(orginY3, lastTextObject.start.y);
-        }
-      }
-    }
-    if (orginX3 < 0) {
-      orginX3 -= textWidth;
-    }
-    let textObject = {
-      lineStart: {
-        x: orginX2,
-        y: orginY2
-      },
-      lineEnd: {
-        x: orginX1,
-        y: orginY1
-      },
-      start: {
-        x: orginX3,
-        y: startY
-      },
-      width: textWidth,
-      height: config.fontSize,
-      text: item.text,
-      color: item.color,
-      textColor: item.textColor,
-      textSize: item.textSize
-    };
-    lastTextObject = avoidCollision(textObject, lastTextObject);
-    textObjectCollection.push(lastTextObject);
-  }
-  for (let i = 0; i < textObjectCollection.length; i++) {
-    let item = textObjectCollection[i];
-    let lineStartPoistion = convertCoordinateOrigin(item.lineStart.x, item.lineStart.y, center);
-    let lineEndPoistion = convertCoordinateOrigin(item.lineEnd.x, item.lineEnd.y, center);
-    let textPosition = convertCoordinateOrigin(item.start.x, item.start.y, center);
-    context.setLineWidth(1 * opts.pix);
-    context.setFontSize(item.textSize * opts.pix || config.fontSize);
-    context.beginPath();
-    context.setStrokeStyle(item.color);
-    context.setFillStyle(item.color);
-    context.moveTo(lineStartPoistion.x, lineStartPoistion.y);
-    let curveStartX = item.start.x < 0 ? textPosition.x + item.width : textPosition.x;
-    let textStartX = item.start.x < 0 ? textPosition.x - 5 : textPosition.x + 5;
-    context.quadraticCurveTo(lineEndPoistion.x, lineEndPoistion.y, curveStartX, textPosition.y);
-    context.moveTo(lineStartPoistion.x, lineStartPoistion.y);
-    context.stroke();
-    context.closePath();
-    context.beginPath();
-    context.moveTo(textPosition.x + item.width, textPosition.y);
-    context.arc(curveStartX, textPosition.y, 2, 0, 2 * Math.PI);
-    context.closePath();
-    context.fill();
-    context.beginPath();
-    context.setFontSize(item.textSize * opts.pix || config.fontSize);
-    context.setFillStyle(item.textColor || opts.fontColor);
-    context.fillText(item.text, textStartX, textPosition.y + 3);
-    context.closePath();
-    context.stroke();
-    context.closePath();
-  }
-}
-
-function drawToolTipSplitLine(offsetX, opts, config, context) {
-  var toolTipOption = opts.extra.tooltip || {};
-  toolTipOption.gridType = toolTipOption.gridType == undefined ? 'solid' : toolTipOption.gridType;
-  toolTipOption.dashLength = toolTipOption.dashLength == undefined ? 4 : toolTipOption.dashLength;
-  var startY = opts.area[0];
-  var endY = opts.height - opts.area[2];
-  if (toolTipOption.gridType == 'dash') {
-    context.setLineDash([toolTipOption.dashLength, toolTipOption.dashLength]);
-  }
-  context.setStrokeStyle(toolTipOption.gridColor || '#cccccc');
-  context.setLineWidth(1 * opts.pix);
-  context.beginPath();
-  context.moveTo(offsetX, startY);
-  context.lineTo(offsetX, endY);
-  context.stroke();
-  context.setLineDash([]);
-  if (toolTipOption.xAxisLabel) {
-    let labelText = opts.categories[opts.tooltip.index];
-    context.setFontSize(config.fontSize);
-    let textWidth = measureText(labelText, config.fontSize, context);
-    let textX = offsetX - 0.5 * textWidth;
-    let textY = endY;
-    context.beginPath();
-    context.setFillStyle(hexToRgb(toolTipOption.labelBgColor || config.toolTipBackground, toolTipOption.labelBgOpacity || config.toolTipOpacity));
-    context.setStrokeStyle(toolTipOption.labelBgColor || config.toolTipBackground);
-    context.setLineWidth(1 * opts.pix);
-    context.rect(textX - config.toolTipPadding, textY, textWidth + 2 * config.toolTipPadding, config.fontSize + 2 * config.toolTipPadding);
-    context.closePath();
-    context.stroke();
-    context.fill();
-    context.beginPath();
-    context.setFontSize(config.fontSize);
-    context.setFillStyle(toolTipOption.labelFontColor || opts.fontColor);
-    context.fillText(String(labelText), textX, textY + config.toolTipPadding + config.fontSize);
-    context.closePath();
-    context.stroke();
-  }
-}
-
-function drawMarkLine(opts, config, context) {
-  let markLineOption = assign({}, {
-    type: 'solid',
-    dashLength: 4,
-    data: []
-  }, opts.extra.markLine);
-  let startX = opts.area[3];
-  let endX = opts.width - opts.area[1];
-  let points = calMarkLineData(markLineOption.data, opts);
-  for (let i = 0; i < points.length; i++) {
-    let item = assign({}, {
-      lineColor: '#DE4A42',
-      showLabel: false,
-      labelFontColor: '#666666',
-      labelBgColor: '#DFE8FF',
-      labelBgOpacity: 0.8,
-      yAxisIndex: 0
-    }, points[i]);
-    if (markLineOption.type == 'dash') {
-      context.setLineDash([markLineOption.dashLength, markLineOption.dashLength]);
-    }
-    context.setStrokeStyle(item.lineColor);
-    context.setLineWidth(1 * opts.pix);
-    context.beginPath();
-    context.moveTo(startX, item.y);
-    context.lineTo(endX, item.y);
-    context.stroke();
-    context.setLineDash([]);
-    if (item.showLabel) {
-      let labelText = opts.yAxis.formatter ? opts.yAxis.formatter(item.value) : item.value;
-      context.setFontSize(config.fontSize);
-      let textWidth = measureText(labelText, config.fontSize, context);
-      let yAxisWidth = opts.chartData.yAxisData.yAxisWidth[0].width;
-      let bgStartX = opts.area[3] - textWidth - config.toolTipPadding * 2;
-      let bgEndX = opts.area[3];
-      let bgWidth = bgEndX - bgStartX;
-      let textX = bgEndX - config.toolTipPadding;
-      let textY = item.y;
-      context.setFillStyle(hexToRgb(item.labelBgColor, item.labelBgOpacity));
-      context.setStrokeStyle(item.labelBgColor);
-      context.setLineWidth(1 * opts.pix);
-      context.beginPath();
-      context.rect(bgStartX, textY - 0.5 * config.fontSize - config.toolTipPadding, bgWidth, config.fontSize + 2 * config.toolTipPadding);
-      context.closePath();
-      context.stroke();
-      context.fill();
-      context.setFontSize(config.fontSize);
-      context.setTextAlign('right');
-      context.setFillStyle(item.labelFontColor);
-      context.fillText(String(labelText), textX, textY + 0.5 * config.fontSize);
-      context.stroke();
-      context.setTextAlign('left');
-    }
-  }
-}
-
-function drawToolTipHorizentalLine(opts, config, context, eachSpacing, xAxisPoints) {
-  var toolTipOption = assign({}, {
-    gridType: 'solid',
-    dashLength: 4
-  }, opts.extra.tooltip);
-  var startX = opts.area[3];
-  var endX = opts.width - opts.area[1];
-  if (toolTipOption.gridType == 'dash') {
-    context.setLineDash([toolTipOption.dashLength, toolTipOption.dashLength]);
-  }
-  context.setStrokeStyle(toolTipOption.gridColor || '#cccccc');
-  context.setLineWidth(1 * opts.pix);
-  context.beginPath();
-  context.moveTo(startX, opts.tooltip.offset.y);
-  context.lineTo(endX, opts.tooltip.offset.y);
-  context.stroke();
-  context.setLineDash([]);
-  if (toolTipOption.yAxisLabel) {
-    let labelText = calTooltipYAxisData(opts.tooltip.offset.y, opts.series, opts, config, eachSpacing);
-    let widthArr = opts.chartData.yAxisData.yAxisWidth;
-    let tStartLeft = opts.area[3];
-    let tStartRight = opts.width - opts.area[1];
-    for (let i = 0; i < labelText.length; i++) {
-      context.setFontSize(config.fontSize);
-      let textWidth = measureText(labelText[i], config.fontSize, context);
-      let bgStartX, bgEndX, bgWidth;
-      if (widthArr[i].position == 'left') {
-        bgStartX = tStartLeft - widthArr[i].width;
-        bgEndX = Math.max(bgStartX, bgStartX + textWidth + config.toolTipPadding * 2);
-      } else {
-        bgStartX = tStartRight;
-        bgEndX = Math.max(bgStartX + widthArr[i].width, bgStartX + textWidth + config.toolTipPadding * 2);
-      }
-      bgWidth = bgEndX - bgStartX;
-      let textX = bgStartX + (bgWidth - textWidth) / 2;
-      let textY = opts.tooltip.offset.y;
-      context.beginPath();
-      context.setFillStyle(hexToRgb(toolTipOption.labelBgColor || config.toolTipBackground, toolTipOption.labelBgOpacity || config.toolTipOpacity));
-      context.setStrokeStyle(toolTipOption.labelBgColor || config.toolTipBackground);
-      context.setLineWidth(1 * opts.pix);
-      context.rect(bgStartX, textY - 0.5 * config.fontSize - config.toolTipPadding, bgWidth, config.fontSize + 2 *
-        config.toolTipPadding);
-      context.closePath();
-      context.stroke();
-      context.fill();
-      context.beginPath();
-      context.setFontSize(config.fontSize);
-      context.setFillStyle(toolTipOption.labelFontColor || opts.fontColor);
-      context.fillText(labelText[i], textX, textY + 0.5 * config.fontSize);
-      context.closePath();
-      context.stroke();
-      if (widthArr[i].position == 'left') {
-        tStartLeft -= (widthArr[i].width + opts.yAxis.padding * opts.pix);
-      } else {
-        tStartRight += widthArr[i].width + opts.yAxis.padding * opts.pix;
-      }
-    }
-  }
-}
-
-function drawToolTipSplitArea(offsetX, opts, config, context, eachSpacing) {
-  var toolTipOption = assign({}, {
-    activeBgColor: '#000000',
-    activeBgOpacity: 0.08
-  }, opts.extra.column);
-  var startY = opts.area[0];
-  var endY = opts.height - opts.area[2];
-  context.beginPath();
-  context.setFillStyle(hexToRgb(toolTipOption.activeBgColor, toolTipOption.activeBgOpacity));
-  context.rect(offsetX - eachSpacing / 2, startY, eachSpacing, endY - startY);
-  context.closePath();
-  context.fill();
-  context.setFillStyle("#FFFFFF");
-}
-
-function drawBarToolTipSplitArea(offsetX, opts, config, context, eachSpacing) {
-  var toolTipOption = assign({}, {
-    activeBgColor: '#000000',
-    activeBgOpacity: 0.08
-  }, opts.extra.bar);
-  var startX = opts.area[3];
-  var endX = opts.width - opts.area[1];
-  context.beginPath();
-  context.setFillStyle(hexToRgb(toolTipOption.activeBgColor, toolTipOption.activeBgOpacity));
-  context.rect( startX ,offsetX - eachSpacing / 2 ,  endX - startX,eachSpacing);
-  context.closePath();
-  context.fill();
-  context.setFillStyle("#FFFFFF");
-}
-
-function drawToolTip(textList, offset, opts, config, context, eachSpacing, xAxisPoints) {
-  var toolTipOption = assign({}, {
-    showBox: true,
-    showArrow: true,
-    showCategory: false,
-    bgColor: '#000000',
-    bgOpacity: 0.7,
-    borderColor: '#000000',
-    borderWidth: 0,
-    borderRadius: 0,
-    borderOpacity: 0.7,
-    fontColor: '#FFFFFF',
-    splitLine: true,
-  }, opts.extra.tooltip);
-  if(toolTipOption.showCategory==true && opts.categories){
-    textList.unshift({text:opts.categories[opts.tooltip.index],color:null})
-  }
-  var legendWidth = 4 * opts.pix;
-  var legendMarginRight = 5 * opts.pix;
-  var arrowWidth = toolTipOption.showArrow ? 8 * opts.pix : 0;
-  var isOverRightBorder = false;
-  if (opts.type == 'line' || opts.type == 'area' || opts.type == 'candle' || opts.type == 'mix') {
-    if (toolTipOption.splitLine == true) {
-      drawToolTipSplitLine(opts.tooltip.offset.x, opts, config, context);
-    }
-  }
-  offset = assign({
-    x: 0,
-    y: 0
-  }, offset);
-  offset.y -= 8 * opts.pix;
-  var textWidth = textList.map(function(item) {
-    return measureText(item.text, config.fontSize, context);
-  });
-  var toolTipWidth = legendWidth + legendMarginRight + 4 * config.toolTipPadding + Math.max.apply(null, textWidth);
-  var toolTipHeight = 2 * config.toolTipPadding + textList.length * config.toolTipLineHeight;
-  if (toolTipOption.showBox == false) {
-    return
-  }
-  // if beyond the right border
-  if (offset.x - Math.abs(opts._scrollDistance_ || 0) + arrowWidth + toolTipWidth > opts.width) {
-    isOverRightBorder = true;
-  }
-  if (toolTipHeight + offset.y > opts.height) {
-    offset.y = opts.height - toolTipHeight;
-  }
-  // draw background rect
-  context.beginPath();
-  context.setFillStyle(hexToRgb(toolTipOption.bgColor || config.toolTipBackground, toolTipOption.bgOpacity || config.toolTipOpacity));
-  context.setLineWidth(toolTipOption.borderWidth * opts.pix);
-  context.setStrokeStyle(hexToRgb(toolTipOption.borderColor, toolTipOption.borderOpacity));
-  var radius = toolTipOption.borderRadius;
-  if (isOverRightBorder) {
-    if (toolTipOption.showArrow) {
-      context.moveTo(offset.x, offset.y + 10 * opts.pix);
-      context.lineTo(offset.x - arrowWidth, offset.y + 10 * opts.pix + 5 * opts.pix);
-    }
-    context.arc(offset.x - arrowWidth - radius, offset.y + toolTipHeight - radius, radius, 0, Math.PI / 2, false);
-    context.arc(offset.x - arrowWidth - Math.round(toolTipWidth) + radius, offset.y + toolTipHeight - radius, radius,
-      Math.PI / 2, Math.PI, false);
-    context.arc(offset.x - arrowWidth - Math.round(toolTipWidth) + radius, offset.y + radius, radius, -Math.PI, -Math.PI / 2, false);
-    context.arc(offset.x - arrowWidth - radius, offset.y + radius, radius, -Math.PI / 2, 0, false);
-    if (toolTipOption.showArrow) {
-      context.lineTo(offset.x - arrowWidth, offset.y + 10 * opts.pix - 5 * opts.pix);
-      context.lineTo(offset.x, offset.y + 10 * opts.pix);
-    }
-  } else {
-    if (toolTipOption.showArrow) {
-      context.moveTo(offset.x, offset.y + 10 * opts.pix);
-      context.lineTo(offset.x + arrowWidth, offset.y + 10 * opts.pix - 5 * opts.pix);
-    }
-    context.arc(offset.x + arrowWidth + radius, offset.y + radius, radius, -Math.PI, -Math.PI / 2, false);
-    context.arc(offset.x + arrowWidth + Math.round(toolTipWidth) - radius, offset.y + radius, radius, -Math.PI / 2, 0,
-      false);
-    context.arc(offset.x + arrowWidth + Math.round(toolTipWidth) - radius, offset.y + toolTipHeight - radius, radius, 0,
-      Math.PI / 2, false);
-    context.arc(offset.x + arrowWidth + radius, offset.y + toolTipHeight - radius, radius, Math.PI / 2, Math.PI, false);
-    if (toolTipOption.showArrow) {
-      context.lineTo(offset.x + arrowWidth, offset.y + 10 * opts.pix + 5 * opts.pix);
-      context.lineTo(offset.x, offset.y + 10 * opts.pix);
-    }
-  }
-  context.closePath();
-  context.fill();
-  if (toolTipOption.borderWidth > 0) {
-    context.stroke();
-  }
-  // draw legend
-  textList.forEach(function(item, index) {
-    if (item.color !== null) {
-      context.beginPath();
-      context.setFillStyle(item.color);
-      var startX = offset.x + arrowWidth + 2 * config.toolTipPadding;
-      var startY = offset.y + (config.toolTipLineHeight - config.fontSize) / 2 + config.toolTipLineHeight * index + config.toolTipPadding + 1;
-      if (isOverRightBorder) {
-        startX = offset.x - toolTipWidth - arrowWidth + 2 * config.toolTipPadding;
-      }
-      context.fillRect(startX, startY, legendWidth, config.fontSize);
-      context.closePath();
-    }
-  });
-  // draw text list
-  textList.forEach(function(item, index) {
-    var startX = offset.x + arrowWidth + 2 * config.toolTipPadding + legendWidth + legendMarginRight;
-    if (isOverRightBorder) {
-      startX = offset.x - toolTipWidth - arrowWidth + 2 * config.toolTipPadding + +legendWidth + legendMarginRight;
-    }
-    var startY = offset.y + (config.toolTipLineHeight - config.fontSize) / 2 + config.toolTipLineHeight * index + config.toolTipPadding;
-    context.beginPath();
-    context.setFontSize(config.fontSize);
-    context.setFillStyle(toolTipOption.fontColor);
-    context.fillText(item.text, startX, startY + config.fontSize);
-    context.closePath();
-    context.stroke();
-  });
-}
-
-function drawColumnDataPoints(series, opts, config, context) {
-  let process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
-  let xAxisData = opts.chartData.xAxisData,
-    xAxisPoints = xAxisData.xAxisPoints,
-    eachSpacing = xAxisData.eachSpacing;
-  let columnOption = assign({}, {
-    type: 'group',
-    width: eachSpacing / 2,
-    meterBorder: 4,
-    meterFillColor: '#FFFFFF',
-    barBorderCircle: false,
-    barBorderRadius: [],
-    seriesGap: 2,
-    linearType: 'none',
-    linearOpacity: 1,
-    customColor: [],
-    colorStop: 0,
-  }, opts.extra.column);
-  let calPoints = [];
-  context.save();
-  let leftNum = -2;
-  let rightNum = xAxisPoints.length + 2;
-  if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
-    context.translate(opts._scrollDistance_, 0);
-    leftNum = Math.floor(-opts._scrollDistance_ / eachSpacing) - 2;
-    rightNum = leftNum + opts.xAxis.itemCount + 4;
-  }
-  if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) {
-    drawToolTipSplitArea(opts.tooltip.offset.x, opts, config, context, eachSpacing);
-  }
-  columnOption.customColor = fillCustomColor(columnOption.linearType, columnOption.customColor, series, config);
-  series.forEach(function(eachSeries, seriesIndex) {
-    let ranges, minRange, maxRange;
-    ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
-    minRange = ranges.pop();
-    maxRange = ranges.shift();
-    var data = eachSeries.data;
-    switch (columnOption.type) {
-      case 'group':
-        var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
-        var tooltipPoints = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, series, process);
-        calPoints.push(tooltipPoints);
-        points = fixColumeData(points, eachSpacing, series.length, seriesIndex, config, opts);
-        for (let i = 0; i < points.length; i++) {
-          let item = points[i];
-          //fix issues/I27B1N yyoinge & Joeshu
-          if (item !== null && i > leftNum && i < rightNum) {
-            var startX = item.x - item.width / 2;
-            var height = opts.height - item.y - opts.area[2];
-            context.beginPath();
-            var fillColor = item.color || eachSeries.color
-            var strokeColor = item.color || eachSeries.color
-            if (columnOption.linearType !== 'none') {
-              var grd = context.createLinearGradient(startX, item.y, startX, opts.height - opts.area[2]);
-              //透明渐变
-              if (columnOption.linearType == 'opacity') {
-                grd.addColorStop(0, hexToRgb(fillColor, columnOption.linearOpacity));
-                grd.addColorStop(1, hexToRgb(fillColor, 1));
-              } else {
-                grd.addColorStop(0, hexToRgb(columnOption.customColor[eachSeries.linearIndex], columnOption.linearOpacity));
-                grd.addColorStop(columnOption.colorStop, hexToRgb(columnOption.customColor[eachSeries.linearIndex],columnOption.linearOpacity));
-                grd.addColorStop(1, hexToRgb(fillColor, 1));
-              }
-              fillColor = grd
-            }
-            // 圆角边框
-            if ((columnOption.barBorderRadius && columnOption.barBorderRadius.length === 4) || columnOption.barBorderCircle === true) {
-              const left = startX;
-              const top = item.y;
-              const width = item.width;
-              const height = opts.height - opts.area[2] - item.y;
-              if (columnOption.barBorderCircle) {
-                columnOption.barBorderRadius = [width / 2, width / 2, 0, 0];
-              }
-              let [r0, r1, r2, r3] = columnOption.barBorderRadius;
-              let minRadius = Math.min(width/2,height/2);
-              r0 = r0 > minRadius ? minRadius : r0;
-              r1 = r1 > minRadius ? minRadius : r1;
-              r2 = r2 > minRadius ? minRadius : r2;
-              r3 = r3 > minRadius ? minRadius : r3;
-              r0 = r0 < 0 ? 0 : r0;
-              r1 = r1 < 0 ? 0 : r1;
-              r2 = r2 < 0 ? 0 : r2;
-              r3 = r3 < 0 ? 0 : r3;
-              context.arc(left + r0, top + r0, r0, -Math.PI, -Math.PI / 2);
-              context.arc(left + width - r1, top + r1, r1, -Math.PI / 2, 0);
-              context.arc(left + width - r2, top + height - r2, r2, 0, Math.PI / 2);
-              context.arc(left + r3, top + height - r3, r3, Math.PI / 2, Math.PI);
-            } else {
-              context.moveTo(startX, item.y);
-              context.lineTo(startX + item.width - 2, item.y);
-              context.lineTo(startX + item.width - 2, opts.height - opts.area[2]);
-              context.lineTo(startX, opts.height - opts.area[2]);
-              context.lineTo(startX, item.y);
-              context.setLineWidth(1)
-              context.setStrokeStyle(strokeColor);
-            }
-            context.setFillStyle(fillColor);
-            context.closePath();
-            //context.stroke();
-            context.fill();
-          }
-        };
-        break;
-      case 'stack':
-        // 绘制堆叠数据图
-        var points = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, series, process);
-        calPoints.push(points);
-        points = fixColumeStackData(points, eachSpacing, series.length, seriesIndex, config, opts, series);
-        for (let i = 0; i < points.length; i++) {
-          let item = points[i];
-          if (item !== null && i > leftNum && i < rightNum) {
-            context.beginPath();
-            var fillColor = item.color || eachSeries.color;
-            var startX = item.x - item.width / 2 + 1;
-            var height = opts.height - item.y - opts.area[2];
-            var height0 = opts.height - item.y0 - opts.area[2];
-            if (seriesIndex > 0) {
-              height -= height0;
-            }
-            context.setFillStyle(fillColor);
-            context.moveTo(startX, item.y);
-            context.fillRect(startX, item.y, item.width - 2, height);
-            context.closePath();
-            context.fill();
-          }
-        };
-        break;
-      case 'meter':
-        // 绘制温度计数据图
-        var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
-        calPoints.push(points);
-        points = fixColumeMeterData(points, eachSpacing, series.length, seriesIndex, config, opts, columnOption.meterBorder);
-        if (seriesIndex == 0) {
-          for (let i = 0; i < points.length; i++) {
-            let item = points[i];
-            if (item !== null && i > leftNum && i < rightNum) {
-              //画背景颜色
-              context.beginPath();
-              context.setFillStyle(columnOption.meterFillColor);
-              var startX = item.x - item.width / 2;
-              var height = opts.height - item.y - opts.area[2];
-              if (columnOption.barBorderCircle) {
-                var barBorderRadius = (item.width - columnOption.meterBorder*2) / 2;
-                if(barBorderRadius>height){
-                  barBorderRadius = height;
-                }
-                context.moveTo(startX + columnOption.meterBorder, opts.height - opts.area[2]);
-                context.lineTo(startX + columnOption.meterBorder, item.y + barBorderRadius);
-                context.arc(startX + item.width/2, item.y + barBorderRadius, barBorderRadius, -Math.PI, 0);
-                context.lineTo(startX + item.width - columnOption.meterBorder , opts.height - opts.area[2]);
-                context.lineTo(startX, opts.height - opts.area[2]);
-                context.fill();
-              }else{
-                context.moveTo(startX, item.y);
-                context.fillRect(startX, item.y, item.width, height);
-                context.closePath();
-                context.fill();
-              }
-              //画边框线
-              if (columnOption.meterBorder > 0) {
-                context.beginPath();
-                context.setStrokeStyle(eachSeries.color);
-                context.setLineWidth(columnOption.meterBorder * opts.pix);
-                if (columnOption.barBorderCircle) {
-                  var barBorderRadius = (item.width - columnOption.meterBorder)/ 2;
-                  if(barBorderRadius>height){
-                    barBorderRadius = height;
-                  }
-                  context.moveTo(startX  + columnOption.meterBorder * 0.5, opts.height - opts.area[2]);
-                  context.lineTo(startX + columnOption.meterBorder * 0.5, item.y + barBorderRadius);
-                  context.arc(startX + item.width/2, item.y + barBorderRadius - columnOption.meterBorder * 0.5, barBorderRadius, -Math.PI, 0);
-                  context.lineTo(startX + item.width - columnOption.meterBorder * 0.5, opts.height - opts.area[2]);
-                }else{
-                  context.moveTo(startX + columnOption.meterBorder * 0.5, item.y + height);
-                  context.lineTo(startX + columnOption.meterBorder * 0.5, item.y + columnOption.meterBorder * 0.5);
-                  context.lineTo(startX + item.width - columnOption.meterBorder * 0.5, item.y + columnOption.meterBorder * 0.5);
-                  context.lineTo(startX + item.width - columnOption.meterBorder * 0.5, item.y + height);
-                }
-                context.stroke();
-              }
-            }
-          };
-        } else {
-          for (let i = 0; i < points.length; i++) {
-            let item = points[i];
-            if (item !== null && i > leftNum && i < rightNum) {
-              context.beginPath();
-              context.setFillStyle(item.color || eachSeries.color);
-              var startX = item.x - item.width / 2;
-              var height = opts.height - item.y - opts.area[2];
-              if (columnOption.barBorderCircle) {
-                var barBorderRadius = item.width / 2;
-                if(barBorderRadius>height){
-                  barBorderRadius = height;
-                }
-                context.moveTo(startX, opts.height - opts.area[2]);
-                context.arc(startX + barBorderRadius, item.y + barBorderRadius, barBorderRadius, -Math.PI, -Math.PI / 2);
-                context.arc(startX + item.width - barBorderRadius, item.y + barBorderRadius, barBorderRadius, -Math.PI / 2, 0);
-                context.lineTo(startX + item.width, opts.height - opts.area[2]);
-                context.lineTo(startX, opts.height - opts.area[2]);
-                context.fill();
-              }else{
-                context.moveTo(startX, item.y);
-                context.fillRect(startX, item.y, item.width, height);
-                context.closePath();
-                context.fill();
-              }
-            }
-          };
-        }
-        break;
-    }
-  });
-
-  if (opts.dataLabel !== false && process === 1) {
-    series.forEach(function(eachSeries, seriesIndex) {
-      let ranges, minRange, maxRange;
-      ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
-      minRange = ranges.pop();
-      maxRange = ranges.shift();
-      var data = eachSeries.data;
-      switch (columnOption.type) {
-        case 'group':
-          var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
-          points = fixColumeData(points, eachSpacing, series.length, seriesIndex, config, opts);
-          drawPointText(points, eachSeries, config, context, opts);
-          break;
-        case 'stack':
-          var points = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, series, process);
-          drawPointText(points, eachSeries, config, context, opts);
-          break;
-        case 'meter':
-          var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
-          drawPointText(points, eachSeries, config, context, opts);
-          break;
-      }
-    });
-  }
-  context.restore();
-  return {
-    xAxisPoints: xAxisPoints,
-    calPoints: calPoints,
-    eachSpacing: eachSpacing
-  };
-}
-
-function drawBarDataPoints(series, opts, config, context) {
-  let process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
-  let yAxisPoints = [];
-  let eachSpacing = (opts.height - opts.area[0] - opts.area[2])/opts.categories.length;
-  for (let i = 0; i < opts.categories.length; i++) {
-    yAxisPoints.push(opts.area[0] + eachSpacing / 2 + eachSpacing * i);
-  }
-  let columnOption = assign({}, {
-    type: 'group',
-    width: eachSpacing / 2,
-    meterBorder: 4,
-    meterFillColor: '#FFFFFF',
-    barBorderCircle: false,
-    barBorderRadius: [],
-    seriesGap: 2,
-    linearType: 'none',
-    linearOpacity: 1,
-    customColor: [],
-    colorStop: 0,
-  }, opts.extra.bar);
-  let calPoints = [];
-  context.save();
-  let leftNum = -2;
-  let rightNum = yAxisPoints.length + 2;
-  if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) {
-    drawBarToolTipSplitArea(opts.tooltip.offset.y, opts, config, context, eachSpacing);
-  }
-  columnOption.customColor = fillCustomColor(columnOption.linearType, columnOption.customColor, series, config);
-  series.forEach(function(eachSeries, seriesIndex) {
-    let ranges, minRange, maxRange;
-    ranges = [].concat(opts.chartData.xAxisData.ranges);
-    maxRange = ranges.pop();
-    minRange = ranges.shift();
-    var data = eachSeries.data;
-    switch (columnOption.type) {
-      case 'group':
-        var points = getBarDataPoints(data, minRange, maxRange, yAxisPoints, eachSpacing, opts, config, process);
-        var tooltipPoints = getBarStackDataPoints(data, minRange, maxRange, yAxisPoints, eachSpacing, opts, config, seriesIndex, series, process);
-        calPoints.push(tooltipPoints);
-        points = fixBarData(points, eachSpacing, series.length, seriesIndex, config, opts);
-        for (let i = 0; i < points.length; i++) {
-          let item = points[i];
-          //fix issues/I27B1N yyoinge & Joeshu
-          if (item !== null && i > leftNum && i < rightNum) {
-            //var startX = item.x - item.width / 2;
-            var startX = opts.area[3];
-            var startY = item.y - item.width / 2;
-            var height = item.height;
-            context.beginPath();
-            var fillColor = item.color || eachSeries.color
-            var strokeColor = item.color || eachSeries.color
-            if (columnOption.linearType !== 'none') {
-              var grd = context.createLinearGradient(startX, item.y, item.x, item.y);
-              //透明渐变
-              if (columnOption.linearType == 'opacity') {
-                grd.addColorStop(0, hexToRgb(fillColor, columnOption.linearOpacity));
-                grd.addColorStop(1, hexToRgb(fillColor, 1));
-              } else {
-                grd.addColorStop(0, hexToRgb(columnOption.customColor[eachSeries.linearIndex], columnOption.linearOpacity));
-                grd.addColorStop(columnOption.colorStop, hexToRgb(columnOption.customColor[eachSeries.linearIndex],columnOption.linearOpacity));
-                grd.addColorStop(1, hexToRgb(fillColor, 1));
-              }
-              fillColor = grd
-            }
-            // 圆角边框
-            if ((columnOption.barBorderRadius && columnOption.barBorderRadius.length === 4) || columnOption.barBorderCircle === true) {
-              const left = startX;
-              const width = item.width;
-              const top = item.y - item.width / 2;
-              const height = item.heigh;
-              if (columnOption.barBorderCircle) {
-                columnOption.barBorderRadius = [width / 2, width / 2, 0, 0];
-              }
-              let [r0, r1, r2, r3] = columnOption.barBorderRadius;
-              let minRadius = Math.min(width/2,height/2);
-              r0 = r0 > minRadius ? minRadius : r0;
-              r1 = r1 > minRadius ? minRadius : r1;
-              r2 = r2 > minRadius ? minRadius : r2;
-              r3 = r3 > minRadius ? minRadius : r3;
-              r0 = r0 < 0 ? 0 : r0;
-              r1 = r1 < 0 ? 0 : r1;
-              r2 = r2 < 0 ? 0 : r2;
-              r3 = r3 < 0 ? 0 : r3;
-              
-              context.arc(left + r3, top + r3, r3, -Math.PI, -Math.PI / 2);
-              context.arc(item.x - r0, top + r0, r0, -Math.PI / 2, 0);
-              context.arc(item.x - r1, top + width - r1, r1, 0, Math.PI / 2);
-              context.arc(left + r2, top + width - r2, r2, Math.PI / 2, Math.PI);
-            } else {
-              context.moveTo(startX, startY);
-              context.lineTo(item.x, startY);
-              context.lineTo(item.x, startY + item.width - 2);
-              context.lineTo(startX, startY + item.width - 2);
-              context.lineTo(startX, startY);
-              context.setLineWidth(1)
-              context.setStrokeStyle(strokeColor);
-            }
-            context.setFillStyle(fillColor);
-            context.closePath();
-            //context.stroke();
-            context.fill();
-          }
-        };
-        break;
-      case 'stack':
-        // 绘制堆叠数据图
-        var points = getBarStackDataPoints(data, minRange, maxRange, yAxisPoints, eachSpacing, opts, config, seriesIndex, series, process);
-        calPoints.push(points);
-        points = fixBarStackData(points, eachSpacing, series.length, seriesIndex, config, opts, series);
-        for (let i = 0; i < points.length; i++) {
-          let item = points[i];
-          if (item !== null && i > leftNum && i < rightNum) {
-            context.beginPath();
-            var fillColor = item.color || eachSeries.color;
-            var startX = item.x0;
-            context.setFillStyle(fillColor);
-            context.moveTo(startX, item.y - item.width/2);
-            context.fillRect(startX, item.y - item.width/2, item.height , item.width - 2);
-            context.closePath();
-            context.fill();
-          }
-        };
-        break;
-    }
-  });
-
-  if (opts.dataLabel !== false && process === 1) {
-    series.forEach(function(eachSeries, seriesIndex) {
-      let ranges, minRange, maxRange;
-      ranges = [].concat(opts.chartData.xAxisData.ranges);
-      maxRange = ranges.pop();
-      minRange = ranges.shift();
-      var data = eachSeries.data;
-      switch (columnOption.type) {
-        case 'group':
-          var points = getBarDataPoints(data, minRange, maxRange, yAxisPoints, eachSpacing, opts, config, process);
-          points = fixBarData(points, eachSpacing, series.length, seriesIndex, config, opts);
-          drawBarPointText(points, eachSeries, config, context, opts);
-          break;
-        case 'stack':
-          var points = getBarStackDataPoints(data, minRange, maxRange, yAxisPoints, eachSpacing, opts, config, seriesIndex, series, process);
-          drawBarPointText(points, eachSeries, config, context, opts);
-          break;
-      }
-    });
-  }
-  return {
-    yAxisPoints: yAxisPoints,
-    calPoints: calPoints,
-    eachSpacing: eachSpacing
-  };
-}
-
-function drawCandleDataPoints(series, seriesMA, opts, config, context) {
-  var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1;
-  var candleOption = assign({}, {
-    color: {},
-    average: {}
-  }, opts.extra.candle);
-  candleOption.color = assign({}, {
-    upLine: '#f04864',
-    upFill: '#f04864',
-    downLine: '#2fc25b',
-    downFill: '#2fc25b'
-  }, candleOption.color);
-  candleOption.average = assign({}, {
-    show: false,
-    name: [],
-    day: [],
-    color: config.color
-  }, candleOption.average);
-  opts.extra.candle = candleOption;
-  let xAxisData = opts.chartData.xAxisData,
-    xAxisPoints = xAxisData.xAxisPoints,
-    eachSpacing = xAxisData.eachSpacing;
-  let calPoints = [];
-  context.save();
-  let leftNum = -2;
-  let rightNum = xAxisPoints.length + 2;
-  let leftSpace = 0;
-  let rightSpace = opts.width + eachSpacing;
-  if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
-    context.translate(opts._scrollDistance_, 0);
-    leftNum = Math.floor(-opts._scrollDistance_ / eachSpacing) - 2;
-    rightNum = leftNum + opts.xAxis.itemCount + 4;
-    leftSpace = -opts._scrollDistance_ - eachSpacing * 2 + opts.area[3];
-    rightSpace = leftSpace + (opts.xAxis.itemCount + 4) * eachSpacing;
-  }
-  //画均线
-  if (candleOption.average.show || seriesMA) { //Merge pull request !12 from 邱贵翔
-    seriesMA.forEach(function(eachSeries, seriesIndex) {
-      let ranges, minRange, maxRange;
-      ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
-      minRange = ranges.pop();
-      maxRange = ranges.shift();
-      var data = eachSeries.data;
-      var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
-      var splitPointList = splitPoints(points,eachSeries);
-      for (let i = 0; i < splitPointList.length; i++) {
-        let points = splitPointList[i];
-        context.beginPath();
-        context.setStrokeStyle(eachSeries.color);
-        context.setLineWidth(1);
-        if (points.length === 1) {
-          context.moveTo(points[0].x, points[0].y);
-          context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI);
-        } else {
-          context.moveTo(points[0].x, points[0].y);
-          let startPoint = 0;
-          for (let j = 0; j < points.length; j++) {
-            let item = points[j];
-            if (startPoint == 0 && item.x > leftSpace) {
-              context.moveTo(item.x, item.y);
-              startPoint = 1;
-            }
-            if (j > 0 && item.x > leftSpace && item.x < rightSpace) {
-              var ctrlPoint = createCurveControlPoints(points, j - 1);
-              context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x,
-                item.y);
-            }
-          }
-          context.moveTo(points[0].x, points[0].y);
-        }
-        context.closePath();
-        context.stroke();
-      }
-    });
-  }
-  //画K线
-  series.forEach(function(eachSeries, seriesIndex) {
-    let ranges, minRange, maxRange;
-    ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
-    minRange = ranges.pop();
-    maxRange = ranges.shift();
-    var data = eachSeries.data;
-    var points = getCandleDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
-    calPoints.push(points);
-    var splitPointList = splitPoints(points,eachSeries);
-    for (let i = 0; i < splitPointList[0].length; i++) {
-      if (i > leftNum && i < rightNum) {
-        let item = splitPointList[0][i];
-        context.beginPath();
-        //如果上涨
-        if (data[i][1] - data[i][0] > 0) {
-          context.setStrokeStyle(candleOption.color.upLine);
-          context.setFillStyle(candleOption.color.upFill);
-          context.setLineWidth(1 * opts.pix);
-          context.moveTo(item[3].x, item[3].y); //顶点
-          context.lineTo(item[1].x, item[1].y); //收盘中间点
-          context.lineTo(item[1].x - eachSpacing / 4, item[1].y); //收盘左侧点
-          context.lineTo(item[0].x - eachSpacing / 4, item[0].y); //开盘左侧点
-          context.lineTo(item[0].x, item[0].y); //开盘中间点
-          context.lineTo(item[2].x, item[2].y); //底点
-          context.lineTo(item[0].x, item[0].y); //开盘中间点
-          context.lineTo(item[0].x + eachSpacing / 4, item[0].y); //开盘右侧点
-          context.lineTo(item[1].x + eachSpacing / 4, item[1].y); //收盘右侧点
-          context.lineTo(item[1].x, item[1].y); //收盘中间点
-          context.moveTo(item[3].x, item[3].y); //顶点
-        } else {
-          context.setStrokeStyle(candleOption.color.downLine);
-          context.setFillStyle(candleOption.color.downFill);
-          context.setLineWidth(1 * opts.pix);
-          context.moveTo(item[3].x, item[3].y); //顶点
-          context.lineTo(item[0].x, item[0].y); //开盘中间点
-          context.lineTo(item[0].x - eachSpacing / 4, item[0].y); //开盘左侧点
-          context.lineTo(item[1].x - eachSpacing / 4, item[1].y); //收盘左侧点
-          context.lineTo(item[1].x, item[1].y); //收盘中间点
-          context.lineTo(item[2].x, item[2].y); //底点
-          context.lineTo(item[1].x, item[1].y); //收盘中间点
-          context.lineTo(item[1].x + eachSpacing / 4, item[1].y); //收盘右侧点
-          context.lineTo(item[0].x + eachSpacing / 4, item[0].y); //开盘右侧点
-          context.lineTo(item[0].x, item[0].y); //开盘中间点
-          context.moveTo(item[3].x, item[3].y); //顶点
-        }
-        context.closePath();
-        context.fill();
-        context.stroke();
-      }
-    }
-  });
-  context.restore();
-  return {
-    xAxisPoints: xAxisPoints,
-    calPoints: calPoints,
-    eachSpacing: eachSpacing
-  };
-}
-
-function drawAreaDataPoints(series, opts, config, context) {
-  var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
-  var areaOption = assign({}, {
-    type: 'straight',
-    opacity: 0.2,
-    addLine: false,
-    width: 2,
-    gradient: false
-  }, opts.extra.area);
-  let xAxisData = opts.chartData.xAxisData,
-    xAxisPoints = xAxisData.xAxisPoints,
-    eachSpacing = xAxisData.eachSpacing;
-  let endY = opts.height - opts.area[2];
-  let calPoints = [];
-  context.save();
-  let leftSpace = 0;
-  let rightSpace = opts.width + eachSpacing;
-  if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
-    context.translate(opts._scrollDistance_, 0);
-    leftSpace = -opts._scrollDistance_ - eachSpacing * 2 + opts.area[3];
-    rightSpace = leftSpace + (opts.xAxis.itemCount + 4) * eachSpacing;
-  }
-  series.forEach(function(eachSeries, seriesIndex) {
-    let ranges, minRange, maxRange;
-    ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
-    minRange = ranges.pop();
-    maxRange = ranges.shift();
-    let data = eachSeries.data;
-    let points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
-    calPoints.push(points);
-    let splitPointList = splitPoints(points,eachSeries);
-    for (let i = 0; i < splitPointList.length; i++) {
-      let points = splitPointList[i];
-      // 绘制区域数
-      context.beginPath();
-      context.setStrokeStyle(hexToRgb(eachSeries.color, areaOption.opacity));
-      if (areaOption.gradient) {
-        let gradient = context.createLinearGradient(0, opts.area[0], 0, opts.height - opts.area[2]);
-        gradient.addColorStop('0', hexToRgb(eachSeries.color, areaOption.opacity));
-        gradient.addColorStop('1.0', hexToRgb("#FFFFFF", 0.1));
-        context.setFillStyle(gradient);
-      } else {
-        context.setFillStyle(hexToRgb(eachSeries.color, areaOption.opacity));
-      }
-      context.setLineWidth(areaOption.width * opts.pix);
-      if (points.length > 1) {
-        let firstPoint = points[0];
-        let lastPoint = points[points.length - 1];
-        context.moveTo(firstPoint.x, firstPoint.y);
-        let startPoint = 0;
-        if (areaOption.type === 'curve') {
-          for (let j = 0; j < points.length; j++) {
-            let item = points[j];
-            if (startPoint == 0 && item.x > leftSpace) {
-              context.moveTo(item.x, item.y);
-              startPoint = 1;
-            }
-            if (j > 0 && item.x > leftSpace && item.x < rightSpace) {
-              let ctrlPoint = createCurveControlPoints(points, j - 1);
-              context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y);
-            }
-          };
-        } 
-        if (areaOption.type === 'straight') {
-          for (let j = 0; j < points.length; j++) {
-            let item = points[j];
-            if (startPoint == 0 && item.x > leftSpace) {
-              context.moveTo(item.x, item.y);
-              startPoint = 1;
-            }
-            if (j > 0 && item.x > leftSpace && item.x < rightSpace) {
-              context.lineTo(item.x, item.y);
-            }
-          };
-        }
-        if (areaOption.type === 'step') {
-          for (let j = 0; j < points.length; j++) {
-            let item = points[j];
-            if (startPoint == 0 && item.x > leftSpace) {
-              context.moveTo(item.x, item.y);
-              startPoint = 1;
-            }
-            if (j > 0 && item.x > leftSpace && item.x < rightSpace) {
-              context.lineTo(item.x, points[j - 1].y);
-              context.lineTo(item.x, item.y);
-            }
-          };
-        }
-        context.lineTo(lastPoint.x, endY);
-        context.lineTo(firstPoint.x, endY);
-        context.lineTo(firstPoint.x, firstPoint.y);
-      } else {
-        let item = points[0];
-        context.moveTo(item.x - eachSpacing / 2, item.y);
-        context.lineTo(item.x + eachSpacing / 2, item.y);
-        context.lineTo(item.x + eachSpacing / 2, endY);
-        context.lineTo(item.x - eachSpacing / 2, endY);
-        context.moveTo(item.x - eachSpacing / 2, item.y);
-      }
-      context.closePath();
-      context.fill();
-      //画连线
-      if (areaOption.addLine) {
-        if (eachSeries.lineType == 'dash') {
-          let dashLength = eachSeries.dashLength ? eachSeries.dashLength : 8;
-          dashLength *= opts.pix;
-          context.setLineDash([dashLength, dashLength]);
-        }
-        context.beginPath();
-        context.setStrokeStyle(eachSeries.color);
-        context.setLineWidth(areaOption.width * opts.pix);
-        if (points.length === 1) {
-          context.moveTo(points[0].x, points[0].y);
-          context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI);
-        } else {
-          context.moveTo(points[0].x, points[0].y);
-          let startPoint = 0;
-          if (areaOption.type === 'curve') {
-            for (let j = 0; j < points.length; j++) {
-              let item = points[j];
-              if (startPoint == 0 && item.x > leftSpace) {
-                context.moveTo(item.x, item.y);
-                startPoint = 1;
-              }
-              if (j > 0 && item.x > leftSpace && item.x < rightSpace) {
-                let ctrlPoint = createCurveControlPoints(points, j - 1);
-                context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y);
-              }
-            };
-          }
-          if (areaOption.type === 'straight') {
-            for (let j = 0; j < points.length; j++) {
-              let item = points[j];
-              if (startPoint == 0 && item.x > leftSpace) {
-                context.moveTo(item.x, item.y);
-                startPoint = 1;
-              }
-              if (j > 0 && item.x > leftSpace && item.x < rightSpace) {
-                context.lineTo(item.x, item.y);
-              }
-            };
-          }
-          if (areaOption.type === 'step') {
-            for (let j = 0; j < points.length; j++) {
-              let item = points[j];
-              if (startPoint == 0 && item.x > leftSpace) {
-                context.moveTo(item.x, item.y);
-                startPoint = 1;
-              }
-              if (j > 0 && item.x > leftSpace && item.x < rightSpace) {
-                context.lineTo(item.x, points[j - 1].y);
-                context.lineTo(item.x, item.y);
-              }
-            };
-          }
-          context.moveTo(points[0].x, points[0].y);
-        }
-        context.stroke();
-        context.setLineDash([]);
-      }
-    }
-    //画点
-    if (opts.dataPointShape !== false) {
-      drawPointShape(points, eachSeries.color, eachSeries.pointShape, context, opts);
-    }
-  });
-
-  if (opts.dataLabel !== false && process === 1) {
-    series.forEach(function(eachSeries, seriesIndex) {
-      let ranges, minRange, maxRange;
-      ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
-      minRange = ranges.pop();
-      maxRange = ranges.shift();
-      var data = eachSeries.data;
-      var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
-      drawPointText(points, eachSeries, config, context, opts);
-    });
-  }
-  context.restore();
-  return {
-    xAxisPoints: xAxisPoints,
-    calPoints: calPoints,
-    eachSpacing: eachSpacing
-  };
-}
-
-function drawScatterDataPoints(series, opts, config, context) {
-  var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
-  var scatterOption = assign({}, {
-    type: 'circle'
-  }, opts.extra.scatter);
-  let xAxisData = opts.chartData.xAxisData,
-    xAxisPoints = xAxisData.xAxisPoints,
-    eachSpacing = xAxisData.eachSpacing;
-  var calPoints = [];
-  context.save();
-  let leftSpace = 0;
-  let rightSpace = opts.width + eachSpacing;
-  if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
-    context.translate(opts._scrollDistance_, 0);
-    leftSpace = -opts._scrollDistance_ - eachSpacing * 2 + opts.area[3];
-    rightSpace = leftSpace + (opts.xAxis.itemCount + 4) * eachSpacing;
-  }
-  series.forEach(function(eachSeries, seriesIndex) {
-    let ranges, minRange, maxRange;
-    ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
-    minRange = ranges.pop();
-    maxRange = ranges.shift();
-    var data = eachSeries.data;
-    var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
-    context.beginPath();
-    context.setStrokeStyle(eachSeries.color);
-    context.setFillStyle(eachSeries.color);
-    context.setLineWidth(1 * opts.pix);
-    var shape = eachSeries.pointShape;
-    if (shape === 'diamond') {
-      points.forEach(function(item, index) {
-        if (item !== null) {
-          context.moveTo(item.x, item.y - 4.5);
-          context.lineTo(item.x - 4.5, item.y);
-          context.lineTo(item.x, item.y + 4.5);
-          context.lineTo(item.x + 4.5, item.y);
-          context.lineTo(item.x, item.y - 4.5);
-        }
-      });
-    } else if (shape === 'circle') {
-      points.forEach(function(item, index) {
-        if (item !== null) {
-          context.moveTo(item.x + 2.5 * opts.pix, item.y);
-          context.arc(item.x, item.y, 3 * opts.pix, 0, 2 * Math.PI, false);
-        }
-      });
-    } else if (shape === 'square') {
-      points.forEach(function(item, index) {
-        if (item !== null) {
-          context.moveTo(item.x - 3.5, item.y - 3.5);
-          context.rect(item.x - 3.5, item.y - 3.5, 7, 7);
-        }
-      });
-    } else if (shape === 'triangle') {
-      points.forEach(function(item, index) {
-        if (item !== null) {
-          context.moveTo(item.x, item.y - 4.5);
-          context.lineTo(item.x - 4.5, item.y + 4.5);
-          context.lineTo(item.x + 4.5, item.y + 4.5);
-          context.lineTo(item.x, item.y - 4.5);
-        }
-      });
-    } else if (shape === 'triangle') {
-      return;
-    }
-    context.closePath();
-    context.fill();
-    context.stroke();
-  });
-  if (opts.dataLabel !== false && process === 1) {
-    series.forEach(function(eachSeries, seriesIndex) {
-      let ranges, minRange, maxRange;
-      ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
-      minRange = ranges.pop();
-      maxRange = ranges.shift();
-      var data = eachSeries.data;
-      var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
-      drawPointText(points, eachSeries, config, context, opts);
-    });
-  }
-  context.restore();
-  return {
-    xAxisPoints: xAxisPoints,
-    calPoints: calPoints,
-    eachSpacing: eachSpacing
-  };
-}
-
-function drawBubbleDataPoints(series, opts, config, context) {
-  var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
-  var bubbleOption = assign({}, {
-    opacity: 1,
-    border:2
-  }, opts.extra.bubble);
-  let xAxisData = opts.chartData.xAxisData,
-    xAxisPoints = xAxisData.xAxisPoints,
-    eachSpacing = xAxisData.eachSpacing;
-  var calPoints = [];
-  context.save();
-  let leftSpace = 0;
-  let rightSpace = opts.width + eachSpacing;
-  if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
-    context.translate(opts._scrollDistance_, 0);
-    leftSpace = -opts._scrollDistance_ - eachSpacing * 2 + opts.area[3];
-    rightSpace = leftSpace + (opts.xAxis.itemCount + 4) * eachSpacing;
-  }
-  series.forEach(function(eachSeries, seriesIndex) {
-    let ranges, minRange, maxRange;
-    ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
-    minRange = ranges.pop();
-    maxRange = ranges.shift();
-    var data = eachSeries.data;
-    var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
-    context.beginPath();
-    context.setStrokeStyle(eachSeries.color);
-    context.setLineWidth(bubbleOption.border * opts.pix);
-    context.setFillStyle(hexToRgb(eachSeries.color, bubbleOption.opacity));
-    points.forEach(function(item, index) {
-      context.moveTo(item.x + item.r, item.y);
-      context.arc(item.x, item.y, item.r * opts.pix, 0, 2 * Math.PI, false);
-    });
-    context.closePath();
-    context.fill();
-    context.stroke();
-    
-    if (opts.dataLabel !== false && process === 1) {
-      points.forEach(function(item, index) {
-        context.beginPath();
-        var fontSize = series.textSize * opts.pix || config.fontSize;
-        context.setFontSize(fontSize);
-        context.setFillStyle(series.textColor || "#FFFFFF");
-        context.setTextAlign('center');
-        context.fillText(String(item.t), item.x, item.y + fontSize/2);
-        context.closePath();
-        context.stroke();
-        context.setTextAlign('left');
-      });
-    }
-  });
-  context.restore();
-  return {
-    xAxisPoints: xAxisPoints,
-    calPoints: calPoints,
-    eachSpacing: eachSpacing
-  };
-}
-
-
-function drawLineDataPoints(series, opts, config, context) {
-  var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
-  var lineOption = assign({}, {
-    type: 'straight',
-    width: 2
-  }, opts.extra.line);
-  lineOption.width *= opts.pix;
-  let xAxisData = opts.chartData.xAxisData,
-    xAxisPoints = xAxisData.xAxisPoints,
-    eachSpacing = xAxisData.eachSpacing;
-  var calPoints = [];
-  context.save();
-  let leftSpace = 0;
-  let rightSpace = opts.width + eachSpacing;
-  if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
-    context.translate(opts._scrollDistance_, 0);
-    leftSpace = -opts._scrollDistance_ - eachSpacing * 2 + opts.area[3];
-    rightSpace = leftSpace + (opts.xAxis.itemCount + 4) * eachSpacing;
-  }
-  series.forEach(function(eachSeries, seriesIndex) {
-    let ranges, minRange, maxRange;
-    ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
-    minRange = ranges.pop();
-    maxRange = ranges.shift();
-    var data = eachSeries.data;
-    var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
-    calPoints.push(points);
-    var splitPointList = splitPoints(points,eachSeries);
-    if (eachSeries.lineType == 'dash') {
-      let dashLength = eachSeries.dashLength ? eachSeries.dashLength : 8;
-      dashLength *= opts.pix;
-      context.setLineDash([dashLength, dashLength]);
-    }
-    context.beginPath();
-    context.setStrokeStyle(eachSeries.color);
-    context.setLineWidth(lineOption.width);
-    splitPointList.forEach(function(points, index) {
-      if (points.length === 1) {
-        context.moveTo(points[0].x, points[0].y);
-        context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI);
-      } else {
-        context.moveTo(points[0].x, points[0].y);
-        let startPoint = 0;
-        if (lineOption.type === 'curve') {
-          for (let j = 0; j < points.length; j++) {
-            let item = points[j];
-            if (startPoint == 0 && item.x > leftSpace) {
-              context.moveTo(item.x, item.y);
-              startPoint = 1;
-            }
-            if (j > 0 && item.x > leftSpace && item.x < rightSpace) {
-              var ctrlPoint = createCurveControlPoints(points, j - 1);
-              context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y);
-            }
-          };
-        }
-        if (lineOption.type === 'straight') {
-          for (let j = 0; j < points.length; j++) {
-            let item = points[j];
-            if (startPoint == 0 && item.x > leftSpace) {
-              context.moveTo(item.x, item.y);
-              startPoint = 1;
-            }
-            if (j > 0 && item.x > leftSpace && item.x < rightSpace) {
-              context.lineTo(item.x, item.y);
-            }
-          };
-        }
-        if (lineOption.type === 'step') {
-          for (let j = 0; j < points.length; j++) {
-            let item = points[j];
-            if (startPoint == 0 && item.x > leftSpace) {
-              context.moveTo(item.x, item.y);
-              startPoint = 1;
-            }
-            if (j > 0 && item.x > leftSpace && item.x < rightSpace) {
-              context.lineTo(item.x, points[j - 1].y);
-              context.lineTo(item.x, item.y);
-            }
-          };
-        }
-        context.moveTo(points[0].x, points[0].y);
-      }
-    });
-    context.stroke();
-    context.setLineDash([]);
-    if (opts.dataPointShape !== false) {
-      drawPointShape(points, eachSeries.color, eachSeries.pointShape, context, opts);
-    }
-  });
-  if (opts.dataLabel !== false && process === 1) {
-    series.forEach(function(eachSeries, seriesIndex) {
-      let ranges, minRange, maxRange;
-      ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
-      minRange = ranges.pop();
-      maxRange = ranges.shift();
-      var data = eachSeries.data;
-      var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
-      drawPointText(points, eachSeries, config, context, opts);
-    });
-  }
-  context.restore();
-  return {
-    xAxisPoints: xAxisPoints,
-    calPoints: calPoints,
-    eachSpacing: eachSpacing
-  };
-}
-
-function drawMixDataPoints(series, opts, config, context) {
-  let process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
-  let columnOption = assign({}, {
-    width: eachSpacing / 2,
-    barBorderCircle: false,
-    barBorderRadius: [],
-    seriesGap: 2,
-    linearType: 'none',
-    linearOpacity: 1,
-    customColor: [],
-    colorStop: 0,
-  }, opts.extra.mix.column);
-  let xAxisData = opts.chartData.xAxisData,
-    xAxisPoints = xAxisData.xAxisPoints,
-    eachSpacing = xAxisData.eachSpacing;
-  let endY = opts.height - opts.area[2];
-  let calPoints = [];
-  var columnIndex = 0;
-  var columnLength = 0;
-  series.forEach(function(eachSeries, seriesIndex) {
-    if (eachSeries.type == 'column') {
-      columnLength += 1;
-    }
-  });
-  context.save();
-  let leftNum = -2;
-  let rightNum = xAxisPoints.length + 2;
-  let leftSpace = 0;
-  let rightSpace = opts.width + eachSpacing;
-  if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
-    context.translate(opts._scrollDistance_, 0);
-    leftNum = Math.floor(-opts._scrollDistance_ / eachSpacing) - 2;
-    rightNum = leftNum + opts.xAxis.itemCount + 4;
-    leftSpace = -opts._scrollDistance_ - eachSpacing * 2 + opts.area[3];
-    rightSpace = leftSpace + (opts.xAxis.itemCount + 4) * eachSpacing;
-  }
-  columnOption.customColor = fillCustomColor(columnOption.linearType, columnOption.customColor, series, config);
-  series.forEach(function(eachSeries, seriesIndex) {
-    let ranges, minRange, maxRange;
-    ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
-    minRange = ranges.pop();
-    maxRange = ranges.shift();
-    var data = eachSeries.data;
-    var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
-    calPoints.push(points);
-    // 绘制柱状数据图
-    if (eachSeries.type == 'column') {
-      points = fixColumeData(points, eachSpacing, columnLength, columnIndex, config, opts);
-      for (let i = 0; i < points.length; i++) {
-        let item = points[i];
-        if (item !== null && i > leftNum && i < rightNum) {
-          var startX = item.x - item.width / 2;
-          var height = opts.height - item.y - opts.area[2];
-          context.beginPath();
-          var fillColor = item.color || eachSeries.color
-          var strokeColor = item.color || eachSeries.color
-          if (columnOption.linearType !== 'none') {
-            var grd = context.createLinearGradient(startX, item.y, startX, opts.height - opts.area[2]);
-            //透明渐变
-            if (columnOption.linearType == 'opacity') {
-              grd.addColorStop(0, hexToRgb(fillColor, columnOption.linearOpacity));
-              grd.addColorStop(1, hexToRgb(fillColor, 1));
-            } else {
-              grd.addColorStop(0, hexToRgb(columnOption.customColor[eachSeries.linearIndex], columnOption.linearOpacity));
-              grd.addColorStop(columnOption.colorStop, hexToRgb(columnOption.customColor[eachSeries.linearIndex], columnOption.linearOpacity));
-              grd.addColorStop(1, hexToRgb(fillColor, 1));
-            }
-            fillColor = grd
-          }
-          // 圆角边框
-          if ((columnOption.barBorderRadius && columnOption.barBorderRadius.length === 4) || columnOption.barBorderCircle) {
-            const left = startX;
-            const top = item.y;
-            const width = item.width;
-            const height = opts.height - opts.area[2] - item.y;
-            if (columnOption.barBorderCircle) {
-              columnOption.barBorderRadius = [width / 2, width / 2, 0, 0];
-            }
-            let [r0, r1, r2, r3] = columnOption.barBorderRadius;
-            let minRadius = Math.min(width/2,height/2);
-            r0 = r0 > minRadius ? minRadius : r0;
-            r1 = r1 > minRadius ? minRadius : r1;
-            r2 = r2 > minRadius ? minRadius : r2;
-            r3 = r3 > minRadius ? minRadius : r3;
-            r0 = r0 < 0 ? 0 : r0;
-            r1 = r1 < 0 ? 0 : r1;
-            r2 = r2 < 0 ? 0 : r2;
-            r3 = r3 < 0 ? 0 : r3;
-            context.arc(left + r0, top + r0, r0, -Math.PI, -Math.PI / 2);
-            context.arc(left + width - r1, top + r1, r1, -Math.PI / 2, 0);
-            context.arc(left + width - r2, top + height - r2, r2, 0, Math.PI / 2);
-            context.arc(left + r3, top + height - r3, r3, Math.PI / 2, Math.PI);
-          } else {
-            context.moveTo(startX, item.y);
-            context.lineTo(startX + item.width - 2, item.y);
-            context.lineTo(startX + item.width - 2, opts.height - opts.area[2]);
-            context.lineTo(startX, opts.height - opts.area[2]);
-            context.lineTo(startX, item.y);
-            context.setLineWidth(1)
-            context.setStrokeStyle(strokeColor);
-          }
-          context.setFillStyle(fillColor);
-          context.closePath();
-          context.fill();
-        }
-      }
-      columnIndex += 1;
-    }
-    //绘制区域图数据
-    if (eachSeries.type == 'area') {
-      let splitPointList = splitPoints(points,eachSeries);
-      for (let i = 0; i < splitPointList.length; i++) {
-        let points = splitPointList[i];
-        // 绘制区域数据
-        context.beginPath();
-        context.setStrokeStyle(eachSeries.color);
-        context.setFillStyle(hexToRgb(eachSeries.color, 0.2));
-        context.setLineWidth(2 * opts.pix);
-        if (points.length > 1) {
-          var firstPoint = points[0];
-          let lastPoint = points[points.length - 1];
-          context.moveTo(firstPoint.x, firstPoint.y);
-          let startPoint = 0;
-          if (eachSeries.style === 'curve') {
-            for (let j = 0; j < points.length; j++) {
-              let item = points[j];
-              if (startPoint == 0 && item.x > leftSpace) {
-                context.moveTo(item.x, item.y);
-                startPoint = 1;
-              }
-              if (j > 0 && item.x > leftSpace && item.x < rightSpace) {
-                var ctrlPoint = createCurveControlPoints(points, j - 1);
-                context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y);
-              }
-            };
-          } else {
-            for (let j = 0; j < points.length; j++) {
-              let item = points[j];
-              if (startPoint == 0 && item.x > leftSpace) {
-                context.moveTo(item.x, item.y);
-                startPoint = 1;
-              }
-              if (j > 0 && item.x > leftSpace && item.x < rightSpace) {
-                context.lineTo(item.x, item.y);
-              }
-            };
-          }
-          context.lineTo(lastPoint.x, endY);
-          context.lineTo(firstPoint.x, endY);
-          context.lineTo(firstPoint.x, firstPoint.y);
-        } else {
-          let item = points[0];
-          context.moveTo(item.x - eachSpacing / 2, item.y);
-          context.lineTo(item.x + eachSpacing / 2, item.y);
-          context.lineTo(item.x + eachSpacing / 2, endY);
-          context.lineTo(item.x - eachSpacing / 2, endY);
-          context.moveTo(item.x - eachSpacing / 2, item.y);
-        }
-        context.closePath();
-        context.fill();
-      }
-    }
-    // 绘制折线数据图
-    if (eachSeries.type == 'line') {
-      var splitPointList = splitPoints(points,eachSeries);
-      splitPointList.forEach(function(points, index) {
-        if (eachSeries.lineType == 'dash') {
-          let dashLength = eachSeries.dashLength ? eachSeries.dashLength : 8;
-          dashLength *= opts.pix;
-          context.setLineDash([dashLength, dashLength]);
-        }
-        context.beginPath();
-        context.setStrokeStyle(eachSeries.color);
-        context.setLineWidth(2 * opts.pix);
-        if (points.length === 1) {
-          context.moveTo(points[0].x, points[0].y);
-          context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI);
-        } else {
-          context.moveTo(points[0].x, points[0].y);
-          let startPoint = 0;
-          if (eachSeries.style == 'curve') {
-            for (let j = 0; j < points.length; j++) {
-              let item = points[j];
-              if (startPoint == 0 && item.x > leftSpace) {
-                context.moveTo(item.x, item.y);
-                startPoint = 1;
-              }
-              if (j > 0 && item.x > leftSpace && item.x < rightSpace) {
-                var ctrlPoint = createCurveControlPoints(points, j - 1);
-                context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y,
-                  item.x, item.y);
-              }
-            }
-          } else {
-            for (let j = 0; j < points.length; j++) {
-              let item = points[j];
-              if (startPoint == 0 && item.x > leftSpace) {
-                context.moveTo(item.x, item.y);
-                startPoint = 1;
-              }
-              if (j > 0 && item.x > leftSpace && item.x < rightSpace) {
-                context.lineTo(item.x, item.y);
-              }
-            }
-          }
-          context.moveTo(points[0].x, points[0].y);
-        }
-        context.stroke();
-        context.setLineDash([]);
-      });
-    }
-    // 绘制点数据图
-    if (eachSeries.type == 'point') {
-      eachSeries.addPoint = true;
-    }
-    if (eachSeries.addPoint == true && eachSeries.type !== 'column') {
-      drawPointShape(points, eachSeries.color, eachSeries.pointShape, context, opts);
-    }
-  });
-  if (opts.dataLabel !== false && process === 1) {
-    var columnIndex = 0;
-    series.forEach(function(eachSeries, seriesIndex) {
-      let ranges, minRange, maxRange;
-      ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
-      minRange = ranges.pop();
-      maxRange = ranges.shift();
-      var data = eachSeries.data;
-      var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
-      if (eachSeries.type !== 'column') {
-        drawPointText(points, eachSeries, config, context, opts);
-      } else {
-        points = fixColumeData(points, eachSpacing, columnLength, columnIndex, config, opts);
-        drawPointText(points, eachSeries, config, context, opts);
-        columnIndex += 1;
-      }
-    });
-  }
-  context.restore();
-  return {
-    xAxisPoints: xAxisPoints,
-    calPoints: calPoints,
-    eachSpacing: eachSpacing,
-  }
-}
-
-function drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints) {
-  var toolTipOption = opts.extra.tooltip || {};
-  if (toolTipOption.horizentalLine && opts.tooltip && process === 1 && (opts.type == 'line' || opts.type == 'area' || opts.type == 'column' || opts.type == 'candle' || opts.type == 'mix')) {
-    drawToolTipHorizentalLine(opts, config, context, eachSpacing, xAxisPoints)
-  }
-  context.save();
-  if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
-    context.translate(opts._scrollDistance_, 0);
-  }
-  if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) {
-    drawToolTip(opts.tooltip.textList, opts.tooltip.offset, opts, config, context, eachSpacing, xAxisPoints);
-  }
-  context.restore();
-
-}
-
-function drawXAxis(categories, opts, config, context) {
-
-  let xAxisData = opts.chartData.xAxisData,
-    xAxisPoints = xAxisData.xAxisPoints,
-    startX = xAxisData.startX,
-    endX = xAxisData.endX,
-    eachSpacing = xAxisData.eachSpacing;
-  var boundaryGap = 'center';
-  if (opts.type == 'bar' || opts.type == 'line' || opts.type == 'area'|| opts.type == 'scatter' || opts.type == 'bubble') {
-    boundaryGap = opts.xAxis.boundaryGap;
-  }
-  var startY = opts.height - opts.area[2];
-  var endY = opts.area[0];
-
-  //绘制滚动条
-  if (opts.enableScroll && opts.xAxis.scrollShow) {
-    var scrollY = opts.height - opts.area[2] + config.xAxisHeight;
-    var scrollScreenWidth = endX - startX;
-    var scrollTotalWidth = eachSpacing * (xAxisPoints.length - 1);
-    var scrollWidth = scrollScreenWidth * scrollScreenWidth / scrollTotalWidth;
-    var scrollLeft = 0;
-    if (opts._scrollDistance_) {
-      scrollLeft = -opts._scrollDistance_ * (scrollScreenWidth) / scrollTotalWidth;
-    }
-    context.beginPath();
-    context.setLineCap('round');
-    context.setLineWidth(6 * opts.pix);
-    context.setStrokeStyle(opts.xAxis.scrollBackgroundColor || "#EFEBEF");
-    context.moveTo(startX, scrollY);
-    context.lineTo(endX, scrollY);
-    context.stroke();
-    context.closePath();
-    context.beginPath();
-    context.setLineCap('round');
-    context.setLineWidth(6 * opts.pix);
-    context.setStrokeStyle(opts.xAxis.scrollColor || "#A6A6A6");
-    context.moveTo(startX + scrollLeft, scrollY);
-    context.lineTo(startX + scrollLeft + scrollWidth, scrollY);
-    context.stroke();
-    context.closePath();
-    context.setLineCap('butt');
-  }
-  context.save();
-  if (opts._scrollDistance_ && opts._scrollDistance_ !== 0) {
-    context.translate(opts._scrollDistance_, 0);
-  }
-  //绘制X轴刻度线
-  if (opts.xAxis.calibration === true) {
-    context.setStrokeStyle(opts.xAxis.gridColor || "#cccccc");
-    context.setLineCap('butt');
-    context.setLineWidth(1 * opts.pix);
-    xAxisPoints.forEach(function(item, index) {
-      if (index > 0) {
-        context.beginPath();
-        context.moveTo(item - eachSpacing / 2, startY);
-        context.lineTo(item - eachSpacing / 2, startY + 3 * opts.pix);
-        context.closePath();
-        context.stroke();
-      }
-    });
-  }
-  //绘制X轴网格
-  if (opts.xAxis.disableGrid !== true) {
-    context.setStrokeStyle(opts.xAxis.gridColor || "#cccccc");
-    context.setLineCap('butt');
-    context.setLineWidth(1 * opts.pix);
-    if (opts.xAxis.gridType == 'dash') {
-      context.setLineDash([opts.xAxis.dashLength * opts.pix, opts.xAxis.dashLength * opts.pix]);
-    }
-    opts.xAxis.gridEval = opts.xAxis.gridEval || 1;
-    xAxisPoints.forEach(function(item, index) {
-      if (index % opts.xAxis.gridEval == 0) {
-        context.beginPath();
-        context.moveTo(item, startY);
-        context.lineTo(item, endY);
-        context.stroke();
-      }
-    });
-    context.setLineDash([]);
-  }
-  //绘制X轴文案
-  if (opts.xAxis.disabled !== true) {
-    // 对X轴列表做抽稀处理
-    //默认全部显示X轴标签
-    let maxXAxisListLength = categories.length;
-    //如果设置了X轴单屏数量
-    if (opts.xAxis.labelCount) {
-      //如果设置X轴密度
-      if (opts.xAxis.itemCount) {
-        maxXAxisListLength = Math.ceil(categories.length / opts.xAxis.itemCount * opts.xAxis.labelCount);
-      } else {
-        maxXAxisListLength = opts.xAxis.labelCount;
-      }
-      maxXAxisListLength -= 1;
-    }
-
-    let ratio = Math.ceil(categories.length / maxXAxisListLength);
-
-    let newCategories = [];
-    let cgLength = categories.length;
-    for (let i = 0; i < cgLength; i++) {
-      if (i % ratio !== 0) {
-        newCategories.push("");
-      } else {
-        newCategories.push(categories[i]);
-      }
-    }
-    newCategories[cgLength - 1] = categories[cgLength - 1];
-    var xAxisFontSize = opts.xAxis.fontSize * opts.pix || config.fontSize;
-    if (config._xAxisTextAngle_ === 0) {
-      newCategories.forEach(function(item, index) {
-        var xitem = opts.xAxis.formatter ? opts.xAxis.formatter(item) : item;
-        var offset = -measureText(String(xitem), xAxisFontSize, context) / 2;
-        if (boundaryGap == 'center') {
-          offset += eachSpacing / 2;
-        }
-        var scrollHeight = 0;
-        if (opts.xAxis.scrollShow) {
-          scrollHeight = 6 * opts.pix;
-        }
-        context.beginPath();
-        context.setFontSize(xAxisFontSize);
-        context.setFillStyle(opts.xAxis.fontColor || opts.fontColor);
-        context.fillText(String(xitem), xAxisPoints[index] + offset, startY + xAxisFontSize + (config.xAxisHeight - scrollHeight - xAxisFontSize) / 2);
-        context.closePath();
-        context.stroke();
-      });
-    } else {
-      newCategories.forEach(function(item, index) {
-        var xitem = opts.xAxis.formatter ? opts.xAxis.formatter(item) : item;
-        context.save();
-        context.beginPath();
-        context.setFontSize(xAxisFontSize);
-        context.setFillStyle(opts.xAxis.fontColor || opts.fontColor);
-        var textWidth = measureText(String(xitem), xAxisFontSize, context);
-        var offset = -textWidth;
-        if (boundaryGap == 'center') {
-          offset += eachSpacing / 2;
-        }
-        var _calRotateTranslate = calRotateTranslate(xAxisPoints[index] + eachSpacing / 2, startY + xAxisFontSize / 2 + 5, opts.height),
-          transX = _calRotateTranslate.transX,
-          transY = _calRotateTranslate.transY;
-
-        context.rotate(-1 * config._xAxisTextAngle_);
-        context.translate(transX, transY);
-        context.fillText(String(xitem), xAxisPoints[index] + offset, startY + xAxisFontSize + 5);
-        context.closePath();
-        context.stroke();
-        context.restore();
-      });
-    }
-  }
-  context.restore();
-  //绘制X轴轴线
-  if (opts.xAxis.axisLine) {
-    context.beginPath();
-    context.setStrokeStyle(opts.xAxis.axisLineColor);
-    context.setLineWidth(1 * opts.pix);
-    context.moveTo(startX, opts.height - opts.area[2]);
-    context.lineTo(endX, opts.height - opts.area[2]);
-    context.stroke();
-  }
-}
-
-function drawYAxisGrid(categories, opts, config, context) {
-  if (opts.yAxis.disableGrid === true) {
-    return;
-  }
-  let spacingValid = opts.height - opts.area[0] - opts.area[2];
-  let eachSpacing = spacingValid / opts.yAxis.splitNumber;
-  let startX = opts.area[3];
-  let xAxisPoints = opts.chartData.xAxisData.xAxisPoints,
-    xAxiseachSpacing = opts.chartData.xAxisData.eachSpacing;
-  let TotalWidth = xAxiseachSpacing * (xAxisPoints.length - 1);
-  let endX = startX + TotalWidth;
-  let points = [];
-  let startY = 1
-  if (opts.xAxis.axisLine === false) {
-    startY = 0
-  }
-  for (let i = startY; i < opts.yAxis.splitNumber + 1; i++) {
-    points.push(opts.height - opts.area[2] - eachSpacing * i);
-  }
-  context.save();
-  if (opts._scrollDistance_ && opts._scrollDistance_ !== 0) {
-    context.translate(opts._scrollDistance_, 0);
-  }
-  if (opts.yAxis.gridType == 'dash') {
-    context.setLineDash([opts.yAxis.dashLength * opts.pix, opts.yAxis.dashLength * opts.pix]);
-  }
-  context.setStrokeStyle(opts.yAxis.gridColor);
-  context.setLineWidth(1 * opts.pix);
-  points.forEach(function(item, index) {
-    context.beginPath();
-    context.moveTo(startX, item);
-    context.lineTo(endX, item);
-    context.stroke();
-  });
-  context.setLineDash([]);
-  context.restore();
-}
-
-function drawYAxis(series, opts, config, context) {
-  if (opts.yAxis.disabled === true) {
-    return;
-  }
-  var spacingValid = opts.height - opts.area[0] - opts.area[2];
-  var eachSpacing = spacingValid / opts.yAxis.splitNumber;
-  var startX = opts.area[3];
-  var endX = opts.width - opts.area[1];
-  var endY = opts.height - opts.area[2];
-  var fillEndY = endY + config.xAxisHeight;
-  if (opts.xAxis.scrollShow) {
-    fillEndY -= 3 * opts.pix;
-  }
-  if (opts.xAxis.rotateLabel) {
-    fillEndY = opts.height - opts.area[2] + opts.fontSize * opts.pix / 2;
-  }
-  // set YAxis background
-  context.beginPath();
-  context.setFillStyle(opts.background);
-  if (opts.enableScroll == true && opts.xAxis.scrollPosition && opts.xAxis.scrollPosition !== 'left') {
-    context.fillRect(0, 0, startX, fillEndY);
-  }
-  if (opts.enableScroll == true && opts.xAxis.scrollPosition && opts.xAxis.scrollPosition !== 'right') {
-    context.fillRect(endX, 0, opts.width, fillEndY);
-  }
-  context.closePath();
-  context.stroke();
-  
-  let tStartLeft = opts.area[3];
-  let tStartRight = opts.width - opts.area[1];
-  let tStartCenter = opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2;
-  if (opts.yAxis.data) {
-    for (let i = 0; i < opts.yAxis.data.length; i++) {
-      let yData = opts.yAxis.data[i];
-      var points = [];
-      if(yData.type === 'categories'){
-        for (let i = 0; i <= yData.categories.length; i++) {
-          points.push(opts.area[0] + spacingValid / yData.categories.length / 2 + spacingValid / yData.categories.length * i);
-        }
-      }else{
-        for (let i = 0; i <= opts.yAxis.splitNumber; i++) {
-          points.push(opts.area[0] + eachSpacing * i);
-        }
-      }
-      if (yData.disabled !== true) {
-        let rangesFormat = opts.chartData.yAxisData.rangesFormat[i];
-        let yAxisFontSize = yData.fontSize ? yData.fontSize * opts.pix : config.fontSize;
-        let yAxisWidth = opts.chartData.yAxisData.yAxisWidth[i];
-        let textAlign = yData.textAlign || "right";
-        //画Y轴刻度及文案
-        rangesFormat.forEach(function(item, index) {
-          var pos = points[index] ? points[index] : endY;
-          context.beginPath();
-          context.setFontSize(yAxisFontSize);
-          context.setLineWidth(1 * opts.pix);
-          context.setStrokeStyle(yData.axisLineColor || '#cccccc');
-          context.setFillStyle(yData.fontColor || opts.fontColor);
-          let tmpstrat = 0;
-          let gapwidth = 4 * opts.pix;
-          if (yAxisWidth.position == 'left') {
-            //画刻度线
-            if (yData.calibration == true) {
-              context.moveTo(tStartLeft, pos);
-              context.lineTo(tStartLeft - 3 * opts.pix, pos);
-              gapwidth += 3 * opts.pix;
-            }
-            //画文字
-            switch (textAlign) {
-              case "left":
-                context.setTextAlign('left');
-                tmpstrat = tStartLeft - yAxisWidth.width
-                break;
-              case "right":
-                context.setTextAlign('right');
-                tmpstrat = tStartLeft - gapwidth
-                break;
-              default:
-                context.setTextAlign('center');
-                tmpstrat = tStartLeft - yAxisWidth.width / 2
-            }
-            context.fillText(String(item), tmpstrat, pos + yAxisFontSize / 2 - 3 * opts.pix);
-
-          } else if (yAxisWidth.position == 'right') {
-            //画刻度线
-            if (yData.calibration == true) {
-              context.moveTo(tStartRight, pos);
-              context.lineTo(tStartRight + 3 * opts.pix, pos);
-              gapwidth += 3 * opts.pix;
-            }
-            switch (textAlign) {
-              case "left":
-                context.setTextAlign('left');
-                tmpstrat = tStartRight + gapwidth
-                break;
-              case "right":
-                context.setTextAlign('right');
-                tmpstrat = tStartRight + yAxisWidth.width
-                break;
-              default:
-                context.setTextAlign('center');
-                tmpstrat = tStartRight + yAxisWidth.width / 2
-            }
-            context.fillText(String(item), tmpstrat, pos + yAxisFontSize / 2 - 3 * opts.pix);
-          } else if (yAxisWidth.position == 'center') {
-            //画刻度线
-            if (yData.calibration == true) {
-              context.moveTo(tStartCenter, pos);
-              context.lineTo(tStartCenter - 3 * opts.pix, pos);
-              gapwidth += 3 * opts.pix;
-            }
-            //画文字
-            switch (textAlign) {
-              case "left":
-                context.setTextAlign('left');
-                tmpstrat = tStartCenter - yAxisWidth.width
-                break;
-              case "right":
-                context.setTextAlign('right');
-                tmpstrat = tStartCenter - gapwidth
-                break;
-              default:
-                context.setTextAlign('center');
-                tmpstrat = tStartCenter - yAxisWidth.width / 2
-            }
-            context.fillText(String(item), tmpstrat, pos + yAxisFontSize / 2 - 3 * opts.pix);
-          }
-          context.closePath();
-          context.stroke();
-          context.setTextAlign('left');
-        });
-        //画Y轴轴线
-        if (yData.axisLine !== false) {
-          context.beginPath();
-          context.setStrokeStyle(yData.axisLineColor || '#cccccc');
-          context.setLineWidth(1 * opts.pix);
-          if (yAxisWidth.position == 'left') {
-            context.moveTo(tStartLeft, opts.height - opts.area[2]);
-            context.lineTo(tStartLeft, opts.area[0]);
-          } else if (yAxisWidth.position == 'right') {
-            context.moveTo(tStartRight, opts.height - opts.area[2]);
-            context.lineTo(tStartRight, opts.area[0]);
-          } else if (yAxisWidth.position == 'center') {
-            context.moveTo(tStartCenter, opts.height - opts.area[2]);
-            context.lineTo(tStartCenter, opts.area[0]);
-          }
-          context.stroke();
-        }
-        //画Y轴标题
-        if (opts.yAxis.showTitle) {
-          let titleFontSize = yData.titleFontSize * opts.pix || config.fontSize;
-          let title = yData.title;
-          context.beginPath();
-          context.setFontSize(titleFontSize);
-          context.setFillStyle(yData.titleFontColor || opts.fontColor);
-          if (yAxisWidth.position == 'left') {
-            context.fillText(title, tStartLeft - measureText(title, titleFontSize, context) / 2 + (yData.titleOffsetX || 0), opts.area[0] - (10 - (yData.titleOffsetY || 0)) * opts.pix);
-          } else if (yAxisWidth.position == 'right') {
-            context.fillText(title, tStartRight - measureText(title, titleFontSize, context) / 2 + (yData.titleOffsetX || 0), opts.area[0] - (10 - (yData.titleOffsetY || 0)) * opts.pix);
-          } else if (yAxisWidth.position == 'center') {
-            context.fillText(title, tStartCenter - measureText(title, titleFontSize, context) / 2 + (yData.titleOffsetX || 0), opts.area[0] - (10 - (yData.titleOffsetY || 0)) * opts.pix);
-          }
-          context.closePath();
-          context.stroke();
-        }
-        if (yAxisWidth.position == 'left') {
-          tStartLeft -= (yAxisWidth.width + opts.yAxis.padding * opts.pix);
-        } else {
-          tStartRight += yAxisWidth.width + opts.yAxis.padding * opts.pix;
-        }
-      }
-    }
-  }
-
-}
-
-function drawLegend(series, opts, config, context, chartData) {
-  if (opts.legend.show === false) {
-    return;
-  }
-  let legendData = chartData.legendData;
-  let legendList = legendData.points;
-  let legendArea = legendData.area;
-  let padding = opts.legend.padding * opts.pix;
-  let fontSize = opts.legend.fontSize * opts.pix;
-  let shapeWidth = 15 * opts.pix;
-  let shapeRight = 5 * opts.pix;
-  let itemGap = opts.legend.itemGap * opts.pix;
-  let lineHeight = Math.max(opts.legend.lineHeight * opts.pix, fontSize);
-  //画背景及边框
-  context.beginPath();
-  context.setLineWidth(opts.legend.borderWidth * opts.pix);
-  context.setStrokeStyle(opts.legend.borderColor);
-  context.setFillStyle(opts.legend.backgroundColor);
-  context.moveTo(legendArea.start.x, legendArea.start.y);
-  context.rect(legendArea.start.x, legendArea.start.y, legendArea.width, legendArea.height);
-  context.closePath();
-  context.fill();
-  context.stroke();
-  legendList.forEach(function(itemList, listIndex) {
-    let width = 0;
-    let height = 0;
-    width = legendData.widthArr[listIndex];
-    height = legendData.heightArr[listIndex];
-    let startX = 0;
-    let startY = 0;
-    if (opts.legend.position == 'top' || opts.legend.position == 'bottom') {
-      switch (opts.legend.float) {
-        case 'left':
-          startX = legendArea.start.x + padding;
-        break;
-        case 'right':
-          startX = legendArea.start.x + legendArea.width - width;
-        break;
-        default:
-        startX = legendArea.start.x + (legendArea.width - width) / 2;
-      }
-      startY = legendArea.start.y + padding + listIndex * lineHeight;
-    } else {
-      if (listIndex == 0) {
-        width = 0;
-      } else {
-        width = legendData.widthArr[listIndex - 1];
-      }
-      startX = legendArea.start.x + padding + width;
-      startY = legendArea.start.y + padding + (legendArea.height - height) / 2;
-    }
-    context.setFontSize(config.fontSize);
-    for (let i = 0; i < itemList.length; i++) {
-      let item = itemList[i];
-      item.area = [0, 0, 0, 0];
-      item.area[0] = startX;
-      item.area[1] = startY;
-      item.area[3] = startY + lineHeight;
-      context.beginPath();
-      context.setLineWidth(1 * opts.pix);
-      context.setStrokeStyle(item.show ? item.color : opts.legend.hiddenColor);
-      context.setFillStyle(item.show ? item.color : opts.legend.hiddenColor);
-      switch (item.legendShape) {
-        case 'line':
-          context.moveTo(startX, startY + 0.5 * lineHeight - 2 * opts.pix);
-          context.fillRect(startX, startY + 0.5 * lineHeight - 2 * opts.pix, 15 * opts.pix, 4 * opts.pix);
-          break;
-        case 'triangle':
-          context.moveTo(startX + 7.5 * opts.pix, startY + 0.5 * lineHeight - 5 * opts.pix);
-          context.lineTo(startX + 2.5 * opts.pix, startY + 0.5 * lineHeight + 5 * opts.pix);
-          context.lineTo(startX + 12.5 * opts.pix, startY + 0.5 * lineHeight + 5 * opts.pix);
-          context.lineTo(startX + 7.5 * opts.pix, startY + 0.5 * lineHeight - 5 * opts.pix);
-          break;
-        case 'diamond':
-          context.moveTo(startX + 7.5 * opts.pix, startY + 0.5 * lineHeight - 5 * opts.pix);
-          context.lineTo(startX + 2.5 * opts.pix, startY + 0.5 * lineHeight);
-          context.lineTo(startX + 7.5 * opts.pix, startY + 0.5 * lineHeight + 5 * opts.pix);
-          context.lineTo(startX + 12.5 * opts.pix, startY + 0.5 * lineHeight);
-          context.lineTo(startX + 7.5 * opts.pix, startY + 0.5 * lineHeight - 5 * opts.pix);
-          break;
-        case 'circle':
-          context.moveTo(startX + 7.5 * opts.pix, startY + 0.5 * lineHeight);
-          context.arc(startX + 7.5 * opts.pix, startY + 0.5 * lineHeight, 5 * opts.pix, 0, 2 * Math.PI);
-          break;
-        case 'rect':
-          context.moveTo(startX, startY + 0.5 * lineHeight - 5 * opts.pix);
-          context.fillRect(startX, startY + 0.5 * lineHeight - 5 * opts.pix, 15 * opts.pix, 10 * opts.pix);
-          break;
-        case 'square':
-          context.moveTo(startX + 5 * opts.pix, startY + 0.5 * lineHeight - 5 * opts.pix);
-          context.fillRect(startX + 5 * opts.pix, startY + 0.5 * lineHeight - 5 * opts.pix, 10 * opts.pix, 10 * opts.pix);
-          break;
-        case 'none':
-          break;
-        default:
-          context.moveTo(startX, startY + 0.5 * lineHeight - 5 * opts.pix);
-          context.fillRect(startX, startY + 0.5 * lineHeight - 5 * opts.pix, 15 * opts.pix, 10 * opts.pix);
-      }
-      context.closePath();
-      context.fill();
-      context.stroke();
-      startX += shapeWidth + shapeRight;
-      let fontTrans = 0.5 * lineHeight + 0.5 * fontSize - 2;
-      context.beginPath();
-      context.setFontSize(fontSize);
-      context.setFillStyle(item.show ? opts.legend.fontColor : opts.legend.hiddenColor);
-      context.fillText(item.name, startX, startY + fontTrans);
-      context.closePath();
-      context.stroke();
-      if (opts.legend.position == 'top' || opts.legend.position == 'bottom') {
-        startX += measureText(item.name, fontSize, context) + itemGap;
-        item.area[2] = startX;
-      } else {
-        item.area[2] = startX + measureText(item.name, fontSize, context) + itemGap;;
-        startX -= shapeWidth + shapeRight;
-        startY += lineHeight;
-      }
-    }
-  });
-}
-
-function drawPieDataPoints(series, opts, config, context) {
-  var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
-  var pieOption = assign({}, {
-    activeOpacity: 0.5,
-    activeRadius: 10,
-    offsetAngle: 0,
-    labelWidth: 15,
-    ringWidth: 30,
-    customRadius: 0,
-    border: false,
-    borderWidth: 2,
-    borderColor: '#FFFFFF',
-    centerColor: '#FFFFFF',
-    linearType: 'none',
-    customColor: [],
-  }, opts.type == "pie" ? opts.extra.pie : opts.extra.ring);
-  var centerPosition = {
-    x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2,
-    y: opts.area[0] + (opts.height - opts.area[0] - opts.area[2]) / 2
-  };
-  if (config.pieChartLinePadding == 0) {
-    config.pieChartLinePadding = pieOption.activeRadius * opts.pix;
-  }
-
-  var radius = Math.min((opts.width - opts.area[1] - opts.area[3]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding - config._pieTextMaxLength_, (opts.height - opts.area[0] - opts.area[2]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding);
-  if (pieOption.customRadius > 0) {
-    radius = pieOption.customRadius * opts.pix;
-  }
-  series = getPieDataPoints(series, radius, process);
-  var activeRadius = pieOption.activeRadius * opts.pix;
-  pieOption.customColor = fillCustomColor(pieOption.linearType, pieOption.customColor, series, config);
-  series = series.map(function(eachSeries) {
-    eachSeries._start_ += (pieOption.offsetAngle) * Math.PI / 180;
-    return eachSeries;
-  });
-  series.forEach(function(eachSeries, seriesIndex) {
-    if (opts.tooltip) {
-      if (opts.tooltip.index == seriesIndex) {
-        context.beginPath();
-        context.setFillStyle(hexToRgb(eachSeries.color, pieOption.activeOpacity || 0.5));
-        context.moveTo(centerPosition.x, centerPosition.y);
-        context.arc(centerPosition.x, centerPosition.y, eachSeries._radius_ + activeRadius, eachSeries._start_, eachSeries._start_ + 2 * eachSeries._proportion_ * Math.PI);
-        context.closePath();
-        context.fill();
-      }
-    }
-    context.beginPath();
-    context.setLineWidth(pieOption.borderWidth * opts.pix);
-    context.lineJoin = "round";
-    context.setStrokeStyle(pieOption.borderColor);
-    var fillcolor = eachSeries.color;
-    if (pieOption.linearType == 'custom') {
-      var grd;
-      if(context.createCircularGradient){
-        grd = context.createCircularGradient(centerPosition.x, centerPosition.y, eachSeries._radius_)
-      }else{
-        grd = context.createRadialGradient(centerPosition.x, centerPosition.y, 0,centerPosition.x, centerPosition.y, eachSeries._radius_)
-      }
-      grd.addColorStop(0, hexToRgb(pieOption.customColor[eachSeries.linearIndex], 1))
-      grd.addColorStop(1, hexToRgb(eachSeries.color, 1))
-      fillcolor = grd
-    }
-    context.setFillStyle(fillcolor);
-    context.moveTo(centerPosition.x, centerPosition.y);
-    context.arc(centerPosition.x, centerPosition.y, eachSeries._radius_, eachSeries._start_, eachSeries._start_ + 2 * eachSeries._proportion_ * Math.PI);
-    context.closePath();
-    context.fill();
-    if (pieOption.border == true) {
-      context.stroke();
-    }
-  });
-  if (opts.type === 'ring') {
-    var innerPieWidth = radius * 0.6;
-    if (typeof pieOption.ringWidth === 'number' && pieOption.ringWidth > 0) {
-      innerPieWidth = Math.max(0, radius - pieOption.ringWidth * opts.pix);
-    }
-    context.beginPath();
-    context.setFillStyle(pieOption.centerColor);
-    context.moveTo(centerPosition.x, centerPosition.y);
-    context.arc(centerPosition.x, centerPosition.y, innerPieWidth, 0, 2 * Math.PI);
-    context.closePath();
-    context.fill();
-  }
-  if (opts.dataLabel !== false && process === 1) {
-    var valid = false;
-    for (var i = 0, len = series.length; i < len; i++) {
-      if (series[i].data > 0) {
-        valid = true;
-        break;
-      }
-    }
-    if (valid) {
-      drawPieText(series, opts, config, context, radius, centerPosition);
-    }
-  }
-  if (process === 1 && opts.type === 'ring') {
-    drawRingTitle(opts, config, context, centerPosition);
-  }
-  return {
-    center: centerPosition,
-    radius: radius,
-    series: series
-  };
-}
-
-function drawRoseDataPoints(series, opts, config, context) {
-  var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
-  var roseOption = assign({}, {
-    type: 'area',
-    activeOpacity: 0.5,
-    activeRadius: 10,
-    offsetAngle: 0,
-    labelWidth: 15,
-    border: false,
-    borderWidth: 2,
-    borderColor: '#FFFFFF',
-    linearType: 'none',
-    customColor: [],
-  }, opts.extra.rose);
-  if (config.pieChartLinePadding == 0) {
-    config.pieChartLinePadding = roseOption.activeRadius * opts.pix;
-  }
-  var centerPosition = {
-    x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2,
-    y: opts.area[0] + (opts.height - opts.area[0] - opts.area[2]) / 2
-  };
-  var radius = Math.min((opts.width - opts.area[1] - opts.area[3]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding - config._pieTextMaxLength_, (opts.height - opts.area[0] - opts.area[2]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding);
-  var minRadius = roseOption.minRadius || radius * 0.5;
-  series = getRoseDataPoints(series, roseOption.type, minRadius, radius, process);
-  var activeRadius = roseOption.activeRadius * opts.pix;
-  roseOption.customColor = fillCustomColor(roseOption.linearType, roseOption.customColor, series, config);
-  series = series.map(function(eachSeries) {
-    eachSeries._start_ += (roseOption.offsetAngle || 0) * Math.PI / 180;
-    return eachSeries;
-  });
-  series.forEach(function(eachSeries, seriesIndex) {
-    if (opts.tooltip) {
-      if (opts.tooltip.index == seriesIndex) {
-        context.beginPath();
-        context.setFillStyle(hexToRgb(eachSeries.color, roseOption.activeOpacity || 0.5));
-        context.moveTo(centerPosition.x, centerPosition.y);
-        context.arc(centerPosition.x, centerPosition.y, activeRadius + eachSeries._radius_, eachSeries._start_, eachSeries._start_ + 2 * eachSeries._rose_proportion_ * Math.PI);
-        context.closePath();
-        context.fill();
-      }
-    }
-    context.beginPath();
-    context.setLineWidth(roseOption.borderWidth * opts.pix);
-    context.lineJoin = "round";
-    context.setStrokeStyle(roseOption.borderColor);
-    var fillcolor = eachSeries.color;
-    if (roseOption.linearType == 'custom') {
-      var grd;
-      if(context.createCircularGradient){
-        grd = context.createCircularGradient(centerPosition.x, centerPosition.y, eachSeries._radius_)
-      }else{
-        grd = context.createRadialGradient(centerPosition.x, centerPosition.y, 0,centerPosition.x, centerPosition.y, eachSeries._radius_)
-      }
-      grd.addColorStop(0, hexToRgb(roseOption.customColor[eachSeries.linearIndex], 1))
-      grd.addColorStop(1, hexToRgb(eachSeries.color, 1))
-      fillcolor = grd
-    }
-    context.setFillStyle(fillcolor);
-    context.moveTo(centerPosition.x, centerPosition.y);
-    context.arc(centerPosition.x, centerPosition.y, eachSeries._radius_, eachSeries._start_, eachSeries._start_ + 2 * eachSeries._rose_proportion_ * Math.PI);
-    context.closePath();
-    context.fill();
-    if (roseOption.border == true) {
-      context.stroke();
-    }
-  });
-
-  if (opts.dataLabel !== false && process === 1) {
-    var valid = false;
-    for (var i = 0, len = series.length; i < len; i++) {
-      if (series[i].data > 0) {
-        valid = true;
-        break;
-      }
-    }
-    if (valid) {
-      drawPieText(series, opts, config, context, radius, centerPosition);
-    }
-  }
-  return {
-    center: centerPosition,
-    radius: radius,
-    series: series
-  };
-}
-
-function drawArcbarDataPoints(series, opts, config, context) {
-  var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
-  var arcbarOption = assign({}, {
-    startAngle: 0.75,
-    endAngle: 0.25,
-    type: 'default',
-    width: 12 ,
-    gap: 2 ,
-    linearType: 'none',
-    customColor: [],
-  }, opts.extra.arcbar);
-  series = getArcbarDataPoints(series, arcbarOption, process);
-  var centerPosition;
-  if (arcbarOption.centerX || arcbarOption.centerY) {
-    centerPosition = {
-      x: arcbarOption.centerX ? arcbarOption.centerX : opts.width / 2,
-      y: arcbarOption.centerY ? arcbarOption.centerY : opts.height / 2
-    };
-  } else {
-    centerPosition = {
-      x: opts.width / 2,
-      y: opts.height / 2
-    };
-  }
-  var radius;
-  if (arcbarOption.radius) {
-    radius = arcbarOption.radius;
-  } else {
-    radius = Math.min(centerPosition.x, centerPosition.y);
-    radius -= 5 * opts.pix;
-    radius -= arcbarOption.width / 2;
-  }
-  arcbarOption.customColor = fillCustomColor(arcbarOption.linearType, arcbarOption.customColor, series, config);
-  
-  for (let i = 0; i < series.length; i++) {
-    let eachSeries = series[i];
-    //背景颜色
-    context.setLineWidth(arcbarOption.width * opts.pix);
-    context.setStrokeStyle(arcbarOption.backgroundColor || '#E9E9E9');
-    context.setLineCap('round');
-    context.beginPath();
-    if (arcbarOption.type == 'default') {
-      context.arc(centerPosition.x, centerPosition.y, radius - (arcbarOption.width * opts.pix + arcbarOption.gap * opts.pix) * i, arcbarOption.startAngle * Math.PI, arcbarOption.endAngle * Math.PI, false);
-    } else {
-      context.arc(centerPosition.x, centerPosition.y, radius - (arcbarOption.width * opts.pix + arcbarOption.gap * opts.pix) * i, 0, 2 * Math.PI, false);
-    }
-    context.stroke();
-    //进度条
-    var fillColor = eachSeries.color
-    if(arcbarOption.linearType == 'custom'){
-      var grd = context.createLinearGradient(centerPosition.x - radius, centerPosition.y, centerPosition.x + radius, centerPosition.y);
-      grd.addColorStop(1, hexToRgb(arcbarOption.customColor[eachSeries.linearIndex], 1))
-      grd.addColorStop(0, hexToRgb(eachSeries.color, 1))
-      fillColor = grd;
-    }
-    context.setLineWidth(arcbarOption.width * opts.pix);
-    context.setStrokeStyle(fillColor);
-    context.setLineCap('round');
-    context.beginPath();
-    context.arc(centerPosition.x, centerPosition.y, radius - (arcbarOption.width * opts.pix + arcbarOption.gap * opts.pix) * i, arcbarOption.startAngle * Math.PI, eachSeries._proportion_ * Math.PI, false);
-    context.stroke();
-  }
-  drawRingTitle(opts, config, context, centerPosition);
-  return {
-    center: centerPosition,
-    radius: radius,
-    series: series
-  };
-}
-
-function drawGaugeDataPoints(categories, series, opts, config, context) {
-  var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1;
-  var gaugeOption = assign({}, {
-    type: 'default',
-    startAngle: 0.75,
-    endAngle: 0.25,
-    width: 15,
-    labelOffset:13,
-    splitLine: {
-      fixRadius: 0,
-      splitNumber: 10,
-      width: 15,
-      color: '#FFFFFF',
-      childNumber: 5,
-      childWidth: 5
-    },
-    pointer: {
-      width: 15,
-      color: 'auto'
-    }
-  }, opts.extra.gauge);
-  if (gaugeOption.oldAngle == undefined) {
-    gaugeOption.oldAngle = gaugeOption.startAngle;
-  }
-  if (gaugeOption.oldData == undefined) {
-    gaugeOption.oldData = 0;
-  }
-  categories = getGaugeAxisPoints(categories, gaugeOption.startAngle, gaugeOption.endAngle);
-  var centerPosition = {
-    x: opts.width / 2,
-    y: opts.height / 2
-  };
-  var radius = Math.min(centerPosition.x, centerPosition.y);
-  radius -= 5 * opts.pix;
-  radius -= gaugeOption.width / 2;
-  var innerRadius = radius - gaugeOption.width;
-  var totalAngle = 0;
-  //判断仪表盘的样式:default百度样式,progress新样式
-  if (gaugeOption.type == 'progress') {
-    //## 第一步画中心圆形背景和进度条背景
-    //中心圆形背景
-    var pieRadius = radius - gaugeOption.width * 3;
-    context.beginPath();
-    let gradient = context.createLinearGradient(centerPosition.x, centerPosition.y - pieRadius, centerPosition.x, centerPosition.y + pieRadius);
-    //配置渐变填充(起点:中心点向上减半径;结束点中心点向下加半径)
-    gradient.addColorStop('0', hexToRgb(series[0].color, 0.3));
-    gradient.addColorStop('1.0', hexToRgb("#FFFFFF", 0.1));
-    context.setFillStyle(gradient);
-    context.arc(centerPosition.x, centerPosition.y, pieRadius, 0, 2 * Math.PI, false);
-    context.fill();
-    //画进度条背景
-    context.setLineWidth(gaugeOption.width);
-    context.setStrokeStyle(hexToRgb(series[0].color, 0.3));
-    context.setLineCap('round');
-    context.beginPath();
-    context.arc(centerPosition.x, centerPosition.y, innerRadius, gaugeOption.startAngle * Math.PI, gaugeOption.endAngle * Math.PI, false);
-    context.stroke();
-    //## 第二步画刻度线
-    totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1;
-    let splitAngle = totalAngle / gaugeOption.splitLine.splitNumber;
-    let childAngle = totalAngle / gaugeOption.splitLine.splitNumber / gaugeOption.splitLine.childNumber;
-    let startX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius;
-    let endX = -radius - gaugeOption.width - gaugeOption.splitLine.fixRadius + gaugeOption.splitLine.width;
-    context.save();
-    context.translate(centerPosition.x, centerPosition.y);
-    context.rotate((gaugeOption.startAngle - 1) * Math.PI);
-    let len = gaugeOption.splitLine.splitNumber * gaugeOption.splitLine.childNumber + 1;
-    let proc = series[0].data * process;
-    for (let i = 0; i < len; i++) {
-      context.beginPath();
-      //刻度线随进度变色
-      if (proc > (i / len)) {
-        context.setStrokeStyle(hexToRgb(series[0].color, 1));
-      } else {
-        context.setStrokeStyle(hexToRgb(series[0].color, 0.3));
-      }
-      context.setLineWidth(3 * opts.pix);
-      context.moveTo(startX, 0);
-      context.lineTo(endX, 0);
-      context.stroke();
-      context.rotate(childAngle * Math.PI);
-    }
-    context.restore();
-    //## 第三步画进度条
-    series = getArcbarDataPoints(series, gaugeOption, process);
-    context.setLineWidth(gaugeOption.width);
-    context.setStrokeStyle(series[0].color);
-    context.setLineCap('round');
-    context.beginPath();
-    context.arc(centerPosition.x, centerPosition.y, innerRadius, gaugeOption.startAngle * Math.PI, series[0]._proportion_ * Math.PI, false);
-    context.stroke();
-    //## 第四步画指针
-    let pointerRadius = radius - gaugeOption.width * 2.5;
-    context.save();
-    context.translate(centerPosition.x, centerPosition.y);
-    context.rotate((series[0]._proportion_ - 1) * Math.PI);
-    context.beginPath();
-    context.setLineWidth(gaugeOption.width / 3);
-    let gradient3 = context.createLinearGradient(0, -pointerRadius * 0.6, 0, pointerRadius * 0.6);
-    gradient3.addColorStop('0', hexToRgb('#FFFFFF', 0));
-    gradient3.addColorStop('0.5', hexToRgb(series[0].color, 1));
-    gradient3.addColorStop('1.0', hexToRgb('#FFFFFF', 0));
-    context.setStrokeStyle(gradient3);
-    context.arc(0, 0, pointerRadius, 0.85 * Math.PI, 1.15 * Math.PI, false);
-    context.stroke();
-    context.beginPath();
-    context.setLineWidth(1);
-    context.setStrokeStyle(series[0].color);
-    context.setFillStyle(series[0].color);
-    context.moveTo(-pointerRadius - gaugeOption.width / 3 / 2, -4);
-    context.lineTo(-pointerRadius - gaugeOption.width / 3 / 2 - 4, 0);
-    context.lineTo(-pointerRadius - gaugeOption.width / 3 / 2, 4);
-    context.lineTo(-pointerRadius - gaugeOption.width / 3 / 2, -4);
-    context.stroke();
-    context.fill();
-    context.restore();
-    //default百度样式
-  } else {
-    //画背景
-    context.setLineWidth(gaugeOption.width);
-    context.setLineCap('butt');
-    for (let i = 0; i < categories.length; i++) {
-      let eachCategories = categories[i];
-      context.beginPath();
-      context.setStrokeStyle(eachCategories.color);
-      context.arc(centerPosition.x, centerPosition.y, radius, eachCategories._startAngle_ * Math.PI, eachCategories._endAngle_ * Math.PI, false);
-      context.stroke();
-    }
-    context.save();
-    //画刻度线
-    totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1;
-    let splitAngle = totalAngle / gaugeOption.splitLine.splitNumber;
-    let childAngle = totalAngle / gaugeOption.splitLine.splitNumber / gaugeOption.splitLine.childNumber;
-    let startX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius;
-    let endX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius + gaugeOption.splitLine.width;
-    let childendX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius + gaugeOption.splitLine.childWidth;
-    context.translate(centerPosition.x, centerPosition.y);
-    context.rotate((gaugeOption.startAngle - 1) * Math.PI);
-    for (let i = 0; i < gaugeOption.splitLine.splitNumber + 1; i++) {
-      context.beginPath();
-      context.setStrokeStyle(gaugeOption.splitLine.color);
-      context.setLineWidth(2 * opts.pix);
-      context.moveTo(startX, 0);
-      context.lineTo(endX, 0);
-      context.stroke();
-      context.rotate(splitAngle * Math.PI);
-    }
-    context.restore();
-    context.save();
-    context.translate(centerPosition.x, centerPosition.y);
-    context.rotate((gaugeOption.startAngle - 1) * Math.PI);
-    for (let i = 0; i < gaugeOption.splitLine.splitNumber * gaugeOption.splitLine.childNumber + 1; i++) {
-      context.beginPath();
-      context.setStrokeStyle(gaugeOption.splitLine.color);
-      context.setLineWidth(1 * opts.pix);
-      context.moveTo(startX, 0);
-      context.lineTo(childendX, 0);
-      context.stroke();
-      context.rotate(childAngle * Math.PI);
-    }
-    context.restore();
-    //画指针
-    series = getGaugeDataPoints(series, categories, gaugeOption, process);
-    for (let i = 0; i < series.length; i++) {
-      let eachSeries = series[i];
-      context.save();
-      context.translate(centerPosition.x, centerPosition.y);
-      context.rotate((eachSeries._proportion_ - 1) * Math.PI);
-      context.beginPath();
-      context.setFillStyle(eachSeries.color);
-      context.moveTo(gaugeOption.pointer.width, 0);
-      context.lineTo(0, -gaugeOption.pointer.width / 2);
-      context.lineTo(-innerRadius, 0);
-      context.lineTo(0, gaugeOption.pointer.width / 2);
-      context.lineTo(gaugeOption.pointer.width, 0);
-      context.closePath();
-      context.fill();
-      context.beginPath();
-      context.setFillStyle('#FFFFFF');
-      context.arc(0, 0, gaugeOption.pointer.width / 6, 0, 2 * Math.PI, false);
-      context.fill();
-      context.restore();
-    }
-    if (opts.dataLabel !== false) {
-      drawGaugeLabel(gaugeOption, radius, centerPosition, opts, config, context);
-    }
-  }
-  //画仪表盘标题,副标题
-  drawRingTitle(opts, config, context, centerPosition);
-  if (process === 1 && opts.type === 'gauge') {
-    opts.extra.gauge.oldAngle = series[0]._proportion_;
-    opts.extra.gauge.oldData = series[0].data;
-  }
-  return {
-    center: centerPosition,
-    radius: radius,
-    innerRadius: innerRadius,
-    categories: categories,
-    totalAngle: totalAngle
-  };
-}
-
-function drawRadarDataPoints(series, opts, config, context) {
-  var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
-  var radarOption = assign({}, {
-    gridColor: '#cccccc',
-    gridType: 'radar',
-    opacity: 0.2,
-    gridCount: 3,
-    border:false,
-    borderWidth:2
-  }, opts.extra.radar);
-  var coordinateAngle = getRadarCoordinateSeries(opts.categories.length);
-  var centerPosition = {
-    x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2,
-    y: opts.area[0] + (opts.height - opts.area[0] - opts.area[2]) / 2
-  };
-  var xr = (opts.width - opts.area[1] - opts.area[3]) / 2
-  var yr = (opts.height - opts.area[0] - opts.area[2]) / 2
-  var radius = Math.min(xr - (getMaxTextListLength(opts.categories, config.fontSize, context) + config.radarLabelTextMargin), yr - config.radarLabelTextMargin);
-  radius -= config.radarLabelTextMargin * opts.pix;
-  // 画分割线
-  context.beginPath();
-  context.setLineWidth(1 * opts.pix);
-  context.setStrokeStyle(radarOption.gridColor);
-  coordinateAngle.forEach(function(angle) {
-    var pos = convertCoordinateOrigin(radius * Math.cos(angle), radius * Math.sin(angle), centerPosition);
-    context.moveTo(centerPosition.x, centerPosition.y);
-    context.lineTo(pos.x, pos.y);
-  });
-  context.stroke();
-  context.closePath();
-  
-  // 画背景网格
-  var _loop = function _loop(i) {
-    var startPos = {};
-    context.beginPath();
-    context.setLineWidth(1 * opts.pix);
-    context.setStrokeStyle(radarOption.gridColor);
-    if (radarOption.gridType == 'radar') {
-      coordinateAngle.forEach(function(angle, index) {
-        var pos = convertCoordinateOrigin(radius / radarOption.gridCount * i * Math.cos(angle), radius /
-          radarOption.gridCount * i * Math.sin(angle), centerPosition);
-        if (index === 0) {
-          startPos = pos;
-          context.moveTo(pos.x, pos.y);
-        } else {
-          context.lineTo(pos.x, pos.y);
-        }
-      });
-      context.lineTo(startPos.x, startPos.y);
-    } else {
-      var pos = convertCoordinateOrigin(radius / radarOption.gridCount * i * Math.cos(1.5), radius / radarOption.gridCount * i * Math.sin(1.5), centerPosition);
-      context.arc(centerPosition.x, centerPosition.y, centerPosition.y - pos.y, 0, 2 * Math.PI, false);
-    }
-    context.stroke();
-    context.closePath();
-  };
-  for (var i = 1; i <= radarOption.gridCount; i++) {
-    _loop(i);
-  }
-  var radarDataPoints = getRadarDataPoints(coordinateAngle, centerPosition, radius, series, opts, process);
-  radarDataPoints.forEach(function(eachSeries, seriesIndex) {
-    // 绘制区域数据
-    context.beginPath();
-    context.setLineWidth(radarOption.borderWidth * opts.pix);
-    context.setStrokeStyle(eachSeries.color);
-    context.setFillStyle(hexToRgb(eachSeries.color, radarOption.opacity));
-    eachSeries.data.forEach(function(item, index) {
-      if (index === 0) {
-        context.moveTo(item.position.x, item.position.y);
-      } else {
-        context.lineTo(item.position.x, item.position.y);
-      }
-    });
-    context.closePath();
-    context.fill();
-    if(radarOption.border === true){
-      context.stroke();
-    }
-    context.closePath();
-    if (opts.dataPointShape !== false) {
-      var points = eachSeries.data.map(function(item) {
-        return item.position;
-      });
-      drawPointShape(points, eachSeries.color, eachSeries.pointShape, context, opts);
-    }
-  });
-  // draw label text
-  drawRadarLabel(coordinateAngle, radius, centerPosition, opts, config, context);
-  
-  // draw dataLabel
-  if (opts.dataLabel !== false && process === 1) {
-    radarDataPoints.forEach(function(eachSeries, seriesIndex) {
-      context.beginPath();
-      var fontSize = eachSeries.textSize * opts.pix || config.fontSize;
-      context.setFontSize(fontSize);
-      context.setFillStyle(eachSeries.textColor || opts.fontColor);
-      eachSeries.data.forEach(function(item, index) {
-        //如果是中心点垂直的上下点位
-        if(Math.abs(item.position.x - centerPosition.x)<2){
-          //如果在上面
-          if(item.position.y < centerPosition.y){
-            context.setTextAlign('center');
-            context.fillText(item.value, item.position.x, item.position.y - 4);
-          }else{
-            context.setTextAlign('center');
-            context.fillText(item.value, item.position.x, item.position.y + fontSize + 2);
-          }
-        }else{
-          //如果在左侧
-          if(item.position.x < centerPosition.x){
-            context.setTextAlign('right');
-            context.fillText(item.value, item.position.x - 4, item.position.y + fontSize / 2 - 2);
-          }else{
-            context.setTextAlign('left');
-            context.fillText(item.value, item.position.x + 4, item.position.y + fontSize / 2 - 2);
-          }
-        }
-      });
-      context.closePath();
-      context.stroke();
-    });
-    context.setTextAlign('left');
-  }
-  
-  return {
-    center: centerPosition,
-    radius: radius,
-    angleList: coordinateAngle
-  };
-}
-
-function normalInt(min, max, iter) {
-  iter = iter == 0 ? 1 : iter;
-  var arr = [];
-  for (var i = 0; i < iter; i++) {
-    arr[i] = Math.random();
-  };
-  return Math.floor(arr.reduce(function(i, j) {
-    return i + j
-  }) / iter * (max - min)) + min;
-};
-
-function collisionNew(area, points, width, height) {
-  var isIn = false;
-  for (let i = 0; i < points.length; i++) {
-    if (points[i].area) {
-      if (area[3] < points[i].area[1] || area[0] > points[i].area[2] || area[1] > points[i].area[3] || area[2] < points[i].area[0]) {
-        if (area[0] < 0 || area[1] < 0 || area[2] > width || area[3] > height) {
-          isIn = true;
-          break;
-        } else {
-          isIn = false;
-        }
-      } else {
-        isIn = true;
-        break;
-      }
-    }
-  }
-  return isIn;
-};
-
-function getBoundingBox(data) {
-  var bounds = {},coords;
-  bounds.xMin = 180;
-  bounds.xMax = 0;
-  bounds.yMin = 90;
-  bounds.yMax = 0
-  for (var i = 0; i < data.length; i++) {
-    var coorda = data[i].geometry.coordinates
-    for (var k = 0; k < coorda.length; k++) {
-      coords = coorda[k];
-      if (coords.length == 1) {
-        coords = coords[0]
-      }
-      for (var j = 0; j < coords.length; j++) {
-        var longitude = coords[j][0];
-        var latitude = coords[j][1];
-        var point = {
-          x: longitude,
-          y: latitude
-        }
-        bounds.xMin = bounds.xMin < point.x ? bounds.xMin : point.x;
-        bounds.xMax = bounds.xMax > point.x ? bounds.xMax : point.x;
-        bounds.yMin = bounds.yMin < point.y ? bounds.yMin : point.y;
-        bounds.yMax = bounds.yMax > point.y ? bounds.yMax : point.y;
-      }
-    }
-  }
-  return bounds;
-}
-
-function coordinateToPoint(latitude, longitude, bounds, scale, xoffset, yoffset) {
-  return {
-    x: (longitude - bounds.xMin) * scale + xoffset,
-    y: (bounds.yMax - latitude) * scale + yoffset
-  };
-}
-
-function pointToCoordinate(pointY, pointX, bounds, scale, xoffset, yoffset) {
-  return {
-    x: (pointX - xoffset) / scale + bounds.xMin,
-    y: bounds.yMax - (pointY - yoffset) / scale
-  };
-}
-
-function isRayIntersectsSegment(poi, s_poi, e_poi) {
-  if (s_poi[1] == e_poi[1]) {
-    return false;
-  }
-  if (s_poi[1] > poi[1] && e_poi[1] > poi[1]) {
-    return false;
-  }
-  if (s_poi[1] < poi[1] && e_poi[1] < poi[1]) {
-    return false;
-  }
-  if (s_poi[1] == poi[1] && e_poi[1] > poi[1]) {
-    return false;
-  }
-  if (e_poi[1] == poi[1] && s_poi[1] > poi[1]) {
-    return false;
-  }
-  if (s_poi[0] < poi[0] && e_poi[1] < poi[1]) {
-    return false;
-  }
-  let xseg = e_poi[0] - (e_poi[0] - s_poi[0]) * (e_poi[1] - poi[1]) / (e_poi[1] - s_poi[1]);
-  if (xseg < poi[0]) {
-    return false;
-  } else {
-    return true;
-  }
-}
-
-function isPoiWithinPoly(poi, poly, mercator) {
-  let sinsc = 0;
-  for (let i = 0; i < poly.length; i++) {
-    let epoly = poly[i][0];
-    if (poly.length == 1) {
-      epoly = poly[i][0]
-    }
-    for (let j = 0; j < epoly.length - 1; j++) {
-      let s_poi = epoly[j];
-      let e_poi = epoly[j + 1];
-      if (mercator) {
-        s_poi = lonlat2mercator(epoly[j][0], epoly[j][1]);
-        e_poi = lonlat2mercator(epoly[j + 1][0], epoly[j + 1][1]);
-      }
-      if (isRayIntersectsSegment(poi, s_poi, e_poi)) {
-        sinsc += 1;
-      }
-    }
-  }
-  if (sinsc % 2 == 1) {
-    return true;
-  } else {
-    return false;
-  }
-}
-
-
-function drawMapDataPoints(series, opts, config, context) {
-  var mapOption = assign({}, {
-    border: true,
-    mercator: false,
-    borderWidth: 1,
-    borderColor: '#666666',
-    fillOpacity: 0.6,
-    activeBorderColor: '#f04864',
-    activeFillColor: '#facc14',
-    activeFillOpacity: 1
-  }, opts.extra.map);
-  var coords, point;
-  var data = series;
-  var bounds = getBoundingBox(data);
-  if (mapOption.mercator) {
-    var max = lonlat2mercator(bounds.xMax, bounds.yMax)
-    var min = lonlat2mercator(bounds.xMin, bounds.yMin)
-    bounds.xMax = max[0]
-    bounds.yMax = max[1]
-    bounds.xMin = min[0]
-    bounds.yMin = min[1]
-  }
-  var xScale = opts.width / Math.abs(bounds.xMax - bounds.xMin);
-  var yScale = opts.height / Math.abs(bounds.yMax - bounds.yMin);
-  var scale = xScale < yScale ? xScale : yScale;
-  var xoffset = opts.width / 2 - Math.abs(bounds.xMax - bounds.xMin) / 2 * scale;
-  var yoffset = opts.height / 2 - Math.abs(bounds.yMax - bounds.yMin) / 2 * scale;
-  for (var i = 0; i < data.length; i++) {
-    context.beginPath();
-    context.setLineWidth(mapOption.borderWidth * opts.pix);
-    context.setStrokeStyle(mapOption.borderColor);
-    context.setFillStyle(hexToRgb(series[i].color, mapOption.fillOpacity));
-    if (opts.tooltip) {
-      if (opts.tooltip.index == i) {
-        context.setStrokeStyle(mapOption.activeBorderColor);
-        context.setFillStyle(hexToRgb(mapOption.activeFillColor, mapOption.activeFillOpacity));
-      }
-    }
-    var coorda = data[i].geometry.coordinates
-    for (var k = 0; k < coorda.length; k++) {
-      coords = coorda[k];
-      if (coords.length == 1) {
-        coords = coords[0]
-      }
-      for (var j = 0; j < coords.length; j++) {
-        var gaosi = Array(2);
-        if (mapOption.mercator) {
-          gaosi = lonlat2mercator(coords[j][0], coords[j][1])
-        } else {
-          gaosi = coords[j]
-        }
-        point = coordinateToPoint(gaosi[1], gaosi[0], bounds, scale, xoffset, yoffset)
-        if (j === 0) {
-          context.beginPath();
-          context.moveTo(point.x, point.y);
-        } else {
-          context.lineTo(point.x, point.y);
-        }
-      }
-      context.fill();
-      if (mapOption.border == true) {
-        context.stroke();
-      }
-    }
-    if (opts.dataLabel == true) {
-      var centerPoint = data[i].properties.centroid;
-      if (centerPoint) {
-        if (mapOption.mercator) {
-          centerPoint = lonlat2mercator(data[i].properties.centroid[0], data[i].properties.centroid[1])
-        }
-        point = coordinateToPoint(centerPoint[1], centerPoint[0], bounds, scale, xoffset, yoffset);
-        let fontSize = data[i].textSize * opts.pix || config.fontSize;
-        let text = data[i].properties.name;
-        context.beginPath();
-        context.setFontSize(fontSize)
-        context.setFillStyle(data[i].textColor || opts.fontColor)
-        context.fillText(text, point.x - measureText(text, fontSize, context) / 2, point.y + fontSize / 2);
-        context.closePath();
-        context.stroke();
-      }
-    }
-  }
-  opts.chartData.mapData = {
-    bounds: bounds,
-    scale: scale,
-    xoffset: xoffset,
-    yoffset: yoffset,
-    mercator: mapOption.mercator
-  }
-  drawToolTipBridge(opts, config, context, 1);
-  context.draw();
-}
-
-function getWordCloudPoint(opts, type, context) {
-  let points = opts.series;
-  switch (type) {
-    case 'normal':
-      for (let i = 0; i < points.length; i++) {
-        let text = points[i].name;
-        let tHeight = points[i].textSize * opts.pix;
-        let tWidth = measureText(text, tHeight, context);
-        let x, y;
-        let area;
-        let breaknum = 0;
-        while (true) {
-          breaknum++;
-          x = normalInt(-opts.width / 2, opts.width / 2, 5) - tWidth / 2;
-          y = normalInt(-opts.height / 2, opts.height / 2, 5) + tHeight / 2;
-          area = [x - 5 + opts.width / 2, y - 5 - tHeight + opts.height / 2, x + tWidth + 5 + opts.width / 2, y + 5 +
-            opts.height / 2
-          ];
-          let isCollision = collisionNew(area, points, opts.width, opts.height);
-          if (!isCollision) break;
-          if (breaknum == 1000) {
-            area = [-100, -100, -100, -100];
-            break;
-          }
-        };
-        points[i].area = area;
-      }
-      break;
-    case 'vertical':
-      function Spin() {
-        //获取均匀随机值,是否旋转,旋转的概率为(1-0.5)
-        if (Math.random() > 0.7) {
-          return true;
-        } else {
-          return false
-        };
-      };
-      for (let i = 0; i < points.length; i++) {
-        let text = points[i].name;
-        let tHeight = points[i].textSize * opts.pix;
-        let tWidth = measureText(text, tHeight, context);
-        let isSpin = Spin();
-        let x, y, area, areav;
-        let breaknum = 0;
-        while (true) {
-          breaknum++;
-          let isCollision;
-          if (isSpin) {
-            x = normalInt(-opts.width / 2, opts.width / 2, 5) - tWidth / 2;
-            y = normalInt(-opts.height / 2, opts.height / 2, 5) + tHeight / 2;
-            area = [y - 5 - tWidth + opts.width / 2, (-x - 5 + opts.height / 2), y + 5 + opts.width / 2, (-x + tHeight + 5 + opts.height / 2)];
-            areav = [opts.width - (opts.width / 2 - opts.height / 2) - (-x + tHeight + 5 + opts.height / 2) - 5, (opts.height / 2 - opts.width / 2) + (y - 5 - tWidth + opts.width / 2) - 5, opts.width - (opts.width / 2 - opts.height / 2) - (-x + tHeight + 5 + opts.height / 2) + tHeight, (opts.height / 2 - opts.width / 2) + (y - 5 - tWidth + opts.width / 2) + tWidth + 5];
-            isCollision = collisionNew(areav, points, opts.height, opts.width);
-          } else {
-            x = normalInt(-opts.width / 2, opts.width / 2, 5) - tWidth / 2;
-            y = normalInt(-opts.height / 2, opts.height / 2, 5) + tHeight / 2;
-            area = [x - 5 + opts.width / 2, y - 5 - tHeight + opts.height / 2, x + tWidth + 5 + opts.width / 2, y + 5 + opts.height / 2];
-            isCollision = collisionNew(area, points, opts.width, opts.height);
-          }
-          if (!isCollision) break;
-          if (breaknum == 1000) {
-            area = [-1000, -1000, -1000, -1000];
-            break;
-          }
-        };
-        if (isSpin) {
-          points[i].area = areav;
-          points[i].areav = area;
-        } else {
-          points[i].area = area;
-        }
-        points[i].rotate = isSpin;
-      };
-      break;
-  }
-  return points;
-}
-
-
-function drawWordCloudDataPoints(series, opts, config, context) {
-  let process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
-  let wordOption = assign({}, {
-    type: 'normal',
-    autoColors: true
-  }, opts.extra.word);
-  if (!opts.chartData.wordCloudData) {
-    opts.chartData.wordCloudData = getWordCloudPoint(opts, wordOption.type, context);
-  }
-  context.beginPath();
-  context.setFillStyle(opts.background);
-  context.rect(0, 0, opts.width, opts.height);
-  context.fill();
-  context.save();
-  let points = opts.chartData.wordCloudData;
-  context.translate(opts.width / 2, opts.height / 2);
-  for (let i = 0; i < points.length; i++) {
-    context.save();
-    if (points[i].rotate) {
-      context.rotate(90 * Math.PI / 180);
-    }
-    let text = points[i].name;
-    let tHeight = points[i].textSize * opts.pix;
-    let tWidth = measureText(text, tHeight, context);
-    context.beginPath();
-    context.setStrokeStyle(points[i].color);
-    context.setFillStyle(points[i].color);
-    context.setFontSize(tHeight);
-    if (points[i].rotate) {
-      if (points[i].areav[0] > 0) {
-        if (opts.tooltip) {
-          if (opts.tooltip.index == i) {
-            context.strokeText(text, (points[i].areav[0] + 5 - opts.width / 2) * process - tWidth * (1 - process) / 2, (points[i].areav[1] + 5 + tHeight - opts.height / 2) * process);
-          } else {
-            context.fillText(text, (points[i].areav[0] + 5 - opts.width / 2) * process - tWidth * (1 - process) / 2, (points[i].areav[1] + 5 + tHeight - opts.height / 2) * process);
-          }
-        } else {
-          context.fillText(text, (points[i].areav[0] + 5 - opts.width / 2) * process - tWidth * (1 - process) / 2, (points[i].areav[1] + 5 + tHeight - opts.height / 2) * process);
-        }
-      }
-    } else {
-      if (points[i].area[0] > 0) {
-        if (opts.tooltip) {
-          if (opts.tooltip.index == i) {
-            context.strokeText(text, (points[i].area[0] + 5 - opts.width / 2) * process - tWidth * (1 - process) / 2, (points[i].area[1] + 5 + tHeight - opts.height / 2) * process);
-          } else {
-            context.fillText(text, (points[i].area[0] + 5 - opts.width / 2) * process - tWidth * (1 - process) / 2, (points[i].area[1] + 5 + tHeight - opts.height / 2) * process);
-          }
-        } else {
-          context.fillText(text, (points[i].area[0] + 5 - opts.width / 2) * process - tWidth * (1 - process) / 2, (points[i].area[1] + 5 + tHeight - opts.height / 2) * process);
-        }
-      }
-    }
-    context.stroke();
-    context.restore();
-  }
-  context.restore();
-}
-
-function drawFunnelDataPoints(series, opts, config, context) {
-  let process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
-  let funnelOption = assign({}, {
-    type:'funnel',
-    activeWidth: 10,
-    activeOpacity: 0.3,
-    border: false,
-    borderWidth: 2,
-    borderColor: '#FFFFFF',
-    fillOpacity: 1,
-    labelAlign: 'right',
-    linearType: 'none',
-    customColor: [],
-  }, opts.extra.funnel);
-  let eachSpacing = (opts.height - opts.area[0] - opts.area[2]) / series.length;
-  let centerPosition = {
-    x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2,
-    y: opts.height - opts.area[2]
-  };
-  let activeWidth = funnelOption.activeWidth * opts.pix;
-  let radius = Math.min((opts.width - opts.area[1] - opts.area[3]) / 2 - activeWidth, (opts.height - opts.area[0] - opts.area[2]) / 2 - activeWidth);
-  series = getFunnelDataPoints(series, radius, funnelOption.type, eachSpacing, process);
-  context.save();
-  context.translate(centerPosition.x, centerPosition.y);
-  funnelOption.customColor = fillCustomColor(funnelOption.linearType, funnelOption.customColor, series, config);
-  if(funnelOption.type == 'pyramid'){
-    for (let i = 0; i < series.length; i++) {
-      if (i == series.length -1) {
-        if (opts.tooltip) {
-          if (opts.tooltip.index == i) {
-            context.beginPath();
-            context.setFillStyle(hexToRgb(series[i].color, funnelOption.activeOpacity));
-            context.moveTo(-activeWidth, -eachSpacing);
-            context.lineTo(-series[i].radius - activeWidth, 0);
-            context.lineTo(series[i].radius + activeWidth, 0);
-            context.lineTo(activeWidth, -eachSpacing);
-            context.lineTo(-activeWidth, -eachSpacing);
-            context.closePath();
-            context.fill();
-          }
-        }
-        series[i].funnelArea = [centerPosition.x - series[i].radius, centerPosition.y - eachSpacing * (i + 1), centerPosition.x + series[i].radius, centerPosition.y - eachSpacing * i];
-        context.beginPath();
-        context.setLineWidth(funnelOption.borderWidth * opts.pix);
-        context.setStrokeStyle(funnelOption.borderColor);
-        var fillColor = hexToRgb(series[i].color, funnelOption.fillOpacity);
-        if (funnelOption.linearType == 'custom') {
-          var grd = context.createLinearGradient(series[i].radius, -eachSpacing, -series[i].radius, -eachSpacing);
-          grd.addColorStop(0, hexToRgb(series[i].color, funnelOption.fillOpacity));
-          grd.addColorStop(0.5, hexToRgb(funnelOption.customColor[series[i].linearIndex], funnelOption.fillOpacity));
-          grd.addColorStop(1, hexToRgb(series[i].color, funnelOption.fillOpacity));
-          fillColor = grd
-        }
-        context.setFillStyle(fillColor);
-        context.moveTo(0, -eachSpacing);
-        context.lineTo(-series[i].radius, 0);
-        context.lineTo(series[i].radius, 0);
-        context.lineTo(0, -eachSpacing);
-        context.closePath();
-        context.fill();
-        if (funnelOption.border == true) {
-          context.stroke();
-        }
-      } else {
-        if (opts.tooltip) {
-          if (opts.tooltip.index == i) {
-            context.beginPath();
-            context.setFillStyle(hexToRgb(series[i].color, funnelOption.activeOpacity));
-            context.moveTo(0, 0);
-            context.lineTo(-series[i].radius - activeWidth, 0);
-            context.lineTo(-series[i + 1].radius - activeWidth, -eachSpacing);
-            context.lineTo(series[i + 1].radius + activeWidth, -eachSpacing);
-            context.lineTo(series[i].radius + activeWidth, 0);
-            context.lineTo(0, 0);
-            context.closePath();
-            context.fill();
-          }
-        }
-        series[i].funnelArea = [centerPosition.x - series[i].radius, centerPosition.y - eachSpacing * (i + 1), centerPosition.x + series[i].radius, centerPosition.y - eachSpacing * i];
-        context.beginPath();
-        context.setLineWidth(funnelOption.borderWidth * opts.pix);
-        context.setStrokeStyle(funnelOption.borderColor);
-        var fillColor = hexToRgb(series[i].color, funnelOption.fillOpacity);
-        if (funnelOption.linearType == 'custom') {
-          var grd = context.createLinearGradient(series[i].radius, -eachSpacing, -series[i].radius, -eachSpacing);
-          grd.addColorStop(0, hexToRgb(series[i].color, funnelOption.fillOpacity));
-          grd.addColorStop(0.5, hexToRgb(funnelOption.customColor[series[i].linearIndex], funnelOption.fillOpacity));
-          grd.addColorStop(1, hexToRgb(series[i].color, funnelOption.fillOpacity));
-          fillColor = grd
-        }
-        context.setFillStyle(fillColor);
-        context.moveTo(0, 0);
-        context.lineTo(-series[i].radius, 0);
-        context.lineTo(-series[i + 1].radius, -eachSpacing);
-        context.lineTo(series[i + 1].radius, -eachSpacing);
-        context.lineTo(series[i].radius, 0);
-        context.lineTo(0, 0);
-        context.closePath();
-        context.fill();
-        if (funnelOption.border == true) {
-          context.stroke();
-        }
-      }
-      context.translate(0, -eachSpacing)
-    }
-  }else{
-    for (let i = 0; i < series.length; i++) {
-      if (i == 0) {
-        if (opts.tooltip) {
-          if (opts.tooltip.index == i) {
-            context.beginPath();
-            context.setFillStyle(hexToRgb(series[i].color, funnelOption.activeOpacity));
-            context.moveTo(-activeWidth, 0);
-            context.lineTo(-series[i].radius - activeWidth, -eachSpacing);
-            context.lineTo(series[i].radius + activeWidth, -eachSpacing);
-            context.lineTo(activeWidth, 0);
-            context.lineTo(-activeWidth, 0);
-            context.closePath();
-            context.fill();
-          }
-        }
-        series[i].funnelArea = [centerPosition.x - series[i].radius, centerPosition.y - eachSpacing, centerPosition.x + series[i].radius, centerPosition.y];
-        context.beginPath();
-        context.setLineWidth(funnelOption.borderWidth * opts.pix);
-        context.setStrokeStyle(funnelOption.borderColor);
-        var fillColor = hexToRgb(series[i].color, funnelOption.fillOpacity);
-        if (funnelOption.linearType == 'custom') {
-          var grd = context.createLinearGradient(series[i].radius, -eachSpacing, -series[i].radius, -eachSpacing);
-          grd.addColorStop(0, hexToRgb(series[i].color, funnelOption.fillOpacity));
-          grd.addColorStop(0.5, hexToRgb(funnelOption.customColor[series[i].linearIndex], funnelOption.fillOpacity));
-          grd.addColorStop(1, hexToRgb(series[i].color, funnelOption.fillOpacity));
-          fillColor = grd
-        }
-        context.setFillStyle(fillColor);
-        context.moveTo(0, 0);
-        context.lineTo(-series[i].radius, -eachSpacing);
-        context.lineTo(series[i].radius, -eachSpacing);
-        context.lineTo(0, 0);
-        context.closePath();
-        context.fill();
-        if (funnelOption.border == true) {
-          context.stroke();
-        }
-      } else {
-        if (opts.tooltip) {
-          if (opts.tooltip.index == i) {
-            context.beginPath();
-            context.setFillStyle(hexToRgb(series[i].color, funnelOption.activeOpacity));
-            context.moveTo(0, 0);
-            context.lineTo(-series[i - 1].radius - activeWidth, 0);
-            context.lineTo(-series[i].radius - activeWidth, -eachSpacing);
-            context.lineTo(series[i].radius + activeWidth, -eachSpacing);
-            context.lineTo(series[i - 1].radius + activeWidth, 0);
-            context.lineTo(0, 0);
-            context.closePath();
-            context.fill();
-          }
-        }
-        series[i].funnelArea = [centerPosition.x - series[i].radius, centerPosition.y - eachSpacing * (i + 1), centerPosition.x + series[i].radius, centerPosition.y - eachSpacing * i];
-        context.beginPath();
-        context.setLineWidth(funnelOption.borderWidth * opts.pix);
-        context.setStrokeStyle(funnelOption.borderColor);
-        var fillColor = hexToRgb(series[i].color, funnelOption.fillOpacity);
-        if (funnelOption.linearType == 'custom') {
-          var grd = context.createLinearGradient(series[i].radius, -eachSpacing, -series[i].radius, -eachSpacing);
-          grd.addColorStop(0, hexToRgb(series[i].color, funnelOption.fillOpacity));
-          grd.addColorStop(0.5, hexToRgb(funnelOption.customColor[series[i].linearIndex], funnelOption.fillOpacity));
-          grd.addColorStop(1, hexToRgb(series[i].color, funnelOption.fillOpacity));
-          fillColor = grd
-        }
-        context.setFillStyle(fillColor);
-        context.moveTo(0, 0);
-        context.lineTo(-series[i - 1].radius, 0);
-        context.lineTo(-series[i].radius, -eachSpacing);
-        context.lineTo(series[i].radius, -eachSpacing);
-        context.lineTo(series[i - 1].radius, 0);
-        context.lineTo(0, 0);
-        context.closePath();
-        context.fill();
-        if (funnelOption.border == true) {
-          context.stroke();
-        }
-      }
-      context.translate(0, -eachSpacing)
-    }
-  }
-  
-  context.restore();
-  if (opts.dataLabel !== false && process === 1) {
-    drawFunnelText(series, opts, context, eachSpacing, funnelOption.labelAlign, activeWidth, centerPosition);
-  }
-  return {
-    center: centerPosition,
-    radius: radius,
-    series: series
-  };
-}
-
-function drawFunnelText(series, opts, context, eachSpacing, labelAlign, activeWidth, centerPosition) {
-  for (let i = 0; i < series.length; i++) {
-    let item = series[i];
-    let startX, endX, startY, fontSize;
-    let text = item.formatter ? item.formatter(item,i,series) : util.toFixed(item._proportion_ * 100) + '%';
-    if (labelAlign == 'right') {
-      if(opts.extra.funnel.type === 'pyramid'){
-        if (i == series.length -1) {
-          startX = (item.funnelArea[2] + centerPosition.x) / 2;
-        } else {
-          startX = (item.funnelArea[2] + series[i + 1].funnelArea[2]) / 2;
-        }
-      }else{
-        if (i == 0) {
-          startX = (item.funnelArea[2] + centerPosition.x) / 2;
-        } else {
-          startX = (item.funnelArea[2] + series[i - 1].funnelArea[2]) / 2;
-        }
-      }
-      endX = startX + activeWidth * 2;
-      startY = item.funnelArea[1] + eachSpacing / 2;
-      fontSize = item.textSize * opts.pix || opts.fontSize * opts.pix;
-      context.setLineWidth(1 * opts.pix);
-      context.setStrokeStyle(item.color);
-      context.setFillStyle(item.color);
-      context.beginPath();
-      context.moveTo(startX, startY);
-      context.lineTo(endX, startY);
-      context.stroke();
-      context.closePath();
-      context.beginPath();
-      context.moveTo(endX, startY);
-      context.arc(endX, startY, 2, 0, 2 * Math.PI);
-      context.closePath();
-      context.fill();
-      context.beginPath();
-      context.setFontSize(fontSize);
-      context.setFillStyle(item.textColor || opts.fontColor);
-      context.fillText(text, endX + 5, startY + fontSize / 2 - 2);
-      context.closePath();
-      context.stroke();
-      context.closePath();
-    } else {
-      if(opts.extra.funnel.type === 'pyramid'){
-        if (i == series.length -1) {
-          startX = (item.funnelArea[0] + centerPosition.x) / 2;
-        } else {
-          startX = (item.funnelArea[0] + series[i + 1].funnelArea[0]) / 2;
-        }
-      }else{
-        if (i == 0) {
-          startX = (item.funnelArea[0] + centerPosition.x) / 2;
-        } else {
-          startX = (item.funnelArea[0] + series[i - 1].funnelArea[0]) / 2;
-        }
-      }
-      endX = startX - activeWidth * 2;
-      startY = item.funnelArea[1] + eachSpacing / 2;
-      fontSize = item.textSize * opts.pix || opts.fontSize * opts.pix;
-      context.setLineWidth(1 * opts.pix);
-      context.setStrokeStyle(item.color);
-      context.setFillStyle(item.color);
-      context.beginPath();
-      context.moveTo(startX, startY);
-      context.lineTo(endX, startY);
-      context.stroke();
-      context.closePath();
-      context.beginPath();
-      context.moveTo(endX, startY);
-      context.arc(endX, startY, 2, 0, 2 * Math.PI);
-      context.closePath();
-      context.fill();
-      context.beginPath();
-      context.setFontSize(fontSize);
-      context.setFillStyle(item.textColor || opts.fontColor);
-      context.fillText(text, endX - 5 - measureText(text, fontSize, context), startY + fontSize / 2 - 2);
-      context.closePath();
-      context.stroke();
-      context.closePath();
-    }
-
-  }
-}
-
-function drawCanvas(opts, context) {
-  context.draw();
-}
-
-var Timing = {
-  easeIn: function easeIn(pos) {
-    return Math.pow(pos, 3);
-  },
-  easeOut: function easeOut(pos) {
-    return Math.pow(pos - 1, 3) + 1;
-  },
-  easeInOut: function easeInOut(pos) {
-    if ((pos /= 0.5) < 1) {
-      return 0.5 * Math.pow(pos, 3);
-    } else {
-      return 0.5 * (Math.pow(pos - 2, 3) + 2);
-    }
-  },
-  linear: function linear(pos) {
-    return pos;
-  }
-};
-
-function Animation(opts) {
-  this.isStop = false;
-  opts.duration = typeof opts.duration === 'undefined' ? 1000 : opts.duration;
-  opts.timing = opts.timing || 'easeInOut';
-  var delay = 17;
-  function createAnimationFrame() {
-    if (typeof setTimeout !== 'undefined') {
-      return function(step, delay) {
-        setTimeout(function() {
-          var timeStamp = +new Date();
-          step(timeStamp);
-        }, delay);
-      };
-    } else if (typeof requestAnimationFrame !== 'undefined') {
-      return requestAnimationFrame;
-    } else {
-      return function(step) {
-        step(null);
-      };
-    }
-  };
-  var animationFrame = createAnimationFrame();
-  var startTimeStamp = null;
-  var _step = function step(timestamp) {
-    if (timestamp === null || this.isStop === true) {
-      opts.onProcess && opts.onProcess(1);
-      opts.onAnimationFinish && opts.onAnimationFinish();
-      return;
-    }
-    if (startTimeStamp === null) {
-      startTimeStamp = timestamp;
-    }
-    if (timestamp - startTimeStamp < opts.duration) {
-      var process = (timestamp - startTimeStamp) / opts.duration;
-      var timingFunction = Timing[opts.timing];
-      process = timingFunction(process);
-      opts.onProcess && opts.onProcess(process);
-      animationFrame(_step, delay);
-    } else {
-      opts.onProcess && opts.onProcess(1);
-      opts.onAnimationFinish && opts.onAnimationFinish();
-    }
-  };
-  _step = _step.bind(this);
-  animationFrame(_step, delay);
-}
-
-Animation.prototype.stop = function() {
-  this.isStop = true;
-};
-
-function drawCharts(type, opts, config, context) {
-  var _this = this;
-  var series = opts.series;
-  //兼容ECharts饼图类数据格式
-  if (type === 'pie' || type === 'ring' || type === 'rose' || type === 'funnel') {
-    series = fixPieSeries(series, opts, config);
-  }
-  var categories = opts.categories;
-  series = fillSeries(series, opts, config);
-  var duration = opts.animation ? opts.duration : 0;
-  _this.animationInstance && _this.animationInstance.stop();
-  var seriesMA = null;
-  if (type == 'candle') {
-    let average = assign({}, opts.extra.candle.average);
-    if (average.show) {
-      seriesMA = calCandleMA(average.day, average.name, average.color, series[0].data);
-      seriesMA = fillSeries(seriesMA, opts, config);
-      opts.seriesMA = seriesMA;
-    } else if (opts.seriesMA) {
-      seriesMA = opts.seriesMA = fillSeries(opts.seriesMA, opts, config);
-    } else {
-      seriesMA = series;
-    }
-  } else {
-    seriesMA = series;
-  }
-  /* 过滤掉show=false的series */
-  opts._series_ = series = filterSeries(series);
-  //重新计算图表区域
-  opts.area = new Array(4);
-  //复位绘图区域
-  for (let j = 0; j < 4; j++) {
-    opts.area[j] = opts.padding[j] * opts.pix;
-  }
-  //通过计算三大区域:图例、X轴、Y轴的大小,确定绘图区域
-  var _calLegendData = calLegendData(seriesMA, opts, config, opts.chartData, context),
-    legendHeight = _calLegendData.area.wholeHeight,
-    legendWidth = _calLegendData.area.wholeWidth;
-
-  switch (opts.legend.position) {
-    case 'top':
-      opts.area[0] += legendHeight;
-      break;
-    case 'bottom':
-      opts.area[2] += legendHeight;
-      break;
-    case 'left':
-      opts.area[3] += legendWidth;
-      break;
-    case 'right':
-      opts.area[1] += legendWidth;
-      break;
-  }
-
-  let _calYAxisData = {},
-    yAxisWidth = 0;
-  if (opts.type === 'line' || opts.type === 'column' || opts.type === 'area' || opts.type === 'mix' || opts.type === 'candle' || opts.type === 'scatter'  || opts.type === 'bubble' || opts.type === 'bar') {
-      _calYAxisData = calYAxisData(series, opts, config, context);
-      yAxisWidth = _calYAxisData.yAxisWidth;
-    //如果显示Y轴标题
-    if (opts.yAxis.showTitle) {
-      let maxTitleHeight = 0;
-      for (let i = 0; i < opts.yAxis.data.length; i++) {
-        maxTitleHeight = Math.max(maxTitleHeight, opts.yAxis.data[i].titleFontSize ? opts.yAxis.data[i].titleFontSize * opts.pix : config.fontSize)
-      }
-      opts.area[0] += maxTitleHeight;
-    }
-    let rightIndex = 0,
-      leftIndex = 0;
-    //计算主绘图区域左右位置
-    for (let i = 0; i < yAxisWidth.length; i++) {
-      if (yAxisWidth[i].position == 'left') {
-        if (leftIndex > 0) {
-          opts.area[3] += yAxisWidth[i].width + opts.yAxis.padding * opts.pix;
-        } else {
-          opts.area[3] += yAxisWidth[i].width;
-        }
-        leftIndex += 1;
-      } else if (yAxisWidth[i].position == 'right') {
-        if (rightIndex > 0) {
-          opts.area[1] += yAxisWidth[i].width + opts.yAxis.padding * opts.pix;
-        } else {
-          opts.area[1] += yAxisWidth[i].width;
-        }
-        rightIndex += 1;
-      }
-    }
-  } else {
-    config.yAxisWidth = yAxisWidth;
-  }
-  opts.chartData.yAxisData = _calYAxisData;
-
-  if (opts.categories && opts.categories.length && opts.type !== 'radar' && opts.type !== 'gauge' && opts.type !== 'bar') {
-    opts.chartData.xAxisData = getXAxisPoints(opts.categories, opts, config);
-    let _calCategoriesData = calCategoriesData(opts.categories, opts, config, opts.chartData.xAxisData.eachSpacing, context),
-      xAxisHeight = _calCategoriesData.xAxisHeight,
-      angle = _calCategoriesData.angle;
-    config.xAxisHeight = xAxisHeight;
-    config._xAxisTextAngle_ = angle;
-    opts.area[2] += xAxisHeight;
-    opts.chartData.categoriesData = _calCategoriesData;
-  } else {
-    if (opts.type === 'line' || opts.type === 'area' || opts.type === 'scatter' || opts.type === 'bubble' || opts.type === 'bar') {
-      opts.chartData.xAxisData = calXAxisData(series, opts, config, context);
-      categories = opts.chartData.xAxisData.rangesFormat;
-      let _calCategoriesData = calCategoriesData(categories, opts, config, opts.chartData.xAxisData.eachSpacing, context),
-        xAxisHeight = _calCategoriesData.xAxisHeight,
-        angle = _calCategoriesData.angle;
-      config.xAxisHeight = xAxisHeight;
-      config._xAxisTextAngle_ = angle;
-      opts.area[2] += xAxisHeight;
-      opts.chartData.categoriesData = _calCategoriesData;
-    } else {
-      opts.chartData.xAxisData = {
-        xAxisPoints: []
-      };
-    }
-  }
-  //计算右对齐偏移距离
-  if (opts.enableScroll && opts.xAxis.scrollAlign == 'right' && opts._scrollDistance_ === undefined) {
-    let offsetLeft = 0,
-      xAxisPoints = opts.chartData.xAxisData.xAxisPoints,
-      startX = opts.chartData.xAxisData.startX,
-      endX = opts.chartData.xAxisData.endX,
-      eachSpacing = opts.chartData.xAxisData.eachSpacing;
-    let totalWidth = eachSpacing * (xAxisPoints.length - 1);
-    let screenWidth = endX - startX;
-    offsetLeft = screenWidth - totalWidth;
-    _this.scrollOption = {
-      currentOffset: offsetLeft,
-      startTouchX: offsetLeft,
-      distance: 0,
-      lastMoveTime: 0
-    };
-    opts._scrollDistance_ = offsetLeft;
-  }
-
-  if (type === 'pie' || type === 'ring' || type === 'rose') {
-    config._pieTextMaxLength_ = opts.dataLabel === false ? 0 : getPieTextMaxLength(seriesMA, config, context, opts);
-  }
-  switch (type) {
-    case 'word':
-      this.animationInstance = new Animation({
-        timing: opts.timing,
-        duration: duration,
-        onProcess: function(process) {
-          context.clearRect(0, 0, opts.width, opts.height);
-          if (opts.rotate) {
-            contextRotate(context, opts);
-          }
-          drawWordCloudDataPoints(series, opts, config, context, process);
-          drawCanvas(opts, context);
-        },
-        onAnimationFinish: function onAnimationFinish() {
-          _this.uevent.trigger('renderComplete');
-        }
-      });
-      break;
-    case 'map':
-      context.clearRect(0, 0, opts.width, opts.height);
-      drawMapDataPoints(series, opts, config, context);
-      break;
-    case 'funnel':
-      this.animationInstance = new Animation({
-        timing: opts.timing,
-        duration: duration,
-        onProcess: function(process) {
-          context.clearRect(0, 0, opts.width, opts.height);
-          if (opts.rotate) {
-            contextRotate(context, opts);
-          }
-          opts.chartData.funnelData = drawFunnelDataPoints(series, opts, config, context, process);
-          drawLegend(opts.series, opts, config, context, opts.chartData);
-          drawToolTipBridge(opts, config, context, process);
-          drawCanvas(opts, context);
-        },
-        onAnimationFinish: function onAnimationFinish() {
-          _this.uevent.trigger('renderComplete');
-        }
-      });
-      break;
-    case 'line':
-      this.animationInstance = new Animation({
-        timing: opts.timing,
-        duration: duration,
-        onProcess: function onProcess(process) {
-          context.clearRect(0, 0, opts.width, opts.height);
-          if (opts.rotate) {
-            contextRotate(context, opts);
-          }
-          drawYAxisGrid(categories, opts, config, context);
-          drawXAxis(categories, opts, config, context);
-          var _drawLineDataPoints = drawLineDataPoints(series, opts, config, context, process),
-            xAxisPoints = _drawLineDataPoints.xAxisPoints,
-            calPoints = _drawLineDataPoints.calPoints,
-            eachSpacing = _drawLineDataPoints.eachSpacing;
-          opts.chartData.xAxisPoints = xAxisPoints;
-          opts.chartData.calPoints = calPoints;
-          opts.chartData.eachSpacing = eachSpacing;
-          drawYAxis(series, opts, config, context);
-          if (opts.enableMarkLine !== false && process === 1) {
-            drawMarkLine(opts, config, context);
-          }
-          drawLegend(opts.series, opts, config, context, opts.chartData);
-          drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints);
-          drawCanvas(opts, context);
-        },
-        onAnimationFinish: function onAnimationFinish() {
-          _this.uevent.trigger('renderComplete');
-        }
-      });
-      break;
-    case 'scatter':
-      this.animationInstance = new Animation({
-        timing: opts.timing,
-        duration: duration,
-        onProcess: function onProcess(process) {
-          context.clearRect(0, 0, opts.width, opts.height);
-          if (opts.rotate) {
-            contextRotate(context, opts);
-          }
-          drawYAxisGrid(categories, opts, config, context);
-          drawXAxis(categories, opts, config, context);
-          var _drawScatterDataPoints = drawScatterDataPoints(series, opts, config, context, process),
-            xAxisPoints = _drawScatterDataPoints.xAxisPoints,
-            calPoints = _drawScatterDataPoints.calPoints,
-            eachSpacing = _drawScatterDataPoints.eachSpacing;
-          opts.chartData.xAxisPoints = xAxisPoints;
-          opts.chartData.calPoints = calPoints;
-          opts.chartData.eachSpacing = eachSpacing;
-          drawYAxis(series, opts, config, context);
-          if (opts.enableMarkLine !== false && process === 1) {
-            drawMarkLine(opts, config, context);
-          }
-          drawLegend(opts.series, opts, config, context, opts.chartData);
-          drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints);
-          drawCanvas(opts, context);
-        },
-        onAnimationFinish: function onAnimationFinish() {
-          _this.uevent.trigger('renderComplete');
-        }
-      });
-      break;
-    case 'bubble':
-      this.animationInstance = new Animation({
-        timing: opts.timing,
-        duration: duration,
-        onProcess: function onProcess(process) {
-          context.clearRect(0, 0, opts.width, opts.height);
-          if (opts.rotate) {
-            contextRotate(context, opts);
-          }
-          drawYAxisGrid(categories, opts, config, context);
-          drawXAxis(categories, opts, config, context);
-          var _drawBubbleDataPoints = drawBubbleDataPoints(series, opts, config, context, process),
-            xAxisPoints = _drawBubbleDataPoints.xAxisPoints,
-            calPoints = _drawBubbleDataPoints.calPoints,
-            eachSpacing = _drawBubbleDataPoints.eachSpacing;
-          opts.chartData.xAxisPoints = xAxisPoints;
-          opts.chartData.calPoints = calPoints;
-          opts.chartData.eachSpacing = eachSpacing;
-          drawYAxis(series, opts, config, context);
-          if (opts.enableMarkLine !== false && process === 1) {
-            drawMarkLine(opts, config, context);
-          }
-          drawLegend(opts.series, opts, config, context, opts.chartData);
-          drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints);
-          drawCanvas(opts, context);
-        },
-        onAnimationFinish: function onAnimationFinish() {
-          _this.uevent.trigger('renderComplete');
-        }
-      });
-      break;
-    case 'mix':
-      this.animationInstance = new Animation({
-        timing: opts.timing,
-        duration: duration,
-        onProcess: function onProcess(process) {
-          context.clearRect(0, 0, opts.width, opts.height);
-          if (opts.rotate) {
-            contextRotate(context, opts);
-          }
-          drawYAxisGrid(categories, opts, config, context);
-          drawXAxis(categories, opts, config, context);
-          var _drawMixDataPoints = drawMixDataPoints(series, opts, config, context, process),
-            xAxisPoints = _drawMixDataPoints.xAxisPoints,
-            calPoints = _drawMixDataPoints.calPoints,
-            eachSpacing = _drawMixDataPoints.eachSpacing;
-          opts.chartData.xAxisPoints = xAxisPoints;
-          opts.chartData.calPoints = calPoints;
-          opts.chartData.eachSpacing = eachSpacing;
-          drawYAxis(series, opts, config, context);
-          if (opts.enableMarkLine !== false && process === 1) {
-            drawMarkLine(opts, config, context);
-          }
-          drawLegend(opts.series, opts, config, context, opts.chartData);
-          drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints);
-          drawCanvas(opts, context);
-        },
-        onAnimationFinish: function onAnimationFinish() {
-          _this.uevent.trigger('renderComplete');
-        }
-      });
-      break;
-    case 'column':
-      this.animationInstance = new Animation({
-        timing: opts.timing,
-        duration: duration,
-        onProcess: function onProcess(process) {
-          context.clearRect(0, 0, opts.width, opts.height);
-          if (opts.rotate) {
-            contextRotate(context, opts);
-          }
-          drawYAxisGrid(categories, opts, config, context);
-          drawXAxis(categories, opts, config, context);
-          var _drawColumnDataPoints = drawColumnDataPoints(series, opts, config, context, process),
-            xAxisPoints = _drawColumnDataPoints.xAxisPoints,
-            calPoints = _drawColumnDataPoints.calPoints,
-            eachSpacing = _drawColumnDataPoints.eachSpacing;
-          opts.chartData.xAxisPoints = xAxisPoints;
-          opts.chartData.calPoints = calPoints;
-          opts.chartData.eachSpacing = eachSpacing;
-          drawYAxis(series, opts, config, context);
-          if (opts.enableMarkLine !== false && process === 1) {
-            drawMarkLine(opts, config, context);
-          }
-          drawLegend(opts.series, opts, config, context, opts.chartData);
-          drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints);
-          drawCanvas(opts, context);
-        },
-        onAnimationFinish: function onAnimationFinish() {
-          _this.uevent.trigger('renderComplete');
-        }
-      });
-      break;
-    case 'bar':
-      this.animationInstance = new Animation({
-        timing: opts.timing,
-        duration: duration,
-        onProcess: function onProcess(process) {
-          context.clearRect(0, 0, opts.width, opts.height);
-          if (opts.rotate) {
-            contextRotate(context, opts);
-          }
-          drawXAxis(categories, opts, config, context);
-          var _drawBarDataPoints = drawBarDataPoints(series, opts, config, context, process),
-            yAxisPoints = _drawBarDataPoints.yAxisPoints,
-            calPoints = _drawBarDataPoints.calPoints,
-            eachSpacing = _drawBarDataPoints.eachSpacing;
-          opts.chartData.yAxisPoints = yAxisPoints;
-          opts.chartData.xAxisPoints = opts.chartData.xAxisData.xAxisPoints;
-          opts.chartData.calPoints = calPoints;
-          opts.chartData.eachSpacing = eachSpacing;
-          drawYAxis(series, opts, config, context);
-          if (opts.enableMarkLine !== false && process === 1) {
-            drawMarkLine(opts, config, context);
-          }
-          drawLegend(opts.series, opts, config, context, opts.chartData);
-          drawToolTipBridge(opts, config, context, process, eachSpacing, yAxisPoints);
-          drawCanvas(opts, context);
-        },
-        onAnimationFinish: function onAnimationFinish() {
-          _this.uevent.trigger('renderComplete');
-        }
-      });
-      break;
-    case 'area':
-      this.animationInstance = new Animation({
-        timing: opts.timing,
-        duration: duration,
-        onProcess: function onProcess(process) {
-          context.clearRect(0, 0, opts.width, opts.height);
-          if (opts.rotate) {
-            contextRotate(context, opts);
-          }
-          drawYAxisGrid(categories, opts, config, context);
-          drawXAxis(categories, opts, config, context);
-          var _drawAreaDataPoints = drawAreaDataPoints(series, opts, config, context, process),
-            xAxisPoints = _drawAreaDataPoints.xAxisPoints,
-            calPoints = _drawAreaDataPoints.calPoints,
-            eachSpacing = _drawAreaDataPoints.eachSpacing;
-          opts.chartData.xAxisPoints = xAxisPoints;
-          opts.chartData.calPoints = calPoints;
-          opts.chartData.eachSpacing = eachSpacing;
-          drawYAxis(series, opts, config, context);
-          if (opts.enableMarkLine !== false && process === 1) {
-            drawMarkLine(opts, config, context);
-          }
-          drawLegend(opts.series, opts, config, context, opts.chartData);
-          drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints);
-          drawCanvas(opts, context);
-        },
-        onAnimationFinish: function onAnimationFinish() {
-          _this.uevent.trigger('renderComplete');
-        }
-      });
-      break;
-    case 'ring':
-    case 'pie':
-      this.animationInstance = new Animation({
-        timing: opts.timing,
-        duration: duration,
-        onProcess: function onProcess(process) {
-          context.clearRect(0, 0, opts.width, opts.height);
-          if (opts.rotate) {
-            contextRotate(context, opts);
-          }
-          opts.chartData.pieData = drawPieDataPoints(series, opts, config, context, process);
-          drawLegend(opts.series, opts, config, context, opts.chartData);
-          drawToolTipBridge(opts, config, context, process);
-          drawCanvas(opts, context);
-        },
-        onAnimationFinish: function onAnimationFinish() {
-          _this.uevent.trigger('renderComplete');
-        }
-      });
-      break;
-    case 'rose':
-      this.animationInstance = new Animation({
-        timing: opts.timing,
-        duration: duration,
-        onProcess: function onProcess(process) {
-          context.clearRect(0, 0, opts.width, opts.height);
-          if (opts.rotate) {
-            contextRotate(context, opts);
-          }
-          opts.chartData.pieData = drawRoseDataPoints(series, opts, config, context, process);
-          drawLegend(opts.series, opts, config, context, opts.chartData);
-          drawToolTipBridge(opts, config, context, process);
-          drawCanvas(opts, context);
-        },
-        onAnimationFinish: function onAnimationFinish() {
-          _this.uevent.trigger('renderComplete');
-        }
-      });
-      break;
-    case 'radar':
-      this.animationInstance = new Animation({
-        timing: opts.timing,
-        duration: duration,
-        onProcess: function onProcess(process) {
-          context.clearRect(0, 0, opts.width, opts.height);
-          if (opts.rotate) {
-            contextRotate(context, opts);
-          }
-          opts.chartData.radarData = drawRadarDataPoints(series, opts, config, context, process);
-          drawLegend(opts.series, opts, config, context, opts.chartData);
-          drawToolTipBridge(opts, config, context, process);
-          drawCanvas(opts, context);
-        },
-        onAnimationFinish: function onAnimationFinish() {
-          _this.uevent.trigger('renderComplete');
-        }
-      });
-      break;
-    case 'arcbar':
-      this.animationInstance = new Animation({
-        timing: opts.timing,
-        duration: duration,
-        onProcess: function onProcess(process) {
-          context.clearRect(0, 0, opts.width, opts.height);
-          if (opts.rotate) {
-            contextRotate(context, opts);
-          }
-          opts.chartData.arcbarData = drawArcbarDataPoints(series, opts, config, context, process);
-          drawCanvas(opts, context);
-        },
-        onAnimationFinish: function onAnimationFinish() {
-          _this.uevent.trigger('renderComplete');
-        }
-      });
-      break;
-    case 'gauge':
-      this.animationInstance = new Animation({
-        timing: opts.timing,
-        duration: duration,
-        onProcess: function onProcess(process) {
-          context.clearRect(0, 0, opts.width, opts.height);
-          if (opts.rotate) {
-            contextRotate(context, opts);
-          }
-          opts.chartData.gaugeData = drawGaugeDataPoints(categories, series, opts, config, context, process);
-          drawCanvas(opts, context);
-        },
-        onAnimationFinish: function onAnimationFinish() {
-          _this.uevent.trigger('renderComplete');
-        }
-      });
-      break;
-    case 'candle':
-      this.animationInstance = new Animation({
-        timing: opts.timing,
-        duration: duration,
-        onProcess: function onProcess(process) {
-          context.clearRect(0, 0, opts.width, opts.height);
-          if (opts.rotate) {
-            contextRotate(context, opts);
-          }
-          drawYAxisGrid(categories, opts, config, context);
-          drawXAxis(categories, opts, config, context);
-          var _drawCandleDataPoints = drawCandleDataPoints(series, seriesMA, opts, config, context, process),
-            xAxisPoints = _drawCandleDataPoints.xAxisPoints,
-            calPoints = _drawCandleDataPoints.calPoints,
-            eachSpacing = _drawCandleDataPoints.eachSpacing;
-          opts.chartData.xAxisPoints = xAxisPoints;
-          opts.chartData.calPoints = calPoints;
-          opts.chartData.eachSpacing = eachSpacing;
-          drawYAxis(series, opts, config, context);
-          if (opts.enableMarkLine !== false && process === 1) {
-            drawMarkLine(opts, config, context);
-          }
-          if (seriesMA) {
-            drawLegend(seriesMA, opts, config, context, opts.chartData);
-          } else {
-            drawLegend(opts.series, opts, config, context, opts.chartData);
-          }
-          drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints);
-          drawCanvas(opts, context);
-        },
-        onAnimationFinish: function onAnimationFinish() {
-          _this.uevent.trigger('renderComplete');
-        }
-      });
-      break;
-  }
-}
-
-function uChartsEvent() {
-  this.events = {};
-}
-
-uChartsEvent.prototype.addEventListener = function(type, listener) {
-  this.events[type] = this.events[type] || [];
-  this.events[type].push(listener);
-};
-
-uChartsEvent.prototype.delEventListener = function(type) {
-  this.events[type] = [];
-};
-
-uChartsEvent.prototype.trigger = function() {
-  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
-    args[_key] = arguments[_key];
-  }
-  var type = args[0];
-  var params = args.slice(1);
-  if (!!this.events[type]) {
-    this.events[type].forEach(function(listener) {
-      try {
-        listener.apply(null, params);
-      } catch (e) {
-          //console.log('[uCharts] '+e);
-      }
-    });
-  }
-};
-
-var uCharts = function uCharts(opts) {
-  opts.pix = opts.pixelRatio ? opts.pixelRatio : 1;
-  opts.fontSize = opts.fontSize ? opts.fontSize : 13;
-  opts.fontColor = opts.fontColor ? opts.fontColor : config.fontColor;
-  if (opts.background == "" || opts.background == "none") {
-    opts.background = "#FFFFFF"
-  }
-  opts.title = assign({}, opts.title);
-  opts.subtitle = assign({}, opts.subtitle);
-  opts.duration = opts.duration ? opts.duration : 1000;
-  opts.yAxis = assign({}, {
-    data: [],
-    showTitle: false,
-    disabled: false,
-    disableGrid: false,
-    splitNumber: 5,
-    gridType: 'solid',
-    dashLength: 4 * opts.pix,
-    gridColor: '#cccccc',
-    padding: 10,
-    fontColor: '#666666'
-  }, opts.yAxis);
-  opts.xAxis = assign({}, {
-    rotateLabel: false,
-    disabled: false,
-    disableGrid: false,
-    splitNumber: 5,
-    calibration:false,
-    gridType: 'solid',
-    dashLength: 4,
-    scrollAlign: 'left',
-    boundaryGap: 'center',
-    axisLine: true,
-    axisLineColor: '#cccccc'
-  }, opts.xAxis);
-  opts.xAxis.scrollPosition = opts.xAxis.scrollAlign;
-  opts.legend = assign({}, {
-    show: true,
-    position: 'bottom',
-    float: 'center',
-    backgroundColor: 'rgba(0,0,0,0)',
-    borderColor: 'rgba(0,0,0,0)',
-    borderWidth: 0,
-    padding: 5,
-    margin: 5,
-    itemGap: 10,
-    fontSize: opts.fontSize,
-    lineHeight: opts.fontSize,
-    fontColor: opts.fontColor,
-    formatter: {},
-    hiddenColor: '#CECECE'
-  }, opts.legend);
-  opts.extra = assign({}, opts.extra);
-  opts.rotate = opts.rotate ? true : false;
-  opts.animation = opts.animation ? true : false;
-  opts.rotate = opts.rotate ? true : false;
-  opts.canvas2d = opts.canvas2d ? true : false;
-  
-  let config$$1 = JSON.parse(JSON.stringify(config));
-  config$$1.color = opts.color ? opts.color : config$$1.color;
-  config$$1.yAxisTitleWidth = opts.yAxis.disabled !== true && opts.yAxis.title ? config$$1.yAxisTitleWidth : 0;
-  if (opts.type == 'pie') {
-    config$$1.pieChartLinePadding = opts.dataLabel === false ? 0 : opts.extra.pie.labelWidth * opts.pix || config$$1.pieChartLinePadding * opts.pix;
-  }
-  if (opts.type == 'ring') {
-    config$$1.pieChartLinePadding = opts.dataLabel === false ? 0 : opts.extra.ring.labelWidth * opts.pix || config$$1.pieChartLinePadding * opts.pix;
-  }
-  if (opts.type == 'rose') {
-    config$$1.pieChartLinePadding = opts.dataLabel === false ? 0 : opts.extra.rose.labelWidth * opts.pix || config$$1.pieChartLinePadding * opts.pix;
-  }
-  config$$1.pieChartTextPadding = opts.dataLabel === false ? 0 : config$$1.pieChartTextPadding * opts.pix;
-  config$$1.yAxisSplit = opts.yAxis.splitNumber ? opts.yAxis.splitNumber : config.yAxisSplit;
-
-  //屏幕旋转
-  config$$1.rotate = opts.rotate;
-  if (opts.rotate) {
-    let tempWidth = opts.width;
-    let tempHeight = opts.height;
-    opts.width = tempHeight;
-    opts.height = tempWidth;
-  }
-
-  //适配高分屏
-  opts.padding = opts.padding ? opts.padding : config$$1.padding;
-  config$$1.yAxisWidth = config.yAxisWidth * opts.pix;
-  config$$1.xAxisHeight = config.xAxisHeight * opts.pix;
-  if (opts.enableScroll && opts.xAxis.scrollShow) {
-    config$$1.xAxisHeight += 6 * opts.pix;
-  }
-  config$$1.xAxisLineHeight = config.xAxisLineHeight * opts.pix;
-  config$$1.fontSize = opts.fontSize * opts.pix;
-  config$$1.titleFontSize = config.titleFontSize * opts.pix;
-  config$$1.subtitleFontSize = config.subtitleFontSize * opts.pix;
-  config$$1.toolTipPadding = config.toolTipPadding * opts.pix;
-  config$$1.toolTipLineHeight = config.toolTipLineHeight * opts.pix;
-  config$$1.columePadding = config.columePadding * opts.pix;
-  //this.context = opts.context ? opts.context : uni.createCanvasContext(opts.canvasId, opts.$this);
-  //v2.0版本后需要自行获取context并传入opts进行初始化,这么做是为了确保uCharts可以跨更多端使用,并保证了自定义组件this实例不被循环嵌套。如果您觉得不便请取消上面注释,采用v1.0版本的方式使用,对此给您带来的不便敬请谅解!
-  if(!opts.context){
-    throw new Error('[uCharts] 未获取到context!注意:v2.0版本后,需要自行获取canvas的绘图上下文并传入opts.context!');
-  }
-  this.context = opts.context;
-  if (!this.context.setTextAlign) {
-    this.context.setStrokeStyle = function(e) {
-      return this.strokeStyle = e;
-    }
-    this.context.setLineWidth = function(e) {
-      return this.lineWidth = e;
-    }
-    this.context.setLineCap = function(e) {
-      return this.lineCap = e;
-    }
-    this.context.setFontSize = function(e) {
-      return this.font = e + "px sans-serif";
-    }
-    this.context.setFillStyle = function(e) {
-      return this.fillStyle = e;
-    }
-    this.context.setTextAlign = function(e) {
-      return this.textAlign = e;
-    }
-    this.context.draw = function() {}
-  }
-  //兼容NVUEsetLineDash
-  if(!this.context.setLineDash){
-    this.context.setLineDash = function(e) {}
-  }
-  opts.chartData = {};
-  this.uevent = new uChartsEvent();
-  this.scrollOption = {
-    currentOffset: 0,
-    startTouchX: 0,
-    distance: 0,
-    lastMoveTime: 0
-  };
-  this.opts = opts;
-  this.config = config$$1;
-  drawCharts.call(this, opts.type, opts, config$$1, this.context);
-};
-
-uCharts.prototype.updateData = function() {
-  let data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
-  this.opts = assign({}, this.opts, data);
-  this.opts.updateData = true;
-  let scrollPosition = data.scrollPosition || 'current';
-  switch (scrollPosition) {
-    case 'current':
-      //this.opts._scrollDistance_ = this.scrollOption.currentOffset;
-      break;
-    case 'left':
-      this.opts._scrollDistance_ = 0;
-      this.scrollOption = {
-        currentOffset: 0,
-        startTouchX: 0,
-        distance: 0,
-        lastMoveTime: 0
-      };
-      break;
-    case 'right':
-      let _calYAxisData = calYAxisData(this.opts.series, this.opts, this.config, this.context), yAxisWidth = _calYAxisData.yAxisWidth;
-      this.config.yAxisWidth = yAxisWidth;
-      let offsetLeft = 0;
-      let _getXAxisPoints0 = getXAxisPoints(this.opts.categories, this.opts, this.config), xAxisPoints = _getXAxisPoints0.xAxisPoints,
-        startX = _getXAxisPoints0.startX,
-        endX = _getXAxisPoints0.endX,
-        eachSpacing = _getXAxisPoints0.eachSpacing;
-      let totalWidth = eachSpacing * (xAxisPoints.length - 1);
-      let screenWidth = endX - startX;
-      offsetLeft = screenWidth - totalWidth;
-      this.scrollOption = {
-        currentOffset: offsetLeft,
-        startTouchX: offsetLeft,
-        distance: 0,
-        lastMoveTime: 0
-      };
-      this.opts._scrollDistance_ = offsetLeft;
-      break;
-  }
-  drawCharts.call(this, this.opts.type, this.opts, this.config, this.context);
-};
-
-uCharts.prototype.zoom = function() {
-  var val = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.opts.xAxis.itemCount;
-  if (this.opts.enableScroll !== true) {
-    console.log('[uCharts] 请启用滚动条后使用')
-    return;
-  }
-  //当前屏幕中间点
-  let centerPoint = Math.round(Math.abs(this.scrollOption.currentOffset) / this.opts.chartData.eachSpacing) + Math.round(this.opts.xAxis.itemCount / 2);
-  this.opts.animation = false;
-  this.opts.xAxis.itemCount = val.itemCount;
-  //重新计算x轴偏移距离
-  let _calYAxisData = calYAxisData(this.opts.series, this.opts, this.config, this.context),
-    yAxisWidth = _calYAxisData.yAxisWidth;
-  this.config.yAxisWidth = yAxisWidth;
-  let offsetLeft = 0;
-  let _getXAxisPoints0 = getXAxisPoints(this.opts.categories, this.opts, this.config),
-    xAxisPoints = _getXAxisPoints0.xAxisPoints,
-    startX = _getXAxisPoints0.startX,
-    endX = _getXAxisPoints0.endX,
-    eachSpacing = _getXAxisPoints0.eachSpacing;
-  let centerLeft = eachSpacing * centerPoint;
-  let screenWidth = endX - startX;
-  let MaxLeft = screenWidth - eachSpacing * (xAxisPoints.length - 1);
-  offsetLeft = screenWidth / 2 - centerLeft;
-  if (offsetLeft > 0) {
-    offsetLeft = 0;
-  }
-  if (offsetLeft < MaxLeft) {
-    offsetLeft = MaxLeft;
-  }
-  this.scrollOption = {
-    currentOffset: offsetLeft,
-    startTouchX: offsetLeft,
-    distance: 0,
-    lastMoveTime: 0
-  };
-  this.opts._scrollDistance_ = offsetLeft;
-  drawCharts.call(this, this.opts.type, this.opts, this.config, this.context);
-};
-
-uCharts.prototype.stopAnimation = function() {
-  this.animationInstance && this.animationInstance.stop();
-};
-
-uCharts.prototype.addEventListener = function(type, listener) {
-  this.uevent.addEventListener(type, listener);
-};
-
-uCharts.prototype.delEventListener = function(type) {
-  this.uevent.delEventListener(type);
-};
-
-uCharts.prototype.getCurrentDataIndex = function(e) {
-  var touches = null;
-  if (e.changedTouches) {
-    touches = e.changedTouches[0];
-  } else {
-    touches = e.mp.changedTouches[0];
-  }
-  if (touches) {
-    let _touches$ = getTouches(touches, this.opts, e);
-    if (this.opts.type === 'pie' || this.opts.type === 'ring') {
-      return findPieChartCurrentIndex({
-        x: _touches$.x,
-        y: _touches$.y
-      }, this.opts.chartData.pieData, this.opts);
-    } else if (this.opts.type === 'rose') {
-      return findRoseChartCurrentIndex({
-        x: _touches$.x,
-        y: _touches$.y
-      }, this.opts.chartData.pieData, this.opts);
-    } else if (this.opts.type === 'radar') {
-      return findRadarChartCurrentIndex({
-        x: _touches$.x,
-        y: _touches$.y
-      }, this.opts.chartData.radarData, this.opts.categories.length);
-    } else if (this.opts.type === 'funnel') {
-      return findFunnelChartCurrentIndex({
-        x: _touches$.x,
-        y: _touches$.y
-      }, this.opts.chartData.funnelData);
-    } else if (this.opts.type === 'map') {
-      return findMapChartCurrentIndex({
-        x: _touches$.x,
-        y: _touches$.y
-      }, this.opts);
-    } else if (this.opts.type === 'word') {
-      return findWordChartCurrentIndex({
-        x: _touches$.x,
-        y: _touches$.y
-      }, this.opts.chartData.wordCloudData);
-    } else if (this.opts.type === 'bar') {
-      return findBarChartCurrentIndex({
-        x: _touches$.x,
-        y: _touches$.y
-      }, this.opts.chartData.calPoints, this.opts, this.config, Math.abs(this.scrollOption.currentOffset));
-    } else {
-      return findCurrentIndex({
-        x: _touches$.x,
-        y: _touches$.y
-      }, this.opts.chartData.calPoints, this.opts, this.config, Math.abs(this.scrollOption.currentOffset));
-    }
-  }
-  return -1;
-};
-
-uCharts.prototype.getLegendDataIndex = function(e) {
-  var touches = null;
-  if (e.changedTouches) {
-    touches = e.changedTouches[0];
-  } else {
-    touches = e.mp.changedTouches[0];
-  }
-  if (touches) {
-    let _touches$ = getTouches(touches, this.opts, e);
-    return findLegendIndex({
-      x: _touches$.x,
-      y: _touches$.y
-    }, this.opts.chartData.legendData);
-  }
-  return -1;
-};
-
-uCharts.prototype.touchLegend = function(e) {
-  var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-  var touches = null;
-  if (e.changedTouches) {
-    touches = e.changedTouches[0];
-  } else {
-    touches = e.mp.changedTouches[0];
-  }
-  if (touches) {
-    var _touches$ = getTouches(touches, this.opts, e);
-    var index = this.getLegendDataIndex(e);
-    if (index >= 0) {
-      if (this.opts.type == 'candle') {
-        this.opts.seriesMA[index].show = !this.opts.seriesMA[index].show;
-      } else {
-        this.opts.series[index].show = !this.opts.series[index].show;
-      }
-      this.opts.animation = option.animation ? true : false;
-      this.opts._scrollDistance_ = this.scrollOption.currentOffset;
-      drawCharts.call(this, this.opts.type, this.opts, this.config, this.context);
-    }
-  }
-
-};
-
-uCharts.prototype.showToolTip = function(e) {
-  var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-  var touches = null;
-  if (e.changedTouches) {
-    touches = e.changedTouches[0];
-  } else {
-    touches = e.mp.changedTouches[0];
-  }
-  if (!touches) {
-    console.log("[uCharts] 未获取到event坐标信息");
-  }
-  var _touches$ = getTouches(touches, this.opts, e);
-  var currentOffset = this.scrollOption.currentOffset;
-  var opts = assign({}, this.opts, {
-    _scrollDistance_: currentOffset,
-    animation: false
-  });
-  if (this.opts.type === 'line' || this.opts.type === 'area' || this.opts.type === 'column' || this.opts.type === 'scatter' || this.opts.type === 'bubble') {
-    var current = this.getCurrentDataIndex(e);
-    var index = option.index == undefined ? current.index : option.index;
-    if (index > -1 || index.length>0) {
-      var seriesData = getSeriesDataItem(this.opts.series, index, current.group);
-      if (seriesData.length !== 0) {
-        var _getToolTipData = getToolTipData(seriesData, this.opts, index, current.group, this.opts.categories, option),
-          textList = _getToolTipData.textList,
-          offset = _getToolTipData.offset;
-        offset.y = _touches$.y;
-        opts.tooltip = {
-          textList: option.textList !== undefined ? option.textList : textList,
-          offset: option.offset !== undefined ? option.offset : offset,
-          option: option,
-          index: index
-        };
-      }
-    }
-    drawCharts.call(this, opts.type, opts, this.config, this.context);
-  }
-  if (this.opts.type === 'bar') {
-    var current = this.getCurrentDataIndex(e);
-    var index = option.index == undefined ? current.index : option.index;
-    if (index > -1 || index.length>0) {
-      var seriesData = getSeriesDataItem(this.opts.series, index, current.group);
-      if (seriesData.length !== 0) {
-        var _getToolTipData = getToolTipData(seriesData, this.opts, index, current.group, this.opts.categories, option),
-          textList = _getToolTipData.textList,
-          offset = _getToolTipData.offset;
-        offset.x = _touches$.x;
-        opts.tooltip = {
-          textList: option.textList !== undefined ? option.textList : textList,
-          offset: option.offset !== undefined ? option.offset : offset,
-          option: option,
-          index: index
-        };
-      }
-    }
-    drawCharts.call(this, opts.type, opts, this.config, this.context);
-  }
-  if (this.opts.type === 'mix') {
-    var current = this.getCurrentDataIndex(e);
-    var index = option.index == undefined ? current.index : option.index;
-    if (index > -1) {
-      var currentOffset = this.scrollOption.currentOffset;
-      var opts = assign({}, this.opts, {
-        _scrollDistance_: currentOffset,
-        animation: false
-      });
-      var seriesData = getSeriesDataItem(this.opts.series, index);
-      if (seriesData.length !== 0) {
-        var _getMixToolTipData = getMixToolTipData(seriesData, this.opts, index, this.opts.categories, option),
-          textList = _getMixToolTipData.textList,
-          offset = _getMixToolTipData.offset;
-        offset.y = _touches$.y;
-        opts.tooltip = {
-          textList: option.textList ? option.textList : textList,
-          offset: option.offset !== undefined ? option.offset : offset,
-          option: option,
-          index: index
-        };
-      }
-    }
-    drawCharts.call(this, opts.type, opts, this.config, this.context);
-  }
-  if (this.opts.type === 'candle') {
-    var current = this.getCurrentDataIndex(e);
-    var index = option.index == undefined ? current.index : option.index;
-    if (index > -1) {
-      var currentOffset = this.scrollOption.currentOffset;
-      var opts = assign({}, this.opts, {
-        _scrollDistance_: currentOffset,
-        animation: false
-      });
-      var seriesData = getSeriesDataItem(this.opts.series, index);
-      if (seriesData.length !== 0) {
-        var _getToolTipData = getCandleToolTipData(this.opts.series[0].data, seriesData, this.opts, index, this.opts.categories, this.opts.extra.candle, option),
-          textList = _getToolTipData.textList,
-          offset = _getToolTipData.offset;
-        offset.y = _touches$.y;
-        opts.tooltip = {
-          textList: option.textList ? option.textList : textList,
-          offset: option.offset !== undefined ? option.offset : offset,
-          option: option,
-          index: index
-        };
-      }
-    }
-    drawCharts.call(this, opts.type, opts, this.config, this.context);
-  }
-  if (this.opts.type === 'pie' || this.opts.type === 'ring' || this.opts.type === 'rose' || this.opts.type === 'funnel') {
-    var index = option.index == undefined ? this.getCurrentDataIndex(e) : option.index;
-    if (index > -1) {
-      var opts = assign({}, this.opts, {animation: false});
-      var seriesData = assign({}, opts._series_[index]);
-      var textList = [{
-        text: option.formatter ? option.formatter(seriesData, undefined, index, opts) : seriesData.name + ': ' + seriesData.data,
-        color: seriesData.color
-      }];
-      var offset = {
-        x: _touches$.x,
-        y: _touches$.y
-      };
-      opts.tooltip = {
-        textList: option.textList ? option.textList : textList,
-        offset: option.offset !== undefined ? option.offset : offset,
-        option: option,
-        index: index
-      };
-    }
-    drawCharts.call(this, opts.type, opts, this.config, this.context);
-  }
-  if (this.opts.type === 'map') {
-    var index = option.index == undefined ? this.getCurrentDataIndex(e) : option.index;
-    if (index > -1) {
-      var opts = assign({}, this.opts, {animation: false});
-      var seriesData = assign({}, this.opts.series[index]);
-      seriesData.name = seriesData.properties.name
-      var textList = [{
-        text: option.formatter ? option.formatter(seriesData, undefined, index, this.opts) : seriesData.name,
-        color: seriesData.color
-      }];
-      var offset = {
-        x: _touches$.x,
-        y: _touches$.y
-      };
-      opts.tooltip = {
-        textList: option.textList ? option.textList : textList,
-        offset: option.offset !== undefined ? option.offset : offset,
-        option: option,
-        index: index
-      };
-    }
-    opts.updateData = false;
-    drawCharts.call(this, opts.type, opts, this.config, this.context);
-  }
-  if (this.opts.type === 'word') {
-    var index = option.index == undefined ? this.getCurrentDataIndex(e) : option.index;
-    if (index > -1) {
-      var opts = assign({}, this.opts, {animation: false});
-      var seriesData = assign({}, this.opts.series[index]);
-      var textList = [{
-        text: option.formatter ? option.formatter(seriesData, undefined, index, this.opts) : seriesData.name,
-        color: seriesData.color
-      }];
-      var offset = {
-        x: _touches$.x,
-        y: _touches$.y
-      };
-      opts.tooltip = {
-        textList: option.textList ? option.textList : textList,
-        offset: option.offset !== undefined ? option.offset : offset,
-        option: option,
-        index: index
-      };
-    }
-    opts.updateData = false;
-    drawCharts.call(this, opts.type, opts, this.config, this.context);
-  }
-  if (this.opts.type === 'radar') {
-    var index = option.index == undefined ? this.getCurrentDataIndex(e) : option.index;
-    if (index > -1) {
-      var opts = assign({}, this.opts, {animation: false});
-      var seriesData = getSeriesDataItem(this.opts.series, index);
-      if (seriesData.length !== 0) {
-        var textList = seriesData.map((item) => {
-          return {
-            text: option.formatter ? option.formatter(item, this.opts.categories[index], index, this.opts) : item.name + ': ' + item.data,
-            color: item.color
-          };
-        });
-        var offset = {
-          x: _touches$.x,
-          y: _touches$.y
-        };
-        opts.tooltip = {
-          textList: option.textList ? option.textList : textList,
-          offset: option.offset !== undefined ? option.offset : offset,
-          option: option,
-          index: index
-        };
-      }
-    }
-    drawCharts.call(this, opts.type, opts, this.config, this.context);
-  }
-};
-
-uCharts.prototype.translate = function(distance) {
-  this.scrollOption = {
-    currentOffset: distance,
-    startTouchX: distance,
-    distance: 0,
-    lastMoveTime: 0
-  };
-  let opts = assign({}, this.opts, {
-    _scrollDistance_: distance,
-    animation: false
-  });
-  drawCharts.call(this, this.opts.type, opts, this.config, this.context);
-};
-
-uCharts.prototype.scrollStart = function(e) {
-  var touches = null;
-  if (e.changedTouches) {
-    touches = e.changedTouches[0];
-  } else {
-    touches = e.mp.changedTouches[0];
-  }
-  var _touches$ = getTouches(touches, this.opts, e);
-  if (touches && this.opts.enableScroll === true) {
-    this.scrollOption.startTouchX = _touches$.x;
-  }
-};
-
-uCharts.prototype.scroll = function(e) {
-  if (this.scrollOption.lastMoveTime === 0) {
-    this.scrollOption.lastMoveTime = Date.now();
-  }
-  let Limit = this.opts.touchMoveLimit || 60;
-  let currMoveTime = Date.now();
-  let duration = currMoveTime - this.scrollOption.lastMoveTime;
-  if (duration < Math.floor(1000 / Limit)) return;
-  this.scrollOption.lastMoveTime = currMoveTime;
-  var touches = null;
-  if (e.changedTouches) {
-    touches = e.changedTouches[0];
-  } else {
-    touches = e.mp.changedTouches[0];
-  }
-  if (touches && this.opts.enableScroll === true) {
-    var _touches$ = getTouches(touches, this.opts, e);
-    var _distance;
-    _distance = _touches$.x - this.scrollOption.startTouchX;
-    var currentOffset = this.scrollOption.currentOffset;
-    var validDistance = calValidDistance(this, currentOffset + _distance, this.opts.chartData, this.config, this.opts);
-    this.scrollOption.distance = _distance = validDistance - currentOffset;
-    var opts = assign({}, this.opts, {
-      _scrollDistance_: currentOffset + _distance,
-      animation: false
-    });
-		this.opts = opts;
-    drawCharts.call(this, opts.type, opts, this.config, this.context);
-    return currentOffset + _distance;
-  }
-};
-
-uCharts.prototype.scrollEnd = function(e) {
-  if (this.opts.enableScroll === true) {
-    var _scrollOption = this.scrollOption,
-      currentOffset = _scrollOption.currentOffset,
-      distance = _scrollOption.distance;
-    this.scrollOption.currentOffset = currentOffset + distance;
-    this.scrollOption.distance = 0;
-  }
-};
-
-if (typeof module === "object" && typeof module.exports === "object") {
-  module.exports = uCharts;
-}
-
-export default uCharts;
-

+ 0 - 201
uni_modules/qiun-data-charts/license.md

@@ -1,201 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.

+ 0 - 84
uni_modules/qiun-data-charts/package.json

@@ -1,84 +0,0 @@
-{
-  "id": "qiun-data-charts",
-  "displayName": "秋云 ucharts echarts 高性能跨全端图表组件",
-  "version": "2.3.6-20211201",
-  "description": "uCharts v2.3上线,支持nvue!全新官方图表组件,支持H5及APP用ECharts渲染图表,uniapp可视化首选组件",
-  "keywords": [
-    "ucharts",
-    "echarts",
-    "f2",
-    "图表",
-    "可视化"
-],
-  "repository": "https://gitee.com/uCharts/uCharts",
-  "engines": {
-    "HBuilderX": "^3.1.0"
-  },
-  "dcloudext": {
-    "category": [
-        "前端组件",
-        "通用组件"
-    ],
-    "sale": {
-      "regular": {
-        "price": "0.00"
-      },
-      "sourcecode": {
-        "price": "0.00"
-      }
-    },
-    "contact": {
-      "qq": "474119"
-    },
-    "declaration": {
-      "ads": "无",
-      "data": "插件不采集任何数据",
-      "permissions": "无"
-    },
-    "npmurl": ""
-  },
-  "uni_modules": {
-    "dependencies": [],
-    "encrypt": [],
-    "platforms": {
-      "cloud": {
-        "tcb": "y",
-        "aliyun": "y"
-      },
-      "client": {
-        "App": {
-          "app-vue": "y",
-          "app-nvue": "y"
-        },
-        "H5-mobile": {
-          "Safari": "y",
-          "Android Browser": "y",
-          "微信浏览器(Android)": "y",
-          "QQ浏览器(Android)": "y"
-        },
-        "H5-pc": {
-          "Chrome": "y",
-          "IE": "y",
-          "Edge": "y",
-          "Firefox": "y",
-          "Safari": "y"
-        },
-        "小程序": {
-          "微信": "y",
-          "阿里": "y",
-          "百度": "y",
-          "字节跳动": "y",
-          "QQ": "y"
-        },
-        "快应用": {
-          "华为": "y",
-          "联盟": "y"
-        },
-        "Vue": {
-            "vue2": "y",
-            "vue3": "y"
-        }
-      }
-    }
-  }
-}

+ 0 - 451
uni_modules/qiun-data-charts/readme.md

@@ -1,451 +0,0 @@
-## [uCharts官方网站](https://www.ucharts.cn)
-## [DEMO演示及在线生成工具(v2.0文档)https://demo.ucharts.cn](https://demo.ucharts.cn)
-## [优秀的nvue全端组件与模版库nPro](https://ext.dcloud.net.cn/plugin?id=5169)
-## [图表组件在项目中的应用 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651) 
-### [v1.0文档(将在9月30日作废,请尽快转v2.0)](http://doc.ucharts.cn)
-## [如何安装、更新 uni_modules 插件点这里,必看,必看,必看](https://uniapp.dcloud.io/uni_modules?id=%e4%bd%bf%e7%94%a8-uni_modules-%e6%8f%92%e4%bb%b6)
-## 点击右侧绿色【使用HBuilderX导入插件】即可使用,示例项目请点击右侧蓝色按钮【使用HBuilderX导入示例项目】。
-## 初次使用不显示问题详见[常见问题选项卡](https://demo.ucharts.cn)
-## <font color=#FF0000> 新手请先完整阅读【帮助文档】及【常见问题】3遍,右侧蓝色按钮【示例项目】请看2遍! </font> 
-## <font color=#FF0000> 关于NVUE兼容的说明: </font> uCharts.js从2.3.0开始支持nuve(暂时只能通过原生canvas写法调用uCharts,nuve版本组件请见码云示例项目[uCharts-demo-nvue](https://gitee.com/uCharts/uCharts)),因其渲染方式是通过nvue的gcanvas组件来渲染,理论上性能不及renderjs的qiun-data-charts组件性能。官方仍然建议NVUE使用图表的页面改为vue页面,在App端,从性能来讲,由于通讯阻塞的问题,nvue的canvas性能不可能达到使用renderjs的vue页面的canvas。在App端,仍然推荐使用qiun-data-charts组件。[详见uni-app官方说明](https://uniapp.dcloud.io/component/canvas?id=canvas)
-
-[![uCharts/uCharts](https://gitee.com/uCharts/uCharts/widgets/widget_card.svg?colors=393222,ebdfc1,fffae5,d8ca9f,393222,a28b40)](https://gitee.com/uCharts/uCharts)
-
-## 秋云图表组件使用帮助
-
-全新图表组件,全端全平台支持,开箱即用,可选择uCharts引擎全端渲染,也可指定PC端或APP端`单独使用ECharts`引擎渲染图表。支持极简单的调用方式,只需指定图表类型及传入符合标准的图表数据即可,使开发者只需专注业务及数据。同时也支持datacom组件读取uniClinetDB,无需关心如何拼接数据等不必要的重复工作,大大缩短开发时间。
-
-## 为何使用官方封装的组件?
-
-封装组件并不难,谁都会,但组件调试却是一件令人掉头发的事,尤其是canvas封装成组件会带来一系列问题:例如封装后不显示,图表多次初始化导致抖动问题,单页面多个图表点击事件错乱,组件放在scroll-view中无法点击,在图表上滑动时页面无法滚动等等一系列问题。为解决开发者使用可视化组件的困扰,uCharts官方特推出可视化通用组件,本组件具备以下特点:
-
-- 极简单的调用方式,默认配置下只需要传入`图表类型`及`图表数据`即可全端显示。
-- 提供强大的`在线配置生成工具`,可视化中的可视化,鼠标点一点就可以生成图表,可视化从此不再难配。
-- 兼容ECharts,可选择`PC端或APP端单独使用ECharts`引擎渲染图表。
-- H5及App采用`renderjs`渲染图表,动画流畅、性能翻倍。
-- 根据父容器尺寸`弹性显示图表`,再也不必为宽高匹配及多端适配问题发愁。
-- 支持`加载状态loading及error展示`,避免数据读取显示空白的尴尬。
-- chartData`配置与数据解耦`,即便使用ECharts引擎也不必担心拼接option的困扰。
-- localdata`后端数据直接渲染`,无需自行拼接chartData的categories及series,从后端拿回的数据简单处理即可生成图表。
-- 小程序端不必担心包体积过大问题,ECharts引擎将不会编译到各小程序端,u-charts.js编译后`仅为93kb`。
-- 未来将支持通过HbuilderX的[schema2code自动生成全端全平台图表](https://ext.dcloud.net.cn/plugin?id=4684),敬请期待!!!
-- uCharts官方拥有3个2000人的QQ群支持,庞大的用户量证明我们一直在努力,本组件将持续更新,请各位放心使用,本组件问题请在`QQ3群`反馈,您的宝贵建议是我们努力的动力!!
-
-
-## 致开发者
-
-感谢各位开发者`两年`来对秋云及uCharts的支持,uCharts的进步离不开各位开发者的鼓励与贡献,为更好的帮助各位开发者在uni-app生态系统更好的应用图表,uCharts始终坚持开源,并提供社群帮助开发者解决问题。 为确保您能更好的应用图表组件,建议您先`仔细阅读本页文档`以及uCharts官方文档,而不是下载下来`直接使用`。 如遇到问题请先阅读文档,如仍然不能解决,请加入QQ群咨询,如群友均不能解决或者您有特殊需求,请在群内私聊我,因工作原因,回复不一定很及时,您可直接说问题,有时间一定会回复您。
-
-uCharts的开源图表组件的开发,付出了大量的个人时间与精力,经过两年来的考验,不会有比较明显的bug,请各位放心使用。不求您5星评价,也不求您赞赏,`只求您对开源贡献的支持态度`,所以,当您想给`1星评价`的时候,秋云真的会`含泪希望您绕路而行……`。如果您有更好的想法,可以在`码云提交Pull Requests`以帮助更多开发者完成需求,再次感谢各位对uCharts的鼓励与支持!
-
-## 快速体验
-
-一套代码编到7个平台,依次扫描二维码,亲自体验uCharts图表跨平台效果!IOS因demo比较简单无法上架,请自行编译。
-![](https://box.kancloud.cn/58092090f2bccc6871ca54dbec268811_654x479.png)
-
-## 快速上手
-### <font color=#FF0000> 注意前提条件【版本要求:HBuilderX 3.1.0+】 </font> 
-- 1、插件市场点击右侧绿色按钮【使用HBuilderX导入插件】,或者【使用HBuilderX导入示例项目】查看完整示例工程
-- 2、依赖uniapp的vue-cli项目:请将uni-modules目录复制到src目录,即src/uni_modules。(请升级uniapp依赖为最新版本)
-- 3、页面中直接按下面用法直接调用即可,无需在页面中注册组件qiun-data-charts
-- 4、注意父元素class='charts-box'这个样式需要有宽高
-
-## 基本用法
-
-- template代码:([建议使用在线工具生成](https://demo.ucharts.cn))
-
-```
-<view class="charts-box">
-	<qiun-data-charts type="column" :chartData="chartData" />
-</view>
-```
-
-- 标准数据格式1:(折线图、柱状图、区域图等需要categories的直角坐标系图表类型)
-
-```
-chartData:{
-  categories: ["2016", "2017", "2018", "2019", "2020", "2021"],
-  series: [{
-    name: "目标值",
-    data: [35, 36, 31, 33, 13, 34]
-  }, {
-    name: "完成量",
-    data: [18, 27, 21, 24, 6, 28]
-  }]
-}
-```
-
-- 标准数据格式2:(饼图、圆环图、漏斗图等不需要categories的图表类型)
-
-```
-chartData:{
-  series: [{
-    data: [
-      {
-        name: "一班",
-        value: 50
-      }, {
-        name: "二班",
-        value: 30
-      }, {
-        name: "三班",
-        value: 20
-      }, {
-        name: "四班",
-        value: 18
-      }, {
-        name: "五班",
-        value: 8
-      }
-    ]
-  }]
-}
-```
-
-注:其他特殊图表类型,请参考mockdata文件夹下的数据格式,v2.0版本的uCharts已兼容ECharts的数据格式,v2.0版本仍然支持v1.0版本的数据格式。
-
-## localdata数据渲染用法
-
-- 使用localdata数据格式渲染图表的优势:数据结构简单,无需自行拼接chartData的categories及series,从后端拿回的数据简单处理即可生成图表。
-- localdata数据的缺点:并不是所有的图表类型均可通过localdata渲染图表,例如混合图,组件并不能识别哪个series分组需要渲染成折线还是柱状图,涉及到复杂的图表,仍需要由chartData传入。
-
-- template代码:([建议使用在线工具生成](https://demo.ucharts.cn))
-
-```
-<view class="charts-box">
-	<qiun-data-charts type="column" :localdata="localdata" />
-</view>
-```
-
-
-- 标准数据格式1:(折线图、柱状图、区域图等需要categories的直角坐标系图表类型)
-
-其中value代表数据的数值,text代表X轴的categories数据点,group代表series分组的类型名称即series[i].name。
-
-```
-localdata:[
-  {value:35, text:"2016", group:"目标值"},
-  {value:18, text:"2016", group:"完成量"},
-  {value:36, text:"2017", group:"目标值"},
-  {value:27, text:"2017", group:"完成量"},
-  {value:31, text:"2018", group:"目标值"},
-  {value:21, text:"2018", group:"完成量"},
-  {value:33, text:"2019", group:"目标值"},
-  {value:24, text:"2019", group:"完成量"},
-  {value:13, text:"2020", group:"目标值"},
-  {value:6, text:"2020", group:"完成量"},
-  {value:34, text:"2021", group:"目标值"},
-  {value:28, text:"2021", group:"完成量"}
-]
-```
-
-- 标准数据格式2:(饼图、圆环图、漏斗图等不需要categories的图表类型)
-
-其中value代表数据的数值,text代表value数值对应的描述。
-
-```
-localdata:[
-  {value:50, text:"一班"},
-  {value:30, text:"二班"},
-  {value:20, text:"三班"},
-  {value:18, text:"四班"},
-  {value:8, text:"五班"},
-]
-```
-
-- 注意,localdata的数据格式必需要符合datacom组件规范[【详见datacom组件】](https://uniapp.dcloud.io/component/datacom?id=mixindatacom)。
-
-## 进阶用法读取uniCloud数据库并渲染图表
-
-- 组件基于uniCloud的[clientDB](https://uniapp.dcloud.net.cn/uniCloud/clientdb)技术,无需云函数,在前端对数据库通过where查询条件及group和count统计即可渲染图表。
-- 具体可参考/pages/unicloud/unicloud.vue中的demo例子,使用前,请先关联云服务空间,然后在uniCloud/database/db_init.json文件上点右键,初始化云数据库,当控制台显示“初始化云数据库完成”即完成示例数据的导入,之后方可运行uniCloud的demo。
-
-- template代码:
-
-```
-<qiun-data-charts
-  type="line"
-  :chartData="demoData"
-  collection="uni-id-users"
-  field="register_date,status"
-  :where="'publish_date >= ' + new Date(startDate).getTime() + ' && publish_date <= ' + new Date(endDate).getTime()"
-  groupby="dateToString(add(new Date(0),register_date),'%Y-%m-%d','+0800') as text,status as group"
-  group-field="count(*) as value"
-/>
-```
-
-- 注意,从uniCloud读取出的数据,需要符合localdata的标准结果数据格式(参考上部分localdata),并需要把输出的字段as成规定的别名(value、text、group)。
-
-
-## 示例文件地址:
-
-### <font color=#FF0000> 强烈建议先看本页帮助,再看下面示例文件源码!</font>
-
-```
-/pages/ucharts/ucharts.vue(展示用uCharts全端运行的例子)
-
-/pages/echarts/echarts.vue(展示H5和App用ECharts,小程序端用uCharts的例子)
-
-/pages/unicloud/unicloud.vue(展示读取uniCloud数据库后直接渲染图表的例子)
-
-/pages/updata/updata.vue(展示动态更新图表数据的例子)
-
-/pages/other/other.vue(展示图表交互的例子:动态更新图表数据,渲染完成事件,获取点击索引,自定义tooltip,图表保存为图片,强制展示错误信息等)
-
-/pages/format-u/format-u.vue(展示uCharts的formatter用法的例子)
-
-/pages/format-e/format-e.vue(展示ECharts的formatter用法的例子)
-
-/pages/tab/tab.vue(展示再tab选项卡中用法的例子,即父容器采用v-show或v-if时需要注意的问题)
-
-/pages/layout/layout.vue(展示特殊布局用法的例子:swiper、scroll-view、绝对定位等布局)
-
-/pages/canvas/canvas.vue(展示uCharts v2.0版本原生js用法的例子)
-
-```
-
-
-## 组件基本API参数
-
-|属性名|类型|默认值|必填|说明|
-| -- | -- | -- | -- | -- |
-|type|String|null|`是`|图表类型,如全端用uCharts,可选值为pie、ring、rose、word、funnel、map、arcbar、line、column、bar、area、radar、gauge、candle、mix、tline、tarea、scatter、bubble <font color=#FF0000>(您也可以根据需求自定义新图表类型,需要在config-ucharts.js或config-echarts.js内添加,可参考config-ucharts.js内的"demotype"类型)</font>|
-|chartData|Object|见说明|`是`|图表数据,常用的标准数据格式为{categories: [],series: []},请按不同图表类型传入对应的标准数据。|
-|localdata|Array|[]|`是`|图表数据,如果您觉得拼接上面chartData比较繁琐,可以通过使用localdata渲染,组件会根据传入的type类型,自动拼接categories或series数据(使用localdata就不必再传入chartData,详见 /pages/other/other.vue 中使用localdata渲染图表的例子)。【localdata和collection(uniCloud数据库)同时存在,优先使用localdata;如果localdata和chartData同时存在,优先使用chartData。<font color=#FF0000> 即chartData>localdata>collection的优先级</font>渲染图表】。|
-|opts|Object|{}|否|uCharts图表配置参数(option),请参考[【在线生成工具】](https://demo.ucharts.cn)<font color=#FF0000>注:传入的opts会覆盖默认config-ucharts.js中的配置,只需传入与config-ucharts.js中属性不一致的opts即可实现【同类型的图表显示不同的样式】。</font>|
-|eopts|Object|{}|否|ECharts图表配置参数(option),请参考[【ECharts配置手册】](https://echarts.apache.org/zh/option.html)传入eopts。<font color=#FF0000>注:1、传入的eopts会覆盖默认config-echarts.js中的配置,以实现同类型的图表显示不同的样式。2、eopts不能传递function,如果option配置参数需要function,请将option写在config-echarts.js中即可实现。</font>|
-|loadingType|Number|2|否|加载动画样式,0为不显示加载动画,1-5为不同的样式,见下面示例。|
-|errorShow|Boolean|true|否|是否在页面上显示错误提示,true为显示错误提示图片,false时会显示空白区域|
-|errorReload|Boolean|true|否|是否启用点击错误提示图表重新加载,true为允许点击重新加载,false为禁用点击重新加载事件|
-|errorMessage|String|null|否|自定义错误信息,强制显示错误图片及错误信息,当上面errorShow为true时可用。(组件会监听该属性的变化,只要有变化,就会强制显示错误信息!)。说明:1、一般用于页面网络不好或其他情况导致图表loading动画一直显示,可以传任意(不为null或者"null"或者空"")字符串强制显示错误图片及说明。2、如果组件使用了data-come属性读取uniCloud数据,组件会自动判断错误状态并展示错误图标,不必使用此功能。3、当状态从非null改变为null或者空时,会强制调用reload重新加载并渲染图表数据。|
-|echartsH5|Boolean|false|否|是否在H5端使用ECharts引擎渲染图表|
-|directory|String|'/'|否|二级目录名称,如果开启上面echartsH5即H5端用ECharts引擎渲染图表,并且项目未发布在website根目录,需要填写此项配置。例如二级目录是h5,则需要填写`/h5/`,左右两侧需要带`/`,发布到三级或更多层目录示例`/web/v2/h5/`|
-|echartsApp|Boolean|false|否|是否在APP端使用ECharts引擎渲染图表|
-|canvasId|String|见说明|否|默认生成32位随机字符串。如果指定canvasId,可方便后面调用指定图表实例,否则需要通过渲染完成事件获取自动生成随机的canvasId|
-|canvas2d|Boolean|false|否|是否开启canvas2d模式,用于解决微信小程序层级过高问题,仅微信小程序端可用,其他端会强制关闭canvas2d模式。<font color=#FF0000>注:开启canvas2d模式,必须要传入上面的canvasId(随机字符串,不能是动态绑定的值,不能是数字),否则微信小程序可能会获取不到dom导致无法渲染图表!**开启后,开发者工具显示不正常,预览正常(不能“真机调试”,不能“真机调试”,不能“真机调试”)**</font>|
-|background|String|none|否|背景颜色,默认透明none,可选css的16进制color值,如#FFFFFF|
-|animation|Boolean|true|否|是否开启图表动画效果|
-|inScrollView|Boolean|false|否|图表组件是否在scroll-view中,如果在请传true,否则会出现点击事件坐标不准确的现象|
-|pageScrollTop|Number|0|否|如果图表组件是在scroll-view中,并且整个页面还存在滚动条,这个值应为绑定为页面滚动条滚动的距离,否则会出现点击事件坐标不准确的现象|
-|reshow|Boolean|false|否|强制重新渲染属性,如果图表组件父级用v-show包裹,初始化的时候会获取不到元素的宽高值,导致渲染失败,此时需要把父元素的v-show方法复制到reshow中,组件检测到reshow值变化并且为true的时候会强制重新渲染|
-|reload|Boolean|false|否|强制重新加载属性,与上面的reshow区别在于:1、reload会重新显示loading动画;2、如果组件绑定了uniCloud数据查询,通过reload会重新执行SQL语句查询,重新请求网络。而reshow则不会显示loading动画,只是应用现有的chartData数据进行重新渲染|
-|disableScroll|Boolean|false|否|当在canvas中移动时,且有绑定手势事件时,禁止屏幕滚动以及下拉刷新(赋值为true时,在图表区域内无法拖动页面滚动)|
-|tooltipShow|Boolean|true|否|点击或者鼠标经过图表时,是否显示tooltip提示窗,默认显示|
-|tooltipFormat|String|undefined|否|自定义格式化Tooltip显示内容,详见下面【tooltipFormat格式化】|
-|tooltipCustom|Object|undefined|否|(仅uCharts)如果以上系统自带的Tooltip格式化方案仍然不满足您,您可以用此属性实现更多需求,详见下面【tooltipCustom自定义】|
-|startDate|String|undefined|否|需为标准时间格式,例如"2021-02-14"。用于配合uniClinetDB自动生成categories使用|
-|endDate|String|undefined|否|需为标准时间格式,例如"2021-03-31"。用于配合uniClinetDB自动生成categories使用|
-|groupEnum|Array|[]|否|当使用到uniCloud数据库时,group字段属性如果遇到统计枚举属性的字段,需要通过将DB Schema中的enum的描述定义指派给该属性,具体格式为[{value: 1,text: "男"},{value: 2,text: "女"}]|
-|textEnum|Array|[]|否|当使用到uniCloud数据库时,text字段属性如果遇到统计枚举属性的字段,需要通过将DB Schema中的enum的描述定义指派给该属性,具体格式为[{value: 1,text: "男"},{value: 2,text: "女"}]|
-|ontap|Boolean|true|否|是否监听@tap@cilck事件,禁用后不会触发组件点击事件|
-|ontouch|Boolean|false|否|(仅uCharts)是否监听@touchstart@touchmove@touchend事件(赋值为true时,非PC端在图表区域内无法拖动页面滚动)|
-|onmouse|Boolean|true|否|是否监听@mousedown@mousemove@mouseup事件,禁用后鼠标经过图表上方不会显示tooltip|
-|on movetip|Boolean|false|否|(仅uCharts)是否开启跟手显示tooltip功能(前提条件,1、需要开启touch功能,即:ontouch="true";2、并且opts.enableScroll=false即关闭图表的滚动条功能)(建议微信小程序开启canvas2d功能,否则原生canvas组件会很卡)|
-|tapLegend|Boolean|true|否|(仅uCharts)是否开启图例点击交互事件 |
-
-## 组件事件及方法
-
-|事件名|说明|
-| --| --|
-|@complete|图表渲染完成事件,渲染完成会返回图表实例{complete: true, id:"xxxxx"(canvasId), type:"complete"}。可以引入config-ucharts.js/config-echarts.js来根据返回的id,调用uCharts或者ECharts实例的相关方法,详见other.vue其他图表高级应用。|
-|@getIndex|获取点击数据索引,点击后返回图表索引currentIndex,图例索引(仅uCharts)legendIndex,等信息。返回数据:{type: "getIndex", currentIndex: 3, legendIndex: -1, id:"xxxxx"(canvasId), event: {x: 100, y: 100}(点击坐标值)}|
-|@error|当组件发生错误时会触发该事件。返回数据:返回数据:{type:"error",errorShow:true/false(组件props中的errorShow状态值) , msg:"错误消息xxxx", id: "xxxxx"(canvasId)}|
-|@getTouchStart|(仅uCharts)拖动开始监听事件。返回数据:{type:"touchStart",event:{x: 100, y: 100}(点击坐标值),id:"xxxxx"(canvasId)}|
-|@getTouchMove|(仅uCharts)拖动中监听事件。返回数据:{type:"touchMove",event:{x: 100, y: 100}(点击坐标值),id:"xxxxx"(canvasId)}|
-|@getTouchEnd|(仅uCharts)拖动结束监听事件。返回数据:{type:"touchEnd",event:{x: 100, y: 100}(点击坐标值),id:"xxxxx"(canvasId)}|
-|@scrollLeft|(仅uCharts)开启滚动条后,滚动条到最左侧触发的事件,用于动态打点,需要自行编写防抖方法。返回数据:{type:"scrollLeft", scrollLeft: true, id: "xxxxx"(canvasId)}|
-|@scrollRight|(仅uCharts)开启滚动条后,滚动条到最右侧触发的事件,用于动态打点,需要自行编写防抖方法。返回数据:返回数据:{type:"scrollRight", scrollRight: true, id: "xxxxx"(canvasId)}|
-
-## tooltipFormat格式化(uCharts和ECharts)
-
-tooltipFormat类型为string字符串类型,需要指定config-ucharts.js/config-echarts.js中formatter下的属性值。因各小程序及app端通过组件均不能传递function类型参数,因此请先在config-ucharts.js/config-echarts.js内定义您想格式化的数据,然后在这里传入formatter下的key值,组件会自动匹配与其对应的function。如不定义该属性,组件会调用默认的tooltip方案,标准的tooltipFormat使用姿势如下:
-
-```
-<qiun-data-charts
-  type="column"
-  :chartData="chartData"
-  tooltipFormat="tooltipDemo1"
-⁄>
-==================
-config-ucharts.js
-formatter:{
-  tooltipDemo1:function(item, category, index, opts){return item.data+'天'}
-}
-==================
-config-echarts.js
-formatter:{
-  tooltipDemo1:function(){
-    
-  }
-}
-```
-
-注意,config-ucharts.js内的formatter下的function需要携带(item, category, index, opts)参数,这4个参数都是uCharts实例内传递过来的数据,具体定义如下:
-
-|属性名|说明|
-| -- | -- |
-|item|组件内计算好的当前点位的series[index]数据,其属性有data(继承series[index].format属性),color,type,style,pointShape,disableLegend,name,show|
-|category|当前点位的X轴categories[index]分类名称(如果图表类型没有category,其值则为undefined)|
-|index|当前点位的索引值|
-|opts|全部uCharts的opts配置,包含categories、series等一切你需要的都在里面,可以根据index索引值获取其他相关数据。您可以在渲染完成后打印一下opts,看看里面都有什么,也可以自定义一些你需要的挂载到opts上,这样就可以根据需求更方便的显示自定义内容了。|
-
-## tooltipCustom自定义(仅uCharts)
-
-上面仅仅展示了Tooltip的自定义格式化,如果仍然仍然还不能还不能满足您的需求,只能看这里的方法了。tooltipCustom可以自定义在任何位置显示任何内容的文本,当然tooltipCustom可以和tooltipFormat格式化同时使用以达到更多不同的需求,下面展示了tooltip固定位置显示的方法:
-
-```
-<qiun-data-charts 
-	type="column" 
-	:chartData="chartData" 
-	:tooltipCustom="{x:10,y:10}"
-/>
-```
-
-tooltipCustom属性如下:
-
-|属性名|类型|默认值|说明|
-| -- | -- | -- | -- |
-|x|Number|undefined|tooltip左上角相对于画布的X坐标|
-|y|Number|undefined|tooltip左上角相对于画布的Y坐标|
-|index|Number|undefined|相对于series或者categories中的索引值。当没有定义index或者index定义为undefined的时候,组件会自动获取当前点击的索引,并根据上面的xy位置绘制tooltip提示框。如果为0及以上的数字时,会根据您传的索引自动计算x轴方向的偏移量(仅直角坐标系有效)|
-|textList|Array.Object|undefined|多对象数组,tooltip的文字组。当没有定义textList或者textList定义为undefined的时候,会调自动获取点击索引并拼接相应的textList。如传递[{text:'默认显示的tooltip',color:null},{text:'类别1:某个值xxx',color:'#2fc25b'},{text:'类别2:某个值xxx',color:'#facc14'},{text:'类别3:某个值xxx',color:'#f04864'}]这样定义好的数组,则会只显示该数组。|
-|textList[i].text|String| |显示的文字|
-|textList[i].color|Color| |左侧图表颜色|
-
-## datacome属性及说明
-
-- 通过配置datacome属性,可直接获取uniCloud云数据,并快速自动生成图表,使开发者只需专注业务及数据,无需关心如何拼接数据等不必要的重复工作,大大缩短开发时间。datacome属性及说明,详见[datacom组件规范](https://uniapp.dcloud.io/component/datacom?id=mixindatacom)
-
-|属性名|类型|默认值|说明|
-| -- | -- | -- | -- |
-|collection|String| |表名。支持输入多个表名,用 , 分割|
-|field|String| |查询字段,多个字段用 , 分割|
-|where|String| |查询条件,内容较多,另见jql文档:[详情](https://uniapp.dcloud.net.cn/uniCloud/uni-clientDB?id=jsquery)|
-|orderby|String| |排序字段及正序倒叙设置|
-|groupby|String| |对数据进行分组|
-|group-field|String| |对数据进行分组统计|
-|distinct|Boolean|false|是否对数据查询结果中重复的记录进行去重|
-|action|string| |云端执行数据库查询的前或后,触发某个action函数操作,进行预处理或后处理,详情。场景:前端无权操作的数据,比如阅读数+1|
-|page-data|string|add|分页策略选择。值为 add 代表下一页的数据追加到之前的数据中,常用于滚动到底加载下一页;值为 replace 时则替换当前data数据,常用于PC式交互,列表底部有页码分页按钮|
-|page-current|Number|0|当前页|
-|page-size|Number|0|每页数据数量|
-|getcount|Boolean|false|是否查询总数据条数,默认 false,需要分页模式时指定为 true|
-|getone|Boolean|false|指定查询结果是否仅返回数组第一条数据,默认 false。在false情况下返回的是数组,即便只有一条结果,也需要[0]的方式获取。在值为 true 时,直接返回结果数据,少一层数组。一般用于非列表页,比如详情页|
-|gettree|Boolean|false|是否查询树状数据,默认 false|
-|startwith|String|''|gettree的第一层级条件,此初始条件可以省略,不传startWith时默认从最顶级开始查询|
-|limitlevel|Number|10|gettree查询返回的树的最大层级。超过设定层级的节点不会返回。默认10级,最大15,最小1|
-
-## uni_modules目录说明
-
-```
-├── components
-│ └── qiun-data-chatrs──────────# 组件主入口模块
-│ └── qiun-error────────────────# 加载动画组件文件目录(可以修改错误提示图标以减少包体积)
-│ └── qiun-loading──────────────# 加载动画组件文件目录(可以删除您不需要的动画效果以减少包体积)
-├── js_skd
-│ └── u-charts
-│ ── └──config-echarts.js ──────# ECharts默认配置文件(非APP端内可作为实例公用中转)
-│ ── └──config-ucharts.js ──────# uCharts默认配置文件(非APP端内可作为实例公用中转)
-│ ── └──u-charts-v2.0.0.js──────# uCharts基础库v2.0.0版本,部分API与之前版本不同
-├── static
-│ └── app-plus──────────────────# 条件编译目录,仅编译到APP端
-│ ── └──echarts.min.js──────────# Echarts基础库v4.2.1
-│ └── h5────────────────────────# 条件编译目录,仅编译到H5端
-│ ── └──echarts.min.js──────────# Echarts基础库v4.2.1
-```
-
-
-## 加载动画及错误提示
-- 为保证编译后的包体积,加载动画引用作者wkiwi提供的[w-loading](https://ext.dcloud.net.cn/plugin?id=504)中选取5种,如需其他样式请看下面说明。
-- loading的展示逻辑:
-	* 1、如果是uniCloud数据,从发送网络请求到返回数据期间展示。
-	* 2、如果是自行传入的chartData,当chartData.series=[]空数组的时候展示loading,也就是说初始化图表的时候,如果您没有数据,可以通过先传个空数组来展示loading效果,当chartData.series有数据后会自动隐藏loading图标。
-- <font color=#FF0000>如您修改了qiun-data-charts.vue组件文件,请务必在升级前备份您的文件,以免被覆盖!!!建议将加载状态显示做成组件,避免下次升级时丢失后无法找到。</font>
-
-
-## 配置文件说明
-
-- <font color=#FF0000>注意,config-echarts.js和config-ucharts.js内只需要配置符合您项目整体UI的整体默认配置,根据需求,先用[【在线工具】](http://demo.ucharts.cn)调试好默认配置,并粘贴到配置文件中。</font>
-- <font color=#FF0000>如果需要与configjs中不同的配置,只需要在组件上绑定:opts或者:eopts传入与默认配置不同的某个属性及值即可覆盖默认配置,极大降低了代码量。</font>
-
-- ECharts默认配置文件:config-echarts.js
-
-	i、<font color=#FF0000>如您修改了默认配置文件,请务必在升级前备份您的配置文件,以免被覆盖!!!</font>
-	
-	ii、ECharts配置手册:[https://echarts.apache.org/zh/option.html](https://echarts.apache.org/zh/option.html)
-	
-	iii、"type"及"categories"属性为支持的图表属性,您可参照ECharts配置手册,配置您更多的图表类型,并将对应的图表配置添加至下面
-	
-	iv、"formatter"属性,因各小程序及app端通过组件均不能传递function类型参数,因此请先在此属性下定义您想格式化的数据,组件会自动匹配与其对应的function
-	
-	v、"seriesTemplate"属性,因ECharts的大部分配置均在series内,seriesTemplate作为series的模板,这样只需要在这里做好模板配置,组件的数组层chartData(或者localdata或者collection)的series会自动挂载模板配置。如需临时或动态改变seriesTemplate,可在:eopts中传递seriesTemplate,详见pages/echarts/echarts.vue中的曲线图。
-
-	vi、ECharts配置仅可用于H5或者APP端,并且配置`echartsH5`或`echartsApp`为`true`时可用
-
-- uCharts默认配置文件:config-ucharts.js
-
-	i、<font color=#FF0000>如您修改了默认配置文件,请务必在升级前备份您的配置文件,以免被覆盖!!!</font>
-	
-	ii、v2版本后的uCharts基础库不提供配置手册,您可以使用在线配置生成工具来快速生成配置:[http://demo.ucharts.cn](http://demo.ucharts.cn)
-	
-	iii、"type"及"categories"属性为支持的图表属性,不支持添加uCharts基础库没有的图表类型
-	
-	iv、"formatter"属性因各小程序及app端通过组件均不能传递function类型参数,因此请先在此属性下定义您想格式化的数据,组件会自动匹配与其对应的function
-	
-	v、uCharts配置可跨全端使用
-
-
-## 常见问题及注意事项
-
-- `图表无法显示问题`:
-	* 请先检查您的HBuilderX版本,要求高于3.1.0+。
-	* 1、如果是首次导入插件不显示,或者报以下未注册`qiun-data-charts`的错误:
-	> Unknown custom element: &lt; qiun-data-charts &gt; - did you register the component correctly? For recursive components, make sure to provide the "name" option.
-	* 2、<font color=#FF0000>请【重启HBuilderX】或者【重启项目】或者【重启开发者工具】或者【删除APP基座】重新运行,避免缓存问题导致不能显示。</font>
-  * 3、如果是基于uniapp的vue-cli项目,1、请 npm update 升级uniapp依赖为最新版本;2、请尝试清理node-modules,重新install,还不行就删除项目,再重新install。如果仍然不行,请检查uniapp依赖是否为最新版本,再重试以上步骤。如果仍然不行,请使用<font color=#FF0000>【非uni_modules版本】</font>组件,最新非uni_modules版本在码云发布,[点击此处获取](https://gitee.com/uCharts/uCharts/tree/master/qiun-data-charts%EF%BC%88%E9%9D%9Euni-modules%EF%BC%89)。。
-	* 4、请检查控制台是否有报错或提示信息,如果没有报错,也没有提示信息,并且检查视图中class="charts-box"这个元素的宽高均为0,请修改父元素的css样式或进行下面第4步检查。
-	* 5、检查父级是否使用了v-show来控制显示。如果页面初始化时组件处于隐藏状态,组件则无法正确获取宽高尺寸,此时<font color=#FF0000>需要组件内绑定reshow属性(逻辑应与父级的v-show的逻辑相同)</font>,强制重新渲染图表,例如:reshow="父级v-show绑定的事件"。
-	* 6、如果在微信小程序端开启了canvas2d模式<font color=#FF0000>(不能使用真机调试,请直接预览)</font>不显示图表:
-		* a、请务必在组件上定义canvasId,不能为纯数字、不能为变量、不能重复、尽量长一些。
-		* b、请检查微信小程序的基础库,修改至2.16.0或者最新版本的基础库。
-		* c、请检查父元素或父组件是否用v-if来控制显示,如有请改为v-show,并将v-show的逻辑绑定至组件。
-- `formatter格式化问题`:无论是uCharts还是ECharts,因为组件不能传递function,所有的formatter均需要变成别名format来定义,并在config-ucharts.js或config-echarts.js配置对应的formatter方法,组件会根据format的值自动替换配置文件中的formatter方法。(参考示例项目pages/format/format.vue)
-- `图表抖动问题`:如果开启了animation动画效果,由于组件内开启了chartData和opts的监听,当数据变化时会重新渲染图表,<font color=#FF0000>建议整体改变chartData及opts的属性值</font>,而不要通过循环或遍历来改变this实例下的chartData及opts,例如先定义一个临时变量,拼接好数据后再整体赋值。(参考示例项目pages/updata/updata.vue)
-- `微信小程序报错Maximum call stack size exceeded问题`:由于组件内开启了chartData和opts的监听,当数据变化时会重新渲染图表,<font color=#FF0000>建议整体改变chartData及opts的属性值</font>,而不要通过循环或遍历来改变this实例下的chartData及opts,例如先定义一个临时变量,拼接好数据后再整体赋值。(参考示例项目pages/updata/updata.vue)
-- `Loading状态问题`:如不使用uniClinetDB获取数据源,并且需要展示Loading状态,请先清空series,使组件变更为Loading状态,即this.chartData.series=[]即可展示,然后再从服务端获取数据,拼接完成后再传入this.chartData。如果不需要展示Loading状态,则不需要以上步骤,获取到数据,拼接好标准格式后,直接赋值即可。
-- `微信小程序图表层级过高问题`:因canvas在微信小程序是原生组件,如果使用自定义tabbar或者自定义导航栏,图表则会超出预期,此时需要给组件的canvas2d传值true来使用type='2d'的功能,开启此模式后,<font color=#FF0000>一定要在组件上自定义canvasId,不能为数字,不能动态绑定,要为随机字符串!不能“真机调试”,不能“真机调试”,不能“真机调试”</font>开发者工具显示不正常,图表层级会变高,而正常预览或者发布上线则是正常状态,开发者不必担心,一切以真机预览为准(因微信开发者工具显示不正确,canvas2d这种模式下给调试带来了困难,开发时,可以先用:canvas2d="false"来调试,预览无误后再改成true)。
-- `开启canvas2d后图表不显示问题`:开启canvas2d后,需要手动指定canvasId,并且父元素不能含有v-if,否则会导致获取不到dom节点问题,请将v-if改成v-show,更多开启canvas2d不显示问题,请参考示例项目pages/layout/layout.vue文件,对照示例项目修改您的项目。
-- `MiniPorgramError U.createEvent is ot a function`:此问题一般是微信小程序开启了canvas2d,并点击了“真机调试导致”,参考上面【微信小程序图表层级过高问题】解决办法,开启2d后,不可以真机调试,只能开发者工具调试或者扫二维码“预览”。
-- `在图表上滑动无法使页面滚动问题`:此问题是因为监听了touchstart、touchmove和touchend三个事件,或者开启了disableScroll属性,如果您的图表不需要开启图表内的滚动条功能,请禁用这三个方法的监听,即:ontouch="false"或者:disableScroll="false"即可(此时图表组件默认通过@tap事件来监听点击,可正常显示Tooltip提示窗)。
-- `开启滚动条无法拖动图表问题`:此问题正与以上问题相反,是因为禁用了监听touchstart、touchmove和touchend三个事件,请启用这三个方法的监听,即在组件上加入 :ontouch="true" 即可。注意,不要忘记在opts里需要配置enableScroll:true,另外如果需要显示滚动条,需要在xAxis中配置scrollShow:ture,及itemCount(单屏数据密度)数量的配置。
-- `开启滚动条后图表两侧有白边问题`:此问题是因为组件上的background为none或者没有指定,请在组件上加入background="#000000"(您的背景色)。如果父元素为图片,尽量不要开启滚动条,此时图表是透明色,可以显示父元素背景图片。
-- `开启滚动条后动态打点更新数据滚动条位置问题`:开启滚动条后动态打点,需要把opts中update需要赋值为true,来启用uCharts的updateData方法来更新视图,详见示例项目pages/updata/updata.vue。
-- `地图变形问题`:此问题是因为您引用的geojson地图数据的坐标系可能是地球坐标(WGS84)导致,需要开启【是否进行WGS84转墨卡托投影】功能。开启后因大量的数据运算tooltip可能会不跟手,建议自行转换为墨卡托坐标系,可参照源码内function lonlat2mercator()。其他地图数据下载地址:[http://datav.aliyun.com/tools/atlas/](http://datav.aliyun.com/tools/atlas/)
-- `支付宝(钉钉)小程序无法点击问题`:请检查支付宝小程序开发者工具中,点击【详情】,在弹出的【项目详情】中【取消】启用小程序基础库 2.0 构建,一定不要勾选此项。
-- `uni-simple-router中使用问题`:如果使用uni-simple-router路由插件,H5开启完全路由模式(即h5:{vueRouterDev:true})时,会导致组件内uni.xxx部分方法失效,引发节点获取不正常报错,请使用普通模式即可。
-- `Y轴刻度标签数字重复问题`:此问题一般是series数据内数值较小,而Y轴网格数量较多,并且Y轴刻度点显示整数导致。解决方法1,Y轴刻度值保留两位小数,组件上传值 :opts="{yAxis:{data:[{tofix:2}]}}";解决方法2,修改Y轴网格数量为series中的最大值的数量,例如series中最大值为3,那么修改yAxis.splitNumber=3即可;解决方法3,根据Y轴网格数量修改Y轴最大值 :opts="{yAxis:{data:[{max:5}]}}"。
-- `柱状图柱子高度不符合预期问题`:此问题是Y轴最小值未默认为0的问题导致,组件上传值 :opts="{yAxis:{data:[{min:0}]}}"即可解决。
-- `饼图类百分比改其他文案的问题`:参考示例项目pages/format-u/format-u.vue,在chartData的series中使用format。
-
-## [更多常见问题以官方网站【常见问题】为准](http://demo.ucharts.cn)
-
-## QQ群号码
-## <font color=#FF0000> 请先完整阅读【帮助文档】及【常见问题】3遍,右侧蓝色按钮【示例项目】请看2遍!不看文档不看常见问题进群就问的拒绝回答问题!咨询量太大请理解作者! </font> 
-- 放在下面是为了让您先看文档,看好群分类,再进群!!
-- 交流群1:371774600(已满)
-- 交流群2:619841586(不回答本组件问题,只回答uCharts基础库问题)
-- 交流群3:955340127<font color=#FF0000>(优先解答本组件问题,其他问题群友互助)</font>
-- 口令`uniapp`
-
-
-## 相关链接
-- [DCloud插件市场地址](https://ext.dcloud.net.cn/plugin?id=271)
-- [uCharts官网](https://www.ucharts.cn)
-- [uCharts在线生成工具](http://demo.ucharts.cn)<font color=#FF0000>(注:v2.0版本后将不提供配置手册,请通过在线生成工具生成图表配置)</font>
-- [uCharts码云开源托管地址](https://gitee.com/uCharts/uCharts) [![star](https://gitee.com/uCharts/uCharts/badge/star.svg?theme=gvp)](https://gitee.com/uCharts/uCharts/stargazers)
-- [uCharts基础库更新记录](https://gitee.com/uCharts/uCharts/wikis/%E6%9B%B4%E6%96%B0%E8%AE%B0%E5%BD%95?sort_id=1535998)
-- [uCharts改造教程](https://gitee.com/uCharts/uCharts/wikis/%E6%94%B9%E9%80%A0uCharts%E6%89%93%E9%80%A0%E4%B8%93%E5%B1%9E%E5%9B%BE%E8%A1%A8?sort_id=1535997)
-- [图表组件在项目中的应用 UReport数据报表](https://ext.dcloud.net.cn/plugin?id=4651) 
-- [ECharts官网](https://echarts.apache.org/zh/index.html)
-- [ECharts配置手册](https://echarts.apache.org/zh/option.html)
-- [`wkiwi`提供的w-loading组件地址](https://ext.dcloud.net.cn/plugin?id=504)

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 22
uni_modules/qiun-data-charts/static/app-plus/echarts.min.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 22
uni_modules/qiun-data-charts/static/h5/echarts.min.js


+ 0 - 0
uview-ui/LICENSE → uni_modules/uview-ui/LICENSE


+ 5 - 0
uview-ui/README.md → uni_modules/uview-ui/README.md

@@ -4,6 +4,11 @@
 <h3 align="center" style="margin: 30px 0 30px;font-weight: bold;font-size:40px;">uView</h3>
 <h3 align="center">多平台快速开发的UI框架</h3>
 
+## 一起推动uView发展
+
+uView正在参与开源中国的“年度最佳项目”评选,目前投票进入了最后一个阶段(之前投过票的现在也可以投票),
+我们不分昼夜的努力,恳请同学们能为我们投一票,uView来源于社区,也希望社区能一起推动它的发展,[点此帮助uView](https://www.oschina.net/project/top_cn_2021/?id=583)
+
 
 ## 说明
 

+ 53 - 0
uview-ui/changelog.md → uni_modules/uview-ui/changelog.md

@@ -1,3 +1,56 @@
+## 2.0.19(2021-12-29)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 优化微信小程序包体积可在微信中预览,请升级HbuilderX3.3.4,同时在“运行->运行到小程序模拟器”中勾选“运行时是否压缩代码”
+2. 优化微信小程序setData性能,处理某些方法如$u.route()无法在模板中使用的问题
+3. navbar添加autoBack参数
+4. 允许avatar组件的事件冒泡
+5. 修复cell组件报错问题
+6. 其他修复
+## 2.0.18(2021-12-28)
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复app端编译报错问题
+2. 重新处理微信小程序端setData过大的性能问题
+3. 修复边框问题
+4. 修复最大最小月份不大于0则没有数据出现的问题
+5. 修复SwipeAction微信小程序端无法上下滑动问题
+6. 修复input的placeholder在小程序端默认显示为true问题
+7. 修复divider组件click事件无效问题
+8. 修复u-code-input maxlength 属性值为 String 类型时显示异常
+9. 修复当 grid只有 1到2时 在小程序端algin设置无效的问题
+10. 处理form-item的label为top时,取消错误提示的左边距
+11. 其他修复
+## 2.0.17(2021-12-26)
+## uView正在参与开源中国的“年度最佳项目”评选,之前投过票的现在也可以投票,恳请同学们投一票,[点此帮助uView](https://www.oschina.net/project/top_cn_2021/?id=583)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 解决HBuilderX3.3.3.20211225版本导致的样式问题
+2. calendar日历添加monthNum参数
+3. navbar添加center slot
+## 2.0.16(2021-12-25)
+## uView正在参与开源中国的“年度最佳项目”评选,之前投过票的现在也可以投票,恳请同学们投一票,[点此帮助uView](https://www.oschina.net/project/top_cn_2021/?id=583)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 解决微信小程序setData性能问题
+2. 修复count-down组件change事件不触发问题
+## 2.0.15(2021-12-21)
+## uView正在参与开源中国的“年度最佳项目”评选,之前投过票的现在也可以投票,恳请同学们投一票,[点此帮助uView](https://www.oschina.net/project/top_cn_2021/?id=583)
+
+# uView2.0重磅发布,利剑出鞘,一统江湖
+
+1. 修复Cell单元格titleWidth无效
+2. 修复cheakbox组件ischecked不更新
+3. 修复keyboard是否显示"."按键默认值问题
+4. 修复number-keyboard是否显示键盘的"."符号问题
+5. 修复Input输入框 readonly无效
+6. 修复u-avatar 导致打包app、H5时候报错问题
+7. 修复Upload上传deletable无效
+8. 修复upload当设置maxSize时无效的问题
+9. 修复tabs lineWidth传入带单位的字符串的时候偏移量计算错误问题
+10. 修复rate组件在有padding的view内,显示的星星位置和可触摸区域不匹配,无法正常选中星星
 ## 2.0.13(2021-12-14)
 ## [点击加群交流反馈:364463526](https://jq.qq.com/?_chanwv=1027&k=mCxS3TGY)
 

+ 0 - 0
uview-ui/components/u--form/u--form.vue → uni_modules/uview-ui/components/u--form/u--form.vue


+ 8 - 1
uview-ui/components/u--image/u--image.vue → uni_modules/uview-ui/components/u--image/u--image.vue

@@ -20,7 +20,14 @@
 		@click="$emit('click')"
 		@error="$emit('error')"
 		@load="$emit('load')"
-	></uvImage>
+	>
+		<template v-slot:loading>
+			<slot name="loading"></slot>
+		</template>
+		<template v-slot:error>
+			<slot name="error"></slot>
+		</template>
+	</uvImage>
 </template>
 
 <script>

+ 0 - 0
uview-ui/components/u--input/u--input.vue → uni_modules/uview-ui/components/u--input/u--input.vue


+ 0 - 0
uview-ui/components/u--text/u--text.vue → uni_modules/uview-ui/components/u--text/u--text.vue


+ 0 - 0
uview-ui/components/u--textarea/u--textarea.vue → uni_modules/uview-ui/components/u--textarea/u--textarea.vue


+ 0 - 0
uview-ui/components/u-action-sheet/props.js → uni_modules/uview-ui/components/u-action-sheet/props.js


+ 0 - 0
uview-ui/components/u-action-sheet/u-action-sheet.vue → uni_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue


+ 0 - 0
uview-ui/components/u-album/props.js → uni_modules/uview-ui/components/u-album/props.js


+ 2 - 2
uview-ui/components/u-album/u-album.vue → uni_modules/uview-ui/components/u-album/u-album.vue

@@ -143,12 +143,12 @@ export default {
             return arr
         },
         imageWidth() {
-            return this.$u.addUnit(
+            return uni.$u.addUnit(
                 this.urls.length === 1 ? this.singleWidth : this.multipleSize
             )
         },
         imageHeight() {
-            return this.$u.addUnit(
+            return uni.$u.addUnit(
                 this.urls.length === 1 ? this.singleHeight : this.multipleSize
             )
         },

+ 0 - 0
uview-ui/components/u-alert/props.js → uni_modules/uview-ui/components/u-alert/props.js


+ 0 - 0
uview-ui/components/u-alert/u-alert.vue → uni_modules/uview-ui/components/u-alert/u-alert.vue


+ 0 - 0
uview-ui/components/u-avatar-group/props.js → uni_modules/uview-ui/components/u-avatar-group/props.js


+ 0 - 0
uview-ui/components/u-avatar-group/u-avatar-group.vue → uni_modules/uview-ui/components/u-avatar-group/u-avatar-group.vue


+ 0 - 0
uview-ui/components/u-avatar/props.js → uni_modules/uview-ui/components/u-avatar/props.js


+ 11 - 6
uview-ui/components/u-avatar/u-avatar.vue → uni_modules/uview-ui/components/u-avatar/u-avatar.vue

@@ -10,6 +10,7 @@
 		@tap.stop="clickHandler"
 	>
 		<slot>
+			<!-- #ifdef MP-WEIXIN || MP-QQ || MP-BAIDU  -->
 			<open-data
 				v-if="mpAvatar && allowMp"
 				type="userAvatarUrl"
@@ -18,6 +19,10 @@
 					height: $u.addUnit(size)
 				}]"
 			/>
+			<!-- #endif -->
+			<!-- #ifndef MP-WEIXIN && MP-QQ && MP-BAIDU  -->
+			<template v-if="mpAvatar && allowMp"></template>
+			<!-- #endif -->
 			<u-icon
 				v-else-if="icon"
 				:name="icon"
@@ -56,8 +61,8 @@
 	 * Avatar  头像
 	 * @description 本组件一般用于展示头像的地方,如个人中心,或者评论列表页的用户头像展示等场所。
 	 * @tutorial https://www.uviewui.com/components/avatar.html
-	 * 
-	 * @property {String}			src				头像路径,如加载失败,将会显示默认头像(不能为相对路径) 
+	 *
+	 * @property {String}			src				头像路径,如加载失败,将会显示默认头像(不能为相对路径)
 	 * @property {String}			shape			头像形状  ( circle (默认) | square)
 	 * @property {String | Number}	size			头像尺寸,可以为指定字符串(large, default, mini),或者数值 (默认 40 )
 	 * @property {String}			mode			头像图片的裁剪类型,与uni的image组件的mode参数一致,如效果达不到需求,可尝试传widthFix值 (默认 'scaleToFill' )
@@ -65,14 +70,14 @@
 	 * @property {String}			bgColor			背景颜色,一般显示文字时用 (默认 '#c0c4cc' )
 	 * @property {String}			color			文字颜色 (默认 '#ffffff' )
 	 * @property {String | Number}	fontSize		文字大小  (默认 18 )
-	 * @property {String}			icon			显示的图标 
+	 * @property {String}			icon			显示的图标
 	 * @property {Boolean}			mpAvatar		显示小程序头像,只对百度,微信,QQ小程序有效  (默认 false )
 	 * @property {Boolean}			randomBgColor	是否使用随机背景色  (默认 false )
-	 * @property {String}			defaultUrl		加载失败的默认头像(组件有内置默认图片)  
-	 * @property {String | Number}	colorIndex		如果配置了randomBgColor为true,且配置了此值,则从默认的背景色数组中取出对应索引的颜色值,取值0-19之间 
+	 * @property {String}			defaultUrl		加载失败的默认头像(组件有内置默认图片)
+	 * @property {String | Number}	colorIndex		如果配置了randomBgColor为true,且配置了此值,则从默认的背景色数组中取出对应索引的颜色值,取值0-19之间
 	 * @property {String}			name			组件标识符  (默认 'level' )
 	 * @property {Object}			customStyle		定义需要用到的外部样式
-	 * 
+	 *
 	 * @event    {Function}        click       点击组件时触发   index: 用户传递的标识符
 	 * @example  <u-avatar :src="src" mode="square"></u-avatar>
 	 */

+ 0 - 0
uview-ui/components/u-back-top/props.js → uni_modules/uview-ui/components/u-back-top/props.js


+ 0 - 0
uview-ui/components/u-back-top/u-back-top.vue → uni_modules/uview-ui/components/u-back-top/u-back-top.vue


+ 0 - 0
uview-ui/components/u-badge/props.js → uni_modules/uview-ui/components/u-badge/props.js


+ 0 - 0
uview-ui/components/u-badge/u-badge.vue → uni_modules/uview-ui/components/u-badge/u-badge.vue


+ 0 - 0
uview-ui/components/u-button/nvue.scss → uni_modules/uview-ui/components/u-button/nvue.scss


Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно