From 411317194c82f43380df9463100e63be006879b2 Mon Sep 17 00:00:00 2001 From: O-Jiangweidong <1053570670@qq.com> Date: Thu, 10 Apr 2025 15:00:23 +0800 Subject: [PATCH] feat: Cloud sync support ali rds (v4.10) --- src/components/Table/CardTable/index.vue | 5 ++-- .../assets/Asset/AssetList/DatabaseList.vue | 15 +++++++++++- src/views/assets/Asset/AssetList/HostList.vue | 4 +++- .../AccountDetail/TaskSyncAssetList.vue | 5 ++-- .../assets/Cloud/Account/AccountList.vue | 23 +++++++++++++++---- .../Cloud/Account/components/AuthPanel.vue | 1 + .../assets/Cloud/Strategy/StrategyList.vue | 11 +++++++-- src/views/assets/Cloud/const.js | 4 +++- src/views/assets/Cloud/index.vue | 6 +++++ 9 files changed, 60 insertions(+), 14 deletions(-) diff --git a/src/components/Table/CardTable/index.vue b/src/components/Table/CardTable/index.vue index 5f76894cc..1327ced19 100644 --- a/src/components/Table/CardTable/index.vue +++ b/src/components/Table/CardTable/index.vue @@ -137,9 +137,10 @@ export default { return } const pageQuery = this.getPageQuery(this.page, this.paginationSize) - const query = Object.assign(this.extraQuery, pageQuery) + const query = Object.assign(this.extraQuery, pageQuery, this.tableConfig.extraQuery) const queryString = Object.keys(query).map(key => key + '=' + query[key]).join('&') - const url = `${this.tableUrl}?${queryString}` + const connector = this.tableUrl.indexOf('?') === -1 ? '?' : '&' + const url = `${this.tableUrl}${connector}${queryString}` const resp = await this.$axios.get(url, this.axiosConfig) const data = resp.data diff --git a/src/views/assets/Asset/AssetList/DatabaseList.vue b/src/views/assets/Asset/AssetList/DatabaseList.vue index ab0c940cb..fefc05c45 100644 --- a/src/views/assets/Asset/AssetList/DatabaseList.vue +++ b/src/views/assets/Asset/AssetList/DatabaseList.vue @@ -13,7 +13,20 @@ export default { return { config: { category: 'database', - url: '/api/v1/assets/databases/' + url: '/api/v1/assets/databases/', + headerActions: { + extraActions: [ + { + name: this.$t('CloudSync'), + title: this.$t('CloudSync'), + icon: 'cloud-provider', + has: () => this.$hasPerm('xpack.view_account') && this.$hasLicense(), + callback: () => this.$router.push( + { name: 'CloudAccountList', query: { category: 'database' }} + ) + } + ] + } } } } diff --git a/src/views/assets/Asset/AssetList/HostList.vue b/src/views/assets/Asset/AssetList/HostList.vue index 4f8d17fa4..399b1b8b8 100644 --- a/src/views/assets/Asset/AssetList/HostList.vue +++ b/src/views/assets/Asset/AssetList/HostList.vue @@ -37,7 +37,9 @@ export default { title: this.$t('CloudSync'), icon: 'cloud-provider', has: () => vm.$hasPerm('xpack.view_account') && vm.$hasLicense(), - callback: () => this.$router.push({ name: 'CloudAccountList' }) + callback: () => this.$router.push( + { name: 'CloudAccountList', query: { category: 'host' }} + ) } ] }, diff --git a/src/views/assets/Cloud/Account/AccountDetail/TaskSyncAssetList.vue b/src/views/assets/Cloud/Account/AccountDetail/TaskSyncAssetList.vue index 3c8920c1b..746518edf 100644 --- a/src/views/assets/Cloud/Account/AccountDetail/TaskSyncAssetList.vue +++ b/src/views/assets/Cloud/Account/AccountDetail/TaskSyncAssetList.vue @@ -82,8 +82,9 @@ export default { }, computed: { dynamicUrl() { - const baseUrl = '/api/v1/xpack/cloud/sync-instance-tasks/instances/' - return this.object ? `${baseUrl}?task_id=${this.object.task.id}` : baseUrl + const category = this.$route.query.category + const baseUrl = `/api/v1/xpack/cloud/sync-instance-tasks/instances/?category=${category}` + return this.object ? `${baseUrl}&task_id=${this.object.task.id}` : baseUrl } }, mounted() { diff --git a/src/views/assets/Cloud/Account/AccountList.vue b/src/views/assets/Cloud/Account/AccountList.vue index ef886949d..add40da30 100644 --- a/src/views/assets/Cloud/Account/AccountList.vue +++ b/src/views/assets/Cloud/Account/AccountList.vue @@ -21,7 +21,7 @@ diff --git a/src/views/assets/Cloud/const.js b/src/views/assets/Cloud/const.js index 5a64ef6ee..bee3e7851 100644 --- a/src/views/assets/Cloud/const.js +++ b/src/views/assets/Cloud/const.js @@ -29,13 +29,15 @@ export const scp = 'scp' export const apsara_stack = 'apsara_stack' export const lan = 'lan' -export const publicCloudProviders = [ +export const publicHostProviders = [ aliyun, qcloud, qcloud_lighthouse, huaweicloud, baiducloud, jdcloud, kingsoftcloud, aws_china, aws_international, azure, azure_international, gcp, ucloud, volcengine ] +export const publicDBProviders = [aliyun] + export const privateCloudProviders = [ vmware, qingcloud_private, huaweicloud_private, ctyun_private, openstack, zstack, nutanix, fc, scp, apsara_stack diff --git a/src/views/assets/Cloud/index.vue b/src/views/assets/Cloud/index.vue index 21c3a7831..ccdbc80f7 100644 --- a/src/views/assets/Cloud/index.vue +++ b/src/views/assets/Cloud/index.vue @@ -13,6 +13,7 @@ export default { data() { return { config: { + title: '', activeMenu: 'CloudAccountList', submenu: [ { @@ -39,6 +40,11 @@ export default { } } } + }, + mounted() { + const category = this.$route.query.category || 'host' + const display = category === 'host' ? this.$t('Host') : this.$t('Database') + this.config.title = `${display} - ${this.$t('CloudSync')}` } }