first-update
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
'use client';
|
||||
|
||||
import { useState, useCallback } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { selectedModelInfoAtom } from '@/lib/store';
|
||||
import { useAtomValue } from 'jotai/index';
|
||||
import { toast } from 'sonner';
|
||||
import i18n from '@/lib/i18n';
|
||||
import axios from 'axios';
|
||||
|
||||
/**
|
||||
* 文件处理的自定义Hook
|
||||
* @param {string} projectId - 项目ID
|
||||
* @returns {Object} - 文件处理状态和操作方法
|
||||
*/
|
||||
export default function useFileProcessing(projectId) {
|
||||
const { t } = useTranslation();
|
||||
const [fileProcessing, setFileProcessing] = useState(false);
|
||||
const [progress, setProgress] = useState({
|
||||
total: 0,
|
||||
completed: 0,
|
||||
percentage: 0,
|
||||
questionCount: 0
|
||||
});
|
||||
const model = useAtomValue(selectedModelInfoAtom);
|
||||
|
||||
/**
|
||||
* 重置进度状态
|
||||
*/
|
||||
const resetProgress = useCallback(() => {
|
||||
setTimeout(() => {
|
||||
setProgress({
|
||||
total: 0,
|
||||
completed: 0,
|
||||
percentage: 0,
|
||||
questionCount: 0
|
||||
});
|
||||
}, 1000); // 延迟重置,让用户看到完成的进度
|
||||
}, []);
|
||||
|
||||
/**
|
||||
* 处理文件
|
||||
* @param {Array} files - 文件列表
|
||||
* @param {string} pdfStrategy - PDF处理策略
|
||||
* @param {string} selectedViosnModel - 选定的视觉模型
|
||||
*/
|
||||
const handleFileProcessing = useCallback(
|
||||
async (files, pdfStrategy, selectedViosnModel, domainTreeAction) => {
|
||||
try {
|
||||
const currentLanguage = i18n.language === 'zh-CN' ? '中文' : 'en';
|
||||
|
||||
//获取到视觉策略要使用的模型
|
||||
const availableModels = JSON.parse(localStorage.getItem('modelConfigList'));
|
||||
const vsionModel = availableModels.find(m => m.id === selectedViosnModel);
|
||||
|
||||
const response = await axios.post(`/api/projects/${projectId}/tasks`, {
|
||||
taskType: 'file-processing',
|
||||
modelInfo: model,
|
||||
language: currentLanguage,
|
||||
detail: '文件处理任务',
|
||||
note: {
|
||||
vsionModel,
|
||||
projectId,
|
||||
fileList: files,
|
||||
strategy: pdfStrategy,
|
||||
domainTreeAction
|
||||
}
|
||||
});
|
||||
|
||||
if (response.data?.code !== 0) {
|
||||
throw new Error(t('textSplit.pdfProcessingFailed') + (response.data?.error || ''));
|
||||
}
|
||||
|
||||
//提示后台任务进行中
|
||||
toast.success(t('textSplit.pdfProcessingToast'));
|
||||
} catch (error) {
|
||||
toast.error(t('textSplit.pdfProcessingFailed') + error.message || '');
|
||||
}
|
||||
},
|
||||
[projectId, t, resetProgress, model]
|
||||
);
|
||||
|
||||
return {
|
||||
fileProcessing,
|
||||
progress,
|
||||
setFileProcessing,
|
||||
setProgress,
|
||||
handleFileProcessing,
|
||||
resetProgress
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user