From cf8fff871b28e48a8ae237d963bd8883a2d8ff95 Mon Sep 17 00:00:00 2001
From: chenwenchang <479999519@qq.com>
Date: Mon, 13 Jan 2025 16:51:54 +0800
Subject: [PATCH] =?UTF-8?q?feat(frontend):=20=E5=B7=A5=E5=85=B7=E7=AE=B1?=
=?UTF-8?q?=E9=87=8D=E6=9E=84=5F=E5=BA=93=E8=A1=A8=E5=A4=87=E4=BB=BD?=
=?UTF-8?q?=E3=80=81=E5=85=A8=E5=BA=93=E5=A4=87=E4=BB=BD=20#8076=20#=20Rev?=
=?UTF-8?q?iewed,=20transaction=20id:=2029118?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
dbm-ui/frontend/src/locales/zh-cn.json | 4 +-
.../column/db-name-column/Index.vue} | 39 ++-
.../column/tag-db-name-column/Index.vue | 300 ++++++++++++++++++
.../form-item/check-group/Index.vue | 26 +-
.../TENDBCLUSTER_DB_TABLE_BACKUP/Create.vue | 198 ++++++++++++
.../TENDBCLUSTER_DB_TABLE_BACKUP/Index.vue | 32 ++
.../components/BackupColumn.vue | 113 +++++++
.../components/ClusterColumn.vue | 149 +++++++++
.../TENDBCLUSTER_FULL_BACKUP/Create.vue | 193 +++++++++++
.../TENDBCLUSTER_FULL_BACKUP/Index.vue | 32 ++
.../components/BackupColumn.vue | 117 +++++++
.../components/ClusterColumn.vue | 149 +++++++++
.../TENDBCLUSTER_MASTER_FAIL_OVER/Create.vue | 17 +-
.../Create.vue | 17 +-
.../TENDBCLUSTER_RENAME_DATABASE/Create.vue | 2 +-
.../views/db-manage/tendb-cluster/routes.ts | 18 +-
.../db-manage/tendb-cluster/toolbox-menu.ts | 4 +-
17 files changed, 1350 insertions(+), 60 deletions(-)
rename dbm-ui/frontend/src/views/db-manage/{tendb-cluster/TENDBCLUSTER_RENAME_DATABASE/components/DbNameColumn.vue => common/toolbox-field/column/db-name-column/Index.vue} (76%)
create mode 100644 dbm-ui/frontend/src/views/db-manage/common/toolbox-field/column/tag-db-name-column/Index.vue
create mode 100644 dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_DB_TABLE_BACKUP/Create.vue
create mode 100644 dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_DB_TABLE_BACKUP/Index.vue
create mode 100644 dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_DB_TABLE_BACKUP/components/BackupColumn.vue
create mode 100644 dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_DB_TABLE_BACKUP/components/ClusterColumn.vue
create mode 100644 dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_FULL_BACKUP/Create.vue
create mode 100644 dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_FULL_BACKUP/Index.vue
create mode 100644 dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_FULL_BACKUP/components/BackupColumn.vue
create mode 100644 dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_FULL_BACKUP/components/ClusterColumn.vue
diff --git a/dbm-ui/frontend/src/locales/zh-cn.json b/dbm-ui/frontend/src/locales/zh-cn.json
index 14cc4f8285..e8e39f37b6 100644
--- a/dbm-ui/frontend/src/locales/zh-cn.json
+++ b/dbm-ui/frontend/src/locales/zh-cn.json
@@ -4022,10 +4022,8 @@
"从资源池选择": "从资源池选择",
"还差n台_请先勾选足够的IP": "还差 {n} 台,请先勾选足够的 IP",
"已选够n台": "已选够 {n} 台",
- "从资源池选择": "从资源池选择",
- "还差n台_请先勾选足够的IP": "还差 {n} 台,请先勾选足够的 IP",
- "已选够n台": "已选够 {n} 台",
"原DB名": "原 DB 名",
+ "DB已存在": "DB 已存在",
"DB不存在": "DB 不存在",
"这行勿动!新增翻译请在上一行添加!": ""
}
diff --git a/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_RENAME_DATABASE/components/DbNameColumn.vue b/dbm-ui/frontend/src/views/db-manage/common/toolbox-field/column/db-name-column/Index.vue
similarity index 76%
rename from dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_RENAME_DATABASE/components/DbNameColumn.vue
rename to dbm-ui/frontend/src/views/db-manage/common/toolbox-field/column/db-name-column/Index.vue
index 7c2e647632..9f783473c0 100644
--- a/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_RENAME_DATABASE/components/DbNameColumn.vue
+++ b/dbm-ui/frontend/src/views/db-manage/common/toolbox-field/column/db-name-column/Index.vue
@@ -83,28 +83,45 @@
trigger: 'change',
},
{
- validator: async (value: string) => {
- if (!_.some(value, (item) => !/[*%]/.test(item))) {
+ validator: (value: string) => {
+ if (!props.checkExist) {
return true;
}
- const data = await checkClusterDatabase({
+ const clearDbList = _.filter(value, (item) => !/[*%]/.test(item));
+ if (clearDbList.length < 1) {
+ return true;
+ }
+ return checkClusterDatabase({
infos: [
{
cluster_id: props.clusterId,
db_names: [value],
},
],
- });
- const isExist = Boolean(data[0]?.check_info[value]);
- if (isExist && props.checkExist) {
- return t('DB已存在');
+ }).then((data) => (data.length > 0 ? data[0].check_info[value] : false));
+ },
+ message: t('DB不存在'),
+ trigger: 'blur',
+ },
+ {
+ validator: (value: string) => {
+ if (!props.checkNotExist) {
+ return true;
}
- if (!isExist && props.checkNotExist) {
- return t('DB不存在');
+ const clearDbList = _.filter(value, (item) => !/[*%]/.test(item));
+ if (clearDbList.length < 1) {
+ return true;
}
- return true;
+ return checkClusterDatabase({
+ infos: [
+ {
+ cluster_id: props.clusterId,
+ db_names: [value],
+ },
+ ],
+ }).then((data) => (data.length > 0 ? !data[0].check_info[value] : true));
},
- message: '',
+ message: t('DB已存在'),
trigger: 'blur',
},
];
diff --git a/dbm-ui/frontend/src/views/db-manage/common/toolbox-field/column/tag-db-name-column/Index.vue b/dbm-ui/frontend/src/views/db-manage/common/toolbox-field/column/tag-db-name-column/Index.vue
new file mode 100644
index 0000000000..23b7539a24
--- /dev/null
+++ b/dbm-ui/frontend/src/views/db-manage/common/toolbox-field/column/tag-db-name-column/Index.vue
@@ -0,0 +1,300 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ t('库表输入说明') }}:
+
+
+
{{ t('不允许输入系统库和特殊库,如mysql、sys 等') }}
+
+
+
+
{{ t('DB名、表名不允许为空,忽略DB名、忽略表名不允许为 *') }}
+
+
+
+
{{ t('支持 %(指代任意长度字符串), ?(指代单个字符串), *(指代全部)三个通配符') }}
+
+
+
+
{{ t('单元格可同时输入多个对象,使用换行,空格或;,|分隔,按 Enter 或失焦完成内容输入') }}
+
+
+
+
{{ t('% ? 不能独立使用, * 只能单独使用') }}
+
+
+
+
+
+
+
diff --git a/dbm-ui/frontend/src/views/db-manage/common/toolbox-field/form-item/check-group/Index.vue b/dbm-ui/frontend/src/views/db-manage/common/toolbox-field/form-item/check-group/Index.vue
index 3bd7c7c812..b8cf9fbd4e 100644
--- a/dbm-ui/frontend/src/views/db-manage/common/toolbox-field/form-item/check-group/Index.vue
+++ b/dbm-ui/frontend/src/views/db-manage/common/toolbox-field/form-item/check-group/Index.vue
@@ -1,16 +1,16 @@
-
+
{{ t('检查业务来源的连接') }}
-
+
{{ t('检查主从同步延迟') }}
-
+
{{ t('检查主从数据校验结果') }}
@@ -21,15 +21,15 @@
const { t } = useI18n();
- const modelValue = defineModel<{
- is_check_process: boolean;
- is_verify_checksum: boolean;
- is_check_delay: boolean;
- }>({
- default: () => ({
- is_check_process: true,
- is_verify_checksum: true,
- is_check_delay: true,
- }),
+ const isCheckProcess = defineModel('is_check_process', {
+ required: true,
+ });
+
+ const isVerifyChecksum = defineModel('is_verify_checksum', {
+ required: true,
+ });
+
+ const isCheckDelay = defineModel('is_check_delay', {
+ required: true,
});
diff --git a/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_DB_TABLE_BACKUP/Create.vue b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_DB_TABLE_BACKUP/Create.vue
new file mode 100644
index 0000000000..daba2b36e0
--- /dev/null
+++ b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_DB_TABLE_BACKUP/Create.vue
@@ -0,0 +1,198 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('提交') }}
+
+
+
+ {{ t('重置') }}
+
+
+
+
+
+
diff --git a/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_DB_TABLE_BACKUP/Index.vue b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_DB_TABLE_BACKUP/Index.vue
new file mode 100644
index 0000000000..7d5a04e740
--- /dev/null
+++ b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_DB_TABLE_BACKUP/Index.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
diff --git a/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_DB_TABLE_BACKUP/components/BackupColumn.vue b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_DB_TABLE_BACKUP/components/BackupColumn.vue
new file mode 100644
index 0000000000..19657d59ef
--- /dev/null
+++ b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_DB_TABLE_BACKUP/components/BackupColumn.vue
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_DB_TABLE_BACKUP/components/ClusterColumn.vue b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_DB_TABLE_BACKUP/components/ClusterColumn.vue
new file mode 100644
index 0000000000..2b519c01a1
--- /dev/null
+++ b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_DB_TABLE_BACKUP/components/ClusterColumn.vue
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_FULL_BACKUP/Create.vue b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_FULL_BACKUP/Create.vue
new file mode 100644
index 0000000000..b909eb143d
--- /dev/null
+++ b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_FULL_BACKUP/Create.vue
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('逻辑备份') }}
+
+
+ {{ t('物理备份') }}
+
+
+
+
+
+
+ {{ t('1个月') }}
+
+
+ {{ t('6个月') }}
+
+
+ {{ t('1年') }}
+
+
+ {{ t('3年') }}
+
+
+
+
+
+
+
+ {{ t('提交') }}
+
+
+
+ {{ t('重置') }}
+
+
+
+
+
+
diff --git a/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_FULL_BACKUP/Index.vue b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_FULL_BACKUP/Index.vue
new file mode 100644
index 0000000000..7d5a04e740
--- /dev/null
+++ b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_FULL_BACKUP/Index.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
diff --git a/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_FULL_BACKUP/components/BackupColumn.vue b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_FULL_BACKUP/components/BackupColumn.vue
new file mode 100644
index 0000000000..56e9848bd2
--- /dev/null
+++ b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_FULL_BACKUP/components/BackupColumn.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_FULL_BACKUP/components/ClusterColumn.vue b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_FULL_BACKUP/components/ClusterColumn.vue
new file mode 100644
index 0000000000..2b519c01a1
--- /dev/null
+++ b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_FULL_BACKUP/components/ClusterColumn.vue
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_MASTER_FAIL_OVER/Create.vue b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_MASTER_FAIL_OVER/Create.vue
index e0261691df..f50cc925d5 100644
--- a/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_MASTER_FAIL_OVER/Create.vue
+++ b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_MASTER_FAIL_OVER/Create.vue
@@ -47,7 +47,10 @@
:create-row-method="createTableRow" />
-
+
@@ -127,11 +130,9 @@
const defaultData = () => ({
tableData: [createTableRow()],
- checkGroup: {
- is_check_process: true,
- is_verify_checksum: true,
- is_check_delay: true,
- },
+ is_check_process: true,
+ is_verify_checksum: true,
+ is_check_delay: true,
remark: '',
});
@@ -169,7 +170,9 @@
}
createTicketRun({
details: {
- ...formData.checkGroup,
+ is_check_process: formData.is_check_process,
+ is_verify_checksum: formData.is_verify_checksum,
+ is_check_delay: formData.is_check_delay,
infos: formData.tableData.map((item) => ({
cluster_id: item.cluster.id,
switch_tuples: [
diff --git a/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_MASTER_SLAVE_SWITCH/Create.vue b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_MASTER_SLAVE_SWITCH/Create.vue
index 7a38d6f02e..153e141216 100644
--- a/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_MASTER_SLAVE_SWITCH/Create.vue
+++ b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_MASTER_SLAVE_SWITCH/Create.vue
@@ -47,7 +47,10 @@
:create-row-method="createTableRow" />
-
+
@@ -127,11 +130,9 @@
const defaultData = () => ({
tableData: [createTableRow()],
- checkGroup: {
- is_check_process: true,
- is_verify_checksum: true,
- is_check_delay: true,
- },
+ is_check_process: true,
+ is_verify_checksum: true,
+ is_check_delay: true,
remark: '',
});
@@ -169,7 +170,9 @@
}
createTicketRun({
details: {
- ...formData.checkGroup,
+ is_check_process: formData.is_check_process,
+ is_verify_checksum: formData.is_verify_checksum,
+ is_check_delay: formData.is_check_delay,
infos: formData.tableData.map((item) => ({
cluster_id: item.cluster.id,
switch_tuples: [
diff --git a/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_RENAME_DATABASE/Create.vue b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_RENAME_DATABASE/Create.vue
index d8a1cd180c..47391ec588 100644
--- a/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_RENAME_DATABASE/Create.vue
+++ b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/TENDBCLUSTER_RENAME_DATABASE/Create.vue
@@ -85,12 +85,12 @@
import EditableTable, { Row as EditableTableRow } from '@components/editable-table/Index.vue';
+ import DbNameColumn from '@views/db-manage/common/toolbox-field/column/db-name-column/Index.vue';
import OperationColumn from '@views/db-manage/common/toolbox-field/column/operation-column/Index.vue';
import IgnoreBiz from '@views/db-manage/common/toolbox-field/form-item/ignore-biz/Index.vue';
import TicketRemark from '@views/db-manage/common/toolbox-field/form-item/ticket-remark/Index.vue';
import ClusterColumn from './components/ClusterColumn.vue';
- import DbNameColumn from './components/DbNameColumn.vue';
interface RowData {
cluster: {
diff --git a/dbm-ui/frontend/src/views/db-manage/tendb-cluster/routes.ts b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/routes.ts
index f8d6746e47..fd2919f21c 100644
--- a/dbm-ui/frontend/src/views/db-manage/tendb-cluster/routes.ts
+++ b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/routes.ts
@@ -51,23 +51,9 @@ const spiderProxySlaveApplyRoute = createRouteItem(TicketTypes.TENDBCLUSTER_SPID
const spiderAddMntRoute = createRouteItem(TicketTypes.TENDBCLUSTER_SPIDER_MNT_APPLY, t('添加运维节点'));
-const spiderDbTableBackupRoute = {
- path: 'db-table-backup/:page?',
- name: 'spiderDbTableBackup',
- meta: {
- navName: t('库表备份'),
- },
- component: () => import('@views/db-manage/tendb-cluster/db-table-backup/Index.vue'),
-};
+const spiderDbTableBackupRoute = createRouteItem(TicketTypes.TENDBCLUSTER_DB_TABLE_BACKUP, t('库表备份'));
-const spiderDbBackupRoute = {
- path: 'db-backup/:page?',
- name: 'spiderDbBackup',
- meta: {
- navName: t('全库备份'),
- },
- component: () => import('@views/db-manage/tendb-cluster/db-backup/Index.vue'),
-};
+const spiderDbBackupRoute = createRouteItem(TicketTypes.TENDBCLUSTER_FULL_BACKUP, t('全库备份'));
const spiderFlashbackRoute = {
path: 'flashback/:page?',
diff --git a/dbm-ui/frontend/src/views/db-manage/tendb-cluster/toolbox-menu.ts b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/toolbox-menu.ts
index 782d2be534..e1751d3fb7 100644
--- a/dbm-ui/frontend/src/views/db-manage/tendb-cluster/toolbox-menu.ts
+++ b/dbm-ui/frontend/src/views/db-manage/tendb-cluster/toolbox-menu.ts
@@ -124,13 +124,13 @@ export default [
children: [
{
name: t('库表备份'),
- id: 'spiderDbTableBackup',
+ id: TicketTypes.TENDBCLUSTER_DB_TABLE_BACKUP,
parentId: 'spider_copy',
dbConsoleValue: 'tendbCluster.toolbox.dbTableBackup',
},
{
name: t('全库备份'),
- id: 'spiderDbBackup',
+ id: TicketTypes.TENDBCLUSTER_FULL_BACKUP,
parentId: 'spider_copy',
dbConsoleValue: 'tendbCluster.toolbox.dbBackup',
},