Authored by 王涛

Merge branch 'master-mj-yjpnew' into 'master-mj'

fix:数据库恢复验证报告,备份实施服务器列表增加根据填入ip补全操作系统和数据库版本信息的优化



See merge request !1134
... ... @@ -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;
}
}
}
... ...
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);
}
})
})*/
}
}
});
... ...
... ... @@ -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;
}
}
}
... ...
... ... @@ -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="失败">
... ...