style(web): translate the comments in the src/views directory into English

This commit is contained in:
zhaoying
2026-02-03 18:38:04 +08:00
parent a191e32f71
commit 9e195ea63b
155 changed files with 4169 additions and 586 deletions

View File

@@ -1,6 +1,19 @@
/*
* @Author: ZhaoYing
* @Date: 2026-02-03 16:25:32
* @Last Modified by: ZhaoYing
* @Last Modified time: 2026-02-03 16:25:32
*/
/**
* Knowledge Base Component
* Manages knowledge base associations for the application
* Allows adding, configuring, and removing knowledge bases
*/
import { type FC, useRef, useState, useEffect } from 'react'
import { useTranslation } from 'react-i18next'
import { Space, Button, List } from 'antd'
import knowledgeEmpty from '@/assets/images/application/knowledgeEmpty.svg'
import type {
KnowledgeConfigForm,
@@ -19,6 +32,11 @@ import Tag from '@/components/Tag'
import { getKnowledgeBaseList } from '@/api/knowledgeBase'
import Card from '../Card'
/**
* Knowledge base management component
* @param value - Current knowledge configuration
* @param onChange - Callback when configuration changes
*/
const Knowledge: FC<{value?: KnowledgeConfig; onChange?: (config: KnowledgeConfig) => void}> = ({value = {knowledge_bases: []}, onChange}) => {
const { t } = useTranslation()
const knowledgeModalRef = useRef<KnowledgeModalRef>(null)
@@ -32,10 +50,10 @@ const Knowledge: FC<{value?: KnowledgeConfig; onChange?: (config: KnowledgeConfi
setEditConfig({ ...(value || {}) })
const knowledge_bases = [...(value.knowledge_bases || [])]
// 检查是否有knowledge_bases缺少name字段
// Check if knowledge_bases are missing name field
const basesWithoutName = knowledge_bases.filter(base => !base.name)
if (basesWithoutName.length > 0) {
// 调用接口获取完整的知识库信息
// Call API to get complete knowledge base information
getKnowledgeBaseList().then(res => {
const fullBases = knowledge_bases.map(base => {
if (!base.name) {
@@ -54,12 +72,15 @@ const Knowledge: FC<{value?: KnowledgeConfig; onChange?: (config: KnowledgeConfi
}
}, [value])
/** Open global knowledge configuration modal */
const handleKnowledgeConfig = () => {
knowledgeGlobalConfigModalRef.current?.handleOpen()
}
/** Open knowledge base selection modal */
const handleAddKnowledge = () => {
knowledgeModalRef.current?.handleOpen()
}
/** Remove knowledge base from list */
const handleDeleteKnowledge = (id: string) => {
const list = knowledgeList.filter(item => item.id !== id)
setKnowledgeList([...list])
@@ -68,9 +89,11 @@ const Knowledge: FC<{value?: KnowledgeConfig; onChange?: (config: KnowledgeConfi
knowledge_bases: [...list],
})
}
/** Open knowledge base configuration modal */
const handleEditKnowledge = (item: KnowledgeBase) => {
knowledgeConfigModalRef.current?.handleOpen(item)
}
/** Update knowledge configuration */
const refresh = (values: KnowledgeBase[] | KnowledgeConfigForm | RerankerConfig, type: 'knowledge' | 'knowledgeConfig' | 'rerankerConfig') => {
if (type === 'knowledge') {
let list = [...knowledgeList]

View File

@@ -1,3 +1,15 @@
/*
* @Author: ZhaoYing
* @Date: 2026-02-03 16:25:37
* @Last Modified by: ZhaoYing
* @Last Modified time: 2026-02-03 16:25:37
*/
/**
* Knowledge Configuration Modal
* Configures retrieval settings for individual knowledge bases
* Supports different retrieval modes: participle, semantic, and hybrid
*/
import { forwardRef, useEffect, useImperativeHandle, useState } from 'react';
import { Form, Select, InputNumber } from 'antd';
import { useTranslation } from 'react-i18next';
@@ -9,11 +21,22 @@ import { formatDateTime } from '@/utils/format';
const FormItem = Form.Item;
/**
* Component props
*/
interface KnowledgeConfigModalProps {
/** Callback to update knowledge configuration */
refresh: (values: KnowledgeConfigForm, type: 'knowledgeConfig') => void;
}
/**
* Available retrieval types
*/
const retrieveTypes: RetrieveType[] = ['participle', 'semantic', 'hybrid']
/**
* Modal for configuring knowledge base retrieval settings
*/
const KnowledgeConfigModal = forwardRef<KnowledgeConfigModalRef, KnowledgeConfigModalProps>(({
refresh,
}, ref) => {
@@ -24,13 +47,14 @@ const KnowledgeConfigModal = forwardRef<KnowledgeConfigModalRef, KnowledgeConfig
const values = Form.useWatch<KnowledgeConfigForm>([], form);
// 封装取消方法,添加关闭弹窗逻辑
/** Close modal and reset form */
const handleClose = () => {
setVisible(false);
form.resetFields();
setData(null)
};
/** Open modal with knowledge base data */
const handleOpen = (data: KnowledgeBase) => {
form.setFieldsValue({
retrieve_type: data?.config?.retrieve_type || retrieveTypes[0],
@@ -44,7 +68,7 @@ const KnowledgeConfigModal = forwardRef<KnowledgeConfigModalRef, KnowledgeConfig
setData({...data})
setVisible(true);
};
// 封装保存方法,添加提交逻辑
/** Save knowledge configuration */
const handleSave = () => {
form
.validateFields()
@@ -57,7 +81,7 @@ const KnowledgeConfigModal = forwardRef<KnowledgeConfigModalRef, KnowledgeConfig
});
}
// 暴露给父组件的方法
/** Expose methods to parent component */
useImperativeHandle(ref, () => ({
handleOpen,
handleClose
@@ -94,7 +118,7 @@ const KnowledgeConfigModal = forwardRef<KnowledgeConfigModalRef, KnowledgeConfig
</div>
)}
<FormItem name="kb_id" hidden />
{/* 检索模式 */}
{/* Retrieval mode */}
<FormItem
name="retrieve_type"
label={t('application.retrieve_type')}
@@ -124,7 +148,7 @@ const KnowledgeConfigModal = forwardRef<KnowledgeConfigModalRef, KnowledgeConfig
onChange={(value) => form.setFieldValue('top_k', value)}
/>
</FormItem>
{/* 语义相似度阈值 similarity_threshold */}
{/* Semantic similarity threshold */}
{values?.retrieve_type === 'semantic' && (
<FormItem
name="similarity_threshold"
@@ -139,7 +163,7 @@ const KnowledgeConfigModal = forwardRef<KnowledgeConfigModalRef, KnowledgeConfig
/>
</FormItem>
)}
{/* 分词匹配度阈值 vector_similarity_weight */}
{/* Word segmentation matching threshold */}
{values?.retrieve_type === 'participle' && (
<FormItem
name="vector_similarity_weight"
@@ -154,7 +178,7 @@ const KnowledgeConfigModal = forwardRef<KnowledgeConfigModalRef, KnowledgeConfig
/>
</FormItem>
)}
{/* 混合检索权重 */}
{/* Hybrid retrieval weight */}
{values?.retrieve_type === 'hybrid' && (
<>
<FormItem

View File

@@ -1,3 +1,14 @@
/*
* @Author: ZhaoYing
* @Date: 2026-02-03 16:25:42
* @Last Modified by: ZhaoYing
* @Last Modified time: 2026-02-03 16:25:42
*/
/**
* Knowledge Global Configuration Modal
* Configures global reranker settings for all knowledge bases
*/
import { forwardRef, useImperativeHandle, useState, useEffect } from 'react';
import { Form, InputNumber, Switch } from 'antd';
import { useTranslation } from 'react-i18next';
@@ -9,11 +20,19 @@ import { getModelListUrl } from '@/api/models'
const FormItem = Form.Item;
/**
* Component props
*/
interface KnowledgeGlobalConfigModalProps {
/** Current reranker configuration */
data: RerankerConfig;
/** Callback to update reranker configuration */
refresh: (values: RerankerConfig, type: 'rerankerConfig') => void;
}
/**
* Modal for configuring global reranker settings
*/
const KnowledgeGlobalConfigModal = forwardRef<KnowledgeGlobalConfigModalRef, KnowledgeGlobalConfigModalProps>(({
refresh,
data,
@@ -23,17 +42,18 @@ const KnowledgeGlobalConfigModal = forwardRef<KnowledgeGlobalConfigModalRef, Kno
const [form] = Form.useForm<RerankerConfig>();
const values = Form.useWatch<RerankerConfig>([], form);
// 封装取消方法,添加关闭弹窗逻辑
/** Close modal and reset form */
const handleClose = () => {
setVisible(false);
form.resetFields();
};
/** Open modal with current configuration */
const handleOpen = () => {
form.setFieldsValue({ ...data, rerank_model: !!data?.reranker_id })
setVisible(true);
};
// 封装保存方法,添加提交逻辑
/** Save reranker configuration */
const handleSave = () => {
form
.validateFields()
@@ -54,7 +74,7 @@ const KnowledgeGlobalConfigModal = forwardRef<KnowledgeGlobalConfigModalRef, Kno
}
}, [values?.rerank_model])
// 暴露给父组件的方法
/** Expose methods to parent component */
useImperativeHandle(ref, () => ({
handleOpen,
}));
@@ -73,7 +93,7 @@ const KnowledgeGlobalConfigModal = forwardRef<KnowledgeGlobalConfigModalRef, Kno
>
<div className="rb:text-[#5B6167] rb:mb-6">{t('application.globalConfigDesc')}</div>
{/* 结果重排 */}
{/* Result reranking */}
<div className="rb:flex rb:items-center rb:justify-between rb:my-6">
<div className="rb:text-[14px] rb:font-medium rb:leading-5">
{t('application.rerankModel')}

View File

@@ -1,7 +1,19 @@
/*
* @Author: ZhaoYing
* @Date: 2026-02-03 16:25:49
* @Last Modified by: ZhaoYing
* @Last Modified time: 2026-02-03 16:25:49
*/
/**
* Knowledge List Modal
* Displays and allows selection of knowledge bases to associate with the application
*/
import { forwardRef, useEffect, useImperativeHandle, useState } from 'react';
import { Space, List } from 'antd';
import { useTranslation } from 'react-i18next';
import clsx from 'clsx'
import type { KnowledgeModalRef, KnowledgeBase } from './types'
import type { KnowledgeBaseListItem } from '@/views/KnowledgeBase/types'
import RbModal from '@/components/RbModal'
@@ -9,11 +21,19 @@ import { getKnowledgeBaseList } from '@/api/knowledgeBase'
import SearchInput from '@/components/SearchInput'
import Empty from '@/components/Empty'
import { formatDateTime } from '@/utils/format';
/**
* Component props
*/
interface KnowledgeModalProps {
/** Callback to add selected knowledge bases */
refresh: (rows: KnowledgeBase[], type: 'knowledge') => void;
/** Currently selected knowledge bases */
selectedList: KnowledgeBase[];
}
/**
* Modal for selecting knowledge bases
*/
const KnowledgeListModal = forwardRef<KnowledgeModalRef, KnowledgeModalProps>(({
refresh,
selectedList
@@ -26,7 +46,7 @@ const KnowledgeListModal = forwardRef<KnowledgeModalRef, KnowledgeModalProps>(({
const [selectedIds, setSelectedIds] = useState<string[]>([])
const [selectedRows, setSelectedRows] = useState<KnowledgeBase[]>([])
// 封装取消方法,添加关闭弹窗逻辑
/** Close modal and reset state */
const handleClose = () => {
setVisible(false);
setQuery({})
@@ -34,6 +54,7 @@ const KnowledgeListModal = forwardRef<KnowledgeModalRef, KnowledgeModalProps>(({
setSelectedRows([])
};
/** Open modal */
const handleOpen = () => {
setVisible(true);
setQuery({})
@@ -46,6 +67,7 @@ const KnowledgeListModal = forwardRef<KnowledgeModalRef, KnowledgeModalProps>(({
getList()
}
}, [query.keywords, visible])
/** Fetch knowledge base list */
const getList = () => {
getKnowledgeBaseList(undefined, {
...query,
@@ -58,7 +80,7 @@ const KnowledgeListModal = forwardRef<KnowledgeModalRef, KnowledgeModalProps>(({
setList(response.items || [])
})
}
// 封装保存方法,添加提交逻辑
/** Save selected knowledge bases */
const handleSave = () => {
refresh(selectedRows.map(item => ({
...item,
@@ -72,16 +94,18 @@ const KnowledgeListModal = forwardRef<KnowledgeModalRef, KnowledgeModalProps>(({
setVisible(false);
}
// 暴露给父组件的方法
/** Expose methods to parent component */
useImperativeHandle(ref, () => ({
handleOpen,
handleClose
}));
/** Search knowledge bases */
const handleSearch = (value?: string) => {
setQuery({keywords: value})
setSelectedIds([])
setSelectedRows([])
}
/** Toggle knowledge base selection */
const handleSelect = (item: KnowledgeBase) => {
const index = selectedIds.indexOf(item.id)
if (index === -1) {

View File

@@ -1,30 +1,87 @@
/*
* @Author: ZhaoYing
* @Date: 2026-02-03 16:25:53
* @Last Modified by: ZhaoYing
* @Last Modified time: 2026-02-03 16:25:53
*/
/**
* Type definitions for knowledge base configuration in application settings
*/
import type { KnowledgeBaseListItem } from '@/views/KnowledgeBase/types'
/**
* Reranker configuration for knowledge retrieval
*/
export interface RerankerConfig {
/** Whether to enable rerank model */
rerank_model?: boolean | undefined;
/** Reranker model ID */
reranker_id?: string | undefined;
/** Top K results for reranking */
reranker_top_k?: number | undefined;
}
/**
* Knowledge retrieval type
* - participle: Word segmentation based retrieval
* - semantic: Semantic similarity based retrieval
* - hybrid: Combination of both methods
*/
export type RetrieveType = 'participle' | 'semantic' | 'hybrid'
/**
* Knowledge base configuration form data
*/
export interface KnowledgeConfigForm {
/** Knowledge base ID */
kb_id?: string;
/** Similarity threshold for retrieval (0-1) */
similarity_threshold?: number;
/** Weight for vector similarity in hybrid mode (0-1) */
vector_similarity_weight?: number;
/** Number of top results to retrieve */
top_k?: number;
/** Retrieval strategy type */
retrieve_type?: RetrieveType;
}
/**
* Knowledge base with configuration
*/
export interface KnowledgeBase extends KnowledgeBaseListItem, KnowledgeConfigForm {
/** Additional configuration object */
config?: KnowledgeConfigForm
}
/**
* Complete knowledge configuration including reranker settings
*/
export interface KnowledgeConfig extends RerankerConfig {
/** List of configured knowledge bases */
knowledge_bases: KnowledgeBase[];
}
/**
* Modal ref for individual knowledge base configuration
*/
export interface KnowledgeConfigModalRef {
/** Open modal with knowledge base data */
handleOpen: (data: KnowledgeBase) => void;
}
/**
* Modal ref for global knowledge configuration
*/
export interface KnowledgeGlobalConfigModalRef {
/** Open global configuration modal */
handleOpen: () => void;
}
/**
* Modal ref for knowledge base selection
*/
export interface KnowledgeModalRef {
/** Open modal with optional existing configuration */
handleOpen: (config?: KnowledgeConfig[]) => void;
}