Authored by wangtao

Merge branch 'master-mj' of http://113.200.75.45:82/monitor_v3/hg-monitor-web into master-mj

... ... @@ -4211,6 +4211,11 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele
});
});
},
//ip格式正则验证
validatorIP: function (ip) {
var re = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
return re.test(ip);
},
validatorPhone: function (phone) {
if (/^(13[0-9]|14[01456879]|15[0-3,5-9]|16[2567]|17[0-8]|18[0-9]|19[0-3,5-9])d{8}$/.test(phone)) {
return {
... ...
... ... @@ -152,7 +152,8 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'laydate'
if (snCode != '' && snCode != undefined) {
for (let i = 0; i < devicesBak.length; i++) {
if (devicesBak[i].snCode == snCode) {
devicesBak.pop(devicesBak[i]);
devicesBak.splice(i,1);
break;
}
}
}
... ... @@ -213,7 +214,8 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'laydate'
if (fittingSN != '' && fittingSN != undefined) {
for (let i = 0; i < fittingsBak.length; i++) {
if (fittingsBak[i].fittingSN == fittingSN) {
fittingsBak.pop(fittingsBak[i]);
fittingsBak.splice(i,1);
break;
}
}
}
... ...
... ... @@ -12,10 +12,11 @@ layui.define(['table', 'admin', 'form', 'laydate', 'common', 'sessions', 'xmSele
var sessions = layui.sessions;
var accessToken = sessions.getToken().access_token;
var kpiPowerSelect;//指标权限类型下拉框
var tagIds = [];
form.render();
initKpiPower();
initSelect();
getTags();
//初始化下拉框数据
function initSelect() {
admin.req({
... ... @@ -71,6 +72,10 @@ layui.define(['table', 'admin', 'form', 'laydate', 'common', 'sessions', 'xmSele
$("#kpiAddForm").find("input[name='funVal']").val(strList[2]);
}
}
//标签
getTags(kpiId);
form.render();
}
}
... ... @@ -134,6 +139,43 @@ layui.define(['table', 'admin', 'form', 'laydate', 'common', 'sessions', 'xmSele
return layui.form.val('kpi-add-form');
}
function getTags(kpiId) {
admin.req({
url: domainName + '/api-web/systag/list?type=KPI&id='+kpiId,
type: 'get',
sync: false,
success: function (res) {
var html = '';
if(res.data && res.data.length > 0){
var activeTag = "";
res.data.forEach((v, i) => {
if(v.selTag){
tagIds.push(v.id);
activeTag = "activeTag";
}else{
activeTag = "";
}
html += ` <span class="tag ${activeTag}" id="${v.id}">${v.name}</span>`;
});
}
$("#kpi-tags").html(html);
//添加点击事件
$("#kpi-tags").find(".tag").on("click",function () {
if($(this).hasClass("activeTag")){
$(this).removeClass("activeTag");
tagIds.splice($(this).attr('id'), 1);
}else{
$(this).addClass("activeTag");
tagIds.push($(this).attr("id"))
}
$("#selectTagIds").val(tagIds)
console.log(tagIds);
});
}
});
}
return {getData: getSubmitData};
});
});
... ...
... ... @@ -417,6 +417,7 @@ layui.define(['table', 'form', 'laydate', 'admin', 'layer', 'laytpl', 'common',
success: function (res) {
layer.msg('保存成功!', {icon: 1, time: 1500}, function () {
layer.closeAll();
saveTagRel(kpiId);
reloadTable();
});
},
... ... @@ -479,6 +480,7 @@ layui.define(['table', 'form', 'laydate', 'admin', 'layer', 'laytpl', 'common',
success: function (res) {
layer.msg('保存成功!', {icon: 1, time: 1500}, function () {
layer.closeAll();
saveTagRel(submitData.kpiId);
reloadTable();
});
},
... ... @@ -502,6 +504,25 @@ layui.define(['table', 'form', 'laydate', 'admin', 'layer', 'laytpl', 'common',
}
function saveTagRel(kpiId){
var selectTagIds = $("#selectTagIds").val();
var parmas = {
id:kpiId,
tags:selectTagIds,
type:"KPI"
}
admin.req({
url: common.domainName + '/api-web/systag/save',
method: 'get',
data : parmas,
sync: false,
success: function (res) {
console.log("标签保存成功!")
}
});
}
//删除模块
$("#delkpi").on("click", function () {
... ...
layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'xmSelect', 'laydate', 'upload'], function (exports) {
layui.define(['table', 'form', 'admin', 'layer', 'common', 'commonDetail','sessions', 'xmSelect', 'laydate', 'upload'], function (exports) {
var $ = layui.$;
var form = layui.form;
var layer = layui.layer;
... ... @@ -10,7 +10,7 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'xmSelect
var upload = layui.upload;
var domainName = common.domainName;
var xmSelect = layui.xmSelect;
var commonDetail = layui.commonDetail;
//对外暴露的接口
exports('recoveryverifyAdd', function (data) {
var accessToken = localStorage.getItem("accessToken");
... ... @@ -91,9 +91,38 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'xmSelect
return
}
deviceSaveCount += 1;
var html = "<tr><td><select class='layui-select' style='display: block' lay-verify = 'required'><option value='0'>备份服务器</option><option value='1'>源端生产服务器</option><option value='2'>恢复服务器</option></select></td><td><input type='text' width='40px' class='layui-input' lay-verify = 'required'/></td><td><input type='text' class='layui-input' width='40px' lay-verify = 'required'/></td><td><input type='text' width='40px' class='layui-input' lay-verify = 'required'/></td><td><input type='button' value='保存' class='edit' style='background-color: #b71010;line-height: 18px'/></td></tr>"
var html = "<tr><td><select class='layui-select' style='display: block' lay-verify = 'required'><option value='0'>备份服务器</option><option value='1'>源端生产服务器</option><option value='2'>恢复服务器</option></select></td><td><input type='text' width='40px' lay-filter='ip' class='layui-input' lay-verify = 'required'/></td><td><input type='text' class='layui-input' width='40px' lay-filter='os' lay-verify = 'required'/></td><td><input type='text' width='40px' lay-filter='databaseVersion' class='layui-input' lay-verify = 'required'/></td><td><input type='button' value='保存' class='edit' style='background-color: #b71010;line-height: 18px'/></td></tr>"
$("#device-table").append(html);
$("input[lay-filter='ip']").keyup(function (){
var ip = $(this).val();
var os = $(this).closest('tr').find('td').find("input[lay-filter='os']");
var databaseVersion = $(this).closest('tr').find('td').find("input[lay-filter='databaseVersion']");
if(commonDetail.validatorIP(ip)){
//获取资源信息
admin.req({
url: domainName + '/api-web/manage/resource/page?page=1&limit=1&resType=DATABASE_ORACLE&ipEquals='+ip
}).done(function (response) {
if(response.data!=null && response.data.length>0){
var resource = response.data[0];
os.val(resource.os);
$(this).closest('tr').find('td').find("input[lay-filter='os']").val(resource.os);
admin.req({
url: domainName + '/api-web/manage/resource/findById?resId='+resource.resId
}).done(function (response) {
if(response.obj !=null && response.obj.proto){
var obj = response.obj;
if(obj.proto !=null && obj.proto.JDBC){
var version = obj.proto.JDBC.filter(obj=>obj.paramCode==='version');
if(version) {
databaseVersion.val(version[0].paramValue);
}
}
}
});
}
});
};
}).keyup();
$("#table-device :button.edit").click(function () {
var toEdit = this.value == '保存';
this.value = toEdit ? '删除' : '保存';
... ... @@ -123,7 +152,8 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'xmSelect
if (ip != '' && ip != undefined) {
for (let i = 0; i < devicesBak.length; i++) {
if (devicesBak[i].ip == ip) {
devicesBak.pop(devicesBak[i]);
devicesBak.splice(i,1);
break;
}
}
}
... ... @@ -448,11 +478,47 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'xmSelect
tdArr.push(this.innerHTML);
} else {
this.innerHTML = '<input type="text" value="' + this.innerHTML.replace(/"/g, '&quot;').replace(/<\/?.+?>/g, '').replace(/ /g, '') + '"/>';
}
if(t==0){
this.innerHTML = '<input type="text" lay-filter="ip" width="40px" value="' + this.innerHTML.replace(/"/g, '&quot;').replace(/<\/?.+?>/g, '').replace(/ /g, '') + '"/>';
}else if(t==1){
this.innerHTML = '<input type="text" lay-filter="os" width="40px" value="' + this.innerHTML.replace(/"/g, '&quot;').replace(/<\/?.+?>/g, '').replace(/ /g, '') + '"/>';
}else {
this.innerHTML = '<input type="text" lay-filter="databaseVersion" width="40px" value="' + this.innerHTML.replace(/"/g, '&quot;').replace(/<\/?.+?>/g, '').replace(/ /g, '') + '"/>';
} }
})
if (toEdit) {
$("input[lay-filter='ip']").keyup(function (){
var ip = $(this).val();
var os = $(this).closest('tr').find('td').find("input[lay-filter='os']");
var databaseVersion = $(this).closest('tr').find('td').find("input[lay-filter='databaseVersion']");
if(commonDetail.validatorIP(ip)){
//获取资源信息
admin.req({
url: domainName + '/api-web/manage/resource/page?page=1&limit=1&resType=DATABASE_ORACLE&ipEquals='+ip
}).done(function (response) {
if(response.data!=null && response.data.length>0){
var resource = response.data[0];
os.val(resource.os);
$(this).closest('tr').find('td').find("input[lay-filter='os']").val(resource.os);
admin.req({
url: domainName + '/api-web/manage/resource/findById?resId='+resource.resId
}).done(function (response) {
if(response.obj !=null && response.obj.proto){
var obj = response.obj;
if(obj.proto !=null && obj.proto.JDBC){
var version = obj.proto.JDBC.filter(obj=>obj.paramCode==='version');
if(version) {
databaseVersion.val(version[0].paramValue);
}
}
}
});
}
});
};
}).keyup();
} else {
if (tdArr.length > 0) {
var deviceObj = {
... ... @@ -463,12 +529,14 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'xmSelect
'id': id,
'recordId': recordId
}
devicesBak.forEach(e => {
devicesBak = devicesBak.filter((val)=>val.id!=deviceObj.id);
devicesBak.push(deviceObj);
/* devicesBak.forEach(e => {
if (deviceObj.id == e.id) {
devicesBak.pop(e);
devicesBak.push(deviceObj);
}
})
})*/
}
}
});
... ...
... ... @@ -26,6 +26,7 @@ layui.define(['table', 'form', 'laydate', 'common', 'sessions', 'laydate', 'admi
var passPatternTips = '';
var loginName = localStorage.getItem("lgn");
var bizId = '';
var tagIds = [];
form.render()
... ... @@ -203,9 +204,9 @@ layui.define(['table', 'form', 'laydate', 'common', 'sessions', 'laydate', 'admi
if (bean.reportFlag == '1') {
$form.find("input[name='reportFlag'][value='1']").attr("checked", "checked")
}
if (bean.resLabel) {
tagsContent = bean.resLabel.split("#");
}
// if (bean.resLabel) {
// tagsContent = bean.resLabel.split("#");
// }
createResExtendParamRow(res['extend'])
createProtocolDom(res['proto'], true)
// 资源类型下拉框 资产系统过来的没有资源类型,需要选择
... ... @@ -265,11 +266,12 @@ layui.define(['table', 'form', 'laydate', 'common', 'sessions', 'laydate', 'admi
})
}
$("#resManageAddForm").find("input[name='resType']").val(resType);
inputTags.render({
elem: '#resLabelPluginsSelector',
content: tagsContent,
aldaBtn: false
})
// inputTags.render({
// elem: '#resLabelPluginsSelector',
// content: tagsContent,
// aldaBtn: false
// })
//表单验证规则
form.verify({
... ... @@ -280,6 +282,43 @@ layui.define(['table', 'form', 'laydate', 'common', 'sessions', 'laydate', 'admi
});
})
getTags(id);
function getTags(resId) {
admin.req({
url: common.domainName + '/api-web/systag/list?type=RES&id='+resId,
type: 'get',
sync: false,
success: function (res) {
var html = '';
if(res.data && res.data.length > 0){
var activeTag = "";
res.data.forEach((v, i) => {
if(v.selTag){
tagIds.push(v.id);
activeTag = "activeTag";
}else{
activeTag = "";
}
html += ` <span class="tag ${activeTag}" id="${v.id}">${v.name}</span>`;
});
}
$("#res-tags").html(html);
//添加点击事件
$("#res-tags").find(".tag").on("click",function () {
if($(this).hasClass("activeTag")){
$(this).removeClass("activeTag");
tagIds.splice($(this).attr('id'), 1);
}else{
$(this).addClass("activeTag");
tagIds.push($(this).attr("id"))
}
$("#selectResTagIds").val(tagIds)
});
}
});
}
//动态渲染域的下拉列表数据
function initDoMainSelect(domainId) {
var newDimainlist = dimainlist.filter(function (v) {
... ...
... ... @@ -1967,12 +1967,13 @@ layui.define(['common', 'tree', 'laypage', 'laytpl', 'upload', 'admin', 'form',
if (currentHardwareFlag.endsWith("Y")) formData.resCategory = 'share'
if (currentHardwareFlag.endsWith("N")) formData.resCategory = 'resources'
}
var tags = [];
var span = $("div#tags span");
span.each(function () {
tags.push($(this).find("em").text())
})
formData['resLabel'] = tags.toString();
// var tags = [];
// var span = $("div#tags span");
// span.each(function () {
// tags.push($(this).find("em").text())
// })
// formData['resLabel'] = tags.toString();
/*formData['proto'] = proto;
formData['extend'] = extend;*/
if (formData.auxiliaryAdmin) {
... ... @@ -1997,6 +1998,7 @@ layui.define(['common', 'tree', 'laypage', 'laytpl', 'upload', 'admin', 'form',
layer.msg('保存成功!', {icon: 1, time: 1500}, function () {
layer.closeAll();
reloadTable();
saveTagRel(formData.resId);//保存标签
if (next == '1') {
//openCollTaskAndAlarm(res.object)
openResourceRelationConfigHtml(res.object.resId, res.object.resType)
... ... @@ -2009,6 +2011,26 @@ layui.define(['common', 'tree', 'laypage', 'laytpl', 'upload', 'admin', 'form',
})
}
function saveTagRel(reId){
var selectResTagIds = $("#selectResTagIds").val();
var parmas = {
id:reId,
tags:selectResTagIds,
type:"RES"
}
admin.req({
url: common.domainName + '/api-web/systag/save',
method: 'get',
data : parmas,
sync: false,
success: function (res) {
console.log("标签保存成功!")
}
});
}
//资源协议验证
function validatedProtoParam() {
var flag = true, msg = '';
... ...
... ... @@ -129,7 +129,9 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','commonDetail', 'sessi
if (id > 0 && id != undefined) {
for (let i = 0; i < adjustBak.length; i++) {
if (adjustBak[i].id == id) {
adjustBak.pop(adjustBak[i]);
//adjustBak.pop(adjustBak[i]);
adjustBak.splice(i,1);
break;
}
}
}
... ...
... ... @@ -108,7 +108,9 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'commonDetail','sessi
if (name != '' && name != undefined) {
for (let i = 0; i < staffsBak.length; i++) {
if (staffsBak[i].userName == name) {
staffsBak.pop(staffsBak[i]);
//staffsBak.pop(staffsBak[i]);
staffsBak.splice(i,1);
break;
}
}
}
... ...
... ... @@ -8686,4 +8686,16 @@ form.layui-card-header.layuiadmin-card-header-auto {
border: 1px solid #3B91FF;
background: #3B91FF;
color: #ffffff;
}
\ No newline at end of file
}
.tag{
padding: 5px 15px;
border: 1px solid #958f8f;
border-radius: 5px;
cursor: pointer;
}
.activeTag{
background: #E7F0FF;
color: #4B93F6;
border-color: #478FF8;
}
... ...
... ... @@ -138,13 +138,22 @@
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label textarea-label">描述:</label>
<div class="layui-input-block" style="margin-left: 130px;">
<textarea class="layui-textarea" name="remark"></textarea>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">标签:</label>
<div class="layui-input-block" style="margin-left: 140px;">
<div id="kpi-tags" style="line-height: 40px">
</div>
</div>
</div>
<input type="hidden" id="selectTagIds">
</div>
<button class="kpi-add-submit" lay-submit style="display: none" type="submit">提交</button>
</form>
</article>
... ...
... ... @@ -146,6 +146,16 @@
<textarea class="layui-textarea" name="remark"></textarea>
</div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">标签:</label>
<div class="layui-input-block" style="margin-left: 140px;">
<div id="kpi-tags" style="line-height: 40px">
</div>
</div>
</div>
<input type="hidden" id="selectTagIds">
</div>
<button class="kpi-add-submit" lay-submit style="display: none" type="submit">提交</button>
</form>
</article>
... ...
... ... @@ -189,13 +189,17 @@
</div>
<div class="layui-form-item">
<label class="layui-form-label">标签</label>
<!--<div class="layui-input-block">-->
<!-- <div class="tags" id="tags">-->
<!-- <input autocomplete="off" class="layui-input" id="resLabelPluginsSelector" name="resLabel"-->
<!-- placeholder="标签,回车输入"-->
<!-- type="text">-->
<!-- </div>-->
<!--</div>-->
<div class="layui-input-block">
<div class="tags" id="tags">
<input autocomplete="off" class="layui-input" id="resLabelPluginsSelector" name="resLabel"
placeholder="标签,回车输入"
type="text">
</div>
<div id="res-tags" style="line-height: 40px;margin-left: 10px;"></div>
</div>
<input type="hidden" id="selectResTagIds">
</div>
<div class="layui-form-item">
<label class="layui-form-label" style="height: 100px">备注</label>
... ...
... ... @@ -130,8 +130,8 @@
</div>
<div class="layui-form-item" id="backDiv" hidden>
<div class="layui-inline inline-half">
<label class="layui-form-label" style="width: 160px"><span
style="color: red;font-size: 16px">*</span>演练前是否备份:</label>
<label class="layui-form-label" style="width: 130px"><span
style="color: red;font-size: 16px">*</span>演练前备份:</label>
<div class="layui-input-block">
<input type="radio" lay-filter="isBack" name="isBack" value="0" title="是" checked>
<input type="radio" lay-filter="isBack" name="isBack" value="1" title="否">
... ... @@ -147,8 +147,8 @@
</div>
<div class="layui-form-item" id="resultDiv" hidden>
<div class="layui-inline inline-half">
<label class="layui-form-label"><span
style="color: red;font-size: 16px">*</span>演练结果:</label>
<label class="layui-form-label" style="width: 130px"><span
style="color: red;font-size: 16px">*</span>演练后结果:</label>
<div class="layui-input-block">
<input type="radio" name="status" value="0" title="成功" checked>
<input type="radio" name="status" value="1" title="失败">
... ...