Merge remote-tracking branch 'origin/master'
| | |
| | | import VScaleScreen from 'v-scale-screen' |
| | | import dataV from '@jiaminghi/data-view' |
| | | |
| | | import gsap from 'gsap'; |
| | | import { formatNumber } from './utils/format'; |
| | | |
| | | |
| | | |
| | | // 全局方法挂载 |
| | |
| | | |
| | | Vue.config.productionTip = true |
| | | |
| | | |
| | | // 全局指令 |
| | | Vue.directive('roll', { |
| | | inserted: (el, binding) => { |
| | | let target = { |
| | | count: 0 |
| | | }; |
| | | let finalNumber = el.innerText; |
| | | gsap.to(target, { |
| | | count: finalNumber, |
| | | duration: 1, |
| | | ease: "power2.out", |
| | | onUpdate: () => { |
| | | el.innerText = formatNumber(target.count.toFixed(0)); |
| | | } |
| | | }) |
| | | |
| | | }, |
| | | update: (el, binding) => { |
| | | let target = { |
| | | count: el.innerText |
| | | }; |
| | | let finalNumber = el.getAttribute('value'); |
| | | gsap.to(target, { |
| | | count: finalNumber, |
| | | duration: 1, |
| | | ease: "power2.out", |
| | | onUpdate: () => { |
| | | el.innerText = formatNumber(target.count.toFixed(0)); |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | |
| | | |
| | | new Vue({ |
| | | el: '#app', |
| | | router, |
| | |
| | | |
| | | NProgress.configure({ showSpinner: false }) |
| | | |
| | | const whiteList = ['/login', '/register', '/screen'] |
| | | const whiteList = ['/login', '/register'] |
| | | |
| | | router.beforeEach((to, from, next) => { |
| | | NProgress.start() |
| | |
| | | hidden: true |
| | | }, |
| | | { |
| | | path: '/car/vehicle-data-monitor', |
| | | 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: '/register', |
| | | component: () => import('@/views/register'), |
| | | hidden: true |
| | |
| | | }, |
| | | { |
| | | path: '/screen', |
| | | component: Layout, |
| | | hidden: true, |
| | | component: () => import('@/views/screen/index'), |
| | | name: 'Profile', |
| | | meta: { title: '大屏信息', icon: 'user' } |
| | | }, |
| | | { |
| | | path: '/user', |
New file |
| | |
| | | export const formatNumber = (value) => { |
| | | return new Intl.NumberFormat('en-US').format(value); |
| | | } |
| | |
| | | <template> |
| | | <div class="car-container"> |
| | | <wrapper-title :title="'车辆设备数据'"></wrapper-title> |
| | | <wrapper-title :title="'车辆设备数据'" :path="'/monitorServe/car'"></wrapper-title> |
| | | |
| | | <div class="car-content"> |
| | | <div class="data-plane"> |
| | |
| | | </div> |
| | | <div class="data-info"> |
| | | <div class="data-lable">设备总数</div> |
| | | <div class="data-num">{{ formatNumber(1123) }}</div> |
| | | <div class="data-num type1" v-roll>{{ 1123 }}</div> |
| | | </div> |
| | | </div> |
| | | </dv-border-box-13> |
| | |
| | | </div> |
| | | <div class="data-info"> |
| | | <div class="data-lable">设备正常数</div> |
| | | <div class="data-num">{{ formatNumber(200000) }}</div> |
| | | <div class="data-num type2" v-roll>{{ 2000 }}</div> |
| | | </div> |
| | | </div> |
| | | </dv-border-box-13> |
| | |
| | | </div> |
| | | <div class="data-info"> |
| | | <div class="data-lable">设备异常数</div> |
| | | <div class="data-num">{{ formatNumber(112313141111) }}</div> |
| | | <div class="data-num type3" v-roll>{{ 1000 }}</div> |
| | | </div> |
| | | </div> |
| | | </dv-border-box-13> |
| | |
| | | }, |
| | | |
| | | methods: { |
| | | formatNumber(value) { |
| | | return new Intl.NumberFormat('en-US').format(value); |
| | | } |
| | | }, |
| | | |
| | | mounted() { |
| | |
| | | font-size: 24px; |
| | | color: #fff; |
| | | } |
| | | |
| | | .type1 { |
| | | color: #287cfa; |
| | | } |
| | | .type2 { |
| | | color: #0cd81d; |
| | | } |
| | | .type3 { |
| | | color: #e20c0c |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | <template> |
| | | <div class="detection-container"> |
| | | <wrapper-title :title="'运行监控数据'"></wrapper-title> |
| | | <wrapper-title :title="'运行监控数据'" :path="'/dataManage'"></wrapper-title> |
| | | |
| | | <div class="detection-content"> |
| | | <div class="water-item"> |
| | |
| | | {id: 4,name: '点位在线率', value: 40}, |
| | | {id: 5,name: '录像可用率', value: 80}, |
| | | {id: 6,name: '重点点位录像可用率', value: 20}, |
| | | {id: 7,name: '一机一档合格率', value: 60}, |
| | | {id: 7,name: '信息采集准确率', value: 60}, |
| | | {id: 8,name: '卡门过车数据一致性', value: 40}, |
| | | |
| | | ] |
| | |
| | | <template> |
| | | <div class="examine-container"> |
| | | <wrapper-title :title="'考核数据'"></wrapper-title> |
| | | <wrapper-title :title="'考核数据'" :path="'/examine/check-rule'"></wrapper-title> |
| | | <div class="examine-content"> |
| | | <div class="examine-wrapper"> |
| | | <examine-chart class="wrapper-item"></examine-chart> |
| | |
| | | <template> |
| | | <div class="face-container"> |
| | | <wrapper-title :title="'人脸设备数据'"></wrapper-title> |
| | | <wrapper-title :title="'人脸设备数据'" :path="'/monitorServe/face'"></wrapper-title> |
| | | |
| | | <div class="face-content"> |
| | | <div class="data-plane"> |
| | |
| | | </div> |
| | | <div class="data-info"> |
| | | <div class="data-lable">设备总数</div> |
| | | <div class="data-num">{{ formatNumber(1123) }}</div> |
| | | <div class="data-num type1" v-roll>{{ 1123 }}</div> |
| | | </div> |
| | | </div> |
| | | </dv-border-box-13> |
| | |
| | | </div> |
| | | <div class="data-info"> |
| | | <div class="data-lable">设备正常数</div> |
| | | <div class="data-num">{{ formatNumber(200000) }}</div> |
| | | <div class="data-num type2" v-roll>{{ 2000 }}</div> |
| | | </div> |
| | | </div> |
| | | </dv-border-box-13> |
| | |
| | | </div> |
| | | <div class="data-info"> |
| | | <div class="data-lable">设备异常数</div> |
| | | <div class="data-num">{{ formatNumber(112313141111) }}</div> |
| | | <div class="data-num type3" v-roll>{{ 1000 }}</div> |
| | | </div> |
| | | </div> |
| | | </dv-border-box-13> |
| | |
| | | }, |
| | | |
| | | methods: { |
| | | |
| | | formatNumber(value) { |
| | | return new Intl.NumberFormat('en-US').format(value); |
| | | } |
| | | }, |
| | | |
| | | mounted() { |
| | |
| | | font-size: 24px; |
| | | color: #fff; |
| | | } |
| | | |
| | | .type1 { |
| | | color: #287cfa; |
| | | } |
| | | .type2 { |
| | | color: #0cd81d; |
| | | } |
| | | .type3 { |
| | | color: #e20c0c |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | <img src="@/assets/images/screen/header_bg.png" class="width-img" alt=""> |
| | | </div> |
| | | <div class="header-text"> |
| | | 自贡运维考核可视化大屏 |
| | | 自贡市运维考核可视化 |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <template> |
| | | <div class="video-container"> |
| | | <wrapper-title :title="'视频设备数据'"></wrapper-title> |
| | | <wrapper-title :title="'视频设备数据'" :path="'/monitorServe/video'"></wrapper-title> |
| | | |
| | | <div class="video-content"> |
| | | <div class="data-plane"> |
| | |
| | | </div> |
| | | <div class="data-info"> |
| | | <div class="data-lable">设备总数</div> |
| | | <div class="data-num">{{ formatNumber(1123) }}</div> |
| | | <div class="data-num type1" v-roll>{{ 1123 }}</div> |
| | | </div> |
| | | </div> |
| | | </dv-border-box-13> |
| | |
| | | </div> |
| | | <div class="data-info"> |
| | | <div class="data-lable">设备正常数</div> |
| | | <div class="data-num">{{ formatNumber(200000) }}</div> |
| | | <div class="data-num type2" v-roll>{{ 2000 }}</div> |
| | | </div> |
| | | </div> |
| | | </dv-border-box-13> |
| | |
| | | </div> |
| | | <div class="data-info"> |
| | | <div class="data-lable">设备异常数</div> |
| | | <div class="data-num">{{ formatNumber(112313141111) }}</div> |
| | | <div class="data-num type3" v-roll>{{ 1000 }}</div> |
| | | </div> |
| | | </div> |
| | | </dv-border-box-13> |
| | |
| | | }, |
| | | data() { |
| | | return { |
| | | dataList: { |
| | | state: { '01:00': 1000, '02:00': 2131, '03:00': 1233, '04:00': 2132, '05:00': 3211, '06:00': 213, '07:00': 123, '08:00': 566 }, |
| | | state2: { '01:00': 900, '02:00': 1131, '03:00': 1533, '04:00': 2132, '05:00': 3011, '06:00': 13, '07:00': 113, '08:00': 566 }, |
| | | }, |
| | | } |
| | | }, |
| | | |
| | | methods: { |
| | | |
| | | formatNumber(value) { |
| | | return new Intl.NumberFormat('en-US').format(value); |
| | | } |
| | | }, |
| | | |
| | | mounted() { |
| | |
| | | font-size: 24px; |
| | | color: #fff; |
| | | } |
| | | |
| | | .type1 { |
| | | color: #287cfa; |
| | | } |
| | | .type2 { |
| | | color: #0cd81d; |
| | | } |
| | | .type3 { |
| | | color: #e20c0c |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | <template> |
| | | <div class="wrapper-container"> |
| | | |
| | | <select-item></select-item> |
| | | <div class="return-button"> |
| | | <el-button type="primary" @click="returnPath">返回</el-button> |
| | | </div> |
| | | <div class="wrapper-content"> |
| | | <div class="left-container wrapper"> |
| | | <screen-face></screen-face> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import SelectItem from '../select-item/index'; |
| | | import ScreenFace from '../screen-face/index'; |
| | | import ScreenDetection from '../screen-detection/index'; |
| | | import ScreenExamine from '../screen-examine/index'; |
| | |
| | | export default { |
| | | name: 'ScreenWrapper', |
| | | components: { |
| | | SelectItem, |
| | | ScreenFace, |
| | | ScreenDetection, |
| | | ScreenExamine, |
| | |
| | | ScreenCar, |
| | | ScreenMap |
| | | }, |
| | | methods: { |
| | | returnPath() { |
| | | this.$router.go(-1); |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .return-button { |
| | | position: absolute; |
| | | right: 20px; |
| | | top: 40px; |
| | | } |
| | | .wrapper-container { |
| | | width: 100%; |
| | | height: 100%; |
| | |
| | | <template> |
| | | <div class="select-container"> |
| | | |
| | | <div class="type-select"> |
| | | <div class="select-label">数据源</div> |
| | | <el-select v-model="typeValue" popper-class="type-select" class="select-style" @change="setConfig"> |
| | | <el-option v-for="item in testData1" :key="item.name" :label="item.name" :value="item.value" /> |
| | | </el-select> |
| | | </div> |
| | | |
| | | <div class="date-select"> |
| | | <div class="select-label">日期</div> |
| | | <el-date-picker v-model="dateValue" type="daterange" range-separator="至" start-placeholder="开始日期" |
| | | end-placeholder="结束日期" value-format="yyyy-MM-dd" @change="setConfig" /> |
| | | </div> |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | |
| | | export default { |
| | | data() { |
| | | return { |
| | | typeValue: 1, |
| | | dateValue: new Date(), |
| | | testData1: [ |
| | | { |
| | | name: '省厅', |
| | | value: 1 |
| | | }, |
| | | { |
| | | name: '市厅', |
| | | value: 2 |
| | | }, |
| | | { |
| | | name: '公安部', |
| | | value: 3 |
| | | } |
| | | ] |
| | | } |
| | | }, |
| | | methods: { |
| | | setConfig() { |
| | | |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .select-container { |
| | | position: absolute; |
| | | top: 40px; |
| | | left: 20px; |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .select-label { |
| | | font-size: 20px; |
| | | margin-right: 10px; |
| | | color: #2375f0; |
| | | flex-shrink: 0; |
| | | } |
| | | |
| | | .type-select { |
| | | display: flex; |
| | | align-items: center; |
| | | margin-right: 20px; |
| | | width: 240px; |
| | | } |
| | | |
| | | .date-select { |
| | | display: flex; |
| | | align-items: center; |
| | | width: 320px; |
| | | } |
| | | } |
| | | ::v-deep .el-input__inner { |
| | | background: rgba(67, 102, 155, 0.4) !important; |
| | | color: #4481DD; |
| | | border-color: #4481DD !important; |
| | | } |
| | | |
| | | ::v-deep .date-select .el-range-input { |
| | | background-color: transparent !important; |
| | | color: #4481DD; |
| | | } |
| | | ::v-deep .date-select .el-date-editor .el-range-separator { |
| | | color: #4481DD !important; |
| | | } |
| | | |
| | | |
| | | </style> |
| | |
| | | <div class="title-container"> |
| | | <span class="title">{{ title }}</span> |
| | | |
| | | <div class="more-button"> |
| | | <div class="more-button" v-if="path" @click="toPath"> |
| | | <dv-border-box-12> |
| | | <div class="button-text"> |
| | | 详情 |
| | |
| | | }, |
| | | path: { |
| | | type: String, |
| | | default: '' |
| | | } |
| | | }, |
| | | methods: { |
| | | toPath () { |
| | | this.$router.push(this.path); |
| | | } |
| | | } |
| | | } |
| | |
| | | <template> |
| | | <div class="screen-container"> |
| | | |
| | | <screen-title></screen-title> |
| | | <v-scale-screen width="1920" height="1080" :autoScale="true" :delay="0" class="screen"> |
| | | <screen-wrapper></screen-wrapper> |
| | |
| | | background-repeat: no-repeat !important; |
| | | background-position: center center !important; |
| | | } |
| | | |
| | | </style> |
| | |
| | | <el-button style="float: right; padding: 3px 0" type="text" @click="handleDetail(item)">详情</el-button> |
| | | </div> |
| | | <div class="text item">考核<span class="time">{{ item.examineName }}</span></div> |
| | | <div class="text item">考核范围<span class="time">{{ item.examineRange }}</span></div> |
| | | <div class="text item">考核频率<span class="time">{{ item.frequency }}</span></div> |
| | | <div class="text item">考核频率<span class="time">{{ "季度考核" }}</span></div> |
| | | <div class="text item">考核分数<span class="time">{{ item.checkScore }}</span></div> |
| | | <div class="text item">考核时间 |
| | | <span class="time">{{ item.checkTime }}</span> |
| | |
| | | <el-descriptions-item> |
| | | <template slot="label"> |
| | | <i class="el-icon-medal"></i> |
| | | 系统分数 |
| | | 综合分数 |
| | | </template> |
| | | <el-tag type="danger" size="small">{{detail.checkScore}}</el-tag> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item> |
| | | <template slot="label"> |
| | | <i class="el-icon-medal"></i> |
| | | 人工分数 |
| | | </template> |
| | | <el-tag type="danger" size="small">{{detail.manualScore}}</el-tag> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item> |
| | | <template slot="label"> |
| | | <i class="el-icon-medal"></i> |
| | | 车辆点位在线率 |
| | | </template> |
| | | <el-tag type="danger" size="small">{{detail.carOnlineRate}}</el-tag> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item> |
| | | <template slot="label"> |
| | | <i class="el-icon-medal"></i> |
| | | 综合分数 |
| | | </template> |
| | | <el-tag type="danger" size="small">{{detail.systemScore}}</el-tag> |
| | | </el-descriptions-item> |
| | | </el-descriptions> |
| | | <el-table |
| | | :data="tableData" |
| | | show-summary |
| | | style="width: 100%"> |
| | | <el-table-column |
| | | prop="name" |
| | | label="规则名" |
| | | width="180"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="content" |
| | | label="指标" |
| | | width="180"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="score" |
| | | label="得分"> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-dialog> |
| | | |
| | | <!-- 添加或修改考核结果对话框 --> |
| | |
| | | return { |
| | | detailTitle: '', |
| | | detailOpen: false, |
| | | detail: { |
| | | detail:{ |
| | | |
| | | }, |
| | | tableData: [{ |
| | | name: '视频平均在线率', |
| | | content: '97%', |
| | | score: '-5' |
| | | }, { |
| | | name: '一机一档24小时未修复', |
| | | content: '5个', |
| | | score: '-0.5' |
| | | }, { |
| | | name: '存储故障', |
| | | content: '5小时', |
| | | score: '-0.5' |
| | | }, { |
| | | name: '时钟不同步24小时未修复', |
| | | content: '3个', |
| | | score: '-0.3' |
| | | }], |
| | | manualScoreOpen: false, |
| | | manualScoreForm: {}, |
| | | manualScoreTitle: '', |
| | |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="公司名" prop="unitName"> |
| | | <el-form-item label="考核对象" prop="unitName"> |
| | | <el-input |
| | | v-model="queryParams.status" |
| | | placeholder="请输入公司名" |
| | | placeholder="请输入考核对象" |
| | | clearable |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | |
| | | <el-table v-loading="loading" :data="checkTemplateList" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column label="模板名称" align="center" prop="templateName" /> |
| | | <el-table-column label="公司名" align="center" prop="unitName" /> |
| | | <el-table-column label="考核对象" align="center" prop="unitName" /> |
| | | <el-table-column label="调整系数" align="center" prop="adjustCoefficient" /> |
| | | <el-table-column label="调整系数计算方式" align="center" prop="adjustWay" /> |
| | | <el-table-column label="状态" align="center" prop="status" /> |
| | |
| | | <el-form-item label="模板名称" prop="templateName"> |
| | | <el-input v-model="form.templateName" placeholder="请输入模板名称" /> |
| | | </el-form-item> |
| | | <el-form-item label="公司名" prop="unitName"> |
| | | <el-form-item label="考核对象" prop="unitName"> |
| | | <el-select v-model="form.unitName" placeholder="请选择"> |
| | | <el-option |
| | | v-for="item in unitList" |
| | |
| | | <template> |
| | | <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="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> |
| | | <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> |
| | | </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"> |
| | | <el-col :span="6" v-for="(item, index) in carData" :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> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | faceData: [ |
| | | { name: '人脸识别时钟准确性', icon: 'el-icon-alarm-clock', description: '描述信息', routerUrl: 'vehicle-data-monitor' }, |
| | | { name: '人脸抓拍数据监测', icon: 'el-icon-user', description: '描述信息', routerUrl: '/face/faceClock' }, |
| | | { name: '人脸数据趋势分析', icon: 'el-icon-data-line', description: '描述信息', routerUrl: '/face/faceClock' }, |
| | | { name: '人脸抓拍设备活跃性', icon: 'el-icon-timer', description: '描述信息', routerUrl: '/face/faceClock' }, |
| | | { name: '人脸抓拍上传及时性', icon: 'el-icon-money', description: '描述信息', routerUrl: '/face/faceClock' }, |
| | | { name: '人脸抓拍大图可用性', icon: 'el-icon-data-analysis', description: '描述信息', routerUrl: '/face/faceClock' }, |
| | | ] |
| | | } |
| | | }, |
| | | methods: { |
| | | handleDetail(item) { |
| | | this.$router.push({ |
| | | name: item.routerUrl, |
| | | params: { |
| | | id: item.id |
| | | } |
| | | }) |
| | | } |
| | | 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' }, |
| | | ], |
| | | carData: [ |
| | | { name: '卡口过车数据一致性', icon: 'el-icon-truck', description: '描述信息', routerUrl: '/car/vehicle-data-monitor/index' } |
| | | ] |
| | | } |
| | | }, |
| | | methods: { |
| | | handleDetail(item) { |
| | | this.$router.push({ |
| | | path: item.routerUrl, |
| | | params: { |
| | | id: item.id |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .container { |
| | | margin-left: 100px; |
| | | margin-right: 100px; |
| | | margin-top: 10px; |
| | | margin-left: 100px; |
| | | margin-right: 100px; |
| | | margin-top: 10px; |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | <el-table v-loading="loading" :data="scoreList" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column label="考核名" align="center" prop="examineName" /> |
| | | <el-table-column label="单位名" align="center" prop="unitName" /> |
| | | <el-table-column label=考核对象" align="center" prop="unitName" /> |
| | | <el-table-column label="分值" align="center" prop="score" /> |
| | | <el-table-column label="积分类型" align="center" prop="scoreCategory"> |
| | | <el-table-column label="考核规则" align="center" prop="scoreCategory"> |
| | | <template slot-scope="scope"> |
| | | <div v-if="scope.row.scoreCategory === 1">视频在线率</div> |
| | | <div v-else-if="scope.row.scoreCategory === 2">存储故障</div> |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <div class="top"> |
| | | <!-- <div class="top"> |
| | | <el-row type="flex" justify="space-between" style="width: 60%;"> |
| | | <el-col :span="6"> |
| | | <el-card class="card"> |
| | |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | </div> |
| | | </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;"> |
| | | <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"> |
| | | <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-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"> |
| | |
| | | }; |
| | | </script> |
| | | <style scoped> |
| | | .top { |
| | | height: 150px; |
| | | .box-card { |
| | | background-color: #F5F9FE; |
| | | width: 100%; |
| | | margin-bottom: 20px; |
| | | background-color: #F2F9FF; |
| | | border: 1px solid #77befd; |
| | | height: 120px |
| | | } |
| | | |
| | | .container { |
| | | max-width: 1000px; |
| | | margin: auto; |
| | | .icon-container { |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | border-radius: 20px; |
| | | width: 20%; |
| | | height: 80px; |
| | | margin-left: 5%; |
| | | } |
| | | |
| | | .number { |
| | | font-size: 36px; |
| | | font-weight: bold; |
| | | color: #00A5FE; |
| | | .el-icon-refresh-left { |
| | | font-size: 50px; |
| | | color: #FFFFFF; |
| | | } |
| | | |
| | | .numberTwo { |
| | | font-size: 36px; |
| | | font-weight: bold; |
| | | color: #505051; |
| | | .dashboard { |
| | | display: flex; |
| | | gap: 10%; |
| | | align-items: center; |
| | | margin-left: -50%; |
| | | } |
| | | |
| | | .card { |
| | | width: 100px; |
| | | height: 100px; |
| | | .dashboard-item { |
| | | text-align: center; |
| | | background-color: #00A5FE; |
| | | color: aliceblue; |
| | | border-radius: 10%; |
| | | margin: 25px; |
| | | } |
| | | |
| | | .mod { |
| | | margin-top: 40px; |
| | | } |
| | | </style> |
| | |
| | | proxy: { |
| | | // detail: https://cli.vuejs.org/config/#devserver-proxy |
| | | [process.env.VUE_APP_BASE_API]: { |
| | | target: `http://localhost:8080`, |
| | | target: `http://192.168.3.88:8080`, |
| | | changeOrigin: true, |
| | | pathRewrite: { |
| | | ['^' + process.env.VUE_APP_BASE_API]: '' |