Merge branch 'master-mj-yjpnew' into 'master-mj'
fix:数据库恢复验证报告,备份实施服务器列表增加根据填入ip补全操作系统和数据库版本信息的优化 See merge request !1134
Showing
6 changed files
with
97 additions
and
18 deletions
@@ -4211,6 +4211,11 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele | @@ -4211,6 +4211,11 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele | ||
4211 | }); | 4211 | }); |
4212 | }); | 4212 | }); |
4213 | }, | 4213 | }, |
4214 | + //ip格式正则验证 | ||
4215 | + validatorIP: function (ip) { | ||
4216 | + 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])$/ | ||
4217 | + return re.test(ip); | ||
4218 | + }, | ||
4214 | validatorPhone: function (phone) { | 4219 | validatorPhone: function (phone) { |
4215 | 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)) { | 4220 | 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)) { |
4216 | return { | 4221 | return { |
@@ -152,7 +152,8 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'laydate' | @@ -152,7 +152,8 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'laydate' | ||
152 | if (snCode != '' && snCode != undefined) { | 152 | if (snCode != '' && snCode != undefined) { |
153 | for (let i = 0; i < devicesBak.length; i++) { | 153 | for (let i = 0; i < devicesBak.length; i++) { |
154 | if (devicesBak[i].snCode == snCode) { | 154 | if (devicesBak[i].snCode == snCode) { |
155 | - devicesBak.pop(devicesBak[i]); | 155 | + devicesBak.splice(i,1); |
156 | + break; | ||
156 | } | 157 | } |
157 | } | 158 | } |
158 | } | 159 | } |
@@ -213,7 +214,8 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'laydate' | @@ -213,7 +214,8 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'laydate' | ||
213 | if (fittingSN != '' && fittingSN != undefined) { | 214 | if (fittingSN != '' && fittingSN != undefined) { |
214 | for (let i = 0; i < fittingsBak.length; i++) { | 215 | for (let i = 0; i < fittingsBak.length; i++) { |
215 | if (fittingsBak[i].fittingSN == fittingSN) { | 216 | if (fittingsBak[i].fittingSN == fittingSN) { |
216 | - fittingsBak.pop(fittingsBak[i]); | 217 | + fittingsBak.splice(i,1); |
218 | + break; | ||
217 | } | 219 | } |
218 | } | 220 | } |
219 | } | 221 | } |
1 | -layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'xmSelect', 'laydate', 'upload'], function (exports) { | 1 | +layui.define(['table', 'form', 'admin', 'layer', 'common', 'commonDetail','sessions', 'xmSelect', 'laydate', 'upload'], function (exports) { |
2 | var $ = layui.$; | 2 | var $ = layui.$; |
3 | var form = layui.form; | 3 | var form = layui.form; |
4 | var layer = layui.layer; | 4 | var layer = layui.layer; |
@@ -10,7 +10,7 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'xmSelect | @@ -10,7 +10,7 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'xmSelect | ||
10 | var upload = layui.upload; | 10 | var upload = layui.upload; |
11 | var domainName = common.domainName; | 11 | var domainName = common.domainName; |
12 | var xmSelect = layui.xmSelect; | 12 | var xmSelect = layui.xmSelect; |
13 | - | 13 | + var commonDetail = layui.commonDetail; |
14 | //对外暴露的接口 | 14 | //对外暴露的接口 |
15 | exports('recoveryverifyAdd', function (data) { | 15 | exports('recoveryverifyAdd', function (data) { |
16 | var accessToken = localStorage.getItem("accessToken"); | 16 | var accessToken = localStorage.getItem("accessToken"); |
@@ -91,9 +91,38 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'xmSelect | @@ -91,9 +91,38 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'xmSelect | ||
91 | return | 91 | return |
92 | } | 92 | } |
93 | deviceSaveCount += 1; | 93 | deviceSaveCount += 1; |
94 | - 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>" | 94 | + 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>" |
95 | $("#device-table").append(html); | 95 | $("#device-table").append(html); |
96 | - | 96 | + $("input[lay-filter='ip']").keyup(function (){ |
97 | + var ip = $(this).val(); | ||
98 | + var os = $(this).closest('tr').find('td').find("input[lay-filter='os']"); | ||
99 | + var databaseVersion = $(this).closest('tr').find('td').find("input[lay-filter='databaseVersion']"); | ||
100 | + if(commonDetail.validatorIP(ip)){ | ||
101 | + //获取资源信息 | ||
102 | + admin.req({ | ||
103 | + url: domainName + '/api-web/manage/resource/page?page=1&limit=1&resType=DATABASE_ORACLE&ipEquals='+ip | ||
104 | + }).done(function (response) { | ||
105 | + if(response.data!=null && response.data.length>0){ | ||
106 | + var resource = response.data[0]; | ||
107 | + os.val(resource.os); | ||
108 | + $(this).closest('tr').find('td').find("input[lay-filter='os']").val(resource.os); | ||
109 | + admin.req({ | ||
110 | + url: domainName + '/api-web/manage/resource/findById?resId='+resource.resId | ||
111 | + }).done(function (response) { | ||
112 | + if(response.obj !=null && response.obj.proto){ | ||
113 | + var obj = response.obj; | ||
114 | + if(obj.proto !=null && obj.proto.JDBC){ | ||
115 | + var version = obj.proto.JDBC.filter(obj=>obj.paramCode==='version'); | ||
116 | + if(version) { | ||
117 | + databaseVersion.val(version[0].paramValue); | ||
118 | + } | ||
119 | + } | ||
120 | + } | ||
121 | + }); | ||
122 | + } | ||
123 | + }); | ||
124 | + }; | ||
125 | + }).keyup(); | ||
97 | $("#table-device :button.edit").click(function () { | 126 | $("#table-device :button.edit").click(function () { |
98 | var toEdit = this.value == '保存'; | 127 | var toEdit = this.value == '保存'; |
99 | this.value = toEdit ? '删除' : '保存'; | 128 | this.value = toEdit ? '删除' : '保存'; |
@@ -123,7 +152,8 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'xmSelect | @@ -123,7 +152,8 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'xmSelect | ||
123 | if (ip != '' && ip != undefined) { | 152 | if (ip != '' && ip != undefined) { |
124 | for (let i = 0; i < devicesBak.length; i++) { | 153 | for (let i = 0; i < devicesBak.length; i++) { |
125 | if (devicesBak[i].ip == ip) { | 154 | if (devicesBak[i].ip == ip) { |
126 | - devicesBak.pop(devicesBak[i]); | 155 | + devicesBak.splice(i,1); |
156 | + break; | ||
127 | } | 157 | } |
128 | } | 158 | } |
129 | } | 159 | } |
@@ -448,11 +478,47 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'xmSelect | @@ -448,11 +478,47 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'xmSelect | ||
448 | tdArr.push(this.innerHTML); | 478 | tdArr.push(this.innerHTML); |
449 | 479 | ||
450 | } else { | 480 | } else { |
451 | - this.innerHTML = '<input type="text" value="' + this.innerHTML.replace(/"/g, '"').replace(/<\/?.+?>/g, '').replace(/ /g, '') + '"/>'; | ||
452 | - } | 481 | + if(t==0){ |
482 | + this.innerHTML = '<input type="text" lay-filter="ip" width="40px" value="' + this.innerHTML.replace(/"/g, '"').replace(/<\/?.+?>/g, '').replace(/ /g, '') + '"/>'; | ||
483 | + | ||
484 | + }else if(t==1){ | ||
485 | + this.innerHTML = '<input type="text" lay-filter="os" width="40px" value="' + this.innerHTML.replace(/"/g, '"').replace(/<\/?.+?>/g, '').replace(/ /g, '') + '"/>'; | ||
486 | + | ||
487 | + }else { | ||
488 | + this.innerHTML = '<input type="text" lay-filter="databaseVersion" width="40px" value="' + this.innerHTML.replace(/"/g, '"').replace(/<\/?.+?>/g, '').replace(/ /g, '') + '"/>'; | ||
489 | + } } | ||
453 | }) | 490 | }) |
454 | if (toEdit) { | 491 | if (toEdit) { |
455 | - | 492 | + $("input[lay-filter='ip']").keyup(function (){ |
493 | + var ip = $(this).val(); | ||
494 | + var os = $(this).closest('tr').find('td').find("input[lay-filter='os']"); | ||
495 | + var databaseVersion = $(this).closest('tr').find('td').find("input[lay-filter='databaseVersion']"); | ||
496 | + if(commonDetail.validatorIP(ip)){ | ||
497 | + //获取资源信息 | ||
498 | + admin.req({ | ||
499 | + url: domainName + '/api-web/manage/resource/page?page=1&limit=1&resType=DATABASE_ORACLE&ipEquals='+ip | ||
500 | + }).done(function (response) { | ||
501 | + if(response.data!=null && response.data.length>0){ | ||
502 | + var resource = response.data[0]; | ||
503 | + os.val(resource.os); | ||
504 | + $(this).closest('tr').find('td').find("input[lay-filter='os']").val(resource.os); | ||
505 | + admin.req({ | ||
506 | + url: domainName + '/api-web/manage/resource/findById?resId='+resource.resId | ||
507 | + }).done(function (response) { | ||
508 | + if(response.obj !=null && response.obj.proto){ | ||
509 | + var obj = response.obj; | ||
510 | + if(obj.proto !=null && obj.proto.JDBC){ | ||
511 | + var version = obj.proto.JDBC.filter(obj=>obj.paramCode==='version'); | ||
512 | + if(version) { | ||
513 | + databaseVersion.val(version[0].paramValue); | ||
514 | + } | ||
515 | + } | ||
516 | + } | ||
517 | + }); | ||
518 | + } | ||
519 | + }); | ||
520 | + }; | ||
521 | + }).keyup(); | ||
456 | } else { | 522 | } else { |
457 | if (tdArr.length > 0) { | 523 | if (tdArr.length > 0) { |
458 | var deviceObj = { | 524 | var deviceObj = { |
@@ -463,12 +529,14 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'xmSelect | @@ -463,12 +529,14 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'xmSelect | ||
463 | 'id': id, | 529 | 'id': id, |
464 | 'recordId': recordId | 530 | 'recordId': recordId |
465 | } | 531 | } |
466 | - devicesBak.forEach(e => { | 532 | + devicesBak = devicesBak.filter((val)=>val.id!=deviceObj.id); |
533 | + devicesBak.push(deviceObj); | ||
534 | + /* devicesBak.forEach(e => { | ||
467 | if (deviceObj.id == e.id) { | 535 | if (deviceObj.id == e.id) { |
468 | devicesBak.pop(e); | 536 | devicesBak.pop(e); |
469 | devicesBak.push(deviceObj); | 537 | devicesBak.push(deviceObj); |
470 | } | 538 | } |
471 | - }) | 539 | + })*/ |
472 | } | 540 | } |
473 | } | 541 | } |
474 | }); | 542 | }); |
@@ -129,7 +129,9 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','commonDetail', 'sessi | @@ -129,7 +129,9 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','commonDetail', 'sessi | ||
129 | if (id > 0 && id != undefined) { | 129 | if (id > 0 && id != undefined) { |
130 | for (let i = 0; i < adjustBak.length; i++) { | 130 | for (let i = 0; i < adjustBak.length; i++) { |
131 | if (adjustBak[i].id == id) { | 131 | if (adjustBak[i].id == id) { |
132 | - adjustBak.pop(adjustBak[i]); | 132 | + //adjustBak.pop(adjustBak[i]); |
133 | + adjustBak.splice(i,1); | ||
134 | + break; | ||
133 | } | 135 | } |
134 | } | 136 | } |
135 | } | 137 | } |
@@ -108,7 +108,9 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'commonDetail','sessi | @@ -108,7 +108,9 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'commonDetail','sessi | ||
108 | if (name != '' && name != undefined) { | 108 | if (name != '' && name != undefined) { |
109 | for (let i = 0; i < staffsBak.length; i++) { | 109 | for (let i = 0; i < staffsBak.length; i++) { |
110 | if (staffsBak[i].userName == name) { | 110 | if (staffsBak[i].userName == name) { |
111 | - staffsBak.pop(staffsBak[i]); | 111 | + //staffsBak.pop(staffsBak[i]); |
112 | + staffsBak.splice(i,1); | ||
113 | + break; | ||
112 | } | 114 | } |
113 | } | 115 | } |
114 | } | 116 | } |
@@ -130,8 +130,8 @@ | @@ -130,8 +130,8 @@ | ||
130 | </div> | 130 | </div> |
131 | <div class="layui-form-item" id="backDiv" hidden> | 131 | <div class="layui-form-item" id="backDiv" hidden> |
132 | <div class="layui-inline inline-half"> | 132 | <div class="layui-inline inline-half"> |
133 | - <label class="layui-form-label" style="width: 160px"><span | ||
134 | - style="color: red;font-size: 16px">*</span>演练前是否备份:</label> | 133 | + <label class="layui-form-label" style="width: 130px"><span |
134 | + style="color: red;font-size: 16px">*</span>演练前备份:</label> | ||
135 | <div class="layui-input-block"> | 135 | <div class="layui-input-block"> |
136 | <input type="radio" lay-filter="isBack" name="isBack" value="0" title="是" checked> | 136 | <input type="radio" lay-filter="isBack" name="isBack" value="0" title="是" checked> |
137 | <input type="radio" lay-filter="isBack" name="isBack" value="1" title="否"> | 137 | <input type="radio" lay-filter="isBack" name="isBack" value="1" title="否"> |
@@ -147,8 +147,8 @@ | @@ -147,8 +147,8 @@ | ||
147 | </div> | 147 | </div> |
148 | <div class="layui-form-item" id="resultDiv" hidden> | 148 | <div class="layui-form-item" id="resultDiv" hidden> |
149 | <div class="layui-inline inline-half"> | 149 | <div class="layui-inline inline-half"> |
150 | - <label class="layui-form-label"><span | ||
151 | - style="color: red;font-size: 16px">*</span>演练结果:</label> | 150 | + <label class="layui-form-label" style="width: 130px"><span |
151 | + style="color: red;font-size: 16px">*</span>演练后结果:</label> | ||
152 | <div class="layui-input-block"> | 152 | <div class="layui-input-block"> |
153 | <input type="radio" name="status" value="0" title="成功" checked> | 153 | <input type="radio" name="status" value="0" title="成功" checked> |
154 | <input type="radio" name="status" value="1" title="失败"> | 154 | <input type="radio" name="status" value="1" title="失败"> |
-
Please register or login to post a comment