blob: f8e339f51ab0350dd7539048956c31b17c77747e [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-table
size="small"
:loading="loading"
:columns="columns"
:dataSource="dataSource"
:rowKey="record => record.name"
:pagination="false"
:scroll="{ y: '55vh' }"
>
<template #quota="{ text }">
<span v-if="text!==undefined">{{ `${currency} ${text}` }}</span>
</template>
</a-table>
</div>
</template>
<script>
import { api } from '@/api'
import moment from 'moment'
export default {
name: 'QuotaUsage',
props: {
resource: {
type: Object,
required: true
},
tab: {
type: String,
default: () => ''
}
},
data () {
return {
loading: false,
dataSource: [],
pattern: 'YYYY-MM-DD',
currency: '',
totalQuota: 0,
account: null
}
},
computed: {
columns () {
return [
{
title: this.$t('label.quota.type.name'),
dataIndex: 'name',
width: 'calc(100% / 3)',
slots: { customRender: 'name' }
},
{
title: this.$t('label.quota.type.unit'),
dataIndex: 'unit',
width: 'calc(100% / 3)',
slots: { customRender: 'unit' }
},
{
title: this.$t('label.quota.usage'),
dataIndex: 'quota',
width: 'calc(100% / 3)',
slots: { customRender: 'quota' }
}
]
}
},
watch: {
tab () {
if (this.tab === 'quota.statement.quota') {
this.fetchData()
}
}
},
created () {
this.fetchData()
},
methods: {
async fetchData () {
this.loading = true
this.dataSource = []
this.account = this.$route.query && this.$route.query.account ? this.$route.query.account : null
try {
const resource = await this.quotaBalance()
const quotaStatement = await this.quotaStatement(resource)
const quotaUsage = quotaStatement.quotausage
this.dataSource = this.dataSource.concat(quotaUsage)
this.currency = quotaStatement.currency
this.totalQuota = quotaStatement.totalquota
this.dataSource.push({
name: `${this.$t('label.quota.total')}: `,
quota: this.totalQuota
})
this.dataSource.unshift({
type: 0,
name: `${this.$t('startdate')}: ${moment(this.resource.startdate).format(this.pattern)}`,
unit: `${this.$t('enddate')}: ${moment(this.resource.enddate).format(this.pattern)}`
})
this.loading = false
} catch (e) {
console.log(e)
this.loading = false
}
},
quotaBalance () {
return new Promise((resolve, reject) => {
const params = {}
params.domainid = this.resource.domainid
params.account = this.account
api('quotaBalance', params).then(json => {
const quotaBalance = json.quotabalanceresponse.balance || {}
resolve(quotaBalance)
}).catch(error => {
reject(error)
})
})
},
quotaStatement (resource) {
return new Promise((resolve, reject) => {
const params = {}
params.domainid = this.resource.domainid
params.account = this.account
params.startdate = moment(this.resource.startdate).format(this.pattern)
params.enddate = moment(resource.startdate).format(this.pattern)
api('quotaStatement', params).then(json => {
const quotaStatement = json.quotastatementresponse.statement || {}
resolve(quotaStatement)
}).catch(error => {
reject(error)
})
})
}
}
}
</script>