Merge branch 'dev-3.9' of git.mesalab.cn:nezha/nezha-fronted into dev-3.9

This commit is contained in:
zyh
2023-08-18 13:58:53 +08:00
62 changed files with 769 additions and 301 deletions

View File

@@ -126,6 +126,9 @@
//padding: 10px;
}
}
#nz-search-box {
max-width: 400px;
}
}
.list-page {
.sub-box.bottom-box {

View File

@@ -56,6 +56,12 @@
text-overflow: ellipsis;
white-space: nowrap;
word-break: break-word;
.overflowSpan {
.el-popover__reference {
display: inline-block;
width: 100%;
}
}
}
.tree--operation {
opacity: 0;
@@ -113,14 +119,14 @@
}
}
.dashboard-select-item:hover{
color: $--color-primary;
color: $--color-primary;
background: $--background-color-base;
i{
color: $--color-primary;
}
}
.dashboard-select-item.active{
color: $--color-primary;
color: $--color-primary;
background: $--background-color-base;
i{
color: $--color-primary;

View File

@@ -1,6 +1,48 @@
.right-box-editSoftwareType {
.el-dropdown-link {
border: 1px solid $--border-color-light;
border-radius: 2px;
}
.avatar-uploader .el-upload {
border: 1px dashed $--border-color-light;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
padding: 5px;
width: 178px;
height: 178px;
box-sizing: border-box;
}
.nz-icon-circle-close {
display: none;
position: absolute;
color: $--color-danger;
top: -6px;
right: 6px;
}
.avatar-uploader .el-upload:hover {
border-color: $--border-color-light-hover;
.nz-icon-circle-close {
display: inline-block;
}
}
.avatar-uploader-icon {
font-size: 28px;
width: 178px;
height: 178px;
line-height: 178px;
text-align: center;
}
.avatar {
width: 168px;
height: 168px;
display: block;
}
}
#softwareTypeTable {
.table-image {
width: 32px;
height: 32px;
display: block;
}
}

View File

@@ -22,7 +22,7 @@
<el-dropdown-menu style="display: none"></el-dropdown-menu>
<span class="el-dropdown-link chart-title">
<!-- <span class="chart-title-text">{{chartData.name}}</span>-->
<span class="chart-title-text" v-on:mouseover="changeActive()" v-on:mouseout="removeActive()">{{chartData.name}}</span>
<span class="chart-title-text" :title="chartData.name" v-on:mouseover="changeActive()" v-on:mouseout="removeActive()">{{chartData.name}}</span>
<transition name="el-fade-in-linear">
<span v-show="chartDataList" class="chart-title-pit" >{{chartData.name}}</span>
</transition>

View File

@@ -16,7 +16,7 @@
></chart-legend>
<div :id="`chart-canvas-tooltip-${chartId}`" class="chart-canvas-tooltip no-style-class" :class="{'chart-dataLink-tooltip':tooltip.dataLinkShow}" :style="{left:tooltip.x+'px',top:tooltip.y+'px'}" v-if="tooltip.show" v-clickoutside="clickout">
<div class="chart-canvas-tooltip-title tooltip-title">{{tooltip.title}}</div>
<div class="chart-canvas-tooltip-title tooltip-title" :title="tooltip.title">{{tooltip.title}}</div>
<div class="chart-canvas-tooltip-content">
<div>value</div>
<div>
@@ -28,7 +28,7 @@
</div>
<!-- dataLink -->
<div class="chart-dataLink-list" v-if="tooltip.dataLinkShow">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :key="index" @click="linkClick(item)">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :title='item.title' :key="index" @click="linkClick(item)">
<i class="nz-icon nz-icon-link"></i>
<span>{{item.title}}</span>
</div>
@@ -212,7 +212,7 @@ export default {
formatterFunc (params, ticket, callback) {
const self = this
return `
<div class="chart-canvas-tooltip-title tooltip-title">${params.data.alias}</div>
<div class="chart-canvas-tooltip-title tooltip-title" title="${params.data.alias}">${params.data.alias}</div>
<div class="chart-canvas-tooltip-content">
<div>value</div>
<div>

View File

@@ -7,7 +7,7 @@
<svg :id="`bubble-svg-${chartId}`" width="100%" height="100%"></svg>
</div>
<div :id="`chart-canvas-tooltip-${chartId}`" class="chart-canvas-tooltip no-style-class" :class="{'chart-dataLink-tooltip':tooltip.dataLinkShow}" :style="{left:tooltip.x+'px',top:tooltip.y+'px'}" v-if="tooltip.show" v-clickoutside="clickout">
<div class="chart-canvas-tooltip-title tooltip-title">
<div class="chart-canvas-tooltip-title tooltip-title" :title="tooltip.title">
{{tooltip.title}}
</div>
<div class="chart-canvas-tooltip-content">
@@ -21,7 +21,7 @@
</div>
<!-- dataLink -->
<div class="chart-dataLink-list" v-if="tooltip.dataLinkShow">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :key="index" @click="linkClick(item)">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :title='item.title' :key="index" @click="linkClick(item)">
<i class="nz-icon nz-icon-link"></i>
<span>{{item.title}}</span>
</div>

View File

@@ -16,7 +16,7 @@
></chart-legend>
<div :id="`chart-canvas-tooltip-${chartId}`" class="chart-canvas-tooltip no-style-class" :class="{'chart-dataLink-tooltip':tooltip.dataLinkShow}" :style="{left:tooltip.x+'px',top:tooltip.y+'px'}" v-if="tooltip.show" v-clickoutside="clickout">
<div class="chart-canvas-tooltip-title tooltip-title">
<div class="chart-canvas-tooltip-title tooltip-title" :title="tooltip.title">
{{tooltip.title}}
</div>
<div class="chart-canvas-tooltip-content">
@@ -34,7 +34,7 @@
</div>
<!-- dataLink -->
<div class="chart-dataLink-list" v-if="tooltip.dataLinkShow">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :key="index" @click="linkClick(item)">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :title='item.title' :key="index" @click="linkClick(item)">
<i class="nz-icon nz-icon-link"></i>
<span>{{item.title}}</span>
</div>

View File

@@ -8,7 +8,7 @@
</div>
<div :id="`chart-canvas-tooltip-${chartId}`" class="chart-canvas-tooltip no-style-class" :class="{'chart-dataLink-tooltip':tooltip.dataLinkShow}" :style="{left:tooltip.x+'px',top:tooltip.y+'px'}" v-if="tooltip.show" v-clickoutside="clickout">
<div class="chart-canvas-tooltip-title tooltip-title">
<div class="chart-canvas-tooltip-title tooltip-title" :title="tooltip.title">
{{tooltip.title}}
</div>
<div class="chart-canvas-tooltip-content">
@@ -22,7 +22,7 @@
</div>
<!-- dataLink -->
<div class="chart-dataLink-list" v-if="tooltip.dataLinkShow">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :key="index" @click="linkClick(item)">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :title='item.title' :key="index" @click="linkClick(item)">
<i class="nz-icon nz-icon-link"></i>
<span>{{item.title}}</span>
</div>

View File

@@ -13,12 +13,13 @@
<div
v-if="item.height > 48 && chartInfo.param &&( chartInfo.param.text === 'legend' || chartInfo.param.text === 'all' )"
class="chart-gauge-legend"
:title="item.alias"
>
{{item.alias}}
</div>
</div>
<div :id="`chart-canvas-tooltip-${chartId}`" class="chart-canvas-tooltip no-style-class" :class="{'chart-dataLink-tooltip':tooltip.dataLinkShow}" :style="{left:tooltip.x+'px',top:tooltip.y+'px'}" v-if="tooltip.show" v-clickoutside="clickout">
<div class="chart-canvas-tooltip-title tooltip-title">{{tooltip.title}}</div>
<div class="chart-canvas-tooltip-title tooltip-title" :title="tooltip.title">{{tooltip.title}}</div>
<div class="chart-canvas-tooltip-content">
<div>value</div>
<div>
@@ -30,7 +31,7 @@
</div>
<!-- dataLink -->
<div class="chart-dataLink-list" v-if="tooltip.dataLinkShow">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :key="index" @click="linkClick(item)">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :title='item.title' :key="index" @click="linkClick(item)">
<i class="nz-icon nz-icon-link"></i>
<span>{{item.title}}</span>
</div>
@@ -264,7 +265,7 @@ export default {
formatterFunc: function (params, ticket, callback) {
const self = this
return `
<div class="chart-canvas-tooltip-title tooltip-title">${params.data.alias}</div>
<div class="chart-canvas-tooltip-title tooltip-title" title="${params.data.alias}">${params.data.alias}</div>
<div class="chart-canvas-tooltip-content">
<div>value</div>
<div>

View File

@@ -2,7 +2,7 @@
<div :ref="`chart-canvas-${chartId}`" style="height: 100%;width: 100%;position: relative;">
<div :id="`chart-canvas-${chartId}`" class="chart__canvas chart-svg"></div>
<div :id="`chart-canvas-tooltip-${chartId}`" class="chart-canvas-tooltip no-style-class" :class="{'chart-dataLink-tooltip':tooltip.dataLinkShow}" :style="{left:tooltip.x+'px',top:tooltip.y+'px'}" v-if="tooltip.show" v-clickoutside="clickout">
<div class="chart-canvas-tooltip-title tooltip-title">
<div class="chart-canvas-tooltip-title tooltip-title" :title="tooltip.title">
{{tooltip.title}}
</div>
<div class="chart-canvas-tooltip-content">
@@ -16,7 +16,7 @@
</div>
<!-- dataLink -->
<div class="chart-dataLink-list" v-if="tooltip.dataLinkShow">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :key="index" @click="linkClick(item)">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :title='item.title' :key="index" @click="linkClick(item)">
<i class="nz-icon nz-icon-link"></i>
<span>{{item.title}}</span>
</div>

View File

@@ -8,7 +8,7 @@
</div>
<div :id="`chart-canvas-tooltip-${chartId}`" class="chart-canvas-tooltip no-style-class" :class="{'chart-dataLink-tooltip':tooltip.dataLinkShow}" :style="{left:tooltip.x+'px',top:tooltip.y+'px'}" v-if="tooltip.show" v-clickoutside="clickout">
<div class="chart-canvas-tooltip-title tooltip-title">
<div class="chart-canvas-tooltip-title tooltip-title" :title="tooltip.title">
{{tooltip.title}}
</div>
<div class="chart-canvas-tooltip-content">
@@ -26,7 +26,7 @@
</div>
<!-- dataLink -->
<div class="chart-dataLink-list" v-if="tooltip.dataLinkShow">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :key="index" @click="linkClick(item)">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :title='item.title' :key="index" @click="linkClick(item)">
<i class="nz-icon nz-icon-link"></i>
<span>{{item.title}}</span>
</div>

View File

@@ -16,7 +16,7 @@
></chart-legend>
<div :id="`chart-canvas-tooltip-${chartId}`" class="chart-canvas-tooltip no-style-class" :class="{'chart-dataLink-tooltip':tooltip.dataLinkShow}" :style="{left:tooltip.x+'px',top:tooltip.y+'px'}" v-if="tooltip.show" v-clickoutside="clickout">
<div class="chart-canvas-tooltip-title tooltip-title">
<div class="chart-canvas-tooltip-title tooltip-title" :title="tooltip.title">
{{tooltip.title}}
</div>
<div class="chart-canvas-tooltip-content">
@@ -34,7 +34,7 @@
</div>
<!-- dataLink -->
<div class="chart-dataLink-list" v-if="tooltip.dataLinkShow">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :key="index" @click="linkClick(item)">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :title='item.title' :key="index" @click="linkClick(item)">
<i class="nz-icon nz-icon-link"></i>
<span>{{item.title}}</span>
</div>
@@ -308,10 +308,10 @@ export default {
}
if (str && valueStr) {
return `<div class="foreign-label-wrap">
<p class="rose-label" style="color: ${data.mapping && data.mapping.color && data.mapping.color.text};">
<p class="rose-label" title="${str}" style="color: ${data.mapping && data.mapping.color && data.mapping.color.text};">
<span>${str}</span>
</p>
<p class="rose-label" style="color: ${data.mapping && data.mapping.color && data.mapping.color.text};">
<p class="rose-label" title="${valueStr}" style="color: ${data.mapping && data.mapping.color && data.mapping.color.text};">
<i class="${data.mapping && data.mapping.icon}" style="color: ${data.mapping && data.mapping.color && data.mapping.color.icon};font-size:1em;"></i>
<span>${valueStr}</span>
</p>
@@ -319,7 +319,7 @@ export default {
`
} else if (str) {
return `<div class="foreign-label-wrap">
<p class="rose-label" style="color: ${data.mapping && data.mapping.color && data.mapping.color.text};">
<p class="rose-label" title="${str}" style="color: ${data.mapping && data.mapping.color && data.mapping.color.text};">
<i class="${data.mapping && data.mapping.icon}" style="color: ${data.mapping && data.mapping.color && data.mapping.color.icon};font-size:1em;"></i>
<span>${str}</span>
</p>
@@ -327,7 +327,7 @@ export default {
`
} else if (valueStr) {
return `<div class="foreign-label-wrap">
<p class="rose-label" style="color: ${data.mapping && data.mapping.color && data.mapping.color.text};">
<p class="rose-label" title="${valueStr}" style="color: ${data.mapping && data.mapping.color && data.mapping.color.text};">
<i class="${data.mapping && data.mapping.icon}" style="color: ${data.mapping && data.mapping.color && data.mapping.color.icon};font-size:1em;"></i>
<span>${valueStr}</span>
</p>

View File

@@ -9,7 +9,7 @@
</div>
<div :id="`chart-canvas-tooltip-${chartId}`" class="chart-canvas-tooltip no-style-class" :class="{'chart-dataLink-tooltip':tooltip.dataLinkShow}" :style="{left:tooltip.x+'px',top:tooltip.y+'px'}" v-if="tooltip.show" v-clickoutside="clickout">
<div class="chart-canvas-tooltip-title tooltip-title">
<div class="chart-canvas-tooltip-title tooltip-title" :title="tooltip.title">
{{tooltip.title}}
</div>
<div class="chart-canvas-tooltip-content">
@@ -23,7 +23,7 @@
</div>
<!-- dataLink -->
<div class="chart-dataLink-list" v-if="tooltip.dataLinkShow">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :key="index" @click="linkClick(item)">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :title='item.title' :key="index" @click="linkClick(item)">
<i class="nz-icon nz-icon-link"></i>
<span>{{item.title}}</span>
</div>

View File

@@ -78,7 +78,7 @@
<div class="sparkline" :id="`chart-canvas-${chartId}-${index}`" v-if="chartInfo.param.sparklineMode && chartInfo.param.sparklineMode !== 'none'"></div>
</div>
<div :id="`chart-canvas-tooltip-${chartId}`" class="chart-canvas-tooltip no-style-class" :class="{'chart-dataLink-tooltip':tooltip.dataLinkShow}" :style="{left:tooltip.x+'px',top:tooltip.y+'px'}" v-if="tooltip.show" v-clickoutside="clickout">
<div class="chart-canvas-tooltip-title tooltip-title">{{tooltip.title}}</div>
<div class="chart-canvas-tooltip-title tooltip-title" :title="tooltip.title">{{tooltip.title}}</div>
<div class="chart-canvas-tooltip-content">
<div>value</div>
<div>
@@ -90,7 +90,7 @@
</div>
<!-- dataLink -->
<div class="chart-dataLink-list" v-if="tooltip.dataLinkShow">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :key="index" @click="linkClick(item)">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :title='item.title' :key="index" @click="linkClick(item)">
<i class="nz-icon nz-icon-link"></i>
<span>{{item.title}}</span>
</div>

View File

@@ -32,6 +32,7 @@
clear: 'both',
}"
class="value-mapping-table"
:title="showValueMapping(scope.row,col.title, col)"
:class="{'chart-cursor-pointer':dataLink.length}"
@click="chartClick($event,col,scope.row)"
@mousedown="chartMousedown($event)"
@@ -41,7 +42,7 @@
</template>
{{showValueMapping(scope.row,col.title, col)}}
</div>
<div v-else class="value-mapping-table" :class="{'chart-cursor-pointer':dataLink.length}" @click="chartClick($event,col,scope.row)" @mousedown="chartMousedown($event)">
<div v-else class="value-mapping-table" :title="scope.row.display[col.title + 'display'].display" :class="{'chart-cursor-pointer':dataLink.length}" @click="chartClick($event,col,scope.row)" @mousedown="chartMousedown($event)">
{{scope.row.display[col.title + 'display'].display}}
</div>
</template>
@@ -60,14 +61,14 @@
</el-pagination>
</div>
<div :id="`chart-canvas-tooltip-${chartId}`" class="chart-canvas-tooltip no-style-class" :class="{'chart-dataLink-tooltip':tooltip.dataLinkShow}" :style="{left:tooltip.x+'px',top:tooltip.y+'px'}" v-if="tooltip.show" v-clickoutside="clickout">
<div class="chart-canvas-tooltip-title tooltip-title">{{tooltip.title}}</div>
<div class="chart-canvas-tooltip-title tooltip-title" :title="tooltip.title">{{tooltip.title}}</div>
<div class="chart-canvas-tooltip-content">
<div>value</div>
<div>{{tooltip.value}}</div>
</div>
<!-- dataLink -->
<div class="chart-dataLink-list" v-if="tooltip.dataLinkShow">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :key="index" @click="linkClick(item)">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :title='item.title' :key="index" @click="linkClick(item)">
<i class="nz-icon nz-icon-link"></i>
<span>{{item.title}}</span>
</div>

View File

@@ -25,7 +25,7 @@
<div v-html="tooltip.tooltipHtml"></div>
<!-- dataLink -->
<div class="chart-dataLink-list" v-if="tooltip.dataLinkShow">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :key="index" @click="linkClick(item)">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :title='item.title' :key="index" @click="linkClick(item)">
<i class="nz-icon nz-icon-link"></i>
<span>{{item.title}}</span>
</div>
@@ -507,7 +507,7 @@ export default {
}
str += `
<div class="tooltip__row">
<div class="tooltip__row" title="${seriesName}">
<div class="row__label">
<span class="${className}" style="background-color: ${color};color: ${color}"></span>
<span>${seriesName}</span>
@@ -545,7 +545,7 @@ export default {
str += `
<div class="tooltip__row">
<div class="row__label">
<div class="row__label" title="${self.$t('dashboard.dashboard.chartTotal')}">
<span class="${className}" style="background-color: ${color};color: ${color}"></span>
<span>${self.$t('dashboard.dashboard.chartTotal')}</span>
</div>
@@ -684,7 +684,7 @@ export default {
<div class="nz-chart__tooltip">
<div class="tooltip-title" style="margin-bottom: 5px">${bus.timeFormate(tData)}</div>
<div class="tooltip__row">
<div class="row__label">
<div class="row__label" :title=">${seriesName}">
<span class="${className}" style="background-color: ${color};color: ${color}"></span>
<span>${seriesName}</span>
</div>

View File

@@ -16,7 +16,7 @@
></chart-legend>
<div :id="`chart-canvas-tooltip-${chartId}`" class="chart-canvas-tooltip no-style-class" :class="{'chart-dataLink-tooltip':tooltip.dataLinkShow}" :style="{left:tooltip.x+'px',top:tooltip.y+'px'}" v-if="tooltip.show" v-clickoutside="clickout">
<div class="chart-canvas-tooltip-title tooltip-title">{{tooltip.title}}</div>
<div class="chart-canvas-tooltip-title tooltip-title" :title="tooltip.title">{{tooltip.title}}</div>
<div class="chart-canvas-tooltip-content">
<div>value</div>
<div>
@@ -28,7 +28,7 @@
</div>
<!-- dataLink -->
<div class="chart-dataLink-list" v-if="tooltip.dataLinkShow">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :key="index" @click="linkClick(item)">
<div class="chart-dataLink-item" v-for="(item,index) in dataLink" :title='item.title' :key="index" @click="linkClick(item)">
<i class="nz-icon nz-icon-link"></i>
<span>{{item.title}}</span>
</div>
@@ -182,7 +182,7 @@ export default {
return ''
}
return `
<div class="chart-canvas-tooltip-title tooltip-title">${params.data.alias}</div>
<div class="chart-canvas-tooltip-title tooltip-title" titlr="${params.data.alias}">${params.data.alias}</div>
<div class="chart-canvas-tooltip-content">
<div>value</div>
<div>

View File

@@ -6,7 +6,7 @@
<div class="legend--table-row table-header">
<div class="legend--table-cell"></div>
<div v-for="statistics in chartInfo.param.legend.values" :key="statistics" class="legend--table-cell">
<span v-if="statisticsList.find(key=>key.value === statistics)">{{$t(statisticsList.find(key=>key.value === statistics).label)}}</span>
<span v-if="statisticsList.find(key=>key.value === statistics)" :title="$t(statisticsList.find(key=>key.value === statistics).label)">{{$t(statisticsList.find(key=>key.value === statistics).label)}}</span>
<span v-else>--</span>
</div>
</div>
@@ -22,7 +22,7 @@
<div :title="item.alias ? item.alias : item.name" class="legend--table-cell">
<i v-if="isTimeSeries&&series[index].yAxisIndex==0" :style="{color: item.color}" class="yAxis-icon nz-icon nz-icon-zuozongzhou"></i>
<span v-else :style="{background: item.color}" class="legend-shape"></span>
<span>{{item.alias ? item.alias : item.name}}</span>
<span :title="item.alias ? item.alias : item.name">{{item.alias ? item.alias : item.name}}</span>
</div>
<div v-for="(statistics, index) in item.statistics" :key="index" :class="{'legend-item--inactive': isGrey[index]}" class="legend--table-cell">{{(keepTwoDecimalFull(statistics.value))}}</div>
</div>
@@ -38,7 +38,7 @@
<div :title="item.alias ? item.alias : item.name" class="legend--table-cell">
<i v-if="isTimeSeries&&series[index].yAxisIndex==1" :style="{color: item.color}" class="yAxis-icon nz-icon nz-icon-youzongzhou"></i>
<span v-else :style="{background: item.color}" class="legend-shape"></span>
<span>{{item.alias ? item.alias : item.name}}</span>
<span :title="item.alias ? item.alias : item.name">{{item.alias ? item.alias : item.name}}</span>
</div>
<div v-for="(statistics, index) in item.statistics" :key="index" :class="{'legend-item--inactive': isGrey[index]}" class="legend--table-cell">{{(keepTwoDecimalFull(statistics.value))}}</div>
</div>

View File

@@ -35,7 +35,7 @@
<el-dropdown-menu style="display: none"></el-dropdown-menu>
<span class="el-dropdown-link chart-title">
<!-- <span class="chart-title-text">{{chartData.name}}</span>-->
<span class="chart-title-text" v-on:mouseover="changeActive()" v-on:mouseout="removeActive()">{{chartData.name}}</span>
<span class="chart-title-text" :title="chartData.name" v-on:mouseover="changeActive()" v-on:mouseout="removeActive()">{{chartData.name}}</span>
<transition name="el-fade-in-linear">
<span v-show="chartDataList" class="chart-title-pit" >{{chartData.name}}</span>
</transition>
@@ -68,7 +68,7 @@
</div>
<div v-if="from==='topology'" :class="{'drag-disabled': this.filter.from == $CONSTANTS.fromRoute.alertRule}" :id="'chartTitle'+chartIndex" class="topology-chart-title">
<!-- <span class="topology-chart-title-text">{{chartData.name}}</span>-->
<span class="topology-chart-title-text" v-on:mouseover="changeActive()" v-on:mouseout="removeActive()">{{chartData.name}}</span>
<span class="topology-chart-title-text" :title="chartData.name" v-on:mouseover="changeActive()" v-on:mouseout="removeActive()">{{chartData.name}}</span>
<transition name="el-fade-in-linear">
<span v-show="chartDataList" class="chart-title-pit" >{{chartData.name}}</span>
</transition>

View File

@@ -41,7 +41,7 @@
</el-popover>
</span>
<div class="chart-header__title" v-if="!isGroup" :title="nameFormate">{{nameFormate}}</div>
<div class="chart-header__title groupTitle" v-else >
<div class="chart-header__title groupTitle" :title="chartData ? chartData.length : 0" v-else >
<span @click="groupShow" style="cursor:pointer"> <i class="nz-icon" :class="chartInfo.param.collapse ? 'nz-icon-arrow-right': 'nz-icon-arrow-down'"></i></span>
{{nameFormate}}
<span v-show="chartInfo.param.collapse" class="collapse-content">({{chartData ? chartData.length : 0}} charts)</span>

View File

@@ -32,7 +32,7 @@
</div>
<div style="padding: 0 20px;height: calc(100% - 50px)" v-my-loading="fileDirectoryLoading">
<div class="directory-content-header">
<div class="text-ellipsis file-name">
<div class="text-ellipsis file-name" :title="$t('overall.name')">
<div class="file-arrow-header" style="cursor: pointer" @click.stop="orderBy('nameOrderType','' , 'name')">
<div>
{{$t('overall.name')}}
@@ -47,7 +47,7 @@
</div>
</div>
</div>
<div class="text-ellipsis file-size">
<div class="text-ellipsis file-size" :title="$t('backup.size')">
<div class="file-arrow-header" style="cursor: pointer" @click.stop="orderBy('sizeOrderType','' , 'size')">
<div>
{{$t('backup.size')}}
@@ -62,7 +62,7 @@
</div>
</div>
</div>
<div class="text-ellipsis file-date">
<div class="text-ellipsis file-date" :title="$t('issue.createTime')">
<div class="file-arrow-header" style="cursor: pointer" @click.stop="orderBy('dateOrderType','' , 'cts')">
<div>
{{$t('issue.createTime')}}
@@ -77,7 +77,7 @@
</div>
</div>
</div>
<div class="text-ellipsis file-opt">
<div class="text-ellipsis file-opt" :title="$t('overall.option')">
{{$t('overall.option')}}
</div>
</div>
@@ -108,10 +108,10 @@
</svg>
{{item.name}} <span v-if="item.isLink">-> {{item.linkName}}</span>
</div>
<div class="text-ellipsis file-size">
<div class="text-ellipsis file-size" :title="bytes(item.size, 0, 0)">
<span v-if="!item.isDir">{{bytes(item.size, 0, 0)}}</span>
</div>
<div class="text-ellipsis file-date">
<div class="text-ellipsis file-date" :title="momentTz(item.cts * 1000)">
<span>{{momentTz(item.cts * 1000)}}</span>
</div>
<div class="text-ellipsis file-opt">

View File

@@ -10,7 +10,7 @@
<div v-for="item in fileList" :key="item.myId" class="file-state-panel-item">
<div class="item-icon"> <i class="nz-icon" :class="{'nz-icon-upload':item.type === 'upload','nz-icon-download1':item.type === 'download'}"/></div>
<div class="item-progress">
<div class="item-progress-top text-ellipsis">{{item.name}}</div>
<div class="item-progress-top text-ellipsis" :title="item.name">{{item.name}}</div>
<div class="item-progress-middle">
<el-progress :show-text="false" :percentage="item.done" :color="customColorMethod(item.done, item)"></el-progress>
</div>

View File

@@ -12,8 +12,8 @@
<div class="personal-avatar"><span>{{name ? name.substr(0, 1) : ''}}</span>&nbsp;<i class="nz-icon nz-icon-arrow-down"></i></div>
<el-dropdown-menu slot="dropdown" class="right-public-box-select-top right-public-box-dropdown-top" style="width: 142px; line-height: 36px;">
<div class="personal-dropdown">
<div class="personal-dropdown__username">{{name}}</div>
<div class="personal-dropdown__name">@{{name}}</div>
<div class="personal-dropdown__username" :title="name">{{name}}</div>
<div class="personal-dropdown__name" :title="name">@{{name}}</div>
</div>
<el-dropdown-item>
<div id="header-to-personalization" @click="showPersonalization"><i class="nz-icon nz-icon-personalization"></i>{{$t('terminal.personal')}}</div>
@@ -43,7 +43,7 @@
<ul class="terminal-history-list">
<li class="terminal-history-item" v-for="(item,index) in historyArr" :key="index" @click="historyClick(item)">
<span class="terminal-history-num">{{index+1}}</span>
<span class="terminal-history-text">{{item}}</span>
<span class="terminal-history-text" :title="item">{{item}}</span>
</li>
</ul>
</div>

View File

@@ -51,7 +51,7 @@
<div class="alert-label-box name-labe">
<div class="document-copy-block">
<div class="alert-label-title">{{$t('overall.name')}}</div>
<div class="alert-label-value document-copy-text">{{alertLabelData && alertLabelData.name ? alertLabelData.name : '--'}}</div>
<div class="alert-label-value document-copy-text" :title="alertLabelData && alertLabelData.name ? alertLabelData.name : '--'">{{alertLabelData && alertLabelData.name ? alertLabelData.name : '--'}}</div>
<i v-if="alertLabelData && alertLabelData.name" class="nz-icon nz-icon-override" style="visibility: hidden" @click.stop="onCopy(alertLabelData.name)" :title="$t('overall.copyText')"></i>
</div>
</div>
@@ -63,7 +63,9 @@
</div> -->
<div class="alert-label-box document-copy-block">
<div class="alert-label-title">{{ $t("asset.manageIp") }}</div>
<div class="alert-label-value document-copy-text">
<div class="alert-label-value document-copy-text" :title="alertLabelData && alertLabelData.manageIp
? alertLabelData.manageIp
: '--'">
{{
alertLabelData && alertLabelData.manageIp
? alertLabelData.manageIp
@@ -215,7 +217,7 @@
<div class="alert-label-box name-labe">
<div class="document-copy-block">
<div class="alert-label-title">{{$t('overall.name')}}</div>
<div class="alert-label-value document-copy-text">
<div class="alert-label-value document-copy-text" :title="alertLabelData && alertLabelData.name ? alertLabelData.name : '--'">
{{ alertLabelData && alertLabelData.name ? alertLabelData.name : "--" }}
</div>
<i v-if="alertLabelData && alertLabelData.name" class="nz-icon nz-icon-override" style="visibility: hidden" @click.stop="onCopy(alertLabelData.name)" :title="$t('overall.copyText')"></i>
@@ -311,7 +313,7 @@
<div class="alert-label-box name-labe">
<div class="document-copy-block">
<div class="alert-label-title">{{$t('overall.name')}}</div>
<div class="alert-label-value document-copy-text">
<div class="alert-label-value document-copy-text" :title="alertLabelData && alertLabelData.name ? alertLabelData.name : '--'">
{{ alertLabelData && alertLabelData.name ? alertLabelData.name : "--" }}
</div>
<i v-if="alertLabelData && alertLabelData.name" class="nz-icon nz-icon-override" style="visibility: hidden" @click.stop="onCopy(alertLabelData.name)" :title="$t('overall.copyText')"></i>
@@ -408,7 +410,7 @@
<div class="alert-label-box name-labe">
<div class="document-copy-block">
<div class="alert-label-title">{{$t('overall.name')}}</div>
<div class="alert-label-value document-copy-text">
<div class="alert-label-value document-copy-text" :title=" alertLabelData && alertLabelData.name ? alertLabelData.name : '--'">
{{ alertLabelData && alertLabelData.name ? alertLabelData.name : "--" }}
</div>
<i v-if="alertLabelData && alertLabelData.name" class="nz-icon nz-icon-override" style="visibility: hidden" @click.stop="onCopy(alertLabelData.name)" :title="$t('overall.copyText')"></i>
@@ -538,7 +540,7 @@
<div class="alert-label-box name-labe">
<div class="document-copy-block">
<div class="alert-label-title">{{$t('overall.name')}}</div>
<div class="alert-label-value document-copy-text">
<div class="alert-label-value document-copy-text" :title="alertLabelData && alertLabelData.name ? alertLabelData.name : '--'">
{{ alertLabelData && alertLabelData.name ? alertLabelData.name : "--" }}
</div>
<i v-if="alertLabelData && alertLabelData.name" class="nz-icon nz-icon-override" style="visibility: hidden" @click.stop="onCopy(alertLabelData.name)" :title="$t('overall.copyText')"></i>

View File

@@ -42,7 +42,9 @@
</div> -->
<div class="alert-label-box document-copy-block">
<div class="alert-label-title">{{ $t("asset.manageIp") }}</div>
<div class="alert-label-value document-copy-text">
<div class="alert-label-value document-copy-text" :title="alertLabelData && alertLabelData.manageIp
? alertLabelData.manageIp
: '--'">
{{
alertLabelData && alertLabelData.manageIp
? alertLabelData.manageIp
@@ -194,7 +196,7 @@
<div class="alert-label-box name-labe">
<div class="document-copy-block">
<div class="alert-label-title">{{$t('overall.name')}}</div>
<div class="alert-label-value document-copy-text">
<div class="alert-label-value document-copy-text" :title="alertLabelData && alertLabelData.name ? alertLabelData.name : '--'">
{{ alertLabelData && alertLabelData.name ? alertLabelData.name : "--" }}
</div>
<i v-if="alertLabelData && alertLabelData.name" class="nz-icon nz-icon-override" style="visibility: hidden" @click.stop="onCopy(alertLabelData.name)" :title="$t('overall.copyText')"></i>
@@ -290,7 +292,7 @@
<div class="alert-label-box name-labe">
<div class="document-copy-block">
<div class="alert-label-title">{{$t('overall.name')}}</div>
<div class="alert-label-value document-copy-text">
<div class="alert-label-value document-copy-text" :title="alertLabelData && alertLabelData.name ? alertLabelData.name : '--'">
{{ alertLabelData && alertLabelData.name ? alertLabelData.name : "--" }}
</div>
<i v-if="alertLabelData && alertLabelData.name" class="nz-icon nz-icon-override" style="visibility: hidden" @click.stop="onCopy(alertLabelData.name)" :title="$t('overall.copyText')"></i>
@@ -388,7 +390,7 @@
<div class="alert-label-box name-labe">
<div class="document-copy-block">
<div class="alert-label-title">{{$t('overall.name')}}</div>
<div class="alert-label-value document-copy-text">
<div class="alert-label-value document-copy-text" :title="alertLabelData && alertLabelData.name ? alertLabelData.name : '--'">
{{ alertLabelData && alertLabelData.name ? alertLabelData.name : "--" }}
</div>
<i v-if="alertLabelData && alertLabelData.name" class="nz-icon nz-icon-override" style="visibility: hidden" @click.stop="onCopy(alertLabelData.name)" :title="$t('overall.copyText')"></i>
@@ -523,7 +525,7 @@
<div class="alert-label-box name-labe">
<div class="document-copy-block">
<div class="alert-label-title">{{$t('overall.name')}}</div>
<div class="alert-label-value document-copy-text">
<div class="alert-label-value document-copy-text" :title="alertLabelData && alertLabelData.name ? alertLabelData.name : '--'">
{{ alertLabelData && alertLabelData.name ? alertLabelData.name : "--" }}
</div>
<i v-if="alertLabelData && alertLabelData.name" class="nz-icon nz-icon-override" style="visibility: hidden" @click.stop="onCopy(alertLabelData.name)" :title="$t('overall.copyText')"></i>

View File

@@ -18,7 +18,7 @@
<div class="alert-label-box name-labe">
<div class="document-copy-block">
<div class="alert-label-title">{{$t('overall.name')}}</div>
<div class="alert-label-value document-copy-text">{{alertRuleData.name ? alertRuleData.name : '--'}}</div>
<div class="alert-label-value document-copy-text" :title="alertRuleData.name ? alertRuleData.name : '--'">{{alertRuleData.name ? alertRuleData.name : '--'}}</div>
<i v-if="alertRuleData && alertRuleData.name" class="nz-icon nz-icon-override" style="visibility: hidden" @click="onCopy(alertRuleData.name)" :title="$t('overall.copyText')"></i>
</div>

View File

@@ -16,7 +16,7 @@
<div class="alert-label-box name-labe">
<div class="document-copy-block" style="display:flex">
<div class="alert-label-title">{{$t('overall.name')}}</div>
<div class="alert-label-value document-copy-text">{{alertRuleData.name ? alertRuleData.name : '--'}}</div>
<div class="alert-label-value document-copy-text" :title="alertRuleData.name ? alertRuleData.name : '--'">{{alertRuleData.name ? alertRuleData.name : '--'}}</div>
<i v-if="alertRuleData && alertRuleData.name" class="nz-icon nz-icon-override" style="visibility: hidden" @click="onCopy(alertRuleData.name)" :title="$t('overall.copyText')"></i>
</div>
</div>

View File

@@ -185,6 +185,7 @@ export default {
return {
stateOptions: alertMessageConstant.states,
url: 'alert/message',
urlNew: 'alert/message/query',
alertSilenceUrl: '',
tableId: 'alertMessageModule', // 需要分页的table的id用于记录每页数量
state: '1',
@@ -312,8 +313,60 @@ export default {
if (this.from === fromRoute.alertSilence) {
this.searchMsg = this.searchMsgSilence
}
this.renderDefaultParams()
},
methods: {
renderDefaultParams () {
const q = JSON.parse(this.$route.query.bottomSelectArr)
this.state = q.state
this.searchTimeHeader[0] = q.startAt ? this.momentTz(q.startAt) : ''
this.searchTimeHeader[1] = q.endAt ? this.momentTz(q.endAt) : ''
this.searchTimeHeader[2] = q.timeType
switch (this.searchTimeHeader[2]) {
case '5m' :
this.defaultPick = 1
break
case '15m' :
this.defaultPick = 2
break
case '30m' :
this.defaultPick = 3
break
case '1h' :
this.defaultPick = 4
break
case '3h' :
this.defaultPick = 5
break
case '6h' :
this.defaultPick = 6
break
case '12h' :
this.defaultPick = 7
break
case '1d' :
this.defaultPick = 8
break
case '24h' :
this.defaultPick = 8
break
case '2d' :
this.defaultPick = 9
break
case '7d' :
this.defaultPick = 10
break
case '30d' :
this.defaultPick = 11
break
case 'all' :
this.defaultPick = 12
break
default:
this.defaultPick = 0
}
// this.defaultPick = 11
},
labelsSort (obj) {
const buildIn = ['asset', 'endpoint', 'module', 'cpu', 'project', 'datacenter', 'parent_asset', 'user']
const labels = JSON.parse(JSON.stringify(obj))
@@ -349,7 +402,7 @@ export default {
// } else {
// url = this.url
// }
url = this.url
url = this.urlNew
this.$delete(url + '?ids=' + row.id + '&state=' + row.state).then(response => {
if (response.code === 200) {
self.delFlag = true
@@ -395,15 +448,20 @@ export default {
} else {
delete this.searchLabel.orderBy
}
if (!this.searchLabel.body) {
this.searchLabel.body = {
q: ''
}
}
this.$set(this.searchLabel, 'pageNo', this.pageObj.pageNo)
this.$set(this.searchLabel, 'pageSize', this.pageObj.pageSize)
this.$set(this.searchLabel, 'state', this.state)
this.$set(this.searchLabel.body, 'state', this.state)
if (this.searchTimeHeader && this.searchTimeHeader.length > 1 && this.searchTimeHeader[0] && this.searchTimeHeader[1]) {
this.$set(this.searchLabel, 'startAt', bus.timeFormate(this.timezoneToUtcTime(bus.formateTimeToTime(this.searchTimeHeader[0])), 'YYYY-MM-DD HH:mm:ss'))
this.$set(this.searchLabel, 'endAt', bus.timeFormate(this.timezoneToUtcTime(bus.formateTimeToTime(this.searchTimeHeader[1])), 'YYYY-MM-DD HH:mm:ss'))
this.$set(this.searchLabel.body, 'startAt', [bus.timeFormate(this.timezoneToUtcTime(bus.formateTimeToTime(this.searchTimeHeader[0])), 'YYYY-MM-DD HH:mm:ss')])
this.$set(this.searchLabel.body, 'endAt', [bus.timeFormate(this.timezoneToUtcTime(bus.formateTimeToTime(this.searchTimeHeader[1])), 'YYYY-MM-DD HH:mm:ss')])
} else {
delete this.searchLabel.startAt
delete this.searchLabel.endAt
delete this.searchLabel.body.startAt
delete this.searchLabel.body.endAt
}
this.tools.loading = true
// if (state) {
@@ -411,24 +469,41 @@ export default {
// delete this.searchLabel.endAt
// }
if (this.from === fromRoute.module) {
this.searchLabel.moduleIds = this.obj.id
this.searchLabel.body.moduleId = [this.obj.id]
} else if (this.from === fromRoute.endpoint) {
this.searchLabel.endpointIds = this.obj.id
this.searchLabel.body.endpointId = [this.obj.id]
} else if (this.from === fromRoute.asset) {
this.searchLabel.assetIds = this.obj.id
this.searchLabel.body.assetId = [this.obj.id]
} else if (this.from === fromRoute.alertRule) {
this.searchLabel.ruleIds = this.obj.id
this.searchLabel.body.ruleId = [this.obj.id]
} else if (this.from === fromRoute.dc) {
this.searchLabel.dcIds = this.obj.id
this.searchLabel.body.dcId = [this.obj.id]
}
let url = ''
if (this.from === fromRoute.alertSilence) {
this.alertSilenceUrl = `/alert/silence/${this.obj.id}/rel`
url = this.alertSilenceUrl
// this.alertSilenceUrl = `/alert/silence/${this.obj.id}/rel`
this.$set(this.searchLabel.body, 'state', this.state)
this.$set(this.searchLabel.body, 'silenceId', [this.obj.id])
url = this.urlNew
} else {
url = this.url
url = this.urlNew
}
this.$get(url, this.searchLabel).then(response => {
const param = {
...this.searchLabel
}
// const path = this.fromRoute.alertMessage
const routePathParams = this.$lodash.cloneDeep(param)
delete routePathParams.statistics
routePathParams.body.startAt = this.searchTimeHeader[0] ? this.momentStrToTimestamp(this.searchTimeHeader[0]) : ''
routePathParams.body.endAt = this.searchTimeHeader[1] ? this.momentStrToTimestamp(this.searchTimeHeader[1]) : ''
routePathParams.body.timeType = this.searchTime[2]
routePathParams.body = JSON.stringify(routePathParams.body)
// this.updatePath(routePathParams, path)
const queryParams = {
...this.searchLabel,
body: encodeURIComponent(JSON.stringify(this.searchLabel.body))
}
this.$get(url, queryParams).then(response => {
this.tools.loading = false
if (response.code === 200) {
this.nowTime = this.utcTimeToTimezoneStr(response.time)
@@ -529,7 +604,7 @@ export default {
this.alertSilenceUrl = `/alert/silence/${this.obj.id}/rel`
url = this.alertSilenceUrl
} else {
url = this.url
url = this.urlNew
}
this.$put(url, this.deleteBox).then(res => {
if (res.code === 200) {
@@ -657,17 +732,10 @@ export default {
if (this.searchLabel.orderBy) {
orderBy = this.searchLabel.orderBy
}
this.searchLabel = {}
this.pageObj.pageNo = 1
for (const item in searchObj) {
if (searchObj[item]) {
if (item == 'alertMessageState') {
this.$set(this.searchLabel, 'state', searchObj[item])
} else {
this.$set(this.searchLabel, item, searchObj[item])
}
}
this.searchLabel = {
body: searchObj
}
this.pageObj.pageNo = 1
if (orderBy) {
this.$set(this.searchLabel, 'orderBy', orderBy)
}

View File

@@ -74,7 +74,7 @@ export default {
total: 0
},
timer: null,
sameLabels: ['endpointLabels', 'labelsType', 'lastScrape', 'lastScrapeDuration', 'health', 'lastError'],
sameLabels: ['endpointLabels', 'labelsType', 'lastScrape', 'lastScrapeDuration', 'health', 'lastError', 'str'],
orderBy: {}
}
},
@@ -188,6 +188,7 @@ export default {
const user = date.user
const labels = date.labels
const discoveredLabels = date.discoveredLabels
const str = JSON.stringify(date.discoveredLabels)
const tableData = {
endpointLabels,
endpoint,
@@ -204,7 +205,8 @@ export default {
parent_asset,
user,
labels,
discoveredLabels
discoveredLabels,
str
}
let simpleTemp = ''
const keys = Object.keys(tableData)
@@ -219,6 +221,7 @@ export default {
if (simpleTemp.indexOf(',') !== -1) {
simpleTemp = simpleTemp.substr(0, simpleTemp.length - 1)
}
console.log(simpleTemp)
tableData.tableDateAll = simpleTemp
tableDates.push(tableData)
}

View File

@@ -26,7 +26,7 @@
@click="detailViewRightShow(item)"
@mouseenter="labelHover(item, 'asset', true, $event)"
@mouseleave="labelHover(item, 'asset', false)">
<div class="detail-row-info">
<div class="detail-row-info" :title="item.name">
<div class="asset-manageIp">
<i class="nz-icon nz-icon-overview-alert" :class="item.alertNum>0?'colorEF7458':'color23BF9A'"/>
{{item.name}}

View File

@@ -26,7 +26,7 @@
@click="detailViewRightShow(item)"
@mouseenter="labelHover(item, 'dc', true, $event)"
@mouseleave="labelHover(item, 'dc', false)">
<div class="detail-row-info">
<div class="detail-row-info" :title="item.name">
<div class="asset-manageIp">
<i class="nz-icon nz-icon-overview-alert" :class="item.alertNum>0?'colorEF7458':'color23BF9A'"/>
{{item.name}}

View File

@@ -26,7 +26,7 @@
@click="detailViewRightShow(item)"
@mouseenter="labelHover(item, 'endpoint', true, $event)"
@mouseleave="labelHover(item, 'endpoint', false)">
<div class="detail-row-info">
<div class="detail-row-info" :title="item.name">
<div class="asset-manageIp">
<i class="nz-icon nz-icon-overview-alert" :class="item.alertNum>0?'colorEF7458':'color23BF9A'"/>
{{item.name}}

View File

@@ -26,7 +26,7 @@
@click="detailViewRightShow(item)"
@mouseenter="labelHover(item, 'module', true, $event)"
@mouseleave="labelHover(item, 'module', false)">
<div class="detail-row-info">
<div class="detail-row-info" :title="item.name">
<div class="asset-manageIp">
<i class="nz-icon nz-icon-overview-alert" :class="item.alertNum>0?'colorEF7458':'color23BF9A'"/>
{{item.name}}

View File

@@ -25,8 +25,8 @@
:class="item.id === detailViewRightObj.id ? 'selected' : ''"
@click="detailViewRightShow(item)"
>
<div class="detail-row-info">
<div class="asset-manageIp">
<div class="detail-row-info" :title="getRemoteText(item)">
<div class="asset-manageIp" :title="getRemoteText(item)">
<el-tooltip effect="light" placement="right">
<div slot="content">
{{$t(getStatusText(item.status))}}

View File

@@ -25,7 +25,7 @@
:class="item.id === detailViewRightObj.id ? 'selected' : ''"
@click="detailViewRightShow(item)"
>
<div class="detail-row-info" @mouseenter="labelHover(item, 'user', true, false, $event)"
<div class="detail-row-info" :title="item.name" @mouseenter="labelHover(item, 'user', true, false, $event)"
@mouseleave="labelHover(item, 'user', false, false,)">
<div class="asset-manageIp">
<div class="user-name-td">

View File

@@ -33,7 +33,7 @@
>
<i class="nz-icon nz-icon-check" v-if="!allowedAll&&!item.allowed&&(index==0||index==1||item.visibility=='disabled')"></i>
<i v-else class="nz-icon nz-icon-check" v-show="item.show"></i>
<span>{{item.label}}</span>
<span :title="item.label">{{item.label}}</span>
<i class="nz-icon nz-icon-sort drag-sort" v-if="index!==0 && index !== 1 && !item.NotSet" @click.stop></i>
</div>
</draggable>
@@ -67,7 +67,7 @@
>
<i class="nz-icon nz-icon-check" v-if="!allowedAll&&!item.allowed&&(index==0||index==1||item.visibility=='disabled')"></i>
<i v-else class="nz-icon nz-icon-check" v-show="item.show"></i>
<span>{{item.label}}</span>
<span :title="item.label">{{item.label}}</span>
<i class="nz-icon nz-icon-sort drag-sort" v-if="index!==0 && index !== 1 && !item.NotSet" @click.stop></i>
</div>
</draggable>

View File

@@ -34,7 +34,7 @@
</template>
<div class="el-dropdown-link" slot="reference">
<i class="nz-icon nz-icon-time" style="width:20px;"></i>
<span class="panel-list-title" id="timePickerContent">{{showTime.text}}</span>
<span class="panel-list-title" id="timePickerContent" :title="showTime.text">{{showTime.text}}</span>
<span class="dropdown--suffix">
<i class="el-icon-arrow-down"></i>
</span>
@@ -42,7 +42,7 @@
</el-popover>
<el-dropdown-menu class="nz-dashboard-dropdown right-box-select-top right-public-box-dropdown-top popper-z-index" slot="dropdown">
<template v-for="(item, index) in timeData" >
<el-dropdown-item v-if="item.id !== 12" :key="index" :class="showTime.id === item.id ? 'nz-dashboard-dropdown-bg' : ''" :command="item">
<el-dropdown-item v-if="item.id !== 12" :key="index" :class="showTime.id === item.id ? 'nz-dashboard-dropdown-bg' : ''" :command="item" :title="item.text">
{{item.text}}
</el-dropdown-item>
</template>

View File

@@ -148,6 +148,9 @@ export default {
if (timeRange && timeRange.length < 2) {
return []
}
if (!timeRange[0]) {
return []
}
const startTime = bus.timeFormate(timeRange[0], this.pickTimer)
const endTime = bus.timeFormate(timeRange[1], this.pickTimer)
const timeType = timeRange[2]

View File

@@ -24,8 +24,9 @@
<el-popover
placement="right"
trigger="hover"
class="overflowSpan"
:content="node.label">
<span slot="reference">{{ node.label }}</span>
<span slot="reference" class="">{{ node.label }}</span>
</el-popover>
</span>
<el-row class="block-col-2" style="margin-left: 10px; margin-right: 8px;">

View File

@@ -67,7 +67,7 @@
{{$t('terminal.confirm')}}
</span>
</el-input>
<span class="hide-input-nzName text-ellipsis" v-if="!editFlag[index]">
<span class="hide-input-nzName text-ellipsis" v-if="!editFlag[index]" :title="item.nzName">
{{item.nzName}}
</span>
<i @click.stop="changeEditFlag(index)" v-if="!editFlag[index]" class="nz-icon nz-icon-edit1"/>

View File

@@ -2,7 +2,7 @@
<div class="meta2d-image-box">
<div @click="changeSelectBoxShow(true)" style="position: relative">
<div class="image-input">
<span v-if="imageName" class="image-input-message text-ellipsis">{{unit}} / {{imageName}}</span>
<span v-if="imageName" class="image-input-message text-ellipsis" :title="unit + '/' + imageName">{{unit}} / {{imageName}}</span>
<i class="el-icon-circle-close" style="position: absolute;top: 10px;right: 10px;font-size: 14px" @click.stop="selectImageChange({image: '', id: ''}, true)"/>
</div>
</div>
@@ -29,7 +29,7 @@
<span class="nz-icon-caret-right-box">
<i class="nz-icon nz-icon-caret-right" :class="item.show ? 'rotate90': ''" />
</span>
<div class="text-ellipsis nz-collapse-header-content">{{item.group}}</div>
<div class="text-ellipsis nz-collapse-header-content" :title="item.group">{{item.group}}</div>
<i class="nz-icon nz-icon-delete title-delete" v-if="item.group!== 'General'" @click.stop="tooltipDeleteTitle(item)" :title="$t('overall.delete')" />
<span class="title-all">{{item.children.length}}</span>
</div>

View File

@@ -339,7 +339,7 @@
<template v-slot:trigger>
<!-- <el-input placeholder="" size="small" clearable v-model="panelName" :disabled="false"></el-input>-->
<div class="alert-rule-box-dashboard">
<div class="text-ellipsis alert-rule-box-dashboard-name">{{panelName}}</div>
<div class="text-ellipsis alert-rule-box-dashboard-name" :title="panelName">{{panelName}}</div>
<i class="nz-icon nz-icon-guanbi2" @click.stop="clearDashboard()"/>
</div>
</template>

View File

@@ -1,7 +1,7 @@
<template>
<div v-clickoutside="{obj: editSoftwareType, func: esc}" class="right-box right-box-editSoftwareType right-box-edit-endpoint ">
<div class="right-box__header">
<div class="header__title">{{editSoftwareType.id ? $t('Edit SoftwareType') : $t('new SoftwareType')}}</div>
<div class="header__title">{{editSoftwareType.id ? $t('softwareType.edit') : $t('softwareType.create')}}</div>
<div class="header__operation">
<span v-cancel="{obj: editSoftwareType, func: esc}"><i class="nz-icon nz-icon-close" :title="$t('overall.close')"></i></span>
</div>
@@ -11,54 +11,137 @@
<el-form ref="modelForm" :model="editSoftwareType" :rules="rules" label-position="top" label-width="120px">
<!--name-->
<el-form-item :label="$t('config.model.name')" prop="name">
<el-input maxlength="64" show-word-limit v-model="editSoftwareType.name" size="small" type="text"></el-input>
<el-input maxlength="128" show-word-limit v-model="editSoftwareType.name" size="small" type="text"></el-input>
</el-form-item>
<!--category-->
<el-form-item :label="$t('editSoftwareType.category')" prop="category">
<el-input maxlength="64" show-word-limit v-model="editSoftwareType.category" size="small" type="text"></el-input>
<el-form-item :label="$t('softwareType.category')" prop="category">
<el-input maxlength="128" show-word-limit v-model="editSoftwareType.category" size="small" type="text"></el-input>
</el-form-item>
<!--icon-->
<el-form-item :label="$t('config.menus.icon')" prop="icon">
<el-dropdown trigger="click" placement="top-start">
<div class="el-dropdown-link">
<i v-if="editSoftwareType.icon" class="mapping-icon" :class="editSoftwareType.icon"></i>
<div v-else class="mapping-iconSelect" :title="$t('tip.add')">
<i class="nz-icon nz-icon-create-square"></i>
</div>
</div>
<el-dropdown-menu slot="dropdown" class="mapping-iconPop">
<ul class="mapping-iconList">
<li class="mapping-iconItem" :class="{active:editSoftwareType.icon===subItem.value}" v-for="subItem in iconList" @click="iconActive(subItem)" :key="subItem.value">
<i :class="subItem.value"></i>
</li>
</ul>
</el-dropdown-menu>
</el-dropdown>
<el-upload
class="avatar-uploader"
action="#"
:show-file-list="false"
:on-change="beforeAvatarUpload"
:auto-upload="false"
accept=".jpg,.png"
:limit="1"
:on-remove="handleRemove"
ref="avatarUploader"
:fileList="fileList"
>
<img v-if="imageUrl" :src="imageUrl" class="avatar">
<i v-else class="nz-icon nz-icon-create-square avatar-uploader-icon"></i>
<i class="nz-icon nz-icon-circle-close" v-if="imageUrl" @click.stop="removeIcon" :title="$t('overall.delete')"/>
</el-upload>
</el-form-item>
<!--params-->
<el-form-item :label="$t('config.assetLabel.params')" prop="category">
<div id="module-box-params" ref="labelBoxScrollbar" style="height: 100%; overflow-x: auto;">
<div v-for="(item, index) in editSoftwareType.paramObj" :key="index" class="param-box-row">
<el-form-item :prop="'paramObj.' + index + '.key'" class="param-box-row-key" :rules="[{ pattern: /[a-zA-Z_][a-zA-Z0-9_]*/, message: $t('overall.ASCIIKey') ,trigger: 'blur'}]">
<el-input v-model="item.key" placeholder="key" size="mini" ></el-input>
</el-form-item>
<span class="param-box-row-eq">=</span>
<el-form-item :prop="'paramObj.' + index + '.value'" class="param-box-row-value">
<vue-tags-input
v-model="item.tags"
:maxlength="32"
:placeholder="$t('overall.addParameter')"
:tags="item.value"
@tags-changed="(newTags)=>{tagsChange(newTags, index)}"
/>
</el-form-item>
<span :id="'moduel-remove-param-'+index" class="param-box-row-symbol" @click="removeParam(index)" :title="$t('overall.delete')"><i class="nz-icon nz-icon-shanchu1"></i></span>
</div>
<el-form-item :label="$t('config.assetLabel.params')" prop="paramObj">
<div v-for="(label, i) in editSoftwareType.paramObj" :key="i" class="form__dotted-item form__dotted-item-required">
<el-form-item :prop="'paramObj.' + i + '.value.0'" :rules="[ { required: JSON.parse(label.param).required === '1', message: $t('validate.required'), trigger: 'blur' }]">
<template v-slot:label>
<div class="form__labels-label">
<span>{{label.name}}</span>
<div>
<span @click="removeLabel(label)" class="form__labels-label__span" :title="$t('overall.delete')"><i class="nz-icon nz-icon-minus"></i></span>
</div>
</div>
</template>
<template v-if="label.action !== 1">
<template v-if="label.type.toUpperCase() === assetConstants.labelTypeData.TEXT">
<el-input v-model="label.value[0]" size="small"/>
</template>
<template v-else-if="label.type.toUpperCase() === assetConstants.labelTypeData.PASSWORD">
<el-input v-model="label.value[0]" type="password" size="small"/>
</template>
<template v-else-if="label.type.toUpperCase() === assetConstants.labelTypeData.MULTITEXT">
<div v-for="(value, i) in label.value" :key="i" class="label__multi-text">
<el-input v-model="label.value[i]" size="small"/>
<span @click="addMultiTextRow(label)" style="margin: 0 5px" :title="$t('tip.add')"><i class="nz-icon nz-icon-plus"></i></span>
<span @click="removeMultiTextRow(label, i)" :title="$t('overall.delete')"><i class="nz-icon nz-icon-minus"></i></span>
</div>
</template>
<template v-else-if="label.type.toUpperCase() === assetConstants.labelTypeData.TEXTAREA">
<el-input v-model="label.value[0]" :maxlength="4096" show-word-limit size="small" :rows="2" type="textarea"/>
</template>
<template v-else-if="label.type.toUpperCase() === assetConstants.labelTypeData.RADIO">
<el-radio-group v-model="label.value[0]">
<el-radio v-for="item in JSON.parse(label.param).items" :key="item.name" :label="item.name">{{item.name}}</el-radio>
</el-radio-group>
</template>
<template v-else-if="label.type.toUpperCase() === assetConstants.labelTypeData.CHECKBOX">
<el-checkbox-group v-model="label.value">
<el-checkbox v-for="item in JSON.parse(label.param).items" :key="item.name" :label="item.name" :value="item.name"></el-checkbox>
</el-checkbox-group>
</template>
<template v-else-if="label.type.toUpperCase() === assetConstants.labelTypeData.SELECT">
<el-select v-model="label.value[0]" class="right-box__select" :placeholder="$t('el.select.placeholder')" popper-class="right-box-select-top prevent-clickoutside" size="small">
<el-option v-for="item in JSON.parse(label.param).items" :key="item.name" :label="item.name" :value="item.name"></el-option>
</el-select>
</template>
<template v-else-if="label.type.toUpperCase() === assetConstants.labelTypeData.INTEGER">
<el-input v-model="label.value[0]" oninput="value=value.replace(/[^\d]/g,'')" size="small"></el-input>
</template>
<template v-else-if="label.type.toUpperCase() === assetConstants.labelTypeData.DOUBLE">
<el-input-number v-model="label.value[0]" :controls="false" size="small" :precision="JSON.parse(label.param).decimals" style="width: 100%;text-align: left" :max="10000000000000000000" :min="-10000000000000000000"></el-input-number>
</template>
<template v-else-if="label.type.toUpperCase() === assetConstants.labelTypeData.DATETIME">
<template v-if="JSON.parse(label.param).subType === assetConstants.labelSubTypeData.time">
<div v-if="JSON.parse(label.param).interval" style="display: flex; justify-content: space-between">
<el-time-select v-model="label.value[0]" size="small"></el-time-select>
<el-time-select v-model="label.value[1]" size="small"></el-time-select>
</div>
<template v-else>
<el-time-select v-model="label.value[0]" size="small" style="width: 100%"></el-time-select>
</template>
</template>
<template v-else>
<template v-if="JSON.parse(label.param).interval">
<my-date-picker
id="asset-box-input-purchase-date"
v-model="label.value"
:type="JSON.parse(label.param).subType === assetConstants.labelSubTypeData.date ? 'daterange' : 'datetimerange'"
placeholder=""
popper-class="right-box-select-top"
size="small"
:format="timeFormatStrToDatePickFormat(timeFormatMain,JSON.parse(label.param).subType === assetConstants.labelSubTypeData.date)"
style="width: 100%">
</my-date-picker>
</template>
<template v-else>
<my-date-picker
id="asset-box-input-parchase-date"
v-model="label.value[0]"
:type="JSON.parse(label.param).subType"
placeholder=""
popper-class="right-box-select-top"
size="small"
style="width: 100%"
:format="timeFormatStrToDatePickFormat(timeFormatMain, JSON.parse(label.param).subType === assetConstants.labelSubTypeData.date)">
</my-date-picker>
</template>
</template>
</template>
<template v-else-if="label.type.toUpperCase() === assetConstants.labelTypeData.EMAIL">
<el-input v-model="label.value[0]" size="small"/>
</template>
</template>
</el-form-item>
</div>
<div style="text-align: center">
<span id="module-add-param" class="right-box-form-add module-add-label" type="button" @click="addParam">
<span :title="$t('tip.add')"><i class="nz-icon nz-icon-plus" style="font-size: 16px;"></i></span>
</span>
<!-- label的新增按钮 -->
<div class="form__flex-container hide-casc-input">
<button class="form__create-btn" type="button" @click.stop :title="$t('tip.add')"><i class="nz-icon nz-icon-create-square"></i></button>
<el-cascader
v-if="labelCascShow"
:options="options.fieldGroupOptions"
:props="labelCascProp"
class="hide-input"
:title="$t('tip.add')"
popper-class="prevent-clickoutside right-box-select-top limit-height"
size="small"
@change="addLabel"
></el-cascader>
</div>
</el-form-item>
<!--remark-->
@@ -81,18 +164,14 @@
<script>
// import { host, port } from '@/components/common/js/validate'
import selectWalk from '../../popBox/selectWalk'
import editRigthBox from '../../mixin/editRigthBox'
import { sysObjectIdInput } from '@/components/common/js/validate'
import iconList from '@/components/common/js/iconList'
import VueTagsInput from '@johmun/vue-tags-input'
import bus from '@/libs/bus'
import { asset as assetConstants } from '@/components/common/js/constants'
export default {
name: 'modelBox',
name: 'softwareTypeBox',
components: {
'select-walk': selectWalk,
VueTagsInput
},
props: {
obj: {
@@ -109,8 +188,13 @@ export default {
},
mixins: [editRigthBox],
data () {
const vm = this
return {
assetConstants,
imageUrl: '',
fileList: [],
iconList: iconList,
labelCascShow: true, // 用来控制label的cascader的重新渲染
editSoftwareType: {
id: '',
name: '',
@@ -121,24 +205,20 @@ export default {
paramObj: [],
remark: ''
},
options: {
fieldGroupOptions: []
},
brandList: [], // brand 列表数据
editModule: {},
typeDataList: [],
// chartlList: [], // chart 列表数据
dashboardList: [], // dashboard 列表数据
// ChartSearchShowFields: [ // ChartSearch 下拉搜索表头
// { title: 'ID', data: 'id' },
// { title: this.$t('overall.name'), data: 'name', key: 'name' },
// { title: this.$t('overall.type'), data: 'type', key: 'type' },
// { title: this.$t('overall.remark'), data: 'remark', key: 'remark' }
// ],
DashboardSearchShowFields: [ // DashboardSearch 下拉搜索表头
DashboardSearchShowparamObj: [ // DashboardSearch 下拉搜索表头
{ title: 'ID', data: 'id' },
{ title: this.$t('overall.name'), data: 'name', key: 'name' },
{ title: this.$t('overall.remark'), data: 'remark', key: 'remark' }
],
url: 'asset/model',
brandUrl: 'asset/brand',
url: '/asset/software/type',
rightBox: { model: { show: false } },
roles: [],
rules: {
@@ -154,6 +234,27 @@ export default {
sysObjectId: [
{ validator: sysObjectIdInput, trigger: 'blur' }
]
},
labelCascProp: {
lazy: true,
value: 'id',
label: 'name',
lazyLoad (node, resolve) {
const { level } = node
if (node && node.data) {
vm.$get('asset/field/meta', { groupIds: node.data.id, pageSize: -1 }).then(response => {
if (response.code === 200) {
const meta = response.data.list.map(item => ({
...item,
leaf: level >= 1,
disabled: vm.editSoftwareType.paramObj.some(a => a.id === item.id)
}))
vm.options.metaOptions = meta
resolve(meta)
}
})
}
}
}
}
},
@@ -164,28 +265,36 @@ export default {
handler (n) {
this.isEdit = true
const editSoftwareType = JSON.parse(JSON.stringify(n))
this.imageUrl = editSoftwareType.icon
editSoftwareType.paramObj = []
if (editSoftwareType.params) {
Object.keys(editSoftwareType.params).forEach(key => {
editSoftwareType.paramObj.push({
key,
value: editSoftwareType.params[key]
})
editSoftwareType.paramObj.push(editSoftwareType.params[key])
})
}
if (!editSoftwareType.paramObj.length) {
editSoftwareType.paramObj.push({ key: '', value: [] })
}
this.editSoftwareType = editSoftwareType
}
}
},
created () {
},
mounted () {
this.getFieldGroupData()
},
methods: {
clickOutside () {
this.esc(false)
},
getFieldGroupData () {
return new Promise(resolve => {
this.$get('asset/field/group', { pageSize: -1 }).then(response => {
if (response.code === 200) {
this.options.fieldGroupOptions = response.data.list
}
resolve()
})
})
},
iconActive (subItem) {
console.log(subItem, this.editSoftwareType.icon)
if (this.editSoftwareType.icon === subItem.value) {
@@ -207,6 +316,11 @@ export default {
const params = {
...this.editSoftwareType
}
params.icon = this.imageUrl
params.params = {}
params.paramObj.forEach(item => {
params.params[item.name] = item
})
if (this.editSoftwareType.id) {
this.$put(this.url, params).then(res => {
this.prevent_opt.save = false
@@ -241,12 +355,128 @@ export default {
addParam () {
this.editSoftwareType.paramObj.push({ key: '', value: [] })
},
// 移除单个param
removeParam (index) {
if (this.editSoftwareType.paramObj.length === 1) {
this.editSoftwareType.paramObj = [{ key: '', value: [] }]
}
removeLabel (label) {
let index = 0
this.editSoftwareType.paramObj.find((f, i) => {
if (label.id === f.id) {
index = i
return true
}
return false
})
this.editSoftwareType.paramObj.splice(index, 1)
this.labelCascShow = false
this.$nextTick(() => {
this.labelCascShow = true
})
},
addMultiTextRow (label) {
label.value.push('')
},
removeMultiTextRow (label, index) {
if (label.value.length === 1) {
return
}
label.value.splice(index, 1)
},
blankLabelValue (label) {
const defaultValue = JSON.parse(label.param).default || ''
if (label.type.toUpperCase() === this.assetConstants.labelTypeData.CHECKBOX) {
const arr = []
if (label.param && JSON.parse(label.param).items) {
JSON.parse(label.param).items.forEach(item => {
if (item.check) {
arr.push(item.name)
}
})
}
return arr
} else if (label.type.toUpperCase() === this.assetConstants.labelTypeData.MULTITEXT || label.type.toUpperCase() === assetConstants.labelTypeData.TEXT || label.type.toUpperCase() === assetConstants.labelTypeData.TEXTAREA) {
return [defaultValue]
} else if (label.type.toUpperCase() === this.assetConstants.labelTypeData.RADIO || label.type.toUpperCase() === assetConstants.labelTypeData.SELECT) {
const arr = ['']
if (label.param && JSON.parse(label.param).items) {
JSON.parse(label.param).items.forEach(item => {
if (item.check) {
arr[0] = item.name
}
})
}
return arr
} else {
return [defaultValue]
}
},
addLabel ([groupId, metaId]) {
const label = this.options.metaOptions.find(m => m.id === metaId)
this.editSoftwareType.paramObj.push({ ...label, value: this.blankLabelValue(label), action: 0 })
this.labelCascShow = false
this.$nextTick(() => {
this.labelCascShow = true
})
},
beforeAvatarUpload (file, fileList) {
const this_ = this
const isJPG = (file.raw.type === 'image/jpeg' || file.raw.type === 'image/png')
const isLt2M = (file.size / 1024 / 1024) < 2
if (!isJPG) {
this.$message.error(this_.$t('project.topology.imgFormat'))
fileList = fileList.splice(fileList.length - 1, 1)
return false
}
if (!isLt2M) {
this.$message.error(this_.$t('project.topology.imgSize'))
fileList = fileList.splice(fileList.length - 1, 1)
return false
}
new Promise(function (resolve, reject) {
const width = 0
const height = 0
const _URL = window.URL || window.webkitURL
const img = new Image()
img.onload = function () {
const valid = img.width > width && img.height > height
this_.imgWidth = img.width
this_.imgHeight = img.height
valid ? resolve() : reject()
}
img.src = _URL.createObjectURL(file.raw)
}).then(() => {
if (isJPG) {
console.log(file.raw)
this.getBase64(file.raw).then(base64Str => {
this.imageUrl = base64Str
})
}
return file.raw
}, () => {
this.$message.error(this_.$t('project.topology.imgMeasure'))
return Promise.reject()
})
return false
},
handleRemove () {
this.imageUrl = ''
},
removeIcon (e) {
this.fileList = []
this.imageUrl = ''
},
getBase64 (file) {
return new Promise(function (resolve, reject) {
const reader = new FileReader()
let imgResult = ''
reader.readAsDataURL(file)
reader.onload = function () {
imgResult = reader.result
}
reader.onerror = function (error) {
reject(error)
}
reader.onloadend = function () {
resolve(imgResult)
}
})
}
}
}

View File

@@ -41,7 +41,7 @@
style="display: inline-block;width: calc(100% - 66px);vertical-align: middle;position: relative;"
:append-to-body="false"
v-model="visible">
<div slot="reference" class="search-box-input" tabindex="-99" @focus="focusSearchInput">
<div slot="reference" class="search-box-input" tabindex="-99" @focus="focusSearchInput" ref="searchBoxInput">
<div class="search-box-input-content" ref="search-box-input-content">
<div v-for="(item, index) in selectArr" :key="index">
<el-popover
@@ -881,12 +881,17 @@ export default {
delete params[key]
}
})
params.bottomSelectArr = this.$lodash.cloneDeep(this.selectArr)
params.bottomSelectArr = JSON.stringify(this.$lodash.cloneDeep(this.selectArr))
this.$router.replace({ path: this.$route.path, query: params }).catch(err => {})
}
this.oldSearchStr = ''
// todo 更新历史记录
this.setHistoryArr()
setTimeout(() => {
this.visible = false
this.$refs.searchStr.$el.scrollIntoView()
this.$refs.searchStr.blur()
})
},
emitSearch: bus.debounce(function () {
this.$nextTick(() => {
@@ -1047,8 +1052,10 @@ export default {
const type = this.calcType()
this.$get(`/fulltext/metadata/${type}`).then(res => {
if (res.code == 200) {
this.searchList = res.data.list || []
this.oldSearchList = res.data.list || []
let arr = res.data.list || []
arr = arr.filter(item => item.show === '1')
this.searchList = arr
this.oldSearchList = arr
} else {
this.$message.error(res.msg || res.error)
}

View File

@@ -78,6 +78,7 @@
:label="item.label"
:type="tagType(item.label)"
style="margin: 5px 0 5px 5px;"
:title="item.value"
>
{{item.value}}
</nz-alert-tag>

View File

@@ -36,7 +36,7 @@
</template>
<template slot-scope="scope" :column="item">
<div v-if="item.prop === 'group'">
<copy :copyData='scope.row[item.prop].name' :showInfo='scope.row[item.prop]'>
<copy v-if="scope.row[item.prop]" :copyData='scope.row[item.prop].name' :showInfo='scope.row[item.prop]'>
<template slot="copy-text">
{{scope.row[item.prop]?scope.row[item.prop].name:'-'}}
</template>

View File

@@ -40,7 +40,7 @@
<template slot-scope="scope" :column="item">
<template v-if="item.prop === 'name'">
<div class="document-copy-block">
<span class="document-copy-text">{{scope.row[item.prop]}}</span>
<span class="document-copy-text" :title="scope.row[item.prop]">{{scope.row[item.prop]}}</span>
<i v-if="scope.row[item.prop]" class="nz-icon nz-icon-override" style="visibility: hidden" @click="onCopy(scope.row.name)" :title="$t('overall.copyText')"></i>
</div>
</template>
@@ -50,6 +50,7 @@
<template v-else-if="item.prop === 'project'">
<div class="document-copy-block">
<span class="document-copy-text"
:title="scope.row[item.prop].name"
@mouseenter="labelHover(scope.row, item.prop, true,true, $event)"
@mouseleave="labelHover(scope.row, item.prop, false,true)">
{{scope.row[item.prop].name}}
@@ -60,6 +61,7 @@
<template v-else-if="item.prop === 'module'">
<div class="document-copy-block">
<span class="document-copy-text"
:title="scope.row[item.prop].name"
@mouseenter="labelHover(scope.row, item.prop, true,true, $event)"
@mouseleave="labelHover(scope.row, item.prop, false,true)">
<i class="nz-icon nz-icon-overview-module monitorColor"/>
@@ -72,6 +74,7 @@
<div class="document-copy-block">
<span
class="document-copy-text"
:title="scope.row.asset&&scope.row.asset.name"
@mouseenter="labelHover(scope.row, item.prop, true,true, $event)"
@mouseleave="labelHover(scope.row, item.prop, false,true)">
<i class="nz-icon nz-icon-overview-project monitorColor color23BF9A"></i>
@@ -184,7 +187,13 @@
<el-dropdown-item v-has="'alertSilence_add'" :command="['fastSilence', scope.row, 'endpoint']"><i class="nz-icon nz-icon-fast-silence"></i><span class="operation-dropdown-text">{{$t('overall.silenceAlert')}}</span></el-dropdown-item>
<el-dropdown-item v-has="'asset_add'" :command="['topology', scope.row, 'endpoint']"><i class="nz-icon nz-icon-Topology"></i><span class="operation-dropdown-text">{{$t('overall.topology')}}</span></el-dropdown-item>
<el-dropdown-item v-has="'monitor_endpoint_add'" :command="['diagnosis', scope.row,{from:'endpoint'}]"><i class="nz-icon nz-icon-diagnosis"></i><span class="operation-dropdown-text">{{$t('overall.diagnosis')}}</span></el-dropdown-item>
<el-dropdown-item v-if="scope.row.configs[0].enable" v-has="'monitor_endpoint_add'" :command="['metricTarget', scope.row, 'endpoint']" :disabled="scope.row.configs[0].config.protocol !== ('http'||'https')"><i class="nz-icon nz-icon-Metrics"></i><span class="operation-dropdown-text">{{$t('endpoints.metricTarget')}}</span></el-dropdown-item>
<el-dropdown-item
v-if="scope.row.configs[0].enable"
v-has="'monitor_endpoint_add'"
:command="['metricTarget', scope.row, 'endpoint']"
:disabled="scope.row.configs[0].config.protocol !== 'http' && scope.row.configs[0].config.protocol !=='https'"
>
<i class="nz-icon nz-icon-Metrics"></i><span class="operation-dropdown-text">{{$t('endpoints.metricTarget')}}</span></el-dropdown-item>
<el-dropdown-item v-has="'monitor_endpoint_edit'" :command="['configSync', scope.row,{from:'endpoint'}]"><i class="nz-icon nz-icon-sync"></i><span class="operation-dropdown-text">{{$t('overall.synchronize')}}</span></el-dropdown-item>
</el-dropdown-menu>

View File

@@ -67,6 +67,7 @@
<i class="nz-icon nz-icon-more3"></i>
</div>
<el-dropdown-menu slot="dropdown" class="right-box-select-top right-public-box-dropdown-top">
<el-dropdown-item v-has="'monitor_module_delete'" :command="['copy', scope.row]"><i class="nz-icon nz-icon-override"></i><span class="operation-dropdown-text">{{$t('overall.duplicate')}}</span></el-dropdown-item>
<el-dropdown-item v-has="'monitor_module_delete'" :command="['delete-rel', scope.row, {forceDeleteShow:false, single:true,from:'menus'}]"><i class="nz-icon nz-icon-delete"></i><span class="operation-dropdown-text">{{$t('overall.delete')}}</span></el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>

View File

@@ -38,7 +38,7 @@
<template v-if="item.prop == 'updateUser'" >{{scope.row[item.prop].name}}</template>
<template v-else-if="item.prop == 'fileName' && scope.row[item.prop]" >
<div class="document-copy-block">
<span class="link document-copy-text" @click="downloadMib(scope.row)">{{scope.row[item.prop]}}</span>
<span class="link document-copy-text" @click="downloadMib(scope.row)" :title="scope.row[item.prop]">{{scope.row[item.prop]}}</span>
<i v-if="scope.row[item.prop]" class="nz-icon nz-icon-override" style="visibility: hidden" @click="onCopy(scope.row[item.prop])" :title="$t('overall.copyText')"></i>
</div>
</template>

View File

@@ -51,6 +51,7 @@
<template v-else-if="item.prop === 'project'">
<div class="document-copy-block">
<span class="document-copy-text"
:title="scope.row[item.prop].name"
@mouseenter="labelHover(scope.row, item.prop, true,true, $event)"
@mouseleave="labelHover(scope.row, item.prop, false,true)">
{{scope.row[item.prop].name}}

View File

@@ -44,13 +44,13 @@
<span v-else-if="item.prop === 'createDate'">{{utcTimeToTimezoneStr(scope.row[item.prop])}}</span>
<span v-else-if="item.prop === 'response'" @mouseenter="labelHover(scope.row, 'response', true, false, $event)"
@mouseleave="labelHover(scope.row, 'response', false, false)">
<div class="text-ellipsis" style="width: 100%" >
<div class="text-ellipsis" style="width: 100%" :title="scope.row[item.prop]">
{{scope.row[item.prop]}}
</div>
</span>
<span v-else-if="item.prop === 'params'" @mouseenter="labelHover(scope.row, 'params', true, false, $event)"
@mouseleave="labelHover(scope.row, 'params', false, false)">
<div class="text-ellipsis" style="width: 100%" >
<div class="text-ellipsis" style="width: 100%" :title="scope.row[item.prop]">
{{scope.row[item.prop]}}
</div>
</span>

View File

@@ -41,7 +41,7 @@
<template v-if="item.prop === 'name'">
<div class="document-copy-block">
<span class="document-copy-text">{{scope.row[item.prop]}}</span>
<span class="document-copy-text" :title="scope.row[item.prop]">{{scope.row[item.prop]}}</span>
<i v-if="scope.row[item.prop]" class="nz-icon nz-icon-override" style="visibility: hidden" @click="onCopy(scope.row.name)" :title="$t('overall.copyText')"></i>
</div>
</template>

View File

@@ -1,98 +1,133 @@
<template>
<el-table
id="softwareTypeTable"
ref="dataTable"
:data="tableData"
:height="height"
border
:default-sort="orderBy"
@header-dragend="dragend"
@sort-change="tableDataSort"
@selection-change="selectionChange"
@row-dblclick="(row)=>{}"
>
<el-table-column
:resizable="false"
align="center"
type="selection"
width="55">
</el-table-column>
<el-table-column
v-for="(item, index) in customTableTitle"
v-if="item.show"
:key="`col-${index}-${item.prop}`"
:fixed="item.fixed"
:label="item.label"
:min-width="`${item.minWidth}`"
:prop="item.prop"
:resizable="true"
:sort-orders="['ascending', 'descending']"
:sortable="item.sortable"
:width="`${item.width}`"
<div style="height: 100%">
<el-table
id="softwareTypeTable"
ref="dataTable"
:data="tableData"
:height="height"
border
:default-sort="orderBy"
@header-dragend="dragend"
@sort-change="tableDataSort"
@selection-change="selectionChange"
@row-dblclick="(row)=>{}"
>
<template slot="header">
<span class="data-column__span">{{item.label}}</span>
<div class="col-resize-area"></div>
</template>
<template slot-scope="scope" :column="item">
<template v-if="item.prop === 'roles'">
<template v-if="scope.row[item.prop]">
{{scope.row[item.prop].map(t=>t.name).join(',')}}
</template>
<template v-else>
<span>-</span>
</template>
<el-table-column
:resizable="false"
align="center"
type="selection"
width="55">
</el-table-column>
<el-table-column
v-for="(item, index) in customTableTitle"
v-if="item.show"
:key="`col-${index}-${item.prop}`"
:fixed="item.fixed"
:label="item.label"
:min-width="`${item.minWidth}`"
:prop="item.prop"
:resizable="true"
:sort-orders="['ascending', 'descending']"
:sortable="item.sortable"
:width="`${item.width}`"
>
<template slot="header">
<span class="data-column__span">{{item.label}}</span>
<div class="col-resize-area"></div>
</template>
<template v-else-if="item.prop === 'name'">
<copy :copyData='scope.row[item.prop]' :showInfo='scope.row[item.prop]'>
<template slot="copy-text">
{{scope.row[item.prop]?scope.row[item.prop]:'-'}}
</template>
</copy>
<template slot-scope="scope" :column="item">
<template v-if="item.prop === 'name'">
<copy :copyData='scope.row[item.prop]' :showInfo='scope.row[item.prop]'>
<template slot="copy-text">
{{scope.row[item.prop]?scope.row[item.prop]:'-'}}
</template>
</copy>
</template>
<span v-else-if="scope.row[item.prop]" :class="item.prop === 'remark'? 'el-table-remark':''">{{scope.row[item.prop]}}</span>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column
:resizable="false"
:width="operationWidth"
fixed="right">
<div slot="header" class="table-operation-title">{{$t('overall.option')}}</div>
<div slot-scope="scope" class="table-operation-items">
<!-- <button class="table-operation-item" v-has="'model_edit'" @click="$emit('edit', scope.row)" :title="$t('overall.edit')"><i class="nz-icon nz-icon-edit"></i></button> -->
<button class="table-operation-item" @click="showBottomBox('asset', scope.row)" :title="$t('overall.view')"><i class="nz-icon nz-icon-view1"></i></button>
<el-dropdown size="medium" v-has="['model_delete','main_edit','model_edit']" trigger="click" @command="tableOperation">
<div class="table-operation-item table-operation-item--more" :title="$t('overall.moreOperations')">
<i class="nz-icon nz-icon-more3"></i>
<span v-else-if="item.prop === 'params'"
@mouseenter="labelHover(scope.row, 'params', true, false, $event)"
@mouseleave="labelHover(scope.row, 'params', false, false)"
>
<div class="text-ellipsis" style="width: 100%" >
{{JSON.stringify(scope.row[item.prop])}}
</div>
</span>
<template v-else-if="item.prop === 'cts'">
<template>{{scope.row[item.prop] ? utcTimeToTimezoneStr(scope.row[item.prop]) : '-'}}</template>
</template>
<template v-else-if="item.prop === 'uts'">
<template>{{scope.row[item.prop] ? utcTimeToTimezoneStr(scope.row[item.prop]) : '-'}}</template>
</template>
<div v-else-if="item.prop === 'icon'"
@mouseenter="labelHover(scope.row, 'icon', true, false, $event)"
@mouseleave="labelHover(scope.row, 'icon', false, false)"
>
<div>
<img v-if="scope.row[item.prop]" :url="scope.row[item.prop]" class="table-image"/>
</div>
</div>
<el-dropdown-menu slot="dropdown" class="right-box-select-top right-public-box-dropdown-top">
<el-dropdown-item v-has="'model_edit'" :command="['edit', scope.row]"><i class="nz-icon nz-icon-edit"></i><span class="operation-dropdown-text">{{$t('overall.edit')}}</span></el-dropdown-item>
<el-dropdown-item v-has="'model_edit'" :command="['copy', scope.row]"><i class="nz-icon nz-icon-override"></i><span class="operation-dropdown-text">{{$t('overall.duplicate')}}</span></el-dropdown-item>
<el-dropdown-item v-has="'model_delete'" :command="['delete-rel', scope.row, {forceDeleteShow:true, single:true,from:'model'}]"><i class="nz-icon nz-icon-delete"></i><span class="operation-dropdown-text">{{$t('overall.delete')}}</span></el-dropdown-item>
<el-dropdown-item v-has="'main_edit'" :command="['sync', scope.row]"><i class="nz-icon nz-icon-sync"></i><span class="operation-dropdown-text">{{$t('overall.syncChart')}}</span></el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<span v-else-if="scope.row[item.prop]" :class="item.prop === 'remark'? 'el-table-remark':''">{{scope.row[item.prop]}}</span>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column
:resizable="false"
:width="operationWidth"
fixed="right">
<div slot="header" class="table-operation-title">{{$t('overall.option')}}</div>
<div slot-scope="scope" class="table-operation-items">
<!-- <button class="table-operation-item" v-has="'model_edit'" @click="$emit('edit', scope.row)" :title="$t('overall.edit')"><i class="nz-icon nz-icon-edit"></i></button> -->
<button class="table-operation-item" @click="showBottomBox('asset', scope.row)" :title="$t('overall.view')"><i class="nz-icon nz-icon-view1"></i></button>
<el-dropdown size="medium" v-has="['model_delete','main_edit','model_edit']" trigger="click" @command="tableOperation">
<div class="table-operation-item table-operation-item--more" :title="$t('overall.moreOperations')">
<i class="nz-icon nz-icon-more3"></i>
</div>
<el-dropdown-menu slot="dropdown" class="right-box-select-top right-public-box-dropdown-top">
<el-dropdown-item v-has="'model_edit'" :command="['edit', scope.row]"><i class="nz-icon nz-icon-edit"></i><span class="operation-dropdown-text">{{$t('overall.edit')}}</span></el-dropdown-item>
<el-dropdown-item v-has="'model_edit'" :command="['copy', scope.row]"><i class="nz-icon nz-icon-override"></i><span class="operation-dropdown-text">{{$t('overall.duplicate')}}</span></el-dropdown-item>
<el-dropdown-item v-has="'model_delete'" :command="['delete-rel', scope.row, {forceDeleteShow:true, single:true,from:'model'}]"><i class="nz-icon nz-icon-delete"></i><span class="operation-dropdown-text">{{$t('overall.delete')}}</span></el-dropdown-item>
<el-dropdown-item v-has="'main_edit'" :command="['sync', scope.row]"><i class="nz-icon nz-icon-sync"></i><span class="operation-dropdown-text">{{$t('overall.syncChart')}}</span></el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</el-table-column>
<template slot="empty">
<div v-if="!loading" class="table-no-data">
<svg class="icon" aria-hidden="true">
<use xlink:href="#nz-icon-no-data-list"></use>
</svg>
<div class="table-no-data__title">No results found</div>
</div>
<div v-else>&nbsp;</div>
</template>
</el-table>
<nzTooltip
v-if="alertLabelShow"
:id="alertLabelId"
:that="alertLabelObj"
:width="200"
:type="alertLabelType"
@tipHover='tipHover'
ref="nzTooltip"
class="data-column__"
>
<div style="word-break: break-all">
<div name="default">
<span class="copy-value-content" :title="$t('overall.duplicate')" v-if="alertLabelType !== 'icon'"> <i class="nz-icon nz-icon-override" @click="copyValue(alertLabelObj[alertLabelType])"></i></span>
<pre v-if="alertLabelType !== 'icon'" class="copy-value-content__pre">{{JSON.stringify(alertLabelObj[alertLabelType],null,2)}}</pre>
<img :src="alertLabelObj" style="width: 200px;height: 200px" v-if="alertLabelType === 'icon'"/>
</div>
</div>
</el-table-column>
<template slot="empty">
<div v-if="!loading" class="table-no-data">
<svg class="icon" aria-hidden="true">
<use xlink:href="#nz-icon-no-data-list"></use>
</svg>
<div class="table-no-data__title">No results found</div>
</div>
<div v-else>&nbsp;</div>
</template>
</el-table>
</nzTooltip>
</div>
</template>
<script>
import table from '@/components/common/mixin/table'
import copy from '@/components/common/copy'
import alertLabelMixin from '@/components/common/mixin/alertLabelMixin'
export default {
name: 'softwareTypeTable',
mixins: [table],
mixins: [table, alertLabelMixin],
components: { copy },
props: {
loading: Boolean
@@ -113,29 +148,29 @@ export default {
minWidth: 350,
sortable: 'custom'
}, {
label: this.$t('category'),
label: this.$t('softwareType.category'),
prop: 'category',
show: true,
width: 200,
sortable: 'custom'
}, {
label: this.$t('icon'),
label: this.$t('config.menus.icon'),
prop: 'icon',
show: true,
width: 120,
sortable: 'custom'
}, {
label: this.$t('params'),
label: this.$t('config.assetLabel.params'),
prop: 'params',
minWidth: 200,
show: false
show: true
}, {
label: this.$t('cts'),
label: this.$t('issue.createTime'),
prop: 'cts',
minWidth: 200,
show: false
}, {
label: this.$t('uts'),
label: this.$t('alert.silence.upTime'),
prop: 'uts',
minWidth: 200,
show: false
@@ -149,7 +184,21 @@ export default {
}
},
methods: {
copyValue (item) {
const str = item
// const domUrl = document.createElement('input')
// domUrl.value = JSON.stringify(str)
// domUrl.id = 'creatDom'
// document.body.appendChild(domUrl)
// domUrl.select() // 选择对象
// document.execCommand('Copy') // 执行浏览器复制命令
// const creatDom = document.getElementById('creatDom')
// creatDom.parentNode.removeChild(creatDom)
// this.$message.success(this.$t('overall.copySuccess'))
this.$copyText(JSON.stringify(str)).then(() => {
this.$message.success({ message: this.$t('overall.copySuccess') })
})
}
},
created () {
},

View File

@@ -53,8 +53,8 @@
<div class="personal-avatar"><span>{{name ? name.substr(0, 1) : ''}}</span>&nbsp;<i class="nz-icon nz-icon-arrow-down"></i></div>
<el-dropdown-menu slot="dropdown" class="right-public-box-select-top right-public-box-dropdown-top" style="width: 142px; line-height: 36px;">
<div class="personal-dropdown">
<div class="personal-dropdown__username">{{name}}</div>
<div class="personal-dropdown__name">@{{username}}</div>
<div class="personal-dropdown__username" :title="name">{{name}}</div>
<div class="personal-dropdown__name" :title="username">@{{username}}</div>
</div>
<el-dropdown-item>
<div id="header-to-profile" @click="showPinDialog"><i class="nz-icon nz-icon-user"></i>{{$t('overall.personalCenter')}}</div>

View File

@@ -223,7 +223,7 @@ export default {
state: '1',
dialogShowText: false,
dialogText: '',
url: 'alert/message',
url: '/alert/message/query',
// 导出相关
importBox: { show: false, title: this.$t('overall.exportExcel'), type: 1, record: 'all', format: 1 },
deleteBox: { show: false, ids: '', remark: '', state: 2 },
@@ -451,16 +451,53 @@ export default {
renderDefaultParams () {
const q = JSON.parse(this.$route.query.body)
this.state = q.state
this.searchTime[0] = this.momentTz(q.startAt)
this.searchTime[1] = this.momentTz(q.endAt)
this.searchTime[0] = q.startAt ? this.momentTz(q.startAt) : ''
this.searchTime[1] = q.endAt ? this.momentTz(q.endAt) : ''
this.searchTime[2] = q.timeType
switch (q.timeType) {
if (!q.startAt) {
this.searchTime[2] = 'all'
}
console.log(this.searchTime[2], this.searchTime[0], this.searchTime[1])
switch (this.searchTime[2]) {
case '5m' :
this.defaultPick = 1
break
case '15m' :
this.defaultPick = 2
break
case '30m' :
this.defaultPick = 3
break
case '1h' :
this.defaultPick = 4
break
case '3h' :
this.defaultPick = 5
break
case '6h' :
this.defaultPick = 6
break
case '12h' :
this.defaultPick = 7
break
case '1d' :
this.defaultPick = 8
break
case '24h' :
this.defaultPick = 8
break
case '2d' :
this.defaultPick = 9
break
case '7d' :
this.defaultPick = 10
break
case '30d' :
this.defaultPick = 11
break
case 'all' :
this.defaultPick = 12
break
default:
this.defaultPick = 0
}
@@ -806,11 +843,11 @@ export default {
if (this.searchTime && this.searchTime.length > 1 && this.searchTime[0] && this.searchTime[1]) {
this.$set(this.searchLabel.body, 'startAt', [bus.timeFormate(this.timezoneToUtcTime(bus.formateTimeToTime(this.searchTime[0])), 'YYYY-MM-DD HH:mm:ss')])
this.$set(this.searchLabel.body, 'endAt', [bus.timeFormate(this.timezoneToUtcTime(bus.formateTimeToTime(this.searchTime[1])), 'YYYY-MM-DD HH:mm:ss')])
this.$set(this.searchLabel.body, 'state', this.state)
} else {
delete this.searchLabel.startAt
delete this.searchLabel.endAt
delete this.searchLabel.body.startAt
delete this.searchLabel.body.endAt
}
this.$set(this.searchLabel.body, 'state', this.state)
if (this.$route.path === '/alertMessage') {
this.$set(this.searchLabel, 'statistics', 1)
}/* else {
@@ -827,8 +864,9 @@ export default {
const path = this.fromRoute.alertMessage
const routePathParams = this.$lodash.cloneDeep(param)
delete routePathParams.statistics
routePathParams.body.startAt = this.momentStrToTimestamp(this.searchTime[0])
routePathParams.body.endAt = this.momentStrToTimestamp(this.searchTime[1])
console.log(this.searchTime)
routePathParams.body.startAt = this.searchTime[0] ? this.momentStrToTimestamp(this.searchTime[0]) : ''
routePathParams.body.endAt = this.searchTime[1] ? this.momentStrToTimestamp(this.searchTime[1]) : ''
routePathParams.body.timeType = this.searchTime[2]
routePathParams.body = JSON.stringify(routePathParams.body)
this.updatePath(routePathParams, path)

View File

@@ -1,6 +1,6 @@
<template>
<span class="nz-alert-tag" :class="['nz-alert-tag_' + type]" :style="{cursor: cursorPoint ? 'default' : 'default'}" @click="$emit('click')">
<span class="nz-alert-tag__label"> {{label=='dc'?'datacenter':label}}</span>
<span class="nz-alert-tag__label" :title="label=='dc'?'datacenter':label"> {{label=='dc'?'datacenter':label}}</span>
<span class="nz-alert-tag__content"><span v-if="!!regex"> ~ </span> <slot></slot></span>
</span>
</template>

View File

@@ -51,7 +51,6 @@
</template>
<template v-slot="slotProps">
<softwareTypeTable
ref="dataTable"
:orderByFa="orderBy"
v-my-loading="tools.loading"

View File

@@ -34,6 +34,7 @@
:table-data="tableData"
@del="del"
@edit="edit"
@copy="copy"
@orderBy="tableDataSort"
@reload="getTableData"
@selectionChange="selectionChange"></menu-table>

View File

@@ -12,7 +12,7 @@
trigger="hover"
:content="userList.name">
<div slot="reference">
<span :class="(mfaEnable == '1' || mfaLevel > 0)?'MfaName':'name'">
<span :class="(mfaEnable == '1' || mfaLevel > 0)?'MfaName':'name'" :title="userList.username">
{{userList.name}}
</span>
<span class="profile-left__header-username-span" v-show="mfaEnable == '1' || mfaLevel > 0">2FA</span>
@@ -23,7 +23,7 @@
trigger="hover"
:content="'@' + userList.username">
<div slot="reference">
<span :class="(mfaEnable == '1' || mfaLevel > 0)?'MfaName':'name'">
<span :class="(mfaEnable == '1' || mfaLevel > 0)?'MfaName':'name'" :title="userList.username">
@{{userList.username}}
</span>
</div>

View File

@@ -5,7 +5,7 @@
<ul class="integration-list">
<li class="integration-item" @click="talonDetail">
<img class="integration-icon" :src="talon.icon" alt="">
<h2 class="integration-name">{{talon.name}}</h2>
<h2 class="integration-name" :title="talon.name">{{talon.name}}</h2>
<p class="integration-remark">{{talon.remark}}</p>
<!-- <div class="integration-internal">{{$t('integration.internal')}}</div>-->
</li>
@@ -38,7 +38,7 @@
<img :src="detailsObj.icon" alt="">
</div>
<div class="integration-dialog-introduce">
<h2 class="integration-name">{{detailsObj.name}}</h2>
<h2 class="integration-name" :title="detailsObj.name">{{detailsObj.name}}</h2>
<p class="integration-remark">{{$t(detailsObj.remark)}}</p>
</div>
</div>

View File

@@ -24,7 +24,7 @@
:label="item.name"
:value="item.id">
<div class="subnet-item">
<div class="subnet-item-left">{{item.name}}</div>
<div class="subnet-item-left" :title="item.name">{{item.name}}</div>
<div class="subnet-item-right">{{item.addr}}/{{item.mask}}</div>
</div>
</el-option>

View File

@@ -234,7 +234,7 @@ export default new Router({
},
{
path: '/softwareType',
component: resolve => require(['@/components/page/software/softwareType'], resolve)
component: resolve => require(['@/components/page/asset/software/softwareType'], resolve)
}
]
},