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

This commit is contained in:
zyh
2022-07-25 16:21:14 +08:00
24 changed files with 112 additions and 47 deletions

View File

@@ -390,6 +390,8 @@ td .nz-icon-gear:before {
padding: 0;
.link-title {
padding: 0 20px;
height: 100%;
display: block;
}
}
.el-icon-arrow-right {

View File

@@ -340,12 +340,12 @@
}
/* start--覆盖el-table边框、gutter等样式 */
.el-table__body-wrapper {
overflow: auto;
//overflow: auto;
background-color: $--table-body-background-color;
height: calc(100% - 42px) !important;
//height: calc(100% - 42px) !important;
}
.el-table__fixed-body-wrapper {
top: 42px !important;
//top: 42px !important;
}
.el-table__body-wrapper, .el-table__fixed-body-wrapper {
box-shadow: 1px 0 $--border-color-light;

View File

@@ -324,7 +324,7 @@
.project-box {
width: 100%;
height: calc(100% - 8px) !important;
height: calc(100% - 8px);
position: relative;
border-radius: 2px;
overflow: visible;

View File

@@ -21,5 +21,18 @@
.top-tool-btn.top-tool-btn--disabled:hover {
background-color: $--asset-bactch-btn-background-color;
}
.top-tool-btn {
cursor: pointer;
border: 1px solid $--button-icon-border-color;
outline: none;
border-radius: $--button-border-radius;
background-color: $--background-color-empty;
transition:all .2s;
color: $--button-icon-color;
i {
font-size: 14px;
color: $--button-icon-color;
}
}
}
}

View File

@@ -40,6 +40,7 @@
}
}
.check-month_box{
width: 100%;
.el-checkbox-group{
display: flex;
justify-content: start;
@@ -50,7 +51,7 @@
justify-content: center;
align-items: center;
width: calc(100% / 7);
margin-right: -2px;
margin-right: -3px;
margin-bottom: -1px;
border: 1px solid $--border-color-light;
.el-checkbox-button__inner{

View File

@@ -127,6 +127,7 @@ export default {
...item,
x: colIndex,
y: rowIndex,
metrics: item.label,
label: item.legend
}
})
@@ -250,10 +251,10 @@ export default {
const textColor = point.mapping ? point.mapping.color.text : this.invertColor(color)
if (this.chartInfo.param.text === 'all') {
str += point.alias
valueStr = point.mapping && point.mapping.display ? self.handleDisplay(point.mapping.display, { ...point.labels, value: point.showValue }) : point.showValue
valueStr = point.mapping && point.mapping.display ? self.handleDisplay(point.mapping.display, { ...point.metrics, value: point.showValue }) : point.showValue
}
if (this.chartInfo.param.text === 'value' || !this.chartInfo.param.text) {
valueStr = point.mapping && point.mapping.display ? self.handleDisplay(point.mapping.display, { ...point.labels, value: point.showValue }) : point.showValue
valueStr = point.mapping && point.mapping.display ? self.handleDisplay(point.mapping.display, { ...point.metrics, value: point.showValue }) : point.showValue
}
if (this.chartInfo.param.text === 'legend') {
str += point.alias

View File

@@ -309,7 +309,7 @@ export default {
const elWidth = el.offsetWidth
const elHeight = el.offsetHeight
const dimension = Math.min(item.width, item.height * 1.3)
const fontScale = parseInt('80%', 10) / 100
const fontScale = parseInt('70%', 10) / 100
let fontSize = Math.min(dimension / 5, 100) * fontScale
let scale = item.width / elWidth
if (scale * elHeight > item.height) {

View File

@@ -36,7 +36,7 @@
{{showValueMapping(scope.row,col.title)}}
</div>
<div class="value-mapping-table" v-else>
{{scope.row.display[col.title + 'display']}}
{{scope.row.display[col.title + 'display'].display}}
</div>
</template>
</el-table-column>
@@ -172,7 +172,7 @@ export default {
if (this.chartInfo.param.enable && this.chartInfo.param.enable.valueMapping) {
valueMapping[column.title].forEach(item => {
// const rowValue = row.display[column.title + 'display']
const rowValue = row.display[column.title + 'display']
const rowValue = row.display[column.title + 'display'].oldValue
if (item.type === 'value') {
if (rowValue == item.value) {
obj[column.title + 'mapping'] = item
@@ -201,7 +201,10 @@ export default {
...row
}
this.columns.forEach((column) => {
obj[column.title + 'display'] = ''
obj[column.title + 'display'] = {
display: '',
oldValue: ''
}
if (/\{\{.+\}\}/.test(column.display)) {
const labelValue = column.display.replace(/(\{\{.+?\}\})/g, function (i) {
const label = i.substr(i.indexOf('{{') + 2, i.indexOf('}}') - i.indexOf('{{') - 2)
@@ -233,9 +236,42 @@ export default {
}
return value || ''
})
obj[column.title + 'display'] = labelValue
const oldLabelValue = column.display.replace(/(\{\{.+?\}\})/g, function (i) {
const label = i.substr(i.indexOf('{{') + 2, i.indexOf('}}') - i.indexOf('{{') - 2)
let value = null
if (lodash.get(params, label)) {
value = lodash.get(params, label)
if (!((typeof value) == 'string' && value.constructor == String)) {
let legend = ''
if (value.__name__) {
legend += `${value.__name__}{`
} else {
legend += '{'
}
const tagKeysArr = Object.keys(value)
tagKeysArr.forEach(tagKey => {
if (tagKey !== '__name__') {
legend += `${tagKey}="${value[tagKey]}",`
}
})
if (legend.endsWith(',')) {
legend = legend.substr(0, legend.length - 1)
}
legend += '}'
value = legend
}
}
return value || ''
})
obj[column.title + 'display'] = {
display: labelValue,
oldValue: oldLabelValue
}
} else {
obj[column.title + 'display'] = column.display
obj[column.title + 'display'] = {
display: column.display,
oldValue: column.display
}
}
})
return obj
@@ -291,8 +327,8 @@ export default {
// 本地正序
asce (prop) {
return function (obj1, obj2) {
const val1 = obj1.display[prop + 'display'].replace(/\s*/g, '')
const val2 = obj2.display[prop + 'display'].replace(/\s*/g, '')
const val1 = obj1.display[prop + 'display'].display.replace(/\s*/g, '')
const val2 = obj2.display[prop + 'display'].display.replace(/\s*/g, '')
if (val1 < val2) {
return -1
} else if (val1 > val2) {
@@ -305,8 +341,8 @@ export default {
// 本地倒序
desc (prop) {
return function (obj1, obj2) {
const val1 = obj1.display[prop + 'display'].replace(/\s*/g, '')
const val2 = obj2.display[prop + 'display'].replace(/\s*/g, '')
const val1 = obj1.display[prop + 'display'].display.replace(/\s*/g, '')
const val2 = obj2.display[prop + 'display'].display.replace(/\s*/g, '')
if (val1 < val2) {
return -1
} else if (val1 > val2) {

View File

@@ -1152,7 +1152,6 @@ export default {
if (!Array.isArray(data) && data) { // 判断不是数组 提前个data配置好节点属性
if (data.type == 0 && !data.data.valueMapping) {
data.data = {
...data.data,
moduleId: '',
moduleName: '',
show: false,
@@ -1190,7 +1189,8 @@ export default {
displayChart: true,
aggregation: 'last',
title: '',
url: ''
url: '',
...data.data
}
if (data.iconFamily) {
data.data.fillStyle = 'transparent'

View File

@@ -124,7 +124,7 @@ export default {
delete labelPosition.left
labelPosition.right =
clientWidth - position.left - leftOffSetView - position.width * 4 + 'px'
clientWidth - position.left - leftOffSetView - position.width * 3.3 + 'px'
}
return labelPosition
}

View File

@@ -77,7 +77,7 @@ export default {
batchHandler (state) {
for (let index = 0; index < this.custom.length; index++) {
if (this.custom[index].type != 'title') {
if ((index == 0 || index == 1 || this.custom[index].NotSet)) {
if ((index == 0 || index == 1 || this.custom[index].NotSet || this.custom[index].visibility == 'disabled')) {
this.custom[index].show = true
} else {
this.custom[index].show = state
@@ -87,7 +87,7 @@ export default {
},
// 单选
handler (val, index) {
if (!this.allowedAll && !val.allowed && (index == 0 || index == 1 || val.NotSet)) {
if (!this.allowedAll && !val.allowed && (index == 0 || index == 1 || val.NotSet || val.visibility == 'disabled')) {
// this.custom[index].show = true;
} else {
this.custom[index].show = !this.custom[index].show

View File

@@ -24,7 +24,7 @@
</div>
</template>
<template v-if="activeIndex === 1">
<div class="desc-text">{{$t('overall.agentTip')}}</div>
<div class="desc-text">{{$t('guide.agentTip')}}</div>
<div class="guide__btn-group">
<button :class="{'guide__btn--disabled': !hasButton('agent_add')}" class="guide__btn" type="button" @click="jumpAndOpen('agent')">{{$t('overall.createPrometheusServer')}}</button>
<button :class="{'guide__btn--disabled': !hasButton('agent_add')}" class="guide__btn" type="button" @click="downloadAgent">{{$t('guide.downloadAgent')}}</button>

View File

@@ -82,7 +82,7 @@
<div style="width: 100%;margin: 10px 0; box-sizing: border-box; padding: 0 10px;">
<div class="thresholds-box">
<el-row class="thresholds-title">
<el-col :span="4" class="thresholds-cell">{{ $t('alert.severity') }}
<el-col :span="5" class="thresholds-cell">{{ $t('alert.severity') }}
<span @click="changeValueMappingSort">
<i
:class="['nz-icon','nz-icon-arrow-up1',selection.pen.data.valueMappingSort==='desc'?'is-arrow-active':'']"></i>
@@ -92,12 +92,12 @@
</el-col>
<el-col :span="4" class="thresholds-cell">{{ $t('project.topology.color') }}</el-col>
<el-col :span="6" class="thresholds-cell">{{ $t('overall.value') }}</el-col>
<el-col :span="8" class="thresholds-cell">{{ $t('project.topology.animation') }}</el-col>
<el-col :span="7" class="thresholds-cell">{{ $t('project.topology.animation') }}</el-col>
<el-col :span="2" class="thresholds-cell"></el-col>
</el-row>
<el-row v-for="(item,index) in selection.pen.data.valueMapping" :key="index">
<el-col :span="4" class="thresholds-cell">
<el-col :span="5" class="thresholds-cell">
<span v-if="selection.pen.data.valueMappingSort==='desc'">
{{ index === 0 ? selection.pen.data.valueMapping.length - 1 : (item.level - 1) }}
</span>
@@ -127,7 +127,7 @@
</el-input>
<span v-else>base</span>
</el-col>
<el-col :span="8" class="thresholds-cell">
<el-col :span="7" class="thresholds-cell">
<!--线-->
<el-select v-if="selection.pen&&selection.pen.type&&item.level!==0"
v-model="item.animateType"
@@ -242,7 +242,7 @@
<template>
<el-col class="legend-title">
{{ $t('dashboard.panel.chartForm.legend') }}&nbsp;
<el-popover placement="top" trigger="hover" width="211">
<el-popover placement="top" trigger="hover" width="211" popper-class="prevent-clickoutside">
<div style="word-break:keep-all;">{{ $t('dashboard.panel.chartForm.legendTip') }}</div>
<i slot="reference" class="nz-icon nz-icon-info-normal" style="font-size: 14px; -webkit-transform:scale(0.75);display:inline-block;"
@mouseover="rz"></i>
@@ -257,7 +257,7 @@
<span class="nz-icon-minus-medium" :title="$t('overall.delete')">
<i class="nz-icon nz-icon-minus" @click="removeExpression(index)"></i>
</span>
<span class="nz-icon-copy" :title="$t('overall.duplicate')">
<span class="nz-icon-copy" :title="$t('overall.duplicate')" style="padding: 2px 6px">
<i class="nz-icon nz-icon-override" @click="copyExpression(index)"></i>
</span>
</div>
@@ -422,6 +422,7 @@
<div>{{ $t('project.topology.gradient') }}</div>
<div class="p10 pl0 gradient-to">
<el-select :popper-append-to-body="true" v-model="selection.pen.gradientType" size="small"
:placeholder="''"
class="color-before-select" popper-class="color-before-select right-box-select-top right-public-box-dropdown-top" @change="bkTypeChange">
<div slot="prefix">
<i
@@ -1201,7 +1202,7 @@ export default {
nodesAlign: [// 对齐方式
{
value: 'left',
desc: this.$t('ashboard.panel.chartForm.alignList.left')
desc: this.$t('overall.left')
}, {
value: 'right',
desc: this.$t('dashboard.panel.chartForm.alignList.right')
@@ -1370,7 +1371,7 @@ export default {
textAlignOptions: [
{
id: 'left',
name: this.$t('ashboard.panel.chartForm.alignList.left')
name: this.$t('overall.left')
},
{
id: 'center',

View File

@@ -1221,7 +1221,6 @@ export default {
data.fillStyle = '#FFFFFF00'
}
data.data = {
...data.data,
moduleId: '',
moduleName: '',
show: false,
@@ -1258,7 +1257,8 @@ export default {
displayChart: true,
aggregation: 'last',
title: '',
url: ''
url: '',
...data.data
}
} else if (data.type == 1 && !data.data) {
// 连线是否自动计算锚点

View File

@@ -137,7 +137,7 @@ export default {
if (value === '' && this.editUser.pin) {
callback(new Error(this.$t('config.user.reinputPin')))
} else if (value !== this.editUser.pin) {
callback(new Error(this.$t('profile.confirmPasswordErr')))
callback(new Error(this.$t('profile.confirmPasswordError')))
} else {
callback()
}

View File

@@ -575,6 +575,7 @@
<div class="chart-title chart-title-config">
<span class="chart-title-content">
<i class="nz-icon nz-icon-arrow-down" :class="item.show?'':'is-active'" @click="showMapping(index)"></i>
<span v-if="item.column && !item.show">{{item.column}}:</span>
<span v-show="!item.show" class="title-content-left">
<span v-if="item.type === 'value'">
{{item.value}}

View File

@@ -528,6 +528,7 @@
<div class="chart-title chart-title-config">
<span class="chart-title-content">
<i class="nz-icon nz-icon-arrow-down" :class="item.show?'':'is-active'" @click="showMapping(index)"></i>
<span v-if="item.column && !item.show">{{item.column}}:</span>
<span v-show="!item.show" class="title-content-left">
<span v-if="item.type === 'value'">
{{item.value}}

View File

@@ -252,11 +252,14 @@
size="small"
v-model="editPanel.param.report.schedule.repeat"
id="chart-box-title"
v-if="isShow === 2 ? true :false">
v-if="isShow === 2 ? true :false" key="2">
<template slot="append">{{ $t("backup.day") }}</template>
</el-input>
</el-form-item>
<el-form-item v-if="isShow === 3 ? true : false" :label='$t("backup.WeekOn")' class="range-time" prop="param.report.schedule.nums">
<el-form-item v-if="isShow === 3 ? true : false"
:rules="isShow === 3 ? [
{ required: true, message: $t('validate.required'), trigger: 'change'}] :[{ required: false}]"
:label='$t("backup.WeekOn")' class="range-time" prop="param.report.schedule.nums" key="3">
<el-checkbox-group
v-model="editPanel.param.report.schedule.nums">
<el-checkbox-button
@@ -267,11 +270,13 @@
</el-checkbox-group>
</el-form-item>
<el-form-item
v-show="isShow === 4 ? true : false"
v-if="isShow === 4 ? true : false"
:rules="isShow === 4 ? [
{ required: true, message: $t('validate.required'), trigger: 'change'}] :[{ required: false}]"
:label="$t('backup.DayOfMonth')"
prop="param.report.schedule.nums"
class="check-month_box"
id="day-of-month"
id="day-of-month" key="4"
>
<el-checkbox-group v-model="editPanel.param.report.schedule.nums">
<el-checkbox-button
@@ -352,13 +357,13 @@ export default {
message: this.$t('validate.required')
}, { validator: datePicker, trigger: 'blur' }],
'param.report.receivers': [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' },
{ validator: arrLength, trigger: 'blur' }
],
'param.report.schedule.nums': [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' },
{ required: true, message: this.$t('validate.required'), trigger: 'change' },
{ validator: arrLength, trigger: 'blur' }
]
// 'param.report.schedule.nums': [
// { required: true, message: this.$t('validate.required'), trigger: 'blur' },
// { validator: arrLength, trigger: 'blur' }
// ]
},
week: [
this.$t('week.Mon'),

View File

@@ -142,7 +142,6 @@
</template>
</el-table-column>
<el-table-column
:resizable="false"
v-if="showOption"
:width="operationWidth"
fixed="right">

View File

@@ -45,7 +45,7 @@
<span v-else-if="item.prop === 'ts'">{{scope.row[item.prop]?momentTz(scope.row[item.prop]):'-'}}</span>
<span v-else-if="item.prop === 'status'">
<!-- <el-popover :content="$t('asset.assetStatPre')+(scope.row.checkTime?utcTimeToTimezoneStr(scope.row.checkTime):$t('asset.assetStatDown'))" placement="right" trigger="hover" width="200"> -->
<div slot="reference" style="width: 60px" @mouseenter="labelHover(JSON.parse(scope.row.statusInfo), 'agent', true, $event)"
<div slot="reference" style="width: 80px" @mouseenter="labelHover(JSON.parse(scope.row.statusInfo), 'agent', true, $event)"
@mouseleave="labelHover(JSON.parse(scope.row.statusInfo), 'agent', false)">
<span :class="{'active-icon green-bg':scope.row[item.prop] == '1','active-icon red-bg':scope.row[item.prop] == '0' || scope.row[item.prop] == '-1' || scope.row[item.prop] == '-2'}"></span>
<span>{{scope.row[item.prop] == '1' ? 'UP' : 'Down'}}</span>

View File

@@ -14,8 +14,8 @@
<el-dropdown trigger="click">
<div class="header-menu__item" :title="$t('config.system.link.link')"><i class="nz-icon nz-icon-more-app"></i></div>
<el-dropdown-menu slot="dropdown" class="right-box-select-top right-public-box-dropdown-top el-dropdown-menu-link">
<el-dropdown-item v-for="(item, index) in linkData" :key="index" :index="'0-' + index" v-if="linkData.length">
<a :href='item.url' rel="noopener noreferrer" target="_blank" class="link-title nz- a">
<el-dropdown-item v-for="(item, index) in linkData" :key="index" :index="'0-' + index" v-if="linkData.length" class="el-dropdown-menu-link-item">
<a :href='item.url' rel="noopener noreferrer" target="_blank" class="link-title nz-a">
<i class="nz-icon nz-icon-link"></i>
<span class="nz- a">{{item.name}}</span>
</a>

View File

@@ -114,6 +114,7 @@ export default {
}, {
label: 'URL',
prop: 'url',
visibility: 'disabled',
show: true
}
],

View File

@@ -123,10 +123,12 @@ export default {
}, {
label: this.$t('webshell.filePath'),
prop: 'filePath',
visibility: 'disabled',
show: true
}, {
label: this.$t('config.system.notification.account'),
prop: 'account',
visibility: 'disabled',
show: true
}, {
label: this.$t('overall.state'),

View File

@@ -200,6 +200,7 @@ export default {
param: {
report: {
enable: false,
receivers: [],
range: {
unit: ''
},
@@ -460,6 +461,7 @@ export default {
param: {
report: {
enable: false,
receivers: [],
range: {
unit: 'day'
},