blob: 84911e4315c73103906e78579b80dc0fb4f2b69a [file] [log] [blame]
<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-->
<template>
<el-row class="box-card">
<div class="btn-group">
<el-button
class="btn-plus"
type="primary"
icon="el-icon-plus"
@click="add"
>{{ $t("registryCenter.btnTxt") }}</el-button>
</div>
<div class="table-wrap">
<el-table :data="tableData" border style="width: 100%">
<el-table-column
v-for="(item, index) in column"
:key="index"
:prop="item.prop"
:label="item.label"
:width="item.width"
/>
<el-table-column :label="$t('registryCenter.table.operate')" fixed="right" width="200">
<template slot-scope="scope">
<el-tooltip
:content="$t('registryCenter.table.operateEdit')"
class="item"
effect="dark"
placement="top"
>
<el-button
:disabled="scope.row.activated"
size="small"
type="primary"
icon="el-icon-edit"
@click="handleEdit(scope.row)"
/>
</el-tooltip>
<el-tooltip
:content="!scope.row.activated ? $t('registryCenter.table.operateConnect'): $t('registryCenter.table.operateConnected')"
class="item"
effect="dark"
placement="top"
>
<el-button
type="primary"
icon="el-icon-link"
size="small"
@click="handleConnect(scope.row)"
/>
</el-tooltip>
<el-tooltip
:content="$t('registryCenter.table.operateDel')"
class="item"
effect="dark"
placement="top"
>
<el-button
size="small"
type="danger"
icon="el-icon-delete"
@click="handlerDel(scope.row)"
/>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
:total="total"
:current-page="currentPage"
background
layout="prev, pager, next"
@current-change="handleCurrentChange"
/>
</div>
</div>
<el-dialog
:title="$t('registryCenter.registDialog.title')"
:visible.sync="regustDialogVisible"
width="1010px"
>
<el-form ref="form" :model="form" :rules="rules" label-width="170px">
<el-form-item :label="$t('registryCenter.registDialog.name')" prop="name">
<el-input :placeholder="$t('registryCenter.rules.name')" v-model="form.name" autocomplete="off" />
</el-form-item>
<el-form-item :label="$t('registryCenter.registDialog.governanceName')" prop="governanceName">
<el-input
:placeholder="$t('registryCenter.rules.governanceName')"
v-model="form.governanceName"
autocomplete="off"
/>
</el-form-item>
<el-form-item :label="$t('registryCenter.registDialog.centerType')" prop="instanceType">
<el-radio-group v-model="form.instanceType">
<el-radio label="Zookeeper">Zookeeper</el-radio>
<el-radio label="Etcd">Etcd</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="$t('registryCenter.registDialog.address')" prop="serverLists">
<el-input
:placeholder="$t('registryCenter.rules.address')"
v-model="form.serverLists"
autocomplete="off"
/>
</el-form-item>
<el-form-item :label="$t('registryCenter.registDialog.digest')" id="add-digest" v-show="showAddDigest">
<el-input
:placeholder="$t('registryCenter.rules.digest')"
v-model="form.digest"
autocomplete="off"
/>
</el-form-item>
<el-form-item :label="$t('registryCenter.registDialog.additionalCenterType')" prop="additionalConfigCenterType">
<el-radio-group v-model="form.additionalConfigCenterType">
<el-radio label="Zookeeper">Zookeeper</el-radio>
<el-radio label="Etcd">Etcd</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="$t('registryCenter.registDialog.additionalAddress')" prop="additionalConfigCenterServerList">
<el-input
:placeholder="$t('registryCenter.rules.address')"
v-model="form.additionalConfigCenterServerList"
autocomplete="off"
/>
</el-form-item>
<el-form-item :label="$t('registryCenter.registDialog.digest')" id="add-digest-additional" v-show="showAddDigestAdditional">
<el-input
:placeholder="$t('registryCenter.rules.digest')"
v-model="form.additionalDigest"
autocomplete="off"
/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="regustDialogVisible = false">{{ $t("registryCenter.registDialog.btnCancelTxt") }}</el-button>
<el-button
type="primary"
@click="onConfirm('form')"
>{{ $t("registryCenter.registDialog.btnConfirmTxt") }}</el-button>
</div>
</el-dialog>
<el-dialog
:title="$t('registryCenter.registDialog.editTitle')"
:visible.sync="editDialogVisible"
width="1010px"
>
<el-form ref="editForm" :model="editForm" :rules="rules" label-width="170px">
<el-form-item :label="$t('registryCenter.registDialog.name')" prop="name">
<el-input :placeholder="$t('registryCenter.rules.name')" v-model="editForm.name" autocomplete="off" />
</el-form-item>
<el-form-item :label="$t('registryCenter.registDialog.governanceName')" prop="governanceName">
<el-input
:placeholder="$t('registryCenter.rules.governanceName')"
v-model="editForm.governanceName"
autocomplete="off"
/>
</el-form-item>
<el-form-item :label="$t('registryCenter.registDialog.centerType')" prop="instanceType">
<el-radio-group v-model="editForm.instanceType">
<el-radio label="Zookeeper">Zookeeper</el-radio>
<el-radio label="Etcd">Etcd</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="$t('registryCenter.registDialog.address')" prop="serverLists">
<el-input
:placeholder="$t('registryCenter.rules.address')"
v-model="editForm.serverLists"
autocomplete="off"
/>
</el-form-item>
<el-form-item :label="$t('registryCenter.registDialog.digest')" v-show="showEditDigest">
<el-input
:placeholder="$t('registryCenter.rules.digest')"
v-model="editForm.digest"
autocomplete="off"
/>
</el-form-item>
<el-form-item :label="$t('registryCenter.registDialog.additionalCenterType')" prop="additionalConfigCenterType">
<el-radio-group v-model="editForm.additionalConfigCenterType">
<el-radio label="Zookeeper">Zookeeper</el-radio>
<el-radio label="Etcd">Etcd</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="$t('registryCenter.registDialog.additionalAddress')" prop="additionalConfigCenterServerList">
<el-input
:placeholder="$t('registryCenter.rules.address')"
v-model="editForm.additionalConfigCenterServerList"
autocomplete="off"
/>
</el-form-item>
<el-form-item :label="$t('registryCenter.registDialog.digest')" v-show="showEditDigestAdditional">
<el-input
:placeholder="$t('registryCenter.rules.digest')"
v-model="editForm.additionalDigest"
autocomplete="off"
/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="cancelEdit">{{ $t("registryCenter.registDialog.btnCancelTxt") }}</el-button>
<el-button
type="primary"
@click="confirmEdit('editForm')"
>{{ $t("registryCenter.registDialog.btnConfirmTxt") }}</el-button>
</div>
</el-dialog>
</el-row>
</template>
<script>
import { mapActions } from 'vuex'
import clone from 'lodash/clone'
import API from '../api'
export default {
name: 'RegistryCenter',
data() {
return {
regustDialogVisible: false,
editDialogVisible: false,
showAddDigest:true,
showAddDigestAdditional:true,
showEditDigest:true,
showEditDigestAdditional:true,
column: [
{
label: this.$t('registryCenter').registDialog.name,
prop: 'name'
},
{
label: this.$t('registryCenter').registDialog.governanceName,
prop: 'governanceName'
},
{
label: this.$t('registryCenter').registDialog.centerType,
prop: 'instanceType'
},
{
label: this.$t('registryCenter').registDialog.address,
prop: 'serverLists'
},
{
label: this.$t('registryCenter').registDialog.additionalCenterType,
prop: 'additionalConfigCenterType'
},
{
label: this.$t('registryCenter').registDialog.additionalAddress,
prop: 'additionalConfigCenterServerList'
},
],
form: {
name: '',
serverLists: '',
instanceType: 'Zookeeper',
governanceName: '',
digest: '',
additionalConfigCenterType: '',
additionalConfigCenterServerList: '',
additionalDigest: ''
},
editForm: {
primaryName: '',
name: '',
serverLists: '',
instanceType: 'Zookeeper',
governanceName: '',
digest: '',
additionalConfigCenterType: '',
additionalConfigCenterServerList: '',
additionalDigest: ''
},
rules: {
name: [
{
required: true,
message: this.$t('registryCenter').rules.name,
trigger: 'change'
}
],
serverLists: [
{
required: true,
message: this.$t('registryCenter').rules.address,
trigger: 'change'
}
],
namespace: [
{
required: true,
message: this.$t('registryCenter').rules.namespaces,
trigger: 'change'
}
],
instanceType: [
{
required: true,
message: this.$t('registryCenter').rules.centerType,
trigger: 'change'
}
],
governanceName: [
{
required: true,
message: this.$t('registryCenter').rules.governanceName,
trigger: 'change'
}
]
},
tableData: [],
cloneTableData: [],
currentPage: 1,
pageSize: 10,
total: null
}
},
created() {
this.getRegCenter()
},
methods: {
...mapActions(['setRegCenterActivated']),
handleCurrentChange(val) {
const data = clone(this.cloneTableData)
this.tableData = data.splice(val - 1, this.pageSize)
},
getRegCenter() {
API.getRegCenter().then(res => {
const data = res.model
this.total = data.length
this.cloneTableData = clone(res.model)
this.tableData = data.splice(0, this.pageSize)
})
this.getRegCenterActivated()
},
getRegCenterActivated() {
API.getRegCenterActivated().then(res => {
this.setRegCenterActivated(res.model.name)
})
},
handleConnect(row) {
if (row.activated) {
this.$notify({
title: this.$t('common').notify.title,
message: this.$t('common').connected,
type: 'success'
})
} else {
const params = {
name: row.name
}
API.postRegCenterConnect(params).then(res => {
this.$notify({
title: this.$t('common').notify.title,
message: this.$t('common').notify.conSucMessage,
type: 'success'
})
this.getRegCenter()
})
}
},
handlerDel(row) {
const params = {
name: row.name
}
API.deleteRegCenter(params).then(res => {
this.$notify({
title: this.$t('common').notify.title,
message: this.$t('common').notify.delSucMessage,
type: 'success'
})
this.getRegCenter()
})
},
onConfirm(formName) {
this.$refs[formName].validate(valid => {
if (valid) {
API.postRegCenter(this.form).then(res => {
this.regustDialogVisible = false
this.$notify({
title: this.$t('common').notify.title,
message: this.$t('common').notify.addSucMessage,
type: 'success'
})
this.getRegCenter()
})
} else {
console.log('error submit!!')
return false
}
})
},
add() {
this.regustDialogVisible = true
},
handleEdit(row) {
this.editDialogVisible = true
this.editForm = Object.assign({}, row)
this.editForm.primaryName = row.name
},
confirmEdit(formName) {
this.$refs[formName].validate(valid => {
if (valid) {
API.updateRegCenter(this.editForm).then(res => {
this.editDialogVisible = false
this.$notify({
title: this.$t('common').notify.title,
message: this.$t('common').notify.editSucMessage,
type: 'success'
})
this.getRegCenter()
})
} else {
console.log('error submit!!')
return false
}
})
},
cancelEdit() {
this.editDialogVisible = false
},
centerTypeChanged(value) {
if (value === 'Zookeeper') {
this.showAddDigest = true
} else {
this.showAddDigest = false
this.form.digest = '';
}
},
additionalCenterTypeChanged(value) {
if (value === 'Zookeeper') {
this.showAddDigestAdditional = true
} else {
this.showAddDigestAdditional = false
this.form.additionalDigest = '';
}
},
editCenterTypeChanged(value) {
if (value === 'Zookeeper') {
this.showEditDigest = true
} else {
this.showEditDigest = false
this.editForm.digest = '';
}
},
editAdditionalCenterTypeChanged(value) {
if (value === 'Zookeeper') {
this.showEditDigestAdditional = true
} else {
this.showEditDigestAdditional = false
this.editForm.additionalDigest = '';
}
}
}
}
</script>
<style lang='scss' scoped>
.btn-group {
margin-bottom: 20px;
}
.pagination {
float: right;
margin: 10px -10px 10px 0;
}
</style>