xiangpei
2024-03-20 996ba897101bbc959e035983c44d0bd4c5559fbb
Merge remote-tracking branch 'origin/master'
19个文件已修改
1个文件已添加
629 ■■■■ 已修改文件
src/api/system/role.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/Navbar.vue 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/data-view/index.vue 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/components/screen-detection/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/components/screen-examine/components/examine-chart.vue 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/components/screen-examine/components/examine-hola.vue 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/components/screen-map/index.vue 134 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/components/screen-map/test.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/components/screen-wrapper/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/components/select-item/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/check-result/city/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/check-result/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/check-template/index.vue 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/data-manage/index.vue 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/report/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/vehicle-data-monitor/index.vue 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/work-order/index.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/system/role.js
@@ -56,7 +56,13 @@
    data: data
  })
}
// 切换角色
export function exchangeRole(roleId) {
  return request({
    url: '/system/role/exchange/'+ roleId,
    method: 'get',
  })
}
// 删除角色
export function delRole(roleId) {
  return request({
src/layout/components/Navbar.vue
@@ -1,12 +1,17 @@
<template>
  <div class="navbar">
    <hamburger id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
    <hamburger id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container"
      @toggleClick="toggleSideBar" />
    <breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!topNav"/>
    <top-nav id="topmenu-container" class="topmenu-container" v-if="topNav"/>
    <breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!topNav" />
    <top-nav id="topmenu-container" class="topmenu-container" v-if="topNav" />
    <div class="right-menu">
      <template v-if="device!=='mobile'">
      <template v-if="device !== 'mobile'">
        <screenfull id="screenfull" class="right-menu-item hover-effect" />
        <el-tooltip content="布局大小" effect="dark" placement="bottom">
          <size-select id="size-select" class="right-menu-item hover-effect" />
@@ -31,6 +36,17 @@
          </el-dropdown-item>
        </el-dropdown-menu>
      </el-dropdown>
    </div>
    <div class="test-container">
      <el-button-group style="vertical-align: text-bottom;">
        <el-button @click="exchange(100)">省厅角色</el-button>
        <el-button @click="exchange(103)">区县角色</el-button>
        <el-button @click="exchange(2)">运维角色</el-button>
      </el-button-group>
    </div>
    <div class="button-container">
      <el-button type="primary" @click="toScreen">可视化大屏</el-button>
    </div>
  </div>
</template>
@@ -45,7 +61,7 @@
import Search from '@/components/HeaderSearch'
import RuoYiGit from '@/components/RuoYi/Git'
import RuoYiDoc from '@/components/RuoYi/Doc'
import { exchangeRole } from "@/api/system/role";
export default {
  components: {
    Breadcrumb,
@@ -81,6 +97,11 @@
    }
  },
  methods: {
    exchange(roleId) {
      exchangeRole(roleId).then(response => {
        this.$modal.msgSuccess("修改成功");
      }).catch(() => { });
    },
    toggleSideBar() {
      this.$store.dispatch('app/toggleSideBar')
    },
@@ -93,7 +114,13 @@
        this.$store.dispatch('LogOut').then(() => {
          location.href = '/index';
        })
      }).catch(() => {});
      }).catch(() => { });
    },
    toScreen() {
      this.$router.push({
        path: '/screen'
      })
    }
  }
}
@@ -105,7 +132,7 @@
  overflow: hidden;
  position: relative;
  background: #fff;
  box-shadow: 0 1px 4px rgba(0,21,41,.08);
  box-shadow: 0 1px 4px rgba(0, 21, 41, .08);
  .hamburger-container {
    line-height: 46px;
@@ -113,7 +140,7 @@
    float: left;
    cursor: pointer;
    transition: background .3s;
    -webkit-tap-highlight-color:transparent;
    -webkit-tap-highlight-color: transparent;
    &:hover {
      background: rgba(0, 0, 0, .025)
@@ -186,4 +213,18 @@
    }
  }
}
.test-container {
  margin: 0 20px;
  height: 100%;
  float: right;
  display: flex;
  align-items: center;
}
.button-container {
  margin: 0 20px;
  height: 100%;
  float: right;
  display: flex;
  align-items: center;
}
</style>
src/router/index.js
@@ -51,13 +51,13 @@
    component: Layout,
    hidden: true,
    children: [
    {
      path: 'index',
      name: 'vehicle-data-monitor',
      component: () => import('@/views/system/vehicle-data-monitor/index'),
      meta: { title: '车辆过卡口数据一致性', activeMenu: '/system/vehicle-data-monitor' }
    }
  ]
      {
        path: 'index',
        name: 'vehicle-data-monitor',
        component: () => import('@/views/system/vehicle-data-monitor/index'),
        meta: { title: '车辆过卡口数据一致性', activeMenu: '/system/vehicle-data-monitor' }
      }
    ]
  },
  {
    path: '/register',
@@ -77,7 +77,7 @@
  {
    path: '',
    component: Layout,
    redirect: 'index',
    redirect: 'screen',
    children: [
      {
        path: 'index',
@@ -87,6 +87,20 @@
      }
    ]
  },
  // {
  //   path: '',
  //   component: Layout,
  //   redirect: 'index',
  //   children: [
  //     {
  //       path: 'index',
  //       component: () => import('@/views/index'),
  //       name: 'Index',
  //       meta: { title: '首页', icon: 'dashboard', affix: true }
  //     }
  //   ]
  // },
  {
    path: '/screen',
    hidden: true,
src/views/home/data-view/index.vue
@@ -9,11 +9,20 @@
    <el-card class="map-wrapper">
      <el-row>
        <el-col :offset="21" :span="3">
          <el-select v-model="selectOption" placeholder="请选择">
            <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
            </el-option>
          </el-select>
        <el-col :span="5">
          <div class="select-container">
            <div class="select-label">
              数据源
            </div>
            <el-select v-model="selectOption" placeholder="请选择">
              <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
              </el-option>
            </el-select>
          </div>
        </el-col>
        <el-col :offset="17" :span="2">
          <el-button type="primary" @click="toScreen">可视化大屏</el-button>
        </el-col>
      </el-row>
      <el-row :gutter="40" class="data-plane" style="height: 100%;">
@@ -123,6 +132,10 @@
          value: 2,
          label: '市局数据'
        },
        {
          value: 3,
          label: '公安部数据'
        },
      ],
      selectOption: 1
    }
@@ -145,6 +158,12 @@
      });
      data.name = '自贡市';
      this.activeData = data;
    },
    toScreen() {
      this.$router.push({
        path: '/screen'
      })
    }
  },
  created() {
@@ -179,6 +198,16 @@
  aspect-ratio: 6/2;
}
.select-container {
  display: flex;
  align-items: center;
  .select-label {
    color: #666;
    margin-right: 20px;
    font-size: 16px;
  }
}
@media screen and (min-width: 1200px) {
  .el-col-md-6 {
    width: 20%;
src/views/index.vue
@@ -1,6 +1,6 @@
<template>
  <div class="app-container home">
    <data-view></data-view>
    <!-- <data-view></data-view> -->
    <data-wrapper></data-wrapper>
  </div>
</template>
src/views/login.vue
@@ -149,6 +149,7 @@
  watch: {
    $route: {
      handler: function(route) {
        console.log(route);
        this.redirect = route.query && route.query.redirect;
      },
      immediate: true
@@ -198,6 +199,8 @@
              this.loginInfo = loginInfo.user
              //如果返回为1正常跳转
              if(this.loginInfo.firstLogin == 1){
                this.$router.push({ path: "/" }).catch(()=>{});
                return;
                this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
              } else {
                 localStorage.setItem('firstLogin',0)
src/views/screen/components/screen-detection/index.vue
@@ -41,12 +41,12 @@
        waveHeight: 5
      },
      config2: {
        data: [99.77],
        data: [70.77],
        shape: 'round',
        waveHeight: 5
      },
      config3: {
        data: [95.39],
        data: [60.39],
        shape: 'round',
        waveHeight: 5
      },
src/views/screen/components/screen-examine/components/examine-chart.vue
@@ -3,7 +3,7 @@
    <div class="rank-chart">
      <div class="hola-item" v-for="item in dataList" :key="item.id">
        <examine-hola :startColor="'#02C77E'" :endColor="'#017770'" :centerValue="item.value"
          :bottomTitle="item.name"></examine-hola>
          :bottomTitle="item.name" :routerPath="item.routerUrl" ></examine-hola>
      </div>
    </div>
  </div>
@@ -20,15 +20,15 @@
  data() {
    return {
      dataList: [
        {id: 1,name: '平台在线率', value: 60},
        {id: 2,name: '一机一档合格率', value: 20},
        {id: 3,name: '档案考核比', value: 60},
        {id: 4,name: '点位在线率', value: 40},
        {id: 5,name: '录像可用率', value: 80},
        {id: 6,name: '重点点位录像可用率', value: 20},
        {id: 7,name: '信息采集准确率', value: 60},
        {id: 8,name: '卡门过车数据一致性', value: 40},
        {id: 1,name: '平台在线率', value: 60,routerUrl: '/car/vehicle-data-monitor/index'},
        {id: 2,name: '一机一档合格率', value: 20,routerUrl: '/car/vehicle-data-monitor/index'},
        {id: 3,name: '档案考核比', value: 60,routerUrl: '/car/vehicle-data-monitor/index'},
        {id: 4,name: '点位在线率', value: 40,routerUrl: '/car/vehicle-data-monitor/index'},
        {id: 5,name: '录像可用率', value: 80,routerUrl: '/car/vehicle-data-monitor/index'},
        {id: 6,name: '重点点位录像可用率', value: 20,routerUrl: '/car/vehicle-data-monitor/index'},
        {id: 7,name: '信息采集准确率', value: 60,routerUrl: '/car/vehicle-data-monitor/index'},
        {id: 8,name: '车辆过卡口数据一致性', value: 40,routerUrl: '/car/vehicle-data-monitor/index'},
      ]
    }
  },
@@ -65,4 +65,4 @@
    }
  }
}
</style>
</style>
src/views/screen/components/screen-examine/components/examine-hola.vue
@@ -2,7 +2,9 @@
  <!-- 进度条类型组件 -->
  <div class="progressChart">
    <div class="chart" id="progressChart" ref="chartRef"></div>
    <label class="bottom le-0-font">{{ bottomTitle }}</label>
    <el-link class="bottom le-0-font" :underline="false" @click="handleDetail(routerPath)">
    <label >{{ bottomTitle }}</label>
    </el-link>
  </div>
</template>
<script>
@@ -120,12 +122,22 @@
      type: [Number, String],
      default: 0
    },
    routerPath: {
      type: String,
      default: ''
    },
    bottomTitle: {
      type: String,
      default: ''
    }
  },
  methods: {},
  methods: {
    handleDetail(routerUrl) {
      this.$router.push({
        path: routerUrl,
      })
    }
  },
  created() { },
  mounted() {
    let myChart = echarts.init(this.$refs['chartRef']) // 使用Id无法实现
@@ -154,4 +166,4 @@
    margin-top: 10px;
  }
}
</style>
</style>
src/views/screen/components/screen-map/index.vue
@@ -15,18 +15,18 @@
import WrapperTitle from '../wrapper-title/index';
echarts.registerMap('zigong', mapData);
console.log(mapData);
let mapChart = null;
let tempName = '';
let observer = null;
const mapConfig = {
  series: [{
    map: "zigong", //注册地图的名字
    type: "map3D",
  geo3D: {
    map: 'zigong',
    show: true,
    bottom: 0,
    left: 0,
    top: 0,
    right: 0,
    zlevel: 1,
    itemStyle: {
      color: "#4189f2", // 背景
      opacity: 1, //透明度
@@ -44,28 +44,112 @@
    // 控制器
    viewControl: {
      beta: -30,
      alpha: 90,
      distance: 100,
      alpha: 50,
      distance: 105,
      maxBeta: 180,
      panSensitivity: 0
      panSensitivity: 0,
      zoomSensitivity: 1,
      rotateSensitivity: 0,
    },
    // 鼠标移入时样式
    emphasis: {
      itemStyle: {
        color: "#F63545"
        color: "#F63545",
      }
    },
    // regions: mapData.features.map((item) => {
    //   return {
    //     name: item.properties.name,
    //     itemStyle: {
    //       color: "#4189f2"
    //     }
    //   }
    // })
  },
  series: [
    {
      map: "zigong", //注册地图的名字
      type: "map3D",
      bottom: 0,
      left: 0,
      top: 0,
      right: 0,
      zlevel: 2,
      itemStyle: {
        color: "#4189f2", // 背景
        opacity: 0, //透明度
        borderWidth: 0, // 边框宽度
        borderColor: "#fff", // 边框颜色
        fontSize: 18, //
      },
    // 数据
    data: mapData.features.map((item) => {
      return {
        name: item.properties.name,
        itemStyle: {
          color: "#4189f2"
      // 标签
      label: {
        show: false,
        color: "#fff", //地图初始化区域字体颜色
        fontSize: 18,
      },
      // 控制器
      viewControl: {
        beta: -30,
        alpha: 50,
        distance: 105,
        maxBeta: 180,
        panSensitivity: 0,
        zoomSensitivity: 1,
        rotateSensitivity: 0,
      },
      // 数据
      data: mapData.features.map((item) => {
        return {
          name: item.properties.name,
          itemStyle: {
            color: "#4189f2"
          }
        }
      }
    }),
  }
      }),
    },
    {
      type: 'lines3D',
      coordinateSystem: 'geo3D',
      zlevel: 15,
      effect: {
        show: true,
        period: 5,
        trailLength: 0.2,
        color: '#01AAED',
      },
      lineStyle: {
        width: 3,
        opacity: 0.6,
        color: '#FFB800'
      },
      data: [
        [
          [104.343914,29.470778],
          [104.766432,29.328016]
        ],
        [
          [104.603116,29.347364],
          [104.766432,29.328016]
        ],
        [
          [104.873139,29.30861],
          [104.766432,29.328016]
        ],
        [
          [105.058792,29.1521],
          [104.766432,29.328016]
        ],
        [
          [104.848535,29.410526],
          [104.766432,29.328016]
        ],
      ]
    }
  ]
};
@@ -82,13 +166,21 @@
  methods: {
    filterData(name) {
      this.initConfig();
      let temp = mapConfig.series[0].data.find(item => item.name === name);
      let temp = mapConfig.geo3D.regions.find(item => item.name === name);
      // mapConfig.geo3D.regions.push({
      //   name: name,
      //   itemStyle: {
      //     color: '#F63545'
      //   }
      // });
      temp.itemStyle.color = '#F63545';
      mapChart.setOption(mapConfig, true);
      this.$emit('filterData', name);
    },
    initConfig() {
      mapConfig.series[0].data.forEach(item => {
      // mapConfig.geo3D.regions = [];
      mapConfig.geo3D.regions.forEach(item => {
        item.itemStyle.color = '#4189f2';
      });
    },
@@ -112,6 +204,7 @@
    mapChart = echarts.init(this.$refs.map);
    mapChart.setOption(mapConfig, true);
    mapChart.on('click', (params) => {
      return;
      if (tempName === params.name) {
        tempName = '';
        this.initConfig();
@@ -144,8 +237,9 @@
  .map-content {
    flex: 1;
    background: rgba(67, 102, 155, 0.3);
  border: 1px solid rgba(47, 91, 157, 0.8);
    border: 1px solid rgba(47, 91, 157, 0.8);
  }
  .map-style {
    width: 100%;
    height: 100%;
src/views/screen/components/screen-map/test.vue
src/views/screen/components/screen-wrapper/index.vue
@@ -2,7 +2,7 @@
  <div class="wrapper-container">
    <select-item></select-item>
    <div class="return-button">
      <el-button type="primary" @click="returnPath">返回</el-button>
      <el-button type="primary" @click="returnPath">管理系统</el-button>
    </div>
    <div class="wrapper-content">
      <div class="left-container wrapper">
@@ -43,7 +43,7 @@
  },
  methods: {
    returnPath() {
      this.$router.go(-1);
      this.$router.push('/index');
    }
  }
}
src/views/screen/components/select-item/index.vue
@@ -24,15 +24,15 @@
      dateValue: new Date(),
      testData1: [
        {
          name: '省厅',
          name: '省厅数据',
          value: 1
        },
        {
          name: '市厅',
          name: '市局数据',
          value: 2
        },
        {
          name: '公安部',
          name: '公安部数据',
          value: 3
        }
      ]
src/views/system/check-result/city/index.vue
@@ -94,8 +94,8 @@
      <div class="text item">考核频率<span class="time">{{ "季度" }}</span></div>
      <div class="text item">考核时间
        <span class="time">{{ item.checkTime }}</span>
        <el-button size="small" round style="float: right;" @click="handlePublish(item)" v-show="item.publish != 1">确认发布</el-button>
        <el-button size="small" round style="float: right;" v-show="item.publish == 1" disabled="true">已发布</el-button>
        <el-button size="small" round style="float: right;" @click="handlePublish(item)" v-show="item.publish != 1"  v-hasPermi="['result:city:publish']">确认发布</el-button>
        <el-button size="small" round style="float: right;" v-show="item.publish == 1" disabled="true"  v-hasPermi="['result:city:publish']">已发布</el-button>
      </div>
    </el-card>
src/views/system/check-result/index.vue
@@ -94,8 +94,8 @@
      <div class="text item">考核分数<span class="time">{{ item.checkScore }}</span></div>
      <div class="text item">考核时间
        <span class="time">{{ item.checkTime }}</span>
        <el-button size="small" round style="float: right;" @click="handlePublish(item)" v-show="item.publish != 1">确认发布</el-button>
        <el-button size="small" round style="float: right;" @click="handlePublish(item)" v-show="item.publish == 1">已发布</el-button>
        <el-button size="small" round style="float: right;" @click="handlePublish(item)" v-show="item.publish != 1"  v-hasPermi="['result:contract:publish']">确认发布</el-button>
        <el-button size="small" round style="float: right;" @click="handlePublish(item)" v-show="item.publish == 1"  v-hasPermi="['result:contract:publish']">已发布</el-button>
      </div>
    </el-card>
src/views/system/check-template/index.vue
@@ -116,14 +116,15 @@
          <el-input v-model="form.templateName" placeholder="请输入模板名称" />
        </el-form-item>
        <el-form-item label="考核对象" prop="unitName">
          <el-select v-model="form.unitName" placeholder="请选择">
            <el-option
              v-for="item in unitList"
              :key="item.id"
              :label="item.value"
              :value="item.id">
            </el-option>
          </el-select>
          <div class="block">
            <span class="demonstration"></span>
            <el-cascader
              v-model="value"
              :options="options"
              :props = "props"
              @change="handleChange"></el-cascader>
          </div>
        </el-form-item>
        <el-form-item label="考核规则" prop="tempRuleFormList">
          <div class="row-warp">
@@ -193,6 +194,46 @@
  name: "CheckTemplate",
  data() {
    return {
      props: { multiple: true },
      value: [],
      options: [{
        value: 'city',
        label: '区县',
        children: [{
          value: 'fushun',
          label: '富顺县',
        }, {
          value: 'rong',
          label: '荣县',
        },{
          value: 'gaoxin',
          label: '高新区',
        },{
          value: 'ziliujing',
          label: '自流井区',
        },{
          value: 'gongjing',
          label: '贡井区',
        },{
          value: 'daan',
          label: '大安区',
        },{
          value: 'yantan',
          label: '沿滩区',
        },
        ]
      }, {
        value: 'company',
        label: '公司',
        children: [{
          value: 'yunwei',
          label: '成都x运维',
        }, {
          value: 'yunwei2',
          label: '自贡x运维',
        }, ]
      },
      ],
      ruleList: [],
      unitList: [],
      // 临时规则表单
@@ -250,6 +291,9 @@
    this.selectUnit();
  },
  methods: {
    handleChange(value) {
      console.log(value);
    },
    removeRule(form) {
      console.log(form)
      this.ruleFormList = this.ruleFormList.filter(item => item !== form);
src/views/system/data-manage/index.vue
@@ -3,13 +3,24 @@
    <div class="container">
      <el-row type="flex" justify="center">
        <el-col :span="24">
          <h3 style="color: rgb(104,104,103);padding-top: 20px;padding-bottom: 20px;">人脸数据异常检测</h3>
          <h3 style="color: rgb(104,104,103);padding-top: 20px;padding-bottom: 20px;">视频运行监控</h3>
        </el-col>
      </el-row>
      <el-row type="flex" justify="center">
        <el-col :span="6" v-for="(item, index) in faceData" :key="index">
        <el-col :span="6" v-for="(item, index) in videoData" :key="index">
          <el-link @click="handleDetail(item)">
            <el-card style="width:150px;height: 150px;text-align: center;">
              <i style="font-size: 40px;padding: 15px;" :class="item.icon"></i>
              <div>{{ item.name }}</div>
            </el-card>
          </el-link>
        </el-col>
      </el-row>
      <br/>
      <el-row type="flex" justify="center">
        <el-col :span="6" v-for="(item, index) in videoData2" :key="index">
          <el-link @click="handleDetail(item)" :style="item.name == '' ? 'display:none' : ''">
            <el-card style="width:150px;height: 150px;text-align: center;">
              <i style="font-size: 40px;padding: 15px;" :class="item.icon"></i>
              <div>{{ item.name }}</div>
@@ -22,7 +33,7 @@
    <div class="container">
      <el-row type="flex" justify="center">
        <el-col :span="24">
          <h3 style="color: rgb(104,104,103);padding-top: 20px;padding-bottom: 20px;">车俩数据异常检测</h3>
          <h3 style="color: rgb(104,104,103);padding-top: 20px;padding-bottom: 20px;">车辆运行监控</h3>
        </el-col>
      </el-row>
@@ -36,7 +47,49 @@
          </el-link>
        </el-col>
      </el-row>
      <br/>
      <el-row type="flex" justify="center">
        <el-col :span="6" v-for="(item, index) in carData2" :key="index">
          <el-link @click="handleDetail(item)" :style="item.name == '' ? 'display:none' : ''">
            <el-card style="width:150px;height: 150px;text-align: center;">
              <i style="font-size: 40px;padding: 15px;" :class="item.icon"></i>
              <div>{{ item.name }}</div>
            </el-card>
          </el-link>
        </el-col>
      </el-row>
    </div>
    <div class="container">
      <el-row type="flex" justify="center">
        <el-col :span="24">
          <h3 style="color: rgb(104,104,103);padding-top: 20px;padding-bottom: 20px;">人脸运行监控</h3>
        </el-col>
      </el-row>
      <el-row type="flex" justify="center">
        <el-col :span="6" v-for="(item, index) in faceData" :key="index">
          <el-link @click="handleDetail(item)">
            <el-card style="width:150px;height: 150px;text-align: center;">
              <i style="font-size: 40px;padding: 15px;" :class="item.icon"></i>
              <div>{{ item.name }}</div>
            </el-card>
          </el-link>
        </el-col>
      </el-row>
      <br/>
      <el-row type="flex" justify="center">
        <el-col :span="6" v-for="(item, index) in faceData2" :key="index">
          <el-link @click="handleDetail(item)" :style="item.name == '' ? 'display:none' : ''">
            <el-card style="width:150px;height: 150px;text-align: center;">
              <i style="font-size: 40px;padding: 15px;" :class="item.icon"></i>
              <div>{{ item.name }}</div>
            </el-card>
          </el-link>
        </el-col>
      </el-row>
    </div>
    <br/><br/><br/><br/>
  </div>
</template>
@@ -44,16 +97,53 @@
export default {
  data() {
    return {
      faceData: [
        { name: '人脸识别时钟准确性', icon: 'el-icon-alarm-clock', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '人脸抓拍数据监测', icon: 'el-icon-user', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '人脸数据趋势分析', icon: 'el-icon-data-line', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '人脸抓拍设备活跃性', icon: 'el-icon-timer', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '人脸抓拍上传及时性', icon: 'el-icon-money', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '人脸抓拍大图可用性', icon: 'el-icon-data-analysis', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
      videoData: [
        { name: '平台在线', icon: 'el-icon-connection', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '一机一档', icon: 'el-icon-folder', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '点位在线', icon: 'el-icon-search', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '录像可用', icon: 'el-icon-turn-off', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '视频标注', icon: 'el-icon-place', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '重点指挥图像在线率', icon: 'el-icon-film', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
      ],
      videoData2: [
        { name: '视频图像资源安全管理', icon: 'el-icon-house', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '视频图像质量', icon: 'el-icon-set-up', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '', icon: 'el-icon-connection', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '', icon: 'el-icon-connection', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '', icon: 'el-icon-connection', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '', icon: 'el-icon-connection', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' }
      ],
      carData: [
        { name: '卡口过车数据一致性', icon: 'el-icon-truck', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' }
        { name: '视图库对接稳定性×1', icon: 'el-icon-truck', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '点位在线率', icon: 'el-icon-truck', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '联网卡口设备目录一致率', icon: 'el-icon-truck', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '车辆卡口信息采集准确率', icon: 'el-icon-truck', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '车辆卡口设备抓拍数据完整性', icon: 'el-icon-truck', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '车辆卡口设备抓拍数据准确性', icon: 'el-icon-truck', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' }
      ],
      carData2: [
        { name: '车辆卡口设备时钟准确性', icon: 'el-icon-truck', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '车辆卡口设备抓拍数据上传及时性', icon: 'el-icon-truck', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '车辆卡口设备url可用性×0.5', icon: 'el-icon-truck', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '车辆卡口设备抓拍数据大图可用性', icon: 'el-icon-truck', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '', icon: 'el-icon-truck', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '', icon: 'el-icon-truck', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' }
      ],
      faceData: [
        { name: '视图库对接稳定性', icon: 'el-icon-alarm-clock', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '点位在线率', icon: 'el-icon-user', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '目录一致率', icon: 'el-icon-data-line', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '人脸卡口信息采集准确率', icon: 'el-icon-timer', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '设备抓拍图片合格性', icon: 'el-icon-money', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '设备抓拍图片时钟准确性', icon: 'el-icon-data-analysis', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
      ],
      faceData2: [
        { name: '抓拍人脸数据上传及时性', icon: 'el-icon-thumb', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '人脸卡口设备抓拍数据大图可用性', icon: 'el-icon-pie-chart', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '', icon: 'el-icon-data-line', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '', icon: 'el-icon-timer', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '', icon: 'el-icon-money', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
        { name: '', icon: 'el-icon-data-analysis', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' },
      ]
    }
  },
src/views/system/report/index.vue
@@ -104,7 +104,7 @@
            type="text"
            icon="el-icon-edit"
            @click="handleAuditing(scope.row)"
            v-hasPermi="['system:report:auditing']"
            v-hasPermi="['system:report:audit']"
          >审核</el-button>
          <el-button
            size="mini"
src/views/system/vehicle-data-monitor/index.vue
@@ -1,79 +1,51 @@
<template>
  <div class="app-container">
    <!-- <div class="top">
      <el-row type="flex" justify="space-between" style="width: 60%;">
        <el-col :span="6">
          <el-card class="card">
            <i style="font-size: 40px;padding: 15px;" class="el-icon-wind-power"></i>
          </el-card>
        </el-col>
        <el-col :span="6" class="mod">
          <div class="number">{{ totalKiosks }}</div>
          <div>卡口总数</div>
        </el-col>
        <el-col :span="6" class="mod">
          <div class="numberTwo">{{ uniqueKiosks }}</div>
          <div>不唯一卡口数</div>
        </el-col>
        <div style="width: 1px;height: 60px;border: 1px solid #D7EBFA;margin: 40px;"></div>
        <el-col :span="6">
          <el-card class="card">
            <i style="font-size: 40px;padding: 15px;" class="el-icon-truck"></i>
          </el-card>
        </el-col>
        <el-col :span="6" class="mod">
          <div class="number">{{ totalCarData }}</div>
          <div>过车数据总量</div>
        </el-col>
        <el-col :span="6" class="mod">
          <div class="numberTwo">{{ uniqueCarData }}</div>
          <div>不唯一数据量</div>
        </el-col>
      </el-row>
    </div> -->
    <el-card class="box-card">
      <el-row type="flex" align="middle" justify="space-between">
        <el-col :xl="8" :lg="8" :md="10" :sm="8" :xs="6">
          <div class="icon-container" style="background-color: #5599F7;font-size: 50px;color: #FFF;">
        <el-col :span="2">
          <div class="icon-container">
            <i class="el-icon-wind-power"></i>
          </div>
        </el-col>
        <el-col :xl="14" :lg="14" :md="12" :sm="14" :xs="16">
          <div class="dashboard">
        <el-col :span="2">
          <div>
            <div class="dashboard-item">
              <h3 style="color: #5C9BF8">{{ totalKiosks }}</h3>
              <p>卡口总数</p>
            </div>
            <div class="dashboard-item">
              <h3>{{ uniqueKiosks }}</h3>
              <p>不唯一卡口数</p>
            </div>
            <div class="dashboard-item">
              <div style="width: 1px;height: 55px;border: 1px solid #D7EBFA;"></div>
            </div>
            <div class="dashboard-item">
              <h3 style="color: #5C9BF8">{{ totalCarData }}</h3>
              <p>过车数据总量</p>
            </div>
            <div class="dashboard-item">
              <h3>{{ uniqueCarData }}</h3>
              <p>不唯一数据量</p>
            </div>
          </div>
        </el-col>
        <el-col :span="2">
          <div class="dashboard-item">
            <h3>{{ uniqueKiosks }}</h3>
            <p>不唯一卡口数</p>
          </div>
        </el-col>
        <el-col :span="1">
          <div class="dashboard-item">
            <div style="width: 1px;height: 55px;border: 1px solid #D7EBFA;margin: 20px;"></div>
          </div>
        </el-col>
        <el-col :span="2">
          <div class="icon-container">
            <i class="el-icon-truck"></i>
          </div>
        </el-col>
        <el-col :span="2">
          <div class="dashboard-item">
            <h3 style="color: #5C9BF8">{{ totalCarData }}</h3>
            <p>过车数据总量</p>
          </div>
        </el-col>
        <el-col :span="2">
          <div class="dashboard-item">
            <h3>{{ uniqueCarData }}</h3>
            <p>不唯一数据量</p>
          </div>
        </el-col>
        <el-col :span="8"></el-col>
      </el-row>
    </el-card>
    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
      <el-form-item label="卡口编号" prop="bayonetNumber">
@@ -165,7 +137,7 @@
    return {
      totalKiosks: 1157,
      uniqueKiosks: 580,
      totalCarData: 77422,
      totalCarData: 1477422,
      uniqueCarData: 431163,
      // 遮罩层
      loading: true,
@@ -327,18 +299,15 @@
  width: 20%;
  height: 80px;
  margin-left: 5%;
  background-color: #5599F7;
  font-size: 50px;
  color: #FFF;
  width: 85px;
}
.el-icon-refresh-left {
  font-size: 50px;
  color: #FFFFFF;
}
.dashboard {
  display: flex;
  gap: 10%;
  align-items: center;
  margin-left: -50%;
}
.dashboard-item {
src/views/system/work-order/index.vue
@@ -107,15 +107,16 @@
            type="text"
            @click="handleYwCondition(scope.row)"
          >运维情况</el-button>
          <el-button
            size="mini"
            type="text"
            @click="handleYwResult(scope.row)"
          >运维结果</el-button>
<!--          <el-button-->
<!--            size="mini"-->
<!--            type="text"-->
<!--            @click="handleYwResult(scope.row)"-->
<!--          >运维结果</el-button>-->
          <el-button
            size="mini"
            type="text"
            @click="handleCheckResult(scope.row)"
            v-hasPermi="['work:order:result']"
          >检测结果</el-button>
          <el-button
            size="mini"
@@ -281,7 +282,7 @@
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitYwResult">确 定</el-button>
        <el-button @click="cancelYwResult">取 消</el-button>
        <el-button @click="cancelCheckResult">取 消</el-button>
      </div>
    </el-dialog>