diff --git a/dbm-ui/frontend/.eslintignore b/dbm-ui/frontend/.eslintignore
deleted file mode 100644
index 73a6a568ff..0000000000
--- a/dbm-ui/frontend/.eslintignore
+++ /dev/null
@@ -1,6 +0,0 @@
-node_modules/
-dist/
-public/
-src/types/auto-imports.d.ts
-patch/
-lib/
diff --git a/dbm-ui/frontend/.eslintrc.js b/dbm-ui/frontend/.eslintrc.js
deleted file mode 100644
index 8bc63d4ff6..0000000000
--- a/dbm-ui/frontend/.eslintrc.js
+++ /dev/null
@@ -1,146 +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.
- */
-
-module.exports = {
- root: true,
- extends: [
- 'eslint-config-tencent',
- 'plugin:vue/vue3-recommended',
- 'eslint:recommended',
- '@vue/eslint-config-typescript/recommended',
- './.eslintrc-auto-import.json',
- 'prettier',
- ],
- plugins: ['simple-import-sort'],
- env: {
- es6: true,
- node: true,
- jest: true,
- browser: true,
- 'vue/setup-compiler-macros': true,
- },
- globals: {
- defineModel: 'readonly',
- // value 为 true 允许被重写,为 false 不允许被重写
- __RESOURCE_UNIQUE_KEY__: false,
- ValueOf: false,
- ServiceReturnType: false,
- ServiceParameters: false,
- SelectItem: false,
- KeyExpand: false,
- },
- rules: {
- '@typescript-eslint/no-explicit-any': 'off',
- 'simple-import-sort/exports': 'error',
- 'simple-import-sort/imports': [
- 'error',
- {
- groups: [
- ['^[a-zA-Z]'],
- ['^@services'],
- ['^@hooks'],
- ['^@router'],
- ['^@stores'],
- ['^@common'],
- ['^@components'],
- ['^@views'],
- ['^@utils'],
- ['^@helper'],
- ['^@types'],
- ['^@locales'],
- ['^@styles'],
- ['^@locales'],
- ['^@images'],
- ['^@\\w'],
- ['^\\.\\.'],
- ['^\\.'],
- ],
- },
- ],
- 'import/newline-after-import': 'error',
- 'vue/multi-word-component-names': 'off',
- },
- overrides: [
- {
- files: ['*.vue'],
- rules: {
- indent: 'off',
- 'import/first': 'off',
- 'vue/html-closing-bracket-newline': [
- 'error',
- {
- singleline: 'never',
- multiline: 'never',
- },
- ],
- 'vue/component-tags-order': ['warn', { order: ['template', 'script', 'style'] }],
- 'vue/attributes-order': [
- 'error',
- {
- order: [
- 'DEFINITION',
- 'LIST_RENDERING',
- 'CONDITIONALS',
- 'RENDER_MODIFIERS',
- 'GLOBAL',
- ['UNIQUE', 'SLOT'],
- 'TWO_WAY_BINDING',
- 'OTHER_DIRECTIVES',
- 'OTHER_ATTR',
- 'EVENTS',
- 'CONTENT',
- ],
- alphabetical: true,
- },
- ],
- 'vue/define-macros-order': ['error', { order: ['defineProps', 'defineEmits'] }],
- 'vue/no-undef-properties': ['error', { ignores: ['/^\\$/'] }],
- 'vue/no-unused-properties': [
- 'error',
- {
- groups: ['props'],
- deepData: false,
- ignorePublicMembers: false,
- },
- ],
- 'vue/no-useless-mustaches': [
- 'error',
- {
- ignoreIncludesComment: false,
- ignoreStringEscape: false,
- },
- ],
- 'vue/no-useless-v-bind': [
- 'error',
- {
- ignoreIncludesComment: false,
- ignoreStringEscape: false,
- },
- ],
- 'vue/prefer-separate-static-class': 'error',
- 'vue/prefer-true-attribute-shorthand': 'error',
- 'vue/script-indent': ['off', 2, { baseIndent: 1 }],
- 'vue/component-name-in-template-casing': [
- 'error',
- 'PascalCase',
- {
- registeredComponentsOnly: false,
- ignores: [],
- },
- ],
- 'vue/no-setup-props-reactivity-loss': 'off',
- 'vue/no-setup-props-destructure': 'off',
- },
- },
- ],
-};
diff --git a/dbm-ui/frontend/.nvmrc b/dbm-ui/frontend/.nvmrc
index df9385826f..4377937757 100644
--- a/dbm-ui/frontend/.nvmrc
+++ b/dbm-ui/frontend/.nvmrc
@@ -1 +1 @@
-v20.11.0
\ No newline at end of file
+v22.13.1
\ No newline at end of file
diff --git a/dbm-ui/frontend/.prettierrc b/dbm-ui/frontend/.prettierrc
index b544d20e72..a5024e089f 100644
--- a/dbm-ui/frontend/.prettierrc
+++ b/dbm-ui/frontend/.prettierrc
@@ -1,7 +1,5 @@
{
- "plugins": [
- "prettier-plugin-curly"
- ],
+ "plugins": ["prettier-plugin-curly"],
"$schema": "https://json.schemastore.org/prettierrc",
"semi": true,
"quoteProps": "as-needed",
@@ -15,14 +13,5 @@
"arrowParens": "always",
"vueIndentScriptAndStyle": true,
"singleAttributePerLine": true,
- "proseWrap": "always",
- "parser": "typescript",
- "overrides": [
- {
- "files": "*.vue",
- "options": {
- "parser": "vue"
- }
- }
- ]
+ "proseWrap": "always"
}
diff --git a/dbm-ui/frontend/.vscode/settings.json b/dbm-ui/frontend/.vscode/settings.json
index 1e37538ab6..7da042cb78 100644
--- a/dbm-ui/frontend/.vscode/settings.json
+++ b/dbm-ui/frontend/.vscode/settings.json
@@ -38,6 +38,12 @@
"peacock.remoteColor": "#45e35f",
"bk-code-ai.enable": false,
"typescript.tsdk": "node_modules/typescript/lib",
+ "explorer.fileNesting.enabled": true,
+ "explorer.fileNesting.patterns": {
+ "tsconfig.json": "tsconfig.*.json, env.d.ts",
+ "vite.config.*": "jsconfig*, vitest.config.*, cypress.config.*, playwright.config.*",
+ "package.json": "package-lock.json, pnpm*, .yarnrc*, yarn*, .eslint*, eslint*, .prettier*, prettier*, .editorconfig, .stylelint*, .browserslistrc, commit*"
+ },
"workbench.colorCustomizations": {
"activityBar.activeBackground": "#65c89b",
"activityBar.background": "#65c89b",
@@ -58,4 +64,4 @@
"titleBar.inactiveForeground": "#15202b99"
},
"peacock.color": "#42b883"
-}
\ No newline at end of file
+}
diff --git a/dbm-ui/frontend/env.d.ts b/dbm-ui/frontend/env.d.ts
index 1abc28a478..29713d6ce8 100644
--- a/dbm-ui/frontend/env.d.ts
+++ b/dbm-ui/frontend/env.d.ts
@@ -11,7 +11,7 @@
* the specific language governing permissions and limitations under the License.
*/
-// eslint-disable-next-line spaced-comment
+
///
interface ImportMetaEnv {
readonly MODE: string;
diff --git a/dbm-ui/frontend/eslint.config.mjs b/dbm-ui/frontend/eslint.config.mjs
new file mode 100644
index 0000000000..76326262ad
--- /dev/null
+++ b/dbm-ui/frontend/eslint.config.mjs
@@ -0,0 +1,297 @@
+import tencentConfig from 'eslint-config-tencent/ts';
+import importPlugin from 'eslint-plugin-import';
+import oxlint from 'eslint-plugin-oxlint';
+// import perfectionist from 'eslint-plugin-perfectionist';
+import simpleImportSortPlugin from 'eslint-plugin-simple-import-sort';
+import pluginVue from 'eslint-plugin-vue';
+import globals from 'globals';
+
+import skipFormatting from '@vue/eslint-config-prettier/skip-formatting';
+import { configureVueProject, defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript';
+
+const tencentRule = tencentConfig.rules;
+
+// eslint-config-tencent/ts 依赖的 @typescript-eslint 版本过低,部分规则配置已经废弃需要删除
+delete tencentRule['@typescript-eslint/quotes'];
+delete tencentRule['@typescript-eslint/brace-style'];
+delete tencentRule['@typescript-eslint/comma-spacing'];
+delete tencentRule['@typescript-eslint/func-call-spacing'];
+delete tencentRule['@typescript-eslint/indent'];
+delete tencentRule['@typescript-eslint/keyword-spacing'];
+delete tencentRule['@typescript-eslint/semi'];
+delete tencentRule['@typescript-eslint/type-annotation-spacing'];
+delete tencentRule['@typescript-eslint/space-before-function-paren'];
+
+configureVueProject({
+ scriptLangs: ['ts', 'tsx'],
+});
+
+export default defineConfigWithVueTs(
+ {
+ name: 'app/files-to-lint',
+ files: ['**/*.{ts,mts,tsx,vue}'],
+ },
+
+ {
+ name: 'app/files-to-ignore',
+ ignores: ['**/dist/**', '**/dist-ssr/**', '**/coverage/**'],
+ },
+ pluginVue.configs['flat/recommended'],
+ vueTsConfigs.recommended,
+ oxlint.configs['flat/recommended'],
+ skipFormatting,
+ {
+ languageOptions: {
+ ecmaVersion: 5,
+ sourceType: 'script',
+ parserOptions: {
+ ecmaFeatures: {
+ jsx: true,
+ },
+ },
+ globals: {
+ ...globals.browser,
+ defineModel: 'readonly',
+ ValueOf: 'readonly',
+ ServiceReturnType: 'readonly',
+ ServiceParameters: 'readonly',
+ SelectItem: 'readonly',
+ KeyExpand: 'readonly',
+ },
+ },
+ },
+ {
+ files: ['**/*.ts', '**/*.tsx', '**/*.vue'],
+ rules: {
+ ...tencentRule,
+ '@typescript-eslint/no-explicit-any': 'off',
+ '@typescript-eslint/consistent-type-assertions': 'off',
+ '@typescript-eslint/naming-convention': [
+ 'error',
+ {
+ selector: 'variable',
+ format: ['camelCase', 'UPPER_CASE'],
+ },
+ ],
+ 'no-underscore-dangle': ['error', { enforceInMethodNames: false }],
+ 'no-param-reassign': ['error', { props: true }],
+ },
+ },
+ // {
+ // files: ['**/*.ts', '**/*.tsx', '**/*.vue'],
+ // plugins: {
+ // perfectionist,
+ // },
+ // rules: {
+ // 'perfectionist/sort-jsx-props': [
+ // 'error',
+ // {
+ // type: 'alphabetical',
+ // order: 'asc',
+ // ignoreCase: true,
+ // specialCharacters: 'keep',
+ // ignorePattern: [],
+ // partitionByNewLine: false,
+ // newlinesBetween: 'ignore',
+ // groups: [
+ // 'DEFINITION',
+ // 'LIST_RENDERING',
+ // 'CONDITIONALS',
+ // 'RENDER_MODIFIERS',
+ // 'GLOBAL',
+ // 'UNIQUE',
+ // 'SLOT',
+ // 'TWO_WAY_BINDING',
+ // 'OTHER_DIRECTIVES',
+ // 'multiline',
+ // 'unknown',
+ // 'shorthand',
+ // 'callback',
+ // ],
+ // customGroups: {
+ // DEFINITION: '^v-is',
+ // LIST_RENDERING: '^v-for',
+ // CONDITIONALS: '^(v-if|v-else-if|v-else|v-show|v-cloak)',
+ // RENDER_MODIFIERS: '^(v-once|v-pre)',
+ // GLOBAL: '^id',
+ // UNIQUE: '^(ref|key)',
+ // SLOT: '^v-slot',
+ // TWO_WAY_BINDING: '^v-model',
+ // OTHER_DIRECTIVES: '^v-.+',
+ // callback: '^on.+',
+ // },
+ // },
+ // ],
+ // 'perfectionist/sort-array-includes': 'error',
+ // 'perfectionist/sort-classes': [
+ // 'error',
+ // {
+ // type: 'alphabetical',
+ // order: 'asc',
+ // ignoreCase: true,
+ // specialCharacters: 'keep',
+ // partitionByComment: false,
+ // partitionByNewLine: false,
+ // newlinesBetween: 'ignore',
+ // ignoreCallbackDependenciesPatterns: [],
+ // groups: [
+ // 'index-signature',
+ // ['static-property', 'static-accessor-property'],
+ // ['static-get-method', 'static-set-method'],
+ // ['protected-static-property', 'protected-static-accessor-property'],
+ // ['protected-static-get-method', 'protected-static-set-method'],
+ // ['private-static-property', 'private-static-accessor-property'],
+ // ['private-static-get-method', 'private-static-set-method'],
+ // 'static-block',
+ // ['static-method', 'static-function-property'],
+ // ['protected-static-method', 'protected-static-function-property'],
+ // ['private-static-method', 'private-static-function-property'],
+ // ['property', 'accessor-property'],
+ // ['protected-property', 'protected-accessor-property'],
+ // ['protected-get-method', 'protected-set-method'],
+ // ['private-property', 'private-accessor-property'],
+ // ['private-get-method', 'private-set-method'],
+ // 'constructor',
+ // ['get-method', 'set-method'],
+ // ['method', 'function-property'],
+ // ['protected-method', 'protected-function-property'],
+ // ['private-method', 'private-function-property'],
+ // 'unknown',
+ // ],
+ // customGroups: [],
+ // },
+ // ],
+ // 'perfectionist/sort-enums': 'error',
+ // 'perfectionist/sort-intersection-types': 'error',
+ // 'perfectionist/sort-interfaces': 'error',
+ // 'perfectionist/sort-named-imports': 'error',
+ // 'perfectionist/sort-object-types': 'error',
+ // 'perfectionist/sort-objects': 'error',
+ // },
+ // },
+ {
+ plugins: {
+ import: importPlugin,
+ },
+ rules: {
+ 'import/first': 'off',
+ 'import/newline-after-import': 'error',
+ 'import/no-duplicates': 'error',
+ },
+ },
+ {
+ plugins: {
+ 'simple-import-sort': simpleImportSortPlugin,
+ },
+ rules: {
+ 'simple-import-sort/exports': 'error',
+ 'simple-import-sort/imports': [
+ 'error',
+ {
+ groups: [
+ ['^[a-zA-Z]'], // 普通 npm 包
+ ['^@blueking'],
+ ['^@services'],
+ ['^@hooks'],
+ ['^@router'],
+ ['^@stores'],
+ ['^@common'],
+ ['^@components'],
+ ['^@views'],
+ ['^@utils'],
+ ['^@helper'],
+ ['^@types'],
+ ['^@locales'],
+ ['^@styles'],
+ ['^@images'],
+ ['^[^.]'],
+ ['^\\.\\.'], // 父目录相对路径
+ ['^\\.'], // 当前目录相对路径
+ ],
+ },
+ ],
+ },
+ },
+ {
+ files: ['**/*.vue'],
+ rules: {
+ indent: 'off',
+ 'vue/multi-word-component-names': 'off',
+ 'vue/html-closing-bracket-newline': [
+ 'error',
+ {
+ singleline: 'never',
+ multiline: 'never',
+ },
+ ],
+ 'vue/component-tags-order': ['warn', { order: ['template', 'script', 'style'] }],
+ 'vue/attributes-order': [
+ 'error',
+ {
+ order: [
+ 'DEFINITION',
+ 'LIST_RENDERING',
+ 'CONDITIONALS',
+ 'RENDER_MODIFIERS',
+ 'GLOBAL',
+ ['UNIQUE', 'SLOT'],
+ 'TWO_WAY_BINDING',
+ 'OTHER_DIRECTIVES',
+ 'OTHER_ATTR',
+ 'EVENTS',
+ 'CONTENT',
+ ],
+ alphabetical: true,
+ },
+ ],
+ 'vue/define-macros-order': ['error', { order: ['defineProps', 'defineEmits'] }],
+ 'vue/no-undef-properties': ['error', { ignores: ['/^\\$/'] }],
+ 'vue/no-unused-properties': [
+ 'error',
+ {
+ groups: ['props'],
+ deepData: false,
+ ignorePublicMembers: false,
+ },
+ ],
+ 'vue/no-useless-mustaches': [
+ 'error',
+ {
+ ignoreIncludesComment: false,
+ ignoreStringEscape: false,
+ },
+ ],
+ 'vue/no-useless-v-bind': [
+ 'error',
+ {
+ ignoreIncludesComment: false,
+ ignoreStringEscape: false,
+ },
+ ],
+ 'vue/prefer-separate-static-class': 'error',
+ 'vue/prefer-true-attribute-shorthand': 'error',
+ 'vue/script-indent': ['off', 2, { baseIndent: 1 }],
+ 'vue/component-name-in-template-casing': [
+ 'error',
+ 'PascalCase',
+ {
+ registeredComponentsOnly: false,
+ ignores: [],
+ },
+ ],
+ 'vue/no-setup-props-reactivity-loss': 'off',
+ 'vue/no-setup-props-destructure': 'off',
+ },
+ },
+ {
+ ignores: [
+ 'node_modules/*',
+ 'dist/*',
+ 'public/*',
+ 'src/types/auto-imports.d.ts',
+ 'patch/*',
+ 'lib/*',
+ 'auto-copyright.js',
+ ],
+ },
+);
diff --git a/dbm-ui/frontend/package.json b/dbm-ui/frontend/package.json
index 051f500364..d7c15d8830 100644
--- a/dbm-ui/frontend/package.json
+++ b/dbm-ui/frontend/package.json
@@ -3,16 +3,18 @@
"private": true,
"version": "0.0.0",
"scripts": {
- "dev": "vite --mode test",
+ "dev": "vite",
"dev-https": "vite --mode https",
"build": "cross-env NODE_OPTIONS=--max-old-space-size=8192 run-p build-only",
"preview": "vite preview",
"prepare": "npx simple-git-hooks",
- "build-only": "vite build --mode production",
- "type-check": "vue-tsc --noEmit",
+ "build-only": "vite build",
+ "type-check": "vue-tsc --build",
+ "lint:oxlint": "oxlint . --fix -D correctness --ignore-path .gitignore",
"lint:lint-staged": "lint-staged",
- "lint:script": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx --fix",
+ "lint:script": "eslint . --fix",
"lint:style": "stylelint --fix ./src/**/*.{vue,css,less} --custom-syntax",
+ "lint": "run-s lint:*",
"prettier": "prettier --write ./src"
},
"dependencies": {
@@ -26,27 +28,27 @@
"@blueking/sub-saas": "0.0.0-beta.6",
"@blueking/table": "^0.0.1-beta.35",
"@icon-cool/bk-icon-bk-biz-components": "^0.0.4",
- "@vueuse/core": "^12.0.0",
+ "@vueuse/core": "^12.5.0",
"axios": "^1.7.9",
"bkui-vue": "2.0.1-beta.100",
"date-fns": "^4.1.0",
"dayjs": "^1.11.13",
- "echarts": "^5.5.1",
+ "echarts": "^5.6.0",
"html-to-image": "1.11.11",
"js-cookie": "3.0.5",
"jsencrypt": "3.3.2",
"lodash": "4.17.21",
"mitt": "3.0.1",
"monaco-editor": "^0.52.0",
- "pinia": "^2.3.0",
- "qs": "^6.13.1",
+ "pinia": "^2.3.1",
+ "qs": "^6.14.0",
"screenfull": "6.0.2",
"tiny-pinyin": "1.3.2",
"tippy.js": "6.3.7",
"url-join": "5.0.0",
"vue": "^3.5.13",
"vue-content-loader": "2.0.1",
- "vue-i18n": "^10.0.5",
+ "vue-i18n": "^11.1.0",
"vue-request": "2.0.4",
"vue-router": "^4.5.0",
"vue-types": "^5.1.3",
@@ -54,48 +56,54 @@
"xlsx": "^0.18.5"
},
"devDependencies": {
- "@commitlint/config-conventional": "^19.6.0",
- "@trivago/prettier-plugin-sort-imports": "^5.1.0",
- "@tsconfig/node20": "20.1.4",
- "@types/lodash": "^4.17.13",
- "@types/node": "^22.10.1",
- "@types/qs": "^6.9.17",
+ "@commitlint/config-conventional": "^19.7.1",
+ "@trivago/prettier-plugin-sort-imports": "^5.2.2",
+ "@tsconfig/node22": "^22.0.0",
+ "@types/lodash": "^4.17.15",
+ "@types/node": "^22.13.1",
+ "@types/qs": "^6.9.18",
"@vitejs/plugin-basic-ssl": "^1.2.0",
"@vitejs/plugin-vue": "^5.2.1",
"@vitejs/plugin-vue-jsx": "^4.1.1",
- "@vue/eslint-config-typescript": "13.0.0",
+ "@vue/eslint-config-prettier": "^10.1.0",
+ "@vue/eslint-config-typescript": "^14.3.0",
"@vue/tsconfig": "^0.7.0",
- "commitlint": "^19.6.0",
+ "commitlint": "^19.7.1",
"cross-env": "7.0.3",
- "eslint": "8.57.0",
- "eslint-config-prettier": "9.1.0",
- "eslint-config-tencent": "^1.1.1",
+ "eslint": "^9.19.0",
+ "eslint-config-prettier": "^10.0.1",
+ "eslint-config-tencent": "^1.1.2",
+ "eslint-plugin-import": "^2.31.0",
+ "eslint-plugin-oxlint": "^0.15.6",
+ "eslint-plugin-perfectionist": "^4.8.0",
"eslint-plugin-simple-import-sort": "12.1.1",
"eslint-plugin-vue": "^9.32.0",
- "less": "^4.2.1",
- "lint-staged": "^15.2.10",
- "npm-run-all2": "^7.0.1",
- "postcss-html": "1.7.0",
+ "globals": "^15.14.0",
+ "less": "^4.2.2",
+ "lint-staged": "^15.4.3",
+ "npm-run-all2": "^7.0.2",
+ "oxlint": "^0.15.6",
+ "postcss-html": "^1.8.0",
"postcss-less": "6.0.0",
"prettier": "^3.4.2",
"prettier-plugin-curly": "^0.3.1",
"simple-git-hooks": "2.11.1",
- "stylelint": "^16.11.0",
- "stylelint-config-standard": "36.0.1",
+ "stylelint": "^16.14.1",
+ "stylelint-config-standard": "^37.0.0",
"stylelint-less": "3.0.1",
"stylelint-order": "6.0.4",
- "typescript": "^5.7.2",
- "unplugin-auto-import": "^0.18.6",
- "unplugin-vue-components": "^0.27.5",
- "vite": "^6.0.3",
+ "typescript": "^5.7.3",
+ "unplugin-auto-import": "^19.0.0",
+ "unplugin-vue-components": "^28.0.0",
+ "vite": "^6.1.0",
"vite-plugin-babel": "^1.3.0",
"vite-plugin-html-env": "1.2.8",
"vite-plugin-imp": "2.4.0",
"vite-plugin-monaco-editor": "1.1.0",
"vite-plugin-static-copy": "^2.2.0",
"vite-plugin-style-import": "2.0.0",
- "vue-component-type-helpers": "^2.1.10",
- "vue-tsc": "^2.1.10"
+ "vue-component-type-helpers": "^2.2.0",
+ "vue-tsc": "^2.2.0"
},
"simple-git-hooks": {
"pre-commit": "cd dbm-ui/frontend && npx lint-staged",
diff --git a/dbm-ui/frontend/src/App.vue b/dbm-ui/frontend/src/App.vue
index d7255c971d..d284634d81 100644
--- a/dbm-ui/frontend/src/App.vue
+++ b/dbm-ui/frontend/src/App.vue
@@ -65,6 +65,8 @@
import { onMounted, watch } from 'vue';
import { useI18n } from 'vue-i18n';
+ import NoticeComponent from '@blueking/notice-component';
+
import { getLogout } from '@services/source/logout';
import { useSQLTaskNotify } from '@hooks';
@@ -79,11 +81,9 @@
import { checkDbConsole } from '@utils';
- import NoticeComponent from '@blueking/notice-component';
-
import Layout from './layout/Index.vue';
- import '@blueking/notice-component/dist/style.css';
+ import('@blueking/notice-component/dist/style.css');
const userProfileStore = useUserProfile();
const { t, locale } = useI18n();
diff --git a/dbm-ui/frontend/src/common/const/accountTypes.ts b/dbm-ui/frontend/src/common/const/accountTypes.ts
index 0e4bcebbc3..3fa0238eca 100644
--- a/dbm-ui/frontend/src/common/const/accountTypes.ts
+++ b/dbm-ui/frontend/src/common/const/accountTypes.ts
@@ -2,9 +2,9 @@
* 账号类型
*/
export enum AccountTypes {
- MYSQL = 'mysql',
- TENDBCLUSTER = 'tendbcluster',
MONGODB = 'mongodb',
+ MYSQL = 'mysql',
SQLSERVER = 'sqlserver',
+ TENDBCLUSTER = 'tendbcluster',
}
export type AccountTypesValues = `${AccountTypes}`;
diff --git a/dbm-ui/frontend/src/common/const/ticketTypes.ts b/dbm-ui/frontend/src/common/const/ticketTypes.ts
index ab1303fc95..3a057a0194 100644
--- a/dbm-ui/frontend/src/common/const/ticketTypes.ts
+++ b/dbm-ui/frontend/src/common/const/ticketTypes.ts
@@ -2,47 +2,47 @@
* 服务单据类型(与后端字段对应)
*/
export enum TicketTypes {
- MYSQL_SINGLE_APPLY = 'MYSQL_SINGLE_APPLY',
- MYSQL_HA_APPLY = 'MYSQL_HA_APPLY',
- MYSQL_EXCEL_AUTHORIZE_RULES = 'MYSQL_EXCEL_AUTHORIZE_RULES',
+ MYSQL_ACCOUNT_RULE_CHANGE = 'MYSQL_ACCOUNT_RULE_CHANGE', // MySQL 权限变更
+ MYSQL_ADD_SLAVE = 'MYSQL_ADD_SLAVE',
MYSQL_AUTHORIZE_RULES = 'MYSQL_AUTHORIZE_RULES',
+ MYSQL_CHECKSUM = 'MYSQL_CHECKSUM',
+ MYSQL_CLIENT_CLONE_RULES = 'MYSQL_CLIENT_CLONE_RULES',
+ MYSQL_DATA_MIGRATE = 'MYSQL_DATA_MIGRATE',
+ MYSQL_DATA_REPAIR = 'MYSQL_DATA_REPAIR', // mysql 数据修复
+ MYSQL_DUMP_DATA = 'MYSQL_DUMP_DATA', // mysql 数据导出
+ MYSQL_EXCEL_AUTHORIZE_RULES = 'MYSQL_EXCEL_AUTHORIZE_RULES',
+ MYSQL_FLASHBACK = 'MYSQL_FLASHBACK',
+ MYSQL_FORCE_IMPORT_SQLFILE = 'MYSQL_FORCE_IMPORT_SQLFILE',
+ MYSQL_HA_APPLY = 'MYSQL_HA_APPLY',
+ MYSQL_HA_DB_TABLE_BACKUP = 'MYSQL_HA_DB_TABLE_BACKUP',
+ MYSQL_HA_DESTROY = 'MYSQL_HA_DESTROY',
MYSQL_HA_DISABLE = 'MYSQL_HA_DISABLE',
MYSQL_HA_ENABLE = 'MYSQL_HA_ENABLE',
- MYSQL_HA_DESTROY = 'MYSQL_HA_DESTROY',
- MYSQL_SINGLE_DISABLE = 'MYSQL_SINGLE_DISABLE',
- MYSQL_SINGLE_ENABLE = 'MYSQL_SINGLE_ENABLE',
- MYSQL_SINGLE_DESTROY = 'MYSQL_SINGLE_DESTROY',
- MYSQL_INSTANCE_CLONE_RULES = 'MYSQL_INSTANCE_CLONE_RULES',
- MYSQL_CLIENT_CLONE_RULES = 'MYSQL_CLIENT_CLONE_RULES',
- MYSQL_RESTORE_LOCAL_SLAVE = 'MYSQL_RESTORE_LOCAL_SLAVE',
+ MYSQL_HA_FULL_BACKUP = 'MYSQL_HA_FULL_BACKUP',
MYSQL_HA_RENAME_DATABASE = 'MYSQL_HA_RENAME_DATABASE',
- MYSQL_SINGLE_RENAME_DATABASE = 'MYSQL_SINGLE_RENAME_DATABASE',
- MYSQL_ADD_SLAVE = 'MYSQL_ADD_SLAVE',
MYSQL_HA_TRUNCATE_DATA = 'MYSQL_HA_TRUNCATE_DATA',
- MYSQL_SINGLE_TRUNCATE_DATA = 'MYSQL_SINGLE_TRUNCATE_DATA',
- MYSQL_CHECKSUM = 'MYSQL_CHECKSUM',
- MYSQL_DATA_MIGRATE = 'MYSQL_DATA_MIGRATE',
- MYSQL_PROXY_SWITCH = 'MYSQL_PROXY_SWITCH',
- MYSQL_HA_DB_TABLE_BACKUP = 'MYSQL_HA_DB_TABLE_BACKUP',
- MYSQL_MIGRATE_CLUSTER = 'MYSQL_MIGRATE_CLUSTER',
- MYSQL_MASTER_SLAVE_SWITCH = 'MYSQL_MASTER_SLAVE_SWITCH',
- MYSQL_PROXY_ADD = 'MYSQL_PROXY_ADD',
- MYSQL_MASTER_FAIL_OVER = 'MYSQL_MASTER_FAIL_OVER',
MYSQL_IMPORT_SQLFILE = 'MYSQL_IMPORT_SQLFILE',
- MYSQL_FORCE_IMPORT_SQLFILE = 'MYSQL_FORCE_IMPORT_SQLFILE',
- MYSQL_FLASHBACK = 'MYSQL_FLASHBACK',
- MYSQL_ROLLBACK_CLUSTER = 'MYSQL_ROLLBACK_CLUSTER',
- MYSQL_RESTORE_SLAVE = 'MYSQL_RESTORE_SLAVE',
- MYSQL_HA_FULL_BACKUP = 'MYSQL_HA_FULL_BACKUP',
+ MYSQL_INSTANCE_CLONE_RULES = 'MYSQL_INSTANCE_CLONE_RULES',
+ MYSQL_LOCAL_UPGRADE = 'MYSQL_LOCAL_UPGRADE', // MySQL 原地升级
+ MYSQL_MASTER_FAIL_OVER = 'MYSQL_MASTER_FAIL_OVER',
+ MYSQL_MASTER_SLAVE_SWITCH = 'MYSQL_MASTER_SLAVE_SWITCH',
+ MYSQL_MIGRATE_CLUSTER = 'MYSQL_MIGRATE_CLUSTER',
+ MYSQL_MIGRATE_UPGRADE = 'MYSQL_MIGRATE_UPGRADE', // MySQL 迁移升级
MYSQL_OPEN_AREA = 'MYSQL_OPEN_AREA', // 开区
MYSQL_PARTITION = 'MYSQL_PARTITION',
- MYSQL_DUMP_DATA = 'MYSQL_DUMP_DATA', // mysql 数据导出
- MYSQL_DATA_REPAIR = 'MYSQL_DATA_REPAIR', // mysql 数据修复
+ MYSQL_PROXY_ADD = 'MYSQL_PROXY_ADD',
+ MYSQL_PROXY_SWITCH = 'MYSQL_PROXY_SWITCH',
MYSQL_PROXY_UPGRADE = 'MYSQL_PROXY_UPGRADE', // MySQL Proxy 升级
- MYSQL_LOCAL_UPGRADE = 'MYSQL_LOCAL_UPGRADE', // MySQL 原地升级
- MYSQL_MIGRATE_UPGRADE = 'MYSQL_MIGRATE_UPGRADE', // MySQL 迁移升级
+ MYSQL_RESTORE_LOCAL_SLAVE = 'MYSQL_RESTORE_LOCAL_SLAVE',
+ MYSQL_RESTORE_SLAVE = 'MYSQL_RESTORE_SLAVE',
+ MYSQL_ROLLBACK_CLUSTER = 'MYSQL_ROLLBACK_CLUSTER',
+ MYSQL_SINGLE_APPLY = 'MYSQL_SINGLE_APPLY',
+ MYSQL_SINGLE_DESTROY = 'MYSQL_SINGLE_DESTROY',
+ MYSQL_SINGLE_DISABLE = 'MYSQL_SINGLE_DISABLE',
+ MYSQL_SINGLE_ENABLE = 'MYSQL_SINGLE_ENABLE',
+ MYSQL_SINGLE_RENAME_DATABASE = 'MYSQL_SINGLE_RENAME_DATABASE',
+ MYSQL_SINGLE_TRUNCATE_DATA = 'MYSQL_SINGLE_TRUNCATE_DATA',
MYSQL_SLAVE_MIGRATE_UPGRADE = 'MYSQL_SLAVE_MIGRATE_UPGRADE', // MySQL 从库迁移升级
- MYSQL_ACCOUNT_RULE_CHANGE = 'MYSQL_ACCOUNT_RULE_CHANGE', // MySQL 权限变更
}
export enum TicketTypes {
REDIS_BACKUP = 'REDIS_BACKUP',
@@ -50,15 +50,21 @@ export enum TicketTypes {
REDIS_CLUSTER_APPLY = 'REDIS_CLUSTER_APPLY',
REDIS_CLUSTER_CUTOFF = 'REDIS_CLUSTER_CUTOFF',
REDIS_CLUSTER_DATA_COPY = 'REDIS_CLUSTER_DATA_COPY',
+ REDIS_CLUSTER_INS_MIGRATE = 'REDIS_CLUSTER_INS_MIGRATE',
+ REDIS_CLUSTER_LOAD_MODULES = 'REDIS_CLUSTER_LOAD_MODULES', // redis 安装Module
REDIS_CLUSTER_ROLLBACK_DATA_COPY = 'REDIS_CLUSTER_ROLLBACK_DATA_COPY',
REDIS_CLUSTER_SHARD_NUM_UPDATE = 'REDIS_CLUSTER_SHARD_NUM_UPDATE',
REDIS_CLUSTER_TYPE_UPDATE = 'REDIS_CLUSTER_TYPE_UPDATE',
+ REDIS_DATA_STRUCTURE = 'REDIS_DATA_STRUCTURE', // redis 定点构造
+ REDIS_DATA_STRUCTURE_TASK_DELETE = 'REDIS_DATA_STRUCTURE_TASK_DELETE', // redis 构造销毁
REDIS_DATACOPY_CHECK_REPAIR = 'REDIS_DATACOPY_CHECK_REPAIR',
REDIS_DESTROY = 'REDIS_DESTROY',
REDIS_INS_APPLY = 'REDIS_INS_APPLY',
+ REDIS_INSTANCE_CLOSE = 'REDIS_INSTANCE_CLOSE', // redis 主从集群禁用
+ REDIS_INSTANCE_DESTROY = 'REDIS_INSTANCE_DESTROY', // redis 主从集群删除
+ REDIS_INSTANCE_OPEN = 'REDIS_INSTANCE_OPEN', // redis 主从集群启用
REDIS_INSTANCE_PROXY_CLOSE = 'REDIS_INSTANCE_PROXY_CLOSE',
REDIS_INSTANCE_PROXY_OPEN = 'REDIS_INSTANCE_PROXY_OPEN',
- REDIS_INSTANCE_DESTROY = 'REDIS_INSTANCE_DESTROY', // redis 主从集群删除
REDIS_KEYS_DELETE = 'REDIS_KEYS_DELETE',
REDIS_KEYS_EXTRACT = 'REDIS_KEYS_EXTRACT',
REDIS_MASTER_SLAVE_SWITCH = 'REDIS_MASTER_SLAVE_SWITCH',
@@ -68,61 +74,55 @@ export enum TicketTypes {
REDIS_PLUGIN_DELETE_POLARIS = 'REDIS_PLUGIN_DELETE_POLARIS',
REDIS_PLUGIN_DNS_BIND_CLB = 'REDIS_PLUGIN_DNS_BIND_CLB',
REDIS_PLUGIN_DNS_UNBIND_CLB = 'REDIS_PLUGIN_DNS_UNBIND_CLB',
- REDIS_DATA_STRUCTURE = 'REDIS_DATA_STRUCTURE', // redis 定点构造
- REDIS_DATA_STRUCTURE_TASK_DELETE = 'REDIS_DATA_STRUCTURE_TASK_DELETE', // redis 构造销毁
- REDIS_INSTANCE_OPEN = 'REDIS_INSTANCE_OPEN', // redis 主从集群启用
- REDIS_INSTANCE_CLOSE = 'REDIS_INSTANCE_CLOSE', // redis 主从集群禁用
- REDIS_CLUSTER_LOAD_MODULES = 'REDIS_CLUSTER_LOAD_MODULES', // redis 安装Module
- REDIS_PURGE = 'REDIS_PURGE',
REDIS_PROXY_CLOSE = 'REDIS_PROXY_CLOSE',
REDIS_PROXY_OPEN = 'REDIS_PROXY_OPEN',
REDIS_PROXY_SCALE_DOWN = 'REDIS_PROXY_SCALE_DOWN',
REDIS_PROXY_SCALE_UP = 'REDIS_PROXY_SCALE_UP',
+ REDIS_PURGE = 'REDIS_PURGE',
REDIS_SCALE_DOWN = 'REDIS_SCALE_DOWN',
REDIS_SCALE_UP = 'REDIS_SCALE_UP',
REDIS_SCALE_UPDOWN = 'REDIS_SCALE_UPDOWN',
- REDIS_VERSION_UPDATE_ONLINE = 'REDIS_VERSION_UPDATE_ONLINE',
- REDIS_CLUSTER_INS_MIGRATE = 'REDIS_CLUSTER_INS_MIGRATE',
REDIS_SINGLE_INS_MIGRATE = 'REDIS_SINGLE_INS_MIGRATE',
+ REDIS_VERSION_UPDATE_ONLINE = 'REDIS_VERSION_UPDATE_ONLINE',
}
export enum TicketTypes {
+ TENDBCLUSTER_ACCOUNT_RULE_CHANGE = 'TENDBCLUSTER_ACCOUNT_RULE_CHANGE', // spider 权限变更
TENDBCLUSTER_APPLY = 'TENDBCLUSTER_APPLY',
- TENDBCLUSTER_DISABLE = 'TENDBCLUSTER_DISABLE', // spider 集群禁用
- TENDBCLUSTER_ENABLE = 'TENDBCLUSTER_ENABLE', // spider 集群启用
- TENDBCLUSTER_DESTROY = 'TENDBCLUSTER_DESTROY', // spider 集群下架
- TENDBCLUSTER_SPIDER_SLAVE_DESTROY = 'TENDBCLUSTER_SPIDER_SLAVE_DESTROY', // spider 只读集群下架
- TENDBCLUSTER_SPIDER_REDUCE_MNT = 'TENDBCLUSTER_SPIDER_REDUCE_MNT', // spider 运维节点下架
- TENDBCLUSTER_SPIDER_ADD_NODES = 'TENDBCLUSTER_SPIDER_ADD_NODES', // Spider扩容接入层
- TENDBCLUSTER_SPIDER_REDUCE_NODES = 'TENDBCLUSTER_SPIDER_REDUCE_NODES', // Spider缩容接入层
- TENDBCLUSTER_SPIDER_SLAVE_APPLY = 'TENDBCLUSTER_SPIDER_SLAVE_APPLY', // Spider 部署只读接入层
- TENDBCLUSTER_SPIDER_MNT_APPLY = 'TENDBCLUSTER_SPIDER_MNT_APPLY', // Spider 添加运维节点
- TENDBCLUSTER_MASTER_SLAVE_SWITCH = 'TENDBCLUSTER_MASTER_SLAVE_SWITCH', // Spider remote 主从切换
- TENDBCLUSTER_RENAME_DATABASE = 'TENDBCLUSTER_RENAME_DATABASE', // Spider Tendbcluster 重命名
- TENDBCLUSTER_MASTER_FAIL_OVER = 'TENDBCLUSTER_MASTER_FAIL_OVER', // Spider remote主故障切换
- TENDBCLUSTER_DB_TABLE_BACKUP = 'TENDBCLUSTER_DB_TABLE_BACKUP', // Spider TenDBCluster 库表备份
- TENDBCLUSTER_FULL_BACKUP = 'TENDBCLUSTER_FULL_BACKUP', // Spider TenDBCluster 全备单据
- TENDBCLUSTER_NODE_REBALANCE = 'TENDBCLUSTER_NODE_REBALANCE', // Spider 集群remote节点扩缩容
- TENDBCLUSTER_ROLLBACK_CLUSTER = 'TENDBCLUSTER_ROLLBACK_CLUSTER', // Spider 定点回档
- TENDBCLUSTER_FLASHBACK = 'TENDBCLUSTER_FLASHBACK', // Spider 闪回
- TENDBCLUSTER_TRUNCATE_DATABASE = 'TENDBCLUSTER_TRUNCATE_DATABASE', // Spider tendbcluster 清档
- TENDBCLUSTER_SPIDER_MNT_DESTROY = 'TENDBCLUSTER_SPIDER_MNT_DESTROY', // Spider 运维节点下架
+ TENDBCLUSTER_AUTHORIZE_RULES = 'TENDBCLUSTER_AUTHORIZE_RULES',
TENDBCLUSTER_CHECKSUM = 'TENDBCLUSTER_CHECKSUM', // Spider checksum
TENDBCLUSTER_CLIENT_CLONE_RULES = 'TENDBCLUSTER_CLIENT_CLONE_RULES', // Spider 客户端权限克隆
- TENDBCLUSTER_INSTANCE_CLONE_RULES = 'TENDBCLUSTER_INSTANCE_CLONE_RULES', // Spider DB 实例权限克隆
- TENDBCLUSTER_AUTHORIZE_RULES = 'TENDBCLUSTER_AUTHORIZE_RULES',
+ TENDBCLUSTER_DATA_REPAIR = 'TENDBCLUSTER_DATA_REPAIR', // spider 数据修复
+ TENDBCLUSTER_DB_TABLE_BACKUP = 'TENDBCLUSTER_DB_TABLE_BACKUP', // Spider TenDBCluster 库表备份
+ TENDBCLUSTER_DESTROY = 'TENDBCLUSTER_DESTROY', // spider 集群下架
+ TENDBCLUSTER_DISABLE = 'TENDBCLUSTER_DISABLE', // spider 集群禁用
+ TENDBCLUSTER_DUMP_DATA = 'TENDBCLUSTER_DUMP_DATA', // spider 数据导出
+ TENDBCLUSTER_ENABLE = 'TENDBCLUSTER_ENABLE', // spider 集群启用
TENDBCLUSTER_EXCEL_AUTHORIZE_RULES = 'TENDBCLUSTER_EXCEL_AUTHORIZE_RULES',
- TENDBCLUSTER_PARTITION = 'TENDBCLUSTER_PARTITION', // Spider 分区管理
- TENDBCLUSTER_IMPORT_SQLFILE = 'TENDBCLUSTER_IMPORT_SQLFILE', // Spider SQL变更执行
+ TENDBCLUSTER_FLASHBACK = 'TENDBCLUSTER_FLASHBACK', // Spider 闪回
TENDBCLUSTER_FORCE_IMPORT_SQLFILE = 'TENDBCLUSTER_FORCE_IMPORT_SQLFILE', // Spider SQL变更执行
- TENDBCLUSTER_OPEN_AREA = 'TENDBCLUSTER_OPEN_AREA', // Spider 开区
+ TENDBCLUSTER_FULL_BACKUP = 'TENDBCLUSTER_FULL_BACKUP', // Spider TenDBCluster 全备单据
+ TENDBCLUSTER_IMPORT_SQLFILE = 'TENDBCLUSTER_IMPORT_SQLFILE', // Spider SQL变更执行
+ TENDBCLUSTER_INSTANCE_CLONE_RULES = 'TENDBCLUSTER_INSTANCE_CLONE_RULES', // Spider DB 实例权限克隆
+ TENDBCLUSTER_MASTER_FAIL_OVER = 'TENDBCLUSTER_MASTER_FAIL_OVER', // Spider remote主故障切换
+ TENDBCLUSTER_MASTER_SLAVE_SWITCH = 'TENDBCLUSTER_MASTER_SLAVE_SWITCH', // Spider remote 主从切换
TENDBCLUSTER_MIGRATE_CLUSTER = 'TENDBCLUSTER_MIGRATE_CLUSTER', // spider 迁移主从
+ TENDBCLUSTER_NODE_REBALANCE = 'TENDBCLUSTER_NODE_REBALANCE', // Spider 集群remote节点扩缩容
+ TENDBCLUSTER_OPEN_AREA = 'TENDBCLUSTER_OPEN_AREA', // Spider 开区
+ TENDBCLUSTER_PARTITION = 'TENDBCLUSTER_PARTITION', // Spider 分区管理
+ TENDBCLUSTER_RENAME_DATABASE = 'TENDBCLUSTER_RENAME_DATABASE', // Spider Tendbcluster 重命名
TENDBCLUSTER_RESTORE_LOCAL_SLAVE = 'TENDBCLUSTER_RESTORE_LOCAL_SLAVE', // spider 重建从库-原地重建
TENDBCLUSTER_RESTORE_SLAVE = 'TENDBCLUSTER_RESTORE_SLAVE', // spider 重建从库-新机重建
- TENDBCLUSTER_DUMP_DATA = 'TENDBCLUSTER_DUMP_DATA', // spider 数据导出
- TENDBCLUSTER_DATA_REPAIR = 'TENDBCLUSTER_DATA_REPAIR', // spider 数据修复
+ TENDBCLUSTER_ROLLBACK_CLUSTER = 'TENDBCLUSTER_ROLLBACK_CLUSTER', // Spider 定点回档
TENDBCLUSTER_SEMANTIC_CHECK = 'TENDBCLUSTER_SEMANTIC_CHECK', // spider 模拟执行
- TENDBCLUSTER_ACCOUNT_RULE_CHANGE = 'TENDBCLUSTER_ACCOUNT_RULE_CHANGE', // spider 权限变更
+ TENDBCLUSTER_SPIDER_ADD_NODES = 'TENDBCLUSTER_SPIDER_ADD_NODES', // Spider扩容接入层
+ TENDBCLUSTER_SPIDER_MNT_APPLY = 'TENDBCLUSTER_SPIDER_MNT_APPLY', // Spider 添加运维节点
+ TENDBCLUSTER_SPIDER_MNT_DESTROY = 'TENDBCLUSTER_SPIDER_MNT_DESTROY', // Spider 运维节点下架
+ TENDBCLUSTER_SPIDER_REDUCE_MNT = 'TENDBCLUSTER_SPIDER_REDUCE_MNT', // spider 运维节点下架
+ TENDBCLUSTER_SPIDER_REDUCE_NODES = 'TENDBCLUSTER_SPIDER_REDUCE_NODES', // Spider缩容接入层
+ TENDBCLUSTER_SPIDER_SLAVE_APPLY = 'TENDBCLUSTER_SPIDER_SLAVE_APPLY', // Spider 部署只读接入层
+ TENDBCLUSTER_SPIDER_SLAVE_DESTROY = 'TENDBCLUSTER_SPIDER_SLAVE_DESTROY', // spider 只读集群下架
TENDBCLUSTER_TEMPORARY_DESTROY = 'TENDBCLUSTER_TEMPORARY_DESTROY', // 临时集群销毁
+ TENDBCLUSTER_TRUNCATE_DATABASE = 'TENDBCLUSTER_TRUNCATE_DATABASE', // Spider tendbcluster 清档
}
export enum TicketTypes {
MONGODB_ADD_MONGOS = 'MONGODB_ADD_MONGOS', // mongo 扩容接入层
@@ -130,119 +130,119 @@ export enum TicketTypes {
MONGODB_AUTHORIZE_RULES = 'MONGODB_AUTHORIZE_RULES', // MongoDB 集群授权
MONGODB_BACKUP = 'MONGODB_BACKUP', // mongo 库表备份
MONGODB_CUTOFF = 'MONGODB_CUTOFF', // mongo 整机替换
- MONGODB_DISABLE = 'MONGODB_DISABLE', // mongodb禁用
MONGODB_DESTROY = 'MONGODB_DESTROY', // MongoDB 集群删除
+ MONGODB_DISABLE = 'MONGODB_DISABLE', // mongodb禁用
MONGODB_ENABLE = 'MONGODB_ENABLE', // MongoDB 集群启用
MONGODB_EXCEL_AUTHORIZE = 'MONGODB_EXCEL_AUTHORIZE', // MongoDB 导入授权
MONGODB_EXCEL_AUTHORIZE_RULES = 'MONGODB_EXCEL_AUTHORIZE_RULES', // MongoDB 导入授权
MONGODB_EXEC_SCRIPT_APPLY = 'MONGODB_EXEC_SCRIPT_APPLY', // mongo 变更脚本执行
+ MONGODB_FULL_BACKUP = 'MONGODB_FULL_BACKUP', // mongo 全库备份
+ MONGODB_INSTANCE_DEINSTALL = 'MONGODB_INSTANCE_DEINSTALL', // mongo 实例下架
MONGODB_INSTANCE_RELOAD = 'MONGODB_INSTANCE_RELOAD', // mongodb重启
- MONGODB_REMOVE_NS = 'MONGODB_REMOVE_NS', // mongo 清档
MONGODB_REDUCE_MONGOS = 'MONGODB_REDUCE_MONGOS', // mongo 缩容接入层
MONGODB_REDUCE_SHARD_NODES = 'MONGODB_REDUCE_SHARD_NODES', // mongo 缩容 shard 节点数
+ MONGODB_REMOVE_NS = 'MONGODB_REMOVE_NS', // mongo 清档
+ MONGODB_REPLICASET_APPLY = 'MONGODB_REPLICASET_APPLY', // MongoDB 副本集部署申请
MONGODB_RESTORE = 'MONGODB_RESTORE', // mongo 定点构造
MONGODB_SCALE_UPDOWN = 'MONGODB_SCALE_UPDOWN', // MongoDB 分片式集群单个容量变更
MONGODB_SHARD_APPLY = 'MONGODB_SHARD_APPLY', // MongoDB 分片式集群部署申请
- MONGODB_REPLICASET_APPLY = 'MONGODB_REPLICASET_APPLY', // MongoDB 副本集部署申请
MONGODB_TEMPORARY_DESTROY = 'MONGODB_TEMPORARY_DESTROY', // mongo 临时集群销毁
- MONGODB_FULL_BACKUP = 'MONGODB_FULL_BACKUP', // mongo 全库备份
- MONGODB_INSTANCE_DEINSTALL = 'MONGODB_INSTANCE_DEINSTALL', // mongo 实例下架
}
export enum TicketTypes {
- SQLSERVER_SINGLE_APPLY = 'SQLSERVER_SINGLE_APPLY', // sqlserver单节点部署
- SQLSERVER_HA_APPLY = 'SQLSERVER_HA_APPLY', // sqlserver主从部署
- SQLSERVER_DISABLE = 'SQLSERVER_DISABLE', // sqlserver 禁用
- SQLSERVER_ENABLE = 'SQLSERVER_ENABLE', // sqlserver 启用
- SQLSERVER_DESTROY = 'SQLSERVER_DESTROY', // sqlserver 删除
+ SQLSERVER_ADD_SLAVE = 'SQLSERVER_ADD_SLAVE', // sqlserver 增加从库'
SQLSERVER_AUTHORIZE_RULES = 'SQLSERVER_AUTHORIZE_RULES', // sqlserver 集群授权
- SQLSERVER_EXCEL_AUTHORIZE_RULES = 'SQLSERVER_EXCEL_AUTHORIZE_RULES', // sqlserver 导入授权
- SQLSERVER_RESET = 'SQLSERVER_RESET', // sqlserver 集群重置
SQLSERVER_BACKUP_DBS = 'SQLSERVER_BACKUP_DBS', // sqlserver 数据库备份
- SQLSERVER_DBRENAME = 'SQLSERVER_DBRENAME', // sqlserver 数据库重命名
- SQLSERVER_DATA_MIGRATE = 'SQLSERVER_DATA_MIGRATE', // sqlserver 数据迁移
+ SQLSERVER_BUILD_DB_SYNC = 'SQLSERVER_BUILD_DB_SYNC', // DB建立同步
SQLSERVER_CLEAR_DBS = 'SQLSERVER_CLEAR_DBS', // sqlserver 清档
- SQLSERVER_MASTER_FAIL_OVER = 'SQLSERVER_MASTER_FAIL_OVER', // sqlserver 主故障切换
- SQLSERVER_MASTER_SLAVE_SWITCH = 'SQLSERVER_MASTER_SLAVE_SWITCH', // sqlserver 主从切换
- SQLSERVER_ROLLBACK = 'SQLSERVER_ROLLBACK', // sqlserver 定点回档
- SQLSERVER_ADD_SLAVE = 'SQLSERVER_ADD_SLAVE', // sqlserver 增加从库'
- SQLSERVER_RESTORE_SLAVE = 'SQLSERVER_RESTORE_SLAVE', // sqlserver 重建从库_新机重建
- SQLSERVER_RESTORE_LOCAL_SLAVE = 'SQLSERVER_RESTORE_LOCAL_SLAVE', // sqlserver 重建从库_原地重建
- SQLSERVER_IMPORT_SQLFILE = 'SQLSERVER_IMPORT_SQLFILE', // sqlserver SQL变更执行'
+ SQLSERVER_DATA_MIGRATE = 'SQLSERVER_DATA_MIGRATE', // sqlserver 数据迁移
+ SQLSERVER_DBRENAME = 'SQLSERVER_DBRENAME', // sqlserver 数据库重命名
+ SQLSERVER_DESTROY = 'SQLSERVER_DESTROY', // sqlserver 删除
+ SQLSERVER_DISABLE = 'SQLSERVER_DISABLE', // sqlserver 禁用
+ SQLSERVER_ENABLE = 'SQLSERVER_ENABLE', // sqlserver 启用
+ SQLSERVER_EXCEL_AUTHORIZE_RULES = 'SQLSERVER_EXCEL_AUTHORIZE_RULES', // sqlserver 导入授权
SQLSERVER_FULL_MIGRATE = 'SQLSERVER_FULL_MIGRATE', // sqlserver 全量迁移
+ SQLSERVER_HA_APPLY = 'SQLSERVER_HA_APPLY', // sqlserver主从部署
+ SQLSERVER_IMPORT_SQLFILE = 'SQLSERVER_IMPORT_SQLFILE', // sqlserver SQL变更执行'
SQLSERVER_INCR_MIGRATE = 'SQLSERVER_INCR_MIGRATE', // sqlserver 增量迁移
- SQLSERVER_BUILD_DB_SYNC = 'SQLSERVER_BUILD_DB_SYNC', // DB建立同步
+ SQLSERVER_MASTER_FAIL_OVER = 'SQLSERVER_MASTER_FAIL_OVER', // sqlserver 主故障切换
+ SQLSERVER_MASTER_SLAVE_SWITCH = 'SQLSERVER_MASTER_SLAVE_SWITCH', // sqlserver 主从切换
SQLSERVER_MODIFY_STATUS = 'SQLSERVER_MODIFY_STATUS', // SQLServer 修改故障实例状态
+ SQLSERVER_RESET = 'SQLSERVER_RESET', // sqlserver 集群重置
+ SQLSERVER_RESTORE_LOCAL_SLAVE = 'SQLSERVER_RESTORE_LOCAL_SLAVE', // sqlserver 重建从库_原地重建
+ SQLSERVER_RESTORE_SLAVE = 'SQLSERVER_RESTORE_SLAVE', // sqlserver 重建从库_新机重建
+ SQLSERVER_ROLLBACK = 'SQLSERVER_ROLLBACK', // sqlserver 定点回档
+ SQLSERVER_SINGLE_APPLY = 'SQLSERVER_SINGLE_APPLY', // sqlserver单节点部署
}
export enum TicketTypes {
ES_APPLY = 'ES_APPLY',
- ES_DISABLE = 'ES_DISABLE',
ES_DESTROY = 'ES_DESTROY',
+ ES_DISABLE = 'ES_DISABLE',
ES_ENABLE = 'ES_ENABLE',
+ ES_REBOOT = 'ES_REBOOT',
+ ES_REPLACE = 'ES_REPLACE',
ES_SCALE_UP = 'ES_SCALE_UP',
ES_SHRINK = 'ES_SHRINK',
- ES_REPLACE = 'ES_REPLACE',
- ES_REBOOT = 'ES_REBOOT',
}
export enum TicketTypes {
KAFKA_APPLY = 'KAFKA_APPLY',
- KAFKA_ENABLE = 'KAFKA_ENABLE',
- KAFKA_DISABLE = 'KAFKA_DISABLE',
KAFKA_DESTROY = 'KAFKA_DESTROY',
+ KAFKA_DISABLE = 'KAFKA_DISABLE',
+ KAFKA_ENABLE = 'KAFKA_ENABLE',
+ KAFKA_REBOOT = 'KAFKA_REBOOT',
+ KAFKA_REPLACE = 'KAFKA_REPLACE',
KAFKA_SCALE_UP = 'KAFKA_SCALE_UP',
KAFKA_SHRINK = 'KAFKA_SHRINK',
- KAFKA_REPLACE = 'KAFKA_REPLACE',
- KAFKA_REBOOT = 'KAFKA_REBOOT',
}
export enum TicketTypes {
HDFS_APPLY = 'HDFS_APPLY',
- HDFS_ENABLE = 'HDFS_ENABLE',
- HDFS_DISABLE = 'HDFS_DISABLE',
HDFS_DESTROY = 'HDFS_DESTROY',
+ HDFS_DISABLE = 'HDFS_DISABLE',
+ HDFS_ENABLE = 'HDFS_ENABLE',
+ HDFS_REBOOT = 'HDFS_REBOOT',
+ HDFS_REPLACE = 'HDFS_REPLACE',
HDFS_SCALE_UP = 'HDFS_SCALE_UP',
HDFS_SHRINK = 'HDFS_SHRINK',
- HDFS_REPLACE = 'HDFS_REPLACE',
- HDFS_REBOOT = 'HDFS_REBOOT',
}
export enum TicketTypes {
INFLUXDB_APPLY = 'INFLUXDB_APPLY',
+ INFLUXDB_DESTROY = 'INFLUXDB_DESTROY',
INFLUXDB_DISABLE = 'INFLUXDB_DISABLE',
+ INFLUXDB_ENABLE = 'INFLUXDB_ENABLE',
INFLUXDB_REBOOT = 'INFLUXDB_REBOOT',
INFLUXDB_REPLACE = 'INFLUXDB_REPLACE',
- INFLUXDB_ENABLE = 'INFLUXDB_ENABLE',
- INFLUXDB_DESTROY = 'INFLUXDB_DESTROY',
}
export enum TicketTypes {
PULSAR_APPLY = 'PULSAR_APPLY',
- PULSAR_REBOOT = 'PULSAR_REBOOT',
- PULSAR_ENABLE = 'PULSAR_ENABLE',
- PULSAR_DISABLE = 'PULSAR_DISABLE',
PULSAR_DESTROY = 'PULSAR_DESTROY',
+ PULSAR_DISABLE = 'PULSAR_DISABLE',
+ PULSAR_ENABLE = 'PULSAR_ENABLE',
+ PULSAR_REBOOT = 'PULSAR_REBOOT',
PULSAR_REPLACE = 'PULSAR_REPLACE',
- PULSAR_SHRINK = 'PULSAR_SHRINK',
PULSAR_SCALE_UP = 'PULSAR_SCALE_UP',
+ PULSAR_SHRINK = 'PULSAR_SHRINK',
}
export enum TicketTypes {
+ TBINLOGDUMPER_DISABLE_NODES = 'TBINLOGDUMPER_DISABLE_NODES', // dumper 节点禁用
+ TBINLOGDUMPER_ENABLE_NODES = 'TBINLOGDUMPER_ENABLE_NODES', // dumper 节点启动
TBINLOGDUMPER_INSTALL = 'TBINLOGDUMPER_INSTALL', // dumper 新建订阅
- TBINLOGDUMPER_SWITCH_NODES = 'TBINLOGDUMPER_SWITCH_NODES', // dumper 节点迁移
TBINLOGDUMPER_REDUCE_NODES = 'TBINLOGDUMPER_REDUCE_NODES', // dumper 节点下架
- TBINLOGDUMPER_ENABLE_NODES = 'TBINLOGDUMPER_ENABLE_NODES', // dumper 节点启动
- TBINLOGDUMPER_DISABLE_NODES = 'TBINLOGDUMPER_DISABLE_NODES', // dumper 节点禁用
+ TBINLOGDUMPER_SWITCH_NODES = 'TBINLOGDUMPER_SWITCH_NODES', // dumper 节点迁移
}
export enum TicketTypes {
RIAK_CLUSTER_APPLY = 'RIAK_CLUSTER_APPLY', // Riak 集群申请
RIAK_CLUSTER_DESTROY = 'RIAK_CLUSTER_DESTROY', // Riak 集群删除
RIAK_CLUSTER_DISABLE = 'RIAK_CLUSTER_DISABLE', // Riak 集群禁用
RIAK_CLUSTER_ENABLE = 'RIAK_CLUSTER_ENABLE', // Riak 集群启用
- RIAK_CLUSTER_SCALE_OUT = 'RIAK_CLUSTER_SCALE_OUT', // Riak 集群扩容
- RIAK_CLUSTER_SCALE_IN = 'RIAK_CLUSTER_SCALE_IN', // Riak 集群缩容
RIAK_CLUSTER_REBOOT = 'RIAK_CLUSTER_REBOOT', // Riak 节点重启
+ RIAK_CLUSTER_SCALE_IN = 'RIAK_CLUSTER_SCALE_IN', // Riak 集群缩容
+ RIAK_CLUSTER_SCALE_OUT = 'RIAK_CLUSTER_SCALE_OUT', // Riak 集群扩容
}
export enum TicketTypes {
DORIS_APPLY = 'DORIS_APPLY', // Doris 集群申请
- DORIS_ENABLE = 'DORIS_ENABLE', // doris 启用
- DORIS_DISABLE = 'DORIS_DISABLE', // doris 禁用
DORIS_DESTROY = 'DORIS_DESTROY', // doris 删除
+ DORIS_DISABLE = 'DORIS_DISABLE', // doris 禁用
+ DORIS_ENABLE = 'DORIS_ENABLE', // doris 启用
DORIS_REBOOT = 'DORIS_REBOOT', // doris 重启
DORIS_REPLACE = 'DORIS_REPLACE', // doris 替换
DORIS_SCALE_UP = 'DORIS_SCALE_UP', // doris 扩容
diff --git a/dbm-ui/frontend/src/components/cluster-selector/components/mongo/Index.vue b/dbm-ui/frontend/src/components/cluster-selector/components/mongo/Index.vue
index 76b0583cfc..a9ea002c67 100644
--- a/dbm-ui/frontend/src/components/cluster-selector/components/mongo/Index.vue
+++ b/dbm-ui/frontend/src/components/cluster-selector/components/mongo/Index.vue
@@ -224,7 +224,7 @@
},
{
label: t('访问入口'),
- field: 'cluster_name',
+ field: 'master_domain',
minWidth: 250,
showOverflowTooltip: true,
render: ({ data }: { data: ResourceItem }) => (
diff --git a/dbm-ui/frontend/src/components/cluster-selector/components/redis/Index.vue b/dbm-ui/frontend/src/components/cluster-selector/components/redis/Index.vue
index f7e308fb0b..88604fef9b 100644
--- a/dbm-ui/frontend/src/components/cluster-selector/components/redis/Index.vue
+++ b/dbm-ui/frontend/src/components/cluster-selector/components/redis/Index.vue
@@ -209,7 +209,7 @@
},
{
label: t('访问入口'),
- field: 'cluster_name',
+ field: 'master_domain',
fixed: 'left',
minWidth: 250,
showOverflowTooltip: true,
diff --git a/dbm-ui/frontend/src/components/cluster-selector/components/sqlserver-ha/Index.vue b/dbm-ui/frontend/src/components/cluster-selector/components/sqlserver-ha/Index.vue
index c5a825a201..5dc3f6110b 100644
--- a/dbm-ui/frontend/src/components/cluster-selector/components/sqlserver-ha/Index.vue
+++ b/dbm-ui/frontend/src/components/cluster-selector/components/sqlserver-ha/Index.vue
@@ -210,7 +210,7 @@
},
{
label: t('访问入口'),
- field: 'cluster_name',
+ field: 'master_domain',
width: 240,
fixed: 'left',
showOverflowTooltip: true,
diff --git a/dbm-ui/frontend/src/components/cluster-selector/components/sqlserver-single/Index.vue b/dbm-ui/frontend/src/components/cluster-selector/components/sqlserver-single/Index.vue
index 14917511fa..2a0bd93ba2 100644
--- a/dbm-ui/frontend/src/components/cluster-selector/components/sqlserver-single/Index.vue
+++ b/dbm-ui/frontend/src/components/cluster-selector/components/sqlserver-single/Index.vue
@@ -211,7 +211,7 @@
},
{
label: t('访问入口'),
- field: 'cluster_name',
+ field: 'master_domain',
width: 280,
fixed: 'left',
showOverflowTooltip: true,
diff --git a/dbm-ui/frontend/src/components/cluster-selector/components/tendb-cluster/Index.vue b/dbm-ui/frontend/src/components/cluster-selector/components/tendb-cluster/Index.vue
index 06f6465b8f..cc7e960195 100644
--- a/dbm-ui/frontend/src/components/cluster-selector/components/tendb-cluster/Index.vue
+++ b/dbm-ui/frontend/src/components/cluster-selector/components/tendb-cluster/Index.vue
@@ -212,7 +212,7 @@
},
{
label: t('访问入口'),
- field: 'cluster_name',
+ field: 'master_domain',
minWidth: 300,
showOverflowTooltip: true,
render: ({ data }: { data: ResourceItem }) => (
diff --git a/dbm-ui/frontend/src/components/cluster-selector/components/tendb-single/Index.vue b/dbm-ui/frontend/src/components/cluster-selector/components/tendb-single/Index.vue
index ad7df62cdd..0de433b6fd 100644
--- a/dbm-ui/frontend/src/components/cluster-selector/components/tendb-single/Index.vue
+++ b/dbm-ui/frontend/src/components/cluster-selector/components/tendb-single/Index.vue
@@ -215,7 +215,7 @@
},
{
label: t('访问入口'),
- field: 'cluster_name',
+ field: 'master_domain',
minWidth: 250,
fixed: 'left',
showOverflowTooltip: true,
diff --git a/dbm-ui/frontend/src/components/cluster-selector/components/tendbha/Index.vue b/dbm-ui/frontend/src/components/cluster-selector/components/tendbha/Index.vue
index f89a325c6a..4529eb654e 100644
--- a/dbm-ui/frontend/src/components/cluster-selector/components/tendbha/Index.vue
+++ b/dbm-ui/frontend/src/components/cluster-selector/components/tendbha/Index.vue
@@ -210,7 +210,7 @@
},
{
label: t('访问入口'),
- field: 'cluster_name',
+ field: 'master_domain',
minWidth: 280,
showOverflowTooltip: true,
render: ({ data }: { data: ResourceItem }) => (
diff --git a/dbm-ui/frontend/src/components/editable-table/Column.vue b/dbm-ui/frontend/src/components/editable-table/Column.vue
index c275ae8eeb..98ee70518d 100644
--- a/dbm-ui/frontend/src/components/editable-table/Column.vue
+++ b/dbm-ui/frontend/src/components/editable-table/Column.vue
@@ -4,11 +4,14 @@
ref="rootRef"
class="bk-editable-table-body-column"
:class="{
+ [`fixed-${fixed}-column`]: fixed,
'is-focused': isFocused,
'is-error': validateState.isError,
+ 'is-readonly': readonly,
'is-disabled': Boolean(disabledTips),
- [`is-column-fixed-${fixed}`]: fixed,
'is-previous-sibling-rowspan': isPreviousSiblingRowspan,
+ 'is-fixed':
+ (fixed === 'left' && tableContext?.fixedLeft.value) || (fixed === 'right' && tableContext?.fixedRight.value),
}"
:data-name="columnKey"
:rowspan="rowspan">
@@ -17,25 +20,36 @@
content: disabledTips,
disabled: !disabledTips,
}"
- class="bk-editable-table-field-cell">
+ class="bk-editable-table-field-cell"
+ :style="{
+ width: `${tableContext?.columnSizeConfig.value[columnKey]?.renderWidth}px`,
+ }">
+
-
-
-
+ v-if="loading"
+ class="bk-editable-table-column-loading">
+
+
+
+
+
+
+
+
diff --git a/dbm-ui/frontend/src/components/editable-table/Index.vue b/dbm-ui/frontend/src/components/editable-table/Index.vue
index 29d2e2ecca..b0c30634c1 100644
--- a/dbm-ui/frontend/src/components/editable-table/Index.vue
+++ b/dbm-ui/frontend/src/components/editable-table/Index.vue
@@ -29,8 +29,11 @@