Merge branch 'main' of git.zdool.com:xs/ggfwjsc
|
@ -8,9 +8,11 @@
|
|||
"name": "web",
|
||||
"version": "0.0.0",
|
||||
"dependencies": {
|
||||
"axios": "^1.6.8",
|
||||
"echarts": "^5.4.2",
|
||||
"echarts-gl": "^2.0.9",
|
||||
"echarts-liquidfill": "^3.1.0",
|
||||
"element-plus": "^2.7.0",
|
||||
"sass": "^1.60.0",
|
||||
"vue": "^3.2.47",
|
||||
"vue-router": "^4.1.6"
|
||||
|
@ -32,6 +34,22 @@
|
|||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@ctrl/tinycolor": {
|
||||
"version": "3.6.1",
|
||||
"resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
|
||||
"integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==",
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/@element-plus/icons-vue": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz",
|
||||
"integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==",
|
||||
"peerDependencies": {
|
||||
"vue": "^3.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/win32-x64": {
|
||||
"version": "0.17.14",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.14.tgz",
|
||||
|
@ -49,6 +67,52 @@
|
|||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/@floating-ui/core": {
|
||||
"version": "1.6.1",
|
||||
"resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.6.1.tgz",
|
||||
"integrity": "sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==",
|
||||
"dependencies": {
|
||||
"@floating-ui/utils": "^0.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@floating-ui/dom": {
|
||||
"version": "1.6.5",
|
||||
"resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.6.5.tgz",
|
||||
"integrity": "sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==",
|
||||
"dependencies": {
|
||||
"@floating-ui/core": "^1.0.0",
|
||||
"@floating-ui/utils": "^0.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@floating-ui/utils": {
|
||||
"version": "0.2.2",
|
||||
"resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.2.tgz",
|
||||
"integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw=="
|
||||
},
|
||||
"node_modules/@popperjs/core": {
|
||||
"name": "@sxzz/popperjs-es",
|
||||
"version": "2.11.7",
|
||||
"resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
|
||||
"integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
|
||||
},
|
||||
"node_modules/@types/lodash": {
|
||||
"version": "4.17.1",
|
||||
"resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.1.tgz",
|
||||
"integrity": "sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q=="
|
||||
},
|
||||
"node_modules/@types/lodash-es": {
|
||||
"version": "4.17.12",
|
||||
"resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz",
|
||||
"integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
|
||||
"dependencies": {
|
||||
"@types/lodash": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/web-bluetooth": {
|
||||
"version": "0.0.16",
|
||||
"resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
|
||||
"integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ=="
|
||||
},
|
||||
"node_modules/@vitejs/plugin-vue": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.1.0.tgz",
|
||||
|
@ -181,6 +245,74 @@
|
|||
"integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@vueuse/core": {
|
||||
"version": "9.13.0",
|
||||
"resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz",
|
||||
"integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
|
||||
"dependencies": {
|
||||
"@types/web-bluetooth": "^0.0.16",
|
||||
"@vueuse/metadata": "9.13.0",
|
||||
"@vueuse/shared": "9.13.0",
|
||||
"vue-demi": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@vueuse/core/node_modules/vue-demi": {
|
||||
"version": "0.14.7",
|
||||
"resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.7.tgz",
|
||||
"integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==",
|
||||
"hasInstallScript": true,
|
||||
"bin": {
|
||||
"vue-demi-fix": "bin/vue-demi-fix.js",
|
||||
"vue-demi-switch": "bin/vue-demi-switch.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@vue/composition-api": "^1.0.0-rc.1",
|
||||
"vue": "^3.0.0-0 || ^2.6.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@vue/composition-api": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@vueuse/metadata": {
|
||||
"version": "9.13.0",
|
||||
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz",
|
||||
"integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ=="
|
||||
},
|
||||
"node_modules/@vueuse/shared": {
|
||||
"version": "9.13.0",
|
||||
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz",
|
||||
"integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
|
||||
"dependencies": {
|
||||
"vue-demi": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@vueuse/shared/node_modules/vue-demi": {
|
||||
"version": "0.14.7",
|
||||
"resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.7.tgz",
|
||||
"integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==",
|
||||
"hasInstallScript": true,
|
||||
"bin": {
|
||||
"vue-demi-fix": "bin/vue-demi-fix.js",
|
||||
"vue-demi-switch": "bin/vue-demi-switch.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@vue/composition-api": "^1.0.0-rc.1",
|
||||
"vue": "^3.0.0-0 || ^2.6.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@vue/composition-api": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/anymatch": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
|
||||
|
@ -193,6 +325,26 @@
|
|||
"node": ">= 8"
|
||||
}
|
||||
},
|
||||
"node_modules/async-validator": {
|
||||
"version": "4.2.5",
|
||||
"resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz",
|
||||
"integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="
|
||||
},
|
||||
"node_modules/asynckit": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
|
||||
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
|
||||
},
|
||||
"node_modules/axios": {
|
||||
"version": "1.6.8",
|
||||
"resolved": "https://registry.npmmirror.com/axios/-/axios-1.6.8.tgz",
|
||||
"integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==",
|
||||
"dependencies": {
|
||||
"follow-redirects": "^1.15.6",
|
||||
"form-data": "^4.0.0",
|
||||
"proxy-from-env": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/binary-extensions": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz",
|
||||
|
@ -237,12 +389,36 @@
|
|||
"resolved": "https://registry.npmmirror.com/claygl/-/claygl-1.3.0.tgz",
|
||||
"integrity": "sha512-+gGtJjT6SSHD2l2yC3MCubW/sCV40tZuSs5opdtn79vFSGUgp/lH139RNEQ6Jy078/L0aV8odCw8RSrUcMfLaQ=="
|
||||
},
|
||||
"node_modules/combined-stream": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||
"dependencies": {
|
||||
"delayed-stream": "~1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/csstype": {
|
||||
"version": "2.6.21",
|
||||
"resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz",
|
||||
"integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/dayjs": {
|
||||
"version": "1.11.11",
|
||||
"resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.11.tgz",
|
||||
"integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg=="
|
||||
},
|
||||
"node_modules/delayed-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/echarts": {
|
||||
"version": "5.4.2",
|
||||
"resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.2.tgz",
|
||||
|
@ -272,6 +448,31 @@
|
|||
"echarts": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/element-plus": {
|
||||
"version": "2.7.2",
|
||||
"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.7.2.tgz",
|
||||
"integrity": "sha512-AdEzBU/A68iUleio0MkQ46JeU5SeQvFFd915GJFScJmUEo5AmYg3OQ4pVjcu+p3b3Nupg9MC5Wa4xjAiC51kUg==",
|
||||
"dependencies": {
|
||||
"@ctrl/tinycolor": "^3.4.1",
|
||||
"@element-plus/icons-vue": "^2.3.1",
|
||||
"@floating-ui/dom": "^1.0.1",
|
||||
"@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7",
|
||||
"@types/lodash": "^4.14.182",
|
||||
"@types/lodash-es": "^4.17.6",
|
||||
"@vueuse/core": "^9.1.0",
|
||||
"async-validator": "^4.2.5",
|
||||
"dayjs": "^1.11.3",
|
||||
"escape-html": "^1.0.3",
|
||||
"lodash": "^4.17.21",
|
||||
"lodash-es": "^4.17.21",
|
||||
"lodash-unified": "^1.0.2",
|
||||
"memoize-one": "^6.0.0",
|
||||
"normalize-wheel-es": "^1.2.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"vue": "^3.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild": {
|
||||
"version": "0.17.14",
|
||||
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.14.tgz",
|
||||
|
@ -310,6 +511,11 @@
|
|||
"@esbuild/win32-x64": "0.17.14"
|
||||
}
|
||||
},
|
||||
"node_modules/escape-html": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz",
|
||||
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
|
||||
},
|
||||
"node_modules/estree-walker": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
|
||||
|
@ -327,6 +533,32 @@
|
|||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/follow-redirects": {
|
||||
"version": "1.15.6",
|
||||
"resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.6.tgz",
|
||||
"integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
|
||||
"engines": {
|
||||
"node": ">=4.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"debug": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/form-data": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz",
|
||||
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
|
||||
"dependencies": {
|
||||
"asynckit": "^0.4.0",
|
||||
"combined-stream": "^1.0.8",
|
||||
"mime-types": "^2.1.12"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/fsevents": {
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz",
|
||||
|
@ -427,6 +659,26 @@
|
|||
"node": ">=0.12.0"
|
||||
}
|
||||
},
|
||||
"node_modules/lodash": {
|
||||
"version": "4.17.21",
|
||||
"resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
|
||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
|
||||
},
|
||||
"node_modules/lodash-es": {
|
||||
"version": "4.17.21",
|
||||
"resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz",
|
||||
"integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
|
||||
},
|
||||
"node_modules/lodash-unified": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz",
|
||||
"integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==",
|
||||
"peerDependencies": {
|
||||
"@types/lodash-es": "*",
|
||||
"lodash": "*",
|
||||
"lodash-es": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/magic-string": {
|
||||
"version": "0.25.9",
|
||||
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
|
||||
|
@ -436,6 +688,30 @@
|
|||
"sourcemap-codec": "^1.4.8"
|
||||
}
|
||||
},
|
||||
"node_modules/memoize-one": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz",
|
||||
"integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
|
||||
},
|
||||
"node_modules/mime-db": {
|
||||
"version": "1.52.0",
|
||||
"resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
|
||||
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/mime-types": {
|
||||
"version": "2.1.35",
|
||||
"resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
|
||||
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
||||
"dependencies": {
|
||||
"mime-db": "1.52.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/nanoid": {
|
||||
"version": "3.3.6",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
|
||||
|
@ -462,6 +738,11 @@
|
|||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/normalize-wheel-es": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
|
||||
"integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw=="
|
||||
},
|
||||
"node_modules/path-parse": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
|
||||
|
@ -507,6 +788,11 @@
|
|||
"node": "^10 || ^12 || >=14"
|
||||
}
|
||||
},
|
||||
"node_modules/proxy-from-env": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
|
||||
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
|
||||
},
|
||||
"node_modules/readdirp": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
"preview": "vite preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^1.6.8",
|
||||
"echarts": "^5.4.2",
|
||||
"echarts-gl": "^2.0.9",
|
||||
"echarts-liquidfill": "^3.1.0",
|
||||
|
|
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 143 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 7.0 KiB |
After Width: | Height: | Size: 5.9 KiB |
After Width: | Height: | Size: 200 KiB |
After Width: | Height: | Size: 99 KiB |
After Width: | Height: | Size: 100 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 99 KiB |
After Width: | Height: | Size: 99 KiB |
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 13 KiB |
|
@ -14,32 +14,32 @@ const router = createRouter({
|
|||
component: () => import('../view/home.vue'),
|
||||
children: [
|
||||
{
|
||||
name:'首页',
|
||||
name: '首页',
|
||||
path: '/home/index',
|
||||
component: () => import('../view/sy.vue'),
|
||||
},
|
||||
{
|
||||
name:'养老',
|
||||
name: '养老',
|
||||
path: '/home/yl',
|
||||
component: () => import('../view/yl.vue'),
|
||||
},
|
||||
{
|
||||
name:'卫生',
|
||||
name: '卫生',
|
||||
path: '/home/hygiene',
|
||||
component: () => import('../view/hygiene.vue'),
|
||||
},
|
||||
{
|
||||
name:'教育',
|
||||
name: '教育',
|
||||
path: '/home/education',
|
||||
component: () => import('../view/education.vue'),
|
||||
},
|
||||
{
|
||||
name:'就业补助',
|
||||
name: '就业补助',
|
||||
path: '/home/work',
|
||||
component: () => import('../view/work.vue'),
|
||||
},
|
||||
{
|
||||
name:'智能分析',
|
||||
name: '智能分析',
|
||||
path: '/home/analyze',
|
||||
component: () => import('../view/analyze.vue'),
|
||||
},
|
||||
|
@ -48,4 +48,26 @@ const router = createRouter({
|
|||
]
|
||||
})
|
||||
|
||||
function getCookie(cname) {
|
||||
var name = cname + '='
|
||||
var ca = document.cookie.split(';')
|
||||
for (var i = 0; i < ca.length; i++) {
|
||||
var c = ca[i].trim()
|
||||
if (c.indexOf(name) == 0)
|
||||
return c.substring(name.length, c.length)
|
||||
}
|
||||
return ''
|
||||
}
|
||||
|
||||
// router.beforeEach((to, form, next) => {
|
||||
// var token = getCookie('lytoken')
|
||||
// if (token == '') {
|
||||
// window.location.href =
|
||||
// 'http://220.191.238.50:996/api/login?returnURL=' +
|
||||
// window.location.href
|
||||
// }else {
|
||||
// next();
|
||||
// }
|
||||
// })
|
||||
|
||||
export default router
|
|
@ -0,0 +1,129 @@
|
|||
import axios from 'axios';
|
||||
import { ElMessage } from 'element-plus'
|
||||
import tools from '@/utils/tools'
|
||||
import router from '../router';
|
||||
// axios.defaults.baseURL = '/api'
|
||||
axios.defaults.timeout = 120000
|
||||
|
||||
|
||||
// HTTP request 拦截器
|
||||
axios.interceptors.request.use(
|
||||
(config) => {
|
||||
let token = tools.data.get('token');
|
||||
if (token) {
|
||||
config.headers['X-USER-TOKEN'] = token.token
|
||||
}
|
||||
return config;
|
||||
},
|
||||
(error) => {
|
||||
return Promise.reject(error);
|
||||
}
|
||||
);
|
||||
|
||||
// HTTP response 拦截器
|
||||
axios.interceptors.response.use(
|
||||
(response) => {
|
||||
return response;
|
||||
},
|
||||
(error) => {
|
||||
if (error.response) {
|
||||
if (error.response.status == 401) {
|
||||
ElMessage.error("请重新登录!");
|
||||
window.location.href = '/#/login?return_url=' + window.location.href
|
||||
} else if (error.response.status == 404) {
|
||||
ElMessage.error("Status:404,正在请求不存在的服务器记录!");
|
||||
} else if (error.response.status == 500) {
|
||||
ElMessage.error({
|
||||
title: '请求错误',
|
||||
message: "Status:500,服务器发生错误!"
|
||||
});
|
||||
} else {
|
||||
ElMessage.error(`Status:${error.response.status},未知错误!`);
|
||||
}
|
||||
} else {
|
||||
ElMessage.error("请求服务器无响应!");
|
||||
}
|
||||
return Promise.reject(error.response);
|
||||
}
|
||||
);
|
||||
|
||||
var http = {
|
||||
|
||||
/** get 请求
|
||||
* @param {接口地址} url
|
||||
* @param {请求参数} params
|
||||
*/
|
||||
get: function (url, params) {
|
||||
return new Promise((resolve, reject) => {
|
||||
axios.get(url, {
|
||||
params: params
|
||||
})
|
||||
.then((response) => {
|
||||
if(response.data.code == 400 && response.data.msg){
|
||||
ElMessage.error(response.data.msg);
|
||||
}
|
||||
resolve(response.data);
|
||||
})
|
||||
.catch((error) => {
|
||||
reject(error);
|
||||
});
|
||||
})
|
||||
},
|
||||
|
||||
/** post 请求
|
||||
* @param {接口地址} url
|
||||
* @param {请求参数} params
|
||||
*/
|
||||
post: function (url, params) {
|
||||
return new Promise((resolve, reject) => {
|
||||
axios.post(url, params)
|
||||
.then((response) => {
|
||||
if(response.data.code == 400 && response.data.msg){
|
||||
ElMessage.error(response.data.msg);
|
||||
}
|
||||
resolve(response.data);
|
||||
})
|
||||
.catch((error) => {
|
||||
reject(error);
|
||||
});
|
||||
})
|
||||
},
|
||||
|
||||
put: function (url, params) {
|
||||
return new Promise((resolve, reject) => {
|
||||
axios.put(url, params)
|
||||
.then((response) => {
|
||||
if(response.data.code == 400 && response.data.msg){
|
||||
ElMessage.error(response.data.msg);
|
||||
}
|
||||
resolve(response.data);
|
||||
})
|
||||
.catch((error) => {
|
||||
reject(error);
|
||||
});
|
||||
})
|
||||
},
|
||||
|
||||
delete: function (url, params) {
|
||||
return new Promise((resolve, reject) => {
|
||||
axios.delete(url, params)
|
||||
.then((response) => {
|
||||
if(response.data.code == 400 && response.data.msg){
|
||||
ElMessage.error(response.data.msg);
|
||||
}
|
||||
resolve(response.data);
|
||||
})
|
||||
.catch((error) => {
|
||||
reject(error);
|
||||
});
|
||||
})
|
||||
},
|
||||
download: function (url) {
|
||||
let user = tools.data.get('user');
|
||||
let token = "x-token=" + user.token;
|
||||
url = url + (url.indexOf("?") > 0 ? "&" : "?") + token;
|
||||
window.open(url);
|
||||
}
|
||||
}
|
||||
|
||||
export default http;
|
|
@ -0,0 +1,36 @@
|
|||
|
||||
var tool = {}
|
||||
|
||||
/* localStorage */
|
||||
tool.data = {
|
||||
set(table, settings) {
|
||||
var _set = JSON.stringify(settings)
|
||||
return localStorage.setItem(table, _set);
|
||||
},
|
||||
get(table) {
|
||||
var data = localStorage.getItem(table);
|
||||
try {
|
||||
data = JSON.parse(data)
|
||||
} catch (err) {
|
||||
return null
|
||||
}
|
||||
return data;
|
||||
},
|
||||
remove(table) {
|
||||
return localStorage.removeItem(table);
|
||||
},
|
||||
clear() {
|
||||
return localStorage.clear();
|
||||
}
|
||||
}
|
||||
|
||||
tool.url = function (url, params) {
|
||||
var hasParams = url.indexOf("?") > 0;
|
||||
for (var key in params) {
|
||||
url = url + (hasParams ? '&' : '?') + key + '=' + params[key];
|
||||
hasParams = true;
|
||||
}
|
||||
return url;
|
||||
}
|
||||
export default tool
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<div ref="chart" style="width: 100%; height: 300px"></div>
|
||||
<div ref="chart" style="width: 100%; height: 250px"></div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<div ref="chart" style="width: 100%; height:350px;"></div>
|
||||
<div ref="chart" style="width: 100%; height:300px;"></div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
|
|
|
@ -105,7 +105,7 @@ let option = {
|
|||
label: {
|
||||
show: true,
|
||||
position: "right", // 位置
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
fontSize: 12,
|
||||
distance: 10, // 距离
|
||||
// formatter: '{c}%' // 这里是数据展示的时候显示的数据
|
||||
|
|
|
@ -86,7 +86,7 @@ let option = {
|
|||
axisLabel: {
|
||||
//坐标轴刻度标签的相关设置
|
||||
textStyle: {
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -18,8 +18,8 @@ let option = {
|
|||
// 外圈背景
|
||||
{
|
||||
type: "pie",
|
||||
center: ["60%", "55%"],
|
||||
radius: ["50%", "82%"],
|
||||
center: ["55%", "55%"],
|
||||
radius: ["70%", "90%"],
|
||||
hoverAnimation: false,
|
||||
clockWise: false,
|
||||
itemStyle: {
|
||||
|
@ -58,7 +58,7 @@ let option = {
|
|||
},
|
||||
radius: ['50%', '70%'],
|
||||
hoverAnimation: false,
|
||||
center: ['60%', '55%'],
|
||||
center: ['55%', '55%'],
|
||||
data: [
|
||||
{
|
||||
value: datas.value,
|
||||
|
|
|
@ -0,0 +1,144 @@
|
|||
<template>
|
||||
<div ref="chart" style="width: 100%; height:100%;"></div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { onMounted, reactive, ref } from "vue";
|
||||
// 局部引入echarts核心模块
|
||||
import * as echarts from "echarts";
|
||||
|
||||
const chart = ref(); // 创建DOM引用
|
||||
|
||||
const datas = {
|
||||
value: 62.16,
|
||||
}
|
||||
|
||||
let option = {
|
||||
series: [
|
||||
// 外圈背景
|
||||
{
|
||||
type: "pie",
|
||||
center: ["55%", "55%"],
|
||||
radius: ["70%", "90%"],
|
||||
hoverAnimation: false,
|
||||
clockWise: false,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
borderWidth: 1,
|
||||
borderColor: "rgba(193, 229, 255, .1)",
|
||||
color: new echarts.graphic.LinearGradient(1, 1, 1, 0, [
|
||||
{
|
||||
offset: 1,
|
||||
color: "rgba(127, 242, 255, .2)",
|
||||
},
|
||||
{
|
||||
offset: 0,
|
||||
color: "rgba(109, 195, 255, 0)",
|
||||
},
|
||||
]),
|
||||
},
|
||||
},
|
||||
tooltip: {
|
||||
show: false,
|
||||
},
|
||||
label: {
|
||||
show: false,
|
||||
},
|
||||
data: [100],
|
||||
},
|
||||
/*内心原型图,展示整体数据概览*/
|
||||
{
|
||||
name: 'pie',
|
||||
type: 'pie',
|
||||
roundCap: true,
|
||||
clockWise: true,
|
||||
startAngle: 180,
|
||||
labelLine: {
|
||||
show: false
|
||||
},
|
||||
radius: ['50%', '70%'],
|
||||
hoverAnimation: false,
|
||||
center: ['55%', '55%'],
|
||||
data: [
|
||||
{
|
||||
value: datas.value,
|
||||
label: {
|
||||
normal: {
|
||||
|
||||
position: 'center',
|
||||
show: true,
|
||||
textStyle: {
|
||||
fontSize: '24',
|
||||
fontWeight: 'normal',
|
||||
color: '#fff',
|
||||
lineHeight: 30,
|
||||
rich: {
|
||||
cell: {
|
||||
fontSize: '24',
|
||||
fontWeight: 'normal',
|
||||
color: '#fff',
|
||||
},
|
||||
text: {
|
||||
fontSize: 16,
|
||||
fontFamily: 'FZLanTingHeiS-L-GB',
|
||||
color: '#fff',
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: new echarts.graphic.LinearGradient(0, 1, 1, 0, [{
|
||||
offset: 0,
|
||||
color: 'rgba(255, 224, 0, 0.29)'
|
||||
}, {
|
||||
offset: 1,
|
||||
color: 'rgba(255, 224, 0, 1)'
|
||||
}]),
|
||||
shadowColor: 'rgba(1,1,1,0.5)',
|
||||
shadowBlur: 1
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
value: 100 - datas.value,
|
||||
name: '',
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: 'rgba(255, 224, 0, 0.1)', // 未完成的圆环的颜色
|
||||
label: {
|
||||
show: false
|
||||
},
|
||||
labelLine: {
|
||||
show: false
|
||||
}
|
||||
},
|
||||
emphasis: {
|
||||
color: 'rgba(255, 224, 0, 0.1)' // 未完成的圆环的颜色
|
||||
}
|
||||
}
|
||||
}]
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
// 使用生命钩子
|
||||
onMounted(() => {
|
||||
// 基于准备好的dom,初始化echarts实例
|
||||
// var myChart = echarts.init(document.getElementById('main'));
|
||||
// Vue3中: 需要引入
|
||||
var myChart = echarts.init(chart.value);
|
||||
|
||||
// init(); // vue3.2没有this
|
||||
// 使用刚指定的配置项和数据显示图表。
|
||||
myChart.setOption(option);
|
||||
|
||||
// 单图表响应式: 跟随浏览器大小改变
|
||||
// window.addEventListener("resize", () => {
|
||||
// myChart.resize();
|
||||
// });
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
|
@ -102,7 +102,7 @@ let option = {
|
|||
{
|
||||
name: "体检人数",
|
||||
type: "bar",
|
||||
data: [120, 49, 70, 23.2, 25.6],
|
||||
data: [120, 49, 70, 232, 25.6],
|
||||
barWidth: 20,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
|
|
|
@ -38,7 +38,7 @@ let option = {
|
|||
axisLabel: {
|
||||
//坐标轴刻度标签的相关设置
|
||||
textStyle: {
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -54,7 +54,7 @@ let option = {
|
|||
axisLabel: {
|
||||
//坐标轴刻度标签的相关设置
|
||||
textStyle: {
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -19,7 +19,7 @@ let option = {
|
|||
right: "11%",
|
||||
textStyle: {
|
||||
fontSize: 12,
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
grid: {
|
||||
|
@ -36,7 +36,7 @@ let option = {
|
|||
axisLabel: {
|
||||
//坐标轴刻度标签的相关设置
|
||||
textStyle: {
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
data: ["2019", "2020", "2021", "2022", "2023"],
|
||||
|
@ -64,7 +64,7 @@ let option = {
|
|||
axisLabel: {
|
||||
//坐标轴刻度标签的相关设置
|
||||
textStyle: {
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -21,7 +21,7 @@ let option = {
|
|||
right: "11%",
|
||||
textStyle: {
|
||||
fontSize: 12,
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
grid: {
|
||||
|
@ -39,7 +39,7 @@ let option = {
|
|||
axisLabel: {
|
||||
//坐标轴刻度标签的相关设置
|
||||
textStyle: {
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -55,7 +55,7 @@ let option = {
|
|||
axisLabel: {
|
||||
//坐标轴刻度标签的相关设置
|
||||
textStyle: {
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -38,7 +38,7 @@ let option = {
|
|||
axisLabel: {
|
||||
//坐标轴刻度标签的相关设置
|
||||
textStyle: {
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -54,7 +54,7 @@ let option = {
|
|||
axisLabel: {
|
||||
//坐标轴刻度标签的相关设置
|
||||
textStyle: {
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -1,150 +0,0 @@
|
|||
<template>
|
||||
<div ref="chart" style="width:100%;height:300px;"></div>
|
||||
</template>
|
||||
|
||||
<script setup >
|
||||
import {onMounted, reactive, ref} from "vue";
|
||||
// 局部引入echarts核心模块
|
||||
import * as echarts from 'echarts'
|
||||
|
||||
const chart =ref(); // 创建DOM引用
|
||||
|
||||
var plantCap = [{
|
||||
name: '中国工程院 \n\n 院士'
|
||||
}, {
|
||||
name: '计算机应用 \n\n 专家'
|
||||
}, {
|
||||
name: '浙江大学计算机 \n\n 科学与技术学院 \n\n 教授'
|
||||
}, {
|
||||
name: '国家数码喷印工程 \n\n 技术研究中心 \n\n 首席科学家'
|
||||
}, {
|
||||
name: '浙江大学信息 \n\n 学部主任'
|
||||
}, {
|
||||
name: '博士生导师'
|
||||
}];
|
||||
|
||||
var datalist = [{
|
||||
offset: [10, 73],
|
||||
symbolSize: 90,
|
||||
opacity: .95,
|
||||
color: '#C58F5A'
|
||||
}, {
|
||||
offset: [40, 63],
|
||||
symbolSize: 90,
|
||||
opacity: .88,
|
||||
color: '#076097'
|
||||
}, {
|
||||
offset: [80, 73],
|
||||
symbolSize: 130,
|
||||
opacity: .84,
|
||||
color: '#BF74CF'
|
||||
}, {
|
||||
offset: [20, 23],
|
||||
symbolSize: 140,
|
||||
opacity: .84,
|
||||
color: '#2D90ED'
|
||||
}, {
|
||||
offset: [60, 23],
|
||||
symbolSize: 95,
|
||||
opacity: .84,
|
||||
color: '#079773'
|
||||
}, {
|
||||
offset: [90, 33],
|
||||
symbolSize: 80,
|
||||
opacity: .84,
|
||||
color: '#C89D4A'
|
||||
}];
|
||||
var datas = [];
|
||||
for (var i = 0; i < plantCap.length; i++) {
|
||||
var item = plantCap[i];
|
||||
var itemToStyle = datalist[i];
|
||||
datas.push({
|
||||
name: item.name,
|
||||
value: itemToStyle.offset,
|
||||
symbolSize: itemToStyle.symbolSize,
|
||||
label: {
|
||||
normal: {
|
||||
textStyle: {
|
||||
fontSize: 12
|
||||
}
|
||||
}
|
||||
},
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: itemToStyle.color,
|
||||
opacity: itemToStyle.opacity
|
||||
}
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
let option = {
|
||||
grid: {
|
||||
show: false,
|
||||
top: 10,
|
||||
bottom: 10
|
||||
},
|
||||
xAxis: [{
|
||||
gridIndex: 0,
|
||||
type: 'value',
|
||||
show: false,
|
||||
min: 0,
|
||||
max: 100,
|
||||
nameLocation: 'middle',
|
||||
nameGap: 5
|
||||
}],
|
||||
yAxis: [{
|
||||
gridIndex: 0,
|
||||
min: 0,
|
||||
show: false,
|
||||
max: 100,
|
||||
nameLocation: 'middle',
|
||||
nameGap: 30
|
||||
}],
|
||||
series: [{
|
||||
type: 'scatter',
|
||||
symbol: 'circle',
|
||||
symbolSize: 120,
|
||||
label: {
|
||||
normal: {
|
||||
show: true,
|
||||
formatter: '{b}',
|
||||
color: '#fff',
|
||||
textStyle: {
|
||||
fontSize: '20'
|
||||
}
|
||||
},
|
||||
},
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: '#00acea'
|
||||
}
|
||||
},
|
||||
data: datas
|
||||
}]
|
||||
};
|
||||
|
||||
|
||||
// 使用生命钩子
|
||||
onMounted(() => {
|
||||
// 基于准备好的dom,初始化echarts实例
|
||||
// var myChart = echarts.init(document.getElementById('main'));
|
||||
// Vue3中: 需要引入
|
||||
var myChart = echarts.init(chart.value)
|
||||
|
||||
// init(); // vue3.2没有this
|
||||
// 使用刚指定的配置项和数据显示图表。
|
||||
myChart.setOption(option);
|
||||
|
||||
// 单图表响应式: 跟随浏览器大小改变
|
||||
window.addEventListener('resize',()=>{
|
||||
myChart.resize()
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
|
@ -0,0 +1,218 @@
|
|||
<template>
|
||||
<div ref="chart" style="width: 100%; height: 250px"></div>
|
||||
</template>
|
||||
|
||||
<script setup >
|
||||
import { onMounted, reactive, ref } from "vue";
|
||||
// 局部引入echarts核心模块
|
||||
import * as echarts from "echarts";
|
||||
|
||||
const chart = ref(); // 创建DOM引用
|
||||
|
||||
//展示数据
|
||||
const optionData = [];
|
||||
//扇形图颜色数据
|
||||
const colorList = [
|
||||
{ color1: "rgba(76,167,163,0.9)", color2: "rgba(90,255,223,1)" },
|
||||
{ color1: "rgba(65,149,99,0.9)", color2: "rgba(115,255,145,1)" },
|
||||
{ color1: "rgba(98,167,131,0.9)", color2: "rgba(153,255,179,1)" },
|
||||
{ color1: "rgba(127,177,108,0.9)", color2: "rgba(193,255,138,1)" },
|
||||
{ color1: "rgba(190,164,75,0.9)", color2: "rgba(255,207,74,1)" },
|
||||
{ color1: "rgba(165,123,98,0.9)", color2: "rgba(254,178,128,1)" },
|
||||
{ color1: "rgba(105,123,186,0.9)", color2: "rgba(151,176,255,1)" },
|
||||
{ color1: "rgba(106,102,173,0.9)", color2: "rgba(164,151,255,1)" },
|
||||
{ color1: "rgba(106,76,178,0.9)", color2: "rgba(159,110,254,1)" },
|
||||
{ color1: "rgba(134,109,188,0.9)", color2: "rgba(180,143,241,1)" },
|
||||
{ color1: "rgba(54,122,194,0.9)", color2: "rgba(76,174,254,1)" },
|
||||
];
|
||||
//请求的数据
|
||||
const resultData = [
|
||||
{
|
||||
name: "1-10岁",
|
||||
value: 95,
|
||||
},
|
||||
{
|
||||
name: "11-20岁",
|
||||
value: 120,
|
||||
},
|
||||
{
|
||||
name: "21-30岁",
|
||||
value: 98,
|
||||
},
|
||||
{
|
||||
name: "31-40岁",
|
||||
value: 90,
|
||||
},
|
||||
{
|
||||
name: "41-50岁",
|
||||
value: 100,
|
||||
},
|
||||
{
|
||||
name: "51-60岁",
|
||||
value: 97,
|
||||
},
|
||||
{
|
||||
name: "61-70岁",
|
||||
value: 100,
|
||||
},
|
||||
{
|
||||
name: "71-80岁",
|
||||
value: 100,
|
||||
},
|
||||
{
|
||||
name: "81-90岁",
|
||||
value: 100,
|
||||
},
|
||||
{
|
||||
name: "91-100岁",
|
||||
value: 100,
|
||||
},
|
||||
{
|
||||
name: "100岁以上",
|
||||
value: 100,
|
||||
},
|
||||
];
|
||||
let sum = 0;
|
||||
resultData.forEach((item) => {
|
||||
sum += item.value;
|
||||
});
|
||||
resultData.forEach((item) => {
|
||||
optionData.push({ value: item.value, name: item.name });
|
||||
optionData.push({
|
||||
name: "",
|
||||
value: sum / 100,
|
||||
itemStyle: { color: "transparent" },
|
||||
});
|
||||
});
|
||||
let option = {
|
||||
//你的代码
|
||||
legend: [
|
||||
{
|
||||
orient: "vertical",
|
||||
right: "10%",
|
||||
top: "10%",
|
||||
itemWidth: 25, // 可以设置图例标记的宽度
|
||||
itemHeight: 10, // 设置图例标记的高度,这里是椭圆的长轴
|
||||
itemGap: 20,
|
||||
itemStyle: {
|
||||
borderColor: "rgba(255,255,255,0.2)", // 图例边框颜色
|
||||
borderWidth: 8, // 图例边框宽度
|
||||
borderRadius:20,
|
||||
},
|
||||
textStyle: {
|
||||
color: "#ccc",
|
||||
fontSize: 12,
|
||||
rich: {
|
||||
name: {
|
||||
width: 80,
|
||||
fontSize: 16,
|
||||
},
|
||||
},
|
||||
},
|
||||
data: resultData,
|
||||
formatter: (name) => {
|
||||
if (resultData.length) {
|
||||
const item = resultData.filter((item) => item.name === name)[0];
|
||||
return `{name|${name}}`;
|
||||
}
|
||||
},
|
||||
},
|
||||
],
|
||||
tooltip: {
|
||||
trigger: "item",
|
||||
|
||||
formatter(params) {
|
||||
let res = "";
|
||||
const { marker, name, value } = params;
|
||||
if (name !== "") {
|
||||
res += `${marker}${name}:${value}`;
|
||||
}
|
||||
return res;
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
type: "pie",
|
||||
roseType: "radius",
|
||||
radius: ["20%", "85%"],
|
||||
center: ["25%", "53%"],
|
||||
label: {
|
||||
position: "inside",
|
||||
formatter(item) {
|
||||
if (item.name === "") {
|
||||
return "";
|
||||
}
|
||||
return "";
|
||||
},
|
||||
textStyle: {
|
||||
fontSize: 16,
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
labelLine: {
|
||||
show: false,
|
||||
},
|
||||
labelLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
width: 3,
|
||||
},
|
||||
normal: {
|
||||
length: 30, // 指示线长度
|
||||
length2: 30
|
||||
},
|
||||
},
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color(params) {
|
||||
return colorList[parseInt(params.dataIndex / 2)].color1;
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
z: 3,
|
||||
data: optionData,
|
||||
},
|
||||
{
|
||||
type: "pie",
|
||||
roseType: "radius",
|
||||
radius: ["20%", "87%"],
|
||||
center: ["25%", "53%"],
|
||||
label: {
|
||||
show: false,
|
||||
},
|
||||
labelLine: {
|
||||
show: false,
|
||||
},
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color(params) {
|
||||
return colorList[parseInt(params.dataIndex / 2)].color2;
|
||||
},
|
||||
},
|
||||
},
|
||||
z: 2,
|
||||
data: optionData,
|
||||
},
|
||||
],
|
||||
};
|
||||
// 使用生命钩子
|
||||
onMounted(() => {
|
||||
// 基于准备好的dom,初始化echarts实例
|
||||
// var myChart = echarts.init(document.getElementById('main'));
|
||||
// Vue3中: 需要引入
|
||||
var myChart = echarts.init(chart.value);
|
||||
|
||||
// init(); // vue3.2没有this
|
||||
// 使用刚指定的配置项和数据显示图表。
|
||||
myChart.setOption(option);
|
||||
|
||||
// 单图表响应式: 跟随浏览器大小改变
|
||||
// window.addEventListener("resize", () => {
|
||||
// myChart.resize();
|
||||
// });
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
</style>
|
|
@ -0,0 +1,239 @@
|
|||
<template>
|
||||
<div ref="chart" style="width: 100%; height: 120px"></div>
|
||||
</template>
|
||||
|
||||
<script setup >
|
||||
import { onMounted, reactive, ref } from "vue";
|
||||
// 局部引入echarts核心模块
|
||||
import * as echarts from "echarts";
|
||||
|
||||
const chart = ref(); // 创建DOM引用
|
||||
const data = [[140], [260], [330], [270]];
|
||||
const total = ref(0);
|
||||
const totalMax=ref(0);
|
||||
const lb=ref(0)
|
||||
data.forEach((item) => {
|
||||
console.log(item[0]);
|
||||
total.value += item[0];
|
||||
});
|
||||
totalMax.value=total.value*1.06;
|
||||
lb.value=Math.trunc(total.value*0.03);
|
||||
const option = {
|
||||
legend: {
|
||||
show: true,
|
||||
itemHeight: 12,
|
||||
itemWidth: 30,
|
||||
textStyle: {
|
||||
fontSize: 16,
|
||||
color: "#fff",
|
||||
},
|
||||
top: 70,
|
||||
left: 30,
|
||||
itemGap: 20, // 垂直间距
|
||||
y: "top", // 延Y轴居中
|
||||
data: ["17岁以下", "18-34岁", "35-69岁", "60岁以上"],
|
||||
},
|
||||
grid: { left: "2%", right: "2%", top: "10%" },
|
||||
xAxis: [
|
||||
{ type: "value", show: false, max: totalMax.value },
|
||||
{ type: "value", show: false, max: totalMax.value },
|
||||
],
|
||||
yAxis: [
|
||||
{
|
||||
type: "category",
|
||||
show: false,
|
||||
axisTick: {
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
type: "category",
|
||||
show: false,
|
||||
axisTick: {
|
||||
show: false,
|
||||
},
|
||||
},
|
||||
],
|
||||
series: [
|
||||
{
|
||||
type: "bar",
|
||||
data: [lb.value],
|
||||
stack: "income",
|
||||
barWidth: 18,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: "rgba(255,255,255,0)",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
type: "bar",
|
||||
name: "17岁以下",
|
||||
data: data[0],
|
||||
stack: "income",
|
||||
barWidth: 18,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [
|
||||
{
|
||||
offset: 0,
|
||||
color: "#62CDFF",
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: "#9BE8FF",
|
||||
},
|
||||
]),
|
||||
barBorderRadius: [100, 0, 0, 100],
|
||||
},
|
||||
},
|
||||
label: {
|
||||
normal: {
|
||||
show: true,
|
||||
position: ["25%", "-60%"],
|
||||
formatter: `${Math.trunc(data[0][0]*100/total.value)}%`,
|
||||
color: "#fff",
|
||||
fontSize: 22,
|
||||
fontWeight: 600,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
type: "bar",
|
||||
name: "18-34岁",
|
||||
data: data[1],
|
||||
stack: "income",
|
||||
barWidth: 18,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [
|
||||
{
|
||||
offset: 0,
|
||||
color: "#2355EA",
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: "#3873DD",
|
||||
},
|
||||
]),
|
||||
barBorderRadius: [0, 0, 0, 0],
|
||||
},
|
||||
},
|
||||
label: {
|
||||
normal: {
|
||||
show: true,
|
||||
position: ["35%", "-60%"],
|
||||
formatter: `${Math.trunc(data[1][0]*100/total.value)}%`,
|
||||
color: "#fff",
|
||||
fontSize: 22,
|
||||
fontWeight: 600,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
type: "bar",
|
||||
name: "35-69岁",
|
||||
data: data[2],
|
||||
stack: "income",
|
||||
barWidth: 18,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [
|
||||
{
|
||||
offset: 0,
|
||||
color: "#42D6B2",
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: "#9BFFD3",
|
||||
},
|
||||
]),
|
||||
barBorderRadius: [0, 0, 0, 0],
|
||||
},
|
||||
},
|
||||
label: {
|
||||
normal: {
|
||||
show: true,
|
||||
position: ["35%", "-60%"],
|
||||
formatter: `${Math.trunc(data[2][0]*100/total.value)}%`,
|
||||
color: "#fff",
|
||||
fontSize: 22,
|
||||
fontWeight: 600,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
type: "bar",
|
||||
name: "60岁以上",
|
||||
data: data[3],
|
||||
stack: "income",
|
||||
barWidth: 18,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [
|
||||
{
|
||||
offset: 0,
|
||||
color: "#FFAA62",
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: "#FFE89B",
|
||||
},
|
||||
]),
|
||||
barBorderRadius: [0, 100, 100, 0],
|
||||
},
|
||||
},
|
||||
label: {
|
||||
normal: {
|
||||
show: true,
|
||||
position: ["35%", "-60%"],
|
||||
formatter: `${Math.trunc(data[3][0]*100/total.value)}%`,
|
||||
color: "#fff",
|
||||
fontSize: 22,
|
||||
fontWeight: 600,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
type: "bar",
|
||||
data: [lb.value],
|
||||
stack: "income",
|
||||
barWidth: 18,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: "rgba(255,255,255,0)",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
type: "bar",
|
||||
xAxisIndex: 1,
|
||||
yAxisIndex: 1,
|
||||
itemStyle: {
|
||||
color: "rgba(255,255,255,0.1)",
|
||||
barBorderRadius: [100, 100, 100, 100],
|
||||
},
|
||||
data: ["2019"].map(() => totalMax.value),
|
||||
barWidth: 50,
|
||||
},
|
||||
],
|
||||
};
|
||||
onMounted(() => {
|
||||
// 基于准备好的dom,初始化echarts实例
|
||||
// var myChart = echarts.init(document.getElementById('main'));
|
||||
// Vue3中: 需要引入
|
||||
var myChart = echarts.init(chart.value);
|
||||
|
||||
// init(); // vue3.2没有this
|
||||
// 使用刚指定的配置项和数据显示图表。
|
||||
myChart.setOption(option);
|
||||
|
||||
// 单图表响应式: 跟随浏览器大小改变
|
||||
// window.addEventListener("resize", () => {
|
||||
// myChart.resize();
|
||||
// });
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
</style>
|
|
@ -10,44 +10,15 @@ import * as echarts from "echarts";
|
|||
const chart = ref(); // 创建DOM引用
|
||||
|
||||
const data = [120, 200, 50, 80, 70];
|
||||
const lineData = [150, 230, 24, 218, 135];
|
||||
const lineData = [1500, 2300, 204, 2018, 1305];
|
||||
const max = data
|
||||
.concat(lineData)
|
||||
.reduce((pre, cur) => (pre > cur ? pre : cur), 0); //找到这个新数组中的最大值
|
||||
// 背景颜色
|
||||
const color = [
|
||||
{
|
||||
type: "linear",
|
||||
x: 0,
|
||||
x2: 0,
|
||||
y: 0,
|
||||
y2: 1,
|
||||
colorStops: [
|
||||
{
|
||||
offset: 0,
|
||||
color: "rgba(142, 187, 255, 1)",
|
||||
},
|
||||
{
|
||||
offset: 0.5,
|
||||
color: "rgba(142, 187, 255, 0.5)",
|
||||
},
|
||||
{
|
||||
offset: 1,
|
||||
color: "rgba(142, 187, 255, 0.20)",
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
const option = {
|
||||
tooltip: {
|
||||
trigger: "axis",
|
||||
formatter: "{b0}<br/> {a0}:{c0}<br/>{a1}:{c1}",
|
||||
axisPointer: {
|
||||
type: "cross",
|
||||
label: {
|
||||
backgroundColor: "#3F82F7", //提示文字标题颜色
|
||||
},
|
||||
},
|
||||
},
|
||||
legend: {
|
||||
data: ["救助金额", "救助人数"],
|
||||
|
@ -65,7 +36,7 @@ const option = {
|
|||
color: "#ffffff",
|
||||
},
|
||||
calculable: true,
|
||||
color,
|
||||
|
||||
xAxis: [
|
||||
{
|
||||
type: "category",
|
||||
|
@ -92,7 +63,7 @@ const option = {
|
|||
type: "value",
|
||||
scale: true,
|
||||
name: "救助人数",
|
||||
max: max,
|
||||
|
||||
splitLine: {
|
||||
//分割线配置
|
||||
show: false,
|
||||
|
@ -121,7 +92,7 @@ const option = {
|
|||
type: "value",
|
||||
scale: true,
|
||||
min: 0,
|
||||
max: max,
|
||||
|
||||
name: "救助金额/万",
|
||||
splitLine: {
|
||||
show: false,
|
||||
|
@ -146,9 +117,35 @@ const option = {
|
|||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
type: "value",
|
||||
min: 0,
|
||||
max: 100,
|
||||
splitLine: {
|
||||
show: false,
|
||||
lineStyle: {
|
||||
type: "solid",
|
||||
color: "rgb(221, 242, 255,0.1)",
|
||||
},
|
||||
},
|
||||
axisLine: {
|
||||
show: false,
|
||||
lineStyle: {
|
||||
type: "dotted",
|
||||
},
|
||||
},
|
||||
axisLabel: {
|
||||
show: false,
|
||||
fontSize: 14,
|
||||
fontFamily: "MicrosoftYaHei",
|
||||
color: "#DEF1FF",
|
||||
lineHeight: 19,
|
||||
},
|
||||
},
|
||||
],
|
||||
series: [
|
||||
{
|
||||
yAxisIndex: 1,
|
||||
name: "救助金额",
|
||||
data: lineData,
|
||||
type: "line", //线状图
|
||||
|
@ -162,6 +159,7 @@ const option = {
|
|||
},
|
||||
},
|
||||
{
|
||||
yAxisIndex: 0,
|
||||
name: "救助人数",
|
||||
data: data,
|
||||
barWidth: 20,
|
||||
|
@ -180,12 +178,9 @@ const option = {
|
|||
},
|
||||
},
|
||||
{
|
||||
type: "bar",
|
||||
xAxisIndex: 1,
|
||||
itemStyle: {
|
||||
color: "rgba(180, 180, 180, 0.2)", //外阴影背景
|
||||
},
|
||||
data: data.map(() => max),
|
||||
barWidth: 40, //外阴影背景宽
|
||||
yAxisIndex: 2,
|
||||
emphasis: {
|
||||
itemStyle: {
|
||||
color: {
|
||||
|
@ -207,7 +202,11 @@ const option = {
|
|||
},
|
||||
},
|
||||
},
|
||||
type: "bar",
|
||||
itemStyle: {
|
||||
color: "rgba(221, 242, 255, 0.1)",
|
||||
},
|
||||
data: ["2019", "2020", "2021", "2022", "2023"].map(() => 100),
|
||||
barWidth: 50,
|
||||
},
|
||||
],
|
||||
};
|
||||
|
|
|
@ -44,12 +44,7 @@ const option = {
|
|||
tooltip: {
|
||||
trigger: "axis",
|
||||
formatter: "{b0}<br/> {a0}:{c0}<br/>{a1}:{c1}",
|
||||
axisPointer: {
|
||||
type: "cross",
|
||||
label: {
|
||||
backgroundColor: "#3F82F7", //提示文字标题颜色
|
||||
},
|
||||
},
|
||||
|
||||
},
|
||||
legend: {
|
||||
data: ["救助金额", "救助人数"],
|
||||
|
|
|
@ -36,13 +36,8 @@ const color = [
|
|||
const option = {
|
||||
tooltip: {
|
||||
trigger: "axis",
|
||||
formatter: "{b0}<br/> {a0}:{c0}<br/>{a1}:{c1}",
|
||||
axisPointer: {
|
||||
type: "cross",
|
||||
label: {
|
||||
backgroundColor: "#3F82F7", //提示文字标题颜色
|
||||
},
|
||||
},
|
||||
formatter: "{b0}<br/> {a0}:{c0}<br/>{a1}:{c1}<br/>{a2}:{c2}<br/>{a3}:{c3}<br/>{a4}:{c4}",
|
||||
|
||||
},
|
||||
legend: [
|
||||
{
|
||||
|
@ -153,6 +148,7 @@ const option = {
|
|||
},
|
||||
},
|
||||
},
|
||||
|
||||
],
|
||||
series: [
|
||||
{
|
||||
|
|
|
@ -30,12 +30,7 @@ const option = {
|
|||
tooltip: {
|
||||
trigger: "axis",
|
||||
formatter: "{b0}<br/> {a0}:{c0}<br/>{a1}:{c1}",
|
||||
axisPointer: {
|
||||
type: "cross",
|
||||
label: {
|
||||
backgroundColor: "#3F82F7", //提示文字标题颜色
|
||||
},
|
||||
},
|
||||
|
||||
},
|
||||
|
||||
legend: {
|
||||
|
|
|
@ -21,7 +21,7 @@ let option = {
|
|||
right: "15%",
|
||||
textStyle: {
|
||||
fontSize: 12,
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
grid: {
|
||||
|
@ -46,7 +46,7 @@ let option = {
|
|||
axisLabel: {
|
||||
//坐标轴刻度标签的相关设置
|
||||
textStyle: {
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -62,7 +62,7 @@ let option = {
|
|||
axisLabel: {
|
||||
//坐标轴刻度标签的相关设置
|
||||
textStyle: {
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -21,7 +21,7 @@ let option = {
|
|||
right: "15%",
|
||||
textStyle: {
|
||||
fontSize: 12,
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
grid: {
|
||||
|
@ -46,7 +46,7 @@ let option = {
|
|||
axisLabel: {
|
||||
//坐标轴刻度标签的相关设置
|
||||
textStyle: {
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -62,7 +62,7 @@ let option = {
|
|||
axisLabel: {
|
||||
//坐标轴刻度标签的相关设置
|
||||
textStyle: {
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -21,7 +21,7 @@ let option = {
|
|||
right: "11%",
|
||||
textStyle: {
|
||||
fontSize: 12,
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
grid: {
|
||||
|
@ -38,7 +38,7 @@ let option = {
|
|||
axisLabel: {
|
||||
//坐标轴刻度标签的相关设置
|
||||
textStyle: {
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -54,7 +54,7 @@ let option = {
|
|||
axisLabel: {
|
||||
//坐标轴刻度标签的相关设置
|
||||
textStyle: {
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -19,7 +19,7 @@ let option = {
|
|||
right: "11%",
|
||||
textStyle: {
|
||||
fontSize: 12,
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
grid: {
|
||||
|
@ -35,7 +35,7 @@ let option = {
|
|||
axisLabel: {
|
||||
//坐标轴刻度标签的相关设置
|
||||
textStyle: {
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
data: ["2019", "2020", "2021", "2022", "2023"],
|
||||
|
@ -64,7 +64,7 @@ let option = {
|
|||
axisLabel: {
|
||||
//坐标轴刻度标签的相关设置
|
||||
textStyle: {
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -19,7 +19,7 @@ let option = {
|
|||
right: "11%",
|
||||
textStyle: {
|
||||
fontSize: 12,
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
grid: {
|
||||
|
@ -35,7 +35,7 @@ let option = {
|
|||
axisLabel: {
|
||||
//坐标轴刻度标签的相关设置
|
||||
textStyle: {
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
data: ["2019", "2020", "2021", "2022", "2023"],
|
||||
|
@ -63,7 +63,7 @@ let option = {
|
|||
axisLabel: {
|
||||
//坐标轴刻度标签的相关设置
|
||||
textStyle: {
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -21,7 +21,7 @@ let option = {
|
|||
right: "11%",
|
||||
textStyle: {
|
||||
fontSize: 12,
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
grid: {
|
||||
|
@ -38,7 +38,7 @@ let option = {
|
|||
axisLabel: {
|
||||
//坐标轴刻度标签的相关设置
|
||||
textStyle: {
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -54,7 +54,7 @@ let option = {
|
|||
axisLabel: {
|
||||
//坐标轴刻度标签的相关设置
|
||||
textStyle: {
|
||||
color: "#ccc",
|
||||
color: "#ffffff",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<div ref="chart" style="width:100%;height:calc(100% - 200px);min-height:200px;"></div>
|
||||
<div ref="chart" style="width:100%;height:250px;"></div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
|
|
|
@ -60,7 +60,7 @@ const option = {
|
|||
grid: {
|
||||
left: "6%",
|
||||
right: "9%",
|
||||
bottom: "0%",
|
||||
bottom: "2%",
|
||||
containLabel: true,
|
||||
color: "#ffffff",
|
||||
},
|
||||
|
|
|
@ -6,10 +6,12 @@
|
|||
<eP1></eP1>
|
||||
<div class="t_1"></div>
|
||||
<div class="t_2">
|
||||
<div class="t_3" v-for="(item,index) in fl" :key="index">
|
||||
<div class="top">{{item.value}}%</div>
|
||||
<div :class='item.cls'></div>
|
||||
<div class="right">{{item.name}}</div>
|
||||
<div class="t_2_1" v-for="(item, index) in fl" :key="index">
|
||||
<div class="top">{{ item.value }}%</div>
|
||||
<div class="t_3">
|
||||
<div :class="item.cls"></div>
|
||||
<div class="right">{{ item.name }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1198,10 +1200,19 @@ onBeforeMount(() => {
|
|||
background-size: 100% 100%;
|
||||
}
|
||||
.t_2 {
|
||||
margin-top: 35px;
|
||||
margin-top: 5px;
|
||||
padding: 0 10px;
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
.t_2_1 {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
.top {
|
||||
font-size: 26px;
|
||||
color: #ffffff;
|
||||
line-height: 30px;
|
||||
}
|
||||
.t_3 {
|
||||
width: 135px;
|
||||
height: 90px;
|
||||
|
@ -1209,14 +1220,7 @@ onBeforeMount(() => {
|
|||
background-repeat: no-repeat;
|
||||
background-size: 100% 100%;
|
||||
position: relative;
|
||||
.top {
|
||||
position: absolute;
|
||||
left: 38px;
|
||||
top: -25px;
|
||||
font-size: 26px;
|
||||
color: #ffffff;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
.left1 {
|
||||
position: absolute;
|
||||
left: 15px;
|
||||
|
@ -1274,6 +1278,7 @@ onBeforeMount(() => {
|
|||
font-style: normal;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<style lang="scss">
|
||||
|
|
|
@ -79,14 +79,14 @@
|
|||
<div class="leftImg"><eP4></eP4></div>
|
||||
<div class="left_me">
|
||||
<div>建档率</div>
|
||||
<div style="margin-top: 5px">92.96%</div>
|
||||
<div class="bo">92.96%</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="rightImg"></div>
|
||||
<div class="rightImg"><eP4_1></eP4_1></div>
|
||||
<div class="right_me">
|
||||
<div>家庭医生</div>
|
||||
<div style="margin-top: 5px">2000</div>
|
||||
<div>家庭医生签约率</div>
|
||||
<div class="bo">62.16%</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -141,6 +141,7 @@ import eP7 from "./echarts_hygiene/eP7.vue";
|
|||
import eP6 from "./echarts_hygiene/eP6.vue";
|
||||
import eP5 from "./echarts_hygiene/eP5.vue";
|
||||
import eP4 from "./echarts_hygiene/eP4.vue";
|
||||
import eP4_1 from "./echarts_hygiene/eP4_1.vue";
|
||||
import tnb from "./echarts_hygiene/tnb.vue";
|
||||
import gxy from "./echarts_hygiene/gxy.vue";
|
||||
import { ref, onMounted, onBeforeMount } from "vue";
|
||||
|
@ -209,6 +210,7 @@ const change = (name, index) => {
|
|||
}
|
||||
|
||||
.familyPlanning {
|
||||
width: 96%;
|
||||
background-image: url(@/assets/images/hygiene/center_title_2.png);
|
||||
background-repeat: no-repeat;
|
||||
background-size: 100% 100%;
|
||||
|
@ -311,11 +313,13 @@ const change = (name, index) => {
|
|||
}
|
||||
|
||||
.center_1 {
|
||||
width: 96%;
|
||||
background-image: url(@/assets/images/hygiene/center_title_1.png);
|
||||
background-repeat: no-repeat;
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
.center_2 {
|
||||
width: 96%;
|
||||
background-image: url(@/assets/images/hygiene/new_center.png);
|
||||
background-repeat: no-repeat;
|
||||
background-size: 100% 100%;
|
||||
|
@ -384,7 +388,7 @@ const change = (name, index) => {
|
|||
.right_bg {
|
||||
width: 642px;
|
||||
box-sizing: border-box;
|
||||
padding-left: 10px;
|
||||
padding-left: 20px;
|
||||
margin-right: 28px;
|
||||
background-image: url(@/assets/images/right_bg.png);
|
||||
background-repeat: no-repeat;
|
||||
|
@ -545,48 +549,7 @@ const change = (name, index) => {
|
|||
border-bottom: 13px solid rgba(57, 59, 109, 1);
|
||||
}
|
||||
}
|
||||
.history2 {
|
||||
font-size: 26px;
|
||||
color: #ffffff;
|
||||
line-height: 30px;
|
||||
letter-spacing: 1px;
|
||||
text-align: center;
|
||||
font-style: normal;
|
||||
font-family: PangMenZhengDao;
|
||||
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
.va {
|
||||
margin-top: 27px;
|
||||
margin-bottom: 20px;
|
||||
font-family: DINAlternate, DINAlternate;
|
||||
|
||||
font-size: 26px;
|
||||
color: #ffffff;
|
||||
line-height: 30px;
|
||||
letter-spacing: 1px;
|
||||
text-shadow: 0px 2px 4px rgba(255, 255, 255, 0.5);
|
||||
text-align: right;
|
||||
font-style: normal;
|
||||
}
|
||||
img {
|
||||
width: 113px;
|
||||
height: 121px;
|
||||
}
|
||||
|
||||
.historyimg {
|
||||
margin-top: 10px;
|
||||
padding: 0 25px;
|
||||
background-image: url(@/assets/images/hygiene/xtgl_1.png);
|
||||
background-size: 100% 100%;
|
||||
background-repeat: no-repeat;
|
||||
font-size: 15px;
|
||||
color: #ffffff;
|
||||
line-height: 21px;
|
||||
letter-spacing: 2px;
|
||||
}
|
||||
}
|
||||
.concernLabel {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
@ -705,11 +668,54 @@ const change = (name, index) => {
|
|||
height: 250px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-around;
|
||||
}
|
||||
.history2 {
|
||||
font-size: 26px;
|
||||
color: #ffffff;
|
||||
line-height: 30px;
|
||||
letter-spacing: 1px;
|
||||
text-align: center;
|
||||
font-style: normal;
|
||||
font-family: PangMenZhengDao;
|
||||
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
.va {
|
||||
margin-top: 27px;
|
||||
margin-bottom: 20px;
|
||||
|
||||
font-family: DINAlternate, DINAlternate;
|
||||
font-weight: bold;
|
||||
font-size: 20px;
|
||||
color: #ffffff;
|
||||
line-height: 24px;
|
||||
letter-spacing: 1px;
|
||||
text-shadow: 0px 0px 23px rgba(0, 252, 255, 0.5);
|
||||
text-align: center;
|
||||
font-style: normal;
|
||||
}
|
||||
img {
|
||||
width: 113px;
|
||||
height: 121px;
|
||||
}
|
||||
|
||||
.historyimg {
|
||||
margin-top: 10px;
|
||||
padding: 0 25px;
|
||||
background-image: url(@/assets/images/hygiene/xtgl_1.png);
|
||||
background-size: 100% 100%;
|
||||
background-repeat: no-repeat;
|
||||
font-size: 15px;
|
||||
color: #ffffff;
|
||||
line-height: 21px;
|
||||
letter-spacing: 2px;
|
||||
}
|
||||
}
|
||||
.minTopPart2 {
|
||||
width: 368px;
|
||||
height: 145px;
|
||||
margin-left: 5px;
|
||||
width: 420px;
|
||||
height: 136px;
|
||||
background-image: url(@/assets/images/hygiene/xia_1.png);
|
||||
background-repeat: no-repeat;
|
||||
background-size: 100% 100%;
|
||||
|
@ -717,50 +723,69 @@ const change = (name, index) => {
|
|||
position: relative;
|
||||
display: flex;
|
||||
margin-top: 35px;
|
||||
padding: 0 5px;
|
||||
box-sizing: border-box;
|
||||
.left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-left: 10px;
|
||||
margin-top: -10px;
|
||||
margin-left: 13px;
|
||||
.leftImg {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.left_me {
|
||||
margin-left: 10px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
font-family: PingFangSC, PingFang SC;
|
||||
font-weight: 500;
|
||||
font-size: 16px;
|
||||
font-size: 14px;
|
||||
color: #ffffff;
|
||||
line-height: 22px;
|
||||
line-height: 20px;
|
||||
letter-spacing: 2px;
|
||||
text-shadow: 0px 0px 4px rgba(255, 255, 255, 0.65);
|
||||
|
||||
.bo {
|
||||
margin-top: 5px;
|
||||
font-family: DINAlternate, DINAlternate;
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
color: #00fffc;
|
||||
line-height: 21px;
|
||||
text-shadow: 0px 0px 13px rgba(0, 252, 255, 0.5);
|
||||
}
|
||||
}
|
||||
}
|
||||
.right {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
// justify-content: center;
|
||||
margin-left: 10px;
|
||||
|
||||
.rightImg {
|
||||
width: 78px;
|
||||
height: 78px;
|
||||
background-image: url(@/assets/images/hygiene/xia_right.png);
|
||||
background-repeat: no-repeat;
|
||||
background-size: 100% 100%;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.right_me {
|
||||
margin-left: 10px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
font-family: PingFangSC, PingFang SC;
|
||||
font-weight: 500;
|
||||
font-size: 16px;
|
||||
font-size: 14px;
|
||||
color: #ffffff;
|
||||
line-height: 22px;
|
||||
line-height: 20px;
|
||||
letter-spacing: 2px;
|
||||
text-shadow: 0px 0px 4px rgba(255, 255, 255, 0.65);
|
||||
.bo {
|
||||
margin-top: 5px;
|
||||
font-family: DINAlternate, DINAlternate;
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
color: #ffe92c;
|
||||
line-height: 21px;
|
||||
text-shadow: 0px 0px 13px rgba(0, 252, 255, 0.5);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
1674
src/view/sy.vue
117
src/view/yl.vue
|
@ -4,31 +4,11 @@
|
|||
<div class="flex1">
|
||||
<div class="yd_title left_1">
|
||||
<span class="text">
|
||||
<img
|
||||
v-if="leftchoose.first == '1'"
|
||||
src="@/assets/images/ylbx_1.png"
|
||||
class="c"
|
||||
style="width: 160px"
|
||||
/>
|
||||
<img
|
||||
v-else
|
||||
src="@/assets/images/ylbx_1_1.png"
|
||||
class="c"
|
||||
@click="change('first', '1')"
|
||||
/>
|
||||
<img
|
||||
v-if="leftchoose.first == '2'"
|
||||
src="@/assets/images/ylbx_1.png"
|
||||
class="c"
|
||||
style="width: 160px"
|
||||
/>
|
||||
<img
|
||||
v-else
|
||||
src="@/assets/images/ylbx_2_1.png"
|
||||
class="c"
|
||||
@click="change('first', '2')"
|
||||
style="height:35px;width:120px;margin-right:10px;"
|
||||
/>
|
||||
<img v-if="leftchoose.first == '1'" src="@/assets/images/ylbx_1.png" class="c" style="width: 160px" />
|
||||
<img v-else src="@/assets/images/ylbx_1_1.png" class="c" @click="change('first', '1')" />
|
||||
<img v-if="leftchoose.first == '2'" src="@/assets/images/ylbx_1.png" class="c" style="width: 160px" />
|
||||
<img v-else src="@/assets/images/ylbx_2_1.png" class="c" @click="change('first', '2')"
|
||||
style="height:35px;width:120px;margin-right:10px;" />
|
||||
</span>
|
||||
</div>
|
||||
<ePie v-if="leftchoose.first == '1'"></ePie>
|
||||
|
@ -37,30 +17,10 @@
|
|||
<div class="flex1" style="margin-top: 10px">
|
||||
<div class="yd_title left_2">
|
||||
<span class="text">
|
||||
<img
|
||||
v-if="leftchoose.second == '1'"
|
||||
src="@/assets/images/gllrbt_1.png"
|
||||
class="c"
|
||||
style="width: 160px"
|
||||
/>
|
||||
<img
|
||||
v-else
|
||||
src="@/assets/images/gllrbt_1_1.png"
|
||||
class="c"
|
||||
@click="change('second', '1')"
|
||||
/>
|
||||
<img
|
||||
v-if="leftchoose.second == '2'"
|
||||
src="@/assets/images/gllrbt_1.png"
|
||||
class="c"
|
||||
style="width: 160px"
|
||||
/>
|
||||
<img
|
||||
v-else
|
||||
src="@/assets/images/gllrbt_2_1.png"
|
||||
class="c"
|
||||
@click="change('second', '2')"
|
||||
/>
|
||||
<img v-if="leftchoose.second == '1'" src="@/assets/images/gllrbt_1.png" class="c" style="width: 160px" />
|
||||
<img v-else src="@/assets/images/gllrbt_1_1.png" class="c" @click="change('second', '1')" />
|
||||
<img v-if="leftchoose.second == '2'" src="@/assets/images/gllrbt_1.png" class="c" style="width: 160px" />
|
||||
<img v-else src="@/assets/images/gllrbt_2_1.png" class="c" @click="change('second', '2')" />
|
||||
</span>
|
||||
</div>
|
||||
<eP2 v-if="leftchoose.second == '1'"></eP2>
|
||||
|
@ -69,30 +29,10 @@
|
|||
<div class="flex1" style="margin-top: 10px">
|
||||
<div class="yd_title left_3">
|
||||
<span class="text">
|
||||
<img
|
||||
v-if="leftchoose.third == '1'"
|
||||
src="@/assets/images/tkjz_1.png"
|
||||
class="c"
|
||||
style="width: 160px"
|
||||
/>
|
||||
<img
|
||||
v-else
|
||||
src="@/assets/images/tkjz_1_1.png"
|
||||
class="c"
|
||||
@click="change('third', '1')"
|
||||
/>
|
||||
<img
|
||||
v-if="leftchoose.third == '2'"
|
||||
src="@/assets/images/tkjz_1.png"
|
||||
class="c"
|
||||
style="width: 160px"
|
||||
/>
|
||||
<img
|
||||
v-else
|
||||
src="@/assets/images/tkjz_2_1.png"
|
||||
class="c"
|
||||
@click="change('third', '2')"
|
||||
/>
|
||||
<img v-if="leftchoose.third == '1'" src="@/assets/images/tkjz_1.png" class="c" style="width: 160px" />
|
||||
<img v-else src="@/assets/images/tkjz_1_1.png" class="c" @click="change('third', '1')" />
|
||||
<img v-if="leftchoose.third == '2'" src="@/assets/images/tkjz_1.png" class="c" style="width: 160px" />
|
||||
<img v-else src="@/assets/images/tkjz_2_1.png" class="c" @click="change('third', '2')" />
|
||||
</span>
|
||||
</div>
|
||||
<eP3 v-if="leftchoose.third == '1'"></eP3>
|
||||
|
@ -163,11 +103,7 @@
|
|||
</div>
|
||||
<div class="flex1">
|
||||
<div class="mealAssistance">
|
||||
<img
|
||||
class="mealAssistanceimg"
|
||||
src="@/assets/YLimg/ylimg7.png"
|
||||
alt=""
|
||||
/>
|
||||
<img class="mealAssistanceimg" src="@/assets/YLimg/ylimg7.png" alt="" />
|
||||
</div>
|
||||
<ylXZZC></ylXZZC>
|
||||
</div>
|
||||
|
@ -188,6 +124,7 @@ import ylJHSY from "./echarts_yl/ylJHSY.vue";
|
|||
import ylSMFW from "./echarts_yl/ylSMFW.vue";
|
||||
import ylXZZC from "./echarts_yl/ylXZZC.vue";
|
||||
import { ref, onMounted, onBeforeMount } from "vue";
|
||||
import http from "@/utils/request.js";
|
||||
const leftchoose = ref({
|
||||
first: "1",
|
||||
second: "1",
|
||||
|
@ -196,6 +133,16 @@ const leftchoose = ref({
|
|||
const change = (name, index) => {
|
||||
leftchoose.value[name] = index;
|
||||
};
|
||||
onMounted(() => {
|
||||
getPie1();
|
||||
});
|
||||
const getPie1 = () => {
|
||||
http.get("/api/ggfwyth/yl").then((res) => {
|
||||
if (res.code == 200) {
|
||||
console.log(res.data);
|
||||
}
|
||||
});
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
@ -246,6 +193,7 @@ const change = (name, index) => {
|
|||
top: 1px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.c {
|
||||
width: 130px;
|
||||
height: 42px;
|
||||
|
@ -286,11 +234,13 @@ const change = (name, index) => {
|
|||
justify-content: space-between;
|
||||
padding: 10px 36px 0px 20px;
|
||||
box-sizing: border-box;
|
||||
|
||||
.visit {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.medicalService {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
@ -303,6 +253,7 @@ const change = (name, index) => {
|
|||
|
||||
.medicalServiceTop {
|
||||
position: relative;
|
||||
|
||||
span {
|
||||
position: absolute;
|
||||
left: 45px;
|
||||
|
@ -320,6 +271,7 @@ const change = (name, index) => {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
.mealAssistance {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
@ -366,6 +318,7 @@ const change = (name, index) => {
|
|||
background-repeat: no-repeat;
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
|
||||
.center_bg {
|
||||
width: 582px;
|
||||
// height: 100%;
|
||||
|
@ -376,15 +329,17 @@ const change = (name, index) => {
|
|||
background-repeat: no-repeat;
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
|
||||
.right_bg {
|
||||
width: 642px;
|
||||
box-sizing: border-box;
|
||||
padding-left: 10px;
|
||||
padding-left: 20px;
|
||||
margin-right: 28px;
|
||||
background-image: url(@/assets/images/right_bg.png);
|
||||
background-repeat: no-repeat;
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
|
||||
.basicInformation {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
|
@ -484,6 +439,7 @@ const change = (name, index) => {
|
|||
display: flex;
|
||||
justify-content: space-around;
|
||||
align-items: center;
|
||||
|
||||
.history1 {
|
||||
font-size: 26px;
|
||||
color: #ffffff;
|
||||
|
@ -650,6 +606,7 @@ const change = (name, index) => {
|
|||
background-repeat: no-repeat;
|
||||
background-size: 100% 100%;
|
||||
margin: 4px auto;
|
||||
margin-top: 10px;
|
||||
position: relative;
|
||||
|
||||
.mtpImg1 {
|
||||
|
@ -673,6 +630,7 @@ const change = (name, index) => {
|
|||
top: 49px;
|
||||
right: 23px;
|
||||
}
|
||||
|
||||
.mtpImg3 {
|
||||
width: 125px;
|
||||
height: 36px;
|
||||
|
@ -696,6 +654,7 @@ const change = (name, index) => {
|
|||
font-size: 26px;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.mtpText2 {
|
||||
width: 140px;
|
||||
height: 30px;
|
||||
|
|
|
@ -11,15 +11,15 @@ export default defineConfig({
|
|||
open: true,
|
||||
base: "./ ", //生产环境路径
|
||||
// hmr: true,
|
||||
// proxy: {
|
||||
// // 第一个代理
|
||||
// "/app": {
|
||||
// // 匹配到啥来进行方向代理
|
||||
// target: "https://mall.btdit.cn/", //周源
|
||||
// changeOrigin: true, //是否支持跨域
|
||||
// //rewrite: (path) => path.replace(/^\/api/, '') // 如果不需要api 直接把路径上的api 替换成空,这个
|
||||
// },
|
||||
// },
|
||||
proxy: {
|
||||
// 第一个代理
|
||||
"/api": {
|
||||
// 匹配到啥来进行方向代理
|
||||
target: "http://192.168.2.42:8095/", //周源
|
||||
changeOrigin: true, //是否支持跨域
|
||||
//rewrite: (path) => path.replace(/^\/api/, '') // 如果不需要api 直接把路径上的api 替换成空,这个
|
||||
},
|
||||
},
|
||||
},
|
||||
define: {
|
||||
"process.env": {
|
||||
|
@ -37,6 +37,7 @@ export default defineConfig({
|
|||
|
||||
build: {
|
||||
chunkSizeWarningLimit: 1500,
|
||||
assetsDir: 'assets2', // 指定生成静态文件目录
|
||||
assetsDir: 'assets', // 指定生成静态文件目录
|
||||
},
|
||||
base: './'
|
||||
});
|
||||
|
|
129
yarn.lock
|
@ -9,12 +9,12 @@
|
|||
|
||||
"@ctrl/tinycolor@^3.4.1":
|
||||
version "3.6.1"
|
||||
resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz#b6c75a56a1947cc916ea058772d666a2c8932f31"
|
||||
resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz"
|
||||
integrity sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==
|
||||
|
||||
"@element-plus/icons-vue@^2.3.1":
|
||||
version "2.3.1"
|
||||
resolved "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz#1f635ad5fdd5c85ed936481525570e82b5a8307a"
|
||||
resolved "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz"
|
||||
integrity sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==
|
||||
|
||||
"@esbuild/android-arm64@0.17.14":
|
||||
|
@ -128,45 +128,45 @@
|
|||
integrity sha512-gPQmsi2DKTaEgG14hc3CHXHp62k8g6qr0Pas+I4lUxRMugGSATh/Bi8Dgusoz9IQ0IfdrvLpco6kujEIBoaogA==
|
||||
|
||||
"@floating-ui/core@^1.0.0":
|
||||
version "1.6.0"
|
||||
resolved "https://registry.npmmirror.com/@floating-ui/core/-/core-1.6.0.tgz#fa41b87812a16bf123122bf945946bae3fdf7fc1"
|
||||
integrity sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==
|
||||
version "1.6.1"
|
||||
resolved "https://registry.npmmirror.com/@floating-ui/core/-/core-1.6.1.tgz"
|
||||
integrity sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==
|
||||
dependencies:
|
||||
"@floating-ui/utils" "^0.2.1"
|
||||
"@floating-ui/utils" "^0.2.0"
|
||||
|
||||
"@floating-ui/dom@^1.0.1":
|
||||
version "1.6.3"
|
||||
resolved "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.6.3.tgz#954e46c1dd3ad48e49db9ada7218b0985cee75ef"
|
||||
integrity sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==
|
||||
version "1.6.5"
|
||||
resolved "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.6.5.tgz"
|
||||
integrity sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==
|
||||
dependencies:
|
||||
"@floating-ui/core" "^1.0.0"
|
||||
"@floating-ui/utils" "^0.2.0"
|
||||
|
||||
"@floating-ui/utils@^0.2.0", "@floating-ui/utils@^0.2.1":
|
||||
version "0.2.1"
|
||||
resolved "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2"
|
||||
integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==
|
||||
"@floating-ui/utils@^0.2.0":
|
||||
version "0.2.2"
|
||||
resolved "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.2.tgz"
|
||||
integrity sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==
|
||||
|
||||
"@popperjs/core@npm:@sxzz/popperjs-es@^2.11.7":
|
||||
version "2.11.7"
|
||||
resolved "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz#a7f69e3665d3da9b115f9e71671dae1b97e13671"
|
||||
resolved "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz"
|
||||
integrity sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==
|
||||
|
||||
"@types/lodash-es@^4.17.6":
|
||||
version "4.17.12"
|
||||
resolved "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz#65f6d1e5f80539aa7cfbfc962de5def0cf4f341b"
|
||||
resolved "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz"
|
||||
integrity sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==
|
||||
dependencies:
|
||||
"@types/lodash" "*"
|
||||
|
||||
"@types/lodash@*", "@types/lodash@^4.14.182":
|
||||
version "4.17.0"
|
||||
resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.0.tgz#d774355e41f372d5350a4d0714abb48194a489c3"
|
||||
integrity sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==
|
||||
version "4.17.1"
|
||||
resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.1.tgz"
|
||||
integrity sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q==
|
||||
|
||||
"@types/web-bluetooth@^0.0.16":
|
||||
version "0.0.16"
|
||||
resolved "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz#1d12873a8e49567371f2a75fe3e7f7edca6662d8"
|
||||
resolved "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz"
|
||||
integrity sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==
|
||||
|
||||
"@vitejs/plugin-vue@^4.1.0":
|
||||
|
@ -271,7 +271,7 @@
|
|||
|
||||
"@vueuse/core@^9.1.0":
|
||||
version "9.13.0"
|
||||
resolved "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz#2f69e66d1905c1e4eebc249a01759cf88ea00cf4"
|
||||
resolved "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz"
|
||||
integrity sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==
|
||||
dependencies:
|
||||
"@types/web-bluetooth" "^0.0.16"
|
||||
|
@ -281,12 +281,12 @@
|
|||
|
||||
"@vueuse/metadata@9.13.0":
|
||||
version "9.13.0"
|
||||
resolved "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz#bc25a6cdad1b1a93c36ce30191124da6520539ff"
|
||||
resolved "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz"
|
||||
integrity sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==
|
||||
|
||||
"@vueuse/shared@9.13.0":
|
||||
version "9.13.0"
|
||||
resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz#089ff4cc4e2e7a4015e57a8f32e4b39d096353b9"
|
||||
resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz"
|
||||
integrity sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==
|
||||
dependencies:
|
||||
vue-demi "*"
|
||||
|
@ -301,9 +301,23 @@ anymatch@~3.1.2:
|
|||
|
||||
async-validator@^4.2.5:
|
||||
version "4.2.5"
|
||||
resolved "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz#c96ea3332a521699d0afaaceed510a54656c6339"
|
||||
resolved "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz"
|
||||
integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==
|
||||
|
||||
asynckit@^0.4.0:
|
||||
version "0.4.0"
|
||||
resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz"
|
||||
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
|
||||
|
||||
axios@^1.6.8:
|
||||
version "1.6.8"
|
||||
resolved "https://registry.npmmirror.com/axios/-/axios-1.6.8.tgz"
|
||||
integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==
|
||||
dependencies:
|
||||
follow-redirects "^1.15.6"
|
||||
form-data "^4.0.0"
|
||||
proxy-from-env "^1.1.0"
|
||||
|
||||
binary-extensions@^2.0.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz"
|
||||
|
@ -336,15 +350,27 @@ claygl@^1.2.1:
|
|||
resolved "https://registry.npmmirror.com/claygl/-/claygl-1.3.0.tgz"
|
||||
integrity sha512-+gGtJjT6SSHD2l2yC3MCubW/sCV40tZuSs5opdtn79vFSGUgp/lH139RNEQ6Jy078/L0aV8odCw8RSrUcMfLaQ==
|
||||
|
||||
combined-stream@^1.0.8:
|
||||
version "1.0.8"
|
||||
resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz"
|
||||
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
|
||||
dependencies:
|
||||
delayed-stream "~1.0.0"
|
||||
|
||||
csstype@^2.6.8:
|
||||
version "2.6.21"
|
||||
resolved "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz"
|
||||
integrity sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==
|
||||
|
||||
dayjs@^1.11.3:
|
||||
version "1.11.10"
|
||||
resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0"
|
||||
integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==
|
||||
version "1.11.11"
|
||||
resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.11.tgz"
|
||||
integrity sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==
|
||||
|
||||
delayed-stream@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz"
|
||||
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
|
||||
|
||||
echarts-gl@^2.0.9:
|
||||
version "2.0.9"
|
||||
|
@ -368,9 +394,9 @@ echarts@^5.4.2:
|
|||
zrender "5.4.3"
|
||||
|
||||
element-plus@^2.7.0:
|
||||
version "2.7.0"
|
||||
resolved "https://registry.npmmirror.com/element-plus/-/element-plus-2.7.0.tgz#1d72b06946c46a6f18e5315610b7f0147b8efb24"
|
||||
integrity sha512-WAiaFLavuWFxof9qwkC27jvkh9nRcNnB506g1vvJSiVaVqjCBWUFCIyJKeN11M1qcv2cS5VV5PfSLjTIkrw87A==
|
||||
version "2.7.2"
|
||||
resolved "https://registry.npmmirror.com/element-plus/-/element-plus-2.7.2.tgz"
|
||||
integrity sha512-AdEzBU/A68iUleio0MkQ46JeU5SeQvFFd915GJFScJmUEo5AmYg3OQ4pVjcu+p3b3Nupg9MC5Wa4xjAiC51kUg==
|
||||
dependencies:
|
||||
"@ctrl/tinycolor" "^3.4.1"
|
||||
"@element-plus/icons-vue" "^2.3.1"
|
||||
|
@ -418,7 +444,7 @@ esbuild@^0.17.5:
|
|||
|
||||
escape-html@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
|
||||
resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz"
|
||||
integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
|
||||
|
||||
estree-walker@^2.0.2:
|
||||
|
@ -433,6 +459,20 @@ fill-range@^7.0.1:
|
|||
dependencies:
|
||||
to-regex-range "^5.0.1"
|
||||
|
||||
follow-redirects@^1.15.6:
|
||||
version "1.15.6"
|
||||
resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.6.tgz"
|
||||
integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==
|
||||
|
||||
form-data@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz"
|
||||
integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
|
||||
dependencies:
|
||||
asynckit "^0.4.0"
|
||||
combined-stream "^1.0.8"
|
||||
mime-types "^2.1.12"
|
||||
|
||||
fsevents@~2.3.2:
|
||||
version "2.3.3"
|
||||
resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
|
||||
|
@ -495,17 +535,17 @@ is-number@^7.0.0:
|
|||
|
||||
lodash-es@^4.17.21:
|
||||
version "4.17.21"
|
||||
resolved "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
|
||||
resolved "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz"
|
||||
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
|
||||
|
||||
lodash-unified@^1.0.2:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz#80b1eac10ed2eb02ed189f08614a29c27d07c894"
|
||||
resolved "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz"
|
||||
integrity sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==
|
||||
|
||||
lodash@^4.17.21:
|
||||
version "4.17.21"
|
||||
resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
|
||||
resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz"
|
||||
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
|
||||
|
||||
magic-string@^0.25.7:
|
||||
|
@ -517,9 +557,21 @@ magic-string@^0.25.7:
|
|||
|
||||
memoize-one@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045"
|
||||
resolved "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz"
|
||||
integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==
|
||||
|
||||
mime-db@1.52.0:
|
||||
version "1.52.0"
|
||||
resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz"
|
||||
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
|
||||
|
||||
mime-types@^2.1.12:
|
||||
version "2.1.35"
|
||||
resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz"
|
||||
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
|
||||
dependencies:
|
||||
mime-db "1.52.0"
|
||||
|
||||
nanoid@^3.3.4:
|
||||
version "3.3.6"
|
||||
resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz"
|
||||
|
@ -532,7 +584,7 @@ normalize-path@^3.0.0, normalize-path@~3.0.0:
|
|||
|
||||
normalize-wheel-es@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz#0fa2593d619f7245a541652619105ab076acf09e"
|
||||
resolved "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz"
|
||||
integrity sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==
|
||||
|
||||
path-parse@^1.0.7:
|
||||
|
@ -559,6 +611,11 @@ postcss@^8.1.10, postcss@^8.4.21:
|
|||
picocolors "^1.0.0"
|
||||
source-map-js "^1.0.2"
|
||||
|
||||
proxy-from-env@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz"
|
||||
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
|
||||
|
||||
readdirp@~3.6.0:
|
||||
version "3.6.0"
|
||||
resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz"
|
||||
|
@ -637,7 +694,7 @@ vite@^4.2.0:
|
|||
|
||||
vue-demi@*:
|
||||
version "0.14.7"
|
||||
resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.7.tgz#8317536b3ef74c5b09f268f7782e70194567d8f2"
|
||||
resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.7.tgz"
|
||||
integrity sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==
|
||||
|
||||
vue-router@^4.1.6:
|
||||
|
|