fix(agent): redirect to blank page when navigating home from model page

This commit is contained in:
Zhu,JW
2025-11-24 11:22:03 +08:00
parent 79ee33be7c
commit 898c0988db
6 changed files with 39 additions and 4 deletions

View File

@@ -11,6 +11,7 @@ export default {
yes: 'Yes', yes: 'Yes',
no: 'No', no: 'No',
total: 'Total', total: 'Total',
know: 'Known',
rename: 'Rename', rename: 'Rename',
name: 'Name', name: 'Name',
save: 'Save', save: 'Save',
@@ -106,6 +107,7 @@ export default {
noMoreData: `That's all. Nothing more.`, noMoreData: `That's all. Nothing more.`,
}, },
knowledgeDetails: { knowledgeDetails: {
pleaseAddEmbeddingModel: 'Please add embedding model and LLM in the model provider first, then set them in "Set Default Model".',
localUpload: 'Local Upload', localUpload: 'Local Upload',
fileSize: 'File Size', fileSize: 'File Size',
fileType: 'File Type', fileType: 'File Type',

View File

@@ -11,6 +11,7 @@ export default {
yes: '是', yes: '是',
no: '否', no: '否',
total: '总共', total: '总共',
know: '知道了',
rename: '重命名', rename: '重命名',
name: '名称', name: '名称',
save: '保存', save: '保存',
@@ -99,6 +100,7 @@ export default {
noMoreData: '没有更多数据了', noMoreData: '没有更多数据了',
}, },
knowledgeDetails: { knowledgeDetails: {
pleaseAddEmbeddingModel: '请先在模型提供商中添加嵌入模型和LLM然后在"设置默认模型"中设置它们。',
localUpload: '本地上传', localUpload: '本地上传',
fileSize: '文件大小', fileSize: '文件大小',
fileType: '文件类型', fileType: '文件类型',

View File

@@ -1,10 +1,14 @@
import { useState, useCallback, useEffect, useRef } from 'react'; import { useState, useCallback, useEffect, useRef } from 'react';
import agentService from '@/services/agent_service'; import agentService from '@/services/agent_service';
import userService from '@/services/user_service';
import type { IAgent, IGraph } from '@/interfaces/database/agent'; import type { IAgent, IGraph } from '@/interfaces/database/agent';
import type { IAgentPaginationParams, IAgentCreateRequestBody, IAgentSettingRequestBody } from '@/interfaces/request/agent'; import type { IAgentPaginationParams, IAgentCreateRequestBody, IAgentSettingRequestBody } from '@/interfaces/request/agent';
import logger from '@/utils/logger'; import logger from '@/utils/logger';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { useSnackbar } from '@/hooks/useSnackbar'; import { useSnackbar } from '@/hooks/useSnackbar';
import { useDialog } from '@/hooks/useDialog';
import { useNavigate } from 'react-router-dom';
import { isEmpty } from 'lodash';
export interface UseAgentListState { export interface UseAgentListState {
agents: IAgent[]; agents: IAgent[];
@@ -39,6 +43,28 @@ export const useAgentList = (initialParams?: IAgentPaginationParams) => {
const [currentPage, setCurrentPage] = useState(initialParams?.page || 1); const [currentPage, setCurrentPage] = useState(initialParams?.page || 1);
const [pageSize, setPageSize] = useState(initialParams?.page_size || 10); const [pageSize, setPageSize] = useState(initialParams?.page_size || 10);
const [keywords, setKeywords] = useState(initialParams?.keywords || ''); const [keywords, setKeywords] = useState(initialParams?.keywords || '');
const { showMessage } = useSnackbar();
const dialog = useDialog();
const navigate = useNavigate();
const { t } = useTranslation();
// 查询是否有默认的模型
const checkDefaultModel = useCallback(async (id: string) => {
const { data: res } = await userService.getTenantInfo();
if (res.code === 0) {
const { data } = res;
if (isEmpty(data.embd_id) || isEmpty(data.llm_id)) {
await dialog.warning({
title: t('common.warn'),
content: t('knowledgeDetails.pleaseAddEmbeddingModel'),
confirmText: t('common.know')
});
navigate(`/models`);
} else {
navigate(`/route-ragflow/agent/${id}`);
}
}
}, [dialog, navigate, showMessage]);
const fetchAgentList = useCallback(async (params?: IAgentPaginationParams) => { const fetchAgentList = useCallback(async (params?: IAgentPaginationParams) => {
setLoading(true); setLoading(true);
@@ -81,6 +107,7 @@ export const useAgentList = (initialParams?: IAgentPaginationParams) => {
currentPage, currentPage,
pageSize, pageSize,
keywords, keywords,
checkDefaultModel,
fetchAgents: fetchAgentList, fetchAgents: fetchAgentList,
setKeywords, setKeywords,
setCurrentPage, setCurrentPage,

View File

@@ -15,6 +15,7 @@ export default {
total: 'Total', total: 'Total',
rename: 'Rename', rename: 'Rename',
name: 'Name', name: 'Name',
know: 'Known',
save: 'Save', save: 'Save',
namePlaceholder: 'Please input name', namePlaceholder: 'Please input name',
next: 'Next', next: 'Next',
@@ -425,6 +426,7 @@ export default {
paginationInfo: 'Total {{total}} knowledge bases, page {{current}} of {{totalPages}}', paginationInfo: 'Total {{total}} knowledge bases, page {{current}} of {{totalPages}}',
}, },
knowledgeDetails: { knowledgeDetails: {
pleaseAddEmbeddingModel: 'Please add embedding model and LLM in the model provider first, then set them in "Set Default Model".',
fileSize: 'File Size', fileSize: 'File Size',
fileType: 'File Type', fileType: 'File Type',
uploadedBy: 'Uploaded by', uploadedBy: 'Uploaded by',

View File

@@ -13,6 +13,7 @@ export default {
cancel: '否', cancel: '否',
total: '总共', total: '总共',
rename: '重命名', rename: '重命名',
know: '知道了',
name: '名称', name: '名称',
save: '保存', save: '保存',
namePlaceholder: '请输入名称', namePlaceholder: '请输入名称',
@@ -423,6 +424,7 @@ export default {
paginationInfo: '共 {{total}} 个知识库,第 {{current}} 页,共 {{totalPages}} 页', paginationInfo: '共 {{total}} 个知识库,第 {{current}} 页,共 {{totalPages}} 页',
}, },
knowledgeDetails: { knowledgeDetails: {
pleaseAddEmbeddingModel: '请先在模型提供商中添加嵌入模型和LLM然后在"设置默认模型"中设置它们。',
fileSize: '文件大小', fileSize: '文件大小',
fileType: '文件类型', fileType: '文件类型',
uploadedBy: '创建者', uploadedBy: '创建者',

View File

@@ -17,7 +17,6 @@ import EditAgentDialog from './components/EditAgentDialog';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { useDialog } from '@/hooks/useDialog'; import { useDialog } from '@/hooks/useDialog';
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
function AgentListPage() { function AgentListPage() {
const [searchValue, setSearchValue] = useState(''); const [searchValue, setSearchValue] = useState('');
const [createOpen, setCreateOpen] = useState(false); const [createOpen, setCreateOpen] = useState(false);
@@ -31,6 +30,7 @@ function AgentListPage() {
pageSize, pageSize,
setCurrentPage, setCurrentPage,
setKeywords, setKeywords,
checkDefaultModel,
refresh, refresh,
} = useAgentList({ page: 1, page_size: 10 }); } = useAgentList({ page: 1, page_size: 10 });
@@ -40,8 +40,8 @@ function AgentListPage() {
const ops = useAgentOperations(); const ops = useAgentOperations();
const totalPages = useMemo(() => { const totalPages = useMemo(() => {
return Math.ceil((agents?.length || 0) / pageSize) || 1; return Math.ceil((total || 0) / pageSize) || 1;
}, [agents, pageSize]); }, [total, pageSize]);
const currentPageData = useMemo(() => { const currentPageData = useMemo(() => {
const startIndex = (currentPage - 1) * pageSize; const startIndex = (currentPage - 1) * pageSize;
@@ -108,7 +108,7 @@ function AgentListPage() {
onCreateAgent={() => setCreateOpen(true)} onCreateAgent={() => setCreateOpen(true)}
onEdit={(agent) => { setEditTarget(agent); setEditOpen(true); }} onEdit={(agent) => { setEditTarget(agent); setEditOpen(true); }}
onView={(agent) => { onView={(agent) => {
navigate(`/route-ragflow/agent/${agent.id}`); checkDefaultModel(agent.id);
}} }}
onDelete={async (agent) => { onDelete={async (agent) => {
const confirmed = await dialog.confirm({ const confirmed = await dialog.confirm({