|
@@ -16,9 +16,9 @@
|
|
@sortChanged="gridSortChange"
|
|
@sortChanged="gridSortChange"
|
|
>
|
|
>
|
|
<div slot="toolbar" class="inner-toolbar">
|
|
<div slot="toolbar" class="inner-toolbar">
|
|
- <div class="toolbar-search">
|
|
|
|
- <en-table-search placeholder="请输入搜索关键字" @search="handlerSearch" />
|
|
|
|
- </div>
|
|
|
|
|
|
+<!-- <div class="toolbar-search">-->
|
|
|
|
+<!-- <en-table-search placeholder="请输入搜索关键字" @search="handlerSearch" />-->
|
|
|
|
+<!-- </div>-->
|
|
<div class="toolbar-btns">
|
|
<div class="toolbar-btns">
|
|
<el-button type="danger" size="mini" @click="clearError">清空日志</el-button>
|
|
<el-button type="danger" size="mini" @click="clearError">清空日志</el-button>
|
|
</div>
|
|
</div>
|
|
@@ -37,6 +37,33 @@
|
|
</ag-grid-layout>
|
|
</ag-grid-layout>
|
|
|
|
|
|
<el-dialog :visible.sync="shopVisible" title="错误详情" class="customer-dialog">
|
|
<el-dialog :visible.sync="shopVisible" title="错误详情" class="customer-dialog">
|
|
|
|
+ <div>
|
|
|
|
+ <table border="1" class="tablewen">
|
|
|
|
+ <tr>
|
|
|
|
+ <td>设备:</td>
|
|
|
|
+ <td><span>{{ deviceTypeGetter({ data: selectedRow }) }} {{ selectedRow.eth_mac }}</span></td>
|
|
|
|
+ <td>设备位置:</td>
|
|
|
|
+ <td>
|
|
|
|
+ <span>{{ selectedRow.full_name }}</span>
|
|
|
|
+ </td>
|
|
|
|
+ </tr>
|
|
|
|
+ <tr>
|
|
|
|
+ <td>类名:</td>
|
|
|
|
+ <td><span>{{ selectedRow.class_name }}</span></td>
|
|
|
|
+ <td>方法名:</td>
|
|
|
|
+ <td><span>{{ selectedRow.method_name }}</span></td>
|
|
|
|
+ </tr>
|
|
|
|
+ <tr>
|
|
|
|
+ <td>异常类型:</td>
|
|
|
|
+ <td><span>{{ selectedRow.exception_name }}</span></td>
|
|
|
|
+ <td>错误时间:</td>
|
|
|
|
+ <td><span>{{ dateValueFormatter({ value: selectedRow.create_time }) }}</span></td>
|
|
|
|
+ </tr>
|
|
|
|
+ </table>
|
|
|
|
+ <div class="td1">错误信息:</div>
|
|
|
|
+ <div class="td2">{{ selectedRow.err_msg }}</div>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="td1">详细错误:</div>
|
|
<el-scrollbar>
|
|
<el-scrollbar>
|
|
<div style="height: 500px;padding:15px" v-html="selectedRow.stack_trace" />
|
|
<div style="height: 500px;padding:15px" v-html="selectedRow.stack_trace" />
|
|
</el-scrollbar>
|
|
</el-scrollbar>
|
|
@@ -49,15 +76,20 @@
|
|
import * as API_ErrorLog from '@/api/ncs_errorlog'
|
|
import * as API_ErrorLog from '@/api/ncs_errorlog'
|
|
import { unixToDate } from '@/utils/Foundation'
|
|
import { unixToDate } from '@/utils/Foundation'
|
|
import { AG_GRID_LOCALE_CN } from '@/utils/AgGridVueLocaleCn'
|
|
import { AG_GRID_LOCALE_CN } from '@/utils/AgGridVueLocaleCn'
|
|
|
|
+import ListFilter from '@/components/AgGridCustomFilter/ListFilter'
|
|
|
|
+import RadioFilter from '@/components/AgGridCustomFilter/RadioFilter'
|
|
export default {
|
|
export default {
|
|
name: 'Index',
|
|
name: 'Index',
|
|
|
|
+ components: { ListFilter, RadioFilter },
|
|
data() {
|
|
data() {
|
|
return {
|
|
return {
|
|
tableData: [],
|
|
tableData: [],
|
|
/** 列表参数 */
|
|
/** 列表参数 */
|
|
params: {
|
|
params: {
|
|
page_size: 20,
|
|
page_size: 20,
|
|
- page_no: 1
|
|
|
|
|
|
+ page_no: 1,
|
|
|
|
+ sort: 'id',
|
|
|
|
+ dir: 'desc'
|
|
},
|
|
},
|
|
pageData: [],
|
|
pageData: [],
|
|
loading: false,
|
|
loading: false,
|
|
@@ -72,7 +104,27 @@ export default {
|
|
localeText: AG_GRID_LOCALE_CN,
|
|
localeText: AG_GRID_LOCALE_CN,
|
|
filterState: null,
|
|
filterState: null,
|
|
rowSelection: null,
|
|
rowSelection: null,
|
|
- selectedRow: {}
|
|
|
|
|
|
+ selectedRow: {},
|
|
|
|
+ /** 设备类型转换数组 **/
|
|
|
|
+ deviceTypeTransfer: [
|
|
|
|
+ { key: '护士主机', value: 1 },
|
|
|
|
+ { key: '医生主机', value: 2 },
|
|
|
|
+ { key: '门口机', value: 3 },
|
|
|
|
+ { key: '病床分机', value: 4 },
|
|
|
|
+ { key: 'LCD走廊屏', value: 5 },
|
|
|
|
+ { key: 'LED点阵屏', value: 6 },
|
|
|
|
+ { key: '移动设备', value: 7 },
|
|
|
|
+ // { key: '护工腕表', value: 8 },
|
|
|
|
+ { key: '病人腕表', value: 9 },
|
|
|
|
+ { key: '手机App', value: 10 },
|
|
|
|
+ { key: '总线转换盒', value: 11 },
|
|
|
|
+ { key: '模拟分机', value: 12 },
|
|
|
|
+ { key: '模拟紧急按钮', value: 13 },
|
|
|
|
+ { key: '模拟门灯', value: 14 },
|
|
|
|
+ { key: '遥控器', value: 15 },
|
|
|
|
+ { key: '信标', value: 16 },
|
|
|
|
+ { key: '看板', value: 17 }
|
|
|
|
+ ]
|
|
}
|
|
}
|
|
},
|
|
},
|
|
computed: {
|
|
computed: {
|
|
@@ -94,17 +146,24 @@ export default {
|
|
resizable: false,
|
|
resizable: false,
|
|
valueGetter: this.hashValueGetter
|
|
valueGetter: this.hashValueGetter
|
|
},
|
|
},
|
|
- { headerName: 'ID', field: 'id', sortable: true, filter: 'agNumberColumnFilter' },
|
|
|
|
|
|
+ { headerName: '标识码', field: 'eth_mac', sortable: true, filter: 'agTextColumnFilter', flex: 1 },
|
|
|
|
+ { headerName: '设备', field: 'device_type', sortable: true, filterFramework: 'ListFilter', flex: 1,
|
|
|
|
+ filterParams: {
|
|
|
|
+ listData: this.deviceTypeTransfer
|
|
|
|
+ },
|
|
|
|
+ valueGetter: this.deviceTypeGetter
|
|
|
|
+ },
|
|
|
|
+ { headerName: '设备位置', field: 'full_name', sortable: true, filter: 'agTextColumnFilter', flex: 1 },
|
|
{ headerName: '类名', field: 'class_name', sortable: true, filter: 'agTextColumnFilter', filterParams: {
|
|
{ headerName: '类名', field: 'class_name', sortable: true, filter: 'agTextColumnFilter', filterParams: {
|
|
debounceMs: 200,
|
|
debounceMs: 200,
|
|
newRowsAction: 'keep'
|
|
newRowsAction: 'keep'
|
|
- }},
|
|
|
|
|
|
+ }, flex: 2 },
|
|
{ headerName: '方法名', field: 'method_name', sortable: true, filter: true, filterParams: {
|
|
{ headerName: '方法名', field: 'method_name', sortable: true, filter: true, filterParams: {
|
|
debounceMs: 200,
|
|
debounceMs: 200,
|
|
newRowsAction: 'keep'
|
|
newRowsAction: 'keep'
|
|
}},
|
|
}},
|
|
- { headerName: '异常类型', field: 'exception_name', sortable: true, filter: true, flex: 1 },
|
|
|
|
- { headerName: '错误信息', field: 'err_msg', sortable: true, filter: true, flex: 1 },
|
|
|
|
|
|
+ // { headerName: '异常类型', field: 'exception_name', sortable: true, filter: true, flex: 1 },
|
|
|
|
+ // { headerName: '错误信息', field: 'err_msg', sortable: true, filter: true, flex: 1 },
|
|
{ headerName: '错误时间', field: 'create_time',
|
|
{ headerName: '错误时间', field: 'create_time',
|
|
valueFormatter: this.dateValueFormatter,
|
|
valueFormatter: this.dateValueFormatter,
|
|
filterParams: {
|
|
filterParams: {
|
|
@@ -113,9 +172,8 @@ export default {
|
|
return (new Date(celldate).getTime() / 1000) - (filterLocalDateAtMidnight.getTime() / 1000)
|
|
return (new Date(celldate).getTime() / 1000) - (filterLocalDateAtMidnight.getTime() / 1000)
|
|
}
|
|
}
|
|
},
|
|
},
|
|
- sortable: true, filter: 'date', flex: 1 },
|
|
|
|
- { headerName: '堆栈跟踪', field: 'stack_trace',
|
|
|
|
- sortable: true, flex: 1 }
|
|
|
|
|
|
+ sortable: true, filter: 'date', flex: 1 }
|
|
|
|
+ // { headerName: '堆栈跟踪', field: 'stack_trace', sortable: true, flex: 1 }
|
|
]
|
|
]
|
|
this.defaultColDef = {
|
|
this.defaultColDef = {
|
|
// filter: 'agTextColumnFilter',
|
|
// filter: 'agTextColumnFilter',
|
|
@@ -214,7 +272,6 @@ export default {
|
|
data_total: response.data_total
|
|
data_total: response.data_total
|
|
}
|
|
}
|
|
this.rowData = [...response.data]
|
|
this.rowData = [...response.data]
|
|
- console.log('rowData', this.rowData)
|
|
|
|
}).catch(() => {
|
|
}).catch(() => {
|
|
this.loading = false
|
|
this.loading = false
|
|
})
|
|
})
|
|
@@ -237,24 +294,27 @@ export default {
|
|
},
|
|
},
|
|
showDetail(row) {
|
|
showDetail(row) {
|
|
this.selectedRow = { ...row.data }
|
|
this.selectedRow = { ...row.data }
|
|
|
|
+ this.getError()
|
|
this.shopVisible = true
|
|
this.shopVisible = true
|
|
},
|
|
},
|
|
|
|
+ getError() {
|
|
|
|
+ const _this = this
|
|
|
|
+ API_ErrorLog.getModel(this.selectedRow.id).then(response => {
|
|
|
|
+ _this.selectedRow.stack_trace = response.stack_trace
|
|
|
|
+ })
|
|
|
|
+ },
|
|
forDate(row, column, cellValue) {
|
|
forDate(row, column, cellValue) {
|
|
return unixToDate(row.create_time)
|
|
return unixToDate(row.create_time)
|
|
},
|
|
},
|
|
testComparator(valueA, valueB, nodeA, nodeB, isInverted) {
|
|
testComparator(valueA, valueB, nodeA, nodeB, isInverted) {
|
|
- console.log('a', new Date(valueA))
|
|
|
|
-
|
|
|
|
if (valueB === null) {
|
|
if (valueB === null) {
|
|
return 0
|
|
return 0
|
|
}
|
|
}
|
|
const cellDate = new Date(valueB)
|
|
const cellDate = new Date(valueB)
|
|
-
|
|
|
|
const day = cellDate.getDate()
|
|
const day = cellDate.getDate()
|
|
const month = cellDate.getMonth()
|
|
const month = cellDate.getMonth()
|
|
const year = cellDate.getFullYear()
|
|
const year = cellDate.getFullYear()
|
|
const cellDateMidNight = new Date(year, month, day)
|
|
const cellDateMidNight = new Date(year, month, day)
|
|
- console.log('b', cellDateMidNight)
|
|
|
|
if (new Date(valueA) < cellDateMidNight) {
|
|
if (new Date(valueA) < cellDateMidNight) {
|
|
return 1
|
|
return 1
|
|
} else if (new Date(valueA) > cellDateMidNight) {
|
|
} else if (new Date(valueA) > cellDateMidNight) {
|
|
@@ -264,7 +324,6 @@ export default {
|
|
}
|
|
}
|
|
},
|
|
},
|
|
gridSortChange(param) {
|
|
gridSortChange(param) {
|
|
- console.log('sortparam', param)
|
|
|
|
const columnState = param.columnApi.getColumnState()
|
|
const columnState = param.columnApi.getColumnState()
|
|
// 排序状态
|
|
// 排序状态
|
|
const sortState = columnState.filter(function(s) {
|
|
const sortState = columnState.filter(function(s) {
|
|
@@ -296,21 +355,16 @@ export default {
|
|
}
|
|
}
|
|
|
|
|
|
this.getList()
|
|
this.getList()
|
|
- console.log(sortState)
|
|
|
|
},
|
|
},
|
|
filterModifed(param) {
|
|
filterModifed(param) {
|
|
- console.log(param)
|
|
|
|
var model = param.api.getFilterModel()
|
|
var model = param.api.getFilterModel()
|
|
- console.log('model', JSON.stringify(model))
|
|
|
|
this.params.filter = JSON.stringify(model)
|
|
this.params.filter = JSON.stringify(model)
|
|
this.getList()
|
|
this.getList()
|
|
},
|
|
},
|
|
numberParser(text) {
|
|
numberParser(text) {
|
|
- console.log(text)
|
|
|
|
return true
|
|
return true
|
|
},
|
|
},
|
|
textCustomComparator(filter, value, text) {
|
|
textCustomComparator(filter, value, text) {
|
|
- console.log('fi', filter)
|
|
|
|
return true
|
|
return true
|
|
},
|
|
},
|
|
hashValueGetter(params) {
|
|
hashValueGetter(params) {
|
|
@@ -319,6 +373,14 @@ export default {
|
|
},
|
|
},
|
|
dateValueFormatter(params) {
|
|
dateValueFormatter(params) {
|
|
return unixToDate(params.value)
|
|
return unixToDate(params.value)
|
|
|
|
+ },
|
|
|
|
+ /** 获取设备类型文字显示,从deviceTypeTransfer 中找出value值对应的key显示出来 */
|
|
|
|
+ deviceTypeGetter(params) {
|
|
|
|
+ const gridVal = params.data.device_type
|
|
|
|
+ if (gridVal) {
|
|
|
|
+ return this.deviceTypeTransfer.filter(p => p.value === gridVal).map(p => p.key)
|
|
|
|
+ }
|
|
|
|
+ return ''
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
@@ -338,5 +400,47 @@ export default {
|
|
align-items: center;
|
|
align-items: center;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+ .tablewen{
|
|
|
|
+ width:100%;
|
|
|
|
+ border-collapse:collapse;
|
|
|
|
+ border: 1px solid #a5b6c8;
|
|
|
|
+ margin-bottom: 30px;
|
|
|
|
+ line-height: 40px;
|
|
|
|
+ }
|
|
|
|
+ .tablewen td{
|
|
|
|
+ font-size: 14px;
|
|
|
|
+ -webkit-margin-before: 0.83em;
|
|
|
|
+ -webkit-margin-after: 0.83em;
|
|
|
|
+ -webkit-margin-start: 0px;
|
|
|
|
+ -webkit-margin-end: 0px;
|
|
|
|
+ font-weight: bold;
|
|
|
|
+ }
|
|
|
|
+ .tablewen td span{
|
|
|
|
+ font-size: 0.8em;
|
|
|
|
+ -webkit-margin-before: 0.83em;
|
|
|
|
+ -webkit-margin-after: 0.83em;
|
|
|
|
+ -webkit-margin-start: 0px;
|
|
|
|
+ -webkit-margin-end: 0px;
|
|
|
|
+ font-weight: bold;
|
|
|
|
+ color: #8c939d;
|
|
|
|
+ margin-left: 5px;
|
|
|
|
+ }
|
|
|
|
+ .td1 {
|
|
|
|
+ font-size: 14px;
|
|
|
|
+ -webkit-margin-before: 0.83em;
|
|
|
|
+ -webkit-margin-after: 0.83em;
|
|
|
|
+ -webkit-margin-start: 0px;
|
|
|
|
+ -webkit-margin-end: 0px;
|
|
|
|
+ font-weight: bold;
|
|
|
|
+ }
|
|
|
|
+ .td2 {
|
|
|
|
+ font-size: 0.9em;
|
|
|
|
+ -webkit-margin-before: 0.93em;
|
|
|
|
+ -webkit-margin-after: 0.93em;
|
|
|
|
+ -webkit-margin-start: 0;
|
|
|
|
+ -webkit-margin-end: 0;
|
|
|
|
+ font-weight: bold;
|
|
|
|
+ color: #8c939d;
|
|
|
|
+ margin-left: 5px;
|
|
|
|
+ }
|
|
</style>
|
|
</style>
|