diff --git a/src/views/ops/pages/kb/items/index.vue b/src/views/ops/pages/kb/items/index.vue index f282149..99346f4 100644 --- a/src/views/ops/pages/kb/items/index.vue +++ b/src/views/ops/pages/kb/items/index.vue @@ -540,14 +540,25 @@ function confirmDelete() { async function toggleFavorite() { if (!selected.value || favoriteLoading.value) return + const documentID = selected.value.id + const wasFavorited = selected.value.is_favorited + const listContext = listSequence + const readyListContext = readyListSequence + const detailContext = detailSequence + const isCurrentContext = () => + selected.value?.id === documentID && + listSequence === listContext && + readyListSequence === readyListContext && + detailSequence === detailContext favoriteLoading.value = true try { - const reply = selected.value.is_favorited ? await unfavoriteDocument(selected.value.id) : await favoriteDocument(selected.value.id) + const reply = wasFavorited ? await unfavoriteDocument(documentID) : await favoriteDocument(documentID) if (reply.code !== 0) throw new Error(reply.message || '收藏操作失败') - selected.value = { ...selected.value, is_favorited: !selected.value.is_favorited } - Message.success(selected.value.is_favorited ? '已收藏' : '已取消收藏') + if (!isCurrentContext() || !selected.value) return + selected.value = { ...selected.value, is_favorited: !wasFavorited } + Message.success(wasFavorited ? '已取消收藏' : '已收藏') } catch (error) { - showRequestError(error, '收藏操作失败') + if (isCurrentContext()) showRequestError(error, '收藏操作失败') } finally { favoriteLoading.value = false }