feat: 一户一档UI样式走查修改

master
JINGYJ 11 months ago
parent 87ff2d8f9e
commit 4a4bcb1e5d

@ -51,6 +51,7 @@
"@pureadmin/descriptions": "^1.2.1",
"@pureadmin/table": "^3.1.2",
"@pureadmin/utils": "^2.4.7",
"@vue-office/docx": "^1.6.2",
"@vueuse/core": "^10.9.0",
"@vueuse/motion": "^2.1.0",
"animate.css": "^4.1.1",
@ -69,6 +70,7 @@
"responsive-storage": "^2.2.0",
"sortablejs": "^1.15.2",
"vue": "^3.4.27",
"vue-demi": "^0.14.7",
"vue-router": "^4.3.2",
"vue-tippy": "^6.4.1",
"vue-types": "^5.1.2"

@ -10,19 +10,22 @@ importers:
dependencies:
'@pureadmin/descriptions':
specifier: ^1.2.1
version: 1.2.1(echarts@5.5.0)(element-plus@2.7.3)(typescript@5.4.5)
version: 1.2.1(echarts@5.5.0)(element-plus@2.7.3(vue@3.4.27(typescript@5.4.5)))(typescript@5.4.5)
'@pureadmin/table':
specifier: ^3.1.2
version: 3.1.2(element-plus@2.7.3)(typescript@5.4.5)
version: 3.1.2(element-plus@2.7.3(vue@3.4.27(typescript@5.4.5)))(typescript@5.4.5)
'@pureadmin/utils':
specifier: ^2.4.7
version: 2.4.7(echarts@5.5.0)(vue@3.4.27)
version: 2.4.7(echarts@5.5.0)(vue@3.4.27(typescript@5.4.5))
'@vue-office/docx':
specifier: ^1.6.2
version: 1.6.2(vue-demi@0.14.7(vue@3.4.27(typescript@5.4.5)))(vue@3.4.27(typescript@5.4.5))
'@vueuse/core':
specifier: ^10.9.0
version: 10.9.0(vue@3.4.27)
version: 10.9.0(vue@3.4.27(typescript@5.4.5))
'@vueuse/motion':
specifier: ^2.1.0
version: 2.1.0(rollup@4.17.2)(vue@3.4.27)
version: 2.1.0(rollup@4.17.2)(vue@3.4.27(typescript@5.4.5))
animate.css:
specifier: ^4.1.1
version: 4.1.1
@ -37,7 +40,7 @@ importers:
version: 5.5.0
element-plus:
specifier: ^2.7.3
version: 2.7.3(vue@3.4.27)
version: 2.7.3(vue@3.4.27(typescript@5.4.5))
js-cookie:
specifier: ^3.0.5
version: 3.0.5
@ -55,7 +58,7 @@ importers:
version: 0.12.7
pinia:
specifier: ^2.1.7
version: 2.1.7(typescript@5.4.5)(vue@3.4.27)
version: 2.1.7(typescript@5.4.5)(vue@3.4.27(typescript@5.4.5))
pinyin-pro:
specifier: ^3.20.4
version: 3.20.4
@ -71,15 +74,18 @@ importers:
vue:
specifier: ^3.4.27
version: 3.4.27(typescript@5.4.5)
vue-demi:
specifier: ^0.14.7
version: 0.14.7(vue@3.4.27(typescript@5.4.5))
vue-router:
specifier: ^4.3.2
version: 4.3.2(vue@3.4.27)
version: 4.3.2(vue@3.4.27(typescript@5.4.5))
vue-tippy:
specifier: ^6.4.1
version: 6.4.1(vue@3.4.27)
version: 6.4.1(vue@3.4.27(typescript@5.4.5))
vue-types:
specifier: ^5.1.2
version: 5.1.2(vue@3.4.27)
version: 5.1.2(vue@3.4.27(typescript@5.4.5))
devDependencies:
'@commitlint/cli':
specifier: ^19.3.0
@ -104,7 +110,7 @@ importers:
version: 1.2.10
'@iconify/vue':
specifier: ^4.1.2
version: 4.1.2(vue@3.4.27)
version: 4.1.2(vue@3.4.27(typescript@5.4.5))
'@pureadmin/theme':
specifier: ^3.2.0
version: 3.2.0
@ -128,16 +134,16 @@ importers:
version: 1.15.8
'@typescript-eslint/eslint-plugin':
specifier: ^7.9.0
version: 7.9.0(@typescript-eslint/parser@7.9.0)(eslint@9.2.0)(typescript@5.4.5)
version: 7.9.0(@typescript-eslint/parser@7.9.0(eslint@9.2.0)(typescript@5.4.5))(eslint@9.2.0)(typescript@5.4.5)
'@typescript-eslint/parser':
specifier: ^7.9.0
version: 7.9.0(eslint@9.2.0)(typescript@5.4.5)
'@vitejs/plugin-vue':
specifier: ^5.0.4
version: 5.0.4(vite@5.2.11)(vue@3.4.27)
version: 5.0.4(vite@5.2.11(@types/node@20.12.11)(sass@1.77.1))(vue@3.4.27(typescript@5.4.5))
'@vitejs/plugin-vue-jsx':
specifier: ^3.1.0
version: 3.1.0(vite@5.2.11)(vue@3.4.27)
version: 3.1.0(vite@5.2.11(@types/node@20.12.11)(sass@1.77.1))(vue@3.4.27(typescript@5.4.5))
autoprefixer:
specifier: ^10.4.19
version: 10.4.19(postcss@8.4.38)
@ -158,7 +164,7 @@ importers:
version: 2.1.0
eslint-plugin-prettier:
specifier: ^5.1.3
version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@9.2.0)(prettier@3.2.5)
version: 5.1.3(eslint-config-prettier@9.1.0(eslint@9.2.0))(eslint@9.2.0)(prettier@3.2.5)
eslint-plugin-vue:
specifier: ^9.26.0
version: 9.26.0(eslint@9.2.0)
@ -200,16 +206,16 @@ importers:
version: 16.5.0(typescript@5.4.5)
stylelint-config-recess-order:
specifier: ^5.0.1
version: 5.0.1(stylelint@16.5.0)
version: 5.0.1(stylelint@16.5.0(typescript@5.4.5))
stylelint-config-recommended-vue:
specifier: ^1.5.0
version: 1.5.0(postcss-html@1.7.0)(stylelint@16.5.0)
version: 1.5.0(postcss-html@1.7.0)(stylelint@16.5.0(typescript@5.4.5))
stylelint-config-standard-scss:
specifier: ^13.1.0
version: 13.1.0(postcss@8.4.38)(stylelint@16.5.0)
version: 13.1.0(postcss@8.4.38)(stylelint@16.5.0(typescript@5.4.5))
stylelint-prettier:
specifier: ^5.0.0
version: 5.0.0(prettier@3.2.5)(stylelint@16.5.0)
version: 5.0.0(prettier@3.2.5)(stylelint@16.5.0(typescript@5.4.5))
svgo:
specifier: ^3.3.2
version: 3.3.2
@ -224,10 +230,10 @@ importers:
version: 5.2.11(@types/node@20.12.11)(sass@1.77.1)
vite-plugin-cdn-import:
specifier: ^1.0.1
version: 1.0.1(rollup@4.17.2)(vite@5.2.11)
version: 1.0.1(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.11)(sass@1.77.1))
vite-plugin-compression:
specifier: ^0.5.1
version: 0.5.1(vite@5.2.11)
version: 0.5.1(vite@5.2.11(@types/node@20.12.11)(sass@1.77.1))
vite-plugin-fake-server:
specifier: ^2.1.1
version: 2.1.1
@ -239,7 +245,7 @@ importers:
version: 1.0.0
vite-svg-loader:
specifier: ^5.1.0
version: 5.1.0(vue@3.4.27)
version: 5.1.0(vue@3.4.27(typescript@5.4.5))
vue-eslint-parser:
specifier: ^9.4.2
version: 9.4.2(eslint@9.2.0)
@ -786,7 +792,7 @@ packages:
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 || 9
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
'@eslint-community/regexpp@4.10.0':
resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==}
@ -1075,7 +1081,7 @@ packages:
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
'@typescript-eslint/parser': ^7.0.0
eslint: ^8.56.0 || 9
eslint: ^8.56.0
typescript: '*'
peerDependenciesMeta:
typescript:
@ -1085,7 +1091,7 @@ packages:
resolution: {integrity: sha512-qHMJfkL5qvgQB2aLvhUSXxbK7OLnDkwPzFalg458pxQgfxKDfT1ZDbHQM/I6mDIf/svlMkj21kzKuQ2ixJlatQ==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0 || 9
eslint: ^8.56.0
typescript: '*'
peerDependenciesMeta:
typescript:
@ -1099,7 +1105,7 @@ packages:
resolution: {integrity: sha512-6Qy8dfut0PFrFRAZsGzuLoM4hre4gjzWJB6sUvdunCYZsYemTkzZNwF1rnGea326PHPT3zn5Lmg32M/xfJfByA==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0 || 9
eslint: ^8.56.0
typescript: '*'
peerDependenciesMeta:
typescript:
@ -1122,7 +1128,7 @@ packages:
resolution: {integrity: sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0 || 9
eslint: ^8.56.0
'@typescript-eslint/visitor-keys@7.9.0':
resolution: {integrity: sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==}
@ -1151,6 +1157,16 @@ packages:
'@volar/typescript@1.11.1':
resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==}
'@vue-office/docx@1.6.2':
resolution: {integrity: sha512-OHAoUHeY8nHjhWvwDhlPx+/rmRkxmqLpvPgtfCEOZ4H1c1LCdJ6eDbdV3152ww8dcdZ7fgGQu3fmSSaI7JwdpQ==}
peerDependencies:
'@vue/composition-api': ^1.7.1
vue: ^2.0.0 || >=3.0.0
vue-demi: ^0.14.6
peerDependenciesMeta:
'@vue/composition-api':
optional: true
'@vue/babel-helper-vue-transform-on@1.2.2':
resolution: {integrity: sha512-nOttamHUR3YzdEqdM/XXDyCSdxMA9VizUKoroLX6yTyRtggzQMHXcmwh8a7ZErcJttIBIc9s68a1B8GZ+Dmvsw==}
@ -1785,7 +1801,7 @@ packages:
resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==}
hasBin: true
peerDependencies:
eslint: '>=7.0.0 || 9'
eslint: '>=7.0.0'
eslint-define-config@2.1.0:
resolution: {integrity: sha512-QUp6pM9pjKEVannNAbSJNeRuYwW3LshejfyBBpjeMGaJjaDUpVps4C6KVR8R7dWZnD3i0synmrE36znjTkJvdQ==}
@ -1796,7 +1812,7 @@ packages:
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
'@types/eslint': '>=8.0.0'
eslint: '>=8.0.0 || 9'
eslint: '>=8.0.0'
eslint-config-prettier: '*'
prettier: '>=3.0.0'
peerDependenciesMeta:
@ -1809,7 +1825,7 @@ packages:
resolution: {integrity: sha512-eTvlxXgd4ijE1cdur850G6KalZqk65k1JKoOI2d1kT3hr8sPD07j1q98FRFdNnpxBELGPWxZmInxeHGF/GxtqQ==}
engines: {node: ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || 9
eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
eslint-scope@7.2.2:
resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
@ -3645,7 +3661,7 @@ packages:
resolution: {integrity: sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==}
engines: {node: ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: '>=6.0.0 || 9'
eslint: '>=6.0.0'
vue-router@4.3.2:
resolution: {integrity: sha512-hKQJ1vDAZ5LVkKEnHhmm1f9pMiWIBNGF5AwU67PdH7TyXCj/a4hTccuUuYCAMgJK6rO/NVYtQIEN3yL8CECa7Q==}
@ -4026,7 +4042,7 @@ snapshots:
'@commitlint/types': 19.0.3
chalk: 5.3.0
cosmiconfig: 9.0.0(typescript@5.4.5)
cosmiconfig-typescript-loader: 5.0.0(@types/node@20.12.11)(cosmiconfig@9.0.0)(typescript@5.4.5)
cosmiconfig-typescript-loader: 5.0.0(@types/node@20.12.11)(cosmiconfig@9.0.0(typescript@5.4.5))(typescript@5.4.5)
lodash.isplainobject: 4.0.6
lodash.merge: 4.6.2
lodash.uniq: 4.5.0
@ -4084,7 +4100,7 @@ snapshots:
'@csstools/css-tokenizer@2.3.1': {}
'@csstools/media-query-list-parser@2.1.11(@csstools/css-parser-algorithms@2.6.3)(@csstools/css-tokenizer@2.3.1)':
'@csstools/media-query-list-parser@2.1.11(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)':
dependencies:
'@csstools/css-parser-algorithms': 2.6.3(@csstools/css-tokenizer@2.3.1)
'@csstools/css-tokenizer': 2.3.1
@ -4097,7 +4113,7 @@ snapshots:
'@dual-bundle/import-meta-resolve@4.1.0': {}
'@element-plus/icons-vue@2.3.1(vue@3.4.27)':
'@element-plus/icons-vue@2.3.1(vue@3.4.27(typescript@5.4.5))':
dependencies:
vue: 3.4.27(typescript@5.4.5)
@ -4299,7 +4315,7 @@ snapshots:
'@iconify/types@2.0.0': {}
'@iconify/vue@4.1.2(vue@3.4.27)':
'@iconify/vue@4.1.2(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@iconify/types': 2.0.0
vue: 3.4.27(typescript@5.4.5)
@ -4395,19 +4411,19 @@ snapshots:
'@popperjs/core@2.11.8': {}
'@pureadmin/descriptions@1.2.1(echarts@5.5.0)(element-plus@2.7.3)(typescript@5.4.5)':
'@pureadmin/descriptions@1.2.1(echarts@5.5.0)(element-plus@2.7.3(vue@3.4.27(typescript@5.4.5)))(typescript@5.4.5)':
dependencies:
'@element-plus/icons-vue': 2.3.1(vue@3.4.27)
'@pureadmin/utils': 2.4.7(echarts@5.5.0)(vue@3.4.27)
element-plus: 2.7.3(vue@3.4.27)
'@element-plus/icons-vue': 2.3.1(vue@3.4.27(typescript@5.4.5))
'@pureadmin/utils': 2.4.7(echarts@5.5.0)(vue@3.4.27(typescript@5.4.5))
element-plus: 2.7.3(vue@3.4.27(typescript@5.4.5))
vue: 3.4.27(typescript@5.4.5)
transitivePeerDependencies:
- echarts
- typescript
'@pureadmin/table@3.1.2(element-plus@2.7.3)(typescript@5.4.5)':
'@pureadmin/table@3.1.2(element-plus@2.7.3(vue@3.4.27(typescript@5.4.5)))(typescript@5.4.5)':
dependencies:
element-plus: 2.7.3(vue@3.4.27)
element-plus: 2.7.3(vue@3.4.27(typescript@5.4.5))
vue: 3.4.27(typescript@5.4.5)
transitivePeerDependencies:
- typescript
@ -4418,8 +4434,8 @@ snapshots:
fs-extra: 11.2.0
string-hash: 1.1.3
'@pureadmin/utils@2.4.7(echarts@5.5.0)(vue@3.4.27)':
dependencies:
'@pureadmin/utils@2.4.7(echarts@5.5.0)(vue@3.4.27(typescript@5.4.5))':
optionalDependencies:
echarts: 5.5.0
vue: 3.4.27(typescript@5.4.5)
@ -4428,6 +4444,7 @@ snapshots:
'@types/estree': 1.0.5
estree-walker: 2.0.2
picomatch: 2.3.1
optionalDependencies:
rollup: 4.17.2
'@rollup/rollup-android-arm-eabi@4.17.2':
@ -4519,7 +4536,7 @@ snapshots:
'@types/web-bluetooth@0.0.20': {}
'@typescript-eslint/eslint-plugin@7.9.0(@typescript-eslint/parser@7.9.0)(eslint@9.2.0)(typescript@5.4.5)':
'@typescript-eslint/eslint-plugin@7.9.0(@typescript-eslint/parser@7.9.0(eslint@9.2.0)(typescript@5.4.5))(eslint@9.2.0)(typescript@5.4.5)':
dependencies:
'@eslint-community/regexpp': 4.10.0
'@typescript-eslint/parser': 7.9.0(eslint@9.2.0)(typescript@5.4.5)
@ -4532,6 +4549,7 @@ snapshots:
ignore: 5.3.1
natural-compare: 1.4.0
ts-api-utils: 1.3.0(typescript@5.4.5)
optionalDependencies:
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
@ -4544,6 +4562,7 @@ snapshots:
'@typescript-eslint/visitor-keys': 7.9.0
debug: 4.3.4
eslint: 9.2.0
optionalDependencies:
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
@ -4560,6 +4579,7 @@ snapshots:
debug: 4.3.4
eslint: 9.2.0
ts-api-utils: 1.3.0(typescript@5.4.5)
optionalDependencies:
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
@ -4576,6 +4596,7 @@ snapshots:
minimatch: 9.0.4
semver: 7.6.2
ts-api-utils: 1.3.0(typescript@5.4.5)
optionalDependencies:
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
@ -4596,7 +4617,7 @@ snapshots:
'@typescript-eslint/types': 7.9.0
eslint-visitor-keys: 3.4.3
'@vitejs/plugin-vue-jsx@3.1.0(vite@5.2.11)(vue@3.4.27)':
'@vitejs/plugin-vue-jsx@3.1.0(vite@5.2.11(@types/node@20.12.11)(sass@1.77.1))(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@babel/core': 7.24.5
'@babel/plugin-transform-typescript': 7.24.5(@babel/core@7.24.5)
@ -4606,7 +4627,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@vitejs/plugin-vue@5.0.4(vite@5.2.11)(vue@3.4.27)':
'@vitejs/plugin-vue@5.0.4(vite@5.2.11(@types/node@20.12.11)(sass@1.77.1))(vue@3.4.27(typescript@5.4.5))':
dependencies:
vite: 5.2.11(@types/node@20.12.11)(sass@1.77.1)
vue: 3.4.27(typescript@5.4.5)
@ -4624,11 +4645,15 @@ snapshots:
'@volar/language-core': 1.11.1
path-browserify: 1.0.1
'@vue-office/docx@1.6.2(vue-demi@0.14.7(vue@3.4.27(typescript@5.4.5)))(vue@3.4.27(typescript@5.4.5))':
dependencies:
vue: 3.4.27(typescript@5.4.5)
vue-demi: 0.14.7(vue@3.4.27(typescript@5.4.5))
'@vue/babel-helper-vue-transform-on@1.2.2': {}
'@vue/babel-plugin-jsx@1.2.2(@babel/core@7.24.5)':
dependencies:
'@babel/core': 7.24.5
'@babel/helper-module-imports': 7.22.15
'@babel/helper-plugin-utils': 7.24.5
'@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5)
@ -4640,6 +4665,8 @@ snapshots:
camelcase: 6.3.0
html-tags: 3.3.1
svg-tags: 1.0.0
optionalDependencies:
'@babel/core': 7.24.5
transitivePeerDependencies:
- supports-color
@ -4694,8 +4721,9 @@ snapshots:
minimatch: 9.0.4
muggle-string: 0.3.1
path-browserify: 1.0.1
typescript: 5.4.5
vue-template-compiler: 2.7.16
optionalDependencies:
typescript: 5.4.5
'@vue/reactivity@3.4.27':
dependencies:
@ -4712,7 +4740,7 @@ snapshots:
'@vue/shared': 3.4.27
csstype: 3.1.3
'@vue/server-renderer@3.4.27(vue@3.4.27)':
'@vue/server-renderer@3.4.27(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vue/compiler-ssr': 3.4.27
'@vue/shared': 3.4.27
@ -4720,22 +4748,22 @@ snapshots:
'@vue/shared@3.4.27': {}
'@vueuse/core@10.9.0(vue@3.4.27)':
'@vueuse/core@10.9.0(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@types/web-bluetooth': 0.0.20
'@vueuse/metadata': 10.9.0
'@vueuse/shared': 10.9.0(vue@3.4.27)
vue-demi: 0.14.7(vue@3.4.27)
'@vueuse/shared': 10.9.0(vue@3.4.27(typescript@5.4.5))
vue-demi: 0.14.7(vue@3.4.27(typescript@5.4.5))
transitivePeerDependencies:
- '@vue/composition-api'
- vue
'@vueuse/core@9.13.0(vue@3.4.27)':
'@vueuse/core@9.13.0(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@types/web-bluetooth': 0.0.16
'@vueuse/metadata': 9.13.0
'@vueuse/shared': 9.13.0(vue@3.4.27)
vue-demi: 0.14.7(vue@3.4.27)
'@vueuse/shared': 9.13.0(vue@3.4.27(typescript@5.4.5))
vue-demi: 0.14.7(vue@3.4.27(typescript@5.4.5))
transitivePeerDependencies:
- '@vue/composition-api'
- vue
@ -4744,10 +4772,10 @@ snapshots:
'@vueuse/metadata@9.13.0': {}
'@vueuse/motion@2.1.0(rollup@4.17.2)(vue@3.4.27)':
'@vueuse/motion@2.1.0(rollup@4.17.2)(vue@3.4.27(typescript@5.4.5))':
dependencies:
'@vueuse/core': 10.9.0(vue@3.4.27)
'@vueuse/shared': 10.9.0(vue@3.4.27)
'@vueuse/core': 10.9.0(vue@3.4.27(typescript@5.4.5))
'@vueuse/shared': 10.9.0(vue@3.4.27(typescript@5.4.5))
csstype: 3.1.3
framesync: 6.1.2
popmotion: 11.0.5
@ -4760,16 +4788,16 @@ snapshots:
- rollup
- supports-color
'@vueuse/shared@10.9.0(vue@3.4.27)':
'@vueuse/shared@10.9.0(vue@3.4.27(typescript@5.4.5))':
dependencies:
vue-demi: 0.14.7(vue@3.4.27)
vue-demi: 0.14.7(vue@3.4.27(typescript@5.4.5))
transitivePeerDependencies:
- '@vue/composition-api'
- vue
'@vueuse/shared@9.13.0(vue@3.4.27)':
'@vueuse/shared@9.13.0(vue@3.4.27(typescript@5.4.5))':
dependencies:
vue-demi: 0.14.7(vue@3.4.27)
vue-demi: 0.14.7(vue@3.4.27(typescript@5.4.5))
transitivePeerDependencies:
- '@vue/composition-api'
- vue
@ -5076,7 +5104,7 @@ snapshots:
convert-source-map@2.0.0: {}
cosmiconfig-typescript-loader@5.0.0(@types/node@20.12.11)(cosmiconfig@9.0.0)(typescript@5.4.5):
cosmiconfig-typescript-loader@5.0.0(@types/node@20.12.11)(cosmiconfig@9.0.0(typescript@5.4.5))(typescript@5.4.5):
dependencies:
'@types/node': 20.12.11
cosmiconfig: 9.0.0(typescript@5.4.5)
@ -5089,6 +5117,7 @@ snapshots:
import-fresh: 3.3.0
js-yaml: 4.1.0
parse-json: 5.2.0
optionalDependencies:
typescript: 5.4.5
cross-spawn@7.0.3:
@ -5334,15 +5363,15 @@ snapshots:
electron-to-chromium@1.4.774: {}
element-plus@2.7.3(vue@3.4.27):
element-plus@2.7.3(vue@3.4.27(typescript@5.4.5)):
dependencies:
'@ctrl/tinycolor': 3.6.1
'@element-plus/icons-vue': 2.3.1(vue@3.4.27)
'@element-plus/icons-vue': 2.3.1(vue@3.4.27(typescript@5.4.5))
'@floating-ui/dom': 1.6.5
'@popperjs/core': '@sxzz/popperjs-es@2.11.7'
'@types/lodash': 4.17.4
'@types/lodash-es': 4.17.12
'@vueuse/core': 9.13.0(vue@3.4.27)
'@vueuse/core': 9.13.0(vue@3.4.27(typescript@5.4.5))
async-validator: 4.2.5
dayjs: 1.11.11
escape-html: 1.0.3
@ -5448,13 +5477,14 @@ snapshots:
eslint-define-config@2.1.0: {}
eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@9.2.0)(prettier@3.2.5):
eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0(eslint@9.2.0))(eslint@9.2.0)(prettier@3.2.5):
dependencies:
eslint: 9.2.0
eslint-config-prettier: 9.1.0(eslint@9.2.0)
prettier: 3.2.5
prettier-linter-helpers: 1.0.0
synckit: 0.8.8
optionalDependencies:
eslint-config-prettier: 9.1.0(eslint@9.2.0)
eslint-plugin-vue@9.26.0(eslint@9.2.0):
dependencies:
@ -6272,12 +6302,13 @@ snapshots:
pify@2.3.0: {}
pinia@2.1.7(typescript@5.4.5)(vue@3.4.27):
pinia@2.1.7(typescript@5.4.5)(vue@3.4.27(typescript@5.4.5)):
dependencies:
'@vue/devtools-api': 6.6.1
typescript: 5.4.5
vue: 3.4.27(typescript@5.4.5)
vue-demi: 0.14.7(vue@3.4.27)
vue-demi: 0.14.7(vue@3.4.27(typescript@5.4.5))
optionalDependencies:
typescript: 5.4.5
pinyin-pro@3.20.4: {}
@ -6398,8 +6429,9 @@ snapshots:
postcss-load-config@4.0.2(postcss@8.4.38):
dependencies:
lilconfig: 3.1.1
postcss: 8.4.38
yaml: 2.4.2
optionalDependencies:
postcss: 8.4.38
postcss-media-query-parser@0.2.3: {}
@ -6741,9 +6773,10 @@ snapshots:
dependencies:
open: 8.4.2
picomatch: 2.3.1
rollup: 4.17.2
source-map: 0.7.4
yargs: 17.7.2
optionalDependencies:
rollup: 4.17.2
rollup@4.17.2:
dependencies:
@ -6908,61 +6941,63 @@ snapshots:
postcss: 8.4.38
postcss-selector-parser: 6.0.16
stylelint-config-html@1.1.0(postcss-html@1.7.0)(stylelint@16.5.0):
stylelint-config-html@1.1.0(postcss-html@1.7.0)(stylelint@16.5.0(typescript@5.4.5)):
dependencies:
postcss-html: 1.7.0
stylelint: 16.5.0(typescript@5.4.5)
stylelint-config-recess-order@5.0.1(stylelint@16.5.0):
stylelint-config-recess-order@5.0.1(stylelint@16.5.0(typescript@5.4.5)):
dependencies:
stylelint: 16.5.0(typescript@5.4.5)
stylelint-order: 6.0.4(stylelint@16.5.0)
stylelint-order: 6.0.4(stylelint@16.5.0(typescript@5.4.5))
stylelint-config-recommended-scss@14.0.0(postcss@8.4.38)(stylelint@16.5.0):
stylelint-config-recommended-scss@14.0.0(postcss@8.4.38)(stylelint@16.5.0(typescript@5.4.5)):
dependencies:
postcss: 8.4.38
postcss-scss: 4.0.9(postcss@8.4.38)
stylelint: 16.5.0(typescript@5.4.5)
stylelint-config-recommended: 14.0.0(stylelint@16.5.0)
stylelint-scss: 6.3.0(stylelint@16.5.0)
stylelint-config-recommended: 14.0.0(stylelint@16.5.0(typescript@5.4.5))
stylelint-scss: 6.3.0(stylelint@16.5.0(typescript@5.4.5))
optionalDependencies:
postcss: 8.4.38
stylelint-config-recommended-vue@1.5.0(postcss-html@1.7.0)(stylelint@16.5.0):
stylelint-config-recommended-vue@1.5.0(postcss-html@1.7.0)(stylelint@16.5.0(typescript@5.4.5)):
dependencies:
postcss-html: 1.7.0
semver: 7.6.2
stylelint: 16.5.0(typescript@5.4.5)
stylelint-config-html: 1.1.0(postcss-html@1.7.0)(stylelint@16.5.0)
stylelint-config-recommended: 14.0.0(stylelint@16.5.0)
stylelint-config-html: 1.1.0(postcss-html@1.7.0)(stylelint@16.5.0(typescript@5.4.5))
stylelint-config-recommended: 14.0.0(stylelint@16.5.0(typescript@5.4.5))
stylelint-config-recommended@14.0.0(stylelint@16.5.0):
stylelint-config-recommended@14.0.0(stylelint@16.5.0(typescript@5.4.5)):
dependencies:
stylelint: 16.5.0(typescript@5.4.5)
stylelint-config-standard-scss@13.1.0(postcss@8.4.38)(stylelint@16.5.0):
stylelint-config-standard-scss@13.1.0(postcss@8.4.38)(stylelint@16.5.0(typescript@5.4.5)):
dependencies:
postcss: 8.4.38
stylelint: 16.5.0(typescript@5.4.5)
stylelint-config-recommended-scss: 14.0.0(postcss@8.4.38)(stylelint@16.5.0)
stylelint-config-standard: 36.0.0(stylelint@16.5.0)
stylelint-config-recommended-scss: 14.0.0(postcss@8.4.38)(stylelint@16.5.0(typescript@5.4.5))
stylelint-config-standard: 36.0.0(stylelint@16.5.0(typescript@5.4.5))
optionalDependencies:
postcss: 8.4.38
stylelint-config-standard@36.0.0(stylelint@16.5.0):
stylelint-config-standard@36.0.0(stylelint@16.5.0(typescript@5.4.5)):
dependencies:
stylelint: 16.5.0(typescript@5.4.5)
stylelint-config-recommended: 14.0.0(stylelint@16.5.0)
stylelint-config-recommended: 14.0.0(stylelint@16.5.0(typescript@5.4.5))
stylelint-order@6.0.4(stylelint@16.5.0):
stylelint-order@6.0.4(stylelint@16.5.0(typescript@5.4.5)):
dependencies:
postcss: 8.4.38
postcss-sorting: 8.0.2(postcss@8.4.38)
stylelint: 16.5.0(typescript@5.4.5)
stylelint-prettier@5.0.0(prettier@3.2.5)(stylelint@16.5.0):
stylelint-prettier@5.0.0(prettier@3.2.5)(stylelint@16.5.0(typescript@5.4.5)):
dependencies:
prettier: 3.2.5
prettier-linter-helpers: 1.0.0
stylelint: 16.5.0(typescript@5.4.5)
stylelint-scss@6.3.0(stylelint@16.5.0):
stylelint-scss@6.3.0(stylelint@16.5.0(typescript@5.4.5)):
dependencies:
known-css-properties: 0.30.0
postcss-media-query-parser: 0.2.3
@ -6975,7 +7010,7 @@ snapshots:
dependencies:
'@csstools/css-parser-algorithms': 2.6.3(@csstools/css-tokenizer@2.3.1)
'@csstools/css-tokenizer': 2.3.1
'@csstools/media-query-list-parser': 2.1.11(@csstools/css-parser-algorithms@2.6.3)(@csstools/css-tokenizer@2.3.1)
'@csstools/media-query-list-parser': 2.1.11(@csstools/css-parser-algorithms@2.6.3(@csstools/css-tokenizer@2.3.1))(@csstools/css-tokenizer@2.3.1)
'@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.0.16)
'@dual-bundle/import-meta-resolve': 4.1.0
balanced-match: 2.0.0
@ -7241,15 +7276,15 @@ snapshots:
uuid@8.3.2: {}
vite-plugin-cdn-import@1.0.1(rollup@4.17.2)(vite@5.2.11):
vite-plugin-cdn-import@1.0.1(rollup@4.17.2)(vite@5.2.11(@types/node@20.12.11)(sass@1.77.1)):
dependencies:
rollup-plugin-external-globals: 0.10.0(rollup@4.17.2)
vite-plugin-externals: 0.6.2(vite@5.2.11)
vite-plugin-externals: 0.6.2(vite@5.2.11(@types/node@20.12.11)(sass@1.77.1))
transitivePeerDependencies:
- rollup
- vite
vite-plugin-compression@0.5.1(vite@5.2.11):
vite-plugin-compression@0.5.1(vite@5.2.11(@types/node@20.12.11)(sass@1.77.1)):
dependencies:
chalk: 4.1.2
debug: 4.3.4
@ -7258,7 +7293,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
vite-plugin-externals@0.6.2(vite@5.2.11):
vite-plugin-externals@0.6.2(vite@5.2.11(@types/node@20.12.11)(sass@1.77.1)):
dependencies:
acorn: 8.11.3
es-module-lexer: 0.4.1
@ -7278,22 +7313,22 @@ snapshots:
vite-plugin-router-warn@1.0.0: {}
vite-svg-loader@5.1.0(vue@3.4.27):
vite-svg-loader@5.1.0(vue@3.4.27(typescript@5.4.5)):
dependencies:
svgo: 3.3.2
vue: 3.4.27(typescript@5.4.5)
vite@5.2.11(@types/node@20.12.11)(sass@1.77.1):
dependencies:
'@types/node': 20.12.11
esbuild: 0.20.2
postcss: 8.4.38
rollup: 4.17.2
sass: 1.77.1
optionalDependencies:
'@types/node': 20.12.11
fsevents: 2.3.3
sass: 1.77.1
vue-demi@0.14.7(vue@3.4.27):
vue-demi@0.14.7(vue@3.4.27(typescript@5.4.5)):
dependencies:
vue: 3.4.27(typescript@5.4.5)
@ -7310,7 +7345,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
vue-router@4.3.2(vue@3.4.27):
vue-router@4.3.2(vue@3.4.27(typescript@5.4.5)):
dependencies:
'@vue/devtools-api': 6.6.1
vue: 3.4.27(typescript@5.4.5)
@ -7320,7 +7355,7 @@ snapshots:
de-indent: 1.0.2
he: 1.2.0
vue-tippy@6.4.1(vue@3.4.27):
vue-tippy@6.4.1(vue@3.4.27(typescript@5.4.5)):
dependencies:
tippy.js: 6.3.7
vue: 3.4.27(typescript@5.4.5)
@ -7332,9 +7367,10 @@ snapshots:
semver: 7.6.2
typescript: 5.4.5
vue-types@5.1.2(vue@3.4.27):
vue-types@5.1.2(vue@3.4.27(typescript@5.4.5)):
dependencies:
is-plain-object: 5.0.0
optionalDependencies:
vue: 3.4.27(typescript@5.4.5)
vue@3.4.27(typescript@5.4.5):
@ -7342,8 +7378,9 @@ snapshots:
'@vue/compiler-dom': 3.4.27
'@vue/compiler-sfc': 3.4.27
'@vue/runtime-dom': 3.4.27
'@vue/server-renderer': 3.4.27(vue@3.4.27)
'@vue/server-renderer': 3.4.27(vue@3.4.27(typescript@5.4.5))
'@vue/shared': 3.4.27
optionalDependencies:
typescript: 5.4.5
webpack-sources@3.2.3:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

@ -0,0 +1,10 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_155_260)">
<path d="M13.7163 7.14805H12.502V3.14805C12.502 1.88555 11.4788 0.862335 10.2163 0.862335H5.78774C4.52524 0.862335 3.50202 1.88555 3.50202 3.14805V7.14805H2.28774C1.97167 7.14805 1.71631 7.40341 1.71631 7.71948V14.5766C1.71631 14.8927 1.97167 15.1481 2.28774 15.1481H13.7163C14.0324 15.1481 14.2877 14.8927 14.2877 14.5766V7.71948C14.2877 7.40341 14.0324 7.14805 13.7163 7.14805ZM4.78774 3.14805C4.78774 2.59626 5.23595 2.14805 5.78774 2.14805H10.2163C10.7681 2.14805 11.2163 2.59626 11.2163 3.14805V7.14805H4.78774V3.14805ZM13.002 13.8623H3.00202V8.43376H13.002V13.8623ZM7.50202 11.3802V12.3266C7.50202 12.4052 7.56631 12.4695 7.64488 12.4695H8.35917C8.43774 12.4695 8.50202 12.4052 8.50202 12.3266V11.3802C8.64943 11.2744 8.75945 11.1245 8.81626 10.9521C8.87306 10.7798 8.87372 10.5939 8.81813 10.4211C8.76254 10.2484 8.65358 10.0978 8.50692 9.9909C8.36027 9.88403 8.18349 9.82645 8.00202 9.82645C7.82056 9.82645 7.64378 9.88403 7.49713 9.9909C7.35047 10.0978 7.24151 10.2484 7.18592 10.4211C7.13033 10.5939 7.13099 10.7798 7.18779 10.9521C7.2446 11.1245 7.35462 11.2744 7.50202 11.3802Z" fill="#CCCCCC"/>
</g>
<defs>
<clipPath id="clip0_155_260">
<rect width="16" height="16" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.1889 12.4937C13.8521 11.6958 13.3632 10.9711 12.7497 10.3598C12.1379 9.74679 11.4133 9.25803 10.6157 8.92053C10.6086 8.91695 10.6014 8.91517 10.5943 8.9116C11.7068 8.10803 12.43 6.7991 12.43 5.32231C12.43 2.87588 10.4479 0.893738 8.00144 0.893738C5.55501 0.893738 3.57287 2.87588 3.57287 5.32231C3.57287 6.7991 4.29608 8.10803 5.40858 8.91338C5.40144 8.91695 5.3943 8.91874 5.38715 8.92231C4.58715 9.25981 3.8693 9.74374 3.25323 10.3616C2.64021 10.9733 2.15145 11.698 1.81394 12.4955C1.48237 13.2763 1.30355 14.1135 1.28715 14.9616C1.28668 14.9807 1.29002 14.9996 1.29699 15.0174C1.30395 15.0351 1.3144 15.0513 1.32771 15.0649C1.34103 15.0786 1.35694 15.0894 1.3745 15.0968C1.39207 15.1042 1.41095 15.108 1.43001 15.108H2.50144C2.58001 15.108 2.64251 15.0455 2.6443 14.9687C2.68001 13.5902 3.23358 12.2991 4.21215 11.3205C5.22465 10.308 6.5693 9.75088 8.00144 9.75088C9.43358 9.75088 10.7782 10.308 11.7907 11.3205C12.7693 12.2991 13.3229 13.5902 13.3586 14.9687C13.3604 15.0473 13.4229 15.108 13.5014 15.108H14.5729C14.5919 15.108 14.6108 15.1042 14.6284 15.0968C14.6459 15.0894 14.6619 15.0786 14.6752 15.0649C14.6885 15.0513 14.6989 15.0351 14.7059 15.0174C14.7129 14.9996 14.7162 14.9807 14.7157 14.9616C14.6979 14.108 14.5211 13.2777 14.1889 12.4937ZM8.00144 8.39374C7.1818 8.39374 6.41037 8.0741 5.83001 7.49374C5.24965 6.91338 4.93001 6.14195 4.93001 5.32231C4.93001 4.50267 5.24965 3.73124 5.83001 3.15088C6.41037 2.57052 7.1818 2.25088 8.00144 2.25088C8.82108 2.25088 9.59251 2.57052 10.1729 3.15088C10.7532 3.73124 11.0729 4.50267 11.0729 5.32231C11.0729 6.14195 10.7532 6.91338 10.1729 7.49374C9.59251 8.0741 8.82108 8.39374 8.00144 8.39374Z" fill="#CCCCCC"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 468 B

@ -0,0 +1,5 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M17.5 9C18.0523 9 18.5 9.44772 18.5 10V17.5C18.5 18.0523 18.0523 18.5 17.5 18.5H2.5C1.94772 18.5 1.5 18.0523 1.5 17.5V10.0035C1.5 9.45117 1.94772 9.00346 2.5 9.00346C3.05228 9.00346 3.5 9.45117 3.5 10.0035V16.5H16.5V10C16.5 9.44772 16.9477 9 17.5 9Z" fill="#5070F2"/>
<path d="M5.54289 8.87623C5.93342 8.4857 6.56658 8.4857 6.95711 8.87623L10 11.9191L13.0429 8.87623C13.4334 8.4857 14.0666 8.4857 14.4571 8.87623C14.8476 9.26675 14.8476 9.89992 14.4571 10.2904L10.7071 14.0404C10.3166 14.431 9.68342 14.431 9.29289 14.0404L5.54289 10.2904C5.15237 9.89992 5.15237 9.26675 5.54289 8.87623Z" fill="#5070F2"/>
<path d="M9.99654 1.5C10.5488 1.5 10.9965 1.94772 10.9965 2.5V13.3333C10.9965 13.8856 10.5488 14.3333 9.99654 14.3333C9.44426 14.3333 8.99654 13.8856 8.99654 13.3333V2.5C8.99654 1.94772 9.44426 1.5 9.99654 1.5Z" fill="#5070F2"/>
</svg>

After

Width:  |  Height:  |  Size: 947 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 B

@ -0,0 +1,9 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M18.5 2.5C18.5 1.94772 18.0523 1.5 17.5 1.5H12.5C11.9477 1.5 11.5 1.94772 11.5 2.5C11.5 3.05228 11.9477 3.5 12.5 3.5H15.0855L11.3759 7.20956C10.9854 7.60008 10.9854 8.23325 11.3759 8.62377C11.7664 9.0143 12.3996 9.0143 12.7901 8.62377L16.5 4.91389V7.5C16.5 8.05228 16.9477 8.5 17.5 8.5C18.0523 8.5 18.5 8.05228 18.5 7.5V2.5Z" fill="#5070F2"/>
<path d="M2.5 1.5C1.94772 1.5 1.5 1.94772 1.5 2.5V7.5C1.5 8.05228 1.94772 8.5 2.5 8.5C3.05228 8.5 3.5 8.05228 3.5 7.5V3.5H7.5C8.05228 3.5 8.5 3.05228 8.5 2.5C8.5 1.94772 8.05228 1.5 7.5 1.5H2.5Z" fill="#5070F2"/>
<path d="M17.5 11.5C18.0523 11.5 18.5 11.9477 18.5 12.5V17.5C18.5 18.0523 18.0523 18.5 17.5 18.5H12.5C11.9477 18.5 11.5 18.0523 11.5 17.5C11.5 16.9477 11.9477 16.5 12.5 16.5H16.5V12.5C16.5 11.9477 16.9477 11.5 17.5 11.5Z" fill="#5070F2"/>
<path d="M3.5 12.5C3.5 11.9477 3.05228 11.5 2.5 11.5C1.94772 11.5 1.5 11.9477 1.5 12.5V17.5C1.5 17.6345 1.52656 17.7628 1.57472 17.88C1.62353 17.999 1.69625 18.1105 1.79289 18.2071C1.89182 18.306 2.00632 18.3799 2.1285 18.4287C2.22825 18.4687 2.33594 18.493 2.44854 18.4987C2.46558 18.4996 2.48274 18.5 2.5 18.5" fill="#5070F2"/>
<path d="M3.5 12.5V15.0858Z" fill="#5070F2"/>
<path d="M4.91422 16.5L8.62377 12.7905C9.0143 12.3999 9.0143 11.7668 8.62377 11.3762C8.23325 10.9857 7.60008 10.9857 7.20956 11.3762L3.5 15.0858" fill="#5070F2"/>
<path d="M2.50449 18.5H7.5C8.05228 18.5 8.5 18.0523 8.5 17.5C8.5 16.9477 8.05228 16.5 7.5 16.5H4.91422" fill="#5070F2"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

@ -1,6 +1,14 @@
import type { App } from "vue";
import * as echarts from "echarts/core";
import { PieChart, BarChart, LineChart, CustomChart } from "echarts/charts";
import {
PieChart,
BarChart,
LineChart,
CustomChart,
GraphChart,
ScatterChart,
BoxplotChart
} from "echarts/charts";
import { CanvasRenderer, SVGRenderer } from "echarts/renderers";
import {
GridComponent,
@ -31,7 +39,10 @@ use([
TooltipComponent,
DataZoomComponent,
VisualMapComponent,
CustomChart
CustomChart,
GraphChart,
ScatterChart,
BoxplotChart
]);
/**

@ -30,7 +30,7 @@
background-size: 100% 100%;
.login-logo-title {
margin-top: 195px;
margin-bottom: 35px;
margin-bottom: 32px;
width: 748px;
div {
margin-bottom: 16px;

@ -15,8 +15,10 @@ import { useDataThemeChange } from "@/layout/hooks/useDataThemeChange";
import dayIcon from "@/assets/svg/day.svg?component";
import darkIcon from "@/assets/svg/dark.svg?component";
import Lock from "@iconify-icons/ri/lock-fill";
import User from "@iconify-icons/ri/user-3-fill";
import accountUser from "@/assets/home/account_user.svg?component";
import accountPassword from "@/assets/home/account_password.svg?component";
// import Lock from "@iconify-icons/ri/lock-fill";
// import User from "@iconify-icons/ri/user-3-fill";
// import { isDark } from "~/composables/dark";
defineOptions({
@ -134,7 +136,7 @@ onBeforeUnmount(() => {
clearable
class="h-12"
placeholder="账号"
:prefix-icon="useRenderIcon(User)"
:prefix-icon="useRenderIcon(accountUser)"
/>
</el-form-item>
</Motion>
@ -147,7 +149,7 @@ onBeforeUnmount(() => {
show-password
class="h-12"
placeholder="密码"
:prefix-icon="useRenderIcon(Lock)"
:prefix-icon="useRenderIcon(accountPassword)"
/>
</el-form-item>
</Motion>

@ -1,7 +1,9 @@
<script setup lang="ts">
import { useECharts } from "@pureadmin/utils";
import { useECharts, delay } from "@pureadmin/utils";
import { type PropType, ref, computed, watch, nextTick } from "vue";
import * as echarts from "echarts/core";
import fullScreen from "../../../assets/home/fullScreen.png";
import downLoad from "../../../assets/home/download.png";
const props = defineProps({
requireData: {
@ -15,7 +17,7 @@ const props = defineProps({
});
const accountChartBar = ref();
const { setOptions } = useECharts(accountChartBar);
const { setOptions, getDataURL } = useECharts(accountChartBar);
// random
const random = (min: number, max: number): number => {
@ -208,290 +210,524 @@ for (let index = 0; index < 2; index++) {
}
const yData1 = [100, 70, 20, 90, 50, 180];
const yData2 = [10, 50, 20, 30, 50, 100];
watch(
() => props,
async () => {
await nextTick(); // DOM
setOptions({
// container: ".bar-card",
// backgroundColor: "rgba(154,174,255,0.1)",
tooltip: {
// show: false
trigger: "axis",
textStyle: {
fontSize: 20 //
const fullScreenVisible = ref(false);
const fullScreenChart = ref();
const fullImg = ref();
const options = ref<any>({
// container: ".bar-card",
// backgroundColor: "rgba(154,174,255,0.1)",
tooltip: {
// show: false
trigger: "axis",
textStyle: {
fontSize: 20 //
},
axisPointer: {
type: "shadow"
}
},
toolbox: {
top: 10,
right: 15,
iconSize: [40, 40],
feature: {
// dataZoom: { yAxisIndex: "none" }, //
// restore: { show: true }, //
myFull: {
//
show: true,
title: "",
iconStyle: {
color: "#5070F2",
borderColor: "#5070F2",
borderWidth: "1"
},
axisPointer: {
type: "shadow"
pixelRatio: 3,
icon: "image://" + fullScreen,
onclick: e => {
fullScreenVisible.value = true;
fullImg.value = getDataURL(accountChartBar.value);
console.log(getDataURL(accountChartBar.value));
// if (fullScreenVisible.value) {
// // echarts
// nextTick(() => {
// console.log(document.querySelector("#fullScreenChart"));
// // delay(600).then(() => {
// fullScreenChart.value = echarts.init(
// document.querySelector("#fullScreenChart")
// );
// console.log(fullScreenChart.value);
// fullScreenChart.value.setOption(fullOptions.value);
// });
// }
//
// if (accountChartBar.value.requestFullScreen) {
// // HTML W3C
// accountChartBar.value.requestFullScreen();
// } else if (accountChartBar.value.msRequestFullscreen) {
// // IE11
// accountChartBar.value.msRequestFullScreen();
// } else if (accountChartBar.value.webkitRequestFullScreen) {
// // Webkit
// accountChartBar.value.webkitRequestFullScreen();
// } else if (accountChartBar.value.mozRequestFullScreen) {
// // Firefox
// accountChartBar.value.mozRequestFullScreen();
// }
// // 退
// if (accountChartBar.value.requestFullScreen) {
// document.exitFullscreen();
// } else if (accountChartBar.value.msRequestFullScreen) {
// document.exitFullscreen();
// } else if (accountChartBar.value.webkitRequestFullScreen) {
// document.webkitCancelFullScreen();
// } else if (accountChartBar.value.mozRequestFullScreen) {
// document.mozCancelFullScreen();
// }
}
},
toolbox: {
right: 15,
feature: {
// dataZoom: { yAxisIndex: "none" }, //
// restore: { show: true }, //
myFull: {
//
show: false,
title: "全屏",
icon: "path://M432.45,595.444c0,2.177-4.661,6.82-11.305,6.82c-6.475,0-11.306-4.567-11.306-6.82s4.852-6.812,11.306-6.812C427.841,588.632,432.452,593.191,432.45,595.444L432.45,595.444z M421.155,589.876c-3.009,0-5.448,2.495-5.448,5.572s2.439,5.572,5.448,5.572c3.01,0,5.449-2.495,5.449-5.572C426.604,592.371,424.165,589.876,421.155,589.876L421.155,589.876z M421.146,591.891c-1.916,0-3.47,1.589-3.47,3.549c0,1.959,1.554,3.548,3.47,3.548s3.469-1.589,3.469-3.548C424.614,593.479,423.062,591.891,421.146,591.891L421.146,591.891zM421.146,591.891",
onclick: e => {
//
if (accountChartBar.value.requestFullScreen) {
// HTML W3C
accountChartBar.value.requestFullScreen();
} else if (accountChartBar.value.msRequestFullscreen) {
// IE11
accountChartBar.value.msRequestFullScreen();
} else if (accountChartBar.value.webkitRequestFullScreen) {
// Webkit
accountChartBar.value.webkitRequestFullScreen();
} else if (accountChartBar.value.mozRequestFullScreen) {
// Firefox
accountChartBar.value.mozRequestFullScreen();
}
// 退
if (accountChartBar.value.requestFullScreen) {
document.exitFullscreen();
} else if (accountChartBar.value.msRequestFullScreen) {
document.exitFullscreen();
} else if (accountChartBar.value.webkitRequestFullScreen) {
document.webkitCancelFullScreen();
} else if (accountChartBar.value.mozRequestFullScreen) {
document.mozCancelFullScreen();
}
}
saveAsImage: {
show: true,
title: "",
icon: "image://" + downLoad
} //
}
},
color: ["#5070F2", "#FFAC06", "#00B58C", "#082FF8"],
legend: {
show: true,
// right: 30,
bottom: 6,
itemGap: 30,
itemWidth: 12,
itemHeight: 8,
data: ["出账金额", "进账金额", "出账笔数", "进账笔数"],
textStyle: {
fontSize: 12,
color: "#666"
}
},
grid: {
top: 60,
left: 20,
right: 20,
bottom: 40,
containLabel: true
},
xAxis: [
{
type: "category",
axisLine: {
show: true,
lineStyle: {
color: "rgba(80,112,242,1)"
}
},
boundaryGap: true,
axisTick: {
show: false
},
splitArea: {
show: false
},
axisLabel: {
inside: false,
interval: 0,
rotate: 0,
// textStyle: {
color: "#8C8C8C",
fontWeight: 400,
fontSize: 12,
// },
margin: 15
},
data: xAxisData
}
],
yAxis: [
{
type: "value",
name: `{a|} {b|出入账趋势}`,
nameTextStyle: {
color: "#333",
// align: "center",
padding: [15, 0, 0, 20],
// fontSize: 16,
// fontWeight: "bold",
verticalAlign: "middle",
rich: {
a: {
backgroundColor: "#5070F2",
width: 2,
height: 17,
verticalAlign: "middle"
},
saveAsImage: {
show: false,
title: "保存"
} //
b: {
padding: [2, 0, 0, 0],
fontSize: 16,
fontWeight: "bold"
}
}
},
color: ["#5070F2", "#FFAC06", "#00B58C", "#082FF8"],
legend: {
nameGap: 40,
axisTick: {
show: false
},
axisLine: {
show: false,
lineStyle: {
color: "#333"
}
},
splitLine: {
show: true,
// right: 30,
bottom: 6,
itemGap: 30,
itemWidth: 12,
itemHeight: 8,
data: ["出账金额", "进账金额", "出账笔数", "进账笔数"],
textStyle: {
fontSize: 12,
color: "#666"
lineStyle: {
type: "dashed",
color: "rgba(80,112,242,0.3)"
}
},
grid: {
top: 60,
left: 20,
right: 20,
bottom: 40,
containLabel: true
},
xAxis: [
{
type: "category",
axisLine: {
show: true,
lineStyle: {
color: "rgba(80,112,242,1)"
}
},
boundaryGap: true,
axisTick: {
show: false
},
splitArea: {
show: false
},
axisLabel: {
inside: false,
interval: 0,
rotate: 0,
// textStyle: {
color: "#8C8C8C",
fontWeight: 400,
fontSize: 12,
// },
margin: 15
},
data: xAxisData
axisLabel: {
// textStyle: {
color: "#8C8C8C",
fontWeight: 400,
fontSize: 12,
// },
formatter: "{value}",
margin: 15
}
},
{
type: "value",
// name: "%",
nameGap: 30,
position: "right",
nameTextStyle: {
color: "#ffffff",
fontWeight: 400,
fontSize: 16
},
axisLine: {
show: true,
lineStyle: {
width: 1,
color: "rgba(239, 247, 253, .1)"
}
],
yAxis: [
{
type: "value",
name: `{a|} {b|出入账趋势}`,
nameTextStyle: {
color: "#333",
// align: "center",
padding: [15, 0, 0, 20],
// fontSize: 16,
// fontWeight: "bold",
verticalAlign: "middle",
rich: {
a: {
backgroundColor: "#5070F2",
width: 2,
height: 17,
verticalAlign: "middle"
},
b: {
padding: [2, 0, 0, 0],
fontSize: 16,
fontWeight: "bold"
}
}
},
nameGap: 40,
axisTick: {
show: false
},
axisLine: {
show: false,
lineStyle: {
color: "#333"
}
},
splitLine: {
show: true,
lineStyle: {
type: "dashed",
color: "rgba(80,112,242,0.3)"
}
},
splitLine: {
show: true,
lineStyle: {
color: "rgba(239, 247, 253, .1)"
}
},
axisTick: {
show: false
},
axisLabel: {
fontSize: 12,
color: "#8C8C8C"
},
min: 0,
max: Math.ceil(Math.max.apply(null, yData1) / 5) * 5,
interval: Math.ceil(Math.max.apply(null, yData1) / 4)
}
],
series: [
...seriesData,
{
type: "bar",
name: "出账金额",
itemStyle: {
color: "transparent"
},
tooltip: {
show: false
},
data: seriesArr[0]
},
{
type: "bar",
itemStyle: {
color: "transparent"
},
tooltip: {
show: false
},
data: seriesArr[1]
},
{
name: "出账笔数",
type: "line",
showSymbol: true,
// smooth: true,
symbol: "circle",
symbolSize: 8,
yAxisIndex: 1,
itemStyle: {
color: "#00B58C"
},
lineStyle: {
width: 2
},
// areaStyle: {
// normal: {
// color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
// {
// offset: 0,
// color: "rgba(67, 239, 255, .3)"
// },
// {
// offset: 1,
// color: "rgba(1, 17, 49, .3)"
// }
// ])
// }
// },
data: yData1
},
{
name: "进账笔数",
type: "line",
showSymbol: true,
// smooth: true,
symbol: "circle",
symbolSize: 8,
yAxisIndex: 1,
itemStyle: {
color: "#082FF8"
},
lineStyle: {
width: 2
},
// areaStyle: {
// normal: {
// color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
// {
// offset: 0,
// color: "rgba(67, 239, 255, .3)"
// },
// {
// offset: 1,
// color: "rgba(1, 17, 49, .3)"
// }
// ])
// }
// },
data: yData2
}
]
});
const fullOptions = ref<any>({
tooltip: {
// show: false
trigger: "axis",
textStyle: {
fontSize: 20 //
},
axisPointer: {
type: "shadow"
}
},
color: ["#5070F2", "#FFAC06", "#00B58C", "#082FF8"],
legend: {
show: true,
// right: 30,
bottom: 40,
itemGap: 30,
itemWidth: 12,
itemHeight: 8,
data: ["出账金额", "进账金额", "出账笔数", "进账笔数"],
textStyle: {
fontSize: 12,
color: "#666"
}
},
grid: {
top: 60,
left: 20,
right: 20,
bottom: 80,
containLabel: true
},
xAxis: [
{
type: "category",
axisLine: {
show: true,
lineStyle: {
color: "rgba(80,112,242,1)"
}
},
boundaryGap: true,
axisTick: {
show: false
},
splitArea: {
show: false
},
axisLabel: {
inside: false,
interval: 0,
rotate: 0,
// textStyle: {
color: "#8C8C8C",
fontWeight: 400,
fontSize: 12,
// },
margin: 15
},
data: xAxisData
}
],
yAxis: [
{
type: "value",
name: `{a|} {b|出入账趋势}`,
nameTextStyle: {
color: "#333",
// align: "center",
padding: [15, 0, 0, 20],
// fontSize: 16,
// fontWeight: "bold",
verticalAlign: "middle",
rich: {
a: {
backgroundColor: "#5070F2",
width: 2,
height: 17,
verticalAlign: "middle"
},
axisLabel: {
// textStyle: {
color: "#8C8C8C",
fontWeight: 400,
fontSize: 12,
// },
formatter: "{value}",
margin: 15
b: {
padding: [2, 0, 0, 0],
fontSize: 16,
fontWeight: "bold"
}
},
{
type: "value",
// name: "%",
nameGap: 30,
position: "right",
nameTextStyle: {
color: "#ffffff",
fontWeight: 400,
fontSize: 16
},
axisLine: {
show: true,
lineStyle: {
width: 1,
color: "rgba(239, 247, 253, .1)"
}
},
splitLine: {
show: true,
lineStyle: {
color: "rgba(239, 247, 253, .1)"
}
},
axisTick: {
show: false
},
axisLabel: {
fontSize: 12,
color: "#8C8C8C"
},
min: 0,
max: Math.ceil(Math.max.apply(null, yData1) / 5) * 5,
interval: Math.ceil(Math.max.apply(null, yData1) / 4)
}
],
series: [
...seriesData,
{
type: "bar",
name: "出账金额",
itemStyle: {
color: "transparent"
},
tooltip: {
show: false
},
data: seriesArr[0]
},
{
type: "bar",
itemStyle: {
color: "transparent"
},
tooltip: {
show: false
},
data: seriesArr[1]
},
{
name: "出账笔数",
type: "line",
showSymbol: true,
// smooth: true,
symbol: "circle",
symbolSize: 8,
yAxisIndex: 1,
itemStyle: {
color: "#00B58C"
},
lineStyle: {
width: 2
},
// areaStyle: {
// normal: {
// color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
// {
// offset: 0,
// color: "rgba(67, 239, 255, .3)"
// },
// {
// offset: 1,
// color: "rgba(1, 17, 49, .3)"
// }
// ])
// }
// },
data: yData1
},
{
name: "进账笔数",
type: "line",
showSymbol: true,
// smooth: true,
symbol: "circle",
symbolSize: 8,
yAxisIndex: 1,
itemStyle: {
color: "#082FF8"
},
lineStyle: {
width: 2
},
// areaStyle: {
// normal: {
// color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
// {
// offset: 0,
// color: "rgba(67, 239, 255, .3)"
// },
// {
// offset: 1,
// color: "rgba(1, 17, 49, .3)"
// }
// ])
// }
// },
data: yData2
},
nameGap: 40,
axisTick: {
show: false
},
axisLine: {
show: false,
lineStyle: {
color: "#333"
}
},
splitLine: {
show: true,
lineStyle: {
type: "dashed",
color: "rgba(80,112,242,0.3)"
}
},
axisLabel: {
// textStyle: {
color: "#8C8C8C",
fontWeight: 400,
fontSize: 12,
// },
formatter: "{value}",
margin: 15
}
},
{
type: "value",
// name: "%",
nameGap: 30,
position: "right",
nameTextStyle: {
color: "#ffffff",
fontWeight: 400,
fontSize: 16
},
axisLine: {
show: true,
lineStyle: {
width: 1,
color: "rgba(239, 247, 253, .1)"
}
},
splitLine: {
show: true,
lineStyle: {
color: "rgba(239, 247, 253, .1)"
}
]
});
},
axisTick: {
show: false
},
axisLabel: {
fontSize: 12,
color: "#8C8C8C"
},
min: 0,
max: Math.ceil(Math.max.apply(null, yData1) / 5) * 5,
interval: Math.ceil(Math.max.apply(null, yData1) / 4)
}
],
series: [
...seriesData,
{
type: "bar",
name: "出账金额",
itemStyle: {
color: "transparent"
},
tooltip: {
show: false
},
data: seriesArr[0]
},
{
type: "bar",
itemStyle: {
color: "transparent"
},
tooltip: {
show: false
},
data: seriesArr[1]
},
{
name: "出账笔数",
type: "line",
showSymbol: true,
// smooth: true,
symbol: "circle",
symbolSize: 8,
yAxisIndex: 1,
itemStyle: {
color: "#00B58C"
},
lineStyle: {
width: 2
},
data: yData1
},
{
name: "进账笔数",
type: "line",
showSymbol: true,
// smooth: true,
symbol: "circle",
symbolSize: 8,
yAxisIndex: 1,
itemStyle: {
color: "#082FF8"
},
lineStyle: {
width: 2
},
data: yData2
}
]
});
watch(
() => props,
async () => {
await nextTick(); // DOM
setOptions(options.value);
},
{
deep: true,
@ -502,4 +738,12 @@ watch(
<template>
<div ref="accountChartBar" style="width: 100%; height: 100%" />
<el-dialog v-model="fullScreenVisible" style="width: 90%; height: 80%">
<el-image style="width: 100%; height: 100%" :src="fullImg" />
<!-- <div
id="fullScreenChart"
ref="fullScreenChart"
style="width: 100%; height: 1080px"
></div> -->
</el-dialog>
</template>

@ -0,0 +1,511 @@
<script setup lang="ts">
import { useECharts } from "@pureadmin/utils";
import { type PropType, ref, computed, watch, nextTick } from "vue";
import * as echarts from "echarts/core";
const props = defineProps({
requireData: {
type: Array as PropType<Array<number>>,
default: () => []
},
questionData: {
type: Array as PropType<Array<number>>,
default: () => []
}
});
const accountChartBarDate = ref();
const { setOptions } = useECharts(accountChartBarDate);
// random
const random = (min: number, max: number): number => {
return Math.floor(Math.random() * (max - min)) + min;
};
//
const registerShapeFun = () => {
const offsetX = 10;
const offsetY = 5;
//
const CubeLeft = echarts.graphic.extendShape({
shape: {
x: 0,
y: 0
},
buildPath: (
ctx: CanvasRenderingContext2D,
shape: { xAxisPoint: number[]; x: number; y: number }
) => {
const xAxisPoint = shape.xAxisPoint;
const c0 = [shape.x, shape.y];
const c1 = [shape.x - offsetX, shape.y - offsetY];
const c2 = [xAxisPoint[0] - offsetX, xAxisPoint[1] - offsetY];
const c3 = [xAxisPoint[0], xAxisPoint[1]];
ctx.moveTo(c0[0], c0[1]);
ctx.lineTo(c1[0], c1[1]);
ctx.lineTo(c2[0], c2[1]);
ctx.lineTo(c3[0], c3[1]);
ctx.closePath();
}
});
//
const CubeRight = echarts.graphic.extendShape({
shape: {
x: 0,
y: 0
},
buildPath: (
ctx: CanvasRenderingContext2D,
shape: { xAxisPoint: number[]; x: number; y: number }
) => {
const xAxisPoint = shape.xAxisPoint;
const c1 = [shape.x, shape.y];
const c2 = [xAxisPoint[0], xAxisPoint[1]];
const c3 = [xAxisPoint[0] + offsetX, xAxisPoint[1] - offsetY];
const c4 = [shape.x + offsetX, shape.y - offsetY];
ctx.moveTo(c1[0], c1[1]);
ctx.lineTo(c2[0], c2[1]);
ctx.lineTo(c3[0], c3[1]);
ctx.lineTo(c4[0], c4[1]);
ctx.closePath();
}
});
//
const CubeTop = echarts.graphic.extendShape({
shape: {
x: 0,
y: 0
},
buildPath: (
ctx: CanvasRenderingContext2D,
shape: { x: number; y: number }
) => {
const c1 = [shape.x, shape.y];
const c2 = [shape.x + offsetX, shape.y - offsetY];
const c3 = [shape.x, shape.y - offsetX];
const c4 = [shape.x - offsetX, shape.y - offsetY];
ctx.moveTo(c1[0], c1[1]);
ctx.lineTo(c2[0], c2[1]);
ctx.lineTo(c3[0], c3[1]);
ctx.lineTo(c4[0], c4[1]);
ctx.closePath();
}
});
return [CubeLeft, CubeRight, CubeTop];
};
//
const [CubeLeft, CubeRight, CubeTop] = registerShapeFun();
//
echarts.graphic.registerShape("CubeLeft", CubeLeft);
echarts.graphic.registerShape("CubeRight", CubeRight);
echarts.graphic.registerShape("CubeTop", CubeTop);
//
const colorArr = [
["#F84A13", "#FFB240", "#F84A13"],
["#2832F3", "#757AFF", "#2832F3"]
];
const seriesArr: number[][] = [];
const xAxisData: string[] = [];
const seriesData: any[] = [];
//
for (let d = 0; d < 20; d++) {
xAxisData.push(d + 1 + "日");
}
for (let i = 0; i < 2; i++) {
seriesArr[i] = [];
for (let x = 0; x < 20; x++) {
seriesArr[i].push(random(10, 80));
}
}
for (let index = 0; index < 2; index++) {
seriesData.push({
type: "custom",
name: index === 0 ? "出账金额" : "进账金额",
renderItem: (params: any, api: any) => {
const location = api.coord([api.value(0), api.value(1)]);
return {
type: "group",
x: index === 1 ? 18 : -12,
label: {
show: true
},
children: [
{
type: "CubeLeft",
shape: {
api,
xValue: api.value(0),
yValue: api.value(1),
x: location[0],
y: location[1],
xAxisPoint: api.coord([api.value(0), 0])
},
style: {
fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: colorArr[index][0]
},
{
offset: 1,
color: colorArr[index][1]
}
])
}
},
{
type: "CubeRight",
shape: {
api,
xValue: api.value(0),
yValue: api.value(1),
x: location[0],
y: location[1],
xAxisPoint: api.coord([api.value(0), 0])
},
style: {
fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: colorArr[index][0]
},
{
offset: 1,
color: colorArr[index][1]
}
])
}
},
{
type: "CubeTop",
shape: {
api,
xValue: api.value(0),
yValue: api.value(1),
x: location[0],
y: location[1],
xAxisPoint: api.coord([api.value(0), 0])
},
style: {
fill: colorArr[index][2]
}
}
]
};
},
data: seriesArr[index]
});
}
const yData1 = [
100, 70, 20, 90, 50, 180, 10, 50, 20, 30, 50, 100, 20, 30, 50, 100, 100, 70,
20, 90
];
const yData2 = [
10, 50, 20, 30, 50, 100, 100, 70, 20, 90, 50, 180, 20, 90, 50, 180, 10, 50,
20, 30
];
watch(
() => props,
async () => {
await nextTick(); // DOM
setOptions({
// container: ".bar-card",
// backgroundColor: "rgba(154,174,255,0.1)",
tooltip: {
// show: false
trigger: "axis",
textStyle: {
fontSize: 20 //
},
axisPointer: {
type: "shadow"
}
},
toolbox: {
right: 15,
feature: {
// dataZoom: { yAxisIndex: "none" }, //
// restore: { show: true }, //
myFull: {
//
show: false,
title: "全屏",
icon: "path://M432.45,595.444c0,2.177-4.661,6.82-11.305,6.82c-6.475,0-11.306-4.567-11.306-6.82s4.852-6.812,11.306-6.812C427.841,588.632,432.452,593.191,432.45,595.444L432.45,595.444z M421.155,589.876c-3.009,0-5.448,2.495-5.448,5.572s2.439,5.572,5.448,5.572c3.01,0,5.449-2.495,5.449-5.572C426.604,592.371,424.165,589.876,421.155,589.876L421.155,589.876z M421.146,591.891c-1.916,0-3.47,1.589-3.47,3.549c0,1.959,1.554,3.548,3.47,3.548s3.469-1.589,3.469-3.548C424.614,593.479,423.062,591.891,421.146,591.891L421.146,591.891zM421.146,591.891",
onclick: e => {
//
if (accountChartBarDate.value.requestFullScreen) {
// HTML W3C
accountChartBarDate.value.requestFullScreen();
} else if (accountChartBarDate.value.msRequestFullscreen) {
// IE11
accountChartBarDate.value.msRequestFullScreen();
} else if (accountChartBarDate.value.webkitRequestFullScreen) {
// Webkit
accountChartBarDate.value.webkitRequestFullScreen();
} else if (accountChartBarDate.value.mozRequestFullScreen) {
// Firefox
accountChartBarDate.value.mozRequestFullScreen();
}
// 退
if (accountChartBarDate.value.requestFullScreen) {
document.exitFullscreen();
} else if (accountChartBarDate.value.msRequestFullScreen) {
document.exitFullscreen();
} else if (accountChartBarDate.value.webkitRequestFullScreen) {
document.webkitCancelFullScreen();
} else if (accountChartBarDate.value.mozRequestFullScreen) {
document.mozCancelFullScreen();
}
}
},
saveAsImage: {
show: false,
title: "保存"
} //
}
},
color: ["#0BAF54", "#0240E0", "#00B58C", "#082FF8"],
legend: {
show: true,
// right: 30,
bottom: 6,
itemGap: 30,
itemWidth: 12,
itemHeight: 8,
data: ["出账金额", "进账金额", "出账笔数", "进账笔数"],
textStyle: {
fontSize: 12,
color: "#666"
}
},
grid: {
top: 60,
left: 20,
right: 20,
bottom: 40,
containLabel: true
},
xAxis: [
{
type: "category",
axisLine: {
show: true,
lineStyle: {
color: "rgba(80,112,242,1)"
}
},
boundaryGap: true,
axisTick: {
show: false
},
splitArea: {
show: false
},
axisLabel: {
inside: false,
interval: 0,
rotate: 0,
// textStyle: {
color: "#8C8C8C",
fontWeight: 400,
fontSize: 12,
// },
margin: 15
},
data: xAxisData
}
],
yAxis: [
{
type: "value",
name: `{a|} {b|交易时间特征(日)}`,
nameTextStyle: {
color: "#333",
// align: "center",
padding: [15, 0, 0, 70],
// fontSize: 16,
// fontWeight: "bold",
verticalAlign: "middle",
rich: {
a: {
backgroundColor: "#5070F2",
width: 2,
height: 17,
verticalAlign: "middle"
},
b: {
padding: [2, 0, 0, 0],
fontSize: 16,
fontWeight: "bold"
}
}
},
nameGap: 40,
axisTick: {
show: false
},
axisLine: {
show: false,
lineStyle: {
color: "#333"
}
},
splitLine: {
show: true,
lineStyle: {
type: "dashed",
color: "rgba(80,112,242,0.3)"
}
},
axisLabel: {
// textStyle: {
color: "#8C8C8C",
fontWeight: 400,
fontSize: 12,
// },
formatter: "{value}",
margin: 15
}
},
{
type: "value",
// name: "%",
nameGap: 30,
position: "right",
nameTextStyle: {
color: "#ffffff",
fontWeight: 400,
fontSize: 16
},
axisLine: {
show: true,
lineStyle: {
width: 1,
color: "rgba(239, 247, 253, .1)"
}
},
splitLine: {
show: true,
lineStyle: {
color: "rgba(239, 247, 253, .1)"
}
},
axisTick: {
show: false
},
axisLabel: {
fontSize: 12,
color: "#8C8C8C"
},
min: 0,
max: Math.ceil(Math.max.apply(null, yData1) / 5) * 5,
interval: Math.ceil(Math.max.apply(null, yData1) / 4)
}
],
series: [
...seriesData,
{
type: "bar",
name: "出账金额",
itemStyle: {
color: "transparent"
},
tooltip: {
show: false
},
data: seriesArr[0]
},
{
type: "bar",
itemStyle: {
color: "transparent"
},
tooltip: {
show: false
},
data: seriesArr[1]
},
{
name: "出账笔数",
type: "line",
showSymbol: true,
// smooth: true,
symbol: "circle",
symbolSize: 8,
yAxisIndex: 1,
itemStyle: {
color: "#03E54F"
},
lineStyle: {
width: 2
},
// areaStyle: {
// normal: {
// color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
// {
// offset: 0,
// color: "rgba(67, 239, 255, .3)"
// },
// {
// offset: 1,
// color: "rgba(1, 17, 49, .3)"
// }
// ])
// }
// },
data: yData1
},
{
name: "进账笔数",
type: "line",
showSymbol: true,
// smooth: true,
symbol: "circle",
symbolSize: 8,
yAxisIndex: 1,
itemStyle: {
color: "#AD00FF"
},
lineStyle: {
width: 2
},
// areaStyle: {
// normal: {
// color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
// {
// offset: 0,
// color: "rgba(67, 239, 255, .3)"
// },
// {
// offset: 1,
// color: "rgba(1, 17, 49, .3)"
// }
// ])
// }
// },
data: yData2
}
]
});
},
{
deep: true,
immediate: true
}
);
</script>
<template>
<div ref="accountChartBarDate" style="width: 100%; height: 100%" />
</template>

@ -0,0 +1,505 @@
<script setup lang="ts">
import { useECharts } from "@pureadmin/utils";
import { type PropType, ref, computed, watch, nextTick } from "vue";
import * as echarts from "echarts/core";
const props = defineProps({
requireData: {
type: Array as PropType<Array<number>>,
default: () => []
},
questionData: {
type: Array as PropType<Array<number>>,
default: () => []
}
});
const accountChartBarMonth = ref();
const { setOptions } = useECharts(accountChartBarMonth);
// random
const random = (min: number, max: number): number => {
return Math.floor(Math.random() * (max - min)) + min;
};
//
const registerShapeFun = () => {
const offsetX = 10;
const offsetY = 5;
//
const CubeLeft = echarts.graphic.extendShape({
shape: {
x: 0,
y: 0
},
buildPath: (
ctx: CanvasRenderingContext2D,
shape: { xAxisPoint: number[]; x: number; y: number }
) => {
const xAxisPoint = shape.xAxisPoint;
const c0 = [shape.x, shape.y];
const c1 = [shape.x - offsetX, shape.y - offsetY];
const c2 = [xAxisPoint[0] - offsetX, xAxisPoint[1] - offsetY];
const c3 = [xAxisPoint[0], xAxisPoint[1]];
ctx.moveTo(c0[0], c0[1]);
ctx.lineTo(c1[0], c1[1]);
ctx.lineTo(c2[0], c2[1]);
ctx.lineTo(c3[0], c3[1]);
ctx.closePath();
}
});
//
const CubeRight = echarts.graphic.extendShape({
shape: {
x: 0,
y: 0
},
buildPath: (
ctx: CanvasRenderingContext2D,
shape: { xAxisPoint: number[]; x: number; y: number }
) => {
const xAxisPoint = shape.xAxisPoint;
const c1 = [shape.x, shape.y];
const c2 = [xAxisPoint[0], xAxisPoint[1]];
const c3 = [xAxisPoint[0] + offsetX, xAxisPoint[1] - offsetY];
const c4 = [shape.x + offsetX, shape.y - offsetY];
ctx.moveTo(c1[0], c1[1]);
ctx.lineTo(c2[0], c2[1]);
ctx.lineTo(c3[0], c3[1]);
ctx.lineTo(c4[0], c4[1]);
ctx.closePath();
}
});
//
const CubeTop = echarts.graphic.extendShape({
shape: {
x: 0,
y: 0
},
buildPath: (
ctx: CanvasRenderingContext2D,
shape: { x: number; y: number }
) => {
const c1 = [shape.x, shape.y];
const c2 = [shape.x + offsetX, shape.y - offsetY];
const c3 = [shape.x, shape.y - offsetX];
const c4 = [shape.x - offsetX, shape.y - offsetY];
ctx.moveTo(c1[0], c1[1]);
ctx.lineTo(c2[0], c2[1]);
ctx.lineTo(c3[0], c3[1]);
ctx.lineTo(c4[0], c4[1]);
ctx.closePath();
}
});
return [CubeLeft, CubeRight, CubeTop];
};
//
const [CubeLeft, CubeRight, CubeTop] = registerShapeFun();
//
echarts.graphic.registerShape("CubeLeft", CubeLeft);
echarts.graphic.registerShape("CubeRight", CubeRight);
echarts.graphic.registerShape("CubeTop", CubeTop);
//
const colorArr = [
["#0BAF54", "#2AE87E", "#0BAF54"],
["#146FF7", "#0240E0", "#0240E0"]
];
const seriesArr: number[][] = [];
const xAxisData: string[] = [];
const seriesData: any[] = [];
//
for (let d = 0; d < 12; d++) {
xAxisData.push("2023年" + (d + 1) + "月");
}
for (let i = 0; i < 2; i++) {
seriesArr[i] = [];
for (let x = 0; x < 12; x++) {
seriesArr[i].push(random(10, 80));
}
}
for (let index = 0; index < 2; index++) {
seriesData.push({
type: "custom",
name: index === 0 ? "出账金额" : "进账金额",
renderItem: (params: any, api: any) => {
const location = api.coord([api.value(0), api.value(1)]);
return {
type: "group",
x: index === 1 ? 18 : -12,
label: {
show: true
},
children: [
{
type: "CubeLeft",
shape: {
api,
xValue: api.value(0),
yValue: api.value(1),
x: location[0],
y: location[1],
xAxisPoint: api.coord([api.value(0), 0])
},
style: {
fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: colorArr[index][0]
},
{
offset: 1,
color: colorArr[index][1]
}
])
}
},
{
type: "CubeRight",
shape: {
api,
xValue: api.value(0),
yValue: api.value(1),
x: location[0],
y: location[1],
xAxisPoint: api.coord([api.value(0), 0])
},
style: {
fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: colorArr[index][0]
},
{
offset: 1,
color: colorArr[index][1]
}
])
}
},
{
type: "CubeTop",
shape: {
api,
xValue: api.value(0),
yValue: api.value(1),
x: location[0],
y: location[1],
xAxisPoint: api.coord([api.value(0), 0])
},
style: {
fill: colorArr[index][2]
}
}
]
};
},
data: seriesArr[index]
});
}
const yData1 = [100, 70, 20, 90, 50, 180, 10, 50, 20, 30, 50, 100];
const yData2 = [10, 50, 20, 30, 50, 100, 100, 70, 20, 90, 50, 180];
watch(
() => props,
async () => {
await nextTick(); // DOM
setOptions({
// container: ".bar-card",
// backgroundColor: "rgba(154,174,255,0.1)",
tooltip: {
// show: false
trigger: "axis",
textStyle: {
fontSize: 20 //
},
axisPointer: {
type: "shadow"
}
},
toolbox: {
right: 15,
feature: {
// dataZoom: { yAxisIndex: "none" }, //
// restore: { show: true }, //
myFull: {
//
show: false,
title: "全屏",
icon: "path://M432.45,595.444c0,2.177-4.661,6.82-11.305,6.82c-6.475,0-11.306-4.567-11.306-6.82s4.852-6.812,11.306-6.812C427.841,588.632,432.452,593.191,432.45,595.444L432.45,595.444z M421.155,589.876c-3.009,0-5.448,2.495-5.448,5.572s2.439,5.572,5.448,5.572c3.01,0,5.449-2.495,5.449-5.572C426.604,592.371,424.165,589.876,421.155,589.876L421.155,589.876z M421.146,591.891c-1.916,0-3.47,1.589-3.47,3.549c0,1.959,1.554,3.548,3.47,3.548s3.469-1.589,3.469-3.548C424.614,593.479,423.062,591.891,421.146,591.891L421.146,591.891zM421.146,591.891",
onclick: e => {
//
if (accountChartBarMonth.value.requestFullScreen) {
// HTML W3C
accountChartBarMonth.value.requestFullScreen();
} else if (accountChartBarMonth.value.msRequestFullscreen) {
// IE11
accountChartBarMonth.value.msRequestFullScreen();
} else if (accountChartBarMonth.value.webkitRequestFullScreen) {
// Webkit
accountChartBarMonth.value.webkitRequestFullScreen();
} else if (accountChartBarMonth.value.mozRequestFullScreen) {
// Firefox
accountChartBarMonth.value.mozRequestFullScreen();
}
// 退
if (accountChartBarMonth.value.requestFullScreen) {
document.exitFullscreen();
} else if (accountChartBarMonth.value.msRequestFullScreen) {
document.exitFullscreen();
} else if (accountChartBarMonth.value.webkitRequestFullScreen) {
document.webkitCancelFullScreen();
} else if (accountChartBarMonth.value.mozRequestFullScreen) {
document.mozCancelFullScreen();
}
}
},
saveAsImage: {
show: false,
title: "保存"
} //
}
},
color: ["#0BAF54", "#0240E0", "#00B58C", "#082FF8"],
legend: {
show: true,
// right: 30,
bottom: 6,
itemGap: 30,
itemWidth: 12,
itemHeight: 8,
data: ["出账金额", "进账金额", "出账笔数", "进账笔数"],
textStyle: {
fontSize: 12,
color: "#666"
}
},
grid: {
top: 60,
left: 20,
right: 20,
bottom: 40,
containLabel: true
},
xAxis: [
{
type: "category",
axisLine: {
show: true,
lineStyle: {
color: "rgba(80,112,242,1)"
}
},
boundaryGap: true,
axisTick: {
show: false
},
splitArea: {
show: false
},
axisLabel: {
inside: false,
interval: 0,
rotate: 0,
// textStyle: {
color: "#8C8C8C",
fontWeight: 400,
fontSize: 12,
// },
margin: 15
},
data: xAxisData
}
],
yAxis: [
{
type: "value",
name: `{a|} {b|交易时间特征(月)}`,
nameTextStyle: {
color: "#333",
// align: "center",
padding: [15, 0, 0, 70],
// fontSize: 16,
// fontWeight: "bold",
verticalAlign: "middle",
rich: {
a: {
backgroundColor: "#5070F2",
width: 2,
height: 17,
verticalAlign: "middle"
},
b: {
padding: [2, 0, 0, 0],
fontSize: 16,
fontWeight: "bold"
}
}
},
nameGap: 40,
axisTick: {
show: false
},
axisLine: {
show: false,
lineStyle: {
color: "#333"
}
},
splitLine: {
show: true,
lineStyle: {
type: "dashed",
color: "rgba(80,112,242,0.3)"
}
},
axisLabel: {
// textStyle: {
color: "#8C8C8C",
fontWeight: 400,
fontSize: 12,
// },
formatter: "{value}",
margin: 15
}
},
{
type: "value",
// name: "%",
nameGap: 30,
position: "right",
nameTextStyle: {
color: "#ffffff",
fontWeight: 400,
fontSize: 16
},
axisLine: {
show: true,
lineStyle: {
width: 1,
color: "rgba(239, 247, 253, .1)"
}
},
splitLine: {
show: true,
lineStyle: {
color: "rgba(239, 247, 253, .1)"
}
},
axisTick: {
show: false
},
axisLabel: {
fontSize: 12,
color: "#8C8C8C"
},
min: 0,
max: Math.ceil(Math.max.apply(null, yData1) / 5) * 5,
interval: Math.ceil(Math.max.apply(null, yData1) / 4)
}
],
series: [
...seriesData,
{
type: "bar",
name: "出账金额",
itemStyle: {
color: "transparent"
},
tooltip: {
show: false
},
data: seriesArr[0]
},
{
type: "bar",
itemStyle: {
color: "transparent"
},
tooltip: {
show: false
},
data: seriesArr[1]
},
{
name: "出账笔数",
type: "line",
showSymbol: true,
// smooth: true,
symbol: "circle",
symbolSize: 8,
yAxisIndex: 1,
itemStyle: {
color: "#FFA800"
},
lineStyle: {
width: 2
},
// areaStyle: {
// normal: {
// color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
// {
// offset: 0,
// color: "rgba(67, 239, 255, .3)"
// },
// {
// offset: 1,
// color: "rgba(1, 17, 49, .3)"
// }
// ])
// }
// },
data: yData1
},
{
name: "进账笔数",
type: "line",
showSymbol: true,
// smooth: true,
symbol: "circle",
symbolSize: 8,
yAxisIndex: 1,
itemStyle: {
color: "#6F47FF"
},
lineStyle: {
width: 2
},
// areaStyle: {
// normal: {
// color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
// {
// offset: 0,
// color: "rgba(67, 239, 255, .3)"
// },
// {
// offset: 1,
// color: "rgba(1, 17, 49, .3)"
// }
// ])
// }
// },
data: yData2
}
]
});
},
{
deep: true,
immediate: true
}
);
</script>
<template>
<div ref="accountChartBarMonth" style="width: 100%; height: 100%" />
</template>

@ -0,0 +1,263 @@
<script setup lang="ts">
import { useECharts } from "@pureadmin/utils";
import { type PropType, ref, computed, watch, nextTick } from "vue";
import * as echarts from "echarts/core";
import resultDefaultAvatar from "../../../assets/home/resultDefaultAvatar.png";
import excelIcon from "@/assets/home/excel_icon.svg?component";
const props = defineProps({
requireData: {
type: Array as PropType<Array<number>>,
default: () => []
},
questionData: {
type: Array as PropType<Array<number>>,
default: () => []
}
});
const accountChartBehaviorGraph = ref();
const { setOptions } = useECharts(accountChartBehaviorGraph);
const symbol = "image:///asset/get/s/data-1616488906907-TTcSsT2dL.png";
const dataNum = [
{
name: "节点1",
x: 300,
y: 80,
value: 200,
category: 0
},
{
name: "节点2",
x: 300,
y: 220,
value: 30,
category: 0
},
{
name: "节点3",
x: 550,
y: 150,
value: 40,
category: 1
},
{
name: "节点4",
x: 750,
y: 80,
value: 25,
category: 2
},
{
name: "节点5",
x: 750,
y: 150,
value: 25,
category: 2
},
{
name: "节点6",
x: 750,
y: 220,
value: 25,
category: 2
}
];
const linkData = [
{
source: "节点3",
target: "节点1",
lineStyle: {
// normal: {
color: "#5070F2",
curveness: 0.1
// }
}
},
{
source: "节点3",
target: "节点2",
lineStyle: {
// normal: {
curveness: -0.1,
color: "#5070F2"
// }
}
},
{
source: "节点3",
target: "节点4",
lineStyle: {
// normal: {
curveness: -0.1,
color: "#FFAC06"
// }
}
},
{
source: "节点3",
target: "节点5",
lineStyle: {
// normal: {
curveness: 0,
color: "#FFAC06"
// }
}
},
{
source: "节点3",
target: "节点6",
lineStyle: {
// normal: {
curveness: 0.1,
color: "#FFAC06"
// }
}
}
];
watch(
() => props,
async () => {
await nextTick(); // DOM
setOptions({
// container: ".bar-card",
// backgroundColor: "rgba(154,174,255,0.1)",
// tooltip: {
// show: false,
// trigger: "item",
// formatter: function (params) {
// console.log(params);
// return params.name + ":" + params.value + "";
// }
// },
// title: {
// text: "{a|} {b|}",
// left: 20,
// top: 12,
// textStyle: {
// lineHeight: 24,
// rich: {
// a: {
// backgroundColor: "#5070F2",
// width: 2,
// height: 17,
// verticalAlign: "middle"
// },
// b: {
// padding: [2, 0, 0, 0],
// fontSize: 16,
// color: "#333",
// // color: "333",
// fontWeight: "bold"
// }
// }
// }
// },
// center: [600, 185],
// grid: {
// top: 0,
// left: 0,
// right: 0,
// bottom: 0,
// containLabel: true
// },
series: [
{
type: "graph",
layout: "none",
symbolSize: 48,
coordinateSystem: null,
label: {
// normal: {
show: false,
position: "bottom",
color: "#ffffff"
// }
},
edgeSymbol: ["none", "arrow"],
edgeSymbolSize: 5,
categories: [
{
name: "资本",
itemStyle: {
// normal: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: "#3B9FFE"
},
{
offset: 1,
color: "#5070F2"
}
])
// }
},
label: {
// normal: {
fontSize: "14"
// }
}
},
{
name: "大公司",
itemStyle: {
// normal: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: "#2832F3"
},
{
offset: 1,
color: "#757AFF"
}
])
// }
},
label: {
// normal: {
fontSize: "20"
// }
}
},
{
name: "小公司",
itemStyle: {
// normal: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: "#FFAC06"
},
{
offset: 1,
color: "#FFDA8D"
}
])
// }
},
label: {
// normal: {
fontSize: "14"
// }
}
}
],
data: dataNum,
links: linkData
}
]
});
},
{
deep: true,
immediate: true
}
);
</script>
<template>
<div ref="accountChartBehaviorGraph" style="width: 100%; height: 100%" />
</template>

@ -0,0 +1,226 @@
<script setup lang="ts">
import { useECharts } from "@pureadmin/utils";
import { type PropType, ref, computed, watch, nextTick } from "vue";
import * as echarts from "echarts/core";
import { fa } from "element-plus/es/locale/index.mjs";
const props = defineProps({
requireData: {
type: Array as PropType<Array<number>>,
default: () => []
},
questionData: {
type: Array as PropType<Array<number>>,
default: () => []
}
});
const accountChartBoxPlot = ref();
const { setOptions } = useECharts(accountChartBoxPlot);
watch(
() => props,
async () => {
await nextTick(); // DOM
setOptions({
// container: ".bar-card",
// backgroundColor: "rgba(154,174,255,0.1)",
tooltip: {
trigger: "axis"
},
title: {
text: "{a|} {b|交易金额特征}",
show: false,
left: 18,
top: 12,
textStyle: {
lineHeight: 24,
rich: {
a: {
backgroundColor: "#5070F2",
width: 2,
height: 17,
verticalAlign: "middle"
},
b: {
padding: [2, 0, 0, 0],
fontSize: 16,
color: "#333",
// color: "333",
fontWeight: "bold"
}
}
}
},
grid: {
top: 80,
left: 20,
right: 50,
bottom: 40,
containLabel: true
},
xAxis: {
// name: "SOC",
// nameTextStyle: {
// color: "#999",
// padding: [0, 0, -20, 0],
// verticalAlign: "bottom"
// },
// nameGap: -40,
data: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"],
splitLine: {
show: false,
lineStyle: {
color: "#EFF0F1"
}
},
axisLine: {
show: true,
lineStyle: {
color: "#DCDCDC"
}
},
axisTick: {
show: true,
alignWithLabel: true
},
axisLabel: {
show: true,
// textStyle: {
color: "#999"
// },
}
},
yAxis: [
{
name: "数量",
min: 0,
max: 200,
nameTextStyle: {
color: "#999",
padding: [-15, 0, 0, -33]
// verticalAlign: "top"
},
splitLine: {
show: true,
lineStyle: {
color: "rgba(80,112,242,0.2)",
type: "dashed"
}
},
axisTick: {
show: false
},
axisLine: {
show: true,
lineStyle: {
color: "#DCDCDC"
}
},
axisLabel: {
show: true,
// textStyle: {
color: "#999"
// },
}
},
{
name: "",
min: 0,
max: 120,
nameTextStyle: {
color: "#999",
padding: [-15, 0, 0, 0],
verticalAlign: "top"
},
position: "right",
splitLine: {
show: false
},
axisTick: {
show: false
},
axisLine: {
show: false
},
axisLabel: {
show: false,
// textStyle: {
color: "#999"
// },
}
}
],
series: [
{
name: "数量",
yAxisIndex: 0,
type: "boxplot",
silent: true,
boxWidth: [28, 28],
// hoverAnimation: false,
itemStyle: {
// normal: {
borderColor: "#1E7FF1",
borderWidth: 1,
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: "rgba(30, 127, 241, 0.7)" },
{ offset: 1, color: "rgba(30, 127, 241, 0)" }
]),
color0: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: "rgba(30, 127, 241, 0)" },
{ offset: 1, color: "rgba(30, 127, 241, 0.7)" }
])
// },
},
data: [
[50, 70, 85, 100, 120], // [min, Q1, median (or Q2), Q3, max]
[25, 38, 56, 70, 85],
[35, 45, 60, 86, 100],
[40, 50, 75, 90, 110],
[25, 38, 56, 70, 85],
[50, 70, 85, 100, 120],
[10, 50, 60, 70, 80]
]
}
// {
// name: "",
// yAxisIndex: 1,
// type: "boxplot",
// silent: true,
// boxWidth: [28, 28],
// // hoverAnimation: false,
// itemStyle: {
// // normal: {
// borderColor: "#15D0FC",
// borderWidth: 1,
// color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
// { offset: 0, color: "rgba(21, 208, 252, 0.7)" },
// { offset: 1, color: "rgba(21, 208, 252, 0)" }
// ]),
// color0: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
// { offset: 0, color: "rgba(21, 208, 252, 0)" },
// { offset: 1, color: "rgba(21, 208, 252, 0.7)" }
// ])
// // }
// },
// data: [
// [50, 70, 85, 100, 120], // [min, Q1, median (or Q2), Q3, max]
// [25, 38, 56, 70, 85],
// [35, 45, 60, 86, 100],
// [40, 50, 75, 90, 110]
// ]
// }
]
});
},
{
deep: true,
immediate: true
}
);
</script>
<template>
<div ref="accountChartBoxPlot" style="width: 100%; height: 100%" />
</template>

@ -0,0 +1,165 @@
<script setup lang="ts">
import { useECharts } from "@pureadmin/utils";
import { type PropType, ref, computed, watch, nextTick } from "vue";
import * as echarts from "echarts/core";
import resultDefaultAvatar from "../../../assets/home/resultDefaultAvatar.png";
import excelIcon from "@/assets/home/excel_icon.svg?component";
const props = defineProps({
requireData: {
type: Array as PropType<Array<number>>,
default: () => []
},
questionData: {
type: Array as PropType<Array<number>>,
default: () => []
}
});
const accountChartGraph = ref();
const { setOptions } = useECharts(accountChartGraph);
const symbol = "image:///asset/get/s/data-1616488906907-TTcSsT2dL.png";
const dataNum = [
{
name: "张三三",
value: { num: 55, type: 0 },
draggable: false,
x: 600,
y: 185,
symbolSize: 48,
fixed: true,
symbol: "image://" + resultDefaultAvatar
},
{
name: "张芳芳",
value: { num: 55, type: 1 },
category: 1,
draggable: false,
x: 500,
y: 184
},
{
name: "李四1",
value: { num: 55, type: 2 },
category: 1,
draggable: false,
x: 700,
y: 168
},
{
name: "李四2",
value: { num: 55, type: 3 },
category: 1,
draggable: false,
x: 700,
y: 198
}
];
const linkData = [
{ source: 0, target: 1, value: "出账金额" },
{ source: 0, target: 2, value: "出账金额" },
{ source: 0, target: 3, value: "出账金额" }
];
watch(
() => props,
async () => {
await nextTick(); // DOM
setOptions({
// container: ".bar-card",
// backgroundColor: "rgba(154,174,255,0.1)",
// tooltip: {
// trigger: "item",
// formatter: function (params) {
// console.log(params);
// return params.name + ":" + params.value + "";
// }
// },
title: {
text: "{a|} {b|资金流}",
left: 20,
top: 12,
textStyle: {
lineHeight: 24,
rich: {
a: {
backgroundColor: "#5070F2",
width: 2,
height: 17,
verticalAlign: "middle"
},
b: {
padding: [2, 0, 0, 0],
fontSize: 16,
color: "#333",
// color: "333",
fontWeight: "bold"
}
}
}
},
center: [600, 185],
grid: {
top: 0,
left: 0,
right: 0,
bottom: 0,
containLabel: true
},
series: [
{
type: "graph",
layout: "none", //
symbol: "image://" + resultDefaultAvatar, //
symbolSize: 48,
categories: [
{ name: "未感染" },
{ name: "无症状感染" },
{ name: "确诊病例" }
],
label: {
show: true,
align: "center",
fontSize: 14,
color: "#666",
formatter: params => {
return `\n\n\n\n\n\n\n${params.name}`;
},
rich: {
a0: {
color: "#fff",
padding: [4, 5],
backgroundColor: "rgba(255, 86, 76, .45)"
},
a1: {
color: "#fff",
padding: [4, 5],
backgroundColor: "rgba(255, 86, 76, .35)"
}
}
},
edgeSymbol: ["circle", "arrow"],
edgeSymbolSize: [4, 8],
edgeLabel: { show: true, formatter: "{c}" },
data: dataNum,
links: linkData,
lineStyle: {
opacity: 0.9,
width: 1,
curveness: 0,
color: "#5070F2"
}
}
]
});
},
{
deep: true,
immediate: true
}
);
</script>
<template>
<div ref="accountChartGraph" style="width: 100%; height: 100%" />
</template>

@ -40,7 +40,7 @@ watch(
tooltip: {
trigger: "item",
formatter: function (params) {
console.log(params);
// console.log(params);
return params.name + ":" + params.value + "元";
}
},
@ -120,7 +120,6 @@ watch(
label: {
lineHeight: 25,
formatter: function (params) {
console.log(params);
return (
"{title|" +
params.name +

@ -0,0 +1,214 @@
<script setup lang="ts">
import { useECharts } from "@pureadmin/utils";
import { type PropType, ref, computed, watch, nextTick } from "vue";
import * as echarts from "echarts/core";
import { fa } from "element-plus/es/locale/index.mjs";
const props = defineProps({
requireData: {
type: Array as PropType<Array<number>>,
default: () => []
},
questionData: {
type: Array as PropType<Array<number>>,
default: () => []
}
});
const accountChartScatter = ref();
const { setOptions } = useECharts(accountChartScatter);
// var getname = ["SCI", "SSCI", "EI", "ISTP", "AHCI", "ISSHP", ""]; //
// var getvalue = [1811, 868, 320, 208, 190, 120, 100]; //
const getamount = [200, 100, 500, 400, 600, 1000, 900]; //
const getorderCount = [10, 15, 20, 30, 48, 50, 70]; //
//2020
// var getname2 = ["SCI", "SSCI", "EI", "ISTP", "AHCI", "ISSHP", ""]; //
// var getvalue2 = [2811, 1568, 420, 308, 290, 220, 190]; //
const getamount2 = [100, 300, 500, 700, 900, 1200, 1500]; //
const getorderCount2 = [3, 10, 70, 48, 42, 65, 30]; //
let datas = [];
for (let i = 0; i < getamount.length; i++) {
datas.push({
// name: getname[i],
// value: getvalue[i],
amount: getamount[i],
orderCount: getorderCount[i]
});
}
let datas2 = [];
for (let i = 0; i < getamount2.length; i++) {
datas2.push({
// name: getname2[i],
// value: getvalue2[i],
amount: getamount2[i],
orderCount: getorderCount2[i]
});
}
function packDatas(datas) {
let packedDatas = datas.map(data => {
// let name = data["name"];
let dispathCount = data["orderCount"];
let refs = data["amount"];
// let avt = data["value"];
return [dispathCount, refs];
});
return packedDatas;
}
function packDatas2(datas2) {
let packedDatas2 = datas2.map(data => {
// let name = data["name"];
let dispathCount = data["orderCount"];
let refs = data["amount"];
// let avt = data["value"];
return [dispathCount, refs];
});
return packedDatas2;
}
let packedDatas = packDatas(datas);
let packedDatas2 = packDatas2(datas2);
watch(
() => props,
async () => {
await nextTick(); // DOM
setOptions({
// container: ".bar-card",
// backgroundColor: "rgba(154,174,255,0.1)",
tooltip: {
trigger: "item",
formatter: function (params) {
console.log(params);
return params.value + "元";
}
},
title: {
text: "{a|} {b|交易金额特征}",
left: 18,
top: 12,
textStyle: {
lineHeight: 24,
rich: {
a: {
backgroundColor: "#5070F2",
width: 2,
height: 17,
verticalAlign: "middle"
},
b: {
padding: [2, 0, 0, 0],
fontSize: 16,
color: "#333",
// color: "333",
fontWeight: "bold"
}
}
}
},
grid: {
top: 80,
left: 20,
right: 50,
bottom: 40,
containLabel: true
},
yAxis: {
name: "交易金额",
nameTextStyle: {
color: "#666",
padding: [0, 26, 0, 0]
},
nameGap: 15,
splitLine: {
show: true,
lineStyle: {
color: "rgba(80,112,242,0.2)",
type: "dashed"
}
},
axisLabel: {
color: "#999"
},
axisLine: {
show: true,
lineStyle: {
color: "#DCDCDC"
}
}
},
xAxis: {
name: "次数",
nameTextStyle: {
color: "#666"
},
// data: ["10", "20", "30", "40", "50"],
axisLabel: {
color: "#999"
},
axisLine: {
show: true,
lineStyle: {
color: "#DCDCDC"
}
},
splitLine: {
show: false,
lineStyle: {
color: "rgba(80,112,242,0.2)",
type: "dashed"
}
},
axisTick: {
alignWithLabel: false,
show: false
}
},
series: [
{
name: "2010",
symbolSize: function (data) {
return data[1] / 20;
},
itemStyle: {
// normal: {
color: "#9CC8FF",
borderColor: "#4B95F3",
borderWidth: 2
// }
},
data: packedDatas,
type: "scatter"
},
{
name: "2020",
symbolSize: function (data) {
return data[1] / 20;
},
itemStyle: {
// normal: {
color: "#FFD291",
borderColor: "#F3B14B",
borderWidth: 2
// }
},
data: packedDatas2,
type: "scatter"
}
]
});
},
{
deep: true,
immediate: true
}
);
</script>
<template>
<div ref="accountChartScatter" style="width: 100%; height: 100%" />
</template>

@ -1,2 +1,8 @@
export { default as AccountChartBar } from "./AccountChartBar.vue";
export { default as AccountChartPie } from "./AccountChartPie.vue";
export { default as AccountChartGraph } from "./AccountChartGraph.vue";
export { default as AccountChartBarMonth } from "./AccountChartBarMonth.vue";
export { default as AccountChartBarDate } from "./AccountChartBarDate.vue";
export { default as AccountChartScatter } from "./AccountChartScatter.vue";
export { default as AccountChartBoxPlot } from "./AccountChartBoxPlot.vue";
export { default as AccountChartBehaviorGraph } from "./AccountChartBehaviorGraph.vue";

@ -5,7 +5,21 @@ import { Search } from "@element-plus/icons-vue";
import excelIcon from "@/assets/home/excel_icon.svg?component";
import exportIcon from "@/assets/home/export_icon.svg?component";
import emptyIcon from "@/assets/home/empty_icon.png";
import { AccountChartBar, AccountChartPie } from "./components";
import homeTitle from "@/assets/home/home_title.png";
import {
AccountChartBar,
AccountChartPie,
AccountChartGraph,
AccountChartBarMonth,
AccountChartBarDate,
AccountChartScatter,
AccountChartBoxPlot,
AccountChartBehaviorGraph
} from "./components";
//VueOfficeDocx
import VueOfficeDocx from "@vue-office/docx";
//
import "@vue-office/docx/lib/index.css";
defineOptions({
name: "Welcome"
@ -45,12 +59,45 @@ const barChartData = [
}
];
const pageNum = ref(3);
const docxFlag = ref(false);
const docxTest = ref<any>(
"https://501351981.github.io/vue-office/examples/dist/static/test-files/test.docx"
);
const renderedHandler = () => {
console.log("渲染完成");
};
const errorHandler = () => {
console.log("渲染失败");
};
const changeHandle = event => {
let file = event.target.files[0];
let fileReader = new FileReader();
fileReader.readAsArrayBuffer(file);
fileReader.onload = () => {
docxTest.value = fileReader.result;
console.log(docxTest.value);
};
};
const beforeUpload = (file: any) => {
console.log(file);
let reader = new FileReader();
reader.readAsArrayBuffer(file);
reader.onload = loadEvent => {
console.log("1111");
let arrayBuffer = loadEvent.target.result;
console.log(arrayBuffer);
docxTest.value = arrayBuffer;
};
return false;
};
</script>
<template>
<div class="home-page">
<div v-if="pageNum === 1" class="home-page-type">
<div class="home-page-type-title">欢迎使用智能情报分析系统</div>
<div class="home-page-type-title">
<img class="w-[383px]" :src="homeTitle" />
</div>
<div class="home-page-type-tip">请上传需要分析的文件</div>
<div class="home-page-type-upload">
<el-upload
@ -59,10 +106,10 @@ const pageNum = ref(3);
action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
>
<div>
<img src="@/assets/home/data_template.png" />
<img class="w-[264px]" src="@/assets/home/data_template.png" />
</div>
<div class="mt-14 mb-5">
<img src="@/assets/home/Data_template_btn.png" />
<img class="w-[121px]" src="@/assets/home/Data_template_btn.png" />
</div>
<div class="el-upload__text"><em>点击上传</em>或拖拽支持的文件</div>
</el-upload>
@ -72,10 +119,10 @@ const pageNum = ref(3);
action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
>
<div>
<img src="@/assets/home/OCR_template.png" />
<img class="w-[324px]" src="@/assets/home/OCR_template.png" />
</div>
<div class="mt-14 mb-5">
<img src="@/assets/home/OCR_template_btn.png" />
<img class="w-[121px]" src="@/assets/home/OCR_template_btn.png" />
</div>
<div class="el-upload__text"><em>点击上传</em>或拖拽支持的文件</div>
</el-upload>
@ -115,7 +162,7 @@ const pageNum = ref(3);
<div class="mr-3">
<el-input
v-model="textarea"
style="width: 1263px"
style="width: 1263px; height: 32px"
:autosize="{ minRows: 1, maxRows: 4 }"
type="textarea"
placeholder="请输入证件号进行分析"
@ -129,7 +176,7 @@ const pageNum = ref(3);
可输入单个证件号码进行分析若需分析多个主体请将证件号码用|隔开
</div>
<div class="analysis-box-icon">
<img src="@/assets/home/analysis_icon.png" />
<img class="w-[122px]" src="@/assets/home/analysis_icon.png" />
</div>
</div>
</div>
@ -208,8 +255,7 @@ const pageNum = ref(3);
<div class="home-page-result-content-left-top">
<el-input
v-model="inputValue"
size="large"
class="border-0"
class="border-0 h-[46px]"
placeholder="搜索"
:prefix-icon="Search"
/>
@ -218,8 +264,11 @@ const pageNum = ref(3);
<div class="result-content-left-middle-box">
<el-checkbox v-model="checkedValue" />
<div class="left-middle-box">
<div class="w[48px] h[48px] mr-3">
<img src="@/assets/home/resultDefaultAvatar.png" />
<div class="w-[48px] h-[48px] mr-3">
<img
class="w-[48px]"
src="@/assets/home/resultDefaultAvatar.png"
/>
</div>
<div class="flex-1 left-middle-box-bottom">
<img src="@/assets/home/data_analysis.gif" />
@ -244,7 +293,9 @@ const pageNum = ref(3);
</div>
<div class="home-page-result-content-right">
<div class="home-page-result-content-right-header">
<el-button type="primary" color="#5070F2">查看文档</el-button>
<el-button type="primary" color="#5070F2" @click="docxFlag = true"
>查看文档</el-button
>
</div>
<div class="home-page-result-content-right-content">
<el-empty
@ -266,12 +317,44 @@ const pageNum = ref(3);
<AccountChartPie />
</div>
</div>
<div class="in-and-out-account-box-second h-[350px]">
<AccountChartGraph />
</div>
<div class="in-and-out-account-box-third h-[400px]">
<AccountChartBarMonth />
</div>
<div class="in-and-out-account-box-fourth h-[400px]">
<AccountChartBarDate />
</div>
<div class="in-and-out-account-box-fifth h-[350px]">
<div class="account-box-fifth-left">
<AccountChartScatter />
</div>
<el-divider direction="vertical" />
<div class="account-box-fifth-right">
<AccountChartBoxPlot />
</div>
</div>
<div class="in-and-out-account-box-sixth">
<div class="account-box-sixth-title">交易行为特征</div>
<div class="account-box-sixth-content">
<div class="account-box-sixth-content-left h-[320px]">
<AccountChartBehaviorGraph />
</div>
<div class="account-box-sixth-content-right">
<AccountChartBehaviorGraph />
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<el-dialog v-model="docxFlag" width="100vh">
<vue-office-docx :src="docxTest" />
</el-dialog>
</div>
</template>
<style lang="scss" scoped>
@ -410,6 +493,18 @@ const pageNum = ref(3);
}
}
}
.analysis-box-top-right {
.upload-btn {
:deep(.el-button) {
background-color: #fff;
}
:deep(.el-button:hover) {
background-color: #5070f2;
}
}
}
}
.analysis-box-middle {
@ -449,7 +544,7 @@ const pageNum = ref(3);
:deep(.el-collapse-item__header) {
box-sizing: border-box;
height: 80px;
padding: 24px 32px;
padding: 24px 32px 16px;
}
:deep(.el-collapse-item__arrow) {
@ -550,7 +645,7 @@ const pageNum = ref(3);
.home-page-result-content-left-top {
width: 100%;
height: 40px;
height: 46px;
:deep(.el-input__wrapper) {
border: none !important; /* 使用 !important 来确保覆盖默认样式 */
@ -589,7 +684,7 @@ const pageNum = ref(3);
justify-content: center;
span {
margin-left: 4px;
margin-left: 2px;
font-size: 12px;
font-style: normal;
// font-family: "PingFang SC";
@ -645,7 +740,8 @@ const pageNum = ref(3);
.home-page-result-content-right-content {
box-sizing: border-box;
width: 100%;
height: 100%;
height: calc(100vh - 330px);
overflow-y: scroll;
:deep(.el-empty__description p) {
font-size: 16px;
@ -668,6 +764,7 @@ const pageNum = ref(3);
justify-content: space-between;
width: 100%;
height: 370px;
margin-bottom: 20px;
.account-box-first-left {
background: rgb(154 174 255 / 10%);
@ -679,6 +776,70 @@ const pageNum = ref(3);
border-radius: 4px;
}
}
.in-and-out-account-box-second,
.in-and-out-account-box-third,
.in-and-out-account-box-fourth,
.in-and-out-account-box-fifth {
width: 100%;
margin-bottom: 20px;
// height: 370px;
background: rgb(154 174 255 / 10%);
border-radius: 4px;
}
.in-and-out-account-box-fifth {
display: flex;
align-items: center;
justify-content: space-between;
.account-box-fifth-left,
.account-box-fifth-right {
flex: 1;
height: 100%;
}
:deep(.el-divider--vertical) {
height: 90%;
}
}
.in-and-out-account-box-sixth {
width: 100%;
// height: 320px;
.account-box-sixth-title {
padding-left: 8px;
margin-bottom: 12px;
font-size: 16px;
font-style: normal;
font-weight: bold;
line-height: 19px;
color: #333;
text-align: left;
text-transform: none;
border-left: 2px solid #5070f2;
}
.account-box-sixth-content {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
height: 320px;
.account-box-sixth-content-left,
.account-box-sixth-content-right {
flex: 1;
height: 100%;
background: rgb(154 174 255 / 10%);
border-radius: 4px;
}
.account-box-sixth-content-left {
margin-right: 16px;
}
}
}
}
}
}

Loading…
Cancel
Save