初始化

This commit is contained in:
2025-11-20 16:20:04 +08:00
commit 4230fa4d27
777 changed files with 232488 additions and 0 deletions

View File

@@ -0,0 +1,413 @@
@{
Layout = null;
}
<!DOCTYPE html>
<html style="overflow: auto;">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>BLW日志</title>
<!-- Vue.js -->
<script src="~/js/vue2.js"></script>
<!-- 引入样式 -->
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<!-- 引入组件库 -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<!-- jQuery -->
<script src="~/js/jquery.min.js"></script>
<!-- 引入第三方库 -->
<script src="~/js/xlsx.mini.min.js"></script>
<style>
* {
margin: 0;
padding: 0;
}
.el-table__empty-block {
height: auto !important;
}
.el-dialog__footer {
text-align: left;
}
.headbox {
/*margin: 10px;*/
}
.seachbox {
margin: 10px;
display: inline-block;
}
.bodybox {
margin: 10px;
text-align: center;
}
.dialogbox .el-table .el-table__cell {
padding: 2px;
}
.el-table .el-table__cell {
padding: 6px 0;
}
.iconClass {
font-size: 20px; /* 加大图标大小 */
font-weight: bold;
}
.el-table-filter {
position: absolute;
}
/* 日志列css */
.cell .logdata {
/* white-space: nowrap; 不换行 */
overflow: hidden; /* 超出部分隐藏 */
text-overflow: ellipsis; /* 显示省略号 */
cursor: pointer;
font-size: 12px;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
line-height: 1;
}
/* 表格行颜色设置 */
.el-table .up-row {
background: #ECF5FF;
}
.el-table .down-row {
background: #FEF0F0;
}
.el-table .error-row {
background: #F78989;
}
/* 折叠面板 */
.collapse-title {
font-weight: bold;
letter-spacing: 0.5px;
}
.data-details {
margin: 10px 0;
padding: 15px;
background: #f8f9fa;
border-radius: 4px;
}
.el-collapse-item__header {
line-height: 16px;
}
.el-collapse-item__content div {
margin: 0 !important;
word-break: break-all !important;
}
/* 日志列css */
.cell .logdata {
/* white-space: nowrap; 不换行 */
overflow: hidden; /* 超出部分隐藏 */
text-overflow: ellipsis; /* 显示省略号 */
cursor: pointer;
font-size: 12px;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
line-height: 1;
}
.cards-container {
display: flex; /* 使用flex布局 */
flex-wrap: wrap; /* 允许换行 */
margin-right: -5px; /* 用负边距抵消最后一行的右边距 */
margin-bottom: -3px; /* 用负边距抵消最后一行的下边距 */
}
.card-item {
width: 468px; /* 卡片宽度固定为500px */
margin-right: 5px; /* 卡片之间的左右间隔 */
margin-bottom: 3px; /* 卡片之间的上下间隔 */
}
/* 清除浮动,如果需要的话 */
.clearfix::after {
content: "";
display: table;
clear: both;
}
.tables-container {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
/* .table {
flex: 1 1 48%;
margin-bottom: 20px;
} */
/* 原有.table样式修改 */
.table {
width: 100%;
margin-bottom: 0; /* 用gap替代margin */
}
/* 当屏幕宽度小于某个值时,让表格堆叠显示 */
/* @@media (max-width: 800px) {
.table {
flex: 0 0 100%;
}
}
*/
/* 新增样式 */
.tables-container {
display: flex;
gap: 20px; /* 左右列间距 */
flex-wrap: wrap;
}
.left-column {
flex: 1;
min-width: 300px; /* 防止过度挤压 */
display: flex;
flex-direction: column;
gap: 20px; /* 内部表格间距 */
}
.right-column {
flex: 1;
min-width: 300px;
}
.tables-container .table {
flex: none !important;
width: 100% !important;
}
/* 响应式适配 */
@@media (max-width: 800px) {
.left-column, .right-column {
flex: 0 0 100%; /* 强制占满宽度 */
min-width: auto;
}
}
</style>
</head>
<body>
<div id="app" v-show="isReady" v-cloak style="width:100%;height:100%;">
<div style="align-content: center; text-align: center; font-size: 22px; margin: 10px;">
<el-button type="primary" v-on:click="logHome" plain circle style="float: left" icon="el-icon-s-home"></el-button>
API调用日志系统
<span style="font-size:12px;color:gray"> --v1.3.0</span>
</div>
<!-- 顶部导航栏以及弹窗 -->
<div class="headbox">
<div class="seachbox">
<span v-if="dialogw != '100%'">
<el-date-picker v-model="pickerDate"
type="datetimerange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="pickerOptions"
style="width: 388px;">
</el-date-picker>
</span>
<span v-else>
<span>
<br />
<span class="demonstration" style="margin: 0 26px 0 27px;font-size:13px;"> 开始日期 </span>
<el-date-picker v-model="pickerDate[0]"
type="datetime" style="width: 217px;"
placeholder="开始日期">
</el-date-picker>
<br />
<span class="demonstration" style="margin: 0 26px 0 27px;font-size:13px;"> 结束日期 </span>
<el-date-picker v-model="pickerDate[1]"
type="datetime" style="width: 217px;"
placeholder="结束日期">
</el-date-picker>
</span>
<br />
<span>
<span style="margin: 0 0 0 16px;"></span>
<el-button type="text" v-on:click="dateMobile(1)">1小时内</el-button>
<el-button type="text" v-on:click="dateMobile(3)">3小时内</el-button>
<el-button type="text" v-on:click="dateMobile(12)">12小时内</el-button>
<el-button type="text" v-on:click="dateMobile(24)">24小时内</el-button>
<el-button type="text" v-on:click="dateMobile(72)">72小时内</el-button>
</span>
<br />
</span>
<el-button type="info" class="el-icon-refresh" v-on:click="showSelectedLogs(1)" :disabled="multipleBtn"
:size="40" circle plain></el-button>
</div>
</div>
<!-- 主体内容 -->
<div class="" style="height: 100%;">
<div class="cards-container">
<el-card v-for="(item, index) in logs"
:key="index"
class="card-item"
v-on:click.native="cardOpenDialog(item)">
<div slot="header" class="clearfix">
<span>{{ item.methodName }}</span>
</div>
<div>
时段总调用:{{ item.totalInvokeCount}} 次
</div>
</el-card>
</div>
<el-dialog :width="dialogw" :visible.sync="elcarddialogVisible" title="调用详情">
<div class="tables-container">
<!-- 左列容器 -->
<div class="left-column">
<!-- 根据小时区分调用数据表格 -->
<el-table :data="selectedTime" border class="table">
<!-- 注意这里数据源改为hourlyInvokeData -->
<el-table-column prop="hour" label="时间段" width="188"></el-table-column>
<el-table-column prop="totalEveryHour_InvokeCount" label="调用数量" width="95"></el-table-column>
</el-table>
<!-- IP 调用数据表格 -->
<el-table :data="selectedItem.ipInvokeData" border class="table">
<el-table-column prop="ip" label="IP" width="188"></el-table-column>
<el-table-column prop="totalIP_InvokeCount" label="调用数量" width="95"></el-table-column>
<el-table-column label="操作" width="66">
<template slot-scope="scope">
<el-button type="info" :size="40" v-on:click="viewIPRowData(scope.row)" icon="el-icon-search" circle plain></el-button>
</template>
</el-table-column>
</el-table>
</div>
<!-- 右列容器 -->
<div class="right-column">
<!-- 酒店代码调用数据表格 -->
<el-table :data="selectedItem.codeInvokeData" border class="table">
<el-table-column prop="hotelNameAndCode" label="酒店" width="188"></el-table-column>
<el-table-column prop="totalHotelCode_InvokeCount" label="调用数量" width="95"></el-table-column>
<el-table-column label="操作" width="66">
<template slot-scope="scope">
<el-button type="info" :size="40" v-on:click="viewCodeRowData(scope.row)" icon="el-icon-search" circle plain></el-button>
</template>
</el-table-column>
</el-table>
</div>
</div>
</el-dialog>
@* <el-dialog :width="dialogw" :visible.sync="elcarddialogVisible" title="调用详情">
<div class="tables-container">
<!-- IP 调用数据表格 -->
<el-table :data="selectedItem.ipInvokeData" border class="table">
<el-table-column prop="ip" label="IP" width="188"></el-table-column>
<el-table-column prop="totalIP_InvokeCount" label="调用数量" width="95"></el-table-column>
<el-table-column label="操作" width="66">
<template slot-scope="scope">
<el-button type="info" :size="40" v-on:click="viewIPRowData(scope.row)" icon="el-icon-search" circle plain></el-button>
</template>
</el-table-column>
</el-table>
<!-- 根据小时区分调用数据表格 -->
<el-table :data="selectedItem.codeInvokeData" border class="table">
<el-table-column prop="timeInterval" label="时间段" width="188"></el-table-column>
<el-table-column prop="totalHotelCode_InvokeCount" label="调用数量" width="95"></el-table-column>
</el-table>
<!-- 酒店代码调用数据表格 -->
<el-table :data="selectedItem.codeInvokeData" border class="table">
<el-table-column prop="hotelNameAndCode" label="酒店" width="188"></el-table-column>
<el-table-column prop="totalHotelCode_InvokeCount" label="调用数量" width="95"></el-table-column>
<el-table-column label="操作" width="66">
<template slot-scope="scope">
<el-button type="info" :size="40" v-on:click="viewCodeRowData(scope.row)" icon="el-icon-search" circle plain></el-button>
</template>
</el-table-column>
</el-table>
</div>
</el-dialog> *@
<el-dialog :width="dialogw" :visible.sync="openRowDialog">
<template v-slot:title>
<span>{{ selectedItem.methodName }}&nbsp;</span>
<el-button type="success" class="el-icon-document" v-on:click="exportExcel"
:size="40" circle plain></el-button>
</template>
<el-table :data="nowMethodValue" style="width: 100%" border ref="logsTable">
<el-table-column prop="methodName" label="接口名称" width="120"></el-table-column>
<el-table-column label="时间差" width="75">
<template slot-scope="scope">
{{ calculateTimeDifference(scope.row.invokStartTime, scope.row.invokEndTime) + 'ms' }}
</template>
</el-table-column>
<el-table-column prop="hotelNameAndCode" label="酒店" width="125"></el-table-column>
<el-table-column prop="roomNumber" label="房间号" width="75"></el-table-column>
<el-table-column label="开始时间" width="100">
<template slot-scope="scope">
<div style="color:#ADADAD; font-size: 13px">
{{ scope.row.invokStartTime }}
</div>
</template>
</el-table-column>
<el-table-column label="结束时间" width="100">
<template slot-scope="scope">
<div style="color:#ADADAD; font-size: 13px">
{{ scope.row.invokEndTime }}
</div>
</template>
</el-table-column>
<el-table-column label="参数" width="120">
<template slot-scope="scope">
<el-popover trigger="click"
placement="right"
width="250">
<div style="font-size: 11px; ">
{{ scope.row.parameters }}
</div>
<div class="logdata" title="" style="color:#ADADAD"
slot="reference">
{{ scope.row.parameters }}
</div>
</el-popover>
</template>
</el-table-column>
<el-table-column prop="remoteIp" label="IP" width="120"></el-table-column>
</el-table>
</el-dialog>
</div>
</div>
<!-- JavaScript引入 -->
<script src="~/js/LogJs/ApiLogIndex.js"></script>
</body>
</html>

View File

@@ -0,0 +1,275 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>端点监控系统</title>
<!-- 引入ElementUI样式 -->
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<style>
* {
box-sizing: border-box;
font-family: 'Segoe UI', 'Microsoft YaHei', sans-serif;
}
body {
max-width: 1440px;
margin: 0 auto;
padding: 20px;
background-color: #f5f7fa;
color: #333;
line-height: 1.6;
}
.app-container {
background: white;
border-radius: 8px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
padding: 20px;
}
.page-title {
color: #2c3e50;
margin-bottom: 20px;
padding-bottom: 15px;
border-bottom: 1px solid #eaeaea;
font-weight: 500;
}
.input-section {
margin-bottom: 25px;
padding: 20px;
border: 1px solid #ebeef5;
border-radius: 4px;
background-color: #fafafa;
}
.form-row {
display: flex;
margin-bottom: 15px;
align-items: center;
}
.form-label {
width: 100px;
text-align: right;
padding-right: 15px;
font-weight: 500;
color: #555;
}
.empty-state {
text-align: center;
padding: 30px;
color: #909399;
}
.status-message {
padding: 10px;
border-radius: 4px;
margin: 10px 0;
}
.status-success {
background-color: #f0f9eb;
color: #67c23a;
border: 1px solid #e1f3d8;
}
.status-error {
background-color: #fef0f0;
color: #f56c6c;
border: 1px solid #fde2e2;
}
.table-container {
margin-top: 20px;
}
.operation-cell {
text-align: center;
}
</style>
</head>
<body>
<div id="app">
<div class="app-container">
<!-- 输入区域 -->
<div class="input-section">
<div class="form-row">
<label class="form-label">IP地址</label>
<el-input v-model="form.ip" placeholder="例如192.168.1.1" style="width: 300px;"></el-input>
<label class="form-label">端口:</label>
<el-input v-model="form.port" placeholder="例如8080" style="width: 300px;"></el-input>
<el-button type="primary" @@click="addEndpoint" icon="el-icon-plus" style="margin-left: 20px;">添加监控地址</el-button>
</div>
<!-- 状态消息 -->
<div v-if="statusMessage" :class="['status-message', statusType === 'success' ? 'status-success' : 'status-error']">
{{ statusMessage }}
</div>
<el-button type="success" @@click="queryEndpoints" icon="el-icon-refresh">更新监控列表</el-button>
</div>
<!-- 表格区域 -->
<div class="table-container">
<el-table :data="endpoints" style="width: 100%" empty-text="暂无监控端点,请添加端点或点击更新列表">
<el-table-column prop="ipAddress" label="IP地址" width="200"></el-table-column>
<el-table-column prop="port" label="端口" width="120"></el-table-column>
<el-table-column prop="addDateTime" label="添加时间"></el-table-column>
<el-table-column label="操作" width="100" class-name="operation-cell">
<template slot-scope="scope">
<el-button type="danger" size="mini" @@click ="removeEndpoint(scope.row)" icon="el-icon-delete">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
<!-- Vue.js -->
<script src="~/js/vue2.js"></script>
<!-- 引入组件库 -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<!-- jQuery -->
<script src="~/js/jquery.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
form: {
ip: '',
port: ''
},
endpoints: [],
statusMessage: '',
statusType: 'success'
},
mounted() {
// 页面加载时自动查询端点列表
this.queryEndpoints();
},
methods: {
// 显示状态消息
showStatus(message, isError = false) {
this.statusMessage = message;
this.statusType = isError ? 'error' : 'success';
// 3秒后自动隐藏
setTimeout(() => {
this.statusMessage = '';
}, 6000);
},
// 添加端点
addEndpoint() {
// 简单验证
if (!this.form.ip || !this.form.port) {
this.showStatus('请输入IP地址和端口', true);
return;
}
let requestData = {
Handler: "add",
DataList: [{
IPAddress: this.form.ip,
Port: this.form.port
}]
};
$.ajax({
url: '/EndPointMonitor/SetData',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(requestData),
success: (response) => {
console.log(response);
this.showStatus(`端点 ${this.form.ip}:${this.form.port} 已成功添加`);
// 清空输入框
this.form.ip = '';
this.form.port = '';
// 刷新列表
this.queryEndpoints();
},
error: (xhr, status, error) => {
console.log(error);
this.showStatus('添加端点时出错: ' + error, true);
},
beforeSend: () => {
console.log('Sending request...');
},
complete: () => {
console.log('Request completed.');
}
});
},
// 查询端点列表
queryEndpoints() {
$.ajax({
url: '/EndPointMonitor/Query',
type: 'GET',
contentType: 'application/json',
data: {},
success: (response) => {
this.endpoints = response || [];
if (this.endpoints.length > 0) {
this.showStatus(`成功加载 ${this.endpoints.length} 个监控端点`);
}
},
error: (xhr, status, error) => {
console.log(error);
this.showStatus('查询列表时出错: ' + error, true);
},
beforeSend: () => {
console.log('Sending request...');
},
complete: () => {
console.log('Request completed.');
}
});
},
// 删除端点
removeEndpoint(endpoint) {
this.$confirm(`确定要删除端点 ${endpoint.ipAddress}:${endpoint.port} 吗?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
let requestData = {
Handler: "remove",
DataList: [{
IPAddress: endpoint.ipAddress,
Port: endpoint.port
}]
};
$.ajax({
url: '/EndPointMonitor/SetData',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(requestData),
success: (response) => {
console.log(response);
this.showStatus(`端点 ${endpoint.ipAddress}:${endpoint.port} 已成功移除`);
// 刷新列表
this.queryEndpoints();
},
error: (xhr, status, error) => {
console.log(error);
this.showStatus('移除端点时出错: ' + error, true);
}
});
}).catch(() => {
// 用户取消删除
});
}
}
});
</script>
</body>
</html>

View File

@@ -0,0 +1,118 @@
@{
Layout = null;
}
<!DOCTYPE html>
<html style="overflow: auto;">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>BLW日志</title>
<!-- Vue.js -->
<script src="~/js/vue2.js"></script>
<!-- 引入样式 -->
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<!-- 引入组件库 -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<!-- jQuery -->
<script src="~/js/jquery.min.js"></script>
<!-- 引入第三方库 -->
<style>
* {
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<div style="align-content: center; text-align: center; font-size: 22px; margin: 10px;">BLW日志平台</div>
<div id="app" v-cloak style="width:100%;">
<br />
<el-button type="success" round plain v-on:click="RCULog" style="margin: 16px;">RCU通讯日志</el-button>
<el-button type="success" round plain v-on:click="AliLog" style="margin: 16px;">语音助手日志</el-button>
<el-button type="success" round plain v-on:click="ApiLog" style="margin: 16px;">API接口日志</el-button>
<el-button type="success" round plain v-on:click="ConverTool" style="margin: 16px;">转换工具</el-button>
<el-button type="success" round plain v-on:click="TestLog" style="margin: 16px;">测试日志</el-button>
<el-button type="success" round plain v-on:click="SwitchLog" style="margin: 16px;">雷达日志</el-button>
<el-button type="success" round plain v-on:click="XlsxTool" style="margin: 16px;">金蝶导出工具</el-button>
<el-button type="success" round plain v-on:click="BLSLog" style="margin: 16px;">BLS日志平台</el-button>
<el-button type="success" round plain v-on:click="IpPort" style="margin: 16px;">IP-Port监控</el-button>
</div>
<script>
var app = new Vue({
el: '#app',
data() {
return {
};
},
watch: {
/* clipboardValue: {
handler: function (newVal, oldVal) {
//console.log(newVal);
if (newVal) {
}
}
},*/
},
methods: {
RCULog(){
window.location.href = "/Log/Index";
},
AliLog(){
window.location.href = "/VoiceLog/Index";
},
ApiLog(){
window.location.href = "/ApiLog/Index";
},
ConverTool(){
window.location.href = "/Tools/Index";
},
TestLog(){
window.location.href = "/TestMachineLog/Index";
},
XlsxTool(){
window.location.href = "/XlsxTool/Index";
},
SwitchLog(){
window.location.href = "http://blv-rd.tech:19059/dbinfolog";
},
BLSLog(){
window.location.href = "http://blv-rd.tech:19060/home";
},
IpPort(){
window.location.href = "/EndPointMonitor/Index";
},
},
created: function () { // 页面创建时执行
},
mounted: function () {
},
beforeDestroy: function () {
},
});
// 页面加载时
</script>
</body>
</html>

View File

@@ -0,0 +1,854 @@
@{
Layout = null;
}
<!DOCTYPE html>
<html style="overflow: auto;">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>BLW日志</title>
<!-- Vue.js -->
<script src="~/js/vue2.js"></script>
<!-- 引入样式 -->
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<!-- 引入组件库 -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<!-- jQuery -->
<script src="~/js/jquery.min.js"></script>
<!-- 引入第三方库 -->
<script src="~/js/echarts.min.js"></script>
<script src="~/js/xlsx.mini.min.js"></script>
<script src="~/lib/microsoft/signalr/dist/browser/signalr.min.js"></script>
<style>
* {
margin: 0;
padding: 0;
}
.el-table__empty-block {
height: auto !important;
}
.el-dialog__footer {
text-align: left;
}
.headbox {
/*margin: 10px;*/
}
.seachbox {
margin: 10px;
display: inline-block;
}
.bodybox {
margin: 10px;
text-align: center;
}
.dialogbox .el-table .el-table__cell {
padding: 2px;
}
.el-table .el-table__cell {
padding: 6px 0;
}
.iconClass {
font-size: 20px; /* 加大图标大小 */
font-weight: bold;
}
/* 日志列css */
.cell .logdata {
/* white-space: nowrap; 不换行 */
overflow: hidden; /* 超出部分隐藏 */
text-overflow: ellipsis; /* 显示省略号 */
cursor: pointer;
font-size: 12px;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
line-height: 1;
}
/* 表格行颜色设置 */
.el-table .up-row {
background: #ECF5FF;
}
.el-table .down-row {
background: #FEF0F0;
}
.el-table .error-row {
background: #F78989;
}
</style>
</head>
<body>
<div id="app" v-show="isReady" v-cloak style="width:100%;">
<div style="align-content: center; text-align: center; font-size: 22px; margin: 10px;">
<el-button type="primary" v-on:click="logHome" plain circle style="float: left" icon="el-icon-s-home"></el-button>
RCU日志追综系统
<span style="font-size:12px;color:gray"> --v1.4.6</span>
</div>
<div id="appleft" style="display: inline-block; float:left; ">
<!-- 顶部导航栏以及弹窗 -->
<div class="headbox">
<div class="seachbox">
<el-button type="warning" v-on:click="openDialog = true" plain round>
监控对象
</el-button>
<el-select v-model="cmdCurrent"
multiple
clearable
collapse-tags
placeholder="请选择命令">
<el-button type="text" v-on:click="allCmdBtn">&nbsp;&nbsp;全选</el-button>
<el-option v-for="cmd in cmdList"
:key="cmd.value"
:label="cmd.label"
:value="cmd.value">
@* <span style="float: left">{{ room.roomno }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">&nbsp;&nbsp;&nbsp;&nbsp;Mac:{{ room.mac }}</span> *@
</el-option>
</el-select>
<span v-if="dialogw != '100%'">
<el-date-picker v-model="pickerDate"
type="daterange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="pickerOptions"
style="width: 230px;">
</el-date-picker>
</span>
<span v-else>
<span v-show="mobileSelectedVis">
<br />
<span class="demonstration" style="margin: 0 26px 0 27px;font-size:13px;"> 开始日期 </span>
<el-date-picker v-model="pickerDate[0]"
type="date" style="width: 217px;"
placeholder="开始日期">
</el-date-picker>
<br />
<span class="demonstration" style="margin: 0 26px 0 27px;font-size:13px;"> 结束日期 </span>
<el-date-picker v-model="pickerDate[1]"
type="date" style="width: 217px;"
placeholder="结束日期">
</el-date-picker>
</span>
<br />
<span>
<span style="margin: 0 0 0 26px;"></span>
<el-button type="text" v-on:click="dateMobile(1)">今天</el-button>
<el-button type="text" v-on:click="dateMobile(3)">3天内</el-button>
<el-button type="text" v-on:click="dateMobile(7)">7天内</el-button>
<el-button type="text" v-on:click="dateMobile(15)">15天内</el-button>
<el-button type="text" v-on:click="dateMobile(30)">30天内</el-button>
</span>
<br />
</span>
<el-button v-show="logs != unll" type="info" class="el-icon-refresh" v-on:click="showSelectedLogs(1)" :disabled="multipleBtn"
:size="40" circle plain></el-button>
<el-button v-show="logs != unll" type="success" class="el-icon-document" v-on:click="exportExcel"
:size="40" circle plain></el-button>
<el-button v-show="logs != unll" type="warning" class="el-icon-picture-outline" v-on:click="echartShow"
:size="40" circle plain></el-button>
<div class="seachbox">
<el-checkbox v-model="displayCheck" style="display:inline-block">列筛选</el-checkbox>
<el-checkbox v-show="displayCheck" :indeterminate="isIndeterminate" v-model="checkAll" v-on:change="handleCheckAllChange" style="display:inline-block">全选</el-checkbox>
</div>
<div class="seachbox" v-show="displayCheck">
<el-checkbox-group v-model="visTabCol" v-on:change="handleCheckedTabChange">
<el-checkbox style="display:inline-block" v-for="tabcol in tabCols" :label="tabcol" :key="tabcol">{{tabcol}}</el-checkbox>
</el-checkbox-group>
</div>
<!-- 弹窗 -->
<el-dialog title="日志监控添加"
:width="dialogw"
:visible.sync="openDialog">
<div v-if="mobileSelectedVis || dialogw != '100%'">
<div class="seachbox">
<el-select v-model="hotelCurrent"
value-key="code"
filterable
clearable
remote
v-on:change="hotelChange"
:remote-method="remoteHotel"
placeholder="请选择酒店">
<el-option v-for="hotel in hotels"
:key="hotel.code"
:label="hotel.name"
:value="hotel">
<span style="float: left">{{ hotel.name }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">&nbsp;&nbsp;&nbsp;&nbsp;Code:{{ hotel.code }}</span>
</el-option>
</el-select>
</div>
<div class="seachbox">
<el-select v-model="roomCurrent"
value-key="roomno"
multiple
filterable
clearable
remote
collapse-tags
:disabled="roomDisable"
:remote-method="remoteRoom"
placeholder="请选择房间">
<el-button type="text" v-on:click="allRoomsBtn">&nbsp;&nbsp;全选房间</el-button>
<el-option v-for="room in rooms"
:key="room.id"
:label="room.roomno"
:value="room">
<span style="float: left">{{ room.roomno }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">&nbsp;&nbsp;&nbsp;&nbsp;Mac:{{ room.mac }}</span>
</el-option>
</el-select>
<div class="seachbox" style="margin-left: 10px">
<el-button type="success" v-on:click="handleAdd" :disabled="btnIntoDisable"
round plain>加入监控</el-button>
</div>
<el-button type="danger" v-on:click="delSelectedLogs" :disabled="multipleBtn"
round plain>删除所选</el-button>
<el-button type="info" class="el-icon-zoom-in" :size="40" v-on:click="stateTable" circle plain v-if="dialogw != '100%'"></el-button>
<el-button type="success" class="el-icon-refresh" :size="40" v-on:click="refreshViewValue" circle plain></el-button>
</div>
</div>
<div style="display:inline" v-else>
<el-button type="success" class="el-icon-refresh" :size="40" v-on:click="refreshViewValue" circle plain></el-button>
</div>
<div style="display:inline" v-if="dialogw == '100%'">
<el-button type="info" class="el-icon-zoom-in" :size="40" v-on:click="stateTable" circle plain></el-button>
<el-button type="success" class="el-icon-sort" :size="40" v-on:click="mobileSelectedVis = !mobileSelectedVis"
circle plain></el-button>
</div>
<div class="dialogbox" style="display: inline-block;width: 100%">
<el-table v-if="dialogw != '100%'"
border
:data="selectHotelRoom"
empty-text="暂无监控对象"
:height="tableHeight - 350"
v-on:selection-change="handleSelectionChange">
<el-table-column prop="IsSelect"
type="selection"
width="50"
align="center"
header-align="center">
</el-table-column>
<el-table-column label="操作" width="158">
<template slot-scope="scope">
<el-button slot="scope.row" type="primary" icon="el-icon-search" v-on:click="showLog(scope.$index, scope.row)"
circle plain></el-button>
<el-popconfirm title="确定取消监控吗?"
v-on:confirm="handleRemove(scope.row)">
<el-button slot="reference" type="danger" icon="el-icon-delete"
circle plain></el-button>
</el-popconfirm>
<el-popconfirm title="确定延长有效期吗?"
v-on:confirm="handleDelayed(scope.row)">
<el-button slot="reference" type="warning" icon="el-icon-refresh-left"
circle plain></el-button>
</el-popconfirm>
</template>
</el-table-column>
<el-table-column prop="hotelNameAndCode" label="酒店" width="188" align="center"
:filter-method="filterHandler" :filters="CreatDataTable.hotel" header-align="center" sortable></el-table-column>
<el-table-column prop="roomNumber" label="房间" width="90" align="center"
:filter-method="filterHandler" :filters="CreatDataTable.room" header-align="center" sortable></el-table-column>
<el-table-column prop="mac" label="Mac地址" width="170" align="center"
header-align="center" sortable></el-table-column>
<el-table-column prop="createDateTime" label="创建时间" width="180" align="center"
header-align="center" sortable></el-table-column>
<el-table-column prop="remainingTime" label="有效期" width="110" align="center"
header-align="center" sortable></el-table-column>
<el-table-column label="TX" width="68" align="center"
header-align="center">
<template slot-scope="scope">
<i v-if="!scope.row.lastData" class="el-icon-loading"></i>
<span v-else>{{ scope.row.tx }}</span>
</template>
</el-table-column>
<el-table-column label="RX" width="68" align="center"
header-align="center">
<template slot-scope="scope">
<i v-if="!scope.row.lastData" class="el-icon-loading"></i>
<span v-else>{{ scope.row.rx }}</span>
</template>
</el-table-column>
<el-table-column label="最后记录" width="110" align="center"
header-align="center">
<template slot-scope="scope">
<i v-if="!scope.row.lastData" class="el-icon-loading"></i>
<span v-else>{{ scope.row.lastData }}</span>
</template>
</el-table-column>
</el-table>
<el-table v-else
border
:data="selectHotelRoom"
empty-text="暂无监控对象"
:height="tableHeight - 350"
v-on:selection-change="handleSelectionChange">
<el-table-column prop="IsSelect"
type="selection"
width="43"
align="center"
header-align="center">
</el-table-column>
<el-table-column label="操作" width="60" align="center" header-align="center">
<template slot-scope="scope">
@* <el-popconfirm title="确定取消监控吗?"
v-on:confirm="handleRemove(scope.row)">
<el-button slot="reference" type="danger" icon="el-icon-delete" size="small"
circle plain></el-button>
</el-popconfirm> *@
<el-button slot="scope.row" type="info" icon="el-icon-search" size="small" v-on:click="showLog(scope.$index, scope.row)"
circle plain></el-button>
<br />
<el-popconfirm title="确定延长有效期吗?"
v-on:confirm="handleDelayed(scope.row)">
<el-button slot="reference" type="warning" icon="el-icon-refresh-left" size="small"
circle plain></el-button>
</el-popconfirm>
</template>
</el-table-column>
<el-table-column label="酒店&房间" width="140" align="center" header-align="center" :filter-method="filterHandlerMobile" :filters="CreatDataTable.hotel">
<template slot-scope="scope">
<p style="font-size:10px">{{scope.row.hotelNameAndCode}}</p>
<hr style="border: none; height: 1px; background-color: #D3DCE6;">
<p>{{scope.row.roomNumber}}</p>
<hr style="border: none; height: 1px; background-color: #D3DCE6;">
<p style="font-size:11px">{{scope.row.mac}}</p>
</template>
</el-table-column>
<el-table-column label="TX/RX" width="77" align="center" header-align="center">
<template slot-scope="scope">
<i v-if="!scope.row.lastData" class="el-icon-loading"></i>
<div v-if="scope.row.lastData">
<p>{{scope.row.tx}}</p>
<hr style="border: none; height: 1px; background-color: #D3DCE6;">
<p>{{scope.row.rx}}</p>
</div>
</template>
</el-table-column>
<el-table-column label="创建&有效&最后" width="155" align="center" header-align="center">
<template slot-scope="scope">
<p style="font-size:11px">{{scope.row.createDateTime}}</p>
<hr style="border: none; height: 1px; background-color: #D3DCE6;">
<p>{{scope.row.remainingTime}}</p>
<hr style="border: none; height: 1px; background-color: #D3DCE6;">
<i v-if="!scope.row.lastData" class="el-icon-loading"></i>
<p v-if="scope.row.lastData" style="font-size:10px">{{scope.row.lastData}}</p>
</template>
</el-table-column>
</el-table>
</div>
<span slot="footer" class="dialog-footer">
<span>
<el-select v-model="cmdCurrent"
multiple
clearable
collapse-tags
placeholder="请选择命令">
<el-button type="text" v-on:click="allCmdBtn">&nbsp;&nbsp;全选</el-button>
<el-option v-for="cmd in cmdList"
:key="cmd.value"
:label="cmd.label"
:value="cmd.value">
</el-option>
</el-select>
</span>
<span v-if="dialogw != '100%'">
<el-date-picker v-model="pickerDate"
type="daterange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="pickerOptions"
style="width: 230px;">
</el-date-picker>
</span>
<span v-else>
<span v-show="mobileSelectedVis">
<br />
<el-date-picker v-model="pickerDate[0]"
type="date" style="width: 217px;"
placeholder="开始日期">
</el-date-picker>
<span class="demonstration">开始日期 </span>
<br />
<el-date-picker v-model="pickerDate[1]"
type="date" style="width: 217px;"
placeholder="结束日期">
</el-date-picker>
<span class="demonstration">结束日期 </span>
</span>
<br />
<span>
<el-button type="text" v-on:click="dateMobile(1)">今天</el-button>
<el-button type="text" v-on:click="dateMobile(3)">3天内</el-button>
<el-button type="text" v-on:click="dateMobile(7)">7天内</el-button>
<el-button type="text" v-on:click="dateMobile(15)">15天内</el-button>
<el-button type="text" v-on:click="dateMobile(30)">30天内</el-button>
</span>
<br />
</span>
<span>
<br v-if="dialogw == '100%'" />
<el-button type="primary" v-on:click="showSelectedLogs(1)" style="margin-left:10px" :disabled="multipleBtn"
round plain>显示日志</el-button>
<el-button type="info" v-on:click="openDialog = false"
round plain>取 消</el-button>
</span>
</span>
</el-dialog>
<!-- 弹窗次级 -->
<el-dialog title="监控房间状态"
:width="dialogw"
:visible.sync="stateVis">
<div style="margin: 0 10px 3px 0;">
<el-button v-show="selectHotelRoom != null" type="success" class="el-icon-refresh" v-on:click="stateTable"
:size="40" circle plain></el-button>
</div>
<div class="dialogbox" style="display: inline-block;width: 100%">
<el-table v-if="dialogw != '100%'"
border
:data="selectHotelRoom"
empty-text="暂无监控对象"
:height="tableHeight - 177">
<el-table-column label="操作" width="66">
<template slot-scope="scope">
<el-button slot="scope.row" type="primary" icon="el-icon-search" v-on:click="showLog(scope.$index, scope.row)"
circle plain></el-button>
</template>
</el-table-column>
<el-table-column prop="hotelNameAndCode" label="酒店" width="188" align="center"
:filter-method="filterHandler" :filters="CreatDataTable.hotel" header-align="center" sortable></el-table-column>
<el-table-column prop="roomNumber" label="房间" width="90" align="center"
:filter-method="filterHandler" :filters="CreatDataTable.room" header-align="center" sortable></el-table-column>
<el-table-column prop="mac" label="Mac地址" width="170" align="center"
header-align="center" sortable></el-table-column>
<el-table-column label="在线" width="70">
<template slot-scope="scope">
<el-tag type="info" effect="plain">
<i v-if="!scope.row.isSupply" class="el-icon-loading iconClass"></i>
<span v-else>
<i v-if="scope.row.isSupply == 'False'" class="el-icon-minus iconClass"></i>
<i v-if="scope.row.isSupply == 'True'" class="el-icon-check iconClass"></i>
<i v-if="scope.row.isSupply != 'True' && scope.row.isSupply != 'False'" class="el-icon-close iconClass"></i>
</span>
</el-tag>
</template>
</el-table-column>
<el-table-column label="取电" width="70">
<template slot-scope="scope">
<el-tag type="info" effect="plain">
<i v-if="!scope.row.TakeCard_Status" class="el-icon-loading iconClass"></i>
<span v-else>
<i v-if="scope.row.TakeCard_Status == 'False'" class="el-icon-minus iconClass"></i>
<i v-if="scope.row.TakeCard_Status == 'True'" class="el-icon-s-opportunity iconClass"></i>
<i v-if="scope.row.TakeCard_Status != 'True' && scope.row.TakeCard_Status != 'False'" class="el-icon-close iconClass"></i>
</span>
</el-tag>
</template>
</el-table-column>
</el-table>
<el-table v-else
border
:data="selectHotelRoom"
empty-text="暂无监控对象"
:height="tableHeight - 233">
<el-table-column label="操作" width="60" align="center" header-align="center">
<template slot-scope="scope">
<el-button slot="scope.row" type="info" icon="el-icon-search" size="small" v-on:click="showLog(scope.$index, scope.row)"
circle plain></el-button>
</template>
</el-table-column>
<el-table-column label="酒店&房间" width="140" align="center" header-align="center" :filter-method="filterHandlerMobile" :filters="CreatDataTable.hotel">
<template slot-scope="scope">
<p style="font-size:10px">{{scope.row.hotelNameAndCode}}</p>
<hr style="border: none; height: 1px; background-color: #D3DCE6;">
<p>{{scope.row.roomNumber}}</p>
<hr style="border: none; height: 1px; background-color: #D3DCE6;">
<p style="font-size:11px">{{scope.row.mac}}</p>
</template>
</el-table-column>
<el-table-column label="在线/取电" width="62" align="center" header-align="center">
<template slot-scope="scope">
<i v-if="!scope.row.isSupply" class="el-icon-loading"></i>
<div v-else>
<i v-if="scope.row.isSupply == 'False'" class="el-icon-minus "></i>
<i v-if="scope.row.isSupply == 'True'" class="el-icon-check "></i>
<i v-if="scope.row.isSupply != 'True' && scope.row.isSupply != 'False'" class="el-icon-close iconClass"></i>
<hr style="border: none; height: 1px; background-color: #D3DCE6;">
<i v-if="scope.row.TakeCard_Status == 'False'" class="el-icon-minus "></i>
<i v-if="scope.row.TakeCard_Status == 'True'" class="el-icon-s-opportunity "></i>
<i v-if="scope.row.TakeCard_Status != 'True' && scope.row.TakeCard_Status != 'False'" class="el-icon-close iconClass"></i>
</div>
</template>
</el-table-column>
</el-table>
</div>
</el-dialog>
</div>
<div class="seachbox"></div>
</div>
<!-- 主体内容 -->
<div class="">
<el-table v-if="dialogw != '100%'"
:data="logs"
ref="logsTable"
border
style="width: 100%; "
empty-text="请选择监控对象"
:row-class-name="tableRowClassName"
:height="tableHeight">
<el-table-column v-if="visTabCol.includes('时间')" label="时间" width="100">
<template slot-scope="scope">
<div style="color:#ADADAD; font-size: 13px">
{{ scope.row.createTime }}
</div>
</template>
</el-table-column>
<el-table-column v-if="visTabCol.includes('酒店名')" label="酒店名" width="150">
<template slot-scope="scope">
<div style="color:#ADADAD; font-size: 12px">
{{ scope.row.hotelNameAndCode }}
</div>
</template>
</el-table-column>
<el-table-column v-if="visTabCol.includes('房间号')" label="房间号" width="85">
<template slot-scope="scope">
<div style="color:#ADADAD; font-size: 12px">
{{ scope.row.roomNo }}
</div>
</template>
</el-table-column>
<el-table-column v-if="visTabCol.includes('Mac地址')" label="Mac地址" width="150">
<template slot-scope="scope">
<div style="color:#ADADAD; font-size: 12px">
{{ scope.row.mac }}
</div>
</template>
</el-table-column>
<el-table-column v-if="visTabCol.includes('主机编号')" label="主机编号" width="130">
<template slot-scope="scope">
<div style="color:#ADADAD; font-size: 12px">
{{ scope.row.hostNumber }}
</div>
</template>
</el-table-column>
<el-table-column v-if="visTabCol.includes('内网IP')" label="内网IP" width="115">
<template slot-scope="scope">
<div style="color:#ADADAD; font-size: 12px">
{{ scope.row.lanIp }}
</div>
</template>
</el-table-column>
<el-table-column v-if="visTabCol.includes('外网IP')" label="外网IP" width="115">
<template slot-scope="scope">
<div style="color:#ADADAD; font-size: 12px">
{{ scope.row.wwwIp }}
</div>
</template>
</el-table-column>
<el-table-column v-if="visTabCol.includes('外网Port')" label="Port" width="65">
<template slot-scope="scope">
<div style="color:#ADADAD; font-size: 12px">
{{ scope.row.wwwPort }}
</div>
</template>
</el-table-column>
<el-table-column v-if="visTabCol.includes('间隔')" label="间隔(ms)" width="85">
<template slot-scope="scope">
<div>
{{ scope.row.timeDifference }}
</div>
</template>
</el-table-column>
<el-table-column v-if="visTabCol.includes('方向')" label="方向文字" width="70">
<template slot-scope="scope">
<div v-if="scope.row.sendOrReceive == '主机->服务器'">
上传
</div>
<div v-else>
下发
</div>
</template>
</el-table-column>
<el-table-column v-if="visTabCol.includes('方向')" label="方向" width="70">
<template slot-scope="scope">
<el-tag type="info"
effect="plain">
<i v-if="scope.row.sendOrReceive == '主机->服务器'" class="el-icon-upload iconClass"></i>
<i v-if="scope.row.sendOrReceive == '服务器->主机'" class="el-icon-download iconClass"></i>
<i v-if="scope.row.sendOrReceive != '服务器->主机' && scope.row.sendOrReceive != '主机->服务器'" class="el-icon-close iconClass"></i>
</el-tag>
</template>
</el-table-column>
<el-table-column v-if="visTabCol.includes('日志')" label="日志" width="80">
<template slot-scope="scope">
<el-popover trigger="click"
placement="right"
width="250">
<div style="font-size: 11px; ">
{{ scope.row.data }}
</div>
<div class="logdata" title="点击复制" style="color:#ADADAD"
slot="reference">
{{ scope.row.data }} @* v-on:click="copyData(scope.row.data)" *@
</div>
</el-popover>
</template>
</el-table-column>
<el-table-column v-if="visTabCol.includes('帧号')" label="帧号" width="80">
<template slot-scope="scope">
<div style="color:#ADADAD">
{{ scope.row.frameNo }}
</div>
</template>
</el-table-column>
<el-table-column v-if="visTabCol.includes('命令')" label="命令" width="125">
<template slot-scope="scope">
<el-popover placement="right"
width="500"
:style="{maxHeight:'92vh', overflowY:'auto'}"
trigger="hover"
v-on:show="analyzeLogs(scope.row)">
<el-table :data="logAnalysisList"
size="small"
:style="{maxHeight:'98vh', overflowY:'auto'}"
border>
<el-table-column width="100" property="key" label="指令编码"></el-table-column>
<el-table-column width="180" property="value" label="内容"></el-table-column>
<el-table-column min-width="140" property="data" label="上报数据"></el-table-column>
</el-table>
<div slot="reference">
<span>{{ scope.row.commandTypeVal }}</span>
<hr style="border: none; height: 1px; background-color: #D3DCE6;">
<span>{{ scope.row.commandType }}</span>
</div>
</el-popover>
</template>
</el-table-column>
</el-table>
<el-table v-else
:data="logs"
ref="logsTable"
border
style="width: 100%; "
empty-text="请选择监控对象"
:row-class-name="tableRowClassName"
:height="tableHeight-80">
<el-table-column v-if="visTabCol.includes('时间')" label="时间" width="90">
<template slot-scope="scope">
<div style="color:#ADADAD; font-size: 11px">
{{ scope.row.createTime }}
</div>
</template>
</el-table-column>
<el-table-column v-if="visTabCol.includes('酒店名')" label="酒店名" width="130">
<template slot-scope="scope">
<div style="color:#ADADAD; font-size: 11px">
{{ scope.row.hotelNameAndCode }}
</div>
</template>
</el-table-column>
<el-table-column v-if="visTabCol.includes('房间号')" label="房间号" width="70">
<template slot-scope="scope">
<div style="color:#ADADAD; font-size: 12px">
{{ scope.row.roomNo }}
</div>
</template>
</el-table-column>
<el-table-column v-if="visTabCol.includes('Mac地址')" label="Mac地址" width="120">
<template slot-scope="scope">
<div style="color:#ADADAD; font-size: 10px">
{{ scope.row.mac }}
</div>
</template>
</el-table-column>
<el-table-column v-if="visTabCol.includes('主机编号')" label="主机编号" width="120">
<template slot-scope="scope">
<div style="color:#ADADAD; font-size: 10px">
{{ scope.row.hostNumber }}
</div>
</template>
</el-table-column>
<el-table-column v-if="visTabCol.includes('IP')" label="IP/Prot" width="98">
<template slot-scope="scope">
<div style="color:#ADADAD; font-size: 11px">
{{ scope.row.lanIp }}: {{ scope.row.lanPort }}
</div>
</template>
</el-table-column>
<el-table-column v-if="visTabCol.includes('方向')" label="方向" width="45">
<template slot-scope="scope">
<el-tag type="info" size="mini"
effect="plain">
<i v-if="scope.row.sendOrReceive == '主机->服务器'" class="el-icon-upload"></i>
<i v-if="scope.row.sendOrReceive == '服务器->主机'" class="el-icon-download"></i>
<i v-if="scope.row.sendOrReceive != '服务器->主机' && scope.row.sendOrReceive != '主机->服务器'" class="el-icon-close"></i>
</el-tag>
</template>
</el-table-column>
<el-table-column v-if="visTabCol.includes('日志')" label="日志" width="75">
<template slot-scope="scope">
<el-popover trigger="click"
placement="right"
width="250">
<div style="font-size: 11px; ">
{{ scope.row.data }}
</div>
<div class="logdata" title="点击复制" style="color:#ADADAD"
slot="reference">
{{ scope.row.data }} @* v-on:click="copyData(scope.row.data)" *@
</div>
</el-popover>
</template>
</el-table-column>
<el-table-column v-if="visTabCol.includes('帧号')" label="帧号 间隔" width="63">
<template slot-scope="scope">
<div>
{{ scope.row.timeDifference }}
</div>
<hr style="border: none; height: 1px; background-color: #D3DCE6;">
<div style="color:#ADADAD">
{{ scope.row.frameNo }}
</div>
</template>
</el-table-column>
<el-table-column v-if="visTabCol.includes('命令')" label="命令" width="125">
<template slot-scope="scope">
<el-popover placement="right"
width="300"
trigger="hover">
<el-table :data="testData"
border>
<el-table-column width="99" property="key" label="指令编码"></el-table-column>
<el-table-column width="200" property="value" label="内容"></el-table-column>
</el-table>
<div slot="reference">
<span>{{ scope.row.commandTypeVal }}</span>
<hr style="border: none; height: 1px; background-color: #D3DCE6;">
<span>{{ scope.row.commandType }}</span>
</div>
</el-popover>
</template>
</el-table-column>
</el-table>
<div class="block" v-show="allPageNum > 0">
<span v-if="dialogw != '100%'">
<el-pagination style="margin:5px 0 0 10px"
background
pager-count="10"
v-on:size-change="handleSizeChange"
v-on:current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[20, 50, 100, 300, 500]"
:page-size="50"
layout="total, sizes, prev, pager, next, jumper"
:total="allPageNum">
</el-pagination>
</span>
<span v-else>
<el-pagination style="margin:5px"
background
small
pager-count="5"
v-on:size-change="handleSizeChange"
v-on:current-change="handleCurrentChange"
:current-page="currentPage"
:page-size="50"
layout="pager, jumper"
:total="allPageNum">
</el-pagination>
</span>
</div>
</div>
</div>
<!-- 圆饼图 v-if="logs != unll" -->
<div v-show="echartVis">
<div style="display:inline-block; width: 51%; height:auto; float:left;margin: 10px 0 0 10px;">
<div id="circular-echart" style="width: 440px; height:188px ; float:left;"></div>
<div id="circular-echart2" style="width: 440px; height:188px ; float:left;"></div>
</div>
<!-- 柱状折线图 -->
<div style="display:inline-block; width: 52%; height:auto; float:left;">
<div id="bar-echart" style="width: 880px; height:233px ; float:left;"></div>
</div>
<!-- 柱状横置图 -->
<div v-show="false" style="display:inline-block; width: 52%; height:auto; float:left;">
<div id="profile-echart" style="width: 880px; height:444px ; float:left;"></div>
</div>
</div>
</div>
@* <script>
let startY = 0; // 记录触摸开始的Y坐标
let isTop = true; // 标记页面是否在顶部
document.addEventListener('touchstart', function (event) {
// 获取第一个触摸点的Y坐标
startY = event.touches.clientY;
// 检查页面是否在顶部
isTop = document.documentElement.scrollTop === 0 || document.body.scrollTop === 0;
});
document.addEventListener('touchmove', function (event) {
// 如果页面在顶部,并且用户正在向下拉动
if (isTop && startY < event.touches.clientY) {
event.preventDefault(); // 阻止默认的下拉刷新行为
}
}, { passive: false });
</script> *@
<!-- JavaScript引入 -->
<script src="~/js/LogJs/LogIndex.js"></script>
@* <script src="~/js/logjs/echarts.js"></script> *@
</body>
</html>

View File

@@ -0,0 +1,41 @@
@{
Layout = null;
}
<!DOCTYPE html>
<html style="overflow: auto;">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>BLW日志</title>
<!-- Vue.js -->
<script src="~/js/vue2.js"></script>
<!-- 引入样式 -->
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<!-- 引入组件库 -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<!-- jQuery -->
<script src="~/js/jquery.min.js"></script>
<!-- 引入第三方库 -->
<style>
* {
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<div style="align-content: center; text-align: center; font-size: 22px; margin: 10px;">PMS调用工具</div>
<div id="app" v-cloak style="width:100%;">
</div>
<script src="~/js/logjs/pmsposttoolsindex.js"></script>
</body>
</html>

View File

@@ -0,0 +1,25 @@
@model ErrorViewModel
@{
ViewData["Title"] = "Error";
}
<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request.</h2>
@if (Model.ShowRequestId)
{
<p>
<strong>Request ID:</strong> <code>@Model.RequestId</code>
</p>
}
<h3>Development Mode</h3>
<p>
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
</p>
<p>
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
It can result in displaying sensitive information from exceptions to end users.
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
and restarting the app.
</p>

View File

@@ -0,0 +1,20 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>BLW_Log</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
<link rel="stylesheet" href="~/BLW_Log.styles.css" asp-append-version="true" />
</head>
<body>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>

View File

@@ -0,0 +1,48 @@
/* Please see documentation at https://learn.microsoft.com/aspnet/core/client-side/bundling-and-minification
for details on configuring this project to bundle and minify static web assets. */
a.navbar-brand {
white-space: normal;
text-align: center;
word-break: break-all;
}
a {
color: #0077cc;
}
.btn-primary {
color: #fff;
background-color: #1b6ec2;
border-color: #1861ac;
}
.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
color: #fff;
background-color: #1b6ec2;
border-color: #1861ac;
}
.border-top {
border-top: 1px solid #e5e5e5;
}
.border-bottom {
border-bottom: 1px solid #e5e5e5;
}
.box-shadow {
box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);
}
button.accept-policy {
font-size: 1rem;
line-height: inherit;
}
.footer {
position: absolute;
bottom: 0;
width: 100%;
white-space: nowrap;
line-height: 60px;
}

View File

@@ -0,0 +1,2 @@
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>

View File

@@ -0,0 +1,321 @@
@{
Layout = null;
}
<!DOCTYPE html>
<html style="overflow: auto;">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>测试日志</title>
<!-- Vue.js -->
<script src="~/js/vue2.js"></script>
<!-- 引入样式 -->
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<!-- 引入组件库 -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<!-- jQuery -->
<script src="~/js/jquery.min.js"></script>
<!-- 引入第三方库 -->
<script src="~/js/echarts.min.js"></script>
<script src="~/js/xlsx.mini.min.js"></script>
<script src="~/lib/microsoft/signalr/dist/browser/signalr.min.js"></script>
<style>
* {
margin: 0;
padding: 0;
}
.el-table__empty-block {
height: auto !important;
}
.el-dialog__footer {
text-align: left;
}
.headbox {
/*margin: 10px;*/
}
.seachbox {
margin: 10px;
display: inline-block;
}
.bodybox {
margin: 10px;
text-align: center;
}
.dialogbox .el-table .el-table__cell {
padding: 2px;
}
.el-table .el-table__cell {
padding: 6px 0;
}
.iconClass {
font-size: 20px; /* 加大图标大小 */
font-weight: bold;
}
/* 日志列css */
.cell .logdata {
/* white-space: nowrap; 不换行 */
overflow: hidden; /* 超出部分隐藏 */
text-overflow: ellipsis; /* 显示省略号 */
cursor: pointer;
font-size: 12px;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
line-height: 1;
}
/* 表格行颜色设置 */
.el-table .up-row {
background: #ECF5FF;
}
.el-table .down-row {
background: #FEF0F0;
}
.el-table .error-row {
background: #F78989;
}
.el-select__tags-text {
max-width: 7em; /* 假设每个汉字宽度大约是1em */
overflow: hidden; /* 隐藏超出部分 */
white-space: nowrap; /* 防止文本换行 */
text-overflow: ellipsis; /* 显示省略号 */
}
.logs-list-div {
color: #888888;
border: 1px solid #E9E9E960;
background-color: #80808030;
transition: all 0.3s ease;
position: relative;
width: auto;
padding: 4px;
height: 112px;
border-radius: 3px;
margin: 4px;
background-color: #f9f9f9;
}
.logs-list-div:hover {
border-color: #409eff;
background-color: #80808010;
/* box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); 可选阴影 */
}
.log {
position: absolute;
font-size: 12px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
strong {
color: #444444; /* 示例:将文字颜色设置为红色 */
font-size: 13px; /* 示例将字体大小设置为18像素 */
}
</style>
</head>
<body>
<div id="app" v-show="isReady" v-cloak style="width:100%;">
<div style="align-content: center; text-align: center; font-size: 22px; margin: 10px;">
<el-button type="primary" v-on:click="logHome" plain circle style="float: left" icon="el-icon-s-home"></el-button>
<span>测试日志</span>
<span style="font-size:12px;color:gray"> --v1.0.5</span>
</div>
<div id="appleft" style="display: inline-block; float:left; ">
<!-- 顶部导航栏以及弹窗 -->
<div class="headbox">
<div class="seachbox">
<span v-if="dialogw != '100%'">
<el-date-picker v-model="pickerDate"
type="daterange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="pickerOptions"
style="width: 230px;">
</el-date-picker>
</span>
<span v-else>
<span v-show="mobileSelectedVis">
<br />
<span class="demonstration" style="margin: 0 10px 0 10px;font-size:13px;">开始日期</span>
<el-date-picker v-model="pickerDate[0]"
type="date" style="width: 217px;"
placeholder="开始日期">
</el-date-picker>
<br />
<span class="demonstration" style="margin: 0 10px 0 10px;font-size:13px;">结束日期</span>
<el-date-picker v-model="pickerDate[1]"
type="date" style="width: 217px;"
placeholder="结束日期">
</el-date-picker>
</span>
<br />
<span>
<span style="margin: 0 0 0 26px;"></span>
<el-button type="text" v-on:click="dateMobile(1)">今天</el-button>
<el-button type="text" v-on:click="dateMobile(3)">3天内</el-button>
<el-button type="text" v-on:click="dateMobile(7)">7天内</el-button>
<el-button type="text" v-on:click="dateMobile(0)">全部</el-button>
</span>
</span>
<br v-if="dialogw == '100%'" />
<span>
<span class="demonstration" style="margin: 0 10px 0 10px;font-size:13px;">测试结果</span>
<el-select v-model="resultCurrent"
multiple
clearable
placeholder="测试结果">
<el-button type="text" v-on:click="allInfoBtn">&nbsp;&nbsp;全选</el-button>
<el-option key="0"
label="失败"
value="0">
</el-option>
<el-option key="1"
label="成功"
value="1">
</el-option>
</el-select>
</span>
<br v-if="dialogw == '100%'" />
<span>
<span class="demonstration" style="margin: 0 10px 0 10px;font-size:13px;">测试信息</span>
<el-select v-model="cmdCurrent"
multiple
clearable
collapse-tags
placeholder="测试信息">
<el-button type="text" v-on:click="allCmdBtn">&nbsp;&nbsp;全选</el-button>
<el-option v-for="cmd in cmdList"
:key="cmd.value"
:label="cmd.label"
:value="cmd.value">
</el-option>
</el-select>
</span>
<br v-if="dialogw == '100%'">
<div v-if="dialogw == '100%'" style="margin: 6px;"></div>
<el-button type="info" class="el-icon-search"
v-on:click="showSelectedLogs(1)"
:size="40" circle plain></el-button>
@* <el-button v-show="logs != unll" type="success" class="el-icon-data-line"
v-on:click="showPic"
:size="40" circle plain></el-button> *@
<span v-if="logs != unll">
<span>
<el-checkbox v-model="checkUUID" style="margin-left: 10px;">UUID去重 &nbsp;&nbsp;</el-checkbox>
</span>
<span>总数</span>
<el-tag type="info">{{ allPageNum }}</el-tag>
</span>
</div>
</div>
<!-- 主体内容 -->
<div class="">
<div v-for="log in logs" :key="log.ID" class="logs-list-div"
style="">
<div class="log-entry">
<span class="log" style="top: 3px;left: 4px;">
ID: <strong>{{ log.ID }}</strong><span style="color:darkgray"> | </span>{{ log.TestTime }}
</span>
<span class="log" style="top: 3px;right: 4px;">
结果:
<strong v-if="log.TestResult == 1" style="color:green;">{{ log.TestResult }}</strong>
<strong v-else style="color:red;">{{ log.TestResult }}</strong>
</span>
<span class="log" style="top: 21px;left: 4px;">
LEV_10: <strong>{{ log.ADC_LEV_10 }}</strong>
</span>
<span class="log" style="top: 21px;right: 4px;">
信息:
<strong v-if="log.TestResult == 1" style="color:green;">{{ log.TestInfo }}</strong>
<strong v-else style="color:red;">{{ log.TestInfo }}</strong>
</span>
<span class="log" style="top: 39px;left: 4px;">
LEV_0&nbsp;&nbsp;: <strong>{{ log.ADC_LEV_0 }}</strong>
</span>
<span class="log" style="top: 39px;right: 4px;">
软<span style="color:darkgray">/</span>硬件版本: {{ log.SoftwareVer }}<span style="color:darkgray"> / </span>{{ log.HardwareVer }}
</span>
<span class="log" style="top: 57px;left: 4px;">
实时值: <strong>{{ log.RealtimeVal }}</strong><span style="color:darkgray"> | </span>背景值: <strong>{{ log.BackgroundVal }}</strong><span style="color:darkgray"> | </span>基底值: <strong>{{ log.BaseVal }}</strong>
</span>
<span class="log" style="top: 93px;right: 4px;">
稳定状态: {{ log.Stabilise }}
</span>
<span class="log" style="top: 75px;left: 4px;">
UUID: {{ log.UUID }}
</span>
<span class="log" style="top: 93px;left: 4px;">
LEL: {{ log.LelPer }}%<span style="color:darkgray"> | </span>温度: {{ log.Temp }}℃<span style="color:darkgray"> | </span>状态机: {{ log.StateMachine }}
</span>
</div>
</div>
</div>
</div>
<el-drawer title="统计图"
:visible.sync="drawerPic"
direction="btt"
size="100%">
</el-drawer>
<!-- 圆饼图 v-if="logs != unll" -->
@* <div v-show="echartVis">
<div style="display:inline-block; width: 51%; height:auto; float:left;margin: 10px 0 0 10px;">
<div id="circular-echart" style="width: 440px; height:188px ; float:left;"></div>
<div id="circular-echart2" style="width: 440px; height:188px ; float:left;"></div>
</div>
<!-- 柱状折线图 -->
<div style="display:inline-block; width: 52%; height:auto; float:left;">
<div id="bar-echart" style="width: 880px; height:233px ; float:left;"></div>
</div>
<!-- 柱状横置图 -->
<div v-show="false" style="display:inline-block; width: 52%; height:auto; float:left;">
<div id="profile-echart" style="width: 880px; height:444px ; float:left;"></div>
</div>
</div> *@
</div>
<!-- JavaScript引入 -->
<script src="~/js/LogJs/testmachinelogindex.js"></script>
</body>
</html>

View File

@@ -0,0 +1,57 @@
@{
Layout = null;
}
<!DOCTYPE html>
<html style="overflow: auto;">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>BLW日志</title>
<!-- Vue.js -->
<script src="~/js/vue2.js"></script>
<!-- 引入样式 -->
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<!-- 引入组件库 -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<!-- jQuery -->
<script src="~/js/jquery.min.js"></script>
<style>
* {
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<div id="app" v-cloak style="width:100%;">
<div style="align-content: center; text-align: center; font-size: 22px; margin: 10px;">
<el-button type="primary" v-on:click="logHome" plain circle style="float: left" icon="el-icon-s-home"></el-button>
小端序转换工具
<span style="font-size:12px;color:gray"> --v1.0.0</span>
</div>
<el-input type="textarea"
:rows="4"
placeholder="请输入内容"
v-model="textareaold">
</el-input>
<el-button type="danger" icon="el-icon-refresh" circle v-on:click="convertText"></el-button>
<el-input type="textarea"
:rows="4"
placeholder="转换结果"
v-model="textareanew">
</el-input>
</div>
<script src="~/js/logjs/toolsindex.js"></script>
</body>
</html>

View File

@@ -0,0 +1,504 @@
@{
Layout = null;
}
<!DOCTYPE html>
<html style="overflow: auto;">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>BLW日志</title>
<!-- Vue.js -->
<script src="~/js/vue2.js"></script>
<!-- 引入样式 -->
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<!-- 引入组件库 -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<!-- jQuery -->
<script src="~/js/jquery.min.js"></script>
<!-- 引入第三方库 -->
<script src="~/js/xlsx.mini.min.js"></script>
<style>
* {
margin: 0;
padding: 0;
}
.el-table__empty-block {
height: auto !important;
}
.el-dialog__footer {
text-align: left;
}
.headbox {
/*margin: 10px;*/
}
.seachbox {
margin: 10px;
display: inline-block;
}
.bodybox {
margin: 10px;
text-align: center;
}
.dialogbox .el-table .el-table__cell {
padding: 2px;
}
.el-table .el-table__cell {
padding: 6px 0;
}
.iconClass {
font-size: 20px; /* 加大图标大小 */
font-weight: bold;
}
.el-table-filter{
position: absolute;
}
/* 日志列css */
.cell .logdata {
/* white-space: nowrap; 不换行 */
overflow: hidden; /* 超出部分隐藏 */
text-overflow: ellipsis; /* 显示省略号 */
cursor: pointer;
font-size: 12px;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
line-height: 1;
}
/* 表格行颜色设置 */
.el-table .up-row {
background: #ECF5FF;
}
.el-table .down-row {
background: #FEF0F0;
}
.el-table .error-row {
background: #F78989;
}
/* 折叠面板 */
.collapse-title {
font-weight: bold;
letter-spacing: 0.5px;
}
.data-details {
margin: 10px 0;
padding: 15px;
background: #f8f9fa;
border-radius: 4px;
}
.el-collapse-item__header {
line-height: 16px;
}
.el-collapse-item__content div{
margin: 0 !important;
word-break: break-all !important;
}
</style>
</head>
<body>
<div id="app" v-show="isReady" v-cloak style="width:100%;height:100%;">
<div style="align-content: center; text-align: center; font-size: 22px; margin: 10px;">
<el-button type="primary" v-on:click="logHome" plain circle style="float: left" icon="el-icon-s-home"></el-button>
语音助手日志系统
<span style="font-size:12px;color:gray"> --v1.3.0</span>
</div>
<!-- 顶部导航栏以及弹窗 -->
<div class="headbox">
<div class="seachbox">
<el-button type="warning" v-on:click="openDialog = true" plain round>
监控对象
</el-button>
<span v-if="dialogw == '100%'" style="margin-left: 6px;">
<el-switch v-if="logs != unll"
v-model="onlyCorrect"
active-color="#FF0000"
inactive-color="#00A000"
:active-text="activeTxt"
:inactive-text="inactiveTxt">
</el-switch>
</span>
<span v-if="dialogw != '100%'">
<el-date-picker v-model="pickerDate"
type="daterange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="pickerOptions"
style="width: 230px;">
</el-date-picker>
<el-switch v-if="logs != unll"
v-model="onlyCorrect"
active-color="#FF0000"
inactive-color="#00A000"
:active-text="activeTxt"
:inactive-text="inactiveTxt">
</el-switch>
</span>
<span v-else>
<span v-show="mobileSelectedVis">
<br />
<span class="demonstration" style="margin: 0 26px 0 27px;font-size:13px;"> 开始日期 </span>
<el-date-picker v-model="pickerDate[0]"
type="date" style="width: 217px;"
placeholder="开始日期">
</el-date-picker>
<br />
<span class="demonstration" style="margin: 0 26px 0 27px;font-size:13px;"> 结束日期 </span>
<el-date-picker v-model="pickerDate[1]"
type="date" style="width: 217px;"
placeholder="结束日期">
</el-date-picker>
</span>
<br />
<span>
<span style="margin: 0 0 0 26px;"></span>
<el-button type="text" v-on:click="dateMobile(1)">今天</el-button>
<el-button type="text" v-on:click="dateMobile(3)">3天内</el-button>
<el-button type="text" v-on:click="dateMobile(7)">7天内</el-button>
<el-button type="text" v-on:click="dateMobile(15)">15天内</el-button>
<el-button type="text" v-on:click="dateMobile(30)">30天内</el-button>
</span>
<br />
</span>
<el-button v-show="logs != unll" type="info" class="el-icon-refresh" v-on:click="showSelectedLogs(1)" :disabled="multipleBtn"
:size="40" circle plain></el-button>
<el-button v-show="logs != unll" type="success" class="el-icon-document" v-on:click="exportExcel"
:size="40" circle plain></el-button>
@* <el-button v-show="logs != unll" type="warning" class="el-icon-picture-outline" v-on:click="echartShow"
:size="40" circle plain></el-button> *@
<!-- 弹窗 -->
<el-dialog title="监控添加"
:width="dialogw"
:visible.sync="openDialog">
<div v-if="mobileSelectedVis || dialogw != '100%'">
<div class="seachbox">
<el-select v-model="hotelCurrent"
value-key="code"
filterable
clearable
remote
v-on:change="hotelChange"
:remote-method="remoteHotel"
placeholder="请选择酒店">
<el-option v-for="hotel in hotels"
:key="hotel.code"
:label="hotel.name"
:value="hotel">
<span style="float: left">{{ hotel.name }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">&nbsp;&nbsp;&nbsp;&nbsp;Code:{{ hotel.code }}</span>
</el-option>
</el-select>
</div>
<div class="seachbox">
<el-select v-model="roomCurrent"
value-key="roomno"
multiple
filterable
clearable
remote
collapse-tags
:disabled="roomDisable"
:remote-method="remoteRoom"
placeholder="请选择房间">
<el-button type="text" v-on:click="allRoomsBtn">&nbsp;&nbsp;全选房间</el-button>
<el-option v-for="room in rooms"
:key="room.id"
:label="room.roomno"
:value="room">
<span style="float: left">{{ room.roomno }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">&nbsp;&nbsp;&nbsp;&nbsp;Mac:{{ room.mac }}</span>
</el-option>
</el-select>
<div class="seachbox" style="margin-left: 10px">
<el-button type="success" v-on:click="handleAdd" :disabled="btnIntoDisable"
round plain>加入监控</el-button>
</div>
<el-button type="danger" v-on:click="delSelectedLogs" :disabled="multipleBtn"
round plain>删除所选</el-button>
<el-button type="success" class="el-icon-refresh" :size="40" v-on:click="refreshViewValue" circle plain></el-button>
</div>
</div>
<div style="display:inline" v-else>
<el-button type="success" class="el-icon-refresh" :size="40" v-on:click="refreshViewValue" circle plain></el-button>
</div>
<div style="display:inline" v-if="dialogw == '100%'">
<el-button type="success" class="el-icon-sort" :size="40" v-on:click="mobileSelectedVis = !mobileSelectedVis"
circle plain></el-button>
</div>
<div class="dialogbox" style="display: inline-block;width: 100%">
<el-table v-if="dialogw != '100%'"
border
:data="selectHotelRoom"
empty-text="暂无监控对象"
:height="tableHeight - 350"
v-on:selection-change="handleSelectionChange">
<el-table-column prop="IsSelect"
type="selection"
width="50"
align="center"
header-align="center">
</el-table-column>
<el-table-column label="操作" width="158">
<template slot-scope="scope">
<el-button slot="scope.row" type="primary" icon="el-icon-search" v-on:click="showLog(scope.$index, scope.row)"
circle plain></el-button>
<el-popconfirm title="确定取消监控吗?"
v-on:confirm="handleRemove(scope.row)">
<el-button slot="reference" type="danger" icon="el-icon-delete"
circle plain></el-button>
</el-popconfirm>
<el-popconfirm title="确定延长有效期吗?"
v-on:confirm="handleDelayed(scope.row)">
<el-button slot="reference" type="warning" icon="el-icon-refresh-left"
circle plain></el-button>
</el-popconfirm>
</template>
</el-table-column>
<el-table-column prop="hotelNameAndCode" label="酒店" width="188" align="center"
:filter-method="filterHandler" :filters="CreatDataTable.hotel" header-align="center" sortable></el-table-column>
<el-table-column prop="roomNumber" label="房间" width="90" align="center"
:filter-method="filterHandler" :filters="CreatDataTable.room" header-align="center" sortable></el-table-column>
<el-table-column prop="createDateTime" label="创建时间" width="180" align="center"
header-align="center" sortable></el-table-column>
<el-table-column prop="remainingTime" label="有效期" width="110" align="center"
header-align="center" sortable></el-table-column>
@* <el-table-column label="最后记录" width="110" align="center"
header-align="center">
<template slot-scope="scope">
<i v-if="!scope.row.lastData" class="el-icon-loading"></i>
<span v-else>{{ scope.row.lastData }}</span>
</template>
</el-table-column> *@
</el-table>
<el-table v-else
border
:data="selectHotelRoom"
empty-text="暂无监控对象"
:height="tableHeight - 350"
v-on:selection-change="handleSelectionChange">
<el-table-column prop="IsSelect"
type="selection"
width="43"
align="center"
header-align="center">
</el-table-column>
<el-table-column label="操作" width="60" align="center" header-align="center">
<template slot-scope="scope">
<el-button slot="scope.row" type="info" icon="el-icon-search" size="small" v-on:click="showLog(scope.$index, scope.row)"
circle plain></el-button>
<br />
<el-popconfirm title="确定延长有效期吗?"
v-on:confirm="handleDelayed(scope.row)">
<el-button slot="reference" type="warning" icon="el-icon-refresh-left" size="small"
circle plain></el-button>
</el-popconfirm>
</template>
</el-table-column>
<el-table-column label="酒店&房间" width="140" align="center" header-align="center" :filter-method="filterHandlerMobile" :filters="CreatDataTable.hotel">
<template slot-scope="scope">
<p style="font-size:10px">{{scope.row.hotelNameAndCode}}</p>
<hr style="border: none; height: 1px; background-color: #D3DCE6;">
<p>{{scope.row.roomNumber}}</p>
@* <hr style="border: none; height: 1px; background-color: #D3DCE6;">
<p style="font-size:11px">{{scope.row.mac}}</p> *@
</template>
</el-table-column>
<el-table-column label="创建&有效" width="155" align="center" header-align="center">
<template slot-scope="scope">
<p style="font-size:11px">{{scope.row.createDateTime}}</p>
<hr style="border: none; height: 1px; background-color: #D3DCE6;">
<p>{{scope.row.remainingTime}}</p>
@* <hr style="border: none; height: 1px; background-color: #D3DCE6;">
<i v-if="!scope.row.lastData" class="el-icon-loading"></i>
<p v-if="scope.row.lastData" style="font-size:10px">{{scope.row.lastData}}</p> *@
</template>
</el-table-column>
</el-table>
</div>
<span slot="footer" class="dialog-footer">
@* <span>
<el-select v-model="cmdCurrent"
multiple
clearable
collapse-tags
placeholder="请选择命令">
<el-button type="text" v-on:click="allCmdBtn">&nbsp;&nbsp;全选</el-button>
<el-option v-for="cmd in cmdList"
:key="cmd.value"
:label="cmd.label"
:value="cmd.value">
</el-option>
</el-select>
</span> *@
<span v-if="dialogw != '100%'">
<el-date-picker v-model="pickerDate"
type="daterange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="pickerOptions"
style="width: 230px;">
</el-date-picker>
</span>
<span v-else>
<span v-show="mobileSelectedVis">
<br />
<el-date-picker v-model="pickerDate[0]"
type="date" style="width: 217px;"
placeholder="开始日期">
</el-date-picker>
<span class="demonstration">开始日期 </span>
<br />
<el-date-picker v-model="pickerDate[1]"
type="date" style="width: 217px;"
placeholder="结束日期">
</el-date-picker>
<span class="demonstration">结束日期 </span>
</span>
<br />
<span>
<el-button type="text" v-on:click="dateMobile(1)">今天</el-button>
<el-button type="text" v-on:click="dateMobile(3)">3天内</el-button>
<el-button type="text" v-on:click="dateMobile(7)">7天内</el-button>
<el-button type="text" v-on:click="dateMobile(15)">15天内</el-button>
<el-button type="text" v-on:click="dateMobile(30)">30天内</el-button>
</span>
<br />
</span>
<span>
<br v-if="dialogw == '100%'" />
<el-button type="primary" v-on:click="showSelectedLogs(1)" style="margin-left:10px" :disabled="multipleBtn"
round plain>显示日志</el-button>
<el-button type="info" v-on:click="openDialog = false"
round plain>取 消</el-button>
</span>
</span>
</el-dialog>
</div>
<div class="seachbox"></div>
</div>
<!-- 主体内容 -->
<div class="" style="height: 100%;">
<el-collapse v-model="activeName">
<!-- 外层循环:按 requestId 分组 -->
<el-collapse-item v-for="(logss, requestId) in logs" :key="requestId" :name="requestId">
<template slot="title">
<span v-if="dialogw != '100%'">
<!-- 总步数小于5 -->
<span v-if="logss[0].lastStep != 5" style="color:#FF0000">
{{ logss[0].hotelName + ' | ' + logss[0].roomNumber + ' | ' + logss[0].platform + ' | ' + logss[0].triggerTime + ' | ' + logss[0].timeDisparity+ 'ms'}}
<span v-for="log in logss" :key="log.id" >
<span v-if="log.step == 4 && log.commandDescription != 'success'" style="color:#FF0000">
{{' | S' + (log.step + 1)}}
</span>
<span v-else style="color:#00A000">
{{' | S' + (log.step + 1)}}
</span>
</span>
</span>
<span v-else style="color:#00A000">
{{ logss[0].hotelName + ' | ' + logss[0].roomNumber + ' | ' + logss[0].platform + ' | ' + logss[0].triggerTime + ' | ' + logss[0].timeDisparity+ 'ms'}}
<span v-for="log in logss" :key="log.id">
<span v-if="log.step == 4 && log.commandDescription != 'success'" style="color:#FF0000">
{{' | S' + (log.step + 1)}}
</span>
<span v-else style="color:#00A000">
{{' | S' + (log.step + 1)}}
</span>
</span>
</span>
</span>
<span v-else>
<span v-if="logss[0].lastStep != 5" style="color:#FF0000">
{{ logss[0].hotelName + ' | ' + logss[0].roomNumber + ' | ' + logss[0].platform }}
<br />
{{logss[0].triggerTime + ' | ' + logss[0].timeDisparity+ 'ms'}}
<span v-for="log in logss" :key="log.id">
<span v-if="log.step == 4 && log.commandDescription != 'success'" style="color:#FF0000">
{{' | S' + (log.step + 1)}}
</span>
<span v-else style="color:#00A000">
{{' | S' + (log.step + 1)}}
</span>
</span>
</span>
<span v-else style="color:#00A000">
{{ logss[0].hotelName + ' | ' + logss[0].roomNumber + ' | ' + logss[0].platform }}
<br />
{{logss[0].triggerTime + ' | ' + logss[0].timeDisparity+ 'ms'}}
<span v-for="log in logss" :key="log.id">
<span v-if="log.step == 4 && log.commandDescription != 'success'" style="color:#FF0000">
{{' | S' + (log.step + 1)}}
</span>
<span v-else style="color:#00A000">
{{' | S' + (log.step + 1)}}
</span>
</span>
</span>
</span>
</template>
<div style="padding: 0 20px;">
<!-- 内层循环:按 step 渲染每个步骤 -->
<div v-for="log in logss" :key="log.id" style="margin: 10px 0; border-bottom: 1px solid #eee; padding-bottom: 5px;">
<div>S{{ log.step + 1 }} - {{ log.triggerTime }}</div>
<div style="color: #A0A0A0; margin-top: 1px; font-size:12px;">
{{ log.commandDescription || 'null' }}
</div>
</div>
</div>
</el-collapse-item>
</el-collapse>
</div>
</div>
<!-- JavaScript引入 -->
<script src="~/js/LogJs/VoiceLogIndex.js"></script>
</body>
</html>

View File

@@ -0,0 +1,246 @@
@{
Layout = null;
}
<!DOCTYPE html>
<html style="overflow: auto;">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>金蝶表格导出日志</title>
<!-- Vue.js -->
<script src="~/js/vue2.js"></script>
<!-- 引入样式 -->
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<!-- 引入组件库 -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<!-- jQuery -->
<script src="~/js/jquery.min.js"></script>
<!-- 引入第三方库 -->
<script src="~/js/echarts.min.js"></script>
<script src="~/js/xlsx.mini.min.js"></script>
<script src="~/lib/microsoft/signalr/dist/browser/signalr.min.js"></script>
<style>
* {
margin: 0;
padding: 0;
}
.el-table__empty-block {
height: auto !important;
}
.el-dialog__footer {
text-align: left;
}
.headbox {
/*margin: 10px;*/
}
.seachbox {
margin: 10px;
display: inline-block;
}
.bodybox {
margin: 10px;
text-align: center;
}
.dialogbox .el-table .el-table__cell {
padding: 2px;
}
.el-table .el-table__cell {
padding: 6px 0;
}
.iconClass {
font-size: 20px; /* 加大图标大小 */
font-weight: bold;
}
/* 日志列css */
.cell .logdata {
/* white-space: nowrap; 不换行 */
overflow: hidden; /* 超出部分隐藏 */
text-overflow: ellipsis; /* 显示省略号 */
cursor: pointer;
font-size: 12px;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
line-height: 1;
}
/* 表格行颜色设置 */
.el-table .up-row {
background: #ECF5FF;
}
.el-table .down-row {
background: #FEF0F0;
}
.el-table .error-row {
background: #F78989;
}
.el-select__tags-text {
max-width: 7em; /* 假设每个汉字宽度大约是1em */
overflow: hidden; /* 隐藏超出部分 */
white-space: nowrap; /* 防止文本换行 */
text-overflow: ellipsis; /* 显示省略号 */
}
.logs-list-div {
color: #888888;
border: 1px solid #E9E9E960;
background-color: #80808030;
transition: all 0.3s ease;
position: relative;
width: auto;
padding: 4px;
height: 112px;
border-radius: 3px;
margin: 4px;
background-color: #f9f9f9;
}
.logs-list-div:hover {
border-color: #409eff;
background-color: #80808010;
/* box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); 可选阴影 */
}
.log {
position: absolute;
font-size: 12px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
strong {
color: #444444; /* 示例:将文字颜色设置为红色 */
font-size: 13px; /* 示例将字体大小设置为18像素 */
}
</style>
</head>
<body>
<div id="app" v-show="isReady" v-cloak style="width:100%;">
<div style="align-content: center; text-align: center; font-size: 22px; margin: 10px;">
<el-button type="primary" v-on:click="logHome" plain circle style="float: left" icon="el-icon-s-home"></el-button>
<span>文档转换工具</span>
<span style="font-size:12px;color:gray"> --v1.0.1</span>
</div>
<div style="margin:20px">
<el-button type="success" v-on:click="GenerateFilesDia" plain>临时生成文件</el-button>
<el-dialog title="请输入密码"
:visible.sync="dialogVisible"
width="60%"
:close-on-click-modal="false"
:before-close="handleClose">
<el-input placeholder="请输入密码" v-model="password" show-password></el-input>
<span slot="footer" class="dialog-footer">
<el-button v-on:click="dialogVisible = false">取 消</el-button>
<el-button type="primary" v-on:click="GenerateFiles">确 定</el-button>
</span>
</el-dialog>
</div>
@* <div id="appleft" style="display: inline-block; float:left; ">
<!-- 顶部导航栏以及弹窗 -->
<div class="headbox">
<div class="seachbox">
<span v-if="dialogw != '100%'">
<el-date-picker v-model="pickerDate"
type="daterange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="pickerOptions"
style="width: 230px;">
</el-date-picker>
</span>
<span v-else>
<span v-show="mobileSelectedVis">
<br />
<span class="demonstration" style="margin: 0 10px 0 10px;font-size:13px;">开始日期</span>
<el-date-picker v-model="pickerDate[0]"
type="date" style="width: 217px;"
placeholder="开始日期">
</el-date-picker>
<br />
<span class="demonstration" style="margin: 0 10px 0 10px;font-size:13px;">结束日期</span>
<el-date-picker v-model="pickerDate[1]"
type="date" style="width: 217px;"
placeholder="结束日期">
</el-date-picker>
</span>
<br />
<span>
<span style="margin: 0 0 0 26px;"></span>
<el-button type="text" v-on:click="dateMobile(1)">今天</el-button>
<el-button type="text" v-on:click="dateMobile(3)">3天内</el-button>
<el-button type="text" v-on:click="dateMobile(7)">7天内</el-button>
<el-button type="text" v-on:click="dateMobile(0)">全部</el-button>
</span>
</span>
<br v-if="dialogw == '100%'" />
<span>
<span class="demonstration" style="margin: 0 10px 0 10px;font-size:13px;">测试结果</span>
<el-select v-model="resultCurrent"
multiple
clearable
placeholder="测试结果">
<el-button type="text" v-on:click="allInfoBtn">&nbsp;&nbsp;全选</el-button>
<el-option key="0"
label="失败"
value="0">
</el-option>
<el-option key="1"
label="成功"
value="1">
</el-option>
</el-select>
</span>
<div v-if="dialogw == '100%'" style="margin: 6px;"></div>
<el-button type="info" class="el-icon-search"
v-on:click="showSelectedLogs(1)"
:size="40" circle plain></el-button>
<span v-if="logs != unll">
<span>总数</span>
<el-tag type="info">{{ allPageNum }}</el-tag>
</span>
</div>
</div>
<!-- 主体内容 -->
<div class="">
<div v-for="log in logs" :key="log.ID" class="logs-list-div"
style="">
</div>
</div>
</div> *@
</div>
<!-- JavaScript引入 -->
<script src="~/js/logjs/xlsxtool.js"></script>
</body>
</html>

View File

@@ -0,0 +1,3 @@
@using BLW_Log
@using BLW_Log.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

View File

@@ -0,0 +1,3 @@
@{
Layout = "_Layout";
}