fix:清除一些关于通过api接入dify不支持修改的功能

This commit is contained in:
PingChuan
2025-12-09 16:53:24 +08:00
parent eb05318074
commit 7ce3acd771
3 changed files with 91 additions and 120 deletions
@@ -1,8 +1,7 @@
import { useState, useEffect, useCallback } from 'react';
import { message } from 'antd';
import type { FormInstance } from 'antd';
import { useCallback, useEffect, useState } from 'react';
import { fetchDataset, updateDatasetSettings } from '~/api/dify-dataset/api/datasetApi';
import type { Dataset, RetrievalModel } from '~/api/dify-dataset/type/datasetTypes';
import { updateDatasetSettings, fetchDataset } from '~/api/dify-dataset/api/datasetApi';
import { DIFY_CONFIG } from '~/config/api-config';
/**
@@ -75,10 +74,10 @@ function formValuesToRetrievalModel(values: RetrievalSettingsFormValues): Retrie
/**
* 知识库设置状态管理 Hook
* 注:Dify API 不支持修改知识库名称和描述,只支持修改检索设置
*/
export function useDatasetSettings(
dataset: Dataset | null,
form: FormInstance,
onDatasetUpdated: (dataset: Dataset) => void
) {
const [saving, setSaving] = useState(false);
@@ -89,18 +88,36 @@ export function useDatasetSettings(
() => retrievalModelToFormValues(dataset?.retrieval_model_dict)
);
// 初始化表单数据
// 原始检索设置,用于对比变化
const [originalSettings, setOriginalSettings] = useState<RetrievalSettingsFormValues>(
() => retrievalModelToFormValues(dataset?.retrieval_model_dict)
);
// 初始化检索设置
useEffect(() => {
if (dataset) {
form.setFieldsValue({
name: dataset.name,
description: dataset.description || '',
});
console.log('[DatasetSettings] 初始化检索设置, retrieval_model_dict:', dataset.retrieval_model_dict);
setRetrievalSettings(retrievalModelToFormValues(dataset.retrieval_model_dict));
const settings = retrievalModelToFormValues(dataset.retrieval_model_dict);
setRetrievalSettings(settings);
setOriginalSettings(settings);
setHasChanges(false);
}
}, [dataset, form]);
}, [dataset]);
/**
* 检查检索设置是否有变化
*/
const checkRetrievalChanges = useCallback((newSettings: RetrievalSettingsFormValues) => {
const hasChanged =
newSettings.searchMethod !== originalSettings.searchMethod ||
newSettings.topK !== originalSettings.topK ||
newSettings.scoreThresholdEnabled !== originalSettings.scoreThresholdEnabled ||
newSettings.scoreThreshold !== originalSettings.scoreThreshold ||
newSettings.rerankingEnable !== originalSettings.rerankingEnable ||
newSettings.weights !== originalSettings.weights;
setHasChanges(hasChanged);
}, [originalSettings]);
/**
* 更新检索设置
@@ -112,40 +129,14 @@ export function useDatasetSettings(
setRetrievalSettings(prev => {
const newSettings = { ...prev, [key]: value };
// 检查是否有变化
checkForChanges(newSettings);
checkRetrievalChanges(newSettings);
return newSettings;
});
}, [dataset]);
/**
* 检查是否有变化
*/
const checkForChanges = useCallback((newRetrievalSettings?: RetrievalSettingsFormValues) => {
const values = form.getFieldsValue();
const currentRetrieval = newRetrievalSettings || retrievalSettings;
const originalRetrieval = retrievalModelToFormValues(dataset?.retrieval_model_dict);
const nameChanged = values.name !== dataset?.name;
const retrievalChanged =
currentRetrieval.searchMethod !== originalRetrieval.searchMethod ||
currentRetrieval.topK !== originalRetrieval.topK ||
currentRetrieval.scoreThresholdEnabled !== originalRetrieval.scoreThresholdEnabled ||
currentRetrieval.scoreThreshold !== originalRetrieval.scoreThreshold ||
currentRetrieval.rerankingEnable !== originalRetrieval.rerankingEnable ||
currentRetrieval.weights !== originalRetrieval.weights;
setHasChanges(nameChanged || retrievalChanged);
}, [form, dataset, retrievalSettings]);
/**
* 处理表单值变化
*/
const handleValuesChange = useCallback(() => {
checkForChanges();
}, [checkForChanges]);
}, [checkRetrievalChanges]);
/**
* 保存设置
* 注:仅保存检索设置,Dify API 不支持修改名称和描述
*/
const handleSave = useCallback(async () => {
if (!dataset) {
@@ -154,12 +145,10 @@ export function useDatasetSettings(
}
try {
const values = await form.validateFields();
setSaving(true);
// 构建完整的更新请求
// 仅更新检索设置
await updateDatasetSettings(dataset.id, {
name: values.name,
retrieval_model: formValuesToRetrievalModel(retrievalSettings),
});
@@ -167,8 +156,9 @@ export function useDatasetSettings(
const fullDataset = await fetchDataset(dataset.id);
console.log('[DatasetSettings] 保存后获取完整数据:', fullDataset);
message.success('保存成功');
message.success('检索设置保存成功');
onDatasetUpdated(fullDataset);
setOriginalSettings(retrievalSettings);
setHasChanges(false);
} catch (err: any) {
console.error('保存设置失败:', err);
@@ -176,21 +166,17 @@ export function useDatasetSettings(
} finally {
setSaving(false);
}
}, [dataset, form, retrievalSettings, onDatasetUpdated]);
}, [dataset, retrievalSettings, onDatasetUpdated]);
/**
* 重置表单
* 重置检索设置
*/
const handleReset = useCallback(() => {
if (dataset) {
form.setFieldsValue({
name: dataset.name,
description: dataset.description || '',
});
setRetrievalSettings(retrievalModelToFormValues(dataset.retrieval_model_dict));
setRetrievalSettings(originalSettings);
setHasChanges(false);
}
}, [dataset, form]);
}, [dataset, originalSettings]);
return {
// 状态
@@ -199,7 +185,6 @@ export function useDatasetSettings(
retrievalSettings,
// 方法
handleValuesChange,
handleSave,
handleReset,
updateRetrievalSettings,