From ba13c7aee864ca7bf2facb3ee8e3b983cc0dbb7d Mon Sep 17 00:00:00 2001 From: zhu-mingye <934230207@qq.com> Date: Tue, 31 Oct 2023 12:00:36 +0800 Subject: [PATCH] refactor response data structs and optimize datastudio's project --- .../org/dinky/controller/TaskController.java | 30 +- .../java/org/dinky/data/result/Result.java | 18 +- .../org/dinky/security/SecurityAspect.java | 18 +- .../java/org/dinky/service/TaskService.java | 2 +- .../dinky/service/impl/TaskServiceImpl.java | 7 +- dinky-admin/src/main/resources/db/db-h2.sql | 2 +- .../java/org/dinky/data/enums/Status.java | 7 + .../resources/i18n/messages_en_US.properties | 6 + .../resources/i18n/messages_zh_CN.properties | 468 +++++++++--------- dinky-web/config/config.ts | 2 +- dinky-web/src/app.tsx | 2 +- dinky-web/src/components/FlinkDag/index.tsx | 6 +- .../components/JobTags/JobLifeCycleTag.tsx | 16 +- dinky-web/src/hooks/useService.tsx | 2 +- dinky-web/src/locales/en-US/global.ts | 1 + dinky-web/src/locales/en-US/menu.ts | 2 +- dinky-web/src/locales/en-US/pages.ts | 1 - dinky-web/src/locales/zh-CN/global.ts | 3 +- dinky-web/src/locales/zh-CN/menu.ts | 2 +- dinky-web/src/locales/zh-CN/pages.ts | 1 - .../TenantTransfer/index.tsx | 6 +- .../RoleModalTransfer/RoleTransfer/index.tsx | 6 +- .../User/components/UserProTable/index.tsx | 2 +- .../BottomContainer/Result/index.tsx | 19 +- .../BottomContainer/TableData/index.tsx | 2 +- .../HeaderContainer/Explain/index.tsx | 10 +- .../DataStudio/HeaderContainer/function.tsx | 2 +- .../DataStudio/HeaderContainer/index.tsx | 25 +- .../DataStudio/HeaderContainer/service.tsx | 4 +- .../LeftContainer/Catalog/service.tsx | 6 +- .../LeftContainer/MetaData/service.tsx | 2 +- .../LeftContainer/Project/JobTree/index.tsx | 53 +- .../LeftContainer/Project/function.tsx | 21 +- .../LeftContainer/Project/index.tsx | 36 +- .../LeftContainer/Project/service.tsx | 2 +- .../DataStudio/MiddleContainer/index.tsx | 32 +- .../CommonSql/index.tsx | 0 .../FlinkSql/index.tsx | 0 .../index.tsx | 8 +- dinky-web/src/pages/DataStudio/model.ts | 16 + dinky-web/src/pages/DataStudio/route.tsx | 14 +- .../JobMetrics/JobChart/JobChart.tsx | 6 +- .../DevOps/JobDetail/JobMetrics/service.tsx | 6 +- dinky-web/src/pages/DevOps/constants.tsx | 2 +- .../Home/JobOverView/JobStatusPie/index.tsx | 2 +- dinky-web/src/pages/Metrics/Job/index.tsx | 2 +- dinky-web/src/pages/Metrics/index.tsx | 2 +- .../src/pages/Other/Login/LoginForm/index.tsx | 4 +- dinky-web/src/pages/Other/Login/index.tsx | 6 +- .../RegCenter/Alert/AlertInstance/model.ts | 4 +- .../RightTagsRouter/SQLQuery/index.tsx | 4 +- .../components/DataSourceDetail/index.tsx | 2 +- .../AlertRuleList/RuleEditForm/index.tsx | 2 +- .../LdapConfig/compontents/LoadUser.tsx | 2 +- .../SettingOverView/LdapConfig/index.tsx | 6 +- dinky-web/src/requestErrorConfig.ts | 6 +- dinky-web/src/services/BusinessCrud.ts | 12 +- dinky-web/src/services/data.d.ts | 2 +- dinky-web/src/types/Studio/state.d.ts | 2 - script/sql/dinky-mysql.sql | 2 +- script/sql/dinky-pg.sql | 2 +- .../1.0.0-SNAPSHOT_schema/mysql/dinky_dml.sql | 2 +- 62 files changed, 514 insertions(+), 426 deletions(-) rename dinky-web/src/pages/DataStudio/RightContainer/{ExecuteConfig => PreViewConfig}/CommonSql/index.tsx (100%) rename dinky-web/src/pages/DataStudio/RightContainer/{ExecuteConfig => PreViewConfig}/FlinkSql/index.tsx (100%) rename dinky-web/src/pages/DataStudio/RightContainer/{ExecuteConfig => PreViewConfig}/index.tsx (92%) diff --git a/dinky-admin/src/main/java/org/dinky/controller/TaskController.java b/dinky-admin/src/main/java/org/dinky/controller/TaskController.java index ef2e96e387..1457d39ab2 100644 --- a/dinky-admin/src/main/java/org/dinky/controller/TaskController.java +++ b/dinky-admin/src/main/java/org/dinky/controller/TaskController.java @@ -93,14 +93,21 @@ public Result submitTask(@ProcessId @RequestParam Integer id) throws paramType = "body") public Result debugTask(@RequestBody DebugDTO debugDTO) throws Exception { JobResult result = taskService.debugTask(debugDTO); - return Result.succeed(result, Status.EXECUTE_SUCCESS); + if (result.isSuccess()) { + return Result.succeed(result, Status.DEBUG_SUCCESS); + } + return Result.failed(result, Status.DEBUG_FAILED); } @GetMapping("/cancel") @Log(title = "Cancel Flink Job", businessType = BusinessType.TRIGGER) @ApiOperation("Cancel Flink Job") - public Result cancel(@RequestParam Integer id) { - return Result.succeed(taskService.cancelTaskJob(taskService.getTaskInfoById(id)), Status.EXECUTE_SUCCESS); + public Result cancel(@RequestParam Integer id) { + if (taskService.cancelTaskJob(taskService.getTaskInfoById(id))) { + return Result.succeed(Status.EXECUTE_SUCCESS); + } else { + return Result.failed(Status.EXECUTE_FAILED); + } } /** @@ -110,7 +117,11 @@ public Result cancel(@RequestParam Integer id) { @ApiOperation("Restart Task") @Log(title = "Restart Task", businessType = BusinessType.REMOTE_OPERATION) public Result restartTask(@RequestParam Integer id, String savePointPath) throws Exception { - return Result.succeed(taskService.restartTask(id, savePointPath)); + JobResult jobResult = taskService.restartTask(id, savePointPath); + if (jobResult.isSuccess()) { + return Result.succeed(jobResult, Status.RESTART_SUCCESS); + } + return Result.failed(jobResult, Status.RESTART_FAILED); } @GetMapping("/savepoint") @@ -127,7 +138,11 @@ public Result savepoint(@RequestParam Integer taskId, @RequestP @Log(title = "onLineTask", businessType = BusinessType.TRIGGER) @ApiOperation("onLineTask") public Result onLineTask(@RequestParam Integer taskId) { - return Result.succeed(taskService.changeTaskLifeRecyle(taskId, JobLifeCycle.ONLINE)); + if (taskService.changeTaskLifeRecyle(taskId, JobLifeCycle.ONLINE)) { + return Result.succeed(Status.PUBLISH_SUCCESS); + } else { + return Result.failed(Status.PUBLISH_FAILED); + } } @PostMapping("/explainSql") @@ -197,7 +212,10 @@ public Result> listFlinkSQLEnv() { @ApiOperation("Rollback Task") @Log(title = "Rollback Task", businessType = BusinessType.UPDATE) public Result rollbackTask(@RequestBody TaskRollbackVersionDTO dto) { - return taskService.rollbackTask(dto); + if (taskService.rollbackTask(dto)) { + return Result.succeed(Status.VERSION_ROLLBACK_SUCCESS); + } + return Result.failed(Status.VERSION_ROLLBACK_FAILED); } @GetMapping(value = "/getTaskAPIAddress") diff --git a/dinky-admin/src/main/java/org/dinky/data/result/Result.java b/dinky-admin/src/main/java/org/dinky/data/result/Result.java index 6f2775e888..0c0396180a 100644 --- a/dinky-admin/src/main/java/org/dinky/data/result/Result.java +++ b/dinky-admin/src/main/java/org/dinky/data/result/Result.java @@ -46,12 +46,12 @@ public class Result implements Serializable { /** result data */ @ApiModelProperty( value = "Result Data", - name = "datas", + name = "data", dataType = "T", required = true, allowEmptyValue = true, example = "[]") - private T datas; + private T data; @ApiModelProperty( value = "Result Code", @@ -95,7 +95,7 @@ public Result(Integer code, String msg) { } public void setData(T data) { - this.datas = data; + this.data = data; } public Result(Status status) { @@ -105,10 +105,10 @@ public Result(Status status) { } } - public Result(Integer code, String msg, T datas) { + public Result(Integer code, String msg, T data) { this.code = code; this.msg = msg; - this.datas = datas; + this.data = data; } public static Result succeed(String msg) { @@ -147,12 +147,12 @@ public static Result data(T model) { return of(model, CodeEnum.SUCCESS.getCode(), ""); } - public static Result of(T datas, Integer code, String msg) { - return new Result<>(datas, code, msg, new DateTime().toString(), code == 0); + public static Result of(T data, Integer code, String msg) { + return new Result<>(data, code, msg, new DateTime().toString(), code == 0); } - public static Result of(T datas, Integer code, Status status) { - return new Result<>(datas, code, status.getMessage(), new DateTime().toString(), code == 0); + public static Result of(T data, Integer code, Status status) { + return new Result<>(data, code, status.getMessage(), new DateTime().toString(), code == 0); } public static Result failed() { diff --git a/dinky-admin/src/main/java/org/dinky/security/SecurityAspect.java b/dinky-admin/src/main/java/org/dinky/security/SecurityAspect.java index 31dc2717a8..02fc939899 100644 --- a/dinky-admin/src/main/java/org/dinky/security/SecurityAspect.java +++ b/dinky-admin/src/main/java/org/dinky/security/SecurityAspect.java @@ -51,8 +51,8 @@ public void afterReturning(JoinPoint joinPoint, Object returnValue) { // mask sql for explain // openapi/explainSql - if (returnValue instanceof Result && ((Result) returnValue).getDatas() instanceof ExplainResult) { - ExplainResult exp = ((ExplainResult) ((Result) returnValue).getDatas()); + if (returnValue instanceof Result && ((Result) returnValue).getData() instanceof ExplainResult) { + ExplainResult exp = ((ExplainResult) ((Result) returnValue).getData()); List sqlExplainResults = exp.getSqlExplainResults(); if (CollectionUtils.isEmpty(sqlExplainResults)) { return; @@ -64,12 +64,12 @@ public void afterReturning(JoinPoint joinPoint, Object returnValue) { } // /api/studio/explainSql - if (returnValue instanceof Result && ((Result) returnValue).getDatas() instanceof List) { - List list = (List) ((Result) returnValue).getDatas(); + if (returnValue instanceof Result && ((Result) returnValue).getData() instanceof List) { + List list = (List) ((Result) returnValue).getData(); if (list.isEmpty() || !(list.get(0) instanceof SqlExplainResult)) { return; } - List sqlExplainResults = ((Result>) returnValue).getDatas(); + List sqlExplainResults = ((Result>) returnValue).getData(); if (CollectionUtils.isEmpty(sqlExplainResults)) { return; } @@ -93,8 +93,8 @@ public void afterReturning(JoinPoint joinPoint, Object returnValue) { } // mask statement for history - if (returnValue instanceof Result && ((Result) returnValue).getDatas() instanceof History) { - History history = ((History) ((Result) returnValue).getDatas()); + if (returnValue instanceof Result && ((Result) returnValue).getData() instanceof History) { + History history = ((History) ((Result) returnValue).getData()); if (null != history) { String statement = history.getStatement(); history.setStatement(mask(statement, SENSITIVE, MASK)); @@ -102,8 +102,8 @@ public void afterReturning(JoinPoint joinPoint, Object returnValue) { } // /getJobInfoDetail - if (returnValue instanceof Result && ((Result) returnValue).getDatas() instanceof JobInfoDetail) { - JobInfoDetail jobInfoDetail = ((JobInfoDetail) ((Result) returnValue).getDatas()); + if (returnValue instanceof Result && ((Result) returnValue).getData() instanceof JobInfoDetail) { + JobInfoDetail jobInfoDetail = ((JobInfoDetail) ((Result) returnValue).getData()); History history = jobInfoDetail.getHistory(); if (null != history) { String statement = history.getStatement(); diff --git a/dinky-admin/src/main/java/org/dinky/service/TaskService.java b/dinky-admin/src/main/java/org/dinky/service/TaskService.java index 21a2a60247..49f6681651 100644 --- a/dinky-admin/src/main/java/org/dinky/service/TaskService.java +++ b/dinky-admin/src/main/java/org/dinky/service/TaskService.java @@ -206,7 +206,7 @@ public interface TaskService extends ISuperService { * @param dto The {@link TaskRollbackVersionDTO} object representing the task to rollback. * @return A {@link Result} object indicating the result of the rollback operation. */ - Result rollbackTask(TaskRollbackVersionDTO dto); + boolean rollbackTask(TaskRollbackVersionDTO dto); /** * Get the size of all tasks with the given name in the system. diff --git a/dinky-admin/src/main/java/org/dinky/service/impl/TaskServiceImpl.java b/dinky-admin/src/main/java/org/dinky/service/impl/TaskServiceImpl.java index 5630ffc815..0659aea90f 100644 --- a/dinky-admin/src/main/java/org/dinky/service/impl/TaskServiceImpl.java +++ b/dinky-admin/src/main/java/org/dinky/service/impl/TaskServiceImpl.java @@ -559,9 +559,9 @@ public List getAllUDF() { } @Override - public Result rollbackTask(TaskRollbackVersionDTO dto) { + public boolean rollbackTask(TaskRollbackVersionDTO dto) { if (Asserts.isNull(dto.getVersionId()) || Asserts.isNull(dto.getId())) { - return Result.failed("the version is error"); + throw new BusException("the version is error"); } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() @@ -575,8 +575,7 @@ public Result rollbackTask(TaskRollbackVersionDTO dto) { BeanUtil.copyProperties(taskVersion.getTaskConfigure(), updateTask); updateTask.setId(taskVersion.getTaskId()); updateTask.setStep(JobLifeCycle.DEVELOP.getValue()); - baseMapper.updateById(updateTask); - return Result.succeed("version rollback success!"); + return baseMapper.updateById(updateTask) > 0; } @Override diff --git a/dinky-admin/src/main/resources/db/db-h2.sql b/dinky-admin/src/main/resources/db/db-h2.sql index abb7d7dc94..66e09a330c 100644 --- a/dinky-admin/src/main/resources/db/db-h2.sql +++ b/dinky-admin/src/main/resources/db/db-h2.sql @@ -1768,7 +1768,7 @@ INSERT INTO `dinky_sys_menu` VALUES (34, 5, '项目列表', '/datastudio/left/pr INSERT INTO `dinky_sys_menu` VALUES (35, 5, '元数据', '/datastudio/left/metadata', null, 'datastudio:left:metadata', 'TableOutlined', 'F', 0, 7, '2023-09-01 18:01:09', '2023-09-26 14:49:42', null); INSERT INTO `dinky_sys_menu` VALUES (36, 5, 'catalog', '/datastudio/left/catalog', null, 'datastudio:left:structure', 'DatabaseOutlined', 'F', 0, 6, '2023-09-01 18:01:30', '2023-09-26 14:49:54', null); INSERT INTO `dinky_sys_menu` VALUES (37, 5, '作业配置', '/datastudio/right/jobConfig', null, 'datastudio:right:jobConfig', 'SettingOutlined', 'F', 0, 8, '2023-09-01 18:02:15', '2023-09-26 14:50:24', null); -INSERT INTO `dinky_sys_menu` VALUES (38, 5, '执行配置', '/datastudio/right/executeConfig', null, 'datastudio:right:executeConfig', 'ExperimentOutlined', 'F', 0, 9, '2023-09-01 18:03:08', '2023-09-26 14:50:54', null); +INSERT INTO `dinky_sys_menu` VALUES (38, 5, '预览配置', '/datastudio/right/previewConfig', null, 'datastudio:right:previewConfig', 'InsertRowRightOutlined', 'F', 0, 9, '2023-09-01 18:03:08', '2023-09-26 14:50:54', null); INSERT INTO `dinky_sys_menu` VALUES (39, 5, '版本历史', '/datastudio/right/historyVision', null, 'datastudio:right:historyVision', 'HistoryOutlined', 'F', 0, 10, '2023-09-01 18:03:29', '2023-09-26 14:51:03', null); INSERT INTO `dinky_sys_menu` VALUES (40, 5, '保存点', '/datastudio/right/savePoint', null, 'datastudio:right:savePoint', 'FolderOutlined', 'F', 0, 11, '2023-09-01 18:03:58', '2023-09-26 14:51:13', null); INSERT INTO `dinky_sys_menu` VALUES (41, 5, '作业信息', '/datastudio/right/jobInfo', null, 'datastudio:right:jobInfo', 'InfoCircleOutlined', 'F', 0, 8, '2023-09-01 18:04:31', '2023-09-25 18:26:45', null); diff --git a/dinky-common/src/main/java/org/dinky/data/enums/Status.java b/dinky-common/src/main/java/org/dinky/data/enums/Status.java index bb8a17e902..8e62580cda 100644 --- a/dinky-common/src/main/java/org/dinky/data/enums/Status.java +++ b/dinky-common/src/main/java/org/dinky/data/enums/Status.java @@ -87,6 +87,13 @@ public enum Status { TEST_CONNECTION_FAILED(9030, "test.connection.failed"), DEBUG_SUCCESS(9031, "debug.success"), DEBUG_FAILED(9032, "debug.failed"), + PUBLISH_SUCCESS(9033, "publish.success"), + PUBLISH_FAILED(9034, "publish.failed"), + OFFLINE_SUCCESS(9035, "offline.success"), + OFFLINE_FAILED(9036, "offline.failed"), + VERSION_ROLLBACK_SUCCESS(9037, "version.rollback.success"), + VERSION_ROLLBACK_FAILED(9038, "version.rollback.failed"), + /** * user,tenant,role */ diff --git a/dinky-common/src/main/resources/i18n/messages_en_US.properties b/dinky-common/src/main/resources/i18n/messages_en_US.properties index 4752dd3f36..26339f99fd 100644 --- a/dinky-common/src/main/resources/i18n/messages_en_US.properties +++ b/dinky-common/src/main/resources/i18n/messages_en_US.properties @@ -51,6 +51,12 @@ not.token=Can Not Read Token execute.success=Execute Successfully debug.success=Debug Successfully debug.failed=Debug Failed +publish.success=Publish Successfully +publish.failed=Publish Failed +offline.success=Offline Successfully +offline.failed=Offline Failed +version.rollback.success=Version Rollback Successfully +version.rollback.failed=Version Rollback Failed token.freezed=token has been frozen menu.has.assign=Menu Has Assign , Can Not Delete datasource.status.refresh.success=DataSource Status Refresh Success diff --git a/dinky-common/src/main/resources/i18n/messages_zh_CN.properties b/dinky-common/src/main/resources/i18n/messages_zh_CN.properties index 6278048bce..a3ceaea095 100644 --- a/dinky-common/src/main/resources/i18n/messages_zh_CN.properties +++ b/dinky-common/src/main/resources/i18n/messages_zh_CN.properties @@ -1,253 +1,259 @@ -test.connection.success=测试连接成功 -assign.menu.failed=分配菜单失败 -ldap.user.autoload.forbaid=未开启自动映射LDAP用户,请联系管理员导入 -cluster.instance.recycle.success=回收成功 -execute.failed=执行失败 -ldap.user.duplicat=ldap匹配到多个用户数据 -git.branch.not.found=获取不到分支信息 -copy.success=复制成功 -user.superadmin.cannot.disable=超级管理员用户不能停用 -ds.work.flow.not.save=请先保存工作流 -schedule.status.unknown=未知状态: {0} -user.binding.role.delete.all=用户绑定角色删除所有 -modify.failed=修改失败 -git.build.success=构建成功 -menu.has.child=存在子菜单 不允许删除 -tenant.already.exists=租户已存在 -save.failed=保存失败 -assign.menu.success=分配菜单成功 -user.disabled.by.admin=当前用户已被管理员停用 -select.menu=请选择菜单 -role.not.exist=角色不存在 -delete.success=删除成功 -clear.success=清除成功 -move.success=移动成功 -ldap.login.forbid=当前用户登录模式不是LDAP,请联系管理员修改,或不使用LDAP登录 -request.params.not.valid.error=请求参数[{0}]无效 -change.password.failed=修改密码失败 -menu.name.exist=菜单已存在 -ds.task.type.not.support=海豚调度类型为 [{}] 不支持,非DINKY类型 -datasource.connect.normal=数据源连接正常 -restart.success=重启成功 -test.msg.job.log.url=点击查看该任务的异常日志 -user.assign.role.success=用户分配角色成功 -global.params.check.error.value=字段: {0}, 不合法的值: {1} -change.password.success=修改密码成功 -user.not.exist=用户不存在 -refresh.success=刷新成功 -ds.get.node.list.error=节点获取失败 -ldap.default.tenant.nofound=LDAP默认租户不存在 -copy.failed=复制失败 -folder.not.empty=该目录下存在子目录/作业,无法删除 -be.replaced=token 已被顶下线 -datasource.connect.success=数据源连接测试成功 -sign.out.success=退出成功 -added.success=新增成功 -tenant.binding.user=删除租户失败,该租户已绑定用户 -send.test.failed=测试信息发送失败 -delete.failed=删除失败 -role.binding.user=该角色已绑定用户,无法删除 -not.token=未能读取到有效 Token -execute.success=执行成功 -debug.success=调试成功 -debug.failed=调试失败 -token.freezed=token 已被冻结 -menu.has.assign=菜单已分配,不允许删除 -datasource.status.refresh.success=数据源状态刷新成功 -user.not.login=用户未登录 -tenant.assign.user.failed=分配用户失败 -stop.success=已成功停止 -move.failed=移动失败 -get.tenant.failed=获取租户信息失败 -send.test.success=测试信息发送成功 -login.success=登录成功 -login.password.not.null=登录密码不能为空 -unknown.error=未知异常: {0} -stop.failed=停止失败 -role.name.exist=角色已存在 -ldap.filter.incorrect=用户过滤规则不能为空,请填写相关配置 -tenant.assign.user.success=分配用户成功 -ds.add.work.flow.definition.success=添加工作流定义成功 -expired.token=Token 已过期 -refresh.failed=刷新失败 -operate.success=操作成功 -git.project.not.found=获取不到项目信息 -cluster.instance.heartbeat.success=集群实例心跳成功 -ldap.no.user.found=LDAP连接成功,但未匹配到任何用户 -login.failure=用户登录失败 -request.params.error=请求参数错误 -user.not.binding.tenant=用户未绑定租户 -user.assign.role.failed=用户分配角色失败 -rename.failed=重命名失败 -test.msg.job.name=测试任务 -tenant.binding.user.delete.all=该租户绑定的用户已被全部删除 -menu.not.exist=菜单不存在 -test.msg.job.name.title=任务 -ds.task.not.exist=任务不存在 -global.params.check.error=字段: {0}, {1} -test.msg.title=实时告警监控 -user.name.passwd.error=用户名或密码不正确 -no.prefix=未按照指定前缀提交 token -query.success=查询成功 -ds.work.flow.definition.not.exist=工作流定义不存在 -tenant.name.exist=租户已存在 -failed=获取失败 -added.failed=新增失败 -task.not.exist=任务不存在 -task.is.online=任务已上线,禁止修改 -cluster.instance.deploy=部署完成 -clear.failed=清除失败 -rename.success=重命名成功 -job.release.disabled.update=作业已发布,禁止修改 -success=获取成功 -tenant.not.exist=租户不存在 -user.already.exists=用户名已存在 -git.building=此任务正在构建 -ds.work.flow.definition.task.name.exist=添加失败,工作流定义 [{}] 已存在任务定义 [{}] 请刷新 -role.already.exists=角色已存在 -internal.server.error.args=服务端异常: {0} -kick.out=token 已被踢下线 -restart.failed=重启失败 -invalid.token=无效的 Token -datasource.not.exist=数据源不存在 -datasource.clear.cache.success=清除库表缓存成功 -tenant.admin.already.exists=已存在租户管理员, 租户超管只能有一个 -ds.work.flow.definition.online=工作流定义 [{}] 已经上线 -test.msg.job.url=跳转至该任务 -savepoint.is.null=保存点为空 -git.sort.success=排序成功 -ds.add.task.definition.success=添加任务定义成功 -alert.group.exist=告警组已存在 -git.sort.failed=排序失败 -query.failed=查询失败 -save.success=保存成功 -cluster.instance.kill=已杀死该进程/集群 -cluster.not.exist=集群不存在 -operate.failed=操作失败 -test.connection.failed=测试连接失败 -switching.tenant.success=选择租户成功 -tenant.name.not.exist=租户不存在 -job.instance.not.exist=作业实例不存在 -modify.success=修改成功 -user.old.password.incorrect=用户旧密码不正确 -ldap.user.incorrect=LDAP用户名(DN)不正确 -role.binding.row.permission=该角色已绑定行权限,无法删除 +test.connection.success=\u6D4B\u8BD5\u8FDE\u63A5\u6210\u529F +assign.menu.failed=\u5206\u914D\u83DC\u5355\u5931\u8D25 +ldap.user.autoload.forbaid=\u672A\u5F00\u542F\u81EA\u52A8\u6620\u5C04LDAP\u7528\u6237\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u5BFC\u5165 +cluster.instance.recycle.success=\u56DE\u6536\u6210\u529F +execute.failed=\u6267\u884C\u5931\u8D25 +ldap.user.duplicat=ldap\u5339\u914D\u5230\u591A\u4E2A\u7528\u6237\u6570\u636E +git.branch.not.found=\u83B7\u53D6\u4E0D\u5230\u5206\u652F\u4FE1\u606F +copy.success=\u590D\u5236\u6210\u529F +user.superadmin.cannot.disable=\u8D85\u7EA7\u7BA1\u7406\u5458\u7528\u6237\u4E0D\u80FD\u505C\u7528 +ds.work.flow.not.save=\u8BF7\u5148\u4FDD\u5B58\u5DE5\u4F5C\u6D41 +schedule.status.unknown=\u672A\u77E5\u72B6\u6001: {0} +user.binding.role.delete.all=\u7528\u6237\u7ED1\u5B9A\u89D2\u8272\u5220\u9664\u6240\u6709 +modify.failed=\u4FEE\u6539\u5931\u8D25 +git.build.success=\u6784\u5EFA\u6210\u529F +menu.has.child=\u5B58\u5728\u5B50\u83DC\u5355 \u4E0D\u5141\u8BB8\u5220\u9664 +tenant.already.exists=\u79DF\u6237\u5DF2\u5B58\u5728 +save.failed=\u4FDD\u5B58\u5931\u8D25 +assign.menu.success=\u5206\u914D\u83DC\u5355\u6210\u529F +user.disabled.by.admin=\u5F53\u524D\u7528\u6237\u5DF2\u88AB\u7BA1\u7406\u5458\u505C\u7528 +select.menu=\u8BF7\u9009\u62E9\u83DC\u5355 +role.not.exist=\u89D2\u8272\u4E0D\u5B58\u5728 +delete.success=\u5220\u9664\u6210\u529F +clear.success=\u6E05\u9664\u6210\u529F +move.success=\u79FB\u52A8\u6210\u529F +ldap.login.forbid=\u5F53\u524D\u7528\u6237\u767B\u5F55\u6A21\u5F0F\u4E0D\u662FLDAP\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u4FEE\u6539,\u6216\u4E0D\u4F7F\u7528LDAP\u767B\u5F55 +request.params.not.valid.error=\u8BF7\u6C42\u53C2\u6570[{0}]\u65E0\u6548 +change.password.failed=\u4FEE\u6539\u5BC6\u7801\u5931\u8D25 +menu.name.exist=\u83DC\u5355\u5DF2\u5B58\u5728 +ds.task.type.not.support=\u6D77\u8C5A\u8C03\u5EA6\u7C7B\u578B\u4E3A [{}] \u4E0D\u652F\u6301,\u975EDINKY\u7C7B\u578B +datasource.connect.normal=\u6570\u636E\u6E90\u8FDE\u63A5\u6B63\u5E38 +restart.success=\u91CD\u542F\u6210\u529F +test.msg.job.log.url=\u70B9\u51FB\u67E5\u770B\u8BE5\u4EFB\u52A1\u7684\u5F02\u5E38\u65E5\u5FD7 +user.assign.role.success=\u7528\u6237\u5206\u914D\u89D2\u8272\u6210\u529F +global.params.check.error.value=\u5B57\u6BB5: {0}, \u4E0D\u5408\u6CD5\u7684\u503C: {1} +change.password.success=\u4FEE\u6539\u5BC6\u7801\u6210\u529F +user.not.exist=\u7528\u6237\u4E0D\u5B58\u5728 +refresh.success=\u5237\u65B0\u6210\u529F +ds.get.node.list.error=\u8282\u70B9\u83B7\u53D6\u5931\u8D25 +ldap.default.tenant.nofound=LDAP\u9ED8\u8BA4\u79DF\u6237\u4E0D\u5B58\u5728 +copy.failed=\u590D\u5236\u5931\u8D25 +folder.not.empty=\u8BE5\u76EE\u5F55\u4E0B\u5B58\u5728\u5B50\u76EE\u5F55/\u4F5C\u4E1A\uFF0C\u65E0\u6CD5\u5220\u9664 +be.replaced=token \u5DF2\u88AB\u9876\u4E0B\u7EBF +datasource.connect.success=\u6570\u636E\u6E90\u8FDE\u63A5\u6D4B\u8BD5\u6210\u529F +sign.out.success=\u9000\u51FA\u6210\u529F +added.success=\u65B0\u589E\u6210\u529F +tenant.binding.user=\u5220\u9664\u79DF\u6237\u5931\u8D25\uFF0C\u8BE5\u79DF\u6237\u5DF2\u7ED1\u5B9A\u7528\u6237 +send.test.failed=\u6D4B\u8BD5\u4FE1\u606F\u53D1\u9001\u5931\u8D25 +delete.failed=\u5220\u9664\u5931\u8D25 +role.binding.user=\u8BE5\u89D2\u8272\u5DF2\u7ED1\u5B9A\u7528\u6237\uFF0C\u65E0\u6CD5\u5220\u9664 +not.token=\u672A\u80FD\u8BFB\u53D6\u5230\u6709\u6548 Token +execute.success=\u6267\u884C\u6210\u529F +debug.success=\u8C03\u8BD5\u6210\u529F +debug.failed=\u8C03\u8BD5\u5931\u8D25 +publish.success=\u53D1\u5E03\u6210\u529F +publish.failed=\u53D1\u5E03\u5931\u8D25 +offline.success=\u4E0B\u7EBF\u6210\u529F +offline.failed=\u4E0B\u7EBF\u5931\u8D25 +version.rollback.success=\u7248\u672C\u56DE\u6EDA\u6210\u529F +version.rollback.failed=\u7248\u672C\u56DE\u6EDA\u5931\u8D25 +token.freezed=token \u5DF2\u88AB\u51BB\u7ED3 +menu.has.assign=\u83DC\u5355\u5DF2\u5206\u914D,\u4E0D\u5141\u8BB8\u5220\u9664 +datasource.status.refresh.success=\u6570\u636E\u6E90\u72B6\u6001\u5237\u65B0\u6210\u529F +user.not.login=\u7528\u6237\u672A\u767B\u5F55 +tenant.assign.user.failed=\u5206\u914D\u7528\u6237\u5931\u8D25 +stop.success=\u5DF2\u6210\u529F\u505C\u6B62 +move.failed=\u79FB\u52A8\u5931\u8D25 +get.tenant.failed=\u83B7\u53D6\u79DF\u6237\u4FE1\u606F\u5931\u8D25 +send.test.success=\u6D4B\u8BD5\u4FE1\u606F\u53D1\u9001\u6210\u529F +login.success=\u767B\u5F55\u6210\u529F +login.password.not.null=\u767B\u5F55\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A +unknown.error=\u672A\u77E5\u5F02\u5E38: {0} +stop.failed=\u505C\u6B62\u5931\u8D25 +role.name.exist=\u89D2\u8272\u5DF2\u5B58\u5728 +ldap.filter.incorrect=\u7528\u6237\u8FC7\u6EE4\u89C4\u5219\u4E0D\u80FD\u4E3A\u7A7A\uFF0C\u8BF7\u586B\u5199\u76F8\u5173\u914D\u7F6E +tenant.assign.user.success=\u5206\u914D\u7528\u6237\u6210\u529F +ds.add.work.flow.definition.success=\u6DFB\u52A0\u5DE5\u4F5C\u6D41\u5B9A\u4E49\u6210\u529F +expired.token=Token \u5DF2\u8FC7\u671F +refresh.failed=\u5237\u65B0\u5931\u8D25 +operate.success=\u64CD\u4F5C\u6210\u529F +git.project.not.found=\u83B7\u53D6\u4E0D\u5230\u9879\u76EE\u4FE1\u606F +cluster.instance.heartbeat.success=\u96C6\u7FA4\u5B9E\u4F8B\u5FC3\u8DF3\u6210\u529F +ldap.no.user.found=LDAP\u8FDE\u63A5\u6210\u529F\uFF0C\u4F46\u672A\u5339\u914D\u5230\u4EFB\u4F55\u7528\u6237 +login.failure=\u7528\u6237\u767B\u5F55\u5931\u8D25 +request.params.error=\u8BF7\u6C42\u53C2\u6570\u9519\u8BEF +user.not.binding.tenant=\u7528\u6237\u672A\u7ED1\u5B9A\u79DF\u6237 +user.assign.role.failed=\u7528\u6237\u5206\u914D\u89D2\u8272\u5931\u8D25 +rename.failed=\u91CD\u547D\u540D\u5931\u8D25 +test.msg.job.name=\u6D4B\u8BD5\u4EFB\u52A1 +tenant.binding.user.delete.all=\u8BE5\u79DF\u6237\u7ED1\u5B9A\u7684\u7528\u6237\u5DF2\u88AB\u5168\u90E8\u5220\u9664 +menu.not.exist=\u83DC\u5355\u4E0D\u5B58\u5728 +test.msg.job.name.title=\u4EFB\u52A1 +ds.task.not.exist=\u4EFB\u52A1\u4E0D\u5B58\u5728 +global.params.check.error=\u5B57\u6BB5: {0}, {1} +test.msg.title=\u5B9E\u65F6\u544A\u8B66\u76D1\u63A7 +user.name.passwd.error=\u7528\u6237\u540D\u6216\u5BC6\u7801\u4E0D\u6B63\u786E +no.prefix=\u672A\u6309\u7167\u6307\u5B9A\u524D\u7F00\u63D0\u4EA4 token +query.success=\u67E5\u8BE2\u6210\u529F +ds.work.flow.definition.not.exist=\u5DE5\u4F5C\u6D41\u5B9A\u4E49\u4E0D\u5B58\u5728 +tenant.name.exist=\u79DF\u6237\u5DF2\u5B58\u5728 +failed=\u83B7\u53D6\u5931\u8D25 +added.failed=\u65B0\u589E\u5931\u8D25 +task.not.exist=\u4EFB\u52A1\u4E0D\u5B58\u5728 +task.is.online=\u4EFB\u52A1\u5DF2\u4E0A\u7EBF\uFF0C\u7981\u6B62\u4FEE\u6539 +cluster.instance.deploy=\u90E8\u7F72\u5B8C\u6210 +clear.failed=\u6E05\u9664\u5931\u8D25 +rename.success=\u91CD\u547D\u540D\u6210\u529F +job.release.disabled.update=\u4F5C\u4E1A\u5DF2\u53D1\u5E03\uFF0C\u7981\u6B62\u4FEE\u6539 +success=\u83B7\u53D6\u6210\u529F +tenant.not.exist=\u79DF\u6237\u4E0D\u5B58\u5728 +user.already.exists=\u7528\u6237\u540D\u5DF2\u5B58\u5728 +git.building=\u6B64\u4EFB\u52A1\u6B63\u5728\u6784\u5EFA +ds.work.flow.definition.task.name.exist=\u6DFB\u52A0\u5931\u8D25,\u5DE5\u4F5C\u6D41\u5B9A\u4E49 [{}] \u5DF2\u5B58\u5728\u4EFB\u52A1\u5B9A\u4E49 [{}] \u8BF7\u5237\u65B0 +role.already.exists=\u89D2\u8272\u5DF2\u5B58\u5728 +internal.server.error.args=\u670D\u52A1\u7AEF\u5F02\u5E38: {0} +kick.out=token \u5DF2\u88AB\u8E22\u4E0B\u7EBF +restart.failed=\u91CD\u542F\u5931\u8D25 +invalid.token=\u65E0\u6548\u7684 Token +datasource.not.exist=\u6570\u636E\u6E90\u4E0D\u5B58\u5728 +datasource.clear.cache.success=\u6E05\u9664\u5E93\u8868\u7F13\u5B58\u6210\u529F +tenant.admin.already.exists=\u5DF2\u5B58\u5728\u79DF\u6237\u7BA1\u7406\u5458, \u79DF\u6237\u8D85\u7BA1\u53EA\u80FD\u6709\u4E00\u4E2A +ds.work.flow.definition.online=\u5DE5\u4F5C\u6D41\u5B9A\u4E49 [{}] \u5DF2\u7ECF\u4E0A\u7EBF +test.msg.job.url=\u8DF3\u8F6C\u81F3\u8BE5\u4EFB\u52A1 +savepoint.is.null=\u4FDD\u5B58\u70B9\u4E3A\u7A7A +git.sort.success=\u6392\u5E8F\u6210\u529F +ds.add.task.definition.success=\u6DFB\u52A0\u4EFB\u52A1\u5B9A\u4E49\u6210\u529F +alert.group.exist=\u544A\u8B66\u7EC4\u5DF2\u5B58\u5728 +git.sort.failed=\u6392\u5E8F\u5931\u8D25 +query.failed=\u67E5\u8BE2\u5931\u8D25 +save.success=\u4FDD\u5B58\u6210\u529F +cluster.instance.kill=\u5DF2\u6740\u6B7B\u8BE5\u8FDB\u7A0B/\u96C6\u7FA4 +cluster.not.exist=\u96C6\u7FA4\u4E0D\u5B58\u5728 +operate.failed=\u64CD\u4F5C\u5931\u8D25 +test.connection.failed=\u6D4B\u8BD5\u8FDE\u63A5\u5931\u8D25 +switching.tenant.success=\u9009\u62E9\u79DF\u6237\u6210\u529F +tenant.name.not.exist=\u79DF\u6237\u4E0D\u5B58\u5728 +job.instance.not.exist=\u4F5C\u4E1A\u5B9E\u4F8B\u4E0D\u5B58\u5728 +modify.success=\u4FEE\u6539\u6210\u529F +user.old.password.incorrect=\u7528\u6237\u65E7\u5BC6\u7801\u4E0D\u6B63\u786E +ldap.user.incorrect=LDAP\u7528\u6237\u540D\uFF08DN\uFF09\u4E0D\u6B63\u786E +role.binding.row.permission=\u8BE5\u89D2\u8272\u5DF2\u7ED1\u5B9A\u884C\u6743\u9650\uFF0C\u65E0\u6CD5\u5220\u9664 # dinky-admin -unknown.i18n=未知 i18n 信息,请检查. . . +unknown.i18n=\u672A\u77E5 i18n \u4FE1\u606F,\u8BF7\u68C0\u67E5. . . -file.upload.failed=文件上传失败, 原因: {0} +file.upload.failed=\u6587\u4EF6\u4E0A\u4F20\u5931\u8D25, \u539F\u56E0: {0} -hdfs.init.failed=内部hdfs信息错误, 原因: {0} -hdfs.file.lose= 在工程根目录下没有找到core-site.xml/hdfs-site.xml/yarn-site.xml文件, 请先上传这些文件 +hdfs.init.failed=\u5185\u90E8hdfs\u4FE1\u606F\u9519\u8BEF, \u539F\u56E0: {0} +hdfs.file.lose= \u5728\u5DE5\u7A0B\u6839\u76EE\u5F55\u4E0B\u6CA1\u6709\u627E\u5230core-site.xml/hdfs-site.xml/yarn-site.xml\u6587\u4EF6, \u8BF7\u5148\u4E0A\u4F20\u8FD9\u4E9B\u6587\u4EF6 -daemon.task.config.not.exist=线程任务配置不能为空 -daemon.task.not.support=不支持线程任务类型: +daemon.task.config.not.exist=\u7EBF\u7A0B\u4EFB\u52A1\u914D\u7F6E\u4E0D\u80FD\u4E3A\u7A7A +daemon.task.not.support=\u4E0D\u652F\u6301\u7EBF\u7A0B\u4EFB\u52A1\u7C7B\u578B\uFF1A # dinky-alert -alert.rule.jobFail=作业失败 -alert.rule.getJobInfoFail=获取作业信息失败 -alert.rule.jobRestart=作业重启 -alert.rule.checkpointFail=checkpoint失败 -alert.rule.jobRunException=作业运行异常 -alert.rule.checkpointTimeout=checkpoint超时 +alert.rule.jobFail=\u4F5C\u4E1A\u5931\u8D25 +alert.rule.getJobInfoFail=\u83B7\u53D6\u4F5C\u4E1A\u4FE1\u606F\u5931\u8D25 +alert.rule.jobRestart=\u4F5C\u4E1A\u91CD\u542F +alert.rule.checkpointFail=checkpoint\u5931\u8D25 +alert.rule.jobRunException=\u4F5C\u4E1A\u8FD0\u884C\u5F02\u5E38 +alert.rule.checkpointTimeout=checkpoint\u8D85\u65F6 # system config -sys.flink.settings.useRestAPI=使用 Rest API -sys.flink.settings.useRestAPI.note=在运维 Flink 任务时是否使用 RestAPI -sys.flink.settings.sqlSeparator=SQL 分隔符 -sys.flink.settings.sqlSeparator.note=SQL 分隔符 -sys.flink.settings.jobIdWait=Job 提交等待时间 -sys.flink.settings.jobIdWait.note=提交 Application 或 PerJob 任务时获取 Job ID 的最大等待时间(秒) -sys.maven.settings.settingsFilePath=Maven 配置文件路径 -sys.maven.settings.settingsFilePath.note=Maven 配置文件路径, eg -sys.maven.settings.repository=Maven 仓库地址 -sys.maven.settings.repository.note=Maven 仓库地址 -sys.maven.settings.repositoryUser=Maven 仓库用户名 -sys.maven.settings.repositoryUser.note=Maven 私服认证用户名 -sys.maven.settings.repositoryPassword=Maven 仓库密码 -sys.maven.settings.repositoryPassword.note=Maven 私服认证密码,请注意 -sys.env.settings.pythonHome=Python 环境变量 -sys.env.settings.pythonHome.note=Python 环境变量 -sys.env.settings.dinkyAddr=Dinky 地址 -sys.env.settings.dinkyAddr.note=该地址必须与Dinky Application后台url中配置的地址相同 -sys.dolphinscheduler.settings.enable=是否启用 DolphinScheduler -sys.dolphinscheduler.settings.enable.note=是否启用 DolphinScheduler ,启用后才能使用 DolphinScheduler 的相关功能, 请确保 DolphinScheduler 的相关配置正确 -sys.dolphinscheduler.settings.url=DolphinScheduler 地址 -sys.dolphinscheduler.settings.url.note=地址必须和DolphinScheduler后台配置的地址一致,eg: http://127.0.0.1:12345/dolphinscheduler +sys.flink.settings.useRestAPI=\u4F7F\u7528 Rest API +sys.flink.settings.useRestAPI.note=\u5728\u8FD0\u7EF4 Flink \u4EFB\u52A1\u65F6\u662F\u5426\u4F7F\u7528 RestAPI +sys.flink.settings.sqlSeparator=SQL \u5206\u9694\u7B26 +sys.flink.settings.sqlSeparator.note=SQL \u5206\u9694\u7B26 +sys.flink.settings.jobIdWait=Job \u63D0\u4EA4\u7B49\u5F85\u65F6\u95F4 +sys.flink.settings.jobIdWait.note=\u63D0\u4EA4 Application \u6216 PerJob \u4EFB\u52A1\u65F6\u83B7\u53D6 Job ID \u7684\u6700\u5927\u7B49\u5F85\u65F6\u95F4\uFF08\u79D2\uFF09 +sys.maven.settings.settingsFilePath=Maven \u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84 +sys.maven.settings.settingsFilePath.note=Maven \u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84, eg +sys.maven.settings.repository=Maven \u4ED3\u5E93\u5730\u5740 +sys.maven.settings.repository.note=Maven \u4ED3\u5E93\u5730\u5740 +sys.maven.settings.repositoryUser=Maven \u4ED3\u5E93\u7528\u6237\u540D +sys.maven.settings.repositoryUser.note=Maven \u79C1\u670D\u8BA4\u8BC1\u7528\u6237\u540D +sys.maven.settings.repositoryPassword=Maven \u4ED3\u5E93\u5BC6\u7801 +sys.maven.settings.repositoryPassword.note=Maven \u79C1\u670D\u8BA4\u8BC1\u5BC6\u7801,\u8BF7\u6CE8\u610F +sys.env.settings.pythonHome=Python \u73AF\u5883\u53D8\u91CF +sys.env.settings.pythonHome.note=Python \u73AF\u5883\u53D8\u91CF +sys.env.settings.dinkyAddr=Dinky \u5730\u5740 +sys.env.settings.dinkyAddr.note=\u8BE5\u5730\u5740\u5FC5\u987B\u4E0EDinky Application\u540E\u53F0url\u4E2D\u914D\u7F6E\u7684\u5730\u5740\u76F8\u540C +sys.dolphinscheduler.settings.enable=\u662F\u5426\u542F\u7528 DolphinScheduler +sys.dolphinscheduler.settings.enable.note=\u662F\u5426\u542F\u7528 DolphinScheduler ,\u542F\u7528\u540E\u624D\u80FD\u4F7F\u7528 DolphinScheduler \u7684\u76F8\u5173\u529F\u80FD, \u8BF7\u786E\u4FDD DolphinScheduler \u7684\u76F8\u5173\u914D\u7F6E\u6B63\u786E +sys.dolphinscheduler.settings.url=DolphinScheduler \u5730\u5740 +sys.dolphinscheduler.settings.url.note=\u5730\u5740\u5FC5\u987B\u548CDolphinScheduler\u540E\u53F0\u914D\u7F6E\u7684\u5730\u5740\u4E00\u81F4\uFF0Ceg: http://127.0.0.1:12345/dolphinscheduler sys.dolphinscheduler.settings.token=DolphinScheduler Token -sys.dolphinscheduler.settings.token.note=DolphinScheduler的Token,请在DolphinScheduler的安全中心->令牌管理中创建一个token,并填入该配置中 -sys.dolphinscheduler.settings.projectName=DolphinScheduler 项目名 -sys.dolphinscheduler.settings.projectName.note=DolphinScheduler 中指定的项目名称,不区分大小写 -sys.ldap.settings.url=ldap服务地址 -sys.ldap.settings.url.note=ldap认证服务地址,例如:ldap://192.168.111.1:389 -sys.ldap.settings.userDn=登录用户名(DN) -sys.ldap.settings.userDn.note=用于连接ldap服务的用户名,或者管理员DN -sys.ldap.settings.userPassword=登录密码 -sys.ldap.settings.userPassword.note=用于连接ldap服务的密码 -sys.ldap.settings.timeLimit=连接超时 -sys.ldap.settings.timeLimit.note=连接ldap服务的最大时间,超过则断开 -sys.ldap.settings.baseDn=用户基础DN -sys.ldap.settings.baseDn.note=Dinky会在此基础dn下进行用户搜索,例如:ou=users,dc=dinky,dc=com -sys.ldap.settings.filter=用户过滤规则 -sys.ldap.settings.filter.note=使用ldap的filter语法进行用户过滤,例如 -sys.ldap.settings.autoload=登录时自动映射用户 -sys.ldap.settings.autoload.note=开启后,当用户使用LDAP登录时,如果没有相应的Dinky用户映射,则会自动拉取LDAP信息创建一个Dinky用户与之映射,如果关闭此功能,对于未导入的LDAP用户将无法登录 -sys.ldap.settings.defaultTeant=LDAP导入默认租户编码 -sys.ldap.settings.defaultTeant.note=开启自动导入用户后,新用户登录需要一个默认的租户编码,否则无法登录 -sys.ldap.settings.castUsername=LDAP用户名字段 -sys.ldap.settings.castUsername.note=需要填写一个LDAP中用户的属性字段来与Dinky用户对应,必须填写,一般可选为 cn 或者 uid表示用户唯一标识 -sys.ldap.settings.castNickname=LDAP昵称字段 -sys.ldap.settings.castNickname.note=需要填写一个LDAP中用户的属性字段来与Dinky昵称对应,必须填写,一般可选为 sn 或者其他标识,不要求唯一 -sys.ldap.settings.enable=是否启用ldap -sys.ldap.settings.enable.note=开启LDAP登录功能 -sys.metrics.settings.sys.enable=Dinky JVM Monitor 开关 -sys.metrics.settings.sys.enable.note=此开关会关系到Dinky JVM Monitor,决定监控页面中的Dinky Server显示,以及JVM Metrics采集 -sys.metrics.settings.sys.gatherTiming=Dinky JVM Metrics 采集时间粒度 -sys.metrics.settings.sys.gatherTiming.note=Dinky JVM Metrics 采集时间粒度,定时任务间隔触发 -sys.metrics.settings.flink.gatherTiming=Flink Metrics 采集时间粒度 -sys.metrics.settings.flink.gatherTiming.note=Flink Metrics 采集时间粒度,定时任务间隔触发 -sys.metrics.settings.flink.gatherTimeout=Flink Metrics 采集时间粒度,定时任务间隔触发 -sys.metrics.settings.flink.gatherTimeout.note=Flink Metrics 采集超时时长,定时任务间隔触发(此配置项应小于Flink Metrics 采集时间粒度) -sys.resource.settings.base.enable=是否启用Resource -sys.resource.settings.base.enable.note=启用资源管理功能,如果切换存储模式时,需关闭此开关,相关配置完成后,再开启 -sys.resource.settings.base.upload.base.path=上传目录的根路径 -sys.resource.settings.base.upload.base.path.note=资源存储在HDFS/OSS路径上,资源文件将存储到此基本路径,自行配置,请确保该目录存在于相关存储系统上并具有读写权限。推荐 -sys.resource.settings.base.model=存储模式 -sys.resource.settings.base.model.note=支持HDFS、OSS,切换选项后即可生效,同时并迁移资源文件 -sys.resource.settings.oss.endpoint=对象存储服务的URL -sys.resource.settings.oss.endpoint.note=例如:https://oss-cn-hangzhou.aliyuncs.com +sys.dolphinscheduler.settings.token.note=DolphinScheduler\u7684Token\uFF0C\u8BF7\u5728DolphinScheduler\u7684\u5B89\u5168\u4E2D\u5FC3->\u4EE4\u724C\u7BA1\u7406\u4E2D\u521B\u5EFA\u4E00\u4E2Atoken\uFF0C\u5E76\u586B\u5165\u8BE5\u914D\u7F6E\u4E2D +sys.dolphinscheduler.settings.projectName=DolphinScheduler \u9879\u76EE\u540D +sys.dolphinscheduler.settings.projectName.note=DolphinScheduler \u4E2D\u6307\u5B9A\u7684\u9879\u76EE\u540D\u79F0\uFF0C\u4E0D\u533A\u5206\u5927\u5C0F\u5199 +sys.ldap.settings.url=ldap\u670D\u52A1\u5730\u5740 +sys.ldap.settings.url.note=ldap\u8BA4\u8BC1\u670D\u52A1\u5730\u5740\uFF0C\u4F8B\u5982\uFF1Aldap://192.168.111.1:389 +sys.ldap.settings.userDn=\u767B\u5F55\u7528\u6237\u540D\uFF08DN\uFF09 +sys.ldap.settings.userDn.note=\u7528\u4E8E\u8FDE\u63A5ldap\u670D\u52A1\u7684\u7528\u6237\u540D\uFF0C\u6216\u8005\u7BA1\u7406\u5458DN +sys.ldap.settings.userPassword=\u767B\u5F55\u5BC6\u7801 +sys.ldap.settings.userPassword.note=\u7528\u4E8E\u8FDE\u63A5ldap\u670D\u52A1\u7684\u5BC6\u7801 +sys.ldap.settings.timeLimit=\u8FDE\u63A5\u8D85\u65F6 +sys.ldap.settings.timeLimit.note=\u8FDE\u63A5ldap\u670D\u52A1\u7684\u6700\u5927\u65F6\u95F4\uFF0C\u8D85\u8FC7\u5219\u65AD\u5F00 +sys.ldap.settings.baseDn=\u7528\u6237\u57FA\u7840DN +sys.ldap.settings.baseDn.note=Dinky\u4F1A\u5728\u6B64\u57FA\u7840dn\u4E0B\u8FDB\u884C\u7528\u6237\u641C\u7D22,\u4F8B\u5982\uFF1Aou=users,dc=dinky,dc=com +sys.ldap.settings.filter=\u7528\u6237\u8FC7\u6EE4\u89C4\u5219 +sys.ldap.settings.filter.note=\u4F7F\u7528ldap\u7684filter\u8BED\u6CD5\u8FDB\u884C\u7528\u6237\u8FC7\u6EE4\uFF0C\u4F8B\u5982 +sys.ldap.settings.autoload=\u767B\u5F55\u65F6\u81EA\u52A8\u6620\u5C04\u7528\u6237 +sys.ldap.settings.autoload.note=\u5F00\u542F\u540E\uFF0C\u5F53\u7528\u6237\u4F7F\u7528LDAP\u767B\u5F55\u65F6\uFF0C\u5982\u679C\u6CA1\u6709\u76F8\u5E94\u7684Dinky\u7528\u6237\u6620\u5C04\uFF0C\u5219\u4F1A\u81EA\u52A8\u62C9\u53D6LDAP\u4FE1\u606F\u521B\u5EFA\u4E00\u4E2ADinky\u7528\u6237\u4E0E\u4E4B\u6620\u5C04\uFF0C\u5982\u679C\u5173\u95ED\u6B64\u529F\u80FD\uFF0C\u5BF9\u4E8E\u672A\u5BFC\u5165\u7684LDAP\u7528\u6237\u5C06\u65E0\u6CD5\u767B\u5F55 +sys.ldap.settings.defaultTeant=LDAP\u5BFC\u5165\u9ED8\u8BA4\u79DF\u6237\u7F16\u7801 +sys.ldap.settings.defaultTeant.note=\u5F00\u542F\u81EA\u52A8\u5BFC\u5165\u7528\u6237\u540E\uFF0C\u65B0\u7528\u6237\u767B\u5F55\u9700\u8981\u4E00\u4E2A\u9ED8\u8BA4\u7684\u79DF\u6237\u7F16\u7801\uFF0C\u5426\u5219\u65E0\u6CD5\u767B\u5F55 +sys.ldap.settings.castUsername=LDAP\u7528\u6237\u540D\u5B57\u6BB5 +sys.ldap.settings.castUsername.note=\u9700\u8981\u586B\u5199\u4E00\u4E2ALDAP\u4E2D\u7528\u6237\u7684\u5C5E\u6027\u5B57\u6BB5\u6765\u4E0EDinky\u7528\u6237\u5BF9\u5E94\uFF0C\u5FC5\u987B\u586B\u5199\uFF0C\u4E00\u822C\u53EF\u9009\u4E3A cn \u6216\u8005 uid\u8868\u793A\u7528\u6237\u552F\u4E00\u6807\u8BC6 +sys.ldap.settings.castNickname=LDAP\u6635\u79F0\u5B57\u6BB5 +sys.ldap.settings.castNickname.note=\u9700\u8981\u586B\u5199\u4E00\u4E2ALDAP\u4E2D\u7528\u6237\u7684\u5C5E\u6027\u5B57\u6BB5\u6765\u4E0EDinky\u6635\u79F0\u5BF9\u5E94\uFF0C\u5FC5\u987B\u586B\u5199\uFF0C\u4E00\u822C\u53EF\u9009\u4E3A sn \u6216\u8005\u5176\u4ED6\u6807\u8BC6\uFF0C\u4E0D\u8981\u6C42\u552F\u4E00 +sys.ldap.settings.enable=\u662F\u5426\u542F\u7528ldap +sys.ldap.settings.enable.note=\u5F00\u542FLDAP\u767B\u5F55\u529F\u80FD +sys.metrics.settings.sys.enable=Dinky JVM Monitor \u5F00\u5173 +sys.metrics.settings.sys.enable.note=\u6B64\u5F00\u5173\u4F1A\u5173\u7CFB\u5230Dinky JVM Monitor\uFF0C\u51B3\u5B9A\u76D1\u63A7\u9875\u9762\u4E2D\u7684Dinky Server\u663E\u793A\uFF0C\u4EE5\u53CAJVM Metrics\u91C7\u96C6 +sys.metrics.settings.sys.gatherTiming=Dinky JVM Metrics \u91C7\u96C6\u65F6\u95F4\u7C92\u5EA6 +sys.metrics.settings.sys.gatherTiming.note=Dinky JVM Metrics \u91C7\u96C6\u65F6\u95F4\u7C92\u5EA6\uFF0C\u5B9A\u65F6\u4EFB\u52A1\u95F4\u9694\u89E6\u53D1 +sys.metrics.settings.flink.gatherTiming=Flink Metrics \u91C7\u96C6\u65F6\u95F4\u7C92\u5EA6 +sys.metrics.settings.flink.gatherTiming.note=Flink Metrics \u91C7\u96C6\u65F6\u95F4\u7C92\u5EA6\uFF0C\u5B9A\u65F6\u4EFB\u52A1\u95F4\u9694\u89E6\u53D1 +sys.metrics.settings.flink.gatherTimeout=Flink Metrics \u91C7\u96C6\u65F6\u95F4\u7C92\u5EA6\uFF0C\u5B9A\u65F6\u4EFB\u52A1\u95F4\u9694\u89E6\u53D1 +sys.metrics.settings.flink.gatherTimeout.note=Flink Metrics \u91C7\u96C6\u8D85\u65F6\u65F6\u957F\uFF0C\u5B9A\u65F6\u4EFB\u52A1\u95F4\u9694\u89E6\u53D1\uFF08\u6B64\u914D\u7F6E\u9879\u5E94\u5C0F\u4E8EFlink Metrics \u91C7\u96C6\u65F6\u95F4\u7C92\u5EA6\uFF09 +sys.resource.settings.base.enable=\u662F\u5426\u542F\u7528Resource +sys.resource.settings.base.enable.note=\u542F\u7528\u8D44\u6E90\u7BA1\u7406\u529F\u80FD\uFF0C\u5982\u679C\u5207\u6362\u5B58\u50A8\u6A21\u5F0F\u65F6\uFF0C\u9700\u5173\u95ED\u6B64\u5F00\u5173\uFF0C\u76F8\u5173\u914D\u7F6E\u5B8C\u6210\u540E\uFF0C\u518D\u5F00\u542F +sys.resource.settings.base.upload.base.path=\u4E0A\u4F20\u76EE\u5F55\u7684\u6839\u8DEF\u5F84 +sys.resource.settings.base.upload.base.path.note=\u8D44\u6E90\u5B58\u50A8\u5728HDFS/OSS\u8DEF\u5F84\u4E0A\uFF0C\u8D44\u6E90\u6587\u4EF6\u5C06\u5B58\u50A8\u5230\u6B64\u57FA\u672C\u8DEF\u5F84\uFF0C\u81EA\u884C\u914D\u7F6E\uFF0C\u8BF7\u786E\u4FDD\u8BE5\u76EE\u5F55\u5B58\u5728\u4E8E\u76F8\u5173\u5B58\u50A8\u7CFB\u7EDF\u4E0A\u5E76\u5177\u6709\u8BFB\u5199\u6743\u9650\u3002\u63A8\u8350 +sys.resource.settings.base.model=\u5B58\u50A8\u6A21\u5F0F +sys.resource.settings.base.model.note=\u652F\u6301HDFS\u3001OSS\uFF0C\u5207\u6362\u9009\u9879\u540E\u5373\u53EF\u751F\u6548\uFF0C\u540C\u65F6\u5E76\u8FC1\u79FB\u8D44\u6E90\u6587\u4EF6 +sys.resource.settings.oss.endpoint=\u5BF9\u8C61\u5B58\u50A8\u670D\u52A1\u7684URL +sys.resource.settings.oss.endpoint.note=\u4F8B\u5982\uFF1Ahttps://oss-cn-hangzhou.aliyuncs.com sys.resource.settings.oss.accessKey=Access key -sys.resource.settings.oss.accessKey.note=Access key就像用户ID,可以唯一标识你的账户 +sys.resource.settings.oss.accessKey.note=Access key\u5C31\u50CF\u7528\u6237ID\uFF0C\u53EF\u4EE5\u552F\u4E00\u6807\u8BC6\u4F60\u7684\u8D26\u6237 sys.resource.settings.oss.secretKey=Secret key -sys.resource.settings.oss.secretKey.note=Secret key是你账户的密码 -sys.resource.settings.oss.bucketName=存储桶名称 -sys.resource.settings.oss.bucketName.note=默认的存储桶名称 -sys.resource.settings.oss.region=区域 -sys.resource.settings.oss.region.note=区域 -sys.resource.settings.hdfs.root.user=HDFS操作用户名 -sys.resource.settings.hdfs.root.user.note=HDFS操作用户名 +sys.resource.settings.oss.secretKey.note=Secret key\u662F\u4F60\u8D26\u6237\u7684\u5BC6\u7801 +sys.resource.settings.oss.bucketName=\u5B58\u50A8\u6876\u540D\u79F0 +sys.resource.settings.oss.bucketName.note=\u9ED8\u8BA4\u7684\u5B58\u50A8\u6876\u540D\u79F0 +sys.resource.settings.oss.region=\u533A\u57DF +sys.resource.settings.oss.region.note=\u533A\u57DF +sys.resource.settings.hdfs.root.user=HDFS\u64CD\u4F5C\u7528\u6237\u540D +sys.resource.settings.hdfs.root.user.note=HDFS\u64CD\u4F5C\u7528\u6237\u540D sys.resource.settings.hdfs.fs.defaultFS=HDFS defaultFS -sys.resource.settings.hdfs.fs.defaultFS.note=fs.defaultFS 配置项,例如远程:hdfs://localhost:9000,本地:file:/// +sys.resource.settings.hdfs.fs.defaultFS.note=fs.defaultFS \u914D\u7F6E\u9879\uFF0C\u4F8B\u5982\u8FDC\u7A0B\uFF1Ahdfs://localhost:9000\uFF0C\u672C\u5730\uFF1Afile:/// #Dinky Gateway -gateway.kubernetes.test.failed=测试 Flink 配置失败: +gateway.kubernetes.test.failed=\u6D4B\u8BD5 Flink \u914D\u7F6E\u5931\u8D25\uFF1A # Task -task.status.is.not.done=当前作业状态未停止,请停止后操作 -task.sql.explain.failed=sql解析失败,请检查 -task.update.failed=Task更新失败 +task.status.is.not.done=\u5F53\u524D\u4F5C\u4E1A\u72B6\u6001\u672A\u505C\u6B62\uFF0C\u8BF7\u505C\u6B62\u540E\u64CD\u4F5C +task.sql.explain.failed=sql\u89E3\u6790\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5 +task.update.failed=Task\u66F4\u65B0\u5931\u8D25 # process -process.submit.submitTask=提交作业 -process.submit.checkSql=检查作业 -process.submit.execute=执行作业 -process.submit.buildConfig=构建配置信息 -process.submit.execute.commSql=执行普通sql -process.submit.execute.flinkSql=执行flinkSql -process.register.exits=当前任务正在执行,请勿重复提交,如有问题请前往配置中心查看 +process.submit.submitTask=\u63D0\u4EA4\u4F5C\u4E1A +process.submit.checkSql=\u68C0\u67E5\u4F5C\u4E1A +process.submit.execute=\u6267\u884C\u4F5C\u4E1A +process.submit.buildConfig=\u6784\u5EFA\u914D\u7F6E\u4FE1\u606F +process.submit.execute.commSql=\u6267\u884C\u666E\u901Asql +process.submit.execute.flinkSql=\u6267\u884CflinkSql +process.register.exits=\u5F53\u524D\u4EFB\u52A1\u6B63\u5728\u6267\u884C\uFF0C\u8BF7\u52FF\u91CD\u590D\u63D0\u4EA4\uFF0C\u5982\u6709\u95EE\u9898\u8BF7\u524D\u5F80\u914D\u7F6E\u4E2D\u5FC3\u67E5\u770B # resource -resource.root.dir.not.allow.delete=根目录不允许删除 -resource.dir.or.file.not.exist=资源目录或文件不存在 \ No newline at end of file +resource.root.dir.not.allow.delete=\u6839\u76EE\u5F55\u4E0D\u5141\u8BB8\u5220\u9664 +resource.dir.or.file.not.exist=\u8D44\u6E90\u76EE\u5F55\u6216\u6587\u4EF6\u4E0D\u5B58\u5728 \ No newline at end of file diff --git a/dinky-web/config/config.ts b/dinky-web/config/config.ts index 347dfaaef7..86f20ba35a 100644 --- a/dinky-web/config/config.ts +++ b/dinky-web/config/config.ts @@ -152,7 +152,7 @@ export default defineConfig({ * @doc https://umijs.org/docs/max/request */ request: { - dataField: 'datas' + dataField: 'data' }, /** * @name 权限插件 diff --git a/dinky-web/src/app.tsx b/dinky-web/src/app.tsx index a4c098dee2..d40f91100f 100644 --- a/dinky-web/src/app.tsx +++ b/dinky-web/src/app.tsx @@ -59,7 +59,7 @@ export function patchRoutes({ routes }: any) { const queryUserInfo = async () => { return getDataByParamsReturnResult(API_CONSTANTS.CURRENT_USER).then((result) => { - const { user, roleList, tenantList, currentTenant, menuList, saTokenInfo } = result.datas; + const { user, roleList, tenantList, currentTenant, menuList, saTokenInfo } = result.data; const currentUser: API.CurrentUser = { user: { ...user, diff --git a/dinky-web/src/components/FlinkDag/index.tsx b/dinky-web/src/components/FlinkDag/index.tsx index bc8447ed92..1c52c8aff5 100644 --- a/dinky-web/src/components/FlinkDag/index.tsx +++ b/dinky-web/src/components/FlinkDag/index.tsx @@ -67,8 +67,8 @@ const RenderCheckpoint = (id: string, checkPoints: any) => { } getData(API_CONSTANTS.READ_CHECKPOINT, { path: selectPath, operatorId: id }).then((res) => { - const genData = Object.keys(res.datas).map((x) => { - const datum = res.datas[x]; + const genData = Object.keys(res.data).map((x) => { + const datum = res.data[x]; return { key: x, label: x, @@ -80,7 +80,7 @@ const RenderCheckpoint = (id: string, checkPoints: any) => { label: y, children: ( { return { title: z, diff --git a/dinky-web/src/components/JobTags/JobLifeCycleTag.tsx b/dinky-web/src/components/JobTags/JobLifeCycleTag.tsx index d558327863..a9f92b521d 100644 --- a/dinky-web/src/components/JobTags/JobLifeCycleTag.tsx +++ b/dinky-web/src/components/JobTags/JobLifeCycleTag.tsx @@ -19,12 +19,7 @@ import { StatusTagProps } from '@/components/JobTags/data'; import { JOB_LIFE_CYCLE } from '@/pages/DevOps/constants'; import { l } from '@/utils/intl'; -import { - CameraOutlined, - CarryOutOutlined, - CloseCircleOutlined, - EditOutlined -} from '@ant-design/icons'; +import { CameraOutlined, CloseCircleOutlined, EditOutlined } from '@ant-design/icons'; import { Tag } from 'antd'; /** @@ -44,19 +39,12 @@ const JobLifeCycleTag = (props: StatusTagProps) => { color: 'default', text: l('global.table.lifecycle.dev') }; - case JOB_LIFE_CYCLE.RELEASE: + case JOB_LIFE_CYCLE.PUBLISH: return { icon: , color: 'green', text: l('global.table.lifecycle.publish') }; - - case JOB_LIFE_CYCLE.ONLINE: - return { - icon: , - color: 'blue', - text: l('global.table.lifecycle.online') - }; default: return { icon: , diff --git a/dinky-web/src/hooks/useService.tsx b/dinky-web/src/hooks/useService.tsx index 2c37f8d7e5..fdb1e1ff28 100644 --- a/dinky-web/src/hooks/useService.tsx +++ b/dinky-web/src/hooks/useService.tsx @@ -59,7 +59,7 @@ export const RequestProvider = memo(({ children }) => { return request(url, { ...opts, method }); }, { - formatResult: (result) => result?.datas, + formatResult: (result: { data: any }) => result?.data, requestMethod: (requestOptions: any) => { if (typeof requestOptions === 'string') { return request(requestOptions); diff --git a/dinky-web/src/locales/en-US/global.ts b/dinky-web/src/locales/en-US/global.ts index 77a82411b9..061b06cf36 100644 --- a/dinky-web/src/locales/en-US/global.ts +++ b/dinky-web/src/locales/en-US/global.ts @@ -149,6 +149,7 @@ export default { 'global.table.lifecycle.dev': 'Develop', 'global.table.execmode.batch': 'Batch Mode', 'global.table.execmode.streaming': 'Stream Mode', + 'global.table.lifecycle.publishing': 'Publishing', 'global.table.lifecycle.publish': 'Publish', 'global.table.lifecycle.stopped': 'Stopped', 'global.table.lifecycle.online': 'Online', diff --git a/dinky-web/src/locales/en-US/menu.ts b/dinky-web/src/locales/en-US/menu.ts index fd1f66342b..8201087513 100644 --- a/dinky-web/src/locales/en-US/menu.ts +++ b/dinky-web/src/locales/en-US/menu.ts @@ -82,7 +82,7 @@ export default { 'menu.datastudio.metadata': 'Metadata', 'menu.datastudio.console': 'Console', 'menu.datastudio.jobConfig': 'Job Config', - 'menu.datastudio.executeConfig': 'Execute Config', + 'menu.datastudio.previewConfig': 'PreView Config', 'menu.datastudio.savePoint': 'Save Point', 'menu.datastudio.historyVision': 'History Vision', 'menu.datastudio.jobInfo': 'Job Info', diff --git a/dinky-web/src/locales/en-US/pages.ts b/dinky-web/src/locales/en-US/pages.ts index 58c2f0e140..0e3744ef44 100644 --- a/dinky-web/src/locales/en-US/pages.ts +++ b/dinky-web/src/locales/en-US/pages.ts @@ -350,7 +350,6 @@ export default { 'pages.datastudio.help.sqlChanged': 'Sql context or configure changed', 'pages.datastudio.help.sqlChangedPrompt': 'the remote context is not the same as the current page , will the data be flushed?', - 'pages.datastudio.label.execConfig': 'Execution Config', 'pages.datastudio.label.execConfig.autostop': 'AutoStop', 'pages.datastudio.label.execConfig.autostop.tip': 'Enable autostop, it will automatically stop the task after capturing the maximum number of records', diff --git a/dinky-web/src/locales/zh-CN/global.ts b/dinky-web/src/locales/zh-CN/global.ts index cd9152c5e7..331eaa0e46 100644 --- a/dinky-web/src/locales/zh-CN/global.ts +++ b/dinky-web/src/locales/zh-CN/global.ts @@ -145,10 +145,11 @@ export default { 'global.table.lifecycle': '生命周期', 'global.table.lifecycle.all': '全部', 'global.table.lifecycle.dev': '开发中', + 'global.table.lifecycle.publishing': '发布中', 'global.table.lifecycle.publish': '已发布', 'global.table.lifecycle.stopped': '已停止', 'global.table.lifecycle.online': '已上线', - 'global.table.lifecycle.offline': '已下线', + 'global.table.lifecycle.offline': '下线中', 'global.table.lifecycle.unknown': '未知', 'global.table.execmode': '执行模式', 'global.table.execmode.batch': '批模式', diff --git a/dinky-web/src/locales/zh-CN/menu.ts b/dinky-web/src/locales/zh-CN/menu.ts index 5922ebf065..5db0a9fd05 100644 --- a/dinky-web/src/locales/zh-CN/menu.ts +++ b/dinky-web/src/locales/zh-CN/menu.ts @@ -82,7 +82,7 @@ export default { 'menu.datastudio.metadata': '元数据', 'menu.datastudio.console': '控制台', 'menu.datastudio.jobConfig': '作业配置', - 'menu.datastudio.executeConfig': '执行配置', + 'menu.datastudio.previewConfig': '预览配置', 'menu.datastudio.savePoint': '保存点', 'menu.datastudio.historyVision': '历史版本', 'menu.datastudio.jobInfo': '作业信息', diff --git a/dinky-web/src/locales/zh-CN/pages.ts b/dinky-web/src/locales/zh-CN/pages.ts index 72007e3555..79f3b544e7 100644 --- a/dinky-web/src/locales/zh-CN/pages.ts +++ b/dinky-web/src/locales/zh-CN/pages.ts @@ -338,7 +338,6 @@ export default { 'pages.datastudio.sql.cacheConfigItem': '本地缓存配置', 'pages.datastudio.sql.serverConfigItem': '服务端配置', - 'pages.datastudio.label.execConfig': '执行配置', 'pages.datastudio.label.execConfig.autostop': '自动停止', 'pages.datastudio.label.execConfig.autostop.tip': '开启自动停止,将在捕获最大行数记录后自动停止任务', diff --git a/dinky-web/src/pages/AuthCenter/Tenant/components/TenantModalTransfer/TenantTransfer/index.tsx b/dinky-web/src/pages/AuthCenter/Tenant/components/TenantModalTransfer/TenantTransfer/index.tsx index 1e8b1a7c50..579e3cc79d 100644 --- a/dinky-web/src/pages/AuthCenter/Tenant/components/TenantModalTransfer/TenantTransfer/index.tsx +++ b/dinky-web/src/pages/AuthCenter/Tenant/components/TenantModalTransfer/TenantTransfer/index.tsx @@ -46,10 +46,10 @@ const TenantTransfer: React.FC = (props) => { getData(API_CONSTANTS.GET_USER_LIST_BY_TENANTID, { id: tenant.id }).then((result) => { setTenantTransferState((prevState) => ({ ...prevState, - userList: result.datas.users, - targetKeys: result.datas.userIds + userList: result.data.users, + targetKeys: result.data.userIds })); - handleChange(result.datas.userIds); + handleChange(result.data.userIds); }); }, []); diff --git a/dinky-web/src/pages/AuthCenter/User/components/RoleModalTransfer/RoleTransfer/index.tsx b/dinky-web/src/pages/AuthCenter/User/components/RoleModalTransfer/RoleTransfer/index.tsx index ba9a8a5db0..507de2d1fe 100644 --- a/dinky-web/src/pages/AuthCenter/User/components/RoleModalTransfer/RoleTransfer/index.tsx +++ b/dinky-web/src/pages/AuthCenter/User/components/RoleModalTransfer/RoleTransfer/index.tsx @@ -57,10 +57,10 @@ const RoleTransfer = (props: TransferFromProps) => { getData(API_CONSTANTS.GET_ROLES_BY_USERID, { id: role.id }).then((result) => { setRoleTransferState((prevState) => ({ ...prevState, - roleList: result.datas.roles, - targetKeys: result.datas.roleIds + roleList: result.data.roles, + targetKeys: result.data.roleIds })); - handleChange(result.datas.roleIds); + handleChange(result.data.roleIds); }); }, []); diff --git a/dinky-web/src/pages/AuthCenter/User/components/UserProTable/index.tsx b/dinky-web/src/pages/AuthCenter/User/components/UserProTable/index.tsx index cfd8e7d127..2924bfa847 100644 --- a/dinky-web/src/pages/AuthCenter/User/components/UserProTable/index.tsx +++ b/dinky-web/src/pages/AuthCenter/User/components/UserProTable/index.tsx @@ -157,7 +157,7 @@ const UserProTable = () => { id: value.id }).then((res) => { const { - datas: { user, originalPassword } + data: { user, originalPassword } } = res; SuccessMessage( l('user.resetPasswordSuccess', '', { diff --git a/dinky-web/src/pages/DataStudio/BottomContainer/Result/index.tsx b/dinky-web/src/pages/DataStudio/BottomContainer/Result/index.tsx index 0516f4f57b..ea6a98d990 100644 --- a/dinky-web/src/pages/DataStudio/BottomContainer/Result/index.tsx +++ b/dinky-web/src/pages/DataStudio/BottomContainer/Result/index.tsx @@ -44,13 +44,12 @@ type Data = { }; const Result = (props: any) => { const { - saveTabs, tabs: { panes, activeKey } } = props; const [data, setData] = useState({}); const [loading, setLoading] = useState(true); const currentTabs = getCurrentTab(panes, activeKey); - const current = getCurrentData(panes, activeKey) ?? []; + const current = getCurrentData(panes, activeKey) ?? {}; const [searchText, setSearchText] = useState(''); const [searchedColumn, setSearchedColumn] = useState(''); @@ -135,9 +134,9 @@ const Result = (props: any) => { const res = await handleGetOption('api/studio/getCommonSqlData', 'Get Data', { taskId: params.taskId }); - if (res.datas) { - consoleData.result = res.datas; - setData(res.datas); + if (res.data) { + consoleData.result = res.data; + setData(res.data); } } else { // flink sql @@ -146,16 +145,16 @@ const Result = (props: any) => { const res = await handleGetOptionWithoutMsg(API_CONSTANTS.GET_LATEST_HISTORY_BY_ID, { id: current.id }); - const historyData = res.datas; + const historyData = res.data; if ('2' == historyData.status) { const historyId = historyData.id; const tableData = await handleGetOption('api/studio/getJobData', 'Get Data', { jobId: historyId }); - const datas = tableData.datas; - if (datas.success) { - consoleData.result = datas; - setData(datas); + const data = tableData.data; + if (data.success) { + consoleData.result = data; + setData(data); } else { consoleData.result = {}; setData({}); diff --git a/dinky-web/src/pages/DataStudio/BottomContainer/TableData/index.tsx b/dinky-web/src/pages/DataStudio/BottomContainer/TableData/index.tsx index f8abc8ecad..0207862e98 100644 --- a/dinky-web/src/pages/DataStudio/BottomContainer/TableData/index.tsx +++ b/dinky-web/src/pages/DataStudio/BottomContainer/TableData/index.tsx @@ -82,7 +82,7 @@ const TableData = (props: any) => { const addTab = async () => { if (!statement) return; const result = await getPrintTables(statement); - const tables: PrintTable[] = result.datas; + const tables: PrintTable[] = result.data; let selectTable: PrintTable; Modal.confirm({ diff --git a/dinky-web/src/pages/DataStudio/HeaderContainer/Explain/index.tsx b/dinky-web/src/pages/DataStudio/HeaderContainer/Explain/index.tsx index 490b316b12..223a8f9d08 100644 --- a/dinky-web/src/pages/DataStudio/HeaderContainer/Explain/index.tsx +++ b/dinky-web/src/pages/DataStudio/HeaderContainer/Explain/index.tsx @@ -78,20 +78,20 @@ const Explain: React.FC = (props: any) => { result.then((res) => { const errorExplainData: [] = []; let errorCount: number = 0; - if (!res.datas) { + if (!res.data) { setResult({res.msg}); return; } else { - for (let i in res.datas) { - if (!res.datas[i].explainTrue || !res.datas[i].parseTrue) { + for (let i in res.data) { + if (!res.data[i].explainTrue || !res.data[i].parseTrue) { // @ts-ignore - errorExplainData.push(res.datas[i]); + errorExplainData.push(res.data[i]); errorCount++; } } } if (errorCount == 0) { - setExplainData(res.datas); + setExplainData(res.data); setResult({l('pages.datastudio.explain.validate.allright')}); } else { setExplainData(errorExplainData); diff --git a/dinky-web/src/pages/DataStudio/HeaderContainer/function.tsx b/dinky-web/src/pages/DataStudio/HeaderContainer/function.tsx index 915229d9fa..d0caab4bfa 100644 --- a/dinky-web/src/pages/DataStudio/HeaderContainer/function.tsx +++ b/dinky-web/src/pages/DataStudio/HeaderContainer/function.tsx @@ -38,7 +38,7 @@ export const projectCommonShow = (type?: TabsPageType) => { }; export const isOnline = (data: TaskDataType | undefined) => { - return data ? JOB_LIFE_CYCLE.ONLINE == data.step : false; + return data ? JOB_LIFE_CYCLE.PUBLISH == data.step : false; }; export const isRunning = (data: TaskDataType | undefined) => { diff --git a/dinky-web/src/pages/DataStudio/HeaderContainer/index.tsx b/dinky-web/src/pages/DataStudio/HeaderContainer/index.tsx index 3bb77d5937..8c2b7d160c 100644 --- a/dinky-web/src/pages/DataStudio/HeaderContainer/index.tsx +++ b/dinky-web/src/pages/DataStudio/HeaderContainer/index.tsx @@ -41,6 +41,7 @@ import { SettingConfigKeyEnum } from '@/pages/SettingCenter/GlobalSetting/Settin import { handlePutDataJson } from '@/services/BusinessCrud'; import { BaseConfigProperties } from '@/types/SettingCenter/data'; import { l } from '@/utils/intl'; +import { SuccessMessageAsync } from '@/utils/messages'; import { connect } from '@@/exports'; import { ApartmentOutlined, @@ -56,7 +57,7 @@ import { ScheduleOutlined, SendOutlined } from '@ant-design/icons'; -import { Breadcrumb, Descriptions, message, Modal, Space } from 'antd'; +import { Breadcrumb, Descriptions, Modal, Space } from 'antd'; import { ButtonProps } from 'antd/es/button/button'; import React, { useEffect, useState } from 'react'; @@ -92,7 +93,6 @@ const HeaderContainer = (props: any) => { } = props; const [modal, contextHolder] = Modal.useModal(); - const [messageApi, messageContextHolder] = message.useMessage(); // 检查是否开启 ds 配置 & 如果 const [enableDs] = useState( @@ -147,18 +147,18 @@ const HeaderContainer = (props: any) => { updateJobRunningMsg({ taskId: currentData.id, jobName: currentData.name, - jobState: res.datas.status, + jobState: res.data.status, runningLog: res.msg }); - messageApi.success(l('pages.datastudio.editor.debug.success')); + await SuccessMessageAsync(l('pages.datastudio.editor.debug.success')); currentData.status = JOB_STATUS.RUNNING; - if (currentTab) currentTab.console.result = res.datas.result; + if (currentTab) currentTab.console.result = res.data.result; saveTabs({ ...props.tabs }); }; const handlerSubmit = async () => { if (!currentData) return; - const saved = currentData.step == JOB_LIFE_CYCLE.ONLINE ? true : await handleSave(); + const saved = currentData.step == JOB_LIFE_CYCLE.PUBLISH ? true : await handleSave(); if (!saved) return; const res = await executeSql( @@ -170,10 +170,10 @@ const HeaderContainer = (props: any) => { updateJobRunningMsg({ taskId: currentData.id, jobName: currentData.name, - jobState: res.datas.status, + jobState: res.data.status, runningLog: res.msg }); - messageApi.success(l('pages.datastudio.editor.exec.success')); + await SuccessMessageAsync(l('pages.datastudio.editor.exec.success')); currentData.status = JOB_STATUS.RUNNING; saveTabs({ ...props.tabs }); }; @@ -181,13 +181,13 @@ const HeaderContainer = (props: any) => { const handleChangeJobLife = async () => { if (!currentData) return; if (isOnline(currentData)) { - await cancelTask('', currentData.id); + await cancelTask(l('global.table.lifecycle.offline'), currentData.id); currentData.step = JOB_LIFE_CYCLE.DEVELOP; } else { const saved = await handleSave(); if (saved) { - await onLineTask(currentData.id); - currentData.step = JOB_LIFE_CYCLE.ONLINE; + await onLineTask(l('global.table.lifecycle.publishing'), currentData.id); + currentData.step = JOB_LIFE_CYCLE.PUBLISH; } } saveTabs({ ...props.tabs }); @@ -200,7 +200,7 @@ const HeaderContainer = (props: any) => { title: l('pages.datastudio.editor.explan.tip'), width: '100%', icon: null, - content: , + content: , cancelButtonProps: { style: { display: 'none' } } }); } @@ -376,7 +376,6 @@ const HeaderContainer = (props: any) => { })} {contextHolder} - {messageContextHolder} ); }; diff --git a/dinky-web/src/pages/DataStudio/HeaderContainer/service.tsx b/dinky-web/src/pages/DataStudio/HeaderContainer/service.tsx index 2180b2ba65..f899b2ab26 100644 --- a/dinky-web/src/pages/DataStudio/HeaderContainer/service.tsx +++ b/dinky-web/src/pages/DataStudio/HeaderContainer/service.tsx @@ -41,8 +41,8 @@ export function cancelTask(title: string, id: number) { return handleGetOption('api/task/cancel', title, { id }); } -export function onLineTask(id: number) { - return handleGetOption('api/task/onLineTask', '', { taskId: id }); +export function onLineTask(title = '', id: number) { + return handleGetOption('api/task/onLineTask', title, { taskId: id }); } export function offLinelTask(id: number) { diff --git a/dinky-web/src/pages/DataStudio/LeftContainer/Catalog/service.tsx b/dinky-web/src/pages/DataStudio/LeftContainer/Catalog/service.tsx index 3de7a58576..48406e9366 100644 --- a/dinky-web/src/pages/DataStudio/LeftContainer/Catalog/service.tsx +++ b/dinky-web/src/pages/DataStudio/LeftContainer/Catalog/service.tsx @@ -22,11 +22,11 @@ import { postAll } from '@/services/api'; import { getDataByParamsReturnResult } from '@/services/BusinessCrud'; export async function getMSSchemaInfo(params: StudioMetaStoreParam) { - return (await postAll('/api/studio/getMSSchemaInfo', params)).datas; + return (await postAll('/api/studio/getMSSchemaInfo', params)).data; } export async function getMSCatalogs(params: StudioMetaStoreParam) { - return (await postAll('/api/studio/getMSCatalogs', params)).datas; + return (await postAll('/api/studio/getMSCatalogs', params)).data; } export async function getMSFlinkColumns(params: StudioMetaStoreParam) { - return (await getDataByParamsReturnResult('/api/studio/getMSFlinkColumns', params)).datas; + return (await getDataByParamsReturnResult('/api/studio/getMSFlinkColumns', params)).data; } diff --git a/dinky-web/src/pages/DataStudio/LeftContainer/MetaData/service.tsx b/dinky-web/src/pages/DataStudio/LeftContainer/MetaData/service.tsx index af12f796cd..49d8623165 100644 --- a/dinky-web/src/pages/DataStudio/LeftContainer/MetaData/service.tsx +++ b/dinky-web/src/pages/DataStudio/LeftContainer/MetaData/service.tsx @@ -28,7 +28,7 @@ export async function showMetaDataTable(id: number) { l('pages.metadata.DataSearch'), { id: id } ); - return result?.datas; + return result?.data; } catch (e) { console.error(e); return null; diff --git a/dinky-web/src/pages/DataStudio/LeftContainer/Project/JobTree/index.tsx b/dinky-web/src/pages/DataStudio/LeftContainer/Project/JobTree/index.tsx index 2e9a6a6605..8aa7fb3e42 100644 --- a/dinky-web/src/pages/DataStudio/LeftContainer/Project/JobTree/index.tsx +++ b/dinky-web/src/pages/DataStudio/LeftContainer/Project/JobTree/index.tsx @@ -24,7 +24,7 @@ import { getLeafKeyList, getParentKey } from '@/pages/DataStudio/LeftContainer/Project/function'; -import { StateType, TabsItemType } from '@/pages/DataStudio/model'; +import { StateType, STUDIO_MODEL, TabsItemType } from '@/pages/DataStudio/model'; import { BtnRoute } from '@/pages/DataStudio/route'; import { l } from '@/utils/intl'; import { connect } from '@@/exports'; @@ -42,13 +42,21 @@ type TreeProps = { onNodeClick: (info: any) => void; onRightClick: (info: any) => void; style?: React.CSSProperties; - selectedKeys: Key[]; selectKeyChange: (keys: Key[]) => void; + onExpand: (expandedKeys: Key[]) => void; }; const JobTree: React.FC = (props) => { - const { projectData, onNodeClick, style, height, onRightClick, selectKeyChange, selectedKeys } = - props; + const { + project: { data: projectData, expandKeys, selectKey }, + onNodeClick, + style, + height, + onRightClick, + selectKeyChange, + onExpand, + dispatch + } = props; const [searchValue, setSearchValueValue] = useState(''); const [data, setData] = useState(buildProjectTree(projectData, searchValue)); @@ -57,12 +65,14 @@ const JobTree: React.FC = (props) => { setData(buildProjectTree(projectData, searchValue)); }, [searchValue, projectData]); - const [expandedKeys, setExpandedKeys] = useState(); const [autoExpandParent, setAutoExpandParent] = useState(true); const onChangeSearch = (e: any) => { let { value } = e.target; if (!value) { - setExpandedKeys([]); + dispatch({ + type: STUDIO_MODEL.updateProjectExpandKey, + payload: [] + }); setSearchValueValue(value); return; } @@ -76,17 +86,19 @@ const JobTree: React.FC = (props) => { return null; }) .filter((item: any, i: number, self: any) => item && self.indexOf(item) === i); - setExpandedKeys(expandedKeys); + dispatch({ + type: STUDIO_MODEL.updateProjectExpandKey, + payload: expandedKeys + }); setSearchValueValue(value); setAutoExpandParent(true); }; - const onExpand = (expandedKeys: Key[]) => { - setExpandedKeys(expandedKeys); - }; - const expandAll = () => { - setExpandedKeys(getLeafKeyList(projectData)); + dispatch({ + type: STUDIO_MODEL.updateProjectExpandKey, + payload: getLeafKeyList(projectData) + }); }; const btn = BtnRoute['menu.datastudio.project']; @@ -102,7 +114,10 @@ const JobTree: React.FC = (props) => { return null; }) .filter((item: any, i: number, self: any) => item && self.indexOf(item) === i); - setExpandedKeys(expandedKeys); + dispatch({ + type: STUDIO_MODEL.updateProjectExpandKey, + payload: expandedKeys + }); setAutoExpandParent(true); selectKeyChange([treeKey]); } @@ -110,7 +125,11 @@ const JobTree: React.FC = (props) => { btn[1].onClick = expandAll; - btn[2].onClick = () => setExpandedKeys([]); + btn[2].onClick = () => + dispatch({ + type: STUDIO_MODEL.updateProjectExpandKey, + payload: [] + }); btn[3].onClick = positionKey; return ( @@ -128,8 +147,8 @@ const JobTree: React.FC = (props) => { className={'treeList'} onSelect={(_, info) => onNodeClick(info)} onRightClick={onRightClick} - expandedKeys={expandedKeys} - selectedKeys={selectedKeys} + expandedKeys={expandKeys} + selectedKeys={selectKey} onExpand={onExpand} treeData={data} autoExpandParent={autoExpandParent} @@ -146,5 +165,5 @@ const JobTree: React.FC = (props) => { export default connect(({ Studio }: { Studio: StateType }) => ({ height: Studio.toolContentHeight, - projectData: Studio.project.data + project: Studio.project }))(JobTree); diff --git a/dinky-web/src/pages/DataStudio/LeftContainer/Project/function.tsx b/dinky-web/src/pages/DataStudio/LeftContainer/Project/function.tsx index 824954f66c..b630595478 100644 --- a/dinky-web/src/pages/DataStudio/LeftContainer/Project/function.tsx +++ b/dinky-web/src/pages/DataStudio/LeftContainer/Project/function.tsx @@ -24,6 +24,7 @@ import { searchTreeNode } from '@/utils/function'; import { l } from '@/utils/intl'; import { Badge, Space } from 'antd'; import { PresetStatusColorType } from 'antd/es/_util/colors'; +import { Key } from 'react'; export const generateList = (data: any, list: any[]) => { for (const element of data) { @@ -52,15 +53,19 @@ export const getParentKey = (key: number | string, tree: any): any => { return parentKey; }; -export const getLeafKeyList = (tree: any): any => { - let leafKeyList = []; +export const getLeafKeyList = (tree: any[]): Key[] => { + let leafKeyList: Key[] = []; for (const node of tree) { - if (node.isLeaf) { - leafKeyList.push(node.id); - continue; - } - if (node.children) { - leafKeyList = leafKeyList.concat(getLeafKeyList(node.children)); + if (!node.isLeaf) { + // 目录节点 || is a directory node + leafKeyList.push(node.id); // 目录节点不需要递归 || directory nodes do not need to be recursive + if (node.children) { + // 目录节点的子节点需要递归 || the child nodes of the directory node need to be recursive + leafKeyList = leafKeyList.concat(getLeafKeyList(node.children)); // 递归 || recursive + } + } else { + // 非目录节点 | is not a directory node + leafKeyList = leafKeyList.concat(getLeafKeyList(node.children)); // 递归 || recursive } } return leafKeyList; diff --git a/dinky-web/src/pages/DataStudio/LeftContainer/Project/index.tsx b/dinky-web/src/pages/DataStudio/LeftContainer/Project/index.tsx index c3fd5ffd3e..9deb5ed55f 100644 --- a/dinky-web/src/pages/DataStudio/LeftContainer/Project/index.tsx +++ b/dinky-web/src/pages/DataStudio/LeftContainer/Project/index.tsx @@ -26,7 +26,12 @@ import { import FolderModal from '@/pages/DataStudio/LeftContainer/Project/FolderModal'; import JobModal from '@/pages/DataStudio/LeftContainer/Project/JobModal'; import JobTree from '@/pages/DataStudio/LeftContainer/Project/JobTree'; -import { StateType, STUDIO_MODEL, STUDIO_MODEL_ASYNC } from '@/pages/DataStudio/model'; +import { + DataStudioParams, + StateType, + STUDIO_MODEL, + STUDIO_MODEL_ASYNC +} from '@/pages/DataStudio/model'; import { handleAddOrUpdate, handleOption, @@ -48,6 +53,7 @@ const { Text } = Typography; const Project: React.FC = (props: connect) => { const { dispatch, + project: { expandKeys, selectKey }, tabs: { panes, activeKey } } = props; @@ -90,6 +96,15 @@ const Project: React.FC = (props: connect) => { rightClickedNode: { ...node, ...fullInfo }, value: fullInfo })); + // 设置选中的值 + dispatch({ type: STUDIO_MODEL.updateProjectSelectKey, payload: [key] }); + }; + + const onExpand = (expandedKeys: Key[]) => { + dispatch({ + type: STUDIO_MODEL.updateProjectExpandKey, + payload: [...expandedKeys, ...expandKeys] + }); }; /** @@ -106,8 +121,10 @@ const Project: React.FC = (props: connect) => { selectedKeys: [key], contextMenuOpen: false })); + dispatch({ type: STUDIO_MODEL.updateProjectSelectKey, payload: [key] }); if (!isLeaf) { + dispatch({ type: STUDIO_MODEL.updateProjectExpandKey, payload: [key, ...expandKeys] }); return; } @@ -154,9 +171,7 @@ const Project: React.FC = (props: connect) => { const options = { url: '', isLeaf: projectState.isCreateSub ? false : projectState.value.isLeaf, - parentId: projectState.isCreateSub - ? projectState.selectedKeys[0] - : projectState.value.parentId + parentId: projectState.isCreateSub ? selectKey[0] : projectState.value.parentId }; // 如果是编辑任务 或者 创建任务 , 则需要传入父级id @@ -191,7 +206,7 @@ const Project: React.FC = (props: connect) => { currentTabs.label = values.name; // currentTabs.params.taskData.name = values.name; const { params } = currentTabs; - const { taskData } = params; + const { taskData } = params as DataStudioParams; if (taskData) { taskData.name = values.name; } @@ -221,7 +236,7 @@ const Project: React.FC = (props: connect) => { * @returns {Promise} */ const handleDeleteSubmit = async () => { - const { key, isLeaf, name, type, taskId } = projectState.rightClickedNode; + const { key, isLeaf, name, type } = projectState.rightClickedNode; handleContextCancel(); if (!isLeaf) { await handleRemoveById(API_CONSTANTS.DELETE_CATALOGUE_BY_ID_URL, key, () => { @@ -317,7 +332,7 @@ const Project: React.FC = (props: connect) => { l('right.menu.paste'), { originCatalogueId: projectState.cutId, - targetParentId: projectState.selectedKeys[0] + targetParentId: selectKey[0] }, () => { // 重置 cutId @@ -378,10 +393,10 @@ const Project: React.FC = (props: connect) => {
- setProjectState((prevState) => ({ ...prevState, selectedKeys: keys })) + dispatch({ type: STUDIO_MODEL.updateProjectSelectKey, payload: keys }) } - selectedKeys={projectState.selectedKeys} onRightClick={handleRightClick} + onExpand={onExpand} onNodeClick={(info: any) => onNodeClick(info)} /> { }; export default connect(({ Studio }: { Studio: StateType }) => ({ - tabs: Studio.tabs + tabs: Studio.tabs, + project: Studio.project }))(Project); diff --git a/dinky-web/src/pages/DataStudio/LeftContainer/Project/service.tsx b/dinky-web/src/pages/DataStudio/LeftContainer/Project/service.tsx index 4d0e8dac0e..d85fac5eaf 100644 --- a/dinky-web/src/pages/DataStudio/LeftContainer/Project/service.tsx +++ b/dinky-web/src/pages/DataStudio/LeftContainer/Project/service.tsx @@ -22,7 +22,7 @@ import { postAll, putDataJson } from '@/services/api'; import { queryDataByParams } from '@/services/BusinessCrud'; export async function getTaskData() { - return (await postAll('/api/catalogue/getCatalogueTreeData')).datas; + return (await postAll('/api/catalogue/getCatalogueTreeData')).data; } export function getTaskDetails(id: number): Promise { return queryDataByParams('/api/task', { id: id }); diff --git a/dinky-web/src/pages/DataStudio/MiddleContainer/index.tsx b/dinky-web/src/pages/DataStudio/MiddleContainer/index.tsx index 10529f9472..4ca6d5fbd5 100644 --- a/dinky-web/src/pages/DataStudio/MiddleContainer/index.tsx +++ b/dinky-web/src/pages/DataStudio/MiddleContainer/index.tsx @@ -106,7 +106,8 @@ const MiddleContainer = (props: any) => { }); }; - const updateActiveKey = (key: string, value: string) => { + const updateActiveKey = (item: TabsItemType) => { + const { key, value, treeKey } = item; if (key === activeKey) { return; } @@ -119,12 +120,23 @@ const MiddleContainer = (props: any) => { payload: key }); - // 替换掉 . 为 /, 因为再 tree 里选中的 key 是 / 分割的 - const name = value.toString().replace('.', '/'); - dispatch({ - type: STUDIO_MODEL.updateDatabaseSelectKey, - payload: [name] - }); + // 这里如果加此项功能和定位功能重复 , 暂时注释 + // if (item.type === TabsPageType.project) { + // 更新左侧树选中的 key + // dispatch({ + // type: STUDIO_MODEL.updateProjectSelectKey, + // payload: [treeKey] + // }); + // } + + if (item.type === TabsPageType.metadata) { + // 替换掉 . 为 /, 因为再 tree 里选中的 key 是 / 分割的 + const name = value.toString().replace('.', '/'); + dispatch({ + type: STUDIO_MODEL.updateDatabaseSelectKey, + payload: [name] + }); + } }; /** @@ -158,7 +170,7 @@ const MiddleContainer = (props: any) => { const handleRightClick = (info: React.MouseEvent, item: TabsItemType) => { // 阻止默认右键事件 info.preventDefault(); - updateActiveKey(item.key, item.label); + updateActiveKey(item); // 设置选中的值 setIncludeTab(item); @@ -249,7 +261,7 @@ const MiddleContainer = (props: any) => { key: item.key, label: ( updateActiveKey(item.key, item.label)} + onClick={() => updateActiveKey(item)} size={0} onContextMenu={(e) => handleRightClick(e, item)} key={item.key} @@ -257,7 +269,7 @@ const MiddleContainer = (props: any) => { {getTabIcon(item.icon, 16)} {item.label} - {item.isModified ? '*' : ''} + {item.isModified ? ' *' : ''} ), diff --git a/dinky-web/src/pages/DataStudio/RightContainer/ExecuteConfig/CommonSql/index.tsx b/dinky-web/src/pages/DataStudio/RightContainer/PreViewConfig/CommonSql/index.tsx similarity index 100% rename from dinky-web/src/pages/DataStudio/RightContainer/ExecuteConfig/CommonSql/index.tsx rename to dinky-web/src/pages/DataStudio/RightContainer/PreViewConfig/CommonSql/index.tsx diff --git a/dinky-web/src/pages/DataStudio/RightContainer/ExecuteConfig/FlinkSql/index.tsx b/dinky-web/src/pages/DataStudio/RightContainer/PreViewConfig/FlinkSql/index.tsx similarity index 100% rename from dinky-web/src/pages/DataStudio/RightContainer/ExecuteConfig/FlinkSql/index.tsx rename to dinky-web/src/pages/DataStudio/RightContainer/PreViewConfig/FlinkSql/index.tsx diff --git a/dinky-web/src/pages/DataStudio/RightContainer/ExecuteConfig/index.tsx b/dinky-web/src/pages/DataStudio/RightContainer/PreViewConfig/index.tsx similarity index 92% rename from dinky-web/src/pages/DataStudio/RightContainer/ExecuteConfig/index.tsx rename to dinky-web/src/pages/DataStudio/RightContainer/PreViewConfig/index.tsx index aa05ee65fb..dd03176262 100644 --- a/dinky-web/src/pages/DataStudio/RightContainer/ExecuteConfig/index.tsx +++ b/dinky-web/src/pages/DataStudio/RightContainer/PreViewConfig/index.tsx @@ -19,11 +19,11 @@ import { getCurrentTab } from '@/pages/DataStudio/function'; import { StateType, TabsPageSubType } from '@/pages/DataStudio/model'; -import ExecuteConfigCommonSql from '@/pages/DataStudio/RightContainer/ExecuteConfig/CommonSql'; -import ExecuteConfigFlinkSql from '@/pages/DataStudio/RightContainer/ExecuteConfig/FlinkSql'; +import ExecuteConfigCommonSql from '@/pages/DataStudio/RightContainer/PreViewConfig/CommonSql'; +import ExecuteConfigFlinkSql from '@/pages/DataStudio/RightContainer/PreViewConfig/FlinkSql'; import { connect } from 'umi'; -const ExecuteConfig = (props: any) => { +const PreViewConfig = (props: any) => { const { tabs: { panes, activeKey } } = props; @@ -39,4 +39,4 @@ const ExecuteConfig = (props: any) => { export default connect(({ Studio }: { Studio: StateType }) => ({ tabs: Studio.tabs -}))(ExecuteConfig); +}))(PreViewConfig); diff --git a/dinky-web/src/pages/DataStudio/model.ts b/dinky-web/src/pages/DataStudio/model.ts index 7e0ca06cdb..deffc0e306 100644 --- a/dinky-web/src/pages/DataStudio/model.ts +++ b/dinky-web/src/pages/DataStudio/model.ts @@ -305,6 +305,8 @@ export type ModelType = { updateBottomHeight: Reducer; saveDataBase: Reducer; saveProject: Reducer; + updateProjectExpandKey: Reducer; + updateProjectSelectKey: Reducer; updateTabsActiveKey: Reducer; closeTab: Reducer; removeTag: Reducer; @@ -542,6 +544,20 @@ const Model: ModelType = { project: { ...state.project, data: payload } }; }, + + updateProjectExpandKey(state, { payload }) { + return { + ...state, + project: { ...state.project, expandKeys: payload } + }; + }, + updateProjectSelectKey(state, { payload }) { + return { + ...state, + project: { ...state.project, selectKey: payload } + }; + }, + /** * flink config options */ diff --git a/dinky-web/src/pages/DataStudio/route.tsx b/dinky-web/src/pages/DataStudio/route.tsx index 0c94b31ff6..a0296fa053 100644 --- a/dinky-web/src/pages/DataStudio/route.tsx +++ b/dinky-web/src/pages/DataStudio/route.tsx @@ -27,10 +27,10 @@ import { Catalog } from '@/pages/DataStudio/LeftContainer/Catalog'; import MetaData from '@/pages/DataStudio/LeftContainer/MetaData'; import Project from '@/pages/DataStudio/LeftContainer/Project'; import { TabsPageSubType, TabsPageType } from '@/pages/DataStudio/model'; -import ExecuteConfig from '@/pages/DataStudio/RightContainer/ExecuteConfig'; import HistoryVersion from '@/pages/DataStudio/RightContainer/HistoryVersion'; import JobConfig from '@/pages/DataStudio/RightContainer/JobConfig'; import JobInfo from '@/pages/DataStudio/RightContainer/JobInfo'; +import PreViewConfig from '@/pages/DataStudio/RightContainer/PreViewConfig'; import SavePoints from '@/pages/DataStudio/RightContainer/SavePoints'; import { convertCodeEditTheme } from '@/utils/function'; import { l } from '@/utils/intl'; @@ -46,8 +46,8 @@ import { FolderOutlined, HistoryOutlined, InfoCircleOutlined, + InsertRowRightOutlined, MonitorOutlined, - PlayCircleOutlined, PlusCircleOutlined, PlusOutlined, ReloadOutlined, @@ -96,11 +96,11 @@ export const RightSide: TabProp[] = [ (TabsPageSubType.flinkSql === subType || TabsPageSubType.flinkJar === subType) }, { - auth: '/datastudio/right/executeConfig', - key: 'menu.datastudio.executeConfig', - icon: , - label: l('menu.datastudio.executeConfig'), - children: , + auth: '/datastudio/right/previewConfig', + key: 'menu.datastudio.previewConfig', + icon: , + label: l('menu.datastudio.previewConfig'), + children: , isShow: (type, subType) => (type === TabsPageType.project && TabsPageSubType.flinkSql === subType) || isSql(subType ?? '') diff --git a/dinky-web/src/pages/DevOps/JobDetail/JobMetrics/JobChart/JobChart.tsx b/dinky-web/src/pages/DevOps/JobDetail/JobMetrics/JobChart/JobChart.tsx index 3498e7872a..f5a61c4120 100644 --- a/dinky-web/src/pages/DevOps/JobDetail/JobMetrics/JobChart/JobChart.tsx +++ b/dinky-web/src/pages/DevOps/JobDetail/JobMetrics/JobChart/JobChart.tsx @@ -82,11 +82,11 @@ const JobChart = (props: any) => { metricsList: Record, chartData: Record ) => { - let datas: JobMetricsItem[] = []; + let data: JobMetricsItem[] = []; for (let [key, value] of Object.entries(metricsList)) { - datas = [...datas, ...value]; + data = [...data, ...value]; } - return datas?.map((metricsItem) => { + return data?.map((metricsItem) => { const key = `${metricsItem.vertices}-${metricsItem.metrics}`; return ( { const refreshStatusCount = () => { const res = getStatusCount(); res.then((result) => { - const statusCountData: StatusCountOverView = result.datas.instance; + const statusCountData: StatusCountOverView = result.data.instance; const newJobStatusData: PieItem[] = []; for (const item in statusCountData) { if (item === 'all') { diff --git a/dinky-web/src/pages/Metrics/Job/index.tsx b/dinky-web/src/pages/Metrics/Job/index.tsx index 868fae0f53..023b6b5127 100644 --- a/dinky-web/src/pages/Metrics/Job/index.tsx +++ b/dinky-web/src/pages/Metrics/Job/index.tsx @@ -125,7 +125,7 @@ const Job = () => { const { cluster: { hosts: url }, instance: { name: flinkJobName, jid: flinkJobId } - } = taskDetail.datas; + } = taskDetail.data; setMetricsData((prevState) => ({ ...prevState, url: url, diff --git a/dinky-web/src/pages/Metrics/index.tsx b/dinky-web/src/pages/Metrics/index.tsx index e83a44b5f5..5e5a585ead 100644 --- a/dinky-web/src/pages/Metrics/index.tsx +++ b/dinky-web/src/pages/Metrics/index.tsx @@ -114,7 +114,7 @@ export default () => { }, [custom]); const setLayout = async () => { - setLayoutData((await getMetricsLayout()).datas); + setLayoutData((await getMetricsLayout()).data); }; const getInitData = () => { queryDataByParams(API_CONSTANTS.MONITOR_GET_SYSTEM_DATA, { diff --git a/dinky-web/src/pages/Other/Login/LoginForm/index.tsx b/dinky-web/src/pages/Other/Login/LoginForm/index.tsx index 0ec37bcfb4..2c8cedd26f 100644 --- a/dinky-web/src/pages/Other/Login/LoginForm/index.tsx +++ b/dinky-web/src/pages/Other/Login/LoginForm/index.tsx @@ -44,8 +44,8 @@ const LoginForm: React.FC = (props) => { useEffect(() => { getData(API_CONSTANTS.GET_LDAP_ENABLE).then( (res) => { - setLdapEnabled(res.datas); - form.setFieldValue('ldapLogin', res.datas); + setLdapEnabled(res.data); + form.setFieldValue('ldapLogin', res.data); }, (err) => console.error(err) ); diff --git a/dinky-web/src/pages/Other/Login/index.tsx b/dinky-web/src/pages/Other/Login/index.tsx index c07c23cd1d..586716195d 100644 --- a/dinky-web/src/pages/Other/Login/index.tsx +++ b/dinky-web/src/pages/Other/Login/index.tsx @@ -88,7 +88,7 @@ const Login: React.FC = () => { await SuccessMessageAsync( l('login.chooseTenantSuccess', '', { msg: chooseTenantResult.msg, - tenantCode: chooseTenantResult.datas.tenantCode + tenantCode: chooseTenantResult.data.tenantCode }) ); /** @@ -143,12 +143,12 @@ const Login: React.FC = () => { setLocalStorageOfToken(JSON.stringify(res)) ); } - setInitialState((s) => ({ ...s, currentUser: result.datas })); + setInitialState((s) => ({ ...s, currentUser: result.data })); await SuccessMessageAsync(l('login.result', '', { msg: result.msg, time: result.time })); /** * After successful login, set the tenant list */ - const tenantList: UserBaseInfo.Tenant[] = result.datas.tenantList; + const tenantList: UserBaseInfo.Tenant[] = result.data.tenantList; await assertTenant(tenantList); /** * Determine whether the current tenant list is multiple diff --git a/dinky-web/src/pages/RegCenter/Alert/AlertInstance/model.ts b/dinky-web/src/pages/RegCenter/Alert/AlertInstance/model.ts index 657dfbf507..66c2b5c1a0 100644 --- a/dinky-web/src/pages/RegCenter/Alert/AlertInstance/model.ts +++ b/dinky-web/src/pages/RegCenter/Alert/AlertInstance/model.ts @@ -48,8 +48,8 @@ const AlertModel: AlertModelType = { effects: { *queryInstance({}, { call, put }) { - const { datas } = yield call(showAlertInstance); - yield put({ type: 'saveInstance', payload: datas }); + const { data } = yield call(showAlertInstance); + yield put({ type: 'saveInstance', payload: data }); } }, diff --git a/dinky-web/src/pages/RegCenter/DataSource/components/DataSourceDetail/RightTagsRouter/SQLQuery/index.tsx b/dinky-web/src/pages/RegCenter/DataSource/components/DataSourceDetail/RightTagsRouter/SQLQuery/index.tsx index 51bc26162c..c0b89fe149 100644 --- a/dinky-web/src/pages/RegCenter/DataSource/components/DataSourceDetail/RightTagsRouter/SQLQuery/index.tsx +++ b/dinky-web/src/pages/RegCenter/DataSource/components/DataSourceDetail/RightTagsRouter/SQLQuery/index.tsx @@ -67,10 +67,10 @@ const SQLQuery: React.FC = (props) => { ); const { code, - datas: { columns, rowData } + data: { columns, rowData } } = result; // 获取到的数据 if (code === 1) { - setErrMsg({ isErr: true, msg: result.datas.error }); + setErrMsg({ isErr: true, msg: result.data.error }); } else { setErrMsg({ isErr: false, msg: '' }); } diff --git a/dinky-web/src/pages/RegCenter/DataSource/components/DataSourceDetail/index.tsx b/dinky-web/src/pages/RegCenter/DataSource/components/DataSourceDetail/index.tsx index 423c0dc2ad..ba90db4f37 100644 --- a/dinky-web/src/pages/RegCenter/DataSource/components/DataSourceDetail/index.tsx +++ b/dinky-web/src/pages/RegCenter/DataSource/components/DataSourceDetail/index.tsx @@ -77,7 +77,7 @@ const DataSourceDetail = (props: any) => { await getDataByIdReturnResult(API_CONSTANTS.DATASOURCE_GET_SCHEMA_TABLES, dataSource.id).then( (res) => { if (res.code === RESPONSE_CODE.SUCCESS) { - setTreeData(res.datas); + setTreeData(res.data); } } ); diff --git a/dinky-web/src/pages/SettingCenter/AlertRule/AlertRuleList/RuleEditForm/index.tsx b/dinky-web/src/pages/SettingCenter/AlertRule/AlertRuleList/RuleEditForm/index.tsx index 46f2000e6e..af543c3763 100644 --- a/dinky-web/src/pages/SettingCenter/AlertRule/AlertRuleList/RuleEditForm/index.tsx +++ b/dinky-web/src/pages/SettingCenter/AlertRule/AlertRuleList/RuleEditForm/index.tsx @@ -59,7 +59,7 @@ const RuleEditForm = (props: AlertRuleFormProps) => { const [form] = Form.useForm(); const getAlertTemplate = async () => { - const template: Alert.AlertTemplate[] = (await getData(API_CONSTANTS.ALERT_TEMPLATE)).datas; + const template: Alert.AlertTemplate[] = (await getData(API_CONSTANTS.ALERT_TEMPLATE)).data; return template.map((t) => ({ label: t.name, value: t.id })); }; diff --git a/dinky-web/src/pages/SettingCenter/GlobalSetting/SettingOverView/LdapConfig/compontents/LoadUser.tsx b/dinky-web/src/pages/SettingCenter/GlobalSetting/SettingOverView/LdapConfig/compontents/LoadUser.tsx index 27ceab87f1..120d04f266 100644 --- a/dinky-web/src/pages/SettingCenter/GlobalSetting/SettingOverView/LdapConfig/compontents/LoadUser.tsx +++ b/dinky-web/src/pages/SettingCenter/GlobalSetting/SettingOverView/LdapConfig/compontents/LoadUser.tsx @@ -50,7 +50,7 @@ export const LoadUser = () => { const fetchUserData = async () => { setLoading(true); const res = await getData(API_CONSTANTS.LDAP_LIST_USER); - setUsers(res.datas); + setUsers(res.data); setLoading(false); }; diff --git a/dinky-web/src/pages/SettingCenter/GlobalSetting/SettingOverView/LdapConfig/index.tsx b/dinky-web/src/pages/SettingCenter/GlobalSetting/SettingOverView/LdapConfig/index.tsx index 0f0d9acc0f..e4d853a61d 100644 --- a/dinky-web/src/pages/SettingCenter/GlobalSetting/SettingOverView/LdapConfig/index.tsx +++ b/dinky-web/src/pages/SettingCenter/GlobalSetting/SettingOverView/LdapConfig/index.tsx @@ -37,9 +37,9 @@ export const LdapConfig = ({ data, onSave }: LdapConfigProps) => { const testConnection = async () => { setLoading(true); - const datas = await queryDataByParams(API_CONSTANTS.LDAP_TEST_CONNECT); - if (datas) { - SuccessMessage(l('sys.ldap.settings.testConnect.success', '', { count: datas })); + const data = await queryDataByParams(API_CONSTANTS.LDAP_TEST_CONNECT); + if (data) { + SuccessMessage(l('sys.ldap.settings.testConnect.success', '', { count: data })); } setLoading(false); }; diff --git a/dinky-web/src/requestErrorConfig.ts b/dinky-web/src/requestErrorConfig.ts index 0b91963bcc..f1ae767d12 100644 --- a/dinky-web/src/requestErrorConfig.ts +++ b/dinky-web/src/requestErrorConfig.ts @@ -33,7 +33,7 @@ enum ErrorCode { // 与后端约定的响应数据格式 interface ResponseStructure { success: boolean; - datas?: boolean; + data?: boolean; code: number; msg: string; } @@ -48,11 +48,11 @@ export const errorConfig: RequestConfig = { errorConfig: { // 错误抛出 errorThrower: (res: ResponseStructure) => { - const { success, datas, msg, code } = res as ResponseStructure; + const { success, data, msg, code } = res as ResponseStructure; if (!success) { const error: any = new Error(msg); error.name = 'BizError'; - error.info = { msg, code, datas }; + error.info = { msg, code, data }; throw error; // 抛出自制的错误 } }, diff --git a/dinky-web/src/services/BusinessCrud.ts b/dinky-web/src/services/BusinessCrud.ts index 40b2c20924..4aec864479 100644 --- a/dinky-web/src/services/BusinessCrud.ts +++ b/dinky-web/src/services/BusinessCrud.ts @@ -219,9 +219,9 @@ export const handleGetOptionWithoutMsg = async (url: string, param: any) => { export const handleData = async (url: string, id: any) => { try { - const { code, datas } = await getInfoById(url, id); + const { code, data } = await getInfoById(url, id); if (code === RESPONSE_CODE.SUCCESS) { - return datas; + return data; } return undefined; } catch (error) { @@ -262,8 +262,8 @@ export const handlePutDataJson = async (url: string, fields: any) => { export const getDataByParams = async (url: string, params?: any) => { try { - const { datas, data } = await getDataByRequestBody(url, params); - return datas ?? data; + const { data } = await getDataByRequestBody(url, params); + return data; } catch (error) { return undefined; } @@ -277,9 +277,9 @@ export const queryDataByParams = async ( ): Promise => { try { beforeCallBack?.(); - const { datas } = await getData(url, params); + const { data } = await getData(url, params); afterCallBack?.(); - return datas; + return data; } catch (error) { return undefined; } diff --git a/dinky-web/src/services/data.d.ts b/dinky-web/src/services/data.d.ts index d5b8dd8d35..850abaef33 100644 --- a/dinky-web/src/services/data.d.ts +++ b/dinky-web/src/services/data.d.ts @@ -21,7 +21,7 @@ import { SaTokenInfo, UserBaseInfo } from '@/types/User/data'; declare namespace API { type Result = { code: number; - datas: any; + data: any; msg: string; time: Date; }; diff --git a/dinky-web/src/types/Studio/state.d.ts b/dinky-web/src/types/Studio/state.d.ts index 8dccb287d0..49263729e4 100644 --- a/dinky-web/src/types/Studio/state.d.ts +++ b/dinky-web/src/types/Studio/state.d.ts @@ -18,7 +18,6 @@ */ import { ContextMenuPosition } from '@/types/Public/state.d'; -import { Key } from '@ant-design/pro-components'; import { MenuItemType } from 'antd/es/menu/hooks/useItems'; export interface ProjectState { @@ -27,7 +26,6 @@ export interface ProjectState { contextMenuPosition: ContextMenuPosition; contextMenuOpen: boolean; menuItems: MenuItemType[]; - selectedKeys: Key[]; isLeaf: boolean; rightClickedNode?: any; isCreateSub: boolean; diff --git a/script/sql/dinky-mysql.sql b/script/sql/dinky-mysql.sql index 3c477fb7ec..457a64ef01 100644 --- a/script/sql/dinky-mysql.sql +++ b/script/sql/dinky-mysql.sql @@ -1186,7 +1186,7 @@ INSERT INTO `dinky_sys_menu` VALUES (34, 5, '项目列表', '/datastudio/left/pr INSERT INTO `dinky_sys_menu` VALUES (35, 5, '元数据', '/datastudio/left/metadata', null, 'datastudio:left:metadata', 'TableOutlined', 'F', 0, 7, '2023-09-01 18:01:09', '2023-09-26 14:49:42', null); INSERT INTO `dinky_sys_menu` VALUES (36, 5, 'catalog', '/datastudio/left/catalog', null, 'datastudio:left:structure', 'DatabaseOutlined', 'F', 0, 6, '2023-09-01 18:01:30', '2023-09-26 14:49:54', null); INSERT INTO `dinky_sys_menu` VALUES (37, 5, '作业配置', '/datastudio/right/jobConfig', null, 'datastudio:right:jobConfig', 'SettingOutlined', 'F', 0, 8, '2023-09-01 18:02:15', '2023-09-26 14:50:24', null); -INSERT INTO `dinky_sys_menu` VALUES (38, 5, '执行配置', '/datastudio/right/executeConfig', null, 'datastudio:right:executeConfig', 'ExperimentOutlined', 'F', 0, 9, '2023-09-01 18:03:08', '2023-09-26 14:50:54', null); +INSERT INTO `dinky_sys_menu` VALUES (38, 5, '预览配置', '/datastudio/right/previewConfig', null, 'datastudio:right:previewConfig', 'InsertRowRightOutlined', 'F', 0, 9, '2023-09-01 18:03:08', '2023-09-26 14:50:54', null); INSERT INTO `dinky_sys_menu` VALUES (39, 5, '版本历史', '/datastudio/right/historyVision', null, 'datastudio:right:historyVision', 'HistoryOutlined', 'F', 0, 10, '2023-09-01 18:03:29', '2023-09-26 14:51:03', null); INSERT INTO `dinky_sys_menu` VALUES (40, 5, '保存点', '/datastudio/right/savePoint', null, 'datastudio:right:savePoint', 'FolderOutlined', 'F', 0, 11, '2023-09-01 18:03:58', '2023-09-26 14:51:13', null); INSERT INTO `dinky_sys_menu` VALUES (41, 5, '作业信息', '/datastudio/right/jobInfo', null, 'datastudio:right:jobInfo', 'InfoCircleOutlined', 'F', 0, 8, '2023-09-01 18:04:31', '2023-09-25 18:26:45', null); diff --git a/script/sql/dinky-pg.sql b/script/sql/dinky-pg.sql index 2f4a3ecc80..309a1d646b 100644 --- a/script/sql/dinky-pg.sql +++ b/script/sql/dinky-pg.sql @@ -2230,7 +2230,7 @@ INSERT INTO "public"."dinky_sys_menu" VALUES (34, 5, '项目列表', '/datastud INSERT INTO "public"."dinky_sys_menu" VALUES (35, 5, '元数据', '/datastudio/left/metadata', null, 'datastudio:left:metadata', 'TableOutlined', 'F', 0, 7, '2023-09-01 18:01:09', '2023-09-26 14:49:42', null); INSERT INTO "public"."dinky_sys_menu" VALUES (36, 5, 'catalog', '/datastudio/left/catalog', null, 'datastudio:left:structure', 'DatabaseOutlined', 'F', 0, 6, '2023-09-01 18:01:30', '2023-09-26 14:49:54', null); INSERT INTO "public"."dinky_sys_menu" VALUES (37, 5, '作业配置', '/datastudio/right/jobConfig', null, 'datastudio:right:jobConfig', 'SettingOutlined', 'F', 0, 8, '2023-09-01 18:02:15', '2023-09-26 14:50:24', null); -INSERT INTO "public"."dinky_sys_menu" VALUES (38, 5, '执行配置', '/datastudio/right/executeConfig', null, 'datastudio:right:executeConfig', 'ExperimentOutlined', 'F', 0, 9, '2023-09-01 18:03:08', '2023-09-26 14:50:54', null); +INSERT INTO "public"."dinky_sys_menu" VALUES (38, 5, '预览配置', '/datastudio/right/previewConfig', null, 'datastudio:right:previewConfig', 'InsertRowRightOutlined', 'F', 0, 9, '2023-09-01 18:03:08', '2023-09-26 14:50:54', null); INSERT INTO "public"."dinky_sys_menu" VALUES (39, 5, '版本历史', '/datastudio/right/historyVision', null, 'datastudio:right:historyVision', 'HistoryOutlined', 'F', 0, 10, '2023-09-01 18:03:29', '2023-09-26 14:51:03', null); INSERT INTO "public"."dinky_sys_menu" VALUES (40, 5, '保存点', '/datastudio/right/savePoint', null, 'datastudio:right:savePoint', 'FolderOutlined', 'F', 0, 11, '2023-09-01 18:03:58', '2023-09-26 14:51:13', null); INSERT INTO "public"."dinky_sys_menu" VALUES (41, 5, '作业信息', '/datastudio/right/jobInfo', null, 'datastudio:right:jobInfo', 'InfoCircleOutlined', 'F', 0, 8, '2023-09-01 18:04:31', '2023-09-25 18:26:45', null); diff --git a/script/sql/upgrade/1.0.0-SNAPSHOT_schema/mysql/dinky_dml.sql b/script/sql/upgrade/1.0.0-SNAPSHOT_schema/mysql/dinky_dml.sql index f783f3f6d0..26e8467495 100644 --- a/script/sql/upgrade/1.0.0-SNAPSHOT_schema/mysql/dinky_dml.sql +++ b/script/sql/upgrade/1.0.0-SNAPSHOT_schema/mysql/dinky_dml.sql @@ -102,7 +102,7 @@ INSERT INTO `dinky_sys_menu` VALUES (34, 5, '项目列表', '/datastudio/left/pr INSERT INTO `dinky_sys_menu` VALUES (35, 5, '元数据', '/datastudio/left/metadata', null, 'datastudio:left:metadata', 'TableOutlined', 'F', 0, 7, '2023-09-01 18:01:09', '2023-09-26 14:49:42', null); INSERT INTO `dinky_sys_menu` VALUES (36, 5, 'catalog', '/datastudio/left/catalog', null, 'datastudio:left:structure', 'DatabaseOutlined', 'F', 0, 6, '2023-09-01 18:01:30', '2023-09-26 14:49:54', null); INSERT INTO `dinky_sys_menu` VALUES (37, 5, '作业配置', '/datastudio/right/jobConfig', null, 'datastudio:right:jobConfig', 'SettingOutlined', 'F', 0, 8, '2023-09-01 18:02:15', '2023-09-26 14:50:24', null); -INSERT INTO `dinky_sys_menu` VALUES (38, 5, '执行配置', '/datastudio/right/executeConfig', null, 'datastudio:right:executeConfig', 'ExperimentOutlined', 'F', 0, 9, '2023-09-01 18:03:08', '2023-09-26 14:50:54', null); +INSERT INTO `dinky_sys_menu` VALUES (38, 5, '预览配置', '/datastudio/right/previewConfig', null, 'datastudio:right:previewConfig', 'InsertRowRightOutlined', 'F', 0, 9, '2023-09-01 18:03:08', '2023-09-26 14:50:54', null); INSERT INTO `dinky_sys_menu` VALUES (39, 5, '版本历史', '/datastudio/right/historyVision', null, 'datastudio:right:historyVision', 'HistoryOutlined', 'F', 0, 10, '2023-09-01 18:03:29', '2023-09-26 14:51:03', null); INSERT INTO `dinky_sys_menu` VALUES (40, 5, '保存点', '/datastudio/right/savePoint', null, 'datastudio:right:savePoint', 'FolderOutlined', 'F', 0, 11, '2023-09-01 18:03:58', '2023-09-26 14:51:13', null); INSERT INTO `dinky_sys_menu` VALUES (41, 5, '作业信息', '/datastudio/right/jobInfo', null, 'datastudio:right:jobInfo', 'InfoCircleOutlined', 'F', 0, 8, '2023-09-01 18:04:31', '2023-09-25 18:26:45', null);