feat: 添加批量新增的页面

This commit is contained in:
zhangyu
2021-08-04 16:55:11 +08:00
parent b64d242458
commit 6dd7c9c279
12 changed files with 574 additions and 150 deletions

View File

@@ -21,7 +21,7 @@
<el-collapse-item :title="item.group" :name="item.group"> <el-collapse-item :title="item.group" :name="item.group">
<template slot="title"> <template slot="title">
<div style="display: flex;width: 100%;"> <div style="display: flex;width: 100%;">
<i class="nz-icon nz-icon-caret-right"></i> <div style="flex: 1">{{item.group}}</div> <i class="nz-icon nz-icon-delete title-delete" @click="tooltipDeleteTitle(item)"></i> <i class="nz-icon nz-icon-arrow-right"></i> <div style="flex: 1">{{item.group}}</div> <i class="nz-icon nz-icon-delete title-delete" @click="tooltipDeleteTitle(item)"></i>
</div> </div>
</template> </template>
<div v-for="(btn, i) in item.children" :key="'info2'+'-'+index+'-'+i" class="buttons" :title="btn.data.text"> <div v-for="(btn, i) in item.children" :key="'info2'+'-'+index+'-'+i" class="buttons" :title="btn.data.text">

View File

@@ -76,6 +76,7 @@ const cn = {
createProject: '新增系统', createProject: '新增系统',
createEndpoint: '新增 Endpoint', createEndpoint: '新增 Endpoint',
batchEndpoint: '批量修改Endpoint', batchEndpoint: '批量修改Endpoint',
batchAddEndpoint: '批量新增 Endpoint',
createAsset: '新增资产', createAsset: '新增资产',
createAlertRule: '新增告警规则', createAlertRule: '新增告警规则',
createAlertSilence: '新增告警规则', createAlertSilence: '新增告警规则',
@@ -144,7 +145,8 @@ const cn = {
tempPrev: '模板预览', tempPrev: '模板预览',
silenceAlert: '告警静默', silenceAlert: '告警静默',
quickSilent: '快速静默', quickSilent: '快速静默',
configEndpoint: '配置' configEndpoint: '配置',
generate: '生产'
}, },
setup: { setup: {
step0: '欢迎', step0: '欢迎',
@@ -1298,6 +1300,7 @@ const cn = {
editEndpoint: '修改 Endpoint', editEndpoint: '修改 Endpoint',
createEndpoint: '新增 Endpoint', createEndpoint: '新增 Endpoint',
batchEndpoint: '批量 Endpoint', batchEndpoint: '批量 Endpoint',
batchAddEndpoint: '批量新增 Endpoint',
endpointName: 'Endpoint name', endpointName: 'Endpoint name',
name: '名称' name: '名称'
}, },

View File

@@ -82,6 +82,7 @@ const en = {
createProject: 'New project', createProject: 'New project',
createEndpoint: 'New endpoint', createEndpoint: 'New endpoint',
batchEndpoint: 'Batch modify endpoint', batchEndpoint: 'Batch modify endpoint',
batchAddEndpoint: 'Batch new endpoint',
createAsset: 'New asset', createAsset: 'New asset',
createAlertRule: 'New alert rule', createAlertRule: 'New alert rule',
createAlertSilence: 'New alert silence', createAlertSilence: 'New alert silence',
@@ -149,7 +150,8 @@ const en = {
tempPrev: 'Template preview', tempPrev: 'Template preview',
silenceAlert: 'silence alert', silenceAlert: 'silence alert',
quickSilent: 'Quick silent', quickSilent: 'Quick silent',
configEndpoint: 'Config' configEndpoint: 'Config',
generate: 'Generate'
}, },
pageSize: '/page', pageSize: '/page',
setup: { setup: {
@@ -1297,7 +1299,8 @@ const en = {
asset: 'Asset', asset: 'Asset',
editEndpoint: 'Edit endpoint', editEndpoint: 'Edit endpoint',
createEndpoint: 'New endpoint', createEndpoint: 'New endpoint',
batchEndpoint: 'Batch Endpoint', batchEndpoint: 'Batch endpoint',
batchAddEndpoint: 'Batch new endpoint',
endpointName: 'Endpoint', endpointName: 'Endpoint',
name: 'Name', name: 'Name',
tip: { tip: {

View File

@@ -134,6 +134,7 @@ export default {
<style lang="scss"> <style lang="scss">
.select-walk-tree { .select-walk-tree {
height: 350px; height: 350px;
overflow-y: auto;
} }
.select-walk-tree .el-tree-node__content { .select-walk-tree .el-tree-node__content {
height: 34px; height: 34px;
@@ -181,4 +182,5 @@ export default {
top: 50%; top: 50%;
transform: translate(10px, -50%); transform: translate(10px, -50%);
} }
</style> </style>

View File

@@ -2495,4 +2495,7 @@ export default {
/deep/ .metric-selector-title { /deep/ .metric-selector-title {
background: #fff !important; background: #fff !important;
} }
/deep/ .el-collapse-item__arrow.el-icon-arrow-right{
display: inline-block !important;
}
</style> </style>

View File

@@ -1,11 +1,14 @@
/deep/ .el-collapse-item .is-active .nz-icon-caret-right{ /deep/ .el-collapse-item__arrow.el-icon-arrow-right{
display: none !important;
}
/deep/ .el-collapse-item .is-active .nz-icon-arrow-right{
transform: rotate(90deg); transform: rotate(90deg);
color: #FA901C; color: #FA901C;
} }
/deep/ .el-collapse-item .title-delete{ /deep/ .el-collapse-item .title-delete{
display: none; display: none;
} }
/deep/ .el-collapse-item .nz-icon-caret-right{ /deep/ .el-collapse-item .nz-icon-arrow-right{
transition: transform .3s; transition: transform .3s;
color: #BEBEBE; color: #BEBEBE;
margin-right: 5px; margin-right: 5px;
@@ -14,7 +17,7 @@
.el-collapse-item__header{ .el-collapse-item__header{
color: #FA901C; color: #FA901C;
} }
.nz-icon-caret-right{ .nz-icon-arrow-right{
color: #FA901C; color: #FA901C;
} }
.title-delete{ .title-delete{

View File

@@ -21,7 +21,7 @@
<el-collapse-item :title="item.group" :name="item.group"> <el-collapse-item :title="item.group" :name="item.group">
<template slot="title"> <template slot="title">
<div style="display: flex;width: 100%;"> <div style="display: flex;width: 100%;">
<i class="nz-icon nz-icon-caret-right"></i> <div style="flex: 1">{{item.group}}</div> <i class="nz-icon nz-icon-delete title-delete" @click="tooltipDeleteTitle(item)"></i> <i class="nz-icon nz-icon-arrow-right"></i> <div style="flex: 1">{{item.group}}</div> <i class="nz-icon nz-icon-delete title-delete" @click="tooltipDeleteTitle(item)"></i>
</div> </div>
</template> </template>
<div v-for="(btn, i) in item.children" :key="'info2'+'-'+index+'-'+i" class="buttons"> <div v-for="(btn, i) in item.children" :key="'info2'+'-'+index+'-'+i" class="buttons">

View File

@@ -0,0 +1,426 @@
<template>
<div class="right-box right-box-modify-endpoint" v-clickoutside="{obj:endpoint,func:clickOutside}">
<div class="right-box__header">
<!-- begin--标题-->
<div class="header__title">{{$t("overall.batchAddEndpoint")}}</div>
<!-- end--标题-->
<div class="header__operation">
<span v-cancel="{obj: endpoint, func: esc}"><i class="nz-icon nz-icon-close"></i></span>
</div>
</div>
<!-- begin--表单-->
<div class="right-box-form-box right-box__container" style="overflow: hidden;padding-left: 20px;margin-top: 0">
<div class="container__form">
<el-form class="right-box-form" label-position = "top" ref="addEndpoint" :model="endpoint" :rules="rules">
<el-form-item :label="$t('project.module.module')" prop="ChartTemplate">
<v-selectpage
:data="moduleList"
:tb-columns="ChartSearchShowFields"
:params="{
varType: 2, panelId: 0,
returnChildren:0,groupId:0,
}"
:multiple="true"
:language="language"
title="ChartSearch"
key-field="id"
show-field="name"
v-model="moduleIds"
class="form-control"
:result-format="resultFormat"
></v-selectpage>
</el-form-item>
<el-form-item :label="$t('asset.asset')" prop="ChartTemplate">
<v-selectpage
:data="assetDataList"
:tb-columns="ChartSearchShowFields"
:params="{
varType: 2, panelId: 0,
returnChildren:0,groupId:0,
}"
:multiple="true"
:language="language"
title="ChartSearch"
key-field="id"
show-field="name"
v-model="assetIds"
class="form-control"
:result-format="resultFormat"
></v-selectpage>
</el-form-item>
</el-form>
<el-table
:data="tableData"
:height="400"
v-if="tableData.length"
style="width:calc(100% - 55px)"
border>
<el-table-column
v-for="(item, index) in endpointTableTitle"
v-if="item.show"
:key="`col-${index}`"
:fixed="item.fixed"
:label="item.label"
:min-width="`${item.minWidth}`"
:prop="item.prop"
:resizable="true"
:sort-orders="['ascending', 'descending']"
:width="`${item.width}`"
class="data-column"
>
<template slot="header">
<span>{{item.label}}</span>
<div class="col-resize-area"></div>
</template>
<template slot-scope="scope" :column="item">
<template v-if="item.prop === 'name'">
{{scope.row[item.prop]}}
</template>
<template v-else-if="item.prop === 'asset'">
{{scope.row.asset?scope.row.asset.name : '' }}
</template>
<template v-else-if="item.prop === 'project'">
{{scope.row.project?scope.row.project.name : '' }}
</template>
<template v-else-if="item.prop === 'module'">
{{scope.row.module?scope.row.module.name : '' }}
</template>
<template v-else-if="item.prop == 'configs'">
<el-tooltip placement="left" effect="light" :popper-class="'endpointConfigsTips'">
<span class="configs-endpoint">{ ... }</span>
<div class="endpointConfigsTips" slot="content">
<pre >{{JSON.stringify(scope.row[item.prop],null,2)}}</pre>
</div>
</el-tooltip>
</template>
<template v-else>1</template>
</template>
</el-table-column>
<el-table-column
:resizable="false"
:width="80"
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="del(scope.row, scope.$index)"><i class="nz-icon nz-icon-minus"></i></button>
<button class="table-operation-item" @click="edit(scope.row, scope.$index)"><i class="nz-icon nz-icon-edit"></i></button>
</div>
</el-table-column>
</el-table>
</div>
</div>
<!--底部按钮-->
<div class="right-box__footer">
<button v-cancel="{obj:endpoint,func:esc}" id="ep-esc" class="footer__btn footer__btn--light">
<span>{{$t('overall.cancel')}}</span>
</button>
<button @click="generate" id="ep-generate" class="footer__btn footer__btn--light">
<span>{{$t('overall.generate')}}</span>
</button>
<button @click="save" class="footer__btn" id="ep-add">
<span>{{$t('overall.save')}}</span>
</button>
</div>
<!-- edit endpoint-->
<transition name="right-box">
<edit-endpoint-box-new v-if="rightBox.show" :module="object" @close="closeRightBox" :disabled="true" :type="'add'" :optionType="optionType"></edit-endpoint-box-new>
</transition>
</div>
</template>
<script>
import editEndpointBoxNew from './editEndpointBoxNew'
export default {
name: 'batchAddEndpointBox',
props: {
currentProject: Object,
currentModule: Object,
selectEndpointList: Array
},
components: {
'edit-endpoint-box-new': editEndpointBoxNew
},
data () {
return {
rules: {
projectId: [
{ required: true, message: this.$t('validate.required'), trigger: 'change' }
],
moduleId: [
{ required: true, message: this.$t('validate.required'), trigger: 'change' }
]
},
moduleIds: '',
assetIds: '',
assetDataList: [],
moduleList: [],
language: localStorage.getItem('nz-language'),
ChartSearchShowFields: [ // ChartSearch 下拉搜索表头
{ title: 'ID', data: 'id' },
{ title: this.$t('config.model.titleName'), data: 'name' },
{ title: this.$t('overall.remark'), data: 'remark' }
],
object: {},
vendorAndModelOptionData: [],
paramBorderColor: '#dcdfe6',
endpointTouch: false,
endpoint: { projectId: '', moduleId: '', endpointList: [] },
currentModuleCopy: {},
currentProjectCopy: { id: '' },
tempParamObj: [],
tempLabelModule: [],
inputKeyErr: [],
tempEndpoint: {},
tempEndpoint2: {},
assetLoading: true,
rightBox: { show: false, title: this.$t('project.endpoint.createEndpoint'), isEdit: false },
optionType: 'add',
tableData: [],
endpointTableTitle: [ // 原始table列
{
label: this.$t('project.endpoint.name'),
prop: 'name',
show: true
},
{
label: this.$t('overall.project'),
prop: 'project',
show: true
},
{
label: this.$t('project.module.module'),
prop: 'module',
show: true
},
{
label: this.$t('project.endpoint.asset'),
prop: 'asset',
show: true
},
{
label: this.$t('project.endpoint.configs'),
prop: 'configs',
show: true
}
]
}
},
methods: {
clickOutside () {
this.esc(false)
},
/* 关闭弹框 */
esc (refresh) {
this.prevent_opt.save = false
this.$emit('close', refresh)
},
// 获取endpoint弹框中module下拉框数据
getModuleList () {
this.$get('monitor/module', { projectIds: '', pageSize: -1 }).then(response => {
if (response.code === 200) {
this.moduleList = response.data.list
}
})
},
// 获取endpoint弹框中的asset子弹框里asset列表数据
getAssetList () {
this.assetLoading = true
const params = {
pageSize: -1
}
this.$get('asset/asset', params).then(response => {
if (response.code === 200) {
this.assetDataList = response.data.list
}
}).finally(() => {
setTimeout(() => {
this.assetLoading = false
}, 200)
})
},
generate () {
if (!this.assetIds || !this.moduleIds) {
this.$message.error('Please select module or asset')
}
const res = {
code: 200,
msg: 'success',
data: {
list: [{
name: 'module+asset',
module: {
id: 2,
name: 'aaa'
},
project: {
id: 5,
name: 'aaa'
},
asset: {
id: 1,
name: 'aaa'
},
chartIds: '688355',
configs: [
{ type: 'metrics', config: { protocol: 'HTTP', scrape_interval: 30, scrape_timeout: 10, host: '192.168.40.1', port: 9090, metrics_path: '/metric', params: { module: ['cpu', 'memory'] }, basic_auth: { username: 'zhangsan', password: 'lisi' }, bearer_token: 'yiduanwenzi', labels: { datacenter: 'bj', module: 'mysql' } }, enable: 1 },
{
type: 'logs',
config: [
{
type: 'file',
fileName: '/var/logs/mysqld.log',
labels: { datacenter: 'bj', module: 'mysql' },
pipeline: [
{ type: 'regex', expression: 'ad?!*', source: '' },
{ type: 'json', expressions: [{ abc: 'abc', level: 'config' }], source: '' },
{ type: 'template', template: 'ad?!*', source: '' },
{ type: 'timestamp', format: 'RFC822Z', source: '' },
{ type: 'labels', labels: [{ abc: 'abc', level: 'config' }] },
{ type: 'output', source: 'content' }
]
},
{ type: 'syslog', listenAddress: '0.0.0.0:9100', appName: 'sapp' },
{ type: 'journal', unit: 'nzagent.service' }
],
enable: 1
}]
}
]
}
}
this.tableData = res.data.list
// this.$post('/monitor/endpoint/render', { moduleIds: this.moduleIds, assetIds: this.assetIds }).then(res => {
// console.log(res)
// this.tableData = res.data.list
// })
},
// 保存endpoint
save () {
if (this.prevent_opt.save) { return } ;
this.prevent_opt.save = true
// 对endpointList进行处理避免携带过多无用数据
const endpointList = []
this.endpointTableData.forEach((item, index) => {
const endpoint = {
moduleId: item.moduleId,
assetId: item.assetId,
name: item.name,
configs: JSON.stringify(item.configs),
id: item.id
}
endpointList.push(endpoint)
})
this.$refs.addEndpoint.validate((valid) => {
if (valid) {
this.$put('monitor/endpoint', endpointList).then(response => {
this.prevent_opt.save = false
if (response.code === 200) {
this.$message({ duration: 1000, type: 'success', message: this.$t('tip.saveSuccess') })
this.esc(true)
} else {
this.$message.error(response.msg)
}
})
} else {
this.prevent_opt.save = false
return false
}
})
},
resultFormat (resp) {
if (resp && resp.data) {
const assetData = {}
assetData.list = resp.data.list
assetData.totalRow = resp.data.total
return assetData
}
},
closeRightBox (isEdit, endpoint, isAll) {
this.rightBox.show = false
if (!isEdit) { return }
if (isAll) {
Object.keys(this.blankEndpoint).forEach(key => {
this.blankEndpoint[key] = endpoint[key]
})
} else {
this.endpointTableData.forEach((item, index) => {
if (item.id === endpoint.id) {
this.endpointTableData[index] = { ...endpoint }
}
})
this.endpointTableData = [...this.endpointTableData]
}
},
del () {
},
edit (row) {
this.object = row
// this.object.configs = JSON.parse(this.object.configs)
this.object.projectId = this.object.project.id
this.object.moduleId = this.object.module.id
this.object.assetName = this.object.asset.name
this.object.configs.walk = this.object.configs.walk ? JSON.parse(JSON.stringify(this.object.configs.walk)) : []
this.object.port = this.object.configs.port ? JSON.parse(JSON.stringify(this.object.configs.port)) : ''
this.object.paramObj = []
this.object.labelModule = []
this.object.configs[1].config.forEach(item => {
item.labelModule = []
if (JSON.stringify(item.labels) !== '{}' && item.labels) {
Object.keys(item.labels).forEach(key => {
item.labelModule.push({ key, value: item.labels[key] })
})
} else {
item.labelModule.push({ key: '', value: '' })
}
item.pipeline && item.pipeline.forEach((pipeline) => {
if (pipeline.type === 'labels') {
const labelsArr = []
if (JSON.stringify(pipeline.labels) !== '{}' && pipeline.labels) {
Object.keys(pipeline.labels).forEach(key => {
labelsArr.push({ key, value: pipeline.labels[key] })
})
} else {
labelsArr.push({ key: '', value: '' })
}
pipeline.labels = labelsArr
}
})
if (!item.pipeline) {
item.pipeline = []
}
})
if (JSON.stringify(this.object.configs[0].config.labels) !== '{}' && this.object.configs[0].config.labels) {
Object.keys(this.object.configs[0].config.labels).forEach(key => {
this.object.labelModule.push({ key, value: this.object.configs[0].config.labels[key] })
})
} else {
this.object.labelModule.push({ key: '', value: '' })
}
if (JSON.stringify(this.object.configs[0].config.params) !== '{}' && this.object.configs[0].config.params) {
Object.keys(this.object.configs[0].config.params).forEach(key => {
this.object.paramObj.push({ key, value: this.object.configs[0].config.params[key] })
})
} else {
this.object.paramObj.push({ key: '', value: [] })
}
if (!this.object.chartIds) {
this.object.chartIds = ''
} else {
// this.object.chartIds = this.object.chartIds.split(',')
}
this.rightBox.show = true
this.rightBox.show = true
}
},
created () {
this.getModuleList()
this.getAssetList()
},
watch: {
}
}
</script>

View File

@@ -30,7 +30,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<!--module--> <!--module-->
<el-form-item :label='$t("project.module.module")' prop="remark"> <el-form-item :label='$t("project.module.module")' prop="moduleId">
<el-select @change="renderEndpoint" id="module-box-input-module" v-model="editEndpoint.moduleId" :disabled="!editEndpoint.projectId || disabled " class="right-box__select" placeholder="" popper-class="right-box-select-dropdown prevent-clickoutside" size="small" value-key="id"> <el-select @change="renderEndpoint" id="module-box-input-module" v-model="editEndpoint.moduleId" :disabled="!editEndpoint.projectId || disabled " class="right-box__select" placeholder="" popper-class="right-box-select-dropdown prevent-clickoutside" size="small" value-key="id">
<el-option v-for="item in moduleList" :id="'module-'+item.id" :key="item.id" :label="item.name" :value="item.id"></el-option> <el-option v-for="item in moduleList" :id="'module-'+item.id" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select> </el-select>
@@ -48,52 +48,6 @@
<el-form-item v-if="optionType!=='batch'" :label='$t("project.module.name")' label-width="125px" prop="name"> <el-form-item v-if="optionType!=='batch'" :label='$t("project.module.name")' label-width="125px" prop="name">
<el-input id="module-box-input-name" v-model="editEndpoint.name" maxlength="64" placeholder="" show-word-limit size="small"></el-input> <el-input id="module-box-input-name" v-model="editEndpoint.name" maxlength="64" placeholder="" show-word-limit size="small"></el-input>
</el-form-item> </el-form-item>
<!-- snmp表单 -->
<span v-if="editEndpoint.type && editEndpoint.type == 'snmp'" class="snmp-form">
<div class="right-box-sub-title">SNMP settings</div>
<div class="right-box-line"></div>
<el-row>
<el-col :span="6">
<div class="sub-label sub-label-required">{{$t('project.module.walk')}}</div>
</el-col>
<el-col :span="24">
<el-form-item prop="walk">
<select-walk ref="selectWalk" :walkData="walkData" :expandedWalk="expandedWalkData" :placement="'bottom-start'" @selectWalk="selectWalk" :currentWalk="editEndpoint.walk">
<template v-slot:trigger>
<div class="el-cascader">
<div class="el-input">
<input type="text" readonly="readonly" autocomplete="off" class="el-input__inner" aria-expanded="false">
</div>
<div class="el-cascader__tags">
<div ref="walkScrollbar" style="height: 100%; overflow: auto;">
<span v-for="(item, index) in editEndpoint.walk" :key="index" class="el-tag el-tag--info el-tag--small el-tag--light">
<span v-html="mibName(item)"></span>
<div class="walk-close-box" @click.stop="removeWalk(item)">
<i class="el-tag__close nz-icon nz-icon-close walk-close"></i>
</div>
</span>
</div>
</div>
</div>
</template>
</select-walk>
</el-form-item>
</el-col>
</el-row>
<!--credentials-->
<el-form-item :label='$t("project.endpoint.credentials")' prop="credentials">
<el-select id="module-box-input-credentials" v-model="editEndpoint.configs.snmpCredentialsId" class="right-box__select" placeholder="" popper-class="right-box-select-dropdown prevent-clickoutside" size="small" value-key="id">
<el-option :id="'module-type-'+item.id" v-for="item in credentialList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
</span>
<!--module-->
<el-form-item :label='$t("project.endpoint.state")' prop="remark">
<el-select id="module-box-input-state" v-model="editEndpoint.enabled" class="right-box__select" placeholder="" popper-class="right-box-select-dropdown prevent-clickoutside" size="small">
<el-option v-for="item in endpointStateList" :id="'module-'+item.value" :key="item.value" :label="item.name" :value="item.value"></el-option>
</el-select>
</el-form-item>
<!--Enpoint template--> <!--Enpoint template-->
<div class="right-box-sub-title">{{ $t("overall.configEndpoint") }} <div class="right-box-sub-title">{{ $t("overall.configEndpoint") }}
<!-- <el-tooltip effect="light" placement="top">--> <!-- <el-tooltip effect="light" placement="top">-->
@@ -123,7 +77,6 @@
key-field="id" key-field="id"
show-field="name" show-field="name"
title="ChartSearch" title="ChartSearch"
@values="(data) => {editEndpoint.chartIds = data.map(d => d.id).join(',')}"
></v-selectpage> ></v-selectpage>
</el-form-item> </el-form-item>
<div class="endpoint-title"> <div class="endpoint-title">
@@ -158,10 +111,10 @@
<el-input id="module-box-input-host" v-model="editEndpoint.configs[0].config.host" placeholder="" size="small"></el-input> <el-input id="module-box-input-host" v-model="editEndpoint.configs[0].config.host" placeholder="" size="small"></el-input>
</el-form-item> </el-form-item>
<!-- snmp表单 --> <!-- snmp表单 -->
<span v-if="editEndpoint.configs[0].config.protocol && editEndpoint.configs[0].config.protocol == 'snmp'" class="snmp-form"> <div v-if="editEndpoint.configs[0].config.protocol && editEndpoint.configs[0].config.protocol == 'snmp'">
<el-row> <el-row>
<el-col :span="6"> <el-col :span="6">
<div class="sub-label sub-label-required">{{$t('project.module.walk')}}</div> <div class="sub-label sub-label-required" style="padding-left: 0">{{$t('project.module.walk')}}</div>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item prop="configs.0.config.walk" :rules="[{ required: true, message: this.$t('validate.required'), trigger: 'blur' }]"> <el-form-item prop="configs.0.config.walk" :rules="[{ required: true, message: this.$t('validate.required'), trigger: 'blur' }]">
@@ -193,7 +146,7 @@
<el-option v-for="item in credentialList" :id="'module-type-'+item.id" :key="item.id" :label="item.name" :value="item.id"></el-option> <el-option v-for="item in credentialList" :id="'module-type-'+item.id" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</span> </div>
<transition name="el-zoom-in-top"> <transition name="el-zoom-in-top">
<div v-show="showAllBasicOption" > <div v-show="showAllBasicOption" >
<!--scrape_interval--> <!--scrape_interval-->
@@ -301,42 +254,42 @@
<el-tab-pane label="Basic" name="Basic"> <el-tab-pane label="Basic" name="Basic">
<!--type--> <!--type-->
<el-form-item :label='$t("project.endpoint.type")' class="half-form-item"> <el-form-item :label='$t("project.endpoint.type")' class="half-form-item">
<el-select id="module-box-input-type" v-model="item.basic.type" class="right-box__select" placeholder="" popper-class="right-box-select-dropdown prevent-clickoutside" size="small" @change="logsBasicTypeChange(index)"> <el-select id="module-box-input-type" v-model="item.type" class="right-box__select" placeholder="" popper-class="right-box-select-dropdown prevent-clickoutside" size="small" @change="logsBasicTypeChange(index)">
<el-option v-for="item in logsBasicList" :id="'module-type-'+item.id" :key="item.value" :label="item.name" :value="item.value"></el-option> <el-option v-for="item in logsBasicList" :id="'module-type-'+item.id" :key="item.value" :label="item.name" :value="item.value"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-if='item.basic.type === "file"' v-if='item.type === "file"'
:label='item.basic.type === "file" ? $t("project.endpoint.basicTypeFile"):( item.basic.type === "journal" ? $t("project.endpoint.basicTypeJournal") : $t("project.endpoint.basicTypeSyslog"))' class="half-form-item" :label='item.type === "file" ? $t("project.endpoint.basicTypeFile"):( item.type === "journal" ? $t("project.endpoint.basicTypeJournal") : $t("project.endpoint.basicTypeSyslog"))' class="half-form-item"
:prop="'configs.1.config.'+ index +'.basic.fileName'" :prop="'configs.1.config.'+ index +'fileName'"
:rules="[ { required: true, message: $t('validate.required'), trigger: 'blur' }]" :rules="[ { required: true, message: $t('validate.required'), trigger: 'blur' }]"
> >
<el-input v-if='item.basic.type === "file"' v-model="item.basic.fileName" :id="'module-box-basic-value' +index" placeholder='' size="small"></el-input> <el-input v-if='item.type === "file"' v-model="item.fileName" :id="'module-box-basic-value' +index" placeholder='' size="small"></el-input>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-if='item.basic.type === "journal"' v-if='item.type === "journal"'
:label='item.basic.type === "file" ? $t("project.endpoint.basicTypeFile"):( item.basic.type === "journal" ? $t("project.endpoint.basicTypeJournal") : $t("project.endpoint.basicTypeSyslog"))' class="half-form-item" :label='item.type === "file" ? $t("project.endpoint.basicTypeFile"):( item.type === "journal" ? $t("project.endpoint.basicTypeJournal") : $t("project.endpoint.basicTypeSyslog"))' class="half-form-item"
:prop="'configs.1.config.'+ index +'.basic.unit'" :prop="'configs.1.config.'+ index +'unit'"
:rules="[ { required: true, message: $t('validate.required'), trigger: 'blur' }]" :rules="[ { required: true, message: $t('validate.required'), trigger: 'blur' }]"
> >
<el-input v-if='item.basic.type === "journal"' v-model="item.basic.unit" :id="'module-box-basic-value' +index" placeholder='' size="small"></el-input> <el-input v-if='item.type === "journal"' v-model="item.unit" :id="'module-box-basic-value' +index" placeholder='' size="small"></el-input>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-if='item.basic.type === "syslog"' v-if='item.type === "syslog"'
:label='item.basic.type === "file" ? $t("project.endpoint.basicTypeFile"):( item.basic.type === "journal" ? $t("project.endpoint.basicTypeJournal") : $t("project.endpoint.basicTypeSyslog"))' class="half-form-item" :label='item.type === "file" ? $t("project.endpoint.basicTypeFile"):( item.type === "journal" ? $t("project.endpoint.basicTypeJournal") : $t("project.endpoint.basicTypeSyslog"))' class="half-form-item"
:prop="'configs.1.config.'+ index +'.basic.listenAddress'" :prop="'configs.1.config.'+ index +'listenAddress'"
:rules="[ { required: true, message: $t('validate.required'), trigger: 'blur' }]" :rules="[ { required: true, message: $t('validate.required'), trigger: 'blur' }]"
> >
<el-input v-if='item.basic.type === "syslog"' v-model="item.basic.listenAddress" :id="'module-box-basic-value' +index" placeholder='' size="small"></el-input> <el-input v-if='item.type === "syslog"' v-model="item.listenAddress" :id="'module-box-basic-value' +index" placeholder='' size="small"></el-input>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-if="item.basic.type === 'syslog'" v-if="item.type === 'syslog'"
:label=' $t("project.endpoint.basicAppName")' :label=' $t("project.endpoint.basicAppName")'
class="half-form-item" class="half-form-item"
:prop="'configs.1.config.'+ index +'.basic.appName'" :prop="'configs.1.config.'+ index +'appName'"
:rules="[ { required: true, message: $t('validate.required'), trigger: 'blur' }]" :rules="[ { required: true, message: $t('validate.required'), trigger: 'blur' }]"
> >
<el-input v-model="item.basic.appName" :id="'module-box-basic-appName' +index" placeholder='' size="small"></el-input> <el-input v-model="item.appName" :id="'module-box-basic-appName' +index" placeholder='' size="small"></el-input>
</el-form-item> </el-form-item>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="Labels" name="Labels"> <el-tab-pane label="Labels" name="Labels">
@@ -524,6 +477,7 @@ import pipelineSelect from './pipelineSelect'
import selectWalk from '../popBox/selectWalk' import selectWalk from '../popBox/selectWalk'
import editRigthBox from '../mixin/editRigthBox' import editRigthBox from '../mixin/editRigthBox'
import VueTagsInput from '@johmun/vue-tags-input' import VueTagsInput from '@johmun/vue-tags-input'
import project from "@/components/page/monitor/project/project";
export default { export default {
name: 'editEndpointBoxNew', name: 'editEndpointBoxNew',
@@ -555,6 +509,7 @@ export default {
walkData: [], walkData: [],
chartTempList: [], chartTempList: [],
activeName: 'Basic', activeName: 'Basic',
activeNameLogs: ['Basic'],
expandedWalkData: [], expandedWalkData: [],
language: localStorage.getItem('nz-language'), language: localStorage.getItem('nz-language'),
radio: 'password', radio: 'password',
@@ -572,7 +527,8 @@ export default {
showAllBasicOption: false, showAllBasicOption: false,
rules: { rules: {
name: [ name: [
{ validator: this.optionType === 'batch' ? '' : noSpecialChar, trigger: 'change' } { validator: this.optionType === 'batch' ? '' : noSpecialChar, trigger: 'change' },
{ required: true, message: this.$t('validate.required'), trigger: 'change' }
], ],
assetId: [ assetId: [
{ required: !(this.optionType === 'batch'), message: this.$t('validate.required'), trigger: 'change' } { required: !(this.optionType === 'batch'), message: this.$t('validate.required'), trigger: 'change' }
@@ -675,10 +631,10 @@ export default {
methods: { methods: {
port: port, port: port,
selectWalk (walk) { selectWalk (walk) {
if (this.editEndpoint.walk.indexOf(walk) != -1) { if (this.editEndpoint.configs[0].config.walk.indexOf(walk) != -1) {
this.editEndpoint.walk.splice(this.editEndpoint.walk.indexOf(walk), 1) this.editEndpoint.configs[0].config.walk.splice(this.editEndpoint.configs[0].config.walk.indexOf(walk), 1)
} else { } else {
this.editEndpoint.walk.push(walk) this.editEndpoint.configs[0].config.walk.push(walk)
} }
}, },
// 从mibData里取得oid对应的mib名称 // 从mibData里取得oid对应的mib名称
@@ -725,7 +681,7 @@ export default {
}, },
removeWalk (walk) { removeWalk (walk) {
this.editEndpoint.walk.splice(this.editEndpoint.walk.indexOf(walk), 1) this.editEndpoint.configs[0].config.walk.splice(this.editEndpoint.configs[0].config.walk.indexOf(walk), 1)
this.$refs.selectWalk.$refs.walkTree.setChecked(walk, false) this.$refs.selectWalk.$refs.walkTree.setChecked(walk, false)
}, },
@@ -886,23 +842,22 @@ export default {
} }
}, },
logsBasicTypeChange (i) { logsBasicTypeChange (i) {
const type = this.editEndpoint.configs[1].config[i].basic.type const type = this.editEndpoint.configs[1].config[i].type
if (type === 'file') { if (type === 'file') {
this.editEndpoint.configs[1].config[i].basic = { this.editModule.configs[1].config[i].fileName = ''
type, delete this.editModule.configs[1].config[i].unit
fileName: '' delete this.editModule.configs[1].config[i].appName
} delete this.editModule.configs[1].config[i].listenAddress
} else if (type === 'journal') { } else if (type === 'journal') {
this.editEndpoint.configs[1].config[i].basic = { delete this.editModule.configs[1].config[i].fileName
type, this.editModule.configs[1].config[i].unit = ''
unit: '' delete this.editModule.configs[1].config[i].appName
} delete this.editModule.configs[1].config[i].listenAddress
} else if (type === 'syslog') { } else if (type === 'syslog') {
this.editEndpoint.configs[1].config[i].basic = { delete this.editModule.configs[1].config[i].fileName
type, delete this.editModule.configs[1].config[i].unit
appName: '', this.editModule.configs[1].config[i].appName = ''
listenAddress: '' this.editModule.configs[1].config[i].listenAddress = ''
}
} }
}, },
/* 获取project列表 */ /* 获取project列表 */
@@ -915,6 +870,10 @@ export default {
}, },
changeProject () { changeProject () {
this.getModuleList() this.getModuleList()
if (this.editEndpoint.moduleId) {
this.editEndpoint.moduleId = ''
this.$refs.moduleForm.clearValidate('moduleId')
}
}, },
/* 获取module列表 */ /* 获取module列表 */
getModuleList () { getModuleList () {
@@ -1142,10 +1101,18 @@ export default {
if (this.disabled) { if (this.disabled) {
return return
} }
if (this.editEndpoint.moduleId && this.editEndpoint.assetId && (JSON.stringify(this.editEndpoint.configs) === JSON.stringify(this.blankObject.configs))) { if (this.editEndpoint.moduleId && this.editEndpoint.assetId) {
this.$post('/monitor/endpoint/render', { moduleIds: this.editEndpoint.moduleId, assetIds: this.editEndpoint.assetId }).then(res => { this.$post('/monitor/endpoint/render', { moduleIds: this.editEndpoint.moduleId, assetIds: this.editEndpoint.assetId }).then(res => {
console.log(res) console.log(res)
if (JSON.stringify(this.editEndpoint.configs) === JSON.stringify(this.blankObject.configs)) {
this.editEndpoint.configs = res.data.list[0].configs this.editEndpoint.configs = res.data.list[0].configs
}
if (!this.editEndpoint.name) {
this.editEndpoint.name = res.data.list[0].name
}
if (!this.editEndpoint.chartIds) {
this.editEndpoint.chartIds = res.data.list[0].chartIds
}
}) })
} }
} }
@@ -1174,6 +1141,7 @@ export default {
handler (n, o) { handler (n, o) {
this.isEdit = true this.isEdit = true
this.editEndpoint = JSON.parse(JSON.stringify(n)) this.editEndpoint = JSON.parse(JSON.stringify(n))
this.getModuleList()
this.activeName = 'Basic' this.activeName = 'Basic'
this.activeNameLogs = this.editEndpoint.configs[1].config.map(() => 'Basic') this.activeNameLogs = this.editEndpoint.configs[1].config.map(() => 'Basic')
this.logsCopyValue = this.editEndpoint.configs[1].config.map(() => '') this.logsCopyValue = this.editEndpoint.configs[1].config.map(() => '')
@@ -1186,7 +1154,7 @@ export default {
} }
if (n.type && n.type.toLowerCase() == 'snmp') { if (n.type && n.type.toLowerCase() == 'snmp') {
this.$refs.selectWalk.show() this.$refs.selectWalk.show()
for (let i = 0; i < this.editEndpoint.walk.length; i++) { for (let i = 0; i < this.editEndpoint.configs[0].config.walk.length; i++) {
this.expandedWalkData.push(this.editEndpoint.configs[0].config.walk[i].substring(0, this.editEndpoint.configs[0].config.walk[i].lastIndexOf('.'))) this.expandedWalkData.push(this.editEndpoint.configs[0].config.walk[i].substring(0, this.editEndpoint.configs[0].config.walk[i].lastIndexOf('.')))
} }
} }
@@ -1398,6 +1366,8 @@ export default {
.nz-icon-arrow-down{ .nz-icon-arrow-down{
display: inline-block; display: inline-block;
transition: transform .3s; transition: transform .3s;
color: #BDBDBD;
font-size: 12px;
} }
.nz-icon-arrow-down.is-active{ .nz-icon-arrow-down.is-active{
transform: rotate( transform: rotate(

View File

@@ -111,10 +111,10 @@
<el-input id="module-box-input-host" v-model="editModule.configs[0].config.host" placeholder="" size="small"></el-input> <el-input id="module-box-input-host" v-model="editModule.configs[0].config.host" placeholder="" size="small"></el-input>
</el-form-item> </el-form-item>
<!-- snmp表单 --> <!-- snmp表单 -->
<span v-if="editModule.configs[0].config.protocol && editModule.configs[0].config.protocol == 'snmp'" class="snmp-form"> <div v-if="editModule.configs[0].config.protocol && editModule.configs[0].config.protocol == 'snmp'" class="">
<el-row> <el-row>
<el-col :span="6"> <el-col :span="6">
<div class="sub-label sub-label-required">{{$t('project.module.walk')}}</div> <div class="sub-label sub-label-required" style="padding-left: 0">{{$t('project.module.walk')}}</div>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item prop="configs.0.config.walk" :rules="[{ required: true, message: this.$t('validate.required'), trigger: 'blur' }]"> <el-form-item prop="configs.0.config.walk" :rules="[{ required: true, message: this.$t('validate.required'), trigger: 'blur' }]">
@@ -146,7 +146,7 @@
<el-option v-for="item in credentialList" :id="'module-type-'+item.id" :key="item.id" :label="item.name" :value="item.id"></el-option> <el-option v-for="item in credentialList" :id="'module-type-'+item.id" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</span> </div>
<transition name="el-zoom-in-top"> <transition name="el-zoom-in-top">
<div v-show="showAllBasicOption" > <div v-show="showAllBasicOption" >
<!--scrape_interval--> <!--scrape_interval-->
@@ -254,42 +254,42 @@
<el-tab-pane label="Basic" name="Basic"> <el-tab-pane label="Basic" name="Basic">
<!--type--> <!--type-->
<el-form-item :label='$t("project.endpoint.type")' class="half-form-item"> <el-form-item :label='$t("project.endpoint.type")' class="half-form-item">
<el-select id="module-box-input-type" v-model="item.basic.type" class="right-box__select" placeholder="" popper-class="right-box-select-dropdown prevent-clickoutside" size="small" @change="logsBasicTypeChange(index)"> <el-select id="module-box-input-type" v-model="item.type" class="right-box__select" placeholder="" popper-class="right-box-select-dropdown prevent-clickoutside" size="small" @change="logsBasicTypeChange(index)">
<el-option v-for="item in logsBasicList" :id="'module-type-'+item.id" :key="item.value" :label="item.name" :value="item.value"></el-option> <el-option v-for="item in logsBasicList" :id="'module-type-'+item.id" :key="item.value" :label="item.name" :value="item.value"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-if='item.basic.type === "file"' v-if='item.type === "file"'
:label='item.basic.type === "file" ? $t("project.endpoint.basicTypeFile"):( item.basic.type === "journal" ? $t("project.endpoint.basicTypeJournal") : $t("project.endpoint.basicTypeSyslog"))' class="half-form-item" :label='item.type === "file" ? $t("project.endpoint.basicTypeFile"):( item.type === "journal" ? $t("project.endpoint.basicTypeJournal") : $t("project.endpoint.basicTypeSyslog"))' class="half-form-item"
:prop="'configs.1.config.'+ index +'.basic.fileName'" :prop="'configs.1.config.'+ index +'.fileName'"
:rules="[ { required: true, message: $t('validate.required'), trigger: 'blur' }]" :rules="[ { required: true, message: $t('validate.required'), trigger: 'blur' }]"
> >
<el-input v-if='item.basic.type === "file"' v-model="item.basic.fileName" :id="'module-box-basic-value' +index" placeholder='' size="small"></el-input> <el-input v-if='item.type === "file"' v-model="item.fileName" :id="'module-box-basic-value' +index" placeholder='' size="small"></el-input>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-if='item.basic.type === "journal"' v-if='item.type === "journal"'
:label='item.basic.type === "file" ? $t("project.endpoint.basicTypeFile"):( item.basic.type === "journal" ? $t("project.endpoint.basicTypeJournal") : $t("project.endpoint.basicTypeSyslog"))' class="half-form-item" :label='item.type === "file" ? $t("project.endpoint.basicTypeFile"):( item.type === "journal" ? $t("project.endpoint.basicTypeJournal") : $t("project.endpoint.basicTypeSyslog"))' class="half-form-item"
:prop="'configs.1.config.'+ index +'.basic.unit'" :prop="'configs.1.config.'+ index +'.unit'"
:rules="[ { required: true, message: $t('validate.required'), trigger: 'blur' }]" :rules="[ { required: true, message: $t('validate.required'), trigger: 'blur' }]"
> >
<el-input v-if='item.basic.type === "journal"' v-model="item.basic.unit" :id="'module-box-basic-value' +index" placeholder='' size="small"></el-input> <el-input v-if='item.type === "journal"' v-model="item.unit" :id="'module-box-basic-value' +index" placeholder='' size="small"></el-input>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-if='item.basic.type === "syslog"' v-if='item.type === "syslog"'
:label='item.basic.type === "file" ? $t("project.endpoint.basicTypeFile"):( item.basic.type === "journal" ? $t("project.endpoint.basicTypeJournal") : $t("project.endpoint.basicTypeSyslog"))' class="half-form-item" :label='item.type === "file" ? $t("project.endpoint.basicTypeFile"):( item.type === "journal" ? $t("project.endpoint.basicTypeJournal") : $t("project.endpoint.basicTypeSyslog"))' class="half-form-item"
:prop="'configs.1.config.'+ index +'.basic.listenAddress'" :prop="'configs.1.config.'+ index +'.listenAddress'"
:rules="[ { required: true, message: $t('validate.required'), trigger: 'blur' }]" :rules="[ { required: true, message: $t('validate.required'), trigger: 'blur' }]"
> >
<el-input v-if='item.basic.type === "syslog"' v-model="item.basic.listenAddress" :id="'module-box-basic-value' +index" placeholder='' size="small"></el-input> <el-input v-if='item.type === "syslog"' v-model="item.listenAddress" :id="'module-box-basic-value' +index" placeholder='' size="small"></el-input>
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-if="item.basic.type === 'syslog'" v-if="item.type === 'syslog'"
:label=' $t("project.endpoint.basicAppName")' :label=' $t("project.endpoint.basicAppName")'
class="half-form-item" class="half-form-item"
:prop="'configs.1.config.'+ index +'.basic.appName'" :prop="'configs.1.config.'+ index +'.appName'"
:rules="[ { required: true, message: $t('validate.required'), trigger: 'blur' }]" :rules="[ { required: true, message: $t('validate.required'), trigger: 'blur' }]"
> >
<el-input v-model="item.basic.appName" :id="'module-box-basic-appName' +index" placeholder='' size="small"></el-input> <el-input v-model="item.appName" :id="'module-box-basic-appName' +index" placeholder='' size="small"></el-input>
</el-form-item> </el-form-item>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="Labels" name="Labels"> <el-tab-pane label="Labels" name="Labels">
@@ -622,10 +622,10 @@ export default {
methods: { methods: {
port: port, port: port,
selectWalk (walk) { selectWalk (walk) {
if (this.editModule.walk.indexOf(walk) != -1) { if (this.editModule.configs[0].config.walk.indexOf(walk) != -1) {
this.editModule.walk.splice(this.editModule.walk.indexOf(walk), 1) this.editModule.configs[0].config.walk.splice(this.editModule.configs[0].config.walk.indexOf(walk), 1)
} else { } else {
this.editModule.walk.push(walk) this.editModule.configs[0].config.walk.push(walk)
} }
}, },
// 从mibData里取得oid对应的mib名称 // 从mibData里取得oid对应的mib名称
@@ -672,7 +672,7 @@ export default {
}, },
removeWalk (walk) { removeWalk (walk) {
this.editModule.walk.splice(this.editModule.walk.indexOf(walk), 1) this.editModule.configs[0].config.walk.splice(this.editModule.configs[0].config.walk.indexOf(walk), 1)
this.$refs.selectWalk.$refs.walkTree.setChecked(walk, false) this.$refs.selectWalk.$refs.walkTree.setChecked(walk, false)
}, },
@@ -915,10 +915,8 @@ export default {
this.activeNameLogs.push('Basic') this.activeNameLogs.push('Basic')
this.logsCopyValue.push('') this.logsCopyValue.push('')
this.editModule.configs[1].config.push({ this.editModule.configs[1].config.push({
basic: {
type: 'file', type: 'file',
fileName: '' fileName: '',
},
labels: '', labels: '',
labelModule: [{ key: '', value: '' }], labelModule: [{ key: '', value: '' }],
pipeline: [] pipeline: []
@@ -930,23 +928,22 @@ export default {
} }
}, },
logsBasicTypeChange (i) { logsBasicTypeChange (i) {
const type = this.editModule.configs[1].config[i].basic.type const type = this.editModule.configs[1].config[i].type
if (type === 'file') { if (type === 'file') {
this.editModule.configs[1].config[i].basic = { this.editModule.configs[1].config[i].fileName = ''
type, delete this.editModule.configs[1].config[i].unit
fileName: '' delete this.editModule.configs[1].config[i].appName
} delete this.editModule.configs[1].config[i].listenAddress
} else if (type === 'journal') { } else if (type === 'journal') {
this.editModule.configs[1].config[i].basic = { delete this.editModule.configs[1].config[i].fileName
type, this.editModule.configs[1].config[i].unit = ''
unit: '' delete this.editModule.configs[1].config[i].appName
} delete this.editModule.configs[1].config[i].listenAddress
} else if (type === 'syslog') { } else if (type === 'syslog') {
this.editModule.configs[1].config[i].basic = { delete this.editModule.configs[1].config[i].fileName
type, delete this.editModule.configs[1].config[i].unit
appName: '', this.editModule.configs[1].config[i].appName = ''
listenAddress: '' this.editModule.configs[1].config[i].listenAddress = ''
}
} }
}, },
copyValue () { copyValue () {
@@ -1117,7 +1114,7 @@ export default {
} }
if (n.type && n.type.toLowerCase() == 'snmp') { if (n.type && n.type.toLowerCase() == 'snmp') {
this.$refs.selectWalk.show() this.$refs.selectWalk.show()
for (let i = 0; i < this.editModule.walk.length; i++) { for (let i = 0; i < this.editModule.configs[0].config.walk.length; i++) {
this.expandedWalkData.push(this.editModule.configs[0].config.walk[i].substring(0, this.editModule.configs[0].config.walk[i].lastIndexOf('.'))) this.expandedWalkData.push(this.editModule.configs[0].config.walk[i].substring(0, this.editModule.configs[0].config.walk[i].lastIndexOf('.')))
} }
} }
@@ -1329,6 +1326,8 @@ export default {
.nz-icon-arrow-down{ .nz-icon-arrow-down{
display: inline-block; display: inline-block;
transition: transform .3s; transition: transform .3s;
color: #BDBDBD;
font-size: 12px;
} }
.nz-icon-arrow-down.is-active{ .nz-icon-arrow-down.is-active{
transform: rotate( transform: rotate(

View File

@@ -35,6 +35,9 @@
<el-dropdown-item> <el-dropdown-item>
<delete-button :type="'link'" :title="$t('overall.batchDel')" id="account-list-batch-delete" v-has="'monitor_endpoint_delete'" :api="url" :delete-objs="batchDeleteObjs" @after="getTableData" @before="delFlag=true"></delete-button> <delete-button :type="'link'" :title="$t('overall.batchDel')" id="account-list-batch-delete" v-has="'monitor_endpoint_delete'" :api="url" :delete-objs="batchDeleteObjs" @after="getTableData" @before="delFlag=true"></delete-button>
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item>
<div id="batch-add" @click="batchAdd"><i class="nz-icon nz-icon-table-edit"></i>{{$t('overall.batchAdd')}}</div>
</el-dropdown-item>
</div> </div>
</template> </template>
</top-tool-more-options> </top-tool-more-options>
@@ -79,6 +82,9 @@
<transition name="right-box"> <transition name="right-box">
<batchModifyEndpoint v-if="rightBox.batchModify" :module="object" @close="closeRightBatchModify" :selectEndpointList="batchDeleteObjs" :disabled="true" :type="'edit'"></batchModifyEndpoint> <batchModifyEndpoint v-if="rightBox.batchModify" :module="object" @close="closeRightBatchModify" :selectEndpointList="batchDeleteObjs" :disabled="true" :type="'edit'"></batchModifyEndpoint>
</transition> </transition>
<transition name="right-box">
<batchAddEndpoint v-if="rightBox.batchAdd" @close="closeRightBatchAdd"></batchAddEndpoint>
</transition>
<transition name="right-box"><alert-silence-box v-if='silenceBoxShow' :alert-silence="objectSilence" @close="closeSilenceBox"></alert-silence-box> <transition name="right-box"><alert-silence-box v-if='silenceBoxShow' :alert-silence="objectSilence" @close="closeSilenceBox"></alert-silence-box>
</transition> </transition>
</div> </div>
@@ -91,6 +97,7 @@ import dataListMixin from '@/components/common/mixin/dataList'
import endpointTable from '@/components/common/table/settings/endpointTable' import endpointTable from '@/components/common/table/settings/endpointTable'
import EditEndpointBoxNew from '@/components/common/rightBox/editEndpointBoxNew' import EditEndpointBoxNew from '@/components/common/rightBox/editEndpointBoxNew'
import batchModifyEndpoint from '@/components/common/rightBox/batchModifyEndpoint' import batchModifyEndpoint from '@/components/common/rightBox/batchModifyEndpoint'
import batchAddEndpoint from '@/components/common/rightBox/batchAddEndpoint'
import clickSearch from '@/components/common/labelFilter/clickSearch' import clickSearch from '@/components/common/labelFilter/clickSearch'
import topToolMoreOptions from '@/components/common/popBox/topToolMoreOptions' import topToolMoreOptions from '@/components/common/popBox/topToolMoreOptions'
import alertSilenceBox from '@/components/common/rightBox/alertSilenceBox' import alertSilenceBox from '@/components/common/rightBox/alertSilenceBox'
@@ -106,7 +113,8 @@ export default {
clickSearch, clickSearch,
batchModifyEndpoint, batchModifyEndpoint,
topToolMoreOptions, topToolMoreOptions,
alertSilenceBox alertSilenceBox,
batchAddEndpoint
}, },
mixins: [dataListMixin], mixins: [dataListMixin],
data () { data () {
@@ -145,10 +153,8 @@ export default {
{ {
type: 'logs', type: 'logs',
config: [{ config: [{
basic: {
type: 'file', type: 'file',
fileName: '' fileName: '',
},
labels: '', labels: '',
labelModule: [{ key: '', value: '' }], labelModule: [{ key: '', value: '' }],
pipeline: [] pipeline: []
@@ -213,7 +219,8 @@ export default {
rightBox: { rightBox: {
editShow: false, editShow: false,
show: false, show: false,
batchModify: false batchModify: false,
batchAdd: false,
}, },
titleSearch: {}, titleSearch: {},
titleSearchList: { titleSearchList: {
@@ -302,6 +309,13 @@ export default {
this.getTableData() this.getTableData()
} }
}, },
closeRightBatchAdd (refresh) {
this.rightBox.batchAdd = false
if (refresh) {
this.delFlag = true
this.getTableData()
}
},
getTableData () { getTableData () {
this.$set(this.searchLabel, 'pageNo', this.pageObj.pageNo) this.$set(this.searchLabel, 'pageNo', this.pageObj.pageNo)
this.$set(this.searchLabel, 'pageSize', this.pageObj.pageSize) this.$set(this.searchLabel, 'pageSize', this.pageObj.pageSize)
@@ -366,6 +380,9 @@ export default {
return return
} }
this.rightBox.batchModify = true this.rightBox.batchModify = true
},
batchAdd () {
this.rightBox.batchAdd = true
} }
}, },
computed: { computed: {

View File

@@ -125,10 +125,8 @@ export default {
{ {
type: 'logs', type: 'logs',
config: [{ config: [{
basic: {
type: 'file', type: 'file',
fileName: '' fileName: '',
},
labels: '', labels: '',
labelModule: [{ key: '', value: '' }], labelModule: [{ key: '', value: '' }],
pipeline: [] pipeline: []
@@ -230,7 +228,7 @@ export default {
} }
if (JSON.stringify(this.object.configs[0].config.params) !== '{}' && this.object.configs[0].config.params) { if (JSON.stringify(this.object.configs[0].config.params) !== '{}' && this.object.configs[0].config.params) {
Object.keys(this.object.configs[0].config.params).forEach(key => { Object.keys(this.object.configs[0].config.params).forEach(key => {
this.object.paramObj.push({ key, value: this.object.configs[0].params[key] }) this.object.paramObj.push({ key, value: this.object.configs[0].config.params[key] })
}) })
} else { } else {
this.object.paramObj.push({ key: '', value: [] }) this.object.paramObj.push({ key: '', value: [] })