重构: tool_registry拆分及多批改进

This commit is contained in:
2026-06-19 00:10:14 +08:00
parent a2871a66e0
commit 60b01d03ee
33 changed files with 703 additions and 247 deletions

View File

@@ -96,14 +96,14 @@
<div class="detail-actions" v-if="!editing">
<button class="btn btn-ghost btn-sm" @click="startEdit">{{ $t('knowledge.edit') }}</button>
<template v-if="topTab === 'inbox'">
<button class="btn btn-primary btn-sm" @click="publishCurrent">{{ $t('knowledge.publish') }}</button>
<button class="btn btn-ghost btn-sm" @click="rejectCurrent">{{ $t('knowledge.reject') }}</button>
<button class="btn btn-primary btn-sm" :disabled="submitting" @click="publishCurrent">{{ $t('knowledge.publish') }}</button>
<button class="btn btn-ghost btn-sm" :disabled="submitting" @click="rejectCurrent">{{ $t('knowledge.reject') }}</button>
</template>
<button v-else class="btn btn-ghost btn-sm" @click="archiveCurrent">{{ $t('knowledge.archive') }}</button>
<button v-else class="btn btn-ghost btn-sm" :disabled="submitting" @click="archiveCurrent">{{ $t('knowledge.archive') }}</button>
</div>
<div class="detail-actions" v-else>
<button class="btn btn-ghost btn-sm" @click="cancelEdit">{{ $t('common.cancel') }}</button>
<button class="btn btn-primary btn-sm" @click="saveEdit" :disabled="!editForm.title.trim()">{{ $t('common.save') }}</button>
<button class="btn btn-primary btn-sm" @click="saveEdit" :disabled="submitting || !editForm.title.trim()">{{ $t('common.save') }}</button>
</div>
</div>
@@ -230,7 +230,7 @@
</div>
<div class="modal-actions">
<button class="btn btn-ghost" @click="closeCreateModal">{{ $t('common.cancel') }}</button>
<button class="btn btn-primary" @click="submitCreate" :disabled="!form.title.trim()">{{ $t('knowledge.create') }}</button>
<button class="btn btn-primary" @click="submitCreate" :disabled="submitting || !form.title.trim()">{{ $t('knowledge.create') }}</button>
</div>
</div>
</div>
@@ -349,6 +349,9 @@ watch(listItems, items => {
const editing = ref(false)
const editForm = ref({ title: '', content: '', tagsInput: '', confidence: '' })
// 异步操作禁用态(IPC 期间防双击重复提交):saveEdit/publishCurrent/rejectCurrent/archiveCurrent/submitCreate 共用
const submitting = ref(false)
function startEdit() {
if (!detail.value) return
const k = detail.value.knowledge
@@ -367,38 +370,58 @@ function cancelEdit() {
async function saveEdit() {
if (!detail.value || !editForm.value.title.trim()) return
const tags = editForm.value.tagsInput.split(',').map(t => t.trim()).filter(Boolean)
await store.update(detail.value.knowledge.id, {
title: editForm.value.title.trim(),
content: editForm.value.content,
tags: JSON.stringify(tags),
confidence: editForm.value.confidence, // 空串=清空(后端映射 None),非 undefined
})
editing.value = false
// 重新拉详情
await selectKnowledge(detail.value.knowledge.id)
submitting.value = true
try {
const tags = editForm.value.tagsInput.split(',').map(t => t.trim()).filter(Boolean)
await store.update(detail.value.knowledge.id, {
title: editForm.value.title.trim(),
content: editForm.value.content,
tags: JSON.stringify(tags),
confidence: editForm.value.confidence, // 空串=清空(后端映射 None),非 undefined
})
editing.value = false
// 重新拉详情
await selectKnowledge(detail.value.knowledge.id)
} finally {
submitting.value = false
}
}
// ===== 审核操作(收件箱) =====
async function publishCurrent() {
if (!detail.value) return
await store.updateStatus(detail.value.knowledge.id, 'published')
selectedId.value = null
detail.value = null
submitting.value = true
try {
await store.updateStatus(detail.value.knowledge.id, 'published')
selectedId.value = null
detail.value = null
} finally {
submitting.value = false
}
}
async function rejectCurrent() {
if (!detail.value) return
await store.archive(detail.value.knowledge.id)
selectedId.value = null
detail.value = null
submitting.value = true
try {
await store.archive(detail.value.knowledge.id)
selectedId.value = null
detail.value = null
} finally {
submitting.value = false
}
}
async function archiveCurrent() {
if (!detail.value) return
await store.archive(detail.value.knowledge.id)
selectedId.value = null
detail.value = null
submitting.value = true
try {
await store.archive(detail.value.knowledge.id)
selectedId.value = null
detail.value = null
} finally {
submitting.value = false
}
}
// ===== 新增对话框 =====
@@ -413,16 +436,21 @@ function closeCreateModal() {
showCreateModal.value = false
}
async function submitCreate() {
const tags = form.value.tagsInput.split(',').map(t => t.trim()).filter(Boolean)
await store.create({
kind: form.value.kind,
title: form.value.title.trim(),
content: form.value.content.trim(),
tags: JSON.stringify(tags),
confidence: form.value.confidence || undefined,
})
showCreateModal.value = false
switchTopTab('inbox')
submitting.value = true
try {
const tags = form.value.tagsInput.split(',').map(t => t.trim()).filter(Boolean)
await store.create({
kind: form.value.kind,
title: form.value.title.trim(),
content: form.value.content.trim(),
tags: JSON.stringify(tags),
confidence: form.value.confidence || undefined,
})
showCreateModal.value = false
switchTopTab('inbox')
} finally {
submitting.value = false
}
}
// ===== 事件解析辅助 =====