diff --git a/dinky-web/src/pages/DataStudio/Toolbar/Catalog/index.tsx b/dinky-web/src/pages/DataStudio/Toolbar/Catalog/index.tsx index 317cd5d50a..780cdc030c 100644 --- a/dinky-web/src/pages/DataStudio/Toolbar/Catalog/index.tsx +++ b/dinky-web/src/pages/DataStudio/Toolbar/Catalog/index.tsx @@ -32,7 +32,7 @@ import { Button, Col, Empty, Flex, Modal, Row, Select, Spin } from 'antd'; import { DataNode } from 'antd/es/tree'; import DirectoryTree from 'antd/es/tree/DirectoryTree'; import { DefaultOptionType } from 'rc-select/lib/Select'; -import React, { useEffect, useState } from 'react'; +import React, { useCallback, useEffect, useState } from 'react'; import { getMSCatalogs, getMSColumns, getMSSchemaInfo } from './service'; import { useAsyncEffect } from 'ahooks'; import { CenterTab, DataStudioState } from '@/pages/DataStudio/model'; @@ -40,6 +40,7 @@ import { mapDispatchToProps } from '@/pages/DataStudio/DvaFunction'; import { isSql } from '@/pages/DataStudio/utils'; import { TableDataNode } from '@/pages/DataStudio/Toolbar/Catalog/data'; import { DataStudioActionType } from '@/pages/DataStudio/data.d'; +import Search from "antd/es/input/Search"; type CatalogState = { envId?: number; @@ -65,6 +66,7 @@ const Catalog = (props: { const [row, setRow] = useState(); const [loading, setLoading] = useState(false); const [currentState, setCurrentState] = useState(); + const [searchValue, setSearchValue] = useState(''); const currentData = tabs.find((tab) => activeTab == tab.id); @@ -335,6 +337,22 @@ const Catalog = (props: { setModalVisit(false); setTable(''); }; + + const buildCatalogTree = (data: any, searchValue = ''): any => + data.map((item: any) => { + return { + ...item, + children: item.children.filter((child: any) => child.title.indexOf(searchValue) > -1) + }; + }); + + const onSearchChange = useCallback( + (e: { target: { value: React.SetStateAction } }) => { + setSearchValue(e.target.value); + }, + [searchValue] + ); + // ; return ( @@ -351,15 +369,24 @@ const Catalog = (props: { /> - {treeData.length > 0 ? ( - } - treeData={treeData} - onRightClick={({ node }: any) => openColumnInfo(node)} - onSelect={(_, info: any) => openColumnInfo(info.node)} - /> + <> + + } + className={'treeList'} + treeData={buildCatalogTree(treeData, searchValue)} + onRightClick={({ node }: any) => openColumnInfo(node)} + onSelect={(_, info: any) => openColumnInfo(info.node)} + /> + ) : ( )} diff --git a/docs/docs/user_guide/auth_center/approval.md b/docs/docs/user_guide/auth_center/approval.md new file mode 100644 index 0000000000..dd97d2a641 --- /dev/null +++ b/docs/docs/user_guide/auth_center/approval.md @@ -0,0 +1,33 @@ +--- +position: 7 +sidebar_position: 7 +id: approval +title: 审核发布 +--- + +:::info 简介 +Dinky1.3增加了作业审核发布功能,可以对作业代码进行Review,只有审核通过的代码版本才允许被提交。 +如需开启审核发布功能,需要在 **配置中心** > **全局配置** > **[审批 配置](./system_setting/global_settings/approval_setting)** 中开启作业上线审核开关 + +注意: 在 Dinky v1.3.0 版本及以上,作业上线审核开功能默认关闭,需要手动开启,否则无法使用审核发布功能 +::: + +### 审批列表 +此处展示了需要由当前用户进行审核的工单列表,用户可以检查任务信息,对比线上代码版本与提交审核版本的差异,选择通过或驳回任务的上线工单,并留下审核意见。 + +[//]: # (TODO:审批列表图片,eg:https://github.com/user-attachments/assets/16c5337b-3d7a-4fac-a4c2-882177abbb9c) +[//]: # (![approval_approve_list_001](https://github.com/user-attachments/assets/16c5337b-3d7a-4fac-a4c2-882177abbb9c)) +> 注意: 线上代码版本,即当前任务上一次通过审核的版本。 + +### 审批列表 +此处展示了当前用户所提交的审核工单,用户可以选择提交、撤回或取消审批工单。 + +[//]: # (TODO:申请列表图片,eg:https://github.com/user-attachments/assets/97c14760-578a-41a5-8971-81ebdc8f9be5) +[//]: # (![approval_submit_list_001](https://github.com/user-attachments/assets/97c14760-578a-41a5-8971-81ebdc8f9be5)) + +:::tip 提示 +1. 创建工单需要在数据开发页面点击创建审批按钮,审核发布页面不提供创建审批功能。 +2. 撤回的工单可以被修改审批人,上线说明等信息后重新提交。 +3. 被取消的工单无法被恢复。 + ::: + diff --git a/docs/docs/user_guide/system_setting/global_settings/approval_setting.md b/docs/docs/user_guide/system_setting/global_settings/approval_setting.md new file mode 100644 index 0000000000..52f39989dc --- /dev/null +++ b/docs/docs/user_guide/system_setting/global_settings/approval_setting.md @@ -0,0 +1,33 @@ +--- +position: 8 +sidebar_position: 8 +id: approval_setting +title: 审批配置 +--- + + +当用户使用 **认证中心** > **[审核发布](../../auth_center/approval)**,需要在本功能页面进行相关参数配置。配置保存后即生效 + +:::info 简介 +Dinky1.3增加了作业审核发布功能,可以对作业代码进行Review,只有审核通过的代码版本才允许被提交。 +::: + +[//]: # (TODO : 审批配置图片 eg: https://github.com/user-attachments/assets/bf0e9994-ae1b-405f-b1c4-a984dcdbd922) +[//]: # (![approval_setting_dinky](https://github.com/user-attachments/assets/bf0e9994-ae1b-405f-b1c4-a984dcdbd922)) + +::: + +| 参数名称 | 参数说明 | 默认值 | +|-------------|---------------------------------------------------|--------| +| 开启作业上线审核| 开启后,作业只有在通过审核之后才能够提交上线,默认关闭。|false| +| 强制交叉审核| 开启强制交叉审核后,不允许提交人审批自己的作业。|true| +| 具有审批权限的角色编码| 具有审批权限的角色编码,多个角色用英文逗号隔开,例如:SuperAdmin,Reviewer。 |SuperAdmin| + +:::tip 提示 + +1. 在开启作业上线审核后,数据开发页面会出现创建审批按钮,用于提交当前任务的上线工单。在提交工单前,若任务未处于发布状态,其会被自动发布,以保存一个版本方便审核人对比作业上线的信息。 +2. 开启作业上线审核后,提交未发布或发布版本未通过审核的任务时,会提示“当前作业未发布或发布版本未通过审核,不允许运行,请在任务发布且发布版本通过审核后重试”。 +3. 超级管理员不受强制交叉审核的约束,超级管理员可以作为所有作业的审核人。 +4. 具有审批权限的角色编码与**认证中心** > **[角色](../../auth_center/role)** 中的`角色编码`一致。 + +:::