已合并
[feature] 修改插件的默认实现 #219
justbk创建于 2023年5月20日
[feature] 修改插件的默认实现 #219
已合并
从refs/pull/219/head合入到master
共 45 个文件变更+1692-6153
| @@ -14,6 +14,8 @@ | |||
| 14 | <junit.version>4.13</junit.version> | 14 | <junit.version>4.13</junit.version> |
| 15 | <spring-brick.version>3.1.0</spring-brick.version> | 15 | <spring-brick.version>3.1.0</spring-brick.version> |
| 16 | <spring-boot.version>2.5.6</spring-boot.version> | 16 | <spring-boot.version>2.5.6</spring-boot.version> |
| 17 | + <java.version>11</java.version> | ||
| 18 | + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||
| 17 | </properties> | 19 | </properties> |
| 18 | 20 | ||
| 19 | <dependencies> | 21 | <dependencies> |
| @@ -32,6 +34,14 @@ | |||
| 32 | <groupId>com.alibaba</groupId> | 34 | <groupId>com.alibaba</groupId> |
| 33 | <artifactId>druid-spring-boot-starter</artifactId> | 35 | <artifactId>druid-spring-boot-starter</artifactId> |
| 34 | </exclusion> | 36 | </exclusion> |
| 37 | +<!-- <exclusion>--> | ||
| 38 | +<!-- <groupId>com.baomidou</groupId>--> | ||
| 39 | +<!-- <artifactId>mybatis-plus-boot-starter</artifactId>--> | ||
| 40 | +<!-- </exclusion>--> | ||
| 41 | + <exclusion> | ||
| 42 | + <groupId>com.github.pagehelper</groupId> | ||
| 43 | + <artifactId>pagehelper-spring-boot-starter</artifactId> | ||
| 44 | + </exclusion> | ||
| 35 | </exclusions> | 45 | </exclusions> |
| 36 | </dependency> | 46 | </dependency> |
| 37 | <dependency> | 47 | <dependency> |
| @@ -58,6 +68,26 @@ | |||
| 58 | <version>${lombok.version}</version> | 68 | <version>${lombok.version}</version> |
| 59 | <scope>provided</scope> | 69 | <scope>provided</scope> |
| 60 | </dependency> | 70 | </dependency> |
| 71 | + <dependency> | ||
| 72 | + <groupId>cn.hutool</groupId> | ||
| 73 | + <artifactId>hutool-all</artifactId> | ||
| 74 | + <version>5.8.11</version> | ||
| 75 | + </dependency> | ||
| 76 | + <dependency> | ||
| 77 | + <groupId>com.alibaba</groupId> | ||
| 78 | + <artifactId>druid</artifactId> | ||
| 79 | + <version>1.2.16</version> | ||
| 80 | + </dependency> | ||
| 81 | + <dependency> | ||
| 82 | + <groupId>org.opengauss</groupId> | ||
| 83 | + <artifactId>opengauss-jdbc</artifactId> | ||
| 84 | + <version>3.0.0</version> | ||
| 85 | + </dependency> | ||
| 86 | + <dependency> | ||
| 87 | + <groupId>com.alibaba</groupId> | ||
| 88 | + <artifactId>fastjson</artifactId> | ||
| 89 | + <version>1.2.83</version> | ||
| 90 | + </dependency> | ||
| 61 | </dependencies> | 91 | </dependencies> |
| 62 | 92 | ||
| 63 | <build> | 93 | <build> |
| @@ -80,8 +110,8 @@ | |||
| 80 | <pluginInfo> | 110 | <pluginInfo> |
| 81 | <id>test-plugin</id> | 111 | <id>test-plugin</id> |
| 82 | <bootstrapClass>org.opengauss.admin.plugin.PluginApplication</bootstrapClass> | 112 | <bootstrapClass>org.opengauss.admin.plugin.PluginApplication</bootstrapClass> |
| 83 | - <version>1.0.0</version> | 113 | + <version>5.0.0</version> |
| 84 | - <provider>xielibo</provider> | 114 | + <provider>opengauss</provider> |
| 85 | <description>example</description> | 115 | <description>example</description> |
| 86 | </pluginInfo> | 116 | </pluginInfo> |
| 87 | </configuration> | 117 | </configuration> |
AopenGauss-visualtool-plugin/src/main/java/org/opengauss/admin/plugin/config/ExtensionInfoServiceImpl.java+35-0
| @@ -0,0 +1,35 @@ | |||
| 1 | +package org.opengauss.admin.plugin.config; | ||
| 2 | + | ||
| 3 | + | ||
| 4 | +import com.gitee.starblues.annotation.Extract; | ||
| 5 | +import lombok.extern.slf4j.Slf4j; | ||
| 6 | +import org.opengauss.admin.common.enums.PluginLicenseType; | ||
| 7 | +import org.opengauss.admin.system.plugin.beans.PluginExtensionInfoDto; | ||
| 8 | +import org.opengauss.admin.system.plugin.extract.PluginExtensionInfoExtract; | ||
| 9 | +import org.springframework.stereotype.Service; | ||
| 10 | + | ||
| 11 | +import java.util.Date; | ||
| 12 | + | ||
| 13 | +import static org.opengauss.admin.plugin.config.PluginExtensionInfoConfig.PLUGIN_ID; | ||
| 14 | + | ||
| 15 | + | ||
| 16 | + | ||
| 17 | + | ||
| 18 | +public class ExtensionInfoServiceImpl implements PluginExtensionInfoExtract { | ||
| 19 | + | ||
| 20 | + | ||
| 21 | + public PluginExtensionInfoDto getPluginExtensionInfo() { | ||
| 22 | + PluginExtensionInfoDto dto = new PluginExtensionInfoDto(); | ||
| 23 | + dto.setPluginId(PLUGIN_ID); | ||
| 24 | + dto.setPluginName("插件DEMO"); | ||
| 25 | + dto.setPluginHome(PLUGIN_ID); | ||
| 26 | + dto.setPluginDevelopmentCompany("openGauss社区"); | ||
| 27 | + dto.setPhoneNumber("400-123-4567"); | ||
| 28 | + dto.setEmail("community@opengauss.org"); | ||
| 29 | + dto.setCompanyAddress("opengauss.org"); | ||
| 30 | + dto.setAuthAddress("/license"); | ||
| 31 | + dto.setPluginLicenseType(PluginLicenseType.TRIAL); | ||
| 32 | + dto.setPluginExpirationTime(new Date()); | ||
| 33 | + return dto; | ||
| 34 | + } | ||
| 35 | +} | ||
MopenGauss-visualtool-plugin/src/main/java/org/opengauss/admin/plugin/config/PluginExtensionInfoConfig.java+2-1
| @@ -37,7 +37,8 @@ import java.util.Map; | |||
| 37 | **/ | 37 | **/ |
| 38 | 38 | ||
| 39 | public class PluginExtensionInfoConfig implements PluginExtensionInfo { | 39 | public class PluginExtensionInfoConfig implements PluginExtensionInfo { |
| 40 | - | 40 | + public static final String PLUGIN_ID = "test-plugin"; |
| 41 | + | ||
| 41 | 42 | ||
| 42 | public Map<String, Object> extensionInfo() { | 43 | public Map<String, Object> extensionInfo() { |
| 43 | Map<String, Object> map = new HashMap<>(); | 44 | Map<String, Object> map = new HashMap<>(); |
MopenGauss-visualtool-plugin/src/main/java/org/opengauss/admin/plugin/listener/PluginListener.java+7-2
| @@ -27,6 +27,8 @@ package org.opengauss.admin.plugin.listener; | |||
| 27 | import com.gitee.starblues.spring.MainApplicationContext; | 27 | import com.gitee.starblues.spring.MainApplicationContext; |
| 28 | import com.gitee.starblues.spring.SpringBeanFactory; | 28 | import com.gitee.starblues.spring.SpringBeanFactory; |
| 29 | import lombok.extern.slf4j.Slf4j; | 29 | import lombok.extern.slf4j.Slf4j; |
| 30 | +import org.opengauss.admin.common.core.vo.MenuVo; | ||
| 31 | +import org.opengauss.admin.plugin.config.PluginExtensionInfoConfig; | ||
| 30 | import org.opengauss.admin.system.plugin.facade.MenuFacade; | 32 | import org.opengauss.admin.system.plugin.facade.MenuFacade; |
| 31 | import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent; | 33 | import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent; |
| 32 | import org.springframework.boot.context.event.ApplicationPreparedEvent; | 34 | import org.springframework.boot.context.event.ApplicationPreparedEvent; |
| @@ -47,6 +49,7 @@ public class PluginListener implements ApplicationListener<ApplicationEvent> { | |||
| 47 | 49 | ||
| 48 | 50 | ||
| 49 | public void onApplicationEvent(ApplicationEvent event) { | 51 | public void onApplicationEvent(ApplicationEvent event) { |
| 52 | + String pluginId = PluginExtensionInfoConfig.PLUGIN_ID; | ||
| 50 | if (event instanceof ApplicationEnvironmentPreparedEvent) { | 53 | if (event instanceof ApplicationEnvironmentPreparedEvent) { |
| 51 | log.info("plugin init env"); | 54 | log.info("plugin init env"); |
| 52 | } else if (event instanceof ApplicationPreparedEvent) { | 55 | } else if (event instanceof ApplicationPreparedEvent) { |
| @@ -58,7 +61,9 @@ public class PluginListener implements ApplicationListener<ApplicationEvent> { | |||
| 58 | SpringBeanFactory factory = context.getSpringBeanFactory(); | 61 | SpringBeanFactory factory = context.getSpringBeanFactory(); |
| 59 | MenuFacade menuFacade = factory.getBean(MenuFacade.class); | 62 | MenuFacade menuFacade = factory.getBean(MenuFacade.class); |
| 60 | if (menuFacade != null) { | 63 | if (menuFacade != null) { |
| 61 | - menuFacade.savePluginMenu("test-plugin","测试插件菜单","test menu",100,"index"); | 64 | + MenuVo parentMenu = menuFacade.savePluginMenu(pluginId,"测试插件菜单","test menu",50,""); |
| 65 | + menuFacade.savePluginMenu(pluginId,"测试页","HelloWorld",2,"index", parentMenu.getMenuId()); | ||
| 66 | + menuFacade.savePluginRoute(pluginId, "注册license", "license", parentMenu.getMenuId()); | ||
| 62 | } | 67 | } |
| 63 | log.info("plugin start complete"); | 68 | log.info("plugin start complete"); |
| 64 | } else if (event instanceof ContextClosedEvent) { | 69 | } else if (event instanceof ContextClosedEvent) { |
| @@ -66,7 +71,7 @@ public class PluginListener implements ApplicationListener<ApplicationEvent> { | |||
| 66 | SpringBeanFactory factory = context.getSpringBeanFactory(); | 71 | SpringBeanFactory factory = context.getSpringBeanFactory(); |
| 67 | MenuFacade menuFacade = factory.getBean(MenuFacade.class); | 72 | MenuFacade menuFacade = factory.getBean(MenuFacade.class); |
| 68 | if (menuFacade != null) { | 73 | if (menuFacade != null) { |
| 69 | - menuFacade.deletePluginMenu("test-plugin"); | 74 | + menuFacade.deletePluginMenu(pluginId); |
| 70 | } | 75 | } |
| 71 | log.info("plugin is stopped"); | 76 | log.info("plugin is stopped"); |
| 72 | } | 77 | } |
| @@ -0,0 +1 @@ | |||
| 1 | +<html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/static-plugin/test-plugin/favicon.ico"><title>web-ui</title><script defer="defer" src="/static-plugin/test-plugin/js/chunk-vendors.5b05040f.js"></script><script defer="defer" src="/static-plugin/test-plugin/js/app.f514c872.js"></script><link href="/static-plugin/test-plugin/css/chunk-vendors.3077220a.css" rel="stylesheet"><link href="/static-plugin/test-plugin/css/app.cba2b53d.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but web-ui doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html> | ||
| @@ -1,5 +1,14 @@ | |||
| 1 | +# Development environment configuration | ||
| 1 | ENV = 'development' | 2 | ENV = 'development' |
| 2 | 3 | ||
| 4 | +# development environment | ||
| 3 | VUE_APP_BASE_API = '/dev-api' | 5 | VUE_APP_BASE_API = '/dev-api' |
| 4 | 6 | ||
| 5 | -VUE_CLI_BABEL_TRANSPILE_MODULES = true | 7 | +# test api address |
| 8 | +VUE_APP_API_BASE_URL= 'http://localhost:9494' | ||
| 9 | + | ||
| 10 | +# Test environment port | ||
| 11 | +port = 8081 | ||
| 12 | + | ||
| 13 | +# websocket address | ||
| 14 | +VUE_APP_WS_BASE_URL='localhost:9494' | ||
| @@ -1,3 +1,3 @@ | |||
| 1 | +# production environment configuration | ||
| 1 | ENV = 'production' | 2 | ENV = 'production' |
| 2 | 3 | ||
| 3 | -VUE_APP_BASE_API = '/prod-api' | ||
| @@ -1,5 +1,5 @@ | |||
| 1 | NODE_ENV = production | 1 | NODE_ENV = production |
| 2 | 2 | ||
| 3 | +# test environment configuration | ||
| 3 | ENV = 'staging' | 4 | ENV = 'staging' |
| 4 | 5 | ||
| 5 | -VUE_APP_BASE_API = '/stage-api' | ||
| @@ -0,0 +1,85 @@ | |||
| 1 | +module.exports = { | ||
| 2 | + root: true, | ||
| 3 | + env: { | ||
| 4 | + node: true, | ||
| 5 | + 'vue/setup-compiler-macros': true | ||
| 6 | + }, | ||
| 7 | + extends: [ | ||
| 8 | + 'plugin:vue/vue3-essential', | ||
| 9 | + 'eslint:recommended' | ||
| 10 | + ], | ||
| 11 | + parserOptions: { | ||
| 12 | + parser: '@babel/eslint-parser' | ||
| 13 | + }, | ||
| 14 | + rules: { | ||
| 15 | + 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', | ||
| 16 | + 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', | ||
| 17 | + 'vue/multi-word-component-names': 'off', | ||
| 18 | + 'prefer-promise-reject-errors': 'off', | ||
| 19 | + 'arrow-spacing': [2, { | ||
| 20 | + before: true, | ||
| 21 | + after: true | ||
| 22 | + }], | ||
| 23 | + 'block-spacing': [2, 'always'], | ||
| 24 | + 'brace-style': [2, '1tbs', { | ||
| 25 | + allowSingleLine: true | ||
| 26 | + }], | ||
| 27 | + quotes: [2, 'single', { | ||
| 28 | + avoidEscape: true, | ||
| 29 | + allowTemplateLiterals: true | ||
| 30 | + }], | ||
| 31 | + camelcase: [0, { | ||
| 32 | + properties: 'always' | ||
| 33 | + }], | ||
| 34 | + 'comma-dangle': [2, 'never'], | ||
| 35 | + 'comma-spacing': [2, { | ||
| 36 | + before: false, | ||
| 37 | + after: true | ||
| 38 | + }], | ||
| 39 | + 'comma-style': [2, 'last'], | ||
| 40 | + 'jsx-quotes': [2, 'prefer-single'], | ||
| 41 | + 'key-spacing': [2, { | ||
| 42 | + beforeColon: false, | ||
| 43 | + afterColon: true | ||
| 44 | + }], | ||
| 45 | + 'keyword-spacing': [2, { | ||
| 46 | + before: true, | ||
| 47 | + after: true | ||
| 48 | + }], | ||
| 49 | + 'no-dupe-args': 2, | ||
| 50 | + 'no-dupe-class-members': 2, | ||
| 51 | + 'no-dupe-keys': 2, | ||
| 52 | + 'no-duplicate-case': 2, | ||
| 53 | + 'no-empty-character-class': 2, | ||
| 54 | + 'no-empty-pattern': 2, | ||
| 55 | + 'no-lone-blocks': 2, | ||
| 56 | + 'no-mixed-spaces-and-tabs': 2, | ||
| 57 | + 'no-multi-spaces': 2, | ||
| 58 | + 'no-multi-str': 2, | ||
| 59 | + 'no-multiple-empty-lines': [2, { | ||
| 60 | + max: 1 | ||
| 61 | + }], | ||
| 62 | + 'require-atomic-updates': 'off', | ||
| 63 | + semi: ['error', 'never'], | ||
| 64 | + 'semi-spacing': [2, { | ||
| 65 | + before: false, | ||
| 66 | + after: true | ||
| 67 | + }], | ||
| 68 | + 'space-before-blocks': [2, 'always'], | ||
| 69 | + 'space-before-function-paren': [2, 'always'], | ||
| 70 | + 'space-in-parens': [2, 'never'], | ||
| 71 | + 'space-infix-ops': 2, | ||
| 72 | + 'space-unary-ops': [2, { | ||
| 73 | + words: true, | ||
| 74 | + nonwords: false | ||
| 75 | + }], | ||
| 76 | + 'spaced-comment': [2, 'always', { | ||
| 77 | + markers: ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] | ||
| 78 | + }], | ||
| 79 | + 'template-curly-spacing': [2, 'never'], | ||
| 80 | + 'object-curly-spacing': [2, 'always', { | ||
| 81 | + objectsInObjects: false | ||
| 82 | + }], | ||
| 83 | + 'array-bracket-spacing': [2, 'never'] | ||
| 84 | + } | ||
| 85 | +} | ||
| @@ -19,6 +19,3 @@ yarn build | |||
| 19 | ``` | 19 | ``` |
| 20 | yarn lint | 20 | yarn lint |
| 21 | ``` | 21 | ``` |
| 22 | - | ||
| 23 | -### Customize configuration | ||
| 24 | -See [Configuration Reference](https://cli.vuejs.org/config/). | ||
| @@ -9,33 +9,32 @@ | |||
| 9 | "lint": "vue-cli-service lint" | 9 | "lint": "vue-cli-service lint" |
| 10 | }, | 10 | }, |
| 11 | "dependencies": { | 11 | "dependencies": { |
| 12 | - "core-js": "^3.8.3", | 12 | + "@arco-design/web-vue": "2.43.2", |
| 13 | - "element-ui": "^2.15.10", | 13 | + "axios": "1.1.3", |
| 14 | - "vue": "^2.6.14" | 14 | + "core-js": "^3.26.0", |
| 15 | + "dayjs": "^1.11.7", | ||
| 16 | + "jsencrypt": "3.0.0-rc.1", | ||
| 17 | + "qrcode": "^1.5.3", | ||
| 18 | + "vue": "3.2.41", | ||
| 19 | + "vue-i18n": "^9.3.0-beta.6", | ||
| 20 | + "vue-router": "4.0.3", | ||
| 21 | + "vue3-ace-editor": "2.2.2" | ||
| 15 | }, | 22 | }, |
| 16 | "devDependencies": { | 23 | "devDependencies": { |
| 17 | - "@babel/core": "^7.12.16", | 24 | + "@babel/core": "7.12.16", |
| 18 | - "@babel/eslint-parser": "^7.12.16", | 25 | + "@babel/eslint-parser": "7.12.16", |
| 19 | "@vue/cli-plugin-babel": "~5.0.0", | 26 | "@vue/cli-plugin-babel": "~5.0.0", |
| 20 | "@vue/cli-plugin-eslint": "~5.0.0", | 27 | "@vue/cli-plugin-eslint": "~5.0.0", |
| 28 | + "@vue/cli-plugin-router": "~5.0.0", | ||
| 21 | "@vue/cli-service": "~5.0.0", | 29 | "@vue/cli-service": "~5.0.0", |
| 22 | - "eslint": "^7.32.0", | 30 | + "eslint": "7.32.0", |
| 23 | - "eslint-plugin-vue": "^8.0.3", | 31 | + "eslint-plugin-import": "2.26.0", |
| 24 | - "vue-template-compiler": "^2.6.14" | 32 | + "eslint-plugin-node": "11.1.0", |
| 25 | - }, | 33 | + "eslint-plugin-promise": "6.1.1", |
| 26 | - "eslintConfig": { | 34 | + "eslint-plugin-vue": "8.0.3", |
| 27 | - "root": true, | 35 | + "less": "4.1.3", |
| 28 | - "env": { | 36 | + "less-loader": "11.1.0", |
| 29 | - "node": true | 37 | + "svg-sprite-loader": "6.0.11" |
| 30 | - }, | ||
| 31 | - "extends": [ | ||
| 32 | - "plugin:vue/essential", | ||
| 33 | - "eslint:recommended" | ||
| 34 | - ], | ||
| 35 | - "parserOptions": { | ||
| 36 | - "parser": "@babel/eslint-parser" | ||
| 37 | - }, | ||
| 38 | - "rules": {} | ||
| 39 | }, | 38 | }, |
| 40 | "browserslist": [ | 39 | "browserslist": [ |
| 41 | "> 1%", | 40 | "> 1%", |
| @@ -1,28 +1,76 @@ | |||
| 1 | <template> | 1 | <template> |
| 2 | - <div id="app"> | 2 | + <a-config-provider :locale="locale"> |
| 3 | - <img alt="Vue logo" src="./assets/logo.png"> | 3 | + <router-view> |
| 4 | - <HelloWorld msg="Welcome to Your Vue.js App"/> | 4 | + </router-view> |
| 5 | - </div> | 5 | + </a-config-provider> |
| 6 | </template> | 6 | </template> |
| 7 | 7 | ||
| 8 | -<script> | 8 | +<script setup> |
| 9 | -import HelloWorld from './components/HelloWorld.vue' | 9 | +import { computed, onMounted } from 'vue' |
| 10 | +import enUS from '@arco-design/web-vue/es/locale/lang/en-us' | ||
| 11 | +import zhCN from '@arco-design/web-vue/es/locale/lang/zh-cn' | ||
| 12 | +import useLocale from '@/hooks/locale' | ||
| 13 | +import useTheme from '@/hooks/theme' | ||
| 10 | 14 | ||
| 11 | -export default { | 15 | +const { currentLocale, changeLocale } = useLocale() |
| 12 | - name: 'App', | 16 | +const { changeTheme } = useTheme() |
| 13 | - components: { | 17 | + |
| 14 | - HelloWorld | 18 | +onMounted(() => { |
| 19 | + // theme change | ||
| 20 | + const theme = localStorage.getItem('opengauss-theme') | ||
| 21 | + if (theme === 'dark') { | ||
| 22 | + document.body.setAttribute('arco-theme', 'dark') | ||
| 23 | + changeTheme('dark') | ||
| 24 | + } else { | ||
| 25 | + document.body.removeAttribute('arco-theme') | ||
| 26 | + changeTheme('') | ||
| 15 | } | 27 | } |
| 16 | -} | ||
| 17 | -</script> | ||
| 18 | 28 | ||
| 19 | -<style> | 29 | + window.$wujie?.bus.$on('opengauss-theme-change', val => { |
| 20 | -#app { | 30 | + if (val === 'dark') { |
| 21 | - font-family: Avenir, Helvetica, Arial, sans-serif; | 31 | + document.body.setAttribute('arco-theme', 'dark') |
| 22 | - -webkit-font-smoothing: antialiased; | 32 | + changeTheme('dark') |
| 23 | - -moz-osx-font-smoothing: grayscale; | 33 | + } else { |
| 24 | - text-align: center; | 34 | + document.body.removeAttribute('arco-theme') |
| 25 | - color: #2c3e50; | 35 | + changeTheme('') |
| 26 | - margin-top: 60px; | 36 | + } |
| 27 | -} | 37 | + }) |
| 28 | -</style> | 38 | + |
| 39 | + // locale change | ||
| 40 | + const locale = localStorage.getItem('locale') | ||
| 41 | + if (locale === 'en-US') { | ||
| 42 | + changeLocale('en-US') | ||
| 43 | + } else { | ||
| 44 | + changeLocale('zh-CN') | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + window.$wujie?.bus.$on('opengauss-locale-change', val => { | ||
| 48 | + if (val === 'en-US') { | ||
| 49 | + changeLocale('en-US') | ||
| 50 | + } else { | ||
| 51 | + changeLocale('zh-CN') | ||
| 52 | + } | ||
| 53 | + }) | ||
| 54 | + | ||
| 55 | + // menu collapse | ||
| 56 | + const htmlStyle = document.getElementsByTagName('html')[0].style | ||
| 57 | + window.$wujie?.bus.$on('opengauss-menu-collapse', val => { | ||
| 58 | + if (val === '1') { | ||
| 59 | + htmlStyle.setProperty('padding-left', '64px', 'important') | ||
| 60 | + } else { | ||
| 61 | + htmlStyle.setProperty('padding-left', '236px', 'important') | ||
| 62 | + } | ||
| 63 | + }) | ||
| 64 | +}) | ||
| 65 | + | ||
| 66 | +const locale = computed(() => { | ||
| 67 | + switch (currentLocale.value) { | ||
| 68 | + case 'zh-CN': | ||
| 69 | + return zhCN | ||
| 70 | + case 'en-US': | ||
| 71 | + return enUS | ||
| 72 | + default: | ||
| 73 | + return zhCN | ||
| 74 | + } | ||
| 75 | +}) | ||
| 76 | +</script> | ||
| @@ -0,0 +1,65 @@ | |||
| 1 | +import axios from 'axios' | ||
| 2 | +import { Message } from '@arco-design/web-vue' | ||
| 3 | +import { getToken } from '@/utils/auth' | ||
| 4 | +import errorCode from '@/utils/errorCode' | ||
| 5 | + | ||
| 6 | +axios.defaults.baseURL = process.env.VUE_APP_BASE_API || '' | ||
| 7 | +axios.defaults.timeout = 1200000 | ||
| 8 | + | ||
| 9 | +axios.interceptors.request.use( | ||
| 10 | + (config) => { | ||
| 11 | + // let each request carry token | ||
| 12 | + // this example using the JWT token | ||
| 13 | + // Authorization is a custom headers key | ||
| 14 | + // please modify it according to the actual situation | ||
| 15 | + const token = getToken() | ||
| 16 | + if (token) { | ||
| 17 | + if (!config.headers) { | ||
| 18 | + config.headers = {} | ||
| 19 | + } | ||
| 20 | + config.headers.Authorization = `Bearer ${token}` | ||
| 21 | + } | ||
| 22 | + return config | ||
| 23 | + }, | ||
| 24 | + (error) => { | ||
| 25 | + // do something | ||
| 26 | + return Promise.reject(error) | ||
| 27 | + } | ||
| 28 | +) | ||
| 29 | +// add response interceptors | ||
| 30 | +axios.interceptors.response.use( | ||
| 31 | + (response) => { | ||
| 32 | + const res = response | ||
| 33 | + // If the status code is not set, the default status is success | ||
| 34 | + const code = res.data.code || 200 | ||
| 35 | + // get error message | ||
| 36 | + const msg = errorCode[code] || res.data.msg || errorCode.default | ||
| 37 | + | ||
| 38 | + if (code === 401) { | ||
| 39 | + window.$wujie?.bus.$emit('opengauss-login-expired') | ||
| 40 | + return Promise.reject('Please Log in') | ||
| 41 | + } else if (code === 500) { | ||
| 42 | + Message.error({ | ||
| 43 | + content: msg, | ||
| 44 | + duration: 5 * 1000 | ||
| 45 | + }) | ||
| 46 | + return Promise.reject(new Error(msg)) | ||
| 47 | + } else if (code !== 200) { | ||
| 48 | + Message.error({ | ||
| 49 | + content: msg, | ||
| 50 | + duration: 5 * 1000 | ||
| 51 | + }) | ||
| 52 | + return Promise.reject('error') | ||
| 53 | + } else { | ||
| 54 | + return res.data | ||
| 55 | + } | ||
| 56 | + }, | ||
| 57 | + (error) => { | ||
| 58 | + const { message } = error | ||
| 59 | + Message.error({ | ||
| 60 | + content: message || 'Error', | ||
| 61 | + duration: 3 * 1000 | ||
| 62 | + }) | ||
| 63 | + return Promise.reject(error) | ||
| 64 | + } | ||
| 65 | +) | ||
| @@ -0,0 +1,10 @@ | |||
| 1 | +import axios from 'axios' | ||
| 2 | +import { PLUGIN_ID } from '@/utils/const' | ||
| 3 | +/* you can call restful api here! | ||
| 4 | +export const clusterList = () => { | ||
| 5 | + return axios.get('/opsCluster/listCluster') | ||
| 6 | +} | ||
| 7 | +export const buildLicense = (data) => { | ||
| 8 | + return axios.post('/plugins/odd-test-plugin/license/build', data) | ||
| 9 | +} | ||
| 10 | +*/ | ||
| @@ -0,0 +1,3 @@ | |||
| 1 | +const svg = require.context('./svg', false, /\.svg$/) | ||
| 2 | +const requireAll = (requireContext) => requireContext.keys().map(requireContext) | ||
| 3 | +requireAll(svg) | ||
| @@ -0,0 +1 @@ | |||
| 1 | +<svg t="1675754914055" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2768" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M879.7 687.1V516.2H540.8V390.3H645V124.4H379v265.9h104.2v125.9H144.3v170.9H66.8v212.5h212.6V687.1h-77.5V573.8h281.3v113.3h-77.5v212.5h212.6V687.1h-77.5V573.8h281.3v113.3h-77.5v212.5h212.6V687.1z" fill="#333333" p-id="2769"></path></svg> | ||
| @@ -0,0 +1 @@ | |||
| 1 | +<svg t="1675755574508" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4585" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M973.50137 189.369863C973.50137 72.942466 739.243836 11.221918 507.791781 11.221918 288.964384 11.221918 68.734247 65.928767 43.484932 169.731507c-4.208219 5.610959-5.610959 12.624658-5.610959 19.638356v688.745205c0 8.416438 2.805479 16.832877 9.819178 23.846576 4.208219 4.208219 112.219178 115.024658 464.306849 115.024657 347.879452 0 441.863014-105.205479 451.682192-117.830137 5.610959-5.610959 7.013699-14.027397 7.013698-22.443835V213.216438c1.40274-8.416438 2.805479-15.430137 2.80548-23.846575zM897.753425 648.065753c-1.40274 0-1.40274 1.40274-2.80548 1.40274 0 0-1.40274 0-1.40274 1.40274-1.40274 1.40274-2.805479 1.40274-4.208219 2.805479l-1.402739 1.40274c-1.40274 0-1.40274 1.40274-2.80548 1.40274 0 0-1.40274 1.40274-2.805479 1.40274s-1.40274 1.40274-2.80548 1.402739-1.40274 1.40274-2.805479 1.40274-2.805479 1.40274-4.208219 1.40274c-1.40274 0-1.40274 1.40274-2.80548 1.402739-1.40274 1.40274-2.805479 1.40274-4.208219 2.80548-1.40274 0-1.40274 1.40274-2.805479 1.40274-2.805479 1.40274-4.208219 2.805479-7.013699 4.208219-1.40274 0-1.40274 1.40274-2.80548 1.402739-1.40274 1.40274-4.208219 1.40274-5.610958 2.80548-1.40274 0-2.805479 1.40274-4.20822 1.40274-1.40274 1.40274-4.208219 1.40274-5.610959 2.805479-1.40274 0-2.805479 1.40274-4.208219 1.40274-1.40274 1.40274-4.208219 1.40274-5.610959 2.805479-1.40274 0-2.805479 1.40274-4.208219 1.40274-2.805479 1.40274-5.610959 1.40274-8.416438 2.805479-1.40274 0-1.40274 0-2.80548 1.40274-4.208219 1.40274-7.013699 2.805479-11.221917 4.208219-1.40274 0-2.805479 1.40274-4.20822 1.40274-2.805479 1.40274-5.610959 1.40274-8.416438 2.80548-1.40274 0-2.805479 1.40274-5.610959 1.402739-2.805479 1.40274-5.610959 1.40274-8.416438 2.80548-1.40274 0-4.208219 1.40274-5.610959 1.402739-2.805479 1.40274-5.610959 1.40274-9.819178 2.80548-1.40274 0-2.805479 1.40274-5.610959 1.40274-4.208219 1.40274-8.416438 1.40274-12.624658 2.805479h-2.805479c-5.610959 1.40274-11.221918 2.805479-16.832877 2.80548-1.40274 0-4.208219 0-5.610959 1.402739-4.208219 1.40274-8.416438 1.40274-12.624657 2.80548-2.805479 0-4.208219 1.40274-7.013699 1.402739-4.208219 0-8.416438 1.40274-11.221918 1.40274-2.805479 0-4.208219 0-7.013698 1.40274-4.208219 0-8.416438 1.40274-12.624658 1.40274-2.805479 0-4.208219 0-7.013698 1.402739-5.610959 1.40274-12.624658 1.40274-18.235617 1.40274h-1.40274c-7.013699 0-14.027397 1.40274-21.041096 1.40274h-7.013698c-5.610959 0-11.221918 1.40274-15.430137 1.40274h-8.416439c-5.610959 0-9.819178 0-15.430137 1.402739H447.473973c-5.610959 0-11.221918 0-15.430137-1.402739h-8.416439c-5.610959 0-11.221918-1.40274-16.832876-1.40274h-7.013699c-7.013699 0-15.430137-1.40274-22.443836-1.40274h-2.805479c-5.610959 0-12.624658-1.40274-18.235617-1.40274-2.805479 0-4.208219 0-7.013698-1.402739-4.208219 0-9.819178-1.40274-14.027397-1.40274-2.805479 0-4.208219 0-7.013699-1.40274-4.208219 0-8.416438-1.40274-12.624658-1.40274-2.805479 0-4.208219 0-7.013698-1.402739-4.208219-1.40274-9.819178-1.40274-14.027398-2.80548-1.40274 0-2.805479 0-4.208219-1.402739-5.610959-1.40274-11.221918-2.805479-16.832876-2.80548-1.40274 0-2.805479 0-2.80548-1.40274-4.208219-1.40274-8.416438-1.40274-12.624657-2.805479-1.40274 0-2.805479-1.40274-5.610959-1.40274-2.805479-1.40274-7.013699-1.40274-9.819178-2.805479-1.40274 0-2.805479-1.40274-5.610959-1.40274-2.805479-1.40274-7.013699-1.40274-9.819178-2.805479-1.40274 0-2.805479-1.40274-4.20822-1.40274-4.208219-1.40274-7.013699-2.805479-11.221917-2.80548h-2.80548l-12.624657-4.208219c-1.40274 0-1.40274 0-2.80548-1.40274-2.805479-1.40274-5.610959-2.805479-8.416438-2.805479-1.40274 0-2.805479-1.40274-4.208219-1.40274-2.805479-1.40274-5.610959-1.40274-7.013699-2.805479-1.40274 0-2.805479-1.40274-2.805479-1.40274-2.805479-1.40274-4.208219-1.40274-7.013699-2.805479-1.40274 0-1.40274-1.40274-2.80548-1.40274l-8.416438-4.208219-8.416438-4.208219s-1.40274 0-1.40274-1.40274c-1.40274-1.40274-4.208219-1.40274-5.610959-2.80548-1.40274 0-1.40274-1.40274-2.805479-1.402739-1.40274-1.40274-2.805479-1.40274-4.208219-2.80548l-1.40274-1.402739c0 1.40274-1.40274 0-2.80548-1.40274 0 0-1.40274 0-1.402739-1.40274-4.208219-2.805479-7.013699-4.208219-9.819178-5.610959 0 0-1.40274 0-1.40274-1.40274-1.40274 0-1.40274-1.40274-2.80548-1.402739 0 0-1.40274 0-1.402739-1.40274 0 0-1.40274 0-1.40274-1.40274V504.986301s1.40274 1.40274 2.805479 1.40274l8.416439 4.208219c1.40274 0 2.805479 1.40274 4.208219 1.40274 2.805479 1.40274 7.013699 2.805479 9.819178 4.208219 1.40274 0 1.40274 1.40274 2.805479 1.40274 4.208219 1.40274 9.819178 4.208219 14.027398 5.610959 1.40274 0 2.805479 1.40274 4.208219 1.40274 4.208219 1.40274 7.013699 2.805479 11.221918 4.208219 1.40274 1.40274 4.208219 1.40274 7.013698 2.805479 4.208219 1.40274 7.013699 2.805479 11.221918 4.208219 2.805479 1.40274 4.208219 1.40274 7.013699 2.80548l12.624657 4.208219c2.805479 0 4.208219 1.40274 7.013699 1.40274 7.013699 1.40274 12.624658 4.208219 19.638356 5.610959h2.80548c5.610959 1.40274 12.624658 2.805479 18.235616 4.208219 2.805479 0 5.610959 1.40274 8.416438 1.40274 5.610959 1.40274 9.819178 2.805479 15.430137 2.805479 2.805479 0 5.610959 1.40274 9.819178 1.40274 5.610959 1.40274 11.221918 1.40274 16.832877 2.805479 2.805479 0 5.610959 1.40274 9.819178 1.40274 7.013699 1.40274 14.027397 1.40274 19.638356 2.805479 2.805479 0 4.208219 0 7.013699 1.40274 9.819178 1.40274 18.235616 2.805479 28.054794 2.805479 2.805479 0 5.610959 0 8.416439 1.40274 7.013699 1.40274 15.430137 1.40274 22.443835 1.40274 4.208219 0 7.013699 0 11.221918 1.40274 7.013699 0 14.027397 1.40274 21.041096 1.402739h12.624658c7.013699 0 15.430137 0 23.846575 1.40274h93.983562c7.013699 0 15.430137 0 22.443835-1.40274h12.624658c7.013699 0 14.027397-1.40274 21.041096-1.402739 4.208219 0 7.013699 0 11.221918-1.40274 7.013699 0 14.027397-1.40274 21.041095-1.40274 2.805479 0 5.610959 0 8.416439-1.40274 9.819178-1.40274 18.235616-1.40274 28.054794-2.805479h2.80548c8.416438-1.40274 15.430137-2.805479 23.846575-2.805479 2.805479 0 5.610959-1.40274 8.416438-1.40274 5.610959-1.40274 11.221918-1.40274 16.832877-2.80548 2.805479 0 5.610959-1.40274 8.416439-1.402739 5.610959-1.40274 9.819178-1.40274 14.027397-2.80548 2.805479 0 5.610959-1.40274 8.416438-1.402739 5.610959-1.40274 9.819178-2.805479 14.027397-2.80548 2.805479 0 4.208219-1.40274 7.013699-1.40274 7.013699-1.40274 12.624658-2.805479 19.638356-5.610959 1.40274 0 2.805479 0 2.80548-1.402739 5.610959-1.40274 9.819178-2.805479 15.430137-4.208219 1.40274 0 4.208219-1.40274 5.610959-1.40274 4.208219-1.40274 7.013699-2.805479 11.221917-4.208219 1.40274-1.40274 4.208219-1.40274 5.610959-2.80548 2.805479-1.40274 7.013699-2.805479 9.819178-4.208219 1.40274-1.40274 4.208219-1.40274 5.610959-2.805479 2.805479-1.40274 7.013699-2.805479 9.819178-4.20822 1.40274 0 2.805479-1.40274 4.208219-1.402739 4.208219-1.40274 8.416438-4.208219 12.624658-5.610959 1.40274 0 1.40274-1.40274 2.805479-1.40274 2.805479-1.40274 7.013699-2.805479 9.819179-4.208219h1.402739v138.871233c-4.208219 0-5.610959 1.40274-7.013698 1.402739 1.40274 0 0 0 0 0z m2.805479-224.438356c0 1.40274-1.40274 1.40274 0 0-1.40274 1.40274-1.40274 1.40274-2.805479 1.40274l-2.80548 2.805479c-1.40274 1.40274-2.805479 1.40274-4.208219 2.80548 0 0-1.40274 0-1.40274 1.40274-1.40274 1.40274-2.805479 1.40274-4.208219 2.805479l-1.40274 1.40274c-1.40274 0-2.805479 1.40274-2.805479 2.805479-1.40274 0-1.40274 1.40274-2.80548 1.40274-1.40274 1.40274-2.805479 1.40274-4.208219 2.805479-1.40274 0-1.40274 1.40274-2.805479 1.40274-1.40274 1.40274-2.805479 1.40274-5.610959 2.80548 0 0-1.40274 0-1.40274 1.402739-2.805479 1.40274-4.208219 2.805479-7.013698 4.20822-1.40274 0-1.40274 1.40274-2.80548 1.402739-1.40274 1.40274-4.208219 1.40274-5.610959 2.80548-1.40274 0-2.805479 1.40274-2.805479 1.402739-1.40274 1.40274-4.208219 1.40274-5.610959 2.80548-1.40274 0-2.805479 1.40274-4.208219 1.40274-1.40274 1.40274-4.208219 1.40274-7.013699 2.805479-1.40274 0-2.805479 1.40274-4.208219 1.40274-2.805479 1.40274-5.610959 1.40274-8.416438 2.805479-1.40274 0-1.40274 0-2.80548 1.40274-4.208219 1.40274-7.013699 2.805479-11.221918 4.208219-1.40274 0-2.805479 1.40274-4.208219 1.40274-2.805479 1.40274-5.610959 1.40274-8.416438 2.805479-1.40274 0-2.805479 1.40274-5.610959 1.40274-2.805479 1.40274-5.610959 1.40274-8.416439 2.805479-1.40274 0-4.208219 1.40274-5.610958 1.40274-2.805479 1.40274-5.610959 1.40274-9.819178 2.80548-1.40274 0-2.805479 1.40274-5.610959 1.402739-4.208219 1.40274-8.416438 1.40274-12.624658 2.80548h-2.805479c-5.610959 1.40274-11.221918 2.805479-16.832877 2.805479-1.40274 0-4.208219 0-5.610959 1.40274-4.208219 1.40274-8.416438 1.40274-12.624658 2.805479-2.805479 0-4.208219 1.40274-7.013698 1.40274-4.208219 0-8.416438 1.40274-11.221918 1.40274-2.805479 0-4.208219 0-7.013699 1.40274-4.208219 0-8.416438 1.40274-12.624657 1.402739-2.805479 0-4.208219 0-7.013699 1.40274-5.610959 1.40274-12.624658 1.40274-19.638356 1.40274h-1.40274c-7.013699 0-14.027397 1.40274-22.443835 1.40274h-7.013699c-5.610959 0-9.819178 1.40274-15.430137 1.402739h-8.416438c-5.610959 0-9.819178 0-15.430137 1.40274H446.071233c-5.610959 0-11.221918 0-15.430137-1.40274h-8.416438c-5.610959 0-11.221918-1.40274-16.832877-1.402739h-7.013699c-7.013699 0-15.430137-1.40274-22.443835-1.40274h-2.80548c-5.610959 0-12.624658-1.40274-18.235616-1.40274-2.805479 0-4.208219 0-7.013699-1.40274-4.208219 0-8.416438-1.40274-14.027397-1.402739-2.805479 0-4.208219 0-7.013699-1.40274-4.208219 0-8.416438-1.40274-12.624657-1.40274-2.805479 0-4.208219 0-7.013699-1.40274-4.208219-1.40274-8.416438-1.40274-14.027397-2.805479-1.40274 0-2.805479 0-4.208219-1.40274-5.610959-1.40274-11.221918-2.805479-16.832877-2.805479-1.40274 0-2.805479 0-4.208219-1.40274-4.208219-1.40274-8.416438-1.40274-12.624658-2.805479-1.40274 0-4.208219-1.40274-5.610959-1.40274-2.805479-1.40274-7.013699-1.40274-9.819178-2.80548-1.40274 0-4.208219-1.40274-5.610959-1.402739-2.805479-1.40274-7.013699-1.40274-9.819178-2.80548-1.40274 0-2.805479-1.40274-4.208219-1.402739-4.208219-1.40274-7.013699-1.40274-9.819178-2.80548-1.40274 0-1.40274 0-2.80548-1.40274l-12.624657-4.208219c-1.40274 0-2.805479-1.40274-2.80548-1.40274-2.805479-1.40274-5.610959-1.40274-8.416438-2.805479-1.40274 0-2.805479-1.40274-4.208219-1.40274-2.805479-1.40274-4.208219-1.40274-7.013699-2.805479-1.40274 0-2.805479-1.40274-4.208219-1.40274-2.805479-1.40274-4.208219-1.40274-7.013699-2.805479-1.40274 0-2.805479-1.40274-2.805479-1.40274-2.805479-1.40274-5.610959-2.805479-7.013699-2.805479h-1.402739l-8.416439-4.20822c-1.40274 0-1.40274-1.40274-2.805479-1.402739-1.40274-1.40274-2.805479-1.40274-5.610959-2.80548-1.40274 0-1.40274-1.40274-2.805479-1.40274-1.40274-1.40274-2.805479-1.40274-4.20822-2.805479-1.40274 0-1.40274-1.40274-2.805479-1.40274 5.610959-2.805479 4.208219-4.208219 2.805479-4.208219l-1.402739-1.40274c-1.40274-1.40274-2.805479-1.40274-4.20822-2.805479 0 0-1.40274 0-1.402739-1.40274-1.40274-1.40274-2.805479-1.40274-4.208219-2.805479l-1.40274-1.40274c-1.40274 0-1.40274-1.40274-2.80548-1.40274l-1.402739-1.402739h-1.40274v-137.468494c1.40274 0 1.40274 1.40274 2.805479 1.40274 4.208219 2.805479 7.013699 4.208219 11.221918 7.013699 1.40274 1.40274 2.805479 1.40274 4.208219 2.805479l16.832877 8.416439c1.40274 0 2.805479 1.40274 4.208219 1.402739 4.208219 1.40274 9.819178 4.208219 14.027397 5.610959 1.40274 1.40274 4.208219 1.40274 5.610959 2.80548 4.208219 1.40274 9.819178 4.208219 14.027398 5.610959 1.40274 0 2.805479 1.40274 4.208219 1.402739 7.013699 2.805479 12.624658 4.208219 19.638356 7.013699 1.40274 0 4.208219 1.40274 5.610959 1.40274 5.610959 1.40274 11.221918 2.805479 15.430137 4.208219 2.805479 0 4.208219 1.40274 7.013699 1.40274l16.832876 4.208219c1.40274 0 2.805479 1.40274 5.610959 1.402739 7.013699 1.40274 15.430137 2.805479 22.443836 4.20822 2.805479 0 4.208219 1.40274 7.013698 1.402739 5.610959 1.40274 11.221918 2.805479 16.832877 2.80548 2.805479 0 5.610959 1.40274 8.416438 1.40274 7.013699 1.40274 12.624658 1.40274 19.638357 2.805479 1.40274 0 4.208219 0 5.610959 1.40274 8.416438 1.40274 15.430137 2.805479 23.846575 2.805479 2.805479 0 5.610959 0 8.416438 1.40274 5.610959 0 11.221918 1.40274 18.235617 1.40274 2.805479 0 5.610959 0 8.416438 1.402739 7.013699 0 14.027397 1.40274 21.041096 1.40274h4.208219c8.416438 0 16.832877 1.40274 25.249315 1.40274H535.846575c141.676712-2.805479 280.547945-29.457534 361.90685-77.150685v136.065753z m-392.767123-342.268493c256.70137 0 395.572603 71.539726 395.572603 108.010959v5.610959c-2.805479 8.416438-9.819178 15.430137-21.041096 23.846575-1.40274 0-1.40274 1.40274-2.80548 1.40274-2.805479 1.40274-5.610959 4.208219-8.416438 5.610959-21.041096 12.624658-53.30411 26.652055-93.983562 37.873972-1.40274 0-2.805479 1.40274-4.208219 1.40274-7.013699 1.40274-14.027397 4.208219-21.041096 5.610959-4.208219 1.40274-9.819178 2.805479-15.430137 2.80548-2.805479 1.40274-7.013699 1.40274-9.819178 2.805479-8.416438 1.40274-15.430137 2.805479-23.846575 4.208219-1.40274 0-2.805479 0-4.208219 1.40274-9.819178 1.40274-19.638356 2.805479-30.860274 4.208219h-2.80548l-33.665753 4.208219h-2.80548c-11.221918 1.40274-22.443836 1.40274-35.068493 2.80548H589.150685c-12.624658 1.40274-23.846575 1.40274-36.471233 1.402739H509.194521h-1.40274c-216.021918 0-349.282192-50.49863-385.753425-88.372602-7.013699-7.013699-9.819178-14.027397-9.819178-19.638356 0-33.665753 138.871233-105.205479 395.572603-105.20548z m392.767123 781.326028c-26.652055 21.041096-129.052055 84.164384-388.558904 84.164383-260.909589 0-371.726027-63.123288-402.586301-85.567123v-134.663014s1.40274 0 1.402739 1.40274c1.40274 1.40274 4.208219 2.805479 7.013699 4.208219 1.40274 0 2.805479 1.40274 4.208219 1.40274 2.805479 1.40274 7.013699 2.805479 11.221918 4.208219 1.40274 0 1.40274 1.40274 2.805479 1.40274 4.208219 1.40274 9.819178 4.208219 14.027398 5.610959 1.40274 0 2.805479 1.40274 4.208219 1.402739 4.208219 1.40274 7.013699 2.805479 11.221918 4.208219 1.40274 1.40274 4.208219 1.40274 5.610959 1.40274 4.208219 1.40274 7.013699 2.805479 11.221917 4.208219 2.805479 1.40274 4.208219 1.40274 7.013699 2.80548l12.624658 4.208219c1.40274 0 4.208219 1.40274 5.610958 1.40274 7.013699 1.40274 12.624658 4.208219 21.041096 5.610959h2.80548c5.610959 1.40274 12.624658 2.805479 19.638356 4.208219 2.805479 0 5.610959 1.40274 7.013699 1.402739 5.610959 1.40274 9.819178 2.805479 15.430137 2.80548 2.805479 0 5.610959 1.40274 8.416438 1.40274 5.610959 1.40274 11.221918 1.40274 16.832877 2.805479 2.805479 0 5.610959 1.40274 8.416438 1.40274 7.013699 1.40274 14.027397 1.40274 21.041096 2.805479 2.805479 0 4.208219 0 7.013699 1.40274 9.819178 1.40274 18.235616 2.805479 28.054794 2.805479 2.805479 0 5.610959 0 8.416438 1.40274 7.013699 1.40274 15.430137 1.40274 22.443836 1.40274 4.208219 0 7.013699 0 11.221918 1.40274 7.013699 0 14.027397 1.40274 21.041096 1.402739h12.624657c7.013699 0 15.430137 0 23.846576 1.40274h93.983561c8.416438 0 15.430137 0 22.443836-1.40274h11.221918c7.013699 0 14.027397-1.40274 21.041096-1.402739 4.208219 0 7.013699 0 11.221917-1.40274 7.013699 0 14.027397-1.40274 21.041096-1.40274 2.805479 0 5.610959 0 8.416439-1.40274 9.819178-1.40274 18.235616-1.40274 28.054794-2.805479h2.80548c8.416438-1.40274 16.832877-2.805479 23.846575-2.805479 2.805479 0 5.610959-1.40274 8.416438-1.40274 5.610959-1.40274 11.221918-1.40274 16.832877-2.80548 2.805479 0 5.610959-1.40274 8.416438-1.402739 5.610959-1.40274 9.819178-1.40274 15.430137-2.80548 2.805479 0 5.610959-1.40274 8.416439-1.40274 5.610959-1.40274 9.819178-2.805479 15.430137-2.805479 1.40274 0 4.208219-1.40274 5.610959-1.40274 7.013699-1.40274 12.624658-2.805479 19.638356-5.610959 1.40274 0 1.40274 0 2.805479-1.402739 5.610959-1.40274 11.221918-2.805479 15.430137-4.208219 1.40274 0 4.208219-1.40274 5.610959-1.40274 4.208219-1.40274 7.013699-2.805479 11.221918-4.208219 1.40274 0 4.208219-1.40274 5.610959-2.80548 2.805479-1.40274 7.013699-2.805479 9.819178-4.208219 1.40274 0 2.805479-1.40274 5.610959-1.40274 4.208219-1.40274 7.013699-2.805479 9.819178-4.208219 1.40274 0 2.805479-1.40274 4.208219-1.40274 4.208219-1.40274 8.416438-4.208219 12.624658-5.610959 0 0 1.40274 0 1.402739-1.402739 4.208219-1.40274 7.013699-2.805479 9.819178-5.610959h1.40274v134.663014z" fill="#464646" p-id="4586"></path></svg> | ||
| @@ -0,0 +1,17 @@ | |||
| 1 | + | ||
| 2 | +<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 388.12 264.29" width="388.12" height="264.29" preserveAspectRatio="xMinYMin meet"> | ||
| 3 | + <g display="inline" transform="matrix(1.8189257,0,0,1.8237746,-82.14211,-64.843651)"> | ||
| 4 | + <g transform="matrix(1.2699241,0,0,-1.2699241,3.3662307,208.12494)"> | ||
| 5 | + <g transform="scale(0.1,0.1)"> | ||
| 6 | + <path fill-rule="nonzero" fill="#00758F" d="m733.07,319.32-64.832,0c-2.28,109.43-8.6,212.33-18.93,308.72h-0.57104l-98.711-308.72h-49.363l-98.113,308.72h-0.578c-7.28-92.57-11.86-195.47-13.77-308.72h-59.113c3.82,137.73,13.38,266.84,28.68,387.36h80.356l93.535-284.62h0.57397l94.109,284.62h76.887c16.836-141.15,26.778-270.3,29.832-387.36"/> | ||
| 7 | + <path fill-rule="nonzero" fill="#00758F" d="m1014.3,605.11c-26.401-143.25-61.225-247.35-104.45-312.29-33.679-50.039-70.574-75.058-110.75-75.058-10.71,0-23.917,3.226-39.589,9.636v34.532c7.656-1.121,16.64-1.719,26.972-1.719,18.743,0,33.848,5.18,45.34,15.519,13.762,12.598,20.649,26.758,20.649,42.45,0,10.718-5.372,32.711-16.067,65.98l-71.152,220.95h63.691l51.067-165.25c11.472-37.519,16.257-63.711,14.343-78.64,27.93,74.601,47.442,155.9,58.543,243.89h61.401"/> | ||
| 8 | + <path fill-rule="nonzero" fill="#F29111" d="m1298.3,426.69c0-32.851-12.07-59.82-36.13-80.921-24.08-21.008-56.43-31.54-96.94-31.54-37.89,0-74.61,12.122-110.18,36.168l16.64,33.274c30.61-15.301,58.31-22.942,83.18-22.942,23.33,0,41.59,5.192,54.8,15.45,13.18,10.332,21.08,24.742,21.08,43.019,0,23-16.04,42.66-45.47,59.153-27.17,14.91-81.47,46.039-81.47,46.039-29.42,21.461-44.17,44.488-44.17,82.429,0,31.379,11,56.742,32.97,76.039,22.02,19.336,50.43,29.004,85.22,29.004,35.96,0,68.66-9.597,98.11-28.722l-14.96-33.243c-25.2,10.684-50.05,16.047-74.55,16.047-19.88,0-35.2-4.773-45.88-14.375-10.74-9.519-17.38-21.769-17.38-36.699,0-22.941,16.39-42.84,46.65-59.652,27.51-14.918,83.14-46.649,83.14-46.649,30.26-21.422,45.34-44.261,45.34-81.879"/> | ||
| 9 | + <path fill-rule="evenodd" fill="#F29111" d="m1414.2,396.81c-15.69,25.25-23.55,65.769-23.55,121.64,0,97.539,29.66,146.34,88.95,146.34,31,0,53.75-11.672,68.3-34.992,15.67-25.262,23.53-65.43,23.53-120.52,0-98.32-29.66-147.5-88.95-147.5-30.99,0-53.75,11.66-68.28,35.028m230.68-86.829-71.2,35.11c6.3401,5.199,12.36,10.808,17.81,17.301,30.23,35.539,45.36,88.14,45.36,157.78,0,128.15-50.31,192.26-150.92,192.26-49.35,0-87.81-16.25-115.35-48.797-30.24-35.582-45.34-87.985-45.34-157.23,0-68.089,13.38-118.04,40.16-149.77,24.4-28.68,61.3-43.04,110.7-43.04,18.43,0,35.34,2.269,50.71,6.808l92.72-53.957,25.28,43.539"/> | ||
| 10 | + <path fill-rule="nonzero" fill="#F29111" d="m1877.3,319.32-184.19,0,0,387.36,61.98,0,0-339.71,122.21,0,0-47.649"/> | ||
| 11 | + <path fill-rule="nonzero" fill="#F29111" d="m1921.5,319.36,10.27,0,0,39.411,13.44,0,0,8.05-37.67,0,0-8.05,13.96,0,0-39.411zm78.15,0,9.6801,0,0,47.461-14.56,0-11.85-32.351-12.9,32.351-14.03,0,0-47.461,9.1599,0,0,36.121,0.5201,0,13.51-36.121,6.9799,0,13.49,36.121,0-36.121"/> | ||
| 12 | + <path fill-rule="evenodd" fill="#00758F" d="m1955.1,836.43c-37.46,0.93695-66.47-2.801-90.8-13.106-7.02-2.805-18.24-2.805-19.2-11.699,3.77-3.738,4.2201-9.817,7.52-14.988,5.6-9.36,15.41-21.977,24.32-28.547,9.8299-7.492,19.66-14.953,29.97-21.504,18.24-11.281,38.84-17.805,56.6-29.043,10.33-6.543,20.59-14.961,30.92-22,5.13-3.742,8.38-9.836,14.96-12.152v1.417c-3.3001,4.2-4.22,10.286-7.48,14.993-4.67,4.644-9.36,8.883-14.05,13.543-13.58,18.25-30.45,34.148-48.66,47.254-14.99,10.324-47.77,24.367-53.83,41.632,0,0-0.49,0.49597-0.95,0.95697,10.3,0.95001,22.49,4.7,32.31,7.539,15.89,4.2,30.4,3.25,46.78,7.45,7.5,1.886,14.99,4.242,22.51,6.543v4.242c-8.47,8.4059-14.53,19.656-23.42,27.605-23.85,20.586-50.09,40.696-77.23,57.571-14.53,9.363-33.25,15.418-48.7,23.394-5.5899,2.813-14.94,4.199-18.23,8.906-8.4301,10.293-13.13,23.848-19.2,36.036-13.56,25.713-26.69,54.253-38.37,81.443-8.4199,18.24-13.57,36.48-23.87,53.34-48.23,79.58-100.63,127.76-181.13,175.04-17.32,9.84-37.91,14.05-59.89,19.2-11.72,0.49-23.41,1.4-35.11,1.86-7.5,3.29-15,12.19-21.54,16.4-26.69,16.84-95.46,53.34-115.13,5.14-12.64-30.44,18.72-60.38,29.49-75.83,7.9499-10.75,18.26-22.94,23.85-35.09,3.2801-7.96,4.22-16.4,7.51-24.81,7.48-20.59,14.49-43.53,24.34-62.73,5.13-9.8299,10.74-20.14,17.29-28.99,3.7799-5.1799,10.31-7.49,11.72-15.94-6.53-9.35-7.04-23.39-10.78-35.1-16.84-52.89-10.3-118.41,13.58-157.25,7.47-11.699,25.28-37.449,49.15-27.597,21.06,8.4098,16.38,35.089,22.46,58.476,1.3999,5.6562,0.4599,9.3668,3.26,13.106v-0.94592c6.5499-13.086,13.12-25.691,19.2-38.84,14.53-22.91,39.78-46.785,60.86-62.683,11.2-8.457,20.1-22.942,34.14-28.106v1.414h-0.92c-2.82,4.1998-7.0199,6.086-10.77,9.3478-8.4201,8.4299-17.76,18.731-24.34,28.086-19.65,26.199-36.99,55.234-52.4,85.184-7.5099,14.543-14.05,30.441-20.14,44.941-2.8001,5.5901-2.8001,14.039-7.4901,16.84-7.0399-10.285-17.31-19.191-22.45-31.789-8.9-20.149-9.8299-44.949-13.13-70.703-1.86-0.48895-0.92,0-1.86-0.92999-14.96,3.7419-20.11,19.184-25.74,32.246-14.04,33.274-16.4,86.627-4.2099,125.01,3.26,9.8101,17.34,40.7,11.7,50.06-2.8299,8.9299-12.18,14.03-17.32,21.08-6.0701,8.89-12.66,20.1-16.83,29.95-11.24,26.2-16.89,55.23-29.02,81.43-5.62,12.19-15.47,24.83-23.4,36.04-8.91,12.64-18.73,21.53-25.76,36.49-2.3201,5.16-5.6001,13.59-1.87,19.19,0.9199,3.75,2.8199,5.1601,6.5699,6.1001,6.0501,5.1499,23.39-1.39,29.46-4.2,17.33-7,31.84-13.59,46.33-23.4,6.5599-4.6899,13.58-13.58,21.99-15.94h9.8499c14.97-3.25,31.83-0.91,45.88-5.14,24.79-7.95,47.25-19.65,67.39-32.29,61.29-38.85,111.84-94.09,145.99-160.07,5.63-10.75,7.99-20.59,13.13-31.8,9.83-22.98,22.01-46.38,31.82-68.823,9.8201-22,19.2-44.446,33.26-62.727,7-9.812,35.09-14.961,47.73-20.113,9.3401-4.199,23.87-7.949,32.3-13.09,15.91-9.812,31.79-21.062,46.79-31.844,7.4699-5.617,30.88-17.304,32.29-26.679"/> | ||
| 13 | + <path fill-rule="evenodd" fill="#00758F" d="m1477.7,1243.2c-7.9399,0-13.54-0.96-19.19-2.3501v-0.9399h0.91c3.7799-7.47,10.34-12.66,14.98-19.2,3.77-7.4902,7.0499-14.95,10.79-22.45,0.4599,0.4599,0.9099,0.9501,0.9099,0.9501,6.5999,4.6599,9.87,12.14,9.87,23.39-2.83,3.3001-3.2701,6.5501-5.63,9.8401-2.8,4.6699-8.89,7.01-12.64,10.76"/> | ||
| 14 | + </g> | ||
| 15 | + </g> | ||
| 16 | + </g> | ||
| 17 | +</svg> | ||
| @@ -0,0 +1,9 @@ | |||
| 1 | +<svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32"> | ||
| 2 | + <title>favicon</title> | ||
| 3 | + <defs> | ||
| 4 | + <image width="32" height="32" id="img1" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAAXNSR0IB2cksfwAAAj1QTFRF////KKbfKKbfKKbfKKbfKKbfKKbfKKbfKKbfKKbfKKbfKKbfKKbfJ6TeJ6TeJ6TeJ6TeJ6TeJ6TeJ6TeJqLcJqLcJqLcJqLcJqLcJqLcJqLcJqLcI5/ZI5/ZI5/ZI5/ZI5/ZI5/ZI5/ZIpzWIpzWIpzWIpzWIpzWIpzWIpzWIpzWIpzWIpzWIpzWIJrTIJrTIJrTIJrTIJrTIJrTIJrTIJrTIJrTIJrTHpfRHpfRHpfRHpfRHpfRHpfRHpfRHpfRHZXOHZXOHZXOHZXOHZXOHZXOHZXOHJLMHJLMHJLMHJLMHJLMHJLMHJLMHJDJHJDJHJDJHJDJHJDJHJDJG47HG47HG47HG47HG47HG4vFG4vFG4vFG4vFG4vFG4nCG4nCG4nCG4nCG4nCG4nCG4nCG4a/G4a/G4a/G4a/G4a/G4a/G4a/GoS9GoS9GoS9GoS9GoS9GoG6GoG6GoG6GoG6GoG6GoG6F3+4F3+4F3+4F3+4F3+4FH22FH22FH22FH22FH22FH22FH22FH22FH22EHqzEHqzEHqzEHqzEHqzEHqzDXexDXexDXexDXexDXexDXexDXexCXWuCXWuCXWuCXWuCXWuCXWuCHOsCHOsCHOsCHOsCHOsCHOsBHGqBHGqBHGqBHGqBHGqBHGqBHGqAG6oAG6oAG6oAG6oAG6oAG6oAG6oAGylAGylAGylAGylAGylAWqjAWqjAWqjAWqjAmihAmihAmihBGafBGafBGafBGafBWSdBWSdBWSdQ0uaBQAAAL90Uk5TACCg/0AQgPBQ4MAwYBCQ//BgQNBg8P+AECCg4EDA/yAQgPCQ/+BQ0KAggPDAMED/8IAQwDAgoFdA/7Ag4GDAcED/8KAQcPdA/7Ag4BBwEPD/gFAfEKD/4FAwQMD/IED/gBBg8JBA//BgEICgQP/AMCAQ0P+gUOAQgP/wcECAILD/0BBg4ED/0OCwIED/sCCA8HBA//CAEKCQ/+BQQMBA0P/AIGDwYPD/gBBAcBCQ//BgMMD/IFDg/xCA//AgoP9OjM/CAAACMklEQVR4nH3T918ScRgH8I+RlrbLbIntPWzXZUMqK60wS1O0NFwoIokLUlDTwAVi7l3OnGmWpqX9bX2fL9yJDd+/8Hmez73ujrvXAR68Vslkq/Ff3j5rZCsdsNZXJlvhAC8/Xsv81rFhva+P9/J6w8ZNZPMWGrZuk6LIf3sA2bGT5V27A1z2+It1oDyIyPeyvG//gSCJPJD3Bw+Rw0f4cJQPx46fOMnDqdPAmWDm7LnzrrPRcOEiC5cuB3NXcFUQhGsh4uUE4foNdwy5yRrhFkIVituh0u0q7txduvewewpFGO4/YMIj3LuHj6Q6Ipyax1BGPiFRSr59KtbKKL6PfAZExzwnsXGeTyYuli9jogFVPFQJL0iCSqxfSot4FRKTXqmRnJJEUtVUq1P5kJJMKRFp6emaDGRq04kmS6vN0vCozUQGS2nQZTP618jRZ3vQ50DHFzoYcvNIvgEFhXluhQUw5POUa4DRaHpDiooBUxFPJqDYnYxGmC0oKS0jb80or7BYKsphfscXpSWwmGG1VVphrbKR6hr6FzXVfKhi60qbFbV2u91RB2e9nTicTgcP9e9RR6kWDY1MUzNaWhs9tLaguYlCA9DWTjo60dXd7tbdhc4Ontromj0fPpLePvQPUBjoR1+va9XjfvaDQ5/I8AhGx8ZGMTLMx6HBpZc3PvGZTE7RMDXJh4nxZV/Gl+mv3LT4+w1/mpn9Lpmd+atm5uZ/uPycn/tXzyws/mIWFzx3vwHc/gmiiX8o3AAAAABJRU5ErkJggg=="/> | ||
| 5 | + </defs> | ||
| 6 | + <style> | ||
| 7 | + </style> | ||
| 8 | + <use id="Background" href="#img1" x="0" y="0"/> | ||
| 9 | +</svg> | ||
| @@ -0,0 +1,47 @@ | |||
| 1 | +* { | ||
| 2 | + box-sizing: border-box; | ||
| 3 | +} | ||
| 4 | + | ||
| 5 | +html, | ||
| 6 | +body { | ||
| 7 | + width: 100%; | ||
| 8 | + height: 100%; | ||
| 9 | + margin: 0; | ||
| 10 | + padding: 0; | ||
| 11 | + font-size: 14px; | ||
| 12 | + background-color: var(--color-bg-1); | ||
| 13 | + -moz-osx-font-smoothing: grayscale; | ||
| 14 | + -webkit-font-smoothing: antialiased; | ||
| 15 | +} | ||
| 16 | + | ||
| 17 | +#app { | ||
| 18 | + background: var(--color-bg-2); | ||
| 19 | +} | ||
| 20 | + | ||
| 21 | +.arco-message-list-top { | ||
| 22 | + left: 0; | ||
| 23 | +} | ||
| 24 | + | ||
| 25 | +.arco-btn-primary[type='button'] { | ||
| 26 | + color: var(--color-bg-2); | ||
| 27 | + | ||
| 28 | + &:hover { | ||
| 29 | + color: var(--color-bg-2); | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | + &.arco-btn-loading { | ||
| 33 | + color: var(--color-bg-2); | ||
| 34 | + } | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +.arco-steps-item-process .arco-steps-icon { | ||
| 38 | + color: var(--color-bg-1); | ||
| 39 | +} | ||
| 40 | + | ||
| 41 | +.arco-checkbox-icon-check { | ||
| 42 | + color: var(--color-bg-1); | ||
| 43 | +} | ||
| 44 | + | ||
| 45 | +.arco-checkbox-icon::after { | ||
| 46 | + background: var(--color-bg-1); | ||
| 47 | +} | ||
| @@ -0,0 +1,8 @@ | |||
| 1 | +import SvgIcon from './svg-icon/index.vue' | ||
| 2 | +import { VAceEditor } from 'vue3-ace-editor' | ||
| 3 | +export default { | ||
| 4 | + install (Vue) { | ||
| 5 | + Vue.component('svg-icon', SvgIcon) | ||
| 6 | + Vue.component('v-ace-editor', VAceEditor) | ||
| 7 | + } | ||
| 8 | +} | ||
| @@ -0,0 +1,15 @@ | |||
| 1 | +<template> | ||
| 2 | + <svg class="arco-icon" aria-hidden="true"> | ||
| 3 | + <use :xlink:href="iconName" /> | ||
| 4 | + </svg> | ||
| 5 | +</template> | ||
| 6 | + | ||
| 7 | +<script setup> | ||
| 8 | +import { computed } from 'vue' | ||
| 9 | + | ||
| 10 | +const props = defineProps({ | ||
| 11 | + iconClass: String | ||
| 12 | +}) | ||
| 13 | + | ||
| 14 | +const iconName = computed(() => `#icon-${props.iconClass}`) | ||
| 15 | +</script> | ||
| @@ -0,0 +1,16 @@ | |||
| 1 | +import { computed } from 'vue' | ||
| 2 | +import { useI18n } from 'vue-i18n' | ||
| 3 | + | ||
| 4 | +export default function useLocale () { | ||
| 5 | + const i18 = useI18n() | ||
| 6 | + const currentLocale = computed(() => { | ||
| 7 | + return i18.locale.value | ||
| 8 | + }) | ||
| 9 | + const changeLocale = (value) => { | ||
| 10 | + i18.locale.value = value | ||
| 11 | + } | ||
| 12 | + return { | ||
| 13 | + currentLocale, | ||
| 14 | + changeLocale | ||
| 15 | + } | ||
| 16 | +} | ||
| @@ -0,0 +1,16 @@ | |||
| 1 | +import { computed, ref } from 'vue' | ||
| 2 | + | ||
| 3 | +const theme = ref('') | ||
| 4 | + | ||
| 5 | +export default function useTheme () { | ||
| 6 | + const currentTheme = computed(() => { | ||
| 7 | + return theme.value | ||
| 8 | + }) | ||
| 9 | + const changeTheme = (value) => { | ||
| 10 | + theme.value = value | ||
| 11 | + } | ||
| 12 | + return { | ||
| 13 | + currentTheme, | ||
| 14 | + changeTheme | ||
| 15 | + } | ||
| 16 | +} | ||
| @@ -0,0 +1,6 @@ | |||
| 1 | + | ||
| 2 | +import en from './locale/en.json' | ||
| 3 | + | ||
| 4 | +export default { | ||
| 5 | + ...en | ||
| 6 | +} | ||
| @@ -0,0 +1,22 @@ | |||
| 1 | +import { createI18n } from 'vue-i18n' | ||
| 2 | +import en from './en-US' | ||
| 3 | +import cn from './zh-CN' | ||
| 4 | + | ||
| 5 | +export const LOCALE_OPTIONS = [ | ||
| 6 | + { label: '简体中文', value: 'zh-CN' }, | ||
| 7 | + { label: 'English', value: 'en-US' } | ||
| 8 | +] | ||
| 9 | +const defaultLocale = localStorage.getItem('locale') || 'zh-CN' | ||
| 10 | + | ||
| 11 | +const i18n = createI18n({ | ||
| 12 | + locale: defaultLocale, | ||
| 13 | + fallbackLocale: 'en-US', | ||
| 14 | + globalInjection: true, | ||
| 15 | + allowComposition: true, | ||
| 16 | + messages: { | ||
| 17 | + 'en-US': en, | ||
| 18 | + 'zh-CN': cn | ||
| 19 | + } | ||
| 20 | +}) | ||
| 21 | + | ||
| 22 | +export default i18n | ||
| @@ -0,0 +1,349 @@ | |||
| 1 | +{ | ||
| 2 | + "list": { | ||
| 3 | + "index": { | ||
| 4 | + "5q08sf2dez80": "Please enter a task name", | ||
| 5 | + "5q08sf2dgxo0": "Select creator", | ||
| 6 | + "5q08sf2dh5g0": "Select status", | ||
| 7 | + "5q08sf2dha80": "Unstart", | ||
| 8 | + "5q08sf2dhek0": "Migrating", | ||
| 9 | + "5q08sf2dhj00": "Completed", | ||
| 10 | + "5q08sf2dhng0": "Execute start", | ||
| 11 | + "5q08sf2dhrk0": "Execute end", | ||
| 12 | + "5q08sf2dhvs0": "Complete start", | ||
| 13 | + "5q08sf2di4w0": "Complete end", | ||
| 14 | + "5q08sf2dikw0": "Search", | ||
| 15 | + "5q08sf2diqs0": "Reset", | ||
| 16 | + "5q08sf2diwc0": "Create migration task", | ||
| 17 | + "5q08sf2dj240": "Refresh", | ||
| 18 | + "5q08sf2dj5g0": "Batch deletion", | ||
| 19 | + "5q08sf2dj8k0": "Task name", | ||
| 20 | + "5q08sf2djbk0": "Creator", | ||
| 21 | + "5q08sf2djew0": "Status", | ||
| 22 | + "5q08sf2djks0": "Progress", | ||
| 23 | + "5q08sf2djoo0": "Execution time", | ||
| 24 | + "5q08sf2djt00": "Task creation time", | ||
| 25 | + "5q08sf2djvk0": "Task completion time", | ||
| 26 | + "5q08sf2djyc0": "Operate", | ||
| 27 | + "5q08sf2dk0o0": "Detail", | ||
| 28 | + "5q08sf2dk3c0": "End migration", | ||
| 29 | + "5q08sf2dk5s0": "Start", | ||
| 30 | + "5q08sf2dk800": "Are you sure to delete this task?", | ||
| 31 | + "5q08sf2dka40": "Delete", | ||
| 32 | + "5q08sf2dkc80": " h", | ||
| 33 | + "5q08sf2dkek0": " min" | ||
| 34 | + } | ||
| 35 | + }, | ||
| 36 | + "components": { | ||
| 37 | + "MacTerminal": { | ||
| 38 | + "5q08wsv861k0": "Execution Machine" | ||
| 39 | + }, | ||
| 40 | + "BigDataList": { | ||
| 41 | + "5q09jzwfo340": "Status", | ||
| 42 | + "5q09jzwfppw0": "Only error data is displayed: ", | ||
| 43 | + "5q09jzwfq5g0": "Verification", | ||
| 44 | + "5q09jzwfqa80": "Error details", | ||
| 45 | + "5q09jzwfqf40": "Table", | ||
| 46 | + "5q09jzwfqiw0": "View", | ||
| 47 | + "5q09jzwfqm80": "Function", | ||
| 48 | + "5q09jzwfqp80": "Trigger", | ||
| 49 | + "5q09jzwfqs40": "Procedure", | ||
| 50 | + "5q09l2jkfp80": "Source: {sourceDb}", | ||
| 51 | + "5q09m4g78no0": "Destination: {targetDb}", | ||
| 52 | + "5q09nizckiw0": "Waiting: ", | ||
| 53 | + "5q09o79wsew0": "Execution: ", | ||
| 54 | + "5q09o79wvtw0": "Completion: ", | ||
| 55 | + "5q09o79ww2g0": "Failure: " | ||
| 56 | + }, | ||
| 57 | + "SubTaskDetail": { | ||
| 58 | + "5q09prnzmfw0": "Log", | ||
| 59 | + "5q09prnzn6c0": "Status: ", | ||
| 60 | + "5q09prnznas0": "Loading", | ||
| 61 | + "5q09prnzne80": "Progress", | ||
| 62 | + "5q09prnzngw0": "Online Migration Process Record", | ||
| 63 | + "5q09prnznk00": "Fold", | ||
| 64 | + "5q09prnznms0": "UnFold", | ||
| 65 | + "5q09prnznpk0": "", | ||
| 66 | + "5q09prnzns40": "/s", | ||
| 67 | + "5q09prnznvg0": "Download log", | ||
| 68 | + "5q09prnznzg0": "Unstart", | ||
| 69 | + "5q09prnzo3s0": "Full migration start", | ||
| 70 | + "5q09prnzo6g0": "Full migration in progress", | ||
| 71 | + "5q09prnzoa00": "Full migration completed", | ||
| 72 | + "5q09prnzodo0": "Full verification start", | ||
| 73 | + "5q09prnzohc0": "Full verification in progress", | ||
| 74 | + "5q09prnzok00": "Full verification completed", | ||
| 75 | + "5q09prnzong0": "Incremental migration start", | ||
| 76 | + "5q09prnzoq80": "Incremental migration in progress", | ||
| 77 | + "5q09prnzotc0": "Incremental migration stopped", | ||
| 78 | + "5q09prnzoxc0": "Reverse migration started", | ||
| 79 | + "5q09prnzp000": "Reverse migration in progress", | ||
| 80 | + "5q09prnzp2k0": "Reverse migration stopped", | ||
| 81 | + "5q09prnzp540": "Migration complete", | ||
| 82 | + "5q09prnzp740": "Migration failed", | ||
| 83 | + "5q09prnzp980": "Waiting for resources", | ||
| 84 | + "5q09prnzpb80": "Start migration", | ||
| 85 | + "5q09prnzpd40": "Stop increment", | ||
| 86 | + "5q09prnzpfk0": "Start reverse", | ||
| 87 | + "5q09prnzphk0": "End migration", | ||
| 88 | + "5q09prnzpkg0": "Data verification sink log", | ||
| 89 | + "5q09prnzpmk0": "Data verification source end log", | ||
| 90 | + "5q09prnzpps0": "Data verification check terminal log", | ||
| 91 | + "5q09prnzprs0": "Full Migration Log", | ||
| 92 | + "5q09prnzpug0": "Incremental Migration Log", | ||
| 93 | + "5q09prnzpxc0": "Incrementally migrate source-side logs", | ||
| 94 | + "5q09prnzq080": "Incrementally migrate sink logs", | ||
| 95 | + "5q09prnzq2o0": "Reverse migration log", | ||
| 96 | + "5q09prnzq680": "Migrate source logs in reverse", | ||
| 97 | + "5q09prnzq880": "Migrate sink logs in reverse", | ||
| 98 | + "5q09prnzqac0": "Execution error log", | ||
| 99 | + "5q09prnzqck0": "Belongs to the task: ", | ||
| 100 | + "5q09prnzqew0": "Creation time: ", | ||
| 101 | + "5q09prnzqgw0": "Source library name: ", | ||
| 102 | + "5q09prnzqk00": "Destination library name: ", | ||
| 103 | + "5q09prnzqlw0": "Execution start time: ", | ||
| 104 | + "5q09prnzqnw0": "It has been executed:", | ||
| 105 | + "5q09prnzqpw0": " h", | ||
| 106 | + "5q09prnzqs00": " min", | ||
| 107 | + "5q09prnzqvk0": "Migration: ", | ||
| 108 | + "5q09prnzqxs0": "Full migration: ", | ||
| 109 | + "5q09prnzqzs0": "Execution time: ", | ||
| 110 | + "5q09prnzr2o0": "Incremental migration: ", | ||
| 111 | + "5q09prnzr4s0": "From source library to destination library: ", | ||
| 112 | + "5q09prnzux40": "Reverse migration: ", | ||
| 113 | + "5q09ruxan0s0": "Subtask Details (ID: {subTaskId}, ", | ||
| 114 | + "5q09t2cud100": "Offline mode", | ||
| 115 | + "5q09t2cudw80": "Online mode", | ||
| 116 | + "5q09tn4uzy40": "Cumulative number of incrementally migrated objects: ", | ||
| 117 | + "5q09urmrt580": "Incremental extraction speed: ", | ||
| 118 | + "5q09urmruc00": "Incremental write speed: ", | ||
| 119 | + "5q09urmruhc0": "Remaining data to be written: ", | ||
| 120 | + "5q09vm8iktw0": "zookeeper+kafka log", | ||
| 121 | + "5q09wjm47ow0": "schema-registry log", | ||
| 122 | + "5q09xhsvcq40": "Total migration objects: {total}, not started: {totalWaitCount}, migrating: {totalRunningCount}, successful: {totalFinishCount}, failed: {totalErrorCount}", | ||
| 123 | + "5q0a1jl7o9s0": "Total migration objects: {total}, not started: {totalWaitCount}, migrating: {totalRunningCount}, successful: {totalFinishCount}, failed: {totalErrorCount}", | ||
| 124 | + "5q0a5opxm3c0": "to" | ||
| 125 | + }, | ||
| 126 | + "AddJdbc": { | ||
| 127 | + "5q0a7i439cg0": "To be detected", | ||
| 128 | + "5q0a7i43aeg0": "Available", | ||
| 129 | + "5q0a7i43ajk0": "Unavailable", | ||
| 130 | + "5q0a7i43amo0": "Cancel", | ||
| 131 | + "5q0a7i43ap40": "Test connectivity", | ||
| 132 | + "5q0a7i43as00": "Confirm", | ||
| 133 | + "5q0a7i43aw00": "Cluster name", | ||
| 134 | + "5q0a7i43bkk0": "Please enter an instance name", | ||
| 135 | + "5q0a7i43boo0": "The cluster name will be generated based on the instance information", | ||
| 136 | + "5q0a7i43br80": "Custom", | ||
| 137 | + "5q0a7i43bto0": "Database type", | ||
| 138 | + "5q0a7i43bwk0": "Please select a database type", | ||
| 139 | + "5q0a7i43bzk0": "Instance", | ||
| 140 | + "5q0a7i43c280": "Please enter a cluster name", | ||
| 141 | + "5q0a7i43c4s0": "Can not be a pure space", | ||
| 142 | + "5q0a7i43f3c0": "Add new data source" | ||
| 143 | + }, | ||
| 144 | + "JdbcInstance": { | ||
| 145 | + "5q0a8km729o0": "Please select or enter IP", | ||
| 146 | + "5q0a8km736s0": "Port", | ||
| 147 | + "5q0a8km73bo0": "Please enter the port", | ||
| 148 | + "5q0a8km73f00": "Username", | ||
| 149 | + "5q0a8km73hs0": "Please enter user name", | ||
| 150 | + "5q0a8km73ko0": "Password", | ||
| 151 | + "5q0a8km73n80": "Please enter password", | ||
| 152 | + "5q0a8km73q00": "Extended Properties", | ||
| 153 | + "5q0a8km73uc0": "Add", | ||
| 154 | + "5q0a8km73xc0": "Delete", | ||
| 155 | + "5q0a8km74cw0": "Connection address", | ||
| 156 | + "5q0a8km74h00": "Extension name", | ||
| 157 | + "5q0a8km74kk0": "Extension value", | ||
| 158 | + "5q0a8km74n80": "Operate", | ||
| 159 | + "5q0a8km74po0": "Please select or enter an IP address", | ||
| 160 | + "5q0a8km74s40": "Please enter the correct IP address", | ||
| 161 | + "5q0a8km74uw0": "Please enter the correct port number", | ||
| 162 | + "5q0a8km74xk0": "Can not be a pure space", | ||
| 163 | + "5q0a8km75000": "Please enter user password", | ||
| 164 | + "5q0a9843uf40": "IP address" | ||
| 165 | + }, | ||
| 166 | + "PortalInstall": { | ||
| 167 | + "5q0aajl75f00": "Migration Suite Installation", | ||
| 168 | + "5q0aajl76580": "Install user", | ||
| 169 | + "5q0aajl76io0": "Install user cannot be empty", | ||
| 170 | + "5q0aajl76ug0": "Please select an installer", | ||
| 171 | + "5q0aajl76xw0": "Install directory", | ||
| 172 | + "5q0aajl776k0": "The installation directory cannot be empty", | ||
| 173 | + "5q0aajl77f40": "Please enter the installation directory", | ||
| 174 | + "5q0aajl77ik0": "Cancel", | ||
| 175 | + "5q0aajl77lg0": "Confirm" | ||
| 176 | + }, | ||
| 177 | + "ParamsConfig": { | ||
| 178 | + "5q0aazspots0": "Default parameter configuration", | ||
| 179 | + "5q0aazsppew0": "Subtask parameter configuration", | ||
| 180 | + "5q0aazsppjc0": "{num} subtasks use this configuration", | ||
| 181 | + "5q0aazsppm00": "Basic parameters", | ||
| 182 | + "5q0aazsppog0": "Parameter name", | ||
| 183 | + "5q0aazsppr80": "Value", | ||
| 184 | + "5q0aazspptw0": "Parameter Description", | ||
| 185 | + "5q0aazsppwg0": "Advanced parameters", | ||
| 186 | + "5q0aazsppz40": "Restore Defaults", | ||
| 187 | + "5q0aazspq200": "Use global configuration", | ||
| 188 | + "5q0aazspq4g0": "Save", | ||
| 189 | + "5q0aazspq7k0": "Source instance name: ", | ||
| 190 | + "5q0aazspqac0": "Destination instance name: ", | ||
| 191 | + "5q0aazspqd00": "Source library name: ", | ||
| 192 | + "5q0aazspqfs0": "Destination library name: " | ||
| 193 | + } | ||
| 194 | + }, | ||
| 195 | + "task": { | ||
| 196 | + "index": { | ||
| 197 | + "5q08xss4gss0": "Create migration task", | ||
| 198 | + "5q08xss4j7o0": "Task name", | ||
| 199 | + "5q08xss4jkc0": "Please enter a task name", | ||
| 200 | + "5q08xss4k9w0": "Select source library and destination library", | ||
| 201 | + "5q08xss4khc0": "Configure migration process parameters", | ||
| 202 | + "5q08xss4kkw0": "Allocate Executor Resources", | ||
| 203 | + "5q08xss4kr40": "Prev", | ||
| 204 | + "5q08xss4kww0": "Next", | ||
| 205 | + "5q08xss4l2w0": "Confirm", | ||
| 206 | + "5q08zucvfwc0": "One subtask is from one source database to one destination database", | ||
| 207 | + "5q090g6io340": "Determine the execution parameters for each migration process", | ||
| 208 | + "5q090g6iouw0": "Choose the right machine to perform the migration process" | ||
| 209 | + } | ||
| 210 | + }, | ||
| 211 | + "step1": { | ||
| 212 | + "index": { | ||
| 213 | + "5q091ixiemk0": "Source", | ||
| 214 | + "5q091ixig500": "Enter name", | ||
| 215 | + "5q091ixigdc0": "Add data source", | ||
| 216 | + "5q091ixiggs0": "Selected source database:", | ||
| 217 | + "5q091ixigjo0": "Destination", | ||
| 218 | + "5q091ixigog0": "Add subtask", | ||
| 219 | + "5q091ixigro0": "Source IP and port", | ||
| 220 | + "5q091ixigug0": "Source library name", | ||
| 221 | + "5q091ixigy80": "Destination IP and port", | ||
| 222 | + "5q091ixih280": "Target library name", | ||
| 223 | + "5q091ixih580": "Migration Mode", | ||
| 224 | + "5q091ixih8g0": "Offline mode: Automatically perform full migration and end automatically after completion to release resources.", | ||
| 225 | + "5q091ixihtg0": "Online mode: Full migration + incremental migration is automatically performed, and the reverse migration is manually started by the user. User operations are required to end the migration and release resources.", | ||
| 226 | + "5q091ixii200": "Select Mode", | ||
| 227 | + "5q091ixii5w0": "Offline mode", | ||
| 228 | + "5q091ixii8o0": "Online mode", | ||
| 229 | + "5q091ixiibk0": "Operate", | ||
| 230 | + "5q091ixiieo0": "Are you sure to delete this task?", | ||
| 231 | + "5q091ixiihc0": "Delete", | ||
| 232 | + "5q091ixiikk0": "Default" | ||
| 233 | + } | ||
| 234 | + }, | ||
| 235 | + "step2": { | ||
| 236 | + "index": { | ||
| 237 | + "5q092waasqk0": "Tip: Each migration process requires parameter configuration, and DataKit has configured default parameters for each migration process (ie, subtask). You can also modify the parameter configuration of a certain migration process (subtask) in the table below to ensure the smooth execution of the migration process.", | ||
| 238 | + "5q092waatio0": "Default parameter configuration (global configuration)", | ||
| 239 | + "5q092waatnk0": "Source IP/port/name", | ||
| 240 | + "5q092waatqo0": "Destination IP/port/name", | ||
| 241 | + "5q092waau3o0": "Migration mode", | ||
| 242 | + "5q092waau8c0": "Offline mode", | ||
| 243 | + "5q092waaubo0": "Online mode", | ||
| 244 | + "5q092waaueg0": "Config type", | ||
| 245 | + "5q092waauhk0": "Default", | ||
| 246 | + "5q092waaukc0": "Personal", | ||
| 247 | + "5q092waaun40": "Search", | ||
| 248 | + "5q092waaw3w0": "Reset", | ||
| 249 | + "5q092waawag0": "Source IP and port", | ||
| 250 | + "5q092waawdo0": "Source library name", | ||
| 251 | + "5q092waawh80": "Destination IP and port", | ||
| 252 | + "5q092waawk00": "Target library name", | ||
| 253 | + "5q092wab7280": "Migration Mode", | ||
| 254 | + "5q092wab7fo0": "Operate", | ||
| 255 | + "5q092wab7k80": "Edit configuration" | ||
| 256 | + } | ||
| 257 | + }, | ||
| 258 | + "step3": { | ||
| 259 | + "index": { | ||
| 260 | + "5q093f8y7g00": "Tip: DataKit tries to execute subtasks in parallel based on the principle of maximizing resource utilization, creates a data migration agent for each subtask (one machine can create multiple migration agents), and waits for resources to execute sequentially when resources are insufficient.", | ||
| 261 | + "5q093f8y8b40": "Machine IP", | ||
| 262 | + "5q093f8y8fs0": "Machine name", | ||
| 263 | + "5q093f8y8j40": "CPU cores", | ||
| 264 | + "5q093f8y8lw0": "Remaining memory", | ||
| 265 | + "5q093f8y8p40": "Remaining hard disk", | ||
| 266 | + "5q093f8y8ss0": "Search", | ||
| 267 | + "5q093f8y8vk0": "Reset", | ||
| 268 | + "5q093f8y8y80": "Migration subtasks: ", | ||
| 269 | + "5q093f8y91s0": "", | ||
| 270 | + "5q093f8y94c0": "Selected machine: ", | ||
| 271 | + "5q093f8y9740": "", | ||
| 272 | + "5q093f8y99s0": "Refresh", | ||
| 273 | + "5q093f8y9ck0": "Physical machine IP", | ||
| 274 | + "5q093f8y9fg0": "Physical machine name + OS", | ||
| 275 | + "5q093f8y9i40": "Configuration information", | ||
| 276 | + "5q093f8y9m80": "System:", | ||
| 277 | + "5q093f8y9p40": "Install the migration suite", | ||
| 278 | + "5q093f8y9rs0": "Start install", | ||
| 279 | + "5q093f8y9us0": "Log", | ||
| 280 | + "5q093f8y9zg0": "Re-install", | ||
| 281 | + "5q093f8ya2c0": "The Number executed", | ||
| 282 | + "5q093f8ya4w0": "Being executed", | ||
| 283 | + "5q093f8yabs0": "Maximum subtasks", | ||
| 284 | + "5q093f8yae80": "Uninstall", | ||
| 285 | + "5q093f8yagw0": "Installing", | ||
| 286 | + "5q093f8yajg0": "Installed", | ||
| 287 | + "5q093f8yals0": "Installation failed", | ||
| 288 | + "5q094h74md80": "User", | ||
| 289 | + "5q094raosqg0": "Directory", | ||
| 290 | + "5q096184bp80": ", CPU architecture: ", | ||
| 291 | + "5q097pi0m540": ", Number of CPU cores: {a}, remaining memory: {b}M, remaining hard disk capacity: {c}G" | ||
| 292 | + } | ||
| 293 | + }, | ||
| 294 | + "detail": { | ||
| 295 | + "index": { | ||
| 296 | + "5q09asiwekc0": "Task status: ", | ||
| 297 | + "5q09asiwffw0": "Stop", | ||
| 298 | + "5q09asiwg0g0": "Total progress", | ||
| 299 | + "5q09asiwg4g0": "Refresh", | ||
| 300 | + "5q09asiwg7s0": "ID", | ||
| 301 | + "5q09asiwgb40": "Source IP and port", | ||
| 302 | + "5q09asiwifk0": "Source db name", | ||
| 303 | + "5q09asiwijw0": "Target IP and port", | ||
| 304 | + "5q09asiwing0": "Target db name", | ||
| 305 | + "5q09asiwiqk0": "Migration Process Pattern", | ||
| 306 | + "5q09asiwiyc0": "Offline mode", | ||
| 307 | + "5q09asiwj1o0": "Online mode", | ||
| 308 | + "5q09asiwj4g0": "Execution machine", | ||
| 309 | + "5q09asiwjvg0": "Status", | ||
| 310 | + "5q09asiwk6k0": "Migration failure details", | ||
| 311 | + "5q09asiwka80": "Operate", | ||
| 312 | + "5q09asiwkds0": "Detail", | ||
| 313 | + "5q09asiwkhg0": "Stop full amount", | ||
| 314 | + "5q09asiwkkw0": "Stop increment", | ||
| 315 | + "5q09asiwkq40": "Start reverse", | ||
| 316 | + "5q09asiwkuk0": "Stop reverse", | ||
| 317 | + "5q09asiwl5g0": "End migration", | ||
| 318 | + "5q09asiwlac0": "Log", | ||
| 319 | + "5q09asiwlcg0": "Unstart", | ||
| 320 | + "5q09asiwlew0": "Migrating", | ||
| 321 | + "5q09asiwltg0": "Completed", | ||
| 322 | + "5q09asiwlwc0": "Full migration start", | ||
| 323 | + "5q09asiwmi00": "Full migration in progress", | ||
| 324 | + "5q09asiwmow0": "Full migration completed", | ||
| 325 | + "5q09asiwmr40": "Full verification start", | ||
| 326 | + "5q09asiwmt80": "Full verification in progress", | ||
| 327 | + "5q09asiwmvg0": "Full verification completed", | ||
| 328 | + "5q09asiwmxg0": "Incremental migration start", | ||
| 329 | + "5q09asiwmzw0": "Incremental migration in progress", | ||
| 330 | + "5q09asiwn200": "Incremental migration stopped", | ||
| 331 | + "5q09asiwn4k0": "Reverse migration start", | ||
| 332 | + "5q09asiwna40": "Reverse migration in progress", | ||
| 333 | + "5q09asiwncc0": "Reverse migration stopped", | ||
| 334 | + "5q09asiwne80": "Migration complete", | ||
| 335 | + "5q09asiwngg0": "Migration failed", | ||
| 336 | + "5q09asiwnik0": "Waiting for resources", | ||
| 337 | + "5q09asiwnks0": "Creator: ", | ||
| 338 | + "5q09asiwnmw0": "Number of subtasks: ", | ||
| 339 | + "5q09asiwnow0": "Allocation execution machine: ", | ||
| 340 | + "5q09asiwnrs0": "Creation time: ", | ||
| 341 | + "5q09asiwnu40": "Number of subtasks (offline mode): ", | ||
| 342 | + "5q09asiwnw00": "Execution time: ", | ||
| 343 | + "5q09asiwny00": "Number of subtasks (online mode): ", | ||
| 344 | + "5q09cuenq100": "Data migration task details ({name})", | ||
| 345 | + "5q09efwo3nc0": "{num} units", | ||
| 346 | + "5q09frs8fh00": "Total: {total}, Not started: {notRunCount}, Running: {runningCount}, Migration completed: {finishCount}, Migration failed: {errorCount}" | ||
| 347 | + } | ||
| 348 | + } | ||
| 349 | +} | ||
| @@ -0,0 +1,349 @@ | |||
| 1 | +{ | ||
| 2 | + "list": { | ||
| 3 | + "index": { | ||
| 4 | + "5q08sf2dez80": "请输入任务名称", | ||
| 5 | + "5q08sf2dgxo0": "请选择创建人", | ||
| 6 | + "5q08sf2dh5g0": "请选择状态", | ||
| 7 | + "5q08sf2dha80": "未启动", | ||
| 8 | + "5q08sf2dhek0": "迁移中", | ||
| 9 | + "5q08sf2dhj00": "已完成", | ||
| 10 | + "5q08sf2dhng0": "执行开始时间", | ||
| 11 | + "5q08sf2dhrk0": "执行结束时间", | ||
| 12 | + "5q08sf2dhvs0": "完成开始时间", | ||
| 13 | + "5q08sf2di4w0": "完成结束时间", | ||
| 14 | + "5q08sf2dikw0": "查询", | ||
| 15 | + "5q08sf2diqs0": "重置", | ||
| 16 | + "5q08sf2diwc0": "创建数据迁移任务", | ||
| 17 | + "5q08sf2dj240": "刷新", | ||
| 18 | + "5q08sf2dj5g0": "批量删除", | ||
| 19 | + "5q08sf2dj8k0": "任务名称", | ||
| 20 | + "5q08sf2djbk0": "创建人", | ||
| 21 | + "5q08sf2djew0": "执行状态", | ||
| 22 | + "5q08sf2djks0": "进度", | ||
| 23 | + "5q08sf2djoo0": "已执行时长", | ||
| 24 | + "5q08sf2djt00": "任务创建时间", | ||
| 25 | + "5q08sf2djvk0": "任务完成时间", | ||
| 26 | + "5q08sf2djyc0": "操作", | ||
| 27 | + "5q08sf2dk0o0": "详情", | ||
| 28 | + "5q08sf2dk3c0": "结束迁移", | ||
| 29 | + "5q08sf2dk5s0": "启动", | ||
| 30 | + "5q08sf2dk800": "你确认删除此任务吗?", | ||
| 31 | + "5q08sf2dka40": "删除", | ||
| 32 | + "5q08sf2dkc80": "小时", | ||
| 33 | + "5q08sf2dkek0": "分钟" | ||
| 34 | + } | ||
| 35 | + }, | ||
| 36 | + "components": { | ||
| 37 | + "MacTerminal": { | ||
| 38 | + "5q08wsv861k0": "执行机器" | ||
| 39 | + }, | ||
| 40 | + "BigDataList": { | ||
| 41 | + "5q09jzwfo340": "迁移状态", | ||
| 42 | + "5q09jzwfppw0": "仅显示错误数据:", | ||
| 43 | + "5q09jzwfq5g0": "迁移校验", | ||
| 44 | + "5q09jzwfqa80": "错误详情", | ||
| 45 | + "5q09jzwfqf40": "表", | ||
| 46 | + "5q09jzwfqiw0": "视图", | ||
| 47 | + "5q09jzwfqm80": "函数", | ||
| 48 | + "5q09jzwfqp80": "触发器", | ||
| 49 | + "5q09jzwfqs40": "存储过程", | ||
| 50 | + "5q09l2jkfp80": "源库:{sourceDb}", | ||
| 51 | + "5q09m4g78no0": "目的库:{targetDb}", | ||
| 52 | + "5q09nizckiw0": "等待数:", | ||
| 53 | + "5q09o79wsew0": "执行数:", | ||
| 54 | + "5q09o79wvtw0": "完成数:", | ||
| 55 | + "5q09o79ww2g0": "失败数:" | ||
| 56 | + }, | ||
| 57 | + "SubTaskDetail": { | ||
| 58 | + "5q09prnzmfw0": "日志", | ||
| 59 | + "5q09prnzn6c0": "状态:", | ||
| 60 | + "5q09prnznas0": "数据加载中", | ||
| 61 | + "5q09prnzne80": "进度", | ||
| 62 | + "5q09prnzngw0": "在线迁移过程记录", | ||
| 63 | + "5q09prnznk00": "收起", | ||
| 64 | + "5q09prnznms0": "查看", | ||
| 65 | + "5q09prnznpk0": "条", | ||
| 66 | + "5q09prnzns40": "条/s", | ||
| 67 | + "5q09prnznvg0": "下载日志", | ||
| 68 | + "5q09prnznzg0": "未启动", | ||
| 69 | + "5q09prnzo3s0": "全量迁移开始", | ||
| 70 | + "5q09prnzo6g0": "全量迁移进行中", | ||
| 71 | + "5q09prnzoa00": "全量迁移完成", | ||
| 72 | + "5q09prnzodo0": "全量校验开始", | ||
| 73 | + "5q09prnzohc0": "全量校验中", | ||
| 74 | + "5q09prnzok00": "全量检验完成", | ||
| 75 | + "5q09prnzong0": "增量迁移开始", | ||
| 76 | + "5q09prnzoq80": "增量迁移进行中", | ||
| 77 | + "5q09prnzotc0": "增量迁移已停止", | ||
| 78 | + "5q09prnzoxc0": "反向迁移开始", | ||
| 79 | + "5q09prnzp000": "反向迁移进行中", | ||
| 80 | + "5q09prnzp2k0": "反向迁移已停止", | ||
| 81 | + "5q09prnzp540": "迁移完成", | ||
| 82 | + "5q09prnzp740": "迁移失败", | ||
| 83 | + "5q09prnzp980": "等待资源中", | ||
| 84 | + "5q09prnzpb80": "启动迁移", | ||
| 85 | + "5q09prnzpd40": "停止增量", | ||
| 86 | + "5q09prnzpfk0": "启动反向", | ||
| 87 | + "5q09prnzphk0": "结束迁移", | ||
| 88 | + "5q09prnzpkg0": "数据校验sink端日志", | ||
| 89 | + "5q09prnzpmk0": "数据校验source端日志", | ||
| 90 | + "5q09prnzpps0": "数据校验check端日志", | ||
| 91 | + "5q09prnzprs0": "全量迁移日志", | ||
| 92 | + "5q09prnzpug0": "增量迁移日志", | ||
| 93 | + "5q09prnzpxc0": "增量迁移source端日志", | ||
| 94 | + "5q09prnzq080": "增量迁移sink端日志", | ||
| 95 | + "5q09prnzq2o0": "反向迁移日志", | ||
| 96 | + "5q09prnzq680": "反向迁移source端日志", | ||
| 97 | + "5q09prnzq880": "反向迁移sink端日志", | ||
| 98 | + "5q09prnzqac0": "执行时错误日志", | ||
| 99 | + "5q09prnzqck0": "属于任务:", | ||
| 100 | + "5q09prnzqew0": "创建时间:", | ||
| 101 | + "5q09prnzqgw0": "源库名:", | ||
| 102 | + "5q09prnzqk00": "目的库名:", | ||
| 103 | + "5q09prnzqlw0": "执行开始时间:", | ||
| 104 | + "5q09prnzqnw0": "已执行:", | ||
| 105 | + "5q09prnzqpw0": "小时", | ||
| 106 | + "5q09prnzqs00": "分钟", | ||
| 107 | + "5q09prnzqvk0": "迁移情况:", | ||
| 108 | + "5q09prnzqxs0": "全量迁移:", | ||
| 109 | + "5q09prnzqzs0": "执行时间:", | ||
| 110 | + "5q09prnzr2o0": "增量迁移:", | ||
| 111 | + "5q09prnzr4s0": "源库至目的库:", | ||
| 112 | + "5q09prnzux40": "反向迁移:", | ||
| 113 | + "5q09ruxan0s0": "子任务详情(ID:{subTaskId},", | ||
| 114 | + "5q09t2cud100": "离线模式", | ||
| 115 | + "5q09t2cudw80": "在线模式", | ||
| 116 | + "5q09tn4uzy40": "累计增量迁移对象数:", | ||
| 117 | + "5q09urmrt580": "增量抽取速度:", | ||
| 118 | + "5q09urmruc00": "增量写入速度:", | ||
| 119 | + "5q09urmruhc0": "剩余待写入数据:", | ||
| 120 | + "5q09vm8iktw0": "zookeeper+kafka日志", | ||
| 121 | + "5q09wjm47ow0": "schema-registry日志", | ||
| 122 | + "5q09xhsvcq40": "总迁移对象数量:{total},未开始:{totalWaitCount},迁移中:{totalRunningCount},成功:{totalFinishCount},失败:{totalErrorCount}", | ||
| 123 | + "5q0a1jl7o9s0": "总迁移对象:{total},未开始:{totalWaitCount},迁移中:{totalRunningCount},成功:{totalFinishCount},失败:{totalErrorCount}", | ||
| 124 | + "5q0a5opxm3c0": "至" | ||
| 125 | + }, | ||
| 126 | + "AddJdbc": { | ||
| 127 | + "5q0a7i439cg0": "待检测", | ||
| 128 | + "5q0a7i43aeg0": "可用", | ||
| 129 | + "5q0a7i43ajk0": "不可用", | ||
| 130 | + "5q0a7i43amo0": "取消", | ||
| 131 | + "5q0a7i43ap40": "测试连通性", | ||
| 132 | + "5q0a7i43as00": "确定", | ||
| 133 | + "5q0a7i43aw00": "集群名称", | ||
| 134 | + "5q0a7i43bkk0": "请输入实例名称", | ||
| 135 | + "5q0a7i43boo0": "集群名称将会根据实例信息生成", | ||
| 136 | + "5q0a7i43br80": "自定义名称", | ||
| 137 | + "5q0a7i43bto0": "数据库类型", | ||
| 138 | + "5q0a7i43bwk0": "请选择数据库类型", | ||
| 139 | + "5q0a7i43bzk0": "实例", | ||
| 140 | + "5q0a7i43c280": "请输入集群名称", | ||
| 141 | + "5q0a7i43c4s0": "不能为纯空格", | ||
| 142 | + "5q0a7i43f3c0": "新增数据源" | ||
| 143 | + }, | ||
| 144 | + "JdbcInstance": { | ||
| 145 | + "5q0a8km729o0": "请选择或输入IP", | ||
| 146 | + "5q0a8km736s0": "端口", | ||
| 147 | + "5q0a8km73bo0": "请输入端口号", | ||
| 148 | + "5q0a8km73f00": "用户名", | ||
| 149 | + "5q0a8km73hs0": "请输入用户名", | ||
| 150 | + "5q0a8km73ko0": "密码", | ||
| 151 | + "5q0a8km73n80": "请输入密码", | ||
| 152 | + "5q0a8km73q00": "连接扩展属性", | ||
| 153 | + "5q0a8km73uc0": "新增", | ||
| 154 | + "5q0a8km73xc0": "删除", | ||
| 155 | + "5q0a8km74cw0": "连接地址", | ||
| 156 | + "5q0a8km74h00": "扩展名", | ||
| 157 | + "5q0a8km74kk0": "扩展值", | ||
| 158 | + "5q0a8km74n80": "操作", | ||
| 159 | + "5q0a8km74po0": "请选择或输入IP地址", | ||
| 160 | + "5q0a8km74s40": "请输入正确的IP地址", | ||
| 161 | + "5q0a8km74uw0": "请输入正确的端口号", | ||
| 162 | + "5q0a8km74xk0": "不能为纯空格", | ||
| 163 | + "5q0a8km75000": "请输入用户密码", | ||
| 164 | + "5q0a9843uf40": "IP地址" | ||
| 165 | + }, | ||
| 166 | + "PortalInstall": { | ||
| 167 | + "5q0aajl75f00": "迁移套件安装", | ||
| 168 | + "5q0aajl76580": "安装用户", | ||
| 169 | + "5q0aajl76io0": "安装用户不能为空", | ||
| 170 | + "5q0aajl76ug0": "请选择安装用户", | ||
| 171 | + "5q0aajl76xw0": "安装目录", | ||
| 172 | + "5q0aajl776k0": "安装目录不能为空", | ||
| 173 | + "5q0aajl77f40": "请输入安装目录", | ||
| 174 | + "5q0aajl77ik0": "取消", | ||
| 175 | + "5q0aajl77lg0": "确定" | ||
| 176 | + }, | ||
| 177 | + "ParamsConfig": { | ||
| 178 | + "5q0aazspots0": "默认参数配置(全局配置)", | ||
| 179 | + "5q0aazsppew0": "子任务参数配置", | ||
| 180 | + "5q0aazsppjc0": "{num}个子任务使用了此配置", | ||
| 181 | + "5q0aazsppm00": "基础参数", | ||
| 182 | + "5q0aazsppog0": "参数名称", | ||
| 183 | + "5q0aazsppr80": "值", | ||
| 184 | + "5q0aazspptw0": "参数说明", | ||
| 185 | + "5q0aazsppwg0": "高级参数", | ||
| 186 | + "5q0aazsppz40": "恢复默认值", | ||
| 187 | + "5q0aazspq200": "使用全局配置", | ||
| 188 | + "5q0aazspq4g0": "保存", | ||
| 189 | + "5q0aazspq7k0": "源实例名:", | ||
| 190 | + "5q0aazspqac0": "目的实例名:", | ||
| 191 | + "5q0aazspqd00": "源库名:", | ||
| 192 | + "5q0aazspqfs0": "目的库名:" | ||
| 193 | + } | ||
| 194 | + }, | ||
| 195 | + "task": { | ||
| 196 | + "index": { | ||
| 197 | + "5q08xss4gss0": "创建数据迁移任务", | ||
| 198 | + "5q08xss4j7o0": "任务名称", | ||
| 199 | + "5q08xss4jkc0": "请输入任务名称", | ||
| 200 | + "5q08xss4k9w0": "选择迁移源库和目的库", | ||
| 201 | + "5q08xss4khc0": "配置迁移过程参数", | ||
| 202 | + "5q08xss4kkw0": "分配执行机资源", | ||
| 203 | + "5q08xss4kr40": "上一步", | ||
| 204 | + "5q08xss4kww0": "下一步", | ||
| 205 | + "5q08xss4l2w0": "完成", | ||
| 206 | + "5q08zucvfwc0": "1个子任务是1个源库到1个目的库的迁移过程", | ||
| 207 | + "5q090g6io340": "确定每一个迁移过程的执行参数", | ||
| 208 | + "5q090g6iouw0": "选择合适的机器执行迁移过程" | ||
| 209 | + } | ||
| 210 | + }, | ||
| 211 | + "step1": { | ||
| 212 | + "index": { | ||
| 213 | + "5q091ixiemk0": "源端", | ||
| 214 | + "5q091ixig500": "输入名称搜索", | ||
| 215 | + "5q091ixigdc0": "新增数据源", | ||
| 216 | + "5q091ixiggs0": "已选源端数据库:", | ||
| 217 | + "5q091ixigjo0": "目的端", | ||
| 218 | + "5q091ixigog0": "添加子任务", | ||
| 219 | + "5q091ixigro0": "源IP和端口", | ||
| 220 | + "5q091ixigug0": "源库名", | ||
| 221 | + "5q091ixigy80": "目的IP和端口", | ||
| 222 | + "5q091ixih280": "目的库名", | ||
| 223 | + "5q091ixih580": "迁移过程模式", | ||
| 224 | + "5q091ixih8g0": "离线模式:自动执行全量迁移,完成后自动结束,释放资源。", | ||
| 225 | + "5q091ixihtg0": "在线模式:自动执行全量迁移+增量迁移,用户手动启动反向迁移,需要用户操作结束迁移,释放资源。", | ||
| 226 | + "5q091ixii200": "请选择", | ||
| 227 | + "5q091ixii5w0": "离线模式", | ||
| 228 | + "5q091ixii8o0": "在线模式", | ||
| 229 | + "5q091ixiibk0": "操作", | ||
| 230 | + "5q091ixiieo0": "你确认删除此任务吗?", | ||
| 231 | + "5q091ixiihc0": "删除", | ||
| 232 | + "5q091ixiikk0": "默认" | ||
| 233 | + } | ||
| 234 | + }, | ||
| 235 | + "step2": { | ||
| 236 | + "index": { | ||
| 237 | + "5q092waasqk0": "提示:每个迁移过程都需要有参数配置,DataKit已经为每一个迁移过程(即子任务)配置了默认参数。您也可以在下表中修改某个迁移过程(即子任务)的参数配置,来确保迁移过程顺利执行。", | ||
| 238 | + "5q092waatio0": "默认参数配置(全局配置)", | ||
| 239 | + "5q092waatnk0": "请输入源IP/端口/库名", | ||
| 240 | + "5q092waatqo0": "请输入目的IP/端口/库名", | ||
| 241 | + "5q092waau3o0": "请选择迁移模式", | ||
| 242 | + "5q092waau8c0": "离线模式", | ||
| 243 | + "5q092waaubo0": "在线模式", | ||
| 244 | + "5q092waaueg0": "请选择配置类型", | ||
| 245 | + "5q092waauhk0": "默认配置", | ||
| 246 | + "5q092waaukc0": "个性化配置", | ||
| 247 | + "5q092waaun40": "查询", | ||
| 248 | + "5q092waaw3w0": "重置", | ||
| 249 | + "5q092waawag0": "源IP和端口", | ||
| 250 | + "5q092waawdo0": "源库名", | ||
| 251 | + "5q092waawh80": "目的IP和端口", | ||
| 252 | + "5q092waawk00": "目的库名", | ||
| 253 | + "5q092wab7280": "迁移过程模式", | ||
| 254 | + "5q092wab7fo0": "操作", | ||
| 255 | + "5q092wab7k80": "编辑配置参数" | ||
| 256 | + } | ||
| 257 | + }, | ||
| 258 | + "step3": { | ||
| 259 | + "index": { | ||
| 260 | + "5q093f8y7g00": "提示:DataKit本着资源利用最大化原则尽量让子任务并行执行,为每个子任务创建一个数据迁移代理(一台机器可以创建多个迁移代理),在资源不足时则等待资源顺序执行。", | ||
| 261 | + "5q093f8y8b40": "请输入物理机IP", | ||
| 262 | + "5q093f8y8fs0": "请输入物理机名称", | ||
| 263 | + "5q093f8y8j40": "请输入CPU核数", | ||
| 264 | + "5q093f8y8lw0": "剩余内存大于多少M", | ||
| 265 | + "5q093f8y8p40": "剩余硬盘大于多少G", | ||
| 266 | + "5q093f8y8ss0": "查询", | ||
| 267 | + "5q093f8y8vk0": "重置", | ||
| 268 | + "5q093f8y8y80": "迁移子任务:", | ||
| 269 | + "5q093f8y91s0": "个", | ||
| 270 | + "5q093f8y94c0": "已选择机器:", | ||
| 271 | + "5q093f8y9740": "台", | ||
| 272 | + "5q093f8y99s0": "刷新", | ||
| 273 | + "5q093f8y9ck0": "物理机IP", | ||
| 274 | + "5q093f8y9fg0": "物理机名称+OS", | ||
| 275 | + "5q093f8y9i40": "配置信息", | ||
| 276 | + "5q093f8y9m80": "系统:", | ||
| 277 | + "5q093f8y9p40": "是否安装迁移套件", | ||
| 278 | + "5q093f8y9rs0": "开始安装", | ||
| 279 | + "5q093f8y9us0": "日志", | ||
| 280 | + "5q093f8y9zg0": "重新安装", | ||
| 281 | + "5q093f8ya2c0": "正在执行子任务数", | ||
| 282 | + "5q093f8ya4w0": "正在执行的子任务", | ||
| 283 | + "5q093f8yabs0": "最大子任务数", | ||
| 284 | + "5q093f8yae80": "未安装", | ||
| 285 | + "5q093f8yagw0": "安装中", | ||
| 286 | + "5q093f8yajg0": "已安装", | ||
| 287 | + "5q093f8yals0": "安装失败", | ||
| 288 | + "5q094h74md80": "安装用户", | ||
| 289 | + "5q094raosqg0": "安装目录", | ||
| 290 | + "5q096184bp80": ",CPU架构:", | ||
| 291 | + "5q097pi0m540": ",CPU核数:{a},剩余内存:{b}M,剩余硬盘容量:{c}G" | ||
| 292 | + } | ||
| 293 | + }, | ||
| 294 | + "detail": { | ||
| 295 | + "index": { | ||
| 296 | + "5q09asiwekc0": "任务状态:", | ||
| 297 | + "5q09asiwffw0": "停止", | ||
| 298 | + "5q09asiwg0g0": "总进度", | ||
| 299 | + "5q09asiwg4g0": "刷新", | ||
| 300 | + "5q09asiwg7s0": "子任务ID", | ||
| 301 | + "5q09asiwgb40": "源IP和端口", | ||
| 302 | + "5q09asiwifk0": "源库名", | ||
| 303 | + "5q09asiwijw0": "目的IP和端口", | ||
| 304 | + "5q09asiwing0": "目的库名", | ||
| 305 | + "5q09asiwiqk0": "迁移过程模式", | ||
| 306 | + "5q09asiwiyc0": "离线模式", | ||
| 307 | + "5q09asiwj1o0": "在线模式", | ||
| 308 | + "5q09asiwj4g0": "执行机器", | ||
| 309 | + "5q09asiwjvg0": "当前状态", | ||
| 310 | + "5q09asiwk6k0": "迁移失败详情", | ||
| 311 | + "5q09asiwka80": "操作", | ||
| 312 | + "5q09asiwkds0": "详情", | ||
| 313 | + "5q09asiwkhg0": "停止全量", | ||
| 314 | + "5q09asiwkkw0": "停止增量", | ||
| 315 | + "5q09asiwkq40": "启动反向", | ||
| 316 | + "5q09asiwkuk0": "停止反向", | ||
| 317 | + "5q09asiwl5g0": "结束迁移", | ||
| 318 | + "5q09asiwlac0": "日志", | ||
| 319 | + "5q09asiwlcg0": "未启动", | ||
| 320 | + "5q09asiwlew0": "迁移中", | ||
| 321 | + "5q09asiwltg0": "已完成", | ||
| 322 | + "5q09asiwlwc0": "全量迁移开始", | ||
| 323 | + "5q09asiwmi00": "全量迁移进行中", | ||
| 324 | + "5q09asiwmow0": "全量迁移完成", | ||
| 325 | + "5q09asiwmr40": "全量校验开始", | ||
| 326 | + "5q09asiwmt80": "全量校验中", | ||
| 327 | + "5q09asiwmvg0": "全量检验完成", | ||
| 328 | + "5q09asiwmxg0": "增量迁移开始", | ||
| 329 | + "5q09asiwmzw0": "增量迁移进行中", | ||
| 330 | + "5q09asiwn200": "增量迁移已停止", | ||
| 331 | + "5q09asiwn4k0": "反向迁移开始", | ||
| 332 | + "5q09asiwna40": "反向迁移进行中", | ||
| 333 | + "5q09asiwncc0": "反向迁移已停止", | ||
| 334 | + "5q09asiwne80": "迁移完成", | ||
| 335 | + "5q09asiwngg0": "迁移失败", | ||
| 336 | + "5q09asiwnik0": "等待资源中", | ||
| 337 | + "5q09asiwnks0": "创建人:", | ||
| 338 | + "5q09asiwnmw0": "子任务数量:", | ||
| 339 | + "5q09asiwnow0": "分配执行机器:", | ||
| 340 | + "5q09asiwnrs0": "创建时间:", | ||
| 341 | + "5q09asiwnu40": "子任务数量(离线模式):", | ||
| 342 | + "5q09asiwnw00": "执行时间:", | ||
| 343 | + "5q09asiwny00": "子任务数量(在线模式):", | ||
| 344 | + "5q09cuenq100": "数据迁移任务详情({name})", | ||
| 345 | + "5q09efwo3nc0": "{num}台", | ||
| 346 | + "5q09frs8fh00": "总数:{total},未启动:{notRunCount},执行中:{runningCount},迁移完成:{finishCount},迁移失败:{errorCount}" | ||
| 347 | + } | ||
| 348 | + } | ||
| 349 | +} | ||
| @@ -0,0 +1,6 @@ | |||
| 1 | + | ||
| 2 | +import cn from './locale/zh-cn.json' | ||
| 3 | + | ||
| 4 | +export default { | ||
| 5 | + ...cn | ||
| 6 | +} | ||
| @@ -1,12 +1,23 @@ | |||
| 1 | -import Vue from 'vue' | 1 | +import { createApp } from 'vue' |
| 2 | +import ArcoVue from '@arco-design/web-vue' | ||
| 3 | +import ArcoVueIcon from '@arco-design/web-vue/es/icon' | ||
| 4 | +import globalComponents from '@/components' | ||
| 2 | import App from './App.vue' | 5 | import App from './App.vue' |
| 3 | -import Element from 'element-ui' | 6 | +import router from './router' |
| 4 | -import 'element-ui/lib/theme-chalk/index.css' | 7 | +import '@/api/interceptor' |
| 8 | +import '@/assets/icons' | ||
| 9 | +import i18n from './locale/index' | ||
| 5 | 10 | ||
| 6 | -Vue.config.productionTip = false | 11 | +import '@arco-design/web-vue/dist/arco.less' |
| 12 | +import '@/assets/style/global.less' | ||
| 7 | 13 | ||
| 8 | -Vue.use(Element) | 14 | +const app = createApp(App) |
| 9 | 15 | ||
| 10 | -new Vue({ | 16 | +app.use(ArcoVue, {}) |
| 11 | - render: h => h(App), | 17 | +app.use(ArcoVueIcon) |
| 12 | -}).$mount('#app') | 18 | + |
| 19 | +app.use(router) | ||
| 20 | +app.use(globalComponents) | ||
| 21 | +app.use(i18n) | ||
| 22 | + | ||
| 23 | +app.mount('#app') | ||
| @@ -0,0 +1,13 @@ | |||
| 1 | +import { createRouter, createWebHistory } from 'vue-router' | ||
| 2 | +import routes from './routes' | ||
| 3 | +import { PLUGIN_ID } from '@/utils/const' | ||
| 4 | + | ||
| 5 | +const router = createRouter({ | ||
| 6 | + history: createWebHistory('/static-plugin/' + PLUGIN_ID + '/'), | ||
| 7 | + routes, | ||
| 8 | + scrollBehavior () { | ||
| 9 | + return { top: 0 } | ||
| 10 | + } | ||
| 11 | +}) | ||
| 12 | + | ||
| 13 | +export default router | ||
| @@ -0,0 +1,26 @@ | |||
| 1 | +const routes = [ | ||
| 2 | + { | ||
| 3 | + path: '/', | ||
| 4 | + redirect: '/index' | ||
| 5 | + }, | ||
| 6 | + { | ||
| 7 | + path: '/index', | ||
| 8 | + name: 'HelloWorld', | ||
| 9 | + component: () => import('@/views/HelloWorld.vue'), | ||
| 10 | + meta: { | ||
| 11 | + title: 'Sql执行中心', | ||
| 12 | + keepAlive: false | ||
| 13 | + } | ||
| 14 | + }, | ||
| 15 | + { | ||
| 16 | + path: '/license', | ||
| 17 | + name: 'License', | ||
| 18 | + component: () => import('@/views/License.vue'), | ||
| 19 | + meta: { | ||
| 20 | + title: 'license界面', | ||
| 21 | + keepAlive: false | ||
| 22 | + } | ||
| 23 | + } | ||
| 24 | +] | ||
| 25 | + | ||
| 26 | +export default routes | ||
| @@ -0,0 +1,19 @@ | |||
| 1 | +const TOKEN_KEY = 'opengauss-token' | ||
| 2 | + | ||
| 3 | +const isLogin = () => { | ||
| 4 | + return !!localStorage.getItem(TOKEN_KEY) | ||
| 5 | +} | ||
| 6 | + | ||
| 7 | +const getToken = () => { | ||
| 8 | + return localStorage.getItem(TOKEN_KEY) | ||
| 9 | +} | ||
| 10 | + | ||
| 11 | +const setToken = (token) => { | ||
| 12 | + localStorage.setItem(TOKEN_KEY, token) | ||
| 13 | +} | ||
| 14 | + | ||
| 15 | +const clearToken = () => { | ||
| 16 | + localStorage.removeItem(TOKEN_KEY) | ||
| 17 | +} | ||
| 18 | + | ||
| 19 | +export { isLogin, getToken, setToken, clearToken } | ||
| @@ -0,0 +1,2 @@ | |||
| 1 | +const PLUGIN_ID = 'test-plugin' | ||
| 2 | +export { PLUGIN_ID } | ||
| @@ -0,0 +1,6 @@ | |||
| 1 | +export default { | ||
| 2 | + 401: 'Authentication failed, unable to access system resource', | ||
| 3 | + 403: 'The current operation does not have permission', | ||
| 4 | + 404: 'Access resource does not exist', | ||
| 5 | + default: 'System unknown error, please feedback to administrator' | ||
| 6 | +} | ||
| @@ -0,0 +1,16 @@ | |||
| 1 | +export function mergeObjectArray (arr1, arr2, idProp) { | ||
| 2 | + const arr1Temp = JSON.parse(JSON.stringify(arr1)) | ||
| 3 | + const arr2Temp = JSON.parse(JSON.stringify(arr2)) | ||
| 4 | + const mergedArr = arr1Temp.slice() | ||
| 5 | + | ||
| 6 | + arr2Temp.forEach(obj => { | ||
| 7 | + const index = mergedArr.findIndex(item => item[idProp] === obj[idProp]) | ||
| 8 | + if (index !== -1) { | ||
| 9 | + mergedArr[index] = obj | ||
| 10 | + } else { | ||
| 11 | + mergedArr.push(obj) | ||
| 12 | + } | ||
| 13 | + }) | ||
| 14 | + | ||
| 15 | + return mergedArr | ||
| 16 | +} | ||
| @@ -0,0 +1,15 @@ | |||
| 1 | +import JSEncrypt from 'jsencrypt/bin/jsencrypt.min' | ||
| 2 | +import { getEntryKey } from '@/api/detail' | ||
| 3 | + | ||
| 4 | +// host password encryption | ||
| 5 | +export async function encryptPassword (pwd) { | ||
| 6 | + let publicKey = '' | ||
| 7 | + const getPublicKey = await getEntryKey() | ||
| 8 | + if (Number(getPublicKey.code) === 200 && getPublicKey.key) { | ||
| 9 | + const newKey = getPublicKey.key | ||
| 10 | + publicKey = newKey | ||
| 11 | + } | ||
| 12 | + const encryptor = new JSEncrypt() | ||
| 13 | + encryptor.setPublicKey(publicKey) | ||
| 14 | + return encryptor.encrypt(pwd) | ||
| 15 | +} | ||
| @@ -0,0 +1,125 @@ | |||
| 1 | +class Heart { | ||
| 2 | + heartTimeOut | ||
| 3 | + ServerHeartTimeOut | ||
| 4 | + timeout = 5000 | ||
| 5 | + reset () { | ||
| 6 | + clearTimeout(this.heartTimeOut) | ||
| 7 | + clearTimeout(this.ServerHeartTimeOut) | ||
| 8 | + } | ||
| 9 | + start (cb) { | ||
| 10 | + this.heartTimeOut = setTimeout(() => { | ||
| 11 | + cb() | ||
| 12 | + this.ServerHeartTimeOut = setTimeout(() => { | ||
| 13 | + cb() | ||
| 14 | + this.reset() | ||
| 15 | + this.start(cb) | ||
| 16 | + }, this.timeout) | ||
| 17 | + }, this.timeout) | ||
| 18 | + } | ||
| 19 | +} | ||
| 20 | + | ||
| 21 | +export default class SocketTool extends Heart { | ||
| 22 | + constructor (ops) { | ||
| 23 | + super() | ||
| 24 | + Object.assign(this.options, ops) | ||
| 25 | + this.create() | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + ws | ||
| 29 | + reconnectTimer = 0 | ||
| 30 | + reconnectCount = 10 | ||
| 31 | + options = { | ||
| 32 | + url: null, | ||
| 33 | + heartTime: 5000, | ||
| 34 | + heartMsg: 'ping', | ||
| 35 | + isReconnect: true, | ||
| 36 | + isRestory: false, | ||
| 37 | + reconnectTime: 5000, | ||
| 38 | + reconnectCount: 5, | ||
| 39 | + openCb: (e) => { | ||
| 40 | + console.log('connect success callback::::', e) | ||
| 41 | + }, | ||
| 42 | + closeCb: (e) => { | ||
| 43 | + console.log('close callback::::', e) | ||
| 44 | + }, | ||
| 45 | + messageCb: (e) => { | ||
| 46 | + console.log('message callback::::', e) | ||
| 47 | + }, | ||
| 48 | + errorCb: (e) => { | ||
| 49 | + console.log('error callback::::', e) | ||
| 50 | + } | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + create () { | ||
| 54 | + if (!('WebSocket' in window)) { | ||
| 55 | + throw new Error('The current browser does not support it and cannot be used') | ||
| 56 | + } | ||
| 57 | + if (!this.options.url) { | ||
| 58 | + throw new Error('The address does not exist, and the channel cannot be established') | ||
| 59 | + } | ||
| 60 | + // this.ws = null | ||
| 61 | + console.log('get locaion host: ', window.location.host, window.location.protocol) | ||
| 62 | + let wsUrl | ||
| 63 | + if (process.env.NODE_ENV === 'development') { | ||
| 64 | + // change by yourself | ||
| 65 | + wsUrl = `wss://${process.env.VUE_APP_WS_BASE_URL}/websocket/${this.options.url}` | ||
| 66 | + } else { | ||
| 67 | + const wsPrefix = window.location.protocol.includes('https') ? 'wss' : 'ws' | ||
| 68 | + wsUrl = `${wsPrefix}://${window.location.host}/websocket/${this.options.url}` | ||
| 69 | + } | ||
| 70 | + this.ws = new WebSocket(wsUrl) | ||
| 71 | + this.onopen(this.options.openCb) | ||
| 72 | + this.onclose(this.options.closeCb) | ||
| 73 | + this.onmessage(this.options.messageCb) | ||
| 74 | + } | ||
| 75 | + | ||
| 76 | + onopen (callback) { | ||
| 77 | + this.ws.onopen = event => { | ||
| 78 | + if (typeof callback === 'function') { | ||
| 79 | + callback(event) | ||
| 80 | + } else { | ||
| 81 | + typeof this.options.openCb === 'function' && this.options.openCb(event) | ||
| 82 | + } | ||
| 83 | + } | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + onclose (callback) { | ||
| 87 | + this.ws.onclose = event => { | ||
| 88 | + if (typeof callback === 'function') { | ||
| 89 | + callback(event) | ||
| 90 | + } else { | ||
| 91 | + typeof this.options.closeCb === 'function' && this.options.closeCb(event) | ||
| 92 | + } | ||
| 93 | + } | ||
| 94 | + } | ||
| 95 | + | ||
| 96 | + onerror (callback) { | ||
| 97 | + this.ws.onerror = event => { | ||
| 98 | + if (typeof callback === 'function') { | ||
| 99 | + callback(event) | ||
| 100 | + } else { | ||
| 101 | + typeof this.options.errorCb === 'function' && this.options.errorCb(event) | ||
| 102 | + } | ||
| 103 | + } | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + onmessage (callback) { | ||
| 107 | + this.ws.onmessage = (event) => { | ||
| 108 | + const strMessage = event.data | ||
| 109 | + if (typeof callback === 'function') { | ||
| 110 | + callback(strMessage) | ||
| 111 | + } | ||
| 112 | + } | ||
| 113 | + } | ||
| 114 | + | ||
| 115 | + send (data) { | ||
| 116 | + console.log('doNothing', data) | ||
| 117 | + } | ||
| 118 | + | ||
| 119 | + destroy () { | ||
| 120 | + super.reset() | ||
| 121 | + clearTimeout(this.reconnectTimer) | ||
| 122 | + this.options.isRestory = true | ||
| 123 | + this.ws.close() | ||
| 124 | + } | ||
| 125 | +} | ||
RopenGauss-visualtool-plugin/web-ui/src/components/HelloWorld.vue→openGauss-visualtool-plugin/web-ui/src/views/HelloWorld.vue+23-21
| @@ -1,43 +1,45 @@ | |||
| 1 | <template> | 1 | <template> |
| 2 | <div class="hello"> | 2 | <div class="hello"> |
| 3 | - <h1>{{ msg }}</h1> | 3 | + <div class="title"> |
| 4 | - <p>plugin page demo</p> | 4 | + <img :src="og_img1" class="default_img"/> |
| 5 | - <h3>form plugin platform param</h3> | 5 | + <h2>openGauss DataKit</h2> |
| 6 | - <code>{{ queryData }}</code> | 6 | + </div> |
| 7 | + <h1>{{ queryData }}</h1> | ||
| 7 | </div> | 8 | </div> |
| 8 | </template> | 9 | </template> |
| 9 | 10 | ||
| 10 | <script> | 11 | <script> |
| 11 | export default { | 12 | export default { |
| 12 | name: 'HelloWorld', | 13 | name: 'HelloWorld', |
| 13 | - props: { | ||
| 14 | - msg: String | ||
| 15 | - }, | ||
| 16 | data () { | 14 | data () { |
| 17 | return { | 15 | return { |
| 18 | - queryData: '' | 16 | + queryData: 'Hello, openGauss DataKit plugin.', |
| 17 | + og_img: require('@/assets/icons/svg/opengaussdb.svg'), | ||
| 18 | + og_img1: require('@/assets/logo.png') | ||
| 19 | } | 19 | } |
| 20 | - }, | ||
| 21 | - created () { | ||
| 22 | - // Obtain the parameters of the main program through window.$wujie.props | ||
| 23 | - this.queryData = JSON.stringify(window.$wujie.props) | ||
| 24 | } | 20 | } |
| 25 | } | 21 | } |
| 26 | </script> | 22 | </script> |
| 27 | 23 | ||
| 28 | <!-- Add "scoped" attribute to limit CSS to this component only --> | 24 | <!-- Add "scoped" attribute to limit CSS to this component only --> |
| 29 | <style scoped> | 25 | <style scoped> |
| 30 | -h3 { | 26 | +h1 { |
| 31 | - margin: 40px 0 0; | 27 | + margin: 20px 0 0; |
| 32 | -} | 28 | + color: red; |
| 33 | -ul { | ||
| 34 | - list-style-type: none; | ||
| 35 | - padding: 0; | ||
| 36 | -} | ||
| 37 | -li { | ||
| 38 | display: inline-block; | 29 | display: inline-block; |
| 39 | - margin: 0 10px; | 30 | + align-items: center; |
| 40 | } | 31 | } |
| 32 | + | ||
| 33 | +.title { | ||
| 34 | + display: grid; | ||
| 35 | + grid-template-columns: repeat(2, auto) 1fr; | ||
| 36 | + align-items: center; | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | +.default_img { | ||
| 40 | + background-color: #2d2d3d; | ||
| 41 | +} | ||
| 42 | + | ||
| 41 | a { | 43 | a { |
| 42 | color: #42b983; | 44 | color: #42b983; |
| 43 | } | 45 | } |
| @@ -0,0 +1,148 @@ | |||
| 1 | +<template> | ||
| 2 | + <div class="login"> | ||
| 3 | + <div class="container"> | ||
| 4 | + <div class="main"> | ||
| 5 | + <h3>二维识别码</h3> | ||
| 6 | + <!-- 放置二维码盒子 --> | ||
| 7 | + <canvas ref="canvas"></canvas> | ||
| 8 | + <div class="qrcode_text"> | ||
| 9 | + 识别码: <a :href="url" target="_blank"> {{url}} </a> | ||
| 10 | + </div> | ||
| 11 | + <div> | ||
| 12 | + <template v-if="!is_register"> | ||
| 13 | + <a-input v-model="qrcode_in" class="qrcode_in"></a-input> | ||
| 14 | + <a-button type="primary" @click="checkLicense">注册</a-button> | ||
| 15 | + </template> | ||
| 16 | + <template v-else> | ||
| 17 | + 已注册! <a> {{this.qrcode_out}} </a> | ||
| 18 | + </template> | ||
| 19 | + </div> | ||
| 20 | + </div> | ||
| 21 | + </div> | ||
| 22 | + </div> | ||
| 23 | +</template> | ||
| 24 | + | ||
| 25 | +<script> | ||
| 26 | +import QRCode from 'qrcode' | ||
| 27 | +export default { | ||
| 28 | + name: 'qrLogin', | ||
| 29 | + data () { | ||
| 30 | + return { | ||
| 31 | + // 二维码地址 | ||
| 32 | + url: 'http://opengauss.org', | ||
| 33 | + // 二维码的key | ||
| 34 | + key: '', | ||
| 35 | + qrcode_in: '', | ||
| 36 | + qrcode_out: '', | ||
| 37 | + is_register: false | ||
| 38 | + } | ||
| 39 | + }, | ||
| 40 | + mounted() { | ||
| 41 | + this.makeQrCode() | ||
| 42 | + }, | ||
| 43 | + methods: { | ||
| 44 | + makeQrCode () { | ||
| 45 | + let opts = { | ||
| 46 | + errorCorrectionLevel: 'H', | ||
| 47 | + type: 'image/png', | ||
| 48 | + quality: 0.3, | ||
| 49 | + width: 165, | ||
| 50 | + height: 165, | ||
| 51 | + text: '二维码测试', | ||
| 52 | + color: { | ||
| 53 | + dark: '#333333', | ||
| 54 | + light: '#fff' | ||
| 55 | + } | ||
| 56 | + } | ||
| 57 | + QRCode.toCanvas(this.$refs.canvas, this.url, opts) | ||
| 58 | + }, | ||
| 59 | + checkLicense() { | ||
| 60 | + console.log('qrcode_in is ' + this.qrcode_in) | ||
| 61 | + buildLicense({srcKeyCode: this.url, inputKey: this.qrcode_in}).then( | ||
| 62 | + res => { | ||
| 63 | + this.is_register = true; | ||
| 64 | + this.qrcode_out = res.data.outputKey | ||
| 65 | + } | ||
| 66 | + ).catch( | ||
| 67 | + res => { | ||
| 68 | + | ||
| 69 | + } | ||
| 70 | + ) | ||
| 71 | + this.makeQrCode() | ||
| 72 | + } | ||
| 73 | + } | ||
| 74 | +} | ||
| 75 | +</script> | ||
| 76 | + | ||
| 77 | +<style> | ||
| 78 | +* { | ||
| 79 | + margin: 0 auto; | ||
| 80 | + padding: 0; | ||
| 81 | +} | ||
| 82 | +.login { | ||
| 83 | + width: 100%; | ||
| 84 | + height: 100vh; | ||
| 85 | +} | ||
| 86 | +.container { | ||
| 87 | + width: 100%; | ||
| 88 | + height: 100%; | ||
| 89 | + display: flex; | ||
| 90 | + align-items: left; | ||
| 91 | + justify-content: left; | ||
| 92 | +} | ||
| 93 | +.main { | ||
| 94 | + position: relative; | ||
| 95 | + width: 280px; | ||
| 96 | + height: 250px; | ||
| 97 | + margin: 0 auto; | ||
| 98 | + border-radius: 5px; | ||
| 99 | + background-color: #fff; | ||
| 100 | + box-shadow: 2px 2px 2px #bbb; | ||
| 101 | +} | ||
| 102 | + | ||
| 103 | +.qrcode_in { | ||
| 104 | + width: 70%; | ||
| 105 | + background-color: white; | ||
| 106 | + border: solid; | ||
| 107 | + border-color: red; | ||
| 108 | + border-width: 1px; | ||
| 109 | +} | ||
| 110 | + | ||
| 111 | +h3 { | ||
| 112 | + padding: 10px; | ||
| 113 | + text-align: center; | ||
| 114 | +} | ||
| 115 | +.text_qrcode { | ||
| 116 | + width: 100%; | ||
| 117 | + height: 100vh; | ||
| 118 | +} | ||
| 119 | +canvas { | ||
| 120 | + display: flex; | ||
| 121 | + align-items: center; | ||
| 122 | + justify-content: center; | ||
| 123 | +} | ||
| 124 | +.invalid { | ||
| 125 | + position: absolute; | ||
| 126 | + top: 50%; | ||
| 127 | + left: 50%; | ||
| 128 | + margin-top: -68px; | ||
| 129 | + margin-left: -70px; | ||
| 130 | + width: 143px; | ||
| 131 | + height: 143px; | ||
| 132 | + background: rgba(255, 255, 255, 0.9); | ||
| 133 | + text-align: center; | ||
| 134 | +} | ||
| 135 | +p { | ||
| 136 | + font-size: 14px; | ||
| 137 | + margin-top: 40px; | ||
| 138 | + margin-bottom: 5px; | ||
| 139 | +} | ||
| 140 | +button { | ||
| 141 | + color: #fff; | ||
| 142 | + padding: 3px 10px; | ||
| 143 | + background: #71c771; | ||
| 144 | + border: 1px solid #5baf5b; | ||
| 145 | + border-radius: 5px; | ||
| 146 | + cursor: pointer; | ||
| 147 | +} | ||
| 148 | +</style> | ||
| @@ -1,13 +1,82 @@ | |||
| 1 | const { defineConfig } = require('@vue/cli-service') | 1 | const { defineConfig } = require('@vue/cli-service') |
| 2 | +const path = require('path') | ||
| 3 | +const PLUGIN_ID = 'test-plugin' | ||
| 4 | + | ||
| 5 | +const resolve = dir => path.join(__dirname, './', dir) | ||
| 6 | +const port = process.env.port || process.env.npm_config_port || 80 | ||
| 7 | + | ||
| 2 | module.exports = defineConfig({ | 8 | module.exports = defineConfig({ |
| 3 | - transpileDependencies: true, | 9 | + productionSourceMap: false, |
| 4 | - publicPath: "/static-plugin/test-plugin/", | 10 | + runtimeCompiler: true, |
| 11 | + transpileDependencies: false, | ||
| 12 | + lintOnSave: false, | ||
| 13 | + publicPath: '/static-plugin/' + PLUGIN_ID + "/", | ||
| 14 | + css: { | ||
| 15 | + loaderOptions: { | ||
| 16 | + less: { | ||
| 17 | + lessOptions: { | ||
| 18 | + modifyVars: { | ||
| 19 | + 'primary-6': '#E41D1D', | ||
| 20 | + 'primary-5': '#E94842', | ||
| 21 | + 'primary-7': '#BE1118', | ||
| 22 | + 'primary-4': '#FAC4BC', | ||
| 23 | + 'primary-3': '#F49C92', | ||
| 24 | + 'primary-2': '#F49C92', | ||
| 25 | + 'primary-1': '#FFECE8', | ||
| 26 | + 'warning-6': '#FF7D01', | ||
| 27 | + 'success-6': '#00B429', | ||
| 28 | + 'link-6': '#E41D1D', | ||
| 29 | + 'color-text-1': '#1D212A', | ||
| 30 | + 'color-text-2': '#4E5A6A', | ||
| 31 | + 'color-text-3': '#868F9C', | ||
| 32 | + 'dark-primary-7': '#FCEF92', | ||
| 33 | + 'dark-primary-6': '#FCEF92', | ||
| 34 | + 'dark-primary-5': '#F8EFAE', | ||
| 35 | + 'dark-warning-6': '#FF7D01', | ||
| 36 | + 'dark-success-6': '#00B429', | ||
| 37 | + 'dark-link-6': '#FCEF92' | ||
| 38 | + }, | ||
| 39 | + javascriptEnabled: true | ||
| 40 | + } | ||
| 41 | + } | ||
| 42 | + } | ||
| 43 | + }, | ||
| 44 | + chainWebpack (config) { | ||
| 45 | + config.module.rule('svg').exclude.add(resolve('src/assets/icons')).end() | ||
| 46 | + config.module | ||
| 47 | + .rule('icons') | ||
| 48 | + .test(/\.svg$/) | ||
| 49 | + .include.add(resolve('src/assets/icons')) | ||
| 50 | + .end() | ||
| 51 | + .use('svg-sprite-loader') | ||
| 52 | + .loader('svg-sprite-loader') | ||
| 53 | + .options({ | ||
| 54 | + symbolId: 'icon-[name]' | ||
| 55 | + }) | ||
| 56 | + .end() | ||
| 57 | + }, | ||
| 5 | devServer: { | 58 | devServer: { |
| 6 | headers: { | 59 | headers: { |
| 7 | - "Access-Control-Allow-Origin": "*", | 60 | + 'Access-Control-Allow-Origin': '*', |
| 8 | - "Access-Control-Allow-Headers": "*", | 61 | + 'Access-Control-Allow-Headers': '*', |
| 9 | - "Access-Control-Allow-Methods": "*", | 62 | + 'Access-Control-Allow-Methods': '*' |
| 10 | }, | 63 | }, |
| 11 | - port: "8081", | 64 | + port, |
| 65 | + proxy: { | ||
| 66 | + // detail: https://cli.vuejs.org/config/#devserver-proxy | ||
| 67 | + '/dev-api': { | ||
| 68 | + target: 'http://localhost:9494', | ||
| 69 | + changeOrigin: true, | ||
| 70 | + pathRewrite: { | ||
| 71 | + '^/dev-api': '' | ||
| 72 | + } | ||
| 73 | + } | ||
| 74 | + }, | ||
| 75 | + historyApiFallback: { | ||
| 76 | + rewrites: [ | ||
| 77 | + { from: /\/static-plugin\/test-plugin/, to: '/static-plugin/' + PLUGIN_ID +'/index.html' } | ||
| 78 | + ] | ||
| 79 | + }, | ||
| 80 | + allowedHosts: 'all' | ||
| 12 | } | 81 | } |
| 13 | }) | 82 | }) |
DopenGauss-visualtool-plugin/web-ui/yarn.lock+0-6063