diff --git a/docSite/content/zh-cn/docs/development/upgrading/4911.md b/docSite/content/zh-cn/docs/development/upgrading/4911.md index d68dc3063..e59b7a128 100644 --- a/docSite/content/zh-cn/docs/development/upgrading/4911.md +++ b/docSite/content/zh-cn/docs/development/upgrading/4911.md @@ -28,6 +28,7 @@ curl --location --request POST 'https://{{host}}/api/admin/initv4911' \ 1. 商业版支持图片知识库。 2. 工作流中增加节点搜索功能。 3. 工作流中,子流程版本控制,可选择“保持最新版本”,无需手动更新。 +4. 增加更多审计操作日志。 ## ⚙️ 优化 diff --git a/packages/global/core/dataset/constants.ts b/packages/global/core/dataset/constants.ts index 090f6117e..9c552213b 100644 --- a/packages/global/core/dataset/constants.ts +++ b/packages/global/core/dataset/constants.ts @@ -17,6 +17,7 @@ export const ApiDatasetTypeMap: Record< `${DatasetTypeEnum}`, { icon: string; + avatar: string; label: any; collectionLabel: string; courseUrl?: string; @@ -24,18 +25,21 @@ export const ApiDatasetTypeMap: Record< > = { [DatasetTypeEnum.apiDataset]: { icon: 'core/dataset/externalDatasetOutline', + avatar: 'core/dataset/externalDatasetColor', label: i18nT('dataset:api_file'), collectionLabel: i18nT('common:File'), courseUrl: '/docs/guide/knowledge_base/api_dataset/' }, [DatasetTypeEnum.feishu]: { icon: 'core/dataset/feishuDatasetOutline', + avatar: 'core/dataset/feishuDatasetColor', label: i18nT('dataset:feishu_dataset'), collectionLabel: i18nT('common:File'), courseUrl: '/docs/guide/knowledge_base/lark_dataset/' }, [DatasetTypeEnum.yuque]: { icon: 'core/dataset/yuqueDatasetOutline', + avatar: 'core/dataset/yuqueDatasetColor', label: i18nT('dataset:yuque_dataset'), collectionLabel: i18nT('common:File'), courseUrl: '/docs/guide/knowledge_base/yuque_dataset/' @@ -45,6 +49,7 @@ export const DatasetTypeMap: Record< `${DatasetTypeEnum}`, { icon: string; + avatar: string; label: any; collectionLabel: string; courseUrl?: string; @@ -53,22 +58,26 @@ export const DatasetTypeMap: Record< ...ApiDatasetTypeMap, [DatasetTypeEnum.folder]: { icon: 'common/folderFill', + avatar: 'common/folderFill', label: i18nT('dataset:folder_dataset'), collectionLabel: i18nT('common:Folder') }, [DatasetTypeEnum.dataset]: { icon: 'core/dataset/commonDatasetOutline', + avatar: 'core/dataset/commonDatasetColor', label: i18nT('dataset:common_dataset'), collectionLabel: i18nT('common:File') }, [DatasetTypeEnum.websiteDataset]: { icon: 'core/dataset/websiteDatasetOutline', + avatar: 'core/dataset/websiteDatasetColor', label: i18nT('dataset:website_dataset'), collectionLabel: i18nT('common:Website'), courseUrl: '/docs/guide/knowledge_base/websync/' }, [DatasetTypeEnum.externalFile]: { icon: 'core/dataset/externalDatasetOutline', + avatar: 'core/dataset/externalDatasetColor', label: i18nT('dataset:external_file'), collectionLabel: i18nT('common:File') } diff --git a/packages/web/components/common/MyMenu/secondary.tsx b/packages/web/components/common/MyMenu/Multiple.tsx similarity index 63% rename from packages/web/components/common/MyMenu/secondary.tsx rename to packages/web/components/common/MyMenu/Multiple.tsx index 2883627c8..60b7b0a31 100644 --- a/packages/web/components/common/MyMenu/secondary.tsx +++ b/packages/web/components/common/MyMenu/Multiple.tsx @@ -36,10 +36,12 @@ export type Props = { label?: string; width?: number | string; offset?: [number, number]; - Button: React.ReactNode; + Trigger: React.ReactNode; trigger?: 'hover' | 'click'; size?: MenuSizeType; placement?: PlacementWithLogical; + hasArrow?: boolean; + onClose?: () => void; menuList: MenuItemData[]; }; @@ -189,32 +191,32 @@ const sizeMapStyle: Record< } }; -const MenuItem = React.forwardRef< - HTMLDivElement, - { - item: MenuItemData['children'][number]; - size: MenuSizeType; - onClose: () => void; - } ->((props, ref) => { - const { item, size, onClose } = props; - +const MenuItem = ({ + item, + size, + onClose +}: { + item: MenuItemData['children'][number]; + size: MenuSizeType; + onClose: () => void; +}) => { return ( { - e.stopPropagation(); - if (item.onClick && !item.menuList) { - onClose(); + if (item.onClick) { item.onClick(); } + if (!item.menuList) { + onClose(); + } }} > @@ -242,41 +244,53 @@ const MenuItem = React.forwardRef< ); -}); +}; -MenuItem.displayName = 'MenuItem'; +const MultipleMenu = (props: Props) => { + const { + width = 'auto', + trigger = 'hover', + size = 'sm', + offset, + Trigger, + menuList, + hasArrow = false, + placement = 'bottom-start' + } = props; -const MyMenu = ({ - width = 'auto', - trigger = 'hover', - size = 'sm', - offset, - Button, - menuList, - placement = 'bottom-start' -}: Props) => { const { isPc } = useSystem(); - const ref = useRef(null); const formatTrigger = !isPc ? 'click' : trigger; return ( - - - {({ onClose }) => ( - + + {({ onClose }) => { + const onCloseFn = () => { + onClose(); + props?.onClose?.(); + }; + + return ( + {menuList.map((group, i) => ( - {i !== 0 && } + {i !== 0 && } {group.label && ( {group.label} @@ -286,54 +300,21 @@ const MyMenu = ({ return ( {item.menuList ? ( - - + + } - > - {({ onClose: onCloseSubmenu }) => { - return ( - - {item.menuList?.map((subGroup, subI) => ( - - {subGroup.children.map((subItem, subIndex) => ( - { - onClose(); - onCloseSubmenu(); - }} - /> - ))} - - ))} - - ); - }} - + hasArrow + /> ) : ( - + )} ); @@ -341,10 +322,10 @@ const MyMenu = ({ ))} - )} - - + ); + }} + ); }; -export default React.memo(MyMenu); +export default React.memo(MultipleMenu); diff --git a/packages/web/components/common/MyMenu/index.tsx b/packages/web/components/common/MyMenu/index.tsx index 49e07cace..4f67dcca0 100644 --- a/packages/web/components/common/MyMenu/index.tsx +++ b/packages/web/components/common/MyMenu/index.tsx @@ -1,4 +1,4 @@ -import React, { useMemo, useRef, useState } from 'react'; +import React, { useCallback, useMemo, useRef, useState } from 'react'; import { Menu, MenuList, @@ -18,9 +18,20 @@ import { useSystem } from '../../../hooks/useSystem'; import Avatar from '../Avatar'; export type MenuItemType = 'primary' | 'danger' | 'gray' | 'grayBg'; - export type MenuSizeType = 'sm' | 'md' | 'xs' | 'mini'; +export type MenuItemData = { + label?: string; + children: Array<{ + isActive?: boolean; + type?: MenuItemType; + icon?: IconNameType | string; + label: string | React.ReactNode; + description?: string; + onClick?: () => any; + menuItemStyles?: MenuItemProps; + }>; +}; export type Props = { width?: number | string; offset?: [number, number]; @@ -29,18 +40,7 @@ export type Props = { size?: MenuSizeType; placement?: PlacementWithLogical; - menuList: { - label?: string; - children: { - isActive?: boolean; - type?: MenuItemType; - icon?: IconNameType | string; - label: string | React.ReactNode; - description?: string; - onClick?: () => any; - menuItemStyles?: MenuItemProps; - }[]; - }[]; + menuList: MenuItemData[]; }; const typeMapStyle: Record = { diff --git a/packages/web/components/common/MyPopover/index.tsx b/packages/web/components/common/MyPopover/index.tsx index ccc2bfd3b..3d80893a8 100644 --- a/packages/web/components/common/MyPopover/index.tsx +++ b/packages/web/components/common/MyPopover/index.tsx @@ -43,11 +43,11 @@ const MyPopover = ({ initialFocusRef={firstFieldRef} onOpen={() => { onOpen(); - onOpenFunc && onOpenFunc(); + onOpenFunc?.(); }} onClose={() => { onClose(); - onCloseFunc && onCloseFunc(); + onCloseFunc?.(); }} placement={placement} offset={offset} diff --git a/projects/app/src/pageComponents/dataset/list/CreateModal.tsx b/projects/app/src/pageComponents/dataset/list/CreateModal.tsx index bd26513e7..d70443ef1 100644 --- a/projects/app/src/pageComponents/dataset/list/CreateModal.tsx +++ b/projects/app/src/pageComponents/dataset/list/CreateModal.tsx @@ -50,7 +50,7 @@ const CreateModal = ({ defaultValues: { parentId, type: type || DatasetTypeEnum.dataset, - avatar: DatasetTypeMap[type].icon, + avatar: DatasetTypeMap[type].avatar, name: '', intro: '', vectorModel: @@ -95,7 +95,7 @@ const CreateModal = ({ w={'20px'} h={'20px'} borderRadius={'xs'} - src={DatasetTypeMap[type].icon} + src={DatasetTypeMap[type].avatar} pr={'10px'} /> {t('common:core.dataset.Create dataset', { name: t(DatasetTypeMap[type].label) })} diff --git a/projects/app/src/pages/dataset/list/index.tsx b/projects/app/src/pages/dataset/list/index.tsx index 0187ddeaa..2684c85c3 100644 --- a/projects/app/src/pages/dataset/list/index.tsx +++ b/projects/app/src/pages/dataset/list/index.tsx @@ -9,7 +9,7 @@ import List from '@/pageComponents/dataset/list/List'; import { DatasetsContext } from './context'; import DatasetContextProvider from './context'; import { useContextSelector } from 'use-context-selector'; -import MyMenu from '@fastgpt/web/components/common/MyMenu/secondary'; +import MultipleMenu from '@fastgpt/web/components/common/MyMenu/Multiple'; import { AddIcon } from '@chakra-ui/icons'; import { useUserStore } from '@/web/support/user/useUserStore'; import MyIcon from '@fastgpt/web/components/common/Icon'; @@ -138,10 +138,9 @@ const Dataset = () => { ? folderDetail.permission.hasWritePer : userInfo?.team?.permission.hasDatasetCreatePer) && ( - @@ -163,11 +162,7 @@ const Dataset = () => { label: t('dataset:website_dataset'), description: t('dataset:website_dataset_desc'), onClick: () => onSelectDatasetType(DatasetTypeEnum.websiteDataset) - } - ] - }, - { - children: [ + }, { icon: 'core/dataset/otherDataset', label: t('dataset:other_dataset'),