blob: 6a3e161859fc21bd8022fca405c045b27a4367aa [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>
<div>
<a-row :gutter="12">
<a-col :md="24" :lg="24">
<a-table
size="small"
:loading="loading"
:columns="columns"
:dataSource="dataSource"
:rowKey="record => record.id"
:pagination="false"
v-if="!quickview"
>
<template #action="{ record }" class="cert-button-action">
<tooltip-button
tooltipPlacement="top"
:tooltip="$t('label.quickview')"
type="primary"
icon="eye-outlined"
size="small"
@onClick="onQuickView(record.id)" />
<tooltip-button
tooltipPlacement="top"
:tooltip="$t('label.delete.sslcertificate')"
:disabled="!('deleteSslCert' in $store.getters.apis)"
type="primary"
:danger="true"
icon="delete-outlined"
size="small"
@onClick="onShowConfirm(record)" />
</template>
</a-table>
<a-list size="small" :dataSource="detailColumn" v-if="quickview">
<div class="close-quickview">
<a-button @click="() => { quickview = false }">{{ $t('label.close') }}</a-button>
</div>
<template #renderItem="{item}">
<a-list-item v-if="item in detail">
<div>
<strong>{{ $t(item) }}</strong>
<br/>
<div class="list-item-content">
{{ detail[item] }}
</div>
</div>
</a-list-item>
</template>
</a-list>
</a-col>
</a-row>
</div>
</template>
<script>
import { api } from '@/api'
import TooltipButton from '@/components/widgets/TooltipButton'
export default {
name: 'SSLCertificate',
components: {
TooltipButton
},
data () {
return {
columns: [],
dataSource: [],
selectedRowKeys: [],
detailColumn: [],
detail: [],
page: 1,
pageSize: 10,
quickview: false,
loading: false
}
},
props: {
resource: {
type: Object,
default () {
return {}
}
},
tab: {
type: String,
default () {
return ''
}
}
},
watch: {
tab (newValue, oldValue) {
if (newValue === 'certificate') {
this.quickview = false
this.fetchData()
}
},
resource: {
deep: true,
handler (newValue) {
if (Object.keys(newValue).length > 0 &&
newValue.id &&
this.tab === 'certificate'
) {
this.quickview = false
this.fetchData()
}
}
}
},
created () {
this.columns = [
{
title: this.$t('label.name'),
dataIndex: 'name',
slots: { customRender: 'name' }
},
{
title: this.$t('label.certificateid'),
dataIndex: 'id',
width: 450,
slots: { customRender: 'id' }
},
{
title: this.$t('label.action'),
dataIndex: 'action',
fixed: 'right',
width: 80,
slots: { customRender: 'action' }
}
]
this.detailColumn = ['name', 'certificate', 'certchain']
this.fetchData()
},
methods: {
fetchData () {
const params = {}
params.page = this.page
params.pageSize = this.pageSize
params.accountid = this.resource.id
this.loading = true
api('listSslCerts', params).then(json => {
const listSslResponse = json.listsslcertsresponse.sslcert
// check exists json response
if (!listSslResponse || Object.keys(listSslResponse).length === 0) {
this.dataSource = []
return
}
this.dataSource = listSslResponse
}).catch(error => {
this.$notifyError(error)
}).finally(() => {
this.loading = false
})
},
onQuickView (id) {
this.loading = true
const detail = this.dataSource.filter(item => item.id === id)
this.detail = detail[0]
this.quickview = true
this.loading = false
},
onDelete (row) {
const params = {}
params.id = row.id
// show loading
const message = `${this.$t('label.delete.certificate')} ${this.$t('label.in.progress.for')} ${row.name}`
const loading = this.$message.loading(message, 0)
api('deleteSslCert', params).then(json => {
const jsonResponse = json.deletesslcertresponse
// hide loading
setTimeout(loading)
if (jsonResponse.success) {
this.$message.success(this.$t('message.success.delete'), 3)
this.fetchData()
} else {
this.$message.error(this.$t('message.delete.failed'), 3)
}
}).catch(error => {
// hide loading
setTimeout(loading)
// show error
this.$notifyError(error)
})
},
onShowConfirm (row) {
const self = this
const title = `${this.$t('label.deleteconfirm')} ${this.$t('label.certificate')}`
this.$confirm({
title,
okText: this.$t('label.ok'),
okType: 'danger',
cancelText: this.$t('label.cancel'),
onOk () {
self.onDelete(row)
}
})
}
}
}
</script>
<style scoped>
:deep(.ant-table-fixed-right) {
z-index: 5;
}
.cert-button-action button {
margin-right: 5px;
}
.list-item-content {
word-break: break-word;
}
.close-quickview {
text-align: right;
margin-top: 12px;
line-height: 32px;
height: 32px;
}
</style>