refactor: 优化组件和API的空值处理逻辑

- 在KnowledgeGraphSection和QuerySection组件中添加事件声明
- 移除mindmap_router和knowledge_router中不必要的404异常抛出
- 在SearchConfigModal中增加databaseId为空时的处理逻辑
- 在KnowledgeBaseCard中优化描述显示和样式调整
This commit is contained in:
Wenjie Zhang 2025-12-10 19:42:58 +08:00
parent 6f630782e1
commit 19cb293024
6 changed files with 35 additions and 12 deletions

View File

@ -1132,9 +1132,6 @@ async def get_sample_questions(db_id: str, current_user: User = Depends(get_admi
db_meta = knowledge_base.global_databases_meta[db_id] db_meta = knowledge_base.global_databases_meta[db_id]
questions = db_meta.get("sample_questions", []) questions = db_meta.get("sample_questions", [])
if not questions:
raise HTTPException(status_code=404, detail="该知识库还没有生成测试问题")
return { return {
"message": "success", "message": "success",
"questions": questions, "questions": questions,

View File

@ -347,9 +347,6 @@ async def get_database_mindmap(db_id: str, current_user: User = Depends(get_admi
db_meta = knowledge_base.global_databases_meta[db_id] db_meta = knowledge_base.global_databases_meta[db_id]
mindmap_data = db_meta.get("mindmap") mindmap_data = db_meta.get("mindmap")
if not mindmap_data:
raise HTTPException(status_code=404, detail="该知识库还没有生成思维导图")
return { return {
"message": "success", "message": "success",
"mindmap": mindmap_data, "mindmap": mindmap_data,

View File

@ -5,6 +5,7 @@
<div class="header-left"> <div class="header-left">
<a-button <a-button
@click="backToDatabase" @click="backToDatabase"
class="back-button"
shape="circle" shape="circle"
:icon="h(LeftOutlined)" :icon="h(LeftOutlined)"
type="text" type="text"
@ -33,8 +34,8 @@
<!-- 卡片内容 --> <!-- 卡片内容 -->
<div class="card-content"> <div class="card-content">
<!-- 描述文本 --> <!-- 描述文本 -->
<div class="description" v-if="database.description"> <div class="description">
<p class="description-text">{{ database.description }}</p> <p class="description-text">{{ database.description || '暂无描述' }}</p>
</div> </div>
<!-- Tags --> <!-- Tags -->
@ -66,7 +67,7 @@
<a-form-item label="知识库描述" name="description"> <a-form-item label="知识库描述" name="description">
<a-textarea v-model:value="editForm.description" placeholder="请输入知识库描述" :rows="4" /> <a-textarea v-model:value="editForm.description" placeholder="请输入知识库描述" :rows="4" />
</a-form-item> </a-form-item>
<a-form-item label="自动生成问题" name="auto_generate_questions"> <a-form-item label="自动生成问题" name="auto_generate_questions">
<a-switch v-model:checked="editForm.auto_generate_questions" checked-children="开启" un-checked-children="关闭" /> <a-switch v-model:checked="editForm.auto_generate_questions" checked-children="开启" un-checked-children="关闭" />
<span style="margin-left: 8px; font-size: 12px; color: var(--gray-500);">上传文件后自动生成测试问题</span> <span style="margin-left: 8px; font-size: 12px; color: var(--gray-500);">上传文件后自动生成测试问题</span>
@ -165,7 +166,7 @@ const showEditModal = () => {
editForm.name = database.value.name || ''; editForm.name = database.value.name || '';
editForm.description = database.value.description || ''; editForm.description = database.value.description || '';
editForm.auto_generate_questions = database.value.additional_params?.auto_generate_questions || false; editForm.auto_generate_questions = database.value.additional_params?.auto_generate_questions || false;
// LightRAG LLM // LightRAG LLM
if (database.value.kb_type === 'lightrag') { if (database.value.kb_type === 'lightrag') {
const llmInfo = database.value.llm_info || {}; const llmInfo = database.value.llm_info || {};
@ -244,9 +245,14 @@ const deleteDatabase = () => {
.header-left { .header-left {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 8px; gap: 4px;
flex: 1; flex: 1;
min-width: 0; min-width: 0;
button.back-button {
margin-left: -5px;
font-size: 10px;
}
} }
.card-title { .card-title {
@ -267,10 +273,12 @@ const deleteDatabase = () => {
flex-shrink: 0; flex-shrink: 0;
button { button {
color: var(--gray-500);
height: 100%; height: 100%;
} }
button:hover { button:hover {
color: var(--gray-700);
background-color: var(--gray-100); background-color: var(--gray-100);
} }
} }

View File

@ -95,6 +95,9 @@ const props = defineProps({
}, },
}); });
//
const emit = defineEmits(['toggleVisible']);
const store = useDatabaseStore(); const store = useDatabaseStore();
const databaseId = computed(() => store.databaseId); const databaseId = computed(() => store.databaseId);

View File

@ -183,6 +183,9 @@ const props = defineProps({
}, },
}); });
//
const emit = defineEmits(['toggleVisible']);
const searchLoading = computed(() => store.state.searchLoading); const searchLoading = computed(() => store.state.searchLoading);
const queryResult = ref(''); const queryResult = ref('');
const showRawData = ref(true); const showRawData = ref(true);

View File

@ -83,7 +83,7 @@ const props = defineProps({
}, },
databaseId: { databaseId: {
type: String, type: String,
required: true default: ''
} }
}); });
@ -129,6 +129,13 @@ const loadQueryParams = async () => {
loading.value = true; loading.value = true;
error.value = ''; error.value = '';
// databaseId
if (!props.databaseId) {
queryParams.value = [];
loading.value = false;
return;
}
const response = await queryApi.getKnowledgeBaseQueryParams(props.databaseId); const response = await queryApi.getKnowledgeBaseQueryParams(props.databaseId);
queryParams.value = response.params?.options || []; queryParams.value = response.params?.options || [];
@ -163,6 +170,8 @@ const loadQueryParams = async () => {
// //
const loadSavedConfig = () => { const loadSavedConfig = () => {
if (!props.databaseId) return;
const saved = localStorage.getItem(`search-config-${props.databaseId}`); const saved = localStorage.getItem(`search-config-${props.databaseId}`);
if (saved) { if (saved) {
try { try {
@ -201,6 +210,12 @@ const resetToDefaults = () => {
// //
const handleSave = async () => { const handleSave = async () => {
// databaseId
if (!props.databaseId) {
message.error('无法保存配置缺少知识库ID');
return;
}
// include_distances true // include_distances true
meta['include_distances'] = true; meta['include_distances'] = true;