Skip to content

Commit 8036541

Browse files
JustaCattthLinx
authored andcommitted
feat(frontend): sqlserver数据迁移目标集群列加表头统一设置 #9684
# Reviewed, transaction id: 38477
1 parent f402d90 commit 8036541

File tree

5 files changed

+99
-55
lines changed

5 files changed

+99
-55
lines changed

dbm-ui/frontend/src/locales/zh-cn.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4099,5 +4099,6 @@
40994099
"DB 列表": "DB 列表",
41004100
"请先设置集群、构造 DB、回档信息": "请先设置集群、构造 DB、回档信息",
41014101
"请先设置集群、目标集群、构造 DB、回档信息": "请先设置集群、目标集群、构造 DB、回档信息",
4102+
"集群xx是已被选中的源集群": "集群{0}是已被选中的源集群",
41024103
"这行勿动!新增翻译请在上一行添加!": ""
41034104
}

dbm-ui/frontend/src/views/db-manage/sqlserver/SQLSERVER_FULL_MIGRATE/Create.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,9 @@
5050
@batch-edit="handleBatchEditCluster" />
5151
<DstClusterColumn
5252
v-model="item.dstCluster"
53-
:src-cluster="item.srcCluster" />
53+
:selected-map="selectedMap"
54+
:src-cluster="item.srcCluster"
55+
@batch-edit="handleBatchEdit" />
5456
<TagDbNameColumn
5557
v-model="item.dbName"
5658
allow-asterisk

dbm-ui/frontend/src/views/db-manage/sqlserver/SQLSERVER_FULL_MIGRATE/components/DstClusterColumn.vue

Lines changed: 95 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,21 @@
1919
:loading="loading"
2020
:min-width="300"
2121
required>
22+
<template #headAppend>
23+
<BatchEditColumn
24+
v-model="showBatchEdit"
25+
:placeholder="t('请输入集群域名,多个请用分隔符分隔')"
26+
:title="t('目标集群')"
27+
type="textarea"
28+
@change="handleBatchEditChange">
29+
<span
30+
v-bk-tooltips="t('统一设置:将该列统一设置为相同的值')"
31+
class="batch-edit-btn"
32+
@click="handleBatchEditShow">
33+
<DbIcon type="bulk-edit" />
34+
</span>
35+
</BatchEditColumn>
36+
</template>
2237
<EditableTextarea
2338
v-model="localValue"
2439
:placeholder="t('请输入集群域名,多个请用分隔符分隔')"
@@ -41,7 +56,6 @@
4156
</template>
4257
<script lang="ts" setup>
4358
import { useI18n } from 'vue-i18n';
44-
import { useRequest } from 'vue-request';
4559
4660
import SqlServerHaModel from '@services/model/sqlserver/sqlserver-ha';
4761
import SqlServerSingleModel from '@services/model/sqlserver/sqlserver-single';
@@ -53,7 +67,11 @@
5367
5468
import ClusterSelector from '@components/cluster-selector/Index.vue';
5569
70+
import BatchEditColumn from '@views/db-manage/common/batch-edit-column/Index.vue';
71+
5672
interface Props {
73+
// 用于检查当前集群是否被包含在源集群中
74+
selectedMap: Record<string, boolean>;
5775
srcCluster: {
5876
cluster_type: ClusterTypes;
5977
id: number;
@@ -62,8 +80,12 @@
6280
};
6381
}
6482
83+
type Emits = (e: 'batch-edit', data: typeof modelValue.value, field: string) => void;
84+
6585
const props = defineProps<Props>();
6686
87+
const emits = defineEmits<Emits>();
88+
6789
const modelValue = defineModel<
6890
{
6991
cluster_type: ClusterTypes;
@@ -76,6 +98,7 @@
7698
});
7799
78100
const { t } = useI18n();
101+
const showBatchEdit = ref(false);
79102
80103
const compareVersion = (dstVersion: string, srcVersion: string) => {
81104
const versionMatchReg = /[^\d]*(\d+)$/;
@@ -96,6 +119,10 @@
96119
handler: (data: SqlServerHaModel) => data.id === props.srcCluster.id,
97120
tip: t('不允许选择源集群'),
98121
},
122+
{
123+
handler: (data: SqlServerHaModel) => props.selectedMap[data.master_domain],
124+
tip: t('集群是已被选中的源集群'),
125+
},
99126
{
100127
handler: (data: SqlServerHaModel) => compareVersion(data.major_version, props.srcCluster.major_version),
101128
tip: t('不允许高版本往低版本迁移'),
@@ -115,6 +142,10 @@
115142
handler: (data: SqlServerHaModel) => data.id === props.srcCluster.id,
116143
tip: t('不允许选择源集群'),
117144
},
145+
{
146+
handler: (data: SqlServerHaModel) => props.selectedMap[data.master_domain],
147+
tip: t('集群是已被选中的源集群'),
148+
},
118149
{
119150
handler: (data: SqlServerSingleModel) => compareVersion(data.major_version, props.srcCluster!.major_version),
120151
tip: t('不允许高版本往低版本迁移'),
@@ -127,6 +158,7 @@
127158
};
128159
129160
const localValue = ref('');
161+
const loading = ref(false);
130162
const showBatchSelector = ref(false);
131163
const selectedClusters = computed<Record<string, SqlServerHaModel[]>>(() => ({
132164
[ClusterTypes.SQLSERVER_HA]: modelValue.value.filter(
@@ -137,71 +169,81 @@
137169
) as SqlServerHaModel[],
138170
}));
139171
172+
let batchEditRowCount = 0;
173+
140174
const rules = [
141175
{
142176
message: t('集群域名格式不正确'),
143177
trigger: 'change',
144178
validator: () => modelValue.value.every((item) => domainRegex.test(item.master_domain)),
145179
},
180+
{
181+
trigger: 'change',
182+
validator: () => {
183+
const conflictList: string[] = [];
184+
modelValue.value.forEach((item) => {
185+
if (props.selectedMap[item.master_domain]) {
186+
conflictList.push(item.master_domain);
187+
}
188+
});
189+
return conflictList.length > 0 ? t('集群xx是已被选中的源集群', [conflictList.join(',')]) : true;
190+
},
191+
},
146192
{
147193
message: t('目标集群不存在'),
148194
trigger: 'blur',
149195
validator: () => modelValue.value.every((item) => !!item.id),
150196
},
151197
];
152198
153-
const { run: queryHaCluster } = useRequest(getHaClusterList, {
154-
manual: true,
155-
onSuccess: (data) => {
156-
if (data.count) {
157-
modelValue.value = [
158-
...modelValue.value,
159-
...data.results.map((item) => ({
160-
cluster_type: item.cluster_type,
161-
id: item.id,
162-
major_version: item.major_version,
163-
master_domain: item.master_domain,
164-
})),
165-
];
166-
}
167-
},
168-
});
169-
170-
const { loading, run: querySingleCluster } = useRequest(getSingleClusterList, {
171-
manual: true,
172-
onSuccess: (data) => {
173-
if (data.count) {
174-
modelValue.value = [
175-
...modelValue.value,
176-
...data.results.map((item) => ({
177-
cluster_type: item.cluster_type,
178-
id: item.id,
179-
major_version: item.major_version,
180-
master_domain: item.master_domain,
181-
})),
182-
];
183-
}
184-
},
185-
});
199+
const handleBatchEditShow = () => {
200+
showBatchEdit.value = true;
201+
};
186202
187203
const handleBatchSelect = () => {
188204
showBatchSelector.value = true;
189205
};
190206
191207
const handleInputChange = (value: string) => {
192-
modelValue.value = [];
193208
if (value) {
194-
queryHaCluster({
195-
domain: value.split(batchSplitRegex).join(','),
196-
limit: -1,
197-
});
198-
querySingleCluster({
199-
domain: value.split(batchSplitRegex).join(','),
200-
limit: -1,
201-
});
209+
loading.value = true;
210+
Promise.all([
211+
getHaClusterList({
212+
domain: value.split(batchSplitRegex).join(','),
213+
limit: -1,
214+
}),
215+
getSingleClusterList({
216+
domain: value.split(batchSplitRegex).join(','),
217+
limit: -1,
218+
}),
219+
])
220+
.then((dataList) => {
221+
const temp: typeof modelValue.value = [];
222+
dataList.forEach((data) => {
223+
if (data.count) {
224+
temp.push(
225+
...data.results.map((item) => ({
226+
cluster_type: item.cluster_type,
227+
id: item.id,
228+
major_version: item.major_version,
229+
master_domain: item.master_domain,
230+
})),
231+
);
232+
}
233+
});
234+
modelValue.value = temp;
235+
})
236+
.finally(() => {
237+
loading.value = false;
238+
});
202239
}
203240
};
204241
242+
const handleBatchEditChange = (value: string) => {
243+
batchEditRowCount = Object.keys(props.selectedMap).length;
244+
handleInputChange(value);
245+
};
246+
205247
const handleBatchSelectorChange = (selected: Record<string, SqlServerHaModel[]>) => {
206248
const data = [...selected[ClusterTypes.SQLSERVER_HA], ...selected[ClusterTypes.SQLSERVER_SINGLE]];
207249
modelValue.value = data.map((item) => ({
@@ -216,13 +258,23 @@
216258
() => modelValue.value,
217259
(data) => {
218260
localValue.value = data.map((item) => item.master_domain).join('\n');
261+
if (batchEditRowCount) {
262+
emits('batch-edit', modelValue.value, 'dstCluster');
263+
batchEditRowCount--;
264+
}
219265
},
220266
{
221267
immediate: true,
222268
},
223269
);
224270
</script>
225271
<style lang="less" scoped>
272+
.batch-edit-btn {
273+
font-size: 14px;
274+
color: #3a84ff;
275+
cursor: pointer;
276+
}
277+
226278
.batch-host-select {
227279
font-size: 14px;
228280
cursor: pointer;

dbm-ui/frontend/src/views/db-manage/sqlserver/SQLSERVER_FULL_MIGRATE/components/RenameColumn.vue

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,9 +186,6 @@
186186
};
187187
188188
const handleShowEditName = () => {
189-
if (noConflictDb.value && !hasEditRename.value) {
190-
return;
191-
}
192189
editRenameRef.value?.updateTableKey();
193190
isShowEditName.value = true;
194191
};

dbm-ui/frontend/src/views/db-manage/sqlserver/SQLSERVER_FULL_MIGRATE/components/edit-rename-info/Index.vue

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
</BkSideslider>
4949
</template>
5050
<script setup lang="ts">
51-
import _ from 'lodash';
5251
import { useI18n } from 'vue-i18n';
5352
5453
import { messageError } from '@utils';
@@ -103,15 +102,8 @@
103102
const { t } = useI18n();
104103
105104
const tableKey = ref(Date.now().toString());
106-
const dbNameMemo = _.cloneDeep(modelValue.value.dbName || []);
107105
108106
const updateTableKey = () => {
109-
const hasEditDbRename = modelValue.value.dbName.some((item) => {
110-
return dbNameMemo.includes(item);
111-
});
112-
if (!hasEditDbRename) {
113-
return;
114-
}
115107
tableKey.value = Date.now().toString();
116108
};
117109

0 commit comments

Comments
 (0)