diff --git a/web/src/components/home-card.tsx b/web/src/components/home-card.tsx index cdee90f25..eddb762eb 100644 --- a/web/src/components/home-card.tsx +++ b/web/src/components/home-card.tsx @@ -1,6 +1,7 @@ import { RAGFlowAvatar } from '@/components/ragflow-avatar'; import { Card, CardContent } from '@/components/ui/card'; import { formatDate } from '@/utils/date'; +import { ReactNode } from 'react'; interface IProps { data: { @@ -11,8 +12,9 @@ interface IProps { }; onClick?: () => void; moreDropdown: React.ReactNode; + sharedBadge?: ReactNode; } -export function HomeCard({ data, onClick, moreDropdown }: IProps) { +export function HomeCard({ data, onClick, moreDropdown, sharedBadge }: IProps) { return ( {data.description} -
+

{formatDate(data.update_time)}

+ {sharedBadge}
diff --git a/web/src/components/ragflow-form.tsx b/web/src/components/ragflow-form.tsx index 488222714..0afe9a670 100644 --- a/web/src/components/ragflow-form.tsx +++ b/web/src/components/ragflow-form.tsx @@ -5,6 +5,7 @@ import { FormLabel, FormMessage, } from '@/components/ui/form'; +import { cn } from '@/lib/utils'; import { ReactNode, cloneElement, isValidElement } from 'react'; import { ControllerRenderProps, useFormContext } from 'react-hook-form'; @@ -13,6 +14,7 @@ type RAGFlowFormItemProps = { label: ReactNode; tooltip?: ReactNode; children: ReactNode | ((field: ControllerRenderProps) => ReactNode); + horizontal?: boolean; }; export function RAGFlowFormItem({ @@ -20,6 +22,7 @@ export function RAGFlowFormItem({ label, tooltip, children, + horizontal = false, }: RAGFlowFormItemProps) { const form = useFormContext(); return ( @@ -27,8 +30,14 @@ export function RAGFlowFormItem({ control={form.control} name={name} render={({ field }) => ( - - {label} + + + {label} + {typeof children === 'function' ? children(field) diff --git a/web/src/components/shared-badge.tsx b/web/src/components/shared-badge.tsx index a08379257..e5c7e950d 100644 --- a/web/src/components/shared-badge.tsx +++ b/web/src/components/shared-badge.tsx @@ -8,9 +8,5 @@ export function SharedBadge({ children }: PropsWithChildren) { return null; } - return ( - - {children} - - ); + return {children}; } diff --git a/web/src/constants/permission.ts b/web/src/constants/permission.ts new file mode 100644 index 000000000..7a6cac632 --- /dev/null +++ b/web/src/constants/permission.ts @@ -0,0 +1,4 @@ +export enum PermissionRole { + Me = 'me', + Team = 'team', +} diff --git a/web/src/pages/dataset/setting/general-form.tsx b/web/src/pages/dataset/setting/general-form.tsx index db64d0388..3c14534eb 100644 --- a/web/src/pages/dataset/setting/general-form.tsx +++ b/web/src/pages/dataset/setting/general-form.tsx @@ -1,6 +1,8 @@ import { FormContainer } from '@/components/form-container'; +import { SelectWithSearch } from '@/components/originui/select-with-search'; +import { RAGFlowFormItem } from '@/components/ragflow-form'; import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'; -import { Button } from '@/components/ui/button'; +import { Button, ButtonLoading } from '@/components/ui/button'; import { FormControl, FormField, @@ -9,9 +11,10 @@ import { FormMessage, } from '@/components/ui/form'; import { Input } from '@/components/ui/input'; +import { PermissionRole } from '@/constants/permission'; import { useUpdateKnowledge } from '@/hooks/knowledge-hooks'; import { transformFile2Base64 } from '@/utils/file-util'; -import { Loader2Icon, Pencil, Upload } from 'lucide-react'; +import { Pencil, Upload } from 'lucide-react'; import { useEffect, useMemo, useState } from 'react'; import { useFormContext } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; @@ -33,6 +36,13 @@ export function GeneralForm() { const parser_id = defaultValues['parser_id']; const { id: kb_id } = useParams(); + const teamOptions = useMemo(() => { + return Object.values(PermissionRole).map((x) => ({ + label: t('knowledgeConfiguration.' + x), + value: x, + })); + }, [t]); + // init avatar file if it exists in defaultValues useEffect(() => { if (!avatarFile) { @@ -171,24 +181,35 @@ export function GeneralForm() { ); }} /> + + +
- +
); diff --git a/web/src/pages/dataset/setting/index.tsx b/web/src/pages/dataset/setting/index.tsx index 5b598684a..54e6f1911 100644 --- a/web/src/pages/dataset/setting/index.tsx +++ b/web/src/pages/dataset/setting/index.tsx @@ -6,6 +6,7 @@ import { TabsTrigger, } from '@/components/ui/tabs-underlined'; import { DocumentParserType } from '@/constants/knowledge'; +import { PermissionRole } from '@/constants/permission'; import { zodResolver } from '@hookform/resolvers/zod'; import { useState } from 'react'; import { useForm, useWatch } from 'react-hook-form'; @@ -43,7 +44,7 @@ export default function DatasetSettings() { defaultValues: { name: '', parser_id: DocumentParserType.Naive, - permission: 'me', + permission: PermissionRole.Me, parser_config: { layout_recognize: DocumentType.DeepDOC, chunk_token_num: 512, diff --git a/web/src/pages/datasets/dataset-card.tsx b/web/src/pages/datasets/dataset-card.tsx index 14b4fda53..bd6a187eb 100644 --- a/web/src/pages/datasets/dataset-card.tsx +++ b/web/src/pages/datasets/dataset-card.tsx @@ -1,5 +1,6 @@ import { HomeCard } from '@/components/home-card'; import { MoreButton } from '@/components/more-button'; +import { SharedBadge } from '@/components/shared-badge'; import { Card, CardContent } from '@/components/ui/card'; import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks'; import { IKnowledge } from '@/interfaces/database/knowledge'; @@ -32,6 +33,7 @@ export function DatasetCard({ } + sharedBadge={{dataset.nickname}} onClick={navigateToDataset(dataset.id)} /> );