From d3d7dcf919eda40a415b6dc744fb0b347d4293a8 Mon Sep 17 00:00:00 2001
From: zmc <zmc_li@foxmail.com>
Date: 星期三, 30 八月 2023 16:10:29 +0800
Subject: [PATCH] 扬尘Vue代码

---
 src/sfc/DustExceptionText.vue                      |   11 
 package-lock.json                                  |  279 ++++++----
 components.d.ts                                    |    5 
 src/views/exception/FlightInspection.vue           |    0 
 src/views/line_graph/DataRiskModel.vue             |  506 +++++++++++++++++++++
 src/views/setting/SetConfiguration.vue             |    2 
 src/views/line_graph/components/LineChart.vue      |   33 
 src/sfc/ExceptionType.vue                          |   57 +
 /dev/null                                          |  244 ----------
 src/api/exportExcel/requetsApi.js                  |   12 
 src/utils/common.js                                |   40 +
 package.json                                       |    1 
 src/views/exception/ExceptionTest.vue              |   18 
 src/views/line_graph/DataRiskRank.vue              |   58 +
 src/views/line_graph/components/DustRadarChart.vue |   82 +++
 src/components/layout/AppHeader.vue                |    2 
 src/components/layout/AppAside.vue                 |   18 
 src/router/index.ts                                |    6 
 src/views/origin_data/TableData.vue                |   12 
 src/components/layout/AppLayout.vue                |    4 
 20 files changed, 953 insertions(+), 437 deletions(-)

diff --git a/components.d.ts b/components.d.ts
index 34308c9..f4d5460 100644
--- a/components.d.ts
+++ b/components.d.ts
@@ -37,17 +37,18 @@
     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']
diff --git a/package-lock.json b/package-lock.json
index e7cdd67..4044c4b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,6 +9,7 @@
       "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",
@@ -1431,9 +1432,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",
@@ -1776,14 +1777,14 @@
       "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": {
@@ -1871,12 +1872,6 @@
         }
       }
     },
-    "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",
@@ -1928,22 +1923,22 @@
       }
     },
     "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",
@@ -2821,6 +2816,79 @@
       },
       "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": {
@@ -6259,39 +6327,6 @@
         "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",
@@ -7809,9 +7844,9 @@
       "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",
@@ -8068,14 +8103,14 @@
       "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": {
@@ -8097,12 +8132,6 @@
         "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",
@@ -8140,22 +8169,22 @@
       }
     },
     "@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": {}
         }
       }
@@ -8878,6 +8907,53 @@
         "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": {
@@ -11622,39 +11698,6 @@
         "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",
diff --git a/package.json b/package.json
index 1aadf21..8b81bfd 100644
--- a/package.json
+++ b/package.json
@@ -13,6 +13,7 @@
   },
   "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",
diff --git a/src/api/exportExcel/requetsApi.js b/src/api/exportExcel/requetsApi.js
new file mode 100644
index 0000000..5f2dae4
--- /dev/null
+++ b/src/api/exportExcel/requetsApi.js
@@ -0,0 +1,12 @@
+import {$http} from '@/api/index.js';
+
+export default {
+    /**
+     * 鏍规嵁绔欑偣锛屾椂闂存鏌ヨ鍒嗘瀽琛ㄦ墍鏈夋暟鎹�
+     * @param锛� 璇锋眰鍙傛暟瀵硅薄
+     * @returns
+     */
+    fetchAllData(argsObj){
+        return $http.get('dust/analysisall',{params:argsObj});
+    }
+}
\ No newline at end of file
diff --git a/src/components/layout/AppAside.vue b/src/components/layout/AppAside.vue
index 9d5193e..2e89fc8 100644
--- a/src/components/layout/AppAside.vue
+++ b/src/components/layout/AppAside.vue
@@ -36,7 +36,7 @@
     
       <el-menu
         active-text-color="#F7BA1E"
-        background-color="#0093E9"
+        background-color="#2876aa"
         class="el-menu-vertical-demo"
         default-active="2"
         text-color="#fff"
@@ -60,7 +60,7 @@
         <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]">
@@ -77,7 +77,7 @@
         <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>
@@ -94,7 +94,7 @@
         <el-sub-menu index="3">
           <template #title>
             <el-icon><i-ep-DataLine /></el-icon>
-            <span>鏁版嵁绠$悊</span>
+            <span class="parent-title">鏁版嵁绠$悊</span>
           </template>
  
          
@@ -116,7 +116,7 @@
           <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]">
@@ -132,7 +132,7 @@
 
 <style lang="scss" scoped>
 .el-aside {
-  background-color: #0093E9;
+  background-color: #2876aa;
   
 
   height: 100vh;
@@ -140,7 +140,7 @@
 }
 
 .el-menu {
-  background-color: #0093E9;
+  background-color: #2876aa;
 
   width: 220px;
   border-right: none;
@@ -180,4 +180,8 @@
 .slot-lable {
   color: #f7f8fa;
 }
+.parent-title {
+  font-weight: bold;
+  font-size: 18px;
+}
 </style>
diff --git a/src/components/layout/AppHeader.vue b/src/components/layout/AppHeader.vue
index 3d710a9..9c51934 100644
--- a/src/components/layout/AppHeader.vue
+++ b/src/components/layout/AppHeader.vue
@@ -77,7 +77,7 @@
     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%);
 
 
 
diff --git a/src/components/layout/AppLayout.vue b/src/components/layout/AppLayout.vue
index 4c2e72a..c946660 100644
--- a/src/components/layout/AppLayout.vue
+++ b/src/components/layout/AppLayout.vue
@@ -41,6 +41,8 @@
   padding: 0;
   // overflow-y: hidden;
 }
-
+* {
+  font-family: 'KaiGenGothicSC-Light';
+}
 </style>
 
diff --git a/src/router/index.ts b/src/router/index.ts
index 67a0f21..dc48367 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -13,7 +13,7 @@
         {
           path:"/avgDay",
           name:'avgDay',
-          component: () => import('@/views/line_graph/dayMonthAvgData.vue')
+          component: () => import('@/views/line_graph/DataRiskModel.vue')
          },
 
 
@@ -21,7 +21,7 @@
          {
           path:"/analysis",
           name:'analysis',
-          component: () => import('@/views/line_graph/analysisData.vue')
+          component: () => import('@/views/line_graph/DataRiskRank.vue')
          },
 
         //  鍘嗗彶鏁版嵁绠$悊
@@ -35,7 +35,7 @@
          {
           path:"/edata",
           name:'edata',
-          component: () => import('@/views/exception/ExceptionData.vue')
+          component: () => import('@/views/exception/FlightInspection.vue')
          },
          
         //  寮傚父娴嬭瘯
diff --git a/src/sfc/DustExceptionText.vue b/src/sfc/DustExceptionText.vue
index 67cd5f8..0ac11dc 100644
--- a/src/sfc/DustExceptionText.vue
+++ b/src/sfc/DustExceptionText.vue
@@ -24,11 +24,12 @@
     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) => {
           //灏嗚繑鍥炵殑缁撴灉浼犻�掔粰鐖剁粍浠�
diff --git a/src/sfc/DustRadarChart.vue b/src/sfc/DustRadarChart.vue
deleted file mode 100644
index 9b234cc..0000000
--- a/src/sfc/DustRadarChart.vue
+++ /dev/null
@@ -1,65 +0,0 @@
-<script>
-import * as echarts from 'echarts';
-export default {
-  data() {
-    return {
-      chart: null
-    };
-  },
-  mounted() {
-    this.initRadarChart();
-  },
-  methods: {
-    initRadarChart() {
-      this.chart = echarts.init(document.getElementById('main'));
-      let option = {
-        title: {
-          text: '鍩虹鍒嗘瀽'
-        },
-        // legend: {
-        //   data: ['Allocated Budget', 'Actual Spending']
-        // },
-        tooltip: {},
-        radar: {
-          // shape: 'circle',
-          indicator: [
-            { name: '鏁版嵁鏈夋晥鐜�', max: 1 },
-            { name: '鍚屾椂娈靛悓绫诲紓甯稿鐜版儏鍐�', max: 2 },
-            { name: '寮傚父澶嶇幇鐜�', max: 1 },
-            { name: '寮傚父绫诲瀷鏁伴噺', max: 15 },
-            { name: '鏁版嵁鍦ㄧ嚎鐜�', max: 1 }
-          ]
-        },
-        series: [
-          {
-            name: 'Budget vs spending',
-            type: 'radar',
-            data: [
-              {
-                value: [0.1, 1, 0.2, 8, 0.5],
-                name: '寮傚父鍒嗘瀽'
-              },
-            //   {
-            //     value: [0.7, 1.4, 0.5, 8, 0.3],
-            //     name: 'Actual Spending'
-            //   }
-            ]
-          }
-        ]
-      };
-      this.chart.setOption(option);
-    }
-  }
-};
-</script>
-
-<template>
-  <div id="main" class="chart"></div>
-</template>
-
-<style scoped>
-.chart {
-  height: 500px;
-  width: 500px;
-}
-</style>
diff --git a/src/sfc/ExceptionType.vue b/src/sfc/ExceptionType.vue
index 60b42e7..c11f5d4 100644
--- a/src/sfc/ExceptionType.vue
+++ b/src/sfc/ExceptionType.vue
@@ -16,7 +16,10 @@
         // 杩斿洖鐨勬墍鏈夊紓甯哥被鍨�
         exceptionType:[],
         //宸插嬀閫夌殑寮傚父
-        checkedList: []
+        checkedList: [],
+        // 鍏ㄩ��
+        checkAll:false,
+        isIndeterminate:false,
       }
     },
     mounted() {
@@ -26,9 +29,24 @@
         // 鑾峰彇涓嶅悓鐨勫紓甯稿悕绉�
         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>
@@ -36,17 +54,24 @@
 <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>
@@ -55,7 +80,7 @@
 
 <style lang="scss" scoped>
 .excption {
-    display: flex;  
+    display: flex; 
 }
 .exception-text {
   font-weight: bold;
@@ -65,4 +90,8 @@
 .el-checkbox-group {
   margin-top: 5px;
 }
+.select-text {
+  margin-top: 5px;
+  margin-right: 5px;
+}
 </style>
\ No newline at end of file
diff --git a/src/utils/common.js b/src/utils/common.js
index 62bd9f7..d105ca4 100644
--- a/src/utils/common.js
+++ b/src/utils/common.js
@@ -1,3 +1,4 @@
+import * as XLSX from 'xlsx/xlsx.mjs';
 export function useCommonFunction(){
     /**
      * description锛氬垽鏂捣濮嬫椂闂磋法搴︽槸鍚﹁秴杩�1涓湀
@@ -53,8 +54,43 @@
      * @returns锛氬ぇ浜庯紝鍒欒繑鍥瀟rue銆傚惁鍒欒繑鍥瀎alse
      */
       function cmpp(a, b) {
-        return Number(a.replace('%', '')) > Number(b.replace('%', ''));
+        return Number(a.replace('%', '')) >= Number(b.replace('%', ''));
       }
 
-      return {isExceedOneMonth,cmpp}
+          /**
+     *瀵煎嚭涓篹xcel
+     * @param锛� 琛ㄦ牸鏁版嵁锛屽緟瀵煎嚭鐨勮〃鏍煎垪锛宔xcel鍒楋紝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锛屽苟鎶妔heet娣诲姞杩涘幓
+      const wb = XLSX.utils.book_new();
+      XLSX.utils.book_append_sheet(wb, xls, 'Sheet1');
+      // 灏唚orkbook杞负浜岃繘鍒秞lsx鏂囦欢骞朵笅杞�
+      XLSX.writeFile(wb, excelName);
+    
+    }
+
+    return {isExceedOneMonth,cmpp,exportToExcel}
 }
+
diff --git a/src/views/exception/ExceptionTest.vue b/src/views/exception/ExceptionTest.vue
index cccd6ab..a64ed4e 100644
--- a/src/views/exception/ExceptionTest.vue
+++ b/src/views/exception/ExceptionTest.vue
@@ -39,7 +39,7 @@
       // 琛ㄦ牸灞曠ず鐨勬暟鎹�
       displayData: [],
       // 琛ㄦ牸楂樺害
-      tableHeight: 300,
+      tableHeight: 400,
       // 琛ㄦ牸鏁版嵁
       // 褰撳墠椤�
       currentPage: 1,
@@ -191,7 +191,7 @@
     // console.log('鍘嗗彶鏁版嵁涓猴細', this.backData.value);
 
     this.backExceptionDataAWeekAgo();
-    this.calTableHeight();
+    // this.calTableHeight();
     // 鏌ヨ鏃堕棿娈电殑鍚勫紓甯哥殑绔欑偣锛屾煡璇㈣鏃堕棿鍖洪棿鐨勫悇寮傚父鏁伴噺
     this.getShopNames();
     // this.exception.exception0 = this.getSiteNameByExceptionType('0',this.beginTime,this.endTime)
@@ -1367,14 +1367,16 @@
             </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>
 
@@ -1608,7 +1610,7 @@
               <!-- 鏍囧ご -->
               <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">
@@ -1745,7 +1747,7 @@
               <!-- 鏍囧ご -->
               <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">
diff --git a/src/views/exception/ExceptionData.vue b/src/views/exception/FlightInspection.vue
similarity index 100%
rename from src/views/exception/ExceptionData.vue
rename to src/views/exception/FlightInspection.vue
diff --git a/src/views/line_graph/DataRiskModel.vue b/src/views/line_graph/DataRiskModel.vue
new file mode 100644
index 0000000..db0d463
--- /dev/null
+++ b/src/views/line_graph/DataRiskModel.vue
@@ -0,0 +1,506 @@
+<!-- 鏃ュ潎鍊� -->
+<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>
diff --git a/src/views/line_graph/analysisData.vue b/src/views/line_graph/DataRiskRank.vue
similarity index 81%
rename from src/views/line_graph/analysisData.vue
rename to src/views/line_graph/DataRiskRank.vue
index 1475fd1..56824f2 100644
--- a/src/views/line_graph/analysisData.vue
+++ b/src/views/line_graph/DataRiskRank.vue
@@ -3,7 +3,7 @@
 // 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: {
@@ -22,8 +22,8 @@
       tableData: [],
       isNoData: false,
       loading: false,
-      begin: '2023-05-01', //寮�濮嬫椂闂�
-      end: '2023-05-15', //缁撴潫鏃堕棿
+      // begin: '2023-05-01', //寮�濮嬫椂闂�
+      // end: '2023-05-15', //缁撴潫鏃堕棿
 
       form: {
         // 绔欑偣鍚嶇О
@@ -38,9 +38,9 @@
     };
   },
   setup(){
-    // 寮曞叆 鐧惧垎鍙锋瘮杈冨ぇ灏�
-    const {cmpp} = useCommonFunction()
-    return {cmpp} 
+     // 寮曞叆 鐧惧垎鍙锋瘮杈冨ぇ灏� 瀵煎嚭鍔熻兘
+     const {cmpp,exportToExcel} = useCommonFunction()
+    return {cmpp,exportToExcel} 
   },
 
   //   watch:{
@@ -56,6 +56,35 @@
     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 }) {
       // 骞冲潎鍊间笉婊¤冻鏍囧噯鏃�
@@ -159,6 +188,7 @@
           </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>
 
@@ -199,40 +229,40 @@
 
           <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
           />
@@ -259,4 +289,8 @@
 :deep().el-table__row .red-color {
   background-color: red;
 }
+.el-table {
+  color: #000000;
+}
+
 </style>
diff --git a/src/views/line_graph/components/DustRadarChart.vue b/src/views/line_graph/components/DustRadarChart.vue
new file mode 100644
index 0000000..e6162a9
--- /dev/null
+++ b/src/views/line_graph/components/DustRadarChart.vue
@@ -0,0 +1,82 @@
+<!-- 闆疯揪鍥�
+
+-->
+<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>
diff --git a/src/sfc/LineChart.vue b/src/views/line_graph/components/LineChart.vue
similarity index 79%
rename from src/sfc/LineChart.vue
rename to src/views/line_graph/components/LineChart.vue
index 38fd58f..e1c4b89 100644
--- a/src/sfc/LineChart.vue
+++ b/src/views/line_graph/components/LineChart.vue
@@ -44,14 +44,14 @@
   },
   mounted() {
     this.intiChart();
-    //   this.chart.setOption(this.chartData)
     window.addEventListener('resize', this.resizeChart);
   },
   watch: {
     chartData() {
       // option鍙樺寲鏃讹紝鍥惧舰鍐嶆鍒濆鍖�
       this.setOption();
-    }
+    },
+
   },
   beforeUnmount() {
     if (this.chart) {
@@ -62,9 +62,6 @@
     intiChart() {
       // 鍒涘缓echarts瀹炰緥
       this.chart = _echarts.init(this.$refs.chart);
-
-      // 浣跨敤鍒氭寚瀹氱殑閰嶇疆椤瑰拰鏁版嵁鏄剧ず鍥捐〃
-      // this.chart.setOption(option, true);
     },
 
     setOption() {
@@ -78,10 +75,10 @@
         toolbox: {
           // 宸ュ叿鏍�
           feature: {
-            dataZoom: {
-              // 鍖哄煙缂╂斁
-              yAxisIndex: 'none'
-            },
+            // dataZoom: {
+            //   // 鍖哄煙缂╂斁
+            //   yAxisIndex: 'none'
+            // },
 
             // 淇濆瓨涓哄浘鐗�
             saveAsImage: {}
@@ -89,7 +86,13 @@
         },
         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',
@@ -112,7 +115,13 @@
 
     // 璺熼〉闈㈠搷搴斿紡鍙樺寲
     resizeChart() {
-      this.chart.resize();
+      // this.chart.resize();
+      // delay(600).then(() => this.chart.resize());
+      this.$nextTick(() => {
+        if (this.chart) {
+          this.chart.resize();
+        }
+      });
     }
   }
 };
@@ -121,7 +130,7 @@
 <style>
 .line-chart {
   width: 100%;
-  height: 500px;
+  height: 35vh;
   margin-top: 25px;
 }
 </style>
diff --git a/src/views/line_graph/dayMonthAvgData.vue b/src/views/line_graph/dayMonthAvgData.vue
deleted file mode 100644
index 696b539..0000000
--- a/src/views/line_graph/dayMonthAvgData.vue
+++ /dev/null
@@ -1,244 +0,0 @@
-<!-- 鏃ュ潎鍊� -->
-<script>
-import TimeSelectWithShortCuts from '../../sfc/TimeSelectWithShortCuts.vue';
-import InputSearch from '../../sfc/InputSearch.vue';
-import AreaAndmonitorType from '../../sfc/AreaAndmonitorType.vue';
-import DustRadarChart from '../../sfc/DustRadarChart.vue';
-import exceptionApi from '@/api/exceptionApi.js';
-
-// 寮傛缁勪欢
-const LineChart = defineAsyncComponent(() => import('../../sfc/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: {},
-
-      // 澶嶉�夋缁�
-      radio: 1
-    };
-  },
-  mounted() {
-    this.fetch();
-  },
-  methods: {
-    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');
-    },
-
-    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();
-        });
-    },
-
-    // 閫夋嫨鍏朵粬鍊肩被鍨嬫椂
-    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) => {
-          // 鎵�鏈夊紓甯�
-        });
-    }
-  }
-};
-</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-card> 寮傚父鏁伴噺缁熻 </el-card>
-        <el-card> 瓒呮爣澶嶇幇鐜� </el-card>
-        <el-card>
-          <el-empty v-show="isNoData" :image-size="200" />
-          <LineChart
-            title="鏃ュ潎鍊�"
-            :chartData="chartData1"
-            yName="娴撳害"
-            seriesName="鏃ュ潎鍊�"
-          >
-          </LineChart>
-          <LineChart
-            title="鏃ュ湪绾跨巼"
-            :chartData="chartData2"
-            yName="鐧惧垎姣�"
-            seriesName="鏃ュ湪绾跨巼"
-          >
-          </LineChart>
-          <LineChart
-            title="鏃ユ湁鏁堢巼"
-            :chartData="chartData3"
-            yName="鐧惧垎姣�"
-            seriesName="鏃ユ湁鏁堢巼"
-          >
-          </LineChart>
-          <LineChart
-            title="鏃ヨ秴鏍囩巼"
-            :chartData="chartData4"
-            yName="鐧惧垎姣�"
-            seriesName="鏃ヨ秴鏍囩巼"
-          >
-          </LineChart>
-          <DustRadarChart></DustRadarChart>
-        </el-card>
-      </el-main>
-    </el-container>
-  </div>
-</template>
-
-<style scoped>
-.el-card {
-  margin-top: 40px;
-  border-radius: 9px;
-}
-.chart-container {
-  width: 100%;
-  height: 600px;
-}
-.el-header {
-  background-color: #010408;
-  color: #333;
-  line-height: 60px;
-}
-</style>
diff --git a/src/views/origin_data/TableData.vue b/src/views/origin_data/TableData.vue
index 44cbe59..96aef65 100644
--- a/src/views/origin_data/TableData.vue
+++ b/src/views/origin_data/TableData.vue
@@ -163,6 +163,9 @@
       <el-card >
         <el-form :inline="true">
           <div class="demo-form-inline">
+            <el-row>
+              <el-col>
+
             <el-form-item>
           <AreaAndmonitorType ></AreaAndmonitorType>
           </el-form-item>
@@ -185,9 +188,11 @@
               <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>
@@ -305,13 +310,6 @@
     
   </el-row>
 
-  <!-- <el-row>
-    <el-col v-loading="true">
-      <el-card >
-        111
-      </el-card>
-    </el-col>
-  </el-row> -->
 </template>
 
 <style lang="scss" scoped>
diff --git a/src/views/setting/SetConfiguration.vue b/src/views/setting/SetConfiguration.vue
index dcf7ae3..9adf956 100644
--- a/src/views/setting/SetConfiguration.vue
+++ b/src/views/setting/SetConfiguration.vue
@@ -1,5 +1,5 @@
 <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 {

--
Gitblit v1.9.3