From eb4eed47f88ede845021c8b3a8c3baa7300482e3 Mon Sep 17 00:00:00 2001 From: 3octaves <873551943@qq.com> Date: Tue, 15 Apr 2025 16:50:45 +0800 Subject: [PATCH] =?UTF-8?q?feat(frontend):=20=E9=83=A8=E7=BD=B2=E5=8D=95?= =?UTF-8?q?=E6=8D=AE=E6=94=AF=E6=8C=81=E5=86=8D=E6=AC=A1=E6=8F=90=E5=8D=95?= =?UTF-8?q?=20#10058?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dbm-ui/frontend/src/locales/zh-cn.json | 2 + .../model/ticket/details/doris/apply.ts | 8 +- .../ticket/details/elastic-search/apply.ts | 8 +- .../model/ticket/details/hdfs/apply.ts | 2 + .../model/ticket/details/kafka/apply.ts | 2 + .../ticket/details/mongodb/replicasetApply.ts | 1 + .../ticket/details/mongodb/shardApply.ts | 2 + .../model/ticket/details/mysql/haApply.ts | 3 +- .../model/ticket/details/mysql/singleApply.ts | 6 +- .../model/ticket/details/pulsar/apply.ts | 4 +- .../ticket/details/redis/clusterApply.ts | 1 + .../model/ticket/details/redis/insApply.ts | 6 +- .../model/ticket/details/riak/apply.ts | 6 +- .../model/ticket/details/sqlserver/haApply.ts | 2 + .../ticket/details/sqlserver/singleApply.ts | 4 +- .../common/apply-items/BusinessItems.vue | 6 +- .../components/Subzones.vue | 15 +- .../src/views/db-manage/doris/apply/Index.vue | 37 +++- .../db-manage/elastic-search/apply/Index.vue | 40 ++++- .../src/views/db-manage/hdfs/apply/Index.vue | 40 ++++- .../db-manage/influxdb/apply/common/base.ts | 45 ----- .../views/db-manage/influxdb/apply/index.vue | 66 ++++++- .../src/views/db-manage/kafka/apply/Index.vue | 46 ++++- .../mongodb/replica-set-apply/Index.vue | 45 ++++- .../mongodb/shared-cluster-apply/Index.vue | 43 ++++- .../db-manage/mysql/apply/ApplyMySQL.vue | 170 +++++++++--------- .../mysql/apply/hooks/useMysqlData.ts | 16 +- .../db-manage/pulsar/apply/common/base.ts | 63 ------- .../views/db-manage/pulsar/apply/index.vue | 89 ++++++++- .../views/db-manage/redis/apply-ha/Index.vue | 95 ++++++++-- .../db-manage/redis/apply/ApplyRedis.vue | 42 ++++- .../apply/components/backend-spec/Index.vue | 2 +- .../src/views/db-manage/riak/apply/Index.vue | 36 +++- .../db-manage/sqlserver/apply/SqlServer.vue | 89 ++++++++- .../db-manage/tendb-cluster/apply/Index.vue | 90 +++++----- .../ticket-center/common/TicketClone.vue | 12 ++ .../components/info-list/InfoItem.vue | 14 +- .../task-info/com-factory/doris/Apply.vue | 3 + .../com-factory/elastic-search/Apply.vue | 7 +- .../task-info/com-factory/hdfs/Apply.vue | 8 +- .../task-info/com-factory/kafka/Apply.vue | 3 + .../com-factory/mongodb/ReplicasetApply.vue | 6 +- .../com-factory/mongodb/ShardApply.vue | 6 +- .../task-info/com-factory/mysql/HaApply.vue | 7 +- .../com-factory/mysql/SingleApply.vue | 7 +- .../task-info/com-factory/pulsar/Apply.vue | 12 +- .../com-factory/redis/ClusterApply.vue | 3 + .../task-info/com-factory/redis/InsApply.vue | 20 ++- .../task-info/com-factory/riak/Apply.vue | 4 +- .../com-factory/sqlserver/HaApply.vue | 13 +- .../com-factory/sqlserver/SingleApply.vue | 13 +- .../com-factory/tendbCluster/Apply.vue | 5 +- 52 files changed, 928 insertions(+), 347 deletions(-) delete mode 100644 dbm-ui/frontend/src/views/db-manage/influxdb/apply/common/base.ts delete mode 100644 dbm-ui/frontend/src/views/db-manage/pulsar/apply/common/base.ts diff --git a/dbm-ui/frontend/src/locales/zh-cn.json b/dbm-ui/frontend/src/locales/zh-cn.json index d40cd8e740..0f30b8651a 100644 --- a/dbm-ui/frontend/src/locales/zh-cn.json +++ b/dbm-ui/frontend/src/locales/zh-cn.json @@ -4399,5 +4399,7 @@ "请选择标签": "请选择标签", "编辑集群别名": "编辑集群别名", "目标分区异常": "目标分区异常", + "SQLServer 起始端口": "SQLServer 起始端口", + "每台主机 oplog 容量占比": "每台主机 oplog 容量占比", "这行勿动!新增翻译请在上一行添加!": "" } diff --git a/dbm-ui/frontend/src/services/model/ticket/details/doris/apply.ts b/dbm-ui/frontend/src/services/model/ticket/details/doris/apply.ts index 4da828a6ba..0b8dfc35da 100644 --- a/dbm-ui/frontend/src/services/model/ticket/details/doris/apply.ts +++ b/dbm-ui/frontend/src/services/model/ticket/details/doris/apply.ts @@ -3,6 +3,8 @@ import type { HostInfo } from '@services/types'; import type { DetailBase, SpecInfo } from '../common'; export interface Apply extends DetailBase { + bk_cloud_id: number; + bk_cloud_name: string; city_code: string; cluster_alias: string; cluster_name: string; @@ -19,9 +21,9 @@ export interface Apply extends DetailBase { }; query_port: number; resource_spec?: { - cold: SpecInfo; + cold?: SpecInfo; follower: SpecInfo; - hot: SpecInfo; - observer: SpecInfo; + hot?: SpecInfo; + observer?: SpecInfo; }; } diff --git a/dbm-ui/frontend/src/services/model/ticket/details/elastic-search/apply.ts b/dbm-ui/frontend/src/services/model/ticket/details/elastic-search/apply.ts index 1e5951ba72..feaa850086 100644 --- a/dbm-ui/frontend/src/services/model/ticket/details/elastic-search/apply.ts +++ b/dbm-ui/frontend/src/services/model/ticket/details/elastic-search/apply.ts @@ -3,6 +3,8 @@ import type { HostInfo } from '@services/types'; import type { DetailBase, SpecInfo } from '../common'; export interface Apply extends DetailBase { + bk_cloud_id: number; + bk_cloud_name: string; city_code: string; cluster_alias: string; cluster_name: string; @@ -18,9 +20,9 @@ export interface Apply extends DetailBase { master: HostInfo[]; }; resource_spec: { - client: SpecInfo; - cold: SpecInfo; - hot: SpecInfo; + client?: SpecInfo; + cold?: SpecInfo; + hot?: SpecInfo; master: SpecInfo; }; } diff --git a/dbm-ui/frontend/src/services/model/ticket/details/hdfs/apply.ts b/dbm-ui/frontend/src/services/model/ticket/details/hdfs/apply.ts index ab5bc8855e..61940890ef 100644 --- a/dbm-ui/frontend/src/services/model/ticket/details/hdfs/apply.ts +++ b/dbm-ui/frontend/src/services/model/ticket/details/hdfs/apply.ts @@ -3,6 +3,8 @@ import type { HostInfo } from '@services/types'; import type { DetailBase, SpecInfo } from '../common'; export interface Apply extends DetailBase { + bk_cloud_id: number; + bk_cloud_name: string; city_code: string; cluster_alias: string; cluster_name: string; diff --git a/dbm-ui/frontend/src/services/model/ticket/details/kafka/apply.ts b/dbm-ui/frontend/src/services/model/ticket/details/kafka/apply.ts index d73e44f432..5ad1e0647c 100644 --- a/dbm-ui/frontend/src/services/model/ticket/details/kafka/apply.ts +++ b/dbm-ui/frontend/src/services/model/ticket/details/kafka/apply.ts @@ -3,6 +3,8 @@ import type { HostInfo } from '@services/types'; import type { DetailBase, SpecInfo } from '../common'; export interface Apply extends DetailBase { + bk_cloud_id: number; + bk_cloud_name: string; city_code: string; cluster_alias: string; cluster_name: string; diff --git a/dbm-ui/frontend/src/services/model/ticket/details/mongodb/replicasetApply.ts b/dbm-ui/frontend/src/services/model/ticket/details/mongodb/replicasetApply.ts index 7e917db000..b6ed7abb6a 100644 --- a/dbm-ui/frontend/src/services/model/ticket/details/mongodb/replicasetApply.ts +++ b/dbm-ui/frontend/src/services/model/ticket/details/mongodb/replicasetApply.ts @@ -1,6 +1,7 @@ import type { DetailBase, SpecInfo } from '../common'; export interface ReplicasetApply extends DetailBase { + bk_cloud_id: number; bk_cloud_name: string; cap_spec: string; city_code: string; diff --git a/dbm-ui/frontend/src/services/model/ticket/details/mongodb/shardApply.ts b/dbm-ui/frontend/src/services/model/ticket/details/mongodb/shardApply.ts index e2256a3a39..7d80ae5765 100644 --- a/dbm-ui/frontend/src/services/model/ticket/details/mongodb/shardApply.ts +++ b/dbm-ui/frontend/src/services/model/ticket/details/mongodb/shardApply.ts @@ -1,6 +1,7 @@ import type { DetailBase, SpecInfo } from '../common'; export interface ShardApply extends DetailBase { + bk_cloud_id: number; bk_cloud_name: string; cap_key: string; cap_spec: string; @@ -22,4 +23,5 @@ export interface ShardApply extends DetailBase { mongos: SpecInfo; }; start_port: number; + sub_zone_ids: string[]; } diff --git a/dbm-ui/frontend/src/services/model/ticket/details/mysql/haApply.ts b/dbm-ui/frontend/src/services/model/ticket/details/mysql/haApply.ts index 4bbda886da..3bf7f0281c 100644 --- a/dbm-ui/frontend/src/services/model/ticket/details/mysql/haApply.ts +++ b/dbm-ui/frontend/src/services/model/ticket/details/mysql/haApply.ts @@ -2,10 +2,12 @@ import type { DetailBase, SpecInfo } from '../common'; export interface HaApply extends DetailBase { bk_cloud_id: number; + bk_cloud_name: string; charset: string; city_code: string; city_name: string; cluster_count: number; + db_app_abbr: string; db_module_id: number; db_module_name: string; db_version: string; @@ -22,7 +24,6 @@ export interface HaApply extends DetailBase { proxy: { bk_cloud_id: number; bk_host_id: number; ip: string }[]; }; resource_spec?: { - backend: SpecInfo; backend_group: SpecInfo; proxy: SpecInfo; }; diff --git a/dbm-ui/frontend/src/services/model/ticket/details/mysql/singleApply.ts b/dbm-ui/frontend/src/services/model/ticket/details/mysql/singleApply.ts index 771aceeaeb..f08e335911 100644 --- a/dbm-ui/frontend/src/services/model/ticket/details/mysql/singleApply.ts +++ b/dbm-ui/frontend/src/services/model/ticket/details/mysql/singleApply.ts @@ -2,13 +2,16 @@ import type { DetailBase, SpecInfo } from '../common'; export interface SingleApply extends DetailBase { bk_cloud_id: number; + bk_cloud_name: string; charset: string; city_code: string; city_name: string; cluster_count: number; + db_app_abbr: string; db_module_id: number; db_module_name: string; db_version: string; + disaster_tolerance_level: string; domains: { key: string; master: string; @@ -18,11 +21,10 @@ export interface SingleApply extends DetailBase { nodes?: { backend: { bk_cloud_id: number; bk_host_id: number; ip: string }[]; }; - resource_spec: { + resource_spec?: { backend: SpecInfo; }; spec: string; spec_display: string; start_mysql_port: number; - start_proxy_port: number; } diff --git a/dbm-ui/frontend/src/services/model/ticket/details/pulsar/apply.ts b/dbm-ui/frontend/src/services/model/ticket/details/pulsar/apply.ts index aa80b6c8ee..409c4dc6c6 100644 --- a/dbm-ui/frontend/src/services/model/ticket/details/pulsar/apply.ts +++ b/dbm-ui/frontend/src/services/model/ticket/details/pulsar/apply.ts @@ -2,6 +2,8 @@ import type { DetailBase, SpecInfo } from '../common'; export interface Apply extends DetailBase { ack_quorum: number; + bk_cloud_id: number; + bk_cloud_name: string; city_code: string; cluster_alias: string; cluster_name: string; @@ -18,7 +20,7 @@ export interface Apply extends DetailBase { password: string; port: number; replication_num: number; - resource_spec: { + resource_spec?: { bookkeeper: SpecInfo; broker: SpecInfo; zookeeper: SpecInfo; diff --git a/dbm-ui/frontend/src/services/model/ticket/details/redis/clusterApply.ts b/dbm-ui/frontend/src/services/model/ticket/details/redis/clusterApply.ts index 3dd1f38d60..057bc09d09 100644 --- a/dbm-ui/frontend/src/services/model/ticket/details/redis/clusterApply.ts +++ b/dbm-ui/frontend/src/services/model/ticket/details/redis/clusterApply.ts @@ -6,6 +6,7 @@ import type { DetailBase, SpecInfo } from '../common'; export interface ClusterApply extends DetailBase { bk_cloud_id: number; + bk_cloud_name: string; cap_key: string; cap_spec: string; city_code: string; diff --git a/dbm-ui/frontend/src/services/model/ticket/details/redis/insApply.ts b/dbm-ui/frontend/src/services/model/ticket/details/redis/insApply.ts index cdeab19cb7..66ed352700 100644 --- a/dbm-ui/frontend/src/services/model/ticket/details/redis/insApply.ts +++ b/dbm-ui/frontend/src/services/model/ticket/details/redis/insApply.ts @@ -3,8 +3,10 @@ import type { DetailBase, SpecInfo } from '../common'; export interface InsApply extends DetailBase { append_apply: boolean; // 是否是追加部署 bk_cloud_id: number; + bk_cloud_name: string; city_code?: string; // 追加就非必填 cluster_type: string; + db_app_abbr: string; db_version?: string; // 追加就非必填 disaster_tolerance_level: string; infos: { @@ -24,9 +26,11 @@ export interface InsApply extends DetailBase { cluster_name: string; databases: number; }[]; + ip_source: string; port?: number; // 追加就非必填 + redis_pwd: string; // 如果是新部署,则一定从资源池部署 - resource_spec: { + resource_spec?: { backend_group: SpecInfo; }; } diff --git a/dbm-ui/frontend/src/services/model/ticket/details/riak/apply.ts b/dbm-ui/frontend/src/services/model/ticket/details/riak/apply.ts index 77b2a373b0..5e130afdfc 100644 --- a/dbm-ui/frontend/src/services/model/ticket/details/riak/apply.ts +++ b/dbm-ui/frontend/src/services/model/ticket/details/riak/apply.ts @@ -1,13 +1,17 @@ import type { DetailBase, SpecInfo } from '../common'; export interface Apply extends DetailBase { + bk_cloud_id: number; bk_cloud_name: string; city_code: string; city_name: string; cluster_alias: string; cluster_name: string; + db_app_abbr: string; + db_module_id: number; db_module_name: string; db_version: string; + disaster_tolerance_level: string; ip_source: string; nodes?: { riak: { @@ -16,7 +20,7 @@ export interface Apply extends DetailBase { ip: string; }[]; }; - resource_spec: { + resource_spec?: { riak: SpecInfo; }; } diff --git a/dbm-ui/frontend/src/services/model/ticket/details/sqlserver/haApply.ts b/dbm-ui/frontend/src/services/model/ticket/details/sqlserver/haApply.ts index fd156a5351..e28e3b21f9 100644 --- a/dbm-ui/frontend/src/services/model/ticket/details/sqlserver/haApply.ts +++ b/dbm-ui/frontend/src/services/model/ticket/details/sqlserver/haApply.ts @@ -4,10 +4,12 @@ import type { DetailBase, SpecInfo } from '../common'; export interface HaApply extends DetailBase { bk_cloud_id: number; + bk_cloud_name: string; charset: string; city_code: string; city_name: string; cluster_count: number; + db_app_abbr: string; db_module_id: number; db_module_name: string; db_version: string; diff --git a/dbm-ui/frontend/src/services/model/ticket/details/sqlserver/singleApply.ts b/dbm-ui/frontend/src/services/model/ticket/details/sqlserver/singleApply.ts index b686d703e1..f3f1e24631 100644 --- a/dbm-ui/frontend/src/services/model/ticket/details/sqlserver/singleApply.ts +++ b/dbm-ui/frontend/src/services/model/ticket/details/sqlserver/singleApply.ts @@ -4,13 +4,16 @@ import type { DetailBase, SpecInfo } from '../common'; export interface SingleApply extends DetailBase { bk_cloud_id: number; + bk_cloud_name: string; charset: string; city_code: string; city_name: string; cluster_count: number; + db_app_abbr: string; db_module_id: number; db_module_name: string; db_version: string; + disaster_tolerance_level: string; domains: { key: string; master: string; @@ -27,7 +30,6 @@ export interface SingleApply extends DetailBase { }; resource_spec?: { backend: SpecInfo; - backend_group: SpecInfo; }; spec: string; spec_display: string; diff --git a/dbm-ui/frontend/src/views/db-manage/common/apply-items/BusinessItems.vue b/dbm-ui/frontend/src/views/db-manage/common/apply-items/BusinessItems.vue index 2f733d3bd2..4fc77abb44 100644 --- a/dbm-ui/frontend/src/views/db-manage/common/apply-items/BusinessItems.vue +++ b/dbm-ui/frontend/src/views/db-manage/common/apply-items/BusinessItems.vue @@ -138,14 +138,14 @@ ); watch( - () => [bizId.value, bizList.value], + [bizId, bizList], () => { currentBiz.value = _.find(bizList.value, (item) => item.bk_biz_id === bizId.value); const englishName = currentBiz.value?.english_name; hasEnglishName.value = !!englishName; appAbbr.value = englishName ?? ''; - // 从申请实例 跳转过来,需要同步数据出去 - if (route.query.bizId && currentBiz.value) { + // 从申请实例 跳转过来,或单据克隆,需要同步数据出去 + if ((route.query.bizId || route.query.ticketType) && currentBiz.value) { handleAppChange(currentBiz.value); } }, diff --git a/dbm-ui/frontend/src/views/db-manage/common/apply-items/region-requirements/components/Subzones.vue b/dbm-ui/frontend/src/views/db-manage/common/apply-items/region-requirements/components/Subzones.vue index eef289c56d..f2926ae3f2 100644 --- a/dbm-ui/frontend/src/views/db-manage/common/apply-items/region-requirements/components/Subzones.vue +++ b/dbm-ui/frontend/src/views/db-manage/common/apply-items/region-requirements/components/Subzones.vue @@ -80,17 +80,26 @@ const { t } = useI18n(); + const MIN_COUNT = 2; + const isAllCheck = ref(true); const subZone = ref(0); - const subZones = ref([]); + const subZones = ref([] as number[]); + + if (modelValue.value) { + if (modelValue.value.length >= MIN_COUNT) { + subZones.value = modelValue.value; + isAllCheck.value = false; + } else if (modelValue.value.length === 1) { + [subZone.value] = modelValue.value; + } + } const rules = [ { required: true, trigger: 'change', validator: (value: number[]) => { - const MIN_COUNT = 2; - if (max.value === 1) { return value.length > 0 ? true : Promise.resolve(t('园区不能为空')); } diff --git a/dbm-ui/frontend/src/views/db-manage/doris/apply/Index.vue b/dbm-ui/frontend/src/views/db-manage/doris/apply/Index.vue index d6b2a6119a..68e1f2d836 100644 --- a/dbm-ui/frontend/src/views/db-manage/doris/apply/Index.vue +++ b/dbm-ui/frontend/src/views/db-manage/doris/apply/Index.vue @@ -384,9 +384,10 @@ import _ from 'lodash'; import { useI18n } from 'vue-i18n'; + import type { Doris } from '@services/model/ticket/ticket'; import type { BizItem, HostInfo } from '@services/types'; - import { useApplyBase } from '@hooks'; + import { useApplyBase, useTicketDetail } from '@hooks'; import { Affinity, DBTypes, TicketTypes } from '@common/const'; @@ -409,6 +410,40 @@ const router = useRouter(); const { t } = useI18n(); + useTicketDetail(TicketTypes.DORIS_APPLY, { + onSuccess(ticketDetail) { + const { details } = ticketDetail; + + Object.assign(formData, { + bk_biz_id: ticketDetail.bk_biz_id, + remark: ticketDetail.remark, + }); + Object.assign(formData.details, { + bk_cloud_id: details.bk_cloud_id, + city_code: details.city_code, + cluster_alias: details.cluster_alias, + cluster_name: details.cluster_name, + db_version: details.db_version, + disaster_tolerance_level: details.disaster_tolerance_level, + http_port: details.http_port, + ip_source: details.ip_source, + query_port: details.query_port, + }); + + if (details.ip_source === 'resource_pool') { + const resourceSpec = Object.entries(details.resource_spec!).reduce((prev, [specType, specInfo]) => { + return Object.assign(prev, { + [specType]: { + count: specInfo.count, + spec_id: specInfo.spec_id, + }, + }); + }, {}); + Object.assign(formData.details.resource_spec, resourceSpec); + } + }, + }); + const makeMapByHostId = (hostList: HostInfo[]) => hostList.reduce( (result, item) => ({ diff --git a/dbm-ui/frontend/src/views/db-manage/elastic-search/apply/Index.vue b/dbm-ui/frontend/src/views/db-manage/elastic-search/apply/Index.vue index 1a664af3b2..5fe826b3d5 100644 --- a/dbm-ui/frontend/src/views/db-manage/elastic-search/apply/Index.vue +++ b/dbm-ui/frontend/src/views/db-manage/elastic-search/apply/Index.vue @@ -337,11 +337,12 @@ import { useI18n } from 'vue-i18n'; import { useRoute, useRouter } from 'vue-router'; + import type { Es } from '@services/model/ticket/ticket'; import type { BizItem, HostInfo } from '@services/types'; - import { useApplyBase } from '@hooks'; + import { useApplyBase, useTicketDetail } from '@hooks'; - import { Affinity, DBTypes, OSTypes } from '@common/const'; + import { Affinity, DBTypes, OSTypes, TicketTypes } from '@common/const'; import IpSelector from '@components/ip-selector/IpSelector.vue'; @@ -362,6 +363,39 @@ const router = useRouter(); const { t } = useI18n(); + useTicketDetail(TicketTypes.ES_APPLY, { + onSuccess(ticketDetail) { + const { details } = ticketDetail; + + Object.assign(formData, { + bk_biz_id: ticketDetail.bk_biz_id, + remark: ticketDetail.remark, + }); + Object.assign(formData.details, { + bk_cloud_id: details.bk_cloud_id, + city_code: details.city_code, + cluster_alias: details.cluster_alias, + cluster_name: details.cluster_name, + db_version: details.db_version, + disaster_tolerance_level: details.disaster_tolerance_level, + http_port: details.http_port, + ip_source: details.ip_source, + }); + + if (details.ip_source === 'resource_pool') { + const resourceSpec = Object.entries(details.resource_spec!).reduce((prev, [specType, specInfo]) => { + return Object.assign(prev, { + [specType]: { + count: specInfo.count, + spec_id: specInfo.spec_id, + }, + }); + }, {}); + Object.assign(formData.details.resource_spec, resourceSpec); + } + }, + }); + const makeMapByHostId = (hostList: HostInfo[]) => hostList.reduce( (result, item) => ({ @@ -410,7 +444,7 @@ sub_zone_ids: [] as number[], }, remark: '', - ticket_type: 'ES_APPLY', + ticket_type: TicketTypes.ES_APPLY, }); const formatIpDataWidthInstance = (data: HostInfo[]) => diff --git a/dbm-ui/frontend/src/views/db-manage/hdfs/apply/Index.vue b/dbm-ui/frontend/src/views/db-manage/hdfs/apply/Index.vue index 7862e51a0f..a42a23858b 100644 --- a/dbm-ui/frontend/src/views/db-manage/hdfs/apply/Index.vue +++ b/dbm-ui/frontend/src/views/db-manage/hdfs/apply/Index.vue @@ -342,11 +342,12 @@ import { useI18n } from 'vue-i18n'; import { useRoute, useRouter } from 'vue-router'; + import type { Hdfs } from '@services/model/ticket/ticket'; import type { BizItem, HostInfo } from '@services/types'; - import { useApplyBase } from '@hooks'; + import { useApplyBase, useTicketDetail } from '@hooks'; - import { Affinity, DBTypes, OSTypes } from '@common/const'; + import { Affinity, DBTypes, OSTypes, TicketTypes } from '@common/const'; import IpSelector from '@components/ip-selector/IpSelector.vue'; @@ -365,6 +366,39 @@ const router = useRouter(); const { t } = useI18n(); + useTicketDetail(TicketTypes.HDFS_APPLY, { + onSuccess(ticketDetail) { + const { details } = ticketDetail; + + Object.assign(formData, { + bk_biz_id: ticketDetail.bk_biz_id, + remark: ticketDetail.remark, + }); + Object.assign(formData.details, { + bk_cloud_id: details.bk_cloud_id, + city_code: details.city_code, + cluster_alias: details.cluster_alias, + cluster_name: details.cluster_name, + db_version: details.db_version, + disaster_tolerance_level: details.disaster_tolerance_level, + http_port: details.http_port, + ip_source: details.ip_source, + }); + + if (details.ip_source === 'resource_pool') { + const resourceSpec = Object.entries(details.resource_spec!).reduce((prev, [specType, specInfo]) => { + return Object.assign(prev, { + [specType]: { + count: specInfo.count, + spec_id: specInfo.spec_id, + }, + }); + }, {}); + Object.assign(formData.details.resource_spec, resourceSpec); + } + }, + }); + const genDefaultFormData = () => ({ bk_biz_id: '' as number | '', details: { @@ -400,7 +434,7 @@ sub_zone_ids: [] as number[], }, remark: '', - ticket_type: 'HDFS_APPLY', + ticket_type: TicketTypes.HDFS_APPLY, }); const getSmartActionOffsetTarget = () => document.querySelector('.bk-form-content'); diff --git a/dbm-ui/frontend/src/views/db-manage/influxdb/apply/common/base.ts b/dbm-ui/frontend/src/views/db-manage/influxdb/apply/common/base.ts deleted file mode 100644 index f6dc58eeb1..0000000000 --- a/dbm-ui/frontend/src/views/db-manage/influxdb/apply/common/base.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* - * TencentBlueKing is pleased to support the open source community by making 蓝鲸智云-DB管理系统(BlueKing-BK-DBM) available. - * - * Copyright (C) 2017-2023 THL A29 Limited, a Tencent company. All rights reserved. - * - * Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at https://opensource.org/licenses/MIT - * - * 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. - */ - -import type { HostInfo } from '@services/types'; - -import { Affinity } from '@common/const'; - -/** - * 初始化表单数据 - * @returns formdata - */ -export const getInitFormdata = () => ({ - bk_biz_id: '', - details: { - bk_cloud_id: 0, - city_code: '', - db_app_abbr: '', - db_version: '', - disaster_tolerance_level: Affinity.MAX_EACH_ZONE_EQUAL, // 同 affinity - group_id: '', - ip_source: 'resource_pool', - nodes: { - influxdb: [] as HostInfo[], - }, - port: 8080, - resource_spec: { - influxdb: { - count: 1, - spec_id: '', - }, - }, - }, - remark: '', - ticket_type: 'INFLUXDB_APPLY', -}); diff --git a/dbm-ui/frontend/src/views/db-manage/influxdb/apply/index.vue b/dbm-ui/frontend/src/views/db-manage/influxdb/apply/index.vue index d49a37630e..94a32da422 100644 --- a/dbm-ui/frontend/src/views/db-manage/influxdb/apply/index.vue +++ b/dbm-ui/frontend/src/views/db-manage/influxdb/apply/index.vue @@ -173,12 +173,13 @@ import { useI18n } from 'vue-i18n'; import { useRoute, useRouter } from 'vue-router'; + import type { Influxdb } from '@services/model/ticket/ticket'; import { checkHost } from '@services/source/ipchooser'; - import type { BizItem } from '@services/types'; + import type { BizItem, HostInfo } from '@services/types'; - import { useApplyBase } from '@hooks'; + import { useApplyBase, useTicketDetail } from '@hooks'; - import { DBTypes, OSTypes } from '@common/const'; + import { Affinity, DBTypes, OSTypes, TicketTypes } from '@common/const'; import IpSelector from '@components/ip-selector/IpSelector.vue'; @@ -189,17 +190,74 @@ import RegionRequirements from '@views/db-manage/common/apply-items/region-requirements/BigData.vue'; import SpecSelector from '@views/db-manage/common/apply-items/SpecSelector.vue'; - import { getInitFormdata } from './common/base'; import GroupItem from './components/GroupItem.vue'; const getSmartActionOffsetTarget = () => document.querySelector('.bk-form-content'); + const getInitFormdata = () => ({ + bk_biz_id: '', + details: { + bk_cloud_id: 0, + city_code: '', + db_app_abbr: '', + db_version: '', + disaster_tolerance_level: Affinity.MAX_EACH_ZONE_EQUAL, // 同 affinity + group_id: '', + ip_source: 'resource_pool', + nodes: { + influxdb: [] as HostInfo[], + }, + port: 8080, + resource_spec: { + influxdb: { + count: 1, + spec_id: '', + }, + }, + sub_zone_ids: [] as number[], + }, + remark: '', + ticket_type: TicketTypes.INFLUXDB_APPLY, + }); + const route = useRoute(); const router = useRouter(); const { t } = useI18n(); const { baseState, bizState, handleCancel, handleCreateAppAbbr, handleCreateTicket } = useApplyBase(); + useTicketDetail(TicketTypes.INFLUXDB_APPLY, { + onSuccess(ticketDetail) { + const { details } = ticketDetail; + + Object.assign(formdata, { + bk_biz_id: ticketDetail.bk_biz_id, + remark: ticketDetail.remark, + }); + Object.assign(formdata.details, { + bk_cloud_id: details.bk_cloud_id, + city_code: details.city_code, + db_version: details.db_version, + disaster_tolerance_level: details.disaster_tolerance_level, + group_id: details.group_id, + ip_source: details.ip_source, + port: details.port, + }); + + if (details.ip_source === 'resource_pool') { + const resourceSpec = Object.entries(details.resource_spec!).reduce((prev, [specType, specInfo]) => { + return Object.assign(prev, { + [specType]: { + count: specInfo.count, + spec_id: specInfo.spec_id, + }, + }); + }, {}); + Object.assign(formdata.details.resource_spec, resourceSpec); + } + }, + }); + const regionRequirementsRef = useTemplateRef('regionRequirements'); const groupName = ref(''); diff --git a/dbm-ui/frontend/src/views/db-manage/kafka/apply/Index.vue b/dbm-ui/frontend/src/views/db-manage/kafka/apply/Index.vue index 75af14573e..763531c64d 100644 --- a/dbm-ui/frontend/src/views/db-manage/kafka/apply/Index.vue +++ b/dbm-ui/frontend/src/views/db-manage/kafka/apply/Index.vue @@ -329,11 +329,12 @@ import { useI18n } from 'vue-i18n'; import { useRoute, useRouter } from 'vue-router'; + import type { Kafka } from '@services/model/ticket/ticket'; import type { BizItem, HostInfo } from '@services/types'; - import { useApplyBase } from '@hooks'; + import { useApplyBase, useTicketDetail } from '@hooks'; - import { Affinity, DBTypes, OSTypes } from '@common/const'; + import { Affinity, DBTypes, OSTypes, TicketTypes } from '@common/const'; import IpSelector from '@components/ip-selector/IpSelector.vue'; @@ -351,6 +352,45 @@ const router = useRouter(); const { t } = useI18n(); + useTicketDetail(TicketTypes.KAFKA_APPLY, { + onSuccess(ticketDetail) { + const { details } = ticketDetail; + + Object.assign(formData, { + bk_biz_id: ticketDetail.bk_biz_id, + remark: ticketDetail.remark, + }); + Object.assign(formData.details, { + bk_cloud_id: details.bk_cloud_id, + city_code: details.city_code, + cluster_alias: details.cluster_alias, + cluster_name: details.cluster_name, + db_version: details.db_version, + disaster_tolerance_level: details.disaster_tolerance_level, + http_port: details.http_port, + ip_source: details.ip_source, + no_security: details.no_security || 0, + partition_num: details.partition_num, + port: details.port, + replication_num: details.replication_num, + retention_bytes: details.retention_bytes, + retention_hours: details.retention_hours, + }); + + if (details.ip_source === 'resource_pool') { + const resourceSpec = Object.entries(details.resource_spec!).reduce((prev, [specType, specInfo]) => { + return Object.assign(prev, { + [specType]: { + count: specInfo.count, + spec_id: specInfo.spec_id, + }, + }); + }, {}); + Object.assign(formData.details.resource_spec, resourceSpec); + } + }, + }); + const formatIpData = (data: HostInfo[]) => data.map((item) => ({ ...item, @@ -391,7 +431,7 @@ sub_zone_ids: [] as number[], }, remark: '', - ticket_type: 'KAFKA_APPLY', + ticket_type: TicketTypes.KAFKA_APPLY, }); const getSmartActionOffsetTarget = () => document.querySelector('.bk-form-content'); diff --git a/dbm-ui/frontend/src/views/db-manage/mongodb/replica-set-apply/Index.vue b/dbm-ui/frontend/src/views/db-manage/mongodb/replica-set-apply/Index.vue index 061ee159e0..2c37afed7f 100644 --- a/dbm-ui/frontend/src/views/db-manage/mongodb/replica-set-apply/Index.vue +++ b/dbm-ui/frontend/src/views/db-manage/mongodb/replica-set-apply/Index.vue @@ -148,7 +148,7 @@ (TicketTypes.MONGODB_REPLICASET_APPLY, { + onSuccess(ticketDetail) { + const { details } = ticketDetail; + + Object.assign(formData, { + bk_biz_id: ticketDetail.bk_biz_id, + remark: ticketDetail.remark, + }); + Object.assign(formData.details, { + bk_cloud_id: details.bk_cloud_id, + city_code: details.city_code, + cluster_type: details.cluster_type, + db_version: details.db_version, + disaster_tolerance_level: details.disaster_tolerance_level, + ip_source: details.ip_source, + node_count: details.node_count, + node_replica_count: details.node_replica_count, + oplog_percent: details.oplog_percent, + replica_count: details.replica_count, + replica_sets: details.replica_sets, + start_port: details.start_port, + }); + + if (details.ip_source === 'resource_pool') { + const resourceSpec = Object.entries(details.resource_spec!).reduce((prev, [specType, specInfo]) => { + return Object.assign(prev, { + [specType]: { + count: specInfo.count, + spec_id: specInfo.spec_id, + }, + }); + }, {}); + Object.assign(formData.details, { + resource_spec: resourceSpec, + sub_zone_ids: details.resource_spec!.mongo_machine_set.location_spec.sub_zone_ids || [], + }); + } + }, + }); + const regionRequirementsRef = useTemplateRef('regionRequirements'); const formRef = ref>(); diff --git a/dbm-ui/frontend/src/views/db-manage/mongodb/shared-cluster-apply/Index.vue b/dbm-ui/frontend/src/views/db-manage/mongodb/shared-cluster-apply/Index.vue index ded7a3bd90..5924e5396f 100644 --- a/dbm-ui/frontend/src/views/db-manage/mongodb/shared-cluster-apply/Index.vue +++ b/dbm-ui/frontend/src/views/db-manage/mongodb/shared-cluster-apply/Index.vue @@ -143,7 +143,7 @@ }" /> (TicketTypes.MONGODB_SHARD_APPLY, { + onSuccess(ticketDetail) { + const { details } = ticketDetail; + + Object.assign(formData, { + bk_biz_id: ticketDetail.bk_biz_id, + remark: ticketDetail.remark, + }); + Object.assign(formData.details, { + bk_cloud_id: details.bk_cloud_id, + city_code: details.city_code, + cluster_alias: details.cluster_alias, + cluster_name: details.cluster_name, + cluster_type: details.cluster_type, + db_version: details.db_version, + disaster_tolerance_level: details.disaster_tolerance_level, + ip_source: details.ip_source, + oplog_percent: details.oplog_percent, + start_port: details.start_port, + }); + + if (details.ip_source === 'resource_pool') { + const resourceSpec = Object.entries(details.resource_spec!).reduce((prev, [specType, specInfo]) => { + return Object.assign(prev, { + [specType]: { + count: specInfo.count, + spec_id: specInfo.spec_id, + }, + }); + }, {}); + Object.assign(formData.details, { + resource_spec: resourceSpec, + sub_zone_ids: details.resource_spec!.mongo_config.location_spec.sub_zone_ids || [], + }); + } + }, + }); + const regionRequirementsRef = useTemplateRef('regionRequirements'); const formRef = ref>(); diff --git a/dbm-ui/frontend/src/views/db-manage/mysql/apply/ApplyMySQL.vue b/dbm-ui/frontend/src/views/db-manage/mysql/apply/ApplyMySQL.vue index a73498fc9b..11951b0097 100644 --- a/dbm-ui/frontend/src/views/db-manage/mysql/apply/ApplyMySQL.vue +++ b/dbm-ui/frontend/src/views/db-manage/mysql/apply/ApplyMySQL.vue @@ -310,9 +310,10 @@ import { useI18n } from 'vue-i18n'; import { useRoute } from 'vue-router'; + import type { Mysql } from '@services/model/ticket/ticket'; import type { BizItem, HostInfo } from '@services/types'; - import { useApplyBase, useTicketCloneInfo } from '@hooks'; + import { useApplyBase, useTicketDetail } from '@hooks'; import { DBTypes, mysqlType, type MysqlTypeString, TicketTypes } from '@common/const'; import { OSTypes } from '@common/const'; @@ -338,94 +339,93 @@ const route = useRoute(); const router = useRouter(); - // 单据克隆 - useTicketCloneInfo({ - onSuccess(cloneData) { - const { - affinity, - backendSpecId, - bizId, - cityCode, - cloudId, - clusterCount, - dbAppAbbr, - dbModuleId, - domains, - instNum, - ipSource, - // nodes, - proxySpecId, - remark, - startMysqlPort, - startProxyPort, - subZoneIds, - } = cloneData; - - formdata.details.disaster_tolerance_level = affinity; - formdata.details.sub_zone_ids = subZoneIds; - formdata.bk_biz_id = bizId; - formdata.details.bk_cloud_id = cloudId; - formdata.details.resource_spec.backend.spec_id = backendSpecId as number; - formdata.details.city_code = cityCode; - formdata.details.cluster_count = clusterCount; - formdata.details.db_module_id = dbModuleId; - formdata.details.domains = domains; - formdata.details.inst_num = instNum; - formdata.details.ip_source = ipSource; - formdata.details.resource_spec.proxy.spec_id = proxySpecId as number; - formdata.remark = remark; - formdata.details.start_mysql_port = startMysqlPort; - formdata.details.start_proxy_port = startProxyPort; - formdata.details.db_app_abbr = dbAppAbbr; - - bizState.hasEnglishName = !!dbAppAbbr; - - // TODO: 需要提供接口补全每台主机的信息,不然会缺少字段导致数据处理报错 - // formdata.details.nodes = nodes; + useTicketDetail(TicketTypes.MYSQL_SINGLE_APPLY, { + onSuccess(ticketDetail) { + const { details } = ticketDetail; + + Object.assign(formdata, { + bk_biz_id: ticketDetail.bk_biz_id, + remark: ticketDetail.remark, + }); + Object.assign(formdata.details, { + bk_cloud_id: details.bk_cloud_id, + city_code: details.city_code, + cluster_count: details.domains.length, + db_version: details.db_version, + disaster_tolerance_level: details.disaster_tolerance_level, + domains: details.domains, + ip_source: details.ip_source, + start_mysql_port: details.start_mysql_port, + }); + + if (details.ip_source === 'resource_pool') { + const { backend } = details.resource_spec!; + const resourceSpec = { + single: { + count: backend.count, + spec_id: backend.spec_id, + }, + }; + Object.assign(formdata.details, { + inst_num: details.domains.length / backend.count, + resource_spec: resourceSpec, + sub_zone_ids: details.resource_spec!.backend.location_spec.sub_zone_ids || [], + }); + } + + nextTick(() => { + Object.assign(formdata.details, { + db_module_id: details.db_module_id, + }); + }); }, - type: TicketTypes.MYSQL_HA_APPLY, }); - // 单据克隆 - useTicketCloneInfo({ - onSuccess(cloneData) { - const { - affinity, - bizId, - cityCode, - cloudId, - clusterCount, - dbAppAbbr, - dbModuleId, - domains, - instNum, - ipSource, - // nodes, - remark, - singleSpecId, - startMysqlPort, - subZoneIds, - } = cloneData; - - formdata.details.disaster_tolerance_level = affinity; - formdata.details.sub_zone_ids = subZoneIds; - formdata.bk_biz_id = bizId; - formdata.details.bk_cloud_id = cloudId; - formdata.details.city_code = cityCode; - formdata.details.cluster_count = clusterCount; - formdata.details.db_module_id = dbModuleId; - formdata.details.domains = domains; - formdata.details.inst_num = instNum; - formdata.details.ip_source = ipSource; - formdata.details.resource_spec.single.spec_id = singleSpecId; - formdata.remark = remark; - formdata.details.start_mysql_port = startMysqlPort; - // formdata.details.nodes = nodes; - formdata.details.db_app_abbr = dbAppAbbr; - - bizState.hasEnglishName = !!dbAppAbbr; + useTicketDetail(TicketTypes.MYSQL_HA_APPLY, { + onSuccess(ticketDetail) { + const { details } = ticketDetail; + + Object.assign(formdata, { + bk_biz_id: ticketDetail.bk_biz_id, + remark: ticketDetail.remark, + }); + Object.assign(formdata.details, { + bk_cloud_id: details.bk_cloud_id, + city_code: details.city_code, + cluster_count: details.domains.length, + db_version: details.db_version, + disaster_tolerance_level: details.disaster_tolerance_level, + domains: details.domains, + ip_source: details.ip_source, + start_mysql_port: details.start_mysql_port, + start_proxy_port: details.start_proxy_port, + }); + + if (details.ip_source === 'resource_pool') { + const { backend_group: backendGroup, proxy } = details.resource_spec!; + const resourceSpec = { + backend: { + count: backendGroup.count, + spec_id: backendGroup.spec_id, + }, + proxy: { + count: proxy.count, + spec_id: proxy.spec_id, + }, + }; + Object.assign(formdata.details, { + inst_num: details.domains.length / backendGroup.count, + resource_spec: resourceSpec, + sub_zone_ids: details.resource_spec!.backend_group.location_spec.sub_zone_ids || [], + }); + } + + nextTick(() => { + Object.assign(formdata.details, { + db_module_id: details.db_module_id, + }); + }); }, - type: TicketTypes.MYSQL_SINGLE_APPLY, }); const getSmartActionOffsetTarget = () => document.querySelector('.bk-form-content'); diff --git a/dbm-ui/frontend/src/views/db-manage/mysql/apply/hooks/useMysqlData.ts b/dbm-ui/frontend/src/views/db-manage/mysql/apply/hooks/useMysqlData.ts index 9f53711fda..76f2de5283 100644 --- a/dbm-ui/frontend/src/views/db-manage/mysql/apply/hooks/useMysqlData.ts +++ b/dbm-ui/frontend/src/views/db-manage/mysql/apply/hooks/useMysqlData.ts @@ -45,10 +45,10 @@ const getFormData = (type: string) => ({ backend: { affinity: '', count: 0, - location_spec: { - city: '', - sub_zone_ids: [], - }, + // location_spec: { + // city: '', + // sub_zone_ids: [], + // }, spec_id: '' as string | number, }, proxy: { @@ -57,10 +57,10 @@ const getFormData = (type: string) => ({ }, single: { count: 0, - location_spec: { - city: '', - sub_zone_ids: [], - }, + // location_spec: { + // city: '', + // sub_zone_ids: [], + // }, spec_id: '' as string | number, }, }, diff --git a/dbm-ui/frontend/src/views/db-manage/pulsar/apply/common/base.ts b/dbm-ui/frontend/src/views/db-manage/pulsar/apply/common/base.ts deleted file mode 100644 index 4d7297143e..0000000000 --- a/dbm-ui/frontend/src/views/db-manage/pulsar/apply/common/base.ts +++ /dev/null @@ -1,63 +0,0 @@ -/* - * TencentBlueKing is pleased to support the open source community by making 蓝鲸智云-DB管理系统(BlueKing-BK-DBM) available. - * - * Copyright (C) 2017-2023 THL A29 Limited, a Tencent company. All rights reserved. - * - * Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at https://opensource.org/licenses/MIT - * - * 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. - */ - -import type { HostInfo } from '@services/types'; - -import { Affinity } from '@common/const'; - -/** - * 初始化表单数据 - * @returns formdata - */ -export const getInitFormdata = () => ({ - bk_biz_id: '' as number | '', - details: { - ack_quorum: 1, - bk_cloud_id: 0, - city_code: '', - cluster_alias: '', - cluster_name: '', - db_app_abbr: '', - db_version: '', - disaster_tolerance_level: Affinity.MAX_EACH_ZONE_EQUAL, // 同 affinity - ip_source: 'resource_pool', - nodes: { - bookkeeper: [] as HostInfo[], - broker: [] as HostInfo[], - zookeeper: [] as HostInfo[], - }, - partition_num: 1, - password: '', - port: 6650, - replication_num: 2, - resource_spec: { - bookkeeper: { - count: 2, - spec_id: '', - }, - broker: { - count: 1, - spec_id: '', - }, - zookeeper: { - count: 3, - spec_id: '', - }, - }, - retention_hours: 1, - sub_zone_ids: [] as number[], - username: '', - }, - remark: '', - ticket_type: 'PULSAR_APPLY', -}); diff --git a/dbm-ui/frontend/src/views/db-manage/pulsar/apply/index.vue b/dbm-ui/frontend/src/views/db-manage/pulsar/apply/index.vue index 01db4f2e31..3f9a72c905 100644 --- a/dbm-ui/frontend/src/views/db-manage/pulsar/apply/index.vue +++ b/dbm-ui/frontend/src/views/db-manage/pulsar/apply/index.vue @@ -365,11 +365,12 @@ import { useI18n } from 'vue-i18n'; import { useRoute, useRouter } from 'vue-router'; + import type { Pulsar } from '@services/model/ticket/ticket'; import type { BizItem, HostInfo } from '@services/types'; - import { useApplyBase } from '@hooks'; + import { useApplyBase, useTicketDetail } from '@hooks'; - import { DBTypes, OSTypes } from '@common/const'; + import { Affinity, DBTypes, OSTypes, TicketTypes } from '@common/const'; import IpSelector from '@components/ip-selector/IpSelector.vue'; @@ -382,15 +383,95 @@ import RegionRequirements from '@views/db-manage/common/apply-items/region-requirements/BigData.vue'; import SpecSelector from '@views/db-manage/common/apply-items/SpecSelector.vue'; - import { getInitFormdata } from './common/base'; - const getSmartActionOffsetTarget = () => document.querySelector('.bk-form-content'); + const getInitFormdata = () => ({ + bk_biz_id: '' as number | '', + details: { + ack_quorum: 1, + bk_cloud_id: 0, + city_code: '', + cluster_alias: '', + cluster_name: '', + db_app_abbr: '', + db_version: '', + disaster_tolerance_level: Affinity.MAX_EACH_ZONE_EQUAL, // 同 affinity + ip_source: 'resource_pool', + nodes: { + bookkeeper: [] as HostInfo[], + broker: [] as HostInfo[], + zookeeper: [] as HostInfo[], + }, + partition_num: 1, + // password: '', + port: 6650, + replication_num: 2, + resource_spec: { + bookkeeper: { + count: 2, + spec_id: '', + }, + broker: { + count: 1, + spec_id: '', + }, + zookeeper: { + count: 3, + spec_id: '', + }, + }, + retention_hours: 1, + sub_zone_ids: [] as number[], + username: '', + }, + remark: '', + ticket_type: TicketTypes.PULSAR_APPLY, + }); + const route = useRoute(); const router = useRouter(); const { t } = useI18n(); const { baseState, bizState, handleCancel, handleCreateAppAbbr, handleCreateTicket } = useApplyBase(); + useTicketDetail(TicketTypes.PULSAR_APPLY, { + onSuccess(ticketDetail) { + const { details } = ticketDetail; + + Object.assign(formdata, { + bk_biz_id: ticketDetail.bk_biz_id, + remark: ticketDetail.remark, + }); + Object.assign(formdata.details, { + ack_quorum: details.ack_quorum, + bk_cloud_id: details.bk_cloud_id, + city_code: details.city_code, + cluster_alias: details.cluster_alias, + cluster_name: details.cluster_name, + db_version: details.db_version, + disaster_tolerance_level: details.disaster_tolerance_level, + ip_source: details.ip_source, + partition_num: details.partition_num, + // password: details.password, + port: details.port, + replication_num: details.replication_num, + retention_hours: details.retention_hours, + username: details.username, + }); + + if (details.ip_source === 'resource_pool') { + const resourceSpec = Object.entries(details.resource_spec!).reduce((prev, [specType, specInfo]) => { + return Object.assign(prev, { + [specType]: { + count: specInfo.count, + spec_id: specInfo.spec_id, + }, + }); + }, {}); + Object.assign(formdata.details.resource_spec, resourceSpec); + } + }, + }); + const regionRequirementsRef = useTemplateRef('regionRequirements'); const cloudInfo = reactive({ diff --git a/dbm-ui/frontend/src/views/db-manage/redis/apply-ha/Index.vue b/dbm-ui/frontend/src/views/db-manage/redis/apply-ha/Index.vue index 80636bcf00..14c881339c 100644 --- a/dbm-ui/frontend/src/views/db-manage/redis/apply-ha/Index.vue +++ b/dbm-ui/frontend/src/views/db-manage/redis/apply-ha/Index.vue @@ -40,9 +40,9 @@ - + @@ -145,11 +145,11 @@ ({ bk_biz_id: '' as number | '', details: { - appendApply: 'new', // 是否是追加部署 + apply_mode: 'new', // 是否是追加部署 bk_cloud_id: 0, city_code: '', // 追加就非必填 city_name: '', // 非协议 @@ -265,8 +266,10 @@ port: 30000, // 追加就非必填 redis_pwd: '', resource_spec: { - count: 2, - spec_id: '', + backend_group: { + count: 2, + spec_id: '', + }, }, sub_zone_ids: [] as number[], }, @@ -279,6 +282,68 @@ const router = useRouter(); const { baseState, bizState, handleCancel, handleCreateAppAbbr, handleCreateTicket } = useApplyBase(); + useTicketDetail(TicketTypes.REDIS_INS_APPLY, { + onSuccess(ticketDetail) { + const { details } = ticketDetail; + const applyMode = details.ip_source === 'resource_pool' ? 'new' : 'append'; + + Object.assign(formData, { + bk_biz_id: ticketDetail.bk_biz_id, + remark: ticketDetail.remark, + }); + Object.assign(formData.details, { + bk_cloud_id: details.bk_cloud_id, + city_code: details.city_code, + cluster_count: details.infos.length, + cluster_type: details.cluster_type, + db_version: details.db_version, + disaster_tolerance_level: details.disaster_tolerance_level, + infos: details.infos, + port: details.port, + }); + + if (details.ip_source === 'resource_pool') { + const resourceSpec = Object.entries(details.resource_spec!).reduce((prev, [specType, specInfo]) => { + return Object.assign(prev, { + [specType]: { + count: specInfo.count, + spec_id: specInfo.spec_id, + }, + }); + }, {}); + Object.assign(formData.details, { + apply_mode: applyMode, + bk_cloud_id: details.bk_cloud_id, + city_code: details.city_code, + cluster_count: details.infos.length, + cluster_type: details.cluster_type, + db_version: details.db_version, + disaster_tolerance_level: details.disaster_tolerance_level, + group_count: details.infos.length / details.resource_spec!.backend_group.count, + infos: details.infos, + port: details.port, + resource_spec: resourceSpec, + sub_zone_ids: details.resource_spec!.backend_group.location_spec.sub_zone_ids || [], + }); + } else { + Object.assign(formData.details, { + apply_mode: applyMode, + bk_cloud_id: details.bk_cloud_id, + city_code: details.city_code, + cluster_count: details.infos.length, + cluster_type: details.cluster_type, + db_version: details.db_version, + infos: details.infos.map((infoItem) => ({ + cluster_name: infoItem.cluster_name, + databases: infoItem.databases, + masterHost: infoItem.backend_group?.master, + slaveHost: infoItem.backend_group?.slave, + })), + }); + } + }, + }); + const regionRequirementsRef = useTemplateRef('regionRequirements'); const formRef = ref>(); @@ -320,7 +385,7 @@ ], }; - const isAppend = computed(() => formData.details.appendApply === 'append'); + const isAppend = computed(() => formData.details.apply_mode === 'append'); const machineCount = computed(() => formData.details.cluster_count / formData.details.group_count); const portType = computed(() => { if (formData.details.cluster_count % formData.details.group_count !== 0) { @@ -348,13 +413,13 @@ ({ backend_group: { count: machineCount.value, - spec_id: formData.details.resource_spec.spec_id, + spec_id: formData.details.resource_spec.backend_group.spec_id, }, }) as ComponentProps['params']['resource_spec'], ); watch( - [() => formData.details.resource_spec.spec_id, machineCount], + [() => formData.details.resource_spec.backend_group.spec_id, machineCount], ([newSpecId]) => { nextTick(() => { if (newSpecId) { @@ -481,7 +546,7 @@ const getDetails = () => { const { details }: { details: Partial['details']> } = _.cloneDeep(formData); - if (details.appendApply === 'new') { + if (details.apply_mode === 'new') { Object.assign(details, { infos: details.infos!.map((infoItem) => ({ cluster_name: infoItem.cluster_name, @@ -490,7 +555,7 @@ resource_spec: { backend_group: { count: Math.ceil(machineCount.value), - spec_id: details.resource_spec!.spec_id, + spec_id: details.resource_spec!.backend_group.spec_id, ...specRef.value!.getData(), ...regionRequirementsRef.value!.getValue(), }, @@ -498,7 +563,7 @@ }); } else { delete details.port; - delete details.city_code; + // delete details.city_code; delete details.db_version; delete details.resource_spec; @@ -516,7 +581,7 @@ delete details.cluster_count; delete details.group_count; - delete details.appendApply; + delete details.apply_mode; delete details.city_name; return { diff --git a/dbm-ui/frontend/src/views/db-manage/redis/apply/ApplyRedis.vue b/dbm-ui/frontend/src/views/db-manage/redis/apply/ApplyRedis.vue index a002774733..23d5f41d1b 100644 --- a/dbm-ui/frontend/src/views/db-manage/redis/apply/ApplyRedis.vue +++ b/dbm-ui/frontend/src/views/db-manage/redis/apply/ApplyRedis.vue @@ -379,10 +379,11 @@ import { useRoute, useRouter } from 'vue-router'; import type { RedisFunctions } from '@services/model/function-controller/functionController'; + import type { Redis } from '@services/model/ticket/ticket'; import { getCapSpecs } from '@services/source/infras'; import type { BizItem, HostInfo } from '@services/types'; - import { useApplyBase, useTicketCloneInfo } from '@hooks'; + import { useApplyBase, useTicketDetail } from '@hooks'; import { useFunController } from '@stores'; @@ -424,13 +425,40 @@ const route = useRoute(); const router = useRouter(); - // 单据克隆 - useTicketCloneInfo({ - onSuccess(formdata) { - state.formdata = formdata; - bizState.hasEnglishName = !!formdata.details.db_app_abbr; + useTicketDetail(TicketTypes.REDIS_CLUSTER_APPLY, { + onSuccess(ticketDetail) { + const { details } = ticketDetail; + + Object.assign(state.formdata, { + bk_biz_id: ticketDetail.bk_biz_id, + remark: ticketDetail.remark, + }); + Object.assign(state.formdata.details, { + bk_cloud_id: details.bk_cloud_id, + city_code: details.city_code, + cluster_alias: details.cluster_alias, + cluster_name: details.cluster_name, + cluster_type: details.cluster_type, + db_version: details.db_version, + disaster_tolerance_level: details.disaster_tolerance_level, + ip_source: details.ip_source, + proxy_port: details.proxy_port, + }); + + if (details.ip_source === 'resource_pool') { + const { proxy } = details.resource_spec!; + const resourceSpec = { + proxy: { + count: proxy.count, + spec_id: proxy.spec_id, + }, + }; + Object.assign(state.formdata.details, { + resource_spec: resourceSpec, + sub_zone_ids: details.resource_spec!.backend_group.location_spec.sub_zone_ids || [], + }); + } }, - type: TicketTypes.REDIS_CLUSTER_APPLY, }); const renderRedisClusterTypes = computed(() => { diff --git a/dbm-ui/frontend/src/views/db-manage/redis/apply/components/backend-spec/Index.vue b/dbm-ui/frontend/src/views/db-manage/redis/apply/components/backend-spec/Index.vue index 01e03be537..1c9b3fb951 100644 --- a/dbm-ui/frontend/src/views/db-manage/redis/apply/components/backend-spec/Index.vue +++ b/dbm-ui/frontend/src/views/db-manage/redis/apply/components/backend-spec/Index.vue @@ -328,7 +328,7 @@ } :deep(.spec-radio) { - display: flex; + display: flex !important; max-width: 100%; .bk-radio-input { diff --git a/dbm-ui/frontend/src/views/db-manage/riak/apply/Index.vue b/dbm-ui/frontend/src/views/db-manage/riak/apply/Index.vue index c16b23b159..335f154f05 100644 --- a/dbm-ui/frontend/src/views/db-manage/riak/apply/Index.vue +++ b/dbm-ui/frontend/src/views/db-manage/riak/apply/Index.vue @@ -196,9 +196,10 @@ import { type ComponentProps } from 'vue-component-type-helpers'; import { useI18n } from 'vue-i18n'; + import type { Riak } from '@services/model/ticket/ticket'; import type { BizItem, HostInfo } from '@services/types'; - import { useApplyBase } from '@hooks'; + import { useApplyBase, useTicketDetail } from '@hooks'; import { Affinity, ClusterTypes, DBTypes, OSTypes, TicketTypes } from '@common/const'; @@ -232,9 +233,9 @@ sub_zone_ids: [] as number[], // http_port: 8087, }, - nodes_num: 3, + nodes_num: 3, // resource_pool remark: '', - spec_id: '' as number | '', + spec_id: '' as number | '', // resource_pool ticket_type: TicketTypes.RIAK_CLUSTER_APPLY, }); @@ -243,6 +244,35 @@ const { t } = useI18n(); const { baseState, bizState, handleCancel, handleCreateAppAbbr, handleCreateTicket } = useApplyBase(); + useTicketDetail(TicketTypes.RIAK_CLUSTER_APPLY, { + onSuccess(ticketDetail) { + const { details } = ticketDetail; + + Object.assign(formData, { + bk_biz_id: ticketDetail.bk_biz_id, + remark: ticketDetail.remark, + }); + Object.assign(formData.details, { + bk_cloud_id: details.bk_cloud_id, + city_code: details.city_code, + cluster_alias: details.cluster_alias, + cluster_name: details.cluster_name, + db_module_id: details.db_module_name, + db_version: details.db_version, + disaster_tolerance_level: details.disaster_tolerance_level, + ip_source: details.ip_source, + }); + + if (details.ip_source === 'resource_pool') { + const { riak } = details.resource_spec!; + Object.assign(formData, { + nodes_num: riak.count, + spec_id: riak.spec_id, + }); + } + }, + }); + const regionRequirementsRef = useTemplateRef('regionRequirements'); const formRef = ref(); diff --git a/dbm-ui/frontend/src/views/db-manage/sqlserver/apply/SqlServer.vue b/dbm-ui/frontend/src/views/db-manage/sqlserver/apply/SqlServer.vue index 5d5e023849..8056e3aa94 100644 --- a/dbm-ui/frontend/src/views/db-manage/sqlserver/apply/SqlServer.vue +++ b/dbm-ui/frontend/src/views/db-manage/sqlserver/apply/SqlServer.vue @@ -30,7 +30,7 @@ :type="isSingleType ? 'single' : 'common'" /> (TicketTypes.SQLSERVER_SINGLE_APPLY, { + onSuccess(ticketDetail) { + const { details } = ticketDetail; + + Object.assign(formData, { + bk_biz_id: ticketDetail.bk_biz_id, + remark: ticketDetail.remark, + }); + Object.assign(formData.details, { + bk_cloud_id: details.bk_cloud_id, + city_code: details.city_code, + cluster_count: details.domains.length, + db_version: details.db_version, + disaster_tolerance_level: details.disaster_tolerance_level, + domains: details.domains, + ip_source: details.ip_source, + start_mssql_port: details.start_mssql_port, + }); + + if (details.ip_source === 'resource_pool') { + const { backend } = details.resource_spec!; + const resourceSpec = { + backend_group: { + count: backend.count, + spec_id: backend.spec_id, + }, + }; + Object.assign(formData.details, { + inst_num: details.domains.length / backend.count, + resource_spec: resourceSpec, + sub_zone_ids: details.resource_spec!.backend.location_spec.sub_zone_ids || [], + }); + } + + nextTick(() => { + Object.assign(formData.details, { + db_module_id: details.db_module_id, + }); + }); + }, + }); + + useTicketDetail(TicketTypes.SQLSERVER_HA_APPLY, { + onSuccess(ticketDetail) { + const { details } = ticketDetail; + + Object.assign(formData, { + bk_biz_id: ticketDetail.bk_biz_id, + remark: ticketDetail.remark, + }); + Object.assign(formData.details, { + bk_cloud_id: details.bk_cloud_id, + city_code: details.city_code, + cluster_count: details.domains.length, + db_version: details.db_version, + disaster_tolerance_level: details.disaster_tolerance_level, + domains: details.domains, + ip_source: details.ip_source, + start_mssql_port: details.start_mssql_port, + }); + + if (details.ip_source === 'resource_pool') { + const { backend_group: backendGroup } = details.resource_spec!; + const resourceSpec = { + backend_group: { + count: backendGroup.count, + spec_id: backendGroup.spec_id, + }, + }; + Object.assign(formData.details, { + inst_num: details.domains.length / backendGroup.count, + resource_spec: resourceSpec, + sub_zone_ids: details.resource_spec!.backend_group.location_spec.sub_zone_ids || [], + }); + } + + nextTick(() => { + Object.assign(formData.details, { + db_module_id: details.db_module_id, + }); + }); + }, + }); + const isSingleType = route.name === 'SqlServiceSingleApply'; const clusterType = isSingleType ? ClusterTypes.SQLSERVER_SINGLE : ClusterTypes.SQLSERVER_HA; diff --git a/dbm-ui/frontend/src/views/db-manage/tendb-cluster/apply/Index.vue b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/apply/Index.vue index 54d7cb3803..6897ae0757 100644 --- a/dbm-ui/frontend/src/views/db-manage/tendb-cluster/apply/Index.vue +++ b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/apply/Index.vue @@ -142,9 +142,10 @@ import { useI18n } from 'vue-i18n'; import { useRoute, useRouter } from 'vue-router'; + import type { TendbCluster } from '@services/model/ticket/ticket'; import type { BizItem } from '@services/types'; - import { useApplyBase, useTicketCloneInfo } from '@hooks'; + import { useApplyBase, useTicketDetail } from '@hooks'; import { ClusterTypes, DBTypes, TicketTypes } from '@common/const'; import { nameRegx } from '@common/regex'; @@ -163,49 +164,6 @@ const router = useRouter(); const { t } = useI18n(); - // 单据克隆 - useTicketCloneInfo({ - onSuccess(cloneData) { - const { - affinity, - backendSpecCount, - backendSpecId, - bizId, - capacity, - cityCode, - cloudId, - clusterAlias, - clusterName, - dbModuleId, - futureCapacity, - remark, - spiderPort, - spiderSpecCount, - spiderSpecId, - } = cloneData; - - formdata.bk_biz_id = bizId; - formdata.remark = remark; - formdata.details.bk_cloud_id = cloudId; - formdata.details.cluster_name = clusterName; - formdata.details.cluster_alias = clusterAlias; - formdata.details.city_code = cityCode; - formdata.details.db_module_id = dbModuleId; - // formdata.details.cluster_shard_num: 0, - // formdata.details.remote_shard_num: 0, - formdata.details.disaster_tolerance_level = affinity; - formdata.details.spider_port = spiderPort; - formdata.details.resource_spec.spider.spec_id = spiderSpecId; - formdata.details.resource_spec.spider.count = spiderSpecCount; - formdata.details.resource_spec.backend_group.affinity = affinity; - formdata.details.resource_spec.backend_group.spec_id = backendSpecId; - formdata.details.resource_spec.backend_group.count = backendSpecCount; - formdata.details.resource_spec.backend_group.capacity = capacity; - formdata.details.resource_spec.backend_group.future_capacity = futureCapacity; - }, - type: TicketTypes.TENDBCLUSTER_APPLY, - }); - const getSmartActionOffsetTarget = () => document.querySelector('.bk-form-content'); const initData = () => ({ @@ -247,6 +205,49 @@ // 基础设置 const { baseState, bizState, handleCancel, handleCreateAppAbbr, handleCreateTicket } = useApplyBase(); + useTicketDetail(TicketTypes.TENDBCLUSTER_APPLY, { + onSuccess(ticketDetail) { + const { details } = ticketDetail; + + Object.assign(formdata, { + bk_biz_id: ticketDetail.bk_biz_id, + remark: ticketDetail.remark, + }); + Object.assign(formdata.details, { + bk_cloud_id: details.bk_cloud_id, + city_code: details.city_code, + cluster_alias: details.cluster_alias, + cluster_name: details.cluster_name, + cluster_shard_num: details.cluster_shard_num, + db_module_id: details.db_module_id, + disaster_tolerance_level: details.disaster_tolerance_level, + ip_source: details.ip_source, + remote_shard_num: details.remote_shard_num, + spider_port: details.spider_port, + }); + + if (details.ip_source === 'resource_pool') { + const { spider } = details.resource_spec!; + const resourceSpec = { + spider: { + count: spider.count, + spec_id: spider.spec_id, + }, + }; + Object.assign(formdata.details, { + resource_spec: resourceSpec, + sub_zone_ids: details.resource_spec!.backend_group.location_spec.sub_zone_ids || [], + }); + } + + nextTick(() => { + Object.assign(formdata.details, { + db_module_id: details.db_module_id, + }); + }); + }, + }); + const regionRequirementsRef = useTemplateRef('regionRequirements'); const formRef = ref(); @@ -296,6 +297,7 @@ * 变更业务 */ const handleChangeBiz = (info: BizItem) => { + formdata.details.db_module_id = null; bizState.info = info; bizState.hasEnglishName = !!info.english_name; }; diff --git a/dbm-ui/frontend/src/views/ticket-center/common/TicketClone.vue b/dbm-ui/frontend/src/views/ticket-center/common/TicketClone.vue index 913835f06c..a8a34496c4 100644 --- a/dbm-ui/frontend/src/views/ticket-center/common/TicketClone.vue +++ b/dbm-ui/frontend/src/views/ticket-center/common/TicketClone.vue @@ -76,8 +76,15 @@ */ const ticketTypeRouteNameMap: Record = { ...resourcePoolTickets, + [TicketTypes.DORIS_APPLY]: 'DorisApply', + [TicketTypes.ES_APPLY]: 'EsApply', + [TicketTypes.HDFS_APPLY]: 'HdfsApply', + [TicketTypes.INFLUXDB_APPLY]: 'SelfServiceApplyInfluxDB', + [TicketTypes.KAFKA_APPLY]: 'KafkaApply', [TicketTypes.MONGODB_PITR_RESTORE]: TicketTypes.MONGODB_PITR_RESTORE, // mongo 定点构造 + [TicketTypes.MONGODB_REPLICASET_APPLY]: 'MongoDBReplicaSetApply', [TicketTypes.MONGODB_SCALE_UPDOWN]: TicketTypes.MONGODB_SCALE_UPDOWN, // mongodb 集群容量变更 + [TicketTypes.MONGODB_SHARD_APPLY]: 'MongoDBSharedClusterApply', [TicketTypes.MYSQL_ADD_SLAVE]: TicketTypes.MYSQL_ADD_SLAVE, // Mysql 添加从库 [TicketTypes.MYSQL_AUTHORIZE_RULES]: 'PermissionRules', // Mysql 授权 [TicketTypes.MYSQL_CHECKSUM]: 'MySQLChecksum', // Mysql 数据校验修复 @@ -113,6 +120,7 @@ [TicketTypes.MYSQL_SINGLE_ENABLE]: 'DatabaseTendbsingle', // Mysql 单节点启用 [TicketTypes.MYSQL_SINGLE_RENAME_DATABASE]: 'MySQLDBRename', // Mysql DB重命名 [TicketTypes.MYSQL_SINGLE_TRUNCATE_DATA]: 'MySQLDBClear', // Mysql 单节点清档 + [TicketTypes.PULSAR_APPLY]: 'PulsarApply', [TicketTypes.REDIS_BACKUP]: 'DatabaseRedisList', // Redis 集群备份 [TicketTypes.REDIS_CLUSTER_ADD_SLAVE]: 'RedisDBCreateSlave', // Redis 重建从库 [TicketTypes.REDIS_CLUSTER_APPLY]: 'SelfServiceApplyRedis', // Redis 申请部署 @@ -126,6 +134,7 @@ [TicketTypes.REDIS_DATA_STRUCTURE_TASK_DELETE]: 'RedisStructureInstance', // Redis 删除构造任务 [TicketTypes.REDIS_DATACOPY_CHECK_REPAIR]: 'RedisToolboxDataCheckRepair', // Redis 数据校验修复 [TicketTypes.REDIS_DESTROY]: 'DatabaseRedisList', // Redis 集群删除 + [TicketTypes.REDIS_INS_APPLY]: 'SelfServiceApplyRedisHa', [TicketTypes.REDIS_KEYS_DELETE]: 'DatabaseRedisList', // Redis 删除 key [TicketTypes.REDIS_KEYS_EXTRACT]: 'DatabaseRedisList', // Redis 提取 Key [TicketTypes.REDIS_MASTER_SLAVE_SWITCH]: 'RedisMasterFailover', // Redis 主从切换 @@ -143,12 +152,14 @@ [TicketTypes.REDIS_SCALE_UPDOWN]: TicketTypes.REDIS_SCALE_UPDOWN, // Redis 集群容量变更 [TicketTypes.REDIS_SINGLE_INS_MIGRATE]: 'RedisMigrate', // Redis 主从迁移 [TicketTypes.REDIS_VERSION_UPDATE_ONLINE]: 'RedisVersionUpgrade', // redis 版本升级 + [TicketTypes.RIAK_CLUSTER_APPLY]: 'RiakApply', [TicketTypes.SQLSERVER_ADD_SLAVE]: TicketTypes.SQLSERVER_ADD_SLAVE, // sqlserver 添加从库 [TicketTypes.SQLSERVER_BACKUP_DBS]: 'SqlServerDbBackup', // sqlserver 库备份 [TicketTypes.SQLSERVER_CLEAR_DBS]: 'sqlServerDBClear', // sqlserver 清档 [TicketTypes.SQLSERVER_DATA_MIGRATE]: 'sqlServerDataMigrate', // sqlserver 数据迁移 [TicketTypes.SQLSERVER_DBRENAME]: 'sqlServerDBRename', // sqlserver DB重命名 [TicketTypes.SQLSERVER_FULL_MIGRATE]: 'sqlServerDataMigrate', // sqlserver 全库迁移 + [TicketTypes.SQLSERVER_HA_APPLY]: 'SqlServiceHaApply', [TicketTypes.SQLSERVER_IMPORT_SQLFILE]: 'sqlServerExecute', // sqlserver 变更SQL执行 [TicketTypes.SQLSERVER_INCR_MIGRATE]: 'sqlServerDataMigrate', // sqlserver 增量迁移 [TicketTypes.SQLSERVER_MASTER_FAIL_OVER]: 'sqlServerMasterFailover', // sqlserver 主库故障切换 @@ -156,6 +167,7 @@ [TicketTypes.SQLSERVER_RESTORE_LOCAL_SLAVE]: TicketTypes.SQLSERVER_RESTORE_LOCAL_SLAVE, // sqlserver 重建从库_原地重建 [TicketTypes.SQLSERVER_RESTORE_SLAVE]: TicketTypes.SQLSERVER_RESTORE_LOCAL_SLAVE, // sqlserver 重建从库_新机重建 [TicketTypes.SQLSERVER_ROLLBACK]: 'sqlServerDBRollback', // sqlserver 定点构造 + [TicketTypes.SQLSERVER_SINGLE_APPLY]: 'SqlServiceSingleApply', [TicketTypes.TENDBCLUSTER_APPLY]: 'spiderApply', // spider 集群部署 [TicketTypes.TENDBCLUSTER_AUTHORIZE_RULES]: 'spiderPermission', [TicketTypes.TENDBCLUSTER_CHECKSUM]: 'spiderChecksum', // Spider checksum diff --git a/dbm-ui/frontend/src/views/ticket-center/common/ticket-detail/components/task-info/com-factory/components/info-list/InfoItem.vue b/dbm-ui/frontend/src/views/ticket-center/common/ticket-detail/components/task-info/com-factory/components/info-list/InfoItem.vue index 407ae2c499..0e287bae22 100644 --- a/dbm-ui/frontend/src/views/ticket-center/common/ticket-detail/components/task-info/com-factory/components/info-list/InfoItem.vue +++ b/dbm-ui/frontend/src/views/ticket-center/common/ticket-detail/components/task-info/com-factory/components/info-list/InfoItem.vue @@ -1,5 +1,7 @@