From f68d33003f30af4bfe0ba186caa6118564c0b6cc Mon Sep 17 00:00:00 2001
From: Joe <1712833832@qq.com>
Date: Fri, 19 Jan 2024 11:32:12 +0800
Subject: [PATCH 1/9] =?UTF-8?q?=E5=88=A0=E9=99=A4=E9=BB=98=E8=AE=A4?=
 =?UTF-8?q?=E5=AF=86=E7=A0=81=20=20=E4=BF=AE=E6=94=B9=E5=88=A4=E6=96=AD=20?=
 =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9B=9E=E6=98=BE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../components/FormConfig/index.vue           |  13 +-
 .../components/DeviceControlDialog.vue        |  59 ++---
 .../components/RoadAndEvents/utils/map.js     |   6 +-
 ruoyi-ui/src/views/login.vue                  | 209 ++++++++----------
 4 files changed, 137 insertions(+), 150 deletions(-)

diff --git a/ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/index.vue b/ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/index.vue
index e93ec547..b0c5a9a9 100644
--- a/ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/index.vue
+++ b/ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/index.vue
@@ -4,7 +4,8 @@
       <ElFormItem class="formItem" :rules="getRules(item)" v-if="formItemVisible(item)" :key="item.key"
         :label="item.label" :style="gridStyle(item, index)">
         <slot :name="item.key" :data="item" :formData="formData">
-          <component :is="getComponent(item.type)" v-bind="getBindData(item)" v-model="formData[item.key]" />
+          <component :is="getComponent(item.type)" v-bind="getBindData(item)" v-model="formData[item.key]"
+            v-on="resolveListeners(item.ons)" />
         </slot>
       </ElFormItem>
     </template>
@@ -94,6 +95,16 @@ export default {
     }
   },
   methods: {
+    resolveListeners(callbacks) {
+
+      const result = {};
+
+      for (const key in callbacks) {
+        result[key] = (...args) => callbacks[key](...args, this.formData, this)
+      }
+
+      return result
+    },
     reset() {
       return this.formData = reduceDefaultValue(this.formList);
     },
diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/DrivingGuidance/components/DeviceControlDialog.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/DrivingGuidance/components/DeviceControlDialog.vue
index 8aa32fd7..95b6dc8f 100644
--- a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/DrivingGuidance/components/DeviceControlDialog.vue
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/DrivingGuidance/components/DeviceControlDialog.vue
@@ -113,13 +113,13 @@ export default {
         {
           label: "选择时间:",
           key: "displayTime",
-          type: "datePicker",
+          type: "timePicker",
           required: true,
           visible: (data) => data.controlType == "automatic",
           options: {
-            type: "datetimerange",
-            angeSeparator: "至",
-            valueFormat: "yyyy-MM-dd HH:mm:ss",
+            isRange: true,
+            rangeSeparator: "至",
+            valueFormat: "HH:mm",
             startPlaceholder: "开始时间",
             endPlaceholder: "结束时间",
           },
@@ -143,34 +143,41 @@ export default {
       handler(bool) {
         if (!bool) return;
 
-        request.post(`business/device/functions/${this.deviceId}/${52}`, {})
-          .then(async (result) => {
-            if (result.code != 200) return;
+        this.reDisplay();
+      }
+    }
+  },
+  methods: {
+    reDisplay() {
+      request.post(`business/device/functions/${this.deviceId}/${52}`, {})
+        .then(async (result) => {
+          if (result.code != 200) return;
 
-            await delay(0);
+          await delay(0);
 
-            const formData = this.$refs.FormConfigRef?.formData;
+          const formData = this.$refs.FormConfigRef?.formData;
 
-            const data = result.data[0];
+          const data = result.data[0];
+          console.log("%c [ data ]-155-「DeviceControlDialog.vue」", "font-size:15px; background:#66352f; color:#aa7973;", data);
 
-            switch (data.mode) {
-              case "00":
-                formData.controlType = "manual";
+          switch (data.mode) {
+            case "00":
+              formData.controlType = "manual";
 
-                formData.onWorkStatus = data.onWorkStatus;
-                formData.inWorkStatus = data.inWorkStatus;
-                break;
-              case "01":
-                formData.controlType = "automatic";
+              formData.onWorkStatus = data.onWorkStatus;
+              formData.inWorkStatus = data.inWorkStatus;
+              break;
+            case "01":
+              formData.controlType = "automatic";
 
-                formData.datePicker = [data.startDisplay, data.endDisplay];
-                break;
-            }
-          })
-      }
-    }
-  },
-  methods: {
+              formData.displayTime = [data.startDisplay, data.endDisplay];
+              break;
+          }
+
+          this.oldFormData = cloneDeep(formData);
+        })
+
+    },
     handleSubmit() {
       const result = cloneDeep(this.$refs.FormConfigRef?.formData);
 
diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/map.js b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/map.js
index c0bb0a45..b2bddf1e 100644
--- a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/map.js
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/map.js
@@ -132,9 +132,7 @@ export async function setMarkToMap(item, data, _markerClick, content) {
         content:
           content ||
           `<div style="
-          background-image: url(${
-            item.deviceState !== "0" ? faultBg : normalBg
-          });
+          background-image: url(${item.deviceState == 1 ? normalBg : faultBg});
           background-size: 100% 100%;
           background-repeat: no-repeat;
           width: 42px;
@@ -148,7 +146,7 @@ export async function setMarkToMap(item, data, _markerClick, content) {
           height: 18px;
           margin-left: 3px;
           margin-bottom: 6px;
-          " src='${item.deviceState !== "0" ? fault : normal}'>
+          " src='${item.deviceState == 1 ? normal : fault}'>
         </div>`,
       };
     }),
diff --git a/ruoyi-ui/src/views/login.vue b/ruoyi-ui/src/views/login.vue
index 5122d809..41b8e14f 100644
--- a/ruoyi-ui/src/views/login.vue
+++ b/ruoyi-ui/src/views/login.vue
@@ -1,77 +1,39 @@
 <template>
   <div class="login">
-    <el-form
-      ref="loginForm"
-      :model="loginForm"
-      :rules="loginRules"
-      class="login-form"
-    >
-      <div
-        style="
+    <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
+      <div style="
           width: 100%;
           text-align: center;
           padding-right: 20px;
           padding-bottom: 10px;
-        "
-      >
+        ">
         <!-- <img src="../assets/image/login-logo.png" width="120px;" /> -->
-        <div class="loginTitle"  >欢迎登录</div>
+        <div class="loginTitle">欢迎登录</div>
       </div>
       <div class="title">{{ '' }}</div>
       <el-form-item prop="username">
-        <el-input
-          v-model="loginForm.username"
-          type="text"
-          auto-complete="off"
-          placeholder="请输入用户名"
-        >
-        <img
-            slot="prefix"
-            src="../assets/images/Vector.png"
-            class="el-input__icon input-icon"
-          />
+        <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="请输入用户名">
+          <img slot="prefix" src="../assets/images/Vector.png" class="el-input__icon input-icon" />
         </el-input>
         <!-- <div style="border-bottom: 1px solid #cfcfcf; margin-top: 5px"></div> -->
       </el-form-item>
       <el-form-item prop="password">
-        <el-input
-          v-model="loginForm.password"
-          type="password"
-          auto-complete="off"
-          placeholder="请输入密码"
-          @keyup.enter.native="handleLogin"
-        >
-          <img
-            slot="prefix"
-            src="../assets/images/locked.png"
-            class="el-input__icon input-icon"
-          />
+        <el-input v-model="loginForm.password" type="password" auto-complete="off" placeholder="请输入密码"
+          @keyup.enter.native="handleLogin">
+          <img slot="prefix" src="../assets/images/locked.png" class="el-input__icon input-icon" />
         </el-input>
         <!-- <div style="border-bottom: 1px solid #cfcfcf; margin-top: 5px"></div> -->
       </el-form-item>
-      <Verify
-        @success="capctchaCheckSuccess"
-        :mode="'pop'"
-        :captchaType="'blockPuzzle'"
-        :imgSize="{ width: '330px', height: '155px' }"
-        ref="verify"
-      ></Verify>
+      <Verify @success="capctchaCheckSuccess" :mode="'pop'" :captchaType="'blockPuzzle'"
+        :imgSize="{ width: '330px', height: '155px' }" ref="verify"></Verify>
       <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 20px 0px;">记住密码</el-checkbox>
       <el-form-item style="width: 100%; text-align: center">
-        <el-button
-          :loading="loading"
-          size="medium"
-          type="goon"
-          style="width: 100%"
-          @click.native.prevent="handleLogin"
-        >
+        <el-button :loading="loading" size="medium" type="goon" style="width: 100%" @click.native.prevent="handleLogin">
           <span v-if="!loading">登 录</span>
           <span v-else>登 录 中...</span>
         </el-button>
         <div style="float: right" v-if="register">
-          <router-link class="link-type" :to="'/register'"
-            >立即注册</router-link
-          >
+          <router-link class="link-type" :to="'/register'">立即注册</router-link>
         </div>
       </el-form-item>
     </el-form>
@@ -101,8 +63,10 @@ export default {
       title: "", // 系统标题
       cookiePassword: "",
       loginForm: {
-        username: "admin",
-        password: "dxc123!@#", 
+        // username: "admin",
+        // password: "dxc123!@#",
+        username: "",
+        password: "",
         rememberMe: false,
         code: "",
         uuid: "",
@@ -147,7 +111,7 @@ export default {
     capctchaCheckSuccess(params) {
       this.loginForm.code = params.captchaVerification;
       this.loading = true;
-      console.log(this.loginForm.rememberMe,"=======================");
+      console.log(this.loginForm.rememberMe, "=======================");
       if (this.loginForm.rememberMe == true) {
         Cookies.set("username", this.loginForm.username, { expires: 30 });
         Cookies.set("password", encrypt(this.loginForm.password), {
@@ -162,7 +126,7 @@ export default {
       this.$store
         .dispatch("Login", this.loginForm)
         .then(() => {
-          this.$router.push({ path: this.redirect || "/" }).catch(() => {});
+          this.$router.push({ path: this.redirect || "/" }).catch(() => { });
         })
         .catch(() => {
           this.loading = false;
@@ -172,11 +136,11 @@ export default {
       const username = Cookies.get("username");
       const password = Cookies.get("password");
       const rememberMe = Cookies.get("rememberMe");
-      console.log("rem",rememberMe);
+      console.log("rem", rememberMe);
       this.loginForm = {
         username: username === undefined ? this.loginForm.username : username,
         password:
-          password === undefined  ? this.loginForm.password : decrypt(password),
+          password === undefined ? this.loginForm.password : decrypt(password),
         rememberMe: rememberMe === undefined ? false : Boolean(rememberMe),
       };
     },
@@ -188,23 +152,23 @@ export default {
           }
         });
       } else {
-        
+
         if (this.loginForm.rememberMe == true) {
-        Cookies.set("username", this.loginForm.username, { expires: 30 });
-        Cookies.set("password", encrypt(this.loginForm.password), {
-          expires: 30,
-        });
-        Cookies.set("rememberMe", this.loginForm.rememberMe, { expires: 30 });
-      } else {
-        Cookies.remove("username");
-        Cookies.remove("password");
-        Cookies.remove("rememberMe");
-      }
+          Cookies.set("username", this.loginForm.username, { expires: 30 });
+          Cookies.set("password", encrypt(this.loginForm.password), {
+            expires: 30,
+          });
+          Cookies.set("rememberMe", this.loginForm.rememberMe, { expires: 30 });
+        } else {
+          Cookies.remove("username");
+          Cookies.remove("password");
+          Cookies.remove("rememberMe");
+        }
 
         this.$store
           .dispatch("Login", this.loginForm)
           .then(() => {
-            this.$router.push({ path: this.redirect || "/" }).catch(() => {});
+            this.$router.push({ path: this.redirect || "/" }).catch(() => { });
             this.getManageStation();
           })
           .catch(() => {
@@ -218,7 +182,7 @@ export default {
         this.$cache.local.set("manageStation", res.msg);
       });
       getConfigKey("sd.navigationBar").then((res) => {
-        console.log(res,"res")
+        console.log(res, "res")
         let sideTheme = "theme-blue";
         if (res.msg == "0") {
           sideTheme = "theme-dark";
@@ -253,33 +217,32 @@ export default {
 </script>
 
 <style rel="stylesheet/scss" lang="scss" scoped>
-
 ::v-deep .el-input__inner {
-    background-color: transparent !important;
-      height:100%;
-      font-size: 22px;
-      font-family: Source Han Sans CN, Source Han Sans CN;
-      font-weight: 400;
-      color: #07CAF6;
-        margin-left:68px;
-   }
+  background-color: transparent !important;
+  height: 100%;
+  font-size: 22px;
+  font-family: Source Han Sans CN, Source Han Sans CN;
+  font-weight: 400;
+  color: #07CAF6;
+  margin-left: 68px;
+}
 
-   ::v-deep .el-checkbox__label {
-      color:#fff;
-      font-size: 18px !important;
-      font-family: Source Han Sans CN, Source Han Sans CN;
-      font-weight: 400;
-      color: #FFFFFF !important;
-      margin-bottom: 10px;
-   }
+::v-deep .el-checkbox__label {
+  color: #fff;
+  font-size: 18px !important;
+  font-family: Source Han Sans CN, Source Han Sans CN;
+  font-weight: 400;
+  color: #FFFFFF !important;
+  margin-bottom: 10px;
+}
 
 
-   ::v-deep  .el-form-item__error {
-    position: absolute;
-    top:75px;
-   }
+::v-deep .el-form-item__error {
+  position: absolute;
+  top: 75px;
+}
 
-   ::v-deep .el-input__inner::placeholder {
+::v-deep .el-input__inner::placeholder {
   color: #07CAF6;
 }
 
@@ -293,12 +256,13 @@ export default {
 .login::after {
   content: "";
   position: absolute;
-  width:100%;
+  width: 100%;
   height: 120px;
   background-image: url('../assets/images/login-head.png');
   background-size: auto 100%;
   background-position: center center;
 }
+
 .title {
   margin: 0px auto 10px auto;
   font-size: 24px;
@@ -307,25 +271,27 @@ export default {
   letter-spacing: 2px;
 }
 
- .login-form::after {
-   content: "";
-   position: absolute;
-   left:-4px;
-   top:0px;
-   width:4px;
-   height:100%;
-   background:linear-gradient(180deg, #BDFFF600 0%, #BDFFF6 50%, #BDFFF600 100%); ;
- }
+.login-form::after {
+  content: "";
+  position: absolute;
+  left: -4px;
+  top: 0px;
+  width: 4px;
+  height: 100%;
+  background: linear-gradient(180deg, #BDFFF600 0%, #BDFFF6 50%, #BDFFF600 100%);
+  ;
+}
 
- .login-form::before {
-   content: "";
-   position: absolute;
-   right:-4px;
-   top:0px;
-   width:4px;
-   height:100%;
-   background:linear-gradient(180deg, #BDFFF600 0%, #BDFFF6 50%, #BDFFF600 100%); ;
- }
+.login-form::before {
+  content: "";
+  position: absolute;
+  right: -4px;
+  top: 0px;
+  width: 4px;
+  height: 100%;
+  background: linear-gradient(180deg, #BDFFF600 0%, #BDFFF6 50%, #BDFFF600 100%);
+  ;
+}
 
 .login-form {
   position: absolute;
@@ -338,7 +304,7 @@ export default {
   border-radius: 0px 0px 0px 0px;
   opacity: 1;
   border: 4px solid #0C5963;
-  padding:50px;
+  padding: 50px;
   // margin-left: 50%;
 
   .loginTitle {
@@ -360,37 +326,43 @@ export default {
     opacity: 1;
     border: 1px solid #01CFFE;
     background-color: transparent;
-    margin-bottom: 12px;;
+    margin-bottom: 12px;
+    ;
+
 
-      
     input {
       border: 0;
       height: 35px;
     }
   }
+
   .input-icon {
     height: 28px;
     width: 28px;
     margin-left: 2px;
     position: relative;
-    left:14px;
-    top:18px;
+    left: 14px;
+    top: 18px;
   }
 }
+
 .login-tip {
   font-size: 13px;
   text-align: center;
   color: #bfbfbf;
 }
+
 .login-code {
   width: 37%;
   height: 35px;
   float: right;
+
   img {
     cursor: pointer;
     vertical-align: middle;
   }
 }
+
 .el-login-footer {
   height: 40px;
   line-height: 40px;
@@ -403,6 +375,7 @@ export default {
   font-size: 12px;
   letter-spacing: 1px;
 }
+
 .login-code-img {
   height: 35px;
 }
@@ -420,7 +393,5 @@ export default {
   opacity: 1;
 }
 
-.el-button--goon:hover {
- 
-}
+.el-button--goon:hover {}
 </style>

From dba48fa06b7361c7708bfa02bd95d511a25bc603 Mon Sep 17 00:00:00 2001
From: Joe <1712833832@qq.com>
Date: Fri, 19 Jan 2024 12:07:55 +0800
Subject: [PATCH 2/9] =?UTF-8?q?=E8=A1=8C=E8=BD=A6=E8=AF=B1=E5=AF=BC=20=20?=
 =?UTF-8?q?=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../components/FormConfig/index.vue           |  8 ++--
 .../components/DeviceControlDialog.vue        | 37 +++++++++++++------
 2 files changed, 31 insertions(+), 14 deletions(-)

diff --git a/ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/index.vue b/ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/index.vue
index b0c5a9a9..07287a86 100644
--- a/ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/index.vue
+++ b/ruoyi-ui/src/views/JiHeExpressway/components/FormConfig/index.vue
@@ -86,9 +86,9 @@ export default {
       return item => {
         const result = item.visible ? item.visible(this.formData) : true;
 
-        if (!result) {
-          delete this.formData[item.key];
-        }
+        // if (!result) {
+        //   delete this.formData[item.key];
+        // }
 
         return result;
       }
@@ -97,6 +97,8 @@ export default {
   methods: {
     resolveListeners(callbacks) {
 
+      if (!callbacks) return;
+
       const result = {};
 
       for (const key in callbacks) {
diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/DrivingGuidance/components/DeviceControlDialog.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/DrivingGuidance/components/DeviceControlDialog.vue
index 95b6dc8f..54114e46 100644
--- a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/DrivingGuidance/components/DeviceControlDialog.vue
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/Dialogs/DrivingGuidance/components/DeviceControlDialog.vue
@@ -74,6 +74,22 @@ export default {
           key: "controlType",
           type: "RadioGroup",
           default: "manual",
+          ons: {
+            input: (value, data) => {
+              const oldFormData = this.oldFormData;
+              if (!oldFormData) return;
+
+              switch (value) {
+                case "manual":
+                  data.onWorkStatus = oldFormData.onWorkStatus;
+                  data.inWorkStatus = oldFormData.inWorkStatus;
+                  break;
+                case "automatic":
+                  Array.isArray(oldFormData.displayTime) && (data.displayTime = [...oldFormData.displayTime]);
+                  break;
+              }
+            },
+          },
           options: {
             type: 'circle',
             options: [
@@ -174,32 +190,33 @@ export default {
               break;
           }
 
-          this.oldFormData = cloneDeep(formData);
+          this.oldFormData = { ...formData };
         })
 
     },
     handleSubmit() {
-      const result = cloneDeep(this.$refs.FormConfigRef?.formData);
+      const result = {}, formData = this.$refs.FormConfigRef?.formData;
 
       let functionId = 51;
 
-      result.mode = result.controlType === 'manual' ? "00" : "01";
+      result.mode = formData.controlType === 'manual' ? "00" : "01";
 
       delete result.controlType;
 
       if (result.mode === '01') {
-        if (!result.displayTime?.length) return Message.error(`时间不能为空!`);
-        result.startDisplayTime = result.displayTime[0];
-        result.endDisplayTime = result.displayTime[1];
+        if (!formData.displayTime?.length) return Message.error(`时间不能为空!`);
+        result.startDisplayTime = formData.displayTime[0];
+        result.endDisplayTime = formData.displayTime[1];
         delete result.displayTime;
       } else {
-        if (!result.onWorkStatus || !result.inWorkStatus) return Message.error(`工作状态不能为空!`)
+        if (!formData.onWorkStatus || !formData.inWorkStatus) return Message.error(`工作状态不能为空!`);
+
+        result.onWorkStatus = formData.onWorkStatus
+        result.inWorkStatus = formData.inWorkStatus
       }
 
       this.submitting = true;
 
-      console.log(result);
-
       // this.submitting = false;
       // return;
 
@@ -220,9 +237,7 @@ export default {
         })
         .finally(() => {
           this.submitting = false;
-          console.log(this.submitting)
         })
-      console.log(result)
     }
   },
 }

From 677edeee03d52934db18a49e11f200535abbf01a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=88=98=E6=9C=8B?= <lbp608@126.com>
Date: Fri, 19 Jan 2024 12:37:09 +0800
Subject: [PATCH 3/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20=E5=90=8D=E7=A7=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../eventDetection/components/railway/assets/charts.js          | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railway/assets/charts.js b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railway/assets/charts.js
index 43de80f3..2ef9faf8 100644
--- a/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railway/assets/charts.js
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/perception/eventDetection/components/railway/assets/charts.js
@@ -1,6 +1,6 @@
 let chartIcon = `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAC4jAAAuIwF4pT92AAAFw2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4wLWMwMDAgNzkuMTcxYzI3ZmFiLCAyMDIyLzA4LzE2LTIyOjM1OjQxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjQuMCAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjMtMTItMjlUMTA6MTM6MTQrMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIzLTEyLTI5VDEwOjQ2OjE3KzA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIzLTEyLTI5VDEwOjQ2OjE3KzA4OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDplYzhkN2NkNS01ZjdjLTQ5Y2ItOTgyMy1lOTM4ODViNjRjMmIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ZjE1ZWVkNDgtNDA3ZS00MDU0LTliNTMtYTllZmQ1ODE5YjVmIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6ZjE1ZWVkNDgtNDA3ZS00MDU0LTliNTMtYTllZmQ1ODE5YjVmIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMTVlZWQ0OC00MDdlLTQwNTQtOWI1My1hOWVmZDU4MTliNWYiIHN0RXZ0OndoZW49IjIwMjMtMTItMjlUMTA6MTM6MTQrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNC4wIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplYzhkN2NkNS01ZjdjLTQ5Y2ItOTgyMy1lOTM4ODViNjRjMmIiIHN0RXZ0OndoZW49IjIwMjMtMTItMjlUMTA6NDY6MTcrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNC4wIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PibZhN0AAAHBSURBVDiNfdTtThNREAbgZ5sCrRTaRaBqQDTR6AXaq9grJEaiKCJWaAv9ENDUH2fWLkU8yeTkZGbe885nNp/PVU9vIMMGNtHGo1BNMQoZF7k7jlkVqDewji72sI5VrIT6F64xwRecFbnJPaDeQBsv8RSdCpsS6BYzDENOcVTkLv8CBZPX2McOdrEVITYC6BpjnKOP7zjG+yI3yd5dzLNg8jbY7MW9g+2lHJUgpzgJOcRRPX7dj3C6eIaDAO+iGUCzYPERWSXU5+jXIxct5MFgN0AOsLaoi9Ul0HHkaoBOLZg0IoQNPMaTJZAqWDfytylVtol2LdishNFaKBv/AClPI3waISto1UKZoRZ39h8QFZus8laTqvEbNyEzqdQPnZ/hcyMl/BbTmpSsacg43v0wXD43+BE2V+FzjWFdmp1ZKAZheByUt91tyD4+S/00wGWAjerxOJYS2JSSngX4lrsNeREfnUg9dRG+o3JEWniDF1Lpd6U2KEdkHoyuwvkM36TmPCxy4+rQdvDKoss7FhugzM8kIjiPED8UuSH310jLYkRaUl9V18gswD7ha5Ebl77ZA4utLY1MOT4sRmKI0fJi+wM9v6Q1QC+Y6wAAAABJRU5ErkJggg==`;
 let xdata = {
-   value: ['华山北枢纽-济南虚', '东客站虚-华山北枢纽', '小许家枢纽-东客站虚', '临沂枣园枢纽-临沂虚', '华山北枢纽-济南虚', '华山北枢纽-济南虚', '华山北枢纽-济南虚']
+   value: ['平阴停车区', '孔村枢纽', '平阴南收费站', '东平湖枢纽', '沙河停车区', '梁山东收费站', '王官屯枢纽']
 };
 let sdata = {
    value: [32774, 30067, 28774, 30067, 30021, 30067, 32774]

From 33cae95f9ce106774ce28d66159e460f4478a0c1 Mon Sep 17 00:00:00 2001
From: Joe <1712833832@qq.com>
Date: Fri, 19 Jan 2024 12:41:48 +0800
Subject: [PATCH 4/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=BB=98=E8=AE=A4?=
 =?UTF-8?q?=E5=80=BC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ruoyi-ui/src/views/JiHeExpressway/components/Descriptions.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ruoyi-ui/src/views/JiHeExpressway/components/Descriptions.vue b/ruoyi-ui/src/views/JiHeExpressway/components/Descriptions.vue
index 3c8b85f7..2686b17e 100644
--- a/ruoyi-ui/src/views/JiHeExpressway/components/Descriptions.vue
+++ b/ruoyi-ui/src/views/JiHeExpressway/components/Descriptions.vue
@@ -81,7 +81,7 @@ export default {
 
       if (templateResult && templateResult != item.key) return templateResult
 
-      return result
+      return result || item.text;
     },
     getComponent(type) {
       return `Form${type.replace(/^[a-z]/, word => word.toUpperCase())}`

From 115cb40490b868860cbef2d63e7f4659ba047031 Mon Sep 17 00:00:00 2001
From: yyl <279235553@qq.com>
Date: Fri, 19 Jan 2024 12:49:15 +0800
Subject: [PATCH 5/9] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=9C=80=E6=96=B0?=
 =?UTF-8?q?=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../auditAnalytics/assets/charts.js           | 391 ++++++++++++++++++
 .../components/auditAnalytics/index.vue       |  66 +++
 .../channelAnalytics/assets/charts.js         | 284 +++++++++++++
 .../components/channelAnalytics/index.vue     |  66 +++
 .../eventTypeAnalysis/assets/charts.js        | 284 +++++++++++++
 .../components/eventTypeAnalysis/index.vue    |  66 +++
 .../nucleusThrough/assets/charts3.js          | 308 ++++++++++++++
 .../components/nucleusThrough/index.vue       | 133 ++++++
 .../components/postTrendsDay/assets/charts.js | 180 ++++++++
 .../components/postTrendsDay/index.vue        |  66 +++
 .../postTrendsMonth/assets/charts.js          | 180 ++++++++
 .../components/postTrendsMonth/index.vue      | 134 ++++++
 .../topComponent/assets/交通事故.png      | Bin 0 -> 2389 bytes
 .../topComponent/assets/交通拥堵.png      | Bin 0 -> 2399 bytes
 .../topComponent/assets/交通管制.png      | Bin 0 -> 3013 bytes
 .../topComponent/assets/其他事件.png      | Bin 0 -> 2322 bytes
 .../topComponent/assets/异常天气.png      | Bin 0 -> 2258 bytes
 .../topComponent/assets/施工建设.png      | Bin 0 -> 2227 bytes
 .../topComponent/assets/服务区异常.png   | Bin 0 -> 2293 bytes
 .../topComponent/assets/路障清除.png      | Bin 0 -> 2359 bytes
 .../topComponent/assets/车辆故障.png      | Bin 0 -> 2244 bytes
 .../components/topComponent/index.vue         | 256 ++++++++++++
 .../event/governanceAnalysis/index.vue        | 178 ++++++++
 .../RoadSectionTolls/assets/charts.js         |   2 +-
 .../components/deviceUptime/assets/charts.js  |  12 +-
 .../monthlyEquipment/assets/charts.js         |  12 +-
 26 files changed, 2605 insertions(+), 13 deletions(-)
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/auditAnalytics/assets/charts.js
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/auditAnalytics/index.vue
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/channelAnalytics/assets/charts.js
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/channelAnalytics/index.vue
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/eventTypeAnalysis/assets/charts.js
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/eventTypeAnalysis/index.vue
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/nucleusThrough/assets/charts3.js
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/nucleusThrough/index.vue
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsDay/assets/charts.js
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsDay/index.vue
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/assets/charts.js
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/index.vue
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/交通事故.png
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/交通拥堵.png
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/交通管制.png
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/其他事件.png
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/异常天气.png
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/施工建设.png
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/服务区异常.png
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/路障清除.png
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/车辆故障.png
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/index.vue
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/index.vue

diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/auditAnalytics/assets/charts.js b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/auditAnalytics/assets/charts.js
new file mode 100644
index 00000000..ab52e40c
--- /dev/null
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/auditAnalytics/assets/charts.js
@@ -0,0 +1,391 @@
+var res = [
+   { value: 50, name: '情报板发布' },
+   { value: 1, name: '' },
+   { value: 20, name: '微博发布' },
+   { value: 1, name: '' },
+   { value: 30, name: '服务网站' },
+   { value: 1, name: '' },
+  ];
+ //  var res = this.evaluatedCountList;
+  var data1 = [], data2 = [], data3 = [], legendData = [];
+  var curIndex = 0;
+  var index = 0;
+  let angle = 0; //角度,用来做简单的动画效果的
+
+  for (var i = 0; i < res.length; i++) {
+
+    data1.push({
+      value: res[i].value,
+      name: res[i].name,
+    })
+    data2.push({
+      value: res[i].value,
+      name: res[i].name,
+      itemStyle: {
+        opacity: 0.4,
+      },
+    })
+
+    data3.push({
+      value: res[i].value,
+      name: res[i].name,
+      itemStyle: {
+        opacity: 0.1,
+      },
+    })
+    if ( res[i].name != "" )
+    legendData.push(res[i].name);
+  }
+
+ var  options = {
+    color: ['#5CC5FF', 'transparent', '#54EFD5', 'transparent', '#FD9666', 'transparent', '#5C8CFE', 'transparent', '#51D5AD', 'transparent'],
+    title: [
+      {
+        text:'999',
+        top: '25%',
+        textAlign: 'center',
+        left: '50%',
+        textStyle: {
+          color: '#ffffff',
+          fontSize: 30,
+          fontFamily: 'SourceHanSansCN',
+        },
+      },
+      {
+        text: '总数',
+        top: '38%',
+        textAlign: 'center',
+        left: '50%',
+        textStyle: {
+          color: 'rgba(242, 252, 253, 0.84)',
+          fontSize: 16,
+          fontFamily: 'SourceHanSansCN',
+        },
+      },
+    ],
+    grid: {
+      top: '3%',
+      left: '6%',
+      right: '6%',
+      bottom: '3%',
+      containLabel: true
+    },
+    tooltip: {
+      trigger: 'item',
+      formatter: '{b} : {c}:{d}'
+    },
+    legend: {
+      orient: '',
+      left: '10%',
+      top: '68%',
+      itemWidth: 10,
+      itemHeight: 10,
+      icon:"circle",
+      textStyle: {
+        color: "#ffffff",
+        fontSize: 14,
+        lineHeight: 22,
+        rich: {
+          text: {
+            marginLeft:32,
+            fontSize: 14,
+          },
+          number: {
+            fontSize: 14,
+            color: "#37E7FF",
+            marginLeft:32,
+            fontWeight: 'bold'
+          },
+          unit: {
+            fontSize: 14,
+          }
+        }
+      },
+      data: legendData,
+      formatter(name) {
+        if ( name == "" ) return ""; 
+        const newData = res;
+        let tarValue = 0;
+        let total = 0;
+        for (let i = 0; i < newData.length; i++) {
+          total += newData[i].value;
+          if (newData[i].name === name) {
+            tarValue = newData[i].value;
+          }
+        }
+        var percert = total == 0 ? 0 : ((tarValue / total) * 100).toFixed(2);
+        const arr = name + '  ' + tarValue;
+        return `{text|${name}} {number|${percert}%}`;;
+      },
+    },
+    series: [
+              /** 饼图上刻度 */
+    {
+      type: 'gauge',
+      center: ['50%', '35%'],
+      radius: '40%', // 错位调整此处
+      startAngle: 0,
+      endAngle: 360,
+      splitNumber: 52,
+      axisLine: { show: false },
+      splitLine: { 
+        // length: 39,
+        length: '2',
+        lineStyle: {
+          width: 5,
+          color: '#5CC5FF'
+        }
+      },
+      axisTick: { show: false },
+      axisLabel: { show: false }
+    },
+        /** 绘制外部圆弧-2-开始圆点 <left-top> */
+    {
+      type: 'custom',
+      coordinateSystem: 'none',
+      renderItem: (params, api) => {
+        let x0 = api.getWidth() / 2;
+        let y0 = api.getHeight() / 2 - 59;
+        let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.50;
+        return {
+          type: 'circle',
+          shape: {
+            /** 角度175° 外弧2开始角度 */
+            cx: x0 + r * Math.cos((350 + -angle) * Math.PI / 180),
+            cy: y0 + r * Math.sin((350 + -angle) * Math.PI / 180),
+            r: 4
+          },
+          style: {
+            fill: '#5BC4FF',
+            stroke: '#5BC4FF'
+          },
+          silent: true
+        }
+      },
+      data: [0]
+    },
+      {
+        type: 'custom',
+        coordinateSystem: 'none',
+        renderItem: (params, api) => {
+          return {
+            type: 'arc',
+            shape: {
+              cx: api.getWidth() / 2,
+              cy: api.getHeight() / 2 - 59,
+              r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.50,
+              startAngle: (350 + -angle) * Math.PI / 180,
+              endAngle: (120 + -angle) * Math.PI / 180
+            },
+            style: {
+              fill: 'transparent',
+              stroke: '#5BC4FF66',
+              lineWidth: 2.6
+            },
+            silent: true
+          }
+        },
+        data: [0]
+      },
+      {
+        type: 'custom',
+        coordinateSystem: 'none',
+        renderItem: (params, api) => {
+          let x0 = api.getWidth() / 2;
+          let y0 = api.getHeight() / 2 - 59;
+          let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.50;
+          return {
+            type: 'circle',
+            shape: {
+              /** 角度175° 外弧2开始角度 */
+              cx: x0 + r * Math.cos((150 + -angle) * Math.PI / 180),
+              cy: y0 + r * Math.sin((150 + -angle) * Math.PI / 180),
+              r: 4
+            },
+            style: {
+              fill: '#5BC4FF',
+              stroke: '#5BC4FF'
+            },
+            silent: true
+          }
+        },
+        data: [0]
+      },
+        {
+          type: 'custom',
+          coordinateSystem: 'none',
+          renderItem: (params, api) => {
+            return {
+              type: 'arc',
+              shape: {
+                cx: api.getWidth() / 2,
+                cy: api.getHeight() / 2 - 59,
+                r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.50,
+                startAngle: (150 + -angle) * Math.PI / 180,
+                endAngle: (-30 + -angle) * Math.PI / 180
+              },
+              style: {
+                fill: 'transparent',
+                stroke: '#5BC4FF66',
+                lineWidth: 2.6
+              },
+              silent: true
+            }
+          },
+          data: [0]
+        },
+      {
+        type: 'custom',
+        coordinateSystem: 'none',
+        renderItem: (params, api) => {
+          let x0 = api.getWidth() / 2;
+          let y0 = api.getHeight() / 2 - 59;
+          let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.56;
+          return {
+            type: 'circle',
+            shape: {
+              /** 角度175° 外弧2开始角度 */
+              cx: x0 + r * Math.cos((590 + -angle) * Math.PI / 180),
+              cy: y0 + r * Math.sin((590 + -angle) * Math.PI / 180),
+              r: 4
+            },
+            style: {
+              fill: '#5BC4FF',
+              stroke: '#5BC4FF'
+            },
+            silent: true
+          }
+        },
+        data: [0]
+      },
+      {
+        type: 'custom',
+        coordinateSystem: 'none',
+        renderItem: (params, api) => {
+          return {
+            type: 'arc',
+            shape: {
+              cx: api.getWidth() / 2,
+              cy: api.getHeight() / 2 - 59,
+              r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.56,
+              startAngle: (590 + -angle) * Math.PI / 180,
+              endAngle: (350 + -angle) * Math.PI / 180
+            },
+            style: {
+              fill: 'transparent',
+              stroke: '#5BC4FF66',
+              lineWidth: 2.6
+            },
+            silent: true
+          }
+        },
+        data: [0]
+      },
+      {
+        type: 'custom',
+        coordinateSystem: 'none',
+        renderItem: (params, api) => {
+          let x0 = api.getWidth() / 2;
+          let y0 = api.getHeight() / 2 - 59;
+          let r = Math.min(api.getWidth(), api.getHeight()) / 2 * 0.56;
+          return {
+            type: 'circle',
+            shape: {
+              /** 角度175° 外弧2开始角度 */
+              cx: x0 + r * Math.cos((90 + -angle) * Math.PI / 180),
+              cy: y0 + r * Math.sin((90 + -angle) * Math.PI / 180),
+              r: 4
+            },
+            style: {
+              fill: '#5BC4FF',
+              stroke: '#5BC4FF'
+            },
+            silent: true
+          }
+        },
+        data: [0]
+      },
+      {
+        type: 'custom',
+        coordinateSystem: 'none',
+        renderItem: (params, api) => {
+          return {
+            type: 'arc',
+            shape: {
+              cx: api.getWidth() / 2,
+              cy: api.getHeight() / 2 - 59,
+              r: Math.min(api.getWidth(), api.getHeight()) / 2 * 0.56,
+              startAngle: (90 + -angle) * Math.PI / 180,
+              endAngle: (160 + -angle) * Math.PI / 180
+            },
+            style: {
+              fill: 'transparent',
+              stroke: '#5BC4FF66',
+              lineWidth: 2.6
+            },
+            silent: true
+          }
+        },
+        data: [0]
+      },
+      {
+        type: 'pie',
+        radius: ['45%', '39%'],
+        center: ['50%', '35%'],
+        z: 10,
+        label: {
+          show: false,
+          position: 'center',
+          formatter: (params) => {
+            return params.name + "\r\n" + params.value
+          },
+          rich: {
+            total: {
+              fontSize: 16,
+              color: '#04F5FE',
+            },
+            efficiency: {
+              fontSize: 12,
+              color: '#00FD6D',
+            },
+          },
+          color: '#FFFFFF',
+          fontSize: 12,
+          lineHeight: 16,
+        },
+        data: data1,
+        labelLine: {
+          show: false,
+        },
+         itemStyle: {
+          normal: {
+             borderWidth: 6,
+             shadowBlur: 10,
+             borderRadius: 50, // 圆角
+          }
+       }
+      },
+      {
+        type: 'pie',
+        radius: ['25%', '39%'],
+        center: ['50%', '35%'],
+        label: {
+          show: false,
+        },
+        data: data2,
+        labelLine: {
+          show: false,
+        },
+         itemStyle: {
+          normal: {
+             borderWidth: 6,
+             shadowBlur: 10,
+             borderRadius: 0, // 圆角
+          }
+       }
+      },
+    ],
+
+  };
+
+  export default options
\ No newline at end of file
diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/auditAnalytics/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/auditAnalytics/index.vue
new file mode 100644
index 00000000..023484e6
--- /dev/null
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/auditAnalytics/index.vue
@@ -0,0 +1,66 @@
+<template>
+    <div class='congestion'>
+      <WgtTitle :title="'收费站管制分析'"></WgtTitle>
+      <div class="board">
+        <div class="charts" id="auditAnalytics"></div>
+       </div>
+    </div>
+  </template>
+  
+  <script>
+  import WgtTitle from "../../../../../perception/widgets/title";
+  import * as echarts from "echarts";
+  import chartsStatistics from "./assets/charts";
+  export default {
+    name: 'RailWayDay',
+    components: {
+        WgtTitle
+    },
+    data() {
+      return {
+       
+      }
+    },
+  
+    created() {
+      
+    },
+    methods: {
+  
+    },
+    mounted() {
+      setTimeout(() => {
+        this.$nextTick(() => {
+          var myChart = echarts.init(document.getElementById('auditAnalytics'));
+          myChart.setOption(chartsStatistics);
+        });
+      });
+    },
+  }
+  </script>
+  
+  <style lang='scss' scoped>
+  .congestion {
+    width: 100%;
+    .board{
+      height:346px;
+      width: 100%;
+      padding: 0px 20px;
+      background: linear-gradient(180deg, rgba(6,66,88,0.2) 0%, #064258 100%);
+      border-radius: 5px 5px 5px 5px;
+        opacity: 0.8;
+        border: 1px solid;
+        border-image: linear-gradient(360deg, rgba(55, 231, 255,0.3), rgba(55, 231, 255, 0)) 1 1;
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+     
+    }
+  }
+      .charts {
+        height:376px;
+        width: 100%;
+      }
+  
+  </style>
+  
\ No newline at end of file
diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/channelAnalytics/assets/charts.js b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/channelAnalytics/assets/charts.js
new file mode 100644
index 00000000..fd4fab3a
--- /dev/null
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/channelAnalytics/assets/charts.js
@@ -0,0 +1,284 @@
+var res = [
+   { value: 20, name: '交通事故' },
+   { value: 1, name: '' },
+   { value: 20, name: '车辆故障' },
+   { value: 1, name: '' },
+   { value: 15, name: '路障清除' },
+   { value: 1, name: '' },
+   { value: 10, name: '交通管制' },
+   { value: 1, name: '' },
+   { value: 5, name: '道路拥堵' },
+   { value: 1, name: '' },
+   { value: 5, name: '异常天气' },
+   { value: 1, name: '' },
+  ];
+  let angle = 0; //角度,用来做简单的动画效果的
+  
+//获取圆上面某点的坐标(x0,y0表示坐标,r半径,angle角度)
+function getCirlPoint(x0, y0, r, angle) {
+  let x1 = x0 + r * Math.cos((angle * Math.PI) / 180);
+  let y1 = y0 + r * Math.sin((angle * Math.PI) / 180);
+  return {
+    x: x1,
+    y: y1,
+  };
+}
+
+let color = ['#4278F8F9', 'transparent','#5372C4', 'transparent', '#0046FFF9',  'transparent','#FB9434F9',  'transparent','#854101F9', 'transparent', '#05E599F9', 'transparent','#219F73F9', 'transparent','#7CEDD5F9', 'transparent',];
+let colorend = ['#4278F800', 'transparent', '#5372C400',  'transparent','#0046FF00', 'transparent', '#FB943400',  'transparent','#85410100',  'transparent','#05E59900', 'transparent','#219F7300', 'transparent','#7CEDD500', 'transparent',];
+
+ //  var res = this.evaluatedCountList;
+  var data1 = [], data2 = [], data3 = [], legendData = [];
+  var curIndex = 0;
+  var index = 0;
+
+  for (var i = 0; i < res.length; i++) {
+    data1.push({
+      value: res[i].value,
+      name: res[i].name,
+    })
+    data2.push({
+      value: res[i].value,
+      name: res[i].name,
+      itemStyle: {
+        opacity: 0.4,
+      },
+    })
+
+    data3.push({
+      value: res[i].value,
+      name: res[i].name,
+      itemStyle: {
+        opacity: 0.1,
+      },
+    })
+    if ( res[i].name != "" )
+    legendData.push(res[i].name);
+  }
+
+ var  options = {
+    color: ['#2867FF', 'transparent', '#58C3FF', 'transparent', '#FF6A3B', 'transparent','#FDA474', 'transparent','#FEE58F','transparent', '#8DFEBF','transparent', '#66F4DC', 'transparent','#33E27D', 'transparent','#5D8CFE','transparent',],
+    title: [
+      {
+        text:'999',
+        top: '25%',
+        textAlign: 'center',
+        left: '50%',
+        textStyle: {
+          color: '#ffffff',
+          fontSize: 30,
+          fontFamily: 'SourceHanSansCN',
+        },
+      },
+      {
+        text: '总数',
+        top: '38%',
+        textAlign: 'center',
+        left: '50%',
+        textStyle: {
+          color: 'rgba(242, 252, 253, 0.84)',
+          fontSize: 16,
+          fontFamily: 'SourceHanSansCN',
+        },
+      },
+    ],
+    grid: {
+      top: '38%',
+      left: '6%',
+      right: '6%',
+      bottom: '3%',
+      containLabel: true
+    },
+    tooltip: {
+      trigger: 'item',
+      formatter: '{b} : {c}:{d}'
+    },
+    legend: {
+      orient: '',
+      left: '10%',
+      top: '68%',
+      itemWidth: 10,
+      itemHeight: 10,
+      icon:"circle",
+      textStyle: {
+        color: "#ffffff",
+        fontSize: 14,
+        lineHeight: 22,
+        rich: {
+          text: {
+            marginLeft:32,
+            fontSize: 14,
+          },
+          number: {
+            fontSize: 14,
+            color: "#37E7FF",
+            marginLeft:32,
+            fontWeight: 'bold'
+          },
+          unit: {
+            fontSize: 14,
+          }
+        }
+      },
+      data: legendData,
+      formatter(name) {
+        const newData = res;
+        let tarValue = 0;
+        let total = 0;
+        for (let i = 0; i < newData.length; i++) {
+          total += newData[i].value;
+          if (newData[i].name === name) {
+            tarValue = newData[i].value;
+          }
+        }
+        var percert = total == 0 ? 0 : ((tarValue / total) * 100).toFixed(2);
+        const arr = name + '  ' + tarValue;
+        return `{text|${name}} {number|${percert}%}`;;
+      },
+    },
+    series: [
+       /** 饼图上刻度 */
+    {
+      type: 'gauge',
+      center: ['50%', '35%'],
+      radius: '46%', // 错位调整此处
+      startAngle: 0,
+      endAngle: 360,
+      splitNumber: 52,
+      axisLine: { show: false },
+      splitLine: { 
+        // length: 39,
+        length: '2',
+        lineStyle: {
+          width: 5,
+          color: '#5CC5FF'
+        }
+      },
+      axisTick: { show: false },
+      axisLabel: { show: false }
+    },
+    {
+      name: '中心效果圆',
+      type: 'gauge',
+      radius: '30%',
+      center: ['50%', '35%'],
+      startAngle: 0,
+      endAngle: 360,
+      axisLine: {
+         lineStyle: {
+            color: [[1, '#0AFFE950']],
+            width: 1
+         }
+      },
+      axisTick: {
+         show: false
+      },
+      splitLine: {
+         show: false
+      },
+      axisLabel: {
+         show: false
+      },
+      detail: {
+         show: false
+      },
+      pointer: {
+         show: false
+      },
+      progress: {
+         show: true,
+         width: 80,
+         itemStyle: {
+            color: {
+               type: 'radial',
+               x: 0.5,
+               y: 0.5,
+               r: 0.5,
+               colorStops: [
+                  {
+                     offset: 0,
+                     color: 'rgb(0, 224, 205, 0)'
+                  },
+                  {
+                     offset: 0.7,
+                     color: 'rgba(0, 224, 205, 0)'
+                  },
+                  {
+                     offset: 1,
+                     color: 'rgba(10, 255, 233, 0.5)'
+                  }
+               ]
+            }
+         }
+      },
+      data: [
+         {
+            value: 100
+         }
+      ]
+   },
+    {
+      type: 'pie',
+      radius: ['50%', '40%'],
+      center: ['50%', '35%'],
+      z: 10,
+      label: {
+        show: false,
+        position: 'center',
+        formatter: (params) => {
+          return params.name + "\r\n" + params.value
+        },
+        rich: {
+          total: {
+            fontSize: 16,
+            color: '#04F5FE',
+          },
+          efficiency: {
+            fontSize: 12,
+            color: '#00FD6D',
+          },
+        },
+        color: '#FFFFFF',
+        fontSize: 12,
+        lineHeight: 16,
+      },
+      data: data1,
+      labelLine: {
+        show: false,
+      },
+      itemStyle: {
+        normal: {
+            borderRadius: "5",
+            borderWidth:0,
+            borderType:"solid",
+            borderCap:"round",
+            borderJoin:"round",
+            borderColor:"#064258",
+            borderMiterLimit:"20",
+            color: function(params) {
+                return {
+                    type: 'linear',
+                    x: 0,
+                    y: 0,
+                    x2: 1,
+                    y2: 1,
+                    colorStops: [{
+                            offset: 0,
+                            color:  color[params.dataIndex] // 0% 处的颜色
+                        },
+                        {
+                            offset: 1,
+                            color: colorend[params.dataIndex] // 100% 处的颜色
+                        }
+                    ],
+                    globalCoord: false // 缺省为 false
+                }
+            }
+        },
+     },
+    }
+    ],
+
+  };
+
+  export default options
\ No newline at end of file
diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/channelAnalytics/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/channelAnalytics/index.vue
new file mode 100644
index 00000000..d3a60c57
--- /dev/null
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/channelAnalytics/index.vue
@@ -0,0 +1,66 @@
+<template>
+    <div class='congestion'>
+      <WgtTitle :title="'事件源分析'"></WgtTitle>
+      <div class="board">
+        <div class="charts" id="channelAnalytics"></div>
+       </div>
+    </div>
+  </template>
+  
+  <script>
+  import WgtTitle from "../../../../../perception/widgets/title";
+  import * as echarts from "echarts";
+  import chartsStatistics from "./assets/charts";
+  export default {
+    name: 'RailWayDay',
+    components: {
+        WgtTitle
+    },
+    data() {
+      return {
+       
+      }
+    },
+  
+    created() {
+      
+    },
+    methods: {
+  
+    },
+    mounted() {
+      setTimeout(() => {
+        this.$nextTick(() => {
+          var myChart = echarts.init(document.getElementById('channelAnalytics'));
+          myChart.setOption(chartsStatistics);
+        });
+      });
+    },
+  }
+  </script>
+  
+  <style lang='scss' scoped>
+  .congestion {
+    width: 100%;
+    .board{
+      height:346px;
+      width: 100%;
+      padding: 0px 20px;
+      background: linear-gradient(180deg, rgba(6,66,88,0.2) 0%, #064258 100%);
+      border-radius: 5px 5px 5px 5px;
+        opacity: 0.8;
+        border: 1px solid;
+        border-image: linear-gradient(360deg, rgba(55, 231, 255,0.3), rgba(55, 231, 255, 0)) 1 1;
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+     
+    }
+  }
+      .charts {
+        height:376px;
+        width: 100%;
+      }
+  
+  </style>
+  
\ No newline at end of file
diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/eventTypeAnalysis/assets/charts.js b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/eventTypeAnalysis/assets/charts.js
new file mode 100644
index 00000000..fd4fab3a
--- /dev/null
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/eventTypeAnalysis/assets/charts.js
@@ -0,0 +1,284 @@
+var res = [
+   { value: 20, name: '交通事故' },
+   { value: 1, name: '' },
+   { value: 20, name: '车辆故障' },
+   { value: 1, name: '' },
+   { value: 15, name: '路障清除' },
+   { value: 1, name: '' },
+   { value: 10, name: '交通管制' },
+   { value: 1, name: '' },
+   { value: 5, name: '道路拥堵' },
+   { value: 1, name: '' },
+   { value: 5, name: '异常天气' },
+   { value: 1, name: '' },
+  ];
+  let angle = 0; //角度,用来做简单的动画效果的
+  
+//获取圆上面某点的坐标(x0,y0表示坐标,r半径,angle角度)
+function getCirlPoint(x0, y0, r, angle) {
+  let x1 = x0 + r * Math.cos((angle * Math.PI) / 180);
+  let y1 = y0 + r * Math.sin((angle * Math.PI) / 180);
+  return {
+    x: x1,
+    y: y1,
+  };
+}
+
+let color = ['#4278F8F9', 'transparent','#5372C4', 'transparent', '#0046FFF9',  'transparent','#FB9434F9',  'transparent','#854101F9', 'transparent', '#05E599F9', 'transparent','#219F73F9', 'transparent','#7CEDD5F9', 'transparent',];
+let colorend = ['#4278F800', 'transparent', '#5372C400',  'transparent','#0046FF00', 'transparent', '#FB943400',  'transparent','#85410100',  'transparent','#05E59900', 'transparent','#219F7300', 'transparent','#7CEDD500', 'transparent',];
+
+ //  var res = this.evaluatedCountList;
+  var data1 = [], data2 = [], data3 = [], legendData = [];
+  var curIndex = 0;
+  var index = 0;
+
+  for (var i = 0; i < res.length; i++) {
+    data1.push({
+      value: res[i].value,
+      name: res[i].name,
+    })
+    data2.push({
+      value: res[i].value,
+      name: res[i].name,
+      itemStyle: {
+        opacity: 0.4,
+      },
+    })
+
+    data3.push({
+      value: res[i].value,
+      name: res[i].name,
+      itemStyle: {
+        opacity: 0.1,
+      },
+    })
+    if ( res[i].name != "" )
+    legendData.push(res[i].name);
+  }
+
+ var  options = {
+    color: ['#2867FF', 'transparent', '#58C3FF', 'transparent', '#FF6A3B', 'transparent','#FDA474', 'transparent','#FEE58F','transparent', '#8DFEBF','transparent', '#66F4DC', 'transparent','#33E27D', 'transparent','#5D8CFE','transparent',],
+    title: [
+      {
+        text:'999',
+        top: '25%',
+        textAlign: 'center',
+        left: '50%',
+        textStyle: {
+          color: '#ffffff',
+          fontSize: 30,
+          fontFamily: 'SourceHanSansCN',
+        },
+      },
+      {
+        text: '总数',
+        top: '38%',
+        textAlign: 'center',
+        left: '50%',
+        textStyle: {
+          color: 'rgba(242, 252, 253, 0.84)',
+          fontSize: 16,
+          fontFamily: 'SourceHanSansCN',
+        },
+      },
+    ],
+    grid: {
+      top: '38%',
+      left: '6%',
+      right: '6%',
+      bottom: '3%',
+      containLabel: true
+    },
+    tooltip: {
+      trigger: 'item',
+      formatter: '{b} : {c}:{d}'
+    },
+    legend: {
+      orient: '',
+      left: '10%',
+      top: '68%',
+      itemWidth: 10,
+      itemHeight: 10,
+      icon:"circle",
+      textStyle: {
+        color: "#ffffff",
+        fontSize: 14,
+        lineHeight: 22,
+        rich: {
+          text: {
+            marginLeft:32,
+            fontSize: 14,
+          },
+          number: {
+            fontSize: 14,
+            color: "#37E7FF",
+            marginLeft:32,
+            fontWeight: 'bold'
+          },
+          unit: {
+            fontSize: 14,
+          }
+        }
+      },
+      data: legendData,
+      formatter(name) {
+        const newData = res;
+        let tarValue = 0;
+        let total = 0;
+        for (let i = 0; i < newData.length; i++) {
+          total += newData[i].value;
+          if (newData[i].name === name) {
+            tarValue = newData[i].value;
+          }
+        }
+        var percert = total == 0 ? 0 : ((tarValue / total) * 100).toFixed(2);
+        const arr = name + '  ' + tarValue;
+        return `{text|${name}} {number|${percert}%}`;;
+      },
+    },
+    series: [
+       /** 饼图上刻度 */
+    {
+      type: 'gauge',
+      center: ['50%', '35%'],
+      radius: '46%', // 错位调整此处
+      startAngle: 0,
+      endAngle: 360,
+      splitNumber: 52,
+      axisLine: { show: false },
+      splitLine: { 
+        // length: 39,
+        length: '2',
+        lineStyle: {
+          width: 5,
+          color: '#5CC5FF'
+        }
+      },
+      axisTick: { show: false },
+      axisLabel: { show: false }
+    },
+    {
+      name: '中心效果圆',
+      type: 'gauge',
+      radius: '30%',
+      center: ['50%', '35%'],
+      startAngle: 0,
+      endAngle: 360,
+      axisLine: {
+         lineStyle: {
+            color: [[1, '#0AFFE950']],
+            width: 1
+         }
+      },
+      axisTick: {
+         show: false
+      },
+      splitLine: {
+         show: false
+      },
+      axisLabel: {
+         show: false
+      },
+      detail: {
+         show: false
+      },
+      pointer: {
+         show: false
+      },
+      progress: {
+         show: true,
+         width: 80,
+         itemStyle: {
+            color: {
+               type: 'radial',
+               x: 0.5,
+               y: 0.5,
+               r: 0.5,
+               colorStops: [
+                  {
+                     offset: 0,
+                     color: 'rgb(0, 224, 205, 0)'
+                  },
+                  {
+                     offset: 0.7,
+                     color: 'rgba(0, 224, 205, 0)'
+                  },
+                  {
+                     offset: 1,
+                     color: 'rgba(10, 255, 233, 0.5)'
+                  }
+               ]
+            }
+         }
+      },
+      data: [
+         {
+            value: 100
+         }
+      ]
+   },
+    {
+      type: 'pie',
+      radius: ['50%', '40%'],
+      center: ['50%', '35%'],
+      z: 10,
+      label: {
+        show: false,
+        position: 'center',
+        formatter: (params) => {
+          return params.name + "\r\n" + params.value
+        },
+        rich: {
+          total: {
+            fontSize: 16,
+            color: '#04F5FE',
+          },
+          efficiency: {
+            fontSize: 12,
+            color: '#00FD6D',
+          },
+        },
+        color: '#FFFFFF',
+        fontSize: 12,
+        lineHeight: 16,
+      },
+      data: data1,
+      labelLine: {
+        show: false,
+      },
+      itemStyle: {
+        normal: {
+            borderRadius: "5",
+            borderWidth:0,
+            borderType:"solid",
+            borderCap:"round",
+            borderJoin:"round",
+            borderColor:"#064258",
+            borderMiterLimit:"20",
+            color: function(params) {
+                return {
+                    type: 'linear',
+                    x: 0,
+                    y: 0,
+                    x2: 1,
+                    y2: 1,
+                    colorStops: [{
+                            offset: 0,
+                            color:  color[params.dataIndex] // 0% 处的颜色
+                        },
+                        {
+                            offset: 1,
+                            color: colorend[params.dataIndex] // 100% 处的颜色
+                        }
+                    ],
+                    globalCoord: false // 缺省为 false
+                }
+            }
+        },
+     },
+    }
+    ],
+
+  };
+
+  export default options
\ No newline at end of file
diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/eventTypeAnalysis/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/eventTypeAnalysis/index.vue
new file mode 100644
index 00000000..f83ed3af
--- /dev/null
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/eventTypeAnalysis/index.vue
@@ -0,0 +1,66 @@
+<template>
+    <div class='congestion'>
+      <WgtTitle :title="'事件类型分析'"></WgtTitle>
+      <div class="board">
+        <div class="charts" id="eventTypeAnalysis"></div>
+       </div>
+    </div>
+  </template>
+  
+  <script>
+  import WgtTitle from "../../../../../perception/widgets/title";
+  import * as echarts from "echarts";
+  import chartsStatistics from "./assets/charts";
+  export default {
+    name: 'RailWayDay',
+    components: {
+        WgtTitle
+    },
+    data() {
+      return {
+       
+      }
+    },
+  
+    created() {
+      
+    },
+    methods: {
+  
+    },
+    mounted() {
+      setTimeout(() => {
+        this.$nextTick(() => {
+          var myChart = echarts.init(document.getElementById('eventTypeAnalysis'));
+          myChart.setOption(chartsStatistics);
+        });
+      });
+    },
+  }
+  </script>
+  
+  <style lang='scss' scoped>
+  .congestion {
+    width: 100%;
+    .board{
+      height:346px;
+      width: 100%;
+      padding: 0px 20px;
+      background: linear-gradient(180deg, rgba(6,66,88,0.2) 0%, #064258 100%);
+      border-radius: 5px 5px 5px 5px;
+        opacity: 0.8;
+        border: 1px solid;
+        border-image: linear-gradient(360deg, rgba(55, 231, 255,0.3), rgba(55, 231, 255, 0)) 1 1;
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+     
+    }
+  }
+      .charts {
+        height:376px;
+        width: 100%;
+      }
+  
+  </style>
+  
\ No newline at end of file
diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/nucleusThrough/assets/charts3.js b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/nucleusThrough/assets/charts3.js
new file mode 100644
index 00000000..44d47f95
--- /dev/null
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/nucleusThrough/assets/charts3.js
@@ -0,0 +1,308 @@
+import * as echarts from "echarts";
+
+let xData = [
+    "1月",
+    "2月",
+    "3月",
+    "4月",
+    "5月",
+    "6月",
+    "7月",
+    "8月",
+    "9月",
+    "10月",
+    "11月",
+    "12月"
+  ];
+  let data1 = [200, 530, 920, 400, 600, 700, 300, 800, 900, 120, 570, 800];
+  let data2= [120, 340, 750, 600, 400, 700, 900, 200, 540, 320, 370, 500];
+  let data3 = [200, 530, 920, 400, 600, 700, 300, 800, 900, 120, 570, 800];
+  let options = {
+    tooltip: {
+      show:false,
+      trigger: "axis",
+      axisPointer: {
+        // 坐标轴指示器,坐标轴触发有效
+        type: "shadow", // 默认为直线,可选为:'line' | 'shadow'
+      },
+      textStyle: {
+        color: "#fff",
+        fontSize: 14,
+      },
+      backgroundColor: "rgba(3, 31, 71, .0)", //设置背景颜色
+      borderColor: "rgba(3, 31, 71, .0)",
+      formatter: "健康监测<br>{b1}:{c1}人",
+    },
+    grid: {
+      left: "2%",
+      right: "4%",
+      top: "20%",
+      bottom: "10%",
+      containLabel: true,
+    },
+    xAxis: {
+      data: xData,
+      show: true,
+      axisTick: {
+        show: false,
+        lineStyle: {
+          color: "#fff",
+        },
+      },
+      axisLine: {
+        lineStyle: {
+          color: "#1C82C5",
+        },
+      },
+      axisLabel: {
+        interval: 0,
+        align: "center",
+        rotate: "1",
+        margin: "20",
+        textStyle: {
+          fontSize: 12,
+          color: "#50A2C1",
+        },
+      },
+    },
+    yAxis: [
+      {
+        min: 0,
+        axisLine: {
+          lineStyle: {
+            color: "#1C82C5",
+          },
+        },
+        splitLine: {
+          show: true,
+          lineStyle: {
+            color: "rgba(28, 130, 197, .3)",
+            type: "solid",
+          },
+        },
+        axisLabel: {
+          color: "#DEEBFF",
+          textStyle: {
+            fontSize: 12,
+          },
+        },
+        axisTick: {
+          show: false,
+        },
+      },
+    ],
+    legend: {
+      // orient: 'vertical',
+      icon: "circle",
+      itemHeight: 6,
+      itemWidth: 6,
+      top: "5%",
+      right: "10%",
+      textStyle: {
+        color: "#fff",
+      },
+    
+      data:[
+        {
+          name:"审核通过",
+          itemStyle:{
+            color:'#00A3FF',
+          },
+        },
+        {
+          name:"待审核",
+          itemStyle:{
+            color:'#51BFA4',
+          },
+        },
+        {
+          name:"审核不通过",
+          itemStyle:{
+            color:'#E2BA74',
+          },
+        }
+      ],
+    },
+    series: [
+      {
+        name: "审核通过",
+        type: "bar",
+        barWidth: "10px",
+        selectedMode:false,
+        select:{
+          itemStyle:{
+            opacity: 1,
+            color: function (params) {
+              var a = params;
+             
+              return new echarts.graphic.LinearGradient(
+                0,
+                0,
+                0,
+                1,
+                [
+                  {
+                    offset: 0,
+                    color: "#1AC5FD", // 0% 处的颜色
+                  },
+                  {
+                    offset: 1,
+                    color: "#003B4E", // 100% 处的颜色
+                  },
+                ],
+                false
+              );
+            },
+          },
+        },
+        itemStyle: {
+          // lenged文本
+          opacity: 0.6,
+          color: function (params) {
+            var a = params.name;
+            console.log("==========a=============",a);
+            return new echarts.graphic.LinearGradient(
+              0,
+              0,
+              0,
+              1,
+              [
+                {
+                  offset: 0,
+                  color: "#1AC5FD", // 0% 处的颜色
+                },
+                {
+                  offset: 1,
+                  color: "#003B4E", // 100% 处的颜色
+                },
+              ],
+              false
+            );
+          },
+        },
+        data: data2,
+      },
+      // 下半截柱状图linear-gradient(180deg, #61D8FF 0%, #003B4E 100%); linear-gradient(180deg, #06D7B1 0%, #003B4E 100%)
+      {
+        name: "待审核",
+        type: "bar",
+        barWidth: "10px",
+        barGap: "120%",
+        selectedMode:false,
+        select:{
+          itemStyle:{
+            opacity: 1,
+            color: function (params) {
+              var a = params;
+             
+              return new echarts.graphic.LinearGradient(
+                0,
+                0,
+                0,
+                1,
+                [
+                  {
+                    offset: 0,
+                    color: "#00E4BB53", // 0% 处的颜色
+                  },
+                  {
+                    offset: 1,
+                    color: "#00E4BB53", // 100% 处的颜色
+                  },
+                ],
+                false
+              );
+            },
+          },
+        },
+        itemStyle: {
+          // lenged文本
+          opacity: 0.6,
+          color: function (params) {
+            var a = params.name;
+            console.log("==========a=============",a);
+            return new echarts.graphic.LinearGradient(
+              0,
+              0,
+              0,
+              1,
+              [
+                {
+                  offset: 0,
+                  color: "#00E4BB", // 0% 处的颜色
+                },
+                {
+                  offset: 1,
+                  color: "#00E4BB00", // 100% 处的颜色
+                },
+              ],
+              false
+            );
+          },
+        },
+        data: data1,
+      },
+  
+{
+  name: "审核不通过",
+  type: "bar",
+  barWidth: "10px",
+  selectedMode:false,
+  select:{
+    itemStyle:{
+      opacity: 1,
+      color: function (params) {
+        var a = params;
+       
+        return new echarts.graphic.LinearGradient(
+          0,
+          0,
+          0,
+          1,
+          [
+            {
+              offset: 0,
+              color: "#1AC5FD", // 0% 处的颜色
+            },
+            {
+              offset: 1,
+              color: "#003B4E", // 100% 处的颜色
+            },
+          ],
+          false
+        );
+      },
+    },
+  },
+  itemStyle: {
+    // lenged文本
+    opacity: 0.6,
+    color: function (params) {
+      var a = params.name;
+      console.log("==========a=============",a);
+      return new echarts.graphic.LinearGradient(
+        0,
+        0,
+        0,
+        1,
+        [
+          {
+            offset: 0,
+            color: "#FCBE39", // 0% 处的颜色
+          },
+          {
+            offset: 1,
+            color: "#FCBE3900", // 100% 处的颜色
+          },
+        ],
+        false
+      );
+    },
+  },
+  data: data2,
+},
+    ],
+  };
+
+
+  export default options;
\ No newline at end of file
diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/nucleusThrough/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/nucleusThrough/index.vue
new file mode 100644
index 00000000..8ddc301c
--- /dev/null
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/nucleusThrough/index.vue
@@ -0,0 +1,133 @@
+<template>
+    <div class='congestion'>
+      <WgtTitle :title="'月审核通过趋势分析'"></WgtTitle>
+      <div class="board">
+        <div class="searchPanel_1" >
+          <el-date-picker
+          size="mini"
+          v-if="year != 'quarter'"
+          class="selectRoad"
+            v-model="dateTime"
+            style="width:140px;"
+          
+            placeholder="请选择"
+        />
+        <el-quarter-picker  size="mini" class="selectRoad" style="width:180px;" v-if="year == 'quarter'" v-model="quarter" aria-placeholder="请选季度" />
+
+          <el-button type="primary" size="mini" class="btnSearch"  icon="el-icon-search">查询</el-button>
+          <el-button class="btnReset"  size="mini" icon="el-icon-refresh-left" >重置</el-button>
+        </div>
+        <div class="charts" id="nucleusThrough"></div>
+       </div>
+    </div>
+  </template>
+  
+  <script>
+  import WgtTitle from "../../../../../perception/widgets/title";
+  import * as echarts from "echarts";
+  import chartsStatistics from "./assets/charts3";
+  export default {
+    name: 'nucleusThrough',
+    components: {
+        WgtTitle
+    },
+    data() {
+      return {
+       
+      }
+    },
+  
+    created() {
+      
+    },
+    methods: {
+  
+    },
+    mounted() {
+      setTimeout(() => {
+        this.$nextTick(() => {
+          var myChart = echarts.init(document.getElementById('nucleusThrough'));
+          myChart.setOption(chartsStatistics);
+        });
+      });
+    },
+  }
+  </script>
+  
+  <style lang='scss' scoped>
+  .congestion {
+    width: 100%;
+    .board{
+      position: relative;
+      height:300px;
+      width: 100%;
+      padding: 0px 20px;
+      background: linear-gradient(180deg, rgba(6,66,88,0.2) 0%, #064258 100%);
+      border-radius: 5px 5px 5px 5px;
+        opacity: 1;
+        border: 1px solid;
+        border-image: linear-gradient(360deg, rgba(55, 231, 255,0.3), rgba(55, 231, 255, 0)) 1 1;
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+
+
+      .searchPanel_1{
+        position:absolute;
+        display: flex;
+        align-items: center;
+        height: 40px;
+        width:100%;
+        font-size: 14px;
+        margin-bottom: 10px;
+        left:20px;
+        top:2px;
+        z-index: 10000;
+    div{
+      white-space: nowrap;
+      margin-right: 4px;
+    }
+    .inputZh{
+      width: 47px;
+      ::v-deep{
+        .el-input__inner{
+          background-color: #064258 !important;
+          border-width: 0px !important;
+        }
+      }
+    }
+    .inputJl{
+      margin-left: 5px;
+      margin-right: 10px;
+    }
+    .selectRoad{
+      width:89px;
+      border:1px solid #00B3CC;
+      ::v-deep{
+        .el-input__inner{
+          background-color: #064258 !important;
+          border-width: 0px !important;
+        }
+      }
+    }
+    .btnSearch{
+      background: linear-gradient(180deg, #005C79 0%, #009BCC 100%);
+      margin-left: 10px;
+      border-color: transparent;
+    }
+    .btnReset{
+      background: linear-gradient(180deg, #005C79 0%, #009BCC 100%);;
+      border-color: transparent;
+      color: white;
+    }
+   }
+     
+    }
+  }
+      .charts {
+        height:300px;
+        width: 100%;
+      }
+  
+  </style>
+  
\ No newline at end of file
diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsDay/assets/charts.js b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsDay/assets/charts.js
new file mode 100644
index 00000000..a98339fc
--- /dev/null
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsDay/assets/charts.js
@@ -0,0 +1,180 @@
+
+/* 数据 */
+let nameList = ["00:00", "02:00", "04:00", "06:00", "08:00", "10:00", "12:00", "14:00", "16:00", "18:00", "20:00", "22:00"]; // 类别
+let valueList = [800, 520, 650, 950, 420, 600, 450, 720, 303, 503 , 203 ,703 , 903  ]; // 人数
+var yList = [ "1000","800","轻度拥堵","基本畅通","畅通"]
+/* 数据整合 */
+let dataList = [];
+nameList.map((item, index) => {
+   if (index === 4) {
+      dataList.push({
+         name: item,
+         value: valueList[index],
+         itemStyle: {
+            color: {
+               type: 'linear',
+               x: 0,
+               y: 0,
+               x2: 0,
+               y2: 1,
+               colorStops: [{
+                  offset: 0, color: '#FFB904' // 0% 处的颜色
+               }, {
+                  offset: 1, color: '#FF6969' // 100% 处的颜色
+               }],
+               global: false // 缺省为 false
+            },
+            borderRadius: 6
+         },
+         label: { show: false }
+      })
+   } else {
+      dataList.push({
+         name: item,
+         value: valueList[index],
+         itemStyle:{
+            borderRadius: 6
+         }
+      })
+   }
+})
+
+var options = {
+   legend: {
+      // orient: 'vertical',
+      icon: "circle",
+      itemHeight: 8,
+      itemWidth: 8,
+      top: "5%",
+      x: "right",
+      textStyle: {
+        color: "#fff",
+      },
+    },
+   grid: {
+      top: '15%',//上边距
+      right: '0',//右边距
+      left: '0',//左边距
+      bottom: "10%",//下边距
+      containLabel: true,
+   },
+   xAxis: {
+      type: 'category',
+      data: nameList,
+      axisTick: {
+         show: false //隐藏X轴刻度
+      },
+      axisLine: {
+         lineStyle: {
+            color: "rgba(49, 217, 255, 0.8)"
+         }
+      },
+      axisLabel: {
+         show: true,
+         color: '#B6E6FF',
+         fontSize:8,
+         fontFamily: 'Source Han Sans CN-Regular',
+      },
+   },
+   yAxis: [{
+      type: 'value',
+      name: "",
+      max: 1200,
+      min:0,
+      splitNumber:5,
+      nameTextStyle: {
+         color: '#B6E6FF',
+         fontSize: 13,
+         fontFamily: 'Source Han Sans CN-Regular',
+         align: "left",
+         verticalAlign: "center",
+      },
+      axisLabel: {
+         fontSize: 13,
+         color: '#B6E6FF',
+         fontFamily: 'HarmonyOS Sans-Regular',
+         // formatter:function(value,index){
+         //    return yList[index]
+         // }
+      },
+      axisLine: {
+         show: false,
+      },
+      axisTick: {
+         show: false
+      },
+      splitLine: {
+         lineStyle: {
+            color: 'rgba(49, 217, 255, 0.5)',
+         }
+      },
+   }],
+   series: [
+      {
+         name: '情报板发布',
+         type: 'line',
+         symbol: 'circle',
+         symbolSize: 0,
+         smooth: true,
+         areaStyle: {
+            width: 4,
+            opacity: 0.25,
+            color: {
+               type: 'linear',
+               x: 0,
+               y: 0,
+               x2: 0,
+               y2: 1,
+               colorStops: [
+                  { offset: 0.389, color: "#32BB8A99" },
+                  { offset: 1, color: "#32BB8A00" },
+               ],
+               global: false,
+            },
+         },
+         // yAxisIndex: 1, // 与第二个 y 轴关联
+         itemStyle: {
+           color: '#32BB8A90',
+         },
+         lineStyle: {
+           width:2,
+         },
+         
+         data: [1000, 800, 520, 600, 900, 700, 700,1000, 800, 520, 600, 900, 700, 700], // 折线图的数据
+       },
+       {
+         name: '服务网站',
+         type: 'line',
+         symbol: 'circle',
+         symbolSize: 0,
+
+         // yAxisIndex: 1, // 与第二个 y 轴关联
+         itemStyle: {
+           color: '#E2BA7490',
+         },
+         lineStyle: {
+           width: 2,
+         },
+         smooth: true,
+         areaStyle: {
+            width: 4,
+            opacity: 0.25,
+            color: {
+               type: 'linear',
+               x: 0,
+               y: 0,
+               x2: 0,
+               y2: 1,
+               colorStops: [
+                  { offset: 0.389, color: "#E2BA7490" },
+                  { offset: 1, color: "#E2BA7400" },
+               ],
+               global: false,
+            },
+         },
+         data: [600, 700, 900, 400, 500, 800, 600,600, 700, 900, 400, 500, 800, 600], // 折线图的数据
+       },
+   ]
+}
+
+export default options;
diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsDay/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsDay/index.vue
new file mode 100644
index 00000000..606d6f7e
--- /dev/null
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsDay/index.vue
@@ -0,0 +1,66 @@
+<template>
+    <div class='congestion'>
+      <WgtTitle :title="'今日事件趋势'"></WgtTitle>
+      <div class="board">
+        <div class="charts" id="postTrendsDay"></div>
+       </div>
+    </div>
+  </template>
+  
+  <script>
+  import WgtTitle from "../../../../../perception/widgets/title";
+  import * as echarts from "echarts";
+  import chartsStatistics from "./assets/charts";
+  export default {
+    name: 'RailWayDay',
+    components: {
+        WgtTitle
+    },
+    data() {
+      return {
+       
+      }
+    },
+  
+    created() {
+      
+    },
+    methods: {
+  
+    },
+    mounted() {
+      setTimeout(() => {
+        this.$nextTick(() => {
+          var myChart = echarts.init(document.getElementById('postTrendsDay'));
+          myChart.setOption(chartsStatistics);
+        });
+      });
+    },
+  }
+  </script>
+  
+  <style lang='scss' scoped>
+  .congestion {
+    width: 100%;
+    .board{
+      height:346px;
+      width: 100%;
+      padding: 0px 20px;
+      background: linear-gradient(180deg, rgba(6,66,88,0.2) 0%, #064258 100%);
+      border-radius: 5px 5px 5px 5px;
+        opacity: 1;
+        border: 1px solid;
+        border-image: linear-gradient(360deg, rgba(55, 231, 255,0.3), rgba(55, 231, 255, 0)) 1 1;
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+     
+    }
+  }
+      .charts {
+        height:346px;
+        width: 100%;
+      }
+  
+  </style>
+  
\ No newline at end of file
diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/assets/charts.js b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/assets/charts.js
new file mode 100644
index 00000000..c4411f48
--- /dev/null
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/assets/charts.js
@@ -0,0 +1,180 @@
+
+/* 数据 */
+let nameList = ["00:00", "02:00", "04:00", "06:00", "08:00", "10:00", "12:00", "14:00", "16:00", "18:00", "20:00", "22:00"]; // 类别
+let valueList = [800, 520, 650, 950, 420, 600, 450, 720, 303, 503 , 203 ,703 , 903  ]; // 人数
+var yList = [ "1000","800","轻度拥堵","基本畅通","畅通"]
+/* 数据整合 */
+let dataList = [];
+nameList.map((item, index) => {
+   if (index === 4) {
+      dataList.push({
+         name: item,
+         value: valueList[index],
+         itemStyle: {
+            color: {
+               type: 'linear',
+               x: 0,
+               y: 0,
+               x2: 0,
+               y2: 1,
+               colorStops: [{
+                  offset: 0, color: '#FFB904' // 0% 处的颜色
+               }, {
+                  offset: 1, color: '#FF6969' // 100% 处的颜色
+               }],
+               global: false // 缺省为 false
+            },
+            borderRadius: 6
+         },
+         label: { show: false }
+      })
+   } else {
+      dataList.push({
+         name: item,
+         value: valueList[index],
+         itemStyle:{
+            borderRadius: 6
+         }
+      })
+   }
+})
+
+var options = {
+   legend: {
+      // orient: 'vertical',
+      icon: "circle",
+      itemHeight: 8,
+      itemWidth: 8,
+      top: "5%",
+      x: "right",
+      textStyle: {
+        color: "#fff",
+      },
+    },
+   grid: {
+      top: '20%',//上边距
+      right: '0',//右边距
+      left: '0',//左边距
+      bottom: "10%",//下边距
+      containLabel: true,
+   },
+   xAxis: {
+      type: 'category',
+      data: nameList,
+      axisTick: {
+         show: false //隐藏X轴刻度
+      },
+      axisLine: {
+         lineStyle: {
+            color: "rgba(49, 217, 255, 0.8)"
+         }
+      },
+      axisLabel: {
+         show: true,
+         color: '#B6E6FF',
+         fontSize:8,
+         fontFamily: 'Source Han Sans CN-Regular',
+      },
+   },
+   yAxis: [{
+      type: 'value',
+      name: "",
+      max: 1000,
+      min:0,
+      splitNumber:5,
+      nameTextStyle: {
+         color: '#B6E6FF',
+         fontSize: 13,
+         fontFamily: 'Source Han Sans CN-Regular',
+         align: "left",
+         verticalAlign: "center",
+      },
+      axisLabel: {
+         fontSize: 13,
+         color: '#B6E6FF',
+         fontFamily: 'HarmonyOS Sans-Regular',
+         // formatter:function(value,index){
+         //    return yList[index]
+         // }
+      },
+      axisLine: {
+         show: false,
+      },
+      axisTick: {
+         show: false
+      },
+      splitLine: {
+         lineStyle: {
+            color: 'rgba(49, 217, 255, 0.5)',
+         }
+      },
+   }],
+   series: [
+      {
+         name: '感知事件',
+         type: 'line',
+         symbol: 'circle',
+         symbolSize: 0,
+         smooth: true,
+         areaStyle: {
+            width: 4,
+            opacity: 0.25,
+            color: {
+               type: 'linear',
+               x: 0,
+               y: 0,
+               x2: 0,
+               y2: 1,
+               colorStops: [
+                  { offset: 0.389, color: "#32BB8A99" },
+                  { offset: 1, color: "#32BB8A00" },
+               ],
+               global: false,
+            },
+         },
+         // yAxisIndex: 1, // 与第二个 y 轴关联
+         itemStyle: {
+           color: '#32BB8A',
+         },
+         lineStyle: {
+           width:2,
+         },
+         
+         data: [1000, 800, 520, 600, 900, 700, 700,1000, 800, 520, 600, 900, 700, 700], // 折线图的数据
+       },
+       {
+         name: '交通事件',
+         type: 'line',
+         symbol: 'circle',
+         symbolSize: 0,
+
+         // yAxisIndex: 1, // 与第二个 y 轴关联
+         itemStyle: {
+           color: '#E2BA74',
+         },
+         lineStyle: {
+           width: 2,
+         },
+         smooth: true,
+         areaStyle: {
+            width: 4,
+            opacity: 0.25,
+            color: {
+               type: 'linear',
+               x: 0,
+               y: 0,
+               x2: 0,
+               y2: 1,
+               colorStops: [
+                  { offset: 0.389, color: "##E2BA7490" },
+                  { offset: 1, color: "##E2BA7400" },
+               ],
+               global: false,
+            },
+         },
+         data: [600, 700, 900, 400, 500, 800, 600,600, 700, 900, 400, 500, 800, 600], // 折线图的数据
+       },
+   ]
+}
+
+export default options;
diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/index.vue
new file mode 100644
index 00000000..be895be9
--- /dev/null
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/postTrendsMonth/index.vue
@@ -0,0 +1,134 @@
+<template>
+    <div class='congestion'>
+      <WgtTitle :title="'今日发布趋势分析'"></WgtTitle>
+      <div class="board">
+        <div class="searchPanel_1" >
+          <el-date-picker
+          size="mini"
+          v-if="year != 'quarter'"
+          class="selectRoad"
+            v-model="dateTime"
+            style="width:140px;"
+          
+            placeholder="请选择"
+        />
+        <el-quarter-picker  size="mini" class="selectRoad" style="width:180px;" v-if="year == 'quarter'" v-model="quarter" aria-placeholder="请选季度" />
+
+          <el-button type="primary" size="mini" class="btnSearch"  icon="el-icon-search">查询</el-button>
+          <el-button class="btnReset"  size="mini" icon="el-icon-refresh-left" >重置</el-button>
+        </div>
+        <div class="charts" id="postTrendsMonth"></div>
+       </div>
+    </div>
+  </template>
+  
+  <script>
+  import WgtTitle from "../../../../../perception/widgets/title";
+  import * as echarts from "echarts";
+  import chartsStatistics from "./assets/charts";
+  export default {
+    name: 'postTrendsMonth',
+    components: {
+        WgtTitle
+    },
+    data() {
+      return {
+       
+      }
+    },
+  
+    created() {
+      
+    },
+    methods: {
+  
+    },
+    mounted() {
+      setTimeout(() => {
+        this.$nextTick(() => {
+          var myChart = echarts.init(document.getElementById('postTrendsMonth'));
+          myChart.setOption(chartsStatistics);
+        });
+      });
+    },
+  }
+  </script>
+  
+  <style lang='scss' scoped>
+  .congestion {
+    width: 100%;
+    .board{
+      position: relative;
+      height:300px;
+      width: 100%;
+      padding: 0px 20px;
+      background: linear-gradient(180deg, rgba(6,66,88,0.2) 0%, #064258 100%);
+      border-radius: 5px 5px 5px 5px;
+        opacity: 0.8;
+        border: 1px solid;
+        border-image: linear-gradient(360deg, rgba(55, 231, 255,0.3), rgba(55, 231, 255, 0)) 1 1;
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      flex-direction: column;
+
+      .searchPanel_1{
+        position:absolute;
+        display: flex;
+        align-items: center;
+        height: 40px;
+        width:100%;
+        font-size: 14px;
+        margin-bottom: 10px;
+        left:20px;
+        top:2px;
+        z-index: 100;
+    div{
+      white-space: nowrap;
+      margin-right: 4px;
+    }
+    .inputZh{
+      width: 47px;
+      ::v-deep{
+        .el-input__inner{
+          background-color: #064258 !important;
+          border-width: 0px !important;
+        }
+      }
+    }
+    .inputJl{
+      margin-left: 5px;
+      margin-right: 10px;
+    }
+    .selectRoad{
+      width:89px;
+      border:1px solid #00B3CC;
+      ::v-deep{
+        .el-input__inner{
+          background-color: #064258 !important;
+          border-width: 0px !important;
+        }
+      }
+    }
+    .btnSearch{
+      background: linear-gradient(180deg, #005C79 0%, #009BCC 100%);
+      margin-left: 10px;
+      border-color: transparent;
+    }
+    .btnReset{
+      background: linear-gradient(180deg, #005C79 0%, #009BCC 100%);;
+      border-color: transparent;
+      color: white;
+    }
+   }
+
+     
+    }
+  }
+      .charts {
+        height:300px;
+        width: 100%;
+      }
+  
+  </style>
+  
\ No newline at end of file
diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/交通事故.png b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/交通事故.png
new file mode 100644
index 0000000000000000000000000000000000000000..ca2881360d6b44a91cc5b7fa4787f6c8d3a74613
GIT binary patch
literal 2389
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
Hu0mjf7(}DY

literal 0
HcmV?d00001

diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/交通拥堵.png b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/交通拥堵.png
new file mode 100644
index 0000000000000000000000000000000000000000..9ee3ddeb464f46f4bb82224cbf9a39873a389256
GIT binary patch
literal 2399
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
Ra(e&(002ovPDHLkV1fu1kLv&c

literal 0
HcmV?d00001

diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/交通管制.png b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/交通管制.png
new file mode 100644
index 0000000000000000000000000000000000000000..baf87026c8ddc98595639ce5a3293c789af9fa1e
GIT binary patch
literal 3013
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
Hu0mjf#An{j

literal 0
HcmV?d00001

diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/其他事件.png b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/其他事件.png
new file mode 100644
index 0000000000000000000000000000000000000000..e3f3da33e5596de61bdcf44ff61b35833f78459e
GIT binary patch
literal 2322
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

literal 0
HcmV?d00001

diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/异常天气.png b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/异常天气.png
new file mode 100644
index 0000000000000000000000000000000000000000..a4f41870672597d4bb2dbd6d5d244520e6cf3b68
GIT binary patch
literal 2258
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

literal 0
HcmV?d00001

diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/施工建设.png b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/施工建设.png
new file mode 100644
index 0000000000000000000000000000000000000000..d10427841ea0b8409d7be652efb88df3e5d86067
GIT binary patch
literal 2227
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
BIsX6v

literal 0
HcmV?d00001

diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/服务区异常.png b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/服务区异常.png
new file mode 100644
index 0000000000000000000000000000000000000000..12d1c69fd329de138305902ea832963bc34a6d80
GIT binary patch
literal 2293
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
P00000NkvXXu0mjf2*+lP

literal 0
HcmV?d00001

diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/路障清除.png b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/路障清除.png
new file mode 100644
index 0000000000000000000000000000000000000000..e7be2ee1f577a2a29a19697bfa582830a38e4f9b
GIT binary patch
literal 2359
zcmV-73CQ+|P)<h;3K|Lk000e1NJLTq001ul001ut1^@s6b0?Fm00001b5ch_0Itp)
z=>Px-@kvBMRA@uZntzN`)fLA-=f0W!#qP3zQWi08)k11eTG(Q3iTI;pT3853tJVc<
zZN=IYS}~H=YN56^X+$uPQd1QKff{}oXE8Rm^+!sAlv$LjF;$vqL9imYxXb>SnRie3
zzPB?wz%IO<-B#aUGxP2}_j}GgKfd?e5&HWqc_GHdrM1LklR?KKj74P>qE#R<&<x0j
zpznk1LrJ3E4qj>6#gZ#C{aIcLp8WK#T8uXzWj4ZpQ1&9chR8dpe+Z-*F+OTNkSaum
zqg((w8sQ6AMs_N?1;Zmut=&}!j=qCW?3s+%CBOx!ZpAZyMLE>x#f55Ar=VPi@^6%1
zF{AdGzQ~CV{+T`J;oDUR<3Jt-`)pv@fp}CWqk22YYk20zOdbDj6tU63Z%@ucS%%1Z
z)NUFu(D?{eiV%AvmboYknNj=rnG`rZco&QlDwm@=4fIZodFM<5`~BY98bp=@+i7fG
zaJr!G9sHUXN*GrD6hb8`i!svHZ(vacxLv?s2BwJ*Kc2;Ru59mVYR}-E#mAR7AjHAD
z2hmj2bq8!*sK9+-QZ#-%y{8@M8GJ)>HRvVa-T8?C&sre611d?T*Dg5OFsFhKgVSkz
z{U-`Mi`3InGOWY0^yDBu5qy{q_k!Niui!j?^bAVMZpAahNT+x3-htoH{LztuT`COX
zhsmUCnR!_*X`BeYA?X5iKgb!=RIfnJId?2W&t8LSC|g9yWEy$%AGZ|@KAcz|ROq@1
z)3b8A!9Sgxijfr{bNl5kpBuZ7;-dOs0jGcikHXt;Urt9$;Tg-(3}p-G9HvivDX>e<
z8j0jigw2QqFA9EYM%PnTy3pYbqz4LcoHyRM3i10_krh{OCR0~?RX6y=%U?!fTM@}^
zNx|SNDu*#*)EY!a=G>;eeHHKSE8G=x*{93;#>`~egvQYF4aq+sv_<yy^1;IyTr~+V
zR)b+A#;Zo<Gl(AKc*|;9Ti#;mS>FoSWG2<fd;6a&*cc~IRGov`K}?_ceIY1F6^HR;
zPGoj??q`3E=Utn#Y<_UM&%XaRjvrgi(W7q-80hXOt;Xs)8k>g;iI*oq>|u<|jkM6<
zs?k&q*%%x!((S8JiYYF+1MtH6F3X4pzTVz;7l+?}K9bzN46?cb%RC{GT#RrDA`eEI
zKjNGR@M4omryk^kLz{5Q4658124|iGK~eiA2M<IuN~Fbe&VLt{JwiirGsx=*+at}d
z9`$EbhmcCG;OOBe7(Vh|jMN2|Hlo<B{O&$0!p9%YrnPlo*{JH*Q5_>R?0y9?%YZi{
zfv+5L8O6o-Bb1ZLJWtG<6u6Gd=T3oaiVVI3>C{6s9epB_?C66&k8c+_%ey1oJVc_G
z?~<}=$_6b5y)Z07T~D?sS-Th2CXBfPtBo`rnI9cjgpn#$U^h9-r-85b`E=w-5fxQW
zfeb%oxsKF=0DMXDI#8eHrpxgMkXEbbL1u@uydqK?LElq{lvg~7nDfIV<9uBmmuaQ7
z`D+2#ipm5~O~${Sw&S}CTBEl~s=EufyyF^Pyo#du6g+PhN=-lr!Ys3w_RP;HF1it+
z9&1<A-u74yhugJy@ghV<(b2vbt1W#}ENA&d@-Sj=K)j|t35dt*@w|mt-HET;@uUM`
z9&ij~5^xCXKZfVs9gInJbRQ;)itfjlYl6(AY$V+gElqdF)-Yggm~E_Ch8Hp0WCg^$
z-+@dFzJ{6RU94`!w_Ayss}cEmI5gOdR?TFt3BG!<X`Lzc7dgrd9r*To)E<azJZmpP
zxkE_oUXRE>5qUQHWG%%re*ubfbF$PIUg~s%JAv~svJ#{^hy|6ISZgt|IX5p%tnT&p
zPGy!xUSDk;$VFj=h4C2qZS=`H3AHN_<AQw!q8`4^M=0vz!AlXd9jm2?{u0$IK@Ng8
zxkbA+B&-YJ7uU0#jWN-zZ*>u{*Kr$1hu0!<Q)KX&^iP3VAV=`x(}Tl{Z^vQ%m7rz7
zeqyoNx%BI&>rwpyxQ;;HlTYa2Sz_^fBVlmFO!d}oR*B5PMC>_sv?Wm2D3!Gom#oSy
zm`Z&U^%n=k%*1XY9t&Be>M&C6i2!`}=_({}j>rX7`J_3$rbvGzn8!m_=^n@DRa!8d
zxs0bfMw3oER;k2`<`R#0(~5NJ0y61824IX?KuPJ&Kz>`x{U}p%)j05U2fB+(IQSAk
z`8%b9et25ztGyYdn7Z0d%e%+5tHs-fX!ln4CZVPI7S!H`$iFDByy1jlZLQPDq?aIc
zP*#2|#%rOyZ7i8|_COv6r~{ha0kz#b5EvvjpOQg)dR4$`0*_g)E#7^GZAiWV^5PlU
z<*}oW0ORnyRg@1t@o0DKqYa&n*fDsqjZ_Q{b9eBYjtPoa=t6m5b7{7_(;(7F<&a)F
z4SEHt*HQPSuLL&8Y3Tay*!5?${?WsKLbZ&_irK_VKgi8*Ya32m%Lc%wwBja8OO9~7
zbu{hnw=S|Dx`tCAw0`~*xKN<Xeukbs>lDko?wQ*4T^;10kAI?sM6w~cdWquur*+K#
z!As?4;2i2E<P<v*{8Kw?h{cnr&hJ;pY@o4=)ZqJ%;(6opFCKdCRa%x1kIljN3vUt)
zlmel<Jc)A8>3fyg1sis+M9lck^!e%N5+kotS9|-(_Bc&{zB18O?mxl)yxs>kMPo}J
z`twf3;AW(98-~IE_Z<k@+UmGg6Cbwp@n$5uKf#?;`AU?j;Qa)n1KS1YDK3KGv=6wt
z&z|Nx3cHia7wj$^EDvE=hnh|O>LT|R$l+!4w^6M}Wl{fc1M?ShY1E4?M`SFP-{Z-P
z1Cmf2Xv;Sc`7R=_V&q2ydk>qBGVJ5ujp})bZUcP|@ecM`5e?Yk)hM$%&$;_hyENN(
zk18wLC2~*Fo=IMc&-Xh2Z{V)qUGHZvqHiH)U*~Q12M}ut`tiYG*;XLxuIp=1E)KYn
z;94eIg6o=T6B?re&L3Ae`23*$V)><rOhTA|av{P9;4B~pxKmOS$^k@PNA(RXFY;=0
dV}Jkk@m~|X!&62}JJJ9E002ovPDHLkV1mS>io*Z^

literal 0
HcmV?d00001

diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/车辆故障.png b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/assets/车辆故障.png
new file mode 100644
index 0000000000000000000000000000000000000000..f002ed8c5e04c4771a9f690d002e768a387bbbf5
GIT binary patch
literal 2244
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
S#i5q~0000<MNUMnLSTYqB3`Hf

literal 0
HcmV?d00001

diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/index.vue
new file mode 100644
index 00000000..b778310b
--- /dev/null
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/components/topComponent/index.vue
@@ -0,0 +1,256 @@
+<template>
+    <div class='TrafficFlow'>
+      <section class="foot">
+        <div class="item" v-for="(item,index) in topDatas" >
+            <div class="item-title" >
+               <span> {{ item.text }} <span class="num">{{ item.textNum }}</span>{{ item.textEnd }}</span>
+            </div>
+            <div class="item-body" >
+                <div class="icon-left" >
+                    <img :src="item.icon"  />
+                </div>
+                <div class="text-right" >
+                    <div class="topText" >
+                        已处理 <span  class="num">{{ item.reviewed }}</span> 起
+                    </div>
+                    <div  class="bottomText"  >
+                        处理中 <span  class="num" >{{ item.noReviewed }}</span> 起
+                    </div>    
+                    <div  class="bottomText"  >
+                        待处理 <span  class="num" >{{ item.noReviewed }}</span> 起
+                    </div>                  
+                </div>
+            </div>
+        </div>
+      </section>
+    </div>
+  </template>
+  
+  <script> 
+ 
+  export default {
+    name: 'publicService',
+    components: {
+     
+    },
+    data(){
+        return {
+            activeName:"first",
+            topDatas:[ {
+                text:"其他事件",
+                textEnd:"起",
+                textNum:9,
+                icon:require("./assets/其他事件.png"),
+                reviewed:4,
+                noReviewed:5
+            },{
+                text:"路障清除",
+                textEnd:"起",
+                textNum:9,
+                icon:require("./assets/路障清除.png"),
+                reviewed:4,
+                noReviewed:5
+            },{
+                text:"车辆故障",
+                textEnd:"起",
+                textNum:9,
+                icon:require("./assets/车辆故障.png"),
+                reviewed:4,
+                noReviewed:5
+            },{
+                text:"服务区异常",
+                textEnd:"起",
+                textNum:9,
+                icon:require("./assets/服务区异常.png"),
+                reviewed:4,
+                noReviewed:5
+            },{
+                text:"交通管制",
+                textEnd:"起",
+                textNum:9,
+                icon:require("./assets/交通管制.png"),
+                reviewed:4,
+                noReviewed:5
+            },{
+                text:"交通拥堵",
+                textEnd:"起",
+                textNum:9,
+                icon:require("./assets/交通拥堵.png"),
+                reviewed:4,
+                noReviewed:5
+            },{
+                text:"施工建设",
+                textEnd:"起",
+                textNum:9,
+                icon:require("./assets/施工建设.png"),
+                reviewed:4,
+                noReviewed:5
+            },{
+                text:"异常天气",
+                textEnd:"起",
+                textNum:9,
+                icon:require("./assets/异常天气.png"),
+                reviewed:4,
+                noReviewed:5
+            },{
+                text:"交通事故",
+                textEnd:"起",
+                textNum:9,
+                icon:require("./assets/交通事故.png"),
+                reviewed:4,
+                noReviewed:5
+            }
+              
+            ]
+        }
+    },
+    methods:{
+      changeTabs(){
+         
+      }
+    }
+    
+  }
+  </script>
+  
+  <style lang='scss' scoped>
+
+   ::v-deep .el-tabs__item{
+    display: inline-flex;
+    justify-content: center;
+    font-size: 16px;
+    font-family: PingFang SC, PingFang SC;
+    font-weight: 500;
+    color: #FFFFFF;
+    min-width:128px;
+    position: relative;
+    left:10px;
+   }
+
+   ::v-deep .el-tabs__active-bar {
+    min-width:128px;
+   }
+
+   ::v-deep .el-tabs__nav-wrap::after {
+    background-color: #133242;
+    opacity: 0.1;
+   }
+
+   .footTabs {
+     display: inline;
+     width:99%;
+
+   }
+
+  .TrafficFlow {
+    width: 100%;
+    height: 182px;
+    display: inline-flex;
+    position: relative;
+    z-index: 6;
+    color: white;
+    background: linear-gradient(180deg, rgba(6,66,88,0) 0%, #06425804 93%);
+    border-radius: 0px 0px 0px 0px;
+   
+    .foot {
+        display: inline-flex;
+        flex-direction: row;
+        width:100%;
+        height:100%;
+
+        .item {
+            position: relative;
+            display: inline-flex;
+            width: calc(100% / 9);
+            height:100%;
+            flex-direction: column;
+            justify-content: center;
+            align-items: center;
+
+            .item-title {
+                position: relative;
+                display: inline-flex;
+                width: 162px;
+                height:35px;
+                flex-direction: row;
+                justify-content: center;
+                align-items: center; 
+                background: linear-gradient(180deg, rgba(3,60,82,0) 0%, #033C52 100%);
+                border-radius: 4px 4px 4px 4px;
+                font-size: 16px;
+                font-family: PingFang SC, PingFang SC;
+                font-weight: 500;
+                color: #FFFFFF;
+
+                span.num {
+                    font-size: 22px;
+                    font-family: PangMenZhengDao, PangMenZhengDao;
+                    font-weight: 400;
+                    color: #E2B066;
+                }
+            }
+
+            .item-body {
+                position: relative;
+                display: inline-flex;
+                width: 162px;
+                height:100%;
+                flex-direction: row;
+                justify-content: center;
+                align-items: center; 
+                font-size: 14px;
+                font-family: PingFang SC, PingFang SC;
+                font-weight: 400;
+                color: #FFFFFF;
+                margin-top:0px;
+
+                .text-right {
+                    display: inline-flex;
+                    flex-direction: column;
+                    align-items: space-between;
+                    justify-content: space-between;
+
+                    >div {
+                        margin:5px;
+                    }
+                }
+
+                img {
+                    width:47px;
+                    height:47px;
+                    margin:0 10px;
+                    margin-right:20px;
+                }
+
+                
+                span.num {
+                    font-size: 14px;
+                    font-family: PangMenZhengDao, PangMenZhengDao;
+                    font-weight: 400;
+                    color: #E2B066;
+                }
+
+            }
+
+        }
+
+        .item::after {
+            content: "";
+            position: absolute;
+            display: inline-flex;
+            top:20px;
+            right:0px;
+            width: 1px;
+            height: 116px;
+            background: linear-gradient(90deg, rgba(8, 135, 182, 0.2), rgba(0, 100, 137, 1), rgba(3, 60, 81, 0.2));
+            opacity: 1;
+            flex-direction: row;
+            justify-content: center;
+            align-items: center; 
+        }
+
+    }
+    
+  }
+  </style>
+  
\ No newline at end of file
diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/index.vue
new file mode 100644
index 00000000..30cd160f
--- /dev/null
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/control/event/governanceAnalysis/index.vue
@@ -0,0 +1,178 @@
+<template>
+    <div class='TrafficFlow'>
+      <section class="foot">
+        <el-tabs class="footTabs" v-model="activeName"  @tab-click="changeTabs">
+            <el-tab-pane label="公众服务统计分析" name="first">
+              <div class="header-shot" >
+                 <TopComponent  />
+              </div>
+              <div class="content" >
+                <ChannelAnalytics  class="content-l"  />
+                <EventTypeAnalysis class="content-l"  />
+                <PostTrendsDay class="content-r"  />
+                <AuditAnalytics class="content-r"  />
+              </div>
+              <div class="content" >
+                <PostTrendsMonth   class="content-mi" />
+                <NucleusThrough   class="content-mi" />
+              </div>
+            </el-tab-pane>
+            <el-tab-pane label="公众服务统计查询" name="second">
+              
+            </el-tab-pane>
+        </el-tabs>
+      </section>
+    </div>
+  </template>
+  
+  <script> 
+  import TopComponent from './components/topComponent';
+  import ChannelAnalytics from './components/channelAnalytics';
+  import EventTypeAnalysis from './components/eventTypeAnalysis';
+  import AuditAnalytics from './components/auditAnalytics';
+  import PostTrendsDay from './components/postTrendsDay';
+  import PostTrendsMonth from './components/postTrendsMonth';
+  import NucleusThrough from './components/nucleusThrough';
+
+  export default {
+    name: 'publicService',
+    components: {
+      TopComponent,
+      ChannelAnalytics,
+      EventTypeAnalysis,
+      AuditAnalytics,
+      PostTrendsDay,
+      PostTrendsMonth,
+      NucleusThrough
+    },
+    data(){
+        return {
+            activeName:"first"
+        }
+    },
+    methods:{
+      changeTabs(){
+         
+      }
+    }
+    
+  }
+  </script>
+  
+  <style lang='scss' scoped>
+
+   ::v-deep .el-tabs__item{
+    display: inline-flex;
+    justify-content: center;
+    font-size: 16px;
+    font-family: PingFang SC, PingFang SC;
+    font-weight: 500;
+    color: #FFFFFF;
+    min-width:128px;
+    position: relative;
+    left:10px;
+   }
+
+   ::v-deep .el-tabs__active-bar {
+    min-width:128px;
+   }
+
+   ::v-deep .el-tabs__nav-wrap::after {
+    background-color: #133242;
+    opacity: 0.1;
+   }
+
+   .footTabs {
+     display: inline;
+     width:100%;
+
+   }
+
+  .TrafficFlow {
+    width: 100%;
+    height: 100%;
+    position: relative;
+    z-index: 6;
+    color: white;
+  
+    .header-shot{
+      width: 98%;
+      margin: auto;
+      margin-top: 15px;
+      height:160px;
+
+    }
+
+    .content {
+      width: 100%;
+      margin: auto;
+      display: flex;
+      flex: 1;
+      pointer-events: none;
+      margin-top: 19px;
+
+      >div {
+        pointer-events: auto;
+      }
+  
+      .content-l {
+        width: calc(20%);
+     
+        margin-right:20px;
+
+      }
+
+      .content-mi {
+        width: calc(50%);
+     
+        margin-right:20px;
+      }
+  
+  
+      .content-m {
+        display: inline-flex;
+        flex-direction: column;
+        width: calc(100% / 4 );
+        margin-right:20px;
+
+        .content-m-t {
+            width:100%;
+            height:240px;
+            margin-bottom: 20px;
+        }
+      }
+      .content-r {
+        width:29%;
+        margin-right:20px;
+      }
+    }
+    .foot{
+      width: 98%;
+      margin: auto;
+      display: flex;
+      justify-content: space-between;
+      flex: 1;
+      pointer-events: none;
+      margin-top: 8px;
+      >div {
+        pointer-events: auto;
+      }
+
+      .foot-w {
+        width:100%;
+
+      }
+  
+      .foot-l {
+        width: 726px;
+      }
+      .foot-m {
+        width: 613px;
+      }
+      .foot-r {
+        width: 493px;
+      }
+    }
+  }
+  </style>
+  
\ No newline at end of file
diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/chargeableOperations/components/RoadSectionTolls/assets/charts.js b/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/chargeableOperations/components/RoadSectionTolls/assets/charts.js
index cf0fac1d..d5fde08a 100644
--- a/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/chargeableOperations/components/RoadSectionTolls/assets/charts.js
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/chargeableOperations/components/RoadSectionTolls/assets/charts.js
@@ -20,7 +20,7 @@ let options = {
          fontSize: 14,
          color: "#000",
       },
-      formatter: "{a}<br/>{b} :\n\n{c} 个",
+      formatter: "{a}<br/>{b} :\n\n{c} ",
    },
    legend: {
       top: 10,
diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/components/deviceUptime/assets/charts.js b/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/components/deviceUptime/assets/charts.js
index 4b35b669..48948996 100644
--- a/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/components/deviceUptime/assets/charts.js
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/components/deviceUptime/assets/charts.js
@@ -50,7 +50,7 @@ let options = {
     series: [{
         type: 'radar',
         data: [data],
-        name: '安全作业',
+        name: '设备在线率',
         label: {
             show: true,
             formatter: function (params) {
@@ -80,7 +80,7 @@ let options = {
     },
     {
         type: 'radar',
-        name: '安全作业',
+        name: '设备在线率',
         data: [
             [100, 100, 100, 100, 100, 100, 100, 100,100, 100, 100, 100, 100, 100, 100, 100,100, 100, 100],
         ],
@@ -100,7 +100,7 @@ let options = {
     },
     {
         type: 'radar',
-        name: '安全作业',
+        name: '设备在线率',
         data: [
             [80, 80, 80, 80, 80, 80, 80, 80,80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80]
         ],
@@ -120,7 +120,7 @@ let options = {
     },
     {
         type: 'radar',
-        name: '安全作业',
+        name: '设备在线率',
         data: [
             [60, 60, 60, 60, 60, 60, 60, 60,60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60],
         ],
@@ -140,7 +140,7 @@ let options = {
     },
     {
         type: 'radar',
-        name: '安全作业',
+        name: '设备在线率',
         data: [
             [40, 40, 40, 40, 40, 40, 40, 40,40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40],
         ],
@@ -159,7 +159,7 @@ let options = {
     },
     {
         type: 'radar',
-        name: '安全作业',
+        name: '设备在线率',
         data: [
             [20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20],
         ],
diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/components/monthlyEquipment/assets/charts.js b/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/components/monthlyEquipment/assets/charts.js
index dfd3d256..9204ae69 100644
--- a/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/components/monthlyEquipment/assets/charts.js
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/components/monthlyEquipment/assets/charts.js
@@ -50,7 +50,7 @@ let options = {
     series: [{
         type: 'radar',
         data: [data],
-        name: '安全作业',
+        name: '设备在线率',
         label: {
             show: true,
             formatter: function (params) {
@@ -80,7 +80,7 @@ let options = {
     },
     {
         type: 'radar',
-        name: '安全作业',
+        name: '设备在线率',
         data: [
             [100, 100, 100, 100, 100, 100, 100, 100,100, 100, 100, 100, 100, 100, 100, 100],
         ],
@@ -100,7 +100,7 @@ let options = {
     },
     {
         type: 'radar',
-        name: '安全作业',
+        name: '设备在线率',
         data: [
             [80, 80, 80, 80, 80, 80, 80, 80,80, 80, 80, 80, 80, 80, 80, 80]
         ],
@@ -120,7 +120,7 @@ let options = {
     },
     {
         type: 'radar',
-        name: '安全作业',
+        name: '设备在线率',
         data: [
             [60, 60, 60, 60, 60, 60, 60, 60,60, 60, 60, 60, 60, 60, 60, 60],
         ],
@@ -140,7 +140,7 @@ let options = {
     },
     {
         type: 'radar',
-        name: '安全作业',
+        name: '设备在线率',
         data: [
             [40, 40, 40, 40, 40, 40, 40, 40,40, 40, 40, 40, 40, 40, 40, 40],
         ],
@@ -159,7 +159,7 @@ let options = {
     },
     {
         type: 'radar',
-        name: '安全作业',
+        name: '设备在线率',
         data: [
             [20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20],
         ],

From 64ac974ffaf186206dbffbeddbd48dc178ea0d94 Mon Sep 17 00:00:00 2001
From: yyl <279235553@qq.com>
Date: Fri, 19 Jan 2024 12:50:29 +0800
Subject: [PATCH 6/9] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=9C=80=E6=96=B0?=
 =?UTF-8?q?=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ruoyi-ui/src/common/menuData.js                   |  6 ++++++
 .../components/monthlyEquipment/index.vue         |  3 ++-
 ruoyi-ui/src/views/login.vue                      |  5 +++--
 ruoyi-ui/vue.config.js                            | 15 ++-------------
 4 files changed, 13 insertions(+), 16 deletions(-)

diff --git a/ruoyi-ui/src/common/menuData.js b/ruoyi-ui/src/common/menuData.js
index d1af6aca..7c08946f 100644
--- a/ruoyi-ui/src/common/menuData.js
+++ b/ruoyi-ui/src/common/menuData.js
@@ -88,6 +88,12 @@ export default [
             name: "commandDispatch",
             component: "control/event/commandDispatch/index.vue",
           },
+          {
+            title: "管控事件分析",
+            path: "/control/event/governanceAnalysis",
+            name: "governanceAnalysis",
+            component: "control/event/governanceAnalysis/index.vue",
+          },
         ],
       },
     ],
diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/components/monthlyEquipment/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/components/monthlyEquipment/index.vue
index a55e0448..1063bc54 100644
--- a/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/components/monthlyEquipment/index.vue
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/components/monthlyEquipment/index.vue
@@ -248,7 +248,8 @@
         border-radius: 50%;
         border: 2px solid;
         border: rgba(23, 162, 255, 0.2);
-       
+        border: 2px solid;
+// border-image: linear-gradient(33deg, rgba(23, 162, 255, 0.71), rgba(23, 162, 255, 0)) 2 2;
 
         > .round-num {
             width:100%;
diff --git a/ruoyi-ui/src/views/login.vue b/ruoyi-ui/src/views/login.vue
index 41b8e14f..093607d5 100644
--- a/ruoyi-ui/src/views/login.vue
+++ b/ruoyi-ui/src/views/login.vue
@@ -250,7 +250,7 @@ export default {
   position: relative;
   height: 100%;
   background-image: url("../assets/images/login-background.png");
-  background-size: cover;
+  background-size: 100% auto;
 }
 
 .login::after {
@@ -259,7 +259,8 @@ export default {
   width: 100%;
   height: 120px;
   background-image: url('../assets/images/login-head.png');
-  background-size: auto 100%;
+  background-repeat: no-repeat;
+  background-size: 100% auto ;
   background-position: center center;
 }
 
diff --git a/ruoyi-ui/vue.config.js b/ruoyi-ui/vue.config.js
index 431fc799..7a16ca3c 100644
--- a/ruoyi-ui/vue.config.js
+++ b/ruoyi-ui/vue.config.js
@@ -1,8 +1,5 @@
 "use strict";
 const path = require("path");
-const webpack = require("webpack");
-
-const packageJSON = require("./package.json");
 
 function resolve(dir) {
   return path.join(__dirname, dir);
@@ -46,8 +43,8 @@ module.exports = {
         // target: `http://10.168.73.36:8080`, // 周乐
         // target: `http://10.168.77.209:8080`, // 刘朋
         // target: `http://10.168.66.196:8080`, //刘文阁
-        // target: `http://10.168.56.206:8087`, //孟
-        target: `http://10.0.81.202:8087`, //现场后台
+         target: `http://10.168.65.156:8087`,//孟
+       // target: `http://10.0.81.202:8087`, //现场后台
         changeOrigin: true,
         pathRewrite: {
           ["^" + process.env.VUE_APP_BASE_API]: "",
@@ -82,14 +79,6 @@ module.exports = {
   chainWebpack(config) {
     config.plugins.delete("preload"); // TODO: need test
     config.plugins.delete("prefetch"); // TODO: need test
-    config.plugin("DefinePlugin").use(webpack.DefinePlugin, [
-      {
-        "process.env.Version": (() =>
-          JSON.stringify(
-            `${new Date().toLocaleString()}-V${packageJSON.version}`
-          ))(),
-      },
-    ]);
 
     const rootModulesPath = path.resolve("node_modules");
     if (config.resolve.modules.store.has(rootModulesPath)) {

From 11338abb5521fb4ce31a953888f39bdd1b55e1c8 Mon Sep 17 00:00:00 2001
From: yyl <279235553@qq.com>
Date: Fri, 19 Jan 2024 12:51:58 +0800
Subject: [PATCH 7/9] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=9C=80=E6=96=B0?=
 =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../statisticalAnalysis/components/monthlyEquipment/index.vue | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/components/monthlyEquipment/index.vue b/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/components/monthlyEquipment/index.vue
index 1063bc54..0a17c933 100644
--- a/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/components/monthlyEquipment/index.vue
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/maintenanceOperations/statisticalAnalysis/components/monthlyEquipment/index.vue
@@ -246,9 +246,7 @@
         border-radius: 0px 0px 0px 0px;
         opacity: 1;
         border-radius: 50%;
-        border: 2px solid;
-        border: rgba(23, 162, 255, 0.2);
-        border: 2px solid;
+        border: 0px solid;
 // border-image: linear-gradient(33deg, rgba(23, 162, 255, 0.71), rgba(23, 162, 255, 0)) 2 2;
 
         > .round-num {

From c5ea0672abb7a91161097bb873b54ad564bdaadd Mon Sep 17 00:00:00 2001
From: Joe <1712833832@qq.com>
Date: Fri, 19 Jan 2024 12:55:51 +0800
Subject: [PATCH 8/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8F=90=E4=BA=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../pages/Home/components/RoadAndEvents/utils/map.js          | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/map.js b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/map.js
index b2bddf1e..87c906d1 100644
--- a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/map.js
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/map.js
@@ -104,7 +104,7 @@ export async function setMarkToMap(item, data, _markerClick, content) {
 
   const normal = require(`@screen/images/layer${item.id.replace(
     /^\.|[^/]+(?=.svg$)/g,
-    (data) => (data === "." ? "" : `${data}_active`)
+    (data) => (data === "." ? "" : `${data}`)
   )}`);
 
   const fault = require(`@screen/images/layer${item.id.replace(
@@ -113,7 +113,7 @@ export async function setMarkToMap(item, data, _markerClick, content) {
   )}`);
 
   const faultBg = require(`@screen/images/mapBg/fault.svg`);
-  const normalBg = require(`@screen/images/mapBg/active.svg`);
+  const normalBg = require(`@screen/images/mapBg/normal.svg`);
 
   const markerClick = (e) => {
     const extData = e.target.getExtData();

From 1d71b14779c60d1c2441d34b78305db96e1f5a95 Mon Sep 17 00:00:00 2001
From: Joe <1712833832@qq.com>
Date: Fri, 19 Jan 2024 13:04:10 +0800
Subject: [PATCH 9/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9B=BE=E6=A0=87?=
 =?UTF-8?q?=E5=B1=95=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../JiHeExpressway/images/deviceType/ball.svg | 14 ++++++++
 .../images/deviceType/ball_fault.svg          | 14 ++++++++
 .../RoadAndEvents/utils/buttonEvent.js        | 15 ++++++++
 .../components/RoadAndEvents/utils/map.js     | 36 +++++++++++++------
 4 files changed, 69 insertions(+), 10 deletions(-)
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/images/deviceType/ball.svg
 create mode 100644 ruoyi-ui/src/views/JiHeExpressway/images/deviceType/ball_fault.svg

diff --git a/ruoyi-ui/src/views/JiHeExpressway/images/deviceType/ball.svg b/ruoyi-ui/src/views/JiHeExpressway/images/deviceType/ball.svg
new file mode 100644
index 00000000..17e57887
--- /dev/null
+++ b/ruoyi-ui/src/views/JiHeExpressway/images/deviceType/ball.svg
@@ -0,0 +1,14 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="Frame 10218">
+<g id="Frame" clip-path="url(#clip0_507_10)">
+<path id="Vector" d="M16.0002 13.451C16.3331 13.4513 16.6584 13.5502 16.9351 13.7353C17.2118 13.9204 17.4274 14.1834 17.5546 14.4911C17.6819 14.7987 17.715 15.1372 17.6499 15.4636C17.5848 15.7901 17.4244 16.09 17.1889 16.3253C16.9534 16.5606 16.6535 16.7208 16.3269 16.7857C16.0004 16.8505 15.662 16.8171 15.3545 16.6897C15.0469 16.5622 14.7841 16.3464 14.5991 16.0696C14.4142 15.7928 14.3155 15.4674 14.3155 15.1345C14.3158 14.6879 14.4935 14.2597 14.8094 13.944C15.1253 13.6283 15.5536 13.451 16.0002 13.451ZM16.0002 12.1082C15.4014 12.1082 14.8161 12.2857 14.3182 12.6184C13.8203 12.9511 13.4323 13.4239 13.2031 13.9771C12.974 14.5303 12.914 15.139 13.0308 15.7263C13.1476 16.3136 13.436 16.8531 13.8594 17.2765C14.2828 17.6999 14.8223 17.9882 15.4095 18.105C15.9968 18.2219 16.6056 18.1619 17.1588 17.9328C17.712 17.7036 18.1848 17.3156 18.5175 16.8177C18.8502 16.3198 19.0277 15.7345 19.0277 15.1357C19.0277 14.3327 18.7087 13.5627 18.141 12.9949C17.5732 12.4271 16.8031 12.1082 16.0002 12.1082Z" fill="#0FD4FF"/>
+<path id="Vector_2" d="M16.0006 6C10.9558 6 6.86621 10.0896 6.86621 15.1343C6.86621 20.1791 10.9563 24.2684 16.0006 24.2684C21.0448 24.2684 25.1347 20.1791 25.1347 15.1343C25.1347 10.0896 21.0453 6 16.0006 6ZM16.0006 7.51694C16.1633 7.51694 16.3225 7.56521 16.4578 7.65565C16.5932 7.74608 16.6987 7.87463 16.761 8.02502C16.8232 8.17541 16.8395 8.3409 16.8078 8.50056C16.776 8.66021 16.6976 8.80686 16.5825 8.92197C16.4674 9.03708 16.3208 9.11546 16.1611 9.14722C16.0015 9.17898 15.836 9.16268 15.6856 9.10038C15.5352 9.03809 15.4067 8.9326 15.3162 8.79725C15.2258 8.6619 15.1775 8.50277 15.1775 8.33999C15.1775 8.23189 15.1987 8.12485 15.2401 8.02498C15.2814 7.92511 15.3421 7.83437 15.4185 7.75793C15.4949 7.6815 15.5857 7.62087 15.6856 7.57952C15.7854 7.53817 15.8925 7.51691 16.0006 7.51694ZM16.0006 19.5655C15.1241 19.5656 14.2673 19.3057 13.5385 18.8188C12.8097 18.3319 12.2417 17.6398 11.9063 16.83C11.5708 16.0203 11.483 15.1293 11.654 14.2696C11.825 13.41 12.2471 12.6204 12.8668 12.0006C13.4866 11.3809 14.2762 10.9588 15.1358 10.7878C15.9955 10.6168 16.8865 10.7046 17.6963 11.04C18.506 11.3755 19.1981 11.9435 19.685 12.6723C20.1719 13.4011 20.4318 14.2579 20.4317 15.1343C20.4317 15.7163 20.3171 16.2925 20.0944 16.8301C19.8717 17.3677 19.5453 17.8562 19.1339 18.2677C18.7224 18.6791 18.2339 19.0055 17.6963 19.2282C17.1587 19.4509 16.5825 19.5655 16.0006 19.5655Z" fill="#0FD4FF"/>
+<path id="Vector_3" d="M15.9997 25.4203C14.1167 25.4232 12.2693 24.9068 10.6608 23.9277L8.58887 25.9999H23.4106L21.3384 23.9277C19.73 24.9068 17.8827 25.4233 15.9997 25.4203Z" fill="#0FD4FF"/>
+</g>
+</g>
+<defs>
+<clipPath id="clip0_507_10">
+<rect width="20" height="20" fill="white" transform="translate(6 6)"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/ruoyi-ui/src/views/JiHeExpressway/images/deviceType/ball_fault.svg b/ruoyi-ui/src/views/JiHeExpressway/images/deviceType/ball_fault.svg
new file mode 100644
index 00000000..b575f454
--- /dev/null
+++ b/ruoyi-ui/src/views/JiHeExpressway/images/deviceType/ball_fault.svg
@@ -0,0 +1,14 @@
+<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="Frame 10225">
+<g id="Frame" clip-path="url(#clip0_507_22)">
+<path id="Vector" d="M16.0002 13.451C16.3331 13.4513 16.6584 13.5502 16.9351 13.7353C17.2118 13.9204 17.4274 14.1834 17.5546 14.4911C17.6819 14.7987 17.715 15.1372 17.6499 15.4636C17.5848 15.7901 17.4244 16.09 17.1889 16.3253C16.9534 16.5606 16.6535 16.7208 16.3269 16.7857C16.0004 16.8505 15.662 16.8171 15.3545 16.6897C15.0469 16.5622 14.7841 16.3464 14.5991 16.0696C14.4142 15.7928 14.3155 15.4674 14.3155 15.1345C14.3158 14.6879 14.4935 14.2597 14.8094 13.944C15.1253 13.6283 15.5536 13.451 16.0002 13.451ZM16.0002 12.1082C15.4014 12.1082 14.8161 12.2857 14.3182 12.6184C13.8203 12.9511 13.4323 13.4239 13.2031 13.9771C12.974 14.5303 12.914 15.139 13.0308 15.7263C13.1476 16.3136 13.436 16.8531 13.8594 17.2765C14.2828 17.6999 14.8223 17.9882 15.4095 18.105C15.9968 18.2219 16.6056 18.1619 17.1588 17.9328C17.712 17.7036 18.1848 17.3156 18.5175 16.8177C18.8502 16.3198 19.0277 15.7345 19.0277 15.1357C19.0277 14.3327 18.7087 13.5627 18.141 12.9949C17.5732 12.4271 16.8031 12.1082 16.0002 12.1082Z" fill="#FF5F5F"/>
+<path id="Vector_2" d="M16.0006 6C10.9558 6 6.86621 10.0896 6.86621 15.1343C6.86621 20.1791 10.9563 24.2684 16.0006 24.2684C21.0448 24.2684 25.1347 20.1791 25.1347 15.1343C25.1347 10.0896 21.0453 6 16.0006 6ZM16.0006 7.51694C16.1633 7.51694 16.3225 7.56521 16.4578 7.65565C16.5932 7.74608 16.6987 7.87463 16.761 8.02502C16.8232 8.17541 16.8395 8.3409 16.8078 8.50056C16.776 8.66021 16.6976 8.80686 16.5825 8.92197C16.4674 9.03708 16.3208 9.11546 16.1611 9.14722C16.0015 9.17898 15.836 9.16268 15.6856 9.10038C15.5352 9.03809 15.4067 8.9326 15.3162 8.79725C15.2258 8.6619 15.1775 8.50277 15.1775 8.33999C15.1775 8.23189 15.1987 8.12485 15.2401 8.02498C15.2814 7.92511 15.3421 7.83437 15.4185 7.75793C15.4949 7.6815 15.5857 7.62087 15.6856 7.57952C15.7854 7.53817 15.8925 7.51691 16.0006 7.51694ZM16.0006 19.5655C15.1241 19.5656 14.2673 19.3057 13.5385 18.8188C12.8097 18.3319 12.2417 17.6398 11.9063 16.83C11.5708 16.0203 11.483 15.1293 11.654 14.2696C11.825 13.41 12.2471 12.6204 12.8668 12.0006C13.4866 11.3809 14.2762 10.9588 15.1358 10.7878C15.9955 10.6168 16.8865 10.7046 17.6963 11.04C18.506 11.3755 19.1981 11.9435 19.685 12.6723C20.1719 13.4011 20.4318 14.2579 20.4317 15.1343C20.4317 15.7163 20.3171 16.2925 20.0944 16.8301C19.8717 17.3677 19.5453 17.8562 19.1339 18.2677C18.7224 18.6791 18.2339 19.0055 17.6963 19.2282C17.1587 19.4509 16.5825 19.5655 16.0006 19.5655Z" fill="#FF5F5F"/>
+<path id="Vector_3" d="M15.9997 25.4203C14.1167 25.4232 12.2693 24.9068 10.6608 23.9277L8.58887 25.9999H23.4106L21.3384 23.9277C19.73 24.9068 17.8827 25.4233 15.9997 25.4203Z" fill="#FF5F5F"/>
+</g>
+</g>
+<defs>
+<clipPath id="clip0_507_22">
+<rect width="20" height="20" fill="white" transform="translate(6 6)"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/buttonEvent.js b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/buttonEvent.js
index d08b34ea..38a5c421 100644
--- a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/buttonEvent.js
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/buttonEvent.js
@@ -33,6 +33,9 @@ export const eventMap = {
     //   status: "0",
     // };
 
+    const ballFault = require("@screen/images/deviceType/ball_fault.svg");
+    const ball = require("@screen/images/deviceType/ball.svg");
+
     const data = await getDeviceList(1);
     // const data = [
     //   {
@@ -74,6 +77,18 @@ export const eventMap = {
             data: extData,
           };
         } catch (error) {}
+      },
+      null,
+      {
+        iconCallback(bool, item) {
+          const type = JSON.parse(item.otherConfig)?.ptzCtrl;
+
+          switch (type) {
+            case "0":
+            case 0:
+              return bool ? ball : ballFault;
+          }
+        },
       }
     );
   },
diff --git a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/map.js b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/map.js
index 87c906d1..8f5879f8 100644
--- a/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/map.js
+++ b/ruoyi-ui/src/views/JiHeExpressway/pages/Home/components/RoadAndEvents/utils/map.js
@@ -97,20 +97,30 @@ export async function setMarkerCluster(map, points, markerFun) {
  * @param {*} _markerClick marker 点击
  * @returns
  */
-export async function setMarkToMap(item, data, _markerClick, content) {
+export async function setMarkToMap(
+  item,
+  data,
+  _markerClick,
+  content,
+  { iconCallback } = {}
+) {
   const { mapIns } = this.getMap();
 
   if (!mapIns) return Message.error("地图加载失败!");
 
-  const normal = require(`@screen/images/layer${item.id.replace(
-    /^\.|[^/]+(?=.svg$)/g,
-    (data) => (data === "." ? "" : `${data}`)
-  )}`);
+  const normal =
+    normal ||
+    require(`@screen/images/layer${item.id.replace(
+      /^\.|[^/]+(?=.svg$)/g,
+      (data) => (data === "." ? "" : `${data}`)
+    )}`);
 
-  const fault = require(`@screen/images/layer${item.id.replace(
-    /^\.|[^/]+(?=.svg$)/g,
-    (data) => (data === "." ? "" : `${data}_fault`)
-  )}`);
+  const fault =
+    fault ||
+    require(`@screen/images/layer${item.id.replace(
+      /^\.|[^/]+(?=.svg$)/g,
+      (data) => (data === "." ? "" : `${data}_fault`)
+    )}`);
 
   const faultBg = require(`@screen/images/mapBg/fault.svg`);
   const normalBg = require(`@screen/images/mapBg/normal.svg`);
@@ -124,6 +134,10 @@ export async function setMarkToMap(item, data, _markerClick, content) {
   const markerCluster = await setMarkerCluster(
     mapIns,
     data.map((item) => {
+      const deviceIcon =
+        iconCallback === "function" &&
+        iconCallback(item.deviceState == 1, item);
+
       return {
         weight: 1,
         lnglat: [item.longitude, item.latitude],
@@ -146,7 +160,9 @@ export async function setMarkToMap(item, data, _markerClick, content) {
           height: 18px;
           margin-left: 3px;
           margin-bottom: 6px;
-          " src='${item.deviceState == 1 ? normal : fault}'>
+          " src='${
+            deviceIcon ? deviceIcon : item.deviceState == 1 ? normal : fault
+          }'>
         </div>`,
       };
     }),