diff --git a/web/src/global.less b/web/src/global.less index 82e6989cd..0aa074927 100644 --- a/web/src/global.less +++ b/web/src/global.less @@ -20,6 +20,10 @@ body { width: 100%; } +.vue-office-excel { + height: 100%; +} + /* Scroll bar stylings */ ::-webkit-scrollbar { width: 10px; diff --git a/web/src/locales/zh.ts b/web/src/locales/zh.ts index edeae5366..42db2ffe1 100644 --- a/web/src/locales/zh.ts +++ b/web/src/locales/zh.ts @@ -440,6 +440,7 @@ General:实体和关系提取提示来自 GitHub - microsoft/graphrag:基于 delete: '删除', }, chat: { + createChat: '创建聊天', newConversation: '新会话', createAssistant: '新建助理', assistantSetting: '助理设置', @@ -1436,7 +1437,7 @@ General:实体和关系提取提示来自 GitHub - microsoft/graphrag:基于 cancelText: '取消', }, search: { - createSearch: '新建查询', + createSearch: '创建查询', searchGreeting: '今天我能为你做些什么?', profile: '隐藏个人资料', locale: '语言', diff --git a/web/src/pages/agents/index.tsx b/web/src/pages/agents/index.tsx index 1fd77647a..3779290ee 100644 --- a/web/src/pages/agents/index.tsx +++ b/web/src/pages/agents/index.tsx @@ -48,7 +48,7 @@ export default function Agents() {
-
+
{data.map((x) => { return (
-
+
{kbs.map((dataset) => { return ( {
- - +
+ + +
); diff --git a/web/src/pages/home/search-list.tsx b/web/src/pages/home/search-list.tsx index b44272454..b1e7c8955 100644 --- a/web/src/pages/home/search-list.tsx +++ b/web/src/pages/home/search-list.tsx @@ -1,20 +1,57 @@ +import { IconFont } from '@/components/icon-font'; +import { MoreButton } from '@/components/more-button'; +import { RenameDialog } from '@/components/rename-dialog'; import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks'; -import { useFetchSearchList } from '../next-searches/hooks'; +import { useFetchSearchList, useRenameSearch } from '../next-searches/hooks'; +import { SearchDropdown } from '../next-searches/search-dropdown'; import { ApplicationCard } from './application-card'; export function SearchList() { - const { data } = useFetchSearchList(); + const { data, refetch: refetchList } = useFetchSearchList(); const { navigateToSearch } = useNavigatePage(); - - return data?.data.search_apps.slice(0, 10).map((x) => ( - - )); + const { + openCreateModal, + showSearchRenameModal, + hideSearchRenameModal, + searchRenameLoading, + onSearchRenameOk, + initialSearchName, + } = useRenameSearch(); + const onSearchRenameConfirm = (name: string) => { + onSearchRenameOk(name, () => { + refetchList(); + }); + }; + return ( + <> + {data?.data.search_apps.slice(0, 10).map((x) => ( + + + + } + > + ))} + {openCreateModal && ( + } + > + )} + + ); } diff --git a/web/src/pages/next-chats/index.tsx b/web/src/pages/next-chats/index.tsx index 95ee6b763..446a28677 100644 --- a/web/src/pages/next-chats/index.tsx +++ b/web/src/pages/next-chats/index.tsx @@ -50,7 +50,7 @@ export default function ChatList() {
-
+
{data.dialogs.map((x) => { return ( { return { data, isError, updateSearch }; }; + +export const useRenameSearch = () => { + const [search, setSearch] = useState({} as ISearchAppProps); + const { navigateToSearch } = useNavigatePage(); + const { + visible: openCreateModal, + hideModal: hideChatRenameModal, + showModal: showChatRenameModal, + } = useSetModalState(); + const { updateSearch } = useUpdateSearch(); + const { createSearch } = useCreateSearch(); + const [loading, setLoading] = useState(false); + + const handleShowChatRenameModal = useCallback( + (record?: ISearchAppProps) => { + if (record) { + setSearch(record); + } + showChatRenameModal(); + }, + [showChatRenameModal], + ); + + const handleHideModal = useCallback(() => { + hideChatRenameModal(); + setSearch({} as ISearchAppProps); + }, [hideChatRenameModal]); + + const onSearchRenameOk = useCallback( + async (name: string, callBack?: () => void) => { + let res; + setLoading(true); + if (search?.id) { + try { + const reponse = await searchService.getSearchDetail({ + search_id: search?.id, + }); + const detail = reponse.data?.data; + console.log('detail-->', detail); + const { id, created_by, update_time, ...searchDataTemp } = detail; + res = await updateSearch({ + ...searchDataTemp, + name: name, + search_id: search?.id, + } as unknown as IUpdateSearchProps); + } catch (e) { + console.error('error', e); + } + } else { + res = await createSearch({ name: name }); + } + if (res && !search?.id) { + navigateToSearch(res?.search_id)(); + } + callBack?.(); + setLoading(false); + handleHideModal(); + }, + [search, createSearch, handleHideModal, navigateToSearch, updateSearch], + ); + return { + searchRenameLoading: loading, + initialSearchName: search?.name, + onSearchRenameOk, + openCreateModal, + hideSearchRenameModal: handleHideModal, + showSearchRenameModal: handleShowChatRenameModal, + }; +}; diff --git a/web/src/pages/next-searches/index.tsx b/web/src/pages/next-searches/index.tsx index 380740dd1..935fcee7c 100644 --- a/web/src/pages/next-searches/index.tsx +++ b/web/src/pages/next-searches/index.tsx @@ -1,114 +1,49 @@ +import { IconFont } from '@/components/icon-font'; import ListFilterBar from '@/components/list-filter-bar'; -import { Input } from '@/components/originui/input'; +import { RenameDialog } from '@/components/rename-dialog'; import { Button } from '@/components/ui/button'; -import { - Form, - FormControl, - FormField, - FormItem, - FormLabel, - FormMessage, -} from '@/components/ui/form'; -import { Modal } from '@/components/ui/modal/modal'; import { RAGFlowPagination } from '@/components/ui/ragflow-pagination'; import { useTranslate } from '@/hooks/common-hooks'; -import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks'; -import searchService from '@/services/search-service'; -import { zodResolver } from '@hookform/resolvers/zod'; -import { Plus, Search } from 'lucide-react'; +import { Plus } from 'lucide-react'; import { useState } from 'react'; -import { useForm } from 'react-hook-form'; -import { z } from 'zod'; -import { - ISearchAppProps, - IUpdateSearchProps, - useCreateSearch, - useFetchSearchList, - useUpdateSearch, -} from './hooks'; +import { useFetchSearchList, useRenameSearch } from './hooks'; import { SearchCard } from './search-card'; -const searchFormSchema = z.object({ - name: z.string().min(1, { - message: 'Name is required', - }), -}); - -type SearchFormValues = z.infer & { - search_id?: string; -}; export default function SearchList() { // const { data } = useFetchFlowList(); const { t } = useTranslate('search'); - const { navigateToSearch } = useNavigatePage(); - const { isLoading, createSearch } = useCreateSearch(); const [isEdit, setIsEdit] = useState(false); - const [searchData, setSearchData] = useState(null); const { data: list, searchParams, setSearchListParams, refetch: refetchList, } = useFetchSearchList(); - const [openCreateModal, setOpenCreateModal] = useState(false); - const form = useForm({ - resolver: zodResolver(searchFormSchema), - defaultValues: { - name: '', - }, - }); + const { + openCreateModal, + showSearchRenameModal, + hideSearchRenameModal, + searchRenameLoading, + onSearchRenameOk, + initialSearchName, + } = useRenameSearch(); const handleSearchChange = (value: string) => { console.log(value); }; - const { updateSearch } = useUpdateSearch(); - const onSubmit = async (values: SearchFormValues) => { - let res; - if (isEdit) { - try { - const reponse = await searchService.getSearchDetail({ - search_id: searchData?.id, - }); - const detail = reponse.data?.data; - console.log('detail-->', detail); - const { id, created_by, update_time, ...searchDataTemp } = detail; - res = await updateSearch({ - ...searchDataTemp, - name: values.name, - search_id: searchData?.id, - } as unknown as IUpdateSearchProps); - refetchList(); - } catch (e) { - console.error('error', e); - } - } else { - res = await createSearch({ name: values.name }); - } - if (res && !searchData?.id) { - navigateToSearch(res?.search_id)(); - } - if (!isLoading) { - setOpenCreateModal(false); - } - form.reset({ name: '' }); + const onSearchRenameConfirm = (name: string) => { + onSearchRenameOk(name, () => { + refetchList(); + }); }; const openCreateModalFun = () => { setIsEdit(false); - setOpenCreateModal(true); + showSearchRenameModal(); }; const handlePageChange = (page: number, pageSize: number) => { setIsEdit(false); setSearchListParams({ ...searchParams, page, page_size: pageSize }); }; - const showSearchRenameModal = (data: ISearchAppProps) => { - form.setValue('name', data.name); - if (data.id) { - setIsEdit(true); - } - - setSearchData(data); - setOpenCreateModal(true); - }; return (
@@ -130,13 +65,15 @@ export default function SearchList() {
-
+
{list?.data.search_apps.map((x) => { return ( { + showSearchRenameModal(x); + }} > ); })} @@ -153,57 +90,15 @@ export default function SearchList() {
)} - { - setOpenCreateModal(open); - }} - title={ -
- -
- } - className="!w-[480px] rounded-xl" - titleClassName="border-none" - footerClassName="border-none" - showfooter={false} - maskClosable={false} - > -
- -
{t('createSearch')}
- - ( - - - *Name - - - - - - - )} - /> - -
- - -
- - -
+ {openCreateModal && ( + } + > + )}
); }