YangJian0701 3 months ago
parent
commit
b19fdeeb6b

+ 9 - 0
package.json

@@ -17,12 +17,21 @@
   },
   "dependencies": {
     "@element-plus/icons-vue": "2.3.1",
+<<<<<<< HEAD
     "@jiaminghi/data-view": "^2.10.0",
+=======
+    "@kjgl77/datav-vue3": "^1.7.4",
+>>>>>>> 25e7644eedaba5882506f3898abaee6bcb67295e
     "@vueup/vue-quill": "1.2.0",
     "@vueuse/core": "10.11.0",
     "axios": "0.28.1",
     "clipboard": "2.0.11",
+<<<<<<< HEAD
     "echarts": "^5.6.0",
+=======
+    "echarts": "5.5.1",
+    "echarts-liquidfill": "^3.1.0",
+>>>>>>> 25e7644eedaba5882506f3898abaee6bcb67295e
     "element-plus": "2.7.6",
     "file-saver": "2.0.5",
     "fuse.js": "6.6.2",

+ 106 - 0
pnpm-lock.yaml

@@ -11,6 +11,9 @@ importers:
       '@element-plus/icons-vue':
         specifier: 2.3.1
         version: 2.3.1(vue@3.4.31)
+      '@kjgl77/datav-vue3':
+        specifier: ^1.7.4
+        version: 1.7.4(vue@3.4.31)
       '@vueup/vue-quill':
         specifier: 1.2.0
         version: 1.2.0(vue@3.4.31)
@@ -26,6 +29,9 @@ importers:
       echarts:
         specifier: 5.5.1
         version: 5.5.1
+      echarts-liquidfill:
+        specifier: ^3.1.0
+        version: 3.1.0(echarts@5.5.1)
       element-plus:
         specifier: 2.7.6
         version: 2.7.6(vue@3.4.31)
@@ -106,6 +112,10 @@ packages:
     engines: {node: '>=6.0.0'}
     hasBin: true
 
+  '@babel/runtime@7.27.0':
+    resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==}
+    engines: {node: '>=6.9.0'}
+
   '@babel/types@7.27.0':
     resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==}
     engines: {node: '>=6.9.0'}
@@ -270,9 +280,27 @@ packages:
     resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
     engines: {node: '>=12'}
 
+  '@jiaminghi/bezier-curve@0.0.9':
+    resolution: {integrity: sha512-u9xJPOEl6Dri2E9FfmJoGxYQY7vYJkURNX04Vj64tdi535tPrpkuf9Sm0lNr3QTKdHQh0DdNRsaa62FLQNQEEw==}
+
+  '@jiaminghi/c-render@0.4.3':
+    resolution: {integrity: sha512-FJfzj5hGj7MLqqqI2D7vEzHKbQ1Ynnn7PJKgzsjXaZpJzTqs2Yw5OSeZnm6l7Qj7jyPAP53lFvEQNH4o4j6s+Q==}
+
+  '@jiaminghi/charts@0.2.18':
+    resolution: {integrity: sha512-K+HXaOOeWG9OOY1VG6M4mBreeeIAPhb9X+khG651AbnwEwL6G2UtcAQ8GWCq6GzhczcLwwhIhuaHqRygwHC0sA==}
+
+  '@jiaminghi/color@1.1.3':
+    resolution: {integrity: sha512-ZY3hdorgODk4OSTbxyXBPxAxHPIVf9rPlKJyK1C1db46a50J0reFKpAvfZG8zMG3lvM60IR7Qawgcu4ZDO3+Hg==}
+
+  '@jiaminghi/transition@1.1.11':
+    resolution: {integrity: sha512-owBggipoHMikDHHDW5Gc7RZYlVuvxHADiU4bxfjBVkHDAmmck+fCkm46n2JzC3j33hWvP9nSCAeh37t6stgWeg==}
+
   '@jridgewell/sourcemap-codec@1.5.0':
     resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
 
+  '@kjgl77/datav-vue3@1.7.4':
+    resolution: {integrity: sha512-zYVTVKkklUxwtiNKS1qPBilm4rTW+WItfp0zVpaRAI8wgXkLSPbDR9xPq2+UcU/Jft7/DVdMfBp709E2ResuPQ==}
+
   '@nodelib/fs.scandir@2.1.5':
     resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
     engines: {node: '>= 8'}
@@ -502,18 +530,27 @@ packages:
   '@vueuse/core@10.11.0':
     resolution: {integrity: sha512-x3sD4Mkm7PJ+pcq3HX8PLPBadXCAlSDR/waK87dz0gQE+qJnaaFhc/dZVfJz+IUYzTMVGum2QlR7ImiJQN4s6g==}
 
+  '@vueuse/core@10.11.1':
+    resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==}
+
   '@vueuse/core@9.13.0':
     resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==}
 
   '@vueuse/metadata@10.11.0':
     resolution: {integrity: sha512-kQX7l6l8dVWNqlqyN3ePW3KmjCQO3ZMgXuBMddIu83CmucrsBfXlH+JoviYyRBws/yLTQO8g3Pbw+bdIoVm4oQ==}
 
+  '@vueuse/metadata@10.11.1':
+    resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==}
+
   '@vueuse/metadata@9.13.0':
     resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==}
 
   '@vueuse/shared@10.11.0':
     resolution: {integrity: sha512-fyNoIXEq3PfX1L3NkNhtVQUSRtqYwJtJg+Bp9rIzculIZWHTkKSysujrOk2J+NrRulLTQH9+3gGSfYLWSEWU1A==}
 
+  '@vueuse/shared@10.11.1':
+    resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==}
+
   '@vueuse/shared@9.13.0':
     resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==}
 
@@ -838,6 +875,11 @@ packages:
   eastasianwidth@0.2.0:
     resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
 
+  echarts-liquidfill@3.1.0:
+    resolution: {integrity: sha512-5Dlqs/jTsdTUAsd+K5LPLLTgrbbNORUSBQyk8PSy1Mg2zgHDWm83FmvA4s0ooNepCJojFYRITTQ4GU1UUSKYLw==}
+    peerDependencies:
+      echarts: ^5.0.1
+
   echarts@5.5.1:
     resolution: {integrity: sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==}
 
@@ -1648,6 +1690,9 @@ packages:
     resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
     engines: {node: '>= 0.4'}
 
+  regenerator-runtime@0.14.1:
+    resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
   regex-not@1.0.2:
     resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==}
     engines: {node: '>=0.10.0'}
@@ -2100,6 +2145,10 @@ snapshots:
     dependencies:
       '@babel/types': 7.27.0
 
+  '@babel/runtime@7.27.0':
+    dependencies:
+      regenerator-runtime: 0.14.1
+
   '@babel/types@7.27.0':
     dependencies:
       '@babel/helper-string-parser': 7.25.9
@@ -2200,8 +2249,40 @@ snapshots:
       wrap-ansi: 8.1.0
       wrap-ansi-cjs: wrap-ansi@7.0.0
 
+  '@jiaminghi/bezier-curve@0.0.9':
+    dependencies:
+      '@babel/runtime': 7.27.0
+
+  '@jiaminghi/c-render@0.4.3':
+    dependencies:
+      '@babel/runtime': 7.27.0
+      '@jiaminghi/bezier-curve': 0.0.9
+      '@jiaminghi/color': 1.1.3
+      '@jiaminghi/transition': 1.1.11
+
+  '@jiaminghi/charts@0.2.18':
+    dependencies:
+      '@babel/runtime': 7.27.0
+      '@jiaminghi/c-render': 0.4.3
+
+  '@jiaminghi/color@1.1.3': {}
+
+  '@jiaminghi/transition@1.1.11':
+    dependencies:
+      '@babel/runtime': 7.27.0
+
   '@jridgewell/sourcemap-codec@1.5.0': {}
 
+  '@kjgl77/datav-vue3@1.7.4(vue@3.4.31)':
+    dependencies:
+      '@jiaminghi/c-render': 0.4.3
+      '@jiaminghi/charts': 0.2.18
+      '@jiaminghi/color': 1.1.3
+      '@vueuse/core': 10.11.1(vue@3.4.31)
+    transitivePeerDependencies:
+      - '@vue/composition-api'
+      - vue
+
   '@nodelib/fs.scandir@2.1.5':
     dependencies:
       '@nodelib/fs.stat': 2.0.5
@@ -2420,6 +2501,16 @@ snapshots:
       - '@vue/composition-api'
       - vue
 
+  '@vueuse/core@10.11.1(vue@3.4.31)':
+    dependencies:
+      '@types/web-bluetooth': 0.0.20
+      '@vueuse/metadata': 10.11.1
+      '@vueuse/shared': 10.11.1(vue@3.4.31)
+      vue-demi: 0.14.10(vue@3.4.31)
+    transitivePeerDependencies:
+      - '@vue/composition-api'
+      - vue
+
   '@vueuse/core@9.13.0(vue@3.4.31)':
     dependencies:
       '@types/web-bluetooth': 0.0.16
@@ -2432,6 +2523,8 @@ snapshots:
 
   '@vueuse/metadata@10.11.0': {}
 
+  '@vueuse/metadata@10.11.1': {}
+
   '@vueuse/metadata@9.13.0': {}
 
   '@vueuse/shared@10.11.0(vue@3.4.31)':
@@ -2441,6 +2534,13 @@ snapshots:
       - '@vue/composition-api'
       - vue
 
+  '@vueuse/shared@10.11.1(vue@3.4.31)':
+    dependencies:
+      vue-demi: 0.14.10(vue@3.4.31)
+    transitivePeerDependencies:
+      - '@vue/composition-api'
+      - vue
+
   '@vueuse/shared@9.13.0(vue@3.4.31)':
     dependencies:
       vue-demi: 0.14.10(vue@3.4.31)
@@ -2802,6 +2902,10 @@ snapshots:
 
   eastasianwidth@0.2.0: {}
 
+  echarts-liquidfill@3.1.0(echarts@5.5.1):
+    dependencies:
+      echarts: 5.5.1
+
   echarts@5.5.1:
     dependencies:
       tslib: 2.3.0
@@ -3736,6 +3840,8 @@ snapshots:
       get-proto: 1.0.1
       which-builtin-type: 1.2.1
 
+  regenerator-runtime@0.14.1: {}
+
   regex-not@1.0.2:
     dependencies:
       extend-shallow: 3.0.2

File diff suppressed because it is too large
+ 0 - 0
src/assets/icons/svg/empty.svg


+ 44 - 0
src/components/Empty/index.vue

@@ -0,0 +1,44 @@
+<template>
+    <div class="box_empty">
+        <div class="card_empty">
+            <svg-icon icon-class="empty" className="arch_icon" />
+            <div class="empty_title">{{ title }}</div>
+        </div>
+    </div>
+</template>
+
+<script setup>
+defineProps({
+    title: {
+        type: String,
+        default: '暂无数据'
+    }
+})
+
+</script>
+
+<style scoped lang="scss">
+.box_empty {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    width: 100%;
+    height: 100%;
+}
+
+.card_empty {
+    display: flex;
+    align-items: center;
+}
+
+.arch_icon {
+    width: 50px;
+    height: 50px;
+}
+
+.empty_title {
+    margin-left: 10px;
+    font-size: 16px;
+    color: rgb(124, 141, 186);
+}
+</style>

+ 2 - 0
src/main.js

@@ -2,6 +2,7 @@ import { createApp } from 'vue'
 
 import Cookies from 'js-cookie'
 
+import DataVVue3 from '@kjgl77/datav-vue3'
 import ElementPlus from 'element-plus'
 import 'element-plus/dist/index.css'
 import 'element-plus/theme-chalk/dark/css-vars.css'
@@ -65,6 +66,7 @@ app.use(router)
 app.use(store)
 app.use(plugins)
 app.use(elementIcons)
+app.use(DataVVue3)
 app.component('svg-icon', SvgIcon)
 
 directive(app)

+ 1 - 0
src/views/index.vue

@@ -16,6 +16,7 @@ import reightDesk from './index/reightDesk.vue'
   width: 100%;
   height: 100vh;
   padding-top: 45px;
+  overflow: hidden;
 }
 
 .color-cyan {

+ 3 - 1
src/views/index/leftDesk.vue

@@ -172,10 +172,11 @@ import HeadlineTag from '@/components/HeadlineTag'
 }
 
 .image_architecture {
+    margin-left: 30px;
     position: relative;
     flex: none;
     width: 200px;
-    height: 100%;
+    height: 150px;
     background: url("@/assets/images/brightbase.png");
     background-size: 80% 80%;
     background-position: center center;
@@ -369,6 +370,7 @@ import HeadlineTag from '@/components/HeadlineTag'
     display: flex;
     align-items: center;
     font-size: 16px;
+    padding-left: 20px;
 
     span {
         font-weight: bold;

+ 1 - 1
src/views/index/reightDesk.vue

@@ -116,7 +116,7 @@ import LineChart from './LineChart.vue'
     position: relative;
     flex: none;
     width: 200px;
-    height: 100%;
+    height: 190px;
     background: url("@/assets/images/tubbiness.png");
     background-size: 80% 80%;
     background-position: center center;

+ 320 - 0
src/views/system/inspection/index.vue

@@ -0,0 +1,320 @@
+<template>
+  <div class="inspection">
+    <div class="left_spection">
+      <HeadlineTag value="巡检点列表"></HeadlineTag>
+      <div class="box_arch_point">
+        <div class="point_box" style="margin-top: 10px;">
+          <el-input v-model="input" placeholder="按巡查点名称搜索" />
+        </div>
+        <div style="height: calc(100% - 160px);">
+          <Empty></Empty>
+        </div>
+        <div class="center_in">
+          <pagination :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" layout="total, prev, pager, next"
+          @pagination="getList" />
+        </div>
+      </div>
+    </div>
+    <div class="right_spection">
+      <div class="operation_spection">
+        <HeadlineTag value="运行统计"></HeadlineTag>
+        <div class="box_arch">
+          <div class="image_tubbiness">
+            <div class="work_num">3714<span>个</span></div>
+            <div class="work_title">今日总数</div>
+          </div>
+          <div class="right_content">
+            <div class="work_week">
+              <div class="color_line_xj" style="background-color: rgb(21, 213, 21);"></div>
+              <span>巡检点数:</span>20
+            </div>
+            <div class="work_week">
+              <div class="color_line_xj" style="background-color: rgb(196, 127, 19);"></div>
+              <span>巡检计划:</span>10
+            </div>
+            <div class="work_week">
+              <div class="color_line_xj" style="background-color: rgb(195, 56, 56);"></div>
+              <span>巡检线路:</span>15
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="flex_spection">
+        <HeadlineTag value="巡检统计"></HeadlineTag>
+        <div class="box_arch">
+          <div ref="chartRouting" style="width: 100%;height: 100%;"></div>
+        </div>
+      </div>
+      <div class="flex_spection">
+        <HeadlineTag value="实时巡检"></HeadlineTag>
+        <div class="box_arch">
+          <dv-scroll-board :config="config" style="width:100%;height:calc(100% - 10px);margin-top: 10px;" />
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup>
+import HeadlineTag from '@/components/HeadlineTag'
+import Empty from '@/components/Empty'
+import * as echarts from 'echarts'
+const total = ref(0);
+const queryParams = ref({
+  pageNum: 1,
+  pageSize: 10,
+});
+const input = ref('')
+const config = ref({
+  headerBGC: '#10285c',
+  oddRowBGC: '#10285c7f',
+  evenRowBGC: '#10285c00',
+  header: ['名称', '位置', '列3'],
+  data: [
+    ['行1列1', '行1列2', '行1列3'],
+    ['行2列1', '行2列2', '行2列3'],
+    ['行3列1', '行3列2', '行3列3'],
+    ['行4列1', '行4列2', '行4列3'],
+    ['行5列1', '行5列2', '行5列3'],
+    ['行6列1', '行6列2', '行6列3'],
+    ['行7列1', '行7列2', '行7列3'],
+    ['行8列1', '行8列2', '行8列3'],
+    ['行9列1', '行9列2', '行9列3'],
+    ['行10列1', '行10列2', '行10列3']
+  ]
+})
+
+/** 查询列表 */
+function getList() {
+};
+const chartRouting = ref(null);
+let chartInstance = null;
+// 初始化图表
+const initChart = () => {
+  chartInstance = echarts.init(chartRouting.value);
+  chartInstance.setOption({
+    tooltip: {
+      trigger: 'axis',
+    },
+    legend: {
+      data: ['产值', '增加值'],
+      icon: 'rich',
+      show: true,
+      itemWidth: 18,
+      itemHeight: 2,
+      textStyle: {
+        color: '#AFBDD1',
+        fontSize: '12px',
+      },
+      top: 8,
+      right: 10,
+      itemGap: 34,
+    },
+    grid: {
+      left: '4%',
+      right: '4%',
+      bottom: '10%',
+      top: '16%',
+      containLabel: true,
+    },
+    xAxis: {
+      data: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
+      type: 'category',
+      boundaryGap: false,
+      axisLine: {
+        symbol: 'none',
+        lineStyle: {
+          color: '#50637A',
+        },
+      },
+      axisTick: {
+        show: false,
+      },
+      axisLabel: {
+        interval: 0,
+        color: '#ffffff',
+        fontSize: 12,
+        padding: [10, 0, 0, 0],
+      },
+    },
+    yAxis: {
+      type: 'value',
+      axisLabel: {
+        color: '#ffffff',
+        fontSize: 12,
+        padding: [0, 10, 0, 0],
+      },
+      splitLine: {
+        show: false,
+      },
+    },
+    series: [
+      {
+        name: '增加值',
+        data: [1, 2, 3, 4, 7, 6, 7, 8, 4, 10],
+        type: 'line',
+        smooth: true,
+        color: '#00F7FF',
+        lineStyle: {
+          width: 2,
+        },
+        areaStyle: {
+          color: new echarts.graphic.LinearGradient(
+            0,
+            0,
+            0,
+            1,
+            [{
+              offset: 0,
+              color: 'rgba(0, 247, 255, .6)',
+            },
+            {
+              offset: 0.8,
+              color: 'rgba(0, 247, 255, .2)',
+            },
+            ],
+            false
+          ),
+          shadowColor: 'rgba(0, 0, 0, 0.1)',
+          shadowBlur: 10,
+        },
+        symbol: 'circle',
+        symbolSize: 6,
+      },
+    ],
+  });
+};
+// 生命周期
+onMounted(initChart);
+// 窗口自适应
+window.addEventListener('resize', () => {
+  chartInstance?.resize();
+});
+</script>
+
+<style scoped lang="scss">
+.inspection {
+  position: relative;
+  width: 100%;
+  padding-top: 45px;
+  height: 100vh;
+  overflow: hidden;
+}
+
+.left_spection {
+  position: absolute;
+  left: 0;
+  width: 25%;
+  // height: calc(100% - 45px);
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+  padding-left: 10px;
+}
+
+.right_spection {
+  position: absolute;
+  right: 0;
+  width: 25%;
+  // height: calc(100% - 45px);
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+}
+
+.box_arch_point {
+  height: calc(100% - 40px);
+}
+
+.operation_spection {
+  height: 250px;
+  color: #fff;
+}
+
+.flex_spection {
+  flex: 1;
+  color: #fff;
+}
+
+.box_arch {
+  display: flex;
+  align-items: center;
+  height: calc(100% - 40px);
+}
+
+.image_tubbiness {
+  position: relative;
+  flex: none;
+  width: 200px;
+  height: 100%;
+  background: url("@/assets/images/tubbiness.png");
+  background-size: 80% 80%;
+  background-position: center center;
+  background-repeat: no-repeat;
+
+  .work_num {
+    position: absolute;
+    top: 60px;
+    left: 0;
+    right: 0;
+    text-align: center;
+    color: rgb(84, 218, 250);
+    font-size: 20px;
+
+    span {
+      font-size: 14px;
+      color: rgb(158, 174, 195);
+    }
+  }
+
+  .work_title {
+    position: absolute;
+    bottom: 36px;
+    left: 0px;
+    right: 0px;
+    text-align: center;
+  }
+}
+
+.right_content {
+  flex: 1;
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+  justify-content: space-evenly;
+
+  .work_week {
+    display: flex;
+    align-items: center;
+    font-size: 22px;
+    font-weight: bold;
+    color: #fff;
+
+    span {
+      padding-right: 10px;
+      font-size: 16px;
+      color: rgb(214, 218, 222);
+    }
+  }
+}
+
+.color_line_xj {
+  width: 6px;
+  height: 6px;
+  margin-right: 10px;
+}
+</style>
+<style lang="scss" scoped>
+.point_box :deep(.el-input__wrapper) {
+  background-color: transparent !important;
+  box-shadow: 0 0 0 1px rgb(58, 86, 117) inset !important;
+}
+
+.point_box :deep(.el-input__wrapper.is-focus) {
+  box-shadow: 0 0 0 1px #409EFF inset !important;
+}
+
+.point_box :deep(.el-input__inner) {
+  color: #ffffff !important;
+}
+</style>

+ 837 - 0
src/views/system/intruderalarm/index.vue

@@ -0,0 +1,837 @@
+<template>
+    <div class="inspection">
+        <div class="left_spection">
+            <div class="facility_entry">
+                <HeadlineTag value="按设备统计"></HeadlineTag>
+                <div class="box_arch">
+                    <div ref="chartFacility" style="width: 100%;height: 100%;"></div>
+                </div>
+            </div>
+            <div class="flex_spection">
+                <HeadlineTag value="报警列表"></HeadlineTag>
+                <div class="box_arch_point">
+                    <div class="point_box" style="margin-top: 10px;">
+                        <el-input v-model="input" placeholder="按报警名称搜索" />
+                    </div>
+                    <div style="height: calc(100% - 160px);">
+                        <Empty></Empty>
+                    </div>
+                    <div class="center_in">
+                        <pagination :total="total" v-model:page="queryParams.pageNum"
+                            v-model:limit="queryParams.pageSize" layout="total, prev, pager, next"
+                            @pagination="getList" />
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="right_spection">
+            <div class="operation_spection">
+                <HeadlineTag value="24小时告警数量趋势"></HeadlineTag>
+                <div class="entry">
+                    <div class="entry-box">
+                        <div class="entry-box-item">
+                            <div class="item-center-line"></div>
+                            <div class="item-center-pie"></div>
+                        </div>
+                    </div>
+                    <div class="left_water">
+                        <span class="water_span_title">75</span>
+                        <div class="tile_fx">事件风险</div>
+                    </div>
+                    <div class="right_water">
+                        <span class="water_span_title">83</span>
+                        <div class="tile_fx">告警风险</div>
+                    </div>
+                    <div class="box_water_drop">
+                        <div ref="chartWater" style="width: 140px;height: 140px;"></div>
+                    </div>
+                </div>
+            </div>
+            <div class="flex_spection">
+                <HeadlineTag value="24小时告警数量趋势"></HeadlineTag>
+                <div class="box_arch">
+                    <div ref="chartRouting" style="width: 100%;height: 100%;"></div>
+                </div>
+            </div>
+            <div class="flex_spection">
+                <HeadlineTag value="实时巡检"></HeadlineTag>
+                <div class="box_arch">
+                    <dv-scroll-board :config="config" style="width:100%;height:calc(100% - 10px);margin-top: 10px;" />
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script setup>
+import HeadlineTag from '@/components/HeadlineTag'
+import Empty from '@/components/Empty'
+import * as echarts from 'echarts'
+import 'echarts-liquidfill';
+const total = ref(0);
+const queryParams = ref({
+    pageNum: 1,
+    pageSize: 10,
+});
+const input = ref('')
+const config = ref({
+    headerBGC: '#10285c',
+    oddRowBGC: '#10285c7f',
+    evenRowBGC: '#10285c00',
+    header: ['名称', '位置', '列3'],
+    data: [
+        ['行1列1', '行1列2', '行1列3'],
+        ['行2列1', '行2列2', '行2列3'],
+        ['行3列1', '行3列2', '行3列3'],
+        ['行4列1', '行4列2', '行4列3'],
+        ['行5列1', '行5列2', '行5列3'],
+        ['行6列1', '行6列2', '行6列3'],
+        ['行7列1', '行7列2', '行7列3'],
+        ['行8列1', '行8列2', '行8列3'],
+        ['行9列1', '行9列2', '行9列3'],
+        ['行10列1', '行10列2', '行10列3']
+    ]
+})
+
+/** 查询列表 */
+function getList() {
+};
+const chartRouting = ref(null);
+let chartInstance = null;
+// 初始化图表
+const initChart = () => {
+    chartInstance = echarts.init(chartRouting.value);
+    chartInstance.setOption({
+        tooltip: {
+            trigger: 'axis',
+            axisPointer: {
+                lineStyle: {
+                    color: {
+                        type: 'linear',
+                        x: 0,
+                        y: 0,
+                        x2: 0,
+                        y2: 1,
+                        colorStops: [
+                            {
+                                offset: 0,
+                                color: 'rgba(0, 255, 233,0)',
+                            },
+                            {
+                                offset: 0.5,
+                                color: 'rgba(255, 255, 255,1)',
+                            },
+                            {
+                                offset: 1,
+                                color: 'rgba(0, 255, 233,0)',
+                            },
+                        ],
+                        global: false,
+                    },
+                },
+            },
+        },
+        grid: {
+            top: '5%',
+            left: '5%',
+            right: '5%',
+            bottom: '5%',
+            containLabel: true,
+        },
+        xAxis: [
+            {
+                type: 'category',
+                axisLine: {
+                    show: true,
+                },
+                splitArea: {
+                    // show: true,
+                    color: '#f00',
+                    lineStyle: {
+                        color: '#f00',
+                    },
+                },
+                axisLabel: {
+                    show: true,
+                    textStyle: {
+                        fontSize: 12,
+                        color: 'rgba(255,255,255,1)',
+                    },
+                    formatter: function (params) {
+                        return '2021.11.' + params;
+                    },
+                },
+                splitLine: {
+                    show: false,
+                },
+                boundaryGap: false,
+                data: [
+                    '1',
+                    '2',
+                    '3',
+                    '4',
+                    '5',
+                    '6',
+                    '7',
+                    '8',
+                    '9',
+                    '10',
+                    '11',
+                    '12',
+                    '13',
+                    '14',
+                    '15',
+                ],
+            },
+        ],
+        yAxis: [
+            {
+                type: 'value',
+                min: 0,
+                // max: 140,
+                splitNumber: 4,
+                splitLine: {
+                    show: true,
+                    lineStyle: {
+                        color: ['#fff'],
+                        opacity: 0.06,
+                    },
+                },
+                axisLine: {
+                    show: false,
+                },
+                axisLabel: {
+                    show: true,
+                    textStyle: {
+                        fontSize: 12,
+                        color: 'rgba(255,255,255,1)',
+                    },
+                },
+                axisTick: {
+                    show: false,
+                },
+            },
+        ],
+        series: [
+            {
+                name: '注册总量',
+                type: 'line',
+                smooth: true, //是否平滑
+                showAllSymbol: true,
+                // symbol: 'image://./static/images/guang-circle.png',
+                symbol: 'circle',
+                symbolSize: 10,
+                lineStyle: {
+                    normal: {
+                        color: '#FFBC0D',
+                        shadowColor: 'rgba(0, 0, 0, 0)',
+                        shadowBlur: 0,
+                        shadowOffsetY: 5,
+                        shadowOffsetX: 5,
+                    },
+                },
+                label: {
+                    show: false,//圆点上方数值
+                    position: 'top',
+                    textStyle: {
+                        color: 'rgb(218 255 232)',
+                        fontSize: 16,
+                    },
+                },
+                itemStyle: {
+                    color: '#FFBC0D',
+                    borderColor: 'rgb(108,78,0)',
+                    borderWidth: 1,
+                    shadowColor: 'rgba(0, 0, 0, 0)',
+                    shadowBlur: 0,
+                    shadowOffsetY: 2,
+                    shadowOffsetX: 2,
+                },
+                tooltip: {
+                    show: false,
+                },
+                areaStyle: {
+                    color: {
+                        type: 'linear',
+                        x: 0,
+                        y: 0,
+                        x2: 0,
+                        y2: 1,
+                        colorStops: [
+                            {
+                                offset: 0,
+                                color: 'rgba(255,188,13, 0.4)',
+                            },
+                            {
+                                offset: 1,
+                                color: 'rgba(255,188,13, 0)',
+                            },
+                        ],
+                        global: false, // 缺省为 false
+                    },
+                },
+                data: [
+                    30,
+                    32,
+                    32,
+                    32,
+                    32,
+                    38,
+                    32,
+                    33,
+                    36,
+                    32,
+                    32,
+                    32,
+                    34,
+                    32,
+                    32,
+                ],
+            },
+        ],
+    });
+};
+const chartWater = ref(null);
+let chartInstanceWater = null;
+const initWaterDrop = () => {
+    var value = 0.45;
+    chartInstanceWater = echarts.init(chartWater.value);
+    chartInstanceWater.setOption({
+        series: [
+            {
+                type: 'liquidFill', //水位图
+                radius: '100%', //显示比例
+                center: ['50%', '50%'], //中心点
+                amplitude: 20, //水波振幅
+                data: [value, value], // data个数代表波浪数
+                color: [
+                    {
+                        type: 'linear',
+                        x: 0,
+                        y: 0,
+                        x2: 0,
+                        y2: 1,
+                        colorStops: [
+                            {
+                                offset: 0,
+                                color: '#446bf5',
+                            },
+                            {
+                                offset: 1,
+                                color: '#2ca3e2',
+                            },
+                        ],
+                        globalCoord: false,
+                    },
+                ], //波浪颜色
+                backgroundStyle: {
+                    borderWidth: 1, //外边框
+                    color: 'RGBA(51, 66, 127, 0.7)',
+                },
+                label: {
+                    //标签设置
+                    position: ['50%', '45%'],
+                    formatter: '50%', //显示文本,
+                    textStyle: {
+                        fontSize: '30px', //文本字号,
+                        color: '#fff',
+                    },
+                },
+                outline: {
+                    borderDistance: 0,
+                    itemStyle: {
+                        borderWidth: 2,
+                        borderColor: '#112165',
+                    },
+                },
+            },
+        ],
+    });
+}
+const chartFacility = ref(null);
+let chartInstanceFacility = null;
+const initFacility = () => {
+    let nameList = [
+        '超危报警',
+        '高危报警',
+        '中危报警',
+        '低危报警',
+        '设备预警',
+    ];
+    let valueList = [612.5, 548.7, 300.2, 300, 400];
+    let colorList = ['#FB6A66', '#FFC949', '#867DFF', '#06CA70', '#008AFF'];
+    let totalNum = 1000; // 数据总数
+    let emue = ['red', 'yellow', 'purple', 'green', 'blue'];
+    var category = nameList.map((item, index) => {
+        return {
+            value: valueList[index],
+            itemStyle: {
+                color: colorList[index],
+            },
+        };
+    });
+    var totalList = [];
+    var totalBorderList = [];
+    nameList.map((item, index) => {
+        totalList.push({
+            value: totalNum,
+            itemStyle: {
+                color: colorList[index],
+            },
+        });
+        totalBorderList.push({
+            value: totalNum,
+            itemStyle: {
+                borderColor: colorList[index],
+                color: 'transparent',
+            },
+        });
+    });
+    var datas = [];
+    category.forEach((value) => {
+        datas.push(value.value);
+    });
+    chartInstanceFacility = echarts.init(chartFacility.value);
+    chartInstanceFacility.setOption({
+        xAxis: {
+            max: totalNum,
+            splitLine: {
+                show: false,
+            },
+            axisLine: {
+                show: false,
+            },
+            axisLabel: {
+                show: false,
+            },
+            axisTick: {
+                show: false,
+            },
+        },
+        grid: {
+            left: '5%',
+            top: '5%', // 设置条形图的边距
+            right: '15%',
+            bottom: '0%',
+        },
+        yAxis: [
+            {
+                type: 'category',
+                inverse: false,
+                data: nameList,
+                axisLine: {
+                    show: false,
+                },
+                axisTick: {
+                    show: false,
+                },
+                axisLabel: {
+                    show: false,
+                },
+            },
+        ],
+        series: [
+            {
+                type: 'bar',
+                barWidth: 16,
+                barGap: '20%',
+                silent: true,
+                label: {
+                    normal: {
+                        formatter: (item) => {
+                            return `{${emue[item['dataIndex']]}|${item['name']}}`;
+                        },
+                        textStyle: {
+                            color: '#008AFF',
+                            fontSize: 14,
+                        },
+                        position: [0, '-25px'],
+                        show: true,
+                        rich: {
+                            green: {
+                                color: '#06CA70',
+                            },
+                            blue: {
+                                color: '#008AFF',
+                            },
+                            purple: {
+                                color: '#867DFF',
+                            },
+                            red: {
+                                color: '#FB6A66',
+                            },
+                            yellow: {
+                                color: '#FFC949',
+                            },
+                        },
+                    },
+                },
+                data: category,
+                z: 1,
+                animationEasing: 'elasticOut',
+            },
+
+            {
+                // 分隔
+                type: 'pictorialBar',
+                itemStyle: {
+                    normal: {
+                        color: '#020b3f',
+                    },
+                },
+                symbolRepeat: 'fixed',
+                symbolMargin: 1,
+                symbol: 'rect',
+                symbolClip: false,
+                symbolSize: [1, 17],
+                symbolPosition: 'start',
+                symbolOffset: [3, -2],
+                symbolBoundingData: totalNum,
+                data: [totalNum, totalNum, totalNum, totalNum, totalNum],
+                z: 2,
+                animationEasing: 'elasticOut',
+            },
+            {
+                // label
+                type: 'pictorialBar',
+                symbolBoundingData: totalNum,
+                itemStyle: {
+                    normal: {
+                        color: 'none',
+                    },
+                },
+                label: {
+                    normal: {
+                        formatter: (params) => {
+                            var text;
+                            text = `{${emue[params['dataIndex']]}|${((params['data'] * 100) / totalNum).toFixed(2)}%}`;
+                            return text;
+                        },
+                        rich: {
+                            green: {
+                                color: '#06CA70',
+                            },
+                            blue: {
+                                color: '#008AFF',
+                            },
+                            purple: {
+                                color: '#867DFF',
+                            },
+                            red: {
+                                color: '#FB6A66',
+                            },
+                            yellow: {
+                                color: '#FFC949',
+                            },
+                        },
+                        position: 'right',
+                        offset: [0, -3],
+                        distance: 10, // 向右偏移位置
+                        show: true,
+                    },
+                },
+                data: datas,
+                z: 0,
+            },
+
+            {
+                name: '外框',
+                type: 'bar',
+                barGap: '-130%', // 设置外框粗细
+                data: totalBorderList,
+                barWidth: 26,
+                itemStyle: {
+                    normal: {
+                        // barBorderRadius: [5, 5, 5, 5],
+                        borderWidth: 1, // 边框宽度
+                    },
+                },
+                z: 0,
+            },
+            {
+                type: 'scatter',
+                name: '条形',
+                symbol: 'roundRect',
+                symbolSize: [4, 12],
+                symbolOffset: [3, -3],
+                symbolKeepAspect: true,
+                data: totalList,
+            },
+        ],
+    });
+}
+
+// 生命周期
+onMounted(() => {
+    initChart()
+    initWaterDrop()
+    initFacility()
+});
+// 窗口自适应
+window.addEventListener('resize', () => {
+    chartInstance?.resize();
+    chartInstanceWater?.resize();
+    chartInstanceFacility?.resize();
+});
+</script>
+
+<style scoped lang="scss">
+.inspection {
+    position: relative;
+    width: 100%;
+    padding-top: 45px;
+    height: 100vh;
+    overflow: hidden;
+}
+
+.left_spection {
+    position: absolute;
+    left: 0;
+    width: 25%;
+    // height: calc(100% - 45px);
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+    padding-left: 10px;
+}
+
+.right_spection {
+    position: absolute;
+    right: 0;
+    width: 25%;
+    // height: calc(100% - 45px);
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+}
+
+.box_arch_point {
+    height: calc(100% - 40px);
+}
+
+.operation_spection {
+    position: relative;
+    height: 250px;
+    color: #fff;
+}
+
+.facility_entry {
+    position: relative;
+    height: 400px;
+    color: #fff;
+}
+
+.flex_spection {
+    flex: 1;
+    color: #fff;
+}
+
+.box_arch {
+    display: flex;
+    align-items: center;
+    height: calc(100% - 40px);
+}
+
+.image_tubbiness {
+    position: relative;
+    flex: none;
+    width: 200px;
+    height: 100%;
+    background: url("@/assets/images/tubbiness.png");
+    background-size: 80% 80%;
+    background-position: center center;
+    background-repeat: no-repeat;
+
+    .work_num {
+        position: absolute;
+        top: 60px;
+        left: 0;
+        right: 0;
+        text-align: center;
+        color: rgb(84, 218, 250);
+        font-size: 20px;
+
+        span {
+            font-size: 14px;
+            color: rgb(158, 174, 195);
+        }
+    }
+
+    .work_title {
+        position: absolute;
+        bottom: 36px;
+        left: 0px;
+        right: 0px;
+        text-align: center;
+    }
+}
+
+.right_content {
+    flex: 1;
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+    justify-content: space-evenly;
+
+    .work_week {
+        display: flex;
+        align-items: center;
+        font-size: 22px;
+        font-weight: bold;
+        color: #fff;
+
+        span {
+            padding-right: 10px;
+            font-size: 16px;
+            color: rgb(214, 218, 222);
+        }
+    }
+}
+
+.color_line_xj {
+    width: 6px;
+    height: 6px;
+    margin-right: 10px;
+}
+
+.entry {
+    width: 100%;
+    height: calc(100% - 45px);
+    display: flex;
+    position: relative;
+
+    .entry-box {
+        width: 100%;
+        height: 100%;
+        object-fit: fill;
+        position: absolute;
+        top: 0;
+        left: 0;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+    }
+
+    .entry-box-item {
+        width: 100%;
+        height: 180px;
+        color: #fff;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        position: relative;
+        background: radial-gradient(circle,
+                rgba(47, 207, 218, 0.3),
+                rgba(51, 149, 233, 0) 100px,
+                rgba(51, 149, 233, 0) 100px,
+                rgba(51, 149, 233, 0) 12px,
+                rgba(51, 149, 233, 0.1) 12px,
+                rgba(51, 149, 233, 0.1) 40px);
+
+        .item-center-line {
+            width: 170px;
+            height: 170px;
+            background-color: transparent;
+            border-top: 0.5px solid #80bff7;
+            border-bottom: 0.5px solid #80bff7;
+            border-radius: 50%;
+            box-sizing: border-box;
+            position: absolute;
+            top: calc(50% - 85px);
+            left: calc(50% - 85px);
+            animation: rotate 8s infinite linear;
+        }
+
+        .item-center-pie {
+            width: 150px;
+            height: 150px;
+            background-color: transparent;
+            border-top: 0.5px solid #80bff7;
+            border-bottom: 0.5px solid #80bff7;
+            border-radius: 50%;
+            box-sizing: border-box;
+            position: absolute;
+            top: calc(50% - 75px);
+            left: calc(50% - 75px);
+            animation: rotate1 8s infinite linear;
+        }
+    }
+}
+
+/* 定义中间球体顺时针转动 */
+@keyframes rotate {
+    from {
+        transform: rotate(0deg);
+    }
+
+    to {
+        transform: rotate(360deg);
+    }
+}
+
+/* 定义中间圆逆时针转动 */
+@keyframes rotate1 {
+    from {
+        transform: rotate(0deg);
+    }
+
+    to {
+        transform: rotate(-360deg);
+    }
+}
+
+.box_water_drop {
+    position: absolute;
+    top: calc(50% - 70px);
+    left: calc(50% - 70px);
+}
+
+.left_water {
+    position: absolute;
+    left: 10px;
+    top: 0;
+    bottom: 0;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    flex-direction: column;
+    padding-left: 30px;
+}
+
+.right_water {
+    position: absolute;
+    right: 10px;
+    top: 0;
+    bottom: 0;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    flex-direction: column;
+    padding-right: 30px;
+}
+
+.water_span_title {
+    padding-bottom: 5px;
+    color: #fff;
+    font-size: 30px;
+}
+
+.tile_fx {
+    color: rgb(148, 189, 229);
+    font-size: 15px;
+}
+</style>
+<style lang="scss" scoped>
+.point_box :deep(.el-input__wrapper) {
+    background-color: transparent !important;
+    box-shadow: 0 0 0 1px rgb(58, 86, 117) inset !important;
+}
+
+.point_box :deep(.el-input__wrapper.is-focus) {
+    box-shadow: 0 0 0 1px #409EFF inset !important;
+}
+
+.point_box :deep(.el-input__inner) {
+    color: #ffffff !important;
+}
+</style>

+ 475 - 0
src/views/system/passageway/index.vue

@@ -0,0 +1,475 @@
+<template>
+  <div class="inspection">
+    <div class="left_spection">
+      <HeadlineTag value="出入口列表"></HeadlineTag>
+      <div class="box_arch_point">
+        <div class="point_box" style="margin-top: 10px;">
+          <el-input v-model="input" placeholder="按出入口名称搜索" />
+        </div>
+        <div style="height: calc(100% - 160px);">
+          <Empty></Empty>
+        </div>
+        <div class="center_in">
+          <pagination :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
+            layout="total, prev, pager, next" @pagination="getList" />
+        </div>
+      </div>
+    </div>
+    <div class="right_spection">
+      <div class="operation_spection">
+        <HeadlineTag value="运行统计"></HeadlineTag>
+        <div class="box_arch">
+          <div class="image_tubbiness">
+            <div class="work_num">3714<span>个</span></div>
+            <div class="work_title">今日总数</div>
+          </div>
+          <div class="right_content">
+            <div class="work_week">
+              <div class="color_line_xj" style="background-color: rgb(21, 213, 21);"></div>
+              <span>巡检点数:</span>20
+            </div>
+            <div class="work_week">
+              <div class="color_line_xj" style="background-color: rgb(196, 127, 19);"></div>
+              <span>巡检计划:</span>10
+            </div>
+            <div class="work_week">
+              <div class="color_line_xj" style="background-color: rgb(195, 56, 56);"></div>
+              <span>巡检线路:</span>15
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="flex_spection">
+        <HeadlineTag value="监控设备"></HeadlineTag>
+        <div class="box_arch">
+          <div ref="chartRouting" style="width: 100%;height: 100%;"></div>
+        </div>
+      </div>
+      <div class="flex_spection">
+        <HeadlineTag value="实时巡检"></HeadlineTag>
+        <div class="box_arch">
+          <dv-scroll-board :config="config" style="width:100%;height:calc(100% - 10px);margin-top: 10px;" />
+        </div>
+      </div>
+      <div class="flex_spection">
+        <HeadlineTag value="出入统计"></HeadlineTag>
+        <div class="box_arch">
+          <div ref="chartAccess" style="width: 100%;height: 100%;"></div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup>
+import HeadlineTag from '@/components/HeadlineTag'
+import Empty from '@/components/Empty'
+import * as echarts from 'echarts'
+const total = ref(0);
+const queryParams = ref({
+  pageNum: 1,
+  pageSize: 10,
+});
+const input = ref('')
+const config = ref({
+  headerBGC: '#10285c',
+  oddRowBGC: '#10285c7f',
+  evenRowBGC: '#10285c00',
+  header: ['名称', '位置', '列3'],
+  data: [
+    ['行1列1', '行1列2', '行1列3'],
+    ['行2列1', '行2列2', '行2列3'],
+    ['行3列1', '行3列2', '行3列3'],
+    ['行4列1', '行4列2', '行4列3'],
+    ['行5列1', '行5列2', '行5列3'],
+    ['行6列1', '行6列2', '行6列3'],
+    ['行7列1', '行7列2', '行7列3'],
+    ['行8列1', '行8列2', '行8列3'],
+    ['行9列1', '行9列2', '行9列3'],
+    ['行10列1', '行10列2', '行10列3']
+  ]
+})
+
+/** 查询列表 */
+function getList() {
+};
+const chartRouting = ref(null);
+let chartInstance = null;
+// 初始化图表
+const initChart = () => {
+  var data = [91, 82, 73, 61, 54, 46];
+  var yAxis = ['北京市', '天津市', '河北省', '吉林省', '辽宁省', '内蒙古']
+  chartInstance = echarts.init(chartRouting.value);
+  chartInstance.setOption({
+    tooltip: {
+      textStyle: {
+        fontSize: 16
+      },
+      formatter: function (res) {
+        return `${res.name} : ${res.data}万人`;
+      }
+    },
+    legend: {
+      selectedMode: false,
+      show: false
+    },
+    grid: {
+      left: '2%',
+      right: '5%',
+      bottom: '0%',
+      top: 5,
+      containLabel: true
+    },
+    xAxis: [{
+      type: 'value',
+      show: false
+    }],
+    yAxis: [{
+      splitLine: {
+        show: false
+      },
+      axisLine: { // y轴
+        show: false
+      },
+      type: 'category',
+      inverse: true, /// 柱状图顺序
+      axisTick: {
+        show: false
+      },
+      data: yAxis,
+      axisLabel: {
+        show: true,
+        textStyle: {
+          color: '#ffffff'
+        },
+        formatter: (res, index) => {
+          var num = 0;
+          num = index + 1;
+          if (index === 0) {
+            return '{no1|' + 'TOP' + num + '}' + '{data|' + res + '}';
+          } else if (index === 1) {
+            return '{no2|' + 'TOP' + num + '}' + '{data|' + res + '}';
+          } else if (index === 2) {
+            return '{no3|' + 'TOP' + num + '}' + '{data|' + res + '}';
+          } else if (index === 3) {
+            return '{no4|' + 'TOP' + num + '}' + '{data|' + res + '}';
+          } else if (index === 4) {
+            return '{no5|' + 'TOP' + num + '}' + '{data|' + res + '}';
+          } else if (index === 5) {
+            return '{no6|' + 'TOP' + num + '}' + '{data|' + res + '}';
+          }
+          return res;
+        },
+        rich: {
+          no1: {
+            color: '#EF5525',
+            fontSize: 14
+          },
+          data: {
+            color: '#fff',
+            fontSize: 14
+          },
+          no2: {
+            color: '#EFAF25',
+            fontSize: 14
+          },
+          no3: {
+            color: '#D0EF25',
+            fontSize: 14
+          },
+          no4: {
+            color: '#26EFC2',
+            fontSize: 14
+          },
+          no5: {
+            color: '#2BE4FF',
+            fontSize: 14
+          },
+          no6: {
+            color: '#2BE4FF',
+            fontSize: 14
+          }
+        }
+
+      }
+    }],
+    series: [{
+      name: '标准化',
+      type: 'bar',
+      barWidth: 10, // 柱子宽度
+      label: {
+        show: true,
+        position: 'right', // 位置
+        color: '#fff',
+        fontSize: 14,
+        distance: 5 // 距离
+      }, // 柱子上方的数值
+      itemStyle: {
+        barBorderRadius: [20, 20, 20, 20],
+        color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [
+          '#4C67EB', '#00F6FF'
+        ].map((color, offset) => ({
+          color,
+          offset
+        }))) // 渐变
+      },
+      data: data
+    }]
+  }
+  );
+};
+
+const chartAccess = ref(null);
+let chartAcces = null;
+const initAccess = () => {
+  var data = [
+    {
+      name: '正常占比',
+      value: 12,
+      percent: '58',
+    },
+    {
+      name: '故障占比',
+      value: 5,
+      percent: '58',
+    },
+  ];
+
+  var titleArr = [];
+  var seriesArr = [];
+  var colors = [
+    'rgba(6, 254, 188, 1)',
+    'rgba(255, 164, 3, 1)',
+    'rgba(6, 254, 188, 0.1)',
+    'rgba(255, 164, 3, 0.1)',
+    'rgba(255, 255, 255, 0.38)',
+    'rgba(255, 255, 255, 1)',
+  ];
+  data.forEach(function (item, index) {
+    let i = index;
+    if (i % 2 === 1) {
+      i = i + 1;
+    }
+    titleArr.push({
+      text: '{b|正常个数}' + '   ' + '{a|' + item.value + '}' + '   ' + '{a|' + item.percent + '%}',
+      left: '50%',
+      top: (i + 1) * 20 + '%',
+      textAlign: 'center',
+      textStyle: {
+        fontWeight: 'normal',
+        fontSize: '16',
+        color: colors[4],
+        textAlign: 'center',
+        rich: {
+          a: {
+            color: colors[5],
+            fontSize: '14',
+            fontWeight: 'bold',
+          },
+          b: {
+            colors: colors[4],
+            fontSize: '14',
+            fontWeight: 'bold',
+          },
+        },
+      },
+    });
+    seriesArr.push({
+      name: item.name,
+      type: 'pie',
+      clockWise: false,
+      radius: ['25%', '30%'],
+      itemStyle: {
+        normal: {
+          color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+            { offset: 0, color: colors[index + 2] },
+            { offset: 1, color: colors[index] },
+          ]),
+          shadowColor: colors[index],
+          shadowBlur: 0,
+          label: {
+            show: false,
+          },
+          labelLine: {
+            show: false,
+          },
+        },
+      },
+      hoverAnimation: false,
+      center: ['25%', (i + 1) * 20 + '%'],
+      data: [
+        {
+          value: item.percent,
+          label: {
+            normal: {
+              formatter: function (params) {
+                return params.seriesName;
+              },
+              position: 'center',
+              show: true,
+              textStyle: {
+                fontSize: '14',
+                color: colors[4],
+              },
+            },
+          },
+        },
+        {
+          value: 100 - item.percent,
+          name: 'invisible',
+          itemStyle: {
+            normal: {
+              color: 'rgba(104, 104, 104, 0.3)',
+            },
+            emphasis: {
+              color: 'rgba(104, 104, 104, 0.3)',
+            },
+          },
+        },
+      ],
+    });
+  });
+  chartAcces = echarts.init(chartAccess.value);
+  chartAcces.setOption({
+    title: titleArr,
+    series: seriesArr,
+  });
+};
+// 生命周期
+onMounted(() => {
+  initChart()
+  initAccess()
+});
+// 窗口自适应
+window.addEventListener('resize', () => {
+  chartInstance?.resize();
+  chartAcces?.resize();
+});
+</script>
+
+<style scoped lang="scss">
+.inspection {
+  position: relative;
+  width: 100%;
+  padding-top: 45px;
+  height: 100vh;
+  overflow: hidden;
+}
+
+.left_spection {
+  position: absolute;
+  left: 0;
+  width: 25%;
+  // height: calc(100% - 45px);
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+  padding-left: 10px;
+}
+
+.right_spection {
+  position: absolute;
+  right: 0;
+  width: 25%;
+  // height: calc(100% - 45px);
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+}
+
+.box_arch_point {
+  height: calc(100% - 40px);
+}
+
+.operation_spection {
+  height: 250px;
+  color: #fff;
+}
+
+.flex_spection {
+  flex: 1;
+  color: #fff;
+}
+
+.box_arch {
+  display: flex;
+  align-items: center;
+  height: calc(100% - 40px);
+}
+
+.image_tubbiness {
+  position: relative;
+  flex: none;
+  width: 200px;
+  height: 100%;
+  background: url("@/assets/images/tubbiness.png");
+  background-size: 80% 80%;
+  background-position: center center;
+  background-repeat: no-repeat;
+
+  .work_num {
+    position: absolute;
+    top: 60px;
+    left: 0;
+    right: 0;
+    text-align: center;
+    color: rgb(84, 218, 250);
+    font-size: 20px;
+
+    span {
+      font-size: 14px;
+      color: rgb(158, 174, 195);
+    }
+  }
+
+  .work_title {
+    position: absolute;
+    bottom: 36px;
+    left: 0px;
+    right: 0px;
+    text-align: center;
+  }
+}
+
+.right_content {
+  flex: 1;
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+  justify-content: space-evenly;
+
+  .work_week {
+    display: flex;
+    align-items: center;
+    font-size: 22px;
+    font-weight: bold;
+    color: #fff;
+
+    span {
+      padding-right: 10px;
+      font-size: 16px;
+      color: rgb(214, 218, 222);
+    }
+  }
+}
+
+.color_line_xj {
+  width: 6px;
+  height: 6px;
+  margin-right: 10px;
+}
+</style>
+<style lang="scss" scoped>
+.point_box :deep(.el-input__wrapper) {
+  background-color: transparent !important;
+  box-shadow: 0 0 0 1px rgb(58, 86, 117) inset !important;
+}
+
+.point_box :deep(.el-input__wrapper.is-focus) {
+  box-shadow: 0 0 0 1px #409EFF inset !important;
+}
+
+.point_box :deep(.el-input__inner) {
+  color: #ffffff !important;
+}
+</style>

Some files were not shown because too many files changed in this diff