已修改13个文件
已删除2个文件
已添加3个文件
已重命名3个文件
| | |
| | | ElMenuItem: typeof import('element-plus/es')['ElMenuItem'] |
| | | ElOption: typeof import('element-plus/es')['ElOption'] |
| | | ElPagination: typeof import('element-plus/es')['ElPagination'] |
| | | ElRadio: typeof import('element-plus/es')['ElRadio'] |
| | | ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup'] |
| | | ElRow: typeof import('element-plus/es')['ElRow'] |
| | | ElScrollbar: typeof import('element-plus/es')['ElScrollbar'] |
| | | ElSelect: typeof import('element-plus/es')['ElSelect'] |
| | | ElSkeleton: typeof import('element-plus/es')['ElSkeleton'] |
| | | ElSpace: typeof import('element-plus/es')['ElSpace'] |
| | | ElSubMenu: typeof import('element-plus/es')['ElSubMenu'] |
| | | ElTable: typeof import('element-plus/es')['ElTable'] |
| | | ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] |
| | | ElTag: typeof import('element-plus/es')['ElTag'] |
| | | ElText: typeof import('element-plus/es')['ElText'] |
| | | ElTimeline: typeof import('element-plus/es')['ElTimeline'] |
| | | ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem'] |
| | | IconCommunity: typeof import('./src/components/icons/IconCommunity.vue')['default'] |
| | | IconDocumentation: typeof import('./src/components/icons/IconDocumentation.vue')['default'] |
| | | IconEcosystem: typeof import('./src/components/icons/IconEcosystem.vue')['default'] |
| | |
| | | "version": "0.0.0", |
| | | "dependencies": { |
| | | "@element-plus/icons-vue": "^2.1.0", |
| | | "@vueuse/core": "^10.4.1", |
| | | "axios": "^1.4.0", |
| | | "axiosInstance": "^1.4.0", |
| | | "dayjs": "^1.11.9", |
| | |
| | | "dev": true |
| | | }, |
| | | "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==" |
| | | "version": "0.0.17", |
| | | "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", |
| | | "integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==" |
| | | }, |
| | | "node_modules/@typescript-eslint/eslint-plugin": { |
| | | "version": "5.59.11", |
| | |
| | | "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==" |
| | | }, |
| | | "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==", |
| | | "version": "10.4.1", |
| | | "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.4.1.tgz", |
| | | "integrity": "sha512-DkHIfMIoSIBjMgRRvdIvxsyboRZQmImofLyOHADqiVbQVilP8VVHDhBX2ZqoItOgu7dWa8oXiNnScOdPLhdEXg==", |
| | | "dependencies": { |
| | | "@types/web-bluetooth": "^0.0.16", |
| | | "@vueuse/metadata": "9.13.0", |
| | | "@vueuse/shared": "9.13.0", |
| | | "vue-demi": "*" |
| | | "@types/web-bluetooth": "^0.0.17", |
| | | "@vueuse/metadata": "10.4.1", |
| | | "@vueuse/shared": "10.4.1", |
| | | "vue-demi": ">=0.14.5" |
| | | } |
| | | }, |
| | | "node_modules/@vueuse/core/node_modules/vue-demi": { |
| | |
| | | } |
| | | } |
| | | }, |
| | | "node_modules/@vueuse/integrations/node_modules/@types/web-bluetooth": { |
| | | "version": "0.0.17", |
| | | "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", |
| | | "integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==", |
| | | "dev": true |
| | | }, |
| | | "node_modules/@vueuse/integrations/node_modules/@vueuse/core": { |
| | | "version": "10.2.1", |
| | | "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.2.1.tgz", |
| | |
| | | } |
| | | }, |
| | | "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==" |
| | | "version": "10.4.1", |
| | | "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.4.1.tgz", |
| | | "integrity": "sha512-2Sc8X+iVzeuMGHr6O2j4gv/zxvQGGOYETYXEc41h0iZXIRnRbJZGmY/QP8dvzqUelf8vg0p/yEA5VpCEu+WpZg==" |
| | | }, |
| | | "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==", |
| | | "version": "10.4.1", |
| | | "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.4.1.tgz", |
| | | "integrity": "sha512-vz5hbAM4qA0lDKmcr2y3pPdU+2EVw/yzfRsBdu+6+USGa4PxqSQRYIUC9/NcT06y+ZgaTsyURw2I9qOFaaXHAg==", |
| | | "dependencies": { |
| | | "vue-demi": "*" |
| | | "vue-demi": ">=0.14.5" |
| | | } |
| | | }, |
| | | "node_modules/@vueuse/shared/node_modules/vue-demi": { |
| | | "version": "0.14.5", |
| | | "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.5.tgz", |
| | | "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", |
| | | "version": "0.14.6", |
| | | "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz", |
| | | "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", |
| | | "hasInstallScript": true, |
| | | "bin": { |
| | | "vue-demi-fix": "bin/vue-demi-fix.js", |
| | |
| | | }, |
| | | "peerDependencies": { |
| | | "vue": "^3.2.0" |
| | | } |
| | | }, |
| | | "node_modules/element-plus/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/element-plus/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/element-plus/node_modules/@vueuse/core/node_modules/vue-demi": { |
| | | "version": "0.14.6", |
| | | "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz", |
| | | "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", |
| | | "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/element-plus/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/element-plus/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/element-plus/node_modules/@vueuse/shared/node_modules/vue-demi": { |
| | | "version": "0.14.6", |
| | | "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz", |
| | | "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", |
| | | "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/error-ex": { |
| | |
| | | "vite": "^3.0.0-0 || ^4.0.0-0" |
| | | } |
| | | }, |
| | | "node_modules/vite-plugin-vue-devtools/node_modules/@types/web-bluetooth": { |
| | | "version": "0.0.17", |
| | | "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", |
| | | "integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==", |
| | | "dev": true |
| | | }, |
| | | "node_modules/vite-plugin-vue-devtools/node_modules/@vueuse/core": { |
| | | "version": "10.2.1", |
| | | "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.2.1.tgz", |
| | | "integrity": "sha512-c441bfMbkAwTNwVRHQ0zdYZNETK//P84rC01aP2Uy/aRFCiie9NE/k9KdIXbno0eDYP5NPUuWv0aA/I4Unr/7w==", |
| | | "dev": true, |
| | | "dependencies": { |
| | | "@types/web-bluetooth": "^0.0.17", |
| | | "@vueuse/metadata": "10.2.1", |
| | | "@vueuse/shared": "10.2.1", |
| | | "vue-demi": ">=0.14.5" |
| | | } |
| | | }, |
| | | "node_modules/vite-plugin-vue-devtools/node_modules/@vueuse/metadata": { |
| | | "version": "10.2.1", |
| | | "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.2.1.tgz", |
| | | "integrity": "sha512-3Gt68mY/i6bQvFqx7cuGBzrCCQu17OBaGWS5JdwISpMsHnMKKjC2FeB5OAfMcCQ0oINfADP3i9A4PPRo0peHdQ==", |
| | | "dev": true |
| | | }, |
| | | "node_modules/vite-plugin-vue-devtools/node_modules/@vueuse/shared": { |
| | | "version": "10.2.1", |
| | | "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.2.1.tgz", |
| | | "integrity": "sha512-QWHq2bSuGptkcxx4f4M/fBYC3Y8d3M2UYyLsyzoPgEoVzJURQ0oJeWXu79OiLlBb8gTKkqe4mO85T/sf39mmiw==", |
| | | "dev": true, |
| | | "dependencies": { |
| | | "vue-demi": ">=0.14.5" |
| | | } |
| | | }, |
| | | "node_modules/vite-plugin-vue-devtools/node_modules/brace-expansion": { |
| | | "version": "2.0.1", |
| | | "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", |
| | |
| | | "dev": true |
| | | }, |
| | | "@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==" |
| | | "version": "0.0.17", |
| | | "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", |
| | | "integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==" |
| | | }, |
| | | "@typescript-eslint/eslint-plugin": { |
| | | "version": "5.59.11", |
| | |
| | | "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==" |
| | | }, |
| | | "@vueuse/core": { |
| | | "version": "9.13.0", |
| | | "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz", |
| | | "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==", |
| | | "version": "10.4.1", |
| | | "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.4.1.tgz", |
| | | "integrity": "sha512-DkHIfMIoSIBjMgRRvdIvxsyboRZQmImofLyOHADqiVbQVilP8VVHDhBX2ZqoItOgu7dWa8oXiNnScOdPLhdEXg==", |
| | | "requires": { |
| | | "@types/web-bluetooth": "^0.0.16", |
| | | "@vueuse/metadata": "9.13.0", |
| | | "@vueuse/shared": "9.13.0", |
| | | "vue-demi": "*" |
| | | "@types/web-bluetooth": "^0.0.17", |
| | | "@vueuse/metadata": "10.4.1", |
| | | "@vueuse/shared": "10.4.1", |
| | | "vue-demi": ">=0.14.5" |
| | | }, |
| | | "dependencies": { |
| | | "vue-demi": { |
| | |
| | | "vue-demi": ">=0.14.5" |
| | | }, |
| | | "dependencies": { |
| | | "@types/web-bluetooth": { |
| | | "version": "0.0.17", |
| | | "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", |
| | | "integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==", |
| | | "dev": true |
| | | }, |
| | | "@vueuse/core": { |
| | | "version": "10.2.1", |
| | | "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.2.1.tgz", |
| | |
| | | } |
| | | }, |
| | | "@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==" |
| | | "version": "10.4.1", |
| | | "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.4.1.tgz", |
| | | "integrity": "sha512-2Sc8X+iVzeuMGHr6O2j4gv/zxvQGGOYETYXEc41h0iZXIRnRbJZGmY/QP8dvzqUelf8vg0p/yEA5VpCEu+WpZg==" |
| | | }, |
| | | "@vueuse/shared": { |
| | | "version": "9.13.0", |
| | | "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz", |
| | | "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==", |
| | | "version": "10.4.1", |
| | | "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.4.1.tgz", |
| | | "integrity": "sha512-vz5hbAM4qA0lDKmcr2y3pPdU+2EVw/yzfRsBdu+6+USGa4PxqSQRYIUC9/NcT06y+ZgaTsyURw2I9qOFaaXHAg==", |
| | | "requires": { |
| | | "vue-demi": "*" |
| | | "vue-demi": ">=0.14.5" |
| | | }, |
| | | "dependencies": { |
| | | "vue-demi": { |
| | | "version": "0.14.5", |
| | | "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.5.tgz", |
| | | "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", |
| | | "version": "0.14.6", |
| | | "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz", |
| | | "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", |
| | | "requires": {} |
| | | } |
| | | } |
| | |
| | | "lodash-unified": "^1.0.2", |
| | | "memoize-one": "^6.0.0", |
| | | "normalize-wheel-es": "^1.2.0" |
| | | }, |
| | | "dependencies": { |
| | | "@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==" |
| | | }, |
| | | "@vueuse/core": { |
| | | "version": "9.13.0", |
| | | "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz", |
| | | "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==", |
| | | "requires": { |
| | | "@types/web-bluetooth": "^0.0.16", |
| | | "@vueuse/metadata": "9.13.0", |
| | | "@vueuse/shared": "9.13.0", |
| | | "vue-demi": "*" |
| | | }, |
| | | "dependencies": { |
| | | "vue-demi": { |
| | | "version": "0.14.6", |
| | | "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz", |
| | | "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", |
| | | "requires": {} |
| | | } |
| | | } |
| | | }, |
| | | "@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==" |
| | | }, |
| | | "@vueuse/shared": { |
| | | "version": "9.13.0", |
| | | "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz", |
| | | "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==", |
| | | "requires": { |
| | | "vue-demi": "*" |
| | | }, |
| | | "dependencies": { |
| | | "vue-demi": { |
| | | "version": "0.14.6", |
| | | "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz", |
| | | "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", |
| | | "requires": {} |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "error-ex": { |
| | |
| | | "xterm-addon-fit": "^0.7.0" |
| | | }, |
| | | "dependencies": { |
| | | "@types/web-bluetooth": { |
| | | "version": "0.0.17", |
| | | "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz", |
| | | "integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==", |
| | | "dev": true |
| | | }, |
| | | "@vueuse/core": { |
| | | "version": "10.2.1", |
| | | "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.2.1.tgz", |
| | | "integrity": "sha512-c441bfMbkAwTNwVRHQ0zdYZNETK//P84rC01aP2Uy/aRFCiie9NE/k9KdIXbno0eDYP5NPUuWv0aA/I4Unr/7w==", |
| | | "dev": true, |
| | | "requires": { |
| | | "@types/web-bluetooth": "^0.0.17", |
| | | "@vueuse/metadata": "10.2.1", |
| | | "@vueuse/shared": "10.2.1", |
| | | "vue-demi": ">=0.14.5" |
| | | } |
| | | }, |
| | | "@vueuse/metadata": { |
| | | "version": "10.2.1", |
| | | "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.2.1.tgz", |
| | | "integrity": "sha512-3Gt68mY/i6bQvFqx7cuGBzrCCQu17OBaGWS5JdwISpMsHnMKKjC2FeB5OAfMcCQ0oINfADP3i9A4PPRo0peHdQ==", |
| | | "dev": true |
| | | }, |
| | | "@vueuse/shared": { |
| | | "version": "10.2.1", |
| | | "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.2.1.tgz", |
| | | "integrity": "sha512-QWHq2bSuGptkcxx4f4M/fBYC3Y8d3M2UYyLsyzoPgEoVzJURQ0oJeWXu79OiLlBb8gTKkqe4mO85T/sf39mmiw==", |
| | | "dev": true, |
| | | "requires": { |
| | | "vue-demi": ">=0.14.5" |
| | | } |
| | | }, |
| | | "brace-expansion": { |
| | | "version": "2.0.1", |
| | | "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", |
| | |
| | | }, |
| | | "dependencies": { |
| | | "@element-plus/icons-vue": "^2.1.0", |
| | | "@vueuse/core": "^10.4.1", |
| | | "axios": "^1.4.0", |
| | | "axiosInstance": "^1.4.0", |
| | | "dayjs": "^1.11.9", |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import {$http} from '@/api/index.js'; |
| | | |
| | | export default { |
| | | /** |
| | | * æ ¹æ®ç«ç¹ï¼æ¶é´æ®µæ¥è¯¢åæè¡¨æææ°æ® |
| | | * @paramï¼ è¯·æ±åæ°å¯¹è±¡ |
| | | * @returns |
| | | */ |
| | | fetchAllData(argsObj){ |
| | | return $http.get('dust/analysisall',{params:argsObj}); |
| | | } |
| | | } |
| | |
| | | |
| | | <el-menu |
| | | active-text-color="#F7BA1E" |
| | | background-color="#0093E9" |
| | | background-color="#2876aa" |
| | | class="el-menu-vertical-demo" |
| | | default-active="2" |
| | | text-color="#fff" |
| | |
| | | <el-sub-menu index="1"> |
| | | <template #title> |
| | | <el-icon><i-ep-Monitor /></el-icon> |
| | | <span>åé©è¯ä¼°</span> |
| | | <span class="parent-title">åé©è¯ä¼°</span> |
| | | </template> |
| | | |
| | | <el-menu-item index="avgDay" @click="selected = optionClick[0]"> |
| | |
| | | <el-sub-menu index="2"> |
| | | <template #title> |
| | | <el-icon><i-ep-Histogram /></el-icon> |
| | | <span>线ä¸å·¡æ£</span> |
| | | <span class="parent-title">线ä¸å·¡æ£</span> |
| | | </template> |
| | | <el-menu-item index="edata" @click="selected = optionClick[2]"> |
| | | <el-icon><i-ep-Bell /></el-icon> |
| | |
| | | <el-sub-menu index="3"> |
| | | <template #title> |
| | | <el-icon><i-ep-DataLine /></el-icon> |
| | | <span>æ°æ®ç®¡ç</span> |
| | | <span class="parent-title">æ°æ®ç®¡ç</span> |
| | | </template> |
| | | |
| | | |
| | |
| | | <el-sub-menu index="4"> |
| | | <template #title> |
| | | <el-icon><i-ep-DataLine /></el-icon> |
| | | <span>é
置管ç</span> |
| | | <span class="parent-title">é
置管ç</span> |
| | | </template> |
| | | |
| | | <el-menu-item index="setting" @click="selected = optionClick[6]"> |
| | |
| | | |
| | | <style lang="scss" scoped> |
| | | .el-aside { |
| | | background-color: #0093E9; |
| | | background-color: #2876aa; |
| | | |
| | | |
| | | height: 100vh; |
| | |
| | | } |
| | | |
| | | .el-menu { |
| | | background-color: #0093E9; |
| | | background-color: #2876aa; |
| | | |
| | | width: 220px; |
| | | border-right: none; |
| | |
| | | .slot-lable { |
| | | color: #f7f8fa; |
| | | } |
| | | .parent-title { |
| | | font-weight: bold; |
| | | font-size: 18px; |
| | | } |
| | | </style> |
| | |
| | | align-items: center; |
| | | color: white; |
| | | background-color: #0093E9; |
| | | background-image: linear-gradient(160deg, #0093E9 0%, #80D0C7 100%); |
| | | background-image: linear-gradient(160deg, #2876aa 0%, #5cbfdd 100%); |
| | | |
| | | |
| | | |
| | |
| | | padding: 0; |
| | | // overflow-y: hidden; |
| | | } |
| | | |
| | | * { |
| | | font-family: 'KaiGenGothicSC-Light'; |
| | | } |
| | | </style> |
| | | |
| | |
| | | { |
| | | path:"/avgDay", |
| | | name:'avgDay', |
| | | component: () => import('@/views/line_graph/dayMonthAvgData.vue') |
| | | component: () => import('@/views/line_graph/DataRiskModel.vue') |
| | | }, |
| | | |
| | | |
| | |
| | | { |
| | | path:"/analysis", |
| | | name:'analysis', |
| | | component: () => import('@/views/line_graph/analysisData.vue') |
| | | component: () => import('@/views/line_graph/DataRiskRank.vue') |
| | | }, |
| | | |
| | | // å岿°æ®ç®¡ç |
| | |
| | | { |
| | | path:"/edata", |
| | | name:'edata', |
| | | component: () => import('@/views/exception/ExceptionData.vue') |
| | | component: () => import('@/views/exception/FlightInspection.vue') |
| | | }, |
| | | |
| | | // å¼å¸¸æµè¯ |
| | |
| | | requestExceptionData() { |
| | | // ä¸å页 |
| | | exceptionApi |
| | | .exceptiondata1( |
| | | this.siteName, |
| | | this.exceptionType, |
| | | this.beginTime, |
| | | this.endTime |
| | | .exceptiondata1({ |
| | | siteName: this.siteName, |
| | | exceptionType:this.exceptionType, |
| | | beginTime:this.beginTime, |
| | | endTime:this.endTime |
| | | } |
| | | ) |
| | | .then((result) => { |
| | | //å°è¿åçç»æä¼ éç»ç¶ç»ä»¶ |
| | |
| | | // è¿åçææå¼å¸¸ç±»å |
| | | exceptionType:[], |
| | | //å·²å¾éçå¼å¸¸ |
| | | checkedList: [] |
| | | checkedList: [], |
| | | // å
¨é |
| | | checkAll:false, |
| | | isIndeterminate:false, |
| | | } |
| | | }, |
| | | mounted() { |
| | |
| | | // è·åä¸åçå¼å¸¸åç§° |
| | | getExceptionType(){ |
| | | this.$http.get('/dust/exceptiontype').then(response=>{ |
| | | this.exceptionType = response.data.data |
| | | // this.exceptionType = response.data.data |
| | | response.data.data.forEach(item => { |
| | | this.exceptionType.push(item.exceptionType) |
| | | }); |
| | | console.log(this.exceptionType); |
| | | }) |
| | | } |
| | | }, |
| | | handleCheckAllChange (val) { |
| | | this.checkedList = val ? this.exceptionType : [] |
| | | this.isIndeterminate = false |
| | | this.$emit('submitValue',this.checkedList) |
| | | }, |
| | | handleCheckedExceptionChange (value) { |
| | | const checkedCount = value.length |
| | | this.checkAll = checkedCount === this.exceptionType.length |
| | | this.isIndeterminate = checkedCount > 0 && checkedCount < this.exceptionType.length |
| | | this.$emit('submitValue',this.checkedList) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | |
| | | <template> |
| | | <div class="excption"> |
| | | <span class="exception-text">å¼å¸¸ç±»åï¼</span> |
| | | <el-checkbox-group v-model="checkedList" @change="$emit('submitValue',checkedList)"> |
| | | <el-checkbox :label="item.exceptionType" v-for="item in exceptionType" :key="item"> |
| | | <el-checkbox |
| | | v-model="checkAll" |
| | | :indeterminate="isIndeterminate" |
| | | @change="handleCheckAllChange" |
| | | class="select-text" |
| | | >å
¨é</el-checkbox |
| | | > |
| | | <el-checkbox-group v-model="checkedList" @change="handleCheckedExceptionChange"> |
| | | <el-checkbox :label="item" v-for="item in exceptionType" :key="item"> |
| | | <template #default> |
| | | <span v-if="item.exceptionType == '0'">æçµææç½</span> |
| | | <span v-else-if="item.exceptionType == '1'">æ°æ®è¶
ä½</span> |
| | | <span v-else-if="item.exceptionType == '2'">è¶
æ </span> |
| | | <span v-else-if="item.exceptionType == '3'">æ°æ®é¿æ¶æ®µæ æ³¢å¨</span> |
| | | <span v-else-if="item.exceptionType == '4'">é级çªåå¼å¸¸</span> |
| | | <span v-else-if="item.exceptionType == '5'">临è¿è¶
æ å¼å¸¸</span> |
| | | <span v-else-if="item.exceptionType == '6'">忥è¶
æ æ¬¡æ°ä¸´çå¼å¸¸</span> |
| | | <span v-else-if="item.exceptionType == '7'">æ»å¨å¹³åå¼çªå</span> |
| | | <span v-if="item == '0'">æçµææç½</span> |
| | | <span v-else-if="item == '1'">æ°æ®è¶
ä½</span> |
| | | <span v-else-if="item == '2'">è¶
æ </span> |
| | | <span v-else-if="item == '3'">æ°æ®é¿æ¶æ®µæ æ³¢å¨</span> |
| | | <span v-else-if="item == '4'">é级çªåå¼å¸¸</span> |
| | | <span v-else-if="item == '5'">临è¿è¶
æ å¼å¸¸</span> |
| | | <span v-else-if="item == '6'">忥è¶
æ æ¬¡æ°ä¸´çå¼å¸¸</span> |
| | | <span v-else-if="item == '7'">æ»å¨å¹³åå¼çªå</span> |
| | | </template> |
| | | </el-checkbox> |
| | | </el-checkbox-group> |
| | |
| | | |
| | | <style lang="scss" scoped> |
| | | .excption { |
| | | display: flex; |
| | | display: flex; |
| | | } |
| | | .exception-text { |
| | | font-weight: bold; |
| | |
| | | .el-checkbox-group { |
| | | margin-top: 5px; |
| | | } |
| | | .select-text { |
| | | margin-top: 5px; |
| | | margin-right: 5px; |
| | | } |
| | | </style> |
| | |
| | | import * as XLSX from 'xlsx/xlsx.mjs'; |
| | | export function useCommonFunction(){ |
| | | /** |
| | | * descriptionï¼å¤æèµ·å§æ¶é´è·¨åº¦æ¯å¦è¶
è¿1个æ |
| | |
| | | * @returnsï¼å¤§äºï¼åè¿åtrueãå¦åè¿åfalse |
| | | */ |
| | | function cmpp(a, b) { |
| | | return Number(a.replace('%', '')) > Number(b.replace('%', '')); |
| | | return Number(a.replace('%', '')) >= Number(b.replace('%', '')); |
| | | } |
| | | |
| | | return {isExceedOneMonth,cmpp} |
| | | /** |
| | | *导åºä¸ºexcel |
| | | * @paramï¼ è¡¨æ ¼æ°æ®ï¼å¾
导åºçè¡¨æ ¼åï¼excelåï¼excelæä»¶å |
| | | * @returns |
| | | */ |
| | | function exportToExcel(exportData,tableColumns,excelColumnsName,excelName='data.xlsx'){ |
| | | const itemsFormatted = exportData.map((item) => { |
| | | const newItem = {}; |
| | | tableColumns.forEach((col) => { |
| | | newItem[col] = item[col]; |
| | | }); |
| | | return newItem; |
| | | }); |
| | | // å建xlsx对象 |
| | | const xls = XLSX.utils.json_to_sheet(itemsFormatted); |
| | | |
| | | // xls['A1'].v = '设å¤ç¼å·'; |
| | | // xls['B1'].v = 'å¼å¸¸ç±»å'; |
| | | // xls['C1'].v = 'å°åº'; |
| | | // xls['D1'].v = 'å¼å§æ¶é´'; |
| | | // xls['E1'].v = 'ç»ææ¶é´'; |
| | | |
| | | // ç¼è¾è¡¨å¤´è¡ ä¿®æ¹è¡¨å¤´ |
| | | excelColumnsName.forEach(item =>{ |
| | | xls[item[0]].v = item[1] |
| | | }) |
| | | // å建workbookï¼å¹¶æsheetæ·»å è¿å» |
| | | const wb = XLSX.utils.book_new(); |
| | | XLSX.utils.book_append_sheet(wb, xls, 'Sheet1'); |
| | | // å°workbook转为äºè¿å¶xlsxæä»¶å¹¶ä¸è½½ |
| | | XLSX.writeFile(wb, excelName); |
| | | |
| | | } |
| | | |
| | | return {isExceedOneMonth,cmpp,exportToExcel} |
| | | } |
| | | |
| | |
| | | // è¡¨æ ¼å±ç¤ºçæ°æ® |
| | | displayData: [], |
| | | // è¡¨æ ¼é«åº¦ |
| | | tableHeight: 300, |
| | | tableHeight: 400, |
| | | // è¡¨æ ¼æ°æ® |
| | | // å½å页 |
| | | currentPage: 1, |
| | |
| | | // console.log('å岿°æ®ä¸ºï¼', this.backData.value); |
| | | |
| | | this.backExceptionDataAWeekAgo(); |
| | | this.calTableHeight(); |
| | | // this.calTableHeight(); |
| | | // æ¥è¯¢æ¶é´æ®µçåå¼å¸¸çç«ç¹ï¼æ¥è¯¢è¯¥æ¶é´åºé´çåå¼å¸¸æ°é |
| | | this.getShopNames(); |
| | | // this.exception.exception0 = this.getSiteNameByExceptionType('0',this.beginTime,this.endTime) |
| | |
| | | </InputSearch> |
| | | </el-form-item> |
| | | |
| | | |
| | | |
| | | <el-form-item> |
| | | <TimeSelectWithShortCuts @submit-time="giveTime"></TimeSelectWithShortCuts> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | | <ExceptionType |
| | | @submit-value="(n) => form.exceptionName = n" |
| | | ></ExceptionType> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | | <TimeSelectWithShortCuts @submit-time="giveTime"></TimeSelectWithShortCuts> |
| | | </el-form-item> |
| | | </div> |
| | | |
| | |
| | | <!-- æ 头 --> |
| | | <div class="card-text1"> |
| | | <image class="card-header-image"></image> |
| | | <span class="card-header-text">æ»å¨å¹³åå¼å¼å¸¸</span> |
| | | <span class="card-header-text">ååè¶å¿å¼å¸¸</span> |
| | | </div> |
| | | |
| | | <div class="card-content-text"> |
| | |
| | | <!-- æ 头 --> |
| | | <div class="card-text1"> |
| | | <image class="card-header-image"></image> |
| | | <span class="card-header-text">æçµææç½</span> |
| | | <span class="card-header-text">æ°æ®ç¼ºå¤±å¼å¸¸</span> |
| | | </div> |
| | | |
| | | <div class="card-content-text"> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <!-- æ¥åå¼ --> |
| | | <script> |
| | | import TimeSelectWithShortCuts from '../../sfc/TimeSelectWithShortCuts.vue'; |
| | | import InputSearch from '../../sfc/InputSearch.vue'; |
| | | import AreaAndmonitorType from '../../sfc/AreaAndmonitorType.vue'; |
| | | |
| | | import DustRadarChart from './components/DustRadarChart.vue'; |
| | | import exceptionApi from '@/api/exceptionApi.js'; |
| | | import { useWindowSize } from '@vueuse/core'; |
| | | |
| | | import LineChart from './components/LineChart.vue' |
| | | |
| | | import dayjs from 'dayjs'; |
| | | export default { |
| | | components: { |
| | | LineChart, |
| | | TimeSelectWithShortCuts, |
| | | InputSearch, |
| | | AreaAndmonitorType, |
| | | DustRadarChart |
| | | }, |
| | | data() { |
| | | return { |
| | | isNoData: false, |
| | | loading: false, |
| | | chartData: [], |
| | | chartData1: {}, //ä¿åæ¥è¯¢çç»æ |
| | | chartData2: {}, |
| | | chartData3: {}, |
| | | chartData4: {}, |
| | | //devId:'', //设å¤ç¼å· |
| | | // begin: '2023-05-01', //å¼å§æ¶é´ |
| | | // end: '2023-05-15', //ç»ææ¶é´ |
| | | |
| | | form: { |
| | | // ç«ç¹åç§° |
| | | name: '', |
| | | // 设å¤ç¼å· |
| | | number: '', |
| | | // å¼å§æ¶é´ |
| | | beginTime: '', |
| | | // ç»ææ¶é´ |
| | | endTime: '' |
| | | }, |
| | | // æçº¿å¾é
置项 |
| | | option: {}, |
| | | // æ°æ®æ¸
å |
| | | bill: { |
| | | min: '', |
| | | max: '', |
| | | avg: '', |
| | | online: '', |
| | | valid: '', |
| | | exceeding: '', |
| | | |
| | | // å
¸åå¼å¸¸å¤ç°ç |
| | | exceptionRecurrence: '', |
| | | // å¼å¸¸ç±»åæ®èé度 |
| | | exceptionTypeAggregation: '', |
| | | |
| | | } |
| | | }; |
| | | }, |
| | | setup() { |
| | | const { height } = useWindowSize(); |
| | | return { height }; |
| | | }, |
| | | mounted() { |
| | | this.fetch(); |
| | | }, |
| | | methods: { |
| | | /** |
| | | * 计ç®å¼å¸¸ç±»åèé度 å¼å¸¸å¤ç°ç |
| | | * @paramï¼ å¼å¸¸æ°æ®æ°ç» |
| | | * @returnsï¼ |
| | | */ |
| | | calRecur(exceptionArr) { |
| | | // å
¸åå¼å¸¸å¤ç°ç |
| | | let exceptionTyprRecurRate = 0; |
| | | // é级çªå |
| | | let mutationCount = 0; |
| | | // è¶
æ ä¸´è¿ |
| | | let exceedingNearCount = 0; |
| | | // è¶
æ æ¬¡æ°ä¸´ç |
| | | let exceedindCriticalDegree = 0; |
| | | |
| | | // ä¿ååºç°çä¸åå¼å¸¸ç±»å |
| | | let exception = [] |
| | | // å¼å¸¸ç±»åèé度 |
| | | let exceptionTypeAggregation = 0 |
| | | |
| | | exceptionArr.forEach(item => { |
| | | // å¼å¸¸å¤ç°ç |
| | | if (item.exceptionType == 4) { |
| | | mutationCount++; |
| | | } else if (item.exceptionType == 5) { |
| | | exceedingNearCount++; |
| | | } else if (item.exceptionType == 6) { |
| | | exceedindCriticalDegree++; |
| | | } |
| | | |
| | | // å¼å¸¸ç±»åèé度 |
| | | if(exception.length == 0){ |
| | | exception.push(item.exceptionType) |
| | | } |
| | | // ä¿åæ°çå¼å¸¸ç±»å |
| | | else if(exception.indexOf(item.exceptionType) == -1){ |
| | | exception.push(item.exceptionType) |
| | | } |
| | | }); |
| | | |
| | | let sum = 0; |
| | | // 次æ°å1ï¼è¯¥å¼å¸¸åºç°2次ï¼ç®å¤ç°1次ãåºç°3次ï¼ç®å¤ç°2次... |
| | | if (mutationCount > 1) { |
| | | sum = sum + mutationCount - 1; |
| | | } |
| | | if (exceedingNearCount > 1) { |
| | | sum = sum + exceedindCriticalDegree - 1; |
| | | } |
| | | if (exceedindCriticalDegree > 1) { |
| | | sum = sum + exceedindCriticalDegree - 1; |
| | | } |
| | | console.log('sum:',sum); |
| | | console.log('exception:',exception); |
| | | console.log('å
¶ä»',mutationCount,exceedindCriticalDegree,exceedindCriticalDegree); |
| | | switch (sum) { |
| | | case 0: |
| | | exceptionTyprRecurRate = sum / 3; |
| | | break; |
| | | case 1: |
| | | exceptionTyprRecurRate = sum / 3; |
| | | break; |
| | | case 2: |
| | | case sum >= 3: |
| | | exceptionTyprRecurRate = 1; |
| | | break; |
| | | default: |
| | | return 'error'; |
| | | } |
| | | |
| | | exceptionTypeAggregation = exception.length / 8 |
| | | |
| | | let obj = {} |
| | | obj['exceptionRecurrence'] = exceptionTyprRecurRate |
| | | obj['exceptionTypeAggregation'] = exceptionTypeAggregation |
| | | |
| | | return obj |
| | | }, |
| | | /** |
| | | * è®¡ç®æ¥æç¸å·®å 天 |
| | | * @paramï¼ |
| | | * @createTime:å¼å§æ¶é´ï¼ç»ææ¶é´ |
| | | * @returnsï¼ |
| | | */ |
| | | getDaysDifference(startDate, endDate) { |
| | | var start = new Date(startDate); |
| | | var end = new Date(endDate); |
| | | var timeDiff = Math.abs(end.getTime() - start.getTime()); |
| | | var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); |
| | | return diffDays; |
| | | }, |
| | | /** |
| | | * ä»åææ°æ®æ°ç»ä¸æ¾å°æå°åå¤§å¼ |
| | | * @paramï¼ |
| | | * @returnsï¼ |
| | | */ |
| | | calBillData(arr) { |
| | | let min = 65536; |
| | | let max = -1; |
| | | let avg = 0; |
| | | let online = 0; |
| | | let valid = 0; |
| | | let exceeding = 0; |
| | | |
| | | let sumAvg = 0; |
| | | let sumOnline = 0; |
| | | let sumValid = 0; |
| | | let sumExceeding = 0; |
| | | |
| | | // 计ç®éæ©çæ¶é´çç¸å·®çå¤©æ° |
| | | let begin = dayjs(this.form.beginTime).format('YYYY-MM-DD'); |
| | | let end = dayjs(this.form.endTime).format('YYYY-MM-DD'); |
| | | let dayDiff = this.getDaysDifference(begin, end); |
| | | let obj = {}; |
| | | // è®¡ç®æå°åå¤§å¼ |
| | | arr.forEach((item) => { |
| | | if (item.min < min) { |
| | | min = item.min; |
| | | } |
| | | if (item.max > max) { |
| | | max = item.max; |
| | | } |
| | | // 计ç®å¹³åå¼ï¼å¨çº¿çï¼ææçï¼è¶
æ ç |
| | | sumAvg = sumAvg + item.dayAvg; |
| | | sumOnline = sumOnline + Number(item.dayOnline.slice(0, -1)); |
| | | sumValid = sumValid + Number(item.dayValid.slice(0, -1)); |
| | | sumExceeding = sumExceeding + Number(item.dayExceeding.slice(0, -1)); |
| | | }); |
| | | // 计ç®åå¼ |
| | | avg = sumAvg / dayDiff; |
| | | // console.log('sumavg:',sumAvg,dayDiff); |
| | | online = sumOnline / dayDiff; |
| | | valid = sumValid / dayDiff; |
| | | exceeding = sumExceeding / dayDiff; |
| | | obj['min'] = min; |
| | | obj['max'] = max; |
| | | |
| | | obj['avg'] = avg.toFixed(3); |
| | | obj['online'] = online.toFixed(3); |
| | | obj['valid'] = valid.toFixed(3); |
| | | obj['exceeding'] = exceeding.toFixed(3); |
| | | |
| | | return obj; |
| | | }, |
| | | |
| | | /** |
| | | * å°ä¸å½æ åæ¶é´è½¬ä¸ºæå®æ ¼å¼ |
| | | * @paramï¼ |
| | | * @returnsï¼ |
| | | */ |
| | | giveTime(val) { |
| | | //å°ä¸å½æ åæ¶é´è½¬ä¸ºæå®æ ¼å¼(该ç»ä»¶è¿åçæ åæ¶é´çæ ¼å¼ï¼æä»¥å¿
é¡»çå è¿ä¸ªå½æ°) |
| | | this.form.beginTime = dayjs(val[0]).format('YYYY-MM-DD HH:mm:ss'); |
| | | this.form.endTime = dayjs(val[1]).format('YYYY-MM-DD HH:mm:ss'); |
| | | }, |
| | | /** |
| | | * åå§å è½½å½æ° |
| | | * @paramï¼ |
| | | * @returnsï¼ |
| | | */ |
| | | fetch() { |
| | | // åææ°æ® |
| | | this.fetchData(); |
| | | // å¼å¸¸æ°æ® |
| | | this.exceptiondataCount(); |
| | | }, |
| | | |
| | | // ç¹å»å±ç¤ºæé® |
| | | fetchData() { |
| | | if ( |
| | | this.form.beginTime >= this.form.endTime && |
| | | (this.form.beginTime != null || this.form.endTime != null) && |
| | | (this.form.beginTime != '' || tthis.form.endTime != '') |
| | | ) { |
| | | alert('请è¾å
¥ææçæ¶é´æ®µ'); |
| | | return; |
| | | } |
| | | let params = {}; |
| | | if (this.form.name) { |
| | | params['siteName'] = this.form.name; |
| | | } |
| | | if (this.form.beginTime) { |
| | | params['beginTime'] = this.form.beginTime; |
| | | } |
| | | if (this.form.endTime) { |
| | | params['endTime'] = this.form.endTime; |
| | | } |
| | | this.loading = true; |
| | | exceptionApi |
| | | .analysisdata(this.form.name, this.form.beginTime, this.form.endTime) |
| | | .then((response) => { |
| | | this.chartData = response.data.data; |
| | | this.loading = false; |
| | | if (response.data.data.length == 0) { |
| | | this.isNoData = true; |
| | | return; |
| | | } |
| | | // ç§»é¤ç©ºæ°æ®ç¶æ |
| | | this.isNoData = false; |
| | | this.setChart(); |
| | | |
| | | let temp = this.calBillData(this.chartData); |
| | | console.log('temp:', temp); |
| | | this.bill.min = temp['min']; |
| | | this.bill.max = temp['max']; |
| | | |
| | | this.bill.avg = temp['avg']; |
| | | this.bill.online = temp['online']; |
| | | this.bill.valid = temp['valid']; |
| | | this.bill.exceeding = temp['exceeding']; |
| | | }); |
| | | }, |
| | | |
| | | // éæ©å
¶ä»å¼ç±»åæ¶ |
| | | setChart() { |
| | | if (this.chartData.length) { |
| | | // xè½´æ¥ææ¶é´ |
| | | let dateList = []; |
| | | //é¢ç²ç©å¹³åæµåº¦ |
| | | let dayAvg = []; |
| | | let dataOnline = []; |
| | | let dataValid = []; |
| | | let dataExceed = []; |
| | | this.chartData.forEach((item) => { |
| | | //xè½´æ¥æ |
| | | dateList.push(item.lst); |
| | | // å岿²¹çæµåº¦ |
| | | dayAvg.push(item.dayAvg); |
| | | dataOnline.push(item.dayOnline.slice(0, -1)); |
| | | dataValid.push(item.dayValid.slice(0, -1)); |
| | | dataExceed.push(item.dayExceeding.slice(0, -1)); |
| | | }); |
| | | |
| | | this.chartData1 = { |
| | | x: dateList, |
| | | y: dayAvg |
| | | }; |
| | | this.chartData2 = { |
| | | x: dateList, |
| | | y: dataOnline |
| | | }; |
| | | this.chartData3 = { |
| | | x: dateList, |
| | | y: dataValid |
| | | }; |
| | | this.chartData4 = { |
| | | x: dateList, |
| | | y: dataExceed |
| | | }; |
| | | } |
| | | }, |
| | | |
| | | // ä¼ä¸å¼å¸¸è¯¦æ
|
| | | exceptiondataCount() { |
| | | exceptionApi |
| | | .exceptiondata1({ |
| | | siteName: this.form.name, |
| | | beginTime: this.form.beginTime, |
| | | endTime: this.form.endTime |
| | | }) |
| | | .then((res) => { |
| | | console.log('å¼å¸¸ï¼', res.data.data); |
| | | let obj = this.calRecur(res.data.data) |
| | | this.bill.exceptionRecurrence = obj['exceptionRecurrence'] |
| | | this.bill.exceptionTypeAggregation = obj['exceptionTypeAggregation'] |
| | | }); |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | <template> |
| | | <div class="search-container"> |
| | | <el-container> |
| | | <el-main> |
| | | <el-form :inline="true" :model="form"> |
| | | <el-form-item> |
| | | <AreaAndmonitorType></AreaAndmonitorType> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <InputSearch |
| | | :isNeedDefaultSite="1" |
| | | @submit-value="(n) => (form.name = n)" |
| | | ></InputSearch> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <TimeSelectWithShortCuts |
| | | @submit-time="giveTime" |
| | | ></TimeSelectWithShortCuts> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | | <el-button type="primary" @click="fetch">å±ç¤ºæçº¿å¾</el-button> |
| | | </el-form-item> |
| | | |
| | | <!-- <div> |
| | | <el-form-item> |
| | | <el-radio-group v-model="radio" @change="setChart"> |
| | | <el-radio :label="1">é¢ç²ç©æµåº¦å¹³åå¼</el-radio> |
| | | <el-radio :label="2">æ°æ®å¨çº¿/ææ/è¶
æ ç</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </div> --> |
| | | </el-form> |
| | | |
| | | <div>æ°æ®ç»è®¡æ¶æ®µï¼{{}}</div> |
| | | |
| | | <el-row :gutter="24"> |
| | | <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="6"> |
| | | <el-card |
| | | shadow="never" |
| | | :style="{ height: `calc(${height}px - 35vh - 250px)` }" |
| | | > |
| | | <template #default> |
| | | <LineChart |
| | | title="æ¥åå¼" |
| | | :chartData="chartData1" |
| | | yName="æµåº¦" |
| | | seriesName="æ¥åå¼" |
| | | > |
| | | </LineChart> |
| | | </template> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="6"> |
| | | <el-card |
| | | shadow="never" |
| | | :style="{ height: `calc(${height}px - 35vh - 250px)` }" |
| | | > |
| | | <template #default> |
| | | <LineChart |
| | | title="æ¥å¨çº¿ç" |
| | | :chartData="chartData2" |
| | | yName="ç¾åæ¯" |
| | | seriesName="æ¥å¨çº¿ç" |
| | | > |
| | | </LineChart> |
| | | </template> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="6"> |
| | | <el-card shadow="never" |
| | | :style="{ height: `calc(${height}px - 35vh - 250px)` }"> |
| | | <template #default> |
| | | <LineChart |
| | | title="æ¥ææç" |
| | | :chartData="chartData3" |
| | | yName="ç¾åæ¯" |
| | | seriesName="æ¥ææç" |
| | | > |
| | | </LineChart> |
| | | </template> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="6"> |
| | | <el-card shadow="never" :style="{ height: `calc(${height}px - 35vh - 250px)` }"> |
| | | <template #default> |
| | | <LineChart |
| | | title="æ¥è¶
æ ç" |
| | | :chartData="chartData4" |
| | | yName="ç¾åæ¯" |
| | | seriesName="æ¥è¶
æ ç" |
| | | > |
| | | </LineChart> |
| | | </template> |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="20"> |
| | | <el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"> |
| | | <el-card |
| | | shadow="never" |
| | | :style="{ height: `calc(${height}px - 35vh - 250px)` }" |
| | | > |
| | | <DustRadarChart :name="['æ°æ®ææç','å
¸åå¼å¸¸å¤ç°ç','å¼å¸¸ç±»åèé度','æ°æ®è¶
æ ç','æ°æ®å¨çº¿ç']" :data="[bill.valid,bill.exceptionRecurrence,bill.exceptionTypeAggregation,bill.exceeding,bill.online]" ></DustRadarChart> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"> |
| | | <el-card |
| | | shadow="never" |
| | | :style="{ height: `calc(${height}px - 35vh - 250px)` }" |
| | | > |
| | | <template #header>å¼å¸¸æ°éç»è®¡</template> |
| | | <el-space direction="vertical"> |
| | | <div>æå¤§å¼:{{ bill.max }} mg/m³</div> |
| | | <div>æå°å¼:{{ bill.min }} mg/m³</div> |
| | | <div>åå¼:{{ bill.avg }} mg/m³</div> |
| | | <div>æ°æ®ææç:{{ bill.online }}%</div> |
| | | <div>æ°æ®å¨çº¿ç:{{ bill.valid }}%</div> |
| | | <div>æ°æ®è¶
æ ç:{{ bill.exceeding }}%</div> |
| | | <div>å¼å¸¸ç±»åèé度:{{ bill.exceptionTypeAggregation*100 }}%</div> |
| | | <div>å
¸åå¼å¸¸å¤ç°ç:{{ bill.exceptionRecurrence*100 }}%</div> |
| | | </el-space> |
| | | </el-card> |
| | | </el-col> |
| | | |
| | | <el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"> |
| | | <el-card |
| | | shadow="never" |
| | | :style="{ height: `calc(${height}px - 35vh - 250px)` }" |
| | | > |
| | | <template #header>é£é©ç级</template> |
| | | <template #default> |
| | | <el-space direction="vertical"> |
| | | <el-text>é«é£é©(â¥0.6)</el-text> |
| | | <el-text>ä¸é£é©(0.2~0.6)</el-text> |
| | | <el-text>ä½é£é©(ï¼0.2)</el-text> |
| | | </el-space> |
| | | </template> |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> |
| | | </el-main> |
| | | </el-container> |
| | | </div> |
| | | </template> |
| | | |
| | | <style scoped> |
| | | .el-card { |
| | | margin-top: 15px; |
| | | border-radius: 9px; |
| | | } |
| | | .chart-container { |
| | | width: 100%; |
| | | height: 600px; |
| | | } |
| | | .el-header { |
| | | background-color: #010408; |
| | | color: #333; |
| | | line-height: 60px; |
| | | } |
| | | </style> |
ÎļþÃû´Ó src/views/line_graph/analysisData.vue ÐÞ¸Ä |
| | |
| | | // import InputSearch from '../../sfc/InputSearch.vue'; |
| | | import AreaAndmonitorType from '../../sfc/AreaAndmonitorType.vue'; |
| | | import {useCommonFunction} from '../../utils/common.js'; |
| | | |
| | | import requetsApi from '@/api/exportExcel/requetsApi.js' |
| | | import dayjs from 'dayjs'; |
| | | export default { |
| | | components: { |
| | |
| | | tableData: [], |
| | | isNoData: false, |
| | | loading: false, |
| | | begin: '2023-05-01', //å¼å§æ¶é´ |
| | | end: '2023-05-15', //ç»ææ¶é´ |
| | | // begin: '2023-05-01', //å¼å§æ¶é´ |
| | | // end: '2023-05-15', //ç»ææ¶é´ |
| | | |
| | | form: { |
| | | // ç«ç¹åç§° |
| | |
| | | }; |
| | | }, |
| | | setup(){ |
| | | // å¼å
¥ ç¾åå·æ¯è¾å¤§å° |
| | | const {cmpp} = useCommonFunction() |
| | | return {cmpp} |
| | | // å¼å
¥ ç¾åå·æ¯è¾å¤§å° 导åºåè½ |
| | | const {cmpp,exportToExcel} = useCommonFunction() |
| | | return {cmpp,exportToExcel} |
| | | }, |
| | | |
| | | // watch:{ |
| | |
| | | this.form.name = ''; |
| | | }, |
| | | methods: { |
| | | // åè½ï¼å¯¼åºä¸ºExcel |
| | | exportData(){ |
| | | let params ={ |
| | | 'beginTime':this.form.beginTime, |
| | | 'endTime': this.form.endTime |
| | | } |
| | | requetsApi.fetchAllData(params).then(res => { |
| | | const data = res.data.data |
| | | console.log('é¿åº¦ï¼',data.length); |
| | | |
| | | const tableColumns = [ |
| | | 'name', |
| | | 'mnCode', |
| | | 'lst', |
| | | 'dayAvg', |
| | | 'min', |
| | | 'max', |
| | | 'dayOnline', |
| | | 'dayValid', |
| | | 'dayExceeding', |
| | | ] |
| | | const excelColumns = [['A1','ç«ç¹åç§°'], |
| | | ['B1','设å¤ç¼å·'],['C1','çæµæ¥æ'],['D1','å¹³åå¼'], |
| | | ['E1','æå°å¼'],['F1','æå¤§å¼'],['G1','å¨çº¿ç'], |
| | | ['H1','ææç'],['I1','è¶
æ ç']] |
| | | this.exportToExcel(data,tableColumns,excelColumns,'åæè¡¨.xlsx') |
| | | }) |
| | | |
| | | }, |
| | | // åè½ï¼æ¹åè¡¨æ ¼æä¸ªåå
æ ¼çé¢è² |
| | | tableCellClassName({ row, column, rowIndex, columnIndex }) { |
| | | // å¹³åå¼ä¸æ»¡è¶³æ åæ¶ |
| | |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" @click="fetchData">ç»è®¡åæ</el-button> |
| | | <el-button type="warning" @click="exportData">导åº</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | |
| | | |
| | | <el-table-column |
| | | prop="dayAvg" |
| | | label="å¹³åå¼" |
| | | label="æ¥å¹³åå¼" |
| | | sortable |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | prop="min" |
| | | label="æå°å¼" |
| | | label="æ¥æå°å¼" |
| | | sortable |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | prop="max" |
| | | label="æå¤§å¼" |
| | | label="æ¥æå¤§å¼" |
| | | sortable |
| | | show-overflow-tooltip |
| | | /> |
| | | |
| | | <el-table-column |
| | | prop="dayOnline" |
| | | label="å¨çº¿ç" |
| | | label="æ¥å¨çº¿ç" |
| | | sortable |
| | | show-overflow-tooltip |
| | | /> |
| | | |
| | | <el-table-column |
| | | prop="dayValid" |
| | | label="ææç" |
| | | label="æ¥ææç" |
| | | sortable |
| | | show-overflow-tooltip |
| | | /> |
| | | |
| | | <el-table-column |
| | | prop="dayExceeding" |
| | | label="è¶
æ ç" |
| | | label="æ¥è¶
æ ç" |
| | | sortable |
| | | show-overflow-tooltip |
| | | /> |
| | |
| | | :deep().el-table__row .red-color { |
| | | background-color: red; |
| | | } |
| | | .el-table { |
| | | color: #000000; |
| | | } |
| | | |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <!-- é·è¾¾å¾ |
| | | |
| | | --> |
| | | <script> |
| | | import * as echarts from 'echarts'; |
| | | export default { |
| | | props:{ |
| | | name:{ |
| | | type:Array, |
| | | default:()=>{ |
| | | return [] |
| | | } |
| | | }, |
| | | data:{ |
| | | type:Array, |
| | | default:()=>{ |
| | | return [] |
| | | } |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | chart: null |
| | | }; |
| | | }, |
| | | watch:{ |
| | | data(){ |
| | | this.set() |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.initRadarChart(); |
| | | }, |
| | | methods: { |
| | | initRadarChart() { |
| | | this.chart = echarts.init(document.getElementById('main')); |
| | | }, |
| | | set(){ |
| | | let option = { |
| | | title: { |
| | | text: 'åºç¡åæ' |
| | | }, |
| | | tooltip: {}, |
| | | radar: { |
| | | // shape: 'circle', |
| | | indicator: [ |
| | | { name: this.name[0], max: 1 }, |
| | | { name: this.name[1], max: 1 }, |
| | | { name: this.name[2], max: 1 }, |
| | | { name: this.name[3], max: 1 }, |
| | | { name: this.name[4], max: 1 } |
| | | ] |
| | | }, |
| | | series: [ |
| | | { |
| | | name: 'Budget vs spending', |
| | | type: 'radar', |
| | | data: [ |
| | | { |
| | | value: [this.data[0]*0.01,this.data[1]*0.01, this.data[2]*0.01,this.data[3]*0.01,this.data[4]*0.01], |
| | | name: 'å¼å¸¸åæ' |
| | | }, |
| | | ] |
| | | } |
| | | ] |
| | | }; |
| | | this.chart.setOption(option); |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <template> |
| | | <div id="main" class="chart"></div> |
| | | </template> |
| | | |
| | | <style scoped> |
| | | .chart { |
| | | width: 100%; |
| | | height: 35vh; |
| | | } |
| | | </style> |
ÎļþÃû´Ó src/sfc/LineChart.vue ÐÞ¸Ä |
| | |
| | | }, |
| | | mounted() { |
| | | this.intiChart(); |
| | | // this.chart.setOption(this.chartData) |
| | | window.addEventListener('resize', this.resizeChart); |
| | | }, |
| | | watch: { |
| | | chartData() { |
| | | // optionååæ¶ï¼å¾å½¢å次åå§å |
| | | this.setOption(); |
| | | } |
| | | }, |
| | | |
| | | }, |
| | | beforeUnmount() { |
| | | if (this.chart) { |
| | |
| | | intiChart() { |
| | | // å建echartså®ä¾ |
| | | this.chart = _echarts.init(this.$refs.chart); |
| | | |
| | | // 使ç¨åæå®çé
ç½®é¡¹åæ°æ®æ¾ç¤ºå¾è¡¨ |
| | | // this.chart.setOption(option, true); |
| | | }, |
| | | |
| | | setOption() { |
| | |
| | | toolbox: { |
| | | // å·¥å
·æ |
| | | feature: { |
| | | dataZoom: { |
| | | // åºåç¼©æ¾ |
| | | yAxisIndex: 'none' |
| | | }, |
| | | // dataZoom: { |
| | | // // åºåç¼©æ¾ |
| | | // yAxisIndex: 'none' |
| | | // }, |
| | | |
| | | // ä¿å为å¾ç |
| | | saveAsImage: {} |
| | |
| | | }, |
| | | xAxis: { |
| | | name: this.xName, |
| | | data: this.chartData.x |
| | | data: this.chartData.x, |
| | | type: 'category', |
| | | axisLabel: { |
| | | formatter: function (value) { |
| | | return value.slice(5); |
| | | } |
| | | } |
| | | }, |
| | | yAxis: { |
| | | type: 'value', |
| | |
| | | |
| | | // è·é¡µé¢ååºå¼åå |
| | | resizeChart() { |
| | | this.chart.resize(); |
| | | // this.chart.resize(); |
| | | // delay(600).then(() => this.chart.resize()); |
| | | this.$nextTick(() => { |
| | | if (this.chart) { |
| | | this.chart.resize(); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | }; |
| | |
| | | <style> |
| | | .line-chart { |
| | | width: 100%; |
| | | height: 500px; |
| | | height: 35vh; |
| | | margin-top: 25px; |
| | | } |
| | | </style> |
| | |
| | | <el-card > |
| | | <el-form :inline="true"> |
| | | <div class="demo-form-inline"> |
| | | <el-row> |
| | | <el-col> |
| | | |
| | | <el-form-item> |
| | | <AreaAndmonitorType ></AreaAndmonitorType> |
| | | </el-form-item> |
| | |
| | | <ScenarioType @submitScenarioType="(val) => (scenarioType = val)"> |
| | | </ScenarioType> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-form-item> |
| | | <TimeSelectWithShortCuts @submit-time="giveTime"></TimeSelectWithShortCuts> |
| | | </el-form-item> |
| | | </el-row> |
| | | </div> |
| | | <div class="button-and-export"> |
| | | <el-form-item> |
| | |
| | | |
| | | </el-row> |
| | | |
| | | <!-- <el-row> |
| | | <el-col v-loading="true"> |
| | | <el-card > |
| | | 111 |
| | | </el-card> |
| | | </el-col> |
| | | </el-row> --> |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | |
| | | <script> |
| | | import DustRadarChart from '../../sfc/DustRadarChart.vue'; |
| | | // import DustRadarChart from '../../sfc/DustRadarChart.vue'; |
| | | import TimeSelectWithShortCuts from '../../sfc/TimeSelectWithShortCuts.vue' |
| | | import dayjs from 'dayjs'; |
| | | export default { |