feat(knowledge): add team filtering and improve request handling

This commit is contained in:
2025-10-29 13:24:19 +08:00
parent ef0a99ea30
commit 184c232cc8
3 changed files with 58 additions and 56 deletions

View File

@@ -1,7 +1,8 @@
import { useState, useEffect, useCallback, useMemo } from 'react';
import knowledgeService from '@/services/knowledge_service';
import type { IKnowledge, IKnowledgeGraph, IKnowledgeResult } from '@/interfaces/database/knowledge';
import type { IFetchKnowledgeListRequestParams } from '@/interfaces/request/knowledge';
import type { IFetchKnowledgeListRequestBody, IFetchKnowledgeListRequestParams } from '@/interfaces/request/knowledge';
import logger from '@/utils/logger';
/**
{
@@ -64,8 +65,9 @@ export interface UseKnowledgeListState {
// 知识库列表Hook返回值接口
export interface UseKnowledgeListReturn extends UseKnowledgeListState {
fetchKnowledgeBases: (params?: IFetchKnowledgeListRequestParams) => Promise<void>;
fetchKnowledgeBases: (params?: IFetchKnowledgeListRequestParams & IFetchKnowledgeListRequestBody) => Promise<void>;
setKeywords: (keywords: string) => void;
setTeamFilter: (teamFilter: string[]) => void;
setCurrentPage: (page: number) => void;
setPageSize: (size: number) => void;
refresh: () => Promise<void>;
@@ -76,7 +78,7 @@ export interface UseKnowledgeListReturn extends UseKnowledgeListState {
* 支持关键词搜索、分页等功能
*/
export const useKnowledgeList = (
initialParams?: IFetchKnowledgeListRequestParams
initialParams?: IFetchKnowledgeListRequestParams & IFetchKnowledgeListRequestBody
): UseKnowledgeListReturn => {
const [knowledgeBases, setKnowledgeBases] = useState<IKnowledge[]>([]);
const [total, setTotal] = useState(0);
@@ -85,11 +87,12 @@ export const useKnowledgeList = (
const [currentPage, setCurrentPage] = useState(initialParams?.page || 1);
const [pageSize, setPageSize] = useState(initialParams?.page_size || 10);
const [keywords, setKeywords] = useState(initialParams?.keywords || '');
const [filterData, setFilterData] = useState<any>({});
/**
* 获取知识库列表
*/
const fetchKnowledgeBases = useCallback(async (params?: IFetchKnowledgeListRequestParams) => {
const fetchKnowledgeBases = useCallback(async (params?: IFetchKnowledgeListRequestParams & IFetchKnowledgeListRequestBody) => {
try {
setLoading(true);
setError(null);
@@ -102,13 +105,17 @@ export const useKnowledgeList = (
};
// 构建请求体
const requestBody: any = {};
if (queryParams.keywords && queryParams.keywords.trim()) {
requestBody.keywords = queryParams.keywords.trim();
const requestBody: IFetchKnowledgeListRequestBody = {};
if (params?.owner_ids && params.owner_ids.length > 0) {
requestBody.owner_ids = params.owner_ids;
}
if (filterData.owner_ids && filterData.owner_ids.length > 0) {
requestBody.owner_ids = filterData.owner_ids;
}
// 构建查询参数
const requestParams: any = {};
const requestParams: IFetchKnowledgeListRequestParams = {};
if (queryParams.page) {
requestParams.page = queryParams.page;
}
@@ -139,7 +146,7 @@ export const useKnowledgeList = (
} finally {
setLoading(false);
}
}, [keywords, currentPage, pageSize]);
}, [keywords, currentPage, pageSize, filterData]);
/**
* 刷新当前页面数据
@@ -156,6 +163,10 @@ export const useKnowledgeList = (
setCurrentPage(1);
}, []);
const handleSetTeamFilter = useCallback((newTeamFilter: string[]) => {
setFilterData({ ...filterData, owner_ids: newTeamFilter });
}, []);
/**
* 设置当前页
*/
@@ -173,8 +184,10 @@ export const useKnowledgeList = (
// 当关键词、页码或页面大小变化时重新获取数据
useEffect(() => {
logger.info('useEffect currentPage:', currentPage);
logger.info('useEffect pageSize:', pageSize);
fetchKnowledgeBases();
}, [keywords, currentPage, pageSize]);
}, [currentPage, pageSize, filterData, keywords]);
return {
knowledgeBases,
@@ -186,6 +199,7 @@ export const useKnowledgeList = (
keywords,
fetchKnowledgeBases,
setKeywords: handleSetKeywords,
setTeamFilter: handleSetTeamFilter,
setCurrentPage: handleSetCurrentPage,
setPageSize: handleSetPageSize,
refresh,