From 93a51c88e5443e70060841642190ec4afcf1e9b6 Mon Sep 17 00:00:00 2001 From: pika <759349196@qq.com> Date: Thu, 11 Jun 2026 11:51:07 +0800 Subject: [PATCH 1/2] fix(config): fix read config bug --- .../init/service/SysInitDefService.java | 47 +++++++++---------- 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/backend/clouddm-boot/boot-initialization/src/main/java/com/clougence/clouddm/init/service/SysInitDefService.java b/backend/clouddm-boot/boot-initialization/src/main/java/com/clougence/clouddm/init/service/SysInitDefService.java index a0d6f143..b0ad9e0e 100644 --- a/backend/clouddm-boot/boot-initialization/src/main/java/com/clougence/clouddm/init/service/SysInitDefService.java +++ b/backend/clouddm-boot/boot-initialization/src/main/java/com/clougence/clouddm/init/service/SysInitDefService.java @@ -25,6 +25,7 @@ import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.Set; import org.springframework.stereotype.Service; @@ -50,12 +51,13 @@ @Service public class SysInitDefService { - private static final String ALONE_CONFIG = "alone.properties"; - private static final String DEFAULT_ALONE_CONFIG = "default_alone.properties"; - private static final String CONSOLE_CONFIG = "console.properties"; - private static final String DEFAULT_CONSOLE_CONFIG = "default_console.properties"; - private static final String INIT_FIELDS_JSON = "config/init-fields.json"; - private List fieldDefsCache; + private static final String ALONE_CONFIG = "alone.properties"; + private static final String DEFAULT_ALONE_CONFIG = "default_alone.properties"; + private static final String CONSOLE_CONFIG = "console.properties"; + private static final String DEFAULT_CONSOLE_CONFIG = "default_console.properties"; + private static final String INIT_FIELDS_JSON = "config/init-fields.json"; + private static final Set INIT_APP_OVERRIDE_CONFIG_KEYS = Set.of("server.port"); + private List fieldDefsCache; @PostConstruct public void init() throws IOException { @@ -129,17 +131,11 @@ private Properties loadDefaultConfigProperties() { Properties props = new Properties(); try { if (isAloneMode()) { - loadClasspathProperties(props, DEFAULT_ALONE_CONFIG); - if (hasExplicitAppHome()) { - loadAppHomeProperties(props, ALONE_CONFIG); - } + loadRuntimeProperties(props, DEFAULT_ALONE_CONFIG, ALONE_CONFIG); } else { - loadClasspathProperties(props, DEFAULT_CONSOLE_CONFIG); - if (hasExplicitAppHome()) { - loadAppHomeProperties(props, CONSOLE_CONFIG); - } + loadRuntimeProperties(props, DEFAULT_CONSOLE_CONFIG, CONSOLE_CONFIG); } - overlaySystemProperties(props); + overlaySystemProperties(props, INIT_APP_OVERRIDE_CONFIG_KEYS); } catch (Exception e) { log.error("[SysInitService] Failed to load default config properties", e); } @@ -169,9 +165,7 @@ private String resolveDefaultHostIp() { private void loadRuntimeProperties(Properties props, String defaultConfigName, String runtimeConfigName) throws IOException { loadClasspathProperties(props, defaultConfigName); - if (hasExplicitAppHome()) { - loadAppHomeProperties(props, runtimeConfigName); - } else { + if (!loadAppHomeProperties(props, runtimeConfigName)) { loadClasspathProperties(props, runtimeConfigName); } } @@ -183,28 +177,29 @@ private void loadClasspathProperties(Properties props, String resourcePath) thro } } - private void loadAppHomeProperties(Properties props, String configName) throws IOException { + private boolean loadAppHomeProperties(Properties props, String configName) throws IOException { Path configPath = Paths.get(GlobalConfUtils.getAppHome(), "conf", configName); if (!Files.exists(configPath)) { - return; + return false; } try (InputStream input = Files.newInputStream(configPath)) { props.load(input); } + return true; } private void overlaySystemProperties(Properties props) { + overlaySystemProperties(props, Set.of()); + } + + private void overlaySystemProperties(Properties props, Set ignoredKeys) { System.getProperties().forEach((key, value) -> { - if (key instanceof String && value != null) { - props.setProperty((String) key, String.valueOf(value)); + if (key instanceof String propertyKey && value != null && !ignoredKeys.contains(propertyKey)) { + props.setProperty(propertyKey, String.valueOf(value)); } }); } - private boolean hasExplicitAppHome() { - return StringUtils.isNotBlank(System.getProperty("app.home")); - } - private boolean isAloneMode() { return "embedded".equals(System.getProperty("app.mode")); } } From 7c27e71709182248249624e963ddbbd635ee945e Mon Sep 17 00:00:00 2001 From: pika <759349196@qq.com> Date: Thu, 11 Jun 2026 17:57:20 +0800 Subject: [PATCH 2/2] Polish initialization and upgrade wizard UI --- .../i18n/init-fields_zh_CN.properties | 4 +- frontend/AGENTS.md | 1 + frontend/src/App.vue | 4 +- frontend/src/locales/en.json | 25 +- frontend/src/locales/zh.json | 29 +- frontend/src/styles/antdv.less | 12 +- frontend/src/styles/app-shell.less | 10 +- frontend/src/styles/cloudCanal.less | 10 +- frontend/src/styles/dm-design-system.less | 6 +- frontend/src/styles/iview.less | 16 + frontend/src/styles/themes/dark-theme.less | 10 +- .../initialization/InitMysqlDriverStatus.vue | 47 +- .../src/views/initialization/StepConfirm.vue | 216 +++++---- .../views/initialization/StepConnectivity.vue | 7 +- frontend/src/views/initialization/StepDb.vue | 181 ++++++-- .../views/initialization/StepExecution.vue | 338 +++++--------- .../src/views/initialization/StepSecurity.vue | 50 +- frontend/src/views/initialization/index.vue | 436 +++++++++++------- 18 files changed, 761 insertions(+), 641 deletions(-) diff --git a/backend/clouddm-boot/boot-initialization/src/main/resources/i18n/init-fields_zh_CN.properties b/backend/clouddm-boot/boot-initialization/src/main/resources/i18n/init-fields_zh_CN.properties index 991ec44c..44e22f31 100644 --- a/backend/clouddm-boot/boot-initialization/src/main/resources/i18n/init-fields_zh_CN.properties +++ b/backend/clouddm-boot/boot-initialization/src/main/resources/i18n/init-fields_zh_CN.properties @@ -1,10 +1,10 @@ -INIT_FIELD_JDBC_URL_LABEL=JDBC URL +INIT_FIELD_JDBC_URL_LABEL=数据库连接串 INIT_FIELD_JDBC_URL_DESC=MySQL 数据库连接地址,格式为 jdbc:mysql://host:port/database INIT_FIELD_DB_USERNAME_LABEL=用户 INIT_FIELD_DB_USERNAME_DESC=连接数据库的用户名 INIT_FIELD_DB_PASSWORD_LABEL=密码 INIT_FIELD_DB_PASSWORD_DESC=连接数据库的密码 -INIT_FIELD_JWT_SECRET_LABEL=JWT Secret +INIT_FIELD_JWT_SECRET_LABEL=登录签名密钥 INIT_FIELD_JWT_SECRET_DESC=JWT 签名密钥,用于生成和验证登录令牌。建议使用足够长度的随机字符串 INIT_FIELD_ADMIN_EMAIL_LABEL=管理员邮箱 INIT_FIELD_ADMIN_EMAIL_DESC=系统初始化后默认管理员的登录邮箱 diff --git a/frontend/AGENTS.md b/frontend/AGENTS.md index 92d77b7e..f9bd45f5 100644 --- a/frontend/AGENTS.md +++ b/frontend/AGENTS.md @@ -86,6 +86,7 @@ cd frontend && npm run check-i18n - 使用 `package-lock.json`,默认使用 `npm`,不要擅自切换到其他包管理器。 - 构建产物输出到 `dist/templates/`,由后端 Gradle `cgdm-web` 模块打包。 - 全量构建前端资源也可通过 `cd package && ./all_build.sh web` 触发。 +- 每次完成前端改造后,必须从仓库根目录运行 `cd package && ./all_build.sh web` 作为最终验证。 ### 本地联调 diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 85aa884c..abfca8be 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -49,6 +49,7 @@ export default { colorBgContainer: '#ffffff', colorBorder: '#dfdfdf', colorText: '#171717', + colorTextLightSolid: '#ffffff', colorTextSecondary: '#707070', controlHeight: 32, controlHeightSM: 28 @@ -64,7 +65,8 @@ export default { }, Button: { primaryShadow: 'none', - defaultShadow: 'none' + defaultShadow: 'none', + primaryColor: '#ffffff' } } }, diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json index 4f51c513..e4ac0a88 100644 --- a/frontend/src/locales/en.json +++ b/frontend/src/locales/en.json @@ -3759,29 +3759,32 @@ "mu-biao-shi-li-id": "Target Instance ID", "initialization.title": "CloudDM System Initialization", "initialization.upgradeTitle": "CloudDM System Upgrade", - "initialization.stage.db": "Database", - "initialization.stage.security": "Security", - "initialization.stage.connectivity": "Connectivity", + "initialization.productInitTitle": "Product Initialization", + "initialization.productUpgradeTitle": "Product Upgrade", + "initialization.stage.db": "Database Config", + "initialization.stage.security": "Login Config", + "initialization.stage.connectivity": "Service Config", "initialization.stage.confirm": "Confirm", - "initialization.stage.execute": "Execute", + "initialization.stage.execute": "Initialize", "initialization.step.db": "Database Configuration", "initialization.step.security": "Security Configuration", "initialization.step.connectivity": "Connectivity Configuration", "initialization.step.confirm": "Confirm", "initialization.testConnection": "Test Connection", - "initialization.applyConfig": "Initialize", + "initialization.applyConfig": "Confirm", "initialization.upgradeAction": "Upgrade", "initialization.prev": "Previous", "initialization.next": "Next", "initialization.dbError": "Database Connection Failed", "initialization.startFailed": "Startup Failed!", "initialization.loading": "Loading...", - "initialization.restarting": "Please wait for the system to restart...", + "initialization.restarting": "Please wait for the system to restart", + "initialization.redirectingHome": "Redirecting to home...", "initialization.installing": "Running initialization tasks...", "initialization.upgrading": "Running upgrade tasks...", "initialization.installFailed": "Initialization failed", "initialization.upgradeFailed": "Upgrade failed", - "initialization.upgradeSuccessRestarting": "Upgrade succeeded. Please wait for the system to restart...", + "initialization.upgradeSuccessRestarting": "Please wait for the system to restart", "initialization.executionScripts": "Script List", "initialization.confirmTabDatabase": "Configuration", "initialization.emptyValue": "(empty)", @@ -3820,6 +3823,8 @@ "initialization.dbRebuildPromptInline": "Clear and rebuild the database?", "initialization.dbRebuildChoiceRequired": "Choose whether to clear and rebuild the existing database", "initialization.dbFormIncomplete": "Complete the database connection information", + "initialization.dbTestRequired": "Test the connection first", + "initialization.dbTestNotPassed": "Make sure the connection test succeeds first", "initialization.securityFormIncomplete": "Complete the security configuration information", "initialization.dbUsernameFallback": "User", "initialization.dbPasswordFallback": "Password", @@ -3834,7 +3839,7 @@ "initialization.generate": "Generate", "initialization.jdbcMode.generated": "Generated Mode", "initialization.jdbcMode.custom": "Custom Mode", - "initialization.jdbcDataSourceType": "Type", + "initialization.jdbcDataSourceType": "Database Type", "initialization.jdbcDataSourceTypeValue": "MySQL", "initialization.mysqlDriverLabel": "Driver", "initialization.mysqlDriverTitle": "MySQL 8.0+ Driver", @@ -3842,11 +3847,12 @@ "initialization.mysqlDriverPreparing": "Downloading driver...", "initialization.mysqlDriverDownloadingButton": "Downloading", "initialization.mysqlDriverReady": "Driver ready", - "initialization.mysqlDriverUnavailable": "Driver is not ready. Download it first.", + "initialization.mysqlDriverUnavailable": "Driver is not ready.", "initialization.mysqlDriverDownload": "Download Driver", "initialization.mysqlDriverRetryCheck": "Retry Check", "initialization.mysqlDriverRetryDownload": "Retry Download", "initialization.mysqlDriverDownloadRequired": "Please download the metadata database driver first.", + "initialization.mysqlDriverNotLoaded": "Driver is not ready.", "initialization.mysqlDriverCheckTimeout": "Checking the driver status timed out. Please retry.", "initialization.jdbcHostLabel": "Host", "initialization.jdbcPortLabel": "Port", @@ -3856,6 +3862,7 @@ "initialization.jdbcDatabase": "Database", "initialization.jdbcDatabasePlaceholder": "For example cdmgr", "initialization.jdbcDatabaseCreate": "Create", + "initialization.jdbcDatabasePendingCreate": " (to create)", "initialization.jdbcDatabaseExists": "Existing", "initialization.jdbcTimezone": "Server Time Zone", "initialization.jdbcTimezonePlaceholder": "For example Asia/Shanghai", diff --git a/frontend/src/locales/zh.json b/frontend/src/locales/zh.json index 38c3c013..19abbab8 100644 --- a/frontend/src/locales/zh.json +++ b/frontend/src/locales/zh.json @@ -3755,29 +3755,32 @@ "mu-biao-shi-li-id": "目标实例ID", "initialization.title": "CloudDM 系统初始化", "initialization.upgradeTitle": "CloudDM 系统升级", - "initialization.stage.db": "数据库", - "initialization.stage.security": "安全性", - "initialization.stage.connectivity": "连接性", + "initialization.productInitTitle": "产品初始化", + "initialization.productUpgradeTitle": "产品升级", + "initialization.stage.db": "数据库配置", + "initialization.stage.security": "登录配置", + "initialization.stage.connectivity": "服务配置", "initialization.stage.confirm": "确认配置", - "initialization.stage.execute": "执行", + "initialization.stage.execute": "初始化", "initialization.step.db": "数据库配置", "initialization.step.security": "安全配置", "initialization.step.connectivity": "连接性配置", "initialization.step.confirm": "确认配置", "initialization.testConnection": "测试连接", - "initialization.applyConfig": "初始化", + "initialization.applyConfig": "确认", "initialization.upgradeAction": "升级", "initialization.prev": "上一步", "initialization.next": "下一步", "initialization.dbError": "数据库连接失败", "initialization.startFailed": "启动失败!", "initialization.loading": "加载中...", - "initialization.restarting": "请勿刷新,等待系统重启...", + "initialization.restarting": "请勿刷新,等待系统重启", + "initialization.redirectingHome": "正在跳转到首页", "initialization.installing": "初始化任务执行中...", "initialization.upgrading": "升级任务执行中...", "initialization.installFailed": "初始化失败", "initialization.upgradeFailed": "升级失败", - "initialization.upgradeSuccessRestarting": "升级成功,请勿刷新,等待系统重启...", + "initialization.upgradeSuccessRestarting": "请勿刷新,等待系统重启", "initialization.executionScripts": "脚本清单", "initialization.confirmTabDatabase": "配置信息", "initialization.emptyValue": "(空)", @@ -3816,6 +3819,8 @@ "initialization.dbRebuildPromptInline": "是否清除并重建数据库?", "initialization.dbRebuildChoiceRequired": "请选择是否清空并重建现有数据库", "initialization.dbFormIncomplete": "请填写完整的数据库连接信息", + "initialization.dbTestRequired": "请先测试连接", + "initialization.dbTestNotPassed": "请先测试连接成功", "initialization.securityFormIncomplete": "请填写完整的安全配置信息", "initialization.dbUsernameFallback": "用户", "initialization.dbPasswordFallback": "密码", @@ -3825,24 +3830,25 @@ "initialization.useExistingDatabaseInit": "使用已有数据库初始化系统表。", "initialization.optionYes": "是", "initialization.optionNo": "否", - "initialization.confirmCreateDatabase": "缺库时自动创建数据库", + "initialization.confirmCreateDatabase": "自动创建数据库", "initialization.confirmRebuildDatabase": "非空库清空并重建", "initialization.generate": "生成", "initialization.jdbcMode.generated": "生成模式", "initialization.jdbcMode.custom": "自定义模式", - "initialization.jdbcDataSourceType": "驱动", + "initialization.jdbcDataSourceType": "数据库类型", "initialization.jdbcDataSourceTypeValue": "MySQL", "initialization.mysqlDriverLabel": "驱动", "initialization.mysqlDriverTitle": "MySQL 8.0+ 驱动", "initialization.mysqlDriverChecking": "检查驱动状态中...", "initialization.mysqlDriverPreparing": "驱动下载中...", "initialization.mysqlDriverDownloadingButton": "下载中", - "initialization.mysqlDriverReady": "驱动已就绪", - "initialization.mysqlDriverUnavailable": "驱动未就绪,请先下载", + "initialization.mysqlDriverReady": "就绪", + "initialization.mysqlDriverUnavailable": "驱动未就绪", "initialization.mysqlDriverDownload": "下载驱动", "initialization.mysqlDriverRetryCheck": "重新检查", "initialization.mysqlDriverRetryDownload": "重试", "initialization.mysqlDriverDownloadRequired": "请先下载元信息数据库驱动", + "initialization.mysqlDriverNotLoaded": "驱动未就绪", "initialization.mysqlDriverCheckTimeout": "检查驱动状态超时,请重试", "initialization.jdbcHostLabel": "主机", "initialization.jdbcPortLabel": "端口", @@ -3852,6 +3858,7 @@ "initialization.jdbcDatabase": "数据库", "initialization.jdbcDatabasePlaceholder": "例如 cdmgr", "initialization.jdbcDatabaseCreate": "新建", + "initialization.jdbcDatabasePendingCreate": "(待创建)", "initialization.jdbcDatabaseExists": "已有", "initialization.jdbcTimezone": "时区", "initialization.jdbcTimezonePlaceholder": "例如 Asia/Shanghai", diff --git a/frontend/src/styles/antdv.less b/frontend/src/styles/antdv.less index c54295c4..c932fcbb 100644 --- a/frontend/src/styles/antdv.less +++ b/frontend/src/styles/antdv.less @@ -75,24 +75,28 @@ .ant-btn-primary { background: var(--primary-color) !important; border-color: var(--primary-color) !important; - color: #171717 !important; + color: #ffffff !important; + + span { + color: #ffffff !important; + } &:hover { background-color: @hover-color !important; border-color: @hover-color !important; - color: #171717 !important; + color: #ffffff !important; } &:active { background-color: @active-color !important; border-color: @active-color !important; - color: #171717 !important; + color: #ffffff !important; } &:focus { background: var(--primary-color) !important; border-color: var(--primary-color) !important; - color: #171717 !important; + color: #ffffff !important; } } diff --git a/frontend/src/styles/app-shell.less b/frontend/src/styles/app-shell.less index d52b5eb0..1314e81e 100644 --- a/frontend/src/styles/app-shell.less +++ b/frontend/src/styles/app-shell.less @@ -907,10 +907,10 @@ .ant-btn-primary:not([disabled]) { background: var(--primary-color) !important; border-color: var(--primary-color) !important; - color: #171717 !important; + color: #ffffff !important; span { - color: #171717 !important; + color: #ffffff !important; } &:hover, @@ -918,7 +918,11 @@ opacity: 0.92; background: var(--primary-color) !important; border-color: var(--primary-color) !important; - color: #171717 !important; + color: #ffffff !important; + + span { + color: #ffffff !important; + } } } diff --git a/frontend/src/styles/cloudCanal.less b/frontend/src/styles/cloudCanal.less index 18691052..386c9bbc 100644 --- a/frontend/src/styles/cloudCanal.less +++ b/frontend/src/styles/cloudCanal.less @@ -102,12 +102,12 @@ a { } .ivu-btn-primary { - color: #171717; + color: #ffffff; background-color: @primary-color; border-color: @primary-color; span { - color: #171717; + color: #ffffff; } } @@ -115,7 +115,11 @@ a { background-color: @hover-color; border-color: @hover-color; background-image: none; - color: #171717; + color: #ffffff; + + span { + color: #ffffff; + } } .ivu-btn-dashed { diff --git a/frontend/src/styles/dm-design-system.less b/frontend/src/styles/dm-design-system.less index 02f3de99..3ff3371f 100644 --- a/frontend/src/styles/dm-design-system.less +++ b/frontend/src/styles/dm-design-system.less @@ -222,10 +222,10 @@ .ant-btn-primary:not(:disabled) { background: var(--primary-color) !important; border-color: var(--primary-color) !important; - color: #171717 !important; + color: #ffffff !important; span { - color: #171717 !important; + color: #ffffff !important; } } @@ -378,7 +378,7 @@ .ivu-btn-primary { background: var(--primary-color) !important; border-color: var(--primary-color) !important; - color: #171717 !important; + color: #ffffff !important; border-radius: @dm-radius-sm; } diff --git a/frontend/src/styles/iview.less b/frontend/src/styles/iview.less index c6c89fd0..dfec65bd 100644 --- a/frontend/src/styles/iview.less +++ b/frontend/src/styles/iview.less @@ -123,15 +123,31 @@ //btn .ivu-btn-primary { + color: #ffffff; background-color: @primary-color; border-color: @primary-color; + + span { + color: #ffffff; + } + &:hover { + color: #ffffff; background-color: @hover-color; border-color: @hover-color; + + span { + color: #ffffff; + } } &:active { + color: #ffffff; background-color: @active-color; border-color: @active-color; + + span { + color: #ffffff; + } } &.ivu-btn-ghost { background-image: linear-gradient(@white, @background-grey); diff --git a/frontend/src/styles/themes/dark-theme.less b/frontend/src/styles/themes/dark-theme.less index 0f066653..485cee73 100644 --- a/frontend/src/styles/themes/dark-theme.less +++ b/frontend/src/styles/themes/dark-theme.less @@ -299,10 +299,10 @@ &-primary { background-color: var(--primary-color) !important; border-color: var(--primary-color) !important; - color: #171717 !important; + color: #ffffff !important; span { - color: #171717 !important; + color: #ffffff !important; } &.ivu-btn-ghost { @@ -316,11 +316,11 @@ &:hover { border-color: var(--primary-color) !important; - color: #171717 !important; + color: #ffffff !important; background-color: var(--primary-color) !important; span { - color: #171717 !important; + color: #ffffff !important; } } } @@ -328,7 +328,7 @@ &:hover { opacity: 0.92; border-color: var(--primary-color) !important; - color: #171717 !important; + color: #ffffff !important; } } diff --git a/frontend/src/views/initialization/InitMysqlDriverStatus.vue b/frontend/src/views/initialization/InitMysqlDriverStatus.vue index bb55bb52..37fcfa5d 100644 --- a/frontend/src/views/initialization/InitMysqlDriverStatus.vue +++ b/frontend/src/views/initialization/InitMysqlDriverStatus.vue @@ -8,9 +8,11 @@ - {{ $t('initialization.jdbcDataSourceTypeValue') }} - ({{ driverInlineMessage }}) - + + + + + {{ actionLabel }} @@ -176,6 +178,9 @@ export default { if (this.driverUiState === 'error') { return message || this.$t('initialization.mysqlDriverUnavailable'); } + if (this.driverUiState === 'ready') { + return this.$t('initialization.mysqlDriverReady'); + } return ''; } }, @@ -404,20 +409,22 @@ export default { display: inline-flex; align-items: center; flex-wrap: wrap; - gap: 6px; - min-height: 32px; - line-height: 32px; + gap: 5px; + width: 100%; + box-sizing: border-box; + min-height: 28px; + line-height: 28px; color: rgba(0, 0, 0, 0.85); vertical-align: middle; } .init-mysql-driver-icon { - flex: 0 0 28px; + flex: 0 0 24px; display: inline-flex; align-items: center; justify-content: center; - width: 28px; - height: 28px; + width: 24px; + height: 24px; line-height: 1; } @@ -427,12 +434,6 @@ export default { font-size: 16px; } -.init-mysql-driver-type { - font-size: 14px; - line-height: 22px; - white-space: nowrap; -} - .init-mysql-driver-loading-icon, .init-mysql-driver-ready-icon { color: #52c41a; @@ -443,15 +444,15 @@ export default { } .init-mysql-driver-progress-circle { - flex: 0 0 28px; + flex: 0 0 24px; display: inline-flex; align-items: center; justify-content: center; position: relative; - width: 28px; - min-width: 28px; - height: 28px; - min-height: 28px; + width: 24px; + min-width: 24px; + height: 24px; + min-height: 24px; aspect-ratio: 1 / 1; box-sizing: border-box; border-radius: 50%; @@ -484,6 +485,12 @@ export default { color: rgba(0, 0, 0, 0.65); } +.init-mysql-driver-action-button { + flex: 0 0 auto; + min-width: 96px; + margin-left: auto; +} + .init-mysql-driver-status.is-error .init-mysql-driver-message, .init-mysql-driver-status.is-unprepared .init-mysql-driver-message { color: #cf1322; diff --git a/frontend/src/views/initialization/StepConfirm.vue b/frontend/src/views/initialization/StepConfirm.vue index 4a61d25d..e862c9a7 100644 --- a/frontend/src/views/initialization/StepConfirm.vue +++ b/frontend/src/views/initialization/StepConfirm.vue @@ -1,79 +1,76 @@