Merge branch 'master-500-dev-lushangqing' into 'master-500-dev'
【无】门户网站二级页面-魔镜智能运维管理一体机 See merge request !978
Showing
28 changed files
with
443 additions
and
9 deletions
@@ -1652,7 +1652,7 @@ blockquote:before { | @@ -1652,7 +1652,7 @@ blockquote:before { | ||
1652 | 1652 | ||
1653 | .footer-section { | 1653 | .footer-section { |
1654 | position: relative; | 1654 | position: relative; |
1655 | - background:#f4f2ff; | 1655 | + background:#242933; |
1656 | } | 1656 | } |
1657 | 1657 | ||
1658 | 1658 | ||
@@ -1695,24 +1695,25 @@ blockquote:before { | @@ -1695,24 +1695,25 @@ blockquote:before { | ||
1695 | } | 1695 | } |
1696 | 1696 | ||
1697 | .footer-widget.links-widget li a { | 1697 | .footer-widget.links-widget li a { |
1698 | - color: #848484; | 1698 | + color: #ffffff; |
1699 | margin-bottom: 10px; | 1699 | margin-bottom: 10px; |
1700 | display: inline-block; | 1700 | display: inline-block; |
1701 | text-transform: capitalize; | 1701 | text-transform: capitalize; |
1702 | transition: .5s; | 1702 | transition: .5s; |
1703 | } | 1703 | } |
1704 | .footer-widget.links-widget li a:hover{ | 1704 | .footer-widget.links-widget li a:hover{ |
1705 | - color: #1C00AF; | 1705 | + color: #e43730; |
1706 | transition: .5s; | 1706 | transition: .5s; |
1707 | } | 1707 | } |
1708 | /*office info widget*/ | 1708 | /*office info widget*/ |
1709 | .office-info li { | 1709 | .office-info li { |
1710 | display: flex; | 1710 | display: flex; |
1711 | margin-bottom: 8px; | 1711 | margin-bottom: 8px; |
1712 | + color:#fff; | ||
1712 | } | 1713 | } |
1713 | 1714 | ||
1714 | .office-info li i { | 1715 | .office-info li i { |
1715 | - color: #1C00AF; | 1716 | + color: #ffffff; |
1716 | font-size: 18px; | 1717 | font-size: 18px; |
1717 | margin-right: 20px; | 1718 | margin-right: 20px; |
1718 | } | 1719 | } |
@@ -1946,6 +1947,7 @@ blockquote:before { | @@ -1946,6 +1947,7 @@ blockquote:before { | ||
1946 | display: -webkit-box; | 1947 | display: -webkit-box; |
1947 | -webkit-line-clamp: 1; | 1948 | -webkit-line-clamp: 1; |
1948 | -webkit-box-orient: vertical; | 1949 | -webkit-box-orient: vertical; |
1950 | + font-size: 12px; | ||
1949 | } | 1951 | } |
1950 | .height-50{ | 1952 | .height-50{ |
1951 | height: 50px; | 1953 | height: 50px; |
@@ -2056,5 +2058,65 @@ blockquote:before { | @@ -2056,5 +2058,65 @@ blockquote:before { | ||
2056 | padding:40px; | 2058 | padding:40px; |
2057 | } | 2059 | } |
2058 | .pd-20{ | 2060 | .pd-20{ |
2061 | + padding:20px; | ||
2062 | +} | ||
2063 | +.pro-item{ | ||
2064 | + position: relative; | ||
2065 | +} | ||
2066 | +.pro-item-content{ | ||
2067 | + position: absolute; | ||
2068 | + top:0; | ||
2069 | + left:0; | ||
2070 | + padding: 40px 90px; | ||
2071 | + height: 100%; | ||
2072 | + color: #fff; | ||
2073 | + display: flex; | ||
2074 | + align-items: center; | ||
2075 | +} | ||
2076 | +.pro-advantage{ | ||
2077 | + background: url("../img/serviceSecond/maintenance/advantage-bg.png"); | ||
2078 | + background-size: cover; | ||
2079 | + position: absolute; | ||
2080 | + height: 100%; | ||
2081 | + width: 100%; | ||
2082 | + left: 0; | ||
2083 | + top: 0; | ||
2084 | + z-index: -1; | ||
2085 | +} | ||
2086 | +.pro-info-title{ | ||
2087 | + color:#fff; | ||
2088 | +} | ||
2089 | +.pro-advantage-style{ | ||
2090 | + border-right:1px solid #525a6a; | ||
2091 | + padding:50px 20px 0; | ||
2092 | +} | ||
2093 | +.maintenance-advantage-item:last-child .pro-advantage-style{ | ||
2094 | + border-right: none; | ||
2095 | +} | ||
2096 | +.pro-advantage-ul{ | ||
2097 | + font-size: 14px; | ||
2098 | +} | ||
2099 | +.pro-advantage-ul li{ | ||
2100 | + padding:5px 0; | ||
2101 | +} | ||
2102 | +.maintenance-advantage{ | ||
2103 | + border-bottom:1px solid #525a6a; | ||
2104 | + margin-bottom: 0; | ||
2105 | +} | ||
2106 | +.maintenance-advantage-num{ | ||
2107 | + font-size: 90px; | ||
2108 | + color:#2d3340; | ||
2109 | +} | ||
2110 | +.maintenance-line{ | ||
2111 | + border-top:1px solid #525a6a; | ||
2112 | + width:100%; | ||
2113 | +} | ||
2114 | +.footer-widget h4{ | ||
2115 | + color:#fff; | ||
2116 | +} | ||
2117 | +.dot-item-title{ | ||
2118 | + font-size: 14px; | ||
2059 | 2119 | ||
2120 | + font-weight: bold; | ||
2060 | } | 2121 | } |
2122 | + |
@@ -269,4 +269,117 @@ export function businessApp () { | @@ -269,4 +269,117 @@ export function businessApp () { | ||
269 | } | 269 | } |
270 | 270 | ||
271 | return res | 271 | return res |
272 | +} | ||
273 | +export function maintenance() { | ||
274 | + let res={ | ||
275 | + title:'魔镜智能运维管理一体机', | ||
276 | + introduction:'智能运维服务一体机提供数据中心各类计算存储设备、网络安全设备、虚拟化/云平台、数据库、中间件、容器、微服务、Hadoop 业务应用等设备进行实时采集、实时分析、异常报警、集中存储和事后分析功能,具备全南的监控分析能力。帮助用户有效降低系统故障,降任运维成本及管理的复杂度,异著提高系统格体的安全性,可靠性和运行效率,保障设备7x24小时正常、持续、稳定运行。', | ||
277 | + data:[ | ||
278 | + { | ||
279 | + title:'产品信息', | ||
280 | + introduction:'智能运维服务一体机提供数据中心各类计算存储设备、网络安全设备、虚拟化/云平台、数据库、中间件、容器、微服务、Hadoop 业务应用等设备进行实时采集、实时分析、异常报警、集中存储和事后分析功能,具备全南的监控分析能力。帮助用户有效降低系统故障,降任运维成本及管理的复杂度,异著提高系统格体的安全性,可靠性和运行效率,保障设备7x24小时正常、持续、稳定运行。', | ||
281 | + type:'info', | ||
282 | + img:'assets/img/serviceSecond/maintenance/info.png' | ||
283 | + }, | ||
284 | + { | ||
285 | + title:'问题与挑战', | ||
286 | + introduction:'', | ||
287 | + dataPro:[ | ||
288 | + { | ||
289 | + introduction:'运维数据种类多,规模大,标准化程度低且质量不高,数据管理和应用缺乏统一的管控工具', | ||
290 | + img:'assets/img/serviceSecond/maintenance/problems-1.png' | ||
291 | + }, | ||
292 | + { | ||
293 | + introduction:'缺乏预警机制,当故障被发现时,用户体验已受到极大影响', | ||
294 | + img:'assets/img/serviceSecond/maintenance/problems-2.png' | ||
295 | + }, | ||
296 | + { | ||
297 | + introduction:'系统故障根因定位困难,"主要依靠专家经验或手工分析,耗时费力,无法快速判定故障点', | ||
298 | + img:'assets/img/serviceSecond/maintenance/problems-3.png' | ||
299 | + }, | ||
300 | + { | ||
301 | + introduction:'如何确保IT资产在业务应用中从始至终得到很好的管理和服务?', | ||
302 | + img:'assets/img/serviceSecond/maintenance/problems-4.png' | ||
303 | + } | ||
304 | + ], | ||
305 | + type:'problems' | ||
306 | + }, | ||
307 | + { | ||
308 | + title:'产品特点', | ||
309 | + introduction:'', | ||
310 | + dataFour:[ | ||
311 | + { | ||
312 | + img:'assets/img/serviceSecond/maintenance/character-1.png', | ||
313 | + title:'动态关联IT与业务', | ||
314 | + introduction:'从业务视角出发,将不同维度的IT资源关联整合,以简洁易懂的界面呈现业务与资源的关联关系。广泛的资源监控能力,任何影响业务的因素都及时体现,使IT运维效率得到大幅提升。', | ||
315 | + isDisplay:true | ||
316 | + }, | ||
317 | + { | ||
318 | + img:'assets/img/serviceSecond/maintenance/character-2.png', | ||
319 | + title:'业务健康随时掌控', | ||
320 | + introduction:'预置业务运维综合评价机制,基于“繁忙度”“健康度”“可用性”等多维度的业务性能监控指标,以业务运维状态卡片的方式直观展现业务状态,确保业务的正常运行。', | ||
321 | + isDisplay:true | ||
322 | + }, | ||
323 | + { | ||
324 | + img:'assets/img/serviceSecond/maintenance/character-3.png', | ||
325 | + title:'故障根因分析溯源', | ||
326 | + introduction:'业务系统出现故障时,根据实际业务服务模型,通过业务视图与IT资源间的关联性,实时映射基础设施监控(IM)中影响服务的告警事件,准确定位故障根源、快速恢复业务,并可设置优先级.', | ||
327 | + isDisplay:true | ||
328 | + }, | ||
329 | + { | ||
330 | + img:'assets/img/serviceSecond/maintenance/character-4.png', | ||
331 | + title:'智能告警中心', | ||
332 | + introduction:'实现现有的多种告警源的通知方式及工单系统进行联动,实现统一接入、分级展示、告警降噪、告警处理、告警推送、告警关闭这一系列告警事件的闭环管理,支持告警升/降级,根据故障影响范围和终端用户判定处理优先级。', | ||
333 | + isDisplay:true | ||
334 | + }, | ||
335 | + { | ||
336 | + img:'assets/img/serviceSecond/maintenance/character-5.png', | ||
337 | + title:'提供IT规划参考依据', | ||
338 | + introduction:'提供的业务负载情况及增长趋势曲线,可以对IT资源与业务情况进行评估,定位系统性能瓶颈和容量预警,为管理者提供扩容建议和参考,为IT投资提供量化依据。', | ||
339 | + isDisplay:true | ||
340 | + }, | ||
341 | + { | ||
342 | + img:'assets/img/serviceSecond/maintenance/character-6.png', | ||
343 | + title:'低代码开发技术设计,实现可视化服务编排', | ||
344 | + introduction:'提供低代码开发、降低使用门槛,运维人员不必重新构建基础工具,利用平台能力随需进行快速轻量级开发。支持多语言框架,包括但不限于Python、Java、shell、perl等语言,提供可拖拽式前端开发工具,实现前端布局可视化。提供自动化编译、构建、部署、执行等操作,实现自动部署,集成统一登录、WEB 安全防护模块、功能组件模块等通用模块。', | ||
345 | + isDisplay:true | ||
346 | + }, | ||
347 | + { | ||
348 | + img:'assets/img/serviceSecond/maintenance/character-7.png', | ||
349 | + title:'形成以面向业务场景为驱动的服务型CMDB', | ||
350 | + introduction:'构建符合云架构、智能监控、自动化运维的轻量级CMDB,并形成数据中心枢纽,支持多种业务场景,比如资产管理、资源可视化、运维监控、自动化运维、多云管理等等。', | ||
351 | + isDisplay:true | ||
352 | + }, | ||
353 | + { | ||
354 | + img:'assets/img/serviceSecond/maintenance/character-8.png', | ||
355 | + title:'丰富的分析算法 拖拽式算法模型 对运维数据应用提供了无限可能', | ||
356 | + introduction:'提供AI算法涵盖聚类、分类、回归、自然语言处理、时间序列、关联、综合评价、推荐等8大类机器学习算法。用户基干这些算法构建模型,从而开展深度数据分析,发掘蕴藏在业务数据中价值。算法分析提供了拖拽式可视化的建模功能,让用户可以通过拖拽的方式搭建机器学习实验。根据算法的不同特点选用Spark、Python等不同框架进行实现,真正做到成熟、稳定、简单、易用。', | ||
357 | + isDisplay:true | ||
358 | + } | ||
359 | + ], | ||
360 | + type:'character' | ||
361 | + }, | ||
362 | + { | ||
363 | + title:'产品优势', | ||
364 | + introduction:'', | ||
365 | + dataThird:[ | ||
366 | + { | ||
367 | + title:'便捷', | ||
368 | + dataIntro:['硬件一体化,快速部署','监控对象灵活添加','丰富灵活的报表报告','个性化的首页展示'] | ||
369 | + }, | ||
370 | + { | ||
371 | + title:'适应', | ||
372 | + dataIntro:['分布式数据信息采集','全面支持各类监控设备','大数据分析处理','灵活的系统配置'] | ||
373 | + }, | ||
374 | + { | ||
375 | + title:'智能', | ||
376 | + dataIntro:['建立关联分析引擎','智能精准告警、分级告警','容量智能监测、分析','自动化的运维处理'] | ||
377 | + } | ||
378 | + ], | ||
379 | + type:'advantage' | ||
380 | + }, | ||
381 | + ] | ||
382 | + } | ||
383 | + | ||
384 | + return res | ||
272 | } | 385 | } |
website/assets/img/logo-footer-1.png
0 → 100644

88.6 KB
website/assets/img/logo-footer.png
0 → 100644

41.3 KB

285 KB

127 KB

569 KB

206 KB

190 KB

106 KB

249 KB

69.6 KB

261 KB

136 KB

400 KB

4.78 KB

6.63 KB

7.45 KB

5.6 KB

71 KB
@@ -104,7 +104,7 @@ | @@ -104,7 +104,7 @@ | ||
104 | <!--==================================================================== | 104 | <!--==================================================================== |
105 | Start footer section | 105 | Start footer section |
106 | =====================================================================--> | 106 | =====================================================================--> |
107 | - <footer class="footer-section mt-125 pt-100"> | 107 | + <footer class="footer-section pt-100"> |
108 | <div class="container"> | 108 | <div class="container"> |
109 | 109 | ||
110 | <div class="row"> | 110 | <div class="row"> |
@@ -116,7 +116,7 @@ | @@ -116,7 +116,7 @@ | ||
116 | <div class="col-sm-4"> | 116 | <div class="col-sm-4"> |
117 | <div class="footer-widget logo-widget mr-35"> | 117 | <div class="footer-widget logo-widget mr-35"> |
118 | <div class="footer-logo"> | 118 | <div class="footer-logo"> |
119 | - <router-link to="/"><img src="assets/img/logo.png" alt="" title=""></router-link> | 119 | + <router-link to="/"><img src="assets/img/logo-footer.png" alt="" title=""></router-link> |
120 | </div> | 120 | </div> |
121 | <div class="widget-content"> | 121 | <div class="widget-content"> |
122 | <div class="footer-social-icon mt-20 text-center"> | 122 | <div class="footer-social-icon mt-20 text-center"> |
@@ -37,6 +37,12 @@ const routes = [ | @@ -37,6 +37,12 @@ const routes = [ | ||
37 | name: 'businessApp', | 37 | name: 'businessApp', |
38 | component: () => myImport('views/serviceSecond/businessApp/index') | 38 | component: () => myImport('views/serviceSecond/businessApp/index') |
39 | }, | 39 | }, |
40 | + //魔镜智能运维管理一体机 | ||
41 | + { | ||
42 | + path: '/services/maintenance', | ||
43 | + name: 'maintenance', | ||
44 | + component: () => myImport('views/serviceSecond/maintenance/index') | ||
45 | + }, | ||
40 | ]; | 46 | ]; |
41 | 47 | ||
42 | const router = VueRouter.createRouter({ | 48 | const router = VueRouter.createRouter({ |
@@ -28,7 +28,7 @@ | @@ -28,7 +28,7 @@ | ||
28 | </section> | 28 | </section> |
29 | 29 | ||
30 | 30 | ||
31 | -<section :class="['info-container', 'rel', 'pt-55',{'info-container-bg':item.type=='character'}]" v-for="(item,index) in businessAppData.data" :key="item"> | 31 | +<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"> |
32 | <div class="div-type" :data-type="item.type"></div> | 32 | <div class="div-type" :data-type="item.type"></div> |
33 | <div class="container"> | 33 | <div class="container"> |
34 | <h3 class="info-title">{{item.title}}</h3> | 34 | <h3 class="info-title">{{item.title}}</h3> |
1 | +<section class="hero-section rel rpt-150 pb-130 rpb-0"> | ||
2 | + <div class="shape shapeAnimationOne l-10 t-60"> | ||
3 | + <img src="assets/img/shapes/shape1.png" alt="Shape"> | ||
4 | + </div> | ||
5 | +</section> | ||
6 | + | ||
7 | + | ||
8 | +<section class="intro-Con rel rpt-150 rpb-0 text-left" > | ||
9 | + <img src="assets/img/serviceSecond/serviceSecond.jpg" alt="Shape"> | ||
10 | + <div class="container banner-container"> | ||
11 | + <div class="row banner-height"> | ||
12 | + <div class="banner-introduction color-white col-lg-6"> | ||
13 | + <h2 class="intro-title color-white">{{maintenanceData.title}}</h2> | ||
14 | + <span class="intro-intro">{{maintenanceData.introduction}}</span> | ||
15 | + </div> | ||
16 | + </div> | ||
17 | + </div> | ||
18 | + | ||
19 | +</section> | ||
20 | +<section class="intro-tab"> | ||
21 | + <div class="container"> | ||
22 | + <ul class="intro-tab-container nav nav-pills"> | ||
23 | + <li class="col-lg-2" v-for="(item,index) in maintenanceData.data" :key="item"> | ||
24 | + <span :class="['tab-item',{'tab-item-active':tabActive==index}]" @click="goItemType(item.type)" >{{item.title}}</span> | ||
25 | + </li> | ||
26 | + </ul> | ||
27 | + </div> | ||
28 | +</section> | ||
29 | + | ||
30 | + | ||
31 | +<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"> | ||
32 | + <div class="div-type" :data-type="item.type"></div> | ||
33 | + <h3 v-if="item.type=='advantage'" :class="['info-title','pb-40','maintenance-advantage',{'color-white':item.type=='advantage'}]">{{item.title}}</h3> | ||
34 | + <div class="container"> | ||
35 | + <h3 v-if="item.type!='advantage'" :class="['info-title']">{{item.title}}</h3> | ||
36 | + <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> | ||
37 | + <div class="row" v-if="item.data && item.data.length>0"> | ||
38 | + <div class="info-character col-md-4" v-for="(itemC,indexC) in item.data"> | ||
39 | + <img class="pt-50" :src="itemC.icon" alt=""> | ||
40 | + <h4 class="pt-30">{{itemC.title}}</h4> | ||
41 | + <div class="info-character-intro">{{itemC.introduction}}</div> | ||
42 | + </div> | ||
43 | + </div> | ||
44 | + <div class="info-system pt-30 text-center" v-if="item.img"> | ||
45 | + <img :src="item.img" alt=""> | ||
46 | + </div> | ||
47 | + <div class="row pd-40 " v-if="item.dataPro && item.dataPro.length>0"> | ||
48 | + <div class="col-lg-6 pt-30" v-for="(itemP,indexP) in item.dataPro"> | ||
49 | + <div class="pro-item"> | ||
50 | + <img :src="itemP.img" alt=""> | ||
51 | + <div class="pro-item-content">{{itemP.introduction}}</div> | ||
52 | + </div> | ||
53 | + </div> | ||
54 | + </div> | ||
55 | + <div :class="[{'pro-advantage':item.type=='advantage'}]"></div> | ||
56 | + <div class="row pt-30" v-if="item.dataFour && item.dataFour.length>0"> | ||
57 | + <div class="row-top row" v-for="(itemC,indexC) in item.dataFour" > | ||
58 | + <div class="col-lg-6" v-if="indexC==characterActive"> | ||
59 | + <img class="" :src="itemC.img" alt=""> | ||
60 | + </div> | ||
61 | + <div class="col-lg-6 flex-column-center " v-if="indexC==characterActive"> | ||
62 | + <h3>{{itemC.title}}</h3> | ||
63 | + <div class="pt-30">{{itemC.introduction}}</div> | ||
64 | + </div> | ||
65 | + </div> | ||
66 | + <div class="row-bottom row pt-30"> | ||
67 | + <i class="iconCharacter icon-left" @click="prev(item.dataFour.length)"></i> | ||
68 | + <div class="dot-container row"> | ||
69 | + <div @click="changeCharacter(indexC)" :class="['dot-item', 'col-lg-4', {'dot-item-active':indexC==characterActive,'div-hide':!itemC.isDisplay}]" v-for="(itemC,indexC) in item.dataFour"> | ||
70 | + <div class="dot-item-title" v-if="itemC.isDisplay">{{itemC.title}}</div> | ||
71 | + <div class="dot-item-intro" v-if="itemC.isDisplay">{{itemC.introduction}}</div> | ||
72 | + </div> | ||
73 | + </div> | ||
74 | + <i class="iconCharacter icon-right" @click="next(item.dataFour.length)"></i> | ||
75 | + </div> | ||
76 | + </div> | ||
77 | + <div class="row" v-if="item.dataThird && item.dataThird.length>0"> | ||
78 | + <div class="col-lg-4 maintenance-advantage-item" v-for="(itemV,indexV) in item.dataThird"> | ||
79 | + <div class="info-value pro-advantage-style pb-50" > | ||
80 | + <div :class="['pro-info-title']"> | ||
81 | + <h4 class="color-white">{{itemV.title}}</h4> | ||
82 | + <ul class="pro-advantage-ul pt-30"><li v-for="(itemP,indexP) in itemV.dataIntro">{{itemP}}</li></ul> | ||
83 | + <div class="maintenance-advantage-num pt-100 pb-80">0{{indexV+1}}</div> | ||
84 | + </div> | ||
85 | + </div> | ||
86 | + | ||
87 | + </div> | ||
88 | + </div> | ||
89 | + </div> | ||
90 | + <div v-if="item.type=='advantage'" class="maintenance-line pb-80"></div> | ||
91 | +</section> | ||
92 | + | ||
93 | + | ||
94 | + |
1 | +import pageInit from "../../../minixs/pageInit.js"; | ||
2 | +import {maintenance} from "../../../../assets/img/data/serviceSecond.js"; | ||
3 | +export default { | ||
4 | + name: 'maintenance', | ||
5 | + template: '', | ||
6 | + mixins:[pageInit], | ||
7 | + components: {}, | ||
8 | + props: [], | ||
9 | + setup(props, {attrs, slots, emit}) { | ||
10 | + let maintenanceData=maintenance(); | ||
11 | + //页签高亮显示 | ||
12 | + let tabActive=Vue.ref(0); | ||
13 | + //特点hover显示的图片 | ||
14 | + let characterImg=Vue.ref(); | ||
15 | + let setcharacter=()=>{ | ||
16 | + if(maintenanceData.data && maintenanceData.data.length>0){ | ||
17 | + maintenanceData.data.map(item=>{ | ||
18 | + if(item.type=='character'){ | ||
19 | + characterImg.value=item.dataFour[0].img; | ||
20 | + } | ||
21 | + | ||
22 | + | ||
23 | + }) | ||
24 | + } | ||
25 | + } | ||
26 | + setcharacter(); | ||
27 | + //优势hover高亮显示 | ||
28 | + let characterActive=Vue.ref(0); | ||
29 | + | ||
30 | + //页签点击跳转到对应的目标 | ||
31 | + let goItemType=(type)=>{ | ||
32 | + let top=$("[data-type='"+type+"']").offset().top; | ||
33 | + let total=top-100; | ||
34 | + let distance = document.documentElement.scrollTop || document.body.scrollTop | ||
35 | + //计算每一小段的距离 | ||
36 | + let step=total/6; | ||
37 | + (function smoothDown (){ | ||
38 | + if(distance < total){ | ||
39 | + distance += step; | ||
40 | + //移动一小段 | ||
41 | + document.body.scrollTop =distance; | ||
42 | + document.documentElement.scrollTop = distance; | ||
43 | + //设定每一次跳到的时间间隔为10ms | ||
44 | + setTimeout(smoothDown,10) | ||
45 | + }else{ | ||
46 | + //限制股东停止的距离 | ||
47 | + document.body.scrollTop = total; | ||
48 | + document.documentElement.scrollTop = total; | ||
49 | + } | ||
50 | + })() | ||
51 | + } | ||
52 | + //特点的事件 | ||
53 | + let prev=(dataLength)=>{ | ||
54 | + if(characterActive.value>0){ | ||
55 | + characterActive.value-- | ||
56 | + if(characterActive.value == 0 || characterActive.value+1==dataLength-6){ | ||
57 | + setDisplay(); | ||
58 | + }else if(characterActive.value+1==dataLength-3 ){ | ||
59 | + changeDot(dataLength,2); | ||
60 | + } | ||
61 | + }else if(characterActive.value == 0){ | ||
62 | + characterActive.value=dataLength-1 | ||
63 | + changeDot(dataLength,1); | ||
64 | + } | ||
65 | + } | ||
66 | + let next=(dataLength)=>{ | ||
67 | + if((characterActive.value+1)!=dataLength) { | ||
68 | + characterActive.value++ | ||
69 | + }else{ | ||
70 | + characterActive.value=0; | ||
71 | + } | ||
72 | + changeDot(dataLength); | ||
73 | + } | ||
74 | + let changeCharacter=(indexC)=>{ | ||
75 | + characterActive.value=indexC; | ||
76 | + } | ||
77 | + //特点左右点击切换 | ||
78 | + let changeDot=(dataLength,flag)=>{ | ||
79 | + if(flag==1){ | ||
80 | + //当前为第一个时向前点击 | ||
81 | + maintenanceData.data.map((item,index)=>{ | ||
82 | + if(item.type == 'character'){ | ||
83 | + item.dataFour.map((v,i)=>{ | ||
84 | + if(i>characterActive.value-3){ | ||
85 | + v.isDisplay=true; | ||
86 | + }else{ | ||
87 | + v.isDisplay=false; | ||
88 | + } | ||
89 | + }) | ||
90 | + } | ||
91 | + }) | ||
92 | + }else if(flag==2){ | ||
93 | + //向前点击 | ||
94 | + maintenanceData.data.map((item,index)=>{ | ||
95 | + if(item.type == 'character'){ | ||
96 | + item.dataFour.map((v,i)=>{ | ||
97 | + if(i>characterActive.value-3 && i<=characterActive.value){ | ||
98 | + v.isDisplay=true; | ||
99 | + }else{ | ||
100 | + v.isDisplay=false; | ||
101 | + } | ||
102 | + }) | ||
103 | + } | ||
104 | + }) | ||
105 | + }else{ | ||
106 | + if(characterActive.value>2 && characterActive.value<dataLength){ | ||
107 | + if(maintenanceData.data && maintenanceData.data.length>0){ | ||
108 | + maintenanceData.data.map((item,index)=>{ | ||
109 | + if(item.type == 'character'){ | ||
110 | + item.dataFour[characterActive.value-3].isDisplay=false; | ||
111 | + } | ||
112 | + }) | ||
113 | + } | ||
114 | + }else{ | ||
115 | + setDisplay(); | ||
116 | + } | ||
117 | + } | ||
118 | + | ||
119 | + } | ||
120 | + //设置特点dot全部显示 | ||
121 | + let setDisplay=(flag)=>{ | ||
122 | + if(maintenanceData.data && maintenanceData.data.length>0){ | ||
123 | + if(flag==1){ | ||
124 | + | ||
125 | + }else{ | ||
126 | + maintenanceData.data.map((item,index)=>{ | ||
127 | + if(item.type == 'character'){ | ||
128 | + item.dataFour.map(v=>{ | ||
129 | + v.isDisplay=true; | ||
130 | + }) | ||
131 | + } | ||
132 | + }) | ||
133 | + } | ||
134 | + | ||
135 | + } | ||
136 | + } | ||
137 | + // 挂载完 | ||
138 | + Vue.onMounted(() => { | ||
139 | + | ||
140 | + }) | ||
141 | + | ||
142 | + return { | ||
143 | + characterImg, | ||
144 | + maintenanceData, | ||
145 | + tabActive, | ||
146 | + characterActive, | ||
147 | + setcharacter, | ||
148 | + goItemType, | ||
149 | + prev, | ||
150 | + next, | ||
151 | + changeCharacter, | ||
152 | + changeDot, | ||
153 | + setDisplay | ||
154 | + } | ||
155 | + } | ||
156 | + | ||
157 | +} |
@@ -28,7 +28,7 @@ | @@ -28,7 +28,7 @@ | ||
28 | </section> | 28 | </section> |
29 | 29 | ||
30 | 30 | ||
31 | -<section :class="['info-container', 'rel', {'mb-70':item.type=='system'}, 'pt-55',{'info-container-bg':item.type=='character'}]" v-for="(item,index) in securityLogData.data" :key="item"> | 31 | +<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"> |
32 | <div class="div-type" :data-type="item.type"></div> | 32 | <div class="div-type" :data-type="item.type"></div> |
33 | <div class="container"> | 33 | <div class="container"> |
34 | <h3 class="info-title">{{item.title}}</h3> | 34 | <h3 class="info-title">{{item.title}}</h3> |
@@ -206,7 +206,7 @@ | @@ -206,7 +206,7 @@ | ||
206 | </ol> | 206 | </ol> |
207 | </div> | 207 | </div> |
208 | </div> | 208 | </div> |
209 | - <div class="col-lg-6"> | 209 | + <div class="col-lg-6" @click="jumpSecond('maintenance')"> |
210 | <div class="service-left-image wow customFadeInLeft delay-0-1s slow"> | 210 | <div class="service-left-image wow customFadeInLeft delay-0-1s slow"> |
211 | <img src="assets/img/services/p7.png" style="border-radius: 10px;"> | 211 | <img src="assets/img/services/p7.png" style="border-radius: 10px;"> |
212 | </div> | 212 | </div> |
@@ -14,6 +14,8 @@ export default { | @@ -14,6 +14,8 @@ export default { | ||
14 | proxy.$router.push({path:'/services/securityLog'}) | 14 | proxy.$router.push({path:'/services/securityLog'}) |
15 | }else if(type == 'business'){ | 15 | }else if(type == 'business'){ |
16 | proxy.$router.push({path:'/services/businessApp'}) | 16 | proxy.$router.push({path:'/services/businessApp'}) |
17 | + }else if(type == 'maintenance'){ | ||
18 | + proxy.$router.push({path:'/services/maintenance'}) | ||
17 | } | 19 | } |
18 | } | 20 | } |
19 | return { | 21 | return { |
-
Please register or login to post a comment