| <!-- |
| - 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("configCenter.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('configCenter.table.operate')" fixed="right" width="200"> |
| <template slot-scope="scope"> |
| <el-tooltip |
| :content="$t('configCenter.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('configCenter.table.operateConnect'): $t('configCenter.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('configCenter.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('configCenter.configDialog.title')" |
| :visible.sync="regustDialogVisible" |
| width="1010px" |
| > |
| <el-form ref="form" :model="form" :rules="rules" label-width="170px"> |
| <el-form-item :label="$t('configCenter.configDialog.name')" prop="name"> |
| <el-input :placeholder="$t('configCenter.rules.name')" v-model="form.name" autocomplete="off" /> |
| </el-form-item> |
| <el-form-item :label="$t('configCenter.configDialog.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('configCenter.configDialog.address')" prop="serverLists"> |
| <el-input |
| :placeholder="$t('configCenter.rules.address')" |
| v-model="form.serverLists" |
| autocomplete="off" |
| /> |
| </el-form-item> |
| <el-form-item :label="$t('configCenter.configDialog.orchestrationName')" prop="orchestrationName"> |
| <el-input |
| :placeholder="$t('configCenter.rules.orchestrationName')" |
| v-model="form.orchestrationName" |
| autocomplete="off" |
| /> |
| </el-form-item> |
| <el-form-item :label="$t('configCenter.configDialog.namespaces')" prop="namespace"> |
| <el-input |
| :placeholder="$t('configCenter.rules.namespaces')" |
| v-model="form.namespace" |
| autocomplete="off" |
| /> |
| </el-form-item> |
| <el-form-item :label="$t('configCenter.configDialog.digest')"> |
| <el-input |
| :placeholder="$t('configCenter.rules.digest')" |
| v-model="form.digest" |
| autocomplete="off" |
| /> |
| </el-form-item> |
| </el-form> |
| <div slot="footer" class="dialog-footer"> |
| <el-button @click="regustDialogVisible = false">{{ $t("configCenter.configDialog.btnCancelTxt") }}</el-button> |
| <el-button |
| type="primary" |
| @click="onConfirm('form')" |
| >{{ $t("configCenter.configDialog.btnConfirmTxt") }}</el-button> |
| </div> |
| </el-dialog> |
| <el-dialog |
| :title="$t('configCenter.configDialog.editTitle')" |
| :visible.sync="editDialogVisible" |
| width="1010px" |
| > |
| <el-form ref="editForm" :model="editForm" :rules="rules" label-width="170px"> |
| <el-form-item :label="$t('configCenter.configDialog.name')" prop="name"> |
| <el-input :placeholder="$t('configCenter.rules.name')" v-model="editForm.name" autocomplete="off" /> |
| </el-form-item> |
| <el-form-item :label="$t('configCenter.configDialog.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('configCenter.configDialog.address')" prop="serverLists"> |
| <el-input |
| :placeholder="$t('configCenter.rules.address')" |
| v-model="editForm.serverLists" |
| autocomplete="off" |
| /> |
| </el-form-item> |
| <el-form-item :label="$t('configCenter.configDialog.orchestrationName')" prop="orchestrationName"> |
| <el-input |
| :placeholder="$t('configCenter.rules.orchestrationName')" |
| v-model="editForm.orchestrationName" |
| autocomplete="off" |
| /> |
| </el-form-item> |
| <el-form-item :label="$t('configCenter.configDialog.namespaces')" prop="namespace"> |
| <el-input |
| :placeholder="$t('configCenter.rules.namespaces')" |
| v-model="editForm.namespace" |
| autocomplete="off" |
| /> |
| </el-form-item> |
| <el-form-item :label="$t('configCenter.configDialog.digest')"> |
| <el-input |
| :placeholder="$t('configCenter.rules.digest')" |
| v-model="editForm.digest" |
| autocomplete="off" |
| /> |
| </el-form-item> |
| </el-form> |
| <div slot="footer" class="dialog-footer"> |
| <el-button @click="cancelEdit">{{ $t("configCenter.configDialog.btnCancelTxt") }}</el-button> |
| <el-button |
| type="primary" |
| @click="confirmEdit('editForm')" |
| >{{ $t("configCenter.configDialog.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: 'ConfigCenter', |
| data() { |
| return { |
| regustDialogVisible: false, |
| editDialogVisible: false, |
| column: [ |
| { |
| label: this.$t('configCenter').configDialog.name, |
| prop: 'name' |
| }, |
| { |
| label: this.$t('configCenter').configDialog.centerType, |
| prop: 'instanceType' |
| }, |
| { |
| label: this.$t('configCenter').configDialog.address, |
| prop: 'serverLists' |
| }, |
| { |
| label: this.$t('configCenter').configDialog.namespaces, |
| prop: 'namespace' |
| }, |
| { |
| label: this.$t('configCenter').configDialog.orchestrationName, |
| prop: 'orchestrationName' |
| } |
| ], |
| form: { |
| name: '', |
| serverLists: '', |
| namespace: '', |
| instanceType: 'Zookeeper', |
| orchestrationName: '', |
| orchestrationType: 'config_center', |
| digest: '' |
| }, |
| editForm: { |
| primaryName: '', |
| name: '', |
| serverLists: '', |
| namespace: '', |
| instanceType: 'Zookeeper', |
| orchestrationName: '', |
| orchestrationType: 'config_center', |
| digest: '' |
| }, |
| rules: { |
| name: [ |
| { |
| required: true, |
| message: this.$t('configCenter').rules.name, |
| trigger: 'change' |
| } |
| ], |
| serverLists: [ |
| { |
| required: true, |
| message: this.$t('configCenter').rules.address, |
| trigger: 'change' |
| } |
| ], |
| namespace: [ |
| { |
| required: true, |
| message: this.$t('configCenter').rules.namespace, |
| trigger: 'change' |
| } |
| ], |
| instanceType: [ |
| { |
| required: true, |
| message: this.$t('configCenter').rules.centerType, |
| trigger: 'change' |
| } |
| ], |
| orchestrationName: [ |
| { |
| required: true, |
| message: this.$t('configCenter').rules.orchestrationName, |
| 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.getConfigCenter().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.getConfigCenterActivated().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.postConfigCenterConnect(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.deleteConfigCenter(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.postConfigCenter(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.updateConfigCenter(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 |
| } |
| } |
| } |
| </script> |
| <style lang='scss' scoped> |
| .btn-group { |
| margin-bottom: 20px; |
| } |
| .pagination { |
| float: right; |
| margin: 10px -10px 10px 0; |
| } |
| </style> |