import React, { useState } from 'react'; import { Card, Flex, Box, Button, Modal, ModalOverlay, ModalContent, ModalBody, ModalHeader, ModalFooter, ModalCloseButton, useTheme, Textarea } from '@chakra-ui/react'; import Avatar from '@/components/Avatar'; import { KbListItemType } from '@/types/plugin'; import { useForm } from 'react-hook-form'; import { QuestionOutlineIcon } from '@chakra-ui/icons'; import type { SelectedKbType } from '@/types/plugin'; import { useGlobalStore } from '@/store/global'; import MySlider from '@/components/Slider'; import MyTooltip from '@/components/MyTooltip'; export type KbParamsType = { searchSimilarity: number; searchLimit: number; searchEmptyText: string; }; export const KBSelectModal = ({ kbList, activeKbs = [], onChange, onClose }: { kbList: KbListItemType[]; activeKbs: SelectedKbType; onChange: (e: SelectedKbType) => void; onClose: () => void; }) => { const theme = useTheme(); const [selectedKbList, setSelectedKbList] = useState(activeKbs); const { isPc } = useGlobalStore(); return ( 关联的知识库({selectedKbList.length}) {kbList.map((item) => (() => { const selected = !!selectedKbList.find((kb) => kb.kbId === item._id); const active = !!activeKbs.find((kb) => kb.kbId === item._id); return ( { if (selected) { setSelectedKbList((state) => state.filter((kb) => kb.kbId !== item._id)); } else { setSelectedKbList((state) => [...state, { kbId: item._id }]); } }} > {item.name} ); })() )} ); }; export const KbParamsModal = ({ searchEmptyText, searchLimit, searchSimilarity, onClose, onChange }: KbParamsType & { onClose: () => void; onChange: (e: KbParamsType) => void }) => { const [refresh, setRefresh] = useState(false); const { register, setValue, getValues, handleSubmit } = useForm({ defaultValues: { searchEmptyText, searchLimit, searchSimilarity } }); return ( 搜索参数调整 相似度 { setValue('searchSimilarity', val); setRefresh(!refresh); }} /> 单次搜索数量 { setValue('searchLimit', val); setRefresh(!refresh); }} /> 空搜索回复 ); }; export default KBSelectModal;