diff --git a/src/renderer/src/pages/knowledge/components/AddKnowledgePopup.tsx b/src/renderer/src/pages/knowledge/components/AddKnowledgePopup.tsx index f01ac46ff1..eb3639931a 100644 --- a/src/renderer/src/pages/knowledge/components/AddKnowledgePopup.tsx +++ b/src/renderer/src/pages/knowledge/components/AddKnowledgePopup.tsx @@ -6,7 +6,6 @@ import { DEFAULT_KNOWLEDGE_DOCUMENT_COUNT, isMac } from '@renderer/config/consta import { getEmbeddingMaxContext } from '@renderer/config/embedings' import { isEmbeddingModel, isRerankModel } from '@renderer/config/models' import { NOT_SUPPORTED_REANK_PROVIDERS } from '@renderer/config/providers' -// import { SUPPORTED_REANK_PROVIDERS } from '@renderer/config/providers' import { useKnowledgeBases } from '@renderer/hooks/useKnowledge' import { useOcrProviders } from '@renderer/hooks/useOcr' import { usePreprocessProviders } from '@renderer/hooks/usePreprocess' @@ -15,10 +14,11 @@ import { getKnowledgeBaseParams } from '@renderer/services/KnowledgeService' import { getModelUniqId } from '@renderer/services/ModelService' import { KnowledgeBase, Model, OcrProvider, PreprocessProvider } from '@renderer/types' import { getErrorMessage } from '@renderer/utils/error' -import { Alert, Input, InputNumber, Menu, Modal, Select, Slider, Switch, Tooltip } from 'antd' +import { Alert, Input, InputNumber, Modal, Select, Slider, Switch, Tooltip } from 'antd' import { find, sortBy } from 'lodash' +import { ChevronDown } from 'lucide-react' import { nanoid } from 'nanoid' -import { useMemo, useRef, useState } from 'react' +import { useEffect, useMemo, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' import styled from 'styled-components' @@ -34,12 +34,12 @@ const PopupContainer: React.FC = ({ title, resolve }) => { const [open, setOpen] = useState(true) const [loading, setLoading] = useState(false) const [autoDims, setAutoDims] = useState(true) + const [showAdvanced, setShowAdvanced] = useState(false) const { t } = useTranslation() const { providers } = useProviders() const { addKnowledgeBase } = useKnowledgeBases() const [newBase, setNewBase] = useState({} as KnowledgeBase) const [dimensions, setDimensions] = useState(undefined) - const [selectedMenu, setSelectedMenu] = useState('general') const { preprocessProviders } = usePreprocessProviders() const { ocrProviders } = useOcrProviders() @@ -60,6 +60,7 @@ const PopupContainer: React.FC = ({ title, resolve }) => { }, [providers]) const nameInputRef = useRef(null) + const scrollContainerRef = useRef(null) const embeddingSelectOptions = useMemo(() => { return providers @@ -186,252 +187,19 @@ const PopupContainer: React.FC = ({ title, resolve }) => { resolve(null) } - const menuItems = [ - { - key: 'general', - label: t('settings.general') - }, - { - key: 'advanced', - label: t('settings.advanced.title') + useEffect(() => { + if (showAdvanced && scrollContainerRef.current) { + // 延迟滚动,确保DOM更新完成 + setTimeout(() => { + if (scrollContainerRef.current) { + scrollContainerRef.current.scrollTo({ + top: scrollContainerRef.current.scrollHeight, + behavior: 'smooth' + }) + } + }, 300) } - ] - - const renderSettings = () => { - if (selectedMenu === 'general') { - return ( - - -
{t('common.name')}
- { - if (e.target.value) { - setNewBase({ ...newBase, name: e.target.value }) - } - }} - /> -
- - -
- {t('settings.tool.preprocess.title')} / {t('settings.tool.ocr.title')} - - - -
- { - const model = value - ? providers.flatMap((p) => p.models).find((m) => getModelUniqId(m) === value) - : undefined - if (!model) return - setNewBase({ ...newBase, model }) - }} - /> -
- - -
- {t('models.rerank_model')} - - - -
- { + if (e.target.value) { + setNewBase({ ...newBase, name: e.target.value }) + } + }} + /> +
+ + +
+ {t('settings.tool.preprocess.title')} / {t('settings.tool.ocr.title')} + + + +
+ { + const model = value + ? providers.flatMap((p) => p.models).find((m) => getModelUniqId(m) === value) + : undefined + if (!model) return + setNewBase({ ...newBase, model }) + }} + /> +
+ + +
+ {t('models.rerank_model')} + + + +
+ = ({ base: _base, resolve }) => {
{t('models.embedding_model')} - +
= ({ base: _base, resolve }) => {
{t('knowledge.document_count')} - +
= ({ base: _base, resolve }) => {
{t('knowledge.chunk_size')} - +
= ({ base: _base, resolve }) => {
{t('knowledge.chunk_overlap')} - +
= ({ base: _base, resolve }) => {
{t('knowledge.threshold')} - +
= ({ base: _base, resolve }) => { destroyOnClose maskClosable={false} centered + transitionName="animation-move-down" width="min(800px, 70vw)" styles={{ - body: { padding: 0, height: '50vh' }, + body: { padding: 0, height: 450 }, header: { padding: '10px 15px', borderBottom: '0.5px solid var(--color-border)', @@ -330,10 +329,11 @@ const PopupContainer: React.FC = ({ base: _base, resolve }) => { }, content: { padding: 0, + paddingBottom: 10, overflow: 'hidden' } }}> - +