Merge remote-tracking branch 'origin/master'
| | |
| | | }) |
| | | } |
| | | |
| | | // 发布考核结果 |
| | | export function publishCheckResult(id) { |
| | | return request({ |
| | | url: '/check-result/publish/' + id, |
| | | method: 'put' |
| | | }) |
| | | } |
| | | |
| | | // 提交人工分数 |
| | | export function manualScore(data) { |
| | | return request({ |
New file |
| | |
| | | import request from '@/utils/request' |
| | | |
| | | // 查询卡口过车数据一致性列表 |
| | | export function listPlatform(query) { |
| | | return request({ |
| | | url: '/platform/platform/list', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | |
| | | // 查询卡口过车数据一致性详细 |
| | | export function getPlatform(id) { |
| | | return request({ |
| | | url: '/platform/platform/' + id, |
| | | method: 'get' |
| | | }) |
| | | } |
| | | |
| | | // 新增卡口过车数据一致性 |
| | | export function addPlatform(data) { |
| | | return request({ |
| | | url: '/platform/platform', |
| | | method: 'post', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // 修改卡口过车数据一致性 |
| | | export function updatePlatform(data) { |
| | | return request({ |
| | | url: '/platform/platform', |
| | | method: 'put', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // 删除卡口过车数据一致性 |
| | | export function delPlatform(id) { |
| | | return request({ |
| | | url: '/platform/platform/' + id, |
| | | method: 'delete' |
| | | }) |
| | | } |
New file |
| | |
| | | import request from '@/utils/request' |
| | | |
| | | // 查询设备资产列表 |
| | | export function listMonitor(query) { |
| | | return request({ |
| | | url: '/system/video/list', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | |
| | | // 查询设备资产详细 |
| | | export function getMonitor(id) { |
| | | return request({ |
| | | url: '/system/video/' + id, |
| | | method: 'get' |
| | | }) |
| | | } |
| | | |
| | | // 新增设备资产 |
| | | export function addMonitor(data) { |
| | | return request({ |
| | | url: '/system/videor', |
| | | method: 'post', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // 修改设备资产 |
| | | export function updateMonitor(data) { |
| | | return request({ |
| | | url: '/system/video', |
| | | method: 'put', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // 删除设备资产 |
| | | export function delMonitor(id) { |
| | | return request({ |
| | | url: '/system/video/' + id, |
| | | method: 'delete' |
| | | }) |
| | | } |
| | |
| | | <el-card class="data-card" :body-style="{ height: '100%' }"> |
| | | <div class="card-content"> |
| | | <div class="title-container"> |
| | | <h1>运维单位违约责任排名</h1> |
| | | <h1>运维单位超期责任数排名</h1> |
| | | <div class="more-button"> |
| | | <span>更多</span> |
| | | <i class="el-icon-arrow-right"></i> |
| | |
| | | <el-table :data="tableData" style="width: 100%" height="350"> |
| | | <el-table-column prop="name" label="单位" align="center"> |
| | | </el-table-column> |
| | | <el-table-column prop="num" label="违约数" align="center"> |
| | | <el-table-column prop="num" label="超期数" align="center"> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | |
| | | data1: '工单数', |
| | | data2: '恢复数', |
| | | data3: '待恢复数', |
| | | data4: '产生违约事项数', |
| | | data5: '产生违约责任数', |
| | | data4: '超期待处理数', |
| | | data5: '超期责任数', |
| | | } |
| | | export default { |
| | | props: { |
| | |
| | | data1: '工单数', |
| | | data2: '恢复数', |
| | | data3: '待恢复数', |
| | | data4: '产生违约事项数', |
| | | data5: '产生违约责任数', |
| | | data4: '超期待处理数', |
| | | data5: '超期责任数', |
| | | } |
| | | |
| | | |
| | |
| | | { id: 1, type: '工单数', num: 523, }, |
| | | { id: 2, type: '恢复数', num: 50, }, |
| | | { id: 3, type: '待恢复数', num: 523, }, |
| | | { id: 4, type: '产生违约事项数', num: 123, }, |
| | | { id: 5, type: '产生违约责任书', num: 512323, }, |
| | | { id: 4, type: '超期未处理数', num: 123, }, |
| | | { id: 5, type: '超期责任数', num: 512323, }, |
| | | ], |
| | | iconList: [ |
| | | { icon: 'el-icon-tickets', color: '#7868d9' }, |
| | |
| | | <template> |
| | | <div class="car-container"> |
| | | <wrapper-title :title="'人脸数据趋势'"></wrapper-title> |
| | | <wrapper-title :title="'车辆设备数据'"></wrapper-title> |
| | | |
| | | <div class="car-content"> |
| | | <div class="data-plane"> |
| | | <dv-border-box-13 class="plane"> |
| | | <div class="data-item"> |
| | | <div class="data-icon"> |
| | | <img src="@/assets/images/screen/icon/icon1.png" alt="" class="width-img"> |
| | | </div> |
| | | <div class="data-info"> |
| | | <div class="data-lable">设备总数</div> |
| | | <div class="data-num">{{ formatNumber(1123) }}</div> |
| | | </div> |
| | | </div> |
| | | </dv-border-box-13> |
| | | |
| | | <dv-border-box-13 class="plane"> |
| | | <div class="data-item"> |
| | | <div class="data-icon"> |
| | | <img src="@/assets/images/screen/icon/icon2.png" alt="" class="width-img"> |
| | | </div> |
| | | <div class="data-info"> |
| | | <div class="data-lable">设备正常数</div> |
| | | <div class="data-num">{{ formatNumber(200000) }}</div> |
| | | </div> |
| | | </div> |
| | | </dv-border-box-13> |
| | | |
| | | <dv-border-box-13 class="plane"> |
| | | <div class="data-item"> |
| | | <div class="data-icon"> |
| | | <img src="@/assets/images/screen/icon/icon2.png" alt="" class="width-img"> |
| | | </div> |
| | | <div class="data-info"> |
| | | <div class="data-lable">设备异常数</div> |
| | | <div class="data-num">{{ formatNumber(112313141111) }}</div> |
| | | </div> |
| | | </div> |
| | | </dv-border-box-13> |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | |
| | | </template> |
| | | |
| | | <script> |
| | | import WrapperTitle from '../wrapper-title/index'; |
| | | |
| | | export default { |
| | | name: 'ScreenCar', |
| | | components: { |
| | | WrapperTitle |
| | | }, |
| | | 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() { |
| | | }, |
| | | beforeDestroy() { |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped></style> |
| | | <style lang="scss" scoped> |
| | | .car-container { |
| | | width: 100%; |
| | | height: fit-content; |
| | | display: flex; |
| | | flex-direction: column; |
| | | } |
| | | |
| | | .car-content { |
| | | flex: 1; |
| | | background: rgba(67, 102, 155, 0.3); |
| | | border: 1px solid rgba(47, 91, 157, 0.8); |
| | | |
| | | .plane { |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .data-plane { |
| | | .data-item { |
| | | width: 100%; |
| | | padding: 10px 20px; |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .data-icon { |
| | | width: 40px; |
| | | margin: 0 20px; |
| | | } |
| | | |
| | | .data-info { |
| | | flex: 1; |
| | | color: #5b83bd; |
| | | font-size: 16px; |
| | | |
| | | .data-num { |
| | | margin-top: 5px; |
| | | font-size: 24px; |
| | | color: #fff; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | #faceChart { |
| | | width: 100%; |
| | | height: 300px; |
| | | } |
| | | } |
| | | |
| | | .width-img { |
| | | width: 100%; |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <div class="chart-container"> |
| | | <div class="rank-chart" ref="rankChart"></div> |
| | | <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> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import * as echarts from 'echarts'; |
| | | import ExamineHola from './examine-hola.vue'; |
| | | let barChart = null; |
| | | export default { |
| | | name: 'ExamineChart', |
| | | components: { |
| | | ExamineHola |
| | | }, |
| | | 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}, |
| | | |
| | | ] |
| | | } |
| | | }, |
| | | |
| | | methods: { |
| | | initChart() { |
| | | const options = { |
| | | xAxis: { |
| | | type: 'category', |
| | | data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] |
| | | }, |
| | | yAxis: { |
| | | type: 'value' |
| | | }, |
| | | series: [ |
| | | { |
| | | data: [120, 200, 150, 80, 70, 110, 130], |
| | | type: 'bar' |
| | | } |
| | | ] |
| | | } |
| | | barChart.setOption(options,true); |
| | | } |
| | | |
| | | |
| | | }, |
| | | mounted() { |
| | | barChart = echarts.init(this.$refs.rankChart); |
| | | |
| | | this.initChart(); |
| | | }, |
| | | beforeDestroy() { |
| | | if (lineChart) { |
| | | barChart.dispose(); |
| | | } |
| | | }, |
| | | |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .chart-container { |
| | | width: 100%; |
| | | height: 400px; |
| | | height: 100%; |
| | | |
| | | .rank-chart { |
| | | width: 100%; |
| | | height: 100%; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | flex-wrap: wrap; |
| | | align-content: space-between; |
| | | padding: 20px 0; |
| | | box-sizing: border-box; |
| | | |
| | | .hola-item { |
| | | flex-shrink: 0; |
| | | width: 240px; |
| | | height: 200px; |
| | | color: #008000 |
| | | } |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <!-- 进度条类型组件 --> |
| | | <div class="progressChart"> |
| | | <div class="chart" id="progressChart" ref="chartRef"></div> |
| | | <label class="bottom le-0-font">{{ bottomTitle }}</label> |
| | | </div> |
| | | </template> |
| | | <script> |
| | | import * as echarts from 'echarts'; |
| | | export default { |
| | | data() { |
| | | return { |
| | | series: [ |
| | | { |
| | | type: 'gauge', // 仪表盘类型 |
| | | name: '系列名称', // 用于tooltip的显示 |
| | | startAngle: 90, // 仪表盘开始角度(设置背景圆的角度) |
| | | endAngle: -270, // 仪表盘结束角度 |
| | | center: ['50%', '50%'], // 中心点(圆心坐标) |
| | | radius: '100%', // 圆大小(仪表盘半径) |
| | | clockwise: true, // 仪表盘刻度是否是顺时针增长 |
| | | // 仪表盘轴线相关配置 |
| | | axisLine: { |
| | | show: true, |
| | | roundCap: false, // 两端显示成圆形(背景环) |
| | | clip: false, // 是否裁剪超出部分 |
| | | // 设置背景圆环样式 |
| | | lineStyle: { |
| | | width: 10, // 圆环宽度 |
| | | color: [[1, '#002865']] // 圆环背景色 |
| | | } |
| | | }, |
| | | // 仪表盘指针 |
| | | pointer: { |
| | | show: false |
| | | }, |
| | | // 进度设置 |
| | | progress: { |
| | | show: true, |
| | | overlap: false, // 多组数据时进度条是否重叠 |
| | | roundCap: true, // 是否在两端显示成圆形 |
| | | clip: false, // 是否裁掉超出部分 |
| | | // 进度条样式 |
| | | itemStyle: { |
| | | borderWidth: 0, |
| | | shadowColor: '', |
| | | color: { |
| | | type: 'linear', |
| | | x: 0, |
| | | y: 0, |
| | | x2: 0, |
| | | y2: 1, |
| | | colorStops: [ |
| | | { |
| | | offset: 0, |
| | | color: this.startColor // 0% 处的颜色 '#02C77E' |
| | | }, |
| | | { |
| | | offset: 1, |
| | | color: this.endColor // 100% 处的颜色 '#017770' |
| | | } |
| | | ], |
| | | global: false // 缺省为 false |
| | | } |
| | | } |
| | | }, |
| | | // 仪表盘分割线 |
| | | splitLine: { |
| | | show: false |
| | | }, |
| | | // 刻度样式 |
| | | axisTick: { |
| | | show: false |
| | | }, |
| | | // 刻度标签 |
| | | axisLabel: { |
| | | show: false |
| | | }, |
| | | title: { |
| | | show: false, |
| | | fontSize: 24 |
| | | }, |
| | | detail: { |
| | | // width: 50, |
| | | // height: 14, |
| | | fontSize: 14, |
| | | color: 'auto' |
| | | }, |
| | | data: [ |
| | | { |
| | | value: this.centerValue, |
| | | name: '345', |
| | | title: {}, |
| | | detail: { |
| | | // 中心title设置 |
| | | offsetCenter: ['0%', '0%'], |
| | | color: '#01F8FF', |
| | | formatter: '{value}%' |
| | | // borderColor: '#01F8FF', |
| | | // borderRadius: 20, |
| | | // borderWidth: 1, |
| | | } |
| | | } |
| | | ], |
| | | } |
| | | ] |
| | | } |
| | | }, |
| | | setup() { }, |
| | | props: { |
| | | startColor: { |
| | | type: String, |
| | | default: '' |
| | | }, |
| | | endColor: { |
| | | type: String, |
| | | default: '' |
| | | }, |
| | | centerValue: { |
| | | type: [Number, String], |
| | | default: 0 |
| | | }, |
| | | bottomTitle: { |
| | | type: String, |
| | | default: '' |
| | | } |
| | | }, |
| | | methods: {}, |
| | | created() { }, |
| | | mounted() { |
| | | let myChart = echarts.init(this.$refs['chartRef']) // 使用Id无法实现 |
| | | myChart.setOption({ |
| | | series: this.series |
| | | }) |
| | | } |
| | | } |
| | | </script> |
| | | <style lang="scss" scoped> |
| | | .progressChart { |
| | | width: 100%; |
| | | height: 100%; |
| | | |
| | | .chart { |
| | | width: 100%; |
| | | height: 75%; |
| | | } |
| | | |
| | | .bottom { |
| | | display: inline-block; |
| | | width: 100%; |
| | | color: #01f8ff; |
| | | text-align: center; |
| | | font-size: 16px; |
| | | margin-top: 10px; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <div class="examine-container"> |
| | | <wrapper-title :title="'考核成绩数据'"></wrapper-title> |
| | | <wrapper-title :title="'考核数据'"></wrapper-title> |
| | | <div class="examine-content"> |
| | | <div class="examine-wrapper"> |
| | | <examine-chart class="wrapper-item"></examine-chart> |
| | | <examine-table class="wrapper-item"></examine-table> |
| | | <!-- <examine-table class="wrapper-item"></examine-table> --> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | position: relative; |
| | | |
| | | .examine-wrapper { |
| | | position: absolute; |
| | | width: 100%; |
| | | height: 100%; |
| | | display: flex; |
| | |
| | | <template> |
| | | <div class="face-container"> |
| | | <wrapper-title :title="'人脸数据趋势'"></wrapper-title> |
| | | <wrapper-title :title="'人脸设备数据'"></wrapper-title> |
| | | |
| | | <div class="face-content"> |
| | | <div class="data-plane"> |
| | |
| | | <img src="@/assets/images/screen/icon/icon1.png" alt="" class="width-img"> |
| | | </div> |
| | | <div class="data-info"> |
| | | <div class="data-lable">昨日人脸采集设备总数</div> |
| | | <div class="data-lable">设备总数</div> |
| | | <div class="data-num">{{formatNumber(1123)}}</div> |
| | | </div> |
| | | </div> |
| | |
| | | <img src="@/assets/images/screen/icon/icon2.png" alt="" class="width-img"> |
| | | </div> |
| | | <div class="data-info"> |
| | | <div class="data-lable">昨日抓拍数据量</div> |
| | | <div class="data-lable">设备正常数</div> |
| | | <div class="data-num">{{ formatNumber(200000) }}</div> |
| | | </div> |
| | | </div> |
| | |
| | | <img src="@/assets/images/screen/icon/icon2.png" alt="" class="width-img"> |
| | | </div> |
| | | <div class="data-info"> |
| | | <div class="data-lable">历史抓拍数据量</div> |
| | | <div class="data-lable">设备异常数</div> |
| | | <div class="data-num">{{ formatNumber(112313141111) }}</div> |
| | | </div> |
| | | </div> |
| | | </dv-border-box-13> |
| | | </div> |
| | | <div id="faceChart" ref="faceChart"></div> |
| | | </div> |
| | | </div> |
| | | |
| | |
| | | |
| | | <script> |
| | | import WrapperTitle from '../wrapper-title/index'; |
| | | import * as echarts from 'echarts'; |
| | | let lineChart = null; |
| | | export default { |
| | | name: 'ScreenFace', |
| | | components: { |
| | |
| | | }, |
| | | |
| | | methods: { |
| | | initChart() { |
| | | const option = { |
| | | legend: { |
| | | right: 'right', |
| | | top: 'top', |
| | | orient: "vertical", |
| | | icon: 'rect', |
| | | data: [ |
| | | { |
| | | name: '正常数', |
| | | itemStyle: { |
| | | color: 'rgba(62, 144, 247, 1)' |
| | | } |
| | | }, |
| | | { |
| | | name: '异常数', |
| | | itemStyle: { |
| | | color: 'rgba(85, 192, 191, 1)' |
| | | } |
| | | }, |
| | | ], |
| | | }, |
| | | grid: { |
| | | left: '2%', |
| | | right: '5%', |
| | | bottom: '5%', |
| | | top: '8%', |
| | | containLabel: true |
| | | }, |
| | | tooltip: {}, |
| | | xAxis: { |
| | | type: 'category', |
| | | data: Object.keys(this.dataList.state), |
| | | }, |
| | | yAxis: {}, |
| | | series: [ |
| | | { |
| | | name: '今日', |
| | | data: Object.entries(this.dataList.state).map(([key, value]) => value), |
| | | type: 'line', |
| | | itemStyle: { |
| | | color: 'rgba(62, 144, 247, 1)' |
| | | } |
| | | }, |
| | | { |
| | | name: '昨日', |
| | | data: Object.entries(this.dataList.state2).map(([key, value]) => value), |
| | | type: 'line', |
| | | itemStyle: { |
| | | color: 'rgba(85, 192, 191, 1)' |
| | | } |
| | | } |
| | | ] |
| | | }; |
| | | lineChart.setOption(option, true); |
| | | }, |
| | | |
| | | formatNumber(value) { |
| | | return new Intl.NumberFormat('en-US').format(value); |
| | |
| | | }, |
| | | |
| | | mounted() { |
| | | lineChart = echarts.init(this.$refs.faceChart); |
| | | this.initChart(); |
| | | }, |
| | | beforeDestroy() { |
| | | if (lineChart) { |
| | | lineChart.dispose(); |
| | | } |
| | | |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .face-container { |
| | | width: 100%; |
| | | height: fit-content; |
| | | display: flex; |
| | | flex-direction: column; |
| | | } |
| | | |
| | | .face-content { |
| | | flex: 1; |
| | | background: rgba(67, 102, 155, 0.3); |
| | | border: 1px solid rgba(47, 91, 157, 0.8); |
| | | |
| | |
| | | .data-plane { |
| | | .data-item { |
| | | width: 100%; |
| | | padding: 20px 20px; |
| | | padding: 10px 20px; |
| | | display: flex; |
| | | align-items: center; |
| | | |
New file |
| | |
| | | <template> |
| | | <div class="map-container"> |
| | | <wrapper-title :title="'区域地图'"></wrapper-title> |
| | | <div class="map-content"> |
| | | <div ref="map" class="map-style"></div> |
| | | </div> |
| | | </div> |
| | | |
| | | </template> |
| | | |
| | | <script> |
| | | import * as echarts from 'echarts'; |
| | | import 'echarts-gl'; |
| | | import mapData from '@/assets/map/zigong.json'; |
| | | 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", |
| | | bottom: 0, |
| | | left: 0, |
| | | top: 0, |
| | | right: 0, |
| | | itemStyle: { |
| | | color: "#4189f2", // 背景 |
| | | opacity: 1, //透明度 |
| | | borderWidth: 1, // 边框宽度 |
| | | borderColor: "#fff", // 边框颜色 |
| | | fontSize: 18, // |
| | | }, |
| | | |
| | | // 标签 |
| | | label: { |
| | | show: true, |
| | | color: "#fff", //地图初始化区域字体颜色 |
| | | fontSize: 18, |
| | | }, |
| | | // 控制器 |
| | | viewControl: { |
| | | beta: -30, |
| | | alpha: 90, |
| | | distance: 100, |
| | | maxBeta: 180, |
| | | panSensitivity: 0 |
| | | }, |
| | | // 鼠标移入时样式 |
| | | emphasis: { |
| | | itemStyle: { |
| | | color: "#F63545" |
| | | } |
| | | }, |
| | | |
| | | // 数据 |
| | | data: mapData.features.map((item) => { |
| | | return { |
| | | name: item.properties.name, |
| | | itemStyle: { |
| | | color: "#4189f2" |
| | | } |
| | | } |
| | | }), |
| | | } |
| | | ] |
| | | |
| | | }; |
| | | export default { |
| | | name: 'DataMap', |
| | | data() { |
| | | return { |
| | | |
| | | } |
| | | }, |
| | | components: { |
| | | WrapperTitle |
| | | }, |
| | | methods: { |
| | | filterData(name) { |
| | | this.initConfig(); |
| | | let temp = mapConfig.series[0].data.find(item => item.name === name); |
| | | temp.itemStyle.color = '#F63545'; |
| | | mapChart.setOption(mapConfig, true); |
| | | this.$emit('filterData', name); |
| | | }, |
| | | initConfig() { |
| | | mapConfig.series[0].data.forEach(item => { |
| | | item.itemStyle.color = '#4189f2'; |
| | | }); |
| | | }, |
| | | // 监听变化 |
| | | observe() { |
| | | if (!observer) { |
| | | observer = new ResizeObserver(entries => { |
| | | this.handleResize(); |
| | | }) |
| | | } |
| | | observer.observe(this.$refs.map); |
| | | }, |
| | | // 窗口变换 |
| | | handleResize() { |
| | | if (mapChart) { |
| | | mapChart.resize(); |
| | | } |
| | | } |
| | | }, |
| | | mounted() { |
| | | mapChart = echarts.init(this.$refs.map); |
| | | mapChart.setOption(mapConfig, true); |
| | | mapChart.on('click', (params) => { |
| | | if (tempName === params.name) { |
| | | tempName = ''; |
| | | this.initConfig(); |
| | | mapChart.setOption(mapConfig, true); |
| | | this.$emit('filterData', ''); |
| | | } else { |
| | | tempName = params.name; |
| | | this.filterData(params.name); |
| | | } |
| | | }); |
| | | this.observe(); |
| | | }, |
| | | beforeDestroy() { |
| | | if (observer) { |
| | | mapChart.dispose(); |
| | | observer.unobserve(this.$refs.map); |
| | | } |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .map-container { |
| | | width: 100%; |
| | | flex: 1; |
| | | margin-bottom: 20px; |
| | | display: flex; |
| | | flex-direction: column; |
| | | |
| | | .map-content { |
| | | flex: 1; |
| | | background: rgba(67, 102, 155, 0.3); |
| | | border: 1px solid rgba(47, 91, 157, 0.8); |
| | | } |
| | | .map-style { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <div class="video-container"> |
| | | <wrapper-title :title="'视频设备数据'"></wrapper-title> |
| | | |
| | | <div class="video-content"> |
| | | <div class="data-plane"> |
| | | <dv-border-box-13 class="plane"> |
| | | <div class="data-item"> |
| | | <div class="data-icon"> |
| | | <img src="@/assets/images/screen/icon/icon1.png" alt="" class="width-img"> |
| | | </div> |
| | | <div class="data-info"> |
| | | <div class="data-lable">设备总数</div> |
| | | <div class="data-num">{{ formatNumber(1123) }}</div> |
| | | </div> |
| | | </div> |
| | | </dv-border-box-13> |
| | | |
| | | <dv-border-box-13 class="plane"> |
| | | <div class="data-item"> |
| | | <div class="data-icon"> |
| | | <img src="@/assets/images/screen/icon/icon2.png" alt="" class="width-img"> |
| | | </div> |
| | | <div class="data-info"> |
| | | <div class="data-lable">设备正常数</div> |
| | | <div class="data-num">{{ formatNumber(200000) }}</div> |
| | | </div> |
| | | </div> |
| | | </dv-border-box-13> |
| | | |
| | | <dv-border-box-13 class="plane"> |
| | | <div class="data-item"> |
| | | <div class="data-icon"> |
| | | <img src="@/assets/images/screen/icon/icon2.png" alt="" class="width-img"> |
| | | </div> |
| | | <div class="data-info"> |
| | | <div class="data-lable">设备异常数</div> |
| | | <div class="data-num">{{ formatNumber(112313141111) }}</div> |
| | | </div> |
| | | </div> |
| | | </dv-border-box-13> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | </template> |
| | | |
| | | <script> |
| | | import WrapperTitle from '../wrapper-title/index'; |
| | | export default { |
| | | name: 'ScreenFace', |
| | | components: { |
| | | WrapperTitle |
| | | }, |
| | | 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() { |
| | | |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .video-container { |
| | | width: 100%; |
| | | height: fit-content; |
| | | display: flex; |
| | | flex-direction: column; |
| | | } |
| | | |
| | | .video-content { |
| | | flex: 1; |
| | | background: rgba(67, 102, 155, 0.3); |
| | | border: 1px solid rgba(47, 91, 157, 0.8); |
| | | |
| | | .plane { |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .data-plane { |
| | | .data-item { |
| | | width: 100%; |
| | | padding: 10px 20px; |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .data-icon { |
| | | width: 40px; |
| | | margin: 0 20px; |
| | | } |
| | | |
| | | .data-info { |
| | | flex: 1; |
| | | color: #5b83bd; |
| | | font-size: 16px; |
| | | |
| | | .data-num { |
| | | margin-top: 5px; |
| | | font-size: 24px; |
| | | color: #fff; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | #faceChart { |
| | | width: 100%; |
| | | height: 300px; |
| | | } |
| | | } |
| | | |
| | | .width-img { |
| | | width: 100%; |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <div class="wrapper-container"> |
| | | |
| | | <div class="wrapper-content"> |
| | | <div class="left-container wrapper"> |
| | | <screen-face></screen-face> |
| | | <screen-car></screen-car> |
| | | <screen-video></screen-video> |
| | | </div> |
| | | <div class="center-container wrapper"> |
| | | <div class="center-container center-wrapper"> |
| | | <screen-map></screen-map> |
| | | <screen-detection></screen-detection> |
| | | |
| | | </div> |
| | | <div class="right-container wrapper"> |
| | | <screen-examine></screen-examine> |
| | |
| | | import ScreenFace from '../screen-face/index'; |
| | | import ScreenDetection from '../screen-detection/index'; |
| | | import ScreenExamine from '../screen-examine/index'; |
| | | import ScreenVideo from '../screen-video/index'; |
| | | import ScreenCar from '../screen-car/index'; |
| | | import ScreenMap from '../screen-map/index'; |
| | | export default { |
| | | name: 'ScreenWrapper', |
| | | components: { |
| | | ScreenFace, |
| | | ScreenDetection, |
| | | ScreenExamine, |
| | | ScreenVideo, |
| | | ScreenCar, |
| | | ScreenMap |
| | | }, |
| | | } |
| | | </script> |
| | |
| | | top: 0; |
| | | left: 0; |
| | | z-index: 1; |
| | | |
| | | .wrapper-content { |
| | | width: 100%; |
| | | height: calc(100% - 100px); |
| | | margin-top: 100px; |
| | | border: 1px solid red; |
| | | position: relative; |
| | | box-sizing: border-box; |
| | | padding: 20px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | } |
| | | } |
| | | |
| | | .wrapper { |
| | | width: 33.3%; |
| | | width: 27%; |
| | | height: 100%; |
| | | box-sizing: border-box; |
| | | padding: 0 10px; |
| | | border: 1px solid red; |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: space-between; |
| | | |
| | | &:first-of-type { |
| | | padding-left: 0; |
| | | } |
| | | |
| | | &:last-of-type { |
| | | padding-right: 0; |
| | | } |
| | | } |
| | | .center-wrapper { |
| | | width: 46%; |
| | | height: 100%; |
| | | box-sizing: border-box; |
| | | padding: 0 10px; |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: space-between; |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <div class="title-container"> |
| | | <span class="title">{{ title }}</span> |
| | | |
| | | <div class="more-button"> |
| | | <dv-border-box-12> |
| | | <div class="button-text"> |
| | | 详情 |
| | | </div> |
| | | </dv-border-box-12> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | title: { |
| | | type: String, |
| | | required: true |
| | | }, |
| | | path: { |
| | | type: String, |
| | | } |
| | | } |
| | | } |
| | |
| | | width: 100%; |
| | | position: relative; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | margin-bottom: 10px; |
| | | |
| | |
| | | font-size: 20px; |
| | | font-style: italic; |
| | | } |
| | | |
| | | .more-button { |
| | | width: 100px; |
| | | height: 40px; |
| | | cursor: pointer; |
| | | |
| | | .button-text { |
| | | width: 100%; |
| | | height: 100%; |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | color: #ffffff81; |
| | | font-size: 20px; |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | |
| | | <p>异常数</p > |
| | | </div> |
| | | <div class="dashboard-item"> |
| | | <h3 style="color: #7868d9">{{ totalViews }}</h3> |
| | | <h3>{{ totalViews }}</h3> |
| | | <p>生成异常工单数</p > |
| | | </div> |
| | | <div class="dashboard-item"> |
| | |
| | | |
| | | <el-table v-loading="loading" :data="monitorList" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column label="设备编码" align="center" prop="serialNumber" /> |
| | | <el-table-column label="设备编码" align="center" prop="serialNumber" width="180px"/> |
| | | <el-table-column label="设备名称" align="center" prop="name" /> |
| | | <el-table-column label="上报部门" align="center" prop="deptName" /> |
| | | <el-table-column label="设备状态" align="center" prop="onState"> |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="异常原因" align="center" prop="reason" /> |
| | | <el-table-column label="安装时间" align="center" prop="installedTime" width="180"> |
| | | <el-table-column label="数据时间" align="center" prop="installedTime" width="180"> |
| | | </el-table-column> |
| | | <el-table-column label="管理单位" align="center" prop="managementUnit" /> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
New file |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px"> |
| | | <el-form-item label="考核对象" prop="checkUnitId"> |
| | | <el-input |
| | | v-model="queryParams.checkUnitName" |
| | | placeholder="请输入考核对象" |
| | | clearable |
| | | @clear="handleQuery" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="考核频率" prop="frequency"> |
| | | <el-select v-model="queryParams.frequency" clearable @clear="handleQuery" placeholder="考核频率"> |
| | | <el-option |
| | | label="月度考核" |
| | | value="1"> |
| | | </el-option> |
| | | <el-option |
| | | label="季度考核" |
| | | value="2"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="考核范围" prop="examineRange"> |
| | | <el-select v-model="queryParams.examineRange" clearable @clear="handleQuery" placeholder="考核范围"> |
| | | <el-option |
| | | label="市局考核" |
| | | value="2"> |
| | | </el-option> |
| | | <el-option |
| | | label="分局考核" |
| | | value="1"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="考核时间"> |
| | | <el-date-picker |
| | | v-model="daterangeCheckTime" |
| | | style="width: 240px" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | type="daterange" |
| | | range-separator="-" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | ></el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> |
| | | <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <el-row :gutter="10" class="mb8"> |
| | | <!-- <el-col :span="1.5">--> |
| | | <!-- <el-button--> |
| | | <!-- type="primary"--> |
| | | <!-- plain--> |
| | | <!-- icon="el-icon-plus"--> |
| | | <!-- size="mini"--> |
| | | <!-- @click="handleAdd"--> |
| | | <!-- v-hasPermi="['system:checkResult:add']"--> |
| | | <!-- >新增</el-button>--> |
| | | <!-- </el-col>--> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="danger" |
| | | plain |
| | | icon="el-icon-delete" |
| | | size="mini" |
| | | :disabled="multiple" |
| | | @click="handleDelete" |
| | | >删除</el-button> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="warning" |
| | | plain |
| | | icon="el-icon-download" |
| | | size="mini" |
| | | @click="handleExport" |
| | | >导出</el-button> |
| | | </el-col> |
| | | <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> |
| | | </el-row> |
| | | |
| | | <el-card class="box-card" v-for="(item) in checkResultList"> |
| | | <div slot="header" class="clearfix"> |
| | | <span>{{ "车辆考核" }}</span> |
| | | <el-button style="float: right; padding: 3px 0" type="text" @click="handleDetail(item)">详情</el-button> |
| | | </div> |
| | | <div class="text item">考核标签<span class="time">{{ "四区天网二期" }}</span></div> |
| | | <div class="text item">考核范围<span class="time">{{ "市区考核" }}</span></div> |
| | | <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> |
| | | </div> |
| | | </el-card> |
| | | |
| | | <!-- <el-table v-loading="loading" :data="checkResultList" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column label="考核对象" align="center" prop="checkUnitName" /> |
| | | <el-table-column label="考核" align="center" prop="examineName" /> |
| | | <el-table-column label="考核范围":formatter="examineRangeFormatter" align="center" prop="examineRange" /> |
| | | <el-table-column label="考核频率" :formatter="frequencyFormatter" align="center" prop="frequency" /> |
| | | <el-table-column label="考核分数" falign="center" prop="checkScore" /> |
| | | <el-table-column label="考核时间" align="center" prop="checkTime" /> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-view" |
| | | @click="handleDetail(scope.row)" |
| | | >详情</el-button> |
| | | <el-button |
| | | type="text" |
| | | size="mini" |
| | | icon="el-icon-edit" |
| | | @click="handleSetManualScore(scope.row)" |
| | | >人工打分</el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-delete" |
| | | @click="handleDelete(scope.row)" |
| | | >删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <pagination |
| | | v-show="total>0" |
| | | :total="total" |
| | | :page.sync="queryParams.pageNum" |
| | | :limit.sync="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> --> |
| | | |
| | | <el-dialog :title="detailName" :visible.sync="detail" width="800px" append-to-body> |
| | | <el-form label-position="left" inline class="table-expand"> |
| | | <el-collapse v-model="activeNames" @change="handleChange"> |
| | | <el-collapse-item name="1"> |
| | | <template slot="title"> |
| | | <div style="width: 10%">自流井区</div><div style="margin-left: 75%">得分:0.97</div> |
| | | </template> |
| | | <div>视图库对接稳定性:95.32%</div> |
| | | <div>点位在线率:96.46%</div> |
| | | <div>联网卡口设备目录一致率:97.26%</div> |
| | | <div>车辆卡口信息采集准确率:92.33%</div> |
| | | <div>车辆卡口设备抓拍数据完整性:94.26%</div> |
| | | <div>车辆卡口设备抓拍数据准确性:94.78%</div> |
| | | <div>车辆卡口设备时钟准确性:93.98%</div> |
| | | <div>车辆卡口设备抓拍数据上传及时性:95.86%</div> |
| | | <div>车辆卡口设备url可用性:94.56%</div> |
| | | <div>车辆卡口设备抓拍数据大图可用性:91.77%</div> |
| | | </el-collapse-item> |
| | | <el-collapse-item name="2"> |
| | | <template slot="title"> |
| | | <div style="width: 10%">贡井区</div><div style="margin-left: 75%">得分:0.94</div> |
| | | </template> |
| | | <div>视图库对接稳定性:95.32%</div> |
| | | <div>点位在线率:96.46%</div> |
| | | <div>联网卡口设备目录一致率:97.26%</div> |
| | | <div>车辆卡口信息采集准确率:92.33%</div> |
| | | <div>车辆卡口设备抓拍数据完整性:94.26%</div> |
| | | <div>车辆卡口设备抓拍数据准确性:94.78%</div> |
| | | <div>车辆卡口设备时钟准确性:93.98%</div> |
| | | <div>车辆卡口设备抓拍数据上传及时性:95.86%</div> |
| | | <div>车辆卡口设备url可用性:94.56%</div> |
| | | <div>车辆卡口设备抓拍数据大图可用性:91.77%</div> |
| | | </el-collapse-item> |
| | | <el-collapse-item title="大安区" name="3"> |
| | | <template slot="title"> |
| | | <div style="width: 10%">大安区</div><div style="margin-left: 75%">得分:0.95</div> |
| | | </template> |
| | | <div>视图库对接稳定性:95.32%</div> |
| | | <div>点位在线率:96.46%</div> |
| | | <div>联网卡口设备目录一致率:97.26%</div> |
| | | <div>车辆卡口信息采集准确率:92.33%</div> |
| | | <div>车辆卡口设备抓拍数据完整性:94.26%</div> |
| | | <div>车辆卡口设备抓拍数据准确性:94.78%</div> |
| | | <div>车辆卡口设备时钟准确性:93.98%</div> |
| | | <div>车辆卡口设备抓拍数据上传及时性:95.86%</div> |
| | | <div>车辆卡口设备url可用性:94.56%</div> |
| | | <div>车辆卡口设备抓拍数据大图可用性:91.77%</div> |
| | | </el-collapse-item> |
| | | <el-collapse-item title="沿滩区" name="4"> |
| | | <template slot="title"> |
| | | <div style="width: 10%">沿滩区</div><div style="margin-left: 75%">得分:0.94</div> |
| | | </template> |
| | | <div>视图库对接稳定性:95.32%</div> |
| | | <div>点位在线率:96.46%</div> |
| | | <div>联网卡口设备目录一致率:97.26%</div> |
| | | <div>车辆卡口信息采集准确率:92.33%</div> |
| | | <div>车辆卡口设备抓拍数据完整性:94.26%</div> |
| | | <div>车辆卡口设备抓拍数据准确性:94.78%</div> |
| | | <div>车辆卡口设备时钟准确性:93.98%</div> |
| | | <div>车辆卡口设备抓拍数据上传及时性:95.86%</div> |
| | | <div>车辆卡口设备url可用性:94.56%</div> |
| | | <div>车辆卡口设备抓拍数据大图可用性:91.77%</div> |
| | | </el-collapse-item> |
| | | <el-collapse-item title="荣县" name="5"> |
| | | <template slot="title"> |
| | | <div style="width: 10%">荣县</div><div style="margin-left: 75%">得分:0.93</div> |
| | | </template> |
| | | <div>视图库对接稳定性:95.32%</div> |
| | | <div>点位在线率:96.46%</div> |
| | | <div>联网卡口设备目录一致率:97.26%</div> |
| | | <div>车辆卡口信息采集准确率:92.33%</div> |
| | | <div>车辆卡口设备抓拍数据完整性:94.26%</div> |
| | | <div>车辆卡口设备抓拍数据准确性:94.78%</div> |
| | | <div>车辆卡口设备时钟准确性:93.98%</div> |
| | | <div>车辆卡口设备抓拍数据上传及时性:95.86%</div> |
| | | <div>车辆卡口设备url可用性:94.56%</div> |
| | | <div>车辆卡口设备抓拍数据大图可用性:91.77%</div> |
| | | </el-collapse-item> |
| | | <el-collapse-item title="富顺区" name="6"> |
| | | <template slot="title"> |
| | | <div style="width: 10%">富顺区</div><div style="margin-left: 75%">得分:0.95</div> |
| | | </template> |
| | | <div>视图库对接稳定性:95.32%</div> |
| | | <div>点位在线率:96.46%</div> |
| | | <div>联网卡口设备目录一致率:97.26%</div> |
| | | <div>车辆卡口信息采集准确率:92.33%</div> |
| | | <div>车辆卡口设备抓拍数据完整性:94.26%</div> |
| | | <div>车辆卡口设备抓拍数据准确性:94.78%</div> |
| | | <div>车辆卡口设备时钟准确性:93.98%</div> |
| | | <div>车辆卡口设备抓拍数据上传及时性:95.86%</div> |
| | | <div>车辆卡口设备url可用性:94.56%</div> |
| | | <div>车辆卡口设备抓拍数据大图可用性:91.77%</div> |
| | | </el-collapse-item> |
| | | <el-collapse-item title="高新区" name="7"> |
| | | <template slot="title"> |
| | | <div style="width: 10%">高新区</div><div style="margin-left: 75%;">得分:0.96</div> |
| | | </template> |
| | | <div>视图库对接稳定性:95.32%</div> |
| | | <div>点位在线率:96.46%</div> |
| | | <div>联网卡口设备目录一致率:97.26%</div> |
| | | <div>车辆卡口信息采集准确率:92.33%</div> |
| | | <div>车辆卡口设备抓拍数据完整性:94.26%</div> |
| | | <div>车辆卡口设备抓拍数据准确性:94.78%</div> |
| | | <div>车辆卡口设备时钟准确性:93.98%</div> |
| | | <div>车辆卡口设备抓拍数据上传及时性:95.86%</div> |
| | | <div>车辆卡口设备url可用性:94.56%</div> |
| | | <div>车辆卡口设备抓拍数据大图可用性:91.77%</div> |
| | | </el-collapse-item> |
| | | </el-collapse> |
| | | </el-form> |
| | | </el-dialog> |
| | | |
| | | <!-- 添加或修改考核结果对话框 --> |
| | | <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="80px"> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">确 定</el-button> |
| | | <el-button @click="cancel">取 消</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { listCheckResult, getCheckResult, delCheckResult, addCheckResult, updateCheckResult,manualScore, publishCheckResult } from "@/api/platform/check-result"; |
| | | |
| | | export default { |
| | | name: "CheckResult", |
| | | data() { |
| | | return { |
| | | detailTitle: '', |
| | | detailOpen: false, |
| | | // 是否显示详情 |
| | | detail: false, |
| | | // 详情标题 |
| | | detailName: "考核结果", |
| | | activeNames: ['1'], |
| | | manualScoreOpen: false, |
| | | manualScoreForm: {}, |
| | | manualScoreTitle: '', |
| | | // 遮罩层 |
| | | loading: true, |
| | | // 选中数组 |
| | | ids: [], |
| | | // 非单个禁用 |
| | | single: true, |
| | | // 非多个禁用 |
| | | multiple: true, |
| | | // 显示搜索条件 |
| | | showSearch: true, |
| | | // 总条数 |
| | | total: 0, |
| | | // 考核结果表格数据 |
| | | checkResultList: [], |
| | | // 弹出层标题 |
| | | title: "", |
| | | // 是否显示弹出层 |
| | | open: false, |
| | | // 逻辑删除时间范围 |
| | | daterangeCheckTime: [], |
| | | // 查询参数 |
| | | queryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | checkUnitId: null, |
| | | checkTime: null, |
| | | }, |
| | | // 表单参数 |
| | | form: {}, |
| | | // 表单校验 |
| | | rules: { |
| | | } |
| | | }; |
| | | }, |
| | | created() { |
| | | this.getList(); |
| | | }, |
| | | methods: { |
| | | handleChange(val) { |
| | | console.log(val); |
| | | }, |
| | | frequencyFormatter(row) { |
| | | if (row.frequency === "1") { |
| | | return "月度考核" |
| | | } |
| | | if (row.frequency === "2") { |
| | | return "季度考核" |
| | | } |
| | | }, |
| | | examineRangeFormatter(row) { |
| | | if (row.examineRange === "1") { |
| | | return "分局考核" |
| | | } |
| | | if (row.examineRange === "2") { |
| | | return "市局考核" |
| | | } |
| | | }, |
| | | /** 查询考核结果列表 */ |
| | | getList() { |
| | | this.loading = true; |
| | | if (null != this.daterangeCheckTime && '' != this.daterangeCheckTime) { |
| | | this.queryParams["start"] = this.daterangeCheckTime[0]; |
| | | this.queryParams["end"] = this.daterangeCheckTime[1]; |
| | | } |
| | | listCheckResult(this.queryParams).then(response => { |
| | | this.checkResultList = response.data; |
| | | this.total = response.total; |
| | | this.loading = false; |
| | | }); |
| | | }, |
| | | // 取消按钮 |
| | | cancel() { |
| | | this.open = false; |
| | | this.reset(); |
| | | }, |
| | | // 表单重置 |
| | | reset() { |
| | | this.form = { |
| | | id: null, |
| | | checkUnitId: null, |
| | | checkPublishId: null, |
| | | checkScore: null, |
| | | systemScore: null, |
| | | manualScore: null, |
| | | checkTime: null, |
| | | createTime: null, |
| | | updateTime: null, |
| | | deleted: null |
| | | }; |
| | | this.resetForm("form"); |
| | | }, |
| | | cancelManualScore() { |
| | | this.manualScoreForm = {}; |
| | | this.manualScoreTitle = ""; |
| | | this.manualScoreOpen = false; |
| | | }, |
| | | submitManualScore() { |
| | | if (! this.manualScoreForm.manualScore) { |
| | | this.$modal.msgWarning("请填写分数"); |
| | | return |
| | | } |
| | | manualScore(this.manualScoreForm).then(res => { |
| | | this.$modal.msgSuccess("操作成功"); |
| | | this.cancelManualScore(); |
| | | this.getList(); |
| | | }) |
| | | }, |
| | | handleSetManualScore(row) { |
| | | this.manualScoreForm.id = row.id; |
| | | this.manualScoreForm.manualScore = parseInt(row.manualScore); |
| | | this.manualScoreTitle = row.checkUnitName + '人工打分' |
| | | this.manualScoreOpen = true; |
| | | }, |
| | | handleDetail(row) { |
| | | this.detail = row; |
| | | this.detail.carOnlineRate = '97%'; |
| | | this.detailTitle = row.checkUnitName + '考核结果'; |
| | | this.detailOpen = true; |
| | | |
| | | }, |
| | | handlePublish(row) { |
| | | const ids = row.id || this.ids; |
| | | this.$modal.confirm('是否确认发布考核结果编号为"' + ids + '"的数据项?').then(function() { |
| | | return publishCheckResult(ids); |
| | | }).then(() => { |
| | | this.getList(); |
| | | this.$modal.msgSuccess("发布成功"); |
| | | }).catch(() => {}); |
| | | |
| | | }, |
| | | /** 搜索按钮操作 */ |
| | | handleQuery() { |
| | | this.queryParams.pageNum = 1; |
| | | this.getList(); |
| | | }, |
| | | /** 重置按钮操作 */ |
| | | resetQuery() { |
| | | this.daterangeCheckTime = []; |
| | | this.resetForm("queryForm"); |
| | | this.handleQuery(); |
| | | }, |
| | | // 多选框选中数据 |
| | | handleSelectionChange(selection) { |
| | | this.ids = selection.map(item => item.id) |
| | | this.single = selection.length!==1 |
| | | this.multiple = !selection.length |
| | | }, |
| | | /** 新增按钮操作 */ |
| | | handleAdd() { |
| | | this.reset(); |
| | | this.open = true; |
| | | this.title = "添加考核结果"; |
| | | }, |
| | | /** 修改按钮操作 */ |
| | | handleUpdate(row) { |
| | | this.reset(); |
| | | const id = row.id || this.ids |
| | | getCheckResult(id).then(response => { |
| | | this.form = response.data; |
| | | this.open = true; |
| | | this.title = "修改考核结果"; |
| | | }); |
| | | }, |
| | | /** 提交按钮 */ |
| | | submitForm() { |
| | | this.$refs["form"].validate(valid => { |
| | | if (valid) { |
| | | if (this.form.id != null) { |
| | | updateCheckResult(this.form).then(response => { |
| | | this.$modal.msgSuccess("修改成功"); |
| | | this.open = false; |
| | | this.getList(); |
| | | }); |
| | | } else { |
| | | addCheckResult(this.form).then(response => { |
| | | this.$modal.msgSuccess("新增成功"); |
| | | this.open = false; |
| | | this.getList(); |
| | | }); |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | /** 删除按钮操作 */ |
| | | handleDelete(row) { |
| | | const ids = row.id || this.ids; |
| | | this.$modal.confirm('是否确认删除考核结果编号为"' + ids + '"的数据项?').then(function() { |
| | | return delCheckResult(ids); |
| | | }).then(() => { |
| | | this.getList(); |
| | | this.$modal.msgSuccess("删除成功"); |
| | | }).catch(() => {}); |
| | | }, |
| | | /** 导出按钮操作 */ |
| | | handleExport() { |
| | | this.download('system/checkResult/export', { |
| | | ...this.queryParams |
| | | }, `checkResult_${new Date().getTime()}.xlsx`) |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | <style> |
| | | .text { |
| | | font-size: 14px; |
| | | } |
| | | .time { |
| | | font-size: 13px; |
| | | color: #999; |
| | | margin-left: 10px; |
| | | } |
| | | .item { |
| | | margin-bottom: 18px; |
| | | } |
| | | .clearfix:before, |
| | | .clearfix:after { |
| | | display: table; |
| | | content: ""; |
| | | } |
| | | .clearfix:after { |
| | | clear: both |
| | | } |
| | | .box-card { |
| | | width: 480px; |
| | | } |
| | | |
| | | </style> |
| | |
| | | <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">{{ item.checkScore }}</span></div> |
| | | <div class="text item">考核时间<span class="time">{{ item.checkTime }}</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> |
| | | </div> |
| | | </el-card> |
| | | |
| | | <!-- <el-table v-loading="loading" :data="checkResultList" @selection-change="handleSelectionChange"> |
| | |
| | | <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> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { listCheckResult, getCheckResult, delCheckResult, addCheckResult, updateCheckResult,manualScore } from "@/api/platform/check-result"; |
| | | import { listCheckResult, getCheckResult, delCheckResult, addCheckResult, updateCheckResult,manualScore, publishCheckResult } from "@/api/platform/check-result"; |
| | | |
| | | export default { |
| | | name: "CheckResult", |
| | |
| | | return { |
| | | detailTitle: '', |
| | | detailOpen: false, |
| | | detail: {}, |
| | | detail: { |
| | | |
| | | }, |
| | | manualScoreOpen: false, |
| | | manualScoreForm: {}, |
| | | manualScoreTitle: '', |
| | |
| | | }, |
| | | handleDetail(row) { |
| | | this.detail = row; |
| | | this.detail.carOnlineRate = '97%'; |
| | | this.detailTitle = row.checkUnitName + '考核结果'; |
| | | this.detailOpen = true; |
| | | |
| | | }, |
| | | handlePublish(row) { |
| | | let text = row.publish == 1 ? '取消发布' : '发布'; |
| | | const ids = row.id || this.ids; |
| | | this.$modal.confirm('是否确认' + text + '考核结果编号为"' + ids + '"的数据项?').then(function() { |
| | | return publishCheckResult(ids); |
| | | }).then(() => { |
| | | this.getList(); |
| | | this.$modal.msgSuccess(text + "成功"); |
| | | }).catch(() => {}); |
| | | |
| | | }, |
| | | /** 搜索按钮操作 */ |
| | | handleQuery() { |
| | | this.queryParams.pageNum = 1; |
| | |
| | | </el-table-column> |
| | | <el-table-column label="规则描述" align="center" prop="ruleDetail" /> |
| | | <el-table-column label="创建时间" align="center" prop="createTime" /> |
| | | <el-table-column label="审核状态" align="center" prop="auditState"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="dict.type.platform_audit_state" :value="scope.row.auditState"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="审核人" align="center" prop="auditUser" /> |
| | | <el-table-column label="审核时间" align="center" prop="auditTime" /> |
| | | <el-table-column label="审核意见" align="center" prop="auditDescription" /> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-s-check" |
| | | @click="handleAudit(scope.row)" |
| | | v-hasPermi="['check:rule:audit']" |
| | | >审核</el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | |
| | | :limit.sync="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | | |
| | | <div> |
| | | <!-- 添加或修改考核规则对话框 --> |
| | | <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="80px"> |
| | |
| | | <div class="row-right"> |
| | | <div>不少于</div> |
| | | <div> |
| | | <el-input class="input-w" type="number" v-model="form.videoPointNum"/> |
| | | <el-input class="input-w" type="number" v-model="form.videoPointNum"/>{{" %"}} |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | <div class="row"> |
| | | <div class="row-left">车辆卡口点位数</div> |
| | | <div class="row-right"> |
| | | <div>不少于</div> |
| | | <div><el-input class="input-w" type="number" v-model="form.vehicleCheckpointNum"/></div> |
| | | <div><el-input class="input-w" type="number" v-model="form.vehicleCheckpointNum"/></div>{{" %"}} |
| | | </div> |
| | | </div> |
| | | <div class="row"> |
| | |
| | | <div class="row-right"> |
| | | <div>不少于</div> |
| | | <div> |
| | | <el-input class="input-w" type="number" v-model="form.faceChceckpointNum"/></div> |
| | | <el-input class="input-w" type="number" v-model="form.faceChceckpointNum" /></div>{{" %"}} |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | |
| | | <!-- 审核考核规则对话框 --> |
| | | <el-dialog :title="title" :visible.sync="auditOpen" width="600px" append-to-body> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="80px"> |
| | | <el-form-item label="规则名称" prop="ruleName"> |
| | | <el-input v-model="form.ruleName" placeholder="请输入规则名称" disabled/> |
| | | </el-form-item> |
| | | <el-form-item label="规则类型" prop="category"> |
| | | <el-select v-model="form.category" placeholder="规则类型" disabled> |
| | | <el-option |
| | | v-for="item in categoryList" |
| | | :key="item.id" |
| | | :label="item.value" |
| | | :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="规则描述" prop="ruleDetail"> |
| | | <el-input v-model="form.ruleDetail" type="textarea" show-word-limit maxlength="150" placeholder="请输入规则描述" disabled/> |
| | | </el-form-item> |
| | | <el-form-item label="参数配置" prop="ruleDetail" disabled> |
| | | <div class="row-warp"> |
| | | <div class="row"> |
| | | <div class="row-left">参数名</div> |
| | | <div class="row-right">条件</div> |
| | | </div> |
| | | <div class="row"> |
| | | <div class="row-left">天网视频点位数</div> |
| | | <div class="row-right"> |
| | | <div>不少于</div> |
| | | <div> |
| | | <el-input class="input-w" type="number" v-model="form.videoPointNum" disabled/> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="row"> |
| | | <div class="row-left">车辆卡口点位数</div> |
| | | <div class="row-right"> |
| | | <div>不少于</div> |
| | | <div><el-input class="input-w" type="number" v-model="form.vehicleCheckpointNum" disabled/></div> |
| | | </div> |
| | | </div> |
| | | <div class="row"> |
| | | <div class="row-left">人脸卡口点位数</div> |
| | | <div class="row-right"> |
| | | <div>不少于</div> |
| | | <div> |
| | | <el-input class="input-w" type="number" v-model="form.faceChceckpointNum" disabled/></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-form-item> |
| | | <el-form-item label="审核结果" prop="auditState" > |
| | | <el-radio-group v-model="form.auditState"> |
| | | <el-radio :label="1">通过</el-radio> |
| | | <el-radio :label="2">驳回</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="审核说明" prop="auditDescription" > |
| | | <el-input v-model="form.auditDescription" type="textarea" show-word-limit maxlength="100" /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">确 定</el-button> |
| | | <el-button @click="cancel">取 消</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | |
| | | |
| | | export default { |
| | | name: "CheckRule", |
| | | dicts: ['platform_audit_state'], |
| | | data() { |
| | | return { |
| | | // 遮罩层 |
| | |
| | | title: "", |
| | | // 是否显示弹出层 |
| | | open: false, |
| | | // 是否显示弹出层 |
| | | auditOpen: false, |
| | | // 查询参数 |
| | | queryParams: { |
| | | pageNum: 1, |
| | |
| | | // 取消按钮 |
| | | cancel() { |
| | | this.open = false; |
| | | this.auditOpen = false; |
| | | this.reset(); |
| | | }, |
| | | // 表单重置 |
| | |
| | | this.form = response.data; |
| | | this.open = true; |
| | | this.title = "修改考核规则"; |
| | | |
| | | }); |
| | | }, |
| | | /** 审核按钮操作 */ |
| | | handleAudit(row) { |
| | | this.reset(); |
| | | const id = row.id || this.ids |
| | | getCheckRule(id).then(response => { |
| | | this.form = response.data; |
| | | this.auditOpen = true; |
| | | this.title = "审核考核规则"; |
| | | }); |
| | | }, |
| | | /** 提交按钮 */ |
| | |
| | | updateCheckRule(this.form).then(response => { |
| | | this.$modal.msgSuccess("修改成功"); |
| | | this.open = false; |
| | | this.auditOpen = false; |
| | | this.getList(); |
| | | }); |
| | | } else { |
| | | addCheckRule(this.form).then(response => { |
| | | this.$modal.msgSuccess("新增成功"); |
| | | this.open = false; |
| | | this.auditOpen = false; |
| | | this.getList(); |
| | | }); |
| | | } |
| | |
| | | this.$modal.msgSuccess("删除成功"); |
| | | }).catch(() => {}); |
| | | }, |
| | | |
| | | /** 导出按钮操作 */ |
| | | handleExport() { |
| | | this.download('system/checkRule/export', { |
| | |
| | | <style scoped> |
| | | .input-w { |
| | | margin-left: 5px; |
| | | width: 100px; |
| | | width: 70px; |
| | | } |
| | | .row-warp { |
| | | display: flex; |
| | |
| | | </el-dialog> |
| | | |
| | | <!-- 合同详情 --> |
| | | <el-dialog :title="detailName" :visible.sync="detail" width="500px" append-to-body> |
| | | <el-dialog :title="detailName" :visible.sync="detail" width="800px" append-to-body> |
| | | <el-form label-position="left" inline class="table-expand"> |
| | | <el-collapse v-model="activeNames" @change="handleChange"> |
| | | <el-collapse-item title="视频平均在线率" name="1"> |
| | |
| | | </span> |
| | | </div> |
| | | </el-upload> |
| | | <el-dialog :visible.sync="dialogVisible"> |
| | | <el-dialog :visible.sync="dialogVisible" append-to-body="false"> |
| | | <img width="100%" :src="dialogImageUrl" alt=""> |
| | | </el-dialog> |
| | | <div style="text-align: right; margin-top: 10px;"> |
New file |
| | |
| | | <template> |
| | | <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> |
| | | </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 |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .container { |
| | | margin-left: 100px; |
| | | margin-right: 100px; |
| | | margin-top: 10px; |
| | | } |
| | | </style> |
| | |
| | | <p>异常数</p > |
| | | </div> |
| | | <div class="dashboard-item"> |
| | | <h3 style="color: #7868d9">{{ totalViews }}</h3> |
| | | <h3>{{ totalViews }}</h3> |
| | | <p>生成异常工单数</p > |
| | | </div> |
| | | <div class="dashboard-item"> |
| | |
| | | |
| | | <el-table v-loading="loading" :data="monitorList" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column label="设备编码" align="center" prop="serialNumber" /> |
| | | <el-table-column label="设备编码" align="center" prop="serialNumber" width="180px"/> |
| | | <el-table-column label="设备名称" align="center" prop="name" /> |
| | | <el-table-column label="上报部门" align="center" prop="deptName" /> |
| | | <el-table-column label="设备状态" align="center" prop="onState"> |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="异常原因" align="center" prop="reason" /> |
| | | <el-table-column label="安装时间" align="center" prop="installedTime" width="180"> |
| | | <el-table-column label="数据时间" align="center" prop="installedTime" width="180"> |
| | | </el-table-column> |
| | | <el-table-column label="管理单位" align="center" prop="managementUnit" /> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
| | |
| | | <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.state"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="创建人" align="center" prop="createUserName" /> |
| | | <el-table-column label="创建时间" align="center" prop="createTime" /> |
| | | <el-table-column label="修改人" align="center" prop="updateUserName" /> |
| | | <el-table-column label="修改时间" align="center" prop="updateTime" /> |
| | | <el-table-column label="修改时间" align="center" prop="updateTime" width="170px" /> |
| | | <el-table-column label="审核状态" align="center" prop="auditState"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="dict.type.platform_audit_state" :value="scope.row.auditState"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="审核人" align="center" prop="auditUser" /> |
| | | <el-table-column label="审核时间" align="center" prop="auditTime" width="170px"/> |
| | | <el-table-column label="审核意见" align="center" prop="auditDescription" /> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-s-check" |
| | | @click="handleAudit(scope.row)" |
| | | v-hasPermi="['examine:publish:audit']" |
| | | >审核</el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | |
| | | :limit.sync="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | | |
| | | <div> |
| | | <!-- 添加或修改考核发布对话框 --> |
| | | <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="100px"> |
| | |
| | | v-for="dict in dict.type.platform_examine_range" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | :value="parseInt(dict.value)" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="考核频率" prop="frequency"> |
| | | <el-form-item label="考核频率"> |
| | | <el-select |
| | | v-model="form.frequency" |
| | | placeholder="考核频率" |
| | |
| | | v-for="dict in dict.type.platform_examine_frequency" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | :value="parseInt(dict.value)" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | |
| | | v-for="dict in dict.type.sys_normal_disable" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | :value="parseInt(dict.value)" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | |
| | | <el-button @click="cancel">取 消</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <!-- 审核考核发布对话框 --> |
| | | <el-dialog :title="title" :visible.sync="auditOpen" width="500px" append-to-body> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="100px"> |
| | | <el-form-item label="考核名" prop="examineName"> |
| | | <el-input v-model="form.examineName" placeholder="请输入考核名" disabled/> |
| | | </el-form-item> |
| | | <el-form-item label="考核模板" prop="templateId"> |
| | | <el-select v-model="form.templateId" placeholder="考核模板" disabled> |
| | | <el-option |
| | | v-for="item in templateList" |
| | | :key="item.id" |
| | | :label="item.value" |
| | | :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="考核范围" prop="examineRange" > |
| | | <el-select |
| | | v-model="form.examineRange" |
| | | placeholder="考核范围" |
| | | clearable |
| | | style="width: 170px" |
| | | disabled |
| | | > |
| | | <el-option |
| | | v-for="dict in dict.type.platform_examine_range" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="parseInt(dict.value)" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="考核频率" prop="frequency" > |
| | | <el-select |
| | | v-model="form.frequency" |
| | | placeholder="考核频率" |
| | | clearable |
| | | style="width: 170px" |
| | | disabled |
| | | > |
| | | <el-option |
| | | v-for="dict in dict.type.platform_examine_frequency" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="parseInt(dict.value)" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="报警分数阈值" prop="alarmScore"> |
| | | <el-input v-model="form.alarmScore" placeholder="请输入分数" style="width: 170px" disabled/> |
| | | </el-form-item> |
| | | <el-form-item label="考核状态" prop="state"> |
| | | <el-select |
| | | v-model="form.state" |
| | | placeholder="考核状态" |
| | | clearable |
| | | style="width: 170px" |
| | | disabled |
| | | > |
| | | <el-option |
| | | v-for="dict in dict.type.sys_normal_disable" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="parseInt(dict.value)" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="描述" prop="description"> |
| | | <el-input v-model="form.description" type="textarea" placeholder="请输入内容" disabled/> |
| | | </el-form-item> |
| | | <el-form-item label="审核结果" prop="auditState" > |
| | | <el-radio-group v-model="form.auditState"> |
| | | <el-radio :label="1">通过</el-radio> |
| | | <el-radio :label="2">驳回</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="审核说明" prop="auditDescription" > |
| | | <el-input v-model="form.auditDescription" type="textarea" show-word-limit maxlength="100" /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">确 定</el-button> |
| | | <el-button @click="cancel">取 消</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | import { templateSelect } from "@/api/platform/check-template"; |
| | | export default { |
| | | name: "Publish", |
| | | dicts: ['sys_normal_disable','platform_examine_range','platform_examine_frequency'], |
| | | dicts: ['sys_normal_disable','platform_examine_range','platform_examine_frequency','platform_audit_state'], |
| | | data() { |
| | | return { |
| | | // 遮罩层 |
| | |
| | | title: "", |
| | | // 是否显示弹出层 |
| | | open: false, |
| | | auditOpen: false, |
| | | // 查询参数 |
| | | queryParams: { |
| | | pageNum: 1, |
| | |
| | | // 取消按钮 |
| | | cancel() { |
| | | this.open = false; |
| | | this.auditOpen = false; |
| | | this.reset(); |
| | | }, |
| | | // 表单重置 |
| | |
| | | this.title = "修改考核发布"; |
| | | }); |
| | | }, |
| | | /** 修改按钮操作 */ |
| | | handleAudit(row) { |
| | | this.reset(); |
| | | const id = row.id || this.ids |
| | | getPublish(id).then(response => { |
| | | this.form = response.data; |
| | | this.auditOpen = true; |
| | | this.title = "审核考核发布"; |
| | | }); |
| | | }, |
| | | /** 提交按钮 */ |
| | | submitForm() { |
| | | this.$refs["form"].validate(valid => { |
| | |
| | | updatePublish(this.form).then(response => { |
| | | this.$modal.msgSuccess("修改成功"); |
| | | this.open = false; |
| | | this.auditOpen = false; |
| | | this.getList(); |
| | | }); |
| | | } else { |
| | | addPublish(this.form).then(response => { |
| | | this.$modal.msgSuccess("新增成功"); |
| | | this.open = false; |
| | | this.auditOpen = false; |
| | | this.getList(); |
| | | }); |
| | | } |
| | |
| | | <p>异常数</p > |
| | | </div> |
| | | <div class="dashboard-item"> |
| | | <h3 style="color: #7868d9">{{ totalViews }}</h3> |
| | | <h3>{{ totalViews }}</h3> |
| | | <p>生成异常工单数</p > |
| | | </div> |
| | | <div class="dashboard-item"> |
| | |
| | | |
| | | <el-table v-loading="loading" :data="monitorList" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column label="设备编码" align="center" prop="serialNumber" /> |
| | | <el-table-column label="设备编码" align="center" prop="serialNumber" width="180px" /> |
| | | <el-table-column label="设备名称" align="center" prop="name" /> |
| | | <el-table-column label="上报部门" align="center" prop="deptName" /> |
| | | <el-table-column label="标签" align="center" prop="tag" /> |
| | | <el-table-column label="设备状态" align="center" prop="onState"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="dict.type.camera_state" :value="scope.row.onState"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="地址" align="center" prop="address" /> |
| | | <el-table-column label="区域" align="center" prop="region" /> |
| | | <el-table-column label="详细地址" align="center" prop="address" /> |
| | | <el-table-column label="是否生成异常工单" align="center" prop="defaultOrder"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="dict.type.platform_yes_no" :value="scope.row.defaultOrder"/> |
| | |
| | | <el-col :span="12"> |
| | | <el-form-item label="设备编码:">{{ form.serialNumber }}</el-form-item> |
| | | <el-form-item label="设备名称:">{{ form.name }} </el-form-item> |
| | | <el-form-item label="上报部门:">{{ form.deptName }} </el-form-item> |
| | | <el-form-item label="标签:">{{ form.deptName }} </el-form-item> |
| | | <el-form-item label="设备状态:"> |
| | | <div v-if="form.onState === 1">可用</div> |
| | | <div v-else-if="form.onState === 2">不可用</div> |
New file |
| | |
| | | <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-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> |
| | | <el-form-item label="卡口编号" prop="bayonetNumber"> |
| | | <el-input v-model="queryParams.bayonetNumber" placeholder="请输入卡口编号" clearable |
| | | @keyup.enter.native="handleQuery" /> |
| | | </el-form-item> |
| | | <el-form-item label="卡口名称" prop="bayonetName"> |
| | | <el-input v-model="queryParams.bayonetName" placeholder="请输入卡口名称" clearable @keyup.enter.native="handleQuery" /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> |
| | | <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <el-row :gutter="10" class="mb8"> |
| | | <el-col :span="1.5"> |
| | | <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" |
| | | v-hasPermi="['platform:platform:add']">新增</el-button> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate" |
| | | v-hasPermi="['platform:platform:edit']">修改</el-button> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" |
| | | v-hasPermi="['platform:platform:remove']">删除</el-button> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" |
| | | v-hasPermi="['platform:platform:export']">导出</el-button> |
| | | </el-col> |
| | | <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> |
| | | </el-row> |
| | | |
| | | <el-table v-loading="loading" :data="platformList" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column label="卡口名称" align="center" prop="bayonetName" /> |
| | | <el-table-column label="卡口编号" align="center" prop="bayonetNumber" /> |
| | | <el-table-column label="过车数据量" align="center" prop="vehicleDataNumber" /> |
| | | <el-table-column label="不唯一数据 " align="center" prop="notUniqueData" /> |
| | | <el-table-column label="不唯一数据量" align="center" prop="notUniqueDataNumber" /> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" |
| | | v-hasPermi="['platform:platform:edit']">修改</el-button> |
| | | <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" |
| | | v-hasPermi="['platform:platform:remove']">删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" |
| | | @pagination="getList" /> |
| | | |
| | | <!-- 添加或修改卡口过车数据一致性对话框 --> |
| | | <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="80px"> |
| | | <el-form-item label="卡口名称" prop="bayonetName"> |
| | | <el-input v-model="form.bayonetName" placeholder="请输入卡口名称" /> |
| | | </el-form-item> |
| | | <el-form-item label="卡口编号" prop="bayonetNumber"> |
| | | <el-input v-model="form.bayonetNumber" placeholder="请输入卡口编号" /> |
| | | </el-form-item> |
| | | <el-form-item label="过车数据量" prop="vehicleDataNumber"> |
| | | <el-input v-model="form.vehicleDataNumber" placeholder="请输入过车数据量" /> |
| | | </el-form-item> |
| | | <el-form-item label="不唯一数据 " prop="notUniqueData"> |
| | | <el-input v-model="form.notUniqueData" placeholder="请输入不唯一数据 " /> |
| | | </el-form-item> |
| | | <el-form-item label="不唯一数据量" prop="notUniqueDataNumber"> |
| | | <el-input v-model="form.notUniqueDataNumber" placeholder="请输入不唯一数据量" /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">确 定</el-button> |
| | | <el-button @click="cancel">取 消</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { listPlatform, getPlatform, delPlatform, addPlatform, updatePlatform } from "@/api/platform/vehicle-data-monitor"; |
| | | |
| | | export default { |
| | | name: "Platform", |
| | | data() { |
| | | return { |
| | | totalKiosks: 1157, |
| | | uniqueKiosks: 580, |
| | | totalCarData: 77422, |
| | | uniqueCarData: 431163, |
| | | // 遮罩层 |
| | | loading: true, |
| | | // 选中数组 |
| | | ids: [], |
| | | // 非单个禁用 |
| | | single: true, |
| | | // 非多个禁用 |
| | | multiple: true, |
| | | // 显示搜索条件 |
| | | showSearch: true, |
| | | // 总条数 |
| | | total: 0, |
| | | // 卡口过车数据一致性表格数据 |
| | | platformList: [], |
| | | // 弹出层标题 |
| | | title: "", |
| | | // 是否显示弹出层 |
| | | open: false, |
| | | // 查询参数 |
| | | queryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | regionCode: null, |
| | | bayonetName: null, |
| | | bayonetNumber: null, |
| | | }, |
| | | // 表单参数 |
| | | form: {}, |
| | | // 表单校验 |
| | | rules: { |
| | | bayonetName: [ |
| | | { required: true, message: "卡口名称不能为空", trigger: "blur" } |
| | | ], |
| | | bayonetNumber: [ |
| | | { required: true, message: "卡口编号不能为空", trigger: "blur" } |
| | | ], |
| | | } |
| | | }; |
| | | }, |
| | | created() { |
| | | this.getList(); |
| | | }, |
| | | methods: { |
| | | /** 查询卡口过车数据一致性列表 */ |
| | | getList() { |
| | | this.loading = true; |
| | | listPlatform(this.queryParams).then(response => { |
| | | this.platformList = response.rows; |
| | | this.total = response.total; |
| | | this.loading = false; |
| | | }); |
| | | }, |
| | | // 取消按钮 |
| | | cancel() { |
| | | this.open = false; |
| | | this.reset(); |
| | | }, |
| | | // 表单重置 |
| | | reset() { |
| | | this.form = { |
| | | id: null, |
| | | regionCode: null, |
| | | bayonetName: null, |
| | | bayonetNumber: null, |
| | | vehicleDataNumber: null, |
| | | notUniqueData: null, |
| | | notUniqueDataNumber: null, |
| | | createTime: null, |
| | | updateTime: null, |
| | | deleted: null |
| | | }; |
| | | this.resetForm("form"); |
| | | }, |
| | | /** 搜索按钮操作 */ |
| | | handleQuery() { |
| | | this.queryParams.pageNum = 1; |
| | | this.getList(); |
| | | }, |
| | | /** 重置按钮操作 */ |
| | | resetQuery() { |
| | | this.resetForm("queryForm"); |
| | | this.handleQuery(); |
| | | }, |
| | | // 多选框选中数据 |
| | | handleSelectionChange(selection) { |
| | | this.ids = selection.map(item => item.id) |
| | | this.single = selection.length !== 1 |
| | | this.multiple = !selection.length |
| | | }, |
| | | /** 新增按钮操作 */ |
| | | handleAdd() { |
| | | this.reset(); |
| | | this.open = true; |
| | | this.title = "添加卡口过车数据一致性"; |
| | | }, |
| | | /** 修改按钮操作 */ |
| | | handleUpdate(row) { |
| | | this.reset(); |
| | | const id = row.id || this.ids |
| | | getPlatform(id).then(response => { |
| | | this.form = response.data; |
| | | this.open = true; |
| | | this.title = "修改卡口过车数据一致性"; |
| | | }); |
| | | }, |
| | | /** 提交按钮 */ |
| | | submitForm() { |
| | | this.$refs["form"].validate(valid => { |
| | | if (valid) { |
| | | if (this.form.id != null) { |
| | | updatePlatform(this.form).then(response => { |
| | | this.$modal.msgSuccess("修改成功"); |
| | | this.open = false; |
| | | this.getList(); |
| | | }); |
| | | } else { |
| | | addPlatform(this.form).then(response => { |
| | | this.$modal.msgSuccess("新增成功"); |
| | | this.open = false; |
| | | this.getList(); |
| | | }); |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | /** 删除按钮操作 */ |
| | | handleDelete(row) { |
| | | const ids = row.id || this.ids; |
| | | this.$modal.confirm('是否确认删除卡口过车数据一致性编号为"' + ids + '"的数据项?').then(function () { |
| | | return delPlatform(ids); |
| | | }).then(() => { |
| | | this.getList(); |
| | | this.$modal.msgSuccess("删除成功"); |
| | | }).catch(() => { }); |
| | | }, |
| | | /** 导出按钮操作 */ |
| | | handleExport() { |
| | | this.download('platform/platform/export', { |
| | | ...this.queryParams |
| | | }, `platform_${new Date().getTime()}.xlsx`) |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | <style scoped> |
| | | .top { |
| | | height: 150px; |
| | | margin-bottom: 20px; |
| | | background-color: #F2F9FF; |
| | | border: 1px solid #77befd; |
| | | } |
| | | |
| | | .container { |
| | | max-width: 1000px; |
| | | margin: auto; |
| | | } |
| | | |
| | | .number { |
| | | font-size: 36px; |
| | | font-weight: bold; |
| | | color: #00A5FE; |
| | | } |
| | | |
| | | .numberTwo { |
| | | font-size: 36px; |
| | | font-weight: bold; |
| | | color: #505051; |
| | | } |
| | | |
| | | .card { |
| | | width: 100px; |
| | | height: 100px; |
| | | text-align: center; |
| | | background-color: #00A5FE; |
| | | color: aliceblue; |
| | | border-radius: 10%; |
| | | margin: 25px; |
| | | } |
| | | |
| | | .mod { |
| | | margin-top: 40px; |
| | | } |
| | | </style> |
| | |
| | | <p>异常数</p > |
| | | </div> |
| | | <div class="dashboard-item"> |
| | | <h3 style="color: #7868d9">{{ totalViews }}</h3> |
| | | <h3>{{ totalViews }}</h3> |
| | | <p>生成异常工单数</p > |
| | | </div> |
| | | <div class="dashboard-item"> |
| | | <h3>{{ noStore }}</h3> |
| | | <p>无存储</p > |
| | | </div> |
| | | <div class="dashboard-item"> |
| | | <h3>{{ partStore }}</h3> |
| | | <p>部分存储</p > |
| | | </div> |
| | | <div class="dashboard-item"> |
| | | <h3>{{ viewsPercentage }}%</h3> |
| | |
| | | </el-row> |
| | | |
| | | <el-table v-loading="loading" :data="monitorList" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column label="设备编码" align="center" prop="serialNumber" /> |
| | | <el-table-column label="设备名称" align="center" prop="name" /> |
| | | <el-table-column label="上报部门" align="center" prop="deptName" /> |
| | | <el-table-column type="selection" align="center" /> |
| | | <el-table-column label="设备名称" align="center" prop="name" width="280" fixed/> |
| | | <el-table-column label="设备编码" align="center" prop="serialNumber" width="180"/> |
| | | <el-table-column label="标签" align="center" prop="tag" width="180"/> |
| | | <el-table-column label="设备状态" align="center" prop="onState"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="dict.type.camera_state" :value="scope.row.onState"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="地址" align="center" prop="address" /> |
| | | <el-table-column label="是否生成异常工单" align="center" prop="defaultOrder"> |
| | | <el-table-column label="是否生成异常工单" align="center" prop="defaultOrder" width="180"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="dict.type.platform_yes_no" :value="scope.row.defaultOrder"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="异常原因" align="center" prop="reason" /> |
| | | <el-table-column label="安装时间" align="center" prop="installedTime" width="180"/> |
| | | <el-table-column label="管理单位" align="center" prop="managementUnit" /> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
| | | <el-table-column label="数据时间" align="center" prop="installedTime" width="180"/> |
| | | <el-table-column label="管理单位" align="center" prop="managementUnit" width="180"/> |
| | | <el-table-column label="信令时延(ms)" align="center" prop="sipDelay" width="180"/> |
| | | <el-table-column label="视频时延(ms)" align="center" prop="videoDelay" width="180"/> |
| | | <el-table-column label="关键帧时延(ms)" align="center" prop="iframeDelay" width="180"/> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | size="mini" |
| | |
| | | <el-col :span="12"> |
| | | <el-form-item label="设备编码:">{{ form.serialNumber }}</el-form-item> |
| | | <el-form-item label="设备名称:">{{ form.name }} </el-form-item> |
| | | <el-form-item label="上报部门:">{{ form.deptName }} </el-form-item> |
| | | <el-form-item label="标签:">{{ form.tag }} </el-form-item> |
| | | <el-form-item label="设备状态:"> |
| | | <div v-if="form.onState === 1">可用</div> |
| | | <div v-else-if="form.onState === 2">不可用</div> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="地址:">{{ form.address }}</el-form-item> |
| | | <el-form-item label="是否生成异常工单:"> |
| | | <div v-if="form.defaultOrder === 1">是</div> |
| | | <div v-else-if="form.defaultOrder === 2">否</div> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { listMonitor, getMonitor, delMonitor, addMonitor, updateMonitor } from "@/api/platform/monitor"; |
| | | import { listMonitor, getMonitor, delMonitor, addMonitor, updateMonitor } from "@/api/platform/video-monitor"; |
| | | |
| | | export default { |
| | | name: "Monitor", |
| | | dicts: ['sys_normal_disable', 'platform_yes_no','camera_state'], |
| | | data() { |
| | | return { |
| | | totalPosts: 1156, |
| | | totalMembers: 1000, |
| | | postsPercentage: 156, |
| | | totalViews: 75, |
| | | viewsPercentage: 91.36, |
| | | totalPosts: 6250, |
| | | totalMembers: 6008, |
| | | postsPercentage: 51, |
| | | totalViews: 17, |
| | | noStore: 47, |
| | | partStore: 56, |
| | | viewsPercentage: 96.12, |
| | | totalErrors: 0, |
| | | // 遮罩层 |
| | | loading: true, |
| | |
| | | installedTime: null, |
| | | managementUnit: null, |
| | | defaultOrder: null, |
| | | cameraFunType: 1, |
| | | }, |
| | | // 表单参数 |
| | | form: {}, |
| | |
| | | address: null, |
| | | installedTime: null, |
| | | managementUnit: null, |
| | | defaultOrder: "1", |
| | | defaultOrder: null, |
| | | }; |
| | | this.resetForm("form"); |
| | | }, |
| | |
| | | size="mini" |
| | | type="text" |
| | | @click="handleAuditing(scope.row)" |
| | | v-hasPermi="['work:order:audit']" |
| | | >审核</el-button> |
| | | <el-button |
| | | size="mini" |