diff --git a/package.json b/package.json
index 5aecbf8..d7d11b6 100644
--- a/package.json
+++ b/package.json
@@ -89,6 +89,7 @@
"@dcloudio/uni-mp-weixin": "3.0.0-4020420240722002",
"@dcloudio/uni-mp-xhs": "3.0.0-4020420240722002",
"@dcloudio/uni-quickapp-webview": "3.0.0-4020420240722002",
+ "@qiun/uni-ucharts": "2.5.0-20230101",
"pinia": "^2.2.2",
"vue": "^3.4.21",
"wot-design-uni": "^1.3.11"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b6ac004..06c6d5e 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -7,111 +7,114 @@ settings:
dependencies:
'@dcloudio/uni-app':
specifier: 3.0.0-4020420240722002
- version: 3.0.0-4020420240722002(@dcloudio/types@3.4.14)(postcss@8.4.49)(vue@3.5.12)
+ version: 3.0.0-4020420240722002(@dcloudio/types@3.4.14)(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-app-harmony':
specifier: 3.0.0-4020420240722002
- version: 3.0.0-4020420240722002(postcss@8.4.49)(vite@5.2.8)(vue@3.5.12)
+ version: 3.0.0-4020420240722002(postcss@8.4.49)(vite@5.2.8)(vue@3.5.13)
'@dcloudio/uni-app-plus':
specifier: 3.0.0-4020420240722002
- version: 3.0.0-4020420240722002(postcss@8.4.49)(vite@5.2.8)(vue@3.5.12)
+ version: 3.0.0-4020420240722002(postcss@8.4.49)(vite@5.2.8)(vue@3.5.13)
'@dcloudio/uni-components':
specifier: 3.0.0-4020420240722002
- version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-h5':
specifier: 3.0.0-4020420240722002
- version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-mp-alipay':
specifier: 3.0.0-4020420240722002
- version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-mp-baidu':
specifier: 3.0.0-4020420240722002
- version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-mp-jd':
specifier: 3.0.0-4020420240722002
- version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-mp-kuaishou':
specifier: 3.0.0-4020420240722002
- version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-mp-lark':
specifier: 3.0.0-4020420240722002
- version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-mp-qq':
specifier: 3.0.0-4020420240722002
- version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-mp-toutiao':
specifier: 3.0.0-4020420240722002
- version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-mp-weixin':
specifier: 3.0.0-4020420240722002
- version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-mp-xhs':
specifier: 3.0.0-4020420240722002
- version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-quickapp-webview':
specifier: 3.0.0-4020420240722002
- version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
+ '@qiun/uni-ucharts':
+ specifier: 2.5.0-20230101
+ version: 2.5.0-20230101
pinia:
specifier: ^2.2.2
- version: 2.2.6(typescript@4.9.5)(vue@3.5.12)
+ version: 2.2.6(typescript@4.9.5)(vue@3.5.13)
vue:
specifier: ^3.4.21
- version: 3.5.12(typescript@4.9.5)
+ version: 3.5.13(typescript@4.9.5)
wot-design-uni:
specifier: ^1.3.11
- version: 1.3.14(vue@3.5.12)
+ version: 1.3.14(vue@3.5.13)
devDependencies:
'@commitlint/cli':
specifier: ^19.5.0
- version: 19.5.0(@types/node@22.9.0)(typescript@4.9.5)
+ version: 19.6.0(@types/node@22.9.1)(typescript@4.9.5)
'@commitlint/config-conventional':
specifier: ^19.5.0
- version: 19.5.0
+ version: 19.6.0
'@dcloudio/types':
specifier: ^3.4.8
version: 3.4.14
'@dcloudio/uni-automator':
specifier: 3.0.0-4020420240722002
- version: 3.0.0-4020420240722002(jest-environment-node@27.5.1)(jest@27.0.4)(postcss@8.4.49)(vue@3.5.12)
+ version: 3.0.0-4020420240722002(jest-environment-node@27.5.1)(jest@27.0.4)(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-cli-shared':
specifier: 3.0.0-4020420240722002
- version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ version: 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-stacktracey':
specifier: 3.0.0-4020420240722002
version: 3.0.0-4020420240722002
'@dcloudio/vite-plugin-uni':
specifier: 3.0.0-4020420240722002
- version: 3.0.0-4020420240722002(postcss@8.4.49)(vite@5.2.8)(vue@3.5.12)
+ version: 3.0.0-4020420240722002(postcss@8.4.49)(vite@5.2.8)(vue@3.5.13)
'@eslint/js':
specifier: ^9.10.0
- version: 9.14.0
+ version: 9.15.0
'@vue/runtime-core':
specifier: ^3.4.21
- version: 3.5.12
+ version: 3.5.13
commitizen:
specifier: ^4.3.0
- version: 4.3.1(@types/node@22.9.0)(typescript@4.9.5)
+ version: 4.3.1(@types/node@22.9.1)(typescript@4.9.5)
cz-git:
specifier: ^1.9.4
version: 1.11.0
eslint:
specifier: ^9.10.0
- version: 9.14.0
+ version: 9.15.0
eslint-config-prettier:
specifier: ^9.1.0
- version: 9.1.0(eslint@9.14.0)
+ version: 9.1.0(eslint@9.15.0)
eslint-plugin-prettier:
specifier: ^5.2.1
- version: 5.2.1(eslint-config-prettier@9.1.0)(eslint@9.14.0)(prettier@3.3.3)
+ version: 5.2.1(eslint-config-prettier@9.1.0)(eslint@9.15.0)(prettier@3.3.3)
eslint-plugin-vue:
specifier: ^9.28.0
- version: 9.31.0(eslint@9.14.0)
+ version: 9.31.0(eslint@9.15.0)
globals:
specifier: ^15.9.0
version: 15.12.0
husky:
specifier: ^9.1.6
- version: 9.1.6
+ version: 9.1.7
lint-staged:
specifier: ^15.2.10
version: 15.2.10
@@ -159,7 +162,7 @@ devDependencies:
version: 4.9.5
typescript-eslint:
specifier: ^8.6.0
- version: 8.14.0(eslint@9.14.0)(typescript@4.9.5)
+ version: 8.15.0(eslint@9.15.0)(typescript@4.9.5)
unocss:
specifier: ^0.62.4
version: 0.62.4(postcss@8.4.49)(vite@5.2.8)
@@ -168,13 +171,13 @@ devDependencies:
version: 0.62.2
unplugin-auto-import:
specifier: ^0.18.3
- version: 0.18.4
+ version: 0.18.5
vite:
specifier: 5.2.8
- version: 5.2.8(@types/node@22.9.0)(sass@1.79.3)(terser@5.36.0)
+ version: 5.2.8(@types/node@22.9.1)(sass@1.79.3)(terser@5.36.0)
vue-eslint-parser:
specifier: ^9.4.3
- version: 9.4.3(eslint@9.14.0)
+ version: 9.4.3(eslint@9.15.0)
vue-tsc:
specifier: ^1.0.24
version: 1.8.27(typescript@4.9.5)
@@ -191,7 +194,7 @@ packages:
/@antfu/install-pkg@0.4.1:
resolution: {integrity: sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw==}
dependencies:
- package-manager-detector: 0.2.2
+ package-manager-detector: 0.2.4
tinyexec: 0.3.1
dev: true
@@ -1411,14 +1414,14 @@ packages:
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
dev: true
- /@commitlint/cli@19.5.0(@types/node@22.9.0)(typescript@4.9.5):
- resolution: {integrity: sha512-gaGqSliGwB86MDmAAKAtV9SV1SHdmN8pnGq4EJU4+hLisQ7IFfx4jvU4s+pk6tl0+9bv6yT+CaZkufOinkSJIQ==}
+ /@commitlint/cli@19.6.0(@types/node@22.9.1)(typescript@4.9.5):
+ resolution: {integrity: sha512-v17BgGD9w5KnthaKxXnEg6KLq6DYiAxyiN44TpiRtqyW8NSq+Kx99mkEG8Qo6uu6cI5eMzMojW2muJxjmPnF8w==}
engines: {node: '>=v18'}
hasBin: true
dependencies:
'@commitlint/format': 19.5.0
- '@commitlint/lint': 19.5.0
- '@commitlint/load': 19.5.0(@types/node@22.9.0)(typescript@4.9.5)
+ '@commitlint/lint': 19.6.0
+ '@commitlint/load': 19.5.0(@types/node@22.9.1)(typescript@4.9.5)
'@commitlint/read': 19.5.0
'@commitlint/types': 19.5.0
tinyexec: 0.3.1
@@ -1428,8 +1431,8 @@ packages:
- typescript
dev: true
- /@commitlint/config-conventional@19.5.0:
- resolution: {integrity: sha512-OBhdtJyHNPryZKg0fFpZNOBM1ZDbntMvqMuSmpfyP86XSfwzGw4CaoYRG4RutUPg0BTK07VMRIkNJT6wi2zthg==}
+ /@commitlint/config-conventional@19.6.0:
+ resolution: {integrity: sha512-DJT40iMnTYtBtUfw9ApbsLZFke1zKh6llITVJ+x9mtpHD08gsNXaIRqHTmwTZL3dNX5+WoyK7pCN/5zswvkBCQ==}
engines: {node: '>=v18'}
dependencies:
'@commitlint/types': 19.5.0
@@ -1469,25 +1472,25 @@ packages:
chalk: 5.3.0
dev: true
- /@commitlint/is-ignored@19.5.0:
- resolution: {integrity: sha512-0XQ7Llsf9iL/ANtwyZ6G0NGp5Y3EQ8eDQSxv/SRcfJ0awlBY4tHFAvwWbw66FVUaWICH7iE5en+FD9TQsokZ5w==}
+ /@commitlint/is-ignored@19.6.0:
+ resolution: {integrity: sha512-Ov6iBgxJQFR9koOupDPHvcHU9keFupDgtB3lObdEZDroiG4jj1rzky60fbQozFKVYRTUdrBGICHG0YVmRuAJmw==}
engines: {node: '>=v18'}
dependencies:
'@commitlint/types': 19.5.0
semver: 7.6.3
dev: true
- /@commitlint/lint@19.5.0:
- resolution: {integrity: sha512-cAAQwJcRtiBxQWO0eprrAbOurtJz8U6MgYqLz+p9kLElirzSCc0vGMcyCaA1O7AqBuxo11l1XsY3FhOFowLAAg==}
+ /@commitlint/lint@19.6.0:
+ resolution: {integrity: sha512-LRo7zDkXtcIrpco9RnfhOKeg8PAnE3oDDoalnrVU/EVaKHYBWYL1DlRR7+3AWn0JiBqD8yKOfetVxJGdEtZ0tg==}
engines: {node: '>=v18'}
dependencies:
- '@commitlint/is-ignored': 19.5.0
+ '@commitlint/is-ignored': 19.6.0
'@commitlint/parse': 19.5.0
- '@commitlint/rules': 19.5.0
+ '@commitlint/rules': 19.6.0
'@commitlint/types': 19.5.0
dev: true
- /@commitlint/load@19.5.0(@types/node@22.9.0)(typescript@4.9.5):
+ /@commitlint/load@19.5.0(@types/node@22.9.1)(typescript@4.9.5):
resolution: {integrity: sha512-INOUhkL/qaKqwcTUvCE8iIUf5XHsEPCLY9looJ/ipzi7jtGhgmtH7OOFiNvwYgH7mA8osUWOUDV8t4E2HAi4xA==}
engines: {node: '>=v18'}
dependencies:
@@ -1497,7 +1500,7 @@ packages:
'@commitlint/types': 19.5.0
chalk: 5.3.0
cosmiconfig: 9.0.0(typescript@4.9.5)
- cosmiconfig-typescript-loader: 5.1.0(@types/node@22.9.0)(cosmiconfig@9.0.0)(typescript@4.9.5)
+ cosmiconfig-typescript-loader: 5.1.0(@types/node@22.9.1)(cosmiconfig@9.0.0)(typescript@4.9.5)
lodash.isplainobject: 4.0.6
lodash.merge: 4.6.2
lodash.uniq: 4.5.0
@@ -1543,8 +1546,8 @@ packages:
resolve-from: 5.0.0
dev: true
- /@commitlint/rules@19.5.0:
- resolution: {integrity: sha512-hDW5TPyf/h1/EufSHEKSp6Hs+YVsDMHazfJ2azIk9tHPXS6UqSz1dIRs1gpqS3eMXgtkT7JH6TW4IShdqOwhAw==}
+ /@commitlint/rules@19.6.0:
+ resolution: {integrity: sha512-1f2reW7lbrI0X0ozZMesS/WZxgPa4/wi56vFuJENBmed6mWq5KsheN/nxqnl/C23ioxpPO/PL6tXpiiFy5Bhjw==}
engines: {node: '>=v18'}
dependencies:
'@commitlint/ensure': 19.5.0
@@ -1610,13 +1613,13 @@ packages:
/@dcloudio/types@3.4.14:
resolution: {integrity: sha512-VolQeZfTh8pQFsr2IlfIVX93blfvGTuBoJuZUc7iWOqtHV8gDrq6fXLhzsVlgZyuhhRZLOxlo33rkEqnY+ucAw==}
- /@dcloudio/uni-app-harmony@3.0.0-4020420240722002(postcss@8.4.49)(vite@5.2.8)(vue@3.5.12):
+ /@dcloudio/uni-app-harmony@3.0.0-4020420240722002(postcss@8.4.49)(vite@5.2.8)(vue@3.5.13):
resolution: {integrity: sha512-oa2oaLLgU3L9oOy2mrxUui9tEqof/2pWzhrx8RfNLBDcbIvN5gXEkxAJopx2WbCvHqM/0fx0GofM52vFWPvJUA==}
dependencies:
- '@dcloudio/uni-app-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vite@5.2.8)(vue@3.5.12)
+ '@dcloudio/uni-app-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vite@5.2.8)(vue@3.5.13)
debug: 4.3.7
fs-extra: 10.1.0
- licia: 1.44.0
+ licia: 1.45.0
postcss-selector-parser: 6.1.2
transitivePeerDependencies:
- '@nuxt/kit'
@@ -1629,15 +1632,15 @@ packages:
- vue
dev: false
- /@dcloudio/uni-app-plus@3.0.0-4020420240722002(postcss@8.4.49)(vite@5.2.8)(vue@3.5.12):
+ /@dcloudio/uni-app-plus@3.0.0-4020420240722002(postcss@8.4.49)(vite@5.2.8)(vue@3.5.13):
resolution: {integrity: sha512-Gbd/tXSZqHlGUrryZ1NCTkv/MJH/tkspnLdofPpTdk3+dUCO6/5cd05UrCYLQaqSqGwHL4VUZedyZoL0YqolbA==}
dependencies:
- '@dcloudio/uni-app-uts': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
- '@dcloudio/uni-app-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vite@5.2.8)(vue@3.5.12)
+ '@dcloudio/uni-app-uts': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
+ '@dcloudio/uni-app-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vite@5.2.8)(vue@3.5.13)
'@dcloudio/uni-app-vue': 3.0.0-4020420240722002
debug: 4.3.7
fs-extra: 10.1.0
- licia: 1.44.0
+ licia: 1.45.0
postcss-selector-parser: 6.1.2
transitivePeerDependencies:
- '@nuxt/kit'
@@ -1650,12 +1653,12 @@ packages:
- vue
dev: false
- /@dcloudio/uni-app-uts@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12):
+ /@dcloudio/uni-app-uts@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13):
resolution: {integrity: sha512-KzuzhZaAQT41vs5fp7YuZYu1iXWVW9QRxZmhYFjyfFvuVBgVy64PPVV9HdB0j3L3vcj/J/o4b/iBBfl4U7wfwg==}
dependencies:
'@babel/parser': 7.26.2
'@babel/types': 7.26.0
- '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-i18n': 3.0.0-4020420240722002
'@dcloudio/uni-nvue-styler': 3.0.0-4020420240722002
'@dcloudio/uni-shared': 3.0.0-4020420240722002
@@ -1671,7 +1674,7 @@ packages:
es-module-lexer: 1.5.4
estree-walker: 2.0.2
fs-extra: 10.1.0
- magic-string: 0.30.12
+ magic-string: 0.30.13
picocolors: 1.1.1
source-map-js: 1.2.1
unplugin-auto-import: 0.16.7
@@ -1685,15 +1688,15 @@ packages:
- vue
dev: false
- /@dcloudio/uni-app-vite@3.0.0-4020420240722002(postcss@8.4.49)(vite@5.2.8)(vue@3.5.12):
+ /@dcloudio/uni-app-vite@3.0.0-4020420240722002(postcss@8.4.49)(vite@5.2.8)(vue@3.5.13):
resolution: {integrity: sha512-pqB5Cn9qUP8GRZbHP9u+kXFy1Gl/S7kerqntVgRQKMIrs1zCAa9NCQlGDUQIGj5MlWGqU+/mw20TdpyibEW+/w==}
dependencies:
- '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-i18n': 3.0.0-4020420240722002
'@dcloudio/uni-nvue-styler': 3.0.0-4020420240722002
'@dcloudio/uni-shared': 3.0.0-4020420240722002
'@rollup/pluginutils': 5.1.3
- '@vitejs/plugin-vue': 5.2.0(vite@5.2.8)(vue@3.5.12)
+ '@vitejs/plugin-vue': 5.2.0(vite@5.2.8)(vue@3.5.13)
'@vue/compiler-dom': 3.4.21
'@vue/compiler-sfc': 3.4.21
debug: 4.3.7
@@ -1714,18 +1717,18 @@ packages:
resolution: {integrity: sha512-pxtIzEhdapE9JhGrTIPi271yr0c2leEhtO6xsTsdrfhswFqbh4BPVlT89XdioOhGtIOaS5m5hn6t6UVvuH0RDw==}
dev: false
- /@dcloudio/uni-app@3.0.0-4020420240722002(@dcloudio/types@3.4.14)(postcss@8.4.49)(vue@3.5.12):
+ /@dcloudio/uni-app@3.0.0-4020420240722002(@dcloudio/types@3.4.14)(postcss@8.4.49)(vue@3.5.13):
resolution: {integrity: sha512-TxRH2Q5akpJawxEcC9D+YKzhLOz5IsLpFkMabVFLWEZfgeDE2Ft2YJALwAxJSCYD4o0BcGtDEoYz68uWDwk0Ng==}
peerDependencies:
'@dcloudio/types': ^3.4.8
dependencies:
'@dcloudio/types': 3.4.14
- '@dcloudio/uni-cloud': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
- '@dcloudio/uni-components': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-cloud': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
+ '@dcloudio/uni-components': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-i18n': 3.0.0-4020420240722002
- '@dcloudio/uni-push': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-push': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-shared': 3.0.0-4020420240722002
- '@dcloudio/uni-stat': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-stat': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@vue/shared': 3.4.21
transitivePeerDependencies:
- '@nuxt/kit'
@@ -1737,13 +1740,13 @@ packages:
- vue
dev: false
- /@dcloudio/uni-automator@3.0.0-4020420240722002(jest-environment-node@27.5.1)(jest@27.0.4)(postcss@8.4.49)(vue@3.5.12):
+ /@dcloudio/uni-automator@3.0.0-4020420240722002(jest-environment-node@27.5.1)(jest@27.0.4)(postcss@8.4.49)(vue@3.5.13):
resolution: {integrity: sha512-fgkotGZj/ycS4fElPGe89wXnJeUBaI3VCPyjS1C2qWY77EYfjeyrZDw6l0eHzA9YDOvZmYPhzACMgjwbfsEoLQ==}
peerDependencies:
jest: 27.0.4
jest-environment-node: 27.5.1
dependencies:
- '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
address: 1.2.2
cross-env: 7.0.3
debug: 4.3.7
@@ -1752,7 +1755,7 @@ packages:
jest: 27.0.4
jest-environment-node: 27.5.1
jsonc-parser: 3.3.1
- licia: 1.44.0
+ licia: 1.45.0
merge: 2.1.1
qrcode-reader: 1.0.4
qrcode-terminal: 0.12.0
@@ -1769,7 +1772,7 @@ packages:
- vue
dev: true
- /@dcloudio/uni-cli-shared@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12):
+ /@dcloudio/uni-cli-shared@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13):
resolution: {integrity: sha512-cU9iOmHcOSFYQ8Ucy+ipt8AaQWdYeaW+S433aLKfeyv/6Ehqn/C2aFSFjkslqYsKfeQ7ZymqDn6FcCnz7HYSvQ==}
engines: {node: ^14.18.0 || >=16.0.0}
dependencies:
@@ -1788,7 +1791,7 @@ packages:
'@vue/compiler-dom': 3.4.21
'@vue/compiler-sfc': 3.4.21
'@vue/compiler-ssr': 3.4.21
- '@vue/server-renderer': 3.4.21(vue@3.5.12)
+ '@vue/server-renderer': 3.4.21(vue@3.5.13)
'@vue/shared': 3.4.21
adm-zip: 0.5.16
autoprefixer: 10.4.20(postcss@8.4.49)
@@ -1805,7 +1808,7 @@ packages:
isbinaryfile: 5.0.4
jsonc-parser: 3.3.1
lines-and-columns: 2.0.4
- magic-string: 0.30.12
+ magic-string: 0.30.13
merge: 2.1.1
mime: 3.0.0
module-alias: 2.2.3
@@ -1829,10 +1832,10 @@ packages:
- ts-node
- vue
- /@dcloudio/uni-cloud@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12):
+ /@dcloudio/uni-cloud@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13):
resolution: {integrity: sha512-44J/k1dCcSYHLgqdedo1/EQE363C9POXjQfWJPDDIZc00b6Cqf6O16IPJowqbNs6lusKMZIrMp1mTdU2iQbpBw==}
dependencies:
- '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-i18n': 3.0.0-4020420240722002
'@dcloudio/uni-shared': 3.0.0-4020420240722002
'@vue/shared': 3.4.21
@@ -1847,11 +1850,11 @@ packages:
- vue
dev: false
- /@dcloudio/uni-components@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12):
+ /@dcloudio/uni-components@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13):
resolution: {integrity: sha512-zMZSpPuxsKSkImB7fYmQMuO5x9hD5lbiFxq1PUByfG7O9nrMh1/ta7QA6QPu+R1haU0mNUXZz5PGgKUZ5wKnbw==}
dependencies:
- '@dcloudio/uni-cloud': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
- '@dcloudio/uni-h5': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-cloud': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
+ '@dcloudio/uni-h5': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-i18n': 3.0.0-4020420240722002
transitivePeerDependencies:
- '@nuxt/kit'
@@ -1863,15 +1866,15 @@ packages:
- vue
dev: false
- /@dcloudio/uni-h5-vite@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12):
+ /@dcloudio/uni-h5-vite@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13):
resolution: {integrity: sha512-TFD+vYVwaH1tHH1xavRHH+ZTz0Irecx7dHf1ZP2rDizzigx6piCyTlS1W3zf/GFzu8bepLjANEcyfZ1Wn0DCzA==}
dependencies:
- '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-shared': 3.0.0-4020420240722002
'@rollup/pluginutils': 5.1.3
'@vue/compiler-dom': 3.4.21
'@vue/compiler-sfc': 3.4.21
- '@vue/server-renderer': 3.4.21(vue@3.5.12)
+ '@vue/server-renderer': 3.4.21(vue@3.5.13)
'@vue/shared': 3.4.21
debug: 4.3.7
fs-extra: 10.1.0
@@ -1887,29 +1890,29 @@ packages:
- vue
dev: false
- /@dcloudio/uni-h5-vue@3.0.0-4020420240722002(vue@3.5.12):
+ /@dcloudio/uni-h5-vue@3.0.0-4020420240722002(vue@3.5.13):
resolution: {integrity: sha512-1iv1aJHyFFMhEmggEjzys3hcU0PzTEGD/LuyP7FmphJeUM3h3pMRmcpdVErXjjbfsw6Vcl5XpfKw49wWpF5wdw==}
dependencies:
'@dcloudio/uni-shared': 3.0.0-4020420240722002
- '@vue/server-renderer': 3.4.21(vue@3.5.12)
+ '@vue/server-renderer': 3.4.21(vue@3.5.13)
transitivePeerDependencies:
- vue
dev: false
- /@dcloudio/uni-h5@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12):
+ /@dcloudio/uni-h5@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13):
resolution: {integrity: sha512-6S6B2WAnv2hgb2UNdYilDbP7uM9aFRdo+j+7as6aomKzNrepRW66qnqo7gThCx6f1T33TIZ8maESAMGZnW2/YA==}
dependencies:
- '@dcloudio/uni-h5-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
- '@dcloudio/uni-h5-vue': 3.0.0-4020420240722002(vue@3.5.12)
+ '@dcloudio/uni-h5-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
+ '@dcloudio/uni-h5-vue': 3.0.0-4020420240722002(vue@3.5.13)
'@dcloudio/uni-i18n': 3.0.0-4020420240722002
'@dcloudio/uni-shared': 3.0.0-4020420240722002
- '@vue/server-renderer': 3.4.21(vue@3.5.12)
+ '@vue/server-renderer': 3.4.21(vue@3.5.13)
'@vue/shared': 3.4.21
debug: 4.3.7
localstorage-polyfill: 1.0.1
postcss-selector-parser: 6.1.2
safe-area-insets: 1.4.1
- vue-router: 4.4.5(vue@3.5.12)
+ vue-router: 4.4.5(vue@3.5.13)
xmlhttprequest: 1.8.0
transitivePeerDependencies:
- '@nuxt/kit'
@@ -1924,11 +1927,11 @@ packages:
/@dcloudio/uni-i18n@3.0.0-4020420240722002:
resolution: {integrity: sha512-AYFfypLBqA6mWqvAsSipboZF8YLk3N6ok6Ud1EtIe4Lk0XthlGNX7EacSyfb8cPVGtt5mamkLP6z+butG+nuZg==}
- /@dcloudio/uni-mp-alipay@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12):
+ /@dcloudio/uni-mp-alipay@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13):
resolution: {integrity: sha512-eC93bKMDn7LC1K9yDkkebOeuLEISHgdmfxK5MDcBWEEw0X/GSKpKclUzRUEuFFKtAJCT++6gDN/rMYI5lMl+TQ==}
dependencies:
- '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
- '@dcloudio/uni-mp-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
+ '@dcloudio/uni-mp-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-mp-vue': 3.0.0-4020420240722002
'@dcloudio/uni-shared': 3.0.0-4020420240722002
'@vue/compiler-core': 3.4.21
@@ -1943,19 +1946,19 @@ packages:
- vue
dev: false
- /@dcloudio/uni-mp-baidu@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12):
+ /@dcloudio/uni-mp-baidu@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13):
resolution: {integrity: sha512-DLfOW03QK4FilySJ5IKMka8GRwkYKkwmA4fjG27ZmIWaziHec+IbDyRXyJ4DN2JIC/WKSTYR96bGNGSAQcWQDw==}
dependencies:
- '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
- '@dcloudio/uni-mp-compiler': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
- '@dcloudio/uni-mp-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
+ '@dcloudio/uni-mp-compiler': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
+ '@dcloudio/uni-mp-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-mp-vue': 3.0.0-4020420240722002
- '@dcloudio/uni-mp-weixin': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-mp-weixin': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-shared': 3.0.0-4020420240722002
'@vue/compiler-core': 3.4.21
'@vue/shared': 3.4.21
jimp: 0.10.3
- licia: 1.44.0
+ licia: 1.45.0
qrcode-reader: 1.0.4
qrcode-terminal: 0.12.0
ws: 8.18.0
@@ -1972,13 +1975,13 @@ packages:
- vue
dev: false
- /@dcloudio/uni-mp-compiler@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12):
+ /@dcloudio/uni-mp-compiler@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13):
resolution: {integrity: sha512-j3nTBkxRut1ESJDOhMpioTVbpT6zhNseT3KQd7/1J3AF5GCi3pJ7gu7LvMp5oD3F1cmwvruFLqkOi/Q5AVcZyg==}
dependencies:
'@babel/generator': 7.26.2
'@babel/parser': 7.26.2
'@babel/types': 7.26.0
- '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-shared': 3.0.0-4020420240722002
'@vue/compiler-core': 3.4.21
'@vue/compiler-dom': 3.4.21
@@ -1994,12 +1997,12 @@ packages:
- vue
dev: false
- /@dcloudio/uni-mp-jd@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12):
+ /@dcloudio/uni-mp-jd@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13):
resolution: {integrity: sha512-WecNRAA9TnNQwe9XzIbf2gdEO3k+01Eee9f4TbN6tCvGWbF2YWNahEgFCE1lJchbsxuFwddIDtW8w4HiHyl/3w==}
dependencies:
- '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
- '@dcloudio/uni-mp-compiler': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
- '@dcloudio/uni-mp-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
+ '@dcloudio/uni-mp-compiler': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
+ '@dcloudio/uni-mp-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-mp-vue': 3.0.0-4020420240722002
'@dcloudio/uni-shared': 3.0.0-4020420240722002
'@vue/shared': 3.4.21
@@ -2013,14 +2016,14 @@ packages:
- vue
dev: false
- /@dcloudio/uni-mp-kuaishou@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12):
+ /@dcloudio/uni-mp-kuaishou@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13):
resolution: {integrity: sha512-4mcY73GTgd/IdhlSVTk9LPBt/+orVu828LPlQ66rJBXfkMpzGU6LEeYsGlKi1th21v09vByAt37kvdjfqNk3oQ==}
dependencies:
- '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
- '@dcloudio/uni-mp-compiler': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
- '@dcloudio/uni-mp-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
+ '@dcloudio/uni-mp-compiler': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
+ '@dcloudio/uni-mp-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-mp-vue': 3.0.0-4020420240722002
- '@dcloudio/uni-mp-weixin': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-mp-weixin': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-shared': 3.0.0-4020420240722002
'@vue/compiler-core': 3.4.21
'@vue/shared': 3.4.21
@@ -2037,13 +2040,13 @@ packages:
- vue
dev: false
- /@dcloudio/uni-mp-lark@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12):
+ /@dcloudio/uni-mp-lark@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13):
resolution: {integrity: sha512-6Ks70f0bDCYmUHDi/VBP20QmfWaAwE88HPlJv4W52iAQZx1VGln/JzbCzHglcy+X7HuyjpOzjTEXRwo+olnoWA==}
dependencies:
- '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
- '@dcloudio/uni-mp-compiler': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
- '@dcloudio/uni-mp-toutiao': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
- '@dcloudio/uni-mp-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
+ '@dcloudio/uni-mp-compiler': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
+ '@dcloudio/uni-mp-toutiao': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
+ '@dcloudio/uni-mp-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-mp-vue': 3.0.0-4020420240722002
'@dcloudio/uni-shared': 3.0.0-4020420240722002
'@vue/compiler-core': 3.4.21
@@ -2058,11 +2061,11 @@ packages:
- vue
dev: false
- /@dcloudio/uni-mp-qq@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12):
+ /@dcloudio/uni-mp-qq@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13):
resolution: {integrity: sha512-KFCxpKvfIVOpw2iW6bf1UsR0ScqileUDi0niWernb/OkvefEznJukAAWFlpYHv+SMMCiC7cNm5L3mDFgti3+qA==}
dependencies:
- '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
- '@dcloudio/uni-mp-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
+ '@dcloudio/uni-mp-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-mp-vue': 3.0.0-4020420240722002
'@dcloudio/uni-shared': 3.0.0-4020420240722002
'@vue/shared': 3.4.21
@@ -2077,12 +2080,12 @@ packages:
- vue
dev: false
- /@dcloudio/uni-mp-toutiao@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12):
+ /@dcloudio/uni-mp-toutiao@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13):
resolution: {integrity: sha512-mMyWaAvaMNn4fW5JNveK2gfa6rh7qzS1ffSPSx/NkzJzFYsKrLPuyfIU60LgN6a5YM3iNGoI3KYpRvgLjws4sg==}
dependencies:
- '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
- '@dcloudio/uni-mp-compiler': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
- '@dcloudio/uni-mp-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
+ '@dcloudio/uni-mp-compiler': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
+ '@dcloudio/uni-mp-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-mp-vue': 3.0.0-4020420240722002
'@dcloudio/uni-shared': 3.0.0-4020420240722002
'@vue/compiler-core': 3.4.21
@@ -2097,12 +2100,12 @@ packages:
- vue
dev: false
- /@dcloudio/uni-mp-vite@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12):
+ /@dcloudio/uni-mp-vite@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13):
resolution: {integrity: sha512-KlNM780RwZ6POpFre78v9fxiT5dcKTSozDoBGs3qeUH+XCdKjMYGQyuy1QFMd6rqbwsEwGnhK57l1fiMi3yVOg==}
dependencies:
- '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-i18n': 3.0.0-4020420240722002
- '@dcloudio/uni-mp-compiler': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-mp-compiler': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-mp-vue': 3.0.0-4020420240722002
'@dcloudio/uni-shared': 3.0.0-4020420240722002
'@vue/compiler-sfc': 3.4.21
@@ -2125,16 +2128,16 @@ packages:
'@vue/shared': 3.4.21
dev: false
- /@dcloudio/uni-mp-weixin@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12):
+ /@dcloudio/uni-mp-weixin@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13):
resolution: {integrity: sha512-c89Grd/9hadCl3zzL4ydgenS7fEIxwaizEGqxn+1cgy9vuCnnh7eVL5V3JkxwCDwMsf8t7ltxgdQEUX1Sd/c5A==}
dependencies:
- '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
- '@dcloudio/uni-mp-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
+ '@dcloudio/uni-mp-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-mp-vue': 3.0.0-4020420240722002
'@dcloudio/uni-shared': 3.0.0-4020420240722002
'@vue/shared': 3.4.21
jimp: 0.10.3
- licia: 1.44.0
+ licia: 1.45.0
qrcode-reader: 1.0.4
qrcode-terminal: 0.12.0
ws: 8.18.0
@@ -2151,12 +2154,12 @@ packages:
- vue
dev: false
- /@dcloudio/uni-mp-xhs@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12):
+ /@dcloudio/uni-mp-xhs@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13):
resolution: {integrity: sha512-xEXe5XRlF8cFVREGlNTocbYSZS6XLT2GBDt9XUW9Py98cVOdyckl/bi4vp7ui0poV4Z9T4hVNG2cC7XDuqwLeQ==}
dependencies:
- '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
- '@dcloudio/uni-mp-compiler': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
- '@dcloudio/uni-mp-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
+ '@dcloudio/uni-mp-compiler': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
+ '@dcloudio/uni-mp-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-mp-vue': 3.0.0-4020420240722002
'@dcloudio/uni-shared': 3.0.0-4020420240722002
'@vue/shared': 3.4.21
@@ -2177,10 +2180,10 @@ packages:
postcss: 8.4.49
dev: false
- /@dcloudio/uni-push@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12):
+ /@dcloudio/uni-push@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13):
resolution: {integrity: sha512-YvU9PS005OdVbsuhJ++1X7pS7vbX0WPeyZSLgi7zu05ROVZSH41vu54HlNvL1sfopKEWtHl4BKlruGV2muDVoQ==}
dependencies:
- '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
transitivePeerDependencies:
- '@nuxt/kit'
- '@vueuse/core'
@@ -2191,11 +2194,11 @@ packages:
- vue
dev: false
- /@dcloudio/uni-quickapp-webview@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12):
+ /@dcloudio/uni-quickapp-webview@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13):
resolution: {integrity: sha512-o0ekdcrQUAX1oNGbACNdLTGEzP75LginMMRjpkYyhrqz0cVXYlmzybY8PF+LvoYvmAEQV30ECR9FVtayFpVyZw==}
dependencies:
- '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
- '@dcloudio/uni-mp-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
+ '@dcloudio/uni-mp-vite': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-mp-vue': 3.0.0-4020420240722002
'@dcloudio/uni-shared': 3.0.0-4020420240722002
'@vue/shared': 3.4.21
@@ -2218,10 +2221,10 @@ packages:
resolution: {integrity: sha512-SFc5wFqGBd5Gfk3uq0WPl3T1YsPcRP17euilbjJHvrdzAs3U5QlI9Azu6IYYTOBhxsRa5n234dfu+YHjvHysrQ==}
dev: true
- /@dcloudio/uni-stat@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12):
+ /@dcloudio/uni-stat@3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13):
resolution: {integrity: sha512-eLiNyyGlaHuEtNOBLIcr7x4+aEsg7IEHq8RlLl21zQcpvDAFaa3IwMtyMaLZa5UUg/LPQA6vITCHx/O2R0uXrQ==}
dependencies:
- '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-shared': 3.0.0-4020420240722002
debug: 4.3.7
transitivePeerDependencies:
@@ -2234,7 +2237,7 @@ packages:
- vue
dev: false
- /@dcloudio/vite-plugin-uni@3.0.0-4020420240722002(postcss@8.4.49)(vite@5.2.8)(vue@3.5.12):
+ /@dcloudio/vite-plugin-uni@3.0.0-4020420240722002(postcss@8.4.49)(vite@5.2.8)(vue@3.5.13):
resolution: {integrity: sha512-+SYpD22swzwOtyiaOWyknRFpkc2YD8UNFoz+fAVEE6GEK48kvWAP1KpeY8iVsTObkrTs+1Oz4yr8QGZVqE3ksg==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
@@ -2244,12 +2247,12 @@ packages:
'@babel/core': 7.26.0
'@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.0)
'@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.26.0)
- '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.12)
+ '@dcloudio/uni-cli-shared': 3.0.0-4020420240722002(postcss@8.4.49)(vue@3.5.13)
'@dcloudio/uni-shared': 3.0.0-4020420240722002
'@rollup/pluginutils': 5.1.3
'@vitejs/plugin-legacy': 5.4.3(terser@5.36.0)(vite@5.2.8)
- '@vitejs/plugin-vue': 5.2.0(vite@5.2.8)(vue@3.5.12)
- '@vitejs/plugin-vue-jsx': 3.1.0(vite@5.2.8)(vue@3.5.12)
+ '@vitejs/plugin-vue': 5.2.0(vite@5.2.8)(vue@3.5.13)
+ '@vitejs/plugin-vue-jsx': 3.1.0(vite@5.2.8)(vue@3.5.13)
'@vue/compiler-core': 3.4.21
'@vue/compiler-dom': 3.4.21
'@vue/compiler-sfc': 3.4.21
@@ -2262,11 +2265,11 @@ packages:
fs-extra: 10.1.0
hash-sum: 2.0.0
jsonc-parser: 3.3.1
- magic-string: 0.30.12
+ magic-string: 0.30.13
picocolors: 1.1.1
terser: 5.36.0
unplugin-auto-import: 0.16.7
- vite: 5.2.8(@types/node@22.9.0)(sass@1.79.3)(terser@5.36.0)
+ vite: 5.2.8(@types/node@22.9.1)(sass@1.79.3)(terser@5.36.0)
transitivePeerDependencies:
- '@nuxt/kit'
- '@vueuse/core'
@@ -2681,13 +2684,13 @@ packages:
dev: true
optional: true
- /@eslint-community/eslint-utils@4.4.1(eslint@9.14.0):
+ /@eslint-community/eslint-utils@4.4.1(eslint@9.15.0):
resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
dependencies:
- eslint: 9.14.0
+ eslint: 9.15.0
eslint-visitor-keys: 3.4.3
dev: true
@@ -2696,8 +2699,8 @@ packages:
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
dev: true
- /@eslint/config-array@0.18.0:
- resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==}
+ /@eslint/config-array@0.19.0:
+ resolution: {integrity: sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dependencies:
'@eslint/object-schema': 2.1.4
@@ -2707,13 +2710,13 @@ packages:
- supports-color
dev: true
- /@eslint/core@0.7.0:
- resolution: {integrity: sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==}
+ /@eslint/core@0.9.0:
+ resolution: {integrity: sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dev: true
- /@eslint/eslintrc@3.1.0:
- resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==}
+ /@eslint/eslintrc@3.2.0:
+ resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dependencies:
ajv: 6.12.6
@@ -2729,8 +2732,8 @@ packages:
- supports-color
dev: true
- /@eslint/js@9.14.0:
- resolution: {integrity: sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==}
+ /@eslint/js@9.15.0:
+ resolution: {integrity: sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dev: true
@@ -2739,8 +2742,8 @@ packages:
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dev: true
- /@eslint/plugin-kit@0.2.2:
- resolution: {integrity: sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==}
+ /@eslint/plugin-kit@0.2.3:
+ resolution: {integrity: sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dependencies:
levn: 0.4.1
@@ -2786,7 +2789,7 @@ packages:
'@iconify/types': 2.0.0
debug: 4.3.7
kolorist: 1.8.0
- local-pkg: 0.5.0
+ local-pkg: 0.5.1
mlly: 1.7.3
transitivePeerDependencies:
- supports-color
@@ -2862,7 +2865,7 @@ packages:
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dependencies:
'@jest/types': 27.5.1
- '@types/node': 22.9.0
+ '@types/node': 22.9.1
chalk: 4.1.2
jest-message-util: 27.5.1
jest-util: 27.5.1
@@ -2883,7 +2886,7 @@ packages:
'@jest/test-result': 27.5.1
'@jest/transform': 27.5.1
'@jest/types': 27.5.1
- '@types/node': 22.9.0
+ '@types/node': 22.9.1
ansi-escapes: 4.3.2
chalk: 4.1.2
emittery: 0.8.1
@@ -2920,7 +2923,7 @@ packages:
dependencies:
'@jest/fake-timers': 27.5.1
'@jest/types': 27.5.1
- '@types/node': 22.9.0
+ '@types/node': 22.9.1
jest-mock: 27.5.1
dev: true
@@ -2930,7 +2933,7 @@ packages:
dependencies:
'@jest/types': 27.5.1
'@sinonjs/fake-timers': 8.1.0
- '@types/node': 22.9.0
+ '@types/node': 22.9.1
jest-message-util: 27.5.1
jest-mock: 27.5.1
jest-util: 27.5.1
@@ -2959,7 +2962,7 @@ packages:
'@jest/test-result': 27.5.1
'@jest/transform': 27.5.1
'@jest/types': 27.5.1
- '@types/node': 22.9.0
+ '@types/node': 22.9.1
chalk: 4.1.2
collect-v8-coverage: 1.0.2
exit: 0.1.2
@@ -3043,7 +3046,7 @@ packages:
dependencies:
'@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports': 3.0.4
- '@types/node': 22.9.0
+ '@types/node': 22.9.1
'@types/yargs': 16.0.9
chalk: 4.1.2
dev: true
@@ -3525,6 +3528,10 @@ packages:
resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==}
dev: true
+ /@qiun/uni-ucharts@2.5.0-20230101:
+ resolution: {integrity: sha512-qpgzAUgrShgKNn0uMoN54n6/MkFeQQpK2gur0Fzokn8oTIMCVjTfnt8C2UhD20pPlm6MFxwkWF+bsJ3qd4QMvg==}
+ dev: false
+
/@rollup/pluginutils@5.1.3:
resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==}
engines: {node: '>=14.0.0'}
@@ -3538,136 +3545,136 @@ packages:
estree-walker: 2.0.2
picomatch: 4.0.2
- /@rollup/rollup-android-arm-eabi@4.26.0:
- resolution: {integrity: sha512-gJNwtPDGEaOEgejbaseY6xMFu+CPltsc8/T+diUTTbOQLqD+bnrJq9ulH6WD69TqwqWmrfRAtUv30cCFZlbGTQ==}
+ /@rollup/rollup-android-arm-eabi@4.27.3:
+ resolution: {integrity: sha512-EzxVSkIvCFxUd4Mgm4xR9YXrcp976qVaHnqom/Tgm+vU79k4vV4eYTjmRvGfeoW8m9LVcsAy/lGjcgVegKEhLQ==}
cpu: [arm]
os: [android]
requiresBuild: true
optional: true
- /@rollup/rollup-android-arm64@4.26.0:
- resolution: {integrity: sha512-YJa5Gy8mEZgz5JquFruhJODMq3lTHWLm1fOy+HIANquLzfIOzE9RA5ie3JjCdVb9r46qfAQY/l947V0zfGJ0OQ==}
+ /@rollup/rollup-android-arm64@4.27.3:
+ resolution: {integrity: sha512-LJc5pDf1wjlt9o/Giaw9Ofl+k/vLUaYsE2zeQGH85giX2F+wn/Cg8b3c5CDP3qmVmeO5NzwVUzQQxwZvC2eQKw==}
cpu: [arm64]
os: [android]
requiresBuild: true
optional: true
- /@rollup/rollup-darwin-arm64@4.26.0:
- resolution: {integrity: sha512-ErTASs8YKbqTBoPLp/kA1B1Um5YSom8QAc4rKhg7b9tyyVqDBlQxy7Bf2wW7yIlPGPg2UODDQcbkTlruPzDosw==}
+ /@rollup/rollup-darwin-arm64@4.27.3:
+ resolution: {integrity: sha512-OuRysZ1Mt7wpWJ+aYKblVbJWtVn3Cy52h8nLuNSzTqSesYw1EuN6wKp5NW/4eSre3mp12gqFRXOKTcN3AI3LqA==}
cpu: [arm64]
os: [darwin]
requiresBuild: true
optional: true
- /@rollup/rollup-darwin-x64@4.26.0:
- resolution: {integrity: sha512-wbgkYDHcdWW+NqP2mnf2NOuEbOLzDblalrOWcPyY6+BRbVhliavon15UploG7PpBRQ2bZJnbmh8o3yLoBvDIHA==}
+ /@rollup/rollup-darwin-x64@4.27.3:
+ resolution: {integrity: sha512-xW//zjJMlJs2sOrCmXdB4d0uiilZsOdlGQIC/jjmMWT47lkLLoB1nsNhPUcnoqyi5YR6I4h+FjBpILxbEy8JRg==}
cpu: [x64]
os: [darwin]
requiresBuild: true
optional: true
- /@rollup/rollup-freebsd-arm64@4.26.0:
- resolution: {integrity: sha512-Y9vpjfp9CDkAG4q/uwuhZk96LP11fBz/bYdyg9oaHYhtGZp7NrbkQrj/66DYMMP2Yo/QPAsVHkV891KyO52fhg==}
+ /@rollup/rollup-freebsd-arm64@4.27.3:
+ resolution: {integrity: sha512-58E0tIcwZ+12nK1WiLzHOD8I0d0kdrY/+o7yFVPRHuVGY3twBwzwDdTIBGRxLmyjciMYl1B/U515GJy+yn46qw==}
cpu: [arm64]
os: [freebsd]
requiresBuild: true
optional: true
- /@rollup/rollup-freebsd-x64@4.26.0:
- resolution: {integrity: sha512-A/jvfCZ55EYPsqeaAt/yDAG4q5tt1ZboWMHEvKAH9Zl92DWvMIbnZe/f/eOXze65aJaaKbL+YeM0Hz4kLQvdwg==}
+ /@rollup/rollup-freebsd-x64@4.27.3:
+ resolution: {integrity: sha512-78fohrpcVwTLxg1ZzBMlwEimoAJmY6B+5TsyAZ3Vok7YabRBUvjYTsRXPTjGEvv/mfgVBepbW28OlMEz4w8wGA==}
cpu: [x64]
os: [freebsd]
requiresBuild: true
optional: true
- /@rollup/rollup-linux-arm-gnueabihf@4.26.0:
- resolution: {integrity: sha512-paHF1bMXKDuizaMODm2bBTjRiHxESWiIyIdMugKeLnjuS1TCS54MF5+Y5Dx8Ui/1RBPVRE09i5OUlaLnv8OGnA==}
+ /@rollup/rollup-linux-arm-gnueabihf@4.27.3:
+ resolution: {integrity: sha512-h2Ay79YFXyQi+QZKo3ISZDyKaVD7uUvukEHTOft7kh00WF9mxAaxZsNs3o/eukbeKuH35jBvQqrT61fzKfAB/Q==}
cpu: [arm]
os: [linux]
libc: [glibc]
requiresBuild: true
optional: true
- /@rollup/rollup-linux-arm-musleabihf@4.26.0:
- resolution: {integrity: sha512-cwxiHZU1GAs+TMxvgPfUDtVZjdBdTsQwVnNlzRXC5QzIJ6nhfB4I1ahKoe9yPmoaA/Vhf7m9dB1chGPpDRdGXg==}
+ /@rollup/rollup-linux-arm-musleabihf@4.27.3:
+ resolution: {integrity: sha512-Sv2GWmrJfRY57urktVLQ0VKZjNZGogVtASAgosDZ1aUB+ykPxSi3X1nWORL5Jk0sTIIwQiPH7iE3BMi9zGWfkg==}
cpu: [arm]
os: [linux]
libc: [musl]
requiresBuild: true
optional: true
- /@rollup/rollup-linux-arm64-gnu@4.26.0:
- resolution: {integrity: sha512-4daeEUQutGRCW/9zEo8JtdAgtJ1q2g5oHaoQaZbMSKaIWKDQwQ3Yx0/3jJNmpzrsScIPtx/V+1AfibLisb3AMQ==}
+ /@rollup/rollup-linux-arm64-gnu@4.27.3:
+ resolution: {integrity: sha512-FPoJBLsPW2bDNWjSrwNuTPUt30VnfM8GPGRoLCYKZpPx0xiIEdFip3dH6CqgoT0RnoGXptaNziM0WlKgBc+OWQ==}
cpu: [arm64]
os: [linux]
libc: [glibc]
requiresBuild: true
optional: true
- /@rollup/rollup-linux-arm64-musl@4.26.0:
- resolution: {integrity: sha512-eGkX7zzkNxvvS05ROzJ/cO/AKqNvR/7t1jA3VZDi2vRniLKwAWxUr85fH3NsvtxU5vnUUKFHKh8flIBdlo2b3Q==}
+ /@rollup/rollup-linux-arm64-musl@4.27.3:
+ resolution: {integrity: sha512-TKxiOvBorYq4sUpA0JT+Fkh+l+G9DScnG5Dqx7wiiqVMiRSkzTclP35pE6eQQYjP4Gc8yEkJGea6rz4qyWhp3g==}
cpu: [arm64]
os: [linux]
libc: [musl]
requiresBuild: true
optional: true
- /@rollup/rollup-linux-powerpc64le-gnu@4.26.0:
- resolution: {integrity: sha512-Odp/lgHbW/mAqw/pU21goo5ruWsytP7/HCC/liOt0zcGG0llYWKrd10k9Fj0pdj3prQ63N5yQLCLiE7HTX+MYw==}
+ /@rollup/rollup-linux-powerpc64le-gnu@4.27.3:
+ resolution: {integrity: sha512-v2M/mPvVUKVOKITa0oCFksnQQ/TqGrT+yD0184/cWHIu0LoIuYHwox0Pm3ccXEz8cEQDLk6FPKd1CCm+PlsISw==}
cpu: [ppc64]
os: [linux]
libc: [glibc]
requiresBuild: true
optional: true
- /@rollup/rollup-linux-riscv64-gnu@4.26.0:
- resolution: {integrity: sha512-MBR2ZhCTzUgVD0OJdTzNeF4+zsVogIR1U/FsyuFerwcqjZGvg2nYe24SAHp8O5sN8ZkRVbHwlYeHqcSQ8tcYew==}
+ /@rollup/rollup-linux-riscv64-gnu@4.27.3:
+ resolution: {integrity: sha512-LdrI4Yocb1a/tFVkzmOE5WyYRgEBOyEhWYJe4gsDWDiwnjYKjNs7PS6SGlTDB7maOHF4kxevsuNBl2iOcj3b4A==}
cpu: [riscv64]
os: [linux]
libc: [glibc]
requiresBuild: true
optional: true
- /@rollup/rollup-linux-s390x-gnu@4.26.0:
- resolution: {integrity: sha512-YYcg8MkbN17fMbRMZuxwmxWqsmQufh3ZJFxFGoHjrE7bv0X+T6l3glcdzd7IKLiwhT+PZOJCblpnNlz1/C3kGQ==}
+ /@rollup/rollup-linux-s390x-gnu@4.27.3:
+ resolution: {integrity: sha512-d4wVu6SXij/jyiwPvI6C4KxdGzuZOvJ6y9VfrcleHTwo68fl8vZC5ZYHsCVPUi4tndCfMlFniWgwonQ5CUpQcA==}
cpu: [s390x]
os: [linux]
libc: [glibc]
requiresBuild: true
optional: true
- /@rollup/rollup-linux-x64-gnu@4.26.0:
- resolution: {integrity: sha512-ZuwpfjCwjPkAOxpjAEjabg6LRSfL7cAJb6gSQGZYjGhadlzKKywDkCUnJ+KEfrNY1jH5EEoSIKLCb572jSiglA==}
+ /@rollup/rollup-linux-x64-gnu@4.27.3:
+ resolution: {integrity: sha512-/6bn6pp1fsCGEY5n3yajmzZQAh+mW4QPItbiWxs69zskBzJuheb3tNynEjL+mKOsUSFK11X4LYF2BwwXnzWleA==}
cpu: [x64]
os: [linux]
libc: [glibc]
requiresBuild: true
optional: true
- /@rollup/rollup-linux-x64-musl@4.26.0:
- resolution: {integrity: sha512-+HJD2lFS86qkeF8kNu0kALtifMpPCZU80HvwztIKnYwym3KnA1os6nsX4BGSTLtS2QVAGG1P3guRgsYyMA0Yhg==}
+ /@rollup/rollup-linux-x64-musl@4.27.3:
+ resolution: {integrity: sha512-nBXOfJds8OzUT1qUreT/en3eyOXd2EH5b0wr2bVB5999qHdGKkzGzIyKYaKj02lXk6wpN71ltLIaQpu58YFBoQ==}
cpu: [x64]
os: [linux]
libc: [musl]
requiresBuild: true
optional: true
- /@rollup/rollup-win32-arm64-msvc@4.26.0:
- resolution: {integrity: sha512-WUQzVFWPSw2uJzX4j6YEbMAiLbs0BUysgysh8s817doAYhR5ybqTI1wtKARQKo6cGop3pHnrUJPFCsXdoFaimQ==}
+ /@rollup/rollup-win32-arm64-msvc@4.27.3:
+ resolution: {integrity: sha512-ogfbEVQgIZOz5WPWXF2HVb6En+kWzScuxJo/WdQTqEgeyGkaa2ui5sQav9Zkr7bnNCLK48uxmmK0TySm22eiuw==}
cpu: [arm64]
os: [win32]
requiresBuild: true
optional: true
- /@rollup/rollup-win32-ia32-msvc@4.26.0:
- resolution: {integrity: sha512-D4CxkazFKBfN1akAIY6ieyOqzoOoBV1OICxgUblWxff/pSjCA2khXlASUx7mK6W1oP4McqhgcCsu6QaLj3WMWg==}
+ /@rollup/rollup-win32-ia32-msvc@4.27.3:
+ resolution: {integrity: sha512-ecE36ZBMLINqiTtSNQ1vzWc5pXLQHlf/oqGp/bSbi7iedcjcNb6QbCBNG73Euyy2C+l/fn8qKWEwxr+0SSfs3w==}
cpu: [ia32]
os: [win32]
requiresBuild: true
optional: true
- /@rollup/rollup-win32-x64-msvc@4.26.0:
- resolution: {integrity: sha512-2x8MO1rm4PGEP0xWbubJW5RtbNLk3puzAMaLQd3B3JHVw4KcHlmXcO+Wewx9zCoo7EUFiMlu/aZbCJ7VjMzAag==}
+ /@rollup/rollup-win32-x64-msvc@4.27.3:
+ resolution: {integrity: sha512-vliZLrDmYKyaUoMzEbMTg2JkerfBjn03KmAw9CykO0Zzkzoyd7o3iZNam/TpyWNjNT+Cz2iO3P9Smv2wgrR+Eg==}
cpu: [x64]
os: [win32]
requiresBuild: true
@@ -3722,7 +3729,7 @@ packages:
/@types/conventional-commits-parser@5.0.0:
resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==}
dependencies:
- '@types/node': 22.9.0
+ '@types/node': 22.9.1
dev: true
/@types/estree@1.0.6:
@@ -3731,7 +3738,7 @@ packages:
/@types/graceful-fs@4.1.9:
resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
dependencies:
- '@types/node': 22.9.0
+ '@types/node': 22.9.1
dev: true
/@types/istanbul-lib-coverage@2.0.6:
@@ -3754,8 +3761,8 @@ packages:
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
dev: true
- /@types/node@22.9.0:
- resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==}
+ /@types/node@22.9.1:
+ resolution: {integrity: sha512-p8Yy/8sw1caA8CdRIQBG5tiLHmxtQKObCijiAa9Ez+d4+PRffM4054xbju0msf+cvhJpnFEeNjxmVT/0ipktrg==}
dependencies:
undici-types: 6.19.8
@@ -3777,8 +3784,8 @@ packages:
'@types/yargs-parser': 21.0.3
dev: true
- /@typescript-eslint/eslint-plugin@8.14.0(@typescript-eslint/parser@8.14.0)(eslint@9.14.0)(typescript@4.9.5):
- resolution: {integrity: sha512-tqp8H7UWFaZj0yNO6bycd5YjMwxa6wIHOLZvWPkidwbgLCsBMetQoGj7DPuAlWa2yGO3H48xmPwjhsSPPCGU5w==}
+ /@typescript-eslint/eslint-plugin@8.15.0(@typescript-eslint/parser@8.15.0)(eslint@9.15.0)(typescript@4.9.5):
+ resolution: {integrity: sha512-+zkm9AR1Ds9uLWN3fkoeXgFppaQ+uEVtfOV62dDmsy9QCNqlRHWNEck4yarvRNrvRcHQLGfqBNui3cimoz8XAg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
@@ -3789,12 +3796,12 @@ packages:
optional: true
dependencies:
'@eslint-community/regexpp': 4.12.1
- '@typescript-eslint/parser': 8.14.0(eslint@9.14.0)(typescript@4.9.5)
- '@typescript-eslint/scope-manager': 8.14.0
- '@typescript-eslint/type-utils': 8.14.0(eslint@9.14.0)(typescript@4.9.5)
- '@typescript-eslint/utils': 8.14.0(eslint@9.14.0)(typescript@4.9.5)
- '@typescript-eslint/visitor-keys': 8.14.0
- eslint: 9.14.0
+ '@typescript-eslint/parser': 8.15.0(eslint@9.15.0)(typescript@4.9.5)
+ '@typescript-eslint/scope-manager': 8.15.0
+ '@typescript-eslint/type-utils': 8.15.0(eslint@9.15.0)(typescript@4.9.5)
+ '@typescript-eslint/utils': 8.15.0(eslint@9.15.0)(typescript@4.9.5)
+ '@typescript-eslint/visitor-keys': 8.15.0
+ eslint: 9.15.0
graphemer: 1.4.0
ignore: 5.3.2
natural-compare: 1.4.0
@@ -3804,8 +3811,8 @@ packages:
- supports-color
dev: true
- /@typescript-eslint/parser@8.14.0(eslint@9.14.0)(typescript@4.9.5):
- resolution: {integrity: sha512-2p82Yn9juUJq0XynBXtFCyrBDb6/dJombnz6vbo6mgQEtWHfvHbQuEa9kAOVIt1c9YFwi7H6WxtPj1kg+80+RA==}
+ /@typescript-eslint/parser@8.15.0(eslint@9.15.0)(typescript@4.9.5):
+ resolution: {integrity: sha512-7n59qFpghG4uazrF9qtGKBZXn7Oz4sOMm8dwNWDQY96Xlm2oX67eipqcblDj+oY1lLCbf1oltMZFpUso66Kl1A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -3814,51 +3821,52 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/scope-manager': 8.14.0
- '@typescript-eslint/types': 8.14.0
- '@typescript-eslint/typescript-estree': 8.14.0(typescript@4.9.5)
- '@typescript-eslint/visitor-keys': 8.14.0
+ '@typescript-eslint/scope-manager': 8.15.0
+ '@typescript-eslint/types': 8.15.0
+ '@typescript-eslint/typescript-estree': 8.15.0(typescript@4.9.5)
+ '@typescript-eslint/visitor-keys': 8.15.0
debug: 4.3.7
- eslint: 9.14.0
+ eslint: 9.15.0
typescript: 4.9.5
transitivePeerDependencies:
- supports-color
dev: true
- /@typescript-eslint/scope-manager@8.14.0:
- resolution: {integrity: sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==}
+ /@typescript-eslint/scope-manager@8.15.0:
+ resolution: {integrity: sha512-QRGy8ADi4J7ii95xz4UoiymmmMd/zuy9azCaamnZ3FM8T5fZcex8UfJcjkiEZjJSztKfEBe3dZ5T/5RHAmw2mA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dependencies:
- '@typescript-eslint/types': 8.14.0
- '@typescript-eslint/visitor-keys': 8.14.0
+ '@typescript-eslint/types': 8.15.0
+ '@typescript-eslint/visitor-keys': 8.15.0
dev: true
- /@typescript-eslint/type-utils@8.14.0(eslint@9.14.0)(typescript@4.9.5):
- resolution: {integrity: sha512-Xcz9qOtZuGusVOH5Uk07NGs39wrKkf3AxlkK79RBK6aJC1l03CobXjJbwBPSidetAOV+5rEVuiT1VSBUOAsanQ==}
+ /@typescript-eslint/type-utils@8.15.0(eslint@9.15.0)(typescript@4.9.5):
+ resolution: {integrity: sha512-UU6uwXDoI3JGSXmcdnP5d8Fffa2KayOhUUqr/AiBnG1Gl7+7ut/oyagVeSkh7bxQ0zSXV9ptRh/4N15nkCqnpw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
- '@typescript-eslint/typescript-estree': 8.14.0(typescript@4.9.5)
- '@typescript-eslint/utils': 8.14.0(eslint@9.14.0)(typescript@4.9.5)
+ '@typescript-eslint/typescript-estree': 8.15.0(typescript@4.9.5)
+ '@typescript-eslint/utils': 8.15.0(eslint@9.15.0)(typescript@4.9.5)
debug: 4.3.7
+ eslint: 9.15.0
ts-api-utils: 1.4.0(typescript@4.9.5)
typescript: 4.9.5
transitivePeerDependencies:
- - eslint
- supports-color
dev: true
- /@typescript-eslint/types@8.14.0:
- resolution: {integrity: sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==}
+ /@typescript-eslint/types@8.15.0:
+ resolution: {integrity: sha512-n3Gt8Y/KyJNe0S3yDCD2RVKrHBC4gTUcLTebVBXacPy091E6tNspFLKRXlk3hwT4G55nfr1n2AdFqi/XMxzmPQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dev: true
- /@typescript-eslint/typescript-estree@8.14.0(typescript@4.9.5):
- resolution: {integrity: sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==}
+ /@typescript-eslint/typescript-estree@8.15.0(typescript@4.9.5):
+ resolution: {integrity: sha512-1eMp2JgNec/niZsR7ioFBlsh/Fk0oJbhaqO0jRyQBMgkz7RrFfkqF9lYYmBoGBaSiLnu8TAPQTwoTUiSTUW9dg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '*'
@@ -3866,8 +3874,8 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/types': 8.14.0
- '@typescript-eslint/visitor-keys': 8.14.0
+ '@typescript-eslint/types': 8.15.0
+ '@typescript-eslint/visitor-keys': 8.15.0
debug: 4.3.7
fast-glob: 3.3.2
is-glob: 4.0.3
@@ -3879,28 +3887,32 @@ packages:
- supports-color
dev: true
- /@typescript-eslint/utils@8.14.0(eslint@9.14.0)(typescript@4.9.5):
- resolution: {integrity: sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA==}
+ /@typescript-eslint/utils@8.15.0(eslint@9.15.0)(typescript@4.9.5):
+ resolution: {integrity: sha512-k82RI9yGhr0QM3Dnq+egEpz9qB6Un+WLYhmoNcvl8ltMEededhh7otBVVIDDsEEttauwdY/hQoSsOv13lxrFzQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
dependencies:
- '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0)
- '@typescript-eslint/scope-manager': 8.14.0
- '@typescript-eslint/types': 8.14.0
- '@typescript-eslint/typescript-estree': 8.14.0(typescript@4.9.5)
- eslint: 9.14.0
+ '@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0)
+ '@typescript-eslint/scope-manager': 8.15.0
+ '@typescript-eslint/types': 8.15.0
+ '@typescript-eslint/typescript-estree': 8.15.0(typescript@4.9.5)
+ eslint: 9.15.0
+ typescript: 4.9.5
transitivePeerDependencies:
- supports-color
- - typescript
dev: true
- /@typescript-eslint/visitor-keys@8.14.0:
- resolution: {integrity: sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==}
+ /@typescript-eslint/visitor-keys@8.15.0:
+ resolution: {integrity: sha512-h8vYOulWec9LhpwfAdZf2bjr8xIp0KNKnpgqSz0qqYYKAW/QZKw3ktRndbiAtUz4acH4QLQavwZBYCc0wulA/Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dependencies:
- '@typescript-eslint/types': 8.14.0
- eslint-visitor-keys: 3.4.3
+ '@typescript-eslint/types': 8.15.0
+ eslint-visitor-keys: 4.2.0
dev: true
/@unocss/astro@0.62.4(vite@5.2.8):
@@ -3914,7 +3926,7 @@ packages:
'@unocss/core': 0.62.4
'@unocss/reset': 0.62.4
'@unocss/vite': 0.62.4(vite@5.2.8)
- vite: 5.2.8(@types/node@22.9.0)(sass@1.79.3)(terser@5.36.0)
+ vite: 5.2.8(@types/node@22.9.1)(sass@1.79.3)(terser@5.36.0)
transitivePeerDependencies:
- rollup
- supports-color
@@ -3934,7 +3946,7 @@ packages:
chokidar: 3.6.0
colorette: 2.0.20
consola: 3.2.3
- magic-string: 0.30.12
+ magic-string: 0.30.13
pathe: 1.1.2
perfect-debounce: 1.0.0
tinyglobby: 0.2.10
@@ -4058,7 +4070,7 @@ packages:
engines: {node: '>=14'}
dependencies:
'@unocss/core': 0.62.4
- magic-string: 0.30.12
+ magic-string: 0.30.13
dev: true
/@unocss/transformer-attributify-jsx@0.62.4:
@@ -4098,9 +4110,9 @@ packages:
'@unocss/core': 0.62.4
'@unocss/inspector': 0.62.4
chokidar: 3.6.0
- magic-string: 0.30.12
+ magic-string: 0.30.13
tinyglobby: 0.2.10
- vite: 5.2.8(@types/node@22.9.0)(sass@1.79.3)(terser@5.36.0)
+ vite: 5.2.8(@types/node@22.9.1)(sass@1.79.3)(terser@5.36.0)
transitivePeerDependencies:
- rollup
- supports-color
@@ -4118,16 +4130,16 @@ packages:
browserslist: 4.24.2
browserslist-to-esbuild: 2.1.1(browserslist@4.24.2)
core-js: 3.39.0
- magic-string: 0.30.12
+ magic-string: 0.30.13
regenerator-runtime: 0.14.1
systemjs: 6.15.1
terser: 5.36.0
- vite: 5.2.8(@types/node@22.9.0)(sass@1.79.3)(terser@5.36.0)
+ vite: 5.2.8(@types/node@22.9.1)(sass@1.79.3)(terser@5.36.0)
transitivePeerDependencies:
- supports-color
dev: true
- /@vitejs/plugin-vue-jsx@3.1.0(vite@5.2.8)(vue@3.5.12):
+ /@vitejs/plugin-vue-jsx@3.1.0(vite@5.2.8)(vue@3.5.13):
resolution: {integrity: sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
@@ -4137,21 +4149,21 @@ packages:
'@babel/core': 7.26.0
'@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.26.0)
'@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.26.0)
- vite: 5.2.8(@types/node@22.9.0)(sass@1.79.3)(terser@5.36.0)
- vue: 3.5.12(typescript@4.9.5)
+ vite: 5.2.8(@types/node@22.9.1)(sass@1.79.3)(terser@5.36.0)
+ vue: 3.5.13(typescript@4.9.5)
transitivePeerDependencies:
- supports-color
dev: true
- /@vitejs/plugin-vue@5.2.0(vite@5.2.8)(vue@3.5.12):
+ /@vitejs/plugin-vue@5.2.0(vite@5.2.8)(vue@3.5.13):
resolution: {integrity: sha512-7n7KdUEtx/7Yl7I/WVAMZ1bEb0eVvXF3ummWTeLcs/9gvo9pJhuLdouSXGjdZ/MKD1acf1I272+X0RMua4/R3g==}
engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies:
vite: ^5.0.0
vue: ^3.2.25
dependencies:
- vite: 5.2.8(@types/node@22.9.0)(sass@1.79.3)(terser@5.36.0)
- vue: 3.5.12(typescript@4.9.5)
+ vite: 5.2.8(@types/node@22.9.1)(sass@1.79.3)(terser@5.36.0)
+ vue: 3.5.13(typescript@4.9.5)
/@volar/language-core@1.11.1:
resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==}
@@ -4209,7 +4221,7 @@ packages:
'@babel/helper-module-imports': 7.25.9
'@babel/helper-plugin-utils': 7.25.9
'@babel/parser': 7.26.2
- '@vue/compiler-sfc': 3.5.12
+ '@vue/compiler-sfc': 3.5.13
transitivePeerDependencies:
- supports-color
dev: true
@@ -4223,11 +4235,11 @@ packages:
estree-walker: 2.0.2
source-map-js: 1.2.1
- /@vue/compiler-core@3.5.12:
- resolution: {integrity: sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==}
+ /@vue/compiler-core@3.5.13:
+ resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==}
dependencies:
'@babel/parser': 7.26.2
- '@vue/shared': 3.5.12
+ '@vue/shared': 3.5.13
entities: 4.5.0
estree-walker: 2.0.2
source-map-js: 1.2.1
@@ -4238,11 +4250,11 @@ packages:
'@vue/compiler-core': 3.4.21
'@vue/shared': 3.4.21
- /@vue/compiler-dom@3.5.12:
- resolution: {integrity: sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==}
+ /@vue/compiler-dom@3.5.13:
+ resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==}
dependencies:
- '@vue/compiler-core': 3.5.12
- '@vue/shared': 3.5.12
+ '@vue/compiler-core': 3.5.13
+ '@vue/shared': 3.5.13
/@vue/compiler-sfc@3.4.21:
resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==}
@@ -4253,20 +4265,20 @@ packages:
'@vue/compiler-ssr': 3.4.21
'@vue/shared': 3.4.21
estree-walker: 2.0.2
- magic-string: 0.30.12
+ magic-string: 0.30.13
postcss: 8.4.49
source-map-js: 1.2.1
- /@vue/compiler-sfc@3.5.12:
- resolution: {integrity: sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==}
+ /@vue/compiler-sfc@3.5.13:
+ resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==}
dependencies:
'@babel/parser': 7.26.2
- '@vue/compiler-core': 3.5.12
- '@vue/compiler-dom': 3.5.12
- '@vue/compiler-ssr': 3.5.12
- '@vue/shared': 3.5.12
+ '@vue/compiler-core': 3.5.13
+ '@vue/compiler-dom': 3.5.13
+ '@vue/compiler-ssr': 3.5.13
+ '@vue/shared': 3.5.13
estree-walker: 2.0.2
- magic-string: 0.30.12
+ magic-string: 0.30.13
postcss: 8.4.49
source-map-js: 1.2.1
@@ -4276,11 +4288,11 @@ packages:
'@vue/compiler-dom': 3.4.21
'@vue/shared': 3.4.21
- /@vue/compiler-ssr@3.5.12:
- resolution: {integrity: sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==}
+ /@vue/compiler-ssr@3.5.13:
+ resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==}
dependencies:
- '@vue/compiler-dom': 3.5.12
- '@vue/shared': 3.5.12
+ '@vue/compiler-dom': 3.5.13
+ '@vue/shared': 3.5.13
/@vue/consolidate@1.0.0:
resolution: {integrity: sha512-oTyUE+QHIzLw2PpV14GD/c7EohDyP64xCniWTcqcEmTd699eFqTIwOmtDYjcO1j3QgdXoJEoWv1/cCdLrRoOfg==}
@@ -4301,8 +4313,8 @@ packages:
dependencies:
'@volar/language-core': 1.11.1
'@volar/source-map': 1.11.1
- '@vue/compiler-dom': 3.5.12
- '@vue/shared': 3.5.12
+ '@vue/compiler-dom': 3.5.13
+ '@vue/shared': 3.5.13
computeds: 0.0.1
minimatch: 9.0.5
muggle-string: 0.3.1
@@ -4311,48 +4323,48 @@ packages:
vue-template-compiler: 2.7.16
dev: true
- /@vue/reactivity@3.5.12:
- resolution: {integrity: sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==}
+ /@vue/reactivity@3.5.13:
+ resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==}
dependencies:
- '@vue/shared': 3.5.12
+ '@vue/shared': 3.5.13
- /@vue/runtime-core@3.5.12:
- resolution: {integrity: sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==}
+ /@vue/runtime-core@3.5.13:
+ resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==}
dependencies:
- '@vue/reactivity': 3.5.12
- '@vue/shared': 3.5.12
+ '@vue/reactivity': 3.5.13
+ '@vue/shared': 3.5.13
- /@vue/runtime-dom@3.5.12:
- resolution: {integrity: sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==}
+ /@vue/runtime-dom@3.5.13:
+ resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==}
dependencies:
- '@vue/reactivity': 3.5.12
- '@vue/runtime-core': 3.5.12
- '@vue/shared': 3.5.12
+ '@vue/reactivity': 3.5.13
+ '@vue/runtime-core': 3.5.13
+ '@vue/shared': 3.5.13
csstype: 3.1.3
- /@vue/server-renderer@3.4.21(vue@3.5.12):
+ /@vue/server-renderer@3.4.21(vue@3.5.13):
resolution: {integrity: sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==}
peerDependencies:
vue: 3.4.21
dependencies:
'@vue/compiler-ssr': 3.4.21
'@vue/shared': 3.4.21
- vue: 3.5.12(typescript@4.9.5)
+ vue: 3.5.13(typescript@4.9.5)
- /@vue/server-renderer@3.5.12(vue@3.5.12):
- resolution: {integrity: sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==}
+ /@vue/server-renderer@3.5.13(vue@3.5.13):
+ resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==}
peerDependencies:
- vue: 3.5.12
+ vue: 3.5.13
dependencies:
- '@vue/compiler-ssr': 3.5.12
- '@vue/shared': 3.5.12
- vue: 3.5.12(typescript@4.9.5)
+ '@vue/compiler-ssr': 3.5.13
+ '@vue/shared': 3.5.13
+ vue: 3.5.13(typescript@4.9.5)
/@vue/shared@3.4.21:
resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==}
- /@vue/shared@3.5.12:
- resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==}
+ /@vue/shared@3.5.13:
+ resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==}
/JSONStream@1.3.5:
resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
@@ -4546,7 +4558,7 @@ packages:
postcss: ^8.1.0
dependencies:
browserslist: 4.24.2
- caniuse-lite: 1.0.30001680
+ caniuse-lite: 1.0.30001683
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.1.1
@@ -4757,8 +4769,8 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
- caniuse-lite: 1.0.30001680
- electron-to-chromium: 1.5.58
+ caniuse-lite: 1.0.30001683
+ electron-to-chromium: 1.5.63
node-releases: 2.0.18
update-browserslist-db: 1.1.1(browserslist@4.24.2)
@@ -4838,8 +4850,8 @@ packages:
engines: {node: '>=10'}
dev: true
- /caniuse-lite@1.0.30001680:
- resolution: {integrity: sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==}
+ /caniuse-lite@1.0.30001683:
+ resolution: {integrity: sha512-iqmNnThZ0n70mNwvxpEC2nBJ037ZHZUoBI5Gorh1Mw6IlEAZujEoU1tXA628iZfzm7R9FvFzxbfdgml82a3k8Q==}
/centra@2.7.0:
resolution: {integrity: sha512-PbFMgMSrmgx6uxCdm57RUos9Tc3fclMvhLSATYN39XsDV29B89zZ3KA89jmY0vwSGazyU+uerqwa6t+KaodPcg==}
@@ -5016,13 +5028,13 @@ packages:
/commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
- /commitizen@4.3.1(@types/node@22.9.0)(typescript@4.9.5):
+ /commitizen@4.3.1(@types/node@22.9.1)(typescript@4.9.5):
resolution: {integrity: sha512-gwAPAVTy/j5YcOOebcCRIijn+mSjWJC+IYKivTu6aG8Ei/scoXgfsMRnuAk6b0GRste2J4NGxVdMN3ZpfNaVaw==}
engines: {node: '>= 12'}
hasBin: true
dependencies:
cachedir: 2.3.0
- cz-conventional-changelog: 3.3.0(@types/node@22.9.0)(typescript@4.9.5)
+ cz-conventional-changelog: 3.3.0(@types/node@22.9.1)(typescript@4.9.5)
dedent: 0.7.0
detect-indent: 6.1.0
find-node-modules: 2.1.3
@@ -5133,7 +5145,7 @@ packages:
resolution: {integrity: sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==}
requiresBuild: true
- /cosmiconfig-typescript-loader@5.1.0(@types/node@22.9.0)(cosmiconfig@9.0.0)(typescript@4.9.5):
+ /cosmiconfig-typescript-loader@5.1.0(@types/node@22.9.1)(cosmiconfig@9.0.0)(typescript@4.9.5):
resolution: {integrity: sha512-7PtBB+6FdsOvZyJtlF3hEPpACq7RQX6BVGsgC7/lfVXnKMvNCu/XY3ykreqG5w/rBNdu2z8LCIKoF3kpHHdHlA==}
engines: {node: '>=v16'}
peerDependencies:
@@ -5141,7 +5153,7 @@ packages:
cosmiconfig: '>=8.2'
typescript: '>=4'
dependencies:
- '@types/node': 22.9.0
+ '@types/node': 22.9.1
cosmiconfig: 9.0.0(typescript@4.9.5)
jiti: 1.21.6
typescript: 4.9.5
@@ -5168,11 +5180,11 @@ packages:
engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
hasBin: true
dependencies:
- cross-spawn: 7.0.5
+ cross-spawn: 7.0.6
dev: true
- /cross-spawn@7.0.5:
- resolution: {integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==}
+ /cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
dependencies:
path-key: 3.1.1
@@ -5248,18 +5260,18 @@ packages:
/csstype@3.1.3:
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
- /cz-conventional-changelog@3.3.0(@types/node@22.9.0)(typescript@4.9.5):
+ /cz-conventional-changelog@3.3.0(@types/node@22.9.1)(typescript@4.9.5):
resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==}
engines: {node: '>= 10'}
dependencies:
chalk: 2.4.2
- commitizen: 4.3.1(@types/node@22.9.0)(typescript@4.9.5)
+ commitizen: 4.3.1(@types/node@22.9.1)(typescript@4.9.5)
conventional-commit-types: 3.0.0
lodash.map: 4.6.0
longest: 2.0.1
word-wrap: 1.2.5
optionalDependencies:
- '@commitlint/load': 19.5.0(@types/node@22.9.0)(typescript@4.9.5)
+ '@commitlint/load': 19.5.0(@types/node@22.9.1)(typescript@4.9.5)
transitivePeerDependencies:
- '@types/node'
- typescript
@@ -5457,8 +5469,8 @@ packages:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
dev: true
- /electron-to-chromium@1.5.58:
- resolution: {integrity: sha512-al2l4r+24ZFL7WzyPTlyD0fC33LLzvxqLCwurtBibVPghRGO9hSTl+tis8t1kD7biPiH/en4U0I7o/nQbYeoVA==}
+ /electron-to-chromium@1.5.63:
+ resolution: {integrity: sha512-ddeXKuY9BHo/mw145axlyWjlJ1UBt4WK3AlvkT7W2AbqfRQoacVoRUCF6wL3uIx/8wT9oLKXzI+rFqHHscByaA==}
/emittery@0.8.1:
resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==}
@@ -5619,16 +5631,16 @@ packages:
source-map: 0.6.1
dev: true
- /eslint-config-prettier@9.1.0(eslint@9.14.0):
+ /eslint-config-prettier@9.1.0(eslint@9.15.0):
resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==}
hasBin: true
peerDependencies:
eslint: '>=7.0.0'
dependencies:
- eslint: 9.14.0
+ eslint: 9.15.0
dev: true
- /eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0)(eslint@9.14.0)(prettier@3.3.3):
+ /eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0)(eslint@9.15.0)(prettier@3.3.3):
resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
@@ -5642,27 +5654,27 @@ packages:
eslint-config-prettier:
optional: true
dependencies:
- eslint: 9.14.0
- eslint-config-prettier: 9.1.0(eslint@9.14.0)
+ eslint: 9.15.0
+ eslint-config-prettier: 9.1.0(eslint@9.15.0)
prettier: 3.3.3
prettier-linter-helpers: 1.0.0
synckit: 0.9.2
dev: true
- /eslint-plugin-vue@9.31.0(eslint@9.14.0):
+ /eslint-plugin-vue@9.31.0(eslint@9.15.0):
resolution: {integrity: sha512-aYMUCgivhz1o4tLkRHj5oq9YgYPM4/EJc0M7TAKRLCUA5OYxRLAhYEVD2nLtTwLyixEFI+/QXSvKU9ESZFgqjQ==}
engines: {node: ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
dependencies:
- '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0)
- eslint: 9.14.0
+ '@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0)
+ eslint: 9.15.0
globals: 13.24.0
natural-compare: 1.4.0
nth-check: 2.1.1
postcss-selector-parser: 6.1.2
semver: 7.6.3
- vue-eslint-parser: 9.4.3(eslint@9.14.0)
+ vue-eslint-parser: 9.4.3(eslint@9.15.0)
xml-name-validator: 4.0.0
transitivePeerDependencies:
- supports-color
@@ -5694,8 +5706,8 @@ packages:
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
dev: true
- /eslint@9.14.0:
- resolution: {integrity: sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==}
+ /eslint@9.15.0:
+ resolution: {integrity: sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
@@ -5704,13 +5716,13 @@ packages:
jiti:
optional: true
dependencies:
- '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0)
+ '@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0)
'@eslint-community/regexpp': 4.12.1
- '@eslint/config-array': 0.18.0
- '@eslint/core': 0.7.0
- '@eslint/eslintrc': 3.1.0
- '@eslint/js': 9.14.0
- '@eslint/plugin-kit': 0.2.2
+ '@eslint/config-array': 0.19.0
+ '@eslint/core': 0.9.0
+ '@eslint/eslintrc': 3.2.0
+ '@eslint/js': 9.15.0
+ '@eslint/plugin-kit': 0.2.3
'@humanfs/node': 0.16.6
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.1
@@ -5718,7 +5730,7 @@ packages:
'@types/json-schema': 7.0.15
ajv: 6.12.6
chalk: 4.1.2
- cross-spawn: 7.0.5
+ cross-spawn: 7.0.6
debug: 4.3.7
escape-string-regexp: 4.0.0
eslint-scope: 8.2.0
@@ -5738,7 +5750,6 @@ packages:
minimatch: 3.1.2
natural-compare: 1.4.0
optionator: 0.9.4
- text-table: 0.2.0
transitivePeerDependencies:
- supports-color
dev: true
@@ -5812,7 +5823,7 @@ packages:
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
engines: {node: '>=10'}
dependencies:
- cross-spawn: 7.0.5
+ cross-spawn: 7.0.6
get-stream: 6.0.1
human-signals: 2.1.0
is-stream: 2.0.1
@@ -5827,7 +5838,7 @@ packages:
resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
engines: {node: '>=16.17'}
dependencies:
- cross-spawn: 7.0.5
+ cross-spawn: 7.0.6
get-stream: 8.0.1
human-signals: 5.0.0
is-stream: 3.0.0
@@ -6066,7 +6077,7 @@ packages:
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
engines: {node: '>=16'}
dependencies:
- flatted: 3.3.1
+ flatted: 3.3.2
keyv: 4.5.4
dev: true
@@ -6074,12 +6085,12 @@ packages:
resolution: {integrity: sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==}
engines: {node: '>=18'}
dependencies:
- flatted: 3.3.1
+ flatted: 3.3.2
keyv: 4.5.4
dev: true
- /flatted@3.3.1:
- resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
+ /flatted@3.3.2:
+ resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==}
dev: true
/follow-redirects@1.15.9:
@@ -6453,8 +6464,8 @@ packages:
engines: {node: '>=16.17.0'}
dev: true
- /husky@9.1.6:
- resolution: {integrity: sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==}
+ /husky@9.1.7:
+ resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==}
engines: {node: '>=18'}
hasBin: true
dev: true
@@ -6764,7 +6775,7 @@ packages:
'@jest/environment': 27.5.1
'@jest/test-result': 27.5.1
'@jest/types': 27.5.1
- '@types/node': 22.9.0
+ '@types/node': 22.9.1
chalk: 4.1.2
co: 4.6.0
dedent: 0.7.0
@@ -6889,7 +6900,7 @@ packages:
'@jest/environment': 27.5.1
'@jest/fake-timers': 27.5.1
'@jest/types': 27.5.1
- '@types/node': 22.9.0
+ '@types/node': 22.9.1
jest-mock: 27.5.1
jest-util: 27.5.1
jsdom: 16.7.0
@@ -6907,7 +6918,7 @@ packages:
'@jest/environment': 27.5.1
'@jest/fake-timers': 27.5.1
'@jest/types': 27.5.1
- '@types/node': 22.9.0
+ '@types/node': 22.9.1
jest-mock: 27.5.1
jest-util: 27.5.1
dev: true
@@ -6923,7 +6934,7 @@ packages:
dependencies:
'@jest/types': 27.5.1
'@types/graceful-fs': 4.1.9
- '@types/node': 22.9.0
+ '@types/node': 22.9.1
anymatch: 3.1.3
fb-watchman: 2.0.2
graceful-fs: 4.2.11
@@ -6945,7 +6956,7 @@ packages:
'@jest/source-map': 27.5.1
'@jest/test-result': 27.5.1
'@jest/types': 27.5.1
- '@types/node': 22.9.0
+ '@types/node': 22.9.1
chalk: 4.1.2
co: 4.6.0
expect: 27.5.1
@@ -7000,7 +7011,7 @@ packages:
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dependencies:
'@jest/types': 27.5.1
- '@types/node': 22.9.0
+ '@types/node': 22.9.1
dev: true
/jest-pnp-resolver@1.2.3(jest-resolve@27.5.1):
@@ -7056,7 +7067,7 @@ packages:
'@jest/test-result': 27.5.1
'@jest/transform': 27.5.1
'@jest/types': 27.5.1
- '@types/node': 22.9.0
+ '@types/node': 22.9.1
chalk: 4.1.2
emittery: 0.8.1
graceful-fs: 4.2.11
@@ -7113,7 +7124,7 @@ packages:
resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dependencies:
- '@types/node': 22.9.0
+ '@types/node': 22.9.1
graceful-fs: 4.2.11
dev: true
@@ -7152,7 +7163,7 @@ packages:
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dependencies:
'@jest/types': 27.5.1
- '@types/node': 22.9.0
+ '@types/node': 22.9.1
chalk: 4.1.2
ci-info: 3.9.0
graceful-fs: 4.2.11
@@ -7177,7 +7188,7 @@ packages:
dependencies:
'@jest/test-result': 27.5.1
'@jest/types': 27.5.1
- '@types/node': 22.9.0
+ '@types/node': 22.9.1
ansi-escapes: 4.3.2
chalk: 4.1.2
jest-util: 27.5.1
@@ -7188,7 +7199,7 @@ packages:
resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
engines: {node: '>= 10.13.0'}
dependencies:
- '@types/node': 22.9.0
+ '@types/node': 22.9.1
merge-stream: 2.0.0
supports-color: 8.1.1
dev: true
@@ -7396,8 +7407,8 @@ packages:
type-check: 0.4.0
dev: true
- /licia@1.44.0:
- resolution: {integrity: sha512-REBoVyObS1ghIbk8Qjbpdd1uzKOkwMHzBouZYVozVooAfKBm5G1Hvtx3o6/KbVSNYF+VzORJJmuqbkiLeqHPYw==}
+ /licia@1.45.0:
+ resolution: {integrity: sha512-C45Kyzd6lSchldMVNRMa38IRkPWI9kJCxUEdZ6atpnL+lM1jH7wcDLmHtYwO54oxVwrAxImEvaMaR8NBKHkEDQ==}
/lilconfig@2.1.0:
resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
@@ -7471,8 +7482,8 @@ packages:
resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==}
engines: {node: '>= 12.13.0'}
- /local-pkg@0.5.0:
- resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==}
+ /local-pkg@0.5.1:
+ resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==}
engines: {node: '>=14'}
dependencies:
mlly: 1.7.3
@@ -7584,8 +7595,8 @@ packages:
dependencies:
yallist: 3.1.1
- /magic-string@0.30.12:
- resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==}
+ /magic-string@0.30.13:
+ resolution: {integrity: sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==}
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
@@ -7957,8 +7968,8 @@ packages:
engines: {node: '>=6'}
dev: true
- /package-manager-detector@0.2.2:
- resolution: {integrity: sha512-VgXbyrSNsml4eHWIvxxG/nTL4wgybMTXCV2Un/+yEc3aDKKU6nQBZjbeP3Pl3qm9Qg92X/1ng4ffvCeD/zwHgg==}
+ /package-manager-detector@0.2.4:
+ resolution: {integrity: sha512-H/OUu9/zUfP89z1APcBf2X8Us0tt8dUK4lUmKqz12QNXif3DxAs1/YqjGtcutZi1zQqeNQRWr9C+EbQnnvSSFA==}
dev: true
/pako@1.0.11:
@@ -8110,7 +8121,7 @@ packages:
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
engines: {node: '>=0.10.0'}
- /pinia@2.2.6(typescript@4.9.5)(vue@3.5.12):
+ /pinia@2.2.6(typescript@4.9.5)(vue@3.5.13):
resolution: {integrity: sha512-vIsR8JkDN5Ga2vAxqOE2cJj4VtsHnzpR1Fz30kClxlh0yCHfec6uoMeM3e/ddqmwFUejK3NlrcQa/shnpyT4hA==}
peerDependencies:
'@vue/composition-api': ^1.4.0
@@ -8124,8 +8135,8 @@ packages:
dependencies:
'@vue/devtools-api': 6.6.4
typescript: 4.9.5
- vue: 3.5.12(typescript@4.9.5)
- vue-demi: 0.14.10(vue@3.5.12)
+ vue: 3.5.13(typescript@4.9.5)
+ vue-demi: 0.14.10(vue@3.5.13)
dev: false
/pirates@4.0.6:
@@ -8574,31 +8585,31 @@ packages:
glob: 7.2.3
dev: true
- /rollup@4.26.0:
- resolution: {integrity: sha512-ilcl12hnWonG8f+NxU6BlgysVA0gvY2l8N0R84S1HcINbW20bvwuCngJkkInV6LXhwRpucsW5k1ovDwEdBVrNg==}
+ /rollup@4.27.3:
+ resolution: {integrity: sha512-SLsCOnlmGt9VoZ9Ek8yBK8tAdmPHeppkw+Xa7yDlCEhDTvwYei03JlWo1fdc7YTfLZ4tD8riJCUyAgTbszk1fQ==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
dependencies:
'@types/estree': 1.0.6
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.26.0
- '@rollup/rollup-android-arm64': 4.26.0
- '@rollup/rollup-darwin-arm64': 4.26.0
- '@rollup/rollup-darwin-x64': 4.26.0
- '@rollup/rollup-freebsd-arm64': 4.26.0
- '@rollup/rollup-freebsd-x64': 4.26.0
- '@rollup/rollup-linux-arm-gnueabihf': 4.26.0
- '@rollup/rollup-linux-arm-musleabihf': 4.26.0
- '@rollup/rollup-linux-arm64-gnu': 4.26.0
- '@rollup/rollup-linux-arm64-musl': 4.26.0
- '@rollup/rollup-linux-powerpc64le-gnu': 4.26.0
- '@rollup/rollup-linux-riscv64-gnu': 4.26.0
- '@rollup/rollup-linux-s390x-gnu': 4.26.0
- '@rollup/rollup-linux-x64-gnu': 4.26.0
- '@rollup/rollup-linux-x64-musl': 4.26.0
- '@rollup/rollup-win32-arm64-msvc': 4.26.0
- '@rollup/rollup-win32-ia32-msvc': 4.26.0
- '@rollup/rollup-win32-x64-msvc': 4.26.0
+ '@rollup/rollup-android-arm-eabi': 4.27.3
+ '@rollup/rollup-android-arm64': 4.27.3
+ '@rollup/rollup-darwin-arm64': 4.27.3
+ '@rollup/rollup-darwin-x64': 4.27.3
+ '@rollup/rollup-freebsd-arm64': 4.27.3
+ '@rollup/rollup-freebsd-x64': 4.27.3
+ '@rollup/rollup-linux-arm-gnueabihf': 4.27.3
+ '@rollup/rollup-linux-arm-musleabihf': 4.27.3
+ '@rollup/rollup-linux-arm64-gnu': 4.27.3
+ '@rollup/rollup-linux-arm64-musl': 4.27.3
+ '@rollup/rollup-linux-powerpc64le-gnu': 4.27.3
+ '@rollup/rollup-linux-riscv64-gnu': 4.27.3
+ '@rollup/rollup-linux-s390x-gnu': 4.27.3
+ '@rollup/rollup-linux-x64-gnu': 4.27.3
+ '@rollup/rollup-linux-x64-musl': 4.27.3
+ '@rollup/rollup-win32-arm64-msvc': 4.27.3
+ '@rollup/rollup-win32-ia32-msvc': 4.27.3
+ '@rollup/rollup-win32-x64-msvc': 4.27.3
fsevents: 2.3.3
/run-async@2.4.1:
@@ -8963,7 +8974,7 @@ packages:
postcss-scss: 4.0.9(postcss@8.4.49)
stylelint: 16.10.0(typescript@4.9.5)
stylelint-config-recommended: 14.0.1(stylelint@16.10.0)
- stylelint-scss: 6.9.0(stylelint@16.10.0)
+ stylelint-scss: 6.10.0(stylelint@16.10.0)
dev: true
/stylelint-config-recommended-vue@1.5.0(postcss-html@1.7.0)(stylelint@16.10.0):
@@ -9011,8 +9022,8 @@ packages:
stylelint: 16.10.0(typescript@4.9.5)
dev: true
- /stylelint-scss@6.9.0(stylelint@16.10.0):
- resolution: {integrity: sha512-oWOR+g6ccagfrENecImGmorWWjVyWpt2R8bmkhOW8FkNNPGStZPQMqb8QWMW4Lwu9TyPqmyjHkkAsy3weqsnNw==}
+ /stylelint-scss@6.10.0(stylelint@16.10.0):
+ resolution: {integrity: sha512-y03if6Qw9xBMoVaf7tzp5BbnYhYvudIKzURkhSHzcHG0bW0fAYvQpTUVJOe7DyhHaxeThBil4ObEMvGbV7+M+w==}
engines: {node: '>=18.12.0'}
peerDependencies:
stylelint: ^16.0.2
@@ -9023,7 +9034,7 @@ packages:
mdn-data: 2.12.2
postcss-media-query-parser: 0.2.3
postcss-resolve-nested-selector: 0.1.6
- postcss-selector-parser: 6.1.2
+ postcss-selector-parser: 7.0.0
postcss-value-parser: 4.2.0
stylelint: 16.10.0(typescript@4.9.5)
dev: true
@@ -9184,10 +9195,6 @@ packages:
engines: {node: '>=8'}
dev: true
- /text-table@0.2.0:
- resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
- dev: true
-
/throat@6.0.2:
resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==}
dev: true
@@ -9320,21 +9327,22 @@ packages:
is-typedarray: 1.0.0
dev: true
- /typescript-eslint@8.14.0(eslint@9.14.0)(typescript@4.9.5):
- resolution: {integrity: sha512-K8fBJHxVL3kxMmwByvz8hNdBJ8a0YqKzKDX6jRlrjMuNXyd5T2V02HIq37+OiWXvUUOXgOOGiSSOh26Mh8pC3w==}
+ /typescript-eslint@8.15.0(eslint@9.15.0)(typescript@4.9.5):
+ resolution: {integrity: sha512-wY4FRGl0ZI+ZU4Jo/yjdBu0lVTSML58pu6PgGtJmCufvzfV565pUF6iACQt092uFOd49iLOTX/sEVmHtbSrS+w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
- '@typescript-eslint/eslint-plugin': 8.14.0(@typescript-eslint/parser@8.14.0)(eslint@9.14.0)(typescript@4.9.5)
- '@typescript-eslint/parser': 8.14.0(eslint@9.14.0)(typescript@4.9.5)
- '@typescript-eslint/utils': 8.14.0(eslint@9.14.0)(typescript@4.9.5)
+ '@typescript-eslint/eslint-plugin': 8.15.0(@typescript-eslint/parser@8.15.0)(eslint@9.15.0)(typescript@4.9.5)
+ '@typescript-eslint/parser': 8.15.0(eslint@9.15.0)(typescript@4.9.5)
+ '@typescript-eslint/utils': 8.15.0(eslint@9.15.0)(typescript@4.9.5)
+ eslint: 9.15.0
typescript: 4.9.5
transitivePeerDependencies:
- - eslint
- supports-color
dev: true
@@ -9395,8 +9403,8 @@ packages:
escape-string-regexp: 5.0.0
estree-walker: 3.0.3
fast-glob: 3.3.2
- local-pkg: 0.5.0
- magic-string: 0.30.12
+ local-pkg: 0.5.1
+ magic-string: 0.30.13
mlly: 1.7.3
pathe: 1.1.2
pkg-types: 1.2.1
@@ -9457,7 +9465,7 @@ packages:
'@unocss/transformer-directives': 0.62.4
'@unocss/transformer-variant-group': 0.62.4
'@unocss/vite': 0.62.4(vite@5.2.8)
- vite: 5.2.8(@types/node@22.9.0)(sass@1.79.3)(terser@5.36.0)
+ vite: 5.2.8(@types/node@22.9.1)(sass@1.79.3)(terser@5.36.0)
transitivePeerDependencies:
- postcss
- rollup
@@ -9494,16 +9502,16 @@ packages:
'@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.1.3
fast-glob: 3.3.2
- local-pkg: 0.5.0
- magic-string: 0.30.12
+ local-pkg: 0.5.1
+ magic-string: 0.30.13
minimatch: 9.0.5
unimport: 3.13.2
unplugin: 1.16.0
transitivePeerDependencies:
- rollup
- /unplugin-auto-import@0.18.4:
- resolution: {integrity: sha512-I+QAZPQn5lfH3HYa6HTgpcz30XGY0H1g6QenEB+sgBjgfvgJ33UI907dlNkgOSm/CFHZyNmTKVHf+O2qTnfNKw==}
+ /unplugin-auto-import@0.18.5:
+ resolution: {integrity: sha512-ZUnayBRlOwNuN9hrM1PymSZK5qDEI8heDD0E3U8Tq4FS6bUxd9VMfJ8tCwWTG5ir6g1yThe/4SVHbFUZQwplOw==}
engines: {node: '>=14'}
peerDependencies:
'@nuxt/kit': ^3.2.2
@@ -9517,8 +9525,8 @@ packages:
'@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.1.3
fast-glob: 3.3.2
- local-pkg: 0.5.0
- magic-string: 0.30.12
+ local-pkg: 0.5.1
+ magic-string: 0.30.13
minimatch: 9.0.5
unimport: 3.13.2
unplugin: 1.16.0
@@ -9607,7 +9615,7 @@ packages:
engines: {node: '>= 0.8'}
dev: true
- /vite@5.2.8(@types/node@22.9.0)(sass@1.79.3)(terser@5.36.0):
+ /vite@5.2.8(@types/node@22.9.1)(sass@1.79.3)(terser@5.36.0):
resolution: {integrity: sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
@@ -9635,16 +9643,16 @@ packages:
terser:
optional: true
dependencies:
- '@types/node': 22.9.0
+ '@types/node': 22.9.1
esbuild: 0.20.2
postcss: 8.4.49
- rollup: 4.26.0
+ rollup: 4.27.3
sass: 1.79.3
terser: 5.36.0
optionalDependencies:
fsevents: 2.3.3
- /vue-demi@0.14.10(vue@3.5.12):
+ /vue-demi@0.14.10(vue@3.5.13):
resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
engines: {node: '>=12'}
hasBin: true
@@ -9656,17 +9664,17 @@ packages:
'@vue/composition-api':
optional: true
dependencies:
- vue: 3.5.12(typescript@4.9.5)
+ vue: 3.5.13(typescript@4.9.5)
dev: false
- /vue-eslint-parser@9.4.3(eslint@9.14.0):
+ /vue-eslint-parser@9.4.3(eslint@9.15.0):
resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==}
engines: {node: ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: '>=6.0.0'
dependencies:
debug: 4.3.7
- eslint: 9.14.0
+ eslint: 9.15.0
eslint-scope: 7.2.2
eslint-visitor-keys: 3.4.3
espree: 9.6.1
@@ -9677,13 +9685,13 @@ packages:
- supports-color
dev: true
- /vue-router@4.4.5(vue@3.5.12):
+ /vue-router@4.4.5(vue@3.5.13):
resolution: {integrity: sha512-4fKZygS8cH1yCyuabAXGUAsyi1b2/o/OKgu/RUb+znIYOxPRxdkytJEx+0wGcpBE1pX6vUgh5jwWOKRGvuA/7Q==}
peerDependencies:
vue: ^3.2.0
dependencies:
'@vue/devtools-api': 6.6.4
- vue: 3.5.12(typescript@4.9.5)
+ vue: 3.5.13(typescript@4.9.5)
dev: false
/vue-template-compiler@2.7.16:
@@ -9705,19 +9713,19 @@ packages:
typescript: 4.9.5
dev: true
- /vue@3.5.12(typescript@4.9.5):
- resolution: {integrity: sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==}
+ /vue@3.5.13(typescript@4.9.5):
+ resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
- '@vue/compiler-dom': 3.5.12
- '@vue/compiler-sfc': 3.5.12
- '@vue/runtime-dom': 3.5.12
- '@vue/server-renderer': 3.5.12(vue@3.5.12)
- '@vue/shared': 3.5.12
+ '@vue/compiler-dom': 3.5.13
+ '@vue/compiler-sfc': 3.5.13
+ '@vue/runtime-dom': 3.5.13
+ '@vue/server-renderer': 3.5.13(vue@3.5.13)
+ '@vue/shared': 3.5.13
typescript: 4.9.5
/w3c-hr-time@1.0.2:
@@ -9803,13 +9811,13 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
- /wot-design-uni@1.3.14(vue@3.5.12):
+ /wot-design-uni@1.3.14(vue@3.5.13):
resolution: {integrity: sha512-njqhMpVVHPWjiQdnuUkAFvCrJKv28RraSU6BiAW1soHw7BA6L3b7UJ0mdUMxsjT+A2hCk2YN8RsLKC03wDV9zw==}
engines: {HBuilderX: ^3.8.7}
peerDependencies:
vue: '>=3.2.47'
dependencies:
- vue: 3.5.12(typescript@4.9.5)
+ vue: 3.5.13(typescript@4.9.5)
dev: false
/wrap-ansi@7.0.0:
diff --git a/src/components/qiun-data-charts/license.md b/src/components/qiun-data-charts/license.md
new file mode 100644
index 0000000..c61b663
--- /dev/null
+++ b/src/components/qiun-data-charts/license.md
@@ -0,0 +1,201 @@
+ 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.
diff --git a/src/components/qiun-data-charts/qiun-data-charts.vue b/src/components/qiun-data-charts/qiun-data-charts.vue
new file mode 100644
index 0000000..9abcf2d
--- /dev/null
+++ b/src/components/qiun-data-charts/qiun-data-charts.vue
@@ -0,0 +1,1691 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/qiun-error/qiun-error.vue b/src/components/qiun-error/qiun-error.vue
new file mode 100644
index 0000000..b4a5caf
--- /dev/null
+++ b/src/components/qiun-error/qiun-error.vue
@@ -0,0 +1,44 @@
+
+
+
+ {{ errorMessage == null ? "请点击重试" : errorMessage }}
+
+
+
+
+
+
diff --git a/src/components/qiun-loading/loading1.vue b/src/components/qiun-loading/loading1.vue
new file mode 100644
index 0000000..ea6034b
--- /dev/null
+++ b/src/components/qiun-loading/loading1.vue
@@ -0,0 +1,158 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/qiun-loading/loading2.vue b/src/components/qiun-loading/loading2.vue
new file mode 100644
index 0000000..a22a3da
--- /dev/null
+++ b/src/components/qiun-loading/loading2.vue
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/qiun-loading/loading3.vue b/src/components/qiun-loading/loading3.vue
new file mode 100644
index 0000000..91ce4bd
--- /dev/null
+++ b/src/components/qiun-loading/loading3.vue
@@ -0,0 +1,171 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/qiun-loading/loading4.vue b/src/components/qiun-loading/loading4.vue
new file mode 100644
index 0000000..1722252
--- /dev/null
+++ b/src/components/qiun-loading/loading4.vue
@@ -0,0 +1,219 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/qiun-loading/loading5.vue b/src/components/qiun-loading/loading5.vue
new file mode 100644
index 0000000..bade61c
--- /dev/null
+++ b/src/components/qiun-loading/loading5.vue
@@ -0,0 +1,226 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/qiun-loading/qiun-loading.vue b/src/components/qiun-loading/qiun-loading.vue
new file mode 100644
index 0000000..dfe42c8
--- /dev/null
+++ b/src/components/qiun-loading/qiun-loading.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/u-charts/config-echarts.js b/src/components/u-charts/config-echarts.js
new file mode 100644
index 0000000..2482b07
--- /dev/null
+++ b/src/components/u-charts/config-echarts.js
@@ -0,0 +1,444 @@
+/*
+ * 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 += "
" + 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}
{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;
diff --git a/src/components/u-charts/config-ucharts.js b/src/components/u-charts/config-ucharts.js
new file mode 100644
index 0000000..556ac25
--- /dev/null
+++ b/src/components/u-charts/config-ucharts.js
@@ -0,0 +1,676 @@
+/*
+ * 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",
+ "mount",
+ "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",
+ "mount",
+ "bar",
+ "area",
+ "radar",
+ "gauge",
+ "candle",
+ "mix",
+ "demotype",
+ ],
+ //instance为实例变量承载属性,不要删除
+ instance: {},
+ //option为opts及eopts承载属性,不要删除
+ option: {},
+ //下面是自定义format配置,因除H5端外的其他端无法通过props传递函数,只能通过此属性对应下标的方式来替换
+ formatter: {
+ yAxisDemo1: function (val, index, opts) {
+ return val + "元";
+ },
+ yAxisDemo2: function (val, index, opts) {
+ return val.toFixed(2);
+ },
+ xAxisDemo1: function (val, index, opts) {
+ return val + "年";
+ },
+ xAxisDemo2: function (val, index, opts) {
+ return formatDateTime(val, "h:m");
+ },
+ seriesDemo1: function (val, index, series, opts) {
+ return val + "元";
+ },
+ tooltipDemo1: function (item, category, index, opts) {
+ if (index == 0) {
+ return "随便用" + item.data + "年";
+ } else {
+ return "其他我没改" + item.data + "天";
+ }
+ },
+ pieDemo: function (val, index, series, opts) {
+ 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,
+ activeType: "hollow",
+ },
+ },
+ },
+ 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,
+ activeType: "hollow",
+ },
+ },
+ },
+ 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,
+ activeType: "hollow",
+ },
+ },
+ },
+ column: {
+ type: "column",
+ color: color,
+ padding: [15, 15, 0, 5],
+ xAxis: {
+ disableGrid: true,
+ },
+ yAxis: {
+ data: [{ min: 0 }],
+ },
+ legend: {},
+ extra: {
+ column: {
+ type: "group",
+ width: 30,
+ activeBgColor: "#000000",
+ activeBgOpacity: 0.08,
+ },
+ },
+ },
+ mount: {
+ type: "mount",
+ color: color,
+ padding: [15, 15, 0, 5],
+ xAxis: {
+ disableGrid: true,
+ },
+ yAxis: {
+ data: [{ min: 0 }],
+ },
+ legend: {},
+ extra: {
+ mount: {
+ type: "mount",
+ widthRatio: 1.5,
+ },
+ },
+ },
+ 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,
+ activeType: "hollow",
+ },
+ },
+ },
+ 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,
+ labelShow: true,
+ },
+ },
+ },
+ 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;
diff --git a/src/components/u-charts/license.md b/src/components/u-charts/license.md
new file mode 100644
index 0000000..c61b663
--- /dev/null
+++ b/src/components/u-charts/license.md
@@ -0,0 +1,201 @@
+ 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.
diff --git a/src/components/u-charts/readme.md b/src/components/u-charts/readme.md
new file mode 100644
index 0000000..b390690
--- /dev/null
+++ b/src/components/u-charts/readme.md
@@ -0,0 +1,6 @@
+# uCharts JSSDK说明
+
+1、如不使用uCharts组件,可直接引用u-charts.js,打包编译后会`自动压缩`,压缩后体积约为`120kb`。
+2、如果120kb的体积仍需压缩,请手到uCharts官网通过在线定制选择您需要的图表。
+3、config-ucharts.js为uCharts组件的用户配置文件,升级前请`自行备份config-ucharts.js`文件,以免被强制覆盖。
+4、config-echarts.js为ECharts组件的用户配置文件,升级前请`自行备份config-echarts.js`文件,以免被强制覆盖。
diff --git a/src/components/u-charts/u-charts.js b/src/components/u-charts/u-charts.js
new file mode 100644
index 0000000..750101a
--- /dev/null
+++ b/src/components/u-charts/u-charts.js
@@ -0,0 +1,9394 @@
+/*
+ * uCharts (R)
+ * 高性能跨平台图表库,支持H5、APP、小程序(微信/支付宝/百度/头条/QQ/360/快手)、Vue、Taro等支持canvas的框架平台
+ * Copyright (C) 2018-2022 QIUN (R) 秋云 https://www.ucharts.cn All rights reserved.
+ * Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
+ * 复制使用请保留本段注释,感谢支持开源!
+ *
+ * uCharts (R) 官方网站
+ * 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.5.0-20230101",
+ yAxisWidth: 15,
+ xAxisHeight: 22,
+ padding: [10, 10, 10, 10],
+ rotate: false,
+ 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,
+ titleFontSize: 20,
+ subtitleFontSize: 15,
+ radarLabelTextMargin: 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;
+}
+
+// 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") {
+ if (num == num + 1) {
+ //修复数据值过大num++无效的bug by 向日葵 @xrk_jy
+ break;
+ }
+ 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);
+ if (
+ opts.type == "mount" &&
+ opts.extra &&
+ opts.extra.mount &&
+ opts.extra.mount.widthRatio &&
+ opts.extra.mount.widthRatio > 1
+ ) {
+ if (opts.extra.mount.widthRatio > 2) opts.extra.mount.widthRatio = 2;
+ dataChartWidth += (opts.extra.mount.widthRatio - 1) * chartData.eachSpacing;
+ }
+ 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 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":
+ case "bar":
+ item.legendShape = "rect";
+ break;
+ case "area":
+ case "mount":
+ item.legendShape = "triangle";
+ 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.legendShape = item.legendShape;
+ 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 {
+ for (let i = 0; i < calPoints.length; i++) {
+ if (calPoints[i][index]) {
+ points = calPoints[i][index];
+ break;
+ }
+ }
+ }
+ 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,
+ legendShape:
+ opts.extra.tooltip.legendShape == "auto"
+ ? item.legendShape
+ : opts.extra.tooltip.legendShape,
+ };
+ });
+ 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,
+ legendShape:
+ opts.extra.tooltip.legendShape == "auto"
+ ? item.legendShape
+ : opts.extra.tooltip.legendShape,
+ };
+ });
+ 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],
+ legendShape:
+ opts.extra.tooltip.legendShape == "auto"
+ ? item.legendShape
+ : opts.extra.tooltip.legendShape,
+ };
+ let text2 = {
+ text: "收盘:" + item.data[1],
+ color: color[1],
+ legendShape:
+ opts.extra.tooltip.legendShape == "auto"
+ ? item.legendShape
+ : opts.extra.tooltip.legendShape,
+ };
+ let text3 = {
+ text: "最低:" + item.data[2],
+ color: color[2],
+ legendShape:
+ opts.extra.tooltip.legendShape == "auto"
+ ? item.legendShape
+ : opts.extra.tooltip.legendShape,
+ };
+ let text4 = {
+ text: "最高:" + item.data[3],
+ color: color[3],
+ legendShape:
+ opts.extra.tooltip.legendShape == "auto"
+ ? item.legendShape
+ : opts.extra.tooltip.legendShape,
+ };
+ 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];
+ const legendText = item.legendText ? item.legendText : item.name;
+ let itemWidth =
+ shapeWidth +
+ shapeRight +
+ measureText(legendText || "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: opts.xAxis.lineHeight * opts.pix + opts.xAxis.marginTop * opts.pix,
+ };
+ var fontSize = opts.xAxis.fontSize * opts.pix;
+ var categoriesTextLenth = categories.map(function (item, index) {
+ var xitem = opts.xAxis.formatter ? opts.xAxis.formatter(item, index, opts) : item;
+ return measureText(String(xitem), fontSize, context);
+ });
+ var maxTextLength = Math.max.apply(this, categoriesTextLenth);
+ if (opts.xAxis.rotateLabel == true) {
+ result.angle = (opts.xAxis.rotateAngle * Math.PI) / 180;
+ let tempHeight =
+ opts.xAxis.marginTop * opts.pix * 2 + Math.abs(maxTextLength * Math.sin(result.angle));
+ tempHeight =
+ tempHeight < fontSize + opts.xAxis.marginTop * opts.pix * 2
+ ? tempHeight + opts.xAxis.marginTop * opts.pix * 2
+ : tempHeight;
+ result.xAxisHeight = tempHeight;
+ }
+ if (opts.enableScroll && opts.xAxis.scrollShow) {
+ result.xAxisHeight += 6 * opts.pix;
+ }
+ if (opts.xAxis.disabled) {
+ result.xAxisHeight = 0;
+ }
+ 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: opts.xAxis.lineHeight * opts.pix + opts.xAxis.marginTop * opts.pix,
+ };
+ 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, context);
+ });
+ 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, option, eachSpacing) {
+ var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
+ for (let i = 0; i < series.length; i++) {
+ if (option.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(option.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.direction == "ccw") {
+ if (arcbarOption.startAngle < arcbarOption.endAngle) {
+ totalAngle = 2 + arcbarOption.startAngle - arcbarOption.endAngle;
+ } else {
+ totalAngle = arcbarOption.startAngle - arcbarOption.endAngle;
+ }
+ } 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 (arcbarOption.direction == "ccw") {
+ item._proportion_ = arcbarOption.startAngle - totalAngle * item.data * process;
+ }
+ if (item._proportion_ >= 2) {
+ item._proportion_ = item._proportion_ % 2;
+ }
+ }
+ return series;
+}
+
+function getGaugeArcbarDataPoints(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;
+ if (endAngle < startAngle) {
+ totalAngle = 2 + endAngle - startAngle;
+ } else {
+ totalAngle = startAngle - endAngle;
+ }
+ 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;
+ if (gaugeOption.endAngle < gaugeOption.startAngle) {
+ totalAngle = 2 + gaugeOption.endAngle - gaugeOption.startAngle;
+ } else {
+ totalAngle = gaugeOption.startAngle - gaugeOption.endAngle;
+ }
+ 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 = 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 -= 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 widthRatio = 0;
+ if (
+ opts.type == "mount" &&
+ opts.extra &&
+ opts.extra.mount &&
+ opts.extra.mount.widthRatio &&
+ opts.extra.mount.widthRatio > 1
+ ) {
+ if (opts.extra.mount.widthRatio > 2) opts.extra.mount.widthRatio = 2;
+ widthRatio = opts.extra.mount.widthRatio - 1;
+ dataCount += widthRatio;
+ }
+ 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 + (widthRatio / 2) * eachSpacing + index * eachSpacing);
+ });
+ if (opts.xAxis.boundaryGap !== "justify") {
+ if (opts.enableScroll === true) {
+ xAxisPoints.push(startX + widthRatio * eachSpacing + 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 getLineDataPoints(
+ data,
+ minRange,
+ maxRange,
+ xAxisPoints,
+ eachSpacing,
+ opts,
+ config,
+ lineOption,
+ process
+) {
+ var process = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : 1;
+ var 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;
+ if (lineOption.animation == "vertical") {
+ 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);
+ } 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);
+ } else {
+ point.x = xAxisPoints[0] + eachSpacing * index * process;
+ var value = item;
+ if (boundaryGap == "center") {
+ point.x += eachSpacing / 2;
+ }
+ var height = (validHeight * (value - minRange)) / (maxRange - minRange);
+ point.y = opts.height - height - opts.area[2];
+ points.push(point);
+ }
+ }
+ });
+ return points;
+}
+
+function getColumnDataPoints(
+ data,
+ minRange,
+ maxRange,
+ xAxisPoints,
+ eachSpacing,
+ opts,
+ config,
+ zeroPoints,
+ process
+) {
+ var process = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : 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.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);
+ } else {
+ value = item.value;
+ }
+ }
+ point.x += eachSpacing / 2;
+ var height = (validHeight * (value * process - minRange)) / (maxRange - minRange);
+ point.y = opts.height - height - opts.area[2];
+ points.push(point);
+ }
+ });
+ return points;
+}
+
+function getMountDataPoints(
+ series,
+ minRange,
+ maxRange,
+ xAxisPoints,
+ eachSpacing,
+ opts,
+ mountOption,
+ zeroPoints
+) {
+ var process = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : 1;
+ var points = [];
+ var validHeight = opts.height - opts.area[0] - opts.area[2];
+ var validWidth = opts.width - opts.area[1] - opts.area[3];
+ var mountWidth = eachSpacing * mountOption.widthRatio;
+ series.forEach(function (item, index) {
+ if (item === null) {
+ points.push(null);
+ } else {
+ var point = {};
+ point.color = item.color;
+ point.x = xAxisPoints[index];
+ point.x += eachSpacing / 2;
+ var value = item.data;
+ var height = (validHeight * (value * process - minRange)) / (maxRange - minRange);
+ point.y = opts.height - height - opts.area[2];
+ point.value = value;
+ point.width = mountWidth;
+ 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;
+ if (typeof item === "object" && item !== null) {
+ value = item.value;
+ }
+ 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;
+ if (typeof item === "object" && item !== null) {
+ value = item.value;
+ }
+ 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);
+ }
+ if (minData === maxData) {
+ if (maxData == 0) {
+ maxData = 10;
+ } else {
+ minData = 0;
+ }
+ }
+ var dataRange = getDataRange(minData, maxData);
+ var minRange = yData.min === undefined || yData.min === null ? dataRange.minRange : yData.min;
+ var maxRange = yData.max === undefined || yData.max === null ? dataRange.maxRange : yData.max;
+ var eachRange = (maxRange - minRange) / opts.yAxis.splitNumber;
+ var range = [];
+ 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, index, opts) => {
+ return val + (yData.unit || "");
+ };
+ }
+ yData.categories = yData.categories || opts.categories;
+ rangesArr[i] = yData.categories;
+ } else {
+ if (!yData.formatter) {
+ yData.formatter = (val, index, opts) => {
+ return util.toFixed(val, yData.tofix || 0) + (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, index) {
+ items = yData.formatter(items, index, opts);
+ 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, index, opts) => {
+ return val + (opts.yAxis.unit || "");
+ };
+ }
+ } else {
+ if (!opts.yAxis.formatter) {
+ opts.yAxis.formatter = (val, index, opts) => {
+ 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, index) {
+ item = opts.yAxis.formatter(item, index, opts);
+ 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 = Math.max.apply(this, ranges[i]);
+ let minVal = Math.min.apply(this, ranges[i]);
+ let item = maxVal - ((maxVal - minVal) * (point - minAxis)) / spacingValid;
+ item =
+ opts.yAxis.data && opts.yAxis.data[i].formatter
+ ? opts.yAxis.data[i].formatter(item, i, opts)
+ : 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 === "none") {
+ return;
+ }
+ context.closePath();
+ context.fill();
+ context.stroke();
+}
+
+function drawActivePoint(points, color, shape, context, opts, option, seriesIndex) {
+ if (!opts.tooltip) {
+ return;
+ }
+ if (opts.tooltip.group.length > 0 && opts.tooltip.group.includes(seriesIndex) == false) {
+ return;
+ }
+ var pointIndex =
+ typeof opts.tooltip.index === "number"
+ ? opts.tooltip.index
+ : opts.tooltip.index[opts.tooltip.group.indexOf(seriesIndex)];
+ context.beginPath();
+ if (option.activeType == "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 && pointIndex == index) {
+ 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 && pointIndex == index) {
+ 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 && pointIndex == index) {
+ 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 && pointIndex == index) {
+ 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 === "none") {
+ 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, series, opts) : value;
+ context.setTextAlign("center");
+ context.fillText(String(formatVal), item.x, item.y - 4 + textOffset * opts.pix);
+ context.closePath();
+ context.stroke();
+ context.setTextAlign("left");
+ }
+ });
+}
+
+function drawColumePointText(points, series, config, context, opts) {
+ // 绘制数据文案
+ var data = series.data;
+ var textOffset = series.textOffset ? series.textOffset : 0;
+ var Position = opts.extra.column.labelPosition;
+ 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, series, opts) : value;
+ context.setTextAlign("center");
+ var startY = item.y - 4 * opts.pix + textOffset * opts.pix;
+ if (item.y > series.zeroPoints) {
+ startY = item.y + textOffset * opts.pix + fontSize;
+ }
+ if (Position == "insideTop") {
+ startY = item.y + fontSize + textOffset * opts.pix;
+ if (item.y > series.zeroPoints) {
+ startY = item.y - textOffset * opts.pix - 4 * opts.pix;
+ }
+ }
+ if (Position == "center") {
+ startY =
+ item.y + textOffset * opts.pix + (opts.height - opts.area[2] - item.y + fontSize) / 2;
+ if (series.zeroPoints < opts.height - opts.area[2]) {
+ startY = item.y + textOffset * opts.pix + (series.zeroPoints - item.y + fontSize) / 2;
+ }
+ if (item.y > series.zeroPoints) {
+ startY = item.y - textOffset * opts.pix - (item.y - series.zeroPoints - fontSize) / 2;
+ }
+ if (opts.extra.column.type == "stack") {
+ startY = item.y + textOffset * opts.pix + (item.y0 - item.y + fontSize) / 2;
+ }
+ }
+ if (Position == "bottom") {
+ startY = opts.height - opts.area[2] + textOffset * opts.pix - 4 * opts.pix;
+ if (series.zeroPoints < opts.height - opts.area[2]) {
+ startY = series.zeroPoints + textOffset * opts.pix - 4 * opts.pix;
+ }
+ if (item.y > series.zeroPoints) {
+ startY = series.zeroPoints - textOffset * opts.pix + fontSize + 2 * opts.pix;
+ }
+ if (opts.extra.column.type == "stack") {
+ startY = item.y0 + textOffset * opts.pix - 4 * opts.pix;
+ }
+ }
+ context.fillText(String(formatVal), item.x, startY);
+ context.closePath();
+ context.stroke();
+ context.setTextAlign("left");
+ }
+ });
+}
+
+function drawMountPointText(points, series, config, context, opts, zeroPoints) {
+ // 绘制数据文案
+ var data = series.data;
+ var textOffset = series.textOffset ? series.textOffset : 0;
+ var Position = opts.extra.mount.labelPosition;
+ points.forEach(function (item, index) {
+ if (item !== null) {
+ context.beginPath();
+ var fontSize = series[index].textSize ? series[index].textSize * opts.pix : config.fontSize;
+ context.setFontSize(fontSize);
+ context.setFillStyle(series[index].textColor || opts.fontColor);
+ var value = item.value;
+ var formatVal = series[index].formatter
+ ? series[index].formatter(value, index, series, opts)
+ : value;
+ context.setTextAlign("center");
+ var startY = item.y - 4 * opts.pix + textOffset * opts.pix;
+ if (item.y > zeroPoints) {
+ startY = item.y + textOffset * opts.pix + fontSize;
+ }
+ context.fillText(String(formatVal), item.x, startY);
+ 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, series, opts) : 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;
+ radius = radius < 10 ? 10 : radius;
+ let totalAngle;
+ if (gaugeOption.endAngle < gaugeOption.startAngle) {
+ totalAngle = 2 + gaugeOption.endAngle - gaugeOption.startAngle;
+ } else {
+ totalAngle = gaugeOption.startAngle - gaugeOption.endAngle;
+ }
+ 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, i, opts) : 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 || {};
+ angleList.forEach(function (angle, index) {
+ if (radarOption.labelPointShow === true && opts.categories[index] !== "") {
+ var posPoint = {
+ x: radius * Math.cos(angle),
+ y: radius * Math.sin(angle),
+ };
+ var posPointAxis = convertCoordinateOrigin(posPoint.x, posPoint.y, centerPosition);
+ context.setFillStyle(radarOption.labelPointColor);
+ context.beginPath();
+ context.arc(
+ posPointAxis.x,
+ posPointAxis.y,
+ radarOption.labelPointRadius * opts.pix,
+ 0,
+ 2 * Math.PI,
+ false
+ );
+ context.closePath();
+ context.fill();
+ }
+ if (radarOption.labelShow === true) {
+ var pos = {
+ x: (radius + config.radarLabelTextMargin * opts.pix) * Math.cos(angle),
+ y: (radius + config.radarLabelTextMargin * opts.pix) * 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) {
+ var text = item.formatter
+ ? item.formatter(item, index, series, opts)
+ : util.toFixed(item._proportion_.toFixed(4) * 100) + "%";
+ text = item.labelText ? item.labelText : text;
+ 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,
+ labelShow: item.labelShow,
+ };
+ });
+ 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++) {
+ if (seriesConvert[i].labelShow === false) {
+ continue;
+ }
+ 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 * opts.pix, 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 + 2 * opts.pix;
+ 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 - toolTipOption.boxPadding * opts.pix,
+ textY,
+ textWidth + 2 * toolTipOption.boxPadding * opts.pix,
+ config.fontSize + 2 * toolTipOption.boxPadding * opts.pix
+ );
+ context.closePath();
+ context.stroke();
+ context.fill();
+ context.beginPath();
+ context.setFontSize(config.fontSize);
+ context.setFillStyle(toolTipOption.labelFontColor || opts.fontColor);
+ context.fillText(
+ String(labelText),
+ textX,
+ textY + toolTipOption.boxPadding * opts.pix + 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,
+ labelFontSize: 13,
+ labelPadding: 6,
+ labelFontColor: "#666666",
+ labelBgColor: "#DFE8FF",
+ labelBgOpacity: 0.8,
+ labelAlign: "left",
+ labelOffsetX: 0,
+ labelOffsetY: 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 fontSize = item.labelFontSize * opts.pix;
+ let labelText = item.labelText ? item.labelText : item.value;
+ context.setFontSize(fontSize);
+ let textWidth = measureText(labelText, fontSize, context);
+ let bgWidth = textWidth + item.labelPadding * opts.pix * 2;
+ let bgStartX = item.labelAlign == "left" ? opts.area[3] - bgWidth : opts.width - opts.area[1];
+ bgStartX += item.labelOffsetX;
+ let bgStartY = item.y - 0.5 * fontSize - item.labelPadding * opts.pix;
+ bgStartY += item.labelOffsetY;
+ let textX = bgStartX + item.labelPadding * opts.pix;
+ 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, bgStartY, bgWidth, fontSize + 2 * item.labelPadding * opts.pix);
+ context.closePath();
+ context.stroke();
+ context.fill();
+ context.setFontSize(fontSize);
+ context.setTextAlign("left");
+ context.setFillStyle(item.labelFontColor);
+ context.fillText(
+ String(labelText),
+ textX,
+ bgStartY + fontSize + (item.labelPadding * opts.pix) / 2
+ );
+ 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 boxPadding = toolTipOption.boxPadding * opts.pix;
+ 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(toolTipOption.fontSize * opts.pix);
+ let textWidth = measureText(labelText[i], toolTipOption.fontSize * opts.pix, context);
+ let bgStartX, bgEndX, bgWidth;
+ if (widthArr[i].position == "left") {
+ bgStartX = tStartLeft - (textWidth + boxPadding * 2) - 2 * opts.pix;
+ bgEndX = Math.max(bgStartX, bgStartX + textWidth + boxPadding * 2);
+ } else {
+ bgStartX = tStartRight + 2 * opts.pix;
+ bgEndX = Math.max(bgStartX + widthArr[i].width, bgStartX + textWidth + boxPadding * 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 - boxPadding,
+ bgWidth,
+ config.fontSize + 2 * boxPadding
+ );
+ 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,
+ activeWidth: eachSpacing,
+ },
+ opts.extra.column
+ );
+ toolTipOption.activeWidth =
+ toolTipOption.activeWidth > eachSpacing ? eachSpacing : toolTipOption.activeWidth;
+ var startY = opts.area[0];
+ var endY = opts.height - opts.area[2];
+ context.beginPath();
+ context.setFillStyle(hexToRgb(toolTipOption.activeBgColor, toolTipOption.activeBgOpacity));
+ context.rect(
+ offsetX - toolTipOption.activeWidth / 2,
+ startY,
+ toolTipOption.activeWidth,
+ 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,
+ boxPadding: 3,
+ fontColor: "#FFFFFF",
+ fontSize: 13,
+ lineHeight: 20,
+ legendShow: true,
+ legendShape: "auto",
+ splitLine: true,
+ },
+ opts.extra.tooltip
+ );
+ if (toolTipOption.showCategory == true && opts.categories) {
+ textList.unshift({ text: opts.categories[opts.tooltip.index], color: null });
+ }
+ var fontSize = toolTipOption.fontSize * opts.pix;
+ var lineHeight = toolTipOption.lineHeight * opts.pix;
+ var boxPadding = toolTipOption.boxPadding * opts.pix;
+ var legendWidth = fontSize;
+ var legendMarginRight = 5 * opts.pix;
+ if (toolTipOption.legendShow == false) {
+ legendWidth = 0;
+ legendMarginRight = 0;
+ }
+ var arrowWidth = toolTipOption.showArrow ? 8 * opts.pix : 0;
+ var isOverRightBorder = false;
+ if (
+ opts.type == "line" ||
+ opts.type == "mount" ||
+ 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, fontSize, context);
+ });
+ var toolTipWidth =
+ legendWidth + legendMarginRight + 4 * boxPadding + Math.max.apply(null, textWidth);
+ var toolTipHeight = 2 * boxPadding + textList.length * lineHeight;
+ 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, toolTipOption.bgOpacity));
+ context.setLineWidth(toolTipOption.borderWidth * opts.pix);
+ context.setStrokeStyle(hexToRgb(toolTipOption.borderColor, toolTipOption.borderOpacity));
+ var radius = toolTipOption.borderRadius;
+ if (isOverRightBorder) {
+ // 增加左侧仍然超出的判断
+ if (toolTipWidth + arrowWidth > opts.width) {
+ offset.x =
+ opts.width +
+ Math.abs(opts._scrollDistance_ || 0) +
+ arrowWidth +
+ (toolTipWidth - opts.width);
+ }
+ if (toolTipWidth > offset.x) {
+ offset.x =
+ opts.width +
+ Math.abs(opts._scrollDistance_ || 0) +
+ arrowWidth +
+ (toolTipWidth - opts.width);
+ }
+ 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
+ if (toolTipOption.legendShow) {
+ textList.forEach(function (item, index) {
+ if (item.color !== null) {
+ context.beginPath();
+ context.setFillStyle(item.color);
+ var startX = offset.x + arrowWidth + 2 * boxPadding;
+ var startY = offset.y + (lineHeight - fontSize) / 2 + lineHeight * index + boxPadding + 1;
+ if (isOverRightBorder) {
+ startX = offset.x - toolTipWidth - arrowWidth + 2 * boxPadding;
+ }
+ switch (item.legendShape) {
+ case "line":
+ context.moveTo(startX, startY + 0.5 * legendWidth - 2 * opts.pix);
+ context.fillRect(
+ startX,
+ startY + 0.5 * legendWidth - 2 * opts.pix,
+ legendWidth,
+ 4 * opts.pix
+ );
+ break;
+ case "triangle":
+ context.moveTo(startX + 7.5 * opts.pix, startY + 0.5 * legendWidth - 5 * opts.pix);
+ context.lineTo(startX + 2.5 * opts.pix, startY + 0.5 * legendWidth + 5 * opts.pix);
+ context.lineTo(startX + 12.5 * opts.pix, startY + 0.5 * legendWidth + 5 * opts.pix);
+ context.lineTo(startX + 7.5 * opts.pix, startY + 0.5 * legendWidth - 5 * opts.pix);
+ break;
+ case "diamond":
+ context.moveTo(startX + 7.5 * opts.pix, startY + 0.5 * legendWidth - 5 * opts.pix);
+ context.lineTo(startX + 2.5 * opts.pix, startY + 0.5 * legendWidth);
+ context.lineTo(startX + 7.5 * opts.pix, startY + 0.5 * legendWidth + 5 * opts.pix);
+ context.lineTo(startX + 12.5 * opts.pix, startY + 0.5 * legendWidth);
+ context.lineTo(startX + 7.5 * opts.pix, startY + 0.5 * legendWidth - 5 * opts.pix);
+ break;
+ case "circle":
+ context.moveTo(startX + 7.5 * opts.pix, startY + 0.5 * legendWidth);
+ context.arc(
+ startX + 7.5 * opts.pix,
+ startY + 0.5 * legendWidth,
+ 5 * opts.pix,
+ 0,
+ 2 * Math.PI
+ );
+ break;
+ case "rect":
+ context.moveTo(startX, startY + 0.5 * legendWidth - 5 * opts.pix);
+ context.fillRect(
+ startX,
+ startY + 0.5 * legendWidth - 5 * opts.pix,
+ 15 * opts.pix,
+ 10 * opts.pix
+ );
+ break;
+ case "square":
+ context.moveTo(startX + 2 * opts.pix, startY + 0.5 * legendWidth - 5 * opts.pix);
+ context.fillRect(
+ startX + 2 * opts.pix,
+ startY + 0.5 * legendWidth - 5 * opts.pix,
+ 10 * opts.pix,
+ 10 * opts.pix
+ );
+ break;
+ default:
+ context.moveTo(startX, startY + 0.5 * legendWidth - 5 * opts.pix);
+ context.fillRect(
+ startX,
+ startY + 0.5 * legendWidth - 5 * opts.pix,
+ 15 * opts.pix,
+ 10 * opts.pix
+ );
+ }
+ context.closePath();
+ context.fill();
+ }
+ });
+ }
+
+ // draw text list
+ textList.forEach(function (item, index) {
+ var startX = offset.x + arrowWidth + 2 * boxPadding + legendWidth + legendMarginRight;
+ if (isOverRightBorder) {
+ startX =
+ offset.x - toolTipWidth - arrowWidth + 2 * boxPadding + legendWidth + legendMarginRight;
+ }
+ var startY =
+ offset.y + lineHeight * index + (lineHeight - fontSize) / 2 - 1 + boxPadding + fontSize;
+ context.beginPath();
+ context.setFontSize(fontSize);
+ context.setTextBaseline("normal");
+ context.setFillStyle(toolTipOption.fontColor);
+ context.fillText(item.text, startX, startY);
+ 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,
+ labelPosition: "outside",
+ },
+ 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();
+
+ // 计算0轴坐标
+ let spacingValid = opts.height - opts.area[0] - opts.area[2];
+ let zeroHeight = (spacingValid * (0 - minRange)) / (maxRange - minRange);
+ let zeroPoints = opts.height - Math.round(zeroHeight) - opts.area[2];
+ eachSeries.zeroPoints = zeroPoints;
+ var data = eachSeries.data;
+ switch (columnOption.type) {
+ case "group":
+ var points = getColumnDataPoints(
+ data,
+ minRange,
+ maxRange,
+ xAxisPoints,
+ eachSpacing,
+ opts,
+ config,
+ zeroPoints,
+ 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, zeroPoints);
+ //透明渐变
+ 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 > zeroPoints ? zeroPoints : item.y;
+ const width = item.width;
+ const height = Math.abs(zeroPoints - item.y);
+ if (columnOption.barBorderCircle) {
+ columnOption.barBorderRadius = [width / 2, width / 2, 0, 0];
+ }
+ if (item.y > zeroPoints) {
+ columnOption.barBorderRadius = [0, 0, width / 2, width / 2];
+ }
+ 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, item.y);
+ context.lineTo(startX + item.width, zeroPoints);
+ context.lineTo(startX, zeroPoints);
+ 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, 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
+ );
+ for (let i = 0; i < points.length; i++) {
+ let item = points[i];
+ if (item !== null && i > leftNum && i < rightNum) {
+ //画背景颜色
+ context.beginPath();
+ if (seriesIndex == 0 && columnOption.meterBorder > 0) {
+ context.setStrokeStyle(eachSeries.color);
+ context.setLineWidth(columnOption.meterBorder * opts.pix);
+ }
+ if (seriesIndex == 0) {
+ context.setFillStyle(columnOption.meterFillColor);
+ } else {
+ context.setFillStyle(item.color || eachSeries.color);
+ }
+ var startX = item.x - item.width / 2;
+ var height = opts.height - item.y - opts.area[2];
+ if (
+ (columnOption.barBorderRadius && columnOption.barBorderRadius.length === 4) ||
+ columnOption.barBorderCircle === true
+ ) {
+ const left = startX;
+ const top = item.y;
+ const width = item.width;
+ const height = zeroPoints - 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);
+ context.fill();
+ } else {
+ context.moveTo(startX, item.y);
+ context.lineTo(startX + item.width, item.y);
+ context.lineTo(startX + item.width, zeroPoints);
+ context.lineTo(startX, zeroPoints);
+ context.lineTo(startX, item.y);
+ context.fill();
+ }
+ if (seriesIndex == 0 && columnOption.meterBorder > 0) {
+ context.closePath();
+ context.stroke();
+ }
+ }
+ }
+ 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 = getColumnDataPoints(
+ data,
+ minRange,
+ maxRange,
+ xAxisPoints,
+ eachSpacing,
+ opts,
+ config,
+ process
+ );
+ points = fixColumeData(points, eachSpacing, series.length, seriesIndex, config, opts);
+ drawColumePointText(points, eachSeries, config, context, opts);
+ break;
+ case "stack":
+ var points = getStackDataPoints(
+ data,
+ minRange,
+ maxRange,
+ xAxisPoints,
+ eachSpacing,
+ opts,
+ config,
+ seriesIndex,
+ series,
+ process
+ );
+ drawColumePointText(points, eachSeries, config, context, opts);
+ break;
+ case "meter":
+ var points = getDataPoints(
+ data,
+ minRange,
+ maxRange,
+ xAxisPoints,
+ eachSpacing,
+ opts,
+ config,
+ process
+ );
+ drawColumePointText(points, eachSeries, config, context, opts);
+ break;
+ }
+ });
+ }
+ context.restore();
+ return {
+ xAxisPoints: xAxisPoints,
+ calPoints: calPoints,
+ eachSpacing: eachSpacing,
+ };
+}
+
+function drawMountDataPoints(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 mountOption = assign(
+ {},
+ {
+ type: "mount",
+ widthRatio: 1,
+ borderWidth: 1,
+ barBorderCircle: false,
+ barBorderRadius: [],
+ linearType: "none",
+ linearOpacity: 1,
+ customColor: [],
+ colorStop: 0,
+ },
+ opts.extra.mount
+ );
+ mountOption.widthRatio = mountOption.widthRatio <= 0 ? 0 : mountOption.widthRatio;
+ mountOption.widthRatio = mountOption.widthRatio >= 2 ? 2 : mountOption.widthRatio;
+ 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;
+ }
+ mountOption.customColor = fillCustomColor(
+ mountOption.linearType,
+ mountOption.customColor,
+ series,
+ config
+ );
+ let ranges, minRange, maxRange;
+ ranges = [].concat(opts.chartData.yAxisData.ranges[0]);
+ minRange = ranges.pop();
+ maxRange = ranges.shift();
+
+ // 计算0轴坐标
+ let spacingValid = opts.height - opts.area[0] - opts.area[2];
+ let zeroHeight = (spacingValid * (0 - minRange)) / (maxRange - minRange);
+ let zeroPoints = opts.height - Math.round(zeroHeight) - opts.area[2];
+
+ var points = getMountDataPoints(
+ series,
+ minRange,
+ maxRange,
+ xAxisPoints,
+ eachSpacing,
+ opts,
+ mountOption,
+ zeroPoints,
+ process
+ );
+ switch (mountOption.type) {
+ case "bar":
+ for (let i = 0; i < points.length; i++) {
+ let item = points[i];
+ if (item !== null && i > leftNum && i < rightNum) {
+ var startX = item.x - (eachSpacing * mountOption.widthRatio) / 2;
+ var height = opts.height - item.y - opts.area[2];
+ context.beginPath();
+ var fillColor = item.color || series[i].color;
+ var strokeColor = item.color || series[i].color;
+ if (mountOption.linearType !== "none") {
+ var grd = context.createLinearGradient(startX, item.y, startX, zeroPoints);
+ //透明渐变
+ if (mountOption.linearType == "opacity") {
+ grd.addColorStop(0, hexToRgb(fillColor, mountOption.linearOpacity));
+ grd.addColorStop(1, hexToRgb(fillColor, 1));
+ } else {
+ grd.addColorStop(
+ 0,
+ hexToRgb(mountOption.customColor[series[i].linearIndex], mountOption.linearOpacity)
+ );
+ grd.addColorStop(
+ mountOption.colorStop,
+ hexToRgb(mountOption.customColor[series[i].linearIndex], mountOption.linearOpacity)
+ );
+ grd.addColorStop(1, hexToRgb(fillColor, 1));
+ }
+ fillColor = grd;
+ }
+ // 圆角边框
+ if (
+ (mountOption.barBorderRadius && mountOption.barBorderRadius.length === 4) ||
+ mountOption.barBorderCircle === true
+ ) {
+ const left = startX;
+ const top = item.y > zeroPoints ? zeroPoints : item.y;
+ const width = item.width;
+ const height = Math.abs(zeroPoints - item.y);
+ if (mountOption.barBorderCircle) {
+ mountOption.barBorderRadius = [width / 2, width / 2, 0, 0];
+ }
+ if (item.y > zeroPoints) {
+ mountOption.barBorderRadius = [0, 0, width / 2, width / 2];
+ }
+ let [r0, r1, r2, r3] = mountOption.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, item.y);
+ context.lineTo(startX + item.width, zeroPoints);
+ context.lineTo(startX, zeroPoints);
+ context.lineTo(startX, item.y);
+ }
+ context.setStrokeStyle(strokeColor);
+ context.setFillStyle(fillColor);
+ if (mountOption.borderWidth > 0) {
+ context.setLineWidth(mountOption.borderWidth * opts.pix);
+ context.closePath();
+ context.stroke();
+ }
+ context.fill();
+ }
+ }
+ break;
+ case "triangle":
+ for (let i = 0; i < points.length; i++) {
+ let item = points[i];
+ if (item !== null && i > leftNum && i < rightNum) {
+ var startX = item.x - (eachSpacing * mountOption.widthRatio) / 2;
+ var height = opts.height - item.y - opts.area[2];
+ context.beginPath();
+ var fillColor = item.color || series[i].color;
+ var strokeColor = item.color || series[i].color;
+ if (mountOption.linearType !== "none") {
+ var grd = context.createLinearGradient(startX, item.y, startX, zeroPoints);
+ //透明渐变
+ if (mountOption.linearType == "opacity") {
+ grd.addColorStop(0, hexToRgb(fillColor, mountOption.linearOpacity));
+ grd.addColorStop(1, hexToRgb(fillColor, 1));
+ } else {
+ grd.addColorStop(
+ 0,
+ hexToRgb(mountOption.customColor[series[i].linearIndex], mountOption.linearOpacity)
+ );
+ grd.addColorStop(
+ mountOption.colorStop,
+ hexToRgb(mountOption.customColor[series[i].linearIndex], mountOption.linearOpacity)
+ );
+ grd.addColorStop(1, hexToRgb(fillColor, 1));
+ }
+ fillColor = grd;
+ }
+ context.moveTo(startX, zeroPoints);
+ context.lineTo(item.x, item.y);
+ context.lineTo(startX + item.width, zeroPoints);
+ context.setStrokeStyle(strokeColor);
+ context.setFillStyle(fillColor);
+ if (mountOption.borderWidth > 0) {
+ context.setLineWidth(mountOption.borderWidth * opts.pix);
+ context.stroke();
+ }
+ context.fill();
+ }
+ }
+ break;
+ case "mount":
+ for (let i = 0; i < points.length; i++) {
+ let item = points[i];
+ if (item !== null && i > leftNum && i < rightNum) {
+ var startX = item.x - (eachSpacing * mountOption.widthRatio) / 2;
+ var height = opts.height - item.y - opts.area[2];
+ context.beginPath();
+ var fillColor = item.color || series[i].color;
+ var strokeColor = item.color || series[i].color;
+ if (mountOption.linearType !== "none") {
+ var grd = context.createLinearGradient(startX, item.y, startX, zeroPoints);
+ //透明渐变
+ if (mountOption.linearType == "opacity") {
+ grd.addColorStop(0, hexToRgb(fillColor, mountOption.linearOpacity));
+ grd.addColorStop(1, hexToRgb(fillColor, 1));
+ } else {
+ grd.addColorStop(
+ 0,
+ hexToRgb(mountOption.customColor[series[i].linearIndex], mountOption.linearOpacity)
+ );
+ grd.addColorStop(
+ mountOption.colorStop,
+ hexToRgb(mountOption.customColor[series[i].linearIndex], mountOption.linearOpacity)
+ );
+ grd.addColorStop(1, hexToRgb(fillColor, 1));
+ }
+ fillColor = grd;
+ }
+ context.moveTo(startX, zeroPoints);
+ context.bezierCurveTo(
+ item.x - item.width / 4,
+ zeroPoints,
+ item.x - item.width / 4,
+ item.y,
+ item.x,
+ item.y
+ );
+ context.bezierCurveTo(
+ item.x + item.width / 4,
+ item.y,
+ item.x + item.width / 4,
+ zeroPoints,
+ startX + item.width,
+ zeroPoints
+ );
+ context.setStrokeStyle(strokeColor);
+ context.setFillStyle(fillColor);
+ if (mountOption.borderWidth > 0) {
+ context.setLineWidth(mountOption.borderWidth * opts.pix);
+ context.stroke();
+ }
+ context.fill();
+ }
+ }
+ break;
+ case "sharp":
+ for (let i = 0; i < points.length; i++) {
+ let item = points[i];
+ if (item !== null && i > leftNum && i < rightNum) {
+ var startX = item.x - (eachSpacing * mountOption.widthRatio) / 2;
+ var height = opts.height - item.y - opts.area[2];
+ context.beginPath();
+ var fillColor = item.color || series[i].color;
+ var strokeColor = item.color || series[i].color;
+ if (mountOption.linearType !== "none") {
+ var grd = context.createLinearGradient(startX, item.y, startX, zeroPoints);
+ //透明渐变
+ if (mountOption.linearType == "opacity") {
+ grd.addColorStop(0, hexToRgb(fillColor, mountOption.linearOpacity));
+ grd.addColorStop(1, hexToRgb(fillColor, 1));
+ } else {
+ grd.addColorStop(
+ 0,
+ hexToRgb(mountOption.customColor[series[i].linearIndex], mountOption.linearOpacity)
+ );
+ grd.addColorStop(
+ mountOption.colorStop,
+ hexToRgb(mountOption.customColor[series[i].linearIndex], mountOption.linearOpacity)
+ );
+ grd.addColorStop(1, hexToRgb(fillColor, 1));
+ }
+ fillColor = grd;
+ }
+ context.moveTo(startX, zeroPoints);
+ context.quadraticCurveTo(item.x - 0, zeroPoints - height / 4, item.x, item.y);
+ context.quadraticCurveTo(
+ item.x + 0,
+ zeroPoints - height / 4,
+ startX + item.width,
+ zeroPoints
+ );
+ context.setStrokeStyle(strokeColor);
+ context.setFillStyle(fillColor);
+ if (mountOption.borderWidth > 0) {
+ context.setLineWidth(mountOption.borderWidth * opts.pix);
+ context.stroke();
+ }
+ context.fill();
+ }
+ }
+ break;
+ }
+
+ if (opts.dataLabel !== false && process === 1) {
+ let ranges, minRange, maxRange;
+ ranges = [].concat(opts.chartData.yAxisData.ranges[0]);
+ minRange = ranges.pop();
+ maxRange = ranges.shift();
+ var points = getMountDataPoints(
+ series,
+ minRange,
+ maxRange,
+ xAxisPoints,
+ eachSpacing,
+ opts,
+ mountOption,
+ zeroPoints,
+ process
+ );
+ drawMountPointText(points, series, config, context, opts, zeroPoints);
+ }
+ context.restore();
+ return {
+ xAxisPoints: xAxisPoints,
+ calPoints: points,
+ 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.height;
+ 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);
+ context.lineTo(startX, startY + item.width);
+ 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);
+ 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,
+ activeType: "none",
+ },
+ 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);
+ }
+ drawActivePoint(
+ points,
+ eachSeries.color,
+ eachSeries.pointShape,
+ context,
+ opts,
+ areaOption,
+ seriesIndex
+ );
+ });
+
+ 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 = eachSeries.textSize * opts.pix || config.fontSize;
+ context.setFontSize(fontSize);
+ context.setFillStyle(eachSeries.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,
+ activeType: "none",
+ linearType: "none",
+ onShadow: false,
+ animation: "vertical",
+ },
+ 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) {
+ // 这段很神奇的代码用于解决ios16的setStrokeStyle失效的bug
+ context.beginPath();
+ context.setStrokeStyle(eachSeries.color);
+ context.moveTo(-10000, -10000);
+ context.lineTo(-10001, -10001);
+ context.stroke();
+ let ranges, minRange, maxRange;
+ ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
+ minRange = ranges.pop();
+ maxRange = ranges.shift();
+ var data = eachSeries.data;
+ var points = getLineDataPoints(
+ data,
+ minRange,
+ maxRange,
+ xAxisPoints,
+ eachSpacing,
+ opts,
+ config,
+ lineOption,
+ 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();
+ var strokeColor = eachSeries.color;
+ if (
+ lineOption.linearType !== "none" &&
+ eachSeries.linearColor &&
+ eachSeries.linearColor.length > 0
+ ) {
+ var grd = context.createLinearGradient(
+ opts.chartData.xAxisData.startX,
+ opts.height / 2,
+ opts.chartData.xAxisData.endX,
+ opts.height / 2
+ );
+ for (var i = 0; i < eachSeries.linearColor.length; i++) {
+ grd.addColorStop(eachSeries.linearColor[i][0], hexToRgb(eachSeries.linearColor[i][1], 1));
+ }
+ strokeColor = grd;
+ }
+ context.setStrokeStyle(strokeColor);
+ if (lineOption.onShadow == true && eachSeries.setShadow && eachSeries.setShadow.length > 0) {
+ context.setShadow(
+ eachSeries.setShadow[0],
+ eachSeries.setShadow[1],
+ eachSeries.setShadow[2],
+ eachSeries.setShadow[3]
+ );
+ } else {
+ context.setShadow(0, 0, 0, "rgba(0,0,0,0)");
+ }
+ 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);
+ }
+ drawActivePoint(points, eachSeries.color, eachSeries.pointShape, context, opts, lineOption);
+ });
+ 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 xAxisData = opts.chartData.xAxisData,
+ xAxisPoints = xAxisData.xAxisPoints,
+ eachSpacing = xAxisData.eachSpacing;
+ let columnOption = assign(
+ {},
+ {
+ width: eachSpacing / 2,
+ barBorderCircle: false,
+ barBorderRadius: [],
+ seriesGap: 2,
+ linearType: "none",
+ linearOpacity: 1,
+ customColor: [],
+ colorStop: 0,
+ },
+ opts.extra.mix.column
+ );
+ let areaOption = assign(
+ {},
+ {
+ opacity: 0.2,
+ gradient: false,
+ },
+ opts.extra.mix.area
+ );
+ let lineOption = assign(
+ {},
+ {
+ width: 2,
+ },
+ opts.extra.mix.line
+ );
+ 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, item.y);
+ context.lineTo(startX + item.width, 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.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(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(lineOption.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 (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 == "mount" ||
+ 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);
+ if (
+ opts.type == "mount" &&
+ opts.extra &&
+ opts.extra.mount &&
+ opts.extra.mount.widthRatio &&
+ opts.extra.mount.widthRatio > 1
+ ) {
+ if (opts.extra.mount.widthRatio > 2) opts.extra.mount.widthRatio = 2;
+ scrollTotalWidth += (opts.extra.mount.widthRatio - 1) * eachSpacing;
+ }
+ 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, index, opts) : 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;
+ }
+ // 如果在主视图区域内
+ var _scrollDistance_ = opts._scrollDistance_ || 0;
+ var truePoints =
+ boundaryGap == "center" ? xAxisPoints[index] + eachSpacing / 2 : xAxisPoints[index];
+ if (
+ truePoints - Math.abs(_scrollDistance_) >= opts.area[3] - 1 &&
+ truePoints - Math.abs(_scrollDistance_) <= opts.width - opts.area[1] + 1
+ ) {
+ context.beginPath();
+ context.setFontSize(xAxisFontSize);
+ context.setFillStyle(opts.xAxis.fontColor || opts.fontColor);
+ context.fillText(
+ String(xitem),
+ xAxisPoints[index] + offset,
+ startY +
+ opts.xAxis.marginTop * opts.pix +
+ ((opts.xAxis.lineHeight - opts.xAxis.fontSize) * opts.pix) / 2 +
+ opts.xAxis.fontSize * opts.pix
+ );
+ context.closePath();
+ context.stroke();
+ }
+ });
+ } else {
+ newCategories.forEach(function (item, index) {
+ var xitem = opts.xAxis.formatter ? opts.xAxis.formatter(item) : item;
+ // 如果在主视图区域内
+ var _scrollDistance_ = opts._scrollDistance_ || 0;
+ var truePoints =
+ boundaryGap == "center" ? xAxisPoints[index] + eachSpacing / 2 : xAxisPoints[index];
+ if (
+ truePoints - Math.abs(_scrollDistance_) >= opts.area[3] - 1 &&
+ truePoints - Math.abs(_scrollDistance_) <= opts.width - opts.area[1] + 1
+ ) {
+ context.save();
+ context.beginPath();
+ context.setFontSize(xAxisFontSize);
+ context.setFillStyle(opts.xAxis.fontColor || opts.fontColor);
+ var textWidth = measureText(String(xitem), xAxisFontSize, context);
+ var offsetX = xAxisPoints[index];
+ if (boundaryGap == "center") {
+ offsetX = xAxisPoints[index] + eachSpacing / 2;
+ }
+ var scrollHeight = 0;
+ if (opts.xAxis.scrollShow) {
+ scrollHeight = 6 * opts.pix;
+ }
+ var offsetY =
+ startY +
+ opts.xAxis.marginTop * opts.pix +
+ xAxisFontSize -
+ xAxisFontSize * Math.abs(Math.sin(config._xAxisTextAngle_));
+ if (opts.xAxis.rotateAngle < 0) {
+ offsetX -= xAxisFontSize / 2;
+ textWidth = 0;
+ } else {
+ offsetX += xAxisFontSize / 2;
+ textWidth = -textWidth;
+ }
+ context.translate(offsetX, offsetY);
+ context.rotate(-1 * config._xAxisTextAngle_);
+ context.fillText(String(xitem), textWidth, 0);
+ context.closePath();
+ context.stroke();
+ context.restore();
+ }
+ });
+ }
+ }
+ context.restore();
+
+ //画X轴标题
+ if (opts.xAxis.title) {
+ context.beginPath();
+ context.setFontSize(opts.xAxis.titleFontSize * opts.pix);
+ context.setFillStyle(opts.xAxis.titleFontColor);
+ context.fillText(
+ String(opts.xAxis.title),
+ opts.width - opts.area[1] + opts.xAxis.titleOffsetX * opts.pix,
+ opts.height -
+ opts.area[2] +
+ opts.xAxis.marginTop * opts.pix +
+ ((opts.xAxis.lineHeight - opts.xAxis.titleFontSize) * opts.pix) / 2 +
+ (opts.xAxis.titleFontSize + opts.xAxis.titleOffsetY) * opts.pix
+ );
+ context.closePath();
+ context.stroke();
+ }
+
+ //绘制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);
+ if (
+ opts.type == "mount" &&
+ opts.extra &&
+ opts.extra.mount &&
+ opts.extra.mount.widthRatio &&
+ opts.extra.mount.widthRatio > 1
+ ) {
+ if (opts.extra.mount.widthRatio > 2) opts.extra.mount.widthRatio = 2;
+ TotalWidth += (opts.extra.mount.widthRatio - 1) * xAxiseachSpacing;
+ }
+ 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];
+ // 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, endY + 2 * opts.pix);
+ }
+ if (
+ opts.enableScroll == true &&
+ opts.xAxis.scrollPosition &&
+ opts.xAxis.scrollPosition !== "right"
+ ) {
+ context.fillRect(endX, 0, opts.width, endY + 2 * opts.pix);
+ }
+ 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];
+ 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;
+ const legendText = item.legendText ? item.legendText : item.name;
+ context.beginPath();
+ context.setFontSize(fontSize);
+ context.setFillStyle(item.show ? opts.legend.fontColor : opts.legend.hiddenColor);
+ context.fillText(legendText, startX, startY + fontTrans);
+ context.closePath();
+ context.stroke();
+ if (opts.legend.position == "top" || opts.legend.position == "bottom") {
+ startX += measureText(legendText, fontSize, context) + itemGap;
+ item.area[2] = startX;
+ } else {
+ item.area[2] = startX + measureText(legendText, 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
+ );
+ radius = radius < 10 ? 10 : radius;
+ 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) {
+ 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
+ );
+ radius = radius < 10 ? 10 : radius;
+ var minRadius = roseOption.minRadius || radius * 0.5;
+ if (radius < minRadius) {
+ radius = minRadius + 10;
+ }
+ 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) {
+ 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",
+ direction: "cw",
+ lineCap: "round",
+ 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;
+ }
+ radius = radius < 10 ? 10 : radius;
+ 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(arcbarOption.lineCap);
+ 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,
+ arcbarOption.direction == "ccw"
+ );
+ } else {
+ context.arc(
+ centerPosition.x,
+ centerPosition.y,
+ radius - (arcbarOption.width * opts.pix + arcbarOption.gap * opts.pix) * i,
+ 0,
+ 2 * Math.PI,
+ arcbarOption.direction == "ccw"
+ );
+ }
+ 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(arcbarOption.lineCap);
+ 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,
+ arcbarOption.direction == "ccw"
+ );
+ 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;
+ radius = radius < 10 ? 10 : radius;
+ 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();
+ //## 第二步画刻度线
+ if (gaugeOption.endAngle < gaugeOption.startAngle) {
+ totalAngle = 2 + gaugeOption.endAngle - gaugeOption.startAngle;
+ } else {
+ totalAngle = gaugeOption.startAngle - gaugeOption.endAngle;
+ }
+ 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 = getGaugeArcbarDataPoints(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();
+ //画刻度线
+ if (gaugeOption.endAngle < gaugeOption.startAngle) {
+ totalAngle = 2 + gaugeOption.endAngle - gaugeOption.startAngle;
+ } else {
+ totalAngle = gaugeOption.startAngle - gaugeOption.endAngle;
+ }
+ 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",
+ gridEval: 1,
+ axisLabel: false,
+ axisLabelTofix: 0,
+ labelShow: true,
+ labelColor: "#666666",
+ labelPointShow: false,
+ labelPointRadius: 3,
+ labelPointColor: "#cccccc",
+ opacity: 0.2,
+ gridCount: 3,
+ border: false,
+ borderWidth: 2,
+ linearType: "none",
+ customColor: [],
+ },
+ 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;
+ radius = radius < 10 ? 10 : radius;
+ radius = radarOption.radius ? radarOption.radius : radius;
+ // 画分割线
+ context.beginPath();
+ context.setLineWidth(1 * opts.pix);
+ context.setStrokeStyle(radarOption.gridColor);
+ coordinateAngle.forEach(function (angle, index) {
+ var pos = convertCoordinateOrigin(
+ radius * Math.cos(angle),
+ radius * Math.sin(angle),
+ centerPosition
+ );
+ context.moveTo(centerPosition.x, centerPosition.y);
+ if (index % radarOption.gridEval == 0) {
+ 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);
+ }
+ radarOption.customColor = fillCustomColor(
+ radarOption.linearType,
+ radarOption.customColor,
+ series,
+ config
+ );
+ 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);
+
+ var fillcolor = hexToRgb(eachSeries.color, radarOption.opacity);
+ if (radarOption.linearType == "custom") {
+ var grd;
+ if (context.createCircularGradient) {
+ grd = context.createCircularGradient(centerPosition.x, centerPosition.y, radius);
+ } else {
+ grd = context.createRadialGradient(
+ centerPosition.x,
+ centerPosition.y,
+ 0,
+ centerPosition.x,
+ centerPosition.y,
+ radius
+ );
+ }
+ grd.addColorStop(
+ 0,
+ hexToRgb(radarOption.customColor[series[seriesIndex].linearIndex], radarOption.opacity)
+ );
+ grd.addColorStop(1, hexToRgb(eachSeries.color, radarOption.opacity));
+ fillcolor = grd;
+ }
+
+ context.setFillStyle(fillcolor);
+ 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);
+ }
+ });
+ // 画刻度值
+ if (radarOption.axisLabel === true) {
+ const maxData = Math.max(radarOption.max, Math.max.apply(null, dataCombine(series)));
+ const stepLength = radius / radarOption.gridCount;
+ const fontSize = opts.fontSize * opts.pix;
+ context.setFontSize(fontSize);
+ context.setFillStyle(opts.fontColor);
+ context.setTextAlign("left");
+ for (var i = 0; i < radarOption.gridCount + 1; i++) {
+ let label = (i * maxData) / radarOption.gridCount;
+ label = label.toFixed(radarOption.axisLabelTofix);
+ context.fillText(
+ String(label),
+ centerPosition.x + 3 * opts.pix,
+ centerPosition.y - i * stepLength + fontSize / 2
+ );
+ }
+ }
+
+ // 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 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;
+}
+
+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,
+ active: true,
+ 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, series[i].fillOpacity || mapOption.fillOpacity));
+ if (mapOption.active == true && 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) {
+ for (var i = 0; i < data.length; i++) {
+ 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 fontColor = data[i].textColor || opts.fontColor;
+ if (
+ mapOption.active &&
+ mapOption.activeTextColor &&
+ opts.tooltip &&
+ opts.tooltip.index == i
+ ) {
+ fontColor = mapOption.activeTextColor;
+ }
+ let text = data[i].properties.name;
+ context.beginPath();
+ context.setFontSize(fontSize);
+ context.setFillStyle(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 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 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,
+ minSize: 0,
+ 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
+ );
+ let seriesNew = getFunnelDataPoints(series, radius, funnelOption, 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 < seriesNew.length; i++) {
+ if (i == seriesNew.length - 1) {
+ if (opts.tooltip) {
+ if (opts.tooltip.index == i) {
+ context.beginPath();
+ context.setFillStyle(hexToRgb(seriesNew[i].color, funnelOption.activeOpacity));
+ context.moveTo(-activeWidth, -eachSpacing);
+ context.lineTo(-seriesNew[i].radius - activeWidth, 0);
+ context.lineTo(seriesNew[i].radius + activeWidth, 0);
+ context.lineTo(activeWidth, -eachSpacing);
+ context.lineTo(-activeWidth, -eachSpacing);
+ context.closePath();
+ context.fill();
+ }
+ }
+ seriesNew[i].funnelArea = [
+ centerPosition.x - seriesNew[i].radius,
+ centerPosition.y - eachSpacing * (i + 1),
+ centerPosition.x + seriesNew[i].radius,
+ centerPosition.y - eachSpacing * i,
+ ];
+ context.beginPath();
+ context.setLineWidth(funnelOption.borderWidth * opts.pix);
+ context.setStrokeStyle(funnelOption.borderColor);
+ var fillColor = hexToRgb(seriesNew[i].color, funnelOption.fillOpacity);
+ if (funnelOption.linearType == "custom") {
+ var grd = context.createLinearGradient(
+ seriesNew[i].radius,
+ -eachSpacing,
+ -seriesNew[i].radius,
+ -eachSpacing
+ );
+ grd.addColorStop(0, hexToRgb(seriesNew[i].color, funnelOption.fillOpacity));
+ grd.addColorStop(
+ 0.5,
+ hexToRgb(funnelOption.customColor[seriesNew[i].linearIndex], funnelOption.fillOpacity)
+ );
+ grd.addColorStop(1, hexToRgb(seriesNew[i].color, funnelOption.fillOpacity));
+ fillColor = grd;
+ }
+ context.setFillStyle(fillColor);
+ context.moveTo(0, -eachSpacing);
+ context.lineTo(-seriesNew[i].radius, 0);
+ context.lineTo(seriesNew[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(seriesNew[i].color, funnelOption.activeOpacity));
+ context.moveTo(0, 0);
+ context.lineTo(-seriesNew[i].radius - activeWidth, 0);
+ context.lineTo(-seriesNew[i + 1].radius - activeWidth, -eachSpacing);
+ context.lineTo(seriesNew[i + 1].radius + activeWidth, -eachSpacing);
+ context.lineTo(seriesNew[i].radius + activeWidth, 0);
+ context.lineTo(0, 0);
+ context.closePath();
+ context.fill();
+ }
+ }
+ seriesNew[i].funnelArea = [
+ centerPosition.x - seriesNew[i].radius,
+ centerPosition.y - eachSpacing * (i + 1),
+ centerPosition.x + seriesNew[i].radius,
+ centerPosition.y - eachSpacing * i,
+ ];
+ context.beginPath();
+ context.setLineWidth(funnelOption.borderWidth * opts.pix);
+ context.setStrokeStyle(funnelOption.borderColor);
+ var fillColor = hexToRgb(seriesNew[i].color, funnelOption.fillOpacity);
+ if (funnelOption.linearType == "custom") {
+ var grd = context.createLinearGradient(
+ seriesNew[i].radius,
+ -eachSpacing,
+ -seriesNew[i].radius,
+ -eachSpacing
+ );
+ grd.addColorStop(0, hexToRgb(seriesNew[i].color, funnelOption.fillOpacity));
+ grd.addColorStop(
+ 0.5,
+ hexToRgb(funnelOption.customColor[seriesNew[i].linearIndex], funnelOption.fillOpacity)
+ );
+ grd.addColorStop(1, hexToRgb(seriesNew[i].color, funnelOption.fillOpacity));
+ fillColor = grd;
+ }
+ context.setFillStyle(fillColor);
+ context.moveTo(0, 0);
+ context.lineTo(-seriesNew[i].radius, 0);
+ context.lineTo(-seriesNew[i + 1].radius, -eachSpacing);
+ context.lineTo(seriesNew[i + 1].radius, -eachSpacing);
+ context.lineTo(seriesNew[i].radius, 0);
+ context.lineTo(0, 0);
+ context.closePath();
+ context.fill();
+ if (funnelOption.border == true) {
+ context.stroke();
+ }
+ }
+ context.translate(0, -eachSpacing);
+ }
+ } else {
+ context.translate(0, -(seriesNew.length - 1) * eachSpacing);
+ for (let i = 0; i < seriesNew.length; i++) {
+ if (i == seriesNew.length - 1) {
+ if (opts.tooltip) {
+ if (opts.tooltip.index == i) {
+ context.beginPath();
+ context.setFillStyle(hexToRgb(seriesNew[i].color, funnelOption.activeOpacity));
+ context.moveTo(-activeWidth - funnelOption.minSize / 2, 0);
+ context.lineTo(-seriesNew[i].radius - activeWidth, -eachSpacing);
+ context.lineTo(seriesNew[i].radius + activeWidth, -eachSpacing);
+ context.lineTo(activeWidth + funnelOption.minSize / 2, 0);
+ context.lineTo(-activeWidth - funnelOption.minSize / 2, 0);
+ context.closePath();
+ context.fill();
+ }
+ }
+ seriesNew[i].funnelArea = [
+ centerPosition.x - seriesNew[i].radius,
+ centerPosition.y - eachSpacing,
+ centerPosition.x + seriesNew[i].radius,
+ centerPosition.y,
+ ];
+ context.beginPath();
+ context.setLineWidth(funnelOption.borderWidth * opts.pix);
+ context.setStrokeStyle(funnelOption.borderColor);
+ var fillColor = hexToRgb(seriesNew[i].color, funnelOption.fillOpacity);
+ if (funnelOption.linearType == "custom") {
+ var grd = context.createLinearGradient(
+ seriesNew[i].radius,
+ -eachSpacing,
+ -seriesNew[i].radius,
+ -eachSpacing
+ );
+ grd.addColorStop(0, hexToRgb(seriesNew[i].color, funnelOption.fillOpacity));
+ grd.addColorStop(
+ 0.5,
+ hexToRgb(funnelOption.customColor[seriesNew[i].linearIndex], funnelOption.fillOpacity)
+ );
+ grd.addColorStop(1, hexToRgb(seriesNew[i].color, funnelOption.fillOpacity));
+ fillColor = grd;
+ }
+ context.setFillStyle(fillColor);
+ context.moveTo(0, 0);
+ context.lineTo(-funnelOption.minSize / 2, 0);
+ context.lineTo(-seriesNew[i].radius, -eachSpacing);
+ context.lineTo(seriesNew[i].radius, -eachSpacing);
+ context.lineTo(funnelOption.minSize / 2, 0);
+ 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(seriesNew[i].color, funnelOption.activeOpacity));
+ context.moveTo(0, 0);
+ context.lineTo(-seriesNew[i + 1].radius - activeWidth, 0);
+ context.lineTo(-seriesNew[i].radius - activeWidth, -eachSpacing);
+ context.lineTo(seriesNew[i].radius + activeWidth, -eachSpacing);
+ context.lineTo(seriesNew[i + 1].radius + activeWidth, 0);
+ context.lineTo(0, 0);
+ context.closePath();
+ context.fill();
+ }
+ }
+ seriesNew[i].funnelArea = [
+ centerPosition.x - seriesNew[i].radius,
+ centerPosition.y - eachSpacing * (seriesNew.length - i),
+ centerPosition.x + seriesNew[i].radius,
+ centerPosition.y - eachSpacing * (seriesNew.length - i - 1),
+ ];
+ context.beginPath();
+ context.setLineWidth(funnelOption.borderWidth * opts.pix);
+ context.setStrokeStyle(funnelOption.borderColor);
+ var fillColor = hexToRgb(seriesNew[i].color, funnelOption.fillOpacity);
+ if (funnelOption.linearType == "custom") {
+ var grd = context.createLinearGradient(
+ seriesNew[i].radius,
+ -eachSpacing,
+ -seriesNew[i].radius,
+ -eachSpacing
+ );
+ grd.addColorStop(0, hexToRgb(seriesNew[i].color, funnelOption.fillOpacity));
+ grd.addColorStop(
+ 0.5,
+ hexToRgb(funnelOption.customColor[seriesNew[i].linearIndex], funnelOption.fillOpacity)
+ );
+ grd.addColorStop(1, hexToRgb(seriesNew[i].color, funnelOption.fillOpacity));
+ fillColor = grd;
+ }
+ context.setFillStyle(fillColor);
+ context.moveTo(0, 0);
+ context.lineTo(-seriesNew[i + 1].radius, 0);
+ context.lineTo(-seriesNew[i].radius, -eachSpacing);
+ context.lineTo(seriesNew[i].radius, -eachSpacing);
+ context.lineTo(seriesNew[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(
+ seriesNew,
+ opts,
+ context,
+ eachSpacing,
+ funnelOption.labelAlign,
+ activeWidth,
+ centerPosition
+ );
+ }
+ if (process === 1) {
+ drawFunnelCenterText(
+ seriesNew,
+ opts,
+ context,
+ eachSpacing,
+ funnelOption.labelAlign,
+ activeWidth,
+ centerPosition
+ );
+ }
+ return {
+ center: centerPosition,
+ radius: radius,
+ series: seriesNew,
+ };
+}
+
+function drawFunnelText(
+ series,
+ opts,
+ context,
+ eachSpacing,
+ labelAlign,
+ activeWidth,
+ centerPosition
+) {
+ for (let i = 0; i < series.length; i++) {
+ let item = series[i];
+ if (item.labelShow === false) {
+ continue;
+ }
+ let startX, endX, startY, fontSize;
+ let text = item.formatter
+ ? item.formatter(item, i, series, opts)
+ : util.toFixed(item._proportion_ * 100) + "%";
+ text = item.labelText ? item.labelText : text;
+ if (labelAlign == "right") {
+ if (i == series.length - 1) {
+ 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 * opts.pix, 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();
+ }
+ if (labelAlign == "left") {
+ if (i == series.length - 1) {
+ 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 drawFunnelCenterText(
+ series,
+ opts,
+ context,
+ eachSpacing,
+ labelAlign,
+ activeWidth,
+ centerPosition
+) {
+ for (let i = 0; i < series.length; i++) {
+ let item = series[i];
+ let startY, fontSize;
+ if (item.centerText) {
+ startY = item.funnelArea[1] + eachSpacing / 2;
+ fontSize = item.centerTextSize * opts.pix || opts.fontSize * opts.pix;
+ context.beginPath();
+ context.setFontSize(fontSize);
+ context.setFillStyle(item.centerTextColor || "#FFFFFF");
+ context.fillText(
+ item.centerText,
+ centerPosition.x - measureText(item.centerText, fontSize, context) / 2,
+ startY + fontSize / 2 - 2
+ );
+ context.closePath();
+ context.stroke();
+ context.closePath();
+ }
+ }
+}
+
+function drawCanvas(opts, context) {
+ context.save();
+ context.translate(0, 0.5);
+ context.restore();
+ 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 === "mount" ||
+ type === "rose" ||
+ type === "funnel"
+ ) {
+ series = fixPieSeries(series, opts, config);
+ }
+ var categories = opts.categories;
+ if (type === "mount") {
+ categories = [];
+ for (let j = 0; j < series.length; j++) {
+ if (series[j].show !== false) categories.push(series[j].name);
+ }
+ opts.categories = 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 === "mount" ||
+ 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;
+ _this.scrollOption.startTouchX = offsetLeft;
+ _this.scrollOption.distance = 0;
+ _this.scrollOption.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);
+ setTimeout(() => {
+ this.uevent.trigger("renderComplete");
+ }, 50);
+ 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 "mount":
+ 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 _drawMountDataPoints = drawMountDataPoints(series, opts, config, context, process),
+ xAxisPoints = _drawMountDataPoints.xAxisPoints,
+ calPoints = _drawMountDataPoints.calPoints,
+ eachSpacing = _drawMountDataPoints.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":
+ 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 "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,
+ gridSet: "number",
+ splitNumber: 5,
+ gridType: "solid",
+ dashLength: 4 * opts.pix,
+ gridColor: "#cccccc",
+ padding: 10,
+ fontColor: "#666666",
+ },
+ opts.yAxis
+ );
+ opts.xAxis = assign(
+ {},
+ {
+ rotateLabel: false,
+ rotateAngle: 45,
+ disabled: false,
+ disableGrid: false,
+ splitNumber: 5,
+ calibration: false,
+ fontColor: "#666666",
+ fontSize: 13,
+ lineHeight: 20,
+ marginTop: 0,
+ gridType: "solid",
+ dashLength: 4,
+ scrollAlign: "left",
+ boundaryGap: "center",
+ axisLine: true,
+ axisLineColor: "#cccccc",
+ titleFontSize: 13,
+ titleOffsetY: 0,
+ titleOffsetX: 0,
+ titleFontColor: "#666666",
+ },
+ 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(
+ {
+ tooltip: {
+ legendShape: "auto",
+ },
+ },
+ 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 = assign({}, config);
+ config$$1.color = opts.color ? opts.color : config$$1.color;
+ 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.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.fontSize = opts.fontSize * opts.pix;
+ config$$1.titleFontSize = config.titleFontSize * opts.pix;
+ config$$1.subtitleFontSize = config.subtitleFontSize * opts.pix;
+ 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.setTextBaseline = function (e) {
+ return (this.textBaseline = e);
+ };
+ this.context.setShadow = function (offsetX, offsetY, blur, color) {
+ this.shadowColor = color;
+ this.shadowOffsetX = offsetX;
+ this.shadowOffsetY = offsetY;
+ this.shadowBlur = blur;
+ };
+ 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: 0,
+ distance: 0,
+ lastMoveTime: 0,
+ };
+ calValidDistance(this, offsetLeft, this.opts.chartData, this.config, this.opts);
+ this.opts._scrollDistance_ = offsetLeft;
+ drawCharts.call(this, this.opts.type, this.opts, this.config, this.context);
+};
+
+uCharts.prototype.dobuleZoom = function (e) {
+ if (this.opts.enableScroll !== true) {
+ console.log("[uCharts] 请启用滚动条后使用");
+ return;
+ }
+ const tcs = e.changedTouches;
+ if (tcs.length < 2) {
+ return;
+ }
+ for (var i = 0; i < tcs.length; i++) {
+ tcs[i].x = tcs[i].x ? tcs[i].x : tcs[i].clientX;
+ tcs[i].y = tcs[i].y ? tcs[i].y : tcs[i].clientY;
+ }
+ const ntcs = [getTouches(tcs[0], this.opts, e), getTouches(tcs[1], this.opts, e)];
+ const xlength = Math.abs(ntcs[0].x - ntcs[1].x);
+ // 记录初始的两指之间的数据
+ if (!this.scrollOption.moveCount) {
+ let cts0 = { changedTouches: [{ x: tcs[0].x, y: this.opts.area[0] / this.opts.pix + 2 }] };
+ let cts1 = { changedTouches: [{ x: tcs[1].x, y: this.opts.area[0] / this.opts.pix + 2 }] };
+ if (this.opts.rotate) {
+ cts0 = {
+ changedTouches: [
+ {
+ x: this.opts.height / this.opts.pix - this.opts.area[0] / this.opts.pix - 2,
+ y: tcs[0].y,
+ },
+ ],
+ };
+ cts1 = {
+ changedTouches: [
+ {
+ x: this.opts.height / this.opts.pix - this.opts.area[0] / this.opts.pix - 2,
+ y: tcs[1].y,
+ },
+ ],
+ };
+ }
+ const moveCurrent1 = this.getCurrentDataIndex(cts0).index;
+ const moveCurrent2 = this.getCurrentDataIndex(cts1).index;
+ const moveCount = Math.abs(moveCurrent1 - moveCurrent2);
+ this.scrollOption.moveCount = moveCount;
+ this.scrollOption.moveCurrent1 = Math.min(moveCurrent1, moveCurrent2);
+ this.scrollOption.moveCurrent2 = Math.max(moveCurrent1, moveCurrent2);
+ return;
+ }
+
+ let currentEachSpacing = xlength / this.scrollOption.moveCount;
+ let itemCount = (this.opts.width - this.opts.area[1] - this.opts.area[3]) / currentEachSpacing;
+ itemCount = itemCount <= 2 ? 2 : itemCount;
+ itemCount = itemCount >= this.opts.categories.length ? this.opts.categories.length : itemCount;
+ this.opts.animation = false;
+ this.opts.xAxis.itemCount = itemCount;
+ // 重新计算滚动条偏移距离
+ 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 currentLeft = eachSpacing * this.scrollOption.moveCurrent1;
+ let screenWidth = endX - startX;
+ let MaxLeft = screenWidth - eachSpacing * (xAxisPoints.length - 1);
+ offsetLeft = -currentLeft + Math.min(ntcs[0].x, ntcs[1].x) - this.opts.area[3] - eachSpacing;
+ if (offsetLeft > 0) {
+ offsetLeft = 0;
+ }
+ if (offsetLeft < MaxLeft) {
+ offsetLeft = MaxLeft;
+ }
+ this.scrollOption.currentOffset = offsetLeft;
+ this.scrollOption.startTouchX = 0;
+ this.scrollOption.distance = 0;
+ calValidDistance(this, offsetLeft, this.opts.chartData, this.config, this.opts);
+ 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,
+ group: current.group,
+ };
+ }
+ }
+ drawCharts.call(this, opts.type, opts, this.config, this.context);
+ }
+ if (this.opts.type === "mount") {
+ var index = option.index == undefined ? this.getCurrentDataIndex(e).index : 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,
+ legendShape:
+ this.opts.extra.tooltip.legendShape == "auto"
+ ? seriesData.legendShape
+ : this.opts.extra.tooltip.legendShape,
+ },
+ ];
+ var offset = {
+ x: opts.chartData.calPoints[index].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 === "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,
+ legendShape:
+ this.opts.extra.tooltip.legendShape == "auto"
+ ? seriesData.legendShape
+ : this.opts.extra.tooltip.legendShape,
+ },
+ ];
+ 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,
+ legendShape:
+ this.opts.extra.tooltip.legendShape == "auto"
+ ? seriesData.legendShape
+ : this.opts.extra.tooltip.legendShape,
+ },
+ ];
+ 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,
+ legendShape:
+ this.opts.extra.tooltip.legendShape == "auto"
+ ? seriesData.legendShape
+ : this.opts.extra.tooltip.legendShape,
+ },
+ ];
+ 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,
+ legendShape:
+ this.opts.extra.tooltip.legendShape == "auto"
+ ? item.legendShape
+ : this.opts.extra.tooltip.legendShape,
+ };
+ });
+ 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;
+ if (this.scrollOption.startTouchX == 0) 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;
+ this.scrollOption.moveCount = 0;
+ }
+};
+
+export default uCharts;
diff --git a/src/components/u-charts/u-charts.min.js b/src/components/u-charts/u-charts.min.js
new file mode 100644
index 0000000..0902ecd
--- /dev/null
+++ b/src/components/u-charts/u-charts.min.js
@@ -0,0 +1,18 @@
+/*
+ * uCharts (R)
+ * 高性能跨平台图表库,支持H5、APP、小程序(微信/支付宝/百度/头条/QQ/360/快手)、Vue、Taro等支持canvas的框架平台
+ * Copyright (C) 2021 QIUN (R) 秋云 https://www.ucharts.cn All rights reserved.
+ * Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
+ * 复制使用请保留本段注释,感谢支持开源!
+ *
+ * uCharts (R) 官方网站
+ * 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.5.0-20230101",yAxisWidth:15,xAxisHeight:22,padding:[10,10,10,10],rotate:false,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,titleFontSize:20,subtitleFontSize:15,radarLabelTextMargin:13};var assign=function(e,...t){if(e==null){throw new TypeError("[uCharts] Cannot convert undefined or null to object")}if(!t||t.length<=0){return e}function i(e,a){for(let t in a){e[t]=e[t]&&e[t].toString()==="[object Object]"?i(e[t],a[t]):e[t]=a[t]}return e}t.forEach(t=>{e=i(e,t)});return e};var util={toFixed:function t(e,a){a=a||2;if(this.isFloat(e)){e=e.toFixed(a)}return e},isFloat:function t(e){return e%1!==0},approximatelyEqual:function t(e,a){return Math.abs(e-a)<1e-10},isSameSign:function t(e,a){return Math.abs(e)===e&&Math.abs(a)===a||Math.abs(e)!==e&&Math.abs(a)!==a},isSameXCoordinateArea:function t(e,a){return this.isSameSign(e.x,a.x)},isCollision:function t(e,a){e.end={};e.end.x=e.start.x+e.width;e.end.y=e.start.y-e.height;a.end={};a.end.x=a.start.x+a.width;a.end.y=a.start.y-a.height;var i=a.start.x>e.end.x||a.end.xe.start.y||a.start.y1){if(r.extra.mount.widthRatio>2)r.extra.mount.widthRatio=2;n+=(r.extra.mount.widthRatio-1)*a.eachSpacing}var l=e;if(e>=0){l=0;t.uevent.trigger("scrollLeft");t.scrollOption.position="left";r.xAxis.scrollPosition="left"}else if(Math.abs(e)>=n-o){l=o-n;t.uevent.trigger("scrollRight");t.scrollOption.position="right";r.xAxis.scrollPosition="right"}else{t.scrollOption.position=e;r.xAxis.scrollPosition=e}return l}function isInAngleRange(t,e,a){function i(t){while(t<0){t+=2*Math.PI}while(t>2*Math.PI){t-=2*Math.PI}return t}t=i(t);e=i(e);a=i(a);if(e>a){a+=2*Math.PI;if(t=e&&t<=a}function createCurveControlPoints(t,e){function a(t,e){if(t[e-1]&&t[e+1]){return t[e].y>=Math.max(t[e-1].y,t[e+1].y)||t[e].y<=Math.min(t[e-1].y,t[e+1].y)}else{return false}}function c(t,e){if(t[e-1]&&t[e+1]){return t[e].x>=Math.max(t[e-1].x,t[e+1].x)||t[e].x<=Math.min(t[e-1].x,t[e+1].x)}else{return false}}var i=.2;var r=.2;var o=null;var n=null;var l=null;var s=null;if(e<1){o=t[0].x+(t[1].x-t[0].x)*i;n=t[0].y+(t[1].y-t[0].y)*i}else{o=t[e].x+(t[e+1].x-t[e-1].x)*i;n=t[e].y+(t[e+1].y-t[e-1].y)*i}if(e>t.length-3){var h=t.length-1;l=t[h].x-(t[h].x-t[h-1].x)*r;s=t[h].y-(t[h].y-t[h-1].y)*r}else{l=t[e+1].x-(t[e+2].x-t[e].x)*r;s=t[e+1].y-(t[e+2].y-t[e].y)*r}if(a(t,e+1)){s=t[e+1].y}if(a(t,e)){n=t[e].y}if(c(t,e+1)){l=t[e+1].x}if(c(t,e)){o=t[e].x}if(n>=Math.max(t[e].y,t[e+1].y)||n<=Math.min(t[e].y,t[e+1].y)){n=t[e].y}if(s>=Math.max(t[e].y,t[e+1].y)||s<=Math.min(t[e].y,t[e+1].y)){s=t[e+1].y}if(o>=Math.max(t[e].x,t[e+1].x)||o<=Math.min(t[e].x,t[e+1].x)){o=t[e].x}if(l>=Math.max(t[e].x,t[e+1].x)||l<=Math.min(t[e].x,t[e+1].x)){l=t[e+1].x}return{ctrA:{x:o,y:n},ctrB:{x:l,y:s}}}function convertCoordinateOrigin(t,e,a){return{x:a.x+t,y:a.y-e}}function avoidCollision(t,e){if(e){while(util.isCollision(t,e)){if(t.start.x>0){t.start.y--}else if(t.start.x<0){t.start.y++}else{if(t.start.y>0){t.start.y++}else{t.start.y--}}}}return t}function fixPieSeries(e,a,t){let i=[];if(e.length>0&&e[0].data.constructor.toString().indexOf("Array")>-1){a._pieSeries_=e;let t=e[0].data;for(var r=0;r=1e4){a=1e3}else if(i>=1e3){a=100}else if(i>=100){a=10}else if(i>=10){a=5}else if(i>=1){a=1}else if(i>=.1){a=.1}else if(i>=.01){a=.01}else if(i>=.001){a=.001}else if(i>=1e-4){a=1e-4}else if(i>=1e-5){a=1e-5}else{a=1e-6}return{minRange:findRange(t,"lower",a),maxRange:findRange(e,"upper",a)}}function measureText(a,t,e){var i=0;a=String(a);e=false;if(e!==false&&e!==undefined&&e.setFontSize&&e.measureText){e.setFontSize(t);return e.measureText(a).width}else{var a=a.split("");for(let e=0;e-1;if(n){let t=filterSeries(e);for(var l=0;l5&&arguments[5]!==undefined?arguments[5]:{};var l=a.chartData.calPoints?a.chartData.calPoints:[];let s={};if(r.length>0){let e=[];for(let t=0;t0){e=o[i]}return{text:n.formatter?n.formatter(t,e,i,a):t.name+": "+t.data,color:t.color,legendShape:a.extra.tooltip.legendShape=="auto"?t.legendShape:a.extra.tooltip.legendShape}});var h={x:Math.round(s.x),y:Math.round(s.y)};return{textList:e,offset:h}}function getMixToolTipData(t,e,a,i){var r=arguments.length>4&&arguments[4]!==undefined?arguments[4]:{};var o=e.chartData.xAxisPoints[a]+e.chartData.eachSpacing/2;var n=t.map(function(t){return{text:r.formatter?r.formatter(t,i[a],a,e):t.name+": "+t.data,color:t.color,disableLegend:t.disableLegend?true:false,legendShape:e.extra.tooltip.legendShape=="auto"?t.legendShape:e.extra.tooltip.legendShape}});n=n.filter(function(t){if(t.disableLegend!==true){return t}});var l={x:Math.round(o),y:0};return{textList:n,offset:l}}function getCandleToolTipData(o,e,n,l,i,t){var r=arguments.length>6&&arguments[6]!==undefined?arguments[6]:{};var a=n.chartData.calPoints;let s=t.color.upFill;let h=t.color.downFill;let c=[s,s,h,s];var d=[];e.map(function(t){if(l==0){if(t.data[1]-t.data[0]<0){c[1]=h}else{c[1]=s}}else{if(t.data[0]o[l-1][1]){c[2]=s}if(t.data[3]4&&arguments[4]!==undefined?arguments[4]:0;var l={index:-1,group:[]};var i=e.chartData.eachSpacing/2;let r=[];if(n&&n.length>0){if(!e.categories){i=0}else{for(let t=1;tt){l.index=e}})}}}return l}function findBarChartCurrentIndex(a,t,e,i){var r=arguments.length>4&&arguments[4]!==undefined?arguments[4]:0;var o={index:-1,group:[]};var n=e.chartData.eachSpacing/2;let l=e.chartData.yAxisPoints;if(t&&t.length>0){if(isInExactChartArea(a,e,i)){l.forEach(function(t,e){if(a.y+r+n>t){o.index=e}})}}return o}function findLegendIndex(o,t,e){let n=-1;let l=0;if(isInExactLegendArea(o,t.area)){let i=t.points;let r=-1;for(let t=0,e=i.length;tt[0]-l&&o.xt[1]-l&&o.ye.start.x&&t.xe.start.y&&t.y=e.area[3]-10&&t.y>=e.area[0]&&t.y<=e.height-e.area[2]}function findRadarChartCurrentIndex(t,e,a){var r=2*Math.PI/a;var o=-1;if(isInExactPieChartArea(t,e.center,e.radius)){var n=function t(e){if(e<0){e+=2*Math.PI}if(e>2*Math.PI){e-=2*Math.PI}return e};var l=Math.atan2(e.center.y-t.y,t.x-e.center.x);l=-1*l;if(l<0){l+=2*Math.PI}var i=e.angleList.map(function(t){t=n(-1*t);return t});i.forEach(function(t,e){var a=n(t-r/2);var i=n(t+r/2);if(i=a&&l<=i||l+2*Math.PI>=a&&l+2*Math.PI<=i){o=e}})}return o}function findFunnelChartCurrentIndex(t,e){var a=-1;for(var i=0,r=e.series.length;io.funnelArea[0]&&t.xo.funnelArea[1]&&t.yo.area[0]&&t.xo.area[1]&&t.ys.width-s.area[1]-s.area[3]){i.push(n);o.push(r-s.legend.itemGap*s.pix);r=e;n=[t]}else{r+=e;n.push(t)}}if(n.length){i.push(n);o.push(r-s.legend.itemGap*s.pix);c.widthArr=o;let t=Math.max.apply(null,o);switch(s.legend.float){case"left":c.area.start.x=s.area[3];c.area.end.x=s.area[3]+t+2*d;break;case"right":c.area.start.x=s.width-s.area[1]-t-2*d;c.area.end.x=s.width-s.area[1];break;default:c.area.start.x=(s.width-t)/2-d;c.area.end.x=(s.width+t)/2+d}c.area.width=t+2*d;c.area.wholeWidth=t+2*d;c.area.height=i.length*u+2*d;c.area.wholeHeight=i.length*u+2*d+2*x;c.points=i}}else{let t=l.length;let e=s.height-s.area[0]-s.area[2]-2*x-2*d;let a=Math.min(Math.floor(e/u),t);c.area.height=a*u+d*2;c.area.wholeHeight=a*u+d*2;switch(s.legend.float){case"top":c.area.start.y=s.area[0]+x;c.area.end.y=s.area[0]+x+c.area.height;break;case"bottom":c.area.start.y=s.height-s.area[2]-x-c.area.height;c.area.end.y=s.height-s.area[2]-x;break;default:c.area.start.y=(s.height-c.area.height)/2;c.area.end.y=(s.height+c.area.height)/2}let i=t%a===0?t/a:Math.floor(t/a+1);let r=[];for(let e=0;ei){i=t}}c.widthArr.push(i);c.heightArr.push(a.length*u+d*2)}let e=0;for(let t=0;t4&&arguments[4]!==undefined?arguments[4]:-1;var i;if(c=="stack"){i=dataCombineStack(t,e.categories.length)}else{i=dataCombine(t)}var r=[];i=i.filter(function(t){if(typeof t==="object"&&t!==null){if(t.constructor.toString().indexOf("Array")>-1){return t!==null}else{return t.value!==null}}else{return t!==null}});i.map(function(t){if(typeof t==="object"){if(t.constructor.toString().indexOf("Array")>-1){if(e.type=="candle"){t.map(function(t){r.push(t)})}else{r.push(t[0])}}else{r.push(t.value)}}else{r.push(t)}});var o=0;var n=0;if(r.length>0){o=Math.min.apply(this,r);n=Math.max.apply(this,r)}if(a>-1){if(typeof e.xAxis.data[a].min==="number"){o=Math.min(e.xAxis.data[a].min,o)}if(typeof e.xAxis.data[a].max==="number"){n=Math.max(e.xAxis.data[a].max,n)}}else{if(typeof e.xAxis.min==="number"){o=Math.min(e.xAxis.min,o)}if(typeof e.xAxis.max==="number"){n=Math.max(e.xAxis.max,n)}}if(o===n){var d=n||10;n+=d}var l=o;var x=n;var f=[];var p=(x-l)/e.xAxis.splitNumber;for(var s=0;s<=e.xAxis.splitNumber;s++){f.push(l+p*s)}return f}function calXAxisData(t,e,a,i){var r=assign({},{type:""},e.extra.bar);var o={angle:0,xAxisHeight:e.xAxis.lineHeight*e.pix+e.xAxis.marginTop*e.pix};o.ranges=getXAxisTextList(t,e,a,r.type);o.rangesFormat=o.ranges.map(function(t){t=util.toFixed(t,2);return t});var n=o.ranges.map(function(t){t=util.toFixed(t,2);return t});o=Object.assign(o,getXAxisPoints(n,e,a));var l=o.eachSpacing;var s=n.map(function(t){return measureText(t,e.xAxis.fontSize*e.pix,i)});if(e.xAxis.disabled===true){o.xAxisHeight=0}return o}function getRadarDataPoints(r,o,n,a,t){var l=arguments.length>5&&arguments[5]!==undefined?arguments[5]:1;var e=t.extra.radar||{};e.max=e.max||0;var s=Math.max(e.max,Math.max.apply(null,dataCombine(a)));var h=[];for(let e=0;e2&&arguments[2]!==undefined?arguments[2]:1;var o=0;var n=0;for(let e=0;e4&&arguments[4]!==undefined?arguments[4]:1;for(let t=0;t4&&arguments[4]!==undefined?arguments[4]:1;var l=0;var s=0;var h=[];for(let e=0;e2&&arguments[2]!==undefined?arguments[2]:1;if(o==1){o=.999999}for(let a=0;a=2){t._proportion_=t._proportion_%2}}return i}function getGaugeArcbarDataPoints(i,r){var o=arguments.length>2&&arguments[2]!==undefined?arguments[2]:1;if(o==1){o=.999999}for(let a=0;a=2){t._proportion_=t._proportion_%2}}return i}function getGaugeAxisPoints(e,a,t){let i;if(t=2){e[t]._endAngle_=e[t]._endAngle_%2}r=e[t]._endAngle_}return e}function getGaugeDataPoints(i,r,o){let n=arguments.length>3&&arguments[3]!==undefined?arguments[3]:1;for(let a=0;a=o.oldData){e._proportion_=(e._endAngle_-e._oldAngle_)*n+o.oldAngle}else{e._proportion_=e._oldAngle_-(e._oldAngle_-e._endAngle_)*n}if(e._proportion_>=2){e._proportion_=e._proportion_%2}}return i}function getPieTextMaxLength(i,r,o,n){i=getPieDataPoints(i);let l=0;for(let a=0;a0){t.width=Math.min(t.width,+n.extra.mix.column.width*n.pix)}if(n.extra.column&&n.extra.column.width&&+n.extra.column.width>0){t.width=Math.min(t.width,+n.extra.column.width*n.pix)}if(t.width<=0){t.width=1}t.x+=(o+.5-r/2)*(t.width+e);return t})}function fixBarData(t,i,r,o,e,n){return t.map(function(t){if(t===null){return null}var e=0;var a=0;e=n.extra.bar.seriesGap*n.pix||0;a=n.extra.bar.categoryGap*n.pix||0;e=Math.min(e,i/r);a=Math.min(a,i/r);t.width=Math.ceil((i-2*a-e*(r-1))/r);if(n.extra.bar&&n.extra.bar.width&&+n.extra.bar.width>0){t.width=Math.min(t.width,+n.extra.bar.width*n.pix)}if(t.width<=0){t.width=1}t.y+=(o+.5-r/2)*(t.width+e);return t})}function fixColumeMeterData(t,e,a,i,r,o,n){var l=o.extra.column.categoryGap*o.pix||0;return t.map(function(t){if(t===null){return null}t.width=e-2*l;if(o.extra.column&&o.extra.column.width&&+o.extra.column.width>0){t.width=Math.min(t.width,+o.extra.column.width*o.pix)}if(i>0){t.width-=n}return t})}function fixColumeStackData(t,a,e,i,r,o,n){var l=o.extra.column.categoryGap*o.pix||0;return t.map(function(t,e){if(t===null){return null}t.width=Math.ceil(a-2*l);if(o.extra.column&&o.extra.column.width&&+o.extra.column.width>0){t.width=Math.min(t.width,+o.extra.column.width*o.pix)}if(t.width<=0){t.width=1}return t})}function fixBarStackData(t,a,e,i,r,o,n){var l=o.extra.bar.categoryGap*o.pix||0;return t.map(function(t,e){if(t===null){return null}t.width=Math.ceil(a-2*l);if(o.extra.bar&&o.extra.bar.width&&+o.extra.bar.width>0){t.width=Math.min(t.width,+o.extra.bar.width*o.pix)}if(t.width<=0){t.width=1}return t})}function getXAxisPoints(t,e,h){var a=e.width-e.area[1]-e.area[3];var i=e.enableScroll?Math.min(e.xAxis.itemCount,t.length):t.length;if((e.type=="line"||e.type=="area"||e.type=="scatter"||e.type=="bubble"||e.type=="bar")&&i>1&&e.xAxis.boundaryGap=="justify"){i-=1}var r=0;if(e.type=="mount"&&e.extra&&e.extra.mount&&e.extra.mount.widthRatio&&e.extra.mount.widthRatio>1){if(e.extra.mount.widthRatio>2)e.extra.mount.widthRatio=2;r=e.extra.mount.widthRatio-1;i+=r}var o=a/i;var n=[];var l=e.area[3];var s=e.width-e.area[1];t.forEach(function(t,e){n.push(l+r/2*o+e*o)});if(e.xAxis.boundaryGap!=="justify"){if(e.enableScroll===true){n.push(l+r*o+t.length*o)}else{n.push(s)}}return{xAxisPoints:n,startX:l,endX:s,eachSpacing:o}}function getCandleDataPoints(t,l,s,h,c,d,a){var x=arguments.length>7&&arguments[7]!==undefined?arguments[7]:1;var e=[];var f=d.height-d.area[0]-d.area[2];t.forEach(function(t,o){if(t===null){e.push(null)}else{var n=[];t.forEach(function(t,e){var a={};a.x=h[o]+Math.round(c/2);var i=t.value||t;var r=f*(i-l)/(s-l);r*=x;a.y=d.height-Math.round(r)-d.area[2];n.push(a)});e.push(n)}});return e}function getDataPoints(t,a,n,l,s,h,e){var c=arguments.length>7&&arguments[7]!==undefined?arguments[7]:1;var d="center";if(h.type=="line"||h.type=="area"||h.type=="scatter"||h.type=="bubble"){d=h.xAxis.boundaryGap}var x=[];var f=h.height-h.area[0]-h.area[2];var p=h.width-h.area[1]-h.area[3];t.forEach(function(i,t){if(i===null){x.push(null)}else{var r={};r.color=i.color;r.x=l[t];var o=i;if(typeof i==="object"&&i!==null){if(i.constructor.toString().indexOf("Array")>-1){let t,e,a;t=[].concat(h.chartData.xAxisData.ranges);e=t.shift();a=t.pop();o=i[1];r.x=h.area[3]+p*(i[0]-e)/(a-e);if(h.type=="bubble"){r.r=i[2];r.t=i[3]}}else{o=i.value}}if(d=="center"){r.x+=s/2}var e=f*(o-a)/(n-a);e*=c;r.y=h.height-e-h.area[2];x.push(r)}});return x}function getLineDataPoints(t,a,n,l,s,h,e,p,c){var c=arguments.length>8&&arguments[8]!==undefined?arguments[8]:1;var d=h.xAxis.boundaryGap;var x=[];var f=h.height-h.area[0]-h.area[2];var u=h.width-h.area[1]-h.area[3];t.forEach(function(i,t){if(i===null){x.push(null)}else{var r={};r.color=i.color;if(p.animation=="vertical"){r.x=l[t];var o=i;if(typeof i==="object"&&i!==null){if(i.constructor.toString().indexOf("Array")>-1){let t,e,a;t=[].concat(h.chartData.xAxisData.ranges);e=t.shift();a=t.pop();o=i[1];r.x=h.area[3]+u*(i[0]-e)/(a-e)}else{o=i.value}}if(d=="center"){r.x+=s/2}var e=f*(o-a)/(n-a);e*=c;r.y=h.height-e-h.area[2];x.push(r)}else{r.x=l[0]+s*t*c;var o=i;if(d=="center"){r.x+=s/2}var e=f*(o-a)/(n-a);r.y=h.height-e-h.area[2];x.push(r)}}});return x}function getColumnDataPoints(t,a,n,l,s,h,e,i,c){var c=arguments.length>8&&arguments[8]!==undefined?arguments[8]:1;var d=[];var x=h.height-h.area[0]-h.area[2];var f=h.width-h.area[1]-h.area[3];t.forEach(function(i,t){if(i===null){d.push(null)}else{var r={};r.color=i.color;r.x=l[t];var o=i;if(typeof i==="object"&&i!==null){if(i.constructor.toString().indexOf("Array")>-1){let t,e,a;t=[].concat(h.chartData.xAxisData.ranges);e=t.shift();a=t.pop();o=i[1];r.x=h.area[3]+f*(i[0]-e)/(a-e)}else{o=i.value}}r.x+=s/2;var e=x*(o*c-a)/(n-a);r.y=h.height-e-h.area[2];d.push(r)}});return d}function getMountDataPoints(t,o,n,l,s,h,e,a){var c=arguments.length>8&&arguments[8]!==undefined?arguments[8]:1;var d=[];var x=h.height-h.area[0]-h.area[2];var i=h.width-h.area[1]-h.area[3];var f=s*e.widthRatio;t.forEach(function(t,e){if(t===null){d.push(null)}else{var a={};a.color=t.color;a.x=l[e];a.x+=s/2;var i=t.data;var r=x*(i*c-o)/(n-o);a.y=h.height-r-h.area[2];a.value=i;a.width=f;d.push(a)}});return d}function getBarDataPoints(t,o,n,l,e,s,a){var h=arguments.length>7&&arguments[7]!==undefined?arguments[7]:1;var c=[];var i=s.height-s.area[0]-s.area[2];var d=s.width-s.area[1]-s.area[3];t.forEach(function(t,e){if(t===null){c.push(null)}else{var a={};a.color=t.color;a.y=l[e];var i=t;if(typeof t==="object"&&t!==null){i=t.value}var r=d*(i-o)/(n-o);r*=h;a.height=r;a.value=i;a.x=r+s.area[3];c.push(a)}});return c}function getStackDataPoints(t,s,h,c,g,d,e,x,y){var f=arguments.length>9&&arguments[9]!==undefined?arguments[9]:1;var p=[];var u=d.height-d.area[0]-d.area[2];t.forEach(function(t,e){if(t===null){p.push(null)}else{var a={};a.color=t.color;a.x=c[e]+Math.round(g/2);if(x>0){var i=0;for(let t=0;t<=x;t++){i+=y[t].data[e]}var r=i-t;var o=u*(i-s)/(h-s);var n=u*(r-s)/(h-s)}else{var i=t;if(typeof t==="object"&&t!==null){i=t.value}var o=u*(i-s)/(h-s);var n=0}var l=n;o*=f;l*=f;a.y=d.height-Math.round(o)-d.area[2];a.y0=d.height-Math.round(l)-d.area[2];p.push(a)}});return p}function getBarStackDataPoints(t,s,h,c,e,d,a,x,g){var f=arguments.length>9&&arguments[9]!==undefined?arguments[9]:1;var p=[];var u=d.width-d.area[1]-d.area[3];t.forEach(function(t,e){if(t===null){p.push(null)}else{var a={};a.color=t.color;a.y=c[e];if(x>0){var i=0;for(let t=0;t<=x;t++){i+=g[t].data[e]}var r=i-t;var o=u*(i-s)/(h-s);var n=u*(r-s)/(h-s)}else{var i=t;if(typeof t==="object"&&t!==null){i=t.value}var o=u*(i-s)/(h-s);var n=0}var l=n;o*=f;l*=f;a.height=o-l;a.x=d.area[3]+o;a.x0=d.area[3]+l;p.push(a)}});return p}function getYAxisTextList(t,e,h,c,a){var d=arguments.length>5&&arguments[5]!==undefined?arguments[5]:-1;var i;if(c=="stack"){i=dataCombineStack(t,e.categories.length)}else{i=dataCombine(t)}var r=[];i=i.filter(function(t){if(typeof t==="object"&&t!==null){if(t.constructor.toString().indexOf("Array")>-1){return t!==null}else{return t.value!==null}}else{return t!==null}});i.map(function(t){if(typeof t==="object"){if(t.constructor.toString().indexOf("Array")>-1){if(e.type=="candle"){t.map(function(t){r.push(t)})}else{r.push(t[1])}}else{r.push(t.value)}}else{r.push(t)}});var o=a.min||0;var n=a.max||0;if(r.length>0){o=Math.min.apply(this,r);n=Math.max.apply(this,r)}if(o===n){if(n==0){n=10}else{o=0}}var l=getDataRange(o,n);var x=a.min===undefined||a.min===null?l.minRange:a.min;var f=a.max===undefined||a.max===null?l.maxRange:a.max;var p=(f-x)/e.yAxis.splitNumber;var u=[];for(var s=0;s<=e.yAxis.splitNumber;s++){u.push(x+p*s)}return u.reverse()}function calYAxisData(a,o,e,n){var l=assign({},{type:""},o.extra.column);var t=o.yAxis.data.length;var s=new Array(t);if(t>0){for(let e=0;e{return t+(i.unit||"")}}i.categories=i.categories||o.categories;h[r]=i.categories}else{if(!i.formatter){i.formatter=(t,e,a)=>{return util.toFixed(t,i.tofix||0)+(i.unit||"")}}h[r]=getYAxisTextList(s[r],o,e,l.type,i,r)}let a=i.fontSize*o.pix||e.fontSize;d[r]={position:i.position?i.position:"left",width:0};c[r]=h[r].map(function(t,e){t=i.formatter(t,e,o);d[r].width=Math.max(d[r].width,measureText(t,a,n)+5);return t});let t=i.calibration?4*o.pix:0;d[r].width+=t+3*o.pix;if(i.disabled===true){d[r].width=0}}}else{var h=new Array(1);var c=new Array(1);var d=new Array(1);if(o.type==="bar"){h[0]=o.categories;if(!o.yAxis.formatter){o.yAxis.formatter=(t,e,a)=>{return t+(a.yAxis.unit||"")}}}else{if(!o.yAxis.formatter){o.yAxis.formatter=(t,e,a)=>{return t.toFixed(a.yAxis.tofix)+(a.yAxis.unit||"")}}h[0]=getYAxisTextList(a,o,e,l.type,{})}d[0]={position:"left",width:0};var i=o.yAxis.fontSize*o.pix||e.fontSize;c[0]=h[0].map(function(t,e){t=o.yAxis.formatter(t,e,o);d[0].width=Math.max(d[0].width,measureText(t,i,n)+5);return t});d[0].width+=3*o.pix;if(o.yAxis.disabled===true){d[0]={position:"left",width:0};o.yAxis.data[0]={disabled:true}}else{o.yAxis.data[0]={disabled:false,position:"left",max:o.yAxis.max,min:o.yAxis.min,formatter:o.yAxis.formatter};if(o.type==="bar"){o.yAxis.data[0].categories=o.categories;o.yAxis.data[0].type="categories"}}}return{rangesFormat:c,ranges:h,yAxisWidth:d}}function calTooltipYAxisData(r,t,o,e,a){let n=[].concat(o.chartData.yAxisData.ranges);let l=o.height-o.area[0]-o.area[2];let s=o.area[0];let h=[];for(let i=0;i0&&r.tooltip.group.includes(n)==false){return}var l=typeof r.tooltip.index==="number"?r.tooltip.index:r.tooltip.index[r.tooltip.group.indexOf(n)];i.beginPath();if(o.activeType=="hollow"){i.setStrokeStyle(e);i.setFillStyle(r.background);i.setLineWidth(2*r.pix)}else{i.setStrokeStyle("#ffffff");i.setFillStyle(e);i.setLineWidth(1*r.pix)}if(a==="diamond"){t.forEach(function(t,e){if(t!==null&&l==e){i.moveTo(t.x,t.y-4.5);i.lineTo(t.x-4.5,t.y);i.lineTo(t.x,t.y+4.5);i.lineTo(t.x+4.5,t.y);i.lineTo(t.x,t.y-4.5)}})}else if(a==="circle"){t.forEach(function(t,e){if(t!==null&&l==e){i.moveTo(t.x+2.5*r.pix,t.y);i.arc(t.x,t.y,3*r.pix,0,2*Math.PI,false)}})}else if(a==="square"){t.forEach(function(t,e){if(t!==null&&l==e){i.moveTo(t.x-3.5,t.y-3.5);i.rect(t.x-3.5,t.y-3.5,7,7)}})}else if(a==="triangle"){t.forEach(function(t,e){if(t!==null&&l==e){i.moveTo(t.x,t.y-4.5);i.lineTo(t.x-4.5,t.y+4.5);i.lineTo(t.x+4.5,t.y+4.5);i.lineTo(t.x,t.y-4.5)}})}else if(a==="none"){return}i.closePath();i.fill();i.stroke()}function drawRingTitle(t,e,a,i){var r=t.title.fontSize||e.titleFontSize;var o=t.subtitle.fontSize||e.subtitleFontSize;var n=t.title.name||"";var l=t.subtitle.name||"";var c=t.title.color||t.fontColor;var d=t.subtitle.color||t.fontColor;var x=n?r:0;var f=l?o:0;var s=5;if(l){var p=measureText(l,o*t.pix,a);var u=i.x-p/2+(t.subtitle.offsetX||0)*t.pix;var h=i.y+o*t.pix/2+(t.subtitle.offsetY||0)*t.pix;if(n){h+=(x*t.pix+s)/2}a.beginPath();a.setFontSize(o*t.pix);a.setFillStyle(d);a.fillText(l,u,h);a.closePath();a.stroke()}if(n){var g=measureText(n,r*t.pix,a);var y=i.x-g/2+(t.title.offsetX||0);var v=i.y+r*t.pix/2+(t.title.offsetY||0)*t.pix;if(l){v-=(f*t.pix+s)/2}a.beginPath();a.setFontSize(r*t.pix);a.setFillStyle(c);a.fillText(n,y,v);a.closePath();a.stroke()}}function drawPointText(t,o,n,l,s){var h=o.data;var c=o.textOffset?o.textOffset:0;t.forEach(function(t,e){if(t!==null){l.beginPath();var a=o.textSize?o.textSize*s.pix:n.fontSize;l.setFontSize(a);l.setFillStyle(o.textColor||s.fontColor);var i=h[e];if(typeof h[e]==="object"&&h[e]!==null){if(h[e].constructor.toString().indexOf("Array")>-1){i=h[e][1]}else{i=h[e].value}}var r=o.formatter?o.formatter(i,e,o,s):i;l.setTextAlign("center");l.fillText(String(r),t.x,t.y-4+c*s.pix);l.closePath();l.stroke();l.setTextAlign("left")}})}function drawColumePointText(t,n,l,s,h){var c=n.data;var d=n.textOffset?n.textOffset:0;var x=h.extra.column.labelPosition;t.forEach(function(t,e){if(t!==null){s.beginPath();var a=n.textSize?n.textSize*h.pix:l.fontSize;s.setFontSize(a);s.setFillStyle(n.textColor||h.fontColor);var i=c[e];if(typeof c[e]==="object"&&c[e]!==null){if(c[e].constructor.toString().indexOf("Array")>-1){i=c[e][1]}else{i=c[e].value}}var r=n.formatter?n.formatter(i,e,n,h):i;s.setTextAlign("center");var o=t.y-4*h.pix+d*h.pix;if(t.y>n.zeroPoints){o=t.y+d*h.pix+a}if(x=="insideTop"){o=t.y+a+d*h.pix;if(t.y>n.zeroPoints){o=t.y-d*h.pix-4*h.pix}}if(x=="center"){o=t.y+d*h.pix+(h.height-h.area[2]-t.y+a)/2;if(n.zeroPointsn.zeroPoints){o=t.y-d*h.pix-(t.y-n.zeroPoints-a)/2}if(h.extra.column.type=="stack"){o=t.y+d*h.pix+(t.y0-t.y+a)/2}}if(x=="bottom"){o=h.height-h.area[2]+d*h.pix-4*h.pix;if(n.zeroPointsn.zeroPoints){o=n.zeroPoints-d*h.pix+a+2*h.pix}if(h.extra.column.type=="stack"){o=t.y0+d*h.pix-4*h.pix}}s.fillText(String(r),t.x,o);s.closePath();s.stroke();s.setTextAlign("left")}})}function drawMountPointText(t,n,l,s,h,c){var e=n.data;var d=n.textOffset?n.textOffset:0;var a=h.extra.mount.labelPosition;t.forEach(function(t,e){if(t!==null){s.beginPath();var a=n[e].textSize?n[e].textSize*h.pix:l.fontSize;s.setFontSize(a);s.setFillStyle(n[e].textColor||h.fontColor);var i=t.value;var r=n[e].formatter?n[e].formatter(i,e,n,h):i;s.setTextAlign("center");var o=t.y-4*h.pix+d*h.pix;if(t.y>c){o=t.y+d*h.pix+a}s.fillText(String(r),t.x,o);s.closePath();s.stroke();s.setTextAlign("left")}})}function drawBarPointText(t,o,n,l,s){var h=o.data;var e=o.textOffset?o.textOffset:0;t.forEach(function(t,e){if(t!==null){l.beginPath();var a=o.textSize?o.textSize*s.pix:n.fontSize;l.setFontSize(a);l.setFillStyle(o.textColor||s.fontColor);var i=h[e];if(typeof h[e]==="object"&&h[e]!==null){i=h[e].value}var r=o.formatter?o.formatter(i,e,o,s):i;l.setTextAlign("left");l.fillText(String(r),t.x+4*s.pix,t.y+a/2-3);l.closePath();l.stroke()}})}function drawGaugeLabel(e,a,i,r,o,n){a-=e.width/2+e.labelOffset*r.pix;a=a<10?10:a;let t;if(e.endAngle=2){l=l%2}s+=x}}function drawRadarLabel(t,s,h,c,d,x){var f=c.extra.radar||{};t.forEach(function(t,e){if(f.labelPointShow===true&&c.categories[e]!==""){var a={x:s*Math.cos(t),y:s*Math.sin(t)};var i=convertCoordinateOrigin(a.x,a.y,h);x.setFillStyle(f.labelPointColor);x.beginPath();x.arc(i.x,i.y,f.labelPointRadius*c.pix,0,2*Math.PI,false);x.closePath();x.fill()}if(f.labelShow===true){var r={x:(s+d.radarLabelTextMargin*c.pix)*Math.cos(t),y:(s+d.radarLabelTextMargin*c.pix)*Math.sin(t)};var o=convertCoordinateOrigin(r.x,r.y,h);var n=o.x;var l=o.y;if(util.approximatelyEqual(r.x,0)){n-=measureText(c.categories[e]||"",d.fontSize,x)/2}else if(r.x<0){n-=measureText(c.categories[e]||"",d.fontSize,x)}x.beginPath();x.setFontSize(d.fontSize);x.setFillStyle(f.labelColor||c.fontColor);x.fillText(c.categories[e]||"",n,l+d.fontSize/2);x.closePath();x.stroke()}})}function drawPieText(n,d,x,f,t,l){var p=x.pieChartLinePadding;var u=[];var g=null;var y=n.map(function(t,e){var a=t.formatter?t.formatter(t,e,n,d):util.toFixed(t._proportion_.toFixed(4)*100)+"%";a=t.labelText?t.labelText:a;var i=2*Math.PI-(t._start_+2*Math.PI*t._proportion_/2);if(t._rose_proportion_){i=2*Math.PI-(t._start_+2*Math.PI*t._rose_proportion_/2)}var r=t.color;var o=t._radius_;return{arc:i,text:a,color:r,radius:o,textColor:t.textColor,textSize:t.textSize,labelShow:t.labelShow}});for(let c=0;c=0?e+x.pieChartTextPadding:e-x.pieChartTextPadding;let n=a;let l=measureText(t.text,t.textSize*d.pix||x.fontSize,f);let s=n;if(g&&util.isSameXCoordinateArea(g.start,{x:o})){if(o>0){s=Math.min(n,g.start.y)}else if(e<0){s=Math.max(n,g.start.y)}else{if(n>0){s=Math.max(n,g.start.y)}else{s=Math.min(n,g.start.y)}}}if(o<0){o-=l}let h={lineStart:{x:i,y:r},lineEnd:{x:e,y:a},start:{x:o,y:s},width:l,height:x.fontSize,text:t.text,color:t.color,textColor:t.textColor,textSize:t.textSize};g=avoidCollision(h,g);u.push(g)}for(let n=0;nr?r:o.activeWidth;var n=e.area[0];var l=e.height-e.area[2];i.beginPath();i.setFillStyle(hexToRgb(o.activeBgColor,o.activeBgOpacity));i.rect(t-o.activeWidth/2,n,o.activeWidth,l-n);i.closePath();i.fill();i.setFillStyle("#FFFFFF")}function drawBarToolTipSplitArea(t,e,a,i,r){var o=assign({},{activeBgColor:"#000000",activeBgOpacity:.08},e.extra.bar);var n=e.area[3];var l=e.width-e.area[1];i.beginPath();i.setFillStyle(hexToRgb(o.activeBgColor,o.activeBgOpacity));i.rect(n,t-r/2,l-n,r);i.closePath();i.fill();i.setFillStyle("#FFFFFF")}function drawToolTip(e,r,o,a,n,i,f){var l=assign({},{showBox:true,showArrow:true,showCategory:false,bgColor:"#000000",bgOpacity:.7,borderColor:"#000000",borderWidth:0,borderRadius:0,borderOpacity:.7,boxPadding:3,fontColor:"#FFFFFF",fontSize:13,lineHeight:20,legendShow:true,legendShape:"auto",splitLine:true},o.extra.tooltip);if(l.showCategory==true&&o.categories){e.unshift({text:o.categories[o.tooltip.index],color:null})}var s=l.fontSize*o.pix;var p=l.lineHeight*o.pix;var h=l.boxPadding*o.pix;var c=s;var u=5*o.pix;if(l.legendShow==false){c=0;u=0}var d=l.showArrow?8*o.pix:0;var g=false;if(o.type=="line"||o.type=="mount"||o.type=="area"||o.type=="candle"||o.type=="mix"){if(l.splitLine==true){drawToolTipSplitLine(o.tooltip.offset.x,o,a,n)}}r=assign({x:0,y:0},r);r.y-=8*o.pix;var y=e.map(function(t){return measureText(t.text,s,n)});var x=c+u+4*h+Math.max.apply(null,y);var v=2*h+e.length*p;if(l.showBox==false){return}if(r.x-Math.abs(o._scrollDistance_||0)+d+x>o.width){g=true}if(v+r.y>o.height){r.y=o.height-v}n.beginPath();n.setFillStyle(hexToRgb(l.bgColor,l.bgOpacity));n.setLineWidth(l.borderWidth*o.pix);n.setStrokeStyle(hexToRgb(l.borderColor,l.borderOpacity));var t=l.borderRadius;if(g){if(x+d>o.width){r.x=o.width+Math.abs(o._scrollDistance_||0)+d+(x-o.width)}if(x>r.x){r.x=o.width+Math.abs(o._scrollDistance_||0)+d+(x-o.width)}if(l.showArrow){n.moveTo(r.x,r.y+10*o.pix);n.lineTo(r.x-d,r.y+10*o.pix+5*o.pix)}n.arc(r.x-d-t,r.y+v-t,t,0,Math.PI/2,false);n.arc(r.x-d-Math.round(x)+t,r.y+v-t,t,Math.PI/2,Math.PI,false);n.arc(r.x-d-Math.round(x)+t,r.y+t,t,-Math.PI,-Math.PI/2,false);n.arc(r.x-d-t,r.y+t,t,-Math.PI/2,0,false);if(l.showArrow){n.lineTo(r.x-d,r.y+10*o.pix-5*o.pix);n.lineTo(r.x,r.y+10*o.pix)}}else{if(l.showArrow){n.moveTo(r.x,r.y+10*o.pix);n.lineTo(r.x+d,r.y+10*o.pix-5*o.pix)}n.arc(r.x+d+t,r.y+t,t,-Math.PI,-Math.PI/2,false);n.arc(r.x+d+Math.round(x)-t,r.y+t,t,-Math.PI/2,0,false);n.arc(r.x+d+Math.round(x)-t,r.y+v-t,t,0,Math.PI/2,false);n.arc(r.x+d+t,r.y+v-t,t,Math.PI/2,Math.PI,false);if(l.showArrow){n.lineTo(r.x+d,r.y+10*o.pix+5*o.pix);n.lineTo(r.x,r.y+10*o.pix)}}n.closePath();n.fill();if(l.borderWidth>0){n.stroke()}if(l.legendShow){e.forEach(function(t,e){if(t.color!==null){n.beginPath();n.setFillStyle(t.color);var a=r.x+d+2*h;var i=r.y+(p-s)/2+p*e+h+1;if(g){a=r.x-x-d+2*h}switch(t.legendShape){case"line":n.moveTo(a,i+.5*c-2*o.pix);n.fillRect(a,i+.5*c-2*o.pix,c,4*o.pix);break;case"triangle":n.moveTo(a+7.5*o.pix,i+.5*c-5*o.pix);n.lineTo(a+2.5*o.pix,i+.5*c+5*o.pix);n.lineTo(a+12.5*o.pix,i+.5*c+5*o.pix);n.lineTo(a+7.5*o.pix,i+.5*c-5*o.pix);break;case"diamond":n.moveTo(a+7.5*o.pix,i+.5*c-5*o.pix);n.lineTo(a+2.5*o.pix,i+.5*c);n.lineTo(a+7.5*o.pix,i+.5*c+5*o.pix);n.lineTo(a+12.5*o.pix,i+.5*c);n.lineTo(a+7.5*o.pix,i+.5*c-5*o.pix);break;case"circle":n.moveTo(a+7.5*o.pix,i+.5*c);n.arc(a+7.5*o.pix,i+.5*c,5*o.pix,0,2*Math.PI);break;case"rect":n.moveTo(a,i+.5*c-5*o.pix);n.fillRect(a,i+.5*c-5*o.pix,15*o.pix,10*o.pix);break;case"square":n.moveTo(a+2*o.pix,i+.5*c-5*o.pix);n.fillRect(a+2*o.pix,i+.5*c-5*o.pix,10*o.pix,10*o.pix);break;default:n.moveTo(a,i+.5*c-5*o.pix);n.fillRect(a,i+.5*c-5*o.pix,15*o.pix,10*o.pix)}n.closePath();n.fill()}})}e.forEach(function(t,e){var a=r.x+d+2*h+c+u;if(g){a=r.x-x-d+2*h+c+u}var i=r.y+p*e+(p-s)/2-1+h+s;n.beginPath();n.setFontSize(s);n.setTextBaseline("normal");n.setFillStyle(l.fontColor);n.fillText(t.text,a,i);n.closePath();n.stroke()})}function drawColumnDataPoints(T,b,S,w){let A=arguments.length>4&&arguments[4]!==undefined?arguments[4]:1;let t=b.chartData.xAxisData,P=t.xAxisPoints,C=t.eachSpacing;let D=assign({},{type:"group",width:C/2,meterBorder:4,meterFillColor:"#FFFFFF",barBorderCircle:false,barBorderRadius:[],seriesGap:2,linearType:"none",linearOpacity:1,customColor:[],colorStop:0,labelPosition:"outside"},b.extra.column);let M=[];w.save();let L=-2;let F=P.length+2;if(b._scrollDistance_&&b._scrollDistance_!==0&&b.enableScroll===true){w.translate(b._scrollDistance_,0);L=Math.floor(-b._scrollDistance_/C)-2;F=L+b.xAxis.itemCount+4}if(b.tooltip&&b.tooltip.textList&&b.tooltip.textList.length&&A===1){drawToolTipSplitArea(b.tooltip.offset.x,b,S,w,C)}D.customColor=fillCustomColor(D.linearType,D.customColor,T,S);T.forEach(function(a,i){let e,t,o;e=[].concat(b.chartData.yAxisData.ranges[a.index]);t=e.pop();o=e.shift();let x=b.height-b.area[0]-b.area[2];let f=x*(0-t)/(o-t);let n=b.height-Math.round(f)-b.area[2];a.zeroPoints=n;var p=a.data;switch(D.type){case"group":var r=getColumnDataPoints(p,t,o,P,C,b,S,n,A);var u=getStackDataPoints(p,t,o,P,C,b,S,i,T,A);M.push(u);r=fixColumeData(r,C,T.length,i,S,b);for(let t=0;tL&&tn?n:o.y;const d=o.width;const s=Math.abs(n-o.y);if(D.barBorderCircle){D.barBorderRadius=[d/2,d/2,0,0]}if(o.y>n){D.barBorderRadius=[0,0,d/2,d/2]}let[t,e,a,i]=D.barBorderRadius;let r=Math.min(d/2,s/2);t=t>r?r:t;e=e>r?r:e;a=a>r?r:a;i=i>r?r:i;t=t<0?0:t;e=e<0?0:e;a=a<0?0:a;i=i<0?0:i;w.arc(h+t,c+t,t,-Math.PI,-Math.PI/2);w.arc(h+d-e,c+e,e,-Math.PI/2,0);w.arc(h+d-a,c+s-a,a,0,Math.PI/2);w.arc(h+i,c+s-i,i,Math.PI/2,Math.PI)}else{w.moveTo(l,o.y);w.lineTo(l+o.width,o.y);w.lineTo(l+o.width,n);w.lineTo(l,n);w.lineTo(l,o.y);w.setLineWidth(1);w.setStrokeStyle(y)}w.setFillStyle(g);w.closePath();w.fill()}};break;case"stack":var r=getStackDataPoints(p,t,o,P,C,b,S,i,T,A);M.push(r);r=fixColumeStackData(r,C,T.length,i,S,b,T);for(let e=0;eL&&e0){s-=m}w.setFillStyle(g);w.moveTo(l,t.y);w.fillRect(l,t.y,t.width,s);w.closePath();w.fill()}};break;case"meter":var r=getDataPoints(p,t,o,P,C,b,S,A);M.push(r);r=fixColumeMeterData(r,C,T.length,i,S,b,D.meterBorder);for(let t=0;tL&&t0){w.setStrokeStyle(a.color);w.setLineWidth(D.meterBorder*b.pix)}if(i==0){w.setFillStyle(D.meterFillColor)}else{w.setFillStyle(o.color||a.color)}var l=o.x-o.width/2;var s=b.height-o.y-b.area[2];if(D.barBorderRadius&&D.barBorderRadius.length===4||D.barBorderCircle===true){const h=l;const c=o.y;const d=o.width;const s=n-o.y;if(D.barBorderCircle){D.barBorderRadius=[d/2,d/2,0,0]}let[t,e,a,i]=D.barBorderRadius;let r=Math.min(d/2,s/2);t=t>r?r:t;e=e>r?r:e;a=a>r?r:a;i=i>r?r:i;t=t<0?0:t;e=e<0?0:e;a=a<0?0:a;i=i<0?0:i;w.arc(h+t,c+t,t,-Math.PI,-Math.PI/2);w.arc(h+d-e,c+e,e,-Math.PI/2,0);w.arc(h+d-a,c+s-a,a,0,Math.PI/2);w.arc(h+i,c+s-i,i,Math.PI/2,Math.PI);w.fill()}else{w.moveTo(l,o.y);w.lineTo(l+o.width,o.y);w.lineTo(l+o.width,n);w.lineTo(l,n);w.lineTo(l,o.y);w.fill()}if(i==0&&D.meterBorder>0){w.closePath();w.stroke()}}}break}});if(b.dataLabel!==false&&A===1){T.forEach(function(t,e){let a,i,r;a=[].concat(b.chartData.yAxisData.ranges[t.index]);i=a.pop();r=a.shift();var o=t.data;switch(D.type){case"group":var n=getColumnDataPoints(o,i,r,P,C,b,S,A);n=fixColumeData(n,C,T.length,e,S,b);drawColumePointText(n,t,S,w,b);break;case"stack":var n=getStackDataPoints(o,i,r,P,C,b,S,e,T,A);drawColumePointText(n,t,S,w,b);break;case"meter":var n=getDataPoints(o,i,r,P,C,b,S,A);drawColumePointText(n,t,S,w,b);break}})}w.restore();return{xAxisPoints:P,calPoints:M,eachSpacing:C}}function drawMountDataPoints(i,r,o,n){let f=arguments.length>4&&arguments[4]!==undefined?arguments[4]:1;let t=r.chartData.xAxisData,p=t.xAxisPoints,l=t.eachSpacing;let s=assign({},{type:"mount",widthRatio:1,borderWidth:1,barBorderCircle:false,barBorderRadius:[],linearType:"none",linearOpacity:1,customColor:[],colorStop:0},r.extra.mount);s.widthRatio=s.widthRatio<=0?0:s.widthRatio;s.widthRatio=s.widthRatio>=2?2:s.widthRatio;let e=[];n.save();let u=-2;let g=p.length+2;if(r._scrollDistance_&&r._scrollDistance_!==0&&r.enableScroll===true){n.translate(r._scrollDistance_,0);u=Math.floor(-r._scrollDistance_/l)-2;g=u+r.xAxis.itemCount+4}s.customColor=fillCustomColor(s.linearType,s.customColor,i,o);let y,v,m;y=[].concat(r.chartData.yAxisData.ranges[0]);v=y.pop();m=y.shift();let T=r.height-r.area[0]-r.area[2];let b=T*(0-v)/(m-v);let h=r.height-Math.round(b)-r.area[2];var c=getMountDataPoints(i,v,m,p,l,r,s,h,f);switch(s.type){case"bar":for(let t=0;tu&&th?h:o.y;const C=o.width;const S=Math.abs(h-o.y);if(s.barBorderCircle){s.barBorderRadius=[C/2,C/2,0,0]}if(o.y>h){s.barBorderRadius=[0,0,C/2,C/2]}let[t,e,a,i]=s.barBorderRadius;let r=Math.min(C/2,S/2);t=t>r?r:t;e=e>r?r:e;a=a>r?r:a;i=i>r?r:i;t=t<0?0:t;e=e<0?0:e;a=a<0?0:a;i=i<0?0:i;n.arc(A+t,P+t,t,-Math.PI,-Math.PI/2);n.arc(A+C-e,P+e,e,-Math.PI/2,0);n.arc(A+C-a,P+S-a,a,0,Math.PI/2);n.arc(A+i,P+S-i,i,Math.PI/2,Math.PI)}else{n.moveTo(d,o.y);n.lineTo(d+o.width,o.y);n.lineTo(d+o.width,h);n.lineTo(d,h);n.lineTo(d,o.y)}n.setStrokeStyle(w);n.setFillStyle(a);if(s.borderWidth>0){n.setLineWidth(s.borderWidth*r.pix);n.closePath();n.stroke()}n.fill()}};break;case"triangle":for(let e=0;eu&&e0){n.setLineWidth(s.borderWidth*r.pix);n.stroke()}n.fill()}};break;case"mount":for(let e=0;eu&&e0){n.setLineWidth(s.borderWidth*r.pix);n.stroke()}n.fill()}};break;case"sharp":for(let e=0;eu&&e0){n.setLineWidth(s.borderWidth*r.pix);n.stroke()}n.fill()}};break}if(r.dataLabel!==false&&f===1){let t,e,a;t=[].concat(r.chartData.yAxisData.ranges[0]);e=t.pop();a=t.shift();var c=getMountDataPoints(i,e,a,p,l,r,s,h,f);drawMountPointText(c,i,o,n,r,h)}n.restore();return{xAxisPoints:p,calPoints:c,eachSpacing:l}}function drawBarDataPoints(y,v,m,T){let b=arguments.length>4&&arguments[4]!==undefined?arguments[4]:1;let S=[];let w=(v.height-v.area[0]-v.area[2])/v.categories.length;for(let t=0;tC&&tr?r:t;e=e>r?r:e;a=a>r?r:a;i=i>r?r:i;t=t<0?0:t;e=e<0?0:e;a=a<0?0:a;i=i<0?0:i;T.arc(g+i,c+i,i,-Math.PI,-Math.PI/2);T.arc(o.x-t,c+t,t,-Math.PI/2,0);T.arc(o.x-e,c+h-e,e,0,Math.PI/2);T.arc(g+a,c+h-a,a,Math.PI/2,Math.PI)}else{T.moveTo(n,r);T.lineTo(o.x,r);T.lineTo(o.x,r+o.width);T.lineTo(n,r+o.width);T.lineTo(n,r);T.setLineWidth(1);T.setStrokeStyle(u)}T.setFillStyle(l);T.closePath();T.fill()}};break;case"stack":var i=getBarStackDataPoints(x,e,d,S,w,v,m,t,y,b);P.push(i);i=fixBarStackData(i,w,y.length,t,m,v,y);for(let e=0;eC&&e5&&arguments[5]!==undefined?arguments[5]:1;var s=assign({},{color:{},average:{}},h.extra.candle);s.color=assign({},{upLine:"#f04864",upFill:"#f04864",downLine:"#2fc25b",downFill:"#2fc25b"},s.color);s.average=assign({},{show:false,name:[],day:[],color:c.color},s.average);h.extra.candle=s;let a=h.chartData.xAxisData,x=a.xAxisPoints,f=a.eachSpacing;let y=[];d.save();let p=-2;let v=x.length+2;let u=0;let m=h.width+f;if(h._scrollDistance_&&h._scrollDistance_!==0&&h.enableScroll===true){d.translate(h._scrollDistance_,0);p=Math.floor(-h._scrollDistance_/f)-2;v=p+h.xAxis.itemCount+4;u=-h._scrollDistance_-f*2+h.area[3];m=u+(h.xAxis.itemCount+4)*f}if(s.average.show||t){t.forEach(function(e,t){let a,i,r;a=[].concat(h.chartData.yAxisData.ranges[e.index]);i=a.pop();r=a.shift();var o=e.data;var n=getDataPoints(o,i,r,x,f,h,c,g);var l=splitPoints(n,e);for(let t=0;tu){d.moveTo(t.x,t.y);a=1}if(e>0&&t.x>u&&t.xp&&e0){d.setStrokeStyle(s.color.upLine);d.setFillStyle(s.color.upFill);d.setLineWidth(1*h.pix);d.moveTo(t[3].x,t[3].y);d.lineTo(t[1].x,t[1].y);d.lineTo(t[1].x-f/4,t[1].y);d.lineTo(t[0].x-f/4,t[0].y);d.lineTo(t[0].x,t[0].y);d.lineTo(t[2].x,t[2].y);d.lineTo(t[0].x,t[0].y);d.lineTo(t[0].x+f/4,t[0].y);d.lineTo(t[1].x+f/4,t[1].y);d.lineTo(t[1].x,t[1].y);d.moveTo(t[3].x,t[3].y)}else{d.setStrokeStyle(s.color.downLine);d.setFillStyle(s.color.downFill);d.setLineWidth(1*h.pix);d.moveTo(t[3].x,t[3].y);d.lineTo(t[0].x,t[0].y);d.lineTo(t[0].x-f/4,t[0].y);d.lineTo(t[1].x-f/4,t[1].y);d.lineTo(t[1].x,t[1].y);d.lineTo(t[2].x,t[2].y);d.lineTo(t[1].x,t[1].y);d.lineTo(t[1].x+f/4,t[1].y);d.lineTo(t[0].x+f/4,t[0].y);d.lineTo(t[0].x,t[0].y);d.moveTo(t[3].x,t[3].y)}d.closePath();d.fill();d.stroke()}}});d.restore();return{xAxisPoints:x,calPoints:y,eachSpacing:f}}function drawAreaDataPoints(t,s,h,c){var d=arguments.length>4&&arguments[4]!==undefined?arguments[4]:1;var x=assign({},{type:"straight",opacity:.2,addLine:false,width:2,gradient:false,activeType:"none"},s.extra.area);let e=s.chartData.xAxisData,f=e.xAxisPoints,p=e.eachSpacing;let y=s.height-s.area[2];let v=[];c.save();let u=0;let g=s.width+p;if(s._scrollDistance_&&s._scrollDistance_!==0&&s.enableScroll===true){c.translate(s._scrollDistance_,0);u=-s._scrollDistance_-p*2+s.area[3];g=u+(s.xAxis.itemCount+4)*p}t.forEach(function(e,t){let a,i,r;a=[].concat(s.chartData.yAxisData.ranges[e.index]);i=a.pop();r=a.shift();let o=e.data;let n=getDataPoints(o,i,r,f,p,s,h,d);v.push(n);let l=splitPoints(n,e);for(let t=0;t1){let t=r[0];let e=r[r.length-1];c.moveTo(t.x,t.y);let i=0;if(x.type==="curve"){for(let a=0;au){c.moveTo(e.x,e.y);i=1}if(a>0&&e.x>u&&e.xu){c.moveTo(t.x,t.y);i=1}if(e>0&&t.x>u&&t.xu){c.moveTo(t.x,t.y);i=1}if(e>0&&t.x>u&&t.xu){c.moveTo(e.x,e.y);i=1}if(a>0&&e.x>u&&e.xu){c.moveTo(t.x,t.y);i=1}if(e>0&&t.x>u&&t.xu){c.moveTo(t.x,t.y);i=1}if(e>0&&t.x>u&&t.x4&&arguments[4]!==undefined?arguments[4]:1;var i=assign({},{type:"circle"},s.extra.scatter);let e=s.chartData.xAxisData,x=e.xAxisPoints,f=e.eachSpacing;var r=[];c.save();let a=0;let o=s.width+f;if(s._scrollDistance_&&s._scrollDistance_!==0&&s.enableScroll===true){c.translate(s._scrollDistance_,0);a=-s._scrollDistance_-f*2+s.area[3];o=a+(s.xAxis.itemCount+4)*f}t.forEach(function(t,e){let a,i,r;a=[].concat(s.chartData.yAxisData.ranges[t.index]);i=a.pop();r=a.shift();var o=t.data;var n=getDataPoints(o,i,r,x,f,s,h,d);c.beginPath();c.setStrokeStyle(t.color);c.setFillStyle(t.color);c.setLineWidth(1*s.pix);var l=t.pointShape;if(l==="diamond"){n.forEach(function(t,e){if(t!==null){c.moveTo(t.x,t.y-4.5);c.lineTo(t.x-4.5,t.y);c.lineTo(t.x,t.y+4.5);c.lineTo(t.x+4.5,t.y);c.lineTo(t.x,t.y-4.5)}})}else if(l==="circle"){n.forEach(function(t,e){if(t!==null){c.moveTo(t.x+2.5*s.pix,t.y);c.arc(t.x,t.y,3*s.pix,0,2*Math.PI,false)}})}else if(l==="square"){n.forEach(function(t,e){if(t!==null){c.moveTo(t.x-3.5,t.y-3.5);c.rect(t.x-3.5,t.y-3.5,7,7)}})}else if(l==="triangle"){n.forEach(function(t,e){if(t!==null){c.moveTo(t.x,t.y-4.5);c.lineTo(t.x-4.5,t.y+4.5);c.lineTo(t.x+4.5,t.y+4.5);c.lineTo(t.x,t.y-4.5)}})}else if(l==="triangle"){return}c.closePath();c.fill();c.stroke()});if(s.dataLabel!==false&&d===1){t.forEach(function(t,e){let a,i,r;a=[].concat(s.chartData.yAxisData.ranges[t.index]);i=a.pop();r=a.shift();var o=t.data;var n=getDataPoints(o,i,r,x,f,s,h,d);drawPointText(n,t,h,c,s)})}c.restore();return{xAxisPoints:x,calPoints:r,eachSpacing:f}}function drawBubbleDataPoints(a,l,s,h){var c=arguments.length>4&&arguments[4]!==undefined?arguments[4]:1;var d=assign({},{opacity:1,border:2},l.extra.bubble);let t=l.chartData.xAxisData,x=t.xAxisPoints,f=t.eachSpacing;var i=[];h.save();let e=0;let r=l.width+f;if(l._scrollDistance_&&l._scrollDistance_!==0&&l.enableScroll===true){h.translate(l._scrollDistance_,0);e=-l._scrollDistance_-f*2+l.area[3];r=e+(l.xAxis.itemCount+4)*f}a.forEach(function(i,t){let e,a,r;e=[].concat(l.chartData.yAxisData.ranges[i.index]);a=e.pop();r=e.shift();var o=i.data;var n=getDataPoints(o,a,r,x,f,l,s,c);h.beginPath();h.setStrokeStyle(i.color);h.setLineWidth(d.border*l.pix);h.setFillStyle(hexToRgb(i.color,d.opacity));n.forEach(function(t,e){h.moveTo(t.x+t.r,t.y);h.arc(t.x,t.y,t.r*l.pix,0,2*Math.PI,false)});h.closePath();h.fill();h.stroke();if(l.dataLabel!==false&&c===1){n.forEach(function(t,e){h.beginPath();var a=i.textSize*l.pix||s.fontSize;h.setFontSize(a);h.setFillStyle(i.textColor||"#FFFFFF");h.setTextAlign("center");h.fillText(String(t.t),t.x,t.y+a/2);h.closePath();h.stroke();h.setTextAlign("left")})}});h.restore();return{xAxisPoints:x,calPoints:i,eachSpacing:f}}function drawLineDataPoints(t,d,x,f){var p=arguments.length>4&&arguments[4]!==undefined?arguments[4]:1;var u=assign({},{type:"straight",width:2,activeType:"none",linearType:"none",onShadow:false,animation:"vertical"},d.extra.line);u.width*=d.pix;let e=d.chartData.xAxisData,g=e.xAxisPoints,y=e.eachSpacing;var T=[];f.save();let v=0;let m=d.width+y;if(d._scrollDistance_&&d._scrollDistance_!==0&&d.enableScroll===true){f.translate(d._scrollDistance_,0);v=-d._scrollDistance_-y*2+d.area[3];m=v+(d.xAxis.itemCount+4)*y}t.forEach(function(e,c){f.beginPath();f.setStrokeStyle(e.color);f.moveTo(-1e4,-1e4);f.lineTo(-10001,-10001);f.stroke();let t,a,i;t=[].concat(d.chartData.yAxisData.ranges[e.index]);a=t.pop();i=t.shift();var r=e.data;var o=getLineDataPoints(r,a,i,g,y,d,x,u,p);T.push(o);var n=splitPoints(o,e);if(e.lineType=="dash"){let t=e.dashLength?e.dashLength:8;t*=d.pix;f.setLineDash([t,t])}f.beginPath();var l=e.color;if(u.linearType!=="none"&&e.linearColor&&e.linearColor.length>0){var s=f.createLinearGradient(d.chartData.xAxisData.startX,d.height/2,d.chartData.xAxisData.endX,d.height/2);for(var h=0;h0){f.setShadow(e.setShadow[0],e.setShadow[1],e.setShadow[2],e.setShadow[3])}else{f.setShadow(0,0,0,"rgba(0,0,0,0)")}f.setLineWidth(u.width);n.forEach(function(i,t){if(i.length===1){f.moveTo(i[0].x,i[0].y)}else{f.moveTo(i[0].x,i[0].y);let a=0;if(u.type==="curve"){for(let e=0;ev){f.moveTo(t.x,t.y);a=1}if(e>0&&t.x>v&&t.xv){f.moveTo(t.x,t.y);a=1}if(e>0&&t.x>v&&t.xv){f.moveTo(t.x,t.y);a=1}if(e>0&&t.x>v&&t.x4&&arguments[4]!==undefined?arguments[4]:1;let e=v.chartData.xAxisData,b=e.xAxisPoints,S=e.eachSpacing;let w=assign({},{width:S/2,barBorderCircle:false,barBorderRadius:[],seriesGap:2,linearType:"none",linearOpacity:1,customColor:[],colorStop:0},v.extra.mix.column);let A=assign({},{opacity:.2,gradient:false},v.extra.mix.area);let M=assign({},{width:2},v.extra.mix.line);let L=v.height-v.area[2];let F=[];var _=0;var k=0;t.forEach(function(t,e){if(t.type=="column"){k+=1}});T.save();let R=-2;let I=b.length+2;let P=0;let C=v.width+S;if(v._scrollDistance_&&v._scrollDistance_!==0&&v.enableScroll===true){T.translate(v._scrollDistance_,0);R=Math.floor(-v._scrollDistance_/S)-2;I=R+v.xAxis.itemCount+4;P=-v._scrollDistance_-S*2+v.area[3];C=P+(v.xAxis.itemCount+4)*S}w.customColor=fillCustomColor(w.linearType,w.customColor,t,m);t.forEach(function(n,t){let o,x,f;o=[].concat(v.chartData.yAxisData.ranges[n.index]);x=o.pop();f=o.shift();var p=n.data;var a=getDataPoints(p,x,f,b,S,v,m,D);F.push(a);if(n.type=="column"){a=fixColumeData(a,S,k,_,m,v);for(let t=0;tR&&tr?r:t;e=e>r?r:e;a=a>r?r:a;i=i>r?r:i;t=t<0?0:t;e=e<0?0:e;a=a<0?0:a;i=i<0?0:i;T.arc(h+t,c+t,t,-Math.PI,-Math.PI/2);T.arc(h+d-e,c+e,e,-Math.PI/2,0);T.arc(h+d-a,c+s-a,a,0,Math.PI/2);T.arc(h+i,c+s-i,i,Math.PI/2,Math.PI)}else{T.moveTo(l,o.y);T.lineTo(l+o.width,o.y);T.lineTo(l+o.width,v.height-v.area[2]);T.lineTo(l,v.height-v.area[2]);T.lineTo(l,o.y);T.setLineWidth(1);T.setStrokeStyle(u)}T.setFillStyle(e);T.closePath();T.fill()}}_+=1}if(n.type=="area"){let e=splitPoints(a,n);for(let t=0;t1){var r=i[0];let t=i[i.length-1];T.moveTo(r.x,r.y);let a=0;if(n.style==="curve"){for(let e=0;eP){T.moveTo(t.x,t.y);a=1}if(e>0&&t.x>P&&t.xP){T.moveTo(t.x,t.y);a=1}if(e>0&&t.x>P&&t.xP){T.moveTo(t.x,t.y);a=1}if(e>0&&t.x>P&&t.xP){T.moveTo(t.x,t.y);a=1}if(e>0&&t.x>P&&t.x1){if(h.extra.mount.widthRatio>2)h.extra.mount.widthRatio=2;l+=(h.extra.mount.widthRatio-1)*f}var s=n*n/l;var y=0;if(h._scrollDistance_){y=-h._scrollDistance_*n/l}d.beginPath();d.setLineCap("round");d.setLineWidth(6*h.pix);d.setStrokeStyle(h.xAxis.scrollBackgroundColor||"#EFEBEF");d.moveTo(t,o);d.lineTo(a,o);d.stroke();d.closePath();d.beginPath();d.setLineCap("round");d.setLineWidth(6*h.pix);d.setStrokeStyle(h.xAxis.scrollColor||"#A6A6A6");d.moveTo(t+y,o);d.lineTo(t+y+s,o);d.stroke();d.closePath();d.setLineCap("butt")}d.save();if(h._scrollDistance_&&h._scrollDistance_!==0){d.translate(h._scrollDistance_,0)}if(h.xAxis.calibration===true){d.setStrokeStyle(h.xAxis.gridColor||"#cccccc");d.setLineCap("butt");d.setLineWidth(1*h.pix);x.forEach(function(t,e){if(e>0){d.beginPath();d.moveTo(t-f/2,u);d.lineTo(t-f/2,u+3*h.pix);d.closePath();d.stroke()}})}if(h.xAxis.disableGrid!==true){d.setStrokeStyle(h.xAxis.gridColor||"#cccccc");d.setLineCap("butt");d.setLineWidth(1*h.pix);if(h.xAxis.gridType=="dash"){d.setLineDash([h.xAxis.dashLength*h.pix,h.xAxis.dashLength*h.pix])}h.xAxis.gridEval=h.xAxis.gridEval||1;x.forEach(function(t,e){if(e%h.xAxis.gridEval==0){d.beginPath();d.moveTo(t,u);d.lineTo(t,i);d.stroke()}});d.setLineDash([])}if(h.xAxis.disabled!==true){let t=r.length;if(h.xAxis.labelCount){if(h.xAxis.itemCount){t=Math.ceil(r.length/h.xAxis.itemCount*h.xAxis.labelCount)}else{t=h.xAxis.labelCount}t-=1}let e=Math.ceil(r.length/t);let a=[];let i=r.length;for(let t=0;t=h.area[3]-1&&n-Math.abs(o)<=h.width-h.area[1]+1){d.beginPath();d.setFontSize(g);d.setFillStyle(h.xAxis.fontColor||h.fontColor);d.fillText(String(a),x[e]+i,u+h.xAxis.marginTop*h.pix+(h.xAxis.lineHeight-h.xAxis.fontSize)*h.pix/2+h.xAxis.fontSize*h.pix);d.closePath();d.stroke()}})}else{a.forEach(function(t,e){var a=h.xAxis.formatter?h.xAxis.formatter(t):t;var i=h._scrollDistance_||0;var r=p=="center"?x[e]+f/2:x[e];if(r-Math.abs(i)>=h.area[3]-1&&r-Math.abs(i)<=h.width-h.area[1]+1){d.save();d.beginPath();d.setFontSize(g);d.setFillStyle(h.xAxis.fontColor||h.fontColor);var o=measureText(String(a),g,d);var n=x[e];if(p=="center"){n=x[e]+f/2}var l=0;if(h.xAxis.scrollShow){l=6*h.pix}var s=u+h.xAxis.marginTop*h.pix+g-g*Math.abs(Math.sin(c._xAxisTextAngle_));if(h.xAxis.rotateAngle<0){n-=g/2;o=0}else{n+=g/2;o=-o}d.translate(n,s);d.rotate(-1*c._xAxisTextAngle_);d.fillText(String(a),o,0);d.closePath();d.stroke();d.restore()}})}}d.restore();if(h.xAxis.title){d.beginPath();d.setFontSize(h.xAxis.titleFontSize*h.pix);d.setFillStyle(h.xAxis.titleFontColor);d.fillText(String(h.xAxis.title),h.width-h.area[1]+h.xAxis.titleOffsetX*h.pix,h.height-h.area[2]+h.xAxis.marginTop*h.pix+(h.xAxis.lineHeight-h.xAxis.titleFontSize)*h.pix/2+(h.xAxis.titleFontSize+h.xAxis.titleOffsetY)*h.pix);d.closePath();d.stroke()}if(h.xAxis.axisLine){d.beginPath();d.setStrokeStyle(h.xAxis.axisLineColor);d.setLineWidth(1*h.pix);d.moveTo(t,h.height-h.area[2]);d.lineTo(a,h.height-h.area[2]);d.stroke()}}function drawYAxisGrid(c,e,d,a){if(e.yAxis.disableGrid===true){return}let t=e.height-e.area[0]-e.area[2];let i=t/e.yAxis.splitNumber;let r=e.area[3];let o=e.chartData.xAxisData.xAxisPoints,n=e.chartData.xAxisData.eachSpacing;let l=n*(o.length-1);if(e.type=="mount"&&e.extra&&e.extra.mount&&e.extra.mount.widthRatio&&e.extra.mount.widthRatio>1){if(e.extra.mount.widthRatio>2)e.extra.mount.widthRatio=2;l+=(e.extra.mount.widthRatio-1)*n}let x=r+l;let s=[];let h=1;if(e.xAxis.axisLine===false){h=0}for(let t=h;t4&&arguments[4]!==undefined?arguments[4]:1;var n=assign({},{activeOpacity:.5,activeRadius:10,offsetAngle:0,labelWidth:15,ringWidth:30,customRadius:0,border:false,borderWidth:2,borderColor:"#FFFFFF",centerColor:"#FFFFFF",linearType:"none",customColor:[]},r.type=="pie"?r.extra.pie:r.extra.ring);var l={x:r.area[3]+(r.width-r.area[1]-r.area[3])/2,y:r.area[0]+(r.height-r.area[0]-r.area[2])/2};if(e.pieChartLinePadding==0){e.pieChartLinePadding=n.activeRadius*r.pix}var i=Math.min((r.width-r.area[1]-r.area[3])/2-e.pieChartLinePadding-e.pieChartTextPadding-e._pieTextMaxLength_,(r.height-r.area[0]-r.area[2])/2-e.pieChartLinePadding-e.pieChartTextPadding);i=i<10?10:i;if(n.customRadius>0){i=n.customRadius*r.pix}t=getPieDataPoints(t,i,a);var h=n.activeRadius*r.pix;n.customColor=fillCustomColor(n.linearType,n.customColor,t,e);t=t.map(function(t){t._start_+=n.offsetAngle*Math.PI/180;return t});t.forEach(function(t,e){if(r.tooltip){if(r.tooltip.index==e){o.beginPath();o.setFillStyle(hexToRgb(t.color,n.activeOpacity||.5));o.moveTo(l.x,l.y);o.arc(l.x,l.y,t._radius_+h,t._start_,t._start_+2*t._proportion_*Math.PI);o.closePath();o.fill()}}o.beginPath();o.setLineWidth(n.borderWidth*r.pix);o.lineJoin="round";o.setStrokeStyle(n.borderColor);var a=t.color;if(n.linearType=="custom"){var i;if(o.createCircularGradient){i=o.createCircularGradient(l.x,l.y,t._radius_)}else{i=o.createRadialGradient(l.x,l.y,0,l.x,l.y,t._radius_)}i.addColorStop(0,hexToRgb(n.customColor[t.linearIndex],1));i.addColorStop(1,hexToRgb(t.color,1));a=i}o.setFillStyle(a);o.moveTo(l.x,l.y);o.arc(l.x,l.y,t._radius_,t._start_,t._start_+2*t._proportion_*Math.PI);o.closePath();o.fill();if(n.border==true){o.stroke()}});if(r.type==="ring"){var s=i*.6;if(typeof n.ringWidth==="number"&&n.ringWidth>0){s=Math.max(0,i-n.ringWidth*r.pix)}o.beginPath();o.setFillStyle(n.centerColor);o.moveTo(l.x,l.y);o.arc(l.x,l.y,s,0,2*Math.PI);o.closePath();o.fill()}if(r.dataLabel!==false&&a===1){drawPieText(t,r,e,o,i,l)}if(a===1&&r.type==="ring"){drawRingTitle(r,e,o,l)}return{center:l,radius:i,series:t}}function drawRoseDataPoints(t,r,e,o){var a=arguments.length>4&&arguments[4]!==undefined?arguments[4]:1;var n=assign({},{type:"area",activeOpacity:.5,activeRadius:10,offsetAngle:0,labelWidth:15,border:false,borderWidth:2,borderColor:"#FFFFFF",linearType:"none",customColor:[]},r.extra.rose);if(e.pieChartLinePadding==0){e.pieChartLinePadding=n.activeRadius*r.pix}var l={x:r.area[3]+(r.width-r.area[1]-r.area[3])/2,y:r.area[0]+(r.height-r.area[0]-r.area[2])/2};var i=Math.min((r.width-r.area[1]-r.area[3])/2-e.pieChartLinePadding-e.pieChartTextPadding-e._pieTextMaxLength_,(r.height-r.area[0]-r.area[2])/2-e.pieChartLinePadding-e.pieChartTextPadding);i=i<10?10:i;var s=n.minRadius||i*.5;if(i4&&arguments[4]!==undefined?arguments[4]:1;var o=assign({},{startAngle:.75,endAngle:.25,type:"default",direction:"cw",lineCap:"round",width:12,gap:2,linearType:"none",customColor:[]},i.extra.arcbar);a=getArcbarDataPoints(a,o,e);var n;if(o.centerX||o.centerY){n={x:o.centerX?o.centerX:i.width/2,y:o.centerY?o.centerY:i.height/2}}else{n={x:i.width/2,y:i.height/2}}var l;if(o.radius){l=o.radius}else{l=Math.min(n.x,n.y);l-=5*i.pix;l-=o.width/2}l=l<10?10:l;o.customColor=fillCustomColor(o.linearType,o.customColor,a,t);for(let e=0;e5&&arguments[5]!==undefined?arguments[5]:1;var f=assign({},{type:"default",startAngle:.75,endAngle:.25,width:15,labelOffset:13,splitLine:{fixRadius:0,splitNumber:10,width:15,color:"#FFFFFF",childNumber:5,childWidth:5},pointer:{width:15,color:"auto"}},c.extra.gauge);if(f.oldAngle==undefined){f.oldAngle=f.startAngle}if(f.oldData==undefined){f.oldData=0}n=getGaugeAxisPoints(n,f.startAngle,f.endAngle);var p={x:c.width/2,y:c.height/2};var u=Math.min(p.x,p.y);u-=5*c.pix;u-=f.width/2;u=u<10?10:u;var g=u-f.width;var y=0;if(f.type=="progress"){var v=u-f.width*3;d.beginPath();let t=d.createLinearGradient(p.x,p.y-v,p.x,p.y+v);t.addColorStop("0",hexToRgb(h[0].color,.3));t.addColorStop("1.0",hexToRgb("#FFFFFF",.1));d.setFillStyle(t);d.arc(p.x,p.y,v,0,2*Math.PI,false);d.fill();d.setLineWidth(f.width);d.setStrokeStyle(hexToRgb(h[0].color,.3));d.setLineCap("round");d.beginPath();d.arc(p.x,p.y,g,f.startAngle*Math.PI,f.endAngle*Math.PI,false);d.stroke();if(f.endAnglet/o){d.setStrokeStyle(hexToRgb(h[0].color,1))}else{d.setStrokeStyle(hexToRgb(h[0].color,.3))}d.setLineWidth(3*c.pix);d.moveTo(i,0);d.lineTo(r,0);d.stroke();d.rotate(a*Math.PI)}d.restore();h=getGaugeArcbarDataPoints(h,f,x);d.setLineWidth(f.width);d.setStrokeStyle(h[0].color);d.setLineCap("round");d.beginPath();d.arc(p.x,p.y,g,f.startAngle*Math.PI,h[0]._proportion_*Math.PI,false);d.stroke();let l=u-f.width*2.5;d.save();d.translate(p.x,p.y);d.rotate((h[0]._proportion_-1)*Math.PI);d.beginPath();d.setLineWidth(f.width/3);let s=d.createLinearGradient(0,-l*.6,0,l*.6);s.addColorStop("0",hexToRgb("#FFFFFF",0));s.addColorStop("0.5",hexToRgb(h[0].color,1));s.addColorStop("1.0",hexToRgb("#FFFFFF",0));d.setStrokeStyle(s);d.arc(0,0,l,.85*Math.PI,1.15*Math.PI,false);d.stroke();d.beginPath();d.setLineWidth(1);d.setStrokeStyle(h[0].color);d.setFillStyle(h[0].color);d.moveTo(-l-f.width/3/2,-4);d.lineTo(-l-f.width/3/2-4,0);d.lineTo(-l-f.width/3/2,4);d.lineTo(-l-f.width/3/2,-4);d.stroke();d.fill();d.restore()}else{d.setLineWidth(f.width);d.setLineCap("butt");for(let e=0;e4&&arguments[4]!==undefined?arguments[4]:1;var s=assign({},{gridColor:"#cccccc",gridType:"radar",gridEval:1,axisLabel:false,axisLabelTofix:0,labelShow:true,labelColor:"#666666",labelPointShow:false,labelPointRadius:3,labelPointColor:"#cccccc",opacity:.2,gridCount:3,border:false,borderWidth:2,linearType:"none",customColor:[]},n.extra.radar);var a=getRadarCoordinateSeries(n.categories.length);var h={x:n.area[3]+(n.width-n.area[1]-n.area[3])/2,y:n.area[0]+(n.height-n.area[0]-n.area[2])/2};var r=(n.width-n.area[1]-n.area[3])/2;var d=(n.height-n.area[0]-n.area[2])/2;var c=Math.min(r-(getMaxTextListLength(n.categories,i.fontSize,l)+i.radarLabelTextMargin),d-i.radarLabelTextMargin);c-=i.radarLabelTextMargin*n.pix;c=c<10?10:c;c=s.radius?s.radius:c;l.beginPath();l.setLineWidth(1*n.pix);l.setStrokeStyle(s.gridColor);a.forEach(function(t,e){var a=convertCoordinateOrigin(c*Math.cos(t),c*Math.sin(t),h);l.moveTo(h.x,h.y);if(e%s.gridEval==0){l.lineTo(a.x,a.y)}});l.stroke();l.closePath();var x=function t(i){var r={};l.beginPath();l.setLineWidth(1*n.pix);l.setStrokeStyle(s.gridColor);if(s.gridType=="radar"){a.forEach(function(t,e){var a=convertCoordinateOrigin(c/s.gridCount*i*Math.cos(t),c/s.gridCount*i*Math.sin(t),h);if(e===0){r=a;l.moveTo(a.x,a.y)}else{l.lineTo(a.x,a.y)}});l.lineTo(r.x,r.y)}else{var e=convertCoordinateOrigin(c/s.gridCount*i*Math.cos(1.5),c/s.gridCount*i*Math.sin(1.5),h);l.arc(h.x,h.y,h.y-e.y,0,2*Math.PI,false)}l.stroke();l.closePath()};for(var e=1;e<=s.gridCount;e++){x(e)}s.customColor=fillCustomColor(s.linearType,s.customColor,o,i);var f=getRadarDataPoints(a,h,c,o,n,t);f.forEach(function(t,e){l.beginPath();l.setLineWidth(s.borderWidth*n.pix);l.setStrokeStyle(t.color);var a=hexToRgb(t.color,s.opacity);if(s.linearType=="custom"){var i;if(l.createCircularGradient){i=l.createCircularGradient(h.x,h.y,c)}else{i=l.createRadialGradient(h.x,h.y,0,h.x,h.y,c)}i.addColorStop(0,hexToRgb(s.customColor[o[e].linearIndex],s.opacity));i.addColorStop(1,hexToRgb(t.color,s.opacity));a=i}l.setFillStyle(a);t.data.forEach(function(t,e){if(e===0){l.moveTo(t.position.x,t.position.y)}else{l.lineTo(t.position.x,t.position.y)}});l.closePath();l.fill();if(s.border===true){l.stroke()}l.closePath();if(n.dataPointShape!==false){var r=t.data.map(function(t){return t.position});drawPointShape(r,t.color,t.pointShape,l,n)}});if(s.axisLabel===true){const p=Math.max(s.max,Math.max.apply(null,dataCombine(o)));const u=c/s.gridCount;const g=n.fontSize*n.pix;l.setFontSize(g);l.setFillStyle(n.fontColor);l.setTextAlign("left");for(var e=0;eh.x?e.xMax:h.x;e.yMin=e.yMinh.y?e.yMax:h.y}}}return e}function coordinateToPoint(t,e,a,i,r,o){return{x:(e-a.xMin)*i+r,y:(a.yMax-t)*i+o}}function pointToCoordinate(t,e,a,i,r,o){return{x:(e-r)/i+a.xMin,y:a.yMax-(t-o)/i}}function isRayIntersectsSegment(t,e,a){if(e[1]==a[1]){return false}if(e[1]>t[1]&&a[1]>t[1]){return false}if(e[1]t[1]){return false}if(a[1]==t[1]&&e[1]>t[1]){return false}if(e[0]a[t].area[2]||e[1]>a[t].area[3]||e[2]i||e[3]>r){o=true;break}else{o=false}}else{o=true;break}}}return o}function getWordCloudPoint(c,t,d){let x=c.series;switch(t){case"normal":for(let l=0;l.7){return true}else{return false}};for(let h=0;h4&&arguments[4]!==undefined?arguments[4]:1;let a=assign({},{type:"normal",autoColors:true},r.extra.word);if(!r.chartData.wordCloudData){r.chartData.wordCloudData=getWordCloudPoint(r,a.type,o)}o.beginPath();o.setFillStyle(r.background);o.rect(0,0,r.width,r.height);o.fill();o.save();let l=r.chartData.wordCloudData;o.translate(r.width/2,r.height/2);for(let i=0;i0){if(r.tooltip){if(r.tooltip.index==i){o.strokeText(t,(l[i].areav[0]+5-r.width/2)*n-a*(1-n)/2,(l[i].areav[1]+5+e-r.height/2)*n)}else{o.fillText(t,(l[i].areav[0]+5-r.width/2)*n-a*(1-n)/2,(l[i].areav[1]+5+e-r.height/2)*n)}}else{o.fillText(t,(l[i].areav[0]+5-r.width/2)*n-a*(1-n)/2,(l[i].areav[1]+5+e-r.height/2)*n)}}}else{if(l[i].area[0]>0){if(r.tooltip){if(r.tooltip.index==i){o.strokeText(t,(l[i].area[0]+5-r.width/2)*n-a*(1-n)/2,(l[i].area[1]+5+e-r.height/2)*n)}else{o.fillText(t,(l[i].area[0]+5-r.width/2)*n-a*(1-n)/2,(l[i].area[1]+5+e-r.height/2)*n)}}else{o.fillText(t,(l[i].area[0]+5-r.width/2)*n-a*(1-n)/2,(l[i].area[1]+5+e-r.height/2)*n)}}}o.stroke();o.restore()}o.restore()}function drawFunnelDataPoints(t,e,c,a){let d=arguments.length>4&&arguments[4]!==undefined?arguments[4]:1;let i=assign({},{type:"funnel",activeWidth:10,activeOpacity:.3,border:false,borderWidth:2,borderColor:"#FFFFFF",fillOpacity:1,minSize:0,labelAlign:"right",linearType:"none",customColor:[]},e.extra.funnel);let r=(e.height-e.area[0]-e.area[2])/t.length;let o={x:e.area[3]+(e.width-e.area[1]-e.area[3])/2,y:e.height-e.area[2]};let n=i.activeWidth*e.pix;let x=Math.min((e.width-e.area[1]-e.area[3])/2-n,(e.height-e.area[0]-e.area[2])/2-n);let l=getFunnelDataPoints(t,x,i,r,d);a.save();a.translate(o.x,o.y);i.customColor=fillCustomColor(i.linearType,i.customColor,t,c);if(i.type=="pyramid"){for(let t=0;t0){l.area[3]+=i[t].width+l.yAxis.padding*l.pix}else{l.area[3]+=i[t].width}a+=1}else if(i[t].position=="right"){if(e>0){l.area[1]+=i[t].width+l.yAxis.padding*l.pix}else{l.area[1]+=i[t].width}e+=1}}}else{n.yAxisWidth=i}l.chartData.yAxisData=f;if(l.categories&&l.categories.length&&l.type!=="radar"&&l.type!=="gauge"&&l.type!=="bar"){l.chartData.xAxisData=getXAxisPoints(l.categories,l,n);let t=calCategoriesData(l.categories,l,n,l.chartData.xAxisData.eachSpacing,s),e=t.xAxisHeight,a=t.angle;n.xAxisHeight=e;n._xAxisTextAngle_=a;l.area[2]+=e;l.chartData.categoriesData=t}else{if(l.type==="line"||l.type==="area"||l.type==="scatter"||l.type==="bubble"||l.type==="bar"){l.chartData.xAxisData=calXAxisData(c,l,n,s);d=l.chartData.xAxisData.rangesFormat;let t=calCategoriesData(d,l,n,l.chartData.xAxisData.eachSpacing,s),e=t.xAxisHeight,a=t.angle;n.xAxisHeight=e;n._xAxisTextAngle_=a;l.area[2]+=e;l.chartData.categoriesData=t}else{l.chartData.xAxisData={xAxisPoints:[]}}}if(l.enableScroll&&l.xAxis.scrollAlign=="right"&&l._scrollDistance_===undefined){let t=0,e=l.chartData.xAxisData.xAxisPoints,a=l.chartData.xAxisData.startX,i=l.chartData.xAxisData.endX,r=l.chartData.xAxisData.eachSpacing;let o=r*(e.length-1);let n=i-a;t=n-o;h.scrollOption.currentOffset=t;h.scrollOption.startTouchX=t;h.scrollOption.distance=0;h.scrollOption.lastMoveTime=0;l._scrollDistance_=t}if(t==="pie"||t==="ring"||t==="rose"){n._pieTextMaxLength_=l.dataLabel===false?0:getPieTextMaxLength(x,n,s,l)}switch(t){case"word":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function(t){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}drawWordCloudDataPoints(c,l,n,s,t);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"map":s.clearRect(0,0,l.width,l.height);drawMapDataPoints(c,l,n,s);setTimeout(()=>{this.uevent.trigger("renderComplete")},50);break;case"funnel":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function(t){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}l.chartData.funnelData=drawFunnelDataPoints(c,l,n,s,t);drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,t);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"line":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}drawYAxisGrid(d,l,n,s);drawXAxis(d,l,n,s);var a=drawLineDataPoints(c,l,n,s,e),i=a.xAxisPoints,r=a.calPoints,o=a.eachSpacing;l.chartData.xAxisPoints=i;l.chartData.calPoints=r;l.chartData.eachSpacing=o;drawYAxis(c,l,n,s);if(l.enableMarkLine!==false&&e===1){drawMarkLine(l,n,s)}drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e,o,i);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"scatter":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}drawYAxisGrid(d,l,n,s);drawXAxis(d,l,n,s);var a=drawScatterDataPoints(c,l,n,s,e),i=a.xAxisPoints,r=a.calPoints,o=a.eachSpacing;l.chartData.xAxisPoints=i;l.chartData.calPoints=r;l.chartData.eachSpacing=o;drawYAxis(c,l,n,s);if(l.enableMarkLine!==false&&e===1){drawMarkLine(l,n,s)}drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e,o,i);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"bubble":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}drawYAxisGrid(d,l,n,s);drawXAxis(d,l,n,s);var a=drawBubbleDataPoints(c,l,n,s,e),i=a.xAxisPoints,r=a.calPoints,o=a.eachSpacing;l.chartData.xAxisPoints=i;l.chartData.calPoints=r;l.chartData.eachSpacing=o;drawYAxis(c,l,n,s);if(l.enableMarkLine!==false&&e===1){drawMarkLine(l,n,s)}drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e,o,i);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"mix":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}drawYAxisGrid(d,l,n,s);drawXAxis(d,l,n,s);var a=drawMixDataPoints(c,l,n,s,e),i=a.xAxisPoints,r=a.calPoints,o=a.eachSpacing;l.chartData.xAxisPoints=i;l.chartData.calPoints=r;l.chartData.eachSpacing=o;drawYAxis(c,l,n,s);if(l.enableMarkLine!==false&&e===1){drawMarkLine(l,n,s)}drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e,o,i);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"column":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}drawYAxisGrid(d,l,n,s);drawXAxis(d,l,n,s);var a=drawColumnDataPoints(c,l,n,s,e),i=a.xAxisPoints,r=a.calPoints,o=a.eachSpacing;l.chartData.xAxisPoints=i;l.chartData.calPoints=r;l.chartData.eachSpacing=o;drawYAxis(c,l,n,s);if(l.enableMarkLine!==false&&e===1){drawMarkLine(l,n,s)}drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e,o,i);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"mount":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}drawYAxisGrid(d,l,n,s);drawXAxis(d,l,n,s);var a=drawMountDataPoints(c,l,n,s,e),i=a.xAxisPoints,r=a.calPoints,o=a.eachSpacing;l.chartData.xAxisPoints=i;l.chartData.calPoints=r;l.chartData.eachSpacing=o;drawYAxis(c,l,n,s);if(l.enableMarkLine!==false&&e===1){drawMarkLine(l,n,s)}drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e,o,i);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"bar":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}drawXAxis(d,l,n,s);var a=drawBarDataPoints(c,l,n,s,e),i=a.yAxisPoints,r=a.calPoints,o=a.eachSpacing;l.chartData.yAxisPoints=i;l.chartData.xAxisPoints=l.chartData.xAxisData.xAxisPoints;l.chartData.calPoints=r;l.chartData.eachSpacing=o;drawYAxis(c,l,n,s);if(l.enableMarkLine!==false&&e===1){drawMarkLine(l,n,s)}drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e,o,i);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"area":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}drawYAxisGrid(d,l,n,s);drawXAxis(d,l,n,s);var a=drawAreaDataPoints(c,l,n,s,e),i=a.xAxisPoints,r=a.calPoints,o=a.eachSpacing;l.chartData.xAxisPoints=i;l.chartData.calPoints=r;l.chartData.eachSpacing=o;drawYAxis(c,l,n,s);if(l.enableMarkLine!==false&&e===1){drawMarkLine(l,n,s)}drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e,o,i);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"ring":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}l.chartData.pieData=drawPieDataPoints(c,l,n,s,e);drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"pie":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}l.chartData.pieData=drawPieDataPoints(c,l,n,s,e);drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"rose":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}l.chartData.pieData=drawRoseDataPoints(c,l,n,s,e);drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"radar":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}l.chartData.radarData=drawRadarDataPoints(c,l,n,s,e);drawLegend(l.series,l,n,s,l.chartData);drawToolTipBridge(l,n,s,e);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"arcbar":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}l.chartData.arcbarData=drawArcbarDataPoints(c,l,n,s,e);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"gauge":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}l.chartData.gaugeData=drawGaugeDataPoints(d,c,l,n,s,e);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break;case"candle":this.animationInstance=new Animation({timing:l.timing,duration:e,onProcess:function t(e){s.clearRect(0,0,l.width,l.height);if(l.rotate){contextRotate(s,l)}drawYAxisGrid(d,l,n,s);drawXAxis(d,l,n,s);var a=drawCandleDataPoints(c,x,l,n,s,e),i=a.xAxisPoints,r=a.calPoints,o=a.eachSpacing;l.chartData.xAxisPoints=i;l.chartData.calPoints=r;l.chartData.eachSpacing=o;drawYAxis(c,l,n,s);if(l.enableMarkLine!==false&&e===1){drawMarkLine(l,n,s)}if(x){drawLegend(x,l,n,s,l.chartData)}else{drawLegend(l.series,l,n,s,l.chartData)}drawToolTipBridge(l,n,s,e,o,i);drawCanvas(l,s)},onAnimationFinish:function t(){h.uevent.trigger("renderComplete")}});break}}function uChartsEvent(){this.events={}}uChartsEvent.prototype.addEventListener=function(t,e){this.events[t]=this.events[t]||[];this.events[t].push(e)};uChartsEvent.prototype.delEventListener=function(t){this.events[t]=[]};uChartsEvent.prototype.trigger=function(){for(var t=arguments.length,e=Array(t),a=0;a0&&arguments[0]!==undefined?arguments[0]:{};this.opts=assign({},this.opts,t);this.opts.updateData=true;let c=t.scrollPosition||"current";switch(c){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 t=calYAxisData(this.opts.series,this.opts,this.config,this.context),e=t.yAxisWidth;this.config.yAxisWidth=e;let a=0;let i=getXAxisPoints(this.opts.categories,this.opts,this.config),r=i.xAxisPoints,o=i.startX,n=i.endX,l=i.eachSpacing;let s=l*(r.length-1);let h=n-o;a=h-s;this.scrollOption={currentOffset:a,startTouchX:a,distance:0,lastMoveTime:0};this.opts._scrollDistance_=a;break}drawCharts.call(this,this.opts.type,this.opts,this.config,this.context)};uCharts.prototype.zoom=function(){var t=arguments.length>0&&arguments[0]!==undefined?arguments[0]:this.opts.xAxis.itemCount;if(this.opts.enableScroll!==true){console.log("[uCharts] 请启用滚动条后使用");return}let e=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=t.itemCount;let a=calYAxisData(this.opts.series,this.opts,this.config,this.context),i=a.yAxisWidth;this.config.yAxisWidth=i;let r=0;let o=getXAxisPoints(this.opts.categories,this.opts,this.config),h=o.xAxisPoints,c=o.startX,d=o.endX,n=o.eachSpacing;let x=n*e;let l=d-c;let s=l-n*(h.length-1);r=l/2-x;if(r>0){r=0}if(r=this.opts.categories.length?this.opts.categories.length:r;this.opts.animation=false;this.opts.xAxis.itemCount=r;let o=0;let n=getXAxisPoints(this.opts.categories,this.opts,this.config),x=n.xAxisPoints,f=n.startX,p=n.endX,l=n.eachSpacing;let u=l*this.scrollOption.moveCurrent1;let g=p-f;let y=g-l*(x.length-1);o=-u+Math.min(i[0].x,i[1].x)-this.opts.area[3]-l;if(o>0){o=0}if(o1&&arguments[1]!==undefined?arguments[1]:{};var a=null;if(t.changedTouches){a=t.changedTouches[0]}else{a=t.mp.changedTouches[0]}if(a){var i=getTouches(a,this.opts,t);var r=this.getLegendDataIndex(t);if(r>=0){if(this.opts.type=="candle"){this.opts.seriesMA[r].show=!this.opts.seriesMA[r].show}else{this.opts.series[r].show=!this.opts.series[r].show}this.opts.animation=e.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(t){var e=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var c=null;if(t.changedTouches){c=t.changedTouches[0]}else{c=t.mp.changedTouches[0]}if(!c){console.log("[uCharts] 未获取到event坐标信息")}var a=getTouches(c,this.opts,t);var d=this.scrollOption.currentOffset;var i=assign({},this.opts,{_scrollDistance_:d,animation:false});if(this.opts.type==="line"||this.opts.type==="area"||this.opts.type==="column"||this.opts.type==="scatter"||this.opts.type==="bubble"){var r=this.getCurrentDataIndex(t);var o=e.index==undefined?r.index:e.index;if(o>-1||o.length>0){var n=getSeriesDataItem(this.opts.series,o,r.group);if(n.length!==0){var l=getToolTipData(n,this.opts,o,r.group,this.opts.categories,e),s=l.textList,h=l.offset;h.y=a.y;i.tooltip={textList:e.textList!==undefined?e.textList:s,offset:e.offset!==undefined?e.offset:h,option:e,index:o,group:r.group}}}drawCharts.call(this,i.type,i,this.config,this.context)}if(this.opts.type==="mount"){var o=e.index==undefined?this.getCurrentDataIndex(t).index:e.index;if(o>-1){var i=assign({},this.opts,{animation:false});var n=assign({},i._series_[o]);var s=[{text:e.formatter?e.formatter(n,undefined,o,i):n.name+": "+n.data,color:n.color,legendShape:this.opts.extra.tooltip.legendShape=="auto"?n.legendShape:this.opts.extra.tooltip.legendShape}];var h={x:i.chartData.calPoints[o].x,y:a.y};i.tooltip={textList:e.textList?e.textList:s,offset:e.offset!==undefined?e.offset:h,option:e,index:o}}drawCharts.call(this,i.type,i,this.config,this.context)}if(this.opts.type==="bar"){var r=this.getCurrentDataIndex(t);var o=e.index==undefined?r.index:e.index;if(o>-1||o.length>0){var n=getSeriesDataItem(this.opts.series,o,r.group);if(n.length!==0){var l=getToolTipData(n,this.opts,o,r.group,this.opts.categories,e),s=l.textList,h=l.offset;h.x=a.x;i.tooltip={textList:e.textList!==undefined?e.textList:s,offset:e.offset!==undefined?e.offset:h,option:e,index:o}}}drawCharts.call(this,i.type,i,this.config,this.context)}if(this.opts.type==="mix"){var r=this.getCurrentDataIndex(t);var o=e.index==undefined?r.index:e.index;if(o>-1){var d=this.scrollOption.currentOffset;var i=assign({},this.opts,{_scrollDistance_:d,animation:false});var n=getSeriesDataItem(this.opts.series,o);if(n.length!==0){var x=getMixToolTipData(n,this.opts,o,this.opts.categories,e),s=x.textList,h=x.offset;h.y=a.y;i.tooltip={textList:e.textList?e.textList:s,offset:e.offset!==undefined?e.offset:h,option:e,index:o}}}drawCharts.call(this,i.type,i,this.config,this.context)}if(this.opts.type==="candle"){var r=this.getCurrentDataIndex(t);var o=e.index==undefined?r.index:e.index;if(o>-1){var d=this.scrollOption.currentOffset;var i=assign({},this.opts,{_scrollDistance_:d,animation:false});var n=getSeriesDataItem(this.opts.series,o);if(n.length!==0){var l=getCandleToolTipData(this.opts.series[0].data,n,this.opts,o,this.opts.categories,this.opts.extra.candle,e),s=l.textList,h=l.offset;h.y=a.y;i.tooltip={textList:e.textList?e.textList:s,offset:e.offset!==undefined?e.offset:h,option:e,index:o}}}drawCharts.call(this,i.type,i,this.config,this.context)}if(this.opts.type==="pie"||this.opts.type==="ring"||this.opts.type==="rose"||this.opts.type==="funnel"){var o=e.index==undefined?this.getCurrentDataIndex(t):e.index;if(o>-1){var i=assign({},this.opts,{animation:false});var n=assign({},i._series_[o]);var s=[{text:e.formatter?e.formatter(n,undefined,o,i):n.name+": "+n.data,color:n.color,legendShape:this.opts.extra.tooltip.legendShape=="auto"?n.legendShape:this.opts.extra.tooltip.legendShape}];var h={x:a.x,y:a.y};i.tooltip={textList:e.textList?e.textList:s,offset:e.offset!==undefined?e.offset:h,option:e,index:o}}drawCharts.call(this,i.type,i,this.config,this.context)}if(this.opts.type==="map"){var o=e.index==undefined?this.getCurrentDataIndex(t):e.index;if(o>-1){var i=assign({},this.opts,{animation:false});var n=assign({},this.opts.series[o]);n.name=n.properties.name;var s=[{text:e.formatter?e.formatter(n,undefined,o,this.opts):n.name,color:n.color,legendShape:this.opts.extra.tooltip.legendShape=="auto"?n.legendShape:this.opts.extra.tooltip.legendShape}];var h={x:a.x,y:a.y};i.tooltip={textList:e.textList?e.textList:s,offset:e.offset!==undefined?e.offset:h,option:e,index:o}}i.updateData=false;drawCharts.call(this,i.type,i,this.config,this.context)}if(this.opts.type==="word"){var o=e.index==undefined?this.getCurrentDataIndex(t):e.index;if(o>-1){var i=assign({},this.opts,{animation:false});var n=assign({},this.opts.series[o]);var s=[{text:e.formatter?e.formatter(n,undefined,o,this.opts):n.name,color:n.color,legendShape:this.opts.extra.tooltip.legendShape=="auto"?n.legendShape:this.opts.extra.tooltip.legendShape}];var h={x:a.x,y:a.y};i.tooltip={textList:e.textList?e.textList:s,offset:e.offset!==undefined?e.offset:h,option:e,index:o}}i.updateData=false;drawCharts.call(this,i.type,i,this.config,this.context)}if(this.opts.type==="radar"){var o=e.index==undefined?this.getCurrentDataIndex(t):e.index;if(o>-1){var i=assign({},this.opts,{animation:false});var n=getSeriesDataItem(this.opts.series,o);if(n.length!==0){var s=n.map(t=>{return{text:e.formatter?e.formatter(t,this.opts.categories[o],o,this.opts):t.name+": "+t.data,color:t.color,legendShape:this.opts.extra.tooltip.legendShape=="auto"?t.legendShape:this.opts.extra.tooltip.legendShape}});var h={x:a.x,y:a.y};i.tooltip={textList:e.textList?e.textList:s,offset:e.offset!==undefined?e.offset:h,option:e,index:o}}}drawCharts.call(this,i.type,i,this.config,this.context)}};uCharts.prototype.translate=function(t){this.scrollOption={currentOffset:t,startTouchX:t,distance:0,lastMoveTime:0};let e=assign({},this.opts,{_scrollDistance_:t,animation:false});drawCharts.call(this,this.opts.type,e,this.config,this.context)};uCharts.prototype.scrollStart=function(t){var e=null;if(t.changedTouches){e=t.changedTouches[0]}else{e=t.mp.changedTouches[0]}var a=getTouches(e,this.opts,t);if(e&&this.opts.enableScroll===true){this.scrollOption.startTouchX=a.x}};uCharts.prototype.scroll=function(t){if(this.scrollOption.lastMoveTime===0){this.scrollOption.lastMoveTime=Date.now()}let e=this.opts.touchMoveLimit||60;let a=Date.now();let i=a-this.scrollOption.lastMoveTime;if(i
-
-
-
- {{ title }}
-
+
+
-
- 测试 UnoCSS
-
+
+
+
+
+
+
+ {{ item.title }}
+
+
-
- 主要按钮
- 成功按钮
- 信息按钮
- 警告按钮
- 危险按钮
-
+
+
+
+
+
+
+
+
+
+
+ {{ item.title }}
+ {{ item.count }}
+
+
+
+
+
+
+
+
+
+ 访问趋势
+
+
+ 近7天
+ 近30天
+
+
+
+
+
+
+
+
+
-
diff --git a/src/pages/work/user/index.vue b/src/pages/work/user/index.vue
index d8e8daa..9017990 100644
--- a/src/pages/work/user/index.vue
+++ b/src/pages/work/user/index.vue
@@ -19,6 +19,7 @@
+
@@ -66,6 +67,7 @@
+
@@ -100,8 +102,7 @@