Authored by wangtao

Merge branch 'master-500-dev' of http://113.200.75.45:82/monitor_v3/hg-monitor-w…

…eb into master-500-dev
Showing 36 changed files with 545 additions and 182 deletions
@@ -317,8 +317,8 @@ layui.define(['form', 'admin', 'laydate', 'common', 'sessions', 'reskpilist'], f @@ -317,8 +317,8 @@ layui.define(['form', 'admin', 'laydate', 'common', 'sessions', 'reskpilist'], f
317 charToExpr(data, 'commonlyExpr'); 317 charToExpr(data, 'commonlyExpr');
318 charToExpr(data, 'importantExpr'); 318 charToExpr(data, 'importantExpr');
319 charToExpr(data, 'seriousExpr'); 319 charToExpr(data, 'seriousExpr');
320 -  
321 - form.on('submit(add-alarmpolicy-form)', function () { 320 + //lsq 告警策略编辑不了,id值应该选择的是submit的按钮的lay-filter,不是add-alarmpolicy-form, 2022-09-27
  321 + form.on('submit(alarmpolicy-form-save-id)', function () {
322 delete data.noticeMergeFlagExpr; 322 delete data.noticeMergeFlagExpr;
323 admin.req({ 323 admin.req({
324 url: domainName + '/api-web/alarmPolicy/save?access_token=' + accessToken 324 url: domainName + '/api-web/alarmPolicy/save?access_token=' + accessToken
@@ -407,7 +407,7 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele @@ -407,7 +407,7 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele
407 var $html = addIconByValue(valueStr); 407 var $html = addIconByValue(valueStr);
408 var resStyle = obj.alarmEleMatchStyle(ar.flag, ar.kpiId); 408 var resStyle = obj.alarmEleMatchStyle(ar.flag, ar.kpiId);
409 span += ' <span ' + menuId + ' style="text-align:left;width:40%">' + ar.kpiName + '</span>' + 409 span += ' <span ' + menuId + ' style="text-align:left;width:40%">' + ar.kpiName + '</span>' +
410 - '<span title="' + titleStr + '" style="width:60%;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;' + resStyle + '">' 410 + '<span title="' + titleStr + '" style="width:60%;overflow: hidden !important;text-overflow: ellipsis;white-space: nowrap;' + resStyle + '">'
411 + $html + valueStr +unit+ '</span>'; 411 + $html + valueStr +unit+ '</span>';
412 //补充空白区域 412 //补充空白区域
413 if (v.length < cols) { 413 if (v.length < cols) {
@@ -4554,6 +4554,8 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele @@ -4554,6 +4554,8 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele
4554 //lsq 状态信息无其他下探 2022-06-08 4554 //lsq 状态信息无其他下探 2022-06-08
4555 var statusF = $menu.data('statusf'); 4555 var statusF = $menu.data('statusf');
4556 var one = $menu.data('one'); 4556 var one = $menu.data('one');
  4557 + //lsq 只有kpiIdent==1时才有性能趋势 2022-09-27
  4558 + var kpiIdent=$menu.data('ident');
4557 var menubox = '<div class="detail_menubox" id="detail_menubox_id" style="color:#666;"><ul>'; 4559 var menubox = '<div class="detail_menubox" id="detail_menubox_id" style="color:#666;"><ul>';
4558 //lsq 只有状态指标下探的标识 4560 //lsq 只有状态指标下探的标识
4559 if (one == 1) { 4561 if (one == 1) {
@@ -4567,7 +4569,7 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele @@ -4567,7 +4569,7 @@ layui.define(['laytpl', 'admin', 'form', 'table', 'echarts', 'sessions', 'xmSele
4567 if (!hideM) { 4569 if (!hideM) {
4568 menubox += '<li type="m"><i class="layui-icon">&#xe64d;</i>过滤多指标</li>'; 4570 menubox += '<li type="m"><i class="layui-icon">&#xe64d;</i>过滤多指标</li>';
4569 } 4571 }
4570 - if (!nature) { 4572 + if (!nature && kpiIdent==1) {
4571 menubox += '<li type="t"><i class="layui-icon">&#xe62c;</i>性能趋势</li>'; 4573 menubox += '<li type="t"><i class="layui-icon">&#xe62c;</i>性能趋势</li>';
4572 } 4574 }
4573 // if(!statusF){ 4575 // if(!statusF){
@@ -144,98 +144,96 @@ layui.define(['form', 'admin', 'layer', 'common', 'sessions', 'xmSelect', 'resli @@ -144,98 +144,96 @@ layui.define(['form', 'admin', 'layer', 'common', 'sessions', 'xmSelect', 'resli
144 //保存 144 //保存
145 $("#jgraph-form-save-id").on("click", function (e, flag) { 145 $("#jgraph-form-save-id").on("click", function (e, flag) {
146 //当flag为true,为保存并设计,当flag为false时,为保存 146 //当flag为true,为保存并设计,当flag为false时,为保存
147 - form.on('submit(form-grapheditor)', function () {  
148 - var topoTitle = $("#jgraph_topo_name").val();  
149 - if (!topoTitle) {  
150 - layer.msg('请输入拓扑名称!', {icon: 7, time: 3000});  
151 - return false;  
152 - }  
153 - //获取Users值  
154 - var userflag = 0;  
155 - //新增时必须用户授权包换登录用户的  
156 - if (id) {  
157 - userflag = 1;  
158 - }  
159 - var userNow = localStorage.getItem("lgn");  
160 - var topoUsers = [];  
161 - var selectedUsers = xmSelectUsers.getValue();  
162 - if (selectedUsers != null && selectedUsers.length > 0) {  
163 - $.each(selectedUsers, function (i, v) {  
164 - if (v.value == userNow) {  
165 - userflag = 1;  
166 - }  
167 - topoUsers.push(v.value + "#" + v.name);  
168 - });  
169 - }  
170 - if (userflag == 0) {  
171 - layer.msg('保存失败,用户权限必须包含当前登录账户!', {icon: 2, time: 3000});  
172 - return false;  
173 - }  
174 - //获取Roles值  
175 - var topoRoles = [];  
176 - var isExistAdmin = false;  
177 - var selectedRoles = xmSelectRoles.getValue();  
178 - if (selectedRoles != null && selectedRoles.length > 0) {  
179 - $.each(selectedRoles, function (i, v) {  
180 - topoRoles.push(v.value + "#" + v.roleName);  
181 - if (v.code == 'ADMIN') {  
182 - isExistAdmin = true;  
183 - }  
184 - });  
185 - }  
186 - // 必须要选管理员  
187 - if (!isExistAdmin) {  
188 - layer.msg('保存失败,角色必须包含当管理员权限(ADMIN)!', {icon: 2, time: 3000});  
189 - return false;  
190 - } 147 + var topoTitle = $("#jgraph_topo_name").val();
  148 + if (!topoTitle) {
  149 + layer.msg('请输入拓扑名称!', {icon: 7, time: 3000});
  150 + return false;
  151 + }
  152 + //获取Users值
  153 + var userflag = 0;
  154 + //新增时必须用户授权包换登录用户的
  155 + if (id) {
  156 + userflag = 1;
  157 + }
  158 + var userNow = localStorage.getItem("lgn");
  159 + var topoUsers = [];
  160 + var selectedUsers = xmSelectUsers.getValue();
  161 + if (selectedUsers != null && selectedUsers.length > 0) {
  162 + $.each(selectedUsers, function (i, v) {
  163 + if (v.value == userNow) {
  164 + userflag = 1;
  165 + }
  166 + topoUsers.push(v.value + "#" + v.name);
  167 + });
  168 + }
  169 + if (userflag == 0) {
  170 + layer.msg('保存失败,用户权限必须包含当前登录账户!', {icon: 2, time: 3000});
  171 + return false;
  172 + }
  173 + //获取Roles值
  174 + var topoRoles = [];
  175 + var isExistAdmin = false;
  176 + var selectedRoles = xmSelectRoles.getValue();
  177 + if (selectedRoles != null && selectedRoles.length > 0) {
  178 + $.each(selectedRoles, function (i, v) {
  179 + topoRoles.push(v.value + "#" + v.roleName);
  180 + if (v.code == 'ADMIN') {
  181 + isExistAdmin = true;
  182 + }
  183 + });
  184 + }
  185 + // 必须要选管理员
  186 + if (!isExistAdmin) {
  187 + layer.msg('保存失败,角色必须包含当管理员权限(ADMIN)!', {icon: 2, time: 3000});
  188 + return false;
  189 + }
191 190
192 191
193 - var targetId = '';  
194 - var topoType = $("#jgraph-topo_type").val();//拓扑类型  
195 - if (topoType && topoType === '1') {//业务拓扑  
196 - targetId = bizId;  
197 - }  
198 - if (topoType && topoType === '2') {//资源拓扑  
199 - targetId = $("#jgraph-topo_resid").val();  
200 - }  
201 - if (topoType && topoType === '4') {//机房拓扑  
202 - targetId = $("#jgraph-topo_room").val();  
203 - }  
204 - var jtopo = {  
205 - topoName: topoTitle, //拓扑名称  
206 - jtopoId: $("#jgraph-topoId").val(),  
207 - isDefault: $('input[name="isDefault"]:checked').val(), //是否默认,0否 1是  
208 - topoType: topoType,  
209 - targetId: targetId,  
210 - userIds: topoUsers.toString(),  
211 - roleIds: topoRoles.toString(),  
212 - remark: $("#jgraph_remark").val(),  
213 - };  
214 - admin.req({  
215 - url: common.domainName + '/api-web/mxgraph/save?access_token=' + access_token  
216 - , type: 'post'  
217 - , async: false  
218 - , contentType: "application/json;charset=UTF-8"//指定消息请求类型  
219 - , data: JSON.stringify(jtopo)  
220 - }).done(function (res) {  
221 - if (res.success) {  
222 - layer.msg('保存成功', {icon: 1, time: 2000}, function () {  
223 - layer.closeAll()  
224 - if (flag) {  
225 - if (!id) {  
226 - id = res.str;  
227 - }  
228 - //http://192.168.0.247:8085  
229 - var url = common.graphEditorOrigin + "/jgraph/grapheditor/index.html?access_token=" + access_token + '&id=' + id;  
230 - window.open(url); 192 + var targetId = '';
  193 + var topoType = $("#jgraph-topo_type").val();//拓扑类型
  194 + if (topoType && topoType === '1') {//业务拓扑
  195 + targetId = bizId;
  196 + }
  197 + if (topoType && topoType === '2') {//资源拓扑
  198 + targetId = $("#jgraph-topo_resid").val();
  199 + }
  200 + if (topoType && topoType === '4') {//机房拓扑
  201 + targetId = $("#jgraph-topo_room").val();
  202 + }
  203 + var jtopo = {
  204 + topoName: topoTitle, //拓扑名称
  205 + jtopoId: $("#jgraph-topoId").val(),
  206 + isDefault: $('input[name="isDefault"]:checked').val(), //是否默认,0否 1是
  207 + topoType: topoType,
  208 + targetId: targetId,
  209 + userIds: topoUsers.toString(),
  210 + roleIds: topoRoles.toString(),
  211 + remark: $("#jgraph_remark").val(),
  212 + };
  213 + admin.req({
  214 + url: common.domainName + '/api-web/mxgraph/save?access_token=' + access_token
  215 + , type: 'post'
  216 + , async: false
  217 + , contentType: "application/json;charset=UTF-8"//指定消息请求类型
  218 + , data: JSON.stringify(jtopo)
  219 + }).done(function (res) {
  220 + if (res.success) {
  221 + layer.msg('保存成功', {icon: 1, time: 2000}, function () {
  222 + layer.closeAll()
  223 + if (flag) {
  224 + if (!id) {
  225 + id = res.str;
231 } 226 }
232 - });  
233 - } else {  
234 - layer.msg('拓扑保存失败,请与管理员联系!', {icon: 7, time: 3000});  
235 - }  
236 - });  
237 - return false;//必须要写,解决禁用submit提交,ajax方法才能正确执行,且表单不会自动刷新  
238 - }) 227 + //http://192.168.0.247:8085
  228 + var url = common.graphEditorOrigin + "/jgraph/grapheditor/index.html?access_token=" + access_token + '&id=' + id;
  229 + window.open(url);
  230 + }
  231 + });
  232 + } else {
  233 + layer.msg('拓扑保存失败,请与管理员联系!', {icon: 7, time: 3000});
  234 + }
  235 + });
  236 + return false;//必须要写,解决禁用submit提交,ajax方法才能正确执行,且表单不会自动刷新
239 form.render(); 237 form.render();
240 }); 238 });
241 renderGraphTopoInfo(); 239 renderGraphTopoInfo();
@@ -246,18 +246,22 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'xmSelect @@ -246,18 +246,22 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'xmSelect
246 246
247 //监听ckecked选中事件 247 //监听ckecked选中事件
248 table.on('checkbox(reslist_resListTable)', function (obj) { 248 table.on('checkbox(reslist_resListTable)', function (obj) {
  249 + var reslist = [];
249 if (obj.checked == true) { 250 if (obj.checked == true) {
250 if (obj.type == 'one' && resListSelectIds.indexOf(obj.data.resId) === -1) {//勾选单条 251 if (obj.type == 'one' && resListSelectIds.indexOf(obj.data.resId) === -1) {//勾选单条
251 resListSelectIds.push(obj.data.resId); 252 resListSelectIds.push(obj.data.resId);
  253 + reslist.push(obj.data);
252 } 254 }
253 if (obj.type == 'all') {//勾选全部 255 if (obj.type == 'all') {//勾选全部
254 for (var i = 0; i < table_data.length; i++) { 256 for (var i = 0; i < table_data.length; i++) {
  257 + reslist.push(table_data[i]);
255 if (resListSelectIds.indexOf(obj.data.resId) === -1) { 258 if (resListSelectIds.indexOf(obj.data.resId) === -1) {
256 resListSelectIds.push(table_data[i].resId); 259 resListSelectIds.push(table_data[i].resId);
257 } 260 }
258 } 261 }
259 } 262 }
260 } else { 263 } else {
  264 + reslist.push(obj.data);
261 if (obj.type == 'one') { 265 if (obj.type == 'one') {
262 for (var i = 0; i < resListSelectIds.length; i++) { 266 for (var i = 0; i < resListSelectIds.length; i++) {
263 if (resListSelectIds[i] == obj.data.resId) { 267 if (resListSelectIds[i] == obj.data.resId) {
@@ -281,7 +285,7 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'xmSelect @@ -281,7 +285,7 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'xmSelect
281 285
282 // 跨域发送信息,不能删除 286 // 跨域发送信息,不能删除
283 obj.data["checked"] = obj.checked; 287 obj.data["checked"] = obj.checked;
284 - window.top.postMessage({res: obj.data}, "*"); 288 + window.top.postMessage({res: reslist}, "*");
285 289
286 }) 290 })
287 291
@@ -95,7 +95,8 @@ layui.define(['table', 'form', 'laydate', 'treeTable', 'admin', 'layer', 'laytpl @@ -95,7 +95,8 @@ layui.define(['table', 'form', 'laydate', 'treeTable', 'admin', 'layer', 'laytpl
95 templet: '<div><span role-data-edit="{{d.id}}" data-name="{{d.name}}" ' + 95 templet: '<div><span role-data-edit="{{d.id}}" data-name="{{d.name}}" ' +
96 'data-code="{{d.code}}" data-remark="{{d.remark}}" class="layui-table-link">{{d.name}}</span></div>' 96 'data-code="{{d.code}}" data-remark="{{d.remark}}" class="layui-table-link">{{d.name}}</span></div>'
97 } 97 }
98 - , {field: 'userNames', title: '角色用户', align: 'left', width: '25%'} 98 + , {field: 'code', title: '编码', align: 'left', width: '10%'}
  99 + , {field: 'userNames', title: '角色用户', align: 'left', width: '20%'}
99 , {field: 'remark', title: '角色描述', align: 'left',} 100 , {field: 'remark', title: '角色描述', align: 'left',}
100 , { 101 , {
101 field: 'updateTime', 102 field: 'updateTime',
@@ -8660,3 +8660,11 @@ form.layui-card-header.layuiadmin-card-header-auto { @@ -8660,3 +8660,11 @@ form.layui-card-header.layuiadmin-card-header-auto {
8660 width: 16px; 8660 width: 16px;
8661 height: 16px; 8661 height: 16px;
8662 } 8662 }
  8663 +/*lsq 快照管理详情页基本信息悬浮样式修改 2022-09-27*/
  8664 +#base-info-tips>.info-table>li span,#base-info-tips>.info-table>li span .div-link-state-list{
  8665 + display: flex;
  8666 + align-items: center;
  8667 +}
  8668 +#base-info-tips>.info-table>li span:nth-child(2n){
  8669 + flex:2;
  8670 +}
@@ -345,8 +345,8 @@ @@ -345,8 +345,8 @@
345 </div> 345 </div>
346 </div> 346 </div>
347 </div> 347 </div>
348 -  
349 - <button type="submit" lay-submit class="layui-btn hide" id="alarmpolicy-form-save-id">保存</button> 348 + <!--lsq 告警策略编辑不了,按钮没有lay-filter 2022-09-27-->
  349 + <button type="submit" lay-submit class="layui-btn hide" lay-filter="alarmpolicy-form-save-id" id="alarmpolicy-form-save-id">保存</button>
350 </form> 350 </form>
351 <script> 351 <script>
352 layui.use('alarmpolicyAdd', function (fn) { 352 layui.use('alarmpolicyAdd', function (fn) {
@@ -54,7 +54,8 @@ @@ -54,7 +54,8 @@
54 <label class="layui-form-label">发送用户</label> 54 <label class="layui-form-label">发送用户</label>
55 <div style="width: calc(100% - 110px)"> 55 <div style="width: calc(100% - 110px)">
56 <div class="layui-input-inline" style="width: calc(100% - 10px);display: inline-flex;"> 56 <div class="layui-input-inline" style="width: calc(100% - 10px);display: inline-flex;">
57 - <div class="tags" id="select_noticeTimely_id_user" style="width: calc(100% - 20px);border: solid 1px #D2D2D2;margin-top: 0px;height: 36px;"></div> 57 + <!--lsq 选择用户过多时,超出高度滚动 2022-09-27-->
  58 + <div class="tags" id="select_noticeTimely_id_user" style="width: calc(100% - 20px);border: solid 1px #D2D2D2;margin-top: 0px;min-height:36px; height: auto; max-height: 200px; overflow: auto;"></div>
58 <i class="layui-icon form-btn-icon" id="noticeTimely-form-select-users" style="line-height: 36px;margin-left: 5px;">&#xe615;</i> 59 <i class="layui-icon form-btn-icon" id="noticeTimely-form-select-users" style="line-height: 36px;margin-left: 5px;">&#xe615;</i>
59 </div> 60 </div>
60 </div> 61 </div>
@@ -56,6 +56,12 @@ @@ -56,6 +56,12 @@
56 font-weight: normal; 56 font-weight: normal;
57 src:url('../fonts/pingfang/PINGFANG EXTRALIGHT.TTF'); 57 src:url('../fonts/pingfang/PINGFANG EXTRALIGHT.TTF');
58 } 58 }
  59 +@font-face {
  60 + font-family: 'PingFang-SC-regular';
  61 + font-style: normal;
  62 + font-weight: normal;
  63 + src:url('../fonts/pingfang/PINGFANG REGULAR.TTF');
  64 +}
59 * { 65 * {
60 margin: 0px; 66 margin: 0px;
61 padding: 0px; 67 padding: 0px;
@@ -1977,13 +1983,19 @@ blockquote:before { @@ -1977,13 +1983,19 @@ blockquote:before {
1977 } 1983 }
1978 .info-container-bg{ 1984 .info-container-bg{
1979 background:#f3f5f8; 1985 background:#f3f5f8;
  1986 +
1980 } 1987 }
1981 .info-title{ 1988 .info-title{
1982 text-align: center; 1989 text-align: center;
  1990 + font-size: 30px;
  1991 + color:#333;
1983 } 1992 }
1984 .info-intro{ 1993 .info-intro{
1985 padding-top:20px; 1994 padding-top:20px;
1986 text-indent:28px; 1995 text-indent:28px;
  1996 + font-size: 16px;
  1997 + color:#666;
  1998 + font-family: 'PingFang-SC-medium';
1987 } 1999 }
1988 .info-character{ 2000 .info-character{
1989 padding:0 50px; 2001 padding:0 50px;
@@ -2195,6 +2207,9 @@ blockquote:before { @@ -2195,6 +2207,9 @@ blockquote:before {
2195 border-bottom:1px solid #525a6a; 2207 border-bottom:1px solid #525a6a;
2196 margin-bottom: 0; 2208 margin-bottom: 0;
2197 } 2209 }
  2210 +.maintenance-advantage.info-title{
  2211 + color:#fff;
  2212 +}
2198 .maintenance-advantage-num{ 2213 .maintenance-advantage-num{
2199 font-size: 90px; 2214 font-size: 90px;
2200 color:#2d3340; 2215 color:#2d3340;
@@ -2890,4 +2905,242 @@ blockquote:before { @@ -2890,4 +2905,242 @@ blockquote:before {
2890 } 2905 }
2891 .compatible-item .title-style{ 2906 .compatible-item .title-style{
2892 font-size:28px; 2907 font-size:28px;
2893 -}  
  2908 +}
  2909 +/*lsq 综合监控A-view样式 2022-09-28*/
  2910 +.col-lg-service-3{
  2911 + max-width: 20%;
  2912 +}
  2913 +.info-child-title{
  2914 + font-size: 21px;
  2915 + color:#333;
  2916 + font-family: 'PingFang SC';
  2917 +}
  2918 +.info-child-intro{
  2919 + font-size: 18px;
  2920 + color:#333;
  2921 + font-family: 'PingFang-SC-regular';
  2922 +}
  2923 +.info-child-title-Heavy{
  2924 + font-size: 30px;
  2925 + color:#fff;
  2926 + font-family: 'PingFang-SC-heavy';
  2927 +}
  2928 +.info-child-intro-m{
  2929 + font-size: 18px;
  2930 + color:#fff;
  2931 + font-family: 'PingFang-SC-medium';
  2932 +}
  2933 +.info-challenge-bg{
  2934 + position: absolute;
  2935 + height: 100%;
  2936 + width: 90%;
  2937 + top: 0;
  2938 + z-index: -1;
  2939 + background-size: cover;
  2940 +}
  2941 +.info-challenge-bg-1{
  2942 + background-image: url("../img/serviceSecond/Aview/challenge-bg-1.png");
  2943 +}
  2944 +.info-challenge-bg-2{
  2945 + background-image: url("../img/serviceSecond/Aview/challenge-bg-2.png");
  2946 +}
  2947 +.info-challenge-bg-3{
  2948 + background-image: url("../img/serviceSecond/Aview/challenge-bg-3.png");
  2949 +}
  2950 +.challenge-con .info-character{
  2951 + padding: 0 20px;
  2952 +}
  2953 +.intro-item{
  2954 + padding:10px;
  2955 +}
  2956 +.Aview .tab-item-li{
  2957 + margin-right: 56px;
  2958 +}
  2959 +.info-container-bg-Aview{
  2960 + position: absolute;
  2961 + height: 100%;
  2962 + width: 100%;
  2963 + top: 0;
  2964 + z-index: -2;
  2965 +}
  2966 +.info-container-bg-challenge{
  2967 + height: 60%;
  2968 +}
  2969 +.info-container-service .info-character{
  2970 + padding:0;
  2971 +}
  2972 +.info-service.info-character img{
  2973 +}
  2974 +.dataAbility-con{
  2975 + position: relative;
  2976 + flex: 1;
  2977 + max-height: 500px;
  2978 +}
  2979 +.dataAbility-bg{
  2980 + position: absolute;
  2981 + height: 100%;
  2982 + width: 100%;
  2983 + top: 0;
  2984 + z-index: -2;
  2985 + background-size: contain;
  2986 + background-image: url("../img/serviceSecond/Aview/ability-bg.png");
  2987 + background-repeat: no-repeat;
  2988 + background-position: center;
  2989 +}
  2990 +.dataAbility-bg-logo{
  2991 + position: absolute;
  2992 + height: 100%;
  2993 + width: 100%;
  2994 + top: 0;
  2995 + z-index: -1;
  2996 + display: flex;
  2997 + align-items: center;
  2998 + flex-flow: column;
  2999 + justify-content: center;
  3000 +}
  3001 +.dataAbility-item-title{
  3002 + font-size: 21px;
  3003 + color:#fff;
  3004 + font-family: 'PingFang-SC-heavy';
  3005 +}
  3006 +.dataAbility-item-intro{
  3007 + font-size: 16px;
  3008 + color:#fff;
  3009 + font-family: 'PingFang-SC-regular';
  3010 +}
  3011 +.info-container-ability .container{
  3012 + height:100%;
  3013 + display: flex;
  3014 + flex-flow: column;
  3015 +}
  3016 +.dataAbility-col{
  3017 + display: flex;
  3018 +}
  3019 +.dataAbility-item{
  3020 + flex:1;
  3021 + display: flex;
  3022 + flex-flow: column;
  3023 + justify-content: center;
  3024 + padding: 0 15px;
  3025 +}
  3026 +.dataAbility-item-intro-item{
  3027 + min-height: 24px;
  3028 +}
  3029 +.dataAbility-col:nth-child(2n) .dataAbility-item{
  3030 + margin-left: 30%;
  3031 +}
  3032 +.dataAbility-col:nth-child(3) .dataAbility-item .dataAbility-item-intro-item:first-child{
  3033 + max-width: 67%;
  3034 +}
  3035 +@media (min-width: 992px){
  3036 + .dataAbility-col{
  3037 + height:50%;
  3038 + }
  3039 +}
  3040 +.logo-title{
  3041 + color:#fff;
  3042 + font-size: 21px;
  3043 +}
  3044 +.info-characterP{
  3045 + cursor: pointer;
  3046 +}
  3047 +.info-characterP .info-characterP-bg{
  3048 + background:url("../img/serviceSecond/Aview/characterP-bg.png");
  3049 + position: absolute;
  3050 + height: 100%;
  3051 + width: 100%;
  3052 + top: 0;
  3053 + z-index: -1;
  3054 + background-size: contain;
  3055 + background-repeat: no-repeat;
  3056 + background-position: center;
  3057 +}
  3058 +.info-characterP:hover .info-characterP-bg{
  3059 + background:url("../img/serviceSecond/Aview/characterP-bg-active.png");
  3060 +
  3061 +}
  3062 +.info-character.info-characterP{
  3063 + padding:30px;
  3064 + position: relative;
  3065 +}
  3066 +.characterP-con{
  3067 + display: flex;
  3068 + justify-content: center;
  3069 + align-items: center;
  3070 + padding:10px 15px;
  3071 +}
  3072 +.characterP-con .info-character-intro{
  3073 + min-height: 140px;
  3074 +}
  3075 +.info-child-title-character{
  3076 + width: 100%;
  3077 + font-size: 21px;
  3078 + color:#333;
  3079 + font-family: 'PingFang-SC-heavy';
  3080 +}
  3081 +.info-child-intro-character{
  3082 + font-size: 16px;
  3083 + color:#666;
  3084 + font-family: 'PingFang-SC-regular';
  3085 +}
  3086 +.info-characterP:hover .info-child-title-character,.info-characterP:hover .info-child-intro-character{
  3087 + color:#fff;
  3088 +}
  3089 +.Aview-advantage-bg{
  3090 + background: url("../img/serviceSecond/Aview/advantage-bg.png");
  3091 + background-size: cover;
  3092 + position: absolute;
  3093 + height: 100%;
  3094 + width: 100%;
  3095 + left: 0;
  3096 + top: 0;
  3097 + z-index: -1;
  3098 +}
  3099 +.advantage-title-Aview{
  3100 + font-size: 24px;
  3101 + color:#fff;
  3102 +}
  3103 +.advantage-intro-Aview{
  3104 + font-size: 18px;
  3105 + color:#fff;
  3106 + font-family: 'PingFang-SC-regular';
  3107 +}
  3108 +.info-container-advantage .info-title{
  3109 + color:#fff;
  3110 +}
  3111 +.info-container-advantage .pro-advantage-style{
  3112 + padding: 50px 30px 0;
  3113 +}
  3114 +.info-container-advantage .pro-advantage-ul{
  3115 + min-height: 120px;
  3116 + box-sizing: content-box;
  3117 +}
  3118 +.Aview-advantage-con{
  3119 + padding:0;
  3120 +}
  3121 +.Aview-advantage-con .maintenance-advantage-num{
  3122 + color:#2a303c;
  3123 +}
  3124 +.Aview-con{
  3125 + border-top:1px solid #525a6a;
  3126 +}
  3127 +.Aview-container{
  3128 + margin:auto;
  3129 +}
  3130 +@media (min-width: 1260px) {
  3131 + .Aview-container {
  3132 + max-width: 1200px;
  3133 + }
  3134 +}
  3135 +.Aview-advantage-con:last-child .pro-advantage-style{
  3136 + border:none;
  3137 +}
  3138 +.Aview-advantage-con:hover{
  3139 + position: relative;
  3140 + z-index: 2;
  3141 + transform: scale(1.1,1);
  3142 + background:#1a6ab7;
  3143 +}
  3144 +.Aview-advantage-con:hover .maintenance-advantage-num{
  3145 + color:#1665b1;
  3146 +}
@@ -461,94 +461,163 @@ export function alarm() { @@ -461,94 +461,163 @@ export function alarm() {
461 export function Aview() { 461 export function Aview() {
462 let res={ 462 let res={
463 title:'综合监控管理A-view', 463 title:'综合监控管理A-view',
464 - introduction:'魔镜智能将为“智慧税务”提供一个可视化、全局化、智能化、标准化、自动化的“全流程击穿协同管理”平台。实时洞察数字化业务与用户体验、主动保障核心征管、电子税务局等核心业务系统稳定、持续高效运行,构建基于“人工智能+大数据”底座的异常检测、智能告警分析、高效信息协同的大运维工作体系。', 464 + introduction:'建立智能IT运维监控平台, 对网络、硬件、安全设备、操作系统、数据库、中间件、应用系统等资源实时监控采集,能够自动地收集信息系统中各类IT资源设备运行状态、数据库状态、中间件运行状态和网络状态等,发现各类IT资源运行过程中的异常。依据业务视角和设备视角分析发现已发生和潜在的各类资源问题,及时通知相关责任人和启动相关运维流程。',
465 data:[ 465 data:[
466 { 466 {
467 title:'产品信息', 467 title:'产品信息',
468 - introduction:'魔镜智能将为“智慧税务”提供一个可视化、全局化、智能化、标准化、自动化的“全流程击穿协同管理”平台。实时洞察数字化业务与用户体验、主动保障核心征管、电子税务局等核心业务系统稳定、持续高效运行,构建基于“人工智能+大数据”底座的异常检测、智能告警分析、高效信息协同的大运维工作体系。', 468 + introduction:'建立智能IT运维监控平台, 对网络、硬件、安全设备、操作系统、数据库、中间件、应用系统等资源实时监控采集,能够自动地收集信息系统中各类IT资源设备运行状态、数据库状态、中间件运行状态和网络状态等,发现各类IT资源运行过程中的异常。依据业务视角和设备视角分析发现已发生和潜在的各类资源问题,及时通知相关责任人和启动相关运维流程。',
469 type:'info' 469 type:'info'
470 }, 470 },
471 { 471 {
472 - title:'产品特点', 472 + title:'智能运维带来的新挑战',
473 introduction:'', 473 introduction:'',
474 data:[ 474 data:[
475 { 475 {
476 - icon:'assets/img/serviceSecond/information/character-1.png',  
477 - title:'工单信息集中管理',  
478 - introduction:'实现工单信息自动化汇总,工单数据集中化管理,工单流程实时共享。' 476 + icon:'assets/img/serviceSecond/Aview/challenge-1.png',
  477 + title:'海量资源',
  478 + introData:['资源数量、资源种类','资源纳管能力','自动化运维能力','资源纳管扩展能力']
479 }, 479 },
480 { 480 {
481 - icon:'assets/img/serviceSecond/information/character-2.png',  
482 - title:'提高工作效率',  
483 - introduction:'运用智能化管理工具,降低人工沟通成本,缩短沟通时间。实时跟进工单问题的处理情况,提高工作效率。' 481 + icon:'assets/img/serviceSecond/Aview/challenge-2.png',
  482 + title:'双模场景',
  483 + introData:['传统数据中心&云数据中心','公有云、私有云、传统数据','中心的统一运维管理','云基础设施监控精细']
484 }, 484 },
485 { 485 {
486 - icon:'assets/img/serviceSecond/information/character-3.png',  
487 - title:'实时处理单数据',  
488 - introduction:'全方位、多维度实时进行工单统计数据,及时掌握工单执行过程中的问题,帮助决策者获取数据支撑。' 486 + icon:'assets/img/serviceSecond/Aview/challenge-3.png',
  487 + title:'用户场景兼容',
  488 + introData:['云环境多租户逻辑隔离,管理统一','多张网物理隔离,统一管理','多机构运维融合']
489 } 489 }
490 ], 490 ],
491 - type:'character' 491 + type:'challenge'
492 }, 492 },
493 { 493 {
494 - title:'系统框架',  
495 - introduction:'安全运维服务流程的系统架构',  
496 - img:'assets/img/serviceSecond/information/system.png', 494 + title:'洞悉客户数字化运维服务需求',
  495 + introduction:'',
  496 + data:[
  497 + {
  498 + icon:'assets/img/serviceSecond/Aview/service-1.png',
  499 + title:'前瞻性',
  500 + introData:['业务前瞻、模式前瞻','架构前瞻']
  501 + },
  502 + {
  503 + icon:'assets/img/serviceSecond/Aview/service-2.png',
  504 + title:'一站式',
  505 + introData:['全生命周期','全IT领域']
  506 + },
  507 + {
  508 + icon:'assets/img/serviceSecond/Aview/service-3.png',
  509 + title:'敏捷性',
  510 + introData:['支持业务更快速','更高质量的发布']
  511 + },
  512 + {
  513 + icon:'assets/img/serviceSecond/Aview/service-4.png',
  514 + title:'场景化',
  515 + introData:['不同的业务场景','提供差异化服务']
  516 + },
  517 + {
  518 + icon:'assets/img/serviceSecond/Aview/service-5.png',
  519 + title:'智能化',
  520 + introData:['通过智能分析和','自动化提高运营效率']
  521 + }
  522 + ],
  523 + type:'service'
  524 + },
  525 + {
  526 + title:'系统架构',
  527 + introduction:'',
  528 + img:'assets/img/serviceSecond/Aview/system.png',
497 type:'system' 529 type:'system'
498 }, 530 },
499 { 531 {
500 - title:'产品优势', 532 + title:'综合监控A-VIEW平台能力',
  533 + subTitle:'综合监控平台能力',
  534 + icon:'assets/img/serviceSecond/Aview/logo.png',
501 introduction:'', 535 introduction:'',
502 - dataSecond:[ 536 + dataAbility:[
503 { 537 {
504 - icon:'assets/img/serviceSecond/information/advantage-1.png',  
505 - title:'“护网””等保”各规章变成“流程”强制性管控',  
506 - introduction:'特点:规章落地 提前约束 流程强制 全程留痕',  
507 - img:'assets/img/serviceSecond/information/advantageImg.png' 538 + title:'全行业全场景覆盖',
  539 + introData:['深度分析行业运维需求、场景化需求,','发布行业版本',' ',' ']
508 }, 540 },
509 { 541 {
510 - icon:'assets/img/serviceSecond/information/advantage-2.png',  
511 - title:'通过”安全流程“提前管控日常操作、留痕',  
512 - introduction:'',  
513 - img:'assets/img/serviceSecond/information/advantageImg.png' 542 + title:'用户导向',
  543 + introData:['用户视角,全新用户体验','场景化视角,便捷简单操作']
514 }, 544 },
515 { 545 {
516 - icon:'assets/img/serviceSecond/information/advantage-3.png',  
517 - title:'税务局业务流程目录、展示、流程的分类管理',  
518 - introduction:'',  
519 - img:'assets/img/serviceSecond/information/advantageImg.png' 546 + title:'一体化',
  547 + introData:['全域视角,监控网络、安全、计算存储、虚拟化、容器、云资源、用户终端等IT架构元素,实现从应用到芯片级端到端的运维管理','业务视角,打通业务到底层资源的逻辑连接,数据关联,深度分析','全局视角,场景化自动编排调度,智能联动,自动闭环解决场景化问题']
520 }, 548 },
521 { 549 {
522 - icon:'assets/img/serviceSecond/information/advantage-4.png',  
523 - title:'工作组、用户权限的灵活配置',  
524 - introduction:'',  
525 - img:'assets/img/serviceSecond/information/advantageImg.png' 550 + title:'持续扩展',
  551 + introData:['通过微服务架构,平台具备强大的可扩展能力,保证平台功能、处理能力及管理容量的弹性扩展','开放接口,定制开发,持续扩展']
526 } 552 }
527 ], 553 ],
528 - type:'advantage' 554 + type:'ability'
529 }, 555 },
  556 +
530 { 557 {
531 - title:'平台价值',  
532 - introduction:'魔镜“智能流程协同管理平台”通过信息整合,全局掌控省税务局工单流程每个节点状态,协同流转,处理审批;清晰分类了解流程情况,实时统计工单数据。',  
533 - dataThird:[ 558 + title:'产品特点',
  559 + introduction:'',
  560 + data:[
534 { 561 {
535 - title:'标准化',  
536 - introduction:'信息、流程、时间全面统一,高效协同',  
537 - img:'assets/img/serviceSecond/information/value-bg.png' 562 + title:'强化主动监控,实现集中管理',
  563 + introduction:'以应用性能和应用系统为监控主线,集成各类监控工具,构建统一集中的IT系统资源监控平台, 能够主动及时发现问题,解决被动服务的局面。同时以自主运维为目的,主动监控,自动更新,自动实现IT运维监控管理。',
538 }, 564 },
539 { 565 {
540 - title:'规范化',  
541 - introduction:'理清流程、制度落地,业务按标准执行',  
542 - img:'assets/img/serviceSecond/information/value-bg.png' 566 + title:'灵活定制的自动化巡检',
  567 + introduction:'面向多厂商主流IT产品,根据客户灵活定制自动化巡检指标,对IT资源进行全面运行状态自动化检测分析,深度感知IT基础架构运行状态。同时,实时输出准确、详实的分析报告及改进建议,预防IT资源运行中可能出现的各种风险,发现网络潜在的性能瓶颈。',
543 }, 568 },
544 { 569 {
545 - title:'透明化',  
546 - introduction:'流程申请、流程进度、流程审批全程可观',  
547 - img:'assets/img/serviceSecond/information/value-bg.png' 570 + title:'帮助定位故障,快速恢复系统运行。',
  571 + introduction:'建立针对IT资源的集中告警分析机制和故障预警机制,提供自动化故障处理能力,当故障产生时,可以进行故障的快速定位,很快发现问题根源并找到相应的解决方案,从而缩短故障解决时间,减少维护成本。',
  572 + },
  573 + {
  574 + title: '提高运行效率,合理利用IT资源。',
  575 + introduction: '建立统一IT资源监控平台后,可以实时了解全部IT资源的使用和运行情况,根据IT业务需要从整体角度考虑资源的使用,甚至可以根据业务高峰期的不同来调剂业务系统对资源的使用。',
  576 + },
  577 + {
  578 + title:'提供统计分析和决策支持',
  579 + introduction:'通过提供各类资源的性能分析报表、资源统计报表和运维分析报表,从各个侧面、各个角度反映系统的运行状况、性能情况和运维人员工作情况,为系统升级、改造、扩容提供科学依据。',
  580 + },
  581 + {
  582 + title:'全面直观的系统展示。',
  583 + introduction:'通过一个统一的门户系统,有效的展示内部的IT资源运行情况、性能状况、服务工单情况等,使得领导、管理者、技术人员能迅速了解自己关心的问题。',
548 } 584 }
549 ], 585 ],
550 - type:'value' 586 + type:'characterP'
551 }, 587 },
  588 + {
  589 + title:'产品优势',
  590 + introduction:'',
  591 + dataThird:[
  592 + {
  593 + title:'一体化监控',
  594 + dataIntro:['一体化设备监、管、控,一个平台满足用户多种需求完成所有IT基础资源的监控。']
  595 + },
  596 + {
  597 + title:'监控配置灵活',
  598 + dataIntro:['灵活定义监控设备、资源,并可差异化设置监控指标。']
  599 + },
  600 + {
  601 + title:'秒级故障监控',
  602 + dataIntro:['领先的秒级监控能力与多线程任务并发技术,监测频率提升到秒级。']
  603 + }
  604 + ],
  605 + dataThirdA:[
  606 + {
  607 + title:'实时性能监测',
  608 + dataIntro:['获取实时性能数据,动态可视化展示当前设备性能和性能变化趋势。']
  609 + },
  610 + {
  611 + title:'业务数据综合展示',
  612 + dataIntro:['强大的业务数据综合展示能力,实现跨网络业务数据整合']
  613 + },
  614 + {
  615 + title:'巡检灵活可配',
  616 + dataIntro:['巡检方案高度支持自定义,全网全流程覆盖,随时监控,分析回顾设备生命周期表现。']
  617 + }
  618 + ],
  619 + type:'advantage'
  620 + }
552 ] 621 ]
553 } 622 }
554 623
@@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
6 6
7 7
8 <section class="rel rpt-150 rpb-0 text-left" > 8 <section class="rel rpt-150 rpb-0 text-left" >
9 - <div class="container"> 9 + <div class="container product">
10 <div class="row banner-height pt-90 pb-90"> 10 <div class="row banner-height pt-90 pb-90">
11 <div class="banner-introduction color-white col-lg-6"> 11 <div class="banner-introduction color-white col-lg-6">
12 <h2 class="intro-title color-white">{{AviewData.title}}</h2> 12 <h2 class="intro-title color-white">{{AviewData.title}}</h2>
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 <div class="intro-Con"></div> 17 <div class="intro-Con"></div>
18 </section> 18 </section>
19 <section class="intro-tab"> 19 <section class="intro-tab">
20 - <div class="container"> 20 + <div class="container product Aview">
21 <ul class="intro-tab-container"> 21 <ul class="intro-tab-container">
22 <li class="tab-item-li" v-for="(item,index) in AviewData.data" :key="item"> 22 <li class="tab-item-li" v-for="(item,index) in AviewData.data" :key="item">
23 <span :class="['tab-item','scroll-to-target',{'tab-item-active':tabActive==index}]" :data-target="'[data-type='+item.type+']'">{{item.title}}</span> 23 <span :class="['tab-item','scroll-to-target',{'tab-item-active':tabActive==index}]" :data-target="'[data-type='+item.type+']'">{{item.title}}</span>
@@ -27,42 +27,54 @@ @@ -27,42 +27,54 @@
27 </section> 27 </section>
28 28
29 29
30 -<section :class="['info-container', 'rel', 'mb-70', 'pt-55',{'info-container-bg':item.type=='advantage'}]" v-for="(item,index) in AviewData.data" :key="item"> 30 +<section :class="['info-container','info-container-'+item.type, 'rel','pt-55', {'mb-50':item.type!='ability' && item.type!='characterP' && item.type!='advantage','pb-50':item.type=='characterP','all-height':item.type=='ability'}]" v-for="(item,index) in AviewData.data" :key="item">
31 <div class="div-type" :data-type="item.type"></div> 31 <div class="div-type" :data-type="item.type"></div>
32 - <div class="container">  
33 - <h3 class="info-title">{{item.title}}</h3>  
34 - <div :class="['info-intro',{'text-align-center':item.type=='system' || item.type=='value'},{'max-width-600':item.type=='value'}]" v-if="item.introduction">{{item.introduction}}</div>  
35 - <div class="row" v-if="item.data && item.data.length>0">  
36 - <div class="info-character col-md-4" v-for="(itemC,indexC) in item.data">  
37 - <img class="pt-50" :src="itemC.icon" alt="">  
38 - <h4 class="pt-30">{{itemC.title}}</h4>  
39 - <div class="info-character-intro">{{itemC.introduction}}</div> 32 + <div class="container product">
  33 + <div class="info-title">{{item.title}}</div>
  34 + <div :class="['info-intro','mt-40',{'text-align-center':item.type=='system' || item.type=='value'},{'max-width-600':item.type=='value'}]" v-if="item.introduction">{{item.introduction}}</div>
  35 + <div :class="['row','pt-60',{'challenge-con':item.type=='challenge'}]" v-if="item.data && item.data.length>0">
  36 + <div :class="[ {'col-lg-4':item.type=='challenge','col-lg-3':item.type=='service','col-lg-service-3':item.type=='service','col-lg-6':item.type=='characterP','characterP-con':item.type=='characterP'}]" v-for="(itemC,indexC) in item.data">
  37 + <div :class="['info-character','info-'+item.type] ">
  38 + <img v-if="itemC.icon" :class="[{'pt-50':item.type=='challenge'}]" :src="itemC.icon" alt="">
  39 + <div :class="[{'info-child-title':item.type=='service','info-child-title-character':item.type=='characterP','info-child-title-Heavy':item.type=='challenge', 'pt-40':item.type=='challenge', 'pt-20':item.type!='challenge'}]">{{itemC.title}}</div>
  40 + <div :class="['info-character-intro', 'pt-30',{'info-child-intro-character':item.type=='characterP'}]" v-if="itemC.introduction">{{itemC.introduction}}</div>
  41 + <div :class="['info-character-intro', {'pt-40':item.type=='challenge','pb-40':item.type=='challenge','pt-20':item.type!='challenge','info-child-intro':item.type=='service','info-child-intro-m':item.type=='challenge'}]" v-if="itemC.introData && itemC.introData.length>0">
  42 + <div :class="[{'intro-item':item.type=='challenge'}, 'text-center']" v-for="itemI in itemC.introData">{{itemI}}</div>
  43 + </div>
  44 + <div v-if="item.type=='challenge'" :class="['info-challenge-bg','info-challenge-bg-'+(indexC+1)]"></div>
  45 + <div v-if="item.type=='characterP'" class="info-characterP-bg"></div>
  46 + </div>
  47 +
40 </div> 48 </div>
41 </div> 49 </div>
42 - <div class="info-system pt-30" v-if="item.img"> 50 + <div class="info-system pt-60" v-if="item.img">
43 <img :src="item.img" alt=""> 51 <img :src="item.img" alt="">
44 </div> 52 </div>
45 - <div class="row pt-30" v-if="item.dataSecond && item.dataSecond.length>0">  
46 - <div class="col-lg-4">  
47 - <div :class="['info-advantage',{'advantage-active':advantageActive==indexA}]" @mouseover="showHover(indexA)" @mouseleave="hideHover" v-for="(itemA,indexA) in item.dataSecond">  
48 - <img class="" :src="itemA.icon" alt="">  
49 - <div :class="['info-advantage-title']">  
50 - <div>{{itemA.title}}</div>  
51 - <div class="advantage-title-intro" v-if="itemA.introduction && advantageActive==indexA && isMouseover">{{itemA.introduction}}</div> 53 + <div class="row mt-60 dataAbility-con" v-if="item.dataAbility && item.dataAbility.length>0">
  54 + <div class="col-lg-6 dataAbility-col" v-for="(itemD,indexD) in item.dataAbility">
  55 + <div class="dataAbility-item">
  56 + <div class="dataAbility-item-title">{{itemD.title}}</div>
  57 + <div class="dataAbility-item-intro pt-20">
  58 + <div class="dataAbility-item-intro-item" v-for="(itemI,indexI) in itemD.introData">{{itemI}}</div>
52 </div> 59 </div>
53 </div> 60 </div>
54 </div> 61 </div>
55 - <div class="col-lg-8">  
56 - <img :src="advantageImg" alt=""> 62 + <div class="dataAbility-bg" v-if="item.type=='ability'"></div>
  63 + <div class="dataAbility-bg-logo">
  64 + <img :src="item.icon" alt="">
  65 + <div class="logo-title pt-20">{{item.subTitle}}</div>
57 </div> 66 </div>
58 </div> 67 </div>
59 - <div class="row pt-30" v-if="item.dataThird && item.dataThird.length>0">  
60 - <div class="col-lg-4" v-for="(itemV,indexV) in item.dataThird">  
61 - <div class="info-value" >  
62 - <img class="" :src="itemV.img" alt="">  
63 - <div :class="['info-value-title']">  
64 - <h3>{{itemV.title}}</h3>  
65 - <div>{{itemV.introduction}}</div> 68 +
  69 + </div>
  70 + <div class="mt-30 Aview-con" v-if="item.dataThird && item.dataThird.length>0">
  71 + <div class="row Aview-container">
  72 + <div class="col-lg-4 Aview-advantage-con" v-for="(itemV,indexV) in item.dataThird">
  73 + <div class="info-value pro-advantage-style pb-50" >
  74 + <div :class="['pro-info-title']">
  75 + <div class=" advantage-title-Aview">{{itemV.title}}</div>
  76 + <ul class="pro-advantage-ul pt-30 advantage-intro-Aview"><li v-for="(itemP,indexP) in itemV.dataIntro">{{itemP}}</li></ul>
  77 + <div class="maintenance-advantage-num pt-50 pb-60">0{{indexV+1}}</div>
66 </div> 78 </div>
67 </div> 79 </div>
68 80
@@ -70,6 +82,21 @@ @@ -70,6 +82,21 @@
70 </div> 82 </div>
71 83
72 </div> 84 </div>
  85 + <div class=" Aview-con" v-if="item.dataThirdA && item.dataThirdA.length>0">
  86 + <div class="row Aview-container">
  87 + <div class="col-lg-4 Aview-advantage-con" v-for="(itemV,indexV) in item.dataThirdA">
  88 + <div class="info-value pro-advantage-style pb-50" >
  89 + <div :class="['pro-info-title']">
  90 + <div class=" advantage-title-Aview">{{itemV.title}}</div>
  91 + <ul class="pro-advantage-ul pt-30 advantage-intro-Aview"><li v-for="(itemP,indexP) in itemV.dataIntro">{{itemP}}</li></ul>
  92 + <div class="maintenance-advantage-num pt-50 pb-60">0{{indexV+3}}</div>
  93 + </div>
  94 + </div>
  95 + </div>
  96 + </div>
  97 + </div>
  98 + <div class="Aview-advantage-bg" v-if="item.type=='advantage'"></div>
  99 + <div v-if="item.type=='challenge' || item.type=='characterP'" :class="['info-container-bg','info-container-bg-Aview', {'info-container-bg-challenge':item.type=='challenge'}]"></div>
73 </section> 100 </section>
74 101
75 102
@@ -30,7 +30,7 @@ @@ -30,7 +30,7 @@
30 <section :class="['info-container','alarm-info-container', 'rel', {'mb-70': item.type=='lifeCycle' || item.type=='inclusive'}, 'pt-55',{'info-container-bg':item.type=='advantage'}]" v-for="(item,index) in alarmData.data" :key="item"> 30 <section :class="['info-container','alarm-info-container', 'rel', {'mb-70': item.type=='lifeCycle' || item.type=='inclusive'}, 'pt-55',{'info-container-bg':item.type=='advantage'}]" v-for="(item,index) in alarmData.data" :key="item">
31 <div class="div-type" :data-type="item.type" ></div> 31 <div class="div-type" :data-type="item.type" ></div>
32 <div class="container"> 32 <div class="container">
33 - <h3 class="info-title">{{item.title}}</h3> 33 + <div class="info-title">{{item.title}}</div>
34 <div :class="['info-intro',{'text-align-center':item.type=='system' || item.type=='value'},{'max-width-600':item.type=='value'}]" v-if="item.introduction">{{item.introduction}}</div> 34 <div :class="['info-intro',{'text-align-center':item.type=='system' || item.type=='value'},{'max-width-600':item.type=='value'}]" v-if="item.introduction">{{item.introduction}}</div>
35 <div class="info-system pt-30" v-if="item.img"> 35 <div class="info-system pt-30" v-if="item.img">
36 <img :src="item.img" alt=""> 36 <img :src="item.img" alt="">
@@ -30,7 +30,7 @@ @@ -30,7 +30,7 @@
30 <section :class="['info-container', 'rel', 'pt-55',{'info-container-bg':item.type=='character','pb-50':item.type=='value'}]" v-for="(item,index) in businessAppData.data" :key="item"> 30 <section :class="['info-container', 'rel', 'pt-55',{'info-container-bg':item.type=='character','pb-50':item.type=='value'}]" v-for="(item,index) in businessAppData.data" :key="item">
31 <div class="div-type" :data-type="item.type"></div> 31 <div class="div-type" :data-type="item.type"></div>
32 <div class="container"> 32 <div class="container">
33 - <h3 class="info-title">{{item.title}}</h3> 33 + <div class="info-title">{{item.title}}</div>
34 <div :class="['info-intro',{'text-align-center':item.type=='system' || item.type=='value'},{'max-width-600':item.type=='value'}]" v-if="item.introduction && !item.subTitle">{{item.introduction}}</div> 34 <div :class="['info-intro',{'text-align-center':item.type=='system' || item.type=='value'},{'max-width-600':item.type=='value'}]" v-if="item.introduction && !item.subTitle">{{item.introduction}}</div>
35 <div class="row" v-if="item.subTitle"> 35 <div class="row" v-if="item.subTitle">
36 <div class="col-lg-6 pd-40"> 36 <div class="col-lg-6 pd-40">
@@ -30,7 +30,7 @@ @@ -30,7 +30,7 @@
30 <section :class="['info-container', 'rel', 'mb-70', 'pt-55',{'info-container-bg':item.type=='advantage'}]" v-for="(item,index) in cloudData.data" :key="item"> 30 <section :class="['info-container', 'rel', 'mb-70', 'pt-55',{'info-container-bg':item.type=='advantage'}]" v-for="(item,index) in cloudData.data" :key="item">
31 <div class="div-type" :data-type="item.type"></div> 31 <div class="div-type" :data-type="item.type"></div>
32 <div class="container"> 32 <div class="container">
33 - <h3 class="info-title">{{item.title}}</h3> 33 + <div class="info-title">{{item.title}}</div>
34 <div :class="['info-intro',{'text-align-center':item.type=='system' || item.type=='value'},{'max-width-600':item.type=='value'}]" v-if="item.introduction">{{item.introduction}}</div> 34 <div :class="['info-intro',{'text-align-center':item.type=='system' || item.type=='value'},{'max-width-600':item.type=='value'}]" v-if="item.introduction">{{item.introduction}}</div>
35 <div class="row" v-if="item.data && item.data.length>0"> 35 <div class="row" v-if="item.data && item.data.length>0">
36 <div class="info-character col-md-4" v-for="(itemC,indexC) in item.data"> 36 <div class="info-character col-md-4" v-for="(itemC,indexC) in item.data">
@@ -30,7 +30,7 @@ @@ -30,7 +30,7 @@
30 <section :class="['info-container', 'rel', 'mb-70', 'pt-55',{'info-container-bg':item.type=='advantage'}]" v-for="(item,index) in cmdbData.data" :key="item"> 30 <section :class="['info-container', 'rel', 'mb-70', 'pt-55',{'info-container-bg':item.type=='advantage'}]" v-for="(item,index) in cmdbData.data" :key="item">
31 <div class="div-type" :data-type="item.type"></div> 31 <div class="div-type" :data-type="item.type"></div>
32 <div class="container"> 32 <div class="container">
33 - <h3 class="info-title">{{item.title}}</h3> 33 + <div class="info-title">{{item.title}}</div>
34 <div :class="['info-intro',{'text-align-center':item.type=='system' || item.type=='value'},{'max-width-600':item.type=='value'}]" v-if="item.introduction">{{item.introduction}}</div> 34 <div :class="['info-intro',{'text-align-center':item.type=='system' || item.type=='value'},{'max-width-600':item.type=='value'}]" v-if="item.introduction">{{item.introduction}}</div>
35 <div class="row" v-if="item.data && item.data.length>0"> 35 <div class="row" v-if="item.data && item.data.length>0">
36 <div class="info-character col-md-4" v-for="(itemC,indexC) in item.data"> 36 <div class="info-character col-md-4" v-for="(itemC,indexC) in item.data">
@@ -30,7 +30,7 @@ @@ -30,7 +30,7 @@
30 <section :class="['info-container', 'rel', 'mb-70', 'pt-55',{'info-container-bg':item.type=='advantage'}]" v-for="(item,index) in InformationData.data" :key="item"> 30 <section :class="['info-container', 'rel', 'mb-70', 'pt-55',{'info-container-bg':item.type=='advantage'}]" v-for="(item,index) in InformationData.data" :key="item">
31 <div class="div-type" :data-type="item.type"></div> 31 <div class="div-type" :data-type="item.type"></div>
32 <div class="container"> 32 <div class="container">
33 - <h3 class="info-title">{{item.title}}</h3> 33 + <div class="info-title">{{item.title}}</div>
34 <div :class="['info-intro',{'text-align-center':item.type=='system' || item.type=='value'},{'max-width-600':item.type=='value'}]" v-if="item.introduction">{{item.introduction}}</div> 34 <div :class="['info-intro',{'text-align-center':item.type=='system' || item.type=='value'},{'max-width-600':item.type=='value'}]" v-if="item.introduction">{{item.introduction}}</div>
35 <div class="row" v-if="item.data && item.data.length>0"> 35 <div class="row" v-if="item.data && item.data.length>0">
36 <div class="info-character col-md-4" v-for="(itemC,indexC) in item.data"> 36 <div class="info-character col-md-4" v-for="(itemC,indexC) in item.data">
@@ -29,7 +29,7 @@ @@ -29,7 +29,7 @@
29 29
30 <section :class="['info-container', 'rel', {'mb-70':item.type=='system'||item.type=='problems' ||item.type=='character'}, 'pt-55']" v-for="(item,index) in maintenanceData.data" :key="item"> 30 <section :class="['info-container', 'rel', {'mb-70':item.type=='system'||item.type=='problems' ||item.type=='character'}, 'pt-55']" v-for="(item,index) in maintenanceData.data" :key="item">
31 <div class="div-type" :data-type="item.type"></div> 31 <div class="div-type" :data-type="item.type"></div>
32 - <h3 v-if="item.type=='advantage'" :class="['info-title','pb-40','maintenance-advantage',{'color-white':item.type=='advantage'}]">{{item.title}}</h3> 32 + <div v-if="item.type=='advantage'" :class="['info-title','pb-40','maintenance-advantage',{'color-white':item.type=='advantage'}]">{{item.title}}</div>
33 <div class="container"> 33 <div class="container">
34 <h3 v-if="item.type!='advantage'" :class="['info-title']">{{item.title}}</h3> 34 <h3 v-if="item.type!='advantage'" :class="['info-title']">{{item.title}}</h3>
35 <div :class="['info-intro',{'text-align-center':item.type=='system' || item.type=='value'},{'max-width-600':item.type=='value'}]" v-if="item.introduction">{{item.introduction}}</div> 35 <div :class="['info-intro',{'text-align-center':item.type=='system' || item.type=='value'},{'max-width-600':item.type=='value'}]" v-if="item.introduction">{{item.introduction}}</div>
@@ -30,7 +30,7 @@ @@ -30,7 +30,7 @@
30 <section :class="['info-container', 'rel', {'mb-70':item.type=='system'}, 'pt-55',{'info-container-bg':item.type=='character','pb-50':item.type=='value'}]" v-for="(item,index) in securityLogData.data" :key="item"> 30 <section :class="['info-container', 'rel', {'mb-70':item.type=='system'}, 'pt-55',{'info-container-bg':item.type=='character','pb-50':item.type=='value'}]" v-for="(item,index) in securityLogData.data" :key="item">
31 <div class="div-type" :data-type="item.type"></div> 31 <div class="div-type" :data-type="item.type"></div>
32 <div class="container"> 32 <div class="container">
33 - <h3 class="info-title">{{item.title}}</h3> 33 + <div class="info-title">{{item.title}}</div>
34 <div :class="['info-intro',{'text-align-center':item.type=='system' || item.type=='value'},{'max-width-600':item.type=='value'}]" v-if="item.introduction">{{item.introduction}}</div> 34 <div :class="['info-intro',{'text-align-center':item.type=='system' || item.type=='value'},{'max-width-600':item.type=='value'}]" v-if="item.introduction">{{item.introduction}}</div>
35 <div class="row" v-if="item.data && item.data.length>0"> 35 <div class="row" v-if="item.data && item.data.length>0">
36 <div class="info-character col-md-4" v-for="(itemC,indexC) in item.data"> 36 <div class="info-character col-md-4" v-for="(itemC,indexC) in item.data">