Authored by 鲁尚清

Merge branch 'master' of http://192.168.1.136:82/monitor_v3/hg-monitor-web into …

…master-v32-lushangqing
Showing 21 changed files with 382 additions and 75 deletions
@@ -661,7 +661,7 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions'], function @@ -661,7 +661,7 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions'], function
661 if(res.data && res.data.length > 0){ 661 if(res.data && res.data.length > 0){
662 $.each(res.data,function (i,v){ 662 $.each(res.data,function (i,v){
663 trs += `<tr><td>${i+1}</td><td>${v.resName}</td><td>${v.ip}</td><td>${v.adminName}</td> 663 trs += `<tr><td>${i+1}</td><td>${v.resName}</td><td>${v.ip}</td><td>${v.adminName}</td>
664 - <td>${v.resTypeName}</td><td><span id="${v.relId}" class="link resource_sublist_del">删除</span></td></tr>`; 664 + <td>${v.resTypeName}</td><td>${v.collProtocol}</td><td><span id="${v.relId}" class="link resource_sublist_del">删除</span></td></tr>`;
665 }); 665 });
666 } 666 }
667 667
@@ -677,7 +677,7 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions'], function @@ -677,7 +677,7 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions'], function
677 var trs = ''; 677 var trs = '';
678 $.each(res.data,function (i,v){ 678 $.each(res.data,function (i,v){
679 trs += `<tr><td>${i+1}</td><td>${v.resName}</td><td>${v.ip}</td><td>${v.adminName}</td> 679 trs += `<tr><td>${i+1}</td><td>${v.resName}</td><td>${v.ip}</td><td>${v.adminName}</td>
680 - <td>${v.resTypeName}</td><td><span id="${v.relId}" class="link resource_sublist_del">删除</span></td></tr>`; 680 + <td>${v.resTypeName}</td><td>${v.collProtocol}</td><td><span id="${v.relId}" class="link resource_sublist_del">删除</span></td></tr>`;
681 }); 681 });
682 var tb = ` 682 var tb = `
683 <form class="layui-form layui-card-header layuiadmin-card-header-auto" lay-filter="dyglTools-form"> 683 <form class="layui-form layui-card-header layuiadmin-card-header-auto" lay-filter="dyglTools-form">
@@ -685,7 +685,7 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions'], function @@ -685,7 +685,7 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions'], function
685 <div class="layui-inline"> 685 <div class="layui-inline">
686 <div class="layui-input-inline layui-input-inline--long"> 686 <div class="layui-input-inline layui-input-inline--long">
687 <input type="text" id="condition-resType-keyword" placeholder="输入名称,回车搜索" autocomplete="off" 687 <input type="text" id="condition-resType-keyword" placeholder="输入名称,回车搜索" autocomplete="off"
688 - lay-tips="关键字检索包含: </br>IP地址</br>资源名称</br>负责人" 688 + lay-tips="关键字检索包含: </br>IP地址</br>资源名称</br>负责人</br>采集协议"
689 class="layui-input"> 689 class="layui-input">
690 </div> 690 </div>
691 <div class="layui-input-inline layui-input-inline--long multi-query" id="dyglResListBusType"> 691 <div class="layui-input-inline layui-input-inline--long multi-query" id="dyglResListBusType">
@@ -699,7 +699,7 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions'], function @@ -699,7 +699,7 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions'], function
699 699
700 <table class="layui-table"> 700 <table class="layui-table">
701 <thead> 701 <thead>
702 - <tr> <th>序号</th><th>资源名称</th><th>IP地址</th><th>负责人</th><th>资源类型</th><th>操作</th></tr> 702 + <tr> <th>序号</th><th>资源名称</th><th>IP地址</th><th>负责人</th><th>资源类型</th><th>采集协议</th><th>操作</th></tr>
703 </thead> 703 </thead>
704 <tbody> ${trs} </tbody> 704 <tbody> ${trs} </tbody>
705 </table> 705 </table>
@@ -375,7 +375,7 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions', 'xmSelect' @@ -375,7 +375,7 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions', 'xmSelect'
375 grid: [{ 375 grid: [{
376 top: 20, 376 top: 20,
377 bottom: 45, 377 bottom: 45,
378 - left: 30, 378 + left: 40,
379 right: 5 379 right: 5
380 }], 380 }],
381 xAxis: [{ 381 xAxis: [{
@@ -439,7 +439,121 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions', 'xmSelect' @@ -439,7 +439,121 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions', 'xmSelect'
439 }); 439 });
440 }); 440 });
441 } 441 }
  442 + /********************单独加载更多****************************/
  443 + function loadNoticeMoreChart(echartObject,xData,yData) {
  444 + var series = [{
  445 + name: '通知次数',
  446 + data: yData,
  447 + barWidth: 20,
  448 + type: 'bar',
  449 + label: {
  450 + show: true,
  451 + position: 'top',
  452 + textStyle: {
  453 + color: '#555'
  454 + },
  455 + },
  456 + itemStyle: {
  457 + normal: {
  458 + color: (params) => {
  459 + var colors = ['#b6c2ff', '#96edc1', '#fcb75b'];
  460 + return colors[params.dataIndex % 3]
  461 + }
  462 + }
  463 + },
  464 + emphasis: {
  465 + itemStyle: {
  466 + color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
  467 + { offset: 0, color: '#2378f7' },
  468 + { offset: 0.7, color: '#2378f7' },
  469 + { offset: 1, color: '#83bff6' }
  470 + ])
  471 + }
  472 + },
  473 + }]
442 474
  475 + var option = {
  476 + tooltip: {
  477 + trigger: 'axis',
  478 + axisPointer: {
  479 + type: 'shadow'
  480 + }
  481 + },
  482 + grid: [{
  483 + top: 20,
  484 + bottom: 70,
  485 + left: 30,
  486 + right: 5
  487 + }],
  488 + xAxis: [{
  489 + type: 'category',
  490 + data: xData,
  491 + axisLabel: {
  492 + color: '#333',
  493 + show: true,
  494 + interval:0,
  495 + rotate:15
  496 + },
  497 + axisLine: {
  498 + lineStyle: {
  499 + color: '#e7e7e7'
  500 + }
  501 + },
  502 + axisTick: {
  503 + lineStyle: {
  504 + color: '#e7e7e7'
  505 + }
  506 + },
  507 + zlevel: 1
  508 + }],
  509 + yAxis: [{
  510 + type: 'value',
  511 + gridIndex: 0,
  512 + axisLabel: {
  513 + color: '#333'
  514 + },
  515 + splitLine: {
  516 + lineStyle: {
  517 + type: 'dashed'
  518 + }
  519 + },
  520 + axisLine: {
  521 + lineStyle: {
  522 + color: '#ccc'
  523 + }
  524 + },
  525 + axisTick: {
  526 + lineStyle: {
  527 + color: '#ccc'
  528 + }
  529 + }
  530 + }],
  531 + series: series,
  532 + dataZoom: [
  533 + { type: 'slider',
  534 + show: true,
  535 + xAxisIndex: [0],
  536 + left: '1%',
  537 + bottom: -5,
  538 + start: 0,
  539 + end: 50 //初始化滚动条
  540 + }
  541 + ],
  542 + }
  543 + echartObject.setOption(option)
  544 + window.onresize=function(){
  545 + echartObject.resize();
  546 + }
  547 + // const zoomSize = 6;
  548 + // echartObject.on('click', function (params) {
  549 + // echartObject.dispatchAction({
  550 + // type: 'dataZoom',
  551 + // startValue: xData[Math.max(params.dataIndex - zoomSize / 2, 0)],
  552 + // endValue:
  553 + // xData[Math.min(params.dataIndex + zoomSize / 2, yData.length - 1)]
  554 + // });
  555 + // });
  556 + }
443 //获取图表数据 557 //获取图表数据
444 function getChartData() { 558 function getChartData() {
445 var where = { 559 var where = {
@@ -522,7 +636,7 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions', 'xmSelect' @@ -522,7 +636,7 @@ layui.define(['table', 'form', 'admin', 'layer', 'common','sessions', 'xmSelect'
522 var yData = res.map.countList; 636 var yData = res.map.countList;
523 var xData = res.map.userList; 637 var xData = res.map.userList;
524 //展示前20条数据 @Editor LH 638 //展示前20条数据 @Editor LH
525 - loadNoticeChart(noticeTypeChartNew,xData, yData); 639 + loadNoticeMoreChart(noticeTypeChartNew,xData, yData);
526 } 640 }
527 } 641 }
528 }) 642 })
@@ -458,20 +458,16 @@ layui.extend({ @@ -458,20 +458,16 @@ layui.extend({
458 imgUrl="/src/style/img/fault.png"; 458 imgUrl="/src/style/img/fault.png";
459 } 459 }
460 if(toastType=='faultprogress'){ 460 if(toastType=='faultprogress'){
461 - imgUrl="/src/style/img/faultprogress.png"; 461 + imgUrl="/src/style/img/faultover.png";
462 } 462 }
463 if(toastType=='faultover'){ 463 if(toastType=='faultover'){
464 - imgUrl="/src/style/img/faultover.png"; 464 + imgUrl="/src/style/img/faultprogress.png";
465 } 465 }
466 setTimeout(function () { 466 setTimeout(function () {
467 new msgTips({ 467 new msgTips({
468 dom: ".right-bottom-tips", 468 dom: ".right-bottom-tips",
469 title: title, 469 title: title,
470 - message: `<p style="line-height: 24px;background: url(${imgUrl}) no-repeat;background-size: 100%;height: 160px;padding: 10px;background-position-x: right;padding-left: 29px;padding-top: 145px;">  
471 - <span class="title closeFault" style="position: relative;top: -75px;left: 170px;">X</span>  
472 - <span style="position: relative;left: 35px;top: -21px; font-weight: bold;">${title}</span>  
473 - ${content}  
474 - </p>`, 470 + message: `<p style="line-height: 24px;background: url(${imgUrl}) no-repeat;background-size: 100%;height: 160px;background-position-x: right;padding-left: 25px;padding-top: 145px;"><span >${content}</span><span class="title closeFault" style="position: relative;top: -126px;left: 22px;">X</span><span style="position: relative;left: -89px;top: -96px; font-weight: bold;float: right;">${title}</span></p>`,
475 duration: 10000, 471 duration: 10000,
476 space: 10, 472 space: 10,
477 firstSpace: 8, 473 firstSpace: 8,
@@ -489,7 +485,6 @@ layui.extend({ @@ -489,7 +485,6 @@ layui.extend({
489 //} 485 //}
490 } 486 }
491 }) 487 })
492 -  
493 }, delay); 488 }, delay);
494 }else{ 489 }else{
495 setTimeout(function () { 490 setTimeout(function () {
@@ -98,7 +98,7 @@ layui.define(['layer', 'laytpl', 'form'], function (exports) { @@ -98,7 +98,7 @@ layui.define(['layer', 'laytpl', 'form'], function (exports) {
98 $(options.dom).append(newContainer); 98 $(options.dom).append(newContainer);
99 } else if(options.toastType=='faultinfo'||options.toastType=='faultprogress'||options.toastType=='faultover'){ 99 } else if(options.toastType=='faultinfo'||options.toastType=='faultprogress'||options.toastType=='faultover'){
100 100
101 - var container = "<div class='fault_ez_tips "+options.toastType+"' style="+firstDirection+":"+options.margin+"px;transform:translateX("+minus+"110%);width: 226px;bottom: 8px !important; ></div>" 101 + var container = "<div class='fault_ez_tips "+options.toastType+"' style="+firstDirection+":"+options.margin+"px;transform:translateX("+minus+"110%); ></div>"
102 102
103 // var head = "<div class='faultTitle faultClearfix'><i class='faultTips_icon_l fl'></i><i class='FaultTips_icon_r close'></i></div>"; 103 // var head = "<div class='faultTitle faultClearfix'><i class='faultTips_icon_l fl'></i><i class='FaultTips_icon_r close'></i></div>";
104 var head = ""; 104 var head = "";
@@ -127,7 +127,7 @@ layui.define(['layer', 'laytpl', 'form'], function (exports) { @@ -127,7 +127,7 @@ layui.define(['layer', 'laytpl', 'form'], function (exports) {
127 'transition-timing-function':options.timingFun, 127 'transition-timing-function':options.timingFun,
128 // 'width':options.width, 128 // 'width':options.width,
129 'width':'226px', 129 'width':'226px',
130 - 'bottom':'8px' 130 + 'bottom':'620px'
131 }); 131 });
132 var height = $(newContainer).outerHeight(true); 132 var height = $(newContainer).outerHeight(true);
133 var len = $('.fault_ez_tips').size(); 133 var len = $('.fault_ez_tips').size();
@@ -103,9 +103,9 @@ @@ -103,9 +103,9 @@
103 </article> 103 </article>
104 <!--上传弹框--> 104 <!--上传弹框-->
105 <script id="more_info" type="text/html"> 105 <script id="more_info" type="text/html">
106 - <div style="align:center;">  
107 - <div class="lay-row-title" > 人员分组统计 <div style=" float:right;"></div></div>  
108 - <div class="pie-chart" style="height: 350px" id="notice_chart_type_new"></div> 106 + <div style="align:center;padding: 20px;height: 330px">
  107 + <div class="lay-row-title" lay-tips="灰色拖动条可以左右拉缩并拖动展示其它数据"> 人员分组统计 </div>
  108 + <div class="pie-chart" style="height: 100%" id="notice_chart_type_new"></div>
109 </div> 109 </div>
110 </script> 110 </script>
111 <script> 111 <script>
@@ -57,7 +57,7 @@ @@ -57,7 +57,7 @@
57 <i class="iconfont icon-icon--shangchuan"></i> 57 <i class="iconfont icon-icon--shangchuan"></i>
58 上传 58 上传
59 </el-button> 59 </el-button>
60 - <el-button type="danger" :size="$global.elementSize" @click="deleteDocument('','file')" v-if="!isView"> 60 + <el-button type="danger" :size="$global.elementSize" @click="deleteDocument('','file')">
61 <i class="iconfont icon-shanchuwenjianjia"></i> 61 <i class="iconfont icon-shanchuwenjianjia"></i>
62 删除 62 删除
63 </el-button> 63 </el-button>
@@ -337,7 +337,6 @@ export default { @@ -337,7 +337,6 @@ export default {
337 setTimeout(function () { 337 setTimeout(function () {
338 let id = currentNodeData.value.id; 338 let id = currentNodeData.value.id;
339 339
340 -  
341 if (loadTree && loadTree == true) { 340 if (loadTree && loadTree == true) {
342 getTree(); 341 getTree();
343 } else { 342 } else {
@@ -674,6 +673,7 @@ export default { @@ -674,6 +673,7 @@ export default {
674 } 673 }
675 let uploadCallBack = ({document, fileInfo}) => { 674 let uploadCallBack = ({document, fileInfo}) => {
676 reload(false); 675 reload(false);
  676 + props.fileIds.push(document.id)
677 // 执行回调 677 // 执行回调
678 emit('callback', {document, fileInfo}); 678 emit('callback', {document, fileInfo});
679 } 679 }
@@ -18,8 +18,17 @@ @@ -18,8 +18,17 @@
18 <div v-else-if="typeof(item.render) == 'function'" > 18 <div v-else-if="typeof(item.render) == 'function'" >
19 <span v-html="item.render(scope.row)">{{scope.row[item.prop]}}</span> 19 <span v-html="item.render(scope.row)">{{scope.row[item.prop]}}</span>
20 </div> 20 </div>
  21 +
21 <span v-else> 22 <span v-else>
22 - {{scope.row[item.prop]}} 23 + <el-tooltip placement="top">
  24 + <template #content>
  25 + <div v-html="getTextContent(scope.row[item.prop])">
  26 + </div>
  27 + </template>
  28 + <div style="overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;">
  29 + {{scope.row[item.prop]}}
  30 + </div>
  31 + </el-tooltip>
23 </span> 32 </span>
24 </slot> 33 </slot>
25 </template> 34 </template>
@@ -199,6 +199,14 @@ export default { @@ -199,6 +199,14 @@ export default {
199 } 199 }
200 }) 200 })
201 } 201 }
  202 +
  203 + let getTextContent = (val) =>{
  204 + if(val && val != '' && val != null){
  205 + val = val.replace(/[^\x00-\xff]/g,"$&\x01").replace(/.{50}\x01?/g,"$&<br/>").replace(/\x01/g,"");
  206 + }
  207 + return val;
  208 +
  209 + }
202 // 挂载完 210 // 挂载完
203 Vue.onMounted(() => { 211 Vue.onMounted(() => {
204 //callback(); 212 //callback();
@@ -224,7 +232,8 @@ export default { @@ -224,7 +232,8 @@ export default {
224 handleCurrentChange, 232 handleCurrentChange,
225 prePage, 233 prePage,
226 nextPage, 234 nextPage,
227 - getWidth 235 + getWidth,
  236 + getTextContent
228 } 237 }
229 } 238 }
230 } 239 }
@@ -10,6 +10,16 @@ var global = {}; @@ -10,6 +10,16 @@ var global = {};
10 global.layui = window.parent.layui; 10 global.layui = window.parent.layui;
11 11
12 global.common = { 12 global.common = {
  13 + getUserName : function (){
  14 + return localStorage.getItem('lgn');
  15 + },
  16 + getUserRole : function (){
  17 + let roleStr = sessionStorage.getItem('roles');
  18 + if(roleStr){
  19 + return roleStr.split(",");
  20 + }
  21 + return [];
  22 + }
13 23
14 }; 24 };
15 25
@@ -46,7 +46,7 @@ @@ -46,7 +46,7 @@
46 <!--判定是否有daping角色,如果有则显示该菜单 joke add 20211203--> 46 <!--判定是否有daping角色,如果有则显示该菜单 joke add 20211203-->
47 <script type="text/html" template lay-url="{{sessionStorage.getItem('domainName')}}/api-user/users/checkHasRole?roleCode=daping"> 47 <script type="text/html" template lay-url="{{sessionStorage.getItem('domainName')}}/api-user/users/checkHasRole?roleCode=daping">
48 {{# if(d.count > 0){ }} 48 {{# if(d.count > 0){ }}
49 - <li class="layui-nav-item" lay-tips="监控一体化视图"> 49 + <li class="layui-nav-item" lay-tips="展示大屏">
50 <a href="javascript:;" layadmin-event="toBigScreen" ><img src="/src/style/img/icon-daping.png" style="width: 16px;height: 16px"></a> 50 <a href="javascript:;" layadmin-event="toBigScreen" ><img src="/src/style/img/icon-daping.png" style="width: 16px;height: 16px"></a>
51 </li> 51 </li>
52 {{# } }} 52 {{# } }}
@@ -5,11 +5,17 @@ @@ -5,11 +5,17 @@
5 5
6 /* 属性配置 -- end */ 6 /* 属性配置 -- end */
7 7
  8 +
8 .yfyw-user { 9 .yfyw-user {
9 padding-top: 6px; 10 padding-top: 6px;
10 width: 99%; 11 width: 99%;
11 } 12 }
12 13
  14 +.yfyw-user .el-avatar img{
  15 + width: 80px!important;
  16 + height: 80px!important;
  17 +}
  18 +
13 .yfyw-user .title{ 19 .yfyw-user .title{
14 font-weight: bold;text-align: left;padding-left: 40px;margin-bottom: 6px 20 font-weight: bold;text-align: left;padding-left: 40px;margin-bottom: 6px
15 } 21 }
  1 +<div>
  2 + <div style="font-weight: bold;text-align: left;">故障相关处理意见</div>
  3 + <cm-table-page v-if="list.columns.length > 0" :columns="list.columns"
  4 + :dataList="list.dataList"
  5 + @loaddata="getPageInfo"
  6 + :showIndex="true"
  7 + :showBorder="true"
  8 + :showPage="false"
  9 + :showTools="showTools"
  10 + :maxWidth="width"
  11 + size="mini"
  12 + :height="200">
  13 + <template #tools="{scope}">
  14 + <el-button type="text" size="small" @click.prevent="handleClick(scope.row,scope.$index)">
  15 + 引用
  16 + </el-button>
  17 + </template>
  18 + </cm-table-page>
  19 +</div>
  1 +export default {
  2 + name: 'faultHisIndex',
  3 + template: '',
  4 + components: {
  5 + 'echarts-line': Vue.defineAsyncComponent(
  6 + () => myImport('components/common/echarts/line/index')
  7 + )
  8 + },
  9 + data() {
  10 + return {}
  11 + },
  12 + props: {
  13 + targetType: {
  14 + type: String,
  15 + default: ''
  16 + },
  17 + faultNo: {
  18 + type: String,
  19 + default: ''
  20 + },
  21 + itemName: {
  22 + type: String,
  23 + default: ''
  24 + },
  25 + itemInfo: {
  26 + type: Object,
  27 + default: {}
  28 + },
  29 + // 展示详情页
  30 + showDetail: {
  31 + type: String,
  32 + default: ''
  33 + },
  34 + // 数据转行方式
  35 + colType: {
  36 + type: String,
  37 + default: 'kpi'
  38 + },
  39 + width:{
  40 + type:Number,
  41 + default: window.innerWidth * 0.8 - 160
  42 + },
  43 + showTools: {
  44 + type: Boolean,
  45 + default: false
  46 + },
  47 + },
  48 + setup(props, {attrs, slots, emit}) {
  49 +
  50 + const {proxy} = Vue.getCurrentInstance();
  51 + // 列表展示结果
  52 + let list = Vue.ref({
  53 + columns: [{
  54 + prop: 'faultNo',
  55 + width:90,
  56 + label: '故障编号',
  57 + },{
  58 + prop: 'faultBody',
  59 + width:150,
  60 + label: '故障主体',
  61 + }, {
  62 + prop: 'createTime',
  63 + width:100,
  64 + label: '发生时间',
  65 + }, {
  66 + prop: 'duration',
  67 + width:80,
  68 + label: '持续时长',
  69 + },{
  70 + prop: 'solution',
  71 + width:200,
  72 + label: '处理方案'
  73 + }],
  74 + dataList: [],
  75 + total: 0
  76 + });
  77 +
  78 +
  79 + /**
  80 + * 获取表格数据
  81 + * <p>
  82 + * 作者: Wang
  83 + * 时间:2021/12/15 17:26
  84 + */
  85 + let getPage = () => {
  86 + let params = {
  87 + configId: props.itemInfo.configId,
  88 + }
  89 +
  90 + proxy.$http.get('/api-web/fault/result/findFaultListByConfigId', params, function (res) {
  91 + if (res && res.success) {
  92 + list.value.dataList = res.data;
  93 + } else {
  94 + proxy.$global.showMsg(res.msg, "warning");
  95 + }
  96 + });
  97 + }
  98 +
  99 +
  100 + let handleClick = (row,index) =>{
  101 + console.log(row,index);
  102 + emit('callback',row);
  103 + }
  104 +
  105 + // // 监听编辑状态
  106 + // Vue.watch(() => props.itemInfo, (newValue, oldVlaue) => {
  107 + // getPage();
  108 + // });
  109 +
  110 + // 挂载完
  111 + Vue.onMounted(() => {
  112 + getPage();
  113 + })
  114 +
  115 + return {
  116 + list,
  117 + getPage,
  118 + handleClick
  119 + }
  120 + }
  121 +}
@@ -61,8 +61,9 @@ export default { @@ -61,8 +61,9 @@ export default {
61 sortable: true, 61 sortable: true,
62 click: function (row) { 62 click: function (row) {
63 // 点击弹框展示人员信息 63 // 点击弹框展示人员信息
64 - title.value = "人员信息"; 64 + title.value = "个人信息";
65 componentName.value = "USER"; 65 componentName.value = "USER";
  66 + props.parentNode.id = row.id;
66 showDialog(true); 67 showDialog(true);
67 } 68 }
68 }, { 69 }, {
1 <div class="yfyw-user"> 1 <div class="yfyw-user">
2 <div> 2 <div>
3 - <el-avatar :size="80" :src="imageUrl"> 3 + <el-avatar :size="80" :src="imageUrl" shape="circle">
4 <i class="iconfont icon-yonghu" style="font-size: 80px;"/> 4 <i class="iconfont icon-yonghu" style="font-size: 80px;"/>
5 </el-avatar> 5 </el-avatar>
6 <el-upload 6 <el-upload
@@ -21,7 +21,7 @@ @@ -21,7 +21,7 @@
21 <el-row :gutter="5"> 21 <el-row :gutter="5">
22 <el-col :span="8"> 22 <el-col :span="8">
23 <el-form-item label="姓名" prop="nickname" class="form-class"> 23 <el-form-item label="姓名" prop="nickname" class="form-class">
24 - <el-input v-model="ruleForm.nickname" :readonly="isAdmin()"></el-input> 24 + <el-input v-model="ruleForm.nickname" :readonly="true"></el-input>
25 </el-form-item> 25 </el-form-item>
26 </el-col> 26 </el-col>
27 <el-col :span="8"> 27 <el-col :span="8">
@@ -34,7 +34,7 @@ @@ -34,7 +34,7 @@
34 </el-col> 34 </el-col>
35 <el-col :span="8"> 35 <el-col :span="8">
36 <el-form-item label="年龄" prop="age" class="form-class"> 36 <el-form-item label="年龄" prop="age" class="form-class">
37 - <el-input v-model="ruleForm.age" type="number"></el-input> 37 + <el-input v-model="ruleForm.age" type="number" :readonly="isAdmin()"></el-input>
38 </el-form-item> 38 </el-form-item>
39 </el-col> 39 </el-col>
40 </el-row> 40 </el-row>
@@ -43,7 +43,7 @@ @@ -43,7 +43,7 @@
43 <el-row :gutter="5"> 43 <el-row :gutter="5">
44 <el-col :span="8"> 44 <el-col :span="8">
45 <el-form-item label="座机号码" prop="tel" class="form-class"> 45 <el-form-item label="座机号码" prop="tel" class="form-class">
46 - <el-input v-model="ruleForm.tel"></el-input> 46 + <el-input v-model="ruleForm.tel" :readonly="isAdmin()"></el-input>
47 </el-form-item> 47 </el-form-item>
48 </el-col> 48 </el-col>
49 <el-col :span="8"> 49 <el-col :span="8">
@@ -53,7 +53,7 @@ @@ -53,7 +53,7 @@
53 </el-col> 53 </el-col>
54 <el-col :span="8"> 54 <el-col :span="8">
55 <el-form-item label="电子邮箱" prop="email" class="form-class"> 55 <el-form-item label="电子邮箱" prop="email" class="form-class">
56 - <el-input v-model="ruleForm.email" id="email"></el-input> 56 + <el-input v-model="ruleForm.email" id="email" :readonly="isAdmin()"></el-input>
57 </el-form-item> 57 </el-form-item>
58 </el-col> 58 </el-col>
59 </el-row> 59 </el-row>
@@ -67,7 +67,7 @@ @@ -67,7 +67,7 @@
67 </el-col> 67 </el-col>
68 <el-col :span="8"> 68 <el-col :span="8">
69 <el-form-item label="学历" prop="education" class="form-class"> 69 <el-form-item label="学历" prop="education" class="form-class">
70 - <el-input v-model="ruleForm.education"></el-input> 70 + <el-input v-model="ruleForm.education" :readonly="isAdmin()"></el-input>
71 </el-form-item> 71 </el-form-item>
72 </el-col> 72 </el-col>
73 <el-col :span="8"> 73 <el-col :span="8">
@@ -80,7 +80,7 @@ @@ -80,7 +80,7 @@
80 <el-row :gutter="5"> 80 <el-row :gutter="5">
81 <el-col :span="8"> 81 <el-col :span="8">
82 <el-form-item label="身份证" prop="idcard" class="form-class"> 82 <el-form-item label="身份证" prop="idcard" class="form-class">
83 - <el-input v-model="ruleForm.idcard"></el-input> 83 + <el-input v-model="ruleForm.idcard" :readonly="isAdmin()"></el-input>
84 </el-form-item> 84 </el-form-item>
85 </el-col> 85 </el-col>
86 <el-col :span="8"> 86 <el-col :span="8">
@@ -108,12 +108,12 @@ @@ -108,12 +108,12 @@
108 <el-row :gutter="5"> 108 <el-row :gutter="5">
109 <el-col :span="8"> 109 <el-col :span="8">
110 <el-form-item label="政治面貌" prop="politicsStatus" class="form-class"> 110 <el-form-item label="政治面貌" prop="politicsStatus" class="form-class">
111 - <el-input v-model="ruleForm.politicsStatus"></el-input> 111 + <el-input v-model="ruleForm.politicsStatus" :readonly="isAdmin()"></el-input>
112 </el-form-item> 112 </el-form-item>
113 </el-col> 113 </el-col>
114 <el-col :span="8"> 114 <el-col :span="8">
115 - <el-form-item label="在职状态" prop="certificate" :readonly="isAdmin()" class="form-class">  
116 - <el-radio-group v-model="ruleForm.state"> 115 + <el-form-item label="在职状态" prop="certificate" :readonly="true" class="form-class">
  116 + <el-radio-group v-model="ruleForm.state" :disabled="true">
117 <el-radio :label="1">在职</el-radio> 117 <el-radio :label="1">在职</el-radio>
118 <el-radio :label="2">离职</el-radio> 118 <el-radio :label="2">离职</el-radio>
119 </el-radio-group> 119 </el-radio-group>
@@ -124,18 +124,18 @@ @@ -124,18 +124,18 @@
124 <el-row :gutter="5"> 124 <el-row :gutter="5">
125 <el-col :span="24"> 125 <el-col :span="24">
126 <el-form-item label="获得证书" prop="post" class="form-textarea"> 126 <el-form-item label="获得证书" prop="post" class="form-textarea">
127 - <el-input v-model="ruleForm.certificate" type="textarea"></el-input> 127 + <el-input v-model="ruleForm.certificate" type="textarea" :readonly="isAdmin()"></el-input>
128 </el-form-item> 128 </el-form-item>
129 </el-col> 129 </el-col>
130 </el-row> 130 </el-row>
131 <el-row :gutter="5"> 131 <el-row :gutter="5">
132 <el-col :span="24"> 132 <el-col :span="24">
133 <el-form-item label="家庭住址" prop="post" class="form-textarea"> 133 <el-form-item label="家庭住址" prop="post" class="form-textarea">
134 - <el-input v-model="ruleForm.post" type="textarea"></el-input> 134 + <el-input v-model="ruleForm.post" type="textarea" :readonly="isAdmin()"></el-input>
135 </el-form-item> 135 </el-form-item>
136 </el-col> 136 </el-col>
137 </el-row> 137 </el-row>
138 - <div style="text-align: center;padding-top: 10px"> 138 + <div style="text-align: center;padding-top: 10px" v-if="!isAdmin()">
139 <el-button type="primary" size="mini" @click="saveUser()">保存基本信息</el-button> 139 <el-button type="primary" size="mini" @click="saveUser()">保存基本信息</el-button>
140 </div> 140 </div>
141 </el-form> 141 </el-form>
@@ -143,8 +143,7 @@ @@ -143,8 +143,7 @@
143 <!--资产信息--> 143 <!--资产信息-->
144 <div class="title"> 144 <div class="title">
145 <i class="iconfont icon-liebiaomoshi"/> 资产信息 145 <i class="iconfont icon-liebiaomoshi"/> 资产信息
146 -  
147 - <el-dropdown v-if="Object.keys(icon).length > 0" size="mini" split-button @click="assetsAdd('bastion',`新建${icon['bastion'].name}资产`)" style="margin-left: 20px"> 146 + <el-dropdown v-if="Object.keys(icon).length > 0 && !isAdmin()" size="mini" split-button @click="assetsAdd('bastion',`新建${icon['bastion'].name}资产`)" style="margin-left: 20px">
148 <i class="icon el-icon-plus"/>添加{{icon['bastion'].name}} 147 <i class="icon el-icon-plus"/>添加{{icon['bastion'].name}}
149 <template #dropdown> 148 <template #dropdown>
150 <div style="max-height: 300px;overflow-y: auto"> 149 <div style="max-height: 300px;overflow-y: auto">
@@ -173,13 +172,10 @@ @@ -173,13 +172,10 @@
173 </div> 172 </div>
174 </div> 173 </div>
175 <div class="zc-item-tools"> 174 <div class="zc-item-tools">
176 - <el-button-group size="mini"> 175 + <el-button-group size="mini" v-if="!isAdmin()">
177 <el-button @click="btnClick('add',arr,`新建${icon[k].name}资产`)"> 176 <el-button @click="btnClick('add',arr,`新建${icon[k].name}资产`)">
178 <i class="el-icon-plus"/> 177 <i class="el-icon-plus"/>
179 </el-button> 178 </el-button>
180 - <!--<el-button @click="btnClick('save',arr,`保存${icon[k].name}资产`)">  
181 - <i class="el-icon-check"/>  
182 - </el-button>-->  
183 <el-button @click="btnClick('edit',arr,`编辑${icon[k].name}资产`)"> 179 <el-button @click="btnClick('edit',arr,`编辑${icon[k].name}资产`)">
184 <i class="el-icon-edit"/> 180 <i class="el-icon-edit"/>
185 </el-button> 181 </el-button>
@@ -421,7 +421,9 @@ export default { @@ -421,7 +421,9 @@ export default {
421 } 421 }
422 422
423 let isAdmin = () => { 423 let isAdmin = () => {
424 - return localStorage.getItem('lgn') != 'admin'; 424 + let userRoleArr = proxy.$global.common.getUserRole();
  425 + let userName = proxy.$global.common.getUserName();
  426 + return userName != 'admin' && userName != 'root' && !userRoleArr.includes('pmp');
425 } 427 }
426 428
427 const { 429 const {
@@ -94,15 +94,19 @@ export default { @@ -94,15 +94,19 @@ export default {
94 proxy.$global.showMsg("资源编号不存在,请确认!", "warning") 94 proxy.$global.showMsg("资源编号不存在,请确认!", "warning")
95 return; 95 return;
96 } 96 }
97 -  
98 - proxy.$http.post(`/api-web/favorites/save/res?favId=${favIds.value}&resIds=${props.resId}`, {}, function (res) {  
99 - if (res && res.code ==0) {  
100 - let msg = !res.msg ? '收藏成功!' : res.msg;  
101 - let type = !res.success ? 'warning' : 'success';  
102 - proxy.$global.showMsg(msg,type);  
103 - showDialog(false);  
104 - }  
105 - }); 97 + if (favIds.value != '' && favIds.value != null) {
  98 +
  99 + proxy.$http.post(`/api-web/favorites/save/res?favId=${favIds.value}&resIds=${props.resId}`, {}, function (res) {
  100 + if (res && res.code == 0) {
  101 + let msg = !res.msg ? '收藏成功!' : res.msg;
  102 + let type = !res.success ? 'warning' : 'success';
  103 + proxy.$global.showMsg(msg, type);
  104 + showDialog(false);
  105 + }
  106 + });
  107 + }else {
  108 + proxy.$global.showMsg('请选择收藏夹', 'warning');
  109 + }
106 } 110 }
107 111
108 112
@@ -26,6 +26,8 @@ @@ -26,6 +26,8 @@
26 <cm-table-page :columns="list.columns" 26 <cm-table-page :columns="list.columns"
27 :dataList="list.dataList" 27 :dataList="list.dataList"
28 :total="list.total" 28 :total="list.total"
  29 + :pageSizes="[10,20,50,100, 200, 300, 400]"
  30 + :pageSize="searchForm.pageSize"
29 @loaddata="getPageInfo" 31 @loaddata="getPageInfo"
30 :showIndex="true" 32 :showIndex="true"
31 :showBorder="true" 33 :showBorder="true"
@@ -72,7 +74,7 @@ @@ -72,7 +74,7 @@
72 74
73 <!-- 处理弹框 --> 75 <!-- 处理弹框 -->
74 <cm-dialog title="故障处理" width="60%" :showDialogVisible="handleInfoDialog" 76 <cm-dialog title="故障处理" width="60%" :showDialogVisible="handleInfoDialog"
75 - @hidedialog="showHandelInfoDialog" :showFooter="false"> 77 + @hidedialog="showHandleInfoDialog" :showFooter="false">
76 <template v-slot> 78 <template v-slot>
77 <el-form ref="handleForm" :model="handleInfoForm" :rules="handleInfoRules" label-width="120px"> 79 <el-form ref="handleForm" :model="handleInfoForm" :rules="handleInfoRules" label-width="120px">
78 80
@@ -132,6 +134,14 @@ @@ -132,6 +134,14 @@
132 </el-col> 134 </el-col>
133 </el-row> 135 </el-row>
134 136
  137 + <el-row :gutter="5">
  138 + <el-col :span="24">
  139 + <faultHis :itemInfo="{'configId':handleInfoForm.faultconfid}"
  140 + :width="handleInfoDialogWidth"
  141 + :showTools="true" @callback="setSolution"></faultHis>
  142 + </el-col>
  143 + </el-row>
  144 +
135 <el-form-item> 145 <el-form-item>
136 <el-button @click="showHandleInfoDialog(false)">取消</el-button> 146 <el-button @click="showHandleInfoDialog(false)">取消</el-button>
137 <el-button v-if="handleInfoForm.solveTime == null || handleInfoForm.solveTime == ''" type="primary" @click="saveHandleInfo('handleForm',getPage)">保存</el-button> 147 <el-button v-if="handleInfoForm.solveTime == null || handleInfoForm.solveTime == ''" type="primary" @click="saveHandleInfo('handleForm',getPage)">保存</el-button>
@@ -48,6 +48,14 @@ const faultDetail = () => { @@ -48,6 +48,14 @@ const faultDetail = () => {
48 itemName: '检测指标', 48 itemName: '检测指标',
49 detail: true, 49 detail: true,
50 colType: 'flag' 50 colType: 'flag'
  51 + }, {
  52 + faultType: 'faultHis',
  53 + faultTypeName: '知识库',
  54 + components: 'faultHis',
  55 + color: '#8a9718',
  56 + itemName: '知识库',
  57 + detail: true,
  58 + colType: 'flag'
51 }] 59 }]
52 }); 60 });
53 61
@@ -91,6 +99,7 @@ const faultDetail = () => { @@ -91,6 +99,7 @@ const faultDetail = () => {
91 const handleInfo = () => { 99 const handleInfo = () => {
92 const {proxy} = Vue.getCurrentInstance(); 100 const {proxy} = Vue.getCurrentInstance();
93 let handleInfoDialog = Vue.ref(false); 101 let handleInfoDialog = Vue.ref(false);
  102 + let handleInfoDialogWidth = Vue.ref(window.innerWidth * 0.6 - 80);;
94 let handleInfoForm = Vue.ref({ 103 let handleInfoForm = Vue.ref({
95 faulttype: '', 104 faulttype: '',
96 createTime: '', 105 createTime: '',
@@ -114,8 +123,8 @@ const handleInfo = () => { @@ -114,8 +123,8 @@ const handleInfo = () => {
114 }, 123 },
115 { 124 {
116 min: 5, 125 min: 5,
117 - max: 100,  
118 - message: '处理方案内容在5到100个字符之间', 126 + max: 500,
  127 + message: '处理方案内容在5到500个字符之间',
119 trigger: 'blur', 128 trigger: 'blur',
120 } 129 }
121 ] 130 ]
@@ -125,8 +134,12 @@ const handleInfo = () => { @@ -125,8 +134,12 @@ const handleInfo = () => {
125 let handleClick = (row, index) => { 134 let handleClick = (row, index) => {
126 // 点击弹框 135 // 点击弹框
127 showHandleInfoDialog(true); 136 showHandleInfoDialog(true);
128 - handleInfoForm.value = row;  
129 - //Object.assign(handleInfoForm.value,row); 137 + handleInfoForm.value = Object.assign(handleInfoForm.value,row);
  138 +
  139 + }
  140 +
  141 + let setSolution = (row) =>{
  142 + handleInfoForm.value.solution = row.solution;
130 } 143 }
131 144
132 /** 145 /**
@@ -138,16 +151,6 @@ const handleInfo = () => { @@ -138,16 +151,6 @@ const handleInfo = () => {
138 let saveHandleInfo = (key, callback) => { 151 let saveHandleInfo = (key, callback) => {
139 proxy.$refs[key].validate((valid) => { 152 proxy.$refs[key].validate((valid) => {
140 if (valid) { 153 if (valid) {
141 - // proxy.$http.post('/api-web/fault/solve', handleInfoForm.value, function (res) {  
142 - // if (res && res.success) {  
143 - // proxy.$global.showMsg("处理成功!");  
144 - // showHandleInfoDialog(false);  
145 - // } else {  
146 - // proxy.$global.showMsg("处理失败,请联系管理员!");  
147 - // }  
148 - // callback();  
149 - // });  
150 -  
151 proxy.$http.post('/api-web/fault/faultHandle', { 154 proxy.$http.post('/api-web/fault/faultHandle', {
152 faultId: handleInfoForm.value.id, 155 faultId: handleInfoForm.value.id,
153 label: handleInfoForm.value.label, 156 label: handleInfoForm.value.label,
@@ -180,10 +183,12 @@ const handleInfo = () => { @@ -180,10 +183,12 @@ const handleInfo = () => {
180 return { 183 return {
181 handleInfoForm, 184 handleInfoForm,
182 handleInfoRules, 185 handleInfoRules,
  186 + setSolution,
183 handleClick, 187 handleClick,
184 handleInfoDialog, 188 handleInfoDialog,
185 showHandleInfoDialog, 189 showHandleInfoDialog,
186 - saveHandleInfo 190 + saveHandleInfo,
  191 + handleInfoDialogWidth
187 } 192 }
188 } 193 }
189 export default { 194 export default {
@@ -195,6 +200,9 @@ export default { @@ -195,6 +200,9 @@ export default {
195 ), 200 ),
196 'netLinks': Vue.defineAsyncComponent( 201 'netLinks': Vue.defineAsyncComponent(
197 () => myImport('components/page/faultDiagnosis/result/netLinks/index') 202 () => myImport('components/page/faultDiagnosis/result/netLinks/index')
  203 + ),
  204 + 'faultHis': Vue.defineAsyncComponent(
  205 + () => myImport('components/page/faultDiagnosis/result/faultHis/index')
198 ) 206 )
199 }, 207 },
200 data() { 208 data() {
@@ -213,7 +221,7 @@ export default { @@ -213,7 +221,7 @@ export default {
213 let searchForm = Vue.ref({ 221 let searchForm = Vue.ref({
214 keyword: '', 222 keyword: '',
215 page: 1, 223 page: 1,
216 - pageSize: 10 224 + pageSize: 20
217 }); 225 });
218 226
219 // 获取URL参数 227 // 获取URL参数
@@ -327,10 +335,12 @@ export default { @@ -327,10 +335,12 @@ export default {
327 const { 335 const {
328 handleInfoForm, 336 handleInfoForm,
329 handleInfoRules, 337 handleInfoRules,
  338 + setSolution,
330 handleClick, 339 handleClick,
331 handleInfoDialog, 340 handleInfoDialog,
332 showHandleInfoDialog, 341 showHandleInfoDialog,
333 - saveHandleInfo 342 + saveHandleInfo,
  343 + handleInfoDialogWidth
334 } = handleInfo(); 344 } = handleInfo();
335 345
336 // 挂载完 346 // 挂载完
@@ -356,11 +366,12 @@ export default { @@ -356,11 +366,12 @@ export default {
356 // 处理弹框 366 // 处理弹框
357 handleInfoForm, 367 handleInfoForm,
358 handleInfoRules, 368 handleInfoRules,
  369 + setSolution,
359 handleClick, 370 handleClick,
360 handleInfoDialog, 371 handleInfoDialog,
361 showHandleInfoDialog, 372 showHandleInfoDialog,
362 - saveHandleInfo  
363 - 373 + saveHandleInfo,
  374 + handleInfoDialogWidth
364 } 375 }
365 } 376 }
366 } 377 }
@@ -59,7 +59,7 @@ export default { @@ -59,7 +59,7 @@ export default {
59 setInterval(function(){ 59 setInterval(function(){
60 getDateTime(); 60 getDateTime();
61 },1000); 61 },1000);
62 - document.title = '监控一体化视图' 62 + document.title = '展示大屏'
63 63
64 }) 64 })
65 let getDateTime=()=>{ 65 let getDateTime=()=>{