Files
2025-11-26 11:18:26 +08:00

605 lines
28 KiB
JavaScript

let that;
let datatable = null;
const app = {
data() {
return {
// 搜索结果
sreach: [],
// 搜索的酒店id 用于改变下拉框选择
sreach_hotel: 0,
// 搜索的房间id 用于改变下拉框选择
sreach_room: 0,
// 搜索的酒店id
sreach: [],
// 类型筛选选择值
selecttype: [{ val: "0", text: "全部类型" }, { val: "1", text: "Launcher信息" }, { val: "2", text: "系统信息" }, { val: "3", text: "设备通讯" }, { val: "4", text: "通讯状态" }, { val: "5", text: "定期保存" }, { val: "6", text: "网络处理" }, { val: "7", text: "事件处理" }],
// 类型筛选选择值
type: Cookies.get('EVENTLOGGING_type') || 0,
// 收起
sq: false,
// 第一次加载
isfirst: true,
// 酒店组值
selected_hotel_group: Cookies.get('EVENTLOGGING_hotelgroup') || 0,
// 酒店组
selecthotelgroup: [{ HotelGroupsId: "0", HotelGroupsName: "全部酒店组" }],
// 事件id
mac: "",
// 房间当前选择
selected_room: Cookies.get('EVENTLOGGING_room') || 0,
// 房间选择
selectroom: [{ val: "0", text: "全部房间", mac: "" }],
// 起始时间
startDate: Cookies.get('EVENTLOGGING_startDate') || moment().startOf("days").format('YYYY-MM-DD HH:mm:ss'),
// 结束时间
endDate: Cookies.get('EVENTLOGGING_endDate') || moment().format('YYYY-MM-DD HH:mm:ss'),
// 表格
datatable: null,
// 天数快捷选择值
selected_day: Cookies.get('EVENTLOGGING_day') || 1,
// 天数快捷选择
selectday: [{ val: "1", text: "今天" }, { val: "2", text: "昨天" }, { val: "3", text: "最近7天" }, { val: "4", text: "最近30天" }, { val: "-1", text: "自定义" }],
// 每页数量选择值
selected_page: Cookies.get('EVENTLOGGING_page') || 10,
// 每页数量
selectpage: [{ val: "10", text: "每页10条" }, { val: "20", text: "每页20条" }, { val: "50", text: "每页30条" }, { val: "100", text: "每页40条" }],
// 酒店选择
selecthotel: [{ HotelId: "0", HotelName: "全部酒店" }],
// 酒店选择值
selected_hotel: Cookies.get('EVENTLOGGING_hotel') || 0,
// 高度
appheight: "",
data_: {}
,
}
},
mounted() {
that = this;
that.init();
},
methods: {
// 获取参数
getUrlParam: function (name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
var r = window.location.search.substr(1).match(reg); //匹配目标参数
if (r != null) return unescape(r[2]); return null; //返回参数值
},
// 弹窗酒店 点击酒店隐藏房间列表
// 逻辑思维 我们给每个酒店的房间 添加样式类为 hotelid + 酒店id 形成独特的样式类
// 点击酒店名称时 会把对应的 独特的样式类 传过来 这里使用 toggle() 就可以做到缩放自如
sqjd(class_) {
// 获取他下面有几个相关的mac
$("." + class_).toggle()
},
// 搜索结果点击房间 mac显示在搜索结果弹窗顶部 如果是val = 1 则点击了确定按钮 表示选定了mac 执行最后的搜索
selmac_(mac, hotel, room, val = 0) {
hotel = Number.parseInt(hotel + "".replace(/\s*/g, ""))
room = Number.parseInt(room + "".replace(/\s*/g, ""))
if (val == 1) {
if (that.sreach_hotel == -1) {
table_init();
return;
}
that.mac = that.mac_;
// 改变选择 酒店组 暂时 不反推 反推需要写接口
that.selected_hotel = that.sreach_hotel;
that.selected_room = that.sreach_room;
that.selected_hotel_group = that.sreach_room = that.sreach_room = 0;
that.selecthotel_init();
return;
}
that.sreach_room = room;
that.mac_ = mac;
that.sreach_hotel = hotel;
$('#selmac_').val(mac);
},
// 点击文件显示文件名下的信息
logfilename: function (nRow, aData,hide = -1) {
let start = 0;
if (hide == -1 && $(nRow).find('.SHOW').length == 1) {
$(nRow).find('.SHOW').last().toggle();
return;
};
console.log(that.data_[aData.logfilename])
if (typeof (that.data_[aData.logfilename]) != 'undefined' && that.data_[aData.logfilename].length > 0) {
start = that.data_[aData.logfilename].length;
} else {
that.data_[aData.logfilename] = [];
}
MyPost("/Server/LOGFILENAME", { data: { type: that.type, start, name: aData.logfilename } }, res => {
if (res == null) {
toastr.error('酒店信息获取失败~');
return;
}
that.data_[aData.logfilename] = that.data_[aData.logfilename].concat(res);
try {
let div = $(nRow).find('.SHOW').length > 0 ? $(nRow).find('.SHOW').last().html() : `<div style=" overflow: scroll;max-height:300px" class="col-12 row SHOW"></div>`;
let sqt = "";
for (let _data of res) {
sqt += `<div class="bg-info col-12">` + `sn:` + _data['log_sn']+`</div>`;
for (let j in _data) {
if (j.indexOf('__tag__:__') >= 0) { continue; }
if (j == 'log_type') {
sqt += `<div class="col-12 col-md-4">` + j + `:` + that.typetext(_data[j]) + `</div>`;
continue;
}
sqt += `<div class="col-12 col-md-4">` + j + `:` + _data[j]+`</div>`;
}
}
let s = Number.parseInt(aData.sum) > Number.parseInt(that.data_[aData.logfilename].length);
console.log(s)
sqt += `<div onclick='that.logfilename("` + (s ? nRow + "," + aData + ",-1" : "") + `")' class=" bg-` + (s ? "info" : "warning") + ` text-center col-12">` + (s ? "加载更多..." : "已加载全部数据") + `</div>`;
div = div.substring(0, div.length - 6);
div += sqt + "</div>";
$(nRow).find('.SHOW').remove();
$(nRow).find('td').append(div);
} catch (e) {
console.log(e)
}
});
},
// 搜索mac 显示弹窗
selmac() {
MyPost("/API/FindROOMINFO", { isSwal: true, title: "搜索中...", data: { mac: that.mac_, type: 1 } }, (res) => {
if (res == null || res == 'null' || res.length <= 0) {
toastr.error('未能查询到数据~')
return;
}
that.sreach = res;
// 清空之的搜索
// that.mac_ = "";
let data = `<div class="input-group mb-1">
<div class="input-group-prepend">
<span class="input-group-text">选择的MAC</span>
</div>
<input id ='selmac_' type="text" disabled value="`+ that.mac + `" class="form-control">
</div>
<div style="max-height: 50vh;overflow: scroll;" class='text-left row'>{elm}</div>`;
let elm = ``;
for (let i of res) {
elm += `<div onclick="that.sqjd('hotelid` + i[0].hotelid + `')" class='col-12 text-info'>` + i[0].hotelname + `(` + i.length + `)</div>`;
for (let j of i) {
elm += `<div onclick="that.selmac_('` + j.mac + `','` + j.hotelid + `','` + j.id + `')" class='col-6 hotelid` + i[0].hotelid + `'>` + j.room_number + `</div>`;
elm += `<div onclick="that.selmac_('` + j.mac + `','` + j.hotelid + `','` + j.id + `')" class='col-6 hotelid` + i[0].hotelid + `'>` + j.mac + `</div>`;
}
}
data = data.replace("{elm}", elm);
setTimeout(function () {
let sw = Swal.fire({
title: '',
html: data,
confirmButtonText: '确定',
cancelButtonText: '取消',
showCancelButton: true,
reverseButtons: true
}).then((result) => {
if (result.value) {
// 点击了确定按钮
that.selmac_("", "", "", 1);
}
})
}, 500);
});
},
// 数据弹窗
loc_(el) {
let data = JSON.parse($(el).attr('data'));
let STR =
`<div class="col-12 row text-info card-body shadow-sm" style="padding:0.5rem; background-color: rgb(255, 250, 240);">
{{elm}}
</div>
`;
let streml = "";
for (let i = 1; i < 11; i++) {
let istr = "type_param_" + i;
let istr_ = "p" + i;
streml += `<div class="col-12 text-left">
`+ istr_ + ` : <span class='text-gray'>` + data[istr] + `</span></div>`;
}
STR = STR.replace("{{elm}}", streml);
let sw = Swal.fire({
title: '',
html: STR,
confirmButtonText: '确定',
showCancelButton: false,
})
},
// 收起按钮 页面顶部点击收起
sq_change() {
that.sq = !that.sq;
this.loc();
},
// 初始化
init() {
that.mac = that.getUrlParam('mac');
this.loc();
that.table_init();
//this.selectgroup_init();
// 带有时间选择的日期范围选择器
$('#reservationtime').daterangepicker({
startDate: that.startDate,
endDate: that.endDate,
timePicker: true,
maxDate: new Date(),
minDate: "2022-3-25 01:01:01",
timePicker24Hour: true,
timePickerSeconds: true,
locale: {
cancelLabel: 'Clear',
format: 'YYYY-MM-DD HH:mm:ss'
}
}).on('apply.daterangepicker', function (ev, picker) {
that.startDate = picker.startDate.format('YYYY-MM-DD HH:mm:ss');
that.endDate = picker.endDate.format('YYYY-MM-DD HH:mm:ss');
that.selected_day = -1;
}).on('cancel.daterangepicker', function (ev, picker) {
// 这个 this 指向的是时间输入框
$(this).val('');
that.startDate = null;
that.endDate = null;
that.selected_day = -1;
});
},
// 酒店组改变事件 更改酒店列表信息
selectgroup_init() {
try {
if (that.isfirst) {
MyPost("/Api/HOTELINFO", { isSwal: that.isfirst }, res => {
if (res == null) {
toastr.error('酒店信息获取失败~');
return;
}
that.selecthotelgroup = that.selecthotelgroup.concat(res || []);
let oldok = false;
for (let i of that.selecthotelgroup) {
if (i.HotelGroupsId == that.selected_hotel_group) {
oldok = true;
break;
}
}
if (!oldok) {
// 历史选择的酒店组不存在
that.selected_hotel_group = 0;
that.selected_hotel = 0;
that.selected_room = 0;
}
// 初始化 酒店列表
that.selecthotel_init();
});
} else {
that.selecthotel_init();
}
} catch (e) {
console.log("酒店组选择报错." + e);
}
},
// 获取酒店下拉列表信息
selecthotel_init() {
that.selected_hotel_group = Number.parseInt(that.selected_hotel_group + "".replace(/\s*/g, ""));
// 如果历史酒店组的id 未能在数据找到 就让选择全部酒店组 显示所有酒店
let alldata = [{ HotelId: "0", HotelName: "全部酒店" }];
for (let i of that.selecthotelgroup) {
if (i.Hotels != null) {
alldata = alldata.concat(i.Hotels);
}
if (i.HotelGroupsId == that.selected_hotel_group && that.selected_hotel_group > 0) {
that.selecthotel = [{ HotelId: "0", HotelName: "全部酒店" }];
that.selecthotel = that.selecthotel.concat(i.Hotels || []);
let isold = false;
// 如果是第一次 那就 判断 历史选择的酒店 是否有存在 没有的话就 重置选择
if (that.isfirst && that.selected_hotel != 0) {
for (let j of that.selecthotel) {
if (j.HotelId == that.selected_hotel) {
isold = true;
break;
}
}
}
if (!isold) {
that.selected_hotel = 0;
that.selected_room = 0;
}
that.selectroom_init();
return;
}
}
// 如果没有找到 就 重置选择
that.selected_hotel_group = 0;// that.selected_hotel_group > 0 正常操作 是不存在找不到的 酒店组时已经判断过一次了。
that.selected_hotel = 0;
that.selected_room = 0;
that.selecthotel = alldata;
that.selectroom_init();
},
// 获取房间下拉列表信息
selectroom_init() {
that.selectroom = [{ val: "0", text: "全部房间", mac: "" }];
MyPost("/Api/ROOMINFO", { isSwal: that.isfirst, data: { HotelId: that.selected_hotel, GroupId: that.selected_hotel_group } }, res => {
that.selectroom = that.selectroom.concat(res || []);
let oldok = false;
if (that.isfirst && that.selected_room != 0) {
for (let i of that.selectroom) {
if (i.val == that.selected_room) {
oldok = true;
break;
}
}
}
if (!oldok) {
// 历史选择的房间不存在 或者 不是第一次加载
that.selected_room = 0;
}
if (that.selected_room > 0 && !that.isfirst) {
that.table_init();
}
});
},
// 房间选择事件信息
room_change() {
let mac = that.selectroom[that.selected_room].mac + "".replace(/\s*/g, "");
if (mac.length <= 1) {
toastr.error('当前房间没有绑定mac~')
return;
}
that.mac = mac;
that.table_init();
},
// 时间快捷选择
selected_day_change: function () {
that.selected_day = Number.parseInt(that.selected_day + "".replace(/\s*/g, ""));
switch (that.selected_day) {
case 1:
that.startDate = moment().startOf("days").format('YYYY-MM-DD HH:mm:ss')
that.endDate = moment().format('YYYY-MM-DD HH:mm:ss')
break;
case 2:
that.startDate = moment().subtract(1, 'days').startOf("days").format('YYYY-MM-DD HH:mm:ss');
that.endDate = moment().subtract(1, 'days').endOf("days").format('YYYY-MM-DD HH:mm:ss');
break;
case 3:
that.startDate = moment().subtract(6, 'days').format('YYYY-MM-DD HH:mm:ss');
that.endDate = moment().format('YYYY-MM-DD HH:mm:ss');
break;
case 4:
that.startDate = moment().subtract(29, 'days').format('YYYY-MM-DD HH:mm:ss');
that.endDate = moment().format('YYYY-MM-DD HH:mm:ss');
break;
}
// that.selected_day 是string 类型 他会自己转成 number 进行比较
if (that.selected_day > -1) {
$('#reservationtime').val(that.startDate + ' - ' + that.endDate);
that.table_init();
}
},
// 计算距离
loc() {
setTimeout(() => {
$('.main-footer').hide();
that.appheight = "calc(100vh - " + $('.table-responsive').offset().top + "px)";
}, 10);
},
// 点击显示
showtype(elm, data) {
let STR =
`
<div data='`+ JSON.stringify(data) + `' onclick="javascript:event.stopPropagation();event.preventDefault();that.loc_(this)" class="col-12 row text-info card-body shadow-sm" style="padding:0.5rem; background-color: rgb(255, 250, 240);">
{{elm}}
</div>
`;
let streml = "";
//streml += `<div class="col-12 col-md-6">create: <span class='text-gray'>` + data['createdatetime'] + `</span></div>`;
streml += `<div class="col-12">log_datetime: <span class='text-gray'>` + data['log_datetime'] + `</span></div>`;
for (let i = 3; i < 11; i++) {
let istr = "type_param_" + i;
let istr_ = "p" + i;
streml += `<div class="col-md-4 col-6">
`+ istr_ + ` : <span class='text-gray'>` + data[istr] + `</span></div>`;
}
streml += `<div class="col-12">file: <span class='text-gray'>` + data['logfilename'] + `</span></div>`;
STR = STR.replace("{{elm}}", streml);
if (($(elm).find(".card-body").length != 0)) {
$($(elm).find(".card-body")).toggle();
} else {
$(elm).find("td").append(STR);
}
},
// 信息类型判断
typetext(val_num, type = 0) {
val_num = Number.parseInt(val_num + "".replace(/\s*/g, ""));
switch (val_num) {
case 1:
val_num = "Launcher信息";
if (type == 1) {
val_num = "#00868B"
}
break;
case 2:
val_num = "系统信息";
if (type == 1) {
val_num = "#43CD80"
}
break;
case 3:
val_num = "设备通讯";
if (type == 1) {
val_num = "#698B22"
}
break;
case 4:
val_num = "通讯状态";
if (type == 1) {
val_num = "#8B814C"
}
break;
case 5:
val_num = "定期保存";
if (type == 1) {
val_num = "#8B658B"
}
break;
case 6:
val_num = "网络处理";
if (type == 1) {
val_num = "#CD6839"
}
break;
case 7:
val_num = "事件处理";
if (type == 1) {
val_num = "#D02090"
}
break;
default:
val_num = "其他处理";
if (type == 1) {
val_num = "#8A2BE2"
}
break;
}
return val_num;
},
// 省略
ellipsis(value) {
if (("" + value).length > 8) {
value = value.slice(0, 8) + "..."
}
return value;
},
// 表格初始化
table_init() {
try {
that.mac = that.mac + "".replace(/\s*/g, "");
if (that.mac.length <= 0) {
toastr.error('未选定mac~')
return;
}
if (that.isfirst) {
that.isfirst = false;
}
if (datatable != null) {
datatable.destroy();
}
$.fn.dataTable.ext.errMode = 'none';//屏蔽掉报错弹窗
datatable = $('#dataTable').on('error.dt', function (e, settings, techNote, message) {
console.log(e, settings, techNote)
console.log('An error has been reported by DataTables: ', message);
}).DataTable({
"data": null,
"ordering": true,
"paging": true,
"serverSide": true,
"ajax": function (datas, callback, settings) {
datas.hotelid = that.selected_hotel;
datas.mac = that.mac;
datas.roomid = that.selected_room;
datas.startDate = that.startDate;
datas.endDate = that.endDate;
datas.type = that.type;
MyPost("/Server/RcuDataLog_", { isSwal: true, data: datas }, (res) => {
that.rcudata = res || [];
// 写入数据缓存
Cookies.set('EVENTLOGGING_hotelgroup', that.selected_hotel_group, { expires: 7, path: window.location.pathname });
if (that.endDate != null) {
Cookies.set('EVENTLOGGING_endDate', that.endDate, { expires: 7, path: window.location.pathname });
}
if (that.startDate != null) {
Cookies.set('EVENTLOGGING_startDate', that.startDate, { expires: 7, path: window.location.pathname });
}
Cookies.set('EVENTLOGGING_day', that.selected_day, { expires: 7, path: window.location.pathname });
Cookies.set('EVENTLOGGING_hotel', that.selected_hotel, { expires: 7, path: window.location.pathname });
Cookies.set('EVENTLOGGING_page', that.selected_page, { expires: 7, path: window.location.pathname });
Cookies.set('EVENTLOGGING_mac', that.mac, { expires: 7, path: window.location.pathname });
Cookies.set('EVENTLOGGING_room', that.selected_room, { expires: 7, path: window.location.pathname });
if (that.isfirst) { that.isfirst = false; }
callback(res);
}, (err) => {
toastr.error('网络繁忙~')
})
},
'iDisplayLength': that.selected_page,
"columns": [{
'sTitle': '',/*.substring(6)*/
'render': function (data, type, rcu) {
try {
let STR =
`<div class="text-success col-10 col-md-4">
<button style="display:none;" type="button" class='btn btn-xs' style="COLOR:#FFF !important; background: `+ that.typetext(rcu.log_type, 1) + ` !important;border: none; ">` + that.typetext(rcu.log_type) + `</button>
`+ rcu.logfilename + `
</div>
<div class="col-md-4 col-2 text-info">
`+ rcu.sum + `
<span style="display:none;" class="text-danger">
(`+ rcu.log_timespan + `) SN:</span>
</div>
<div style="display:none;" class="col-md-4 text-danger"></div>
<div style="display:none;" class="col-md-4 col-6">
`+ rcu.createdatetime + `
</div>
<div style="display:none;" class="col-md-4 col-6">
`+ rcu.type_param_2 + `
</div>
`;
return STR;
} catch (e) {
console.log(e);
}
}
}],
"fnCreatedRow": function (nRow, aData, iDataIndex) {
$(nRow).addClass('bg-white').addClass('shadow')
$(nRow).children("td").addClass('row');
$(nRow).children("td").click(
function () {
//that.showtype(nRow, aData);
that.logfilename(nRow, aData);
}
)
return;
},
"searching": false,
"autoWidth": false,
"bDeferRender ": true,
"bLengthChange": false,
"language":
{
"sProcessing": "处理中...",
"sLengthMenu": "显示 _MENU_ 项结果",
"sZeroRecords": "没有匹配结果",
"sInfo": "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
"sInfoEmpty": "显示第 0 至 0 项结果,共 0 项",
"sInfoFiltered": "(由 _MAX_ 项结果过滤)",
"sInfoPostFix": "",
"sSearch": "搜索:",
"sUrl": "",
"sEmptyTable": "表中数据为空",
"sLoadingRecords": "载入中...",
"sInfoThousands": ",",
"oPaginate": {
"sFirst": "首页",
"sPrevious": "上页",
"sNext": "下页",
"sLast": "末页"
},
"oAria": {
"sSortAscending": ": 以升序排列此列",
"sSortDescending": ": 以降序排列此列"
}
}
});
} catch (e) {
console.log(e)
}
}
}
}
Vue.createApp(app).mount('#app');
$('#app').show();