初始化
This commit is contained in:
921
Face.Web/Areas/App/Views/Log/FaceStatusHistoryLog.cshtml
Normal file
921
Face.Web/Areas/App/Views/Log/FaceStatusHistoryLog.cshtml
Normal file
@@ -0,0 +1,921 @@
|
||||
@{
|
||||
ViewBag.Title = "FaceStatusHistoryLog";
|
||||
Layout = "~/Areas/App/Views/Shared/_Layout.cshtml";
|
||||
}
|
||||
<style>
|
||||
.table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td {
|
||||
padding: 0px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
.table > tbody > tr > td, .table > tbody > tr > th, .table > tfoot > tr > td, .table > tfoot > tr > th, .table > thead > tr > td, .table > thead > tr > th {
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
#order {
|
||||
border-top: solid 2px #ddd;
|
||||
}
|
||||
|
||||
.chaxun {
|
||||
text-indent: 5px;
|
||||
}
|
||||
|
||||
.PagedList-skipToLast page-item {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
<link href="~/Theme/css/plugins/datapicker/datepicker3.css" rel="stylesheet">
|
||||
<div class="content-wrapper">
|
||||
<section class="content" style="padding:0px;">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<!-- Default box -->
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<span style="font-size:30px">所有人脸机在线状态变化历史</span>
|
||||
<div class="card-tools">
|
||||
<button type="button" class="btn btn-tool" data-card-widget="collapse" title="Collapse"></button>
|
||||
<button type="button" class="btn btn-tool" data-card-widget="remove" title="Remove">
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@*条件筛选放在card body部分*@
|
||||
<div class="card-body col-sm-12">
|
||||
<div class="form-horizontal">
|
||||
|
||||
@*<div class="form-group row">
|
||||
<div class="col-sm-offset-2 col-sm-10">
|
||||
<div class="checkbox">
|
||||
<label class="checkbox-inline">
|
||||
<input type="checkbox" id="inlineStatusEventCheck0" name="StatusEventReasonCheck" value="0">第一次OnOpen
|
||||
</label>
|
||||
<label class="checkbox-inline">
|
||||
<input type="checkbox" id="inlineStatusEventCheck1" name="StatusEventReasonCheck" value="1">链路OnError
|
||||
</label>
|
||||
<label class="checkbox-inline">
|
||||
<input type="checkbox" id="inlineStatusEventCheck2" name="StatusEventReasonCheck" value="2">链路OnClose
|
||||
</label>
|
||||
<label class="checkbox-inline">
|
||||
<input type="checkbox" id="inlineStatusEventCheck3" name="StatusEventReasonCheck" value="3">链路重新OnOpen
|
||||
</label>
|
||||
<label class="checkbox-inline">
|
||||
<input type="checkbox" id="inlineStatusEventCheck4" name="StatusEventReasonCheck" value="4">Ping统计状态反转
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>*@
|
||||
|
||||
|
||||
<div class="form-group row">
|
||||
<div class="col-md-10 col-sm-12">
|
||||
<div class="row">
|
||||
<div class="col-md-5 col-sm-12">
|
||||
<button type="button" class="btn btn-default" onclick="setDateRange(0);">今天</button>
|
||||
<button type="button" class="btn btn-default" onclick="setDateRange(1);">昨天</button>
|
||||
<button type="button" class="btn btn-default" onclick="setDateRange(2);">近三天</button>
|
||||
<button type="button" class="btn btn-default" onclick="setDateRange(3);">近一周</button>
|
||||
<button type="button" class="btn btn-default" onclick="setDateRange(4);">本月</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group row">
|
||||
<label for="" class="col-md-2 col-sm-12 col-form-label">时间范围</label>
|
||||
<div class="col-md-10 col-sm-12">
|
||||
<div class="row">
|
||||
<div class="col-md-5 col-sm-12">
|
||||
<div class="input-group mb-3">
|
||||
<input type="text" class="input-sm form-control mytimer" name="start" id="startTs" readonly="">
|
||||
<span class="input-group-btn" style="width: 25%">
|
||||
<button class="btn default" type="button">
|
||||
<i class="fa fa-calendar-alt"></i>
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-2 col-sm-12">至</div>
|
||||
<div class="col-md-5 col-sm-12">
|
||||
<div class="input-group mb-3">
|
||||
<input type="text" class="input-sm form-control mytimer" name="end" id="endTs" readonly="">
|
||||
<span class="input-group-btn" style="width: 25%">
|
||||
<button class="btn default" type="button">
|
||||
<i class="fa fa-calendar-alt"></i>
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="form-group row">
|
||||
<label for="txtOpname" class="col-md-2 col-sm-12 col-form-label">人脸机序列号</label>
|
||||
<div class="col-md-10 col-sm-12">
|
||||
<input type="text" class="form-control" id="txtOpname" placeholder="人脸机序列号">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-lg btn-default" onclick="refreshChart();" style="float:right;">查询</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@*内容筛选*@
|
||||
<div class="ibox-content" style="padding:0px;">
|
||||
<div class="col-sm-12 col-md-12">
|
||||
<div class="ibox float-e-margins ">
|
||||
<div class="ibox-title" style="padding: 5px 15px; min-height:auto;"></div>
|
||||
<div class="ibox-content " style="padding: 5px 15px;">
|
||||
|
||||
<div id="tableallrecordscontainer" style="overflow-y:auto;max-height:500px;">
|
||||
<table id="tableallrecordsforclick" class="table table-striped table-bordered table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序列号</th>
|
||||
<th>酒店</th>
|
||||
<th>房间</th>
|
||||
<th>cnt</th>
|
||||
<th>当前状态</th>
|
||||
<th>在线时长</th>
|
||||
<th>离线时长</th>
|
||||
<th>离线时间比例</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tablebodyallrecordsforclick"></tbody>
|
||||
<tfoot></tfoot>
|
||||
</table>
|
||||
</div>
|
||||
<div id="tablesinlerecordcontainer" style="overflow-y:auto;max-height:500px;">
|
||||
<table id="tablesinglerecordrawevents" class="table table-striped table-bordered table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>序列号</th>
|
||||
<th>厂家</th>
|
||||
<th>触发后状态</th>
|
||||
<th>触发时间</th>
|
||||
<th>触发原因</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tablebodysinglerecordrawevents"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div id="chartcanvassinglecounterperhourcontainer" class="chart">
|
||||
<canvas id="singleLineCounterPerHourChart" style="max-height:600px;" width="800" height="300"></canvas>
|
||||
</div>
|
||||
<div id="chartcanvassinglecontainer" class="chart">
|
||||
<canvas id="singleLineChart" style="max-height:300px;" width="800" height="200"></canvas>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<script src="~/Content/NewFrame/plugins/chart.js/Chart.js"></script>
|
||||
<script src="~/Theme/js/plugins/datapicker/bootstrap-datepicker.js"></script>
|
||||
<script src="~/Theme/js/plugins/datapicker/locales/bootstrap-datepicker.zh-CN.js"></script>
|
||||
<script src="~/Plugin/allPages.js"></script>
|
||||
<script>
|
||||
const sampleIntv = 1000;//1秒 //1000 * 60;//1分钟 //1000 * 60 * 6;//6分钟
|
||||
const hourIntv = 1000*60*60;//1小时
|
||||
|
||||
$(function () {
|
||||
var inParam = getQueryVariable("sn");
|
||||
if (inParam) {
|
||||
$("#txtOpname").val = inParam
|
||||
//search('/App/Face/InquireFaceLogAll', 0, 16, 1, {
|
||||
// FaceName: inParam
|
||||
//});
|
||||
}
|
||||
else {
|
||||
//search('/App/Face/InquireFaceLogAll');
|
||||
}
|
||||
});
|
||||
if ($(document).width() >= 764) {
|
||||
}
|
||||
else {
|
||||
$(".content-wrapper *").css("font-size", "10px");
|
||||
}
|
||||
|
||||
$('.mytimer').datepicker({
|
||||
language: "zh-CN",//语言
|
||||
todayBtn: "linked",//今日按钮
|
||||
autoclose: true,//选择后关闭日期选择
|
||||
format: "yyyy-mm-dd",//日期格式
|
||||
});
|
||||
|
||||
|
||||
//计数排序表
|
||||
var gCacheDataArray = [];//raw recs of counter
|
||||
|
||||
//单个事件表
|
||||
var gMySingleCounterPerHourChart = null;
|
||||
var gSingleCounterPerHourCacheDataArray = []; //raw recs of events
|
||||
var gSingleCounterPerHourCacheRangeArray = []; //range array of whole time period
|
||||
//单个事件表
|
||||
var gMySingleChart = null;
|
||||
var gSingleCacheRangeArray = []; //range array of selected time period
|
||||
var gSingleCacheChartLabelArray = [];
|
||||
var gSingleCacheChartDataArray = [];
|
||||
|
||||
function clearSinglelineCanvas() {
|
||||
gMySingleChart = null;
|
||||
var containerDom = document.querySelector("#chartcanvassinglecontainer");
|
||||
var canvasDom = document.querySelector("#singleLineChart");
|
||||
if (canvasDom) {
|
||||
containerDom.removeChild(canvasDom);
|
||||
containerDom.innerHTML = '<canvas id="singleLineChart" style="max-height:300px;" width="800" height="200"></canvas>';
|
||||
}
|
||||
};
|
||||
function clearSinglelineCounterPerHourCanvas() {
|
||||
gMySingleCounterPerHourChart = null;
|
||||
var containerDom = document.querySelector("#chartcanvassinglecounterperhourcontainer");
|
||||
var canvasDom = document.querySelector("#singleLineCounterPerHourChart");
|
||||
if (canvasDom) {
|
||||
containerDom.removeChild(canvasDom);
|
||||
containerDom.innerHTML = '<canvas id="singleLineCounterPerHourChart" style="max-height:800px;" width="800" height="600"></canvas>';
|
||||
}
|
||||
}
|
||||
|
||||
function refreshTableWithCacheData() {
|
||||
let tarTbody = document.querySelector("#tablebodyallrecordsforclick");
|
||||
tarTbody.innerHTML = "";
|
||||
|
||||
window.setTimeout(function () {
|
||||
let tarTB = document.querySelector("#tablebodyallrecordsforclick")
|
||||
let trs = '';
|
||||
for (let i = 0; i < gCacheDataArray.length; i++) {
|
||||
|
||||
if (gCacheDataArray[i].currentstatus === '离线') {
|
||||
trs += '<tr style="color:crimson;">';
|
||||
}
|
||||
else {
|
||||
trs += '<tr>';
|
||||
}
|
||||
|
||||
trs += '<td>' + '<a style="text-decoration:underline;cursor:hand;" onclick="onShowSingleSN(this);" data-target="' + gCacheDataArray[i].SN + '">'
|
||||
trs += gCacheDataArray[i].SN + '</a>';
|
||||
trs += '<div>' + gCacheDataArray[i].Factory + '</div>' + '</td>';
|
||||
|
||||
trs += '<td>' + gCacheDataArray[i].hotel + '</td>';
|
||||
trs += '<td>' + gCacheDataArray[i].room + '</td>';
|
||||
trs += '<td>' + gCacheDataArray[i].cnt + '</td>';
|
||||
|
||||
trs += '<td>' + gCacheDataArray[i].currentstatus + '</td>';
|
||||
|
||||
|
||||
trs += '<td>' + gCacheDataArray[i].onlinetime + '</td>';
|
||||
trs += '<td>' + gCacheDataArray[i].offlinetime + '</td>';
|
||||
trs += '<td>' + gCacheDataArray[i].offrateperc + '</td>';
|
||||
trs += '</tr>';
|
||||
}
|
||||
tarTB.innerHTML = trs;
|
||||
}, 0);
|
||||
}
|
||||
|
||||
function refreshSingleTableWithCacheData() {
|
||||
let tarTbody = document.querySelector("#tablebodysinglerecordrawevents");
|
||||
tarTbody.innerHTML = "";
|
||||
|
||||
window.setTimeout(function () {
|
||||
let tarTB = document.querySelector("#tablebodysinglerecordrawevents")
|
||||
let trs = '';
|
||||
for (let i = 0; i < gSingleCounterPerHourCacheDataArray.length; i++) {
|
||||
trs += '<tr>';
|
||||
trs += '<td>' + gSingleCounterPerHourCacheDataArray[i].ID + '</td>';
|
||||
trs += '<td>' + gSingleCounterPerHourCacheDataArray[i].SN + '</td>';
|
||||
trs += '<td>' + gSingleCounterPerHourCacheDataArray[i].Factory + '</td>';
|
||||
trs += '<td>' + gSingleCounterPerHourCacheDataArray[i].Status + '</td>';
|
||||
trs += '<td>' + convertMVCDateToString(gSingleCounterPerHourCacheDataArray[i].CreateTime) + '</td>';
|
||||
trs += '<td>' + gSingleCounterPerHourCacheDataArray[i].Reason + '</td>';
|
||||
trs += '</tr>';
|
||||
}
|
||||
tarTB.innerHTML = trs;
|
||||
}, 0);
|
||||
}
|
||||
|
||||
//选中一个设备,显示时间范围内的计数
|
||||
function onShowSingleSN(curDom) {
|
||||
var tarSn = curDom.dataset.target;
|
||||
|
||||
clearSinglelineCounterPerHourCanvas();
|
||||
|
||||
var stTime = $("#startTs").val();
|
||||
var edTime = $("#endTs").val();
|
||||
|
||||
var arrResons = [0,1,2,3,4];
|
||||
/*$('input[name="StatusEventReasonCheck"]:checked').each(function () {
|
||||
arrResons.push($(this).val());
|
||||
});*/
|
||||
|
||||
|
||||
let data = {
|
||||
sn: tarSn,
|
||||
st: stTime,
|
||||
ed: edTime,
|
||||
arrReason: arrResons,
|
||||
page: 0
|
||||
};
|
||||
|
||||
sendRequestSingleCounterPerHour(data, function () {
|
||||
//显示原始事件表格
|
||||
refreshSingleTableWithCacheData();
|
||||
|
||||
|
||||
//显示次数表
|
||||
const ctx = document.getElementById('singleLineCounterPerHourChart');
|
||||
|
||||
|
||||
var tmpStMsTime = 0, tmpEdMsTime = 0;
|
||||
var labelLen = 0;
|
||||
var tmpObj = getTimePeriodOfSingleData();
|
||||
tmpStMsTime = tmpObj.stMsTime;
|
||||
tmpEdMsTime = tmpObj.edMsTime;
|
||||
labelLen = Math.ceil((tmpEdMsTime - tmpStMsTime) / hourIntv) + 1; //24 range need 25 break point.
|
||||
|
||||
var rangeArr = [];
|
||||
var labelArr = [];
|
||||
for (let i = 0; i < labelLen; i++) {
|
||||
var tmpDt = new Date();
|
||||
var intTime = tmpStMsTime + i * hourIntv;
|
||||
tmpDt.setTime(intTime);
|
||||
labelArr.push(tmpDt.toLocaleString('zh-CN'));
|
||||
rangeArr.push({ pos: intTime, cnt: 0});
|
||||
}
|
||||
for (var i = 0; i < gSingleCounterPerHourCacheDataArray.length; i++) {
|
||||
var ptIntTime = convertMVCDateToInt(gSingleCounterPerHourCacheDataArray[i].CreateTime);
|
||||
|
||||
//对每一个记录,放到小时区间里面去添加触发次数
|
||||
let dupPos = -1;
|
||||
for (let k = 1; k < rangeArr.length; k++) {
|
||||
if (ptIntTime >= rangeArr[k - 1].pos && ptIntTime < rangeArr[k].pos) {
|
||||
rangeArr[k - 1].cnt++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
var dataArr = rangeArr.map(x => x.cnt);
|
||||
gMySingleCounterPerHourChart = new Chart(ctx, {
|
||||
type: 'line',
|
||||
data: {
|
||||
labels: labelArr,
|
||||
datasets: [{
|
||||
label: tarSn + '设备历史事件次数',
|
||||
data: dataArr,
|
||||
fill: false,
|
||||
borderColor: 'rgb(75, 192, 192)',
|
||||
tension: 0.1
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
scales: {
|
||||
yAxes: [{
|
||||
ticks: {
|
||||
beginAtZero: true
|
||||
}
|
||||
}]
|
||||
},
|
||||
onClick: (e) => {
|
||||
const canvasPosition = Chart.helpers.getRelativePosition(e, gMySingleCounterPerHourChart);
|
||||
|
||||
// Substitute the appropriate scale IDs
|
||||
let dataX = gMySingleCounterPerHourChart.scales["x-axis-0"].getValueForPixel(canvasPosition.x);
|
||||
|
||||
let lowPos = dataX - 1;
|
||||
let highPos = dataX + 1;
|
||||
if (lowPos <= 0)
|
||||
lowPos = 0;
|
||||
if (highPos >= rangeArr.length)
|
||||
highPos = rangeArr.length;
|
||||
|
||||
clearSinglelineCanvas();
|
||||
|
||||
//截取老的range记录中某一段形成新的range记录
|
||||
gSingleCacheRangeArray = [];
|
||||
let lowPt = rangeArr[lowPos].pos;
|
||||
let highPt = rangeArr[highPos].pos;
|
||||
let lowStatus = 0;
|
||||
let highStatus = 0;
|
||||
//新range的第一个break point
|
||||
for (let i = 0; i < gSingleCounterPerHourCacheRangeArray.length; i++) {
|
||||
if (lowPt < gSingleCounterPerHourCacheRangeArray[i].brk) {
|
||||
lowStatus = gSingleCounterPerHourCacheRangeArray[i - 1].stat;
|
||||
break;
|
||||
}
|
||||
}
|
||||
gSingleCacheRangeArray.push({ brk: lowPt, stat: lowStatus });
|
||||
//新range的中间break point
|
||||
for (let j = 0; j < gSingleCounterPerHourCacheRangeArray.length; j++) {
|
||||
if (gSingleCounterPerHourCacheRangeArray[j].brk >= lowPt && gSingleCounterPerHourCacheRangeArray[j].brk <= highPt) {
|
||||
gSingleCacheRangeArray.push({
|
||||
brk: gSingleCounterPerHourCacheRangeArray[j].brk,
|
||||
stat: gSingleCounterPerHourCacheRangeArray[j].stat});
|
||||
}
|
||||
}
|
||||
//新range的最后一个break point
|
||||
for (let i = 0; i < gSingleCounterPerHourCacheRangeArray.length; i++) {
|
||||
if (highPt < gSingleCounterPerHourCacheRangeArray[i].brk) {
|
||||
highStatus = gSingleCounterPerHourCacheRangeArray[i - 1].stat;
|
||||
break;
|
||||
}
|
||||
}
|
||||
gSingleCacheRangeArray.push({ brk: highPt, stat: highStatus });
|
||||
|
||||
|
||||
//使用新的range来插值
|
||||
gSingleCacheChartLabelArray = [];
|
||||
gSingleCacheChartDataArray = [];
|
||||
var pointsLen = Math.floor((highPt - lowPt) / sampleIntv);
|
||||
for (let i = 0; i < pointsLen; i++) {
|
||||
var tmpDt = new Date();
|
||||
tmpDt.setTime(lowPt + i * 1000);
|
||||
gSingleCacheChartLabelArray.push(tmpDt.toLocaleString('zh-CN'));
|
||||
}
|
||||
for (let j = 0; j < pointsLen; j++) {
|
||||
let curVal = 0;
|
||||
let curPt = lowPt + j * 1000;
|
||||
for (let k = 1; k <= gSingleCacheRangeArray.length; k++) {
|
||||
if (curPt < gSingleCacheRangeArray[k].brk && curPt >= gSingleCacheRangeArray[k - 1].brk) {
|
||||
curVal = gSingleCacheRangeArray[k - 1].stat;
|
||||
break;
|
||||
}
|
||||
}
|
||||
gSingleCacheChartDataArray.push(curVal);
|
||||
}
|
||||
|
||||
|
||||
//使用插值数组来显示
|
||||
refreshWholeTimePeriodSingleChart(tarSn, 0, gSingleCacheChartDataArray.length);
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function getTimePeriodOfSingleData()
|
||||
{
|
||||
var tmpStMsTime = 0, tmpEdMsTime = 0;
|
||||
var spanMs = 0;
|
||||
var labelLen = 0;
|
||||
var stTime = $("#startTs").val();
|
||||
var edTime = $("#endTs").val();
|
||||
var stArr = stTime.split('-').map(it => parseInt(it, 10));
|
||||
var edArr = edTime.split('-').map(it => parseInt(it, 10));
|
||||
var tmpSt = new Date(stArr[0], stArr[1] - 1, stArr[2], 0, 0, 0, 0);
|
||||
var tmpEd = new Date(edArr[0], edArr[1] - 1, edArr[2], 23, 59, 59, 0);
|
||||
tmpStMsTime = tmpSt.getTime();
|
||||
tmpEdMsTime = tmpEd.getTime();
|
||||
spanMs = tmpEdMsTime - tmpStMsTime;
|
||||
labelLen = Math.floor(spanMs / sampleIntv);
|
||||
|
||||
return {
|
||||
stMsTime: tmpStMsTime,
|
||||
edMsTime: tmpEdMsTime,
|
||||
xLen: labelLen
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
function refreshWholeTimePeriodSingleChart(singleSn, low, high) {
|
||||
const ctx = document.getElementById('singleLineChart');
|
||||
|
||||
var labelArr = [];
|
||||
var dataArr = [];
|
||||
labelArr = gSingleCacheChartLabelArray;
|
||||
dataArr = gSingleCacheChartDataArray;
|
||||
|
||||
gMySingleChart = new Chart(ctx, {
|
||||
type: 'line',
|
||||
data: {
|
||||
labels: labelArr,
|
||||
datasets: [{
|
||||
label: singleSn + '设备在线历史状态',
|
||||
data: dataArr,
|
||||
fill: false,
|
||||
borderColor: 'rgb(75, 192, 192)',
|
||||
tension: 0.1
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
/*responsive: true,*/
|
||||
maintainAspectRatio:false,
|
||||
scales: {
|
||||
yAxes: [{
|
||||
ticks: {
|
||||
beginAtZero: true
|
||||
}
|
||||
}]
|
||||
},
|
||||
onClick: (e) => {
|
||||
const canvasPosition = Chart.helpers.getRelativePosition(e, gMySingleChart);
|
||||
|
||||
// Substitute the appropriate scale IDs
|
||||
dataX = gMySingleChart.scales["x-axis-0"].getValueForPixel(canvasPosition.x);
|
||||
|
||||
var newRangeLow = dataX - 1800;
|
||||
var newRangeHigh = dataX + 1800;
|
||||
if (newRangeLow <= 0)
|
||||
newRangeLow = 0;
|
||||
if (newRangeHigh >= gSingleCacheChartDataArray.length)
|
||||
newRangeHigh = gSingleCacheChartDataArray.length - 1;
|
||||
|
||||
clearSinglelineCanvas();
|
||||
|
||||
window.setTimeout(refreshOneHourSingleChart, 200, singleSn, newRangeLow, newRangeHigh);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function refreshOneHourSingleChart(singleSn, low, high) {
|
||||
const ctx = document.getElementById('singleLineChart');
|
||||
|
||||
var labelArr = [];
|
||||
var dataArr = [];
|
||||
labelArr = gSingleCacheChartLabelArray.slice(low, high);
|
||||
dataArr = gSingleCacheChartDataArray.slice(low,high);
|
||||
|
||||
gMySingleChart = new Chart(ctx, {
|
||||
type: 'line',
|
||||
data: {
|
||||
labels: labelArr,
|
||||
datasets: [{
|
||||
label: singleSn + '设备在线历史状态',
|
||||
data: dataArr,
|
||||
fill: false,
|
||||
borderColor: 'rgb(75, 192, 192)',
|
||||
tension: 0.1
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
maintainAspectRatio: false,
|
||||
scales: {
|
||||
yAxes: [{
|
||||
ticks: {
|
||||
beginAtZero: true
|
||||
}
|
||||
}]
|
||||
},
|
||||
onClick: (e) => {
|
||||
const canvasPosition = Chart.helpers.getRelativePosition(e, gMySingleChart);
|
||||
|
||||
// Substitute the appropriate scale IDs
|
||||
dataX = gMySingleChart.scales["x-axis-0"].getValueForPixel(canvasPosition.x);
|
||||
|
||||
var newRangeLow = dataX + low - 300;
|
||||
var newRangeHigh = dataX + low + 300;
|
||||
if (newRangeLow <= 0)
|
||||
newRangeLow = 0;
|
||||
if (newRangeHigh >= gSingleCacheChartDataArray.length)
|
||||
newRangeHigh = gSingleCacheChartDataArray.length - 1;
|
||||
|
||||
clearSinglelineCanvas();
|
||||
|
||||
window.setTimeout(refreshTenMintuesSingleChart, 200, singleSn, newRangeLow, newRangeHigh);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function refreshTenMintuesSingleChart(singleSn, low, high) {
|
||||
const ctx = document.getElementById('singleLineChart');
|
||||
|
||||
var labelArr = [];
|
||||
var dataArr = [];
|
||||
labelArr = gSingleCacheChartLabelArray.slice(low, high);
|
||||
dataArr = gSingleCacheChartDataArray.slice(low, high);
|
||||
|
||||
gMySingleChart = new Chart(ctx, {
|
||||
type: 'line',
|
||||
data: {
|
||||
labels: labelArr,
|
||||
datasets: [{
|
||||
label: singleSn + '设备在线历史状态',
|
||||
data: dataArr,
|
||||
fill: false,
|
||||
borderColor: 'rgb(75, 192, 192)',
|
||||
tension: 0.1
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
maintainAspectRatio: false,
|
||||
scales: {
|
||||
yAxes: [{
|
||||
ticks: {
|
||||
beginAtZero: true
|
||||
}
|
||||
}]
|
||||
},
|
||||
onClick: (e) => {
|
||||
const canvasPosition = Chart.helpers.getRelativePosition(e, gMySingleChart);
|
||||
|
||||
// Substitute the appropriate scale IDs
|
||||
dataX = gMySingleChart.scales["x-axis-0"].getValueForPixel(canvasPosition.x);
|
||||
|
||||
var newRangeLow = dataX + low - 60;
|
||||
var newRangeHigh = dataX + low + 60;
|
||||
if (newRangeLow <= 0)
|
||||
newRangeLow = 0;
|
||||
if (newRangeHigh >= gSingleCacheChartDataArray.length)
|
||||
newRangeHigh = gSingleCacheChartDataArray.length - 1;
|
||||
|
||||
clearSinglelineCanvas();
|
||||
|
||||
window.setTimeout(refreshTwoMintuesSingleChart, 200, singleSn, newRangeLow, newRangeHigh);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function refreshTwoMintuesSingleChart(singleSn, low, high) {
|
||||
const ctx = document.getElementById('singleLineChart');
|
||||
|
||||
var labelArr = [];
|
||||
var dataArr = [];
|
||||
labelArr = gSingleCacheChartLabelArray.slice(low, high);
|
||||
dataArr = gSingleCacheChartDataArray.slice(low, high);
|
||||
|
||||
gMySingleChart = new Chart(ctx, {
|
||||
type: 'line',
|
||||
data: {
|
||||
labels: labelArr,
|
||||
datasets: [{
|
||||
label: singleSn + '设备在线历史状态',
|
||||
data: dataArr,
|
||||
fill: false,
|
||||
borderColor: 'rgb(75, 192, 192)',
|
||||
tension: 0.1
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
maintainAspectRatio: false,
|
||||
scales: {
|
||||
yAxes: [{
|
||||
ticks: {
|
||||
beginAtZero: true
|
||||
}
|
||||
}]
|
||||
},
|
||||
onClick: (e) => {
|
||||
|
||||
clearSinglelineCanvas();
|
||||
|
||||
window.setTimeout(refreshWholeTimePeriodSingleChart, 200, singleSn, 0, gSingleCacheChartDataArray.length);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function refreshChart() {
|
||||
|
||||
var curPageNum = 0;
|
||||
$("#faceDetailsBox").html("");//bug 操作页面清空
|
||||
var stTime = $("#startTs").val();
|
||||
var edTime = $("#endTs").val();
|
||||
var strSN = $("#txtOpname").val() || "";
|
||||
var arrResons = [0,1,2,3,4];
|
||||
|
||||
/*$('input[name="StatusEventReasonCheck"]:checked').each(function () {
|
||||
arrResons.push($(this).val());
|
||||
});*/
|
||||
|
||||
let data = {
|
||||
sn: strSN,
|
||||
st: stTime,
|
||||
ed: edTime,
|
||||
arrReason: arrResons,
|
||||
page: curPageNum
|
||||
};
|
||||
|
||||
sendRequest(data, function () {
|
||||
refreshTableWithCacheData();
|
||||
});
|
||||
}
|
||||
|
||||
function sendRequest(data, respFunc) {
|
||||
$.ajax({
|
||||
url: "/App/log/FaceStatusHistoryLogGetData",
|
||||
data: data,
|
||||
type: "post",
|
||||
success: function (dataArr) {
|
||||
gCacheDataArray = dataArr;
|
||||
|
||||
respFunc();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function sendRequestSingleCounterPerHour(data, respFunc) {
|
||||
$.ajax({
|
||||
url: "/App/log/FaceStatusHistoryLogGetDataSingle",
|
||||
data: data,
|
||||
type: "post",
|
||||
success: function (dataArr) {
|
||||
//初始化原始事件表
|
||||
gSingleCounterPerHourCacheDataArray = dataArr;
|
||||
|
||||
//初始化range表,全部使用毫秒数标志。
|
||||
gSingleCounterPerHourCacheRangeArray = [];
|
||||
var tmpStMsTime = 0, tmpEdMsTime = 0;
|
||||
var spanMs = 0;
|
||||
var stTime = $("#startTs").val();
|
||||
var edTime = $("#endTs").val();
|
||||
var stArr = stTime.split('-').map(it => parseInt(it, 10));
|
||||
var edArr = edTime.split('-').map(it => parseInt(it, 10));
|
||||
var tmpSt = new Date(stArr[0], stArr[1] - 1, stArr[2], 0, 0, 0, 0);
|
||||
var tmpEd = new Date(edArr[0], edArr[1] - 1, edArr[2], 23, 59, 59, 0);
|
||||
tmpStMsTime = tmpSt.getTime();
|
||||
tmpEdMsTime = tmpEd.getTime();
|
||||
//第一个break point
|
||||
if (gSingleCounterPerHourCacheDataArray[0].Status == 1) {
|
||||
gSingleCounterPerHourCacheRangeArray.push({ brk: tmpStMsTime, stat: 0 });
|
||||
}
|
||||
else {
|
||||
gSingleCounterPerHourCacheRangeArray.push({ brk: tmpStMsTime, stat: 1 });
|
||||
}
|
||||
//中间的break point
|
||||
for (let i = 0; i < gSingleCounterPerHourCacheDataArray.length; i++) {
|
||||
let ptPos = convertMVCDateToInt(gSingleCounterPerHourCacheDataArray[i].CreateTime);
|
||||
//如果同一时间多个触发,以最后一个为准
|
||||
let dupPos = -1;
|
||||
for (let k = 0; k < gSingleCounterPerHourCacheRangeArray.length; k++) {
|
||||
if (gSingleCounterPerHourCacheRangeArray[k].brk == ptPos) {
|
||||
dupPos = k;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (dupPos === -1) //新增一个位置
|
||||
gSingleCounterPerHourCacheRangeArray.push({ brk: ptPos, stat: gSingleCounterPerHourCacheDataArray[i].Status });
|
||||
else
|
||||
gSingleCounterPerHourCacheRangeArray[dupPos].stat = gSingleCounterPerHourCacheDataArray[i].Status;//同一时间保留最后一次更新
|
||||
}
|
||||
//最后一个break point
|
||||
if (gSingleCounterPerHourCacheRangeArray[gSingleCounterPerHourCacheRangeArray.length - 1].brk === tmpEdMsTime)//更新
|
||||
{
|
||||
//使用数据库的状态值。
|
||||
} else//添加
|
||||
{
|
||||
gSingleCounterPerHourCacheRangeArray.push({ brk: tmpEdMsTime, stat: gSingleCounterPerHourCacheDataArray[gSingleCounterPerHourCacheDataArray.length - 1].Status });
|
||||
}
|
||||
|
||||
//回调函数
|
||||
respFunc();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function setDateRange(range) {
|
||||
|
||||
var strSt = "";
|
||||
var strEd = "";
|
||||
var tmpDate = new Date();
|
||||
var yesDate = new Date();
|
||||
yesDate.setDate(yesDate.getDate() - 1);
|
||||
if (range === 0) {
|
||||
strSt = tmpDate.getFullYear() + "-";
|
||||
strSt += (tmpDate.getMonth() + 1) + "-";
|
||||
strSt += tmpDate.getDate();
|
||||
strEd = strSt;
|
||||
}
|
||||
else if (range === 1)//yesterday
|
||||
{
|
||||
strSt = yesDate.getFullYear() + "-";
|
||||
strSt += (yesDate.getMonth() + 1) + "-";
|
||||
strSt += yesDate.getDate();
|
||||
strEd = strSt;
|
||||
}
|
||||
else if (range === 2)//三天
|
||||
{
|
||||
let tday = new Date(tmpDate.getTime() - 72 * 60 * 60 * 1000);
|
||||
strSt += tday.getFullYear() + "-";
|
||||
strSt += (tday.getMonth() + 1) + "-";
|
||||
strSt += tday.getDate();
|
||||
strEd += tmpDate.getFullYear() + "-";
|
||||
strEd += (tmpDate.getMonth() + 1) + "-";
|
||||
strEd += tmpDate.getDate();
|
||||
}
|
||||
else if (range === 3)//一周
|
||||
{
|
||||
let tday = new Date(tmpDate.getTime() - 7 * 24 * 60 * 60 * 1000);
|
||||
strSt += tday.getFullYear() + "-";
|
||||
strSt += (tday.getMonth() + 1) + "-";
|
||||
strSt += tday.getDate();
|
||||
strEd += tmpDate.getFullYear() + "-";
|
||||
strEd += (tmpDate.getMonth() + 1) + "-";
|
||||
strEd += tmpDate.getDate();
|
||||
}
|
||||
else if (range === 4)//current month
|
||||
{
|
||||
strSt = tmpDate.getFullYear() + "-";
|
||||
strSt += (tmpDate.getMonth() + 1) + "-";
|
||||
strEd = strSt;
|
||||
strSt += "01";
|
||||
strEd += tmpDate.getDate();
|
||||
}
|
||||
|
||||
if (strSt.length > 0 && strEd.length > 0) {
|
||||
$("#startTs").val(strSt);
|
||||
$("#endTs").val(strEd);
|
||||
}
|
||||
}
|
||||
|
||||
function searchFaceStatusHistory(Pages) {//查询SN号按钮
|
||||
|
||||
var curPageNum = Pages || 0;
|
||||
|
||||
$("#faceDetailsBox").html("");//bug 操作页面清空
|
||||
var stTime = $("#startTs").val();
|
||||
var edTime = $("#endTs").val();
|
||||
var strSN = $("#txtOpname").val() || "";
|
||||
var arrResons = [];
|
||||
|
||||
/*$('input[name="StatusEventReasonCheck"]:checked').each(function () {
|
||||
arrResons.push($(this).val());
|
||||
});*/
|
||||
|
||||
let data = {
|
||||
sn: strSN,
|
||||
st: stTime,
|
||||
ed: edTime,
|
||||
arrReason: arrResons,
|
||||
page: curPageNum
|
||||
};
|
||||
|
||||
$(".ibox-content").html('');
|
||||
|
||||
$.ajax({
|
||||
url: "/App/log/FaceStatusHistoryLogGetData",
|
||||
data: data,
|
||||
type: "post", // 提交方式
|
||||
success: function (data) {
|
||||
console.log(data)
|
||||
$(".ibox-content").html(data);
|
||||
$("li.pages").hide();
|
||||
if (Pages >= 5) {
|
||||
var maxPages = Pages + 3
|
||||
var minPages = Pages - 3;
|
||||
for (var i = minPages; i < maxPages; i++) {
|
||||
$("li.pages").eq(i).show();//显示页数
|
||||
}
|
||||
} else {
|
||||
for (var i = 0; i < 5; i++) {
|
||||
$("li.pages").eq(i).show();//显示页数
|
||||
}
|
||||
}
|
||||
if ($("li.pages").length != 0) {
|
||||
var pages = $("li.pages").length - 3;//获取页数
|
||||
if (Pages >= pages) {
|
||||
$("li.right").hide();
|
||||
}
|
||||
if (Pages > 3) {
|
||||
$("li.left").show();
|
||||
} else {
|
||||
$("li.left").hide();
|
||||
}
|
||||
$("li.pages a").eq(Pages - 1).css("color", "white");//添加选中字体颜色
|
||||
$("li.pages a").eq(Pages - 1).css("background-color", "#00BFFF");//添加选中背景颜色
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function convertMVCDate(strMVCDate) {
|
||||
return new Date(parseInt(strMVCDate.replace('/Date(', '').replace(')/', ''),10))
|
||||
}
|
||||
function convertMVCDateToInt(strMVCDate) {
|
||||
return parseInt(strMVCDate.replace('/Date(', '').replace(')/', ''), 10);
|
||||
}
|
||||
function convertMVCDateToString(strMVCDate) {
|
||||
let a = new Date(parseInt(strMVCDate.replace('/Date(', '').replace(')/', ''), 10));
|
||||
return a.toLocaleString('chinese',{ hour12: false });
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,21 @@
|
||||
@model List<Face.Web.Areas.App.Controllers.countstatushistory>
|
||||
|
||||
@{
|
||||
string strData = "";
|
||||
foreach (var it in Model)
|
||||
{
|
||||
strData += (it.SN + "|");
|
||||
strData += it.cnt;
|
||||
strData += ";";
|
||||
}
|
||||
strData = strData.Substring(0, strData.Length - 1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
|
||||
</script>
|
||||
132
Face.Web/Areas/App/Views/Log/FacebindingMessage.cshtml
Normal file
132
Face.Web/Areas/App/Views/Log/FacebindingMessage.cshtml
Normal file
@@ -0,0 +1,132 @@
|
||||
@model PagedList.IPagedList<Face.Domain.Entities.FaceBinding>
|
||||
@using PagedList.Mvc;
|
||||
@using Face.Domain.Entities;
|
||||
@using Face.Web.Areas.App.Models
|
||||
@using Face.Domain.Application;
|
||||
@{
|
||||
ViewBag.Title = "FacebindingMessage";
|
||||
Layout = "~/Areas/App/Views/Shared/_Layout.cshtml";
|
||||
List<Hotels> hotels = (List<Hotels>)Session["HotelList"];
|
||||
List<Hosts> hosts = (List<Hosts>)Session["roomlist"];
|
||||
List<TBL_ROOM_BASIC_INFO> ZongRoominfo = (List<TBL_ROOM_BASIC_INFO>)Session["ZongRoominfo"];
|
||||
|
||||
}
|
||||
|
||||
<script src="~/Plugin/user.js"></script>
|
||||
<style>
|
||||
.table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td {
|
||||
padding: 0px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
.table > tbody > tr > td, .table > tbody > tr > th, .table > tfoot > tr > td, .table > tfoot > tr > th, .table > thead > tr > td, .table > thead > tr > th {
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
#style-format {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#btnaddPLine {
|
||||
float: right;
|
||||
}
|
||||
</style>
|
||||
<div class="content-wrapper">
|
||||
<section class="content" style="padding:0px;">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-sm-8">
|
||||
<!-- Default box -->
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<span style="font-size:30px">人脸机绑定/解绑日志</span>
|
||||
<div class="card-tools">
|
||||
@*<button class="btn btn-md btn-primary" type="button" id="Hotelsearch">操作日志</button>*@
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
@*<input type="text" placeholder="进行名字筛选" name="username" style="height:33px;" id="txtOpname"><button class="btn btn-md btn-primary" id="Btnmodify">搜索</button>*@
|
||||
@*条件筛选*@
|
||||
</div>
|
||||
@*内容筛选*@
|
||||
<div class="ibox-content" style="padding:0px;">
|
||||
@foreach (var item in Model)
|
||||
{
|
||||
<div class="yhxx">
|
||||
<div class="info-box" style="padding: 0px; margin-bottom: 0.5rem; overflow-wrap: break-word;">
|
||||
<span class="info-box-icon" style="height:85px;overflow:hidden;"></span>
|
||||
<div class="info-box-content" style="padding: 0px;">
|
||||
|
||||
<span class="text-bold" style="font-size: 16px; line-height: 1;">
|
||||
操作人:@item.Operator
|
||||
</span>
|
||||
|
||||
|
||||
<span style="line-height: 1;">
|
||||
|
||||
@(hotels.FirstOrDefault(x => x.Id == item.HotelCode).Name)
|
||||
</span>
|
||||
<span style="line-height: 1;">
|
||||
房间:@if (item.RoomId != null && item.RoomId != 0)
|
||||
{
|
||||
TBL_ROOM_BASIC_INFO isok = ZongRoominfo.FirstOrDefault(s => s.ROOM_OLD_ID == item.RoomId);
|
||||
<span> @( item.RoomId.ToString() != "" ? (isok == null ? "" : isok.ROOM_NUMBER) : "" )</span>
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
<span>无房间</span>
|
||||
}
|
||||
</span>
|
||||
</div>
|
||||
<div class="info-box-content" style="padding: 0px;">
|
||||
<span style="line-height: 1;">
|
||||
@item.bindingDate.Value.ToString("yyyy/MM/dd hh:mm")
|
||||
</span>
|
||||
<span style="line-height: 1;">
|
||||
|
||||
操作类型:
|
||||
@if (item.OperatorType == false)
|
||||
{
|
||||
<span style="line-height: 1;">
|
||||
解绑
|
||||
</span>
|
||||
}
|
||||
else if (item.OperatorType == true)
|
||||
{
|
||||
<span style="line-height: 1;">
|
||||
绑定
|
||||
</span>
|
||||
}
|
||||
|
||||
</span>
|
||||
<span style="line-height: 1;"> SN:@item.SerialNo</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
<!-- /.card -->
|
||||
|
||||
</div>
|
||||
<div style="text-align:center" class="chaxun">
|
||||
@*分页主要代码*@
|
||||
每页 @Model.PageSize 条记录,共 @Model.PageCount 页,当前第 @Model.PageNumber 页
|
||||
<nav aria-label="Contacts Page Navigation">
|
||||
<ul class="pagination justify-content-center m-0">
|
||||
@Html.PagedListPager(Model, page => Url.Action("FacebindingMessage", new { page }), new PagedListRenderOptions() { DisplayItemSliceAndTotal = false, MaximumPageNumbersToDisplay = 5 })
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<script>
|
||||
$(".pagination").addClass("pagination pagination-sm");
|
||||
$(".pagination").children("li").addClass("page-item");
|
||||
$(".page-item").children("a").addClass("page-link");
|
||||
</script>
|
||||
|
||||
618
Face.Web/Areas/App/Views/Log/InquirePmsMessageLog.cshtml
Normal file
618
Face.Web/Areas/App/Views/Log/InquirePmsMessageLog.cshtml
Normal file
@@ -0,0 +1,618 @@
|
||||
@model List<Face.Domain.Entities.pmsInterface>
|
||||
@using PagedList.Mvc;
|
||||
@using Face.Web.Areas.App.Models;
|
||||
@using Face.Domain.Entities;
|
||||
@using Face.Domain.Application
|
||||
|
||||
@{
|
||||
List<Face.Domain.Entities.Hotels> Hotellist = SqlSugarBase.authoriydb.Queryable<Hotels>().ToList();
|
||||
List<Face.Domain.Entities.Hosts> hostslist = Face.Services.Cache.CacheHelp.GetRoomGroup();
|
||||
List<FaceIssue> authItem = SqlSugarBase.GesmartDb().Queryable<FaceIssue>().ToList();
|
||||
List<TBL_ROOM_BASIC_INFO> ZongRoominfo = (List<TBL_ROOM_BASIC_INFO>)Session["ZongRoominfo"];
|
||||
List<Face.Domain.Entities.pmsLog> pmslog = (List<Face.Domain.Entities.pmsLog>)ViewData["pmsLog"];
|
||||
}
|
||||
@if (Model != null && Model.Count() > 0)
|
||||
{
|
||||
foreach (var item in Model)
|
||||
{
|
||||
<div class="yhxx" style="cursor:hand; font-size:0.8rem;" onclick="Show(this)">
|
||||
<div class="info-box" style="padding: 0px; margin-bottom: 0.5rem; overflow-wrap: break-word; min-height: auto;">
|
||||
|
||||
<div class="info-box-content" style="padding: 0px;">
|
||||
<span class="text-bold">
|
||||
<span style="font-weight:normal">@item.DateTime</span>
|
||||
</span>
|
||||
<span class="text-bold">
|
||||
@{TBL_ROOM_BASIC_INFO isok = ZongRoominfo.FirstOrDefault(s => s.ROOM_OLD_ID == item.room);
|
||||
<span> @( item.room.ToString() != "" ? (isok == null ? "无房间" : isok.ROOM_NUMBER) : "无房间" )</span>
|
||||
}
|
||||
<span>:</span>
|
||||
<span style="font-weight:normal">
|
||||
@if (item.pmstype == 1)
|
||||
{
|
||||
<span>开房</span>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span>退房</span>
|
||||
}
|
||||
|
||||
@{
|
||||
|
||||
var messagesinfo = authItem.Where(x => x.pmsid == item.pmsId.ToString());
|
||||
if (messagesinfo != null)
|
||||
{
|
||||
foreach (var issue in messagesinfo)
|
||||
{
|
||||
|
||||
if (issue.Factory == " " || issue.Factory == null)
|
||||
{
|
||||
<span> </span>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span>(@issue.Factory,</span>
|
||||
|
||||
}
|
||||
if (issue.APKVersion == " " || issue.APKVersion == null)
|
||||
{
|
||||
<span> </span>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span>@issue.APKVersion)</span>
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</span>
|
||||
</span>
|
||||
|
||||
@{
|
||||
if (pmslog != null)
|
||||
{
|
||||
//pmsLog sun27 = pmslog.Find(x => x.pmsid == item.pmsId && x.step == 7 && x.Data != null);
|
||||
pmsLog sun27 = pmslog.Find(x => x.pmsid == item.pmsId && x.step == 550 && x.Data != null);
|
||||
if (sun27 != null)
|
||||
{
|
||||
var xxinxi = sun27.Data.Split(',');
|
||||
if (xxinxi.Length > 4)
|
||||
{
|
||||
var xinfo = xxinxi[4].Split(':');
|
||||
var xinfoss = xinfo[1].Split('"');
|
||||
<span class="text-bold">
|
||||
@if (xinfoss[1] == "OK" || xinfoss[1].Contains("成功"))
|
||||
{
|
||||
|
||||
<span style="font-weight: normal; color:#5cb85c;">@xinfoss[1]</span>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span style="font-weight: normal; color:crimson;">@xinfoss[1]</span>
|
||||
}
|
||||
|
||||
|
||||
</span>
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</div>
|
||||
<div class="info-box-content" style="padding: 0px;">
|
||||
<span class="text-bold">
|
||||
<span>@(item.hotelid.ToString() != "" ? (Hotellist.SingleOrDefault(s => s.Id == int.Parse(item.hotelid.ToString())) != null ? Hotellist.SingleOrDefault(s => s.Id == int.Parse(item.hotelid.ToString())).Name : "无酒店") : "无酒店")</span>
|
||||
<span>
|
||||
<a class="btn btn-default" href="/App/Face/TestFaceall?hotelid=@item.hotelid&sn=@item.faceSN" role="button" style="font-size:3px;">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-camera2" viewBox="0 0 16 16">
|
||||
<path d="M5 8c0-1.657 2.343-3 4-3V4a4 4 0 0 0-4 4z" />
|
||||
<path d="M12.318 3h2.015C15.253 3 16 3.746 16 4.667v6.666c0 .92-.746 1.667-1.667 1.667h-2.015A5.97 5.97 0 0 1 9 14a5.972 5.972 0 0 1-3.318-1H1.667C.747 13 0 12.254 0 11.333V4.667C0 3.747.746 3 1.667 3H2a1 1 0 0 1 1-1h1a1 1 0 0 1 1 1h.682A5.97 5.97 0 0 1 9 2c1.227 0 2.367.368 3.318 1zM2 4.5a.5.5 0 1 0-1 0 .5.5 0 0 0 1 0zM14 8A5 5 0 1 0 4 8a5 5 0 0 0 10 0z" />
|
||||
</svg>
|
||||
</a>
|
||||
</span>
|
||||
<span>
|
||||
<a class="btn btn-default" href="/App/Face/TestFaceLogsAll?sn=@item.faceSN" role="button" style="font-size:3px;">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
|
||||
<g fill="currentColor">
|
||||
<path d="M5 10.5a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5zm0-2a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5zm0-2a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5zm0-2a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5z" />
|
||||
<path d="M3 0h10a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2v-1h1v1a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H3a1 1 0 0 0-1 1v1H1V2a2 2 0 0 1 2-2z" />
|
||||
<path d="M1 5v-.5a.5.5 0 0 1 1 0V5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0V8h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1zm0 3v-.5a.5.5 0 0 1 1 0v.5h.5a.5.5 0 0 1 0 1h-2a.5.5 0 0 1 0-1H1z" />
|
||||
</g>
|
||||
</svg>
|
||||
</a>
|
||||
</span>
|
||||
</span>
|
||||
<span>
|
||||
@{
|
||||
var sun01 = pmslog.Where(x => x.pmsid == item.pmsId).ToList();
|
||||
// 分离出step值
|
||||
var step1Item = sun01.Where(i => i.step == 1).ToList();
|
||||
var step25Item = sun01.Where(i => i.step == 25).ToList();
|
||||
var step26Item = sun01.Where(i => i.step == 26).ToList();
|
||||
var step27Item = sun01.Where(i => i.step == 27).ToList();
|
||||
// 分离出其他项
|
||||
var otherItem = sun01.Except(step1Item.Concat(step25Item).Concat(step26Item).Concat(step27Item)).ToList();
|
||||
|
||||
var sun0 = sun01;//step26Item.Concat(step27Item).Concat(step1Item).Concat(step25Item).Concat(otherItem).ToList();
|
||||
if (sun0.Count > 0)
|
||||
{
|
||||
var cl = "#0094ff";//蓝色
|
||||
switch (sun0[sun0.Count - 1].step)
|
||||
{
|
||||
case 291:
|
||||
cl = "#f0ad4e"; //错误1,无人脸机失败
|
||||
break;
|
||||
case 303:
|
||||
cl = "#5cb85c"; //成功1,无人脸机成功
|
||||
break;
|
||||
case 299:
|
||||
cl = "crimson"; //错误2,有人脸机失败
|
||||
break;
|
||||
case 304:
|
||||
cl = "crimson"; //错误2,有人脸机失败
|
||||
break;
|
||||
case 551:
|
||||
cl = "#5cb85c";//成功2,有人脸机成功
|
||||
break;
|
||||
case 506:
|
||||
cl = "#5cb85c";//成功2,有人脸机成功
|
||||
break;
|
||||
case 521:
|
||||
cl = "#5cb85c";//成功2,有人脸机成功
|
||||
break;
|
||||
case 110:
|
||||
if (sun0[sun0.Count - 1].Data == "true")
|
||||
{
|
||||
cl = "#5cb85c";
|
||||
}
|
||||
else
|
||||
{
|
||||
cl = "crimson";
|
||||
}
|
||||
break;
|
||||
case 111:
|
||||
if (sun0[sun0.Count - 1].Data == "true")
|
||||
{
|
||||
cl = "#5cb85c";
|
||||
}
|
||||
else
|
||||
{
|
||||
cl = "crimson";
|
||||
}
|
||||
break;
|
||||
case 116:
|
||||
if (sun0[sun0.Count - 1].Data == "true")
|
||||
{
|
||||
cl = "#5cb85c";
|
||||
}
|
||||
else
|
||||
{
|
||||
cl = "crimson";
|
||||
}
|
||||
break;
|
||||
case 114:
|
||||
if (sun0[sun0.Count - 1].Data == "true")
|
||||
{
|
||||
cl = "#5cb85c";
|
||||
}
|
||||
else
|
||||
{
|
||||
cl = "crimson";
|
||||
}
|
||||
break;
|
||||
case 130:
|
||||
if (sun0[sun0.Count - 1].Data == "true")
|
||||
{
|
||||
cl = "#5cb85c";
|
||||
}
|
||||
else
|
||||
{
|
||||
cl = "crimson";
|
||||
}
|
||||
break;
|
||||
case 131:
|
||||
if (sun0[sun0.Count - 1].Data == "true")
|
||||
{
|
||||
cl = "#5cb85c";
|
||||
}
|
||||
else
|
||||
{
|
||||
cl = "crimson";
|
||||
}
|
||||
break;
|
||||
case 132:
|
||||
if (sun0[sun0.Count - 1].Data == "true")
|
||||
{
|
||||
cl = "#5cb85c";
|
||||
}
|
||||
else
|
||||
{
|
||||
cl = "crimson";
|
||||
}
|
||||
break;
|
||||
case 133:
|
||||
if (sun0[sun0.Count - 1].Data == "true")
|
||||
{
|
||||
cl = "#5cb85c";
|
||||
}
|
||||
else
|
||||
{
|
||||
cl = "crimson";
|
||||
}
|
||||
break;
|
||||
case 134:
|
||||
if (sun0[sun0.Count - 1].Data == "true")
|
||||
{
|
||||
cl = "#5cb85c";
|
||||
}
|
||||
else
|
||||
{
|
||||
cl = "crimson";
|
||||
}
|
||||
break;
|
||||
case 136:
|
||||
if (sun0[sun0.Count - 1].Data == "true")
|
||||
{
|
||||
cl = "#5cb85c";
|
||||
}
|
||||
else
|
||||
{
|
||||
cl = "crimson";
|
||||
}
|
||||
break;
|
||||
case 103:
|
||||
cl = "#5cb85c";//成功
|
||||
break;
|
||||
default:
|
||||
cl = "crimson";//错误2,有人脸机失败到中间步骤
|
||||
break;
|
||||
}
|
||||
<span style="color:@cl;font-size:10px"> <i>S</i>@sun0[sun0.Count - 1].step.Value<i>:</i>@sun0[sun0.Count - 1].Creationtime.Value.ToString("yyyy-MM-dd HH:mm:ss") @sun0[sun0.Count - 1].message </span>
|
||||
}
|
||||
}
|
||||
</span>
|
||||
<span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="acet">
|
||||
@{
|
||||
var sunv = pmslog.Where(x => x.pmsid == item.pmsId).ToList();
|
||||
/*// 分离出step值
|
||||
var step1Items = sunv.Where(i => i.step == 1).ToList();
|
||||
var step25Items = sunv.Where(i => i.step == 25).ToList();
|
||||
var step26Items = sunv.Where(i => i.step == 26).ToList();
|
||||
var step27Items = sunv.Where(i => i.step == 27).ToList(); */
|
||||
// 分离出其他项
|
||||
//var otherItems = sunv.Except(step1Items.Concat(step25Items).Concat(step26Items).Concat(step27Items)).ToList();
|
||||
|
||||
//var sun = step26Items.Concat(step27Items).Concat(step1Items).Concat(step25Items).Concat(otherItems).ToList();
|
||||
var sun = sunv;
|
||||
|
||||
//var sunn = sun.Select((log, index) => { log.Num = index + 1; return log; }).ToList();
|
||||
|
||||
if (sun.Count != 0)
|
||||
{
|
||||
<span style="color:#0094ff"><i>PMSID:@sun[0].pmsid</i><br /></span>
|
||||
|
||||
var cl = "#0094ff";//蓝色
|
||||
switch (sun0[sun0.Count - 1].step)
|
||||
|
||||
{
|
||||
case 291:
|
||||
cl = "#f0ad4e"; //错误1,无人脸机失败
|
||||
break;
|
||||
case 303:
|
||||
cl = "#5cb85c"; //成功1,无人脸机成功
|
||||
break;
|
||||
case 299:
|
||||
cl = "crimson"; //错误2,有人脸机失败
|
||||
break;
|
||||
case 304:
|
||||
cl = "crimson"; //错误2,有人脸机失败
|
||||
break;
|
||||
case 551:
|
||||
cl = "#5cb85c";//成功2,有人脸机成功
|
||||
break;
|
||||
case 506:
|
||||
cl = "#5cb85c";//成功2,有人脸机成功
|
||||
break;
|
||||
case 521:
|
||||
cl = "#5cb85c";//成功2,有人脸机成功
|
||||
break;
|
||||
case 110:
|
||||
if (sun0[sun0.Count - 1].Data == "true")
|
||||
{
|
||||
cl = "#5cb85c";
|
||||
}
|
||||
else
|
||||
{
|
||||
cl = "crimson";
|
||||
}
|
||||
break;
|
||||
case 111:
|
||||
if (sun0[sun0.Count - 1].Data == "true")
|
||||
{
|
||||
cl = "#5cb85c";
|
||||
}
|
||||
else
|
||||
{
|
||||
cl = "crimson";
|
||||
}
|
||||
break;
|
||||
case 116:
|
||||
if (sun0[sun0.Count - 1].Data == "true")
|
||||
{
|
||||
cl = "#5cb85c";
|
||||
}
|
||||
else
|
||||
{
|
||||
cl = "crimson";
|
||||
}
|
||||
break;
|
||||
case 114:
|
||||
if (sun0[sun0.Count - 1].Data == "true")
|
||||
{
|
||||
cl = "#5cb85c";
|
||||
}
|
||||
else
|
||||
{
|
||||
cl = "crimson";
|
||||
}
|
||||
break;
|
||||
case 130:
|
||||
if (sun0[sun0.Count - 1].Data == "true")
|
||||
{
|
||||
cl = "#5cb85c";
|
||||
}
|
||||
else
|
||||
{
|
||||
cl = "crimson";
|
||||
}
|
||||
break;
|
||||
case 131:
|
||||
if (sun0[sun0.Count - 1].Data == "true")
|
||||
{
|
||||
cl = "#5cb85c";
|
||||
}
|
||||
else
|
||||
{
|
||||
cl = "crimson";
|
||||
}
|
||||
break;
|
||||
case 132:
|
||||
if (sun0[sun0.Count - 1].Data == "true")
|
||||
{
|
||||
cl = "#5cb85c";
|
||||
}
|
||||
else
|
||||
{
|
||||
cl = "crimson";
|
||||
}
|
||||
break;
|
||||
case 133:
|
||||
if (sun0[sun0.Count - 1].Data == "true")
|
||||
{
|
||||
cl = "#5cb85c";
|
||||
}
|
||||
else
|
||||
{
|
||||
cl = "crimson";
|
||||
}
|
||||
break;
|
||||
case 134:
|
||||
if (sun0[sun0.Count - 1].Data == "true")
|
||||
{
|
||||
cl = "#5cb85c";
|
||||
}
|
||||
else
|
||||
{
|
||||
cl = "crimson";
|
||||
}
|
||||
break;
|
||||
case 136:
|
||||
if (sun0[sun0.Count - 1].Data == "true")
|
||||
{
|
||||
cl = "#5cb85c";
|
||||
}
|
||||
else
|
||||
{
|
||||
cl = "crimson";
|
||||
}
|
||||
break;
|
||||
case 103:
|
||||
cl = "#5cb85c";//成功
|
||||
break;
|
||||
default:
|
||||
cl = "crimson";//错误2,有人脸机失败到中间步骤
|
||||
break;
|
||||
}
|
||||
/* {
|
||||
case 11:
|
||||
cl = "#f0ad4e"; //错误1,无人脸机失败
|
||||
break;
|
||||
case 10:
|
||||
cl = "#5cb85c"; //成功1,无人脸机成功
|
||||
break;
|
||||
case 9:
|
||||
cl = "crimson"; //错误2,有人脸机失败
|
||||
break;
|
||||
case 8:
|
||||
cl = "#5cb85c";//成功2,有人脸机成功
|
||||
break;
|
||||
case 6:
|
||||
cl = "#5cb85c";//成功2,有人脸机成功
|
||||
break;
|
||||
case 25:
|
||||
if (sun[sun.Count - 1].Data == "true")
|
||||
{
|
||||
cl = "#5cb85c";
|
||||
}
|
||||
else
|
||||
{
|
||||
cl = "crimson";
|
||||
}
|
||||
//cl = "#5cb85c";
|
||||
break;
|
||||
case 26:
|
||||
cl = "#5cb85c";//成功
|
||||
break;
|
||||
case 27:
|
||||
cl = "#5cb85c";//成功
|
||||
break;
|
||||
default:
|
||||
cl = "crimson";//错误2,有人脸机失败到中间步骤
|
||||
break;
|
||||
}*/
|
||||
string nueroomid = sun[0].roomid;
|
||||
for (int i = 0; i < sun.Count; i++)
|
||||
{
|
||||
|
||||
if (nueroomid != sun[i].roomid)
|
||||
{
|
||||
if (sun[i].roomid != null && sun[i].roomid != "" && sun[i].roomid != " ")
|
||||
{
|
||||
<span style="color: @cl; font-size: 10px; font-weight: 600; "><i> @sun[i].roomid</i></span>
|
||||
nueroomid = sun[i].roomid;
|
||||
<br />
|
||||
}
|
||||
}
|
||||
<span>
|
||||
<span style="color:#0094ff">
|
||||
<span style="color:#0094ff;font-size:10px;"> <i>S</i>@sun[i].step<i>:</i> @sun[i].Creationtime.Value.ToString("yyyy-MM-dd HH:mm:ss") @sun[i].message </span>
|
||||
</span>
|
||||
@if (!String.IsNullOrWhiteSpace(sun[i].Data))
|
||||
{
|
||||
<span style="font-weight: normal; font-size: 10px;"> @sun[i].Data</span>
|
||||
}
|
||||
|
||||
@*@if (sun[i].step == 4 && !String.IsNullOrWhiteSpace(sun[i].Data))
|
||||
{
|
||||
int sInd = sun[i].Data.IndexOf(",\"cmd\":") + 8;
|
||||
int eInd = sun[i].Data.IndexOf(",\"msg\":") - 1;
|
||||
if (eInd > 0 && sInd > 0)
|
||||
{
|
||||
<span style="color: #0094ff; font-size: 10px;"> 使用命令:@sun[i].Data.Substring(sInd, eInd - sInd) </span>
|
||||
}
|
||||
}
|
||||
|
||||
@if ((sun[i].step == 1 || sun[i].step == 7 || sun[i].step == 5) && !String.IsNullOrWhiteSpace(sun[i].Data))
|
||||
{
|
||||
<span style="font-weight: normal; font-size: 10px;"> @sun[i].Data</span>
|
||||
}
|
||||
@if ((sun[i].step == 1) && !String.IsNullOrWhiteSpace(sun[i].Ip))
|
||||
{
|
||||
<span style="font-weight: normal; font-size: 10px;"> @sun[i].Ip</span>
|
||||
}
|
||||
@if ((sun[i].step == 25) && !String.IsNullOrWhiteSpace(sun[i].Data))
|
||||
{
|
||||
<span style="font-weight: normal; font-size: 10px;"> @sun[i].Data</span>
|
||||
}
|
||||
@if ((sun[i].step == 26) && !String.IsNullOrWhiteSpace(sun[i].Data))
|
||||
{
|
||||
<span style="font-weight: normal; font-size: 10px;"> @sun[i].Data</span>
|
||||
}
|
||||
@if ((sun[i].step == 27) && !String.IsNullOrWhiteSpace(sun[i].Data))
|
||||
{
|
||||
<span style="font-weight: normal; font-size: 10px;"> @sun[i].Data</span>
|
||||
}*@
|
||||
</span><br />
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@{
|
||||
int individual = 1;
|
||||
var messages = authItem.Where(x => x.pmsid == item.pmsId.ToString());
|
||||
if (messages != null)
|
||||
{
|
||||
foreach (var issue in messages)
|
||||
{
|
||||
|
||||
<div style="width: 250px; height: 180px; font-size: 10px;">
|
||||
<div>@individual#下发时间:@issue.creationtime.ToString("yyyy/MM/dd HH:mm")</div>
|
||||
<div>
|
||||
SN:@issue.faceSn
|
||||
(
|
||||
@if (issue.Factory == " " || issue.Factory == null)
|
||||
{
|
||||
<span> </span>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span>@issue.Factory,</span>
|
||||
|
||||
}
|
||||
|
||||
|
||||
@if (issue.APKVersion == " " || issue.APKVersion == null)
|
||||
{
|
||||
<span> </span>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span>@issue.APKVersion</span>
|
||||
|
||||
}
|
||||
|
||||
)
|
||||
</div>
|
||||
<div>
|
||||
@{
|
||||
if (Session["username"]?.ToString()?.ToLower() == "momo")
|
||||
{
|
||||
|
||||
<div>下发人脸:<img style="width:50px; height:50px;" id="images" src="@issue.picture"></div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div>下发成功</div>
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
++individual;
|
||||
}
|
||||
}
|
||||
}
|
||||
@*<div style="margin-bottom: 0.5rem; font-size: 10px;"><span class="text-bold">pms内容:</span>@item.pmsContent</div>
|
||||
<div> </div>*@
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
<div>没有数据了,请重新查询你的相关信息</div>
|
||||
}
|
||||
|
||||
<div>
|
||||
<nav style="text-align:center;">
|
||||
<ul class="pagination" id="page">
|
||||
<li class="first" onclick="firstPage16('/App/Log/InquirePmsMessageLog')"><a>«</a></li>
|
||||
<li class="left"><a>…</a></li>
|
||||
@for (int i = 0; i < ViewBag.allpage; i++)
|
||||
{
|
||||
<li class="pages" onclick="SpecifyPage16('/App/Log/InquirePmsMessageLog',@(i+1))"><a>@(i + 1)</a></li>
|
||||
}
|
||||
<li class="right"><a>…</a></li>
|
||||
<li class="finally"><a onclick="lastPage16('/App/Log/InquirePmsMessageLog')">»</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
<script>
|
||||
$('.acet').hide();
|
||||
$(".pagination").addClass("pagination pagination-sm");
|
||||
$(".pagination").children("li").addClass("page-item");
|
||||
$(".page-item").children("a").addClass("page-link");
|
||||
function Show(that) {
|
||||
|
||||
$(that).find('.acet').toggle();
|
||||
}
|
||||
|
||||
</script>
|
||||
133
Face.Web/Areas/App/Views/Log/InquirePmsMessageLoginfo.cshtml
Normal file
133
Face.Web/Areas/App/Views/Log/InquirePmsMessageLoginfo.cshtml
Normal file
@@ -0,0 +1,133 @@
|
||||
@*@model List<Face.Domain.Entities.pmsInterface>*@
|
||||
@using PagedList.Mvc;
|
||||
@using Face.Web.Areas.App.Models;
|
||||
@using Face.Domain.Entities;
|
||||
@using Face.Domain.Application
|
||||
@{
|
||||
//List<Face.Domain.Entities.Hotels> Hotellist = SqlSugarBase.authoriydb.Queryable<Hotels>().ToList();//所有酒店
|
||||
//List<Face.Domain.Entities.Hosts> hostslist = Face.Services.Cache.CacheHelp.GetRoomGroup();
|
||||
//List<Face.Domain.Entities.DeviceManage> devices = SqlSugarBase.Db.Queryable<DeviceManage>().ToList();
|
||||
//List<FaceIssue> authItem = SqlSugarBase.GesmartDb().Queryable<FaceIssue>().ToList();
|
||||
////List<TBL_ROOM_BASIC_INFO> ZongRoominfo = (List<TBL_ROOM_BASIC_INFO>)Session["ZongRoominfo"];
|
||||
//List<Face.Domain.Entities.pmsLog> pmslog = SqlSugarBase.Db.Queryable<pmsLog>().ToList();
|
||||
//List<pmsInterface> pmsint = SqlSugarBase.Db.Queryable<pmsInterface>().ToList();
|
||||
}
|
||||
@foreach (var item in ViewBag.info)
|
||||
{
|
||||
|
||||
<div class="yhxx" style="cursor:hand; font-size:0.8rem;" onclick="Show(this)">
|
||||
|
||||
<div class="info-box" id="judianinfo" style="padding: 0px; margin-bottom: 0.5rem; overflow-wrap: break-word; min-height: auto;">
|
||||
|
||||
<div class="info-box-content">
|
||||
<span class="text-bold">
|
||||
<span>
|
||||
@item.HotelName
|
||||
|
||||
</span>
|
||||
<span style="color:forestgreen">
|
||||
@*<i class="bi bi-share-fill"></i>*@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-share-fill" viewBox="0 0 16 16">
|
||||
<path d="M11 2.5a2.5 2.5 0 1 1 .603 1.628l-6.718 3.12a2.499 2.499 0 0 1 0 1.504l6.718 3.12a2.5 2.5 0 1 1-.488.876l-6.718-3.12a2.5 2.5 0 1 1 0-3.256l6.718-3.12A2.5 2.5 0 0 1 11 2.5z" />
|
||||
</svg>
|
||||
@item.onlinenumber
|
||||
</span>
|
||||
<span style="color: blue;">
|
||||
@*<i class="bi bi-x-diamond"></i>*@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-x-diamond" viewBox="0 0 16 16">
|
||||
<path d="M7.987 16a1.526 1.526 0 0 1-1.07-.448L.45 9.082a1.531 1.531 0 0 1 0-2.165L6.917.45a1.531 1.531 0 0 1 2.166 0l6.469 6.468A1.526 1.526 0 0 1 16 8.013a1.526 1.526 0 0 1-.448 1.07l-6.47 6.469A1.526 1.526 0 0 1 7.988 16zM7.639 1.17 4.766 4.044 8 7.278l3.234-3.234L8.361 1.17a.51.51 0 0 0-.722 0zM8.722 8l3.234 3.234 2.873-2.873c.2-.2.2-.523 0-.722l-2.873-2.873L8.722 8zM8 8.722l-3.234 3.234 2.873 2.873c.2.2.523.2.722 0l2.873-2.873L8 8.722zM7.278 8 4.044 4.766 1.17 7.639a.511.511 0 0 0 0 .722l2.874 2.873L7.278 8z" />
|
||||
</svg>
|
||||
@item.totalnumber
|
||||
</span>
|
||||
<span style="color:red;">
|
||||
@*<i class="bi bi-share"></i>*@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-share" viewBox="0 0 16 16">
|
||||
<path d="M13.5 1a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3zM11 2.5a2.5 2.5 0 1 1 .603 1.628l-6.718 3.12a2.499 2.499 0 0 1 0 1.504l6.718 3.12a2.5 2.5 0 1 1-.488.876l-6.718-3.12a2.5 2.5 0 1 1 0-3.256l6.718-3.12A2.5 2.5 0 0 1 11 2.5zm-8.5 4a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3zm11 5.5a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3z" />
|
||||
</svg>
|
||||
@item.offnumber
|
||||
</span>
|
||||
<span style="color:red;">
|
||||
@*<i class="bi bi-x-octagon"></i>*@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-x-octagon" viewBox="0 0 16 16">
|
||||
<path d="M4.54.146A.5.5 0 0 1 4.893 0h6.214a.5.5 0 0 1 .353.146l4.394 4.394a.5.5 0 0 1 .146.353v6.214a.5.5 0 0 1-.146.353l-4.394 4.394a.5.5 0 0 1-.353.146H4.893a.5.5 0 0 1-.353-.146L.146 11.46A.5.5 0 0 1 0 11.107V4.893a.5.5 0 0 1 .146-.353L4.54.146zM5.1 1 1 5.1v5.8L5.1 15h5.8l4.1-4.1V5.1L10.9 1H5.1z" />
|
||||
<path d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z" />
|
||||
</svg>
|
||||
@item.probemnumber
|
||||
</span>
|
||||
@*<span style="font-weight:normal">@item.DateTime</span>*@
|
||||
</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="acet">
|
||||
<div class="info-box-content">
|
||||
|
||||
@{
|
||||
foreach (var itemd in item.Roomanddevname)
|
||||
{
|
||||
if (itemd.pmsidinfo.Count > 0)
|
||||
{
|
||||
<div>
|
||||
<span>@itemd.roomNmae</span>
|
||||
<span> @itemd.SN</span>
|
||||
<span> @itemd.LabelName</span>
|
||||
<span> @itemd.VersionNumber</span>
|
||||
|
||||
</div>
|
||||
@*<span> @itemd.pmsid</span>*@
|
||||
//var messagesinfo = authItem.Where(x => x.pmsid == item.pmsId.ToString());
|
||||
|
||||
foreach (var itemdd in itemd.pmsidinfo)
|
||||
{
|
||||
<a href="/App/Log/PmsMessageLog" style="font-weight: normal; color: blue;"> @itemdd.pmsid</a>
|
||||
<span style="font-weight: normal; color: black;">@itemdd.GetDateTime</span>
|
||||
<span style="font-weight: normal; color: pink;"> @itemdd.type</span>
|
||||
@*<span style="font-weight: normal; color: red;">@itemdd.Rremary</span>*@
|
||||
<span style="font-weight: normal; color: red;">@itemdd.errorcode:</span>
|
||||
<span style="font-weight: normal; color: red;">@itemdd.datainfo<br /></span>
|
||||
|
||||
|
||||
//rid.Rremary = items.remary;
|
||||
//rid.errorcode = items.errorcode;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
<!-- Modal -->
|
||||
@*<div>
|
||||
<nav style="text-align:center;">
|
||||
<ul class="pagination" id="page">
|
||||
<li class="first" onclick="firstPage16('/App/Log/InquirePmsMessageLoginfo')"><a>«</a></li>
|
||||
<li class="left"><a>…</a></li>
|
||||
@for (int i = 0; i < ViewBag.allpage; i++)
|
||||
{
|
||||
<li class="pages" onclick="SpecifyPage16('/App/Log/InquirePmsMessageLoginfo',@(i+1))"><a>@(i + 1)</a></li>
|
||||
}
|
||||
<li class="right"><a>…</a></li>
|
||||
<li class="finally"><a onclick="lastPage16('/App/Log/InquirePmsMessageLoginfo')">»</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>*@
|
||||
<script>
|
||||
$('.acet').hide();
|
||||
$(".pagination").addClass("pagination pagination-sm");
|
||||
$(".pagination").children("li").addClass("page-item");
|
||||
$(".page-item").children("a").addClass("page-link");
|
||||
function Show(that) {
|
||||
console.log(that)
|
||||
//var lista = document.querySelector('#judianinfo')
|
||||
//var list = lista.parentNode;
|
||||
$(that).find('.acet').toggle();
|
||||
/* $("#xianinfo").Show();*/
|
||||
|
||||
// onclick="Show(XianShowinfo_)"
|
||||
}
|
||||
|
||||
</script>
|
||||
230
Face.Web/Areas/App/Views/Log/PmsMessage.cshtml
Normal file
230
Face.Web/Areas/App/Views/Log/PmsMessage.cshtml
Normal file
@@ -0,0 +1,230 @@
|
||||
@model PagedList.IPagedList<Face.Domain.Entities.pmsInterface>
|
||||
@using PagedList.Mvc;
|
||||
@using Face.Web.Areas.App.Models;
|
||||
@using Face.Domain.Entities;
|
||||
@using Face.Domain.Application
|
||||
@{
|
||||
ViewBag.Title = "PmsMessage";
|
||||
Layout = "~/Areas/App/Views/Shared/_Layout.cshtml";
|
||||
List<Face.Domain.Entities.Hotels> Hotellist = (List<Face.Domain.Entities.Hotels>)ViewData["hotelsS"];
|
||||
List<Face.Domain.Entities.Hosts> hostslist = Face.Services.Cache.CacheHelp.GetRoomGroup();
|
||||
List<FaceIssue> authItem = (List<FaceIssue>)ViewData["facemessage"];
|
||||
List<TBL_ROOM_BASIC_INFO> ZongRoominfo = (List<TBL_ROOM_BASIC_INFO>)Session["ZongRoominfo"];
|
||||
List<Face.Domain.Entities.pmsLog> pmslog = (List<Face.Domain.Entities.pmsLog>)ViewData["pmsLog"];
|
||||
}
|
||||
|
||||
<script src="~/Plugin/user.js"></script>
|
||||
<link href="~/Theme/css/plugins/datapicker/datepicker3.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="http://auth.blv-oa.com/Lib/plugins/tempusdominus-bootstrap-4/css/tempusdominus-bootstrap-4.min.css">
|
||||
<style>
|
||||
.table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td {
|
||||
padding: 0px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
.table > tbody > tr > td, .table > tbody > tr > th, .table > tfoot > tr > td, .table > tfoot > tr > th, .table > thead > tr > td, .table > thead > tr > th {
|
||||
padding: 5px;
|
||||
}
|
||||
#style-format {
|
||||
float: right;
|
||||
}
|
||||
#btnaddPLine {
|
||||
float: right;
|
||||
}
|
||||
</style>
|
||||
<div class="content-wrapper">
|
||||
<section class="content" style="padding:0px;">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-sm-8">
|
||||
<!-- Default box -->
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<span style="font-size:30px">pms传输日志</span>
|
||||
<div class="card-tools">
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div id="data_ovform" style="width:200px;display: inline-block;">
|
||||
<div class="input-group m-b">
|
||||
<div class="input-daterange input-group" id="datepicker">
|
||||
@if (ViewData["pmsdate"] != null)
|
||||
{
|
||||
<input type="text" value="@ViewData["pmsdate"].ToString()" class="input-sm form-control" readOnly id="startTs" />
|
||||
}
|
||||
else
|
||||
{
|
||||
<input type="text" class="input-sm form-control" readOnly id="startTs" />
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<select class="form-control" id="OrgId" style="width:300px; float:left">
|
||||
<option value="3">
|
||||
所有房间
|
||||
</option>
|
||||
<option value="1" @(ViewData["pmsstate"] != null && ViewData["pmsstate"].ToString() == "1" ? "selected='selected'" : "")>
|
||||
开房
|
||||
</option>
|
||||
<option value="0" @(ViewData["pmsstate"] != null && ViewData["pmsstate"].ToString() == "0" ? "selected='selected'" : "")>
|
||||
退房
|
||||
</option>
|
||||
</select>
|
||||
<input type="text" placeholder="根据房间筛选" name="username" style="height:36px;" id="txtOpname">
|
||||
<button class="btn btn-md btn-primary" id="Btnmodify" onclick="selectShow()">搜索</button>
|
||||
@*条件筛选*@
|
||||
</div>
|
||||
@*内容筛选*@
|
||||
<div class="ibox-content" style="padding:0px;">
|
||||
@foreach (var item in Model)
|
||||
{
|
||||
<div class="yhxx" style="cursor:hand" onclick="Show(this)">
|
||||
<div class="info-box" style="padding: 0px; margin-bottom: 0.5rem; overflow-wrap: break-word;">
|
||||
|
||||
<div class="info-box-content" style="padding: 0px;">
|
||||
<span class="text-bold">
|
||||
<span style="font-weight:normal">@item.DateTime</span>
|
||||
</span>
|
||||
<span class="text-bold">
|
||||
操作类型:
|
||||
<span style="font-weight:normal">
|
||||
@if (item.pmstype == 1)
|
||||
{
|
||||
<span>开房</span>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span>退房</span>
|
||||
}
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="info-box-content" style="padding: 0px;">
|
||||
<span class="text-bold">
|
||||
@(item.hotelid.ToString() != "" ? (Hotellist.SingleOrDefault(s => s.Id == int.Parse(item.hotelid.ToString())) != null ? Hotellist.SingleOrDefault(s => s.Id == int.Parse(item.hotelid.ToString())).Name : "无酒店") : "无酒店")
|
||||
</span>
|
||||
<span class="text-bold">
|
||||
@{TBL_ROOM_BASIC_INFO isok = ZongRoominfo.FirstOrDefault(s => s.ROOM_OLD_ID == item.room);
|
||||
<span> @( item.room.ToString() != "" ? (isok == null ? "无房间" : isok.ROOM_NUMBER) : "无房间" )</span>
|
||||
}
|
||||
</span>
|
||||
<span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="acet">
|
||||
@{
|
||||
var sun = pmslog.Where(x => x.pmsid == item.pmsId).ToList();
|
||||
if (sun.Count != 0)
|
||||
{
|
||||
<span style="color:#0094ff"><i>PMSID:@sun[0].pmsid</i></span>
|
||||
<br />
|
||||
|
||||
for (int i = 0; i < sun.Count; i++)
|
||||
{
|
||||
<span class="text-bold">
|
||||
<span style="color:#0094ff">
|
||||
<span style="color:#0094ff"> <i>S</i>@sun[i].step @sun[i].Creationtime.Value.ToString("yyyy-MM-dd HH:mm:ss") @sun[i].message </span>
|
||||
</span>
|
||||
</span>
|
||||
<br />
|
||||
}
|
||||
if (sun.Count == 2)
|
||||
{
|
||||
<span class="text-bold">
|
||||
<span style="color:#0094ff">
|
||||
<span style="color:#0094ff"> <i>S6 </i>@sun[sun.Count-1].Creationtime.Value.ToString("yyyy-MM-dd HH:mm:ss") 控制台接收失败</span>
|
||||
</span>
|
||||
</span>
|
||||
<br />
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@{
|
||||
int individual = 1;
|
||||
var messages = authItem.Where(x => x.pmsid == item.pmsId.ToString());
|
||||
if (messages != null)
|
||||
{
|
||||
foreach (var issue in messages)
|
||||
{
|
||||
|
||||
<div style="width:250px; height:180px;">
|
||||
<div>@individual#下发时间:@issue.creationtime.ToString("yyyy/MM/dd HH:mm")</div><div>SN号:@issue.faceSn</div>
|
||||
<div>
|
||||
<div>下发人脸:<img style="width:50px; height:50px;" id="images" src="@issue.picture"></div>
|
||||
</div>
|
||||
</div>
|
||||
++individual;
|
||||
}
|
||||
}
|
||||
}
|
||||
@*<div style="margin-bottom: 0.5rem; "><span class="text-bold">pms内容:</span>@item.pmsContent</div>*@
|
||||
@*<div> </div>*@
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
}
|
||||
<!-- /.card -->
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<script src="~/Theme/js/plugins/pace/pace.min.js"></script>
|
||||
<script src="~/Theme/js/plugins/datapicker/bootstrap-datepicker.js"></script>
|
||||
<script src="~/Theme/js/plugins/datapicker/locales/bootstrap-datepicker.zh-CN.js"></script>
|
||||
<script src="~/Theme/js/plugins/peity/jquery.peity.min.js"></script>
|
||||
|
||||
<script>
|
||||
$('.acet').hide();
|
||||
$(".pagination").addClass("pagination pagination-sm");
|
||||
$(".pagination").children("li").addClass("page-item");
|
||||
$(".page-item").children("a").addClass("page-link");
|
||||
|
||||
|
||||
var url = "/Theme/js/jquery.form.min.js";
|
||||
$.getScript(url);
|
||||
|
||||
$('#data_ovform .input-daterange').datepicker({
|
||||
language: "zh-CN",//语言
|
||||
todayBtn: "linked",//今日按钮
|
||||
keyboardNavigation: false,
|
||||
forceParse: false,
|
||||
autoclose: true,
|
||||
format: "yyyy/mm/dd"//日期格式
|
||||
});
|
||||
function Show(that) {
|
||||
|
||||
$(that).find('.acet').toggle();
|
||||
}
|
||||
$('#startTs').change(function () {
|
||||
var shou = document.getElementById("startTs").value
|
||||
var link = "/App/Log/PmsMessage" + '?date=' + shou
|
||||
window.location.href = link;
|
||||
});
|
||||
|
||||
$('#OrgId').change(function () {//查询类型
|
||||
|
||||
var myType = document.getElementById("OrgId");//获取select对象
|
||||
var index = myType.selectedIndex;//获取选项中的索引,selectIndex表示的是当前所选中的index
|
||||
var code = myType.options[index].value;//获取酒店编号
|
||||
var link = "/App/Log/PmsMessage" + '?state=' + code
|
||||
window.location.href = link;
|
||||
});
|
||||
function selectShow() {
|
||||
var chaxun = document.getElementById('txtOpname').value
|
||||
var link = "/App/Log/PmsMessage" + '?roomname=' + chaxun
|
||||
window.location.href = link;
|
||||
}
|
||||
</script>
|
||||
158
Face.Web/Areas/App/Views/Log/PmsMessageLog.cshtml
Normal file
158
Face.Web/Areas/App/Views/Log/PmsMessageLog.cshtml
Normal file
@@ -0,0 +1,158 @@
|
||||
@using PagedList.Mvc;
|
||||
@using Face.Web.Areas.App.Models;
|
||||
@using Face.Domain.Entities;
|
||||
@using Face.Domain.Application
|
||||
@{
|
||||
ViewBag.Title = "PmsMessageLog";
|
||||
Layout = "~/Areas/App/Views/Shared/_Layout.cshtml";
|
||||
}
|
||||
<script src="~/Plugin/user.js"></script>
|
||||
<link href="~/Theme/css/plugins/datapicker/datepicker3.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="http://auth.blv-oa.com/Lib/plugins/tempusdominus-bootstrap-4/css/tempusdominus-bootstrap-4.min.css">
|
||||
|
||||
<div class="content-wrapper">
|
||||
<section class="content" style="padding:0px;">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-sm-8">
|
||||
<!-- Default box -->
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<span style="font-size:30px">pms传输日志</span>
|
||||
<div class="card-tools">
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<!--<div id="data_ovform" style="width:200px;display: inline-block;">
|
||||
<div class="input-group m-b">
|
||||
<div class="input-daterange input-group" id="datepicker">
|
||||
<input type="text" class="input-sm form-control" readOnly id="startTs" />
|
||||
</div>
|
||||
</div>
|
||||
</div>-->
|
||||
<select class="form-control" id="OrgId" style="width: 300px; ">
|
||||
<option value="0">所有酒店</option>
|
||||
@{
|
||||
List<HotelsItem> Hotelslist = (List<HotelsItem>)Session["qxHotels"];
|
||||
for (int i = 0; i < Hotelslist.Count; i++)
|
||||
{
|
||||
<option value="@Hotelslist[i].HotelId">@Hotelslist[i].HotelName.Trim()</option>
|
||||
}
|
||||
}
|
||||
</select>
|
||||
<input type="text" placeholder="查找酒店" onchange="setHotelDropDownLike();" name="findhotelbyinput" style="height:38px; width:300px; margin-top:5px;" id="findhotelbynameinput">
|
||||
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input id="pmslogHideS8" type="checkbox" checked /> 隐藏S9,S10状态
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="input-group m-b" id="data_fromtoform" style="width:300px">
|
||||
<div class="input-daterange input-group visible-xs-2" style="width: 300px">
|
||||
<i class="fa fa-calendar-alt" style="margin-top:10px;margin-left:6px;margin-right:8px"></i>
|
||||
<input type="text" class="input-sm form-control mytimer" name="start" id="startTs" readonly />
|
||||
@*<span class="input-group-btn" style="width: 45px">
|
||||
<button class="btn default" type="button">
|
||||
<i class="fa fa-calendar-alt"></i>
|
||||
</button>
|
||||
</span>*@
|
||||
<span style="margin-top: 6px; margin-right: 8px;margin-left:8px">至</span>
|
||||
<input type="text" class="input-sm form-control mytimer" name="end" id="endTs" readonly />
|
||||
@*<span class="input-group-btn" style="width: 45px">
|
||||
<button class="btn default" type="button">
|
||||
<i class="fa fa-calendar-alt"></i>
|
||||
</button>
|
||||
</span>*@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<select class="form-control" id="RoomStatus" style="width: 300px; margin-top: 5px;">
|
||||
<option value="3" selected>
|
||||
所有房间
|
||||
</option>
|
||||
<option value="1">
|
||||
开房
|
||||
</option>
|
||||
<option value="0">
|
||||
退房
|
||||
</option>
|
||||
</select>
|
||||
<input type="text" placeholder="根据房间筛选" name="username" style="height: 38px;width:230px; float: left; margin-top: 5px; " id="RoomName">
|
||||
<button class="btn btn-md btn-primary" style=" float: left; margin-top: 5px;margin-left:5px; width: 65px; " id="Btnmodify" onclick=" search('/App/Log/InquirePmsMessageLog');">搜索</button>
|
||||
|
||||
@*条件筛选*@
|
||||
</div>
|
||||
@*条件筛选*@
|
||||
@*内容筛选*@
|
||||
<div class="ibox-content" style="padding:0px;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- /.card -->
|
||||
<div class="col-sm-4" id="faceDetailsBox">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
<script src="~/Theme/js/plugins/pace/pace.min.js"></script>
|
||||
<script src="~/Theme/js/plugins/datapicker/bootstrap-datepicker.js"></script>
|
||||
<script src="~/Theme/js/plugins/datapicker/locales/bootstrap-datepicker.zh-CN.js"></script>
|
||||
<script src="~/Theme/js/plugins/peity/jquery.peity.min.js"></script>
|
||||
<script src="~/Plugin/allPages.js"></script>
|
||||
<script>
|
||||
$(function () {
|
||||
search('/App/Log/InquirePmsMessageLog');
|
||||
});
|
||||
//$('#data_ovform .input-daterange').datepicker({
|
||||
// language: "zh-CN",//语言
|
||||
// todayBtn: "linked",//今日按钮
|
||||
// keyboardNavigation: false,
|
||||
// forceParse: false,
|
||||
// autoclose: true,
|
||||
// format: "yyyy/mm/dd"//日期格式
|
||||
//});
|
||||
|
||||
$('.mytimer').datepicker({
|
||||
language: "zh-CN",//语言
|
||||
todayBtn: "linked",//今日按钮
|
||||
autoclose: true,//选择后关闭日期选择
|
||||
format: "yyyy-mm-dd",//日期格式
|
||||
});
|
||||
|
||||
function setHotelDropDownLike() {
|
||||
|
||||
var hotelliekName = $("#findhotelbynameinput").val();
|
||||
|
||||
|
||||
var matchedValue = 0;
|
||||
$("#OrgId option").each(function (index, it) {
|
||||
if ($(it).text().indexOf(hotelliekName) >= 0 && matchedValue == 0) {
|
||||
$(it).attr("selected", true);
|
||||
matchedValue = $(it).val();
|
||||
}
|
||||
else {
|
||||
$(it).attr("selected", false);
|
||||
}
|
||||
})
|
||||
$("#OrgId").val(matchedValue);
|
||||
}
|
||||
|
||||
|
||||
//监听input
|
||||
var input = document.getElementById('findhotelbynameinput'); // 获取输入框元素
|
||||
|
||||
input.addEventListener('input', function () {
|
||||
setHotelDropDownLike(); // 在输入框内容改变时,执行setHotelDropDownLike方法
|
||||
});
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
170
Face.Web/Areas/App/Views/Log/errormessagehandling.cshtml
Normal file
170
Face.Web/Areas/App/Views/Log/errormessagehandling.cshtml
Normal file
@@ -0,0 +1,170 @@
|
||||
|
||||
@{
|
||||
ViewBag.Title = "errormessagehandling";
|
||||
Layout = "~/Areas/App/Views/Shared/_Layout.cshtml";
|
||||
}
|
||||
<style>
|
||||
.table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td {
|
||||
padding: 0px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
.table > tbody > tr > td, .table > tbody > tr > th, .table > tfoot > tr > td, .table > tfoot > tr > th, .table > thead > tr > td, .table > thead > tr > th {
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
#order {
|
||||
border-top: solid 2px #ddd;
|
||||
}
|
||||
|
||||
.chaxun {
|
||||
text-indent: 5px;
|
||||
}
|
||||
|
||||
.PagedList-skipToLast page-item {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
<link href="~/Theme/css/plugins/datapicker/datepicker3.css" rel="stylesheet">
|
||||
<div class="content-wrapper">
|
||||
<section class="content" style="padding:0px;">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<!-- Default box -->
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<span style="font-size:30px">所有人脸机错误处理日志</span>
|
||||
<div class="card-tools">
|
||||
<button type="button" class="btn btn-tool" data-card-widget="collapse" title="Collapse"></button>
|
||||
<button type="button" class="btn btn-tool" data-card-widget="remove" title="Remove">
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@*条件筛选放在card body部分*@
|
||||
<div class="card-body col-sm-12">
|
||||
<div class="form-horizontal">
|
||||
<div class="form-group row">
|
||||
<label for="OrgId" class="col-md-2 col-sm-12 col-form-label">状态</label>
|
||||
<select class="form-control" id="OrgId" style="width:300px;">
|
||||
<option selected value="-1">全部</option>
|
||||
<option value="1">已处理</option>
|
||||
<option value="0">未处理</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label for="txtOpname" class="col-md-2 col-sm-12 col-form-label">错误信息</label>
|
||||
<input type="text" class="form-control" id="txtOpname" placeholder="请输入错误信息" style="width:300px;">
|
||||
</div>
|
||||
|
||||
<div class="form-group row">
|
||||
<label for="" class="col-md-2 col-sm-12 col-form-label">时间范围</label>
|
||||
<div class="col-md-10 col-sm-12">
|
||||
<div class="row">
|
||||
<div class="col-md-5 col-sm-12">
|
||||
<div class="input-group mb-3">
|
||||
<input type="text" class="input-sm form-control mytimer" name="start" id="startTs" readonly="">
|
||||
<span class="input-group-btn" style="width: 25%">
|
||||
<button class="btn default" type="button">
|
||||
<i class="fa fa-calendar-alt"></i>
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-2 col-sm-12">至</div>
|
||||
<div class="col-md-5 col-sm-12">
|
||||
<div class="input-group mb-3">
|
||||
<input type="text" class="input-sm form-control mytimer" name="end" id="endTs" readonly="">
|
||||
<span class="input-group-btn" style="width: 25%">
|
||||
<button class="btn default" type="button">
|
||||
<i class="fa fa-calendar-alt"></i>
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-lg btn-default" onclick="search('/App/Log/geterrorinfo');" style="float:right;">查询</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@*内容筛选*@
|
||||
<div class="ibox-content" style="padding:0px;">
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<script src="~/Theme/js/plugins/datapicker/bootstrap-datepicker.js"></script>
|
||||
<script src="~/Theme/js/plugins/datapicker/locales/bootstrap-datepicker.zh-CN.js"></script>
|
||||
<script src="~/Plugin/allPages.js"></script>
|
||||
|
||||
<script>
|
||||
$(".pagination").addClass("pagination pagination-sm");
|
||||
$(".pagination").children("li").addClass("page-item");
|
||||
$(".page-item").children("a").addClass("page-link");
|
||||
$(function () {
|
||||
$(function () {
|
||||
search('/App/Log/geterrorinfo');
|
||||
});
|
||||
})
|
||||
|
||||
$('.mytimer').datepicker({
|
||||
language: "zh-CN",//语言
|
||||
todayBtn: "linked",//今日按钮
|
||||
autoclose: true,//选择后关闭日期选择
|
||||
format: "yyyy-mm-dd",//日期格式
|
||||
});
|
||||
|
||||
//function errorinfo(errorcount) {
|
||||
// debugger
|
||||
// $.ajax({
|
||||
// url: "/App/Log/geterrorinfo",
|
||||
// /* data: "",*/
|
||||
// type: "Post", // 提交方式
|
||||
// success: function (data) {
|
||||
// debugger
|
||||
// //$(".ibox-content").html(data);
|
||||
// //$("li.pages").hide();
|
||||
// //if (Pages >= 5) {
|
||||
// // var maxPages = Pages + 3
|
||||
// // var minPages = Pages - 3;
|
||||
// // for (var i = minPages; i < maxPages; i++) {
|
||||
// // $("li.pages").eq(i).show();//显示页数
|
||||
// // }
|
||||
// //} else {
|
||||
// // for (var i = 0; i < 5; i++) {
|
||||
// // $("li.pages").eq(i).show();//显示页数
|
||||
// // }
|
||||
// //}
|
||||
// //if ($("li.pages").length != 0) {
|
||||
// // var pages = $("li.pages").length - 3;//获取页数
|
||||
// // if (Pages >= pages) {
|
||||
// // $("li.right").hide();
|
||||
// // }
|
||||
// // if (Pages > 3) {
|
||||
// // $("li.left").show();
|
||||
// // } else {
|
||||
// // $("li.left").hide();
|
||||
// // }
|
||||
// // $("li.pages a").eq(Pages - 1).css("color", "white");//添加选中字体颜色
|
||||
// // $("li.pages a").eq(Pages - 1).css("background-color", "#00BFFF");//添加选中背景颜色
|
||||
|
||||
// }
|
||||
// });
|
||||
|
||||
//}
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
118
Face.Web/Areas/App/Views/Log/everydayLog.cshtml
Normal file
118
Face.Web/Areas/App/Views/Log/everydayLog.cshtml
Normal file
@@ -0,0 +1,118 @@
|
||||
@model PagedList.IPagedList<Face.Domain.Entities.Dailyoperation>
|
||||
@using PagedList.Mvc;
|
||||
@using Face.Web.Areas.App.Models
|
||||
@{
|
||||
ViewBag.Title = "everydayLog";
|
||||
Layout = "~/Areas/App/Views/Shared/_Layout.cshtml";
|
||||
List<Face.Domain.Entities.Hotels> Hotellist = Face.Services.Cache.CacheHelp.GetHotelslist();
|
||||
|
||||
}
|
||||
|
||||
<script src="~/Plugin/user.js"></script>
|
||||
<style>
|
||||
.table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td {
|
||||
padding: 0px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
.table > tbody > tr > td, .table > tbody > tr > th, .table > tfoot > tr > td, .table > tfoot > tr > th, .table > thead > tr > td, .table > thead > tr > th {
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
#style-format {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#btnaddPLine {
|
||||
float: right;
|
||||
}
|
||||
</style>
|
||||
<div class="content-wrapper">
|
||||
<section class="content" style="padding:0px;">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-sm-8">
|
||||
<!-- Default box -->
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<span style="font-size:30px">日常操作日志</span>
|
||||
<div class="card-tools">
|
||||
@*<button class="btn btn-md btn-primary" type="button" id="Hotelsearch">操作日志</button>*@
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
@*<input type="text" placeholder="进行名字筛选" name="username" style="height:33px;" id="txtOpname"><button class="btn btn-md btn-primary" id="Btnmodify">搜索</button>*@
|
||||
@*条件筛选*@
|
||||
</div>
|
||||
@*内容筛选*@
|
||||
<div class="ibox-content" style="padding:0px;">
|
||||
@foreach (var item in Model)
|
||||
{
|
||||
<div class="yhxx" style="cursor:hand" onclick="Show(this)">
|
||||
<div class="info-box" style="padding: 0px; margin-bottom: 0.5rem; overflow-wrap: break-word;">
|
||||
<span class="info-box-icon" style="height:85px;overflow:hidden;"></span>
|
||||
<div class="info-box-content" style="padding: 0px;">
|
||||
|
||||
<span class="text-bold" style="font-size: 16px; line-height: 1;">
|
||||
操作人:@item.Uname
|
||||
</span>
|
||||
|
||||
|
||||
<span style="line-height: 1;">
|
||||
|
||||
</span>
|
||||
<span style="line-height: 1;">
|
||||
操作时间:@item.Creationtime.ToString("yyyy/MM/yy")
|
||||
|
||||
</span>
|
||||
|
||||
</div>
|
||||
<div class="info-box-content" style="padding: 0px;">
|
||||
<span style="line-height: 1;">
|
||||
酒店:@(Html.DisplayFor(modelItem => item.hotelCode).ToString() != "" ? Hotellist.Single(s => s.Id == item.hotelCode).Name : "")
|
||||
|
||||
</span>
|
||||
|
||||
<span style="line-height: 1;">
|
||||
操作类型:@item.operatetype
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="acet">
|
||||
操作内容: @item.operatedata
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
<!-- /.card -->
|
||||
|
||||
</div>
|
||||
<div style="text-align:center" class="chaxun">
|
||||
@*分页主要代码*@
|
||||
每页 @Model.PageSize 条记录,共 @Model.PageCount 页,当前第 @Model.PageNumber 页
|
||||
<nav aria-label="Contacts Page Navigation">
|
||||
<ul class="pagination justify-content-center m-0">
|
||||
@Html.PagedListPager(Model, page => Url.Action("everydayLog", new { page }), new PagedListRenderOptions() { DisplayItemSliceAndTotal = false, MaximumPageNumbersToDisplay = 5 })
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</section>
|
||||
</div>
|
||||
<script>
|
||||
$(".pagination").addClass("pagination pagination-sm");
|
||||
$(".pagination").children("li").addClass("page-item");
|
||||
$(".page-item").children("a").addClass("page-link");
|
||||
|
||||
$('.acet').hide();
|
||||
|
||||
function Show(that) {
|
||||
console.log(that)
|
||||
$(that).find('.acet').toggle();
|
||||
}
|
||||
|
||||
</script>
|
||||
143
Face.Web/Areas/App/Views/Log/geterrorinfo.cshtml
Normal file
143
Face.Web/Areas/App/Views/Log/geterrorinfo.cshtml
Normal file
@@ -0,0 +1,143 @@
|
||||
|
||||
<style>
|
||||
.table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td {
|
||||
padding: 0px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
.table > tbody > tr > td, .table > tbody > tr > th, .table > tfoot > tr > td, .table > tfoot > tr > th, .table > thead > tr > td, .table > thead > tr > th {
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
#order {
|
||||
border-top: solid 2px #ddd;
|
||||
}
|
||||
|
||||
.chaxun {
|
||||
text-indent: 5px;
|
||||
}
|
||||
|
||||
.PagedList-skipToLast page-item {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
<div id="project">
|
||||
<table class="table dataTables-example" border="0" id="order" style="word-break: break-all;">
|
||||
@foreach (var item in ViewBag.errorinfos)
|
||||
{
|
||||
<tbody class="tbodyList">
|
||||
<tr>
|
||||
<td rowspan="5" style="margin:0px;padding:0px; ">
|
||||
<input type="hidden" id="ID" value="2">
|
||||
<div class="lightBoxGallery">
|
||||
</div>
|
||||
</td>
|
||||
|
||||
<td id="mobile" style="text-align:left; ">
|
||||
<span style="color:#0094ff;">
|
||||
@item.creationdata
|
||||
</span>
|
||||
</td>
|
||||
<td style="" id="mobile2"><span style="color: darkgray;">序号:</span><span style="color:#0094ff"><strong>@item.id</strong></span></td>
|
||||
</tr>
|
||||
<tr></tr>
|
||||
<tr>
|
||||
@if (item.isVerify == 0)
|
||||
{
|
||||
<td>
|
||||
<span style="color: darkgray;">错误信息: </span><span style="color:red;">@item.ErrorNmae</span>
|
||||
</td>
|
||||
}
|
||||
else
|
||||
{
|
||||
<td>
|
||||
<span style="color: darkgray;">错误信息: </span><span style="color: #0094ff;">@item.ErrorNmae</span>
|
||||
</td>
|
||||
}
|
||||
<td>
|
||||
<span style="color: darkgray;">pmsid:@item.pmsids</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="color:darkgray;font-size:smaller;">处理方法:@item.handlinginfo</td>
|
||||
@if (item.isVerify == 0)
|
||||
{
|
||||
|
||||
|
||||
<td style="display:block">
|
||||
@*<span style="color: darkgray;">pmsid:@item.pmsids</span>*@
|
||||
<button type="button" class="btn btn-xl btn-default" onclick="updateerror(@item.id)">
|
||||
确认
|
||||
</button>
|
||||
</td>
|
||||
}
|
||||
else
|
||||
{
|
||||
<td style="display:none">
|
||||
@*<span style="color: darkgray;">pmsid:@item.pmsids</span>*@
|
||||
<button type="button" class="btn btn-xl btn-default">
|
||||
确认
|
||||
</button>
|
||||
</td>
|
||||
}
|
||||
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
}
|
||||
</table>
|
||||
@*<div id="btn" onclick="tip()"></div>*@
|
||||
<div>
|
||||
<nav style="text-align:center;">
|
||||
<ul class="pagination" id="page">
|
||||
<li class="first" onclick="firstPage10('/App/Log/geterrorinfo',(@ViewBag.allpages-@ViewBag.allpages+1))"><a>«</a></li>
|
||||
<li class="left"><a>…</a></li>
|
||||
@for (int i = 0; i < ViewBag.allpages; i++)
|
||||
{
|
||||
<li class="pages" onclick="SpecifyPage10('/App/Log/geterrorinfo',@(i+1))"><a>@(i + 1)</a></li>
|
||||
}
|
||||
<li class="right"><a>…</a></li>
|
||||
<li class="finally"><a onclick="lastPage10('/App/Log/geterrorinfo',@ViewBag.allpages)">»</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
$(".pagination").addClass("pagination pagination-sm");
|
||||
$(".pagination").children("li").addClass("page-item");
|
||||
$(".page-item").children("a").addClass("page-link");
|
||||
//第一页
|
||||
function firstPage10(url, page) {
|
||||
search(url, page, page, page);
|
||||
|
||||
}
|
||||
//最后一页
|
||||
function lastPage10(url, page) {
|
||||
search(url, page, page, page);//起始显示,显示结束,页数背景色的下标
|
||||
}
|
||||
//选择页数
|
||||
function SpecifyPage10(url, page) {
|
||||
search(url, page, page, page);
|
||||
}
|
||||
function updateerror(errid) {
|
||||
$.ajax({
|
||||
url: "/App/Log/updateerrorinfo",
|
||||
data: {
|
||||
id: errid
|
||||
},
|
||||
type: "Post", // 提交方式
|
||||
success: function (data) {
|
||||
if (data > 0) {
|
||||
search('/App/Log/geterrorinfo')
|
||||
alert("处理成功");
|
||||
} else {
|
||||
search('/App/Log/geterrorinfo')
|
||||
alert("处理失败");
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
119
Face.Web/Areas/App/Views/Log/operationLog.cshtml
Normal file
119
Face.Web/Areas/App/Views/Log/operationLog.cshtml
Normal file
@@ -0,0 +1,119 @@
|
||||
@model PagedList.IPagedList<Face.Domain.Entities.ULog>
|
||||
@using PagedList.Mvc;
|
||||
@using Face.Domain.Entities;
|
||||
@using Face.Web.Areas.App.Models;
|
||||
@using Face.Domain.Application;
|
||||
@{
|
||||
ViewBag.Title = "operationLog";
|
||||
Layout = "~/Areas/App/Views/Shared/_Layout.cshtml";
|
||||
List<Hotels> hotels = (List<Hotels>)Session["HotelList"];
|
||||
List<Hosts> hosts = (List<Hosts>)Session["roomlist"];
|
||||
List<TBL_ROOM_BASIC_INFO> ZongRoominfo = (List<TBL_ROOM_BASIC_INFO>)Session["ZongRoominfo"];
|
||||
|
||||
}
|
||||
<script src="~/Plugin/user.js"></script>
|
||||
<style>
|
||||
.table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td {
|
||||
padding: 0px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
.table > tbody > tr > td, .table > tbody > tr > th, .table > tfoot > tr > td, .table > tfoot > tr > th, .table > thead > tr > td, .table > thead > tr > th {
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
#style-format {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#btnaddPLine {
|
||||
float: right;
|
||||
}
|
||||
</style>
|
||||
<div class="content-wrapper">
|
||||
<section class="content" style="padding:0px;">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-sm-8">
|
||||
<!-- Default box -->
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<span style="font-size:30px">人脸机操作日志</span>
|
||||
<div class="card-tools">
|
||||
@*<button class="btn btn-md btn-primary" type="button" id="Hotelsearch">操作日志</button>*@
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
@*<input type="text" placeholder="进行名字筛选" name="username" style="height:33px;" id="txtOpname"><button class="btn btn-md btn-primary" id="Btnmodify">搜索</button>*@
|
||||
@*条件筛选*@
|
||||
</div>
|
||||
@*内容筛选*@
|
||||
<div class="ibox-content" style="padding:0px;">
|
||||
@foreach (var item in Model)
|
||||
{
|
||||
<div class="yhxx">
|
||||
<div class="info-box" style="padding: 0px; margin-bottom: 0.5rem; overflow-wrap: break-word;">
|
||||
<span class="info-box-icon" style="height:85px;overflow:hidden;"></span>
|
||||
<div class="info-box-content" style="padding: 0px;">
|
||||
|
||||
<span class="text-bold" style="font-size: 16px; line-height: 1;">
|
||||
操作人:@item.Uname
|
||||
</span>
|
||||
<span style="line-height: 1;">
|
||||
SN:@item.faceSN
|
||||
</span>
|
||||
|
||||
|
||||
<span style="line-height: 1;">
|
||||
@item.Creationtime.ToString("yyyy/MM/dd hh:mm")
|
||||
</span>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="info-box-content" style="padding: 0px;">
|
||||
<span style="line-height: 1;">
|
||||
@(hotels.FirstOrDefault(x => x.Id == item.hotelcode).Name)
|
||||
</span>
|
||||
<span style="line-height: 1;">
|
||||
@if (item.roomid != null && item.roomid != 0)
|
||||
{
|
||||
TBL_ROOM_BASIC_INFO isok = ZongRoominfo.FirstOrDefault(s => s.ROOM_OLD_ID == item.roomid);
|
||||
<span> @( item.roomid.ToString() != "" ? (isok == null ? "" : isok.ROOM_NUMBER) : "" )</span>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span>无房间</span>
|
||||
}
|
||||
</span>
|
||||
<span style="line-height: 1;">
|
||||
@item.operatetype
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
<!-- /.card -->
|
||||
|
||||
</div>
|
||||
<div style="text-align:center" class="chaxun">
|
||||
@*分页主要代码*@
|
||||
每页 @Model.PageSize 条记录,共 @Model.PageCount 页,当前第 @Model.PageNumber 页
|
||||
<nav aria-label="Contacts Page Navigation">
|
||||
<ul class="pagination justify-content-center m-0">
|
||||
@Html.PagedListPager(Model, page => Url.Action("operationLog", new { page }), new PagedListRenderOptions() { DisplayItemSliceAndTotal = false, MaximumPageNumbersToDisplay = 5 })
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</section>
|
||||
</div>
|
||||
<script>
|
||||
$(".pagination").addClass("pagination pagination-sm");
|
||||
$(".pagination").children("li").addClass("page-item");
|
||||
$(".page-item").children("a").addClass("page-link");
|
||||
</script>
|
||||
Reference in New Issue
Block a user